[*] Binary protection state of libsqlite3.so.0.8.6
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function mmap tear down of libsqlite3.so.0.8.6
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x41d4c */
| #include <stdint.h>
|
; (fcn) fcn.00041d4c () | void fcn_00041d4c (int16_t arg_80h, int16_t arg_84h, int16_t arg_88h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h_2;
| int16_t var_2ch_2;
| int16_t var_30h;
| int16_t var_34h_2;
| int16_t var_38h;
| int16_t var_3ch_2;
| int16_t var_40h_2;
| int16_t var_44h_2;
| int16_t var_48h_2;
| int32_t var_48h;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00041d4c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00041d50 mov r5, r1 | r5 = r1;
0x00041d52 ldr r1, [pc, 0x2f0] |
0x00041d54 sub sp, 0x5c |
0x00041d56 mov r4, r3 | r4 = r3;
0x00041d58 mov r8, r0 | r8 = r0;
0x00041d5a ldr r3, [pc, 0x2ec] | r3 = *(0x4204a);
0x00041d5c adds r7, r5, r2 | r7 = r5 + r2;
0x00041d5e ldr r6, [sp, 0x80] | r6 = *(arg_80h);
0x00041d60 add r1, pc | r1 = 0x83daa;
0x00041d62 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00041d66 ldr r3, [r1, r3] |
0x00041d68 adds r0, r4, r6 | r0 = r4 + r6;
0x00041d6a asrs r1, r6, 0x1f | r1 = r6 >> 0x1f;
0x00041d6c ldr r3, [r3] | r3 = *(0x83daa);
0x00041d6e str r3, [sp, 0x54] | var_54h = r3;
0x00041d70 mov.w r3, 0 | r3 = 0;
0x00041d74 str r0, [sp, 4] | var_4h = r0;
0x00041d76 adds r3, r2, r6 | r3 = r2 + r6;
0x00041d78 mov.w r6, 0 | r6 = 0;
0x00041d7c adc.w r1, r1, r2, asr 31 | __asm ("adc.w r1, r1, r2, asr 31");
0x00041d80 adds.w r0, r3, 0x11 | r0 = r3 + 0x11;
0x00041d84 ldr r2, [sp, 0x88] | r2 = *(arg_88h);
0x00041d86 ldr r3, [sp, 0x84] | r3 = *(arg_84h);
0x00041d88 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00041d8c vstr d16, [sp, 0x38] | __asm ("vstr d16, [sp, 0x38]");
0x00041d90 vstr d16, [sp, 0x40] | __asm ("vstr d16, [sp, 0x40]");
0x00041d94 str r6, [r3] | *(r3) = r6;
0x00041d96 str r6, [r2] | *(r2) = r6;
0x00041d98 strd r5, r4, [sp, 0x2c] | __asm ("strd r5, r4, [var_2ch_2]");
0x00041d9c str r7, [sp, 0xc] | var_ch = r7;
0x00041d9e str r3, [sp, 0x1c] | var_1ch = r3;
0x00041da0 str r2, [sp, 0x20] | var_20h = r2;
0x00041da2 blx 0x8240 | r0 = fcn_00008240 ();
0x00041da6 cmp r0, 0 |
| if (r0 == 0) {
0x00041da8 beq.w 0x4203c | goto label_12;
| }
0x00041dac cmp r5, r7 |
0x00041dae mov fp, r0 |
0x00041db0 str r0, [sp, 0x34] | var_34h_2 = r0;
0x00041db2 it hs |
| if (r5 < r7) {
0x00041db4 strhs r6, [sp, 0x2c] | var_2ch_2 = r6;
| }
| if (r5 <= r7) {
0x00041db6 blo.w 0x42026 | goto label_13;
| }
| label_10:
0x00041dba ldr r3, [sp, 4] | r3 = var_4h;
0x00041dbc cmp r4, r3 |
| if (r4 <= r3) {
0x00041dbe blo.w 0x42010 | goto label_14;
| }
0x00041dc2 movs r4, 0 | r4 = 0;
0x00041dc4 str r4, [sp, 0x30] | var_30h = r4;
| label_9:
0x00041dc6 cmp.w r8, 0 |
0x00041dca ldr r5, [sp, 0x2c] | r5 = var_2ch_2;
0x00041dcc ite ne |
| if (r8 == 0) {
0x00041dce movne r3, -1 | r3 = -1;
| }
| if (r8 == 0) {
0x00041dd2 movs r3, 1 | r3 = 1;
| }
0x00041dd4 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00041dd6 rsbs r3, r3, 0 | r3 -= ;
0x00041dd8 str r3, [sp, 0x18] | var_18h_2 = r3;
0x00041dda add r3, sp, 0x40 | r3 += var_40h_2;
0x00041ddc mov.w sl, 0 | sl = 0;
0x00041de0 str r3, [sp, 8] | var_8h = r3;
0x00041de2 add r3, sp, 0x38 | r3 += var_38h;
0x00041de4 mov r6, sl | r6 = sl;
0x00041de6 mov r7, sl | r7 = sl;
0x00041de8 add.w sb, sp, 0x30 | sb += var_30h;
0x00041dec str r3, [sp, 0x10] | var_10h_2 = r3;
0x00041dee str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h_2]");
0x00041df2 cmp r5, 0 |
| if (r5 == 0) {
0x00041df4 beq 0x41ea0 | goto label_15;
| }
| label_0:
0x00041df6 ldrd lr, r3, [sp, 0x3c] | __asm ("ldrd lr, r3, [var_40h_2]");
0x00041dfa eor sl, sl, 1 | sl ^= 1;
0x00041dfe ldr.w ip, [sp, 0x38] | ip = var_38h;
0x00041e02 cmp.w r8, 0 |
0x00041e06 it eq |
| if (r8 != 0) {
0x00041e08 orreq sl, sl, 1 | sl |= 1;
| }
0x00041e0c ldr r2, [sp, 0x44] | r2 = var_44h_2;
0x00041e0e mov r1, r6 | r1 = r6;
0x00041e10 mov r0, r7 | r0 = r7;
0x00041e12 cmp r3, ip |
0x00041e14 sbcs.w r6, r2, lr | __asm ("sbcs.w r6, r2, lr");
| if (r3 >= ip) {
0x00041e18 bge.w 0x41f40 | goto label_16;
| }
0x00041e1c cmp r4, 0 |
| if (r4 == 0) {
0x00041e1e beq 0x41ed2 | goto label_5;
| }
0x00041e20 ldr.w fp, [sp, 0x14] | fp = var_14h_2;
0x00041e24 mov r6, r3 | r6 = r3;
0x00041e26 mov r7, r2 | r7 = r2;
| label_6:
0x00041e28 cmp.w fp, -1 |
| if (fp == -1) {
0x00041e2c beq 0x41ed2 | goto label_5;
| }
0x00041e2e cmp.w sl, 0 |
| if (sl == 0) {
0x00041e32 beq 0x41ec6 | goto label_17;
| }
| label_1:
0x00041e34 subs r1, r3, r1 | r1 = r3 - r1;
0x00041e36 sbc.w r2, r2, r0 | __asm ("sbc.w r2, r2, r0");
| label_2:
0x00041e3a ldr r3, [sp, 0x34] | r3 = var_34h_2;
| do {
0x00041e3c lsr.w ip, r1, 7 |
0x00041e40 orn r0, r1, 0x7f | r0 = r1 | 0x7f;
| r0 = ~r0;
0x00041e44 uxtb.w lr, r1 | lr = (int8_t) r1;
0x00041e48 orr.w r1, ip, r2, lsl 25 | r1 = ip | (r2 << 25);
0x00041e4c lsrs r2, r2, 7 | r2 >>= 7;
0x00041e4e mov ip, r3 |
0x00041e50 strb r0, [r3], 1 | *(r3) = r0;
| r3++;
0x00041e54 orrs.w r0, r1, r2 | r0 = r1 | r2;
0x00041e58 bne 0x41e3c |
| } while (r0 != r1);
0x00041e5a strb.w lr, [ip] |
0x00041e5e mov sl, r4 | sl = r4;
0x00041e60 ldrb r2, [r4] | r2 = *(r4);
| if (r2 == 0) {
0x00041e62 cbz r2, 0x41e70 | goto label_18;
| }
| do {
0x00041e64 and r1, r2, 0x80 | r1 = r2 & 0x80;
0x00041e68 ldrb r2, [sl, 1]! | r2 = *((sl += 1));
0x00041e6c orrs r1, r2 | r1 |= r2;
0x00041e6e bne 0x41e64 |
| } while (r1 != r2);
| label_18:
0x00041e70 add.w sl, sl, 1 | sl++;
0x00041e74 mov r1, r4 | r1 = r4;
0x00041e76 sub.w r4, sl, r4 | r4 = sl - r4;
0x00041e7a mov r0, r3 | r0 = r3;
0x00041e7c mov r2, r4 | r2 = r4;
0x00041e7e blx 0x8610 | r0 = fcn_00008610 ();
0x00041e82 mov r3, r0 | r3 = r0;
0x00041e84 ldr r1, [sp, 4] | r1 = var_4h;
0x00041e86 add r3, r4 | r3 += r4;
0x00041e88 mov r2, r8 | r2 = r8;
0x00041e8a strd sl, r3, [sp, 0x30] | __asm ("strd sl, r3, [var_34h_2]");
0x00041e8e mov r0, sb | r0 = sb;
0x00041e90 ldr r3, [sp, 8] | r3 = var_8h;
0x00041e92 bl 0xb7c8 | fcn_0000b7c8 (r0, r1, r2, r3);
0x00041e96 ldr r4, [sp, 0x30] | r4 = var_30h;
| label_3:
0x00041e98 mov.w sl, 1 | sl = 1;
0x00041e9c cmp r5, 0 |
| if (r5 != 0) {
0x00041e9e bne 0x41df6 | goto label_0;
| }
| label_15:
0x00041ea0 cmp r4, 0 |
| if (r4 == 0) {
0x00041ea2 beq.w 0x41fc8 | goto label_19;
| }
0x00041ea6 ldrd r3, r2, [sp, 0x40] | __asm ("ldrd r3, r2, [var_40h_2]");
0x00041eaa eor sl, sl, 1 | sl ^= 1;
0x00041eae cmp.w r8, 0 |
0x00041eb2 it eq |
| if (r8 != 0) {
0x00041eb4 orreq sl, sl, 1 | sl |= 1;
| }
0x00041eb8 mov r1, r6 | r1 = r6;
0x00041eba mov r0, r7 | r0 = r7;
0x00041ebc mov r6, r3 | r6 = r3;
0x00041ebe mov r7, r2 | r7 = r2;
0x00041ec0 cmp.w sl, 0 |
| if (sl != 0) {
0x00041ec4 bne 0x41e34 | goto label_1;
| }
| label_17:
0x00041ec6 subs r1, r1, r3 | r1 -= r3;
0x00041ec8 sbc.w r2, r0, r2 | __asm ("sbc.w r2, r0, r2");
0x00041ecc b 0x41e3a | goto label_2;
| label_4:
0x00041ece cmp r4, 0 |
| if (r4 != 0) {
0x00041ed0 bne 0x41f56 | goto label_20;
| }
| label_5:
0x00041ed2 cmp.w sl, 0 |
| if (sl == 0) {
0x00041ed6 beq 0x41fb4 | goto label_21;
| }
0x00041ed8 subs.w r1, ip, r1 | r1 = ip - r1;
0x00041edc sbc.w r0, lr, r0 | __asm ("sbc.w r0, lr, r0");
| label_7:
0x00041ee0 ldr r3, [sp, 0x34] | r3 = var_34h_2;
| do {
0x00041ee2 lsrs r6, r1, 7 | r6 = r1 >> 7;
0x00041ee4 orn r2, r1, 0x7f | r2 = r1 | 0x7f;
| r2 = ~r2;
0x00041ee8 uxtb r7, r1 | r7 = (int8_t) r1;
0x00041eea orr.w r1, r6, r0, lsl 25 | r1 = r6 | (r0 << 25);
0x00041eec str r0, [r0, 0x14] | *((r0 + 0x14)) = r0;
0x00041eee lsrs r0, r0, 7 | r0 >>= 7;
0x00041ef0 mov r6, r3 | r6 = r3;
0x00041ef2 strb r2, [r3], 1 | *(r3) = r2;
| r3++;
0x00041ef6 orrs.w r2, r1, r0 | r2 = r1 | r0;
0x00041efa bne 0x41ee2 |
| } while (r2 != r1);
0x00041efc strb r7, [r6] | *(r6) = r7;
0x00041efe mov sl, r5 | sl = r5;
0x00041f00 ldrb r2, [r5] | r2 = *(r5);
| if (r2 == 0) {
0x00041f02 cbz r2, 0x41f10 | goto label_22;
| }
| do {
0x00041f04 and r1, r2, 0x80 | r1 = r2 & 0x80;
0x00041f08 ldrb r2, [sl, 1]! | r2 = *((sl += 1));
0x00041f0c orrs r1, r2 | r1 |= r2;
0x00041f0e bne 0x41f04 |
| } while (r1 != r2);
| label_22:
0x00041f10 add.w sl, sl, 1 | sl++;
0x00041f14 mov r1, r5 | r1 = r5;
0x00041f16 sub.w fp, sl, r5 |
0x00041f1a mov r0, r3 | r0 = r3;
0x00041f1c mov r2, fp | r2 = fp;
0x00041f1e mov r6, ip | r6 = ip;
0x00041f20 mov r7, lr | r7 = lr;
0x00041f22 blx 0x8610 | r0 = fcn_00008610 ();
0x00041f26 mov r3, r0 | r3 = r0;
0x00041f28 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00041f2a add r3, fp | r3 += fp;
0x00041f2c mov r2, r8 | r2 = r8;
0x00041f2e str r3, [sp, 0x34] | var_34h_2 = r3;
0x00041f30 add r0, sp, 0x2c | r0 += var_2ch_2;
0x00041f32 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00041f34 str.w sl, [sp, 0x2c] | __asm ("str.w sl, [var_2ch_2]");
0x00041f38 bl 0xb7c8 | fcn_0000b7c8 (r0, r1, r2, r3);
0x00041f3c ldr r5, [sp, 0x2c] | r5 = var_2ch_2;
0x00041f3e b 0x41e98 | goto label_3;
| label_16:
0x00041f40 cmp lr, r2 |
0x00041f42 it eq |
| if (lr != r2) {
0x00041f44 cmpeq ip, r3 | __asm ("cmpeq ip, r3");
| goto label_23;
| }
| if (lr == r2) {
| label_23:
0x00041f46 beq 0x41ece | goto label_4;
| }
0x00041f48 cmp r4, 0 |
| if (r4 == 0) {
0x00041f4a beq 0x41ed2 | goto label_5;
| }
0x00041f4c ldr.w fp, [sp, 0x18] | fp = var_18h_2;
0x00041f50 mov r6, r3 | r6 = r3;
0x00041f52 mov r7, r2 | r7 = r2;
0x00041f54 b 0x41e28 | goto label_6;
| label_20:
0x00041f56 mov r6, ip | r6 = ip;
0x00041f58 mov r7, lr | r7 = lr;
0x00041f5a cmp.w sl, 0 |
| if (sl == 0) {
0x00041f5e beq 0x41fbe | goto label_24;
| }
0x00041f60 subs.w r1, ip, r1 | r1 = ip - r1;
0x00041f64 sbc.w r0, lr, r0 | __asm ("sbc.w r0, lr, r0");
| label_8:
0x00041f68 ldr r3, [sp, 0x34] | r3 = var_34h_2;
| do {
0x00041f6a lsrs r4, r1, 7 | r4 = r1 >> 7;
0x00041f6c orn r2, r1, 0x7f | r2 = r1 | 0x7f;
| r2 = ~r2;
0x00041f70 uxtb r5, r1 | r5 = (int8_t) r1;
0x00041f72 orr.w r1, r4, r0, lsl 25 | r1 = r4 | (r0 << 25);
0x00041f76 lsrs r0, r0, 7 | r0 >>= 7;
0x00041f78 mov r4, r3 | r4 = r3;
0x00041f7a strb r2, [r3], 1 | *(r3) = r2;
| r3++;
0x00041f7e orrs.w r2, r1, r0 | r2 = r1 | r0;
0x00041f82 bne 0x41f6a |
| } while (r2 != r1);
0x00041f84 strb r5, [r4] | *(r4) = r5;
0x00041f86 add r4, sp, 0x2c | r4 += var_2ch_2;
0x00041f88 mov r2, sb | r2 = sb;
0x00041f8a mov r1, r4 | r1 = r4;
0x00041f8c add r0, sp, 0x34 | r0 += var_34h_2;
0x00041f8e str r3, [sp, 0x34] | var_34h_2 = r3;
0x00041f90 bl 0x15184 | r0 = fcn_00015184 (r0, r1, r2, r3);
| if (r0 != 0) {
0x00041f94 cbnz r0, 0x41ffc | goto label_25;
| }
0x00041f96 mov r0, r4 | r0 = r4;
0x00041f98 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00041f9a ldr r1, [sp, 0xc] | r1 = var_ch;
0x00041f9c mov r2, r8 | r2 = r8;
0x00041f9e bl 0xb7c8 | fcn_0000b7c8 (r0, r1, r2, r3);
0x00041fa2 ldr r3, [sp, 8] | r3 = var_8h;
0x00041fa4 mov r2, r8 | r2 = r8;
0x00041fa6 ldr r1, [sp, 4] | r1 = var_4h;
0x00041fa8 mov r0, sb | r0 = sb;
0x00041faa bl 0xb7c8 | fcn_0000b7c8 (r0, r1, r2, r3);
0x00041fae ldrd r5, r4, [sp, 0x2c] | __asm ("ldrd r5, r4, [var_2ch_2]");
0x00041fb2 b 0x41e98 | goto label_3;
| label_21:
0x00041fb4 subs.w r1, r1, ip | r1 -= ip;
0x00041fb8 sbc.w r0, r0, lr | __asm ("sbc.w r0, r0, lr");
0x00041fbc b 0x41ee0 | goto label_7;
| label_24:
0x00041fbe subs.w r1, r1, ip | r1 -= ip;
0x00041fc2 sbc.w r0, r0, lr | __asm ("sbc.w r0, r0, lr");
0x00041fc6 b 0x41f68 | goto label_8;
| label_19:
0x00041fc8 ldr r3, [sp, 0x34] | r3 = var_34h_2;
0x00041fca ldr.w fp, [sp, 0x24] | fp = var_24h_2;
0x00041fce str r4, [r3] | *(r3) = r4;
0x00041fd0 str r4, [r3, 4] | *((r3 + 4)) = r4;
0x00041fd2 sub.w r3, r3, fp | r3 -= fp;
| do {
0x00041fd6 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00041fd8 str.w fp, [r2] | __asm ("str.w fp, [r2]");
0x00041fdc ldr r2, [sp, 0x20] | r2 = var_20h;
0x00041fde str r3, [r2] | *(r2) = r3;
| label_11:
0x00041fe0 ldr r2, [pc, 0x68] |
0x00041fe2 ldr r3, [pc, 0x64] | r3 = *(0x4204a);
0x00041fe4 add r2, pc | r2 = 0x84034;
0x00041fe6 ldr r3, [r2, r3] | r3 = *(0x84034);
0x00041fe8 ldr r2, [r3] | r2 = *(0x84034);
0x00041fea ldr r3, [sp, 0x54] | r3 = var_54h;
0x00041fec eors r2, r3 | r2 ^= r3;
0x00041fee mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00041ff2 bne 0x42040 | goto label_26;
| }
0x00041ff4 mov r0, r4 | r0 = r4;
0x00041ff6 add sp, 0x5c |
0x00041ff8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_25:
0x00041ffc ldr.w fp, [sp, 0x24] | fp = var_24h_2;
0x00042000 mov r4, r0 | r4 = r0;
0x00042002 mov r0, fp | r0 = fp;
0x00042004 mov.w fp, 0 |
0x00042008 blx 0x8404 | fcn_00008404 ();
0x0004200c mov r3, fp | r3 = fp;
0x0004200e b 0x41fd6 |
| } while (1);
| label_14:
0x00042010 mov r0, r4 | r0 = r4;
0x00042012 add r1, sp, 0x48 | r1 += var_48h_2;
0x00042014 bl 0xb604 | fcn_0000b604 (r0, r1);
0x00042018 ldrd r2, r3, [sp, 0x48] | __asm ("ldrd r2, r3, [var_48h_2]");
0x0004201c add r4, r0 | r4 += r0;
0x0004201e str r4, [sp, 0x30] | var_30h = r4;
0x00042020 strd r2, r3, [sp, 0x40] | __asm ("strd r2, r3, [var_40h_2]");
0x00042024 b 0x41dc6 | goto label_9;
| label_13:
0x00042026 mov r0, r5 | r0 = r5;
0x00042028 add r1, sp, 0x48 | r1 += var_48h_2;
0x0004202a bl 0xb604 | fcn_0000b604 (r0, r1);
0x0004202e ldrd r2, r3, [sp, 0x48] | __asm ("ldrd r2, r3, [var_48h_2]");
0x00042032 add r5, r0 | r5 += r0;
0x00042034 str r5, [sp, 0x2c] | var_2ch_2 = r5;
0x00042036 strd r2, r3, [sp, 0x38] | __asm ("strd r2, r3, [var_38h]");
0x0004203a b 0x41dba | goto label_10;
| label_12:
0x0004203c movs r4, 7 | r4 = 7;
0x0004203e b 0x41fe0 | goto label_11;
| label_26:
0x00042040 blx 0x883c | fcn_0000883c ();
0x00042044 ldr r0, [r7, 0x70] | r0 = *((r7 + 0x70));
0x00042046 movs r0, r1 | r0 = r1;
0x00042048 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0004204a movs r0, r0 |
0x0004204c ldr r4, [r6, 0x48] | r4 = *((r6 + 0x48));
0x0004204e movs r0, r1 | r0 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x42050 */
| #include <stdint.h>
|
; (fcn) fcn.00042050 () | void fcn_00042050 (int16_t arg_ah, int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_34h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_50h;
| int16_t var_58h;
| int16_t var_64h;
| int16_t var_90h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00042050 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00042054 mov r6, r1 | r6 = r1;
0x00042056 ldr r1, [pc, 0x294] |
0x00042058 mov r8, r2 | r8 = r2;
0x0004205a sub sp, 0x6c |
0x0004205c mov r7, r3 | r7 = r3;
0x0004205e ldr r2, [pc, 0x290] | r2 = *(0x422f2);
0x00042060 add r1, pc | r1 = 0x84352;
0x00042062 ldr.w fp, [sp, 0x90] | fp = var_90h;
0x00042066 ldr r2, [r1, r2] |
0x00042068 ldr r2, [r2] | r2 = *(0x84352);
0x0004206a str r2, [sp, 0x64] | var_64h = r2;
0x0004206c mov.w r2, 0 | r2 = 0;
0x00042070 cmp r3, 0 |
| if (r3 == 0) {
0x00042072 beq 0x42170 | goto label_10;
| }
0x00042074 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x00042076 cmp r3, 0 |
| if (r3 < 0) {
0x00042078 blt 0x42104 | goto label_11;
| }
0x0004207a ldr.w sl, [r6] | sl = *(r6);
0x0004207e cmp.w sl, 0 |
| if (sl == 0) {
0x00042082 beq.w 0x422d8 | goto label_12;
| }
0x00042086 cmp r3, r8 |
0x00042088 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0004208a itt lt |
| if (r3 >= r8) {
0x0004208c sublt r3, r8, r3 | r3 = r8 - r3;
| }
| if (r3 < r8) {
0x00042090 str r3, [sp, 0x1c] | var_1ch_2 = r3;
| }
| if (r3 >= r8) {
0x00042092 blt 0x420a6 |
0x00042094 mov r4, r2 | r4 = r2;
0x00042096 mov r1, sl | r1 = sl;
0x00042098 mov r2, fp | r2 = fp;
0x0004209a mov sl, r7 | sl = r7;
0x0004209c mov fp, r4 |
0x0004209e mov r7, r1 | r7 = r1;
0x000420a0 sub.w r3, r3, r8 | r3 -= r8;
0x000420a4 str r3, [sp, 0x1c] | var_1ch_2 = r3;
| }
0x000420a6 ldrb.w r5, [r0, 0xef] | r5 = *(var_0hxef);
0x000420aa add.w r3, sl, r2 | r3 = sl + r2;
0x000420ae vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000420b2 str r3, [sp, 0xc] | var_ch_2 = r3;
0x000420b4 add.w r3, r7, fp | r3 = r7 + fp;
0x000420b8 strd sl, r7, [sp, 0x3c] | __asm ("strd sl, r7, [sp, 0x3c]");
0x000420bc vstr d16, [sp, 0x48] | __asm ("vstr d16, [sp, 0x48]");
0x000420c0 vstr d16, [sp, 0x50] | __asm ("vstr d16, [sp, 0x50]");
0x000420c4 str r3, [sp, 0x24] | var_24h = r3;
0x000420c6 cmp r5, 0 |
| if (r5 == 0) {
0x000420c8 beq 0x42132 | goto label_13;
| }
0x000420ca asr.w r1, fp, 0x1f | r1 = fp >> 0x1f;
0x000420ce adds.w r0, fp, 0xa | r0 += arg_ah;
0x000420d2 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000420d6 blx 0x8240 | r0 = fcn_00008240 ();
0x000420da mov r4, r0 | r4 = r0;
0x000420dc cmp r0, 0 |
| if (r0 == 0) {
0x000420de beq.w 0x422e4 | goto label_14;
| }
0x000420e2 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000420e4 str r4, [sp, 0x44] | var_44h = r4;
0x000420e6 cmp sl, r3 |
| if (sl <= r3) {
0x000420e8 blo 0x4213c | goto label_15;
| }
| do {
0x000420ea movs r3, 0 | r3 = 0;
0x000420ec mov fp, r3 |
0x000420ee str r3, [sp, 0x3c] | var_3ch = r3;
| label_3:
0x000420f0 cmp r5, 0 |
| if (r5 != 0) {
0x000420f2 bne 0x42164 | goto label_16;
| }
| label_0:
0x000420f4 mov r0, sl | r0 = sl;
0x000420f6 blx 0x8404 | fcn_00008404 ();
0x000420fa ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x000420fc str r7, [r6] | *(r6) = r7;
0x000420fe str.w fp, [r6, 4] | __asm ("str.w fp, [r6, 4]");
0x00042102 b 0x4210c | goto label_1;
| label_11:
0x00042104 movs r5, 0 | r5 = 0;
0x00042106 str r7, [r6] | *(r6) = r7;
0x00042108 str.w fp, [r6, 4] | __asm ("str.w fp, [r6, 4]");
| label_1:
0x0004210c ldr r2, [pc, 0x1e4] |
0x0004210e cmp r8, r3 |
0x00042110 ldr r3, [pc, 0x1dc] | r3 = *(0x422f0);
0x00042112 it gt |
| if (r8 <= r3) {
0x00042114 strgt r8, [r6, 0x2c] | *((r6 + 0x2c)) = r8;
| }
0x00042118 add r2, pc | r2 = 0x84410;
0x0004211a ldr r3, [r2, r3] | r3 = *(0x84410);
0x0004211c ldr r2, [r3] | r2 = *(0x84410);
0x0004211e ldr r3, [sp, 0x64] | r3 = var_64h;
0x00042120 eors r2, r3 | r2 ^= r3;
0x00042122 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00042126 bne.w 0x422e8 | goto label_17;
| }
0x0004212a mov r0, r5 | r0 = r5;
0x0004212c add sp, 0x6c |
0x0004212e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x00042132 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00042134 mov r4, r7 | r4 = r7;
0x00042136 str r4, [sp, 0x44] | var_44h = r4;
0x00042138 cmp sl, r3 |
0x0004213a bhs 0x420ea |
| } while (sl >= r3);
| label_15:
0x0004213c add r1, sp, 0x58 | r1 += var_58h;
0x0004213e mov r0, sl | r0 = sl;
0x00042140 bl 0xb604 | fcn_0000b604 (r0, r1);
0x00042144 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00042146 add.w r3, sl, r0 | r3 = sl + r0;
0x0004214a vldr d16, [sp, 0x58] | __asm ("vldr d16, [sp, 0x58]");
0x0004214e str r3, [sp, 0x3c] | var_3ch = r3;
0x00042150 cmp r2, r7 |
0x00042152 it ls |
| if (r2 > r7) {
0x00042154 movls fp, r4 |
| }
0x00042156 vstr d16, [sp, 0x48] | __asm ("vstr d16, [sp, 0x48]");
| if (r2 > r7) {
0x0004215a bhi 0x42180 | goto label_18;
| }
| label_9:
0x0004215c sub.w fp, fp, r4 |
0x00042160 cmp r5, 0 |
| if (r5 == 0) {
0x00042162 beq 0x420f4 | goto label_0;
| }
| label_16:
0x00042164 mov r0, r7 | r0 = r7;
0x00042166 movs r5, 0 | r5 = 0;
0x00042168 mov r7, r4 | r7 = r4;
0x0004216a blx 0x8404 | fcn_00008404 ();
0x0004216e b 0x420f4 | goto label_0;
| label_10:
0x00042170 ldr r0, [r6] | r0 = *(r6);
0x00042172 mov r5, r3 | r5 = r3;
0x00042174 blx 0x8404 | fcn_00008404 ();
0x00042178 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0004217a strd r7, r7, [r6] | __asm ("strd r7, r7, [r6]");
0x0004217e b 0x4210c | goto label_1;
| label_18:
0x00042180 mov r0, r7 | r0 = r7;
0x00042182 str r3, [sp, 0x28] | var_28h = r3;
0x00042184 bl 0xb604 | fcn_0000b604 (r0, r1);
0x00042188 add r0, r7 | r0 += r7;
0x0004218a add r2, sp, 0x50 | r2 += var_50h;
0x0004218c str r0, [sp, 0x40] | var_40h = r0;
0x0004218e movs r3, 0 | r3 = 0;
0x00042190 ldrd r0, r1, [sp, 0x58] | __asm ("ldrd r0, r1, [var_58h]");
0x00042194 mov fp, r4 |
0x00042196 strd sl, r4, [sp, 0x2c] | __asm ("strd sl, r4, [sp, 0x2c]");
0x0004219a add.w sb, sp, 0x3c | sb += var_3ch;
0x0004219e mov sl, r2 | sl = r2;
0x000421a0 str r3, [sp, 0x20] | var_20h_2 = r3;
0x000421a2 strd r3, r3, [sp, 0x14] | __asm ("strd r3, r3, [sp, 0x14]");
0x000421a6 add r3, sp, 0x48 | r3 += var_48h;
0x000421a8 str r3, [sp, 0x10] | var_10h = r3;
0x000421aa str.w r8, [sp, 0x34] | __asm ("str.w r8, [var_34h]");
0x000421ae ldr r3, [sp, 0x28] | r3 = var_28h;
0x000421b0 ldr.w r8, [sp, 0x24] | r8 = var_24h;
0x000421b4 strd r0, r1, [sp, 0x50] | __asm ("strd r0, r1, [sp, 0x50]");
0x000421b8 str r6, [sp, 0x28] | var_28h = r6;
0x000421ba str r7, [sp, 0x24] | var_24h = r7;
| label_2:
0x000421bc ldr r2, [sp, 0x40] | r2 = var_40h;
0x000421be cmp r2, 0 |
| if (r2 == 0) {
0x000421c0 beq.w 0x422ca | goto label_19;
| }
0x000421c4 ldrd r0, r1, [sp, 0x50] | __asm ("ldrd r0, r1, [var_50h]");
0x000421c8 ldrd r4, r6, [sp, 0x48] | __asm ("ldrd r4, r6, [var_48h]");
| if (r5 == 0) {
0x000421cc cbz r5, 0x42216 | goto label_20;
| }
0x000421ce cmp r0, r4 |
0x000421d0 sbcs.w r7, r1, r6 | __asm ("sbcs.w r7, r1, r6");
| if (r0 < r4) {
0x000421d4 blt 0x42290 | goto label_21;
| }
0x000421d6 cmp r6, r1 |
0x000421d8 it eq |
| if (r6 == r1) {
0x000421da cmpeq r4, r0 | __asm ("cmpeq r4, r0");
| }
| if (r6 == r1) {
0x000421dc beq 0x422b2 | goto label_22;
| }
| label_4:
0x000421de ldrb r3, [r2] | r3 = *(r2);
| if (r3 == 0) {
0x000421e0 cbz r3, 0x421ee | goto label_23;
| }
| do {
0x000421e2 and r1, r3, 0x80 | r1 = r3 & 0x80;
0x000421e6 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x000421ea orrs r1, r3 | r1 |= r3;
0x000421ec bne 0x421e2 |
| } while (r1 != r3);
| label_23:
0x000421ee adds r2, 1 | r2++;
0x000421f0 mov r3, sl | r3 = sl;
0x000421f2 str r2, [sp, 0x40] | var_40h = r2;
0x000421f4 mov r1, r8 | r1 = r8;
0x000421f6 mov r2, r5 | r2 = r5;
0x000421f8 add r0, sp, 0x40 | r0 += var_40h;
0x000421fa bl 0xb7c8 | fcn_0000b7c8 (r0, r1, r2, r3);
| label_5:
0x000421fe ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00042200 cmp r3, 0 |
| if (r3 != 0) {
0x00042202 bne 0x421bc | goto label_2;
| }
0x00042204 ldrd sl, r4, [sp, 0x2c] | __asm ("ldrd sl, r4, [var_2ch]");
0x00042208 ldr r6, [sp, 0x28] | r6 = var_28h;
0x0004220a ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x0004220e ldr r7, [sp, 0x24] | r7 = var_24h;
0x00042210 sub.w fp, fp, r4 |
0x00042214 b 0x420f0 | goto label_3;
| label_20:
0x00042216 cmp r0, r4 |
0x00042218 sbcs.w r7, r1, r6 | __asm ("sbcs.w r7, r1, r6");
| if (r0 < r4) {
0x0004221c blt 0x421de | goto label_4;
| }
0x0004221e cmp r6, r1 |
0x00042220 it eq |
| if (r6 == r1) {
0x00042222 cmpeq r4, r0 | __asm ("cmpeq r4, r0");
| }
| if (r6 != r1) {
0x00042224 bne 0x42290 | goto label_21;
| }
| label_6:
0x00042226 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00042228 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004222a subs r3, r4, r3 | r3 = r4 - r3;
0x0004222c sbc.w r2, r6, r2 | __asm ("sbc.w r2, r6, r2");
| label_7:
0x00042230 mov r1, fp | r1 = fp;
| do {
0x00042232 lsrs r7, r3, 7 | r7 = r3 >> 7;
0x00042234 orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x00042238 uxtb.w ip, r3 | ip = (int8_t) r3;
0x0004223c orr.w r3, r7, r2, lsl 25 | r3 = r7 | (r2 << 25);
0x00042240 lsrs r2, r2, 7 | r2 >>= 7;
0x00042242 mov r7, r1 | r7 = r1;
0x00042244 strb r0, [r1], 1 | *(r1) = r0;
| r1++;
0x00042248 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x0004224c bne 0x42232 |
| } while (r0 != r3);
0x0004224e strb.w ip, [r7] | *(r7) = ip;
0x00042252 add r7, sp, 0x40 | r7 += var_40h;
0x00042254 str r1, [sp, 0x44] | var_44h = r1;
0x00042256 movs r3, 1 | r3 = 1;
0x00042258 ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x0004225a movs r2, 0 | r2 = 0;
0x0004225c add r0, sp, 0x44 | r0 += var_44h;
0x0004225e str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00042262 str r7, [sp, 4] | var_4h_2 = r7;
0x00042264 bl 0x18118 | r0 = fcn_00018118 (r0, r1, r2, r3, r4, r5);
| if (r0 == 0) {
0x00042268 cbz r0, 0x422c4 | goto label_24;
| }
0x0004226a ldr.w fp, [sp, 0x44] | fp = var_44h;
0x0004226e movs r3, 1 | r3 = 1;
0x00042270 strd r4, r6, [sp, 0x14] | __asm ("strd r4, r6, [sp, 0x14]");
0x00042274 str r3, [sp, 0x20] | var_20h_2 = r3;
| label_8:
0x00042276 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00042278 mov r2, r5 | r2 = r5;
0x0004227a ldr r1, [sp, 0xc] | r1 = var_ch_2;
0x0004227c mov r0, sb | r0 = sb;
0x0004227e bl 0xb7c8 | fcn_0000b7c8 (r0, r1, r2, r3);
0x00042282 mov r3, sl | r3 = sl;
0x00042284 mov r2, r5 | r2 = r5;
0x00042286 mov r1, r8 | r1 = r8;
0x00042288 mov r0, r7 | r0 = r7;
0x0004228a bl 0xb7c8 | fcn_0000b7c8 (r0, r1, r2, r3);
0x0004228e b 0x421fe | goto label_5;
| label_21:
0x00042290 ldrb r2, [r3] | r2 = *(r3);
| if (r2 == 0) {
0x00042292 cbz r2, 0x422a0 | goto label_25;
| }
| do {
0x00042294 and r1, r2, 0x80 | r1 = r2 & 0x80;
0x00042298 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x0004229c orrs r1, r2 | r1 |= r2;
0x0004229e bne 0x42294 |
| } while (r1 != r2);
| label_25:
0x000422a0 adds r3, 1 | r3++;
0x000422a2 ldr r1, [sp, 0xc] | r1 = var_ch_2;
0x000422a4 str r3, [sp, 0x3c] | var_3ch = r3;
0x000422a6 mov r2, r5 | r2 = r5;
0x000422a8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000422aa mov r0, sb | r0 = sb;
0x000422ac bl 0xb7c8 | fcn_0000b7c8 (r0, r1, r2, r3);
0x000422b0 b 0x421fe | goto label_5;
| label_22:
0x000422b2 ldr r3, [sp, 0x20] | r3 = var_20h_2;
0x000422b4 cmp r3, 0 |
| if (r3 == 0) {
0x000422b6 beq 0x42226 | goto label_6;
| }
0x000422b8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000422ba ldr r2, [sp, 0x18] | r2 = var_18h;
0x000422bc subs r3, r3, r4 | r3 -= r4;
0x000422be sbc.w r2, r2, r6 | __asm ("sbc.w r2, r2, r6");
0x000422c2 b 0x42230 | goto label_7;
| label_24:
0x000422c4 str.w fp, [sp, 0x44] | __asm ("str.w fp, [var_44h]");
0x000422c8 b 0x42276 | goto label_8;
| label_19:
0x000422ca ldrd sl, r4, [sp, 0x2c] | __asm ("ldrd sl, r4, [var_2ch]");
0x000422ce ldr r6, [sp, 0x28] | r6 = var_28h;
0x000422d0 ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x000422d4 ldr r7, [sp, 0x24] | r7 = var_24h;
0x000422d6 b 0x4215c | goto label_9;
| label_12:
0x000422d8 mov r0, r7 | r0 = r7;
0x000422da mov r5, sl | r5 = sl;
0x000422dc blx 0x8404 | fcn_00008404 ();
0x000422e0 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x000422e2 b 0x4210c | goto label_1;
| label_14:
0x000422e4 movs r5, 7 | r5 = 7;
0x000422e6 b 0x420f4 | goto label_0;
| label_17:
0x000422e8 blx 0x883c | fcn_0000883c ();
0x000422ec ldr r0, [r7, 0x40] | r0 = *((r7 + 0x40));
0x000422ee movs r0, r1 | r0 = r1;
0x000422f0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000422f2 movs r0, r0 |
0x000422f4 ldr r0, [r0, 0x38] | r0 = *((r0 + 0x38));
0x000422f6 movs r0, r1 | r0 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x425a8 */
| #include <stdint.h>
|
; (fcn) fcn.000425a8 () | void fcn_000425a8 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000425a8 invalid |
0x000425ac mov r6, r1 | r6 = r1;
0x000425ae lsls r4, r6, 3 | r4 = r6 << 3;
0x000425b0 mov r5, r0 | r5 = r0;
0x000425b2 movs r1, 0 | r1 = 0;
0x000425b4 mov r0, r4 | r0 = r4;
0x000425b6 blx 0x8240 | r0 = fcn_00008240 ();
0x000425ba cmp r0, 0 |
| if (r0 == 0) {
0x000425bc beq 0x42646 | goto label_3;
| }
0x000425be mov r2, r4 | r2 = r4;
0x000425c0 movs r1, 0 | r1 = 0;
0x000425c2 mov sb, r0 | sb = r0;
0x000425c4 blx 0x839c | fcn_0000839c ();
0x000425c8 ldr r0, [r5, 0x10] | r0 = *((r5 + 0x10));
0x000425ca blx 0x8404 | fcn_00008404 ();
0x000425ce ldrb r3, [r5] | r3 = *(r5);
0x000425d0 strd r6, sb, [r5, 0xc] | __asm ("strd r6, sb, [r5, 0xc]");
0x000425d4 cmp r3, 1 |
| if (r3 == 1) {
0x000425d6 beq 0x42636 | goto label_4;
| }
0x000425d8 ldr r7, [pc, 0x70] |
0x000425da add r7, pc | r7 = 0x84c2a;
| label_1:
0x000425dc ldr r4, [r5, 8] | r4 = *((r5 + 8));
0x000425de mov.w r8, 0 | r8 = 0;
0x000425e2 subs r6, 1 | r6--;
0x000425e4 str.w r8, [r5, 8] | __asm ("str.w r8, [r5, 8]");
| if (r4 != 0) {
0x000425e8 cbnz r4, 0x4260e | goto label_5;
| }
0x000425ea b 0x42640 | goto label_6;
| do {
0x000425ec ldr.w ip, [r2, 4] | ip = *((r2 + 4));
0x000425f0 strd r2, ip, [r1] | __asm ("strd r2, ip, [r1]");
0x000425f4 cmp.w ip, 0 |
| if (ip == 0) {
0x000425f8 beq 0x4263c | goto label_7;
| }
0x000425fa str.w r1, [ip] | __asm ("str.w r1, [ip]");
| label_2:
0x000425fe str r1, [r2, 4] | *((r2 + 4)) = r1;
| label_0:
0x00042600 ldr.w r2, [sb, r3, lsl 3] | offset_0 = r3 << 3;
| r2 = *((sb + offset_0));
0x00042604 adds r2, 1 | r2++;
0x00042606 str.w r2, [sb, r3, lsl 3] | __asm ("str.w r2, [sb, r3, lsl 3]");
0x0004260a str r1, [r0, 4] | *((r0 + 4)) = r1;
| if (r4 == 0) {
0x0004260c cbz r4, 0x42640 | goto label_6;
| }
| label_5:
0x0004260e ldrd r0, r1, [r4, 0xc] | __asm ("ldrd r0, r1, [r4, 0xc]");
0x00042612 blx r7 | r0 = uint32_t (*r7)(uint32_t) (r0);
0x00042614 and.w r3, r0, r6 | r3 = r0 & r6;
0x00042618 mov r1, r4 | r1 = r4;
0x0004261a add.w r0, sb, r3, lsl 3 | r0 = sb + (r3 << 3);
0x0004261e ldr r4, [r4] | r4 = *(r4);
0x00042620 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00042622 cmp r2, 0 |
0x00042624 bne 0x425ec |
| } while (r2 != 0);
0x00042626 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00042628 str r2, [r1] | *(r1) = r2;
| if (r2 != 0) {
0x0004262a cbz r2, 0x4262e |
0x0004262c str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
0x0004262e str.w r8, [r1, 4] | __asm ("str.w r8, [r1, 4]");
0x00042632 str r1, [r5, 8] | *((r5 + 8)) = r1;
0x00042634 b 0x42600 | goto label_0;
| label_4:
0x00042636 ldr r7, [pc, 0x18] |
0x00042638 add r7, pc | r7 = 0x84c8e;
0x0004263a b 0x425dc | goto label_1;
| label_7:
0x0004263c str r1, [r5, 8] | *((r5 + 8)) = r1;
0x0004263e b 0x425fe | goto label_2;
| label_6:
0x00042640 movs r0, 0 | r0 = 0;
0x00042642 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_3:
0x00042646 movs r0, 1 | r0 = 1;
0x00042648 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x426d4 */
| #include <stdint.h>
|
; (fcn) fcn.000426d4 () | void fcn_000426d4 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000426d4 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x000426d8 mov r6, r1 | r6 = r1;
0x000426da ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x000426dc ldr r3, [r0] | r3 = *(r0);
0x000426de ldr r7, [r3, 0xc] | r7 = *((r3 + 0xc));
| if (r5 != 0) {
0x000426e0 cbnz r5, 0x42744 | goto label_0;
| }
0x000426e2 add.w sb, r7, 2 | sb = r7 + 2;
0x000426e6 mov r8, r0 | r8 = r0;
0x000426e8 lsl.w sb, sb, 2 | sb <<= 2;
0x000426ec mov r1, r5 | r1 = r5;
0x000426ee mov r0, sb | r0 = sb;
0x000426f0 blx 0x8240 | r0 = fcn_00008240 ();
0x000426f4 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000426f6 cbz r0, 0x42738 | goto label_1;
| }
0x000426f8 mov r2, sb | r2 = sb;
0x000426fa mov r1, r5 | r1 = r5;
0x000426fc blx 0x839c | fcn_0000839c ();
0x00042700 cmp r7, 0 |
| if (r7 <= 0) {
0x00042702 ble 0x42746 | goto label_2;
| }
0x00042704 mov r3, r5 | r3 = r5;
| do {
0x00042706 ldr r2, [r6] | r2 = *(r6);
0x00042708 add.w r1, r6, r5, lsl 2 | r1 = r6 + (r5 << 2);
0x0004270c cmp r2, r5 |
| if (r2 > r5) {
0x0004270e ble 0x4271a |
0x00042710 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x00042712 cmp r3, r2 |
0x00042714 it eq |
| if (r3 != r2) {
0x00042716 addeq r5, 1 | r5++;
| }
| if (r3 == r2) {
0x00042718 beq 0x42726 | goto label_3;
| }
| }
0x0004271a ldr r2, [r4] | r2 = *(r4);
0x0004271c adds r1, r2, 1 | r1 = r2 + 1;
0x0004271e add.w r2, r4, r2, lsl 2 | r2 = r4 + (r2 << 2);
0x00042722 str r1, [r4] | *(r4) = r1;
0x00042724 str r3, [r2, 4] | *((r2 + 4)) = r3;
| label_3:
0x00042726 adds r3, 1 | r3++;
0x00042728 cmp r7, r3 |
0x0004272a bne 0x42706 |
| } while (r7 != r3);
0x0004272c mov r0, r6 | r0 = r6;
0x0004272e blx 0x8404 | fcn_00008404 ();
0x00042732 mov r0, r4 | r0 = r4;
0x00042734 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_1:
0x00042738 cmp.w sb, 0 |
| if (sb != 0) {
0x0004273c beq 0x42744 |
0x0004273e movs r3, 7 | r3 = 7;
0x00042740 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
| }
| label_0:
0x00042744 movs r4, 0 | r4 = 0;
| label_2:
0x00042746 mov r0, r6 | r0 = r6;
0x00042748 blx 0x8404 | fcn_00008404 ();
0x0004274c mov r0, r4 | r0 = r4;
0x0004274e pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x42754 */
| #include <stdint.h>
|
; (fcn) fcn.00042754 () | void fcn_00042754 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00042754 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00042758 mov r5, r2 | r5 = r2;
0x0004275a ldr r7, [r2] | r7 = *(r2);
0x0004275c sub sp, 0x44 |
0x0004275e ldr.w r2, [pc, 0x4b0] | r2 = *(0x00042c10);
0x00042762 ldr.w r3, [pc, 0x4b0] |
0x00042766 add r2, pc | r2 += pc;
0x00042768 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0004276a ldr r3, [r3] | r3 = *(0x42c16);
0x0004276c str r3, [sp, 0x3c] | var_3ch = r3;
0x0004276e mov.w r3, 0 | r3 = 0;
| if (r7 == 0) {
0x00042772 cbz r7, 0x42798 | goto label_14;
| }
| label_3:
0x00042774 movs r2, 1 | r2 = 1;
| do {
| label_1:
0x00042776 ldr.w r1, [pc, 0x4a0] | r1 = *(0x00042c18);
0x0004277a ldr.w r3, [pc, 0x498] | r3 = *(0x42c16);
0x0004277e add r1, pc | r1 += pc;
0x00042780 ldr r3, [r1, r3] | r3 = *((r1 + r3));
0x00042782 ldr r1, [r3] | r1 = *(0x42c16);
0x00042784 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00042786 eors r1, r3 | r1 ^= r3;
0x00042788 mov.w r3, 0 | r3 = 0;
| if (r1 != r3) {
0x0004278c bne.w 0x42974 | goto label_15;
| }
0x00042790 mov r0, r2 | r0 = r2;
0x00042792 add sp, 0x44 |
0x00042794 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x00042798 ldr r3, [r1] | r3 = *(r1);
0x0004279a mov r6, r0 | r6 = r0;
0x0004279c mov r4, r1 | r4 = r1;
0x0004279e subs r3, 1 | r3--;
0x000427a0 cmp r3, 3 |
| if (r3 > 3) {
0x000427a2 bhi.w 0x4297e | goto label_16;
| }
| /* switch table (4 cases) at 0x427aa */
0x000427a6 tbb [pc, r3] | __asm ("tbb aav.0x000000ff");
0x000427ae ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x000427b0 mov r2, r5 | r2 = r5;
0x000427b2 bl 0x42754 | r0 = fcn_00042754 (r0, r1, r2);
| if (r0 != 0) {
0x000427b6 cbnz r0, 0x42802 | goto label_17;
| }
| label_2:
0x000427b8 ldr r3, [r4] | r3 = *(r4);
0x000427ba cmp r3, 1 |
| if (r3 == 1) {
0x000427bc beq.w 0x428fe | goto label_18;
| }
| label_0:
0x000427c0 movs r2, 0 | r2 = 0;
0x000427c2 b 0x42776 |
| } while (1);
0x000427c4 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x000427c6 mov r2, r5 | r2 = r5;
0x000427c8 bl 0x42754 | r0 = fcn_00042754 (r0, r1, r2);
0x000427cc cmp r0, 0 |
| if (r0 == 0) {
0x000427ce beq 0x427c0 | goto label_0;
| }
0x000427d0 mov r2, r5 | r2 = r5;
0x000427d2 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x000427d4 mov r0, r6 | r0 = r6;
0x000427d6 bl 0x42754 | r0 = fcn_00042754 (r0, r1, r2);
0x000427da clz r2, r0 | r2 &= r0;
0x000427de lsrs r2, r2, 5 | r2 >>= 5;
0x000427e0 b 0x42776 | goto label_1;
0x000427e2 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x000427e4 mov r2, r5 | r2 = r5;
0x000427e6 bl 0x42754 | r0 = fcn_00042754 (r0, r1, r2);
0x000427ea mov r3, r0 | r3 = r0;
0x000427ec mov r2, r5 | r2 = r5;
0x000427ee ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x000427f0 mov r0, r6 | r0 = r6;
0x000427f2 mov r4, r3 | r4 = r3;
0x000427f4 bl 0x42754 | r0 = fcn_00042754 (r0, r1, r2);
0x000427f8 orrs r4, r0 | r4 |= r0;
0x000427fa ite ne |
| if (r4 == r0) {
0x000427fc movne r2, 1 | r2 = 1;
| }
| if (r4 != r0) {
0x000427fe moveq r2, 0 | r2 = 0;
| }
0x00042800 b 0x42776 | goto label_1;
| label_17:
0x00042802 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00042804 mov r2, r5 | r2 = r5;
0x00042806 mov r0, r6 | r0 = r6;
0x00042808 bl 0x42754 | r0 = fcn_00042754 (r0, r1, r2);
0x0004280c cmp r0, 0 |
| if (r0 == 0) {
0x0004280e beq 0x427b8 | goto label_2;
| }
0x00042810 ldr r3, [r5] | r3 = *(r5);
0x00042812 cmp r3, 0 |
| if (r3 != 0) {
0x00042814 bne 0x42774 | goto label_3;
| }
0x00042816 ldr r7, [r4] | r7 = *(r4);
0x00042818 cmp r7, 1 |
| if (r7 != 1) {
0x0004281a bne 0x42774 | goto label_3;
| }
0x0004281c ldr r3, [r4, 8] | r3 = *((r4 + 8));
| if (r3 == 0) {
0x0004281e cbz r3, 0x42826 | goto label_19;
| }
0x00042820 ldr r3, [r3] | r3 = *(r3);
0x00042822 cmp r3, 1 |
| if (r3 == 1) {
0x00042824 beq 0x42774 | goto label_3;
| }
| label_19:
0x00042826 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00042828 movs r3, 0 | r3 = 0;
0x0004282a mov r8, r4 | r8 = r4;
0x0004282c mov r0, r3 | r0 = r3;
0x0004282e cmp r1, 0 |
| if (r1 == 0) {
0x00042830 beq.w 0x42978 | goto label_20;
| }
| do {
0x00042834 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x00042838 mov r8, r1 | r8 = r1;
0x0004283a ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x0004283c ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x0004283e ldr r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x00042840 adds r3, r2, r3 | r3 = r2 + r3;
0x00042842 adc.w r0, r0, r2, asr 31 | __asm ("adc.w r0, r0, r2, asr 31");
0x00042846 cmp r1, 0 |
0x00042848 bne 0x42834 |
| } while (r1 != 0);
| label_6:
0x0004284a ldr.w r2, [r8, 0x14] | r2 = *((r8 + 0x14));
0x0004284e ldr r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x00042850 adds r3, r1, r3 | r3 = r1 + r3;
0x00042852 adc.w r1, r0, r1, asr 31 | __asm ("adc.w r1, r0, r1, asr 31");
0x00042856 adds r3, r3, r3 | r3 += r3;
0x00042858 mov r0, r3 | r0 = r3;
0x0004285a adcs r1, r1 | __asm ("adcs r1, r1");
0x0004285c blx 0x8240 | r0 = fcn_00008240 ();
0x00042860 mov sb, r0 | sb = r0;
0x00042862 cmp r0, 0 |
| if (r0 == 0) {
0x00042864 beq.w 0x4296a | goto label_21;
| }
0x00042868 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0004286c ldr.w r5, [r8, 8] | r5 = *((r8 + 8));
0x00042870 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00042872 ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00042874 str r2, [sp, 0x2c] | var_2ch = r2;
0x00042876 str r3, [sp, 0x30] | var_30h = r3;
| if (r5 == 0) {
0x00042878 cbz r5, 0x428aa | goto label_22;
| }
0x0004287a add.w sl, sp, 0x30 | sl += var_30h;
0x0004287e add.w r8, sp, 0x2c | r8 += var_2ch;
0x00042882 mov r0, r7 | r0 = r7;
0x00042884 b 0x428a2 |
| while (r3 == 1) {
0x00042886 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00042888 mov r2, r8 | r2 = r8;
0x0004288a ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0004288c mov r1, sb | r1 = sb;
0x0004288e ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00042890 str r3, [sp] | *(sp) = r3;
0x00042892 mov r3, sl | r3 = sl;
0x00042894 bl 0x19b48 | fcn_00019b48 (r0, r1, r2, r3, r4);
0x00042898 ldr r5, [r5, 8] | r5 = *((r5 + 8));
0x0004289a cmp r0, 0 |
0x0004289c it ne |
| if (r0 != 0) {
0x0004289e cmpne r5, 0 | __asm ("cmpne r5, 0");
| }
| if (r0 == 0) {
0x000428a0 beq 0x428a8 | goto label_23;
| }
0x000428a2 ldr r3, [r5] | r3 = *(r5);
0x000428a4 cmp r3, 1 |
0x000428a6 beq 0x42886 |
| }
| label_23:
0x000428a8 mov r7, r0 | r7 = r0;
| label_22:
0x000428aa ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000428ac ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x000428ae ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000428b0 cmp r5, 0 |
0x000428b2 it ne |
| if (r5 != 0) {
0x000428b4 cmpne r7, 0 | __asm ("cmpne r7, 0");
| }
0x000428b6 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x000428b8 ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000428ba str r2, [sp, 0x2c] | var_2ch = r2;
0x000428bc str r3, [sp, 0x30] | var_30h = r3;
| if (r5 == 0) {
0x000428be beq 0x428f0 | goto label_24;
| }
0x000428c0 add.w sl, sp, 0x30 | sl += var_30h;
0x000428c4 add.w r8, sp, 0x2c | r8 += var_2ch;
| do {
0x000428c8 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000428ca mov r2, r8 | r2 = r8;
0x000428cc mov r1, sb | r1 = sb;
0x000428ce ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x000428d0 ldr r3, [r5] | r3 = *(r5);
0x000428d2 cmp r3, 1 |
0x000428d4 itet eq |
| if (r3 != 1) {
0x000428d6 ldreq r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| }
| if (r3 == 1) {
0x000428d8 ldrne r3, [r5, 0x14] | r3 = *((r5 + 0x14));
| }
| if (r3 != 1) {
0x000428da ldreq r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
0x000428dc str r3, [sp] | *(sp) = r3;
0x000428de mov r3, sl | r3 = sl;
0x000428e0 bl 0x19b48 | fcn_00019b48 (r0, r1, r2, r3, r4);
0x000428e4 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x000428e6 cmp r5, 0 |
0x000428e8 it ne |
| if (r5 != 0) {
0x000428ea cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x000428ec bne 0x428c8 |
| } while (r5 != 0);
0x000428ee mov r7, r0 | r7 = r0;
| label_24:
0x000428f0 mov r0, sb | r0 = sb;
0x000428f2 blx 0x8404 | fcn_00008404 ();
0x000428f6 cmp r7, 0 |
| if (r7 == 0) {
0x000428f8 beq.w 0x427b8 | goto label_2;
| }
0x000428fc b 0x42774 | goto label_3;
| label_18:
0x000428fe ldr r3, [r4, 8] | r3 = *((r4 + 8));
| if (r3 == 0) {
0x00042900 cbz r3, 0x4290a | goto label_25;
| }
0x00042902 ldr r3, [r3] | r3 = *(r3);
0x00042904 cmp r3, 1 |
| if (r3 == 1) {
0x00042906 beq.w 0x427c0 | goto label_0;
| }
| label_25:
0x0004290a ldr r5, [r4, 0x14] | r5 = *((r4 + 0x14));
0x0004290c ldrd r7, r0, [r6, 0x20] | __asm ("ldrd r7, r0, [r6, 0x20]");
| if (r5 != 0) {
0x00042910 cbnz r5, 0x4293a | goto label_26;
| }
0x00042912 mov r8, r5 | r8 = r5;
0x00042914 b 0x4291c |
| while (r2 != r0) {
| label_4:
0x00042916 ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
0x00042918 ldr r5, [r4, 0x14] | r5 = *((r4 + 0x14));
| if (r5 != 0) {
0x0004291a cbnz r5, 0x4293a | goto label_26;
| }
0x0004291c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0004291e ldrd r1, r2, [r3, 0x18] | __asm ("ldrd r1, r2, [r3, 0x18]");
0x00042922 cmp r2, r0 |
0x00042924 it eq |
| if (r2 == r0) {
0x00042926 cmpeq r1, r7 | __asm ("cmpeq r1, r7");
| }
0x00042928 bne 0x42916 |
| }
0x0004292a ldr r5, [r3, 0x14] | r5 = *((r3 + 0x14));
0x0004292c ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| if (r3 != 0) {
0x0004292e cbnz r3, 0x42956 | goto label_27;
| }
| label_5:
0x00042930 strd r8, r8, [r5, 0x1c] | __asm ("strd r8, r8, [r5, 0x1c]");
0x00042934 str.w r8, [r5, 0x18] | __asm ("str.w r8, [r5, 0x18]");
0x00042938 b 0x42916 | goto label_4;
| label_26:
0x0004293a ldrd r2, r3, [r4, 0x18] | __asm ("ldrd r2, r3, [r4, 0x18]");
0x0004293e cmp r3, r0 |
0x00042940 it eq |
| if (r3 != r0) {
0x00042942 cmpeq r2, r7 | __asm ("cmpeq r2, r7");
| goto label_28;
| }
| if (r3 != r0) {
| label_28:
0x00042944 bne.w 0x427c0 | goto label_0;
| }
0x00042948 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0004294a cbnz r3, 0x42962 |
| while (1) {
0x0004294c movs r3, 0 | r3 = 0;
0x0004294e strd r3, r3, [r5, 0x1c] | __asm ("strd r3, r3, [r5, 0x1c]");
0x00042952 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x00042954 b 0x427c0 | goto label_0;
| label_27:
0x00042956 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x00042958 blx 0x8404 | r0 = fcn_00008404 ();
0x0004295c ldrd r7, r0, [r6, 0x20] | __asm ("ldrd r7, r0, [r6, 0x20]");
0x00042960 b 0x42930 | goto label_5;
0x00042962 ldr r0, [r5, 0x1c] | r0 = *((r5 + 0x1c));
0x00042964 blx 0x8404 | fcn_00008404 ();
0x00042968 b 0x4294c |
| }
| label_21:
0x0004296a movs r3, 7 | r3 = 7;
0x0004296c str r3, [r5] | *(r5) = r3;
0x0004296e blx 0x8404 | fcn_00008404 ();
0x00042972 b 0x427b8 | goto label_2;
| label_15:
0x00042974 blx 0x883c | fcn_0000883c ();
| label_20:
0x00042978 mov r3, r1 | r3 = r1;
0x0004297a mov r0, r1 | r0 = r1;
0x0004297c b 0x4284a | goto label_6;
| label_16:
0x0004297e ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x00042980 cmp r3, 0 |
| if (r3 == 0) {
0x00042982 beq.w 0x42b18 | goto label_29;
| }
0x00042986 ldrb.w r3, [r1, 0x22] | r3 = *((r1 + 0x22));
0x0004298a cmp r3, 0 |
| if (r3 == 0) {
0x0004298c beq.w 0x42b46 | goto label_30;
| }
0x00042990 ldr.w r8, [r1, 0x14] | r8 = *((r1 + 0x14));
0x00042994 ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x00042998 cmp r3, 0 |
| if (r3 != 0) {
0x0004299a bne.w 0x42b80 | goto label_31;
| }
| label_9:
0x0004299e movs r3, 0 | r3 = 0;
0x000429a0 mov sl, r3 | sl = r3;
0x000429a2 strd r3, r3, [r8, 0x1c] | __asm ("strd r3, r3, [r8, 0x1c]");
0x000429a6 str.w r3, [r8, 0x18] | __asm ("str.w r3, [r8, 0x18]");
| label_7:
0x000429aa ldr.w r1, [r8, 0x40] | r1 = *((r8 + 0x40));
0x000429ae cmp r1, 0 |
| if (r1 <= 0) {
0x000429b0 ble.w 0x42af4 | goto label_32;
| }
0x000429b4 mov.w r3, -1 | r3 = -1;
0x000429b8 movs r2, 0 | r2 = 0;
0x000429ba str r3, [sp, 8] | var_8h = r3;
0x000429bc add r3, sp, 0x30 | r3 += var_30h;
0x000429be str r3, [sp, 0x14] | var_14h = r3;
0x000429c0 mov sb, r2 | sb = r2;
0x000429c2 add r3, sp, 0x28 | r3 += var_28h;
0x000429c4 str r4, [sp, 0xc] | var_ch = r4;
0x000429c6 mov r4, r2 | r4 = r2;
0x000429c8 str r3, [sp, 0x18] | var_18h = r3;
0x000429ca add r3, sp, 0x2c | r3 += var_2ch;
0x000429cc str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h]");
0x000429d0 str r3, [sp, 0x1c] | var_1ch = r3;
| do {
0x000429d2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000429d4 ldr r3, [r3, 0x58] | r3 = *((r3 + 0x58));
0x000429d6 cmp r3, 0 |
| if (r3 != 0) {
0x000429d8 beq 0x42a58 |
0x000429da ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000429dc cmp r2, 0 |
| if (r2 == 0) {
0x000429de beq.w 0x42b94 | goto label_33;
| }
0x000429e2 ldr r0, [r2] | r0 = *(r2);
0x000429e4 str r3, [sp, 0x20] | var_20h = r3;
0x000429e6 blx 0x86a4 | r0 = fcn_000086a4 ();
0x000429ea mov fp, r0 |
0x000429ec cmp r0, 0 |
| if (r0 == 0) {
0x000429ee beq.w 0x42bac | goto label_34;
| }
0x000429f2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000429f4 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000429f6 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000429f8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x000429fa str r3, [sp, 0x24] | var_24h = r3;
0x000429fc mov r0, r2 | r0 = r2;
0x000429fe str r2, [sp, 0x20] | var_20h = r2;
0x00042a00 bl 0xb604 | fcn_0000b604 (r0, r1);
0x00042a04 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00042a06 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00042a08 ldr.w ip, [r3] | ip = *(r3);
0x00042a0c adds r1, r2, r0 | r1 = r2 + r0;
0x00042a0e sub.w r2, ip, r0 | r2 = ip - r0;
0x00042a12 mov r0, fp | r0 = fp;
0x00042a14 str r2, [sp, 0x20] | var_20h = r2;
0x00042a16 blx 0x8610 | fcn_00008610 ();
0x00042a1a cmp.w sb, 0 |
| if (sb == 0) {
0x00042a1e beq.w 0x42bbc | goto label_35;
| }
0x00042a22 ldr r3, [sp, 8] | r3 = var_8h;
0x00042a24 movs r2, 0 | r2 = 0;
0x00042a26 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00042a28 strd fp, sb, [sp, 0x28] | __asm ("strd fp, sb, [var_2ch]");
0x00042a2c subs r1, r4, r3 | r1 = r4 - r3;
0x00042a2e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00042a30 str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x00042a34 str r3, [sp, 4] | var_4h = r3;
0x00042a36 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00042a38 str r3, [sp] | *(sp) = r3;
0x00042a3a movs r3, 1 | r3 = 1;
0x00042a3c bl 0x18118 | fcn_00018118 (r0, r1, r2, r3, r4, r5);
0x00042a40 mov r0, sb | r0 = sb;
0x00042a42 blx 0x8404 | fcn_00008404 ();
0x00042a46 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00042a48 subs.w r2, r2, fp | r2 -= fp;
| if (r2 == r2) {
0x00042a4c beq.w 0x42bc0 | goto label_36;
| }
| label_11:
0x00042a50 ldr.w r1, [r8, 0x40] | r1 = *((r8 + 0x40));
0x00042a54 mov sb, fp | sb = fp;
0x00042a56 str r4, [sp, 8] | var_8h = r4;
| }
0x00042a58 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00042a5a adds r4, 1 | r4++;
0x00042a5c cmp r4, r1 |
0x00042a5e add.w r3, r3, 0x18 | r3 += 0x18;
0x00042a62 str r3, [sp, 0x10] | var_10h = r3;
0x00042a64 blt 0x429d2 |
| } while (r4 < r1);
0x00042a66 ldrd r3, r4, [sp, 8] | __asm ("ldrd r3, r4, [var_8h]");
0x00042a6a cmp r3, 0 |
| if (r3 >= 0) {
0x00042a6c blt 0x42af4 |
0x00042a6e ldr.w fp, [r8, 0x2c] | fp = *((r8 + 0x2c));
0x00042a72 cmp.w fp, 0 |
| if (fp < 0) {
0x00042a76 blt.w 0x42bda | goto label_37;
| }
0x00042a7a ldr r1, [sp, 8] | r1 = var_8h;
0x00042a7c adds r2, 8 | r2 += 8;
0x00042a7e ldr.w r3, [r8, 0x1c] | r3 = *((r8 + 0x1c));
0x00042a82 mov r0, r2 | r0 = r2;
0x00042a84 str r2, [sp, 0xc] | var_ch = r2;
0x00042a86 cmp fp, r1 |
0x00042a88 iteee le |
| if (fp > r1) {
0x00042a8a ldrle r1, [sp, 8] | r1 = var_8h;
| }
| if (fp <= r1) {
0x00042a8c subgt fp, fp, r1 |
| }
| if (fp <= r1) {
0x00042a90 movgt r1, r3 | r1 = r3;
| }
| if (fp > r1) {
0x00042a92 mov r3, sb | r3 = sb;
| }
0x00042a94 itt le |
| if (fp > r1) {
0x00042a96 suble fp, r1, fp |
| }
| if (fp <= r1) {
0x00042a9a mov r1, sb | r1 = sb;
| }
0x00042a9c strd r3, r1, [sp, 0x28] | __asm ("strd r3, r1, [var_2ch]");
0x00042aa0 asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x00042aa2 blx 0x8240 | fcn_00008240 ();
0x00042aa6 str r0, [sp, 8] | var_8h = r0;
0x00042aa8 cmp r0, 0 |
| if (r0 == 0) {
0x00042aaa beq.w 0x42bee | goto label_38;
| }
0x00042aae ldr r2, [sp, 0xc] | r2 = var_ch;
0x00042ab0 movs r1, 0 | r1 = 0;
0x00042ab2 blx 0x839c | fcn_0000839c ();
0x00042ab6 ldr r3, [sp, 8] | r3 = var_8h;
0x00042ab8 mov r1, fp | r1 = fp;
0x00042aba movs r2, 0 | r2 = 0;
0x00042abc add r0, sp, 0x30 | r0 += var_30h;
0x00042abe str.w r3, [r8, 0x1c] | __asm ("str.w r3, [r8, 0x1c]");
0x00042ac2 str r3, [sp, 0x30] | var_30h = r3;
0x00042ac4 add r3, sp, 0x2c | r3 += var_2ch;
0x00042ac6 str r3, [sp, 4] | var_4h = r3;
0x00042ac8 add r3, sp, 0x28 | r3 += var_28h;
0x00042aca str r3, [sp] | *(sp) = r3;
0x00042acc movs r3, 1 | r3 = 1;
0x00042ace bl 0x18118 | r0 = fcn_00018118 (r0, r1, r2, r3, r4, r5);
0x00042ad2 mov fp, r0 |
0x00042ad4 cmp r0, 0 |
| if (r0 == 0) {
0x00042ad6 beq.w 0x42c02 | goto label_39;
| }
0x00042ada ldr r3, [sp, 0x30] | r3 = var_30h;
0x00042adc ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00042ae0 sub.w fp, r3, r2 |
0x00042ae4 movs r3, 1 | r3 = 1;
0x00042ae6 str.w r3, [r8, 0x18] | __asm ("str.w r3, [r8, 0x18]");
| label_13:
0x00042aea mov r0, sb | r0 = sb;
0x00042aec str.w fp, [r8, 0x20] | __asm ("str.w fp, [r8, 0x20]");
0x00042af0 blx 0x8404 | fcn_00008404 ();
| }
| label_32:
0x00042af4 ldr.w sb, [r8, 0x1c] | sb = *((r8 + 0x1c));
| label_12:
0x00042af8 cmp sb, sl |
| if (sb == sl) {
0x00042afa beq 0x42b8a | goto label_40;
| }
0x00042afc mov r0, sl | r0 = sl;
0x00042afe blx 0x8404 | fcn_00008404 ();
0x00042b02 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00042b06 subs r2, 0 |
0x00042b08 it ne |
| if (r2 == 0) {
0x00042b0a movne r2, 1 | r2 = 1;
| }
| label_10:
0x00042b0c ldrd r0, r1, [r6, 0x20] | __asm ("ldrd r0, r1, [r6, 0x20]");
0x00042b10 str r7, [r5] | *(r5) = r7;
0x00042b12 strd r0, r1, [r4, 0x18] | __asm ("strd r0, r1, [r4, 0x18]");
0x00042b16 b 0x42776 | goto label_1;
| label_29:
0x00042b18 ldrb.w r3, [r1, 0x20] | r3 = *((r1 + 0x20));
0x00042b1c cmp r3, 0 |
| if (r3 != 0) {
0x00042b1e bne.w 0x427c0 | goto label_0;
| }
0x00042b22 ldrd r0, r2, [r1, 0x18] | __asm ("ldrd r0, r2, [r1, 0x18]");
0x00042b26 ldrd r1, r3, [r6, 0x20] | __asm ("ldrd r1, r3, [r6, 0x20]");
0x00042b2a cmp r2, r3 |
0x00042b2c it eq |
| if (r2 != r3) {
0x00042b2e cmpeq r0, r1 | __asm ("cmpeq r0, r1");
| goto label_41;
| }
| if (r2 != r3) {
| label_41:
0x00042b30 bne.w 0x427c0 | goto label_0;
| }
0x00042b34 ldr.w r8, [r4, 0x14] | r8 = *((r4 + 0x14));
| label_8:
0x00042b38 ldr.w r2, [r8, 0x20] | r2 = *((r8 + 0x20));
0x00042b3c cmp r2, 0 |
0x00042b3e ite le |
| if (r2 > 0) {
0x00042b40 movle r2, 0 | r2 = 0;
| }
| if (r2 <= 0) {
0x00042b42 movgt r2, 1 | r2 = 1;
| }
0x00042b44 b 0x42776 | goto label_1;
| label_30:
0x00042b46 ldrd r0, r2, [r1, 0x18] | __asm ("ldrd r0, r2, [r1, 0x18]");
0x00042b4a ldrd r1, r3, [r6, 0x20] | __asm ("ldrd r1, r3, [r6, 0x20]");
0x00042b4e cmp r2, r3 |
0x00042b50 it eq |
| if (r2 != r3) {
0x00042b52 cmpeq r0, r1 | __asm ("cmpeq r0, r1");
| goto label_42;
| }
| if (r2 != r3) {
| label_42:
0x00042b54 bne.w 0x427c0 | goto label_0;
| }
0x00042b58 ldr.w r8, [r4, 0x14] | r8 = *((r4 + 0x14));
0x00042b5c ldr.w sl, [r8, 0x1c] | sl = *((r8 + 0x1c));
0x00042b60 cmp.w sl, 0 |
| if (sl != 0) {
0x00042b64 beq 0x42b74 |
0x00042b66 ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x00042b6a cmp r3, 0 |
0x00042b6c it eq |
| if (r3 != 0) {
0x00042b6e moveq sl, 0 | sl = 0;
| }
0x00042b72 b 0x429aa | goto label_7;
| }
0x00042b74 ldrb.w r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00042b78 cmp r3, 0 |
| if (r3 != 0) {
0x00042b7a bne.w 0x427c0 | goto label_0;
| }
0x00042b7e b 0x42b38 | goto label_8;
| label_31:
0x00042b80 ldr.w r0, [r8, 0x1c] | r0 = *((r8 + 0x1c));
0x00042b84 blx 0x8404 | fcn_00008404 ();
0x00042b88 b 0x4299e | goto label_9;
| label_40:
0x00042b8a subs.w r2, sb, 0 | r2 = sb - 0;
0x00042b8e it ne |
| if (r2 == sb) {
0x00042b90 movne r2, 1 | r2 = 1;
| }
0x00042b92 b 0x42b0c | goto label_10;
| label_33:
0x00042b94 mov r0, sb | r0 = sb;
0x00042b96 mov fp, r2 |
0x00042b98 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00042b9a blx 0x8404 | fcn_00008404 ();
0x00042b9e mov r0, sl | r0 = sl;
0x00042ba0 blx 0x8404 | fcn_00008404 ();
0x00042ba4 mov r2, fp | r2 = fp;
0x00042ba6 strd fp, fp, [r8, 0x1c] | __asm ("strd fp, fp, [r8, 0x1c]");
0x00042baa b 0x42b0c | goto label_10;
| label_34:
0x00042bac ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00042bb0 movs r7, 7 | r7 = 7;
0x00042bb2 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00042bb4 subs r2, 0 |
0x00042bb6 it ne |
| if (r2 == 0) {
0x00042bb8 movne r2, 1 | r2 = 1;
| }
0x00042bba b 0x42b0c | goto label_10;
| label_35:
0x00042bbc ldr r2, [sp, 0x20] | r2 = var_20h;
0x00042bbe b 0x42a50 | goto label_11;
| label_36:
0x00042bc0 mov r0, fp | r0 = fp;
0x00042bc2 str r2, [sp, 8] | var_8h = r2;
0x00042bc4 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00042bc6 blx 0x8404 | fcn_00008404 ();
0x00042bca mov r0, sl | r0 = sl;
0x00042bcc blx 0x8404 | fcn_00008404 ();
0x00042bd0 ldr r2, [sp, 8] | r2 = var_8h;
0x00042bd2 mov r7, r2 | r7 = r2;
0x00042bd4 strd r2, r2, [r8, 0x1c] | __asm ("strd r2, r2, [r8, 0x1c]");
0x00042bd8 b 0x42b0c | goto label_10;
| label_37:
0x00042bda ldrd r0, r1, [r6, 0x20] | __asm ("ldrd r0, r1, [r6, 0x20]");
0x00042bde movs r3, 1 | r3 = 1;
0x00042be0 strd sb, r2, [r8, 0x1c] | __asm ("strd sb, r2, [r8, 0x1c]");
0x00042be4 str.w r3, [r8, 0x18] | __asm ("str.w r3, [r8, 0x18]");
0x00042be8 strd r0, r1, [r8, 0x10] | __asm ("strd r0, r1, [r8, 0x10]");
0x00042bec b 0x42af8 | goto label_12;
| label_38:
0x00042bee mov r0, sb | r0 = sb;
0x00042bf0 movs r7, 7 | r7 = 7;
0x00042bf2 blx 0x8404 | fcn_00008404 ();
0x00042bf6 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00042bfa subs r2, 0 |
0x00042bfc it ne |
| if (r2 == 0) {
0x00042bfe movne r2, 1 | r2 = 1;
| }
0x00042c00 b 0x42b0c | goto label_10;
| label_39:
0x00042c02 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00042c04 blx 0x8404 | fcn_00008404 ();
0x00042c08 str.w fp, [r8, 0x1c] | __asm ("str.w fp, [r8, 0x1c]");
0x00042c0c b 0x42aea | goto label_13;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x42c1c */
| #include <stdint.h>
|
; (fcn) fcn.00042c1c () | void fcn_00042c1c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00042c1c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00042c20 mov r4, r0 | r4 = r0;
0x00042c22 ldrb r0, [r0] | r0 = *(r0);
0x00042c24 sub sp, 0xc |
0x00042c26 mov r8, r1 | r8 = r1;
0x00042c28 mov r7, r2 | r7 = r2;
0x00042c2a mov sb, r3 | sb = r3;
0x00042c2c cmp r0, 1 |
| if (r0 == 1) {
0x00042c2e beq 0x42d20 | goto label_8;
| }
0x00042c30 ldr r3, [pc, 0x184] |
0x00042c32 add r3, pc | r3 = 0x859ee;
| label_0:
0x00042c34 mov r1, r7 | r1 = r7;
0x00042c36 mov r0, r8 | r0 = r8;
0x00042c38 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00042c3a ldr r5, [r4, 0xc] | r5 = *((r4 + 0xc));
0x00042c3c mov sl, r0 | sl = r0;
0x00042c3e mov r3, r7 | r3 = r7;
0x00042c40 mov r2, r8 | r2 = r8;
0x00042c42 subs r5, 1 | r5--;
0x00042c44 ands r5, r0 | r5 &= r0;
0x00042c46 str r5, [sp] | *(sp) = r5;
0x00042c48 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00042c4a ldrb r0, [r4] | r0 = *(r4);
0x00042c4c bl 0x122c4 | r0 = fcn_000122c4 (r0, r1, r2, r3);
0x00042c50 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00042c52 cbz r0, 0x42c68 |
0x00042c54 ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x00042c56 cmp.w sb, 0 |
| if (sb == 0) {
0x00042c5a beq 0x42d2c | goto label_9;
| }
0x00042c5c str.w sb, [r0, 8] | __asm ("str.w sb, [r0, 8]");
| label_1:
0x00042c60 mov r0, r7 | r0 = r7;
0x00042c62 add sp, 0xc |
0x00042c64 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00042c68 cmp.w sb, 0 |
| if (sb == 0) {
0x00042c6c beq 0x42d16 | goto label_10;
| }
0x00042c6e ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00042c70 cmp r1, 0 |
| if (r1 == 0) {
0x00042c72 beq.w 0x42d80 | goto label_11;
| }
| label_3:
0x00042c76 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00042c78 cmp r3, r1 |
| if (r3 < r1) {
0x00042c7a blt 0x42c94 | goto label_12;
| }
0x00042c7c lsls r1, r1, 1 | r1 <<= 1;
0x00042c7e mov r0, r4 | r0 = r4;
0x00042c80 bl 0x425a8 | r0 = fcn_000425a8 (r0, r1);
| if (r0 == 0) {
0x00042c84 cbz r0, 0x42c94 | goto label_12;
| }
| label_2:
0x00042c86 movs r3, 0 | r3 = 0;
0x00042c88 str r3, [r4, 4] | *((r4 + 4)) = r3;
| do {
0x00042c8a mov r7, sb | r7 = sb;
| label_5:
0x00042c8c mov r0, r7 | r0 = r7;
0x00042c8e add sp, 0xc |
0x00042c90 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x00042c94 movs r0, 0x14 | r0 = 0x14;
0x00042c96 movs r1, 0 | r1 = 0;
0x00042c98 blx 0x8240 | r0 = fcn_00008240 ();
0x00042c9c mov r5, r0 | r5 = r0;
0x00042c9e cmp r0, 0 |
0x00042ca0 beq 0x42c8a |
| } while (r0 == 0);
0x00042ca2 movs r6, 0 | r6 = 0;
0x00042ca4 str r6, [r0] | *(r0) = r6;
0x00042ca6 str r6, [r0, 4] | *((r0 + 4)) = r6;
0x00042ca8 str r6, [r0, 8] | *((r0 + 8)) = r6;
0x00042caa str r6, [r0, 0xc] | *((r0 + 0xc)) = r6;
0x00042cac str r6, [r0, 0x10] | *((r0 + 0x10)) = r6;
0x00042cae ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x00042cb0 cmp r3, r6 |
0x00042cb2 it ne |
| if (r3 != r6) {
0x00042cb4 cmpne r8, r6 | __asm ("cmpne r8, r6");
| }
| if (r3 == r6) {
0x00042cb6 beq 0x42d26 | goto label_13;
| }
0x00042cb8 asrs r1, r7, 0x1f | r1 = r7 >> 0x1f;
0x00042cba mov r0, r7 | r0 = r7;
0x00042cbc blx 0x8240 | r0 = fcn_00008240 ();
0x00042cc0 mov fp, r0 |
0x00042cc2 cmp r0, 0 |
| if (r0 == 0) {
0x00042cc4 beq 0x42da2 | goto label_14;
| }
0x00042cc6 mov r1, r6 | r1 = r6;
0x00042cc8 mov r2, r7 | r2 = r7;
0x00042cca blx 0x839c | fcn_0000839c ();
0x00042cce mov r1, r8 | r1 = r8;
0x00042cd0 mov r0, fp | r0 = fp;
0x00042cd2 mov r2, r7 | r2 = r7;
0x00042cd4 str.w fp, [r5, 0xc] | __asm ("str.w fp, [r5, 0xc]");
0x00042cd8 blx 0x8610 | fcn_00008610 ();
| do {
0x00042cdc ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00042cde str r7, [r5, 0x10] | *((r5 + 0x10)) = r7;
0x00042ce0 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00042ce2 adds r3, 1 | r3++;
0x00042ce4 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00042ce6 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00042ce8 subs r3, 1 | r3--;
0x00042cea and.w r3, r3, sl | r3 &= sl;
0x00042cee add.w r0, r1, r3, lsl 3 | r0 = r1 + (r3 << 3);
0x00042cf2 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00042cf4 cmp r2, 0 |
| if (r2 == 0) {
0x00042cf6 beq 0x42d92 | goto label_15;
| }
0x00042cf8 ldr r6, [r2, 4] | r6 = *((r2 + 4));
0x00042cfa str r2, [r5] | *(r5) = r2;
0x00042cfc str r6, [r5, 4] | *((r5 + 4)) = r6;
0x00042cfe cmp r6, 0 |
| if (r6 == 0) {
0x00042d00 beq 0x42db0 | goto label_16;
| }
0x00042d02 str r5, [r6] | *(r6) = r5;
| label_6:
0x00042d04 str r5, [r2, 4] | *((r2 + 4)) = r5;
| label_4:
0x00042d06 ldr.w r2, [r1, r3, lsl 3] | offset_0 = r3 << 3;
| r2 = *((r1 + offset_0));
0x00042d0a adds r2, 1 | r2++;
0x00042d0c str.w r2, [r1, r3, lsl 3] | __asm ("str.w r2, [r1, r3, lsl 3]");
0x00042d10 str r5, [r0, 4] | *((r0 + 4)) = r5;
0x00042d12 str.w sb, [r5, 8] | __asm ("str.w sb, [r5, 8]");
| label_10:
0x00042d16 movs r7, 0 | r7 = 0;
0x00042d18 mov r0, r7 | r0 = r7;
0x00042d1a add sp, 0xc |
0x00042d1c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00042d20 ldr r3, [pc, 0x98] |
0x00042d22 add r3, pc | r3 = 0x85ae2;
0x00042d24 b 0x42c34 | goto label_0;
| label_13:
0x00042d26 str.w r8, [r0, 0xc] | __asm ("str.w r8, [r0, 0xc]");
0x00042d2a b 0x42cdc |
| } while (1);
| label_9:
0x00042d2c ldrd r3, r2, [r0] | __asm ("ldrd r3, r2, [r0]");
0x00042d30 cmp r2, 0 |
| if (r2 == 0) {
0x00042d32 beq 0x42db4 | goto label_17;
| }
0x00042d34 str r3, [r2] | *(r2) = r3;
| if (r3 != 0) {
| label_7:
0x00042d36 cbz r3, 0x42d3a |
0x00042d38 str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
0x00042d3a ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00042d3c add.w r1, r2, r5, lsl 3 | r1 = r2 + (r5 << 3);
0x00042d40 ldr r0, [r1, 4] | r0 = *((r1 + 4));
0x00042d42 cmp r6, r0 |
0x00042d44 it eq |
| if (r6 != r0) {
0x00042d46 streq r3, [r1, 4] | *((r1 + 4)) = r3;
| }
0x00042d48 ldr.w r3, [r2, r5, lsl 3] | offset_1 = r5 << 3;
| r3 = *((r2 + offset_1));
0x00042d4c subs r3, 1 | r3--;
0x00042d4e cmp r3, 0 |
0x00042d50 str.w r3, [r2, r5, lsl 3] | __asm ("str.w r3, [r2, r5, lsl 3]");
0x00042d54 itt le |
| if (r3 > 0) {
0x00042d56 movle r3, 0 | r3 = 0;
| }
| if (r3 > 0) {
0x00042d58 strle r3, [r1, 4] | *((r1 + 4)) = r3;
| }
0x00042d5a ldrb r3, [r4, 1] | r3 = *((r4 + 1));
| if (r3 != 0) {
0x00042d5c cbz r3, 0x42d66 |
0x00042d5e ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
| if (r0 == 0) {
0x00042d60 cbz r0, 0x42d66 | goto label_18;
| }
0x00042d62 blx 0x8404 | fcn_00008404 ();
| }
| label_18:
0x00042d66 mov r0, r6 | r0 = r6;
0x00042d68 blx 0x8404 | fcn_00008404 ();
0x00042d6c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00042d6e subs r3, 1 | r3--;
0x00042d70 cmp r3, 0 |
0x00042d72 str r3, [r4, 4] | *((r4 + 4)) = r3;
| if (r3 > 0) {
0x00042d74 bgt.w 0x42c60 | goto label_1;
| }
0x00042d78 mov r0, r4 | r0 = r4;
0x00042d7a bl 0xf1ec | fcn_0000f1ec (r0);
0x00042d7e b 0x42c60 | goto label_1;
| label_11:
0x00042d80 movs r1, 8 | r1 = 8;
0x00042d82 mov r0, r4 | r0 = r4;
0x00042d84 bl 0x425a8 | r0 = fcn_000425a8 (r0, r1);
0x00042d88 cmp r0, 0 |
| if (r0 != 0) {
0x00042d8a bne.w 0x42c86 | goto label_2;
| }
0x00042d8e ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00042d90 b 0x42c76 | goto label_3;
| label_15:
0x00042d92 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00042d94 str r2, [r5] | *(r5) = r2;
| if (r2 != 0) {
0x00042d96 cbz r2, 0x42d9a |
0x00042d98 str r5, [r2, 4] | *((r2 + 4)) = r5;
| }
0x00042d9a movs r2, 0 | r2 = 0;
0x00042d9c str r2, [r5, 4] | *((r5 + 4)) = r2;
0x00042d9e str r5, [r4, 8] | *((r4 + 8)) = r5;
0x00042da0 b 0x42d06 | goto label_4;
| label_14:
0x00042da2 mov r0, r5 | r0 = r5;
0x00042da4 str.w fp, [r5, 0xc] | __asm ("str.w fp, [r5, 0xc]");
0x00042da8 mov r7, sb | r7 = sb;
0x00042daa blx 0x8404 | fcn_00008404 ();
0x00042dae b 0x42c8c | goto label_5;
| label_16:
0x00042db0 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x00042db2 b 0x42d04 | goto label_6;
| label_17:
0x00042db4 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00042db6 b 0x42d36 | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x42e1c */
| #include <stdint.h>
|
; (fcn) fcn.00042e1c () | void fcn_00042e1c (int16_t arg1, arithmetic x) {
| int16_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| r0 = arg1;
| r1 = x;
0x00042e1c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00042e20 sub sp, 0x14 |
0x00042e22 ldr r5, [r1, 0x10] | r5 = *((r1 + 0x10));
0x00042e24 cmp r5, 1 |
| if (r5 <= 1) {
0x00042e26 ble.w 0x42f6e | goto label_3;
| }
0x00042e2a mov sb, r0 | sb = r0;
0x00042e2c ldr r0, [r1, 0x14] | r0 = *((r1 + 0x14));
0x00042e2e mov sl, r1 | sl = r1;
0x00042e30 cmp r0, 0 |
| if (r0 <= 0) {
0x00042e32 ble 0x42e6a | goto label_4;
| }
0x00042e34 mov r3, r1 | r3 = r1;
0x00042e36 movs r2, 0 | r2 = 0;
0x00042e38 subs r4, r5, 1 | r4 = r5 - 1;
0x00042e3a b 0x42e44 |
| while (r4 != r1) {
| label_0:
0x00042e3c cmp r2, r0 |
0x00042e3e add.w r3, r3, 0xc | r3 += 0xc;
| if (r2 == r0) {
0x00042e42 beq 0x42e6a | goto label_4;
| }
0x00042e44 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x00042e46 adds r2, 1 | r2++;
0x00042e48 cmp r5, r1 |
| if (r5 == r1) {
0x00042e4a beq 0x42e56 | goto label_5;
| }
0x00042e4c cmp r4, r1 |
0x00042e4e bne 0x42e3c |
| }
0x00042e50 ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x00042e52 cmp r1, r4 |
| if (r1 != r4) {
0x00042e54 bne 0x42e3c | goto label_0;
| }
| label_5:
0x00042e56 ldr.w r3, [sl] | r3 = *(sl);
0x00042e5a mov r6, sl | r6 = sl;
0x00042e5c adds r3, 1 | r3++;
0x00042e5e str.w r3, [sl] | __asm ("str.w r3, [sl]");
| label_2:
0x00042e62 mov r0, r6 | r0 = r6;
0x00042e64 add sp, 0x14 |
0x00042e66 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00042e6a ldr.w r7, [sb, 0x24] | r7 = *((sb + 0x24));
0x00042e6e cmp r7, 0 |
| if (r7 != 0) {
0x00042e70 bne 0x42f6e | goto label_3;
| }
0x00042e72 adds r0, 1 | r0++;
0x00042e74 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x00042e78 lsls r3, r0, 2 | r3 = r0 << 2;
0x00042e7a adds.w r4, r3, 0x28 | r4 = r3 + 0x28;
0x00042e7e mov r0, r4 | r0 = r4;
0x00042e80 adc r1, r7, 0 | __asm ("adc r1, r7, 0");
0x00042e84 blx 0x8240 | r0 = fcn_00008240 ();
0x00042e88 mov r6, r0 | r6 = r0;
0x00042e8a cmp r0, 0 |
| if (r0 == 0) {
0x00042e8c beq 0x42f72 | goto label_6;
| }
0x00042e8e mov r2, r4 | r2 = r4;
0x00042e90 mov r1, r7 | r1 = r7;
0x00042e92 blx 0x839c | fcn_0000839c ();
0x00042e96 ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x00042e9a adds r3, 1 | r3++;
0x00042e9c str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x00042e9e movs r3, 1 | r3 = 1;
0x00042ea0 str r3, [r6] | *(r6) = r3;
0x00042ea2 ldrd r2, r3, [sl, 8] | __asm ("ldrd r2, r3, [sl, 8]");
0x00042ea6 ldr.w r8, [sb, 0x24] | r8 = *((sb + 0x24));
0x00042eaa ldr.w r4, [sl, 0x14] | r4 = *((sl + 0x14));
0x00042eae strd r2, r3, [r6, 8] | __asm ("strd r2, r3, [r6, 8]");
0x00042eb2 cmp.w r8, 0 |
| if (r8 != 0) {
0x00042eb6 bne 0x42f5c | goto label_7;
| }
0x00042eb8 add.w fp, r5, r5, lsl 1 |
0x00042ebc mov r1, r8 | r1 = r8;
0x00042ebe lsl.w r7, fp, 2 | r7 = fp << 2;
0x00042ec2 mov r0, r7 | r0 = r7;
0x00042ec4 blx 0x8240 | r0 = fcn_00008240 ();
0x00042ec8 mov fp, r0 |
0x00042eca cmp r0, 0 |
| if (r0 == 0) {
0x00042ecc beq 0x42f54 | goto label_8;
| }
0x00042ece mov r2, r7 | r2 = r7;
0x00042ed0 mov r1, r8 | r1 = r8;
0x00042ed2 blx 0x839c | fcn_0000839c ();
0x00042ed6 lsls r3, r4, 1 | r3 = r4 << 1;
0x00042ed8 adds r2, r3, r4 | r2 = r3 + r4;
0x00042eda add.w r2, r6, r2, lsl 2 | r2 = r6 + (r2 << 2);
0x00042ede str.w fp, [r2, 0x20] | __asm ("str.w fp, [r2, 0x20]");
0x00042ee2 ldr.w r1, [sl, 0x14] | r1 = *((sl + 0x14));
0x00042ee6 subs r7, r1, 1 | r7 = r1 - 1;
| if (r7 < r1) {
0x00042ee8 bmi 0x42f42 | goto label_9;
| }
0x00042eea add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x00042eee strd r4, r5, [sp, 4] | __asm ("strd r4, r5, [var_4h]");
0x00042ef2 str r6, [sp, 0xc] | var_ch = r6;
0x00042ef4 mov r5, r7 | r5 = r7;
0x00042ef6 add.w sl, sl, r1, lsl 2 | sl += (r1 << 2);
0x00042efa mov r6, r8 | r6 = r8;
0x00042efc mov r8, r3 | r8 = r3;
| label_1:
0x00042efe ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x00042f02 cmp r3, 0 |
| if (r3 <= 0) {
0x00042f04 ble 0x42f30 | goto label_10;
| }
0x00042f06 add.w sb, r3, r3, lsl 1 | sb = r3 + (r3 << 1);
0x00042f0a add.w lr, r6, r6, lsl 1 | lr = r6 + (r6 << 1);
0x00042f0e ldr.w r7, [sl, 0x14] | r7 = *((sl + 0x14));
0x00042f12 lsl.w sb, sb, 2 | sb <<= 2;
0x00042f16 add.w lr, fp, lr, lsl 2 | lr = fp + (lr << 2);
0x00042f1a movs r4, 0 | r4 = 0;
| do {
0x00042f1c adds r2, r7, r4 | r2 = r7 + r4;
0x00042f1e add.w ip, lr, r4 |
0x00042f22 ldm r2, {r0, r1, r2} | r0 = *(r2);
| r1 = *((r2 + 4));
| r2 = *((r2 + 8));
0x00042f24 adds r4, 0xc | r4 += 0xc;
0x00042f26 cmp r4, sb |
0x00042f28 stm.w ip, {r0, r1, r2} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
0x00042f2c bne 0x42f1c |
| } while (r4 != sb);
0x00042f2e add r6, r3 | r6 += r3;
| label_10:
0x00042f30 subs r5, 1 | r5--;
0x00042f32 sub.w sl, sl, 0xc | sl -= 0xc;
0x00042f36 adds r3, r5, 1 | r3 = r5 + 1;
| if (r3 != r5) {
0x00042f38 bne 0x42efe | goto label_1;
| }
0x00042f3a ldrd r4, r5, [sp, 4] | __asm ("ldrd r4, r5, [var_4h]");
0x00042f3e mov r3, r8 | r3 = r8;
0x00042f40 ldr r6, [sp, 0xc] | r6 = var_ch;
| label_9:
0x00042f42 add r3, r4 | r3 += r4;
0x00042f44 mov r0, r6 | r0 = r6;
0x00042f46 add.w r3, r6, r3, lsl 2 | r3 = r6 + (r3 << 2);
0x00042f4a str r5, [r3, 0x1c] | *((r3 + 0x1c)) = r5;
0x00042f4c str r5, [r6, 0x10] | *((r6 + 0x10)) = r5;
0x00042f4e add sp, 0x14 |
0x00042f50 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| if (r7 != 0) {
| label_8:
0x00042f54 cbz r7, 0x42f5c |
0x00042f56 movs r3, 7 | r3 = 7;
0x00042f58 str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
| }
| label_7:
0x00042f5c add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x00042f60 movs r2, 0 | r2 = 0;
0x00042f62 mov r0, r6 | r0 = r6;
0x00042f64 add.w r3, r6, r4, lsl 2 | r3 = r6 + (r4 << 2);
0x00042f68 str r2, [r3, 0x20] | *((r3 + 0x20)) = r2;
0x00042f6a blx 0x8404 | fcn_00008404 ();
| do {
| label_3:
0x00042f6e movs r6, 0 | r6 = 0;
0x00042f70 b 0x42e62 | goto label_2;
| label_6:
0x00042f72 movs r3, 7 | r3 = 7;
0x00042f74 str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x00042f78 b 0x42f6e |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x42f7c */
| #include <stdint.h>
|
; (fcn) fcn.00042f7c () | void fcn_00042f7c (int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00042f7c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00042f80 mov sb, r3 | sb = r3;
0x00042f82 ldr r5, [sp, 0x20] | r5 = *(arg_20h);
0x00042f84 movs r3, 0 | r3 = 0;
0x00042f86 str r3, [r5] | *(r5) = r3;
| if (r0 == 0) {
0x00042f88 cbz r0, 0x42fe8 | goto label_3;
| }
0x00042f8a cmp.w sb, 0 |
0x00042f8e mov r6, r1 | r6 = r1;
0x00042f90 mov r7, r2 | r7 = r2;
0x00042f92 mov r8, r0 | r8 = r0;
| if (sb <= 0) {
0x00042f94 ble 0x43026 | goto label_4;
| }
0x00042f96 add.w r3, r2, sb | r3 = r2 + sb;
0x00042f9a mov.w ip, 0xd |
| do {
0x00042f9e ldrb r4, [r3, -0x1]! | r4 = *((r3 -= 0x1));
0x00042fa2 cmp r7, r3 |
0x00042fa4 eor.w r4, r4, ip, lsl 3 | r4 ^= (ip << 3);
0x00042fa8 eor.w ip, ip, r4 |
0x00042fac bne 0x42f9e |
| } while (r7 != r3);
0x00042fae lsl.w r3, ip, 3 | r3 = ip << 3;
| label_1:
0x00042fb2 eor.w sl, ip, r3 | sl = ip ^ r3;
0x00042fb6 eor.w sl, r6, sl | sl = r6 ^ sl;
0x00042fba ubfx sl, sl, 0, 9 | sl = (sl >> 0) & ((1 << 9) - 1);
0x00042fbe ldr.w r4, [r8, sl, lsl 2] | offset_0 = sl << 2;
| r4 = *((r8 + offset_0));
| if (r4 != 0) {
0x00042fc2 cbnz r4, 0x42fca | goto label_5;
| }
0x00042fc4 b 0x42fee | goto label_6;
| do {
| label_0:
0x00042fc6 ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
| if (r4 == 0) {
0x00042fc8 cbz r4, 0x42fee | goto label_6;
| }
| label_5:
0x00042fca ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00042fcc cmp r3, r6 |
0x00042fce bne 0x42fc6 |
| } while (r3 != r6);
0x00042fd0 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00042fd2 cmp r3, sb |
| if (r3 != sb) {
0x00042fd4 bne 0x42fc6 | goto label_0;
| }
0x00042fd6 ldr r0, [r4] | r0 = *(r4);
0x00042fd8 mov r2, sb | r2 = sb;
0x00042fda mov r1, r7 | r1 = r7;
0x00042fdc blx 0x8214 | r0 = sysconf ();
0x00042fe0 cmp r0, 0 |
| if (r0 != 0) {
0x00042fe2 bne 0x42fc6 | goto label_0;
| }
0x00042fe4 movs r3, 1 | r3 = 1;
0x00042fe6 str r3, [r5] | *(r5) = r3;
| do {
| label_3:
0x00042fe8 movs r0, 0 | r0 = 0;
| label_2:
0x00042fea pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x00042fee add.w r5, sb, 0x10 | r5 = sb + 0x10;
0x00042ff2 movs r1, 0 | r1 = 0;
0x00042ff4 mov r0, r5 | r0 = r5;
0x00042ff6 blx 0x8240 | r0 = fcn_00008240 ();
0x00042ffa mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00042ffc cbz r0, 0x4302e | goto label_7;
| }
0x00042ffe mov r2, r5 | r2 = r5;
0x00043000 movs r1, 0 | r1 = 0;
0x00043002 blx 0x839c | fcn_0000839c ();
0x00043006 add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x0004300a mov r1, r7 | r1 = r7;
0x0004300c mov r2, sb | r2 = sb;
0x0004300e str r6, [r4, 8] | *((r4 + 8)) = r6;
0x00043010 str.w sb, [r4, 4] | __asm ("str.w sb, [r4, 4]");
0x00043014 str r0, [r4] | *(r4) = r0;
0x00043016 blx 0x8610 | fcn_00008610 ();
0x0004301a ldr.w r3, [r8, sl, lsl 2] | offset_1 = sl << 2;
| r3 = *((r8 + offset_1));
0x0004301e str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00043020 str.w r4, [r8, sl, lsl 2] | __asm ("str.w r4, [r8, sl, lsl 2]");
0x00043024 b 0x42fe8 |
| } while (1);
| label_4:
0x00043026 movs r3, 0x68 | r3 = 0x68;
0x00043028 mov.w ip, 0xd |
0x0004302c b 0x42fb2 | goto label_1;
| label_7:
0x0004302e movs r0, 7 | r0 = 7;
0x00043030 cmp r5, 0 |
| if (r5 != 0) {
0x00043032 bne 0x42fea | goto label_2;
| }
0x00043034 b 0x42fe8 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x43bdc */
| #include <stdint.h>
|
; (fcn) fcn.00043bdc () | void fcn_00043bdc (int16_t arg_30h, int16_t arg_38h, int16_t arg_40h, int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00043bdc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00043be0 mov r4, r2 | r4 = r2;
0x00043be2 ldr r2, [pc, 0x110] |
0x00043be4 mov r6, r3 | r6 = r3;
0x00043be6 sub sp, 0xc |
0x00043be8 mov r5, r0 | r5 = r0;
0x00043bea ldr r3, [pc, 0x10c] | r3 = *(0x43cfa);
0x00043bec add r2, pc | r2 = 0x878e6;
0x00043bee ldr r1, [r0] | r1 = *(r0);
0x00043bf0 ldrd fp, r7, [sp, 0x30] | __asm ("ldrd fp, r7, [arg_30h]");
0x00043bf4 ldr r3, [r2, r3] |
0x00043bf6 ldrd sb, sl, [sp, 0x38] | __asm ("ldrd sb, sl, [arg_38h]");
0x00043bfa ldr.w r8, [sp, 0x40] | r8 = *(arg_40h);
0x00043bfe ldr r3, [r3] | r3 = *(0x878e6);
0x00043c00 str r3, [sp, 4] | var_4h = r3;
0x00043c02 mov.w r3, 0 | r3 = 0;
0x00043c06 str r1, [sp] | *(sp) = r1;
0x00043c08 cmp r1, 0 |
| if (r1 == 0) {
0x00043c0a beq 0x43ca0 | goto label_5;
| }
0x00043c0c ldrd r2, r3, [r1, 0x10] | __asm ("ldrd r2, r3, [r1, 0x10]");
0x00043c10 cmp r3, r6 |
0x00043c12 it eq |
| if (r3 == r6) {
0x00043c14 cmpeq r2, r4 | __asm ("cmpeq r2, r4");
| }
| if (r3 == r6) {
0x00043c16 beq 0x43c42 | goto label_6;
| }
0x00043c18 ldr r0, [r1] | r0 = *(r1);
0x00043c1a subs r2, r4, r2 | r2 = r4 - r2;
0x00043c1c sbc.w r3, r6, r3 | __asm ("sbc.w r3, r6, r3");
0x00043c20 adds r0, 1 | r0++;
0x00043c22 str r0, [r1] | *(r1) = r0;
| do {
0x00043c24 mov r0, sp | r0 = sp;
0x00043c26 bl 0x43b40 | r0 = fcn_00043b40 (r0, r1, r2);
| if (r0 == 0) {
0x00043c2a cbnz r0, 0x43c68 |
0x00043c2c ldr r1, [sp] | r1 = *(sp);
0x00043c2e vmov.i8 d17, 0xff | __asm ("vmov.i8 d17, 0xff");
0x00043c32 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00043c36 strd r4, r6, [r1, 0x10] | __asm ("strd r4, r6, [r1, 0x10]");
0x00043c3a vstr d17, [r1, 0x18] | __asm ("vstr d17, [r1, 0x18]");
0x00043c3e vstr d16, [r1, 0x20] | __asm ("vstr d16, [r1, 0x20]");
| label_6:
0x00043c42 cmp.w fp, 1 |
0x00043c46 sbcs r3, r7, 0 | __asm ("sbcs r3, r7, 0");
| if (fp < 1) {
0x00043c4a blt 0x43c6c | goto label_7;
| }
0x00043c4c ldrd r2, r3, [r1, 0x18] | __asm ("ldrd r2, r3, [r1, 0x18]");
0x00043c50 cmp r3, r7 |
0x00043c52 it eq |
| if (r3 == r7) {
0x00043c54 cmpeq r2, fp | __asm ("cmpeq r2, fp");
| }
| if (r3 == r7) {
0x00043c56 beq 0x43ca6 | goto label_8;
| }
0x00043c58 mov r6, sp | r6 = sp;
0x00043c5a movs r2, 1 | r2 = 1;
0x00043c5c mov r0, r6 | r0 = r6;
0x00043c5e movs r3, 0 | r3 = 0;
0x00043c60 bl 0x43b40 | r0 = fcn_00043b40 (r0, r1, r2);
0x00043c64 cmp r0, 0 |
| if (r0 == 0) {
0x00043c66 beq 0x43ccc | goto label_9;
| }
| }
| label_1:
0x00043c68 ldr r1, [sp] | r1 = *(sp);
0x00043c6a b 0x43c76 | goto label_0;
| label_7:
0x00043c6c orrs.w r7, fp, r7 | r7 = fp | r7;
0x00043c70 it ne |
| if (r7 == fp) {
0x00043c72 movne r0, 0 | r0 = 0;
| }
| if (r7 == fp) {
0x00043c74 beq 0x43ca6 | goto label_8;
| }
| label_0:
0x00043c76 ldr r3, [r5] | r3 = *(r5);
0x00043c78 ldr r2, [pc, 0x80] |
0x00043c7a str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x00043c7e cmp r3, r1 |
0x00043c80 ldr r3, [pc, 0x74] | r3 = *(0x43cf8);
0x00043c82 add r2, pc | r2 = 0x87982;
0x00043c84 itte ne |
| if (r3 == r1) {
0x00043c86 strne r1, [r5] | *(r5) = r1;
| }
| if (r3 == r1) {
0x00043c88 movne r0, 1 | r0 = 1;
| }
| if (r3 != r1) {
0x00043c8a moveq r0, 0 | r0 = 0;
| }
0x00043c8c ldr r3, [r2, r3] | r3 = *(0x87982);
0x00043c8e ldr r2, [r3] | r2 = *(0x87982);
0x00043c90 ldr r3, [sp, 4] | r3 = var_4h;
0x00043c92 eors r2, r3 | r2 ^= r3;
0x00043c94 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00043c98 bne 0x43cee | goto label_10;
| }
0x00043c9a add sp, 0xc |
0x00043c9c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00043ca0 mov r2, r4 | r2 = r4;
0x00043ca2 mov r3, r6 | r3 = r6;
0x00043ca4 b 0x43c24 |
| } while (1);
| label_8:
0x00043ca6 ldrd r4, r3, [r1, 0x20] | __asm ("ldrd r4, r3, [r1, 0x20]");
0x00043caa mov r6, sp | r6 = sp;
| label_2:
0x00043cac adds.w r2, sb, 2 | r2 = sb + 2;
0x00043cb0 mov r0, r6 | r0 = r6;
0x00043cb2 adc r1, sl, 0 | __asm ("adc r1, sl, 0");
0x00043cb6 subs r2, r2, r4 | r2 -= r4;
0x00043cb8 sbc.w r3, r1, r3 | __asm ("sbc.w r3, r1, r3");
0x00043cbc bl 0x43b40 | fcn_00043b40 (r0, r1, r2);
0x00043cc0 ldr r1, [sp] | r1 = *(sp);
0x00043cc2 cmp r0, 0 |
| if (r0 != 0) {
0x00043cc4 bne 0x43c76 | goto label_0;
| }
0x00043cc6 strd sb, sl, [r1, 0x20] | __asm ("strd sb, sl, [r1, 0x20]");
0x00043cca b 0x43c76 | goto label_0;
| label_9:
0x00043ccc mov r2, fp | r2 = fp;
0x00043cce mov r3, r7 | r3 = r7;
0x00043cd0 mov r0, r6 | r0 = r6;
0x00043cd2 bl 0x43b40 | r0 = fcn_00043b40 (r0, r1, r2);
0x00043cd6 cmp r0, 0 |
| if (r0 != 0) {
0x00043cd8 bne 0x43c68 | goto label_1;
| }
0x00043cda ldr r3, [sp] | r3 = *(sp);
0x00043cdc mov r4, r0 | r4 = r0;
0x00043cde vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00043ce2 strd fp, r7, [r3, 0x18] | __asm ("strd fp, r7, [r3, 0x18]");
0x00043ce6 vstr d16, [r3, 0x20] | __asm ("vstr d16, [r3, 0x20]");
0x00043cea mov r3, r0 | r3 = r0;
0x00043cec b 0x43cac | goto label_2;
| label_10:
0x00043cee blx 0x883c | fcn_0000883c ();
0x00043cf2 nop |
0x00043cf4 str r4, [r5, r2] | *((r5 + r2)) = r4;
0x00043cf6 movs r0, r1 | r0 = r1;
0x00043cf8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00043cfa movs r0, r0 |
0x00043cfc str r6, [r2, r0] | *((r2 + r0)) = r6;
0x00043cfe movs r0, r1 | r0 = r1;
0x00043d00 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00043d04 mov r5, r2 | r5 = r2;
0x00043d06 ldr r2, [pc, 0xb4] |
0x00043d08 mov r8, r3 | r8 = r3;
0x00043d0a sub sp, 0x2c |
0x00043d0c mov r6, r0 | r6 = r0;
0x00043d0e ldr r3, [pc, 0xb0] | r3 = *(0x43dc2);
0x00043d10 mov r4, r1 | r4 = r1;
0x00043d12 add r2, pc | r2 = 0x87ad4;
0x00043d14 ldr.w sb, [sp, 0x48] | sb = var_0h;
0x00043d18 ldr r7, [sp, 0x4c] | r7 = var_4h;
0x00043d1a mov r0, r8 | r0 = r8;
0x00043d1c ldr r3, [r2, r3] |
0x00043d1e mov r1, sb | r1 = sb;
0x00043d20 mov r2, r7 | r2 = r7;
0x00043d22 ldr r3, [r3] | r3 = *(0x87ad4);
0x00043d24 str r3, [sp, 0x24] | var_24h = r3;
0x00043d26 mov.w r3, 0 | r3 = 0;
0x00043d2a movs r3, 0 | r3 = 0;
0x00043d2c str r3, [sp, 0x20] | var_20h = r3;
0x00043d2e bl 0x1232c | r0 = fcn_0001232c (r0, r1, r2);
0x00043d32 cmp r0, 0 |
| if (r0 == 0) {
0x00043d34 beq 0x43db2 | goto label_11;
| }
0x00043d36 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00043d38 str r3, [sp, 0x1c] | var_1ch = r3;
| if (r3 != 0) {
0x00043d3a cbz r3, 0x43d4c |
0x00043d3c ldr r2, [r3] | r2 = *(r3);
0x00043d3e ldr.w r3, [r6, 0x10c] | r3 = *((r6 + 0x10c));
0x00043d42 add r2, r7 | r2 += r7;
0x00043d44 subs r3, 0x14 | r3 -= 0x14;
0x00043d46 subs r3, r3, r2 | r3 -= r2;
0x00043d48 str.w r3, [r6, 0x10c] | __asm ("str.w r3, aav.0x000000ff");
| }
| label_4:
0x00043d4c str r5, [sp, 8] | var_8h = r5;
0x00043d4e asrs r5, r5, 0x1f | r5 >>= 0x1f;
0x00043d50 str r4, [sp] | *(sp) = r4;
0x00043d52 asrs r4, r4, 0x1f | r4 >>= 0x1f;
0x00043d54 add r3, sp, 0x20 | r3 += var_20h;
0x00043d56 str r5, [sp, 0xc] | var_ch = r5;
0x00043d58 str r4, [sp, 4] | var_4h_2 = r4;
0x00043d5a add r0, sp, 0x1c | r0 += var_1ch;
0x00043d5c str r3, [sp, 0x10] | var_10h = r3;
0x00043d5e ldrd r2, r3, [r6, 0x110] | __asm ("ldrd r2, r3, aav.0x000000ff");
0x00043d62 bl 0x43bdc | r0 = fcn_00043bdc (r0, r1, r2, r3, r4, r5);
0x00043d66 cbnz r0, 0x43d98 |
| while (r4 != r0) {
0x00043d68 ldr r0, [sp, 0x20] | r0 = var_20h;
| if (r0 == 0) {
0x00043d6a cbnz r0, 0x43d7e |
0x00043d6c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00043d6e ldr.w r3, [r6, 0x10c] | r3 = *((r6 + 0x10c));
0x00043d72 ldr r2, [r2] | r2 = *(r2);
0x00043d74 adds r3, 0x14 | r3 += 0x14;
0x00043d76 add r2, r7 | r2 += r7;
0x00043d78 add r2, r3 | r2 += r3;
0x00043d7a str.w r2, [r6, 0x10c] | __asm ("str.w r2, aav.0x000000ff");
| }
| label_3:
0x00043d7e ldr r2, [pc, 0x44] |
0x00043d80 ldr r3, [pc, 0x3c] | r3 = *(0x43dc0);
0x00043d82 add r2, pc | r2 = 0x87b4c;
0x00043d84 ldr r3, [r2, r3] | r3 = *(0x87b4c);
0x00043d86 ldr r2, [r3] | r2 = *(0x87b4c);
0x00043d88 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00043d8a eors r2, r3 | r2 ^= r3;
0x00043d8c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00043d90 bne 0x43db6 | goto label_12;
| }
0x00043d92 add sp, 0x2c |
0x00043d94 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x00043d98 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x00043d9a mov r1, sb | r1 = sb;
0x00043d9c mov r0, r8 | r0 = r8;
0x00043d9e mov r2, r7 | r2 = r7;
0x00043da0 mov r3, r4 | r3 = r4;
0x00043da2 bl 0x42c1c | r0 = fcn_00042c1c (r0, r1, r2, r3);
0x00043da6 cmp r4, r0 |
0x00043da8 bne 0x43d68 |
| }
0x00043daa blx 0x8404 | fcn_00008404 ();
0x00043dae movs r0, 7 | r0 = 7;
0x00043db0 b 0x43d7e | goto label_3;
| label_11:
0x00043db2 str r0, [sp, 0x1c] | var_1ch = r0;
0x00043db4 b 0x43d4c | goto label_4;
| label_12:
0x00043db6 blx 0x883c | fcn_0000883c ();
0x00043dba nop |
0x00043dbc ldr r7, [pc, 0x218] | r7 = *(0x43fd8);
0x00043dbe movs r0, r1 | r0 = r1;
0x00043dc0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00043dc2 movs r0, r0 |
0x00043dc4 ldr r7, [pc, 0x58] | r7 = *(0x43e20);
0x00043dc6 movs r0, r1 | r0 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4545c */
| #include <stdint.h>
|
; (fcn) fcn.0004545c () | void fcn_0004545c (int16_t arg1, int16_t arg2, int16_t arg4, arithmetic x) {
| int16_t var_0h;
| arithmetic var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r3 = arg4;
| r2 = x;
0x0004545c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00045460 sub sp, 0x24 |
0x00045462 str r0, [sp] | *(sp) = r0;
0x00045464 mov r0, r2 | r0 = r2;
0x00045466 mov sl, r3 | sl = r3;
0x00045468 str r2, [sp, 4] | var_4h = r2;
0x0004546a ldr r2, [pc, 0x25c] |
0x0004546c ldr r3, [pc, 0x25c] | r3 = *(0x456cc);
0x0004546e str r1, [sp, 0xc] | var_ch = r1;
0x00045470 add r2, pc | r2 = 0x8ab3e;
0x00045472 ldr.w sb, [r1] | sb = *(r1);
0x00045476 ldr r3, [r2, r3] |
0x00045478 ldr r3, [r3] | r3 = *(0x8ab3e);
0x0004547a str r3, [sp, 0x1c] | var_1ch = r3;
0x0004547c mov.w r3, 0 | r3 = 0;
0x00045480 cmp.w sb, 0 |
| if (sb == 0) {
0x00045484 beq.w 0x45668 | goto label_6;
| }
0x00045488 ldr.w r6, [sb, 0x14] | r6 = *((sb + 0x14));
0x0004548c ldr.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x00045490 ldr.w lr, [sb, 0x10] |
0x00045494 cmp r6, sl |
0x00045496 it ge |
| if (r6 < sl) {
0x00045498 movge r6, sl | r6 = sl;
| }
0x0004549a cmp r6, 0 |
| if (r6 <= 0) {
0x0004549c ble.w 0x456b6 | goto label_7;
| }
0x000454a0 add.w r1, lr, -1 | r1 = lr + -1;
0x000454a4 subs r2, r0, 1 | r2 = r0 - 1;
0x000454a6 movs r4, 0 | r4 = 0;
0x000454a8 b 0x454b0 |
| while (r5 == r0) {
0x000454aa adds r4, 1 | r4++;
0x000454ac cmp r4, r6 |
| if (r4 == r6) {
0x000454ae beq 0x454bc | goto label_8;
| }
0x000454b0 ldrb r5, [r1, 1]! | r5 = *((r1 += 1));
0x000454b4 ldrb r0, [r2, 1]! | r0 = *((r2 += 1));
0x000454b8 cmp r5, r0 |
0x000454ba beq 0x454aa |
| }
| label_8:
0x000454bc sub.w fp, sl, r4 |
0x000454c0 cmp.w fp, 0 |
0x000454c4 it le |
| if (fp <= 0) {
0x000454c6 movwle r0, 0x10b | __asm ("movwle r0, aav.0x000000ff");
| }
| if (fp <= 0) {
0x000454ca ble 0x45588 | goto label_0;
| }
0x000454cc asr.w r8, r4, 0x1f | r8 = r4 >> 0x1f;
0x000454d0 mov r7, r4 | r7 = r4;
0x000454d2 mov r2, r4 | r2 = r4;
0x000454d4 movs r1, 0 | r1 = 0;
0x000454d6 mov r0, r8 | r0 = r8;
| do {
0x000454d8 lsrs r2, r2, 7 | r2 >>= 7;
0x000454da adds r1, 1 | r1++;
0x000454dc orr.w r2, r2, r0, lsl 25 | r2 |= (r0 << 25);
0x000454e0 lsrs r0, r0, 7 | r0 >>= 7;
0x000454e2 orrs.w r5, r2, r0 | r5 = r2 | r0;
0x000454e6 bne 0x454d8 |
| } while (r5 != r2);
| label_5:
0x000454e8 asr.w r6, fp, 0x1f | r6 = fp >> 0x1f;
0x000454ec mov r5, fp | r5 = fp;
0x000454ee mov r0, fp | r0 = fp;
0x000454f0 str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h]");
0x000454f4 movs r2, 0 | r2 = 0;
0x000454f6 mov ip, r6 |
| do {
0x000454f8 lsrs r0, r0, 7 | r0 >>= 7;
0x000454fa adds r2, 1 | r2++;
0x000454fc orr.w r0, r0, ip, lsl 25 | r0 |= (ip << 25);
0x00045500 lsr.w ip, ip, 7 |
0x00045504 orrs.w sb, r0, ip | sb = r0 | ip;
0x00045508 bne 0x454f8 |
| } while (sb != r0);
0x0004550a adds r0, r2, r1 | r0 = r2 + r1;
0x0004550c ldr r2, [sp] | r2 = *(sp);
0x0004550e add r0, fp | r0 += fp;
0x00045510 ldr.w sb, [sp, 8] | sb = var_8h;
0x00045514 add r0, r3 | r0 += r3;
0x00045516 ldr.w r2, [r2, 0xe8] | r2 = *((r2 + 0xe8));
0x0004551a cmp r0, r2 |
| if (r0 > r2) {
0x0004551c ble 0x455a4 |
0x0004551e cmp.w lr, 0 |
| if (lr == 0) {
0x00045522 beq.w 0x456a0 | goto label_9;
| }
0x00045526 add.w r0, r2, 0x28 | r0 = r2 + 0x28;
0x0004552a blx 0x86a4 | r0 = fcn_000086a4 ();
0x0004552e mov r4, r0 | r4 = r0;
0x00045530 str r0, [sp, 0x14] | var_14h = r0;
0x00045532 cmp r0, 0 |
| if (r0 == 0) {
0x00045534 beq.w 0x45664 | goto label_3;
| }
0x00045538 movs r2, 0x28 | r2 = 0x28;
0x0004553a movs r1, 0 | r1 = 0;
0x0004553c blx 0x839c | fcn_0000839c ();
0x00045540 ldr.w r1, [sb] | r1 = *(sb);
0x00045544 mov r3, sl | r3 = sl;
0x00045546 ldrd r0, r2, [sp] | __asm ("ldrd r0, r2, [sp]");
0x0004554a str r1, [sp, 0x18] | var_18h = r1;
0x0004554c movs r1, 0xb | r1 = 0xb;
0x0004554e str r1, [r4, 0x20] | *((r4 + 0x20)) = r1;
0x00045550 add.w r1, r4, 0x28 | r1 = r4 + 0x28;
0x00045554 str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x00045556 add r1, sp, 0x18 | r1 += var_18h;
0x00045558 bl 0x4545c | fcn_0004545c (r0, r1, r2, r3);
0x0004555c ldr.w r3, [sb] | r3 = *(sb);
0x00045560 cmp r3, 0 |
| if (r3 == 0) {
0x00045562 beq 0x4565c | goto label_10;
| }
0x00045564 ldr r3, [sp, 0x18] | r3 = var_18h;
| label_1:
0x00045566 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0004556a str.w r4, [sb, 4] | __asm ("str.w r4, [sb, 4]");
0x0004556e str r3, [r4] | *(r4) = r3;
0x00045570 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x00045574 str r2, [r4, 8] | *((r4 + 8)) = r2;
0x00045576 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00045578 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x0004557c str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0004557e movs r3, 0 | r3 = 0;
0x00045580 str.w r3, [sb, 0x1c] | __asm ("str.w r3, [sb, 0x1c]");
| label_2:
0x00045584 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00045586 str r4, [r3] | *(r3) = r4;
| label_0:
0x00045588 ldr r2, [pc, 0x144] |
0x0004558a ldr r3, [pc, 0x140] | r3 = *(0x456ce);
0x0004558c add r2, pc | r2 = 0x8ac60;
0x0004558e ldr r3, [r2, r3] | r3 = *(0x8ac60);
0x00045590 ldr r2, [r3] | r2 = *(0x8ac60);
0x00045592 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00045594 eors r2, r3 | r2 ^= r3;
0x00045596 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004559a bne.w 0x456c2 | goto label_11;
| }
0x0004559e add sp, 0x24 |
0x000455a0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000455a4 ldr.w r0, [sb, 0x24] | r0 = *((sb + 0x24));
| label_4:
0x000455a8 cmp.w lr, 0 |
| if (lr == 0) {
0x000455ac beq 0x455de | goto label_12;
| }
0x000455ae add r0, r3 | r0 += r3;
0x000455b0 mov r2, r0 | r2 = r0;
| do {
0x000455b2 lsr.w lr, r7, 7 | lr = r7 >> 7;
0x000455b6 orn r1, r7, 0x7f | r1 = r7 | 0x7f;
| r1 = ~r1;
0x000455ba uxtb.w ip, r7 | ip = (int8_t) r7;
0x000455be orr.w r7, lr, r8, lsl 25 | r7 = lr | (r8 << 25);
0x000455c2 lsr.w r8, r8, 7 | r8 >>= 7;
0x000455c6 mov lr, r2 | lr = r2;
0x000455c8 strb r1, [r2], 1 | *(r2) = r1;
| r2++;
0x000455cc orrs.w r1, r7, r8 | r1 = r7 | r8;
0x000455d0 bne 0x455b2 |
| } while (r1 != r7);
0x000455d2 subs r2, r2, r0 | r2 -= r0;
0x000455d4 strb.w ip, [lr] | *(lr) = ip;
0x000455d8 ldr.w r0, [sb, 0x24] | r0 = *((sb + 0x24));
0x000455dc add r3, r2 | r3 += r2;
| label_12:
0x000455de add r0, r3 | r0 += r3;
0x000455e0 mov r2, r0 | r2 = r0;
| do {
0x000455e2 lsrs r7, r5, 7 | r7 = r5 >> 7;
0x000455e4 orn r1, r5, 0x7f | r1 = r5 | 0x7f;
| r1 = ~r1;
0x000455e8 uxtb.w ip, r5 | ip = (int8_t) r5;
0x000455ec orr.w r5, r7, r6, lsl 25 | r5 = r7 | (r6 << 25);
0x000455f0 lsrs r6, r6, 7 | r6 >>= 7;
0x000455f2 mov r7, r2 | r7 = r2;
0x000455f4 strb r1, [r2], 1 | *(r2) = r1;
| r2++;
0x000455f8 orrs.w r1, r5, r6 | r1 = r5 | r6;
0x000455fc bne 0x455e2 |
| } while (r1 != r5);
0x000455fe subs r2, r2, r0 | r2 -= r0;
0x00045600 strb.w ip, [r7] | *(r7) = ip;
0x00045604 adds r5, r2, r3 | r5 = r2 + r3;
0x00045606 ldr.w r0, [sb, 0x24] | r0 = *((sb + 0x24));
0x0004560a ldr r3, [sp, 4] | r3 = var_4h;
0x0004560c mov r2, fp | r2 = fp;
0x0004560e add r0, r5 | r0 += r5;
0x00045610 add r5, fp | r5 += fp;
0x00045612 adds r1, r3, r4 | r1 = r3 + r4;
0x00045614 blx 0x8610 | fcn_00008610 ();
0x00045618 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x0004561c str.w r5, [sb, 0x20] | __asm ("str.w r5, [sb, 0x20]");
0x00045620 adds r3, 1 | r3++;
0x00045622 str.w r3, [sb, 0xc] | __asm ("str.w r3, [sb, 0xc]");
0x00045626 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x0004562a cmp sl, r3 |
0x0004562c it le |
| if (sl > r3) {
0x0004562e ldrle r0, [sb, 0x1c] | r0 = *((sb + 0x1c));
| }
| if (sl > r3) {
0x00045632 ble 0x45648 |
0x00045634 lsl.w r4, sl, 1 | r4 = sl << 1;
0x00045638 ldr.w r0, [sb, 0x1c] | r0 = *((sb + 0x1c));
0x0004563c mov r1, r4 | r1 = r4;
0x0004563e blx 0x8268 | r0 = fcn_00008268 ();
| if (r0 == 0) {
0x00045642 cbz r0, 0x45664 | goto label_3;
| }
0x00045644 strd r4, r0, [sb, 0x18] | __asm ("strd r4, r0, [sb, 0x18]");
| }
0x00045648 ldr r1, [sp, 4] | r1 = var_4h;
0x0004564a mov r2, sl | r2 = sl;
0x0004564c str.w r0, [sb, 0x10] | __asm ("str.w r0, [sb, 0x10]");
0x00045650 blx 0x8610 | fcn_00008610 ();
0x00045654 movs r0, 0 | r0 = 0;
0x00045656 str.w sl, [sb, 0x14] | __asm ("str.w sl, [sb, 0x14]");
0x0004565a b 0x45588 | goto label_0;
| label_10:
0x0004565c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004565e str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x00045662 b 0x45566 | goto label_1;
| do {
| label_3:
0x00045664 movs r0, 7 | r0 = 7;
0x00045666 b 0x45588 | goto label_0;
| label_6:
0x00045668 ldr r3, [sp] | r3 = *(sp);
0x0004566a ldr.w r0, [r3, 0xe8] | r0 = *((r3 + 0xe8));
0x0004566e adds r0, 0x28 | r0 += 0x28;
0x00045670 blx 0x86a4 | r0 = fcn_000086a4 ();
0x00045674 mov r4, r0 | r4 = r0;
0x00045676 str r0, [sp, 0x14] | var_14h = r0;
0x00045678 cmp r0, 0 |
0x0004567a beq 0x45664 |
| } while (r0 == 0);
0x0004567c mov r1, sb | r1 = sb;
0x0004567e movs r2, 0x28 | r2 = 0x28;
0x00045680 blx 0x839c | fcn_0000839c ();
0x00045684 movs r1, 0xb | r1 = 0xb;
0x00045686 str r4, [r4, 8] | *((r4 + 8)) = r4;
0x00045688 str r1, [r4, 0x20] | *((r4 + 0x20)) = r1;
0x0004568a add.w r1, r4, 0x28 | r1 = r4 + 0x28;
0x0004568e str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x00045690 mov r3, sl | r3 = sl;
0x00045692 ldrd r0, r2, [sp] | __asm ("ldrd r0, r2, [sp]");
0x00045696 add r1, sp, 0x14 | r1 += var_14h;
0x00045698 bl 0x4545c | fcn_0004545c (r0, r1, r2, r3);
0x0004569c ldr r4, [sp, 0x14] | r4 = var_14h;
0x0004569e b 0x45584 | goto label_2;
| label_9:
0x000456a0 str r3, [sp] | *(sp) = r3;
0x000456a2 blx 0x86a4 | fcn_000086a4 ();
0x000456a6 ldr r3, [sp] | r3 = *(sp);
0x000456a8 str.w r0, [sb, 0x24] | __asm ("str.w r0, [sb, 0x24]");
0x000456ac cmp r0, 0 |
| if (r0 == 0) {
0x000456ae beq 0x45664 | goto label_3;
| }
0x000456b0 ldr.w lr, [sb, 0x10] |
0x000456b4 b 0x455a8 | goto label_4;
| label_7:
0x000456b6 movs r7, 0 | r7 = 0;
0x000456b8 mov fp, sl |
0x000456ba mov r8, r7 | r8 = r7;
0x000456bc mov r4, r7 | r4 = r7;
0x000456be movs r1, 1 | r1 = 1;
0x000456c0 b 0x454e8 | goto label_5;
| label_11:
0x000456c2 blx 0x883c | fcn_0000883c ();
0x000456c6 nop |
0x000456c8 subs r0, 0x28 | r0 -= 0x28;
0x000456ca movs r0, r1 | r0 = r1;
0x000456cc lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000456ce movs r0, r0 |
0x000456d0 adds r7, 0xc | r7 += 0xc;
0x000456d2 movs r0, r1 | r0 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x456d4 */
| #include <stdint.h>
|
; (fcn) fcn.000456d4 () | void fcn_000456d4 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x000456d4 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x000456d8 mov sl, r3 | sl = r3;
0x000456da ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x000456dc mov r5, r0 | r5 = r0;
0x000456de mov r7, r2 | r7 = r2;
0x000456e0 mov r8, r1 | r8 = r1;
0x000456e2 ldr.w sb, [r1, 4] | sb = *((r1 + 4));
0x000456e6 cmp sl, r3 |
0x000456e8 ldr r0, [r1] | r0 = *(r1);
0x000456ea it le |
| if (sl > r3) {
0x000456ec movle r2, sb | r2 = sb;
| }
| if (sl > r3) {
0x000456ee bgt.w 0x45816 | goto label_3;
| }
| label_1:
0x000456f2 cmp r2, sl |
0x000456f4 it ge |
| if (r2 < sl) {
0x000456f6 movge r2, sl | r2 = sl;
| }
0x000456f8 cmp r2, 0 |
0x000456fa itt le |
| if (r2 > 0) {
0x000456fc movle r6, sl | r6 = sl;
| }
| if (r2 > 0) {
0x000456fe movle r4, 0 | r4 = 0;
| }
| if (r2 <= 0) {
0x00045700 ble 0x45722 | goto label_4;
| }
0x00045702 add.w ip, r0, -1 |
0x00045706 subs r6, r7, 1 | r6 = r7 - 1;
0x00045708 movs r4, 0 | r4 = 0;
0x0004570a b 0x45712 |
| while (r3 == lr) {
0x0004570c adds r4, 1 | r4++;
0x0004570e cmp r2, r4 |
| if (r2 == r4) {
0x00045710 beq 0x4571e | goto label_5;
| }
0x00045712 ldrb r3, [ip, 1]! | r3 = *((ip += 1));
0x00045716 ldrb lr, [r6, 1]! |
0x0004571a cmp r3, lr |
0x0004571c beq 0x4570c |
| }
| label_5:
0x0004571e sub.w r6, sl, r4 | r6 = sl - r4;
| label_4:
0x00045722 cmp r6, 0 |
0x00045724 it le |
| if (r6 <= 0) {
0x00045726 movwle r0, 0x10b | __asm ("movwle r0, aav.0x000000ff");
| }
| if (r6 <= 0) {
0x0004572a ble 0x457d8 | goto label_2;
| }
0x0004572c mov r2, sl | r2 = sl;
0x0004572e mov r1, r7 | r1 = r7;
0x00045730 blx 0x8610 | fcn_00008610 ();
0x00045734 str.w sl, [r8, 4] | __asm ("str.w sl, [r8, 4]");
0x00045738 cmp.w sb, 0 |
| if (sb != 0) {
0x0004573c bne 0x457dc | goto label_6;
| }
0x0004573e ldr r1, [r5, 4] | r1 = *((r5 + 4));
| label_0:
0x00045740 ldr r3, [r5] | r3 = *(r5);
0x00045742 asr.w ip, r6, 0x1f |
0x00045746 add.w sb, r3, r1 | sb = r3 + r1;
0x0004574a mov r3, r6 | r3 = r6;
0x0004574c mov lr, sb | lr = sb;
| do {
0x0004574e lsrs r1, r3, 7 | r1 = r3 >> 7;
0x00045750 orn r2, r3, 0x7f | r2 = r3 | 0x7f;
| r2 = ~r2;
0x00045754 uxtb.w r8, r3 | r8 = (int8_t) r3;
0x00045758 mov r0, lr | r0 = lr;
0x0004575a orr.w r3, r1, ip, lsl 25 | r3 = r1 | (ip << 25);
0x0004575e lsr.w ip, ip, 7 |
0x00045762 strb r2, [lr], 1 | *(lr) = r2;
| lr++;
0x00045766 orrs.w r2, r3, ip | r2 = r3 | ip;
0x0004576a bne 0x4574e |
| } while (r2 != r3);
0x0004576c strb.w r8, [r0] | *(r0) = r8;
0x00045770 sub.w lr, lr, sb | lr -= sb;
0x00045774 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00045776 mov r2, r6 | r2 = r6;
0x00045778 ldr r0, [r5] | r0 = *(r5);
0x0004577a adds r1, r7, r4 | r1 = r7 + r4;
0x0004577c add r3, lr | r3 += lr;
0x0004577e add r0, r3 | r0 += r3;
0x00045780 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00045782 blx 0x8610 | fcn_00008610 ();
0x00045786 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00045788 add r6, r3 | r6 += r3;
0x0004578a ldr r3, [sp, 0x20] | r3 = var_0h;
0x0004578c str r6, [r5, 4] | *((r5 + 4)) = r6;
| if (r3 == 0) {
0x0004578e cbz r3, 0x457d6 | goto label_7;
| }
0x00045790 ldr r3, [sp, 0x24] | r3 = var_4h;
0x00045792 ldr r1, [r5] | r1 = *(r5);
0x00045794 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x00045796 add.w ip, r1, r6 |
0x0004579a mov r1, ip | r1 = ip;
| do {
0x0004579c lsrs r4, r3, 7 | r4 = r3 >> 7;
0x0004579e orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x000457a2 uxtb r7, r3 | r7 = (int8_t) r3;
0x000457a4 mov r6, r1 | r6 = r1;
0x000457a6 orr.w r3, r4, r2, lsl 25 | r3 = r4 | (r2 << 25);
0x000457aa lsrs r2, r2, 7 | r2 >>= 7;
0x000457ac strb r0, [r1], 1 | *(r1) = r0;
| r1++;
0x000457b0 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x000457b4 bne 0x4579c |
| } while (r0 != r3);
0x000457b6 strb r7, [r6] | *(r6) = r7;
0x000457b8 sub.w r1, r1, ip | r1 -= ip;
0x000457bc ldrd r0, r3, [r5] | __asm ("ldrd r0, r3, [r5]");
0x000457c0 add r3, r1 | r3 += r1;
0x000457c2 ldrd r1, r2, [sp, 0x20] | __asm ("ldrd r1, r2, [var_0h]");
0x000457c6 add r0, r3 | r0 += r3;
0x000457c8 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x000457ca blx 0x8610 | fcn_00008610 ();
0x000457ce ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000457d0 ldr r2, [sp, 0x24] | r2 = var_4h;
0x000457d2 add r3, r2 | r3 += r2;
0x000457d4 str r3, [r5, 4] | *((r5 + 4)) = r3;
| label_7:
0x000457d6 movs r0, 0 | r0 = 0;
| label_2:
0x000457d8 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x000457dc ldrd r3, r2, [r5] | __asm ("ldrd r3, r2, [r5]");
0x000457e0 add.w r8, r3, r2 | r8 = r3 + r2;
0x000457e4 asrs r2, r4, 0x1f | r2 = r4 >> 0x1f;
0x000457e6 mov r3, r4 | r3 = r4;
0x000457e8 mov r1, r8 | r1 = r8;
| do {
0x000457ea lsrs r0, r3, 7 | r0 = r3 >> 7;
0x000457ec uxtb.w lr, r3 | lr = (int8_t) r3;
0x000457f0 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x000457f4 mov ip, r1 |
0x000457f6 strb r3, [r1], 1 | *(r1) = r3;
| r1++;
0x000457fa orr.w r3, r0, r2, lsl 25 | r3 = r0 | (r2 << 25);
0x000457fe lsrs r2, r2, 7 | r2 >>= 7;
0x00045800 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x00045804 bne 0x457ea |
| } while (r0 != r3);
0x00045806 strb.w lr, [ip] |
0x0004580a sub.w r1, r1, r8 | r1 -= r8;
0x0004580e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00045810 add r1, r3 | r1 += r3;
0x00045812 str r1, [r5, 4] | *((r5 + 4)) = r1;
0x00045814 b 0x45740 | goto label_0;
| label_3:
0x00045816 mov r1, sl | r1 = sl;
0x00045818 blx 0x8268 | r0 = fcn_00008268 ();
| if (r0 != 0) {
0x0004581c cbz r0, 0x4582c |
0x0004581e ldr.w r2, [r8, 4] | r2 = *((r8 + 4));
0x00045822 str.w sl, [r8, 8] | __asm ("str.w sl, [r8, 8]");
0x00045824 adr r0, 0x20 | r0 = 0x20;
0x00045826 str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x0004582a b 0x456f2 | goto label_1;
| }
0x0004582c movs r0, 7 | r0 = 7;
0x0004582e b 0x457d8 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x45830 */
| #include <stdint.h>
|
; (fcn) fcn.00045830 () | void fcn_00045830 (int16_t arg1) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
0x00045830 ldr r1, [pc, 0x154] |
0x00045832 movs r2, 0 | r2 = 0;
0x00045834 ldr r3, [pc, 0x154] | r3 = *(0x4598c);
0x00045836 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0004583a sub sp, 0x14 |
0x0004583c add r1, pc | r1 = 0x8b1c8;
0x0004583e ldr.w r8, [r0, 0x1c] | r8 = *((r0 + 0x1c));
0x00045842 mov r4, r0 | r4 = r0;
0x00045844 ldr r3, [r1, r3] |
0x00045846 ldrd r6, r5, [r0, 4] | __asm ("ldrd r6, r5, [r0, 4]");
0x0004584a ldr r3, [r3] | r3 = *(0x8b1c8);
0x0004584c str r3, [sp, 0xc] | var_ch = r3;
0x0004584e mov.w r3, 0 | r3 = 0;
0x00045852 ldrd r3, r1, [r0, 0x10] | __asm ("ldrd r3, r1, [r0, 0x10]");
0x00045856 strd r2, r2, [sp, 4] | __asm ("strd r2, r2, [var_4h]");
0x0004585a orrs.w r2, r3, r1 | r2 = r3 | r1;
| if (r2 == r3) {
0x0004585e beq 0x4591c | goto label_8;
| }
0x00045860 cmp.w r8, 0 |
| if (r8 == 0) {
0x00045864 beq 0x45894 | goto label_9;
| }
0x00045866 adds r3, 1 | r3++;
0x00045868 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0004586c cmp r5, r6 |
0x0004586e str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00045870 str r1, [r0, 0x14] | *((r0 + 0x14)) = r1;
| if (r5 < r6) {
0x00045872 blt 0x4594e | goto label_10;
| }
| do {
| label_1:
0x00045874 movs r3, 0 | r3 = 0;
0x00045876 str r3, [r4] | *(r4) = r3;
| label_0:
0x00045878 movs r0, 0 | r0 = 0;
| label_3:
0x0004587a ldr r2, [pc, 0x114] |
0x0004587c ldr r3, [pc, 0x10c] | r3 = *(0x4598c);
0x0004587e add r2, pc | r2 = 0x8b214;
0x00045880 ldr r3, [r2, r3] | r3 = *(0x8b214);
0x00045882 ldr r2, [r3] | r2 = *(0x8b214);
0x00045884 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00045886 eors r2, r3 | r2 ^= r3;
0x00045888 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004588c bne 0x45984 | goto label_11;
| }
0x0004588e add sp, 0x14 |
0x00045890 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_9:
0x00045894 cmp r5, r6 |
0x00045896 bge 0x45874 |
| } while (r5 >= r6);
0x00045898 ldr r7, [r0] | r7 = *(r0);
0x0004589a mov sb, r8 | sb = r8;
| label_2:
0x0004589c ldrb r3, [r7, r5] | r3 = *((r7 + r5));
0x0004589e adds r0, r7, r5 | r0 = r7 + r5;
0x000458a0 lsls r1, r3, 0x18 | r1 = r3 << 0x18;
0x000458a2 itt pl |
| if (r1 < r3) {
0x000458a4 movpl r0, 1 | r0 = 1;
| }
| if (r1 < r3) {
0x000458a6 strpl r3, [sp, 8] | var_8h = r3;
| }
| if (r1 < r3) {
0x000458a8 bmi 0x4595e | goto label_12;
| }
| label_5:
0x000458aa cmp r8, sb |
0x000458ac add r0, r5 | r0 += r5;
0x000458ae str r0, [r4, 8] | *((r4 + 8)) = r0;
| if (r8 < sb) {
0x000458b0 blt 0x45948 | goto label_13;
| }
0x000458b2 ldr r5, [sp, 8] | r5 = var_8h;
0x000458b4 subs r6, r6, r0 | r6 -= r0;
0x000458b6 clz r3, r5 | r3 &= r5;
0x000458ba lsrs r3, r3, 5 | r3 >>= 5;
0x000458bc cmp r6, r5 |
0x000458be it lt |
| if (r6 >= r5) {
0x000458c0 orrlt r3, r3, 1 | r3 |= 1;
| }
0x000458c4 cmp r3, 0 |
| if (r3 != 0) {
0x000458c6 bne 0x45948 | goto label_13;
| }
0x000458c8 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000458ca add.w r6, r5, sb | r6 = r5 + sb;
0x000458ce ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x000458d0 cmp r6, r3 |
| if (r6 > r3) {
0x000458d2 bgt 0x45966 | goto label_14;
| }
0x000458d4 cmp r0, 0 |
| if (r0 == 0) {
0x000458d6 beq 0x45878 | goto label_0;
| }
| label_6:
0x000458d8 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000458da mov r2, r5 | r2 = r5;
0x000458dc ldr r1, [r4] | r1 = *(r4);
0x000458de add r0, sb | r0 += sb;
0x000458e0 add r1, r3 | r1 += r3;
0x000458e2 blx 0x8610 | fcn_00008610 ();
0x000458e6 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x000458e8 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000458ea str r6, [r4, 0x1c] | *((r4 + 0x1c)) = r6;
0x000458ec add r5, r2 | r5 += r2;
0x000458ee ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x000458f0 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x000458f2 orrs r3, r2 | r3 |= r2;
| if (r3 != r2) {
0x000458f4 bne 0x45878 | goto label_0;
| }
0x000458f6 ldr r6, [r4] | r6 = *(r4);
0x000458f8 ldrb r3, [r6, r5] | r3 = *((r6 + r5));
0x000458fa adds r0, r6, r5 | r0 = r6 + r5;
0x000458fc lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x000458fe itt pl |
| if (r2 < r3) {
0x00045900 movpl r0, 1 | r0 = 1;
| }
| if (r2 < r3) {
0x00045902 strpl r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| }
| if (r2 < r3) {
0x00045904 bmi 0x45978 | goto label_15;
| }
| label_7:
0x00045906 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00045908 add r5, r0 | r5 += r0;
0x0004590a str r5, [r4, 8] | *((r4 + 8)) = r5;
0x0004590c subs r1, r1, r5 | r1 -= r5;
0x0004590e cmp r1, r3 |
| if (r1 < r3) {
0x00045910 blt 0x45948 | goto label_13;
| }
0x00045912 add r6, r5 | r6 += r5;
0x00045914 add r5, r3 | r5 += r3;
0x00045916 str r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x00045918 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x0004591a b 0x45878 | goto label_0;
| label_8:
0x0004591c cmp r5, r6 |
| if (r5 >= r6) {
0x0004591e bge 0x45874 | goto label_1;
| }
0x00045920 ldr r7, [r0] | r7 = *(r0);
0x00045922 mov sb, r8 | sb = r8;
0x00045924 mov r3, r7 | r3 = r7;
0x00045926 cmp.w r8, 0 |
| if (r8 == 0) {
0x0004592a beq 0x4589c | goto label_2;
| }
| do {
0x0004592c ldrb.w sb, [r3, r5] | sb = *((r3 + r5));
0x00045930 adds r0, r3, r5 | r0 = r3 + r5;
0x00045932 mov r7, r3 | r7 = r3;
0x00045934 tst.w sb, 0x80 |
0x00045938 itt eq |
| if ((sb & 0x80) != 0) {
0x0004593a moveq r0, 1 | r0 = 1;
| }
| if ((sb & 0x80) != 0) {
0x0004593c streq sb, [sp, 4] | var_4h = sb;
| }
| if ((sb & 0x80) != 0) {
0x00045940 bne 0x45952 | goto label_16;
| }
| label_4:
0x00045942 add r5, r0 | r5 += r0;
0x00045944 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x00045946 b 0x4589c | goto label_2;
| label_13:
0x00045948 movw r0, 0x10b | r0 = 0x10b;
0x0004594c b 0x4587a | goto label_3;
| label_10:
0x0004594e ldr r3, [r0] | r3 = *(r0);
0x00045950 b 0x4592c |
| } while (1);
| label_16:
0x00045952 add r1, sp, 4 | r1 += var_4h;
0x00045954 bl 0xb698 | fcn_0000b698 (r0, r1);
0x00045958 ldr.w sb, [sp, 4] | sb = var_4h;
0x0004595c b 0x45942 | goto label_4;
| label_12:
0x0004595e add r1, sp, 8 | r1 += var_8h;
0x00045960 bl 0xb698 | fcn_0000b698 (r0, r1);
0x00045964 b 0x458aa | goto label_5;
| label_14:
0x00045966 mov r1, r6 | r1 = r6;
0x00045968 blx 0x8268 | r0 = fcn_00008268 ();
| if (r0 != 0) {
0x0004596c cbz r0, 0x45974 |
0x0004596e str r6, [r4, 0x20] | *((r4 + 0x20)) = r6;
0x00045970 str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x00045972 b 0x458d8 | goto label_6;
| }
0x00045974 movs r0, 7 | r0 = 7;
0x00045976 b 0x4587a | goto label_3;
| label_15:
0x00045978 add.w r1, r4, 0x28 | r1 = r4 + 0x28;
0x0004597c bl 0xb698 | fcn_0000b698 (r0, r1);
0x00045980 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00045982 b 0x45906 | goto label_7;
| label_11:
0x00045984 blx 0x883c | fcn_0000883c ();
0x00045988 adds r4, 0x5c | r4 += 0x5c;
0x0004598a movs r0, r1 | r0 = r1;
0x0004598c lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0004598e movs r0, r0 |
0x00045990 adds r4, 0x1a | r4 += 0x1a;
0x00045992 movs r0, r1 | r0 = r1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x45be4 */
| #include <stdint.h>
|
; (fcn) fcn.00045be4 () | void fcn_00045be4 (int16_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00045be4 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00045be8 mov r5, r0 | r5 = r0;
0x00045bea ldrd r4, r6, [r0, 8] | __asm ("ldrd r4, r6, [r0, 8]");
0x00045bee movs r0, 0 | r0 = 0;
0x00045bf0 cmp r1, r4 |
0x00045bf2 sbcs r0, r6 | __asm ("sbcs r0, r6");
| if (r1 >= r4) {
0x00045bf4 bhs 0x45c08 | goto label_1;
| }
0x00045bf6 ldrb r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00045bf8 adds r4, r4, r4 | r4 += r4;
0x00045bfa adcs r6, r6 | __asm ("adcs r6, r6");
| if (r3 == 0) {
0x00045bfc cbz r3, 0x45c1c | goto label_2;
| }
| do {
0x00045bfe ldrb r7, [r5, 0x19] | r7 = *((r5 + 0x19));
0x00045c00 movs r0, 1 | r0 = 1;
| if (r7 == 0) {
0x00045c02 cbz r7, 0x45c2c | goto label_3;
| }
| label_0:
0x00045c04 pop.w {r4, r5, r6, r7, r8, pc} |
| label_1:
0x00045c08 adds.w r2, r4, 0xa | r2 = r4 + 0xa;
0x00045c0c adc r3, r6, 0 | __asm ("adc r3, r6, 0");
0x00045c10 adds r4, r2, r1 | r4 = r2 + r1;
0x00045c12 adc r6, r3, 0 | __asm ("adc r6, r3, 0");
0x00045c16 ldrb r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00045c18 cmp r3, 0 |
0x00045c1a bne 0x45bfe |
| } while (r3 != 0);
| label_2:
0x00045c1c ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00045c1e mov r2, r4 | r2 = r4;
0x00045c20 mov r3, r6 | r3 = r6;
0x00045c22 blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 != 0) {
0x00045c26 cbz r0, 0x45c50 |
0x00045c28 str r0, [r5, 4] | *((r5 + 4)) = r0;
0x00045c2a b 0x45c46 | goto label_4;
| label_3:
0x00045c2c mov r0, r4 | r0 = r4;
0x00045c2e mov r1, r6 | r1 = r6;
0x00045c30 blx 0x8240 | r0 = fcn_00008240 ();
0x00045c34 mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x00045c36 cbz r0, 0x45c50 | goto label_5;
| }
0x00045c38 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x00045c3a ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00045c3c blx 0x8610 | fcn_00008610 ();
0x00045c40 str.w r8, [r5, 4] | __asm ("str.w r8, [r5, 4]");
0x00045c44 strb r7, [r5, 0x18] | *((r5 + 0x18)) = r7;
| label_4:
0x00045c46 movs r0, 0 | r0 = 0;
0x00045c48 strd r4, r6, [r5, 8] | __asm ("strd r4, r6, [r5, 8]");
0x00045c4c pop.w {r4, r5, r6, r7, r8, pc} |
| }
| label_5:
0x00045c50 movs r3, 1 | r3 = 1;
0x00045c52 ldr r0, [r5] | r0 = *(r5);
0x00045c54 strb r3, [r5, 0x19] | *((r5 + 0x19)) = r3;
0x00045c56 blx 0x81e8 | fcn_000081e8 ();
0x00045c5a ldrb r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00045c5c cbz r3, 0x45c7c |
| while (1) {
0x00045c5e vldr d16, [pc, 0x28] | __asm ("vldr d16, aav.0x000000ff");
0x00045c62 vldr d17, [pc, 0x2c] | __asm ("vldr d17, aav.0x000000ff");
0x00045c66 add.w r2, r5, 0x1a | r2 = r5 + 0x1a;
0x00045c6a movs r3, 1 | r3 = 1;
0x00045c6c movs r0, 7 | r0 = 7;
0x00045c6e str r2, [r5, 4] | *((r5 + 4)) = r2;
0x00045c70 vstr d16, [r5, 8] | __asm ("vstr d16, [r5, 8]");
0x00045c74 vstr d17, [r5, 0x10] | __asm ("vstr d17, [r5, 0x10]");
0x00045c78 strb r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x00045c7a b 0x45c04 | goto label_0;
0x00045c7c ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00045c7e blx 0x8404 | fcn_00008404 ();
0x00045c82 b 0x45c5e |
| }
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x45c98 */
| #include <stdint.h>
|
; (fcn) fcn.00045c98 () | void fcn_00045c98 (int16_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00045c98 cmp r1, 0 |
| if (r1 == 0) {
0x00045c9a beq.w 0x45e62 | goto label_4;
| }
0x00045c9e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00045ca2 mov sl, r2 | sl = r2;
0x00045ca4 ldrd r3, r7, [r0, 0x10] | __asm ("ldrd r3, r7, [r0, 0x10]");
0x00045ca8 mov sb, r1 | sb = r1;
0x00045caa sub sp, 0x14 |
0x00045cac mov r4, r0 | r4 = r0;
0x00045cae ldrd r6, r5, [r0, 8] | __asm ("ldrd r6, r5, [r0, 8]");
0x00045cb2 adds r2, r3, 2 | r2 = r3 + 2;
0x00045cb4 adc r1, r7, 0 | __asm ("adc r1, r7, 0");
0x00045cb8 adds.w r2, r2, sl | r2 += sl;
0x00045cbc adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00045cc0 cmp r2, r6 |
0x00045cc2 sbcs r1, r5 | __asm ("sbcs r1, r5");
| if (r2 >= r6) {
0x00045cc4 bhs.w 0x45e50 | goto label_5;
| }
| label_3:
0x00045cc8 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00045cca adds r1, r3, 1 | r1 = r3 + 1;
0x00045ccc str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x00045cce adc r7, r7, 0 | __asm ("adc r7, r7, 0");
0x00045cd2 movs r1, 0x22 | r1 = 0x22;
0x00045cd4 str r7, [r4, 0x14] | *((r4 + 0x14)) = r7;
0x00045cd6 strb r1, [r2, r3] | *((r2 + r3)) = r1;
0x00045cd8 cmp.w sl, 0 |
| if (sl == 0) {
0x00045cdc beq.w 0x45e36 | goto label_6;
| }
0x00045ce0 ldr r3, [pc, 0x180] |
0x00045ce2 movs r5, 0 | r5 = 0;
0x00045ce4 add.w r7, sl, 7 | r7 = sl + 7;
0x00045ce8 add.w sb, sb, -1 | sb += -1;
0x00045cec mov r8, r5 | r8 = r5;
0x00045cee mov.w fp, 0x5c |
0x00045cf2 add r3, pc | r3 = 0x8bb5a;
0x00045cf4 str r7, [sp, 4] | var_4h = r7;
0x00045cf6 str r3, [sp, 8] | var_8h = r3;
0x00045cf8 ldr r3, [pc, 0x16c] |
0x00045cfa add r3, pc | r3 = 0x8bb66;
0x00045cfc str r3, [sp, 0xc] | var_ch = r3;
0x00045cfe b 0x45dc4 |
| while (r6 != 0x5c) {
0x00045d00 cmp r6, 0x1f |
| if (r6 <= 0x1f) {
0x00045d02 bhi 0x45da6 |
0x00045d04 ldr r7, [sp, 8] | r7 = var_8h;
0x00045d06 add.w ip, r7, r6 |
0x00045d0a ldrb.w ip, [ip, 0x548] | ip = *((ip + 0x548));
0x00045d0e cmp.w ip, 0 |
| if (ip != 0) {
0x00045d12 bne.w 0x45e22 | goto label_7;
| }
0x00045d16 ldrd r7, r2, [r4, 8] | __asm ("ldrd r7, r2, [r4, 8]");
0x00045d1a adds r1, r3, 7 | r1 = r3 + 7;
0x00045d1c adc ip, r0, 0 | __asm ("adc ip, r0, 0");
0x00045d20 adds.w r1, r1, sl | r1 += sl;
0x00045d24 adc ip, ip, 0 | __asm ("adc ip, ip, 0");
0x00045d28 adds r1, r1, r5 | r1 += r5;
0x00045d2a adc.w ip, r8, ip | __asm ("adc.w ip, r8, ip");
0x00045d2e cmp r7, r1 |
0x00045d30 sbcs.w ip, r2, ip | __asm ("sbcs.w ip, r2, ip");
| if (r7 <= r1) {
0x00045d34 blo 0x45e26 | goto label_8;
| }
| label_2:
0x00045d36 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00045d38 adds r1, r3, 1 | r1 = r3 + 1;
0x00045d3a adc r0, r0, 0 | __asm ("adc r0, r0, 0");
0x00045d3e str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x00045d40 str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x00045d42 mov.w ip, 0x75 |
0x00045d46 strb.w fp, [r2, r3] | *((r2 + r3)) = fp;
0x00045d4a movs r1, 0x30 | r1 = 0x30;
0x00045d4c ldrd r0, r3, [r4, 0x10] | __asm ("ldrd r0, r3, [r4, 0x10]");
0x00045d50 adds r2, r0, 1 | r2 = r0 + 1;
0x00045d52 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00045d56 str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x00045d58 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00045d5a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00045d5c strb.w ip, [r3, r0] | *((r3 + r0)) = ip;
0x00045d60 lsrs r0, r6, 4 | r0 = r6 >> 4;
0x00045d62 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00045d64 and r6, r6, 0xf | r6 &= 0xf;
0x00045d68 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00045d6a add r0, r1 | r0 += r1;
0x00045d6c ldrb r6, [r3, r6] | r6 = *((r3 + r6));
0x00045d6e adds r3, r2, 1 | r3 = r2 + 1;
0x00045d70 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00045d72 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00045d74 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00045d78 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00045d7a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00045d7c strb r1, [r3, r2] | *((r3 + r2)) = r1;
0x00045d7e ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00045d80 adds r3, r2, 1 | r3 = r2 + 1;
0x00045d82 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00045d84 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00045d86 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00045d8a str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00045d8c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00045d8e strb r1, [r3, r2] | *((r3 + r2)) = r1;
0x00045d90 ldrd r1, r3, [r4, 0x10] | __asm ("ldrd r1, r3, [r4, 0x10]");
0x00045d94 adds r2, r1, 1 | r2 = r1 + 1;
0x00045d96 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00045d9a str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x00045d9c str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00045d9e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00045da0 strb r0, [r3, r1] | *((r3 + r1)) = r0;
0x00045da2 ldrd r2, r1, [r4, 0x10] | __asm ("ldrd r2, r1, [r4, 0x10]");
| }
| label_0:
0x00045da6 ldr r0, [sp, 4] | r0 = var_4h;
0x00045da8 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00045daa subs r7, r0, 1 | r7 = r0 - 1;
0x00045dac adds r0, r2, 1 | r0 = r2 + 1;
0x00045dae adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00045db2 adds r5, 1 | r5++;
0x00045db4 adc r8, r8, 0 | __asm ("adc r8, r8, 0");
0x00045db8 cmp r7, 7 |
0x00045dba str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x00045dbc str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x00045dbe str r7, [sp, 4] | var_4h = r7;
0x00045dc0 strb r6, [r3, r2] | *((r3 + r2)) = r6;
| if (r7 == 7) {
0x00045dc2 beq 0x45e36 | goto label_6;
| }
0x00045dc4 ldrb r6, [sb, 1]! | r6 = *((sb += 1));
0x00045dc8 ldrd r3, r0, [r4, 0x10] | __asm ("ldrd r3, r0, [r4, 0x10]");
0x00045dcc cmp r6, 0x5c |
0x00045dce it ne |
| if (r6 != 0x5c) {
0x00045dd0 cmpne r6, 0x22 | __asm ("cmpne r6, 0x22");
| }
0x00045dd2 mov r2, r3 | r2 = r3;
0x00045dd4 mov r1, r0 | r1 = r0;
0x00045dd6 bne 0x45d00 |
| }
| label_1:
0x00045dd8 adds r2, 3 | r2 += 3;
0x00045dda adc lr, r1, 0 | __asm ("adc lr, r1, 0");
0x00045dde adds.w r2, r2, sl | r2 += sl;
0x00045de2 adc lr, lr, 0 | __asm ("adc lr, lr, 0");
0x00045de6 subs.w ip, r2, r5 |
0x00045dea ldrd r1, r2, [r4, 8] | __asm ("ldrd r1, r2, [r4, 8]");
0x00045dee sbc.w lr, lr, r8 | __asm ("sbc.w lr, lr, r8");
0x00045df2 cmp r1, ip |
0x00045df4 sbcs.w lr, r2, lr | __asm ("sbcs.w lr, r2, lr");
0x00045df8 blo 0x45e10 |
| while (1) {
0x00045dfa ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00045dfc adds r1, r3, 1 | r1 = r3 + 1;
0x00045dfe adc r0, r0, 0 | __asm ("adc r0, r0, 0");
0x00045e02 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x00045e04 str r0, [r4, 0x14] | *((r4 + 0x14)) = r0;
0x00045e06 strb.w fp, [r2, r3] | *((r2 + r3)) = fp;
0x00045e0a ldrd r2, r1, [r4, 0x10] | __asm ("ldrd r2, r1, [r4, 0x10]");
0x00045e0e b 0x45da6 | goto label_0;
0x00045e10 ldr r3, [sp, 4] | r3 = var_4h;
0x00045e12 mov r0, r4 | r0 = r4;
0x00045e14 subs r1, r3, 4 | r1 = r3 - 4;
0x00045e16 bl 0x45be4 | r0 = fcn_00045be4 (r0, r1);
| if (r0 != 0) {
0x00045e1a cbnz r0, 0x45e4a | goto label_9;
| }
0x00045e1c ldrd r3, r0, [r4, 0x10] | __asm ("ldrd r3, r0, [r4, 0x10]");
0x00045e20 b 0x45dfa |
| }
| label_7:
0x00045e22 mov r6, ip | r6 = ip;
0x00045e24 b 0x45dd8 | goto label_1;
| label_8:
0x00045e26 ldr r1, [sp, 4] | r1 = var_4h;
0x00045e28 mov r0, r4 | r0 = r4;
0x00045e2a bl 0x45be4 | r0 = fcn_00045be4 (r0, r1);
| if (r0 != 0) {
0x00045e2e cbnz r0, 0x45e4a | goto label_9;
| }
0x00045e30 ldrd r3, r0, [r4, 0x10] | __asm ("ldrd r3, r0, [r4, 0x10]");
0x00045e34 b 0x45d36 | goto label_2;
| label_6:
0x00045e36 ldrd r3, r2, [r4, 0x10] | __asm ("ldrd r3, r2, [r4, 0x10]");
0x00045e3a ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00045e3c adds r0, r3, 1 | r0 = r3 + 1;
0x00045e3e str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x00045e40 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00045e44 movs r0, 0x22 | r0 = 0x22;
0x00045e46 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x00045e48 strb r0, [r1, r3] | *((r1 + r3)) = r0;
| do {
| label_9:
0x00045e4a add sp, 0x14 |
0x00045e4c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00045e50 add.w r1, sl, 2 | r1 = sl + 2;
0x00045e54 bl 0x45be4 | r0 = fcn_00045be4 (r0, r1);
0x00045e58 cmp r0, 0 |
0x00045e5a bne 0x45e4a |
| } while (r0 != 0);
0x00045e5c ldrd r3, r7, [r4, 0x10] | __asm ("ldrd r3, r7, [r4, 0x10]");
0x00045e60 b 0x45cc8 | goto label_3;
| label_4:
0x00045e62 bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x46480 */
| #include <stdint.h>
|
; (fcn) fcn.00046480 () | void fcn_00046480 (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00046480 ldr r3, [r0, 0x30] | r3 = *((r0 + 0x30));
0x00046482 push.w {r4, r5, r6, r7, r8, lr} |
0x00046486 mov r7, r0 | r7 = r0;
0x00046488 mov r4, r2 | r4 = r2;
0x0004648a mov r6, r1 | r6 = r1;
0x0004648c ldr.w r5, [r3, r2, lsl 2] | offset_0 = r2 << 2;
| r5 = *((r3 + offset_0));
| if (r5 == 0) {
0x00046490 cbz r5, 0x464c4 | goto label_2;
| }
0x00046492 mov r2, r5 | r2 = r5;
0x00046494 bl 0x46480 | fcn_00046480 (r0, r1, r2);
| do {
| label_0:
0x00046498 ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x0004649a add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0004649e add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x000464a2 lsls r5, r5, 2 | r5 <<= 2;
0x000464a4 add.w r3, r2, r4, lsl 2 | r3 = r2 + (r4 << 2);
0x000464a8 adds r1, r2, r5 | r1 = r2 + r5;
0x000464aa ldrb r2, [r2, r5] | r2 = *((r2 + r5));
0x000464ac cmp r2, 6 |
| if (r2 == 6) {
0x000464ae beq 0x464e6 | goto label_3;
| }
0x000464b0 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x000464b2 mov r0, r6 | r0 = r6;
0x000464b4 pop.w {r4, r5, r6, r7, r8, lr} |
0x000464b8 lsls r2, r2, 0x19 | r2 <<= 0x19;
0x000464ba it pl |
| if (r2 < r2) {
0x000464bc subpl r3, 0xc | r3 -= 0xc;
| }
0x000464be ldrd r1, r2, [r3, 4] | __asm ("ldrd r1, r2, [r3, 4]");
0x000464c2 b 0x460e4 | void (*0x460e4)() ();
| label_2:
0x000464c4 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000464c6 ldr r0, [r1, 8] | r0 = *((r1 + 8));
0x000464c8 ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x000464ca ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x000464cc cmp r3, r0 |
0x000464ce sbcs.w r1, r2, r1 | __asm ("sbcs.w r1, r2, r1");
| if (r3 >= r0) {
0x000464d2 bhs 0x464f6 | goto label_4;
| }
| label_1:
0x000464d4 adds r0, r3, 1 | r0 = r3 + 1;
0x000464d6 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x000464d8 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x000464dc str r0, [r6, 0x10] | *((r6 + 0x10)) = r0;
0x000464de str r2, [r6, 0x14] | *((r6 + 0x14)) = r2;
0x000464e0 movs r2, 0x24 | r2 = 0x24;
0x000464e2 strb r2, [r1, r3] | *((r1 + r3)) = r2;
0x000464e4 b 0x46498 |
| } while (1);
| label_3:
0x000464e6 ldr r2, [pc, 0x20] |
0x000464e8 movs r0, 0x1e | r0 = 0x1e;
0x000464ea ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x000464ec mov r1, r6 | r1 = r6;
0x000464ee pop.w {r4, r5, r6, r7, r8, lr} |
0x000464f2 add r2, pc | r2 = 0x8ca00;
0x000464f4 b 0x46054 | void (*0x46054)() ();
| label_4:
0x000464f6 movs r1, 1 | r1 = 1;
0x000464f8 mov r0, r6 | r0 = r6;
0x000464fa bl 0x45be4 | r0 = fcn_00045be4 (r0, r1);
0x000464fe cmp r0, 0 |
| if (r0 != 0) {
0x00046500 bne 0x46498 | goto label_0;
| }
0x00046502 ldrd r3, r2, [r6, 0x10] | __asm ("ldrd r3, r2, [r6, 0x10]");
0x00046506 b 0x464d4 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x46cf4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00046cf4 () | void fcn_00046cf4 (int16_t arg1, int16_t arg2) {
| int16_t var_24h_2;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| label_2:
0x00008230 bx pc | return void (*pc)() ();
| do {
| label_0:
0x000083a8 bx pc | return void (*pc)() ();
| label_13:
0x00008420 bx pc | return void (*pc)() ();
| label_1:
0x00008694 bx pc | return void (*pc)() ();
0x00046cf4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00046cf8 mov r5, r1 | r5 = r1;
0x00046cfa ldr r1, [pc, 0x3f4] |
0x00046cfc sub sp, 0x2c |
0x00046cfe ldr r2, [pc, 0x3f4] | r2 = *(0x470f6);
0x00046d00 add r1, pc | r1 = 0x8ddf6;
0x00046d02 ldrb r3, [r0] | r3 = *(r0);
0x00046d04 ldr.w sl, [pc, 0x3f0] |
0x00046d08 ldr r2, [r1, r2] |
0x00046d0a subs r3, 1 | r3--;
0x00046d0c add sl, pc | sl = 0x8de08;
0x00046d0e ldr r2, [r2] | r2 = *(0x8ddf6);
0x00046d10 str r2, [sp, 0x24] | var_24h = r2;
0x00046d12 mov.w r2, 0 | r2 = 0;
0x00046d16 cmp r3, 6 |
| if (r3 > 6) {
0x00046d18 bhi.w 0x470ce | goto label_14;
| }
| /* switch table (7 cases) at 0x46d20 */
0x00046d1c tbb [pc, r3] | __asm ("tbb aav.0x000000ff");
0x00046d28 ldr r2, [pc, 0x3d0] |
0x00046d2a ldr r3, [pc, 0x3c8] | r3 = *(0x470f6);
0x00046d2c add r2, pc | r2 = 0x8de2c;
0x00046d2e ldr r3, [r2, r3] | r3 = *(0x8de2c);
0x00046d30 ldr r2, [r3] | r2 = *(0x8de2c);
0x00046d32 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00046d34 eors r2, r3 | r2 ^= r3;
0x00046d36 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00046d3a bne.w 0x47028 | goto label_12;
| }
0x00046d3e movs r2, 0 | r2 = 0;
0x00046d40 mov r1, r5 | r1 = r5;
0x00046d42 add sp, 0x2c |
0x00046d44 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00046d48 b 0x46c2c | void (*0x46c2c)() ();
0x00046d4a ldr r2, [pc, 0x3b4] |
0x00046d4c ldr r3, [pc, 0x3a4] | r3 = *(0x470f4);
0x00046d4e add r2, pc | r2 = 0x8de54;
0x00046d50 ldr r3, [r2, r3] | r3 = *(0x8de54);
0x00046d52 ldr r2, [r3] | r2 = *(0x8de54);
0x00046d54 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00046d56 eors r2, r3 | r2 ^= r3;
0x00046d58 mov.w r3, 0 | r3 = 0;
0x00046d5c it eq |
| if (r2 != r3) {
0x00046d5e moveq r1, 1 | r1 = 1;
| }
| if (r2 != r3) {
0x00046d60 bne.w 0x47028 | goto label_12;
| }
0x00046d64 mov r0, r5 | r0 = r5;
0x00046d66 add sp, 0x2c |
0x00046d68 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00046d6c b.w 0x83a8 |
| } while (1);
0x00046d70 ldr r2, [pc, 0x390] |
0x00046d72 ldr r3, [pc, 0x380] | r3 = *(0x470f6);
0x00046d74 add r2, pc | r2 = 0x8de7c;
0x00046d76 ldr r3, [r2, r3] | r3 = *(0x8de7c);
0x00046d78 ldr r2, [r3] | r2 = *(0x8de7c);
0x00046d7a ldr r3, [sp, 0x24] | r3 = var_24h;
0x00046d7c eors r2, r3 | r2 ^= r3;
0x00046d7e mov.w r3, 0 | r3 = 0;
0x00046d82 it eq |
| if (r2 != r3) {
0x00046d84 moveq r1, 0 | r1 = 0;
| }
| if (r2 != r3) {
0x00046d86 bne.w 0x47028 | goto label_12;
| }
0x00046d8a mov r0, r5 | r0 = r5;
0x00046d8c add sp, 0x2c |
0x00046d8e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00046d92 b.w 0x83a8 | goto label_0;
0x00046d96 ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x00046d98 ldrb r1, [r4] | r1 = *(r4);
0x00046d9a cmp r1, 0x2d |
| if (r1 == 0x2d) {
0x00046d9c beq.w 0x46fba | goto label_15;
| }
0x00046da0 sub.w r6, r1, 0x30 | r6 = r1 - 0x30;
0x00046da4 uxtb r3, r6 | r3 = (int8_t) r6;
0x00046da6 cmp r3, 9 |
0x00046da8 it ls |
| if (r3 > 9) {
0x00046daa movls r7, r4 | r7 = r4;
| }
| if (r3 > 9) {
0x00046dac bhi.w 0x46fc8 | goto label_16;
| }
| label_8:
0x00046db0 movs r2, 0 | r2 = 0;
0x00046db2 movw ip, 0xcccc |
0x00046db6 adds r7, 1 | r7++;
0x00046db8 movt ip, 0xccc | ip = 0xccccccc;
0x00046dbc mov r3, r2 | r3 = r2;
0x00046dbe mov.w lr, -0x33333334 | lr = -0x33333334;
| do {
0x00046dc2 cmp.w r2, -0x33333334 |
0x00046dc6 sbcs.w r0, r3, ip | __asm ("sbcs.w r0, r3, ip");
| if (r2 >= -0x33333334) {
0x00046dca blt 0x46e96 |
0x00046dcc cmp r3, ip |
0x00046dce it eq |
| if (r3 == ip) {
0x00046dd0 cmpeq r2, lr | __asm ("cmpeq r2, lr");
| }
| if (r3 == ip) {
0x00046dd2 bne 0x46e20 |
0x00046dd4 ldrb r3, [r7] | r3 = *(r7);
0x00046dd6 subs r3, 0x30 | r3 -= 0x30;
0x00046dd8 cmp r6, 9 |
0x00046dda it ne |
| if (r6 != 9) {
0x00046ddc cmpne r3, 9 | __asm ("cmpne r3, 9");
| }
| if (r6 < 9) {
0x00046dde bls 0x46e20 | goto label_9;
| }
0x00046de0 subs.w r2, r6, 8 | r2 = r6 - 8;
0x00046de4 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x00046de8 adc.w r3, r3, r6, asr 31 | __asm ("adc.w r3, r3, r6, asr 31");
0x00046dec cmp r6, 8 |
| if (r6 == 8) {
0x00046dee beq.w 0x47004 | goto label_17;
| }
| label_3:
0x00046df2 cmp r1, 0x2d |
| if (r1 == 0x2d) {
0x00046df4 beq.w 0x46fb2 | goto label_18;
| }
| label_7:
0x00046df8 ldr r0, [pc, 0x30c] |
0x00046dfa ldr r1, [pc, 0x2f8] | r1 = *(0x470f6);
0x00046dfc add r0, pc | r0 = 0x8df08;
0x00046dfe ldr r1, [r0, r1] | r1 = *(0x8df08);
0x00046e00 ldr r0, [r1] | r0 = *(0x8df08);
0x00046e02 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00046e04 eors r0, r1 | r0 ^= r1;
0x00046e06 mov.w r1, 0 | r1 = 0;
| if (r0 != r1) {
0x00046e0a bne.w 0x47028 | goto label_12;
| }
| label_10:
0x00046e0e mov r0, r5 | r0 = r5;
0x00046e10 add sp, 0x2c |
0x00046e12 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00046e16 b.w 0x8694 | goto label_1;
0x00046e1a ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x00046e1c mov r2, r4 | r2 = r4;
| if (r4 == 0) {
0x00046e1e cbz r4, 0x46e2a | goto label_19;
| }
| }
| label_9:
0x00046e20 mov r0, r4 | r0 = r4;
0x00046e22 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00046e26 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
| label_19:
0x00046e2a movs r3, 1 | r3 = 1;
0x00046e2c add r1, sp, 0x18 | r1 += var_18h;
0x00046e2e mov r0, r4 | r0 = r4;
0x00046e30 bl 0x8ef8 | fcn_00008ef8 (r0, r1, r2, r3);
0x00046e34 ldr r2, [pc, 0x2d4] |
0x00046e36 ldr r3, [pc, 0x2bc] | r3 = *(0x470f6);
0x00046e38 add r2, pc | r2 = 0x8df48;
0x00046e3a ldr r3, [r2, r3] | r3 = *(0x8df48);
0x00046e3c ldr r2, [r3] | r2 = *(0x8df48);
0x00046e3e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00046e40 eors r2, r3 | r2 ^= r3;
0x00046e42 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00046e46 bne.w 0x47028 | goto label_12;
| }
0x00046e4a vldr d0, [sp, 0x18] | __asm ("vldr d0, [sp, 0x18]");
0x00046e4e mov r0, r5 | r0 = r5;
0x00046e50 add sp, 0x2c |
0x00046e52 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00046e56 b.w 0x8230 | goto label_2;
0x00046e5a ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00046e5c ldr.w r8, [r0, 8] | r8 = *((r0 + 8));
0x00046e60 str r3, [sp] | *(sp) = r3;
0x00046e62 ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x00046e64 lsls r3, r3, 0x1e | r3 <<= 0x1e;
| if (r3 < r3) {
0x00046e66 bmi 0x46ec2 | goto label_20;
| }
0x00046e68 ldr r2, [pc, 0x2a4] |
0x00046e6a ldr r3, [pc, 0x288] | r3 = *(0x470f6);
0x00046e6c add r2, pc | r2 = 0x8df80;
0x00046e6e ldr r3, [r2, r3] | r3 = *(0x8df80);
0x00046e70 ldr r2, [r3] | r2 = *(0x8df80);
0x00046e72 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00046e74 eors r2, r3 | r2 ^= r3;
0x00046e76 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00046e7a bne.w 0x47028 | goto label_12;
| }
0x00046e7e ldr r2, [sp] | r2 = *(sp);
0x00046e80 mov.w r3, -1 | r3 = -1;
0x00046e84 add.w r1, r8, 1 | r1 = r8 + 1;
0x00046e88 mov r0, r5 | r0 = r5;
0x00046e8a subs r2, 2 | r2 -= 2;
| label_5:
0x00046e8c add sp, 0x2c |
0x00046e8e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00046e92 b.w 0x82bc | void (*0x82bc)() ();
| }
0x00046e96 lsl.w r8, r3, 2 | r8 = r3 << 2;
0x00046e9a lsls r0, r2, 2 | r0 = r2 << 2;
0x00046e9c orr.w r8, r8, r2, lsr 30 | r8 |= (r2 >> 30);
0x00046ea0 adds r2, r0, r2 | r2 = r0 + r2;
0x00046ea2 ldrb r0, [r7], 1 | r0 = *(r7);
| r7++;
0x00046ea6 adc.w r8, r3, r8 | __asm ("adc.w r8, r3, r8");
0x00046eaa adds r2, r2, r2 | r2 += r2;
0x00046eac adc.w r8, r8, r8 | __asm ("adc.w r8, r8, r8");
0x00046eb0 adds r2, r6, r2 | r2 = r6 + r2;
0x00046eb2 adc.w r3, r8, r6, asr 31 | __asm ("adc.w r3, r8, r6, asr 31");
0x00046eb6 sub.w r6, r0, 0x30 | r6 = r0 - 0x30;
0x00046eba uxtb r0, r6 | r0 = (int8_t) r6;
0x00046ebc cmp r0, 9 |
0x00046ebe bls 0x46dc2 |
| } while (r0 < 9);
0x00046ec0 b 0x46df2 | goto label_3;
| label_20:
0x00046ec2 ldr r4, [sp] | r4 = *(sp);
0x00046ec4 adds r0, r4, 1 | r0 = r4 + 1;
0x00046ec6 blx 0x86a4 | r0 = fcn_000086a4 ();
0x00046eca mov sb, r0 | sb = r0;
0x00046ecc cmp r0, 0 |
| if (r0 == 0) {
0x00046ece beq.w 0x4702c | goto label_21;
| }
0x00046ed2 add.w fp, r4, -1 |
0x00046ed6 cmp.w fp, 1 |
0x00046eda itt ls |
| if (fp > 1) {
0x00046edc movls r7, r0 | r7 = r0;
| }
| if (fp > 1) {
0x00046ede movls r2, 0 | r2 = 0;
| }
| if (fp < 1) {
0x00046ee0 bls 0x46f74 | goto label_22;
| }
0x00046ee2 movs r6, 0 | r6 = 0;
0x00046ee4 movs r4, 1 | r4 = 1;
0x00046ee6 b 0x46ef2 |
| while (r3 != 0x5c) {
0x00046ee8 adds r6, 1 | r6++;
0x00046eea strb r3, [r7] | *(r7) = r3;
| label_4:
0x00046eec adds r4, 1 | r4++;
0x00046eee cmp r4, fp |
| if (r4 >= fp) {
0x00046ef0 bhs 0x46f6e | goto label_23;
| }
0x00046ef2 ldrb.w r3, [r8, r4] | r3 = *((r8 + r4));
0x00046ef6 add.w r7, sb, r6 | r7 = sb + r6;
0x00046efa cmp r3, 0x5c |
0x00046efc bne 0x46ee8 |
| }
0x00046efe adds r2, r4, 1 | r2 = r4 + 1;
0x00046f00 ldrb.w r3, [r8, r2] | r3 = *((r8 + r2));
0x00046f04 cmp r3, 0x75 |
| if (r3 == 0x75) {
0x00046f06 beq 0x46f32 | goto label_24;
| }
0x00046f08 sub.w r1, r3, 0x62 | r1 = r3 - 0x62;
0x00046f0c cmp r1, 0x12 |
| if (r1 > 0x12) {
0x00046f0e bhi 0x46f2a | goto label_6;
| }
| /* switch table (19 cases) at 0x46f14 */
0x00046f10 tbb [pc, r1] | __asm ("tbb aav.0x000000ff");
0x00046f28 movs r3, 0xd | r3 = 0xd;
| do {
| label_6:
0x00046f2a adds r6, 1 | r6++;
0x00046f2c mov r4, r2 | r4 = r2;
0x00046f2e strb r3, [r7] | *(r7) = r3;
0x00046f30 b 0x46eec | goto label_4;
| label_24:
0x00046f32 adds r0, r4, 2 | r0 = r4 + 2;
0x00046f34 add r0, r8 | r0 += r8;
0x00046f36 bl 0xbee8 | fcn_0000bee8 (r0);
0x00046f3a adds r2, r4, 5 | r2 = r4 + 5;
0x00046f3c mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x00046f3e cbz r0, 0x46f72 |
0x00046f40 cmp r0, 0x7f |
0x00046f42 add.w r1, r6, 1 | r1 = r6 + 1;
| if (r0 < 0x7f) {
0x00046f46 bls 0x46f9a | goto label_25;
| }
0x00046f48 cmp.w r3, 0x800 |
0x00046f4c add.w r0, r6, 2 | r0 = r6 + 2;
0x00046f50 str r0, [sp, 4] | var_4h = r0;
| if (r3 >= 0x800) {
0x00046f52 bhs 0x46fce | goto label_26;
| }
0x00046f54 mov r4, r2 | r4 = r2;
0x00046f56 lsrs r2, r3, 6 | r2 = r3 >> 6;
0x00046f58 and r3, r3, 0x3f | r3 &= 0x3f;
0x00046f5c orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x00046f60 orn r2, r2, 0x3f | r2 |= 0x3f;
| r2 = ~r2;
0x00046f64 strb r2, [r7] | *(r7) = r2;
0x00046f66 mov r6, r0 | r6 = r0;
0x00046f68 strb.w r3, [sb, r1] | *((sb + r1)) = r3;
0x00046f6c b 0x46eec | goto label_4;
| label_23:
0x00046f6e add.w r7, sb, r6 | r7 = sb + r6;
| }
0x00046f72 mov r2, r6 | r2 = r6;
| label_22:
0x00046f74 movs r3, 0 | r3 = 0;
0x00046f76 ldr r1, [pc, 0x19c] |
0x00046f78 strb r3, [r7] | *(r7) = r3;
0x00046f7a ldr r3, [pc, 0x178] | r3 = *(0x470f6);
0x00046f7c add r1, pc | r1 = 0x8e096;
0x00046f7e ldr r3, [r1, r3] | r3 = *(0x8e096);
0x00046f80 ldr r1, [r3] | r1 = *(0x8e096);
0x00046f82 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00046f84 eors r1, r3 | r1 ^= r3;
0x00046f86 mov.w r3, 0 | r3 = 0;
| if (r1 != r3) {
0x00046f8a bne 0x47028 | goto label_12;
| }
0x00046f8c ldr r3, [pc, 0x188] | r3 = *(0x47118);
0x00046f8e mov r1, sb | r1 = sb;
0x00046f90 mov r0, r5 | r0 = r5;
0x00046f92 ldr.w r3, [sl, r3] | r3 = *((sl + r3));
0x00046f96 str r3, [sp] | *(sp) = r3;
0x00046f98 b 0x46e8c | goto label_5;
| label_25:
0x00046f9a mov r6, r1 | r6 = r1;
0x00046f9c mov r4, r2 | r4 = r2;
0x00046f9e strb r0, [r7] | *(r7) = r0;
0x00046fa0 b 0x46eec | goto label_4;
0x00046fa2 movs r3, 9 | r3 = 9;
0x00046fa4 b 0x46f2a |
| } while (1);
0x00046fa6 movs r3, 0xa | r3 = 0xa;
0x00046fa8 b 0x46f2a | goto label_6;
0x00046faa movs r3, 0xc | r3 = 0xc;
0x00046fac b 0x46f2a | goto label_6;
0x00046fae movs r3, 8 | r3 = 8;
0x00046fb0 b 0x46f2a | goto label_6;
| label_18:
0x00046fb2 rsbs r2, r2, 0 | r2 -= ;
0x00046fb4 sbc.w r3, r3, r3, lsl 1 | __asm ("sbc.w r3, r3, r3, lsl 1");
0x00046fb8 b 0x46df8 | goto label_7;
| label_15:
0x00046fba ldrb r6, [r4, 1] | r6 = *((r4 + 1));
0x00046fbc adds r7, r4, 1 | r7 = r4 + 1;
0x00046fbe subs r6, 0x30 | r6 -= 0x30;
0x00046fc0 uxtb r3, r6 | r3 = (int8_t) r6;
0x00046fc2 cmp r3, 9 |
| if (r3 < 9) {
0x00046fc4 bls.w 0x46db0 | goto label_8;
| }
| label_16:
0x00046fc8 movs r2, 0 | r2 = 0;
0x00046fca mov r3, r2 | r3 = r2;
0x00046fcc b 0x46df8 | goto label_7;
| label_26:
0x00046fce and ip, r3, 0xfc00 |
0x00046fd2 adds r0, r6, 3 | r0 = r6 + 3;
0x00046fd4 cmp.w ip, 0xd800 |
0x00046fd8 str r0, [sp, 8] | var_8h = r0;
| if (ip == 0xd800) {
0x00046fda beq 0x4704c | goto label_27;
| }
| label_11:
0x00046fdc mov r4, r2 | r4 = r2;
0x00046fde lsrs r2, r3, 0xc | r2 = r3 >> 0xc;
0x00046fe0 ldr r6, [sp, 8] | r6 = var_8h;
0x00046fe2 orn r2, r2, 0x1f | r2 |= 0x1f;
| r2 = ~r2;
0x00046fe6 strb r2, [r7] | *(r7) = r2;
0x00046fe8 ubfx r2, r3, 6, 6 | r2 = (r3 >> 6) & ((1 << 6) - 1);
0x00046fec orn r2, r2, 0x7f | r2 |= 0x7f;
| r2 = ~r2;
0x00046ff0 and r3, r3, 0x3f | r3 &= 0x3f;
0x00046ff4 strb.w r2, [sb, r1] | *((sb + r1)) = r2;
0x00046ff8 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x00046ffc ldr r2, [sp, 4] | r2 = var_4h;
0x00046ffe strb.w r3, [sb, r2] | *((sb + r2)) = r3;
0x00047002 b 0x46eec | goto label_4;
| label_17:
0x00047004 cmp r1, 0x2d |
| if (r1 != 0x2d) {
0x00047006 bne.w 0x46e20 | goto label_9;
| }
0x0004700a ldr r2, [pc, 0x110] |
0x0004700c ldr r3, [pc, 0xe4] | r3 = *(0x470f4);
0x0004700e add r2, pc | r2 = 0x8e130;
0x00047010 ldr r3, [r2, r3] | r3 = *(0x8e130);
0x00047012 ldr r2, [r3] | r2 = *(0x8e130);
0x00047014 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00047016 eors r2, r3 | r2 ^= r3;
0x00047018 mov.w r3, 0 | r3 = 0;
0x0004701c itt eq |
| if (r2 != r3) {
0x0004701e moveq r2, 0 | r2 = 0;
| }
| if (r2 == r3) {
0x00047020 moveq r3, -0x80000000 | r3 = -0x80000000;
| goto label_28;
| }
| if (r2 == r3) {
| label_28:
0x00047024 beq.w 0x46e0e | goto label_10;
| }
| do {
| label_12:
0x00047028 blx 0x883c | fcn_0000883c ();
| label_21:
0x0004702c ldr r2, [pc, 0xf0] |
0x0004702e ldr r3, [pc, 0xc4] | r3 = *(0x470f6);
0x00047030 add r2, pc | r2 = 0x8e154;
0x00047032 ldr r3, [r2, r3] | r3 = *(0x8e154);
0x00047034 ldr r2, [r3] | r2 = *(0x8e154);
0x00047036 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00047038 eors r2, r3 | r2 ^= r3;
0x0004703a mov.w r3, 0 | r3 = 0;
0x0004703e bne 0x47028 |
| } while (r2 != r3);
0x00047040 mov r0, r5 | r0 = r5;
0x00047042 add sp, 0x2c |
0x00047044 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00047048 b.w 0x81e4 | void (*0x81e4)() ();
| label_27:
0x0004704c ldr r0, [sp] | r0 = *(sp);
0x0004704e subs r0, 6 | r0 -= 6;
0x00047050 cmp r2, r0 |
| if (r2 >= r0) {
0x00047052 bhs 0x46fdc | goto label_11;
| }
0x00047054 add.w r0, r8, r4 | r0 = r8 + r4;
0x00047058 ldrb.w ip, [r0, 6] | ip = *((r0 + 6));
0x0004705c cmp.w ip, 0x5c |
| if (ip != 0x5c) {
0x00047060 bne 0x46fdc | goto label_11;
| }
0x00047062 ldrb r0, [r0, 7] | r0 = *((r0 + 7));
0x00047064 cmp r0, 0x75 |
| if (r0 != 0x75) {
0x00047066 bne 0x46fdc | goto label_11;
| }
0x00047068 add.w r0, r4, 8 | r0 = r4 + 8;
0x0004706c strd r2, r1, [sp, 0x10] | __asm ("strd r2, r1, [sp, 0x10]");
0x00047070 add r0, r8 | r0 += r8;
0x00047072 str r3, [sp, 0xc] | var_ch = r3;
0x00047074 bl 0xbee8 | r0 = fcn_0000bee8 (r0);
0x00047078 and ip, r0, 0xfc00 |
0x0004707c ldrd r3, r2, [sp, 0xc] | __asm ("ldrd r3, r2, [var_ch]");
0x00047080 cmp.w ip, 0xdc00 |
0x00047084 ldr r1, [sp, 0x14] | r1 = var_14h;
| if (ip != 0xdc00) {
0x00047086 bne 0x46fdc | goto label_11;
| }
0x00047088 mov.w r2, 0xfc00 | r2 = 0xfc00;
0x0004708c ubfx r0, r0, 0, 0xa | r0 = (r0 >> 0) & ((1 << 0xa) - 1);
0x00047090 movt r2, 0xf | r2 = (r2 & 0xFFFF) | 0xf0000;
0x00047094 adds r4, 0xb | r4 += 0xb;
0x00047096 and.w r3, r2, r3, lsl 10 | r3 = r2 & (r3 << 10);
0x0004709a movs r2, 0 | r2 = 0;
0x0004709c adds r6, 4 | r6 += 4;
0x0004709e orrs r3, r0 | r3 |= r0;
0x000470a0 add.w r3, r3, 0x10000 | r3 += 0x10000;
0x000470a4 lsrs r1, r3, 0x12 | r1 = r3 >> 0x12;
0x000470a6 bfi r2, r1, 0, 8 | value_0 = BIT_MASK (0, 8);
| value_1 = r1 & value_0;
| value_0 = ~value_0;
| r2 &= value_0;
| r2 |= value_1;
0x000470aa ubfx r1, r3, 0xc, 6 | r1 = (r3 >> 0xc) & ((1 << 6) - 1);
0x000470ae bfi r2, r1, 8, 8 | value_2 = BIT_MASK (8, 8);
| value_3 = r1 & value_2;
| value_2 = ~value_2;
| r2 &= value_2;
| r2 |= value_3;
0x000470b2 ubfx r1, r3, 6, 6 | r1 = (r3 >> 6) & ((1 << 6) - 1);
0x000470b6 bfi r2, r1, 0x10, 8 | value_4 = BIT_MASK (0x10, 8);
| value_5 = r1 & value_4;
| value_4 = ~value_4;
| r2 &= value_4;
| r2 |= value_5;
0x000470ba and r3, r3, 0x3f | r3 &= 0x3f;
0x000470be bfi r2, r3, 0x18, 8 | value_6 = BIT_MASK (0x18, 8);
| value_7 = r3 & value_6;
| value_6 = ~value_6;
| r2 &= value_6;
| r2 |= value_7;
0x000470c2 orr r2, r2, 0x80808080 | r2 |= 0x80808080;
0x000470c6 orr r2, r2, 0x70 | r2 |= 0x70;
0x000470ca str r2, [r7] | *(r7) = r2;
0x000470cc b 0x46eec | goto label_4;
| label_14:
0x000470ce ldr r2, [pc, 0x54] |
0x000470d0 ldr r3, [pc, 0x20] | r3 = *(0x470f4);
0x000470d2 add r2, pc | r2 = 0x8e1fc;
0x000470d4 ldr r3, [r2, r3] | r3 = *(0x8e1fc);
0x000470d6 ldr r2, [r3] | r2 = *(0x8e1fc);
0x000470d8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000470da eors r2, r3 | r2 ^= r3;
0x000470dc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000470e0 bne 0x47028 | goto label_12;
| }
0x000470e2 mov r0, r5 | r0 = r5;
0x000470e4 add sp, 0x2c |
0x000470e6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000470ea b.w 0x8420 | goto label_13;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x473d4 */
| #include <stdint.h>
|
; (fcn) fcn.000473d4 () | void fcn_000473d4 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000473d4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000473d8 sub sp, 0x24 |
0x000473da ldrb r3, [r2] | r3 = *(r2);
0x000473dc mov sl, r2 | sl = r2;
0x000473de str r0, [sp, 0x10] | var_10h = r0;
0x000473e0 cmp r3, 7 |
| if (r3 == 7) {
0x000473e2 beq 0x473ee | goto label_8;
| }
0x000473e4 mov r6, sl | r6 = sl;
| do {
| label_2:
0x000473e6 mov r0, r6 | r0 = r6;
0x000473e8 add sp, 0x24 |
0x000473ea pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x000473ee add.w r3, r1, r1, lsl 1 | r3 = r1 + (r1 << 1);
0x000473f2 ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x000473f4 mov ip, r1 |
0x000473f6 lsl.w lr, r3, 2 | lr = r3 << 2;
0x000473fa ldrb.w r3, [r6, lr] | r3 = *((r6 + lr));
0x000473fe add r6, lr | r6 += lr;
0x00047400 cmp r3, 7 |
| if (r3 != 7) {
0x00047402 bne.w 0x475f8 | goto label_9;
| }
0x00047406 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0004740a cmp r3, 1 |
0x0004740c ittt hi |
| if (r3 <= 1) {
0x0004740e movhi fp, 1 |
| }
| if (r3 <= 1) {
0x00047412 strhi ip, [sp, 0x14] | var_14h = ip;
| }
| if (r3 > 1) {
0x00047416 strd lr, r1, [sp, 0x18] | __asm ("strd lr, r1, [var_18h]");
| }
0x0004741a bls 0x473e6 |
| } while (r3 < 1);
| label_1:
0x0004741c add.w r8, fp, fp, lsl 1 | r8 = fp + (fp << 1);
0x00047420 lsl.w r8, r8, 2 | r8 <<= 2;
0x00047424 add.w r3, r8, 0xc | r3 = r8 + 0xc;
0x00047428 add.w r2, sl, r8 | r2 = sl + r8;
0x0004742c ldr.w r8, [r6, 4] | r8 = *((r6 + 4));
0x00047430 ldrb.w r1, [sl, r3] | r1 = *((sl + r3));
0x00047434 str r3, [sp, 0xc] | var_ch = r3;
0x00047436 add r3, sl | r3 += sl;
0x00047438 cmp.w r8, 1 |
0x0004743c ldrd r7, sb, [r2, 4] | __asm ("ldrd r7, sb, [r2, 4]");
0x00047440 str r3, [sp, 8] | var_8h = r3;
| if (r8 < 1) {
0x00047442 bls 0x474b0 | goto label_10;
| }
0x00047444 mov r3, r8 | r3 = r8;
0x00047446 movs r5, 1 | r5 = 1;
0x00047448 mov r8, r7 | r8 = r7;
0x0004744a str r1, [sp, 4] | var_4h = r1;
0x0004744c mov r7, r3 | r7 = r3;
0x0004744e b 0x47466 |
| while (r1 != r8) {
| label_0:
0x00047450 adds r4, 0xc | r4 += 0xc;
0x00047452 movs r3, 2 | r3 = 2;
0x00047454 ldrb r1, [r6, r4] | r1 = *((r6 + r4));
0x00047456 add r4, r6 | r4 += r6;
0x00047458 cmp r1, 5 |
0x0004745a itt hi |
| if (r1 <= 5) {
0x0004745c ldrhi r3, [r4, 4] | r3 = *((r4 + 4));
| }
| if (r1 <= 5) {
0x0004745e addhi r3, 2 | r3 += 2;
| }
0x00047460 add r5, r3 | r5 += r3;
0x00047462 cmp r5, r7 |
| if (r5 >= r7) {
0x00047464 bhs 0x474ac | goto label_11;
| }
0x00047466 add.w r4, r5, r5, lsl 1 | r4 = r5 + (r5 << 1);
0x0004746a lsls r4, r4, 2 | r4 <<= 2;
0x0004746c adds r3, r6, r4 | r3 = r6 + r4;
0x0004746e ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00047470 cmp r1, r8 |
0x00047472 bne 0x47450 |
| }
0x00047474 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00047476 mov r2, r8 | r2 = r8;
0x00047478 mov r1, sb | r1 = sb;
0x0004747a blx 0x8a18 | r0 = fcn_00008a18 ();
0x0004747e cmp r0, 0 |
| if (r0 != 0) {
0x00047480 bne 0x47450 | goto label_0;
| }
0x00047482 adds r4, 0xc | r4 += 0xc;
0x00047484 mov r3, r7 | r3 = r7;
0x00047486 adds r0, r6, r4 | r0 = r6 + r4;
0x00047488 mov r7, r8 | r7 = r8;
0x0004748a ldrb r2, [r0, 1] | r2 = *((r0 + 1));
0x0004748c mov r8, r3 | r8 = r3;
0x0004748e ldr r1, [sp, 4] | r1 = var_4h;
0x00047490 tst.w r2, 0x14 |
| if ((r2 & 0x14) != 0) {
0x00047494 bne 0x474ec | goto label_12;
| }
| if (r1 != 0) {
0x00047496 cbnz r1, 0x474b6 | goto label_13;
| }
0x00047498 movs r3, 2 | r3 = 2;
0x0004749a orr r2, r2, 4 | r2 |= 4;
0x0004749e strb r2, [r0, 1] | *((r0 + 1)) = r2;
| label_3:
0x000474a0 ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x000474a4 add fp, r3 |
0x000474a6 cmp r2, fp |
| if (r2 > fp) {
0x000474a8 bhi 0x4741c | goto label_1;
| }
0x000474aa b 0x473e6 | goto label_2;
| label_11:
0x000474ac ldr r1, [sp, 4] | r1 = var_4h;
0x000474ae mov r7, r8 | r7 = r8;
| do {
| if (r1 != 0) {
| label_10:
0x000474b0 cbnz r1, 0x474fc | goto label_14;
| }
| label_4:
0x000474b2 movs r3, 2 | r3 = 2;
0x000474b4 b 0x474a0 | goto label_3;
| label_13:
0x000474b6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000474b8 ldr r2, [sp, 8] | r2 = var_8h;
0x000474ba ldr r0, [sp, 0x10] | r0 = var_10h;
0x000474bc adds r1, r3, 1 | r1 = r3 + 1;
0x000474be add r1, r5 | r1 += r5;
0x000474c0 bl 0x473d4 | r0 = fcn_000473d4 (r0, r1, r2);
0x000474c4 cmp r0, 0 |
| if (r0 == 0) {
0x000474c6 beq.w 0x47602 | goto label_15;
| }
0x000474ca ldr r3, [sp, 0x10] | r3 = var_10h;
0x000474cc ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x000474ce ldr r3, [sp, 0x18] | r3 = var_18h;
0x000474d0 add r6, r3 | r6 += r3;
0x000474d2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000474d4 add r4, r6 | r4 += r6;
0x000474d6 ldr.w r8, [r6, 4] | r8 = *((r6 + 4));
0x000474da cmp r4, r0 |
0x000474dc ldrb.w r1, [sl, r3] | r1 = *((sl + r3));
| if (r4 != r0) {
0x000474e0 beq 0x474ec |
0x000474e2 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x000474e4 str r0, [r4, 8] | *((r4 + 8)) = r0;
0x000474e6 orr r2, r2, 0x10 | r2 |= 0x10;
0x000474ea strb r2, [r4, 1] | *((r4 + 1)) = r2;
| }
| label_12:
0x000474ec cmp r5, r8 |
0x000474ee bhs 0x474b0 |
| } while (r5 >= r8);
| label_5:
0x000474f0 cmp r1, 5 |
| if (r1 < 5) {
0x000474f2 bls 0x474b2 | goto label_4;
| }
0x000474f4 ldr r3, [sp, 8] | r3 = var_8h;
0x000474f6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000474f8 adds r3, 2 | r3 += 2;
0x000474fa b 0x474a0 | goto label_3;
| label_14:
0x000474fc ldr r1, [sp, 0x10] | r1 = var_10h;
0x000474fe ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x00047500 cmp r2, 0 |
| if (r2 == 0) {
0x00047502 beq 0x475b2 | goto label_16;
| }
0x00047504 ldrd r3, r1, [r1] | __asm ("ldrd r3, r1, [r1]");
0x00047508 cmp r3, r1 |
| if (r3 >= r1) {
0x0004750a bhs 0x475b2 | goto label_16;
| }
0x0004750c add.w r0, r3, r3, lsl 1 | r0 = r3 + (r3 << 1);
0x00047510 movs r5, 7 | r5 = 7;
0x00047512 movs r6, 2 | r6 = 2;
0x00047514 strh.w r5, [r2, r0, lsl 2] | offset_0 = r0 << 2;
| *((r2 + offset_0)) = r5;
0x00047518 add.w r0, r2, r0, lsl 2 | r0 = r2 + (r0 << 2);
0x0004751c movs r5, 0 | r5 = 0;
0x0004751e mov r4, r3 | r4 = r3;
0x00047520 strd r6, r5, [r0, 4] | __asm ("strd r6, r5, [r0, 4]");
0x00047524 adds r3, 1 | r3++;
0x00047526 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00047528 cmp r3, r1 |
0x0004752a str r3, [r0] | *(r0) = r3;
| if (r3 >= r1) {
0x0004752c bhs 0x475ce | goto label_17;
| }
| do {
0x0004752e add.w r0, r3, r3, lsl 1 | r0 = r3 + (r3 << 1);
0x00047532 movs r5, 5 | r5 = 5;
0x00047534 adds r3, 1 | r3++;
0x00047536 strh.w r5, [r2, r0, lsl 2] | offset_1 = r0 << 2;
| *((r2 + offset_1)) = r5;
0x0004753a add.w r2, r2, r0, lsl 2 | r2 += (r0 << 2);
0x0004753e cmp r3, r1 |
0x00047540 strd r7, sb, [r2, 4] | __asm ("strd r7, sb, [r2, 4]");
0x00047544 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00047546 str r3, [r2] | *(r2) = r3;
0x00047548 ldr r2, [r2, 8] | r2 = *((r2 + 8));
| if (r3 >= r1) {
0x0004754a bhs 0x475e8 | goto label_18;
| }
| label_6:
0x0004754c add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x00047550 mov.w r0, 1 | r0 = 1;
0x00047554 strh.w r0, [r2, r1, lsl 2] | offset_2 = r1 << 2;
| *((r2 + offset_2)) = r0;
0x00047558 add.w r1, r2, r1, lsl 2 | r1 = r2 + (r1 << 2);
0x0004755c movs r0, 0 | r0 = 0;
0x0004755e strd r0, r0, [r1, 4] | __asm ("strd r0, r0, [r1, 4]");
0x00047562 mov r2, r3 | r2 = r3;
0x00047564 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00047566 adds r3, 1 | r3++;
0x00047568 str r3, [r1] | *(r1) = r3;
| label_7:
0x0004756a ldr r1, [sp, 0x10] | r1 = var_10h;
0x0004756c ldrb r3, [r1, 0x14] | r3 = *((r1 + 0x14));
0x0004756e cmp r3, 0 |
| if (r3 != 0) {
0x00047570 bne 0x47602 | goto label_15;
| }
0x00047572 mov r0, sl | r0 = sl;
0x00047574 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00047578 bl 0xbfd8 | fcn_0000bfd8 (r0);
0x0004757c ldr r6, [r1, 8] | r6 = *((r1 + 8));
0x0004757e ldr r1, [sp, 0x14] | r1 = var_14h;
0x00047580 str r4, [sp, 0x14] | var_14h = r4;
0x00047582 add.w r3, r6, r2, lsl 2 | r3 = r6 + (r2 << 2);
0x00047586 add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x0004758a subs r1, r4, r1 | r1 = r4 - r1;
0x0004758c add.w r2, r6, r2, lsl 2 | r2 = r6 + (r2 << 2);
0x00047590 str r1, [r2, 8] | *((r2 + 8)) = r1;
0x00047592 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00047594 add r6, r1 | r6 += r1;
0x00047596 ldrb r1, [r2, 1] | r1 = *((r2 + 1));
0x00047598 orr r1, r1, 0x20 | r1 |= 0x20;
0x0004759c strb r1, [r2, 1] | *((r2 + 1)) = r1;
0x0004759e ldr r2, [sp, 8] | r2 = var_8h;
0x000475a0 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000475a2 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x000475a4 orr r2, r2, 0x10 | r2 |= 0x10;
0x000475a8 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x000475aa ldr r3, [sp, 0xc] | r3 = var_ch;
0x000475ac ldrb.w r1, [sl, r3] | r1 = *((sl + r3));
0x000475b0 b 0x474f0 | goto label_5;
| label_16:
0x000475b2 ldr r5, [sp, 0x10] | r5 = var_10h;
0x000475b4 movs r2, 2 | r2 = 2;
0x000475b6 movs r3, 0 | r3 = 0;
0x000475b8 movs r1, 7 | r1 = 7;
0x000475ba mov r0, r5 | r0 = r5;
0x000475bc bl 0x47378 | fcn_00047378 (r0, r1, r2, r3);
0x000475c0 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x000475c2 mov r4, r0 | r4 = r0;
| if (r2 == 0) {
0x000475c4 cbz r2, 0x475ce | goto label_17;
| }
0x000475c6 ldrd r3, r1, [r5] | __asm ("ldrd r3, r1, [r5]");
0x000475ca cmp r3, r1 |
0x000475cc blo 0x4752e |
| } while (r3 <= r1);
| label_17:
0x000475ce ldr r5, [sp, 0x10] | r5 = var_10h;
0x000475d0 mov r2, r7 | r2 = r7;
0x000475d2 mov r3, sb | r3 = sb;
0x000475d4 movs r1, 5 | r1 = 5;
0x000475d6 mov r0, r5 | r0 = r5;
0x000475d8 bl 0x47378 | fcn_00047378 (r0, r1, r2, r3);
0x000475dc ldr r2, [r5, 8] | r2 = *((r5 + 8));
| if (r2 == 0) {
0x000475de cbz r2, 0x475e8 | goto label_18;
| }
0x000475e0 ldrd r3, r1, [r5] | __asm ("ldrd r3, r1, [r5]");
0x000475e4 cmp r3, r1 |
| if (r3 <= r1) {
0x000475e6 blo 0x4754c | goto label_6;
| }
| label_18:
0x000475e8 movs r3, 0 | r3 = 0;
0x000475ea ldr r0, [sp, 0x10] | r0 = var_10h;
0x000475ec mov r2, r3 | r2 = r3;
0x000475ee movs r1, 1 | r1 = 1;
0x000475f0 bl 0x47378 | r0 = fcn_00047378 (r0, r1, r2, r3);
0x000475f4 mov r2, r0 | r2 = r0;
0x000475f6 b 0x4756a | goto label_7;
| label_9:
0x000475f8 mov r0, sl | r0 = sl;
0x000475fa mov r6, sl | r6 = sl;
0x000475fc bl 0xbfd8 | fcn_0000bfd8 (r0);
0x00047600 b 0x473e6 | goto label_2;
| label_15:
0x00047602 movs r6, 0 | r6 = 0;
0x00047604 b 0x473e6 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x47608 */
| #include <stdint.h>
|
; (fcn) fcn.00047608 () | void fcn_00047608 (int16_t arg_48h, int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_0h;
| int16_t var_10h;
| int16_t var_0h_2;
| int16_t var_1h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00047608 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004760c mov r4, r1 | r4 = r1;
0x0004760e mov sb, r2 | sb = r2;
0x00047610 ldr r1, [r0, 8] | r1 = *((r0 + 8));
0x00047612 lsls r6, r4, 1 | r6 = r4 << 1;
0x00047614 sub sp, 0x24 |
0x00047616 ldrb r2, [r2] | r2 = *(r2);
0x00047618 adds r5, r6, r4 | r5 = r6 + r4;
0x0004761a str r1, [sp, 4] | var_4h = r1;
0x0004761c add.w r5, r1, r5, lsl 2 | r5 = r1 + (r5 << 2);
0x00047620 cmp r2, 0 |
| if (r2 == 0) {
0x00047622 beq.w 0x4775c | goto label_15;
| }
0x00047626 mov fp, r3 |
0x00047628 ldr.w r3, [pc, 0x49c] |
0x0004762c str.w fp, [sp, 0x1c] | __asm ("str.w fp, [var_1ch]");
0x00047630 add r3, pc | r3 = 0x8f0fc;
0x00047632 strd r3, r0, [sp, 0x14] | __asm ("strd r3, r0, [var_14h]");
| label_2:
0x00047636 ldrb.w ip, [r5, 1] | ip = *((r5 + 1));
0x0004763a ands r3, ip, 8 | r3 = ip & 8;
| if (r3 != ip) {
0x0004763e bne.w 0x478ea | goto label_10;
| }
0x00047642 cmp r2, 0x2e |
| if (r2 != 0x2e) {
0x00047644 bne.w 0x47764 | goto label_17;
| }
0x00047648 ldrb r3, [r5] | r3 = *(r5);
0x0004764a cmp r3, 7 |
| if (r3 != 7) {
0x0004764c bne.w 0x478ea | goto label_10;
| }
0x00047650 ldrb.w r3, [sb, 1] | r3 = *((sb + 1));
0x00047654 add.w r2, sb, 1 | r2 = sb + 1;
0x00047658 str r2, [sp, 0x10] | var_10h = r2;
0x0004765a cmp r3, 0x22 |
| if (r3 == 0x22) {
0x0004765c beq.w 0x478f4 | goto label_18;
| }
0x00047660 cmp r3, 0 |
0x00047662 it ne |
| if (r3 != 0) {
0x00047664 cmpne r3, 0x2e | __asm ("cmpne r3, 0x2e");
| }
0x00047666 ite ne |
| if (r3 == 0) {
0x00047668 movne r2, 1 | r2 = 1;
| }
| if (r3 != 0) {
0x0004766a moveq r2, 0 | r2 = 0;
| }
0x0004766c cmp r3, 0x5b |
0x0004766e ite eq |
| if (r3 != 0x5b) {
0x00047670 moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0x5b) {
0x00047672 andne r2, r2, 1 | r2 &= 1;
| }
0x00047676 cmp r2, 0 |
| if (r2 == 0) {
0x00047678 beq.w 0x47a2e | goto label_19;
| }
0x0004767c add.w r3, sb, 2 | r3 = sb + 2;
| do {
0x00047680 ldrb r1, [r3] | r1 = *(r3);
0x00047682 mov r0, r3 | r0 = r3;
0x00047684 adds r3, 1 | r3++;
0x00047686 cmp r1, 0 |
0x00047688 it ne |
| if (r1 != 0) {
0x0004768a cmpne r1, 0x2e | __asm ("cmpne r1, 0x2e");
| }
0x0004768c ite ne |
| if (r1 == 0) {
0x0004768e movne r2, 1 | r2 = 1;
| }
| if (r1 != 0) {
0x00047690 moveq r2, 0 | r2 = 0;
| }
0x00047692 cmp r1, 0x5b |
0x00047694 ite eq |
| if (r1 != 0x5b) {
0x00047696 moveq r2, 0 | r2 = 0;
| }
| if (r1 == 0x5b) {
0x00047698 andne r2, r2, 1 | r2 &= 1;
| }
0x0004769c cmp r2, 0 |
0x0004769e bne 0x47680 |
| } while (r2 != 0);
0x000476a0 sub.w r0, r0, sb | r0 -= sb;
0x000476a4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000476a6 add.w fp, r0, -1 |
0x000476aa mov r7, fp | r7 = fp;
0x000476ac str r3, [sp, 8] | var_8h = r3;
| label_4:
0x000476ae ldr.w sb, [r5, 4] | sb = *((r5 + 4));
0x000476b2 add.w sl, r7, 2 | sl = r7 + 2;
0x000476b6 mov r2, r7 | r2 = r7;
0x000476b8 mov.w r8, 1 | r8 = 1;
0x000476bc mov r7, sl | r7 = sl;
0x000476be mov sl, r6 | sl = r6;
0x000476c0 mov r6, sb | r6 = sb;
| label_0:
0x000476c2 cmp r8, r6 |
| if (r8 < r6) {
0x000476c4 bls 0x476ec | goto label_20;
| }
| do {
0x000476c6 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x000476c8 ands r3, r3, 0x20 | r3 &= 0x20;
| if (r3 == r3) {
0x000476cc beq.w 0x47862 | goto label_21;
| }
0x000476d0 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000476d2 mov.w r8, 1 | r8 = 1;
0x000476d6 add r4, r3 | r4 += r3;
0x000476d8 ldr r3, [sp, 4] | r3 = var_4h;
0x000476da lsl.w sl, r4, 1 | sl = r4 << 1;
0x000476de add.w r5, sl, r4 | r5 = sl + r4;
0x000476e2 add.w r5, r3, r5, lsl 2 | r5 = r3 + (r5 << 2);
0x000476e6 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x000476e8 cmp r8, r6 |
0x000476ea bhi 0x476c6 |
| } while (r8 > r6);
| label_20:
0x000476ec add.w sb, r8, r8, lsl 1 | sb = r8 + (r8 << 1);
0x000476f0 lsl.w sb, sb, 2 | sb <<= 2;
0x000476f4 add.w r3, r5, sb | r3 = r5 + sb;
0x000476f8 ldrb r0, [r3, 1] | r0 = *((r3 + 1));
0x000476fa ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000476fc lsls r0, r0, 0x1f | r0 <<= 0x1f;
| if (r0 >= r0) {
0x000476fe bpl 0x47726 | goto label_22;
| }
0x00047700 cmp r2, r1 |
0x00047702 it eq |
| if (r2 != r1) {
0x00047704 ldreq r0, [r3, 8] | r0 = *((r3 + 8));
| }
| if (r2 == r1) {
0x00047706 beq 0x4772e | goto label_23;
| }
| do {
| label_1:
0x00047708 add.w r3, sb, 0xc | r3 = sb + 0xc;
0x0004770c add.w r8, r8, 1 | r8++;
0x00047710 ldrb r1, [r5, r3] | r1 = *((r5 + r3));
0x00047712 add.w sb, r5, r3 | sb = r5 + r3;
0x00047716 cmp r1, 5 |
0x00047718 itet hi |
| if (r1 <= 5) {
0x0004771a ldrhi r3, [sb, 4] | r3 = *((sb + 4));
| }
| if (r1 <= 5) {
0x0004771e movhi r3, 1 | r3 = 1;
| }
| if (r1 > 5) {
0x00047720 adds r3, 1 | r3++;
| }
0x00047722 add r8, r3 | r8 += r3;
0x00047724 b 0x476c2 | goto label_0;
| label_22:
0x00047726 cmp r7, r1 |
0x00047728 bne 0x47708 |
| } while (r7 != r1);
0x0004772a ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0004772c adds r0, 1 | r0++;
| label_23:
0x0004772e ldr r1, [sp, 8] | r1 = var_8h;
0x00047730 str r2, [sp, 0xc] | var_ch = r2;
0x00047732 blx 0x8a18 | fcn_00008a18 ();
0x00047736 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00047738 cmp r0, 0 |
| if (r0 != 0) {
0x0004773a bne 0x47708 | goto label_1;
| }
0x0004773c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004773e add r8, r4 | r8 += r4;
0x00047740 add.w r4, r8, 1 | r4 += var_1h;
0x00047744 add r3, fp | r3 += fp;
0x00047746 mov sb, r3 | sb = r3;
| label_6:
0x00047748 ldr r3, [sp, 4] | r3 = var_4h;
0x0004774a lsls r6, r4, 1 | r6 = r4 << 1;
0x0004774c ldrb.w r2, [sb] | r2 = *(sb);
0x00047750 adds r5, r6, r4 | r5 = r6 + r4;
0x00047752 add.w r5, r3, r5, lsl 2 | r5 = r3 + (r5 << 2);
0x00047756 cmp r2, 0 |
| if (r2 != 0) {
0x00047758 bne.w 0x47636 | goto label_2;
| }
| label_15:
0x0004775c mov r0, r5 | r0 = r5;
0x0004775e add sp, 0x24 |
0x00047760 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x00047764 cmp r2, 0x5b |
| if (r2 != 0x5b) {
0x00047766 bne 0x4785a | goto label_5;
| }
0x00047768 ldrb.w lr, [sb, 1] |
0x0004776c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0004776e add r2, lr | r2 += lr;
0x00047770 ldrb.w r2, [r2, 0x40] | r2 = *((r2 + 0x40));
0x00047774 ands r2, r2, 4 | r2 &= 4;
| if (r2 == r2) {
0x00047778 beq.w 0x47a28 | goto label_24;
| }
0x0004777c ldr.w r8, [pc, 0x34c] | r8 = *(0x00047acc);
0x00047780 add.w r1, sb, 1 | r1 = sb + 1;
0x00047784 mov r2, lr | r2 = lr;
0x00047786 add r8, pc | r8 += pc;
| do {
0x00047788 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0004778c mov r7, r1 | r7 = r1;
0x0004778e add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x00047792 sub.w r3, r2, 0x30 | r3 = r2 - 0x30;
0x00047796 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0004779a add.w r0, r8, r2 | r0 = r8 + r2;
0x0004779e ldrb.w r0, [r0, 0x40] | r0 = *((r0 + 0x40));
0x000477a2 tst.w r0, 4 |
0x000477a6 bne 0x47788 |
| } while ((r0 & 4) != 0);
0x000477a8 rsb.w r1, sb, 1 | r1 = 1 - sb;
0x000477ac add r1, r7 | r1 += r7;
0x000477ae cmp r1, 1 |
0x000477b0 ite hi |
| if (r1 <= 1) {
0x000477b2 movhi r0, 0 | r0 = 0;
| }
| if (r1 > 1) {
0x000477b4 movls r0, 1 | r0 = 1;
| }
0x000477b6 cmp r2, 0x5d |
0x000477b8 it ne |
| if (r2 == 0x5d) {
0x000477ba orrne r0, r0, 1 | r0 |= 1;
| }
0x000477be cmp r0, 0 |
| if (r0 == 0) {
0x000477c0 beq.w 0x479b6 | goto label_25;
| }
| label_14:
0x000477c4 cmp.w lr, 0x23 |
| if (lr != 0x23) {
0x000477c8 bne 0x4785a | goto label_5;
| }
0x000477ca ldrb r2, [r5] | r2 = *(r5);
0x000477cc mov lr, r4 | lr = r4;
0x000477ce cmp r2, 6 |
| if (r2 != 6) {
0x000477d0 bne.w 0x478ea | goto label_10;
| }
0x000477d4 ldr.w r8, [r5, 4] | r8 = *((r5 + 4));
0x000477d8 mov r7, ip | r7 = ip;
0x000477da mov r0, r5 | r0 = r5;
0x000477dc str r4, [sp, 8] | var_8h = r4;
0x000477de mov sl, r8 | sl = r8;
| label_3:
0x000477e0 add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x000477e4 cmp r1, sl |
0x000477e6 add.w r2, r0, r2, lsl 2 | r2 = r0 + (r2 << 2);
| if (r1 < sl) {
0x000477ea bls 0x47816 | goto label_26;
| }
| do {
0x000477ec ands r7, r7, 0x20 | r7 &= 0x20;
0x000477f0 mov.w r1, 1 | r1 = 1;
| if (r7 == r7) {
0x000477f4 beq 0x47838 | goto label_27;
| }
0x000477f6 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x000477f8 add lr, r2 | lr += r2;
0x000477fa ldr r2, [sp, 4] | r2 = var_4h;
0x000477fc add.w r0, lr, lr, lsl 1 | r0 = lr + (lr << 1);
0x00047800 add.w r0, r2, r0, lsl 2 | r0 = r2 + (r0 << 2);
0x00047804 add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x00047808 ldr.w sl, [r0, 4] | sl = *((r0 + 4));
0x0004780c add.w r2, r0, r2, lsl 2 | r2 = r0 + (r2 << 2);
0x00047810 ldrb r7, [r0, 1] | r7 = *((r0 + 1));
0x00047812 cmp r1, sl |
0x00047814 bhi 0x477ec |
| } while (r1 > sl);
| label_26:
0x00047816 ldrb.w fp, [r2, 1] | fp = *((r2 + 1));
0x0004781a movs r4, 1 | r4 = 1;
0x0004781c tst.w fp, 4 |
0x00047820 ldrb.w fp, [r2] | fp = *(r2);
0x00047824 it eq |
| if ((fp & 4) != 0) {
0x00047826 addeq r3, r3, r4 | r3 += r4;
| }
0x00047828 cmp.w fp, 5 |
0x0004782c ittt hi |
| if (fp <= 5) {
0x0004782e ldrhi r2, [r2, 4] | r2 = *((r2 + 4));
| }
| if (fp <= 5) {
0x00047830 addhi r2, 1 | r2++;
| }
| if (fp <= 5) {
0x00047832 movhi r4, r2 | r4 = r2;
| }
0x00047834 add r1, r4 | r1 += r4;
0x00047836 b 0x477e0 | goto label_3;
| label_27:
0x00047838 ldrb.w r2, [sb, 2] | r2 = *((sb + 2));
0x0004783c ldr r4, [sp, 8] | r4 = var_8h;
0x0004783e cmp r2, 0x2d |
| if (r2 != 0x2d) {
0x00047840 bne 0x4792c | goto label_28;
| }
0x00047842 ldr.w lr, [pc, 0x28c] |
0x00047846 ldrb.w r2, [sb, 3] | r2 = *((sb + 3));
0x0004784a add lr, pc | lr += pc;
0x0004784c add.w r1, lr, r2 | r1 = lr + r2;
0x00047850 ldrb.w r1, [r1, 0x40] | r1 = *((r1 + 0x40));
0x00047854 lsls r1, r1, 0x1d | r1 <<= 0x1d;
| if (r1 < r1) {
0x00047856 bmi.w 0x479f2 | goto label_29;
| }
| label_5:
0x0004785a ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x0004785c str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x00047860 b 0x478ea | goto label_10;
| label_21:
0x00047862 mov r5, fp | r5 = fp;
0x00047864 ldr.w fp, [sp, 0x1c] | fp = var_1ch;
0x00047868 mov r6, sl | r6 = sl;
0x0004786a mov sb, r2 | sb = r2;
0x0004786c ldr.w sl, [sp, 0x18] | sl = var_18h;
0x00047870 cmp.w fp, 0 |
| if (fp != 0) {
0x00047874 beq 0x478ea |
0x00047876 ldr r2, [sp, 4] | r2 = var_4h;
0x00047878 cmp r2, 0 |
| if (r2 == 0) {
0x0004787a beq 0x4795a | goto label_30;
| }
0x0004787c ldrd r8, r2, [sl] | __asm ("ldrd r8, r2, [sl]");
0x00047880 cmp r8, r2 |
| if (r8 >= r2) {
0x00047882 bhs 0x4795a | goto label_30;
| }
0x00047884 add.w r2, r8, r8, lsl 1 | r2 = r8 + (r8 << 1);
0x00047888 ldr r0, [sp, 4] | r0 = var_4h;
0x0004788a movs r1, 7 | r1 = 7;
0x0004788c lsls r2, r2, 2 | r2 <<= 2;
0x0004788e strh r1, [r0, r2] | *((r0 + r2)) = r1;
0x00047890 add r2, r0 | r2 += r0;
0x00047892 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x00047894 movs r3, 2 | r3 = 2;
0x00047896 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x00047898 add.w r3, r8, 1 | r3 = r8 + 1;
0x0004789c str.w r3, [sl] | __asm ("str.w r3, [sl]");
| label_7:
0x000478a0 ldrd r7, r3, [sl] | __asm ("ldrd r7, r3, [sl]");
0x000478a4 cmp r7, r3 |
| if (r7 >= r3) {
0x000478a6 bhs 0x47972 | goto label_31;
| }
0x000478a8 add.w r3, r7, r7, lsl 1 | r3 = r7 + (r7 << 1);
0x000478ac ldr r1, [sp, 4] | r1 = var_4h;
0x000478ae movs r2, 5 | r2 = 5;
0x000478b0 lsls r3, r3, 2 | r3 <<= 2;
0x000478b2 strh r2, [r1, r3] | *((r1 + r3)) = r2;
0x000478b4 add r3, r1 | r3 += r1;
0x000478b6 ldr r2, [sp, 8] | r2 = var_8h;
0x000478b8 str.w sb, [r3, 4] | __asm ("str.w sb, [r3, 4]");
0x000478bc str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000478be adds r3, r7, 1 | r3 = r7 + 1;
0x000478c0 str.w r3, [sl] | __asm ("str.w r3, [sl]");
| label_8:
0x000478c4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000478c6 mov r2, fp | r2 = fp;
0x000478c8 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x000478ca mov r0, sl | r0 = sl;
0x000478cc add r1, r5 | r1 += r5;
0x000478ce bl 0x47ad4 | fcn_00047ad4 (r0, r1, r2, r3);
0x000478d2 ldrb.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x000478d6 cmp r0, 0 |
0x000478d8 mov r5, r0 | r5 = r0;
0x000478da clz r3, r3 | r3 &= r3;
0x000478de lsr.w r3, r3, 5 | r3 >>= 5;
0x000478e2 it eq |
| if (r0 != 0) {
0x000478e4 moveq r3, 0 | r3 = 0;
| }
0x000478e6 cmp r3, 0 |
| if (r3 != 0) {
0x000478e8 bne 0x479c2 | goto label_32;
| }
| }
| label_10:
0x000478ea movs r5, 0 | r5 = 0;
0x000478ec mov r0, r5 | r0 = r5;
0x000478ee add sp, 0x24 |
0x000478f0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x000478f4 ldrb.w r3, [sb, 2] | r3 = *((sb + 2));
0x000478f8 add.w r0, sb, 2 | r0 = sb + 2;
0x000478fc str r0, [sp, 8] | var_8h = r0;
0x000478fe cmp r3, 0 |
0x00047900 it ne |
| if (r3 != 0) {
0x00047902 cmpne r3, 0x22 | __asm ("cmpne r3, 0x22");
| }
0x00047904 ite ne |
| if (r3 == 0) {
0x00047906 movne r2, 1 | r2 = 1;
| }
| if (r3 != 0) {
0x00047908 moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0) {
0x0004790a beq.w 0x47a22 | goto label_33;
| }
0x0004790e movs r1, 1 | r1 = 1;
| do {
0x00047910 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x00047914 mov r7, r1 | r7 = r1;
0x00047916 adds r1, 1 | r1++;
0x00047918 cmp r3, 0 |
0x0004791a it ne |
| if (r3 != 0) {
0x0004791c cmpne r3, 0x22 | __asm ("cmpne r3, 0x22");
| }
0x0004791e bne 0x47910 |
| } while (r3 != 0);
| label_13:
0x00047920 cmp r3, 0 |
| if (r3 == 0) {
0x00047922 beq.w 0x47a2e | goto label_19;
| }
0x00047926 add.w fp, r1, 1 |
0x0004792a b 0x476ae | goto label_4;
| label_28:
0x0004792c movs r1, 2 | r1 = 2;
| label_12:
0x0004792e cmp r2, 0x5d |
| if (r2 != 0x5d) {
0x00047930 bne 0x4785a | goto label_5;
| }
| label_11:
0x00047932 adds r1, 1 | r1++;
0x00047934 mov r7, r8 | r7 = r8;
0x00047936 add sb, r1 | sb += r1;
0x00047938 movs r2, 1 | r2 = 1;
| label_9:
0x0004793a cmp r2, r7 |
| if (r2 > r7) {
0x0004793c bhi 0x47982 | goto label_34;
| }
0x0004793e add.w r1, r2, r2, lsl 1 | r1 = r2 + (r2 << 1);
0x00047942 add.w r1, r5, r1, lsl 2 | r1 = r5 + (r1 << 2);
0x00047946 ldrb r0, [r1, 1] | r0 = *((r1 + 1));
0x00047948 and r0, r0, 4 | r0 &= 4;
| if (r3 != 0) {
0x0004794c cbnz r3, 0x479a2 | goto label_35;
| }
| if (r0 != 0) {
0x0004794e cbnz r0, 0x479a6 | goto label_36;
| }
0x00047950 tst.w ip, 0x20 |
| if ((ip & 0x20) != 0) {
0x00047954 bne 0x47988 | goto label_37;
| }
0x00047956 add r4, r2 | r4 += r2;
0x00047958 b 0x47748 | goto label_6;
| label_30:
0x0004795a movs r3, 0 | r3 = 0;
0x0004795c movs r2, 2 | r2 = 2;
0x0004795e movs r1, 7 | r1 = 7;
0x00047960 mov r0, sl | r0 = sl;
0x00047962 bl 0x47378 | fcn_00047378 (r0, r1, r2, r3);
0x00047966 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0004796a mov r8, r0 | r8 = r0;
0x0004796c str r3, [sp, 4] | var_4h = r3;
0x0004796e cmp r3, 0 |
| if (r3 != 0) {
0x00047970 bne 0x478a0 | goto label_7;
| }
| label_31:
0x00047972 ldr r3, [sp, 8] | r3 = var_8h;
0x00047974 mov r2, sb | r2 = sb;
0x00047976 movs r1, 5 | r1 = 5;
0x00047978 mov r0, sl | r0 = sl;
0x0004797a bl 0x47378 | r0 = fcn_00047378 (r0, r1, r2, r3);
0x0004797e mov r7, r0 | r7 = r0;
0x00047980 b 0x478c4 | goto label_8;
| label_34:
0x00047982 ands ip, ip, 0x20 |
| if (ip == ip) {
0x00047986 beq 0x47a36 | goto label_38;
| }
| label_37:
0x00047988 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0004798a movs r2, 1 | r2 = 1;
0x0004798c add r4, r1 | r4 += r1;
0x0004798e ldr r1, [sp, 4] | r1 = var_4h;
0x00047990 lsl.w r6, r4, r2 | r6 = r4 << r2;
0x00047994 adds r5, r6, r4 | r5 = r6 + r4;
0x00047996 add.w r5, r1, r5, lsl 2 | r5 = r1 + (r5 << 2);
0x0004799a ldr r7, [r5, 4] | r7 = *((r5 + 4));
0x0004799c ldrb.w ip, [r5, 1] | ip = *((r5 + 1));
0x000479a0 b 0x4793a | goto label_9;
| if (r0 == 0) {
| label_35:
0x000479a2 cbnz r0, 0x479a6 |
0x000479a4 subs r3, 1 | r3--;
| }
| label_36:
0x000479a6 ldrb r0, [r1] | r0 = *(r1);
0x000479a8 cmp r0, 5 |
0x000479aa itet hi |
| if (r0 <= 5) {
0x000479ac ldrhi r1, [r1, 4] | r1 = *((r1 + 4));
| }
| if (r0 > 5) {
0x000479ae movls r1, 1 | r1 = 1;
| }
| if (r0 <= 5) {
0x000479b0 addhi r1, 1 | r1++;
| }
0x000479b2 add r2, r1 | r2 += r1;
0x000479b4 b 0x4793a | goto label_9;
| label_25:
0x000479b6 ldrb r2, [r5] | r2 = *(r5);
0x000479b8 cmp r2, 6 |
| if (r2 != 6) {
0x000479ba bne 0x478ea | goto label_10;
| }
0x000479bc ldr.w r8, [r5, 4] | r8 = *((r5 + 4));
0x000479c0 b 0x47932 | goto label_11;
| label_32:
0x000479c2 ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x000479c6 adds r1, r6, r4 | r1 = r6 + r4;
0x000479c8 add.w r7, r7, r7, lsl 1 | r7 += (r7 << 1);
0x000479cc sub.w r4, r8, r4 | r4 = r8 - r4;
0x000479d0 mov r0, r5 | r0 = r5;
0x000479d2 add.w r1, r2, r1, lsl 2 | r1 = r2 + (r1 << 2);
0x000479d6 add.w r2, r2, r7, lsl 2 | r2 += (r7 << 2);
0x000479da ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x000479dc str r4, [r1, 8] | *((r1 + 8)) = r4;
0x000479de orr r3, r3, 0x20 | r3 |= 0x20;
0x000479e2 strb r3, [r1, 1] | *((r1 + 1)) = r3;
0x000479e4 ldrb r3, [r2, 1] | r3 = *((r2 + 1));
0x000479e6 orr r3, r3, 1 | r3 |= 1;
0x000479ea strb r3, [r2, 1] | *((r2 + 1)) = r3;
0x000479ec add sp, 0x24 |
0x000479ee pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_29:
0x000479f2 add.w r1, sb, 3 | r1 = sb + 3;
| do {
0x000479f6 add.w r7, r7, r7, lsl 2 | r7 += (r7 << 2);
0x000479fa mov sl, r1 | sl = r1;
0x000479fc add.w r7, r2, r7, lsl 1 | r7 = r2 + (r7 << 1);
0x00047a00 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x00047a04 subs r7, 0x30 | r7 -= 0x30;
0x00047a06 add.w r0, lr, r2 | r0 = lr + r2;
0x00047a0a ldrb.w r0, [r0, 0x40] | r0 = *((r0 + 0x40));
0x00047a0e lsls r0, r0, 0x1d | r0 <<= 0x1d;
0x00047a10 bmi 0x479f6 |
| } while (r0 < r0);
0x00047a12 cmp r3, r7 |
| if (r3 <= r7) {
0x00047a14 blo.w 0x478ea | goto label_10;
| }
0x00047a18 rsb.w r1, sb, 1 | r1 = 1 - sb;
0x00047a1c subs r3, r3, r7 | r3 -= r7;
0x00047a1e add r1, sl | r1 += sl;
0x00047a20 b 0x4792e | goto label_12;
| label_33:
0x00047a22 mov r7, r2 | r7 = r2;
0x00047a24 movs r1, 1 | r1 = 1;
0x00047a26 b 0x47920 | goto label_13;
| label_24:
0x00047a28 mov r3, r2 | r3 = r2;
0x00047a2a movs r1, 1 | r1 = 1;
0x00047a2c b 0x477c4 | goto label_14;
| label_19:
0x00047a2e ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x00047a30 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00047a32 str r2, [r3] | *(r3) = r2;
0x00047a34 b 0x478ea | goto label_10;
| label_38:
0x00047a36 ldrd sl, fp, [sp, 0x18] | __asm ("ldrd sl, fp, [var_1ch]");
0x00047a3a clz r3, r3 | r3 &= r3;
0x00047a3e lsrs r3, r3, 5 | r3 >>= 5;
0x00047a40 mov lr, ip | lr = ip;
0x00047a42 cmp.w fp, 0 |
0x00047a46 it eq |
| if (fp != 0) {
0x00047a48 moveq r3, 0 | r3 = 0;
| }
0x00047a4a cmp r3, 0 |
| if (r3 == 0) {
0x00047a4c beq.w 0x478ea | goto label_10;
| }
0x00047a50 ldr r3, [sp, 4] | r3 = var_4h;
| if (r3 == 0) {
0x00047a52 cbz r3, 0x47ab6 | goto label_39;
| }
0x00047a54 ldrd r7, r3, [sl] | __asm ("ldrd r7, r3, [sl]");
0x00047a58 cmp r7, r3 |
| if (r7 >= r3) {
0x00047a5a bhs 0x47ab6 | goto label_39;
| }
0x00047a5c add.w r3, r7, r7, lsl 1 | r3 = r7 + (r7 << 1);
0x00047a60 ldr r1, [sp, 4] | r1 = var_4h;
0x00047a62 movs r2, 6 | r2 = 6;
0x00047a64 lsls r3, r3, 2 | r3 <<= 2;
0x00047a66 strh r2, [r1, r3] | *((r1 + r3)) = r2;
0x00047a68 add r3, r1 | r3 += r1;
0x00047a6a movs r2, 1 | r2 = 1;
0x00047a6c str.w ip, [r3, 8] | __asm ("str.w ip, [r3, 8]");
0x00047a70 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x00047a72 adds r3, r7, r2 | r3 = r7 + r2;
0x00047a74 str.w r3, [sl] | __asm ("str.w r3, [sl]");
| label_16:
0x00047a78 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x00047a7a mov r2, fp | r2 = fp;
0x00047a7c mov r1, sb | r1 = sb;
0x00047a7e mov r0, sl | r0 = sl;
0x00047a80 bl 0x47ad4 | fcn_00047ad4 (r0, r1, r2, r3);
0x00047a84 ldrb.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x00047a88 cmp r0, 0 |
0x00047a8a mov r5, r0 | r5 = r0;
0x00047a8c clz r3, r3 | r3 &= r3;
0x00047a90 lsr.w r3, r3, 5 | r3 >>= 5;
0x00047a94 it eq |
| if (r0 != 0) {
0x00047a96 moveq r3, 0 | r3 = 0;
| }
0x00047a98 cmp r3, 0 |
| if (r3 == 0) {
0x00047a9a beq.w 0x478ea | goto label_10;
| }
0x00047a9e ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x00047aa2 add r6, r4 | r6 += r4;
0x00047aa4 subs r7, r7, r4 | r7 -= r4;
0x00047aa6 add.w r3, r3, r6, lsl 2 | r3 += (r6 << 2);
0x00047aaa ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x00047aac str r7, [r3, 8] | *((r3 + 8)) = r7;
0x00047aae orr r2, r2, 0x20 | r2 |= 0x20;
0x00047ab2 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x00047ab4 b 0x4775c | goto label_15;
| label_39:
0x00047ab6 movs r3, 0 | r3 = 0;
0x00047ab8 movs r2, 1 | r2 = 1;
0x00047aba movs r1, 6 | r1 = 6;
0x00047abc mov r0, sl | r0 = sl;
0x00047abe bl 0x47378 | r0 = fcn_00047378 (r0, r1, r2, r3);
0x00047ac2 mov r7, r0 | r7 = r0;
0x00047ac4 b 0x47a78 | goto label_16;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x47bc0 */
| #include <stdint.h>
|
; (fcn) fcn.00047bc0 () | void fcn_00047bc0 (int16_t arg1, uint32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00047bc0 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x00047bc4 mov r6, r0 | r6 = r0;
0x00047bc6 ldr r5, [r0, 0xc] | r5 = *((r0 + 0xc));
0x00047bc8 mov r7, r1 | r7 = r1;
0x00047bca ldr.w r3, [pc, 0x56c] | r3 = *(0x00048138);
0x00047bce ldrb r4, [r5, r1] | r4 = *((r5 + r1));
0x00047bd0 adds r0, r5, r1 | r0 = r5 + r1;
0x00047bd2 add r3, pc | r3 += pc;
0x00047bd4 adds r2, r3, r4 | r2 = r3 + r4;
0x00047bd6 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x00047bda cbz r2, 0x47bf6 | goto label_14;
| }
0x00047bdc adds r2, r1, 1 | r2 = r1 + 1;
0x00047bde add.w ip, r5, r2 |
| do {
0x00047be2 mov r0, ip | r0 = ip;
0x00047be4 ldrb r4, [ip], 1 | r4 = *(ip);
| ip++;
0x00047be8 mov r7, r2 | r7 = r2;
0x00047bea adds r2, 1 | r2++;
0x00047bec adds r1, r3, r4 | r1 = r3 + r4;
0x00047bee ldrb.w r1, [r1, 0x568] | r1 = *((r1 + 0x568));
0x00047bf2 cmp r1, 0 |
0x00047bf4 bne 0x47be2 |
| } while (r1 != 0);
| label_14:
0x00047bf6 cmp r4, 0x7b |
| if (r4 == 0x7b) {
0x00047bf8 beq 0x47ccc | goto label_15;
| }
0x00047bfa cmp r4, 0x5b |
| if (r4 == 0x5b) {
0x00047bfc beq.w 0x47ee0 | goto label_16;
| }
0x00047c00 cmp r4, 0x22 |
| if (r4 != 0x22) {
0x00047c02 beq 0x47c48 |
0x00047c04 cmp r4, 0x6e |
| if (r4 == 0x6e) {
0x00047c06 beq.w 0x47fac | goto label_17;
| }
0x00047c0a cmp r4, 0x74 |
| if (r4 == 0x74) {
0x00047c0c beq.w 0x47dec | goto label_18;
| }
0x00047c10 cmp r4, 0x66 |
| if (r4 != 0x66) {
0x00047c12 bne.w 0x47e50 | goto label_19;
| }
0x00047c16 ldr.w r1, [pc, 0x524] |
0x00047c1a movs r2, 5 | r2 = 5;
0x00047c1c add r1, pc | r1 = 0x8fd5e;
0x00047c1e blx 0x8a18 | r0 = fcn_00008a18 ();
| if (r0 == 0) {
0x00047c22 cbnz r0, 0x47c3c |
0x00047c24 ldr.w r3, [pc, 0x518] |
0x00047c28 adds r7, 5 | r7 += 5;
0x00047c2a ldrb r2, [r5, r7] | r2 = *((r5 + r7));
0x00047c2c add r3, pc | r3 = 0x8fd70;
0x00047c2e add r3, r2 | r3 += r2;
0x00047c30 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00047c34 tst.w r3, 6 |
| if ((r3 & 6) == 0) {
0x00047c38 beq.w 0x480b6 | goto label_20;
| }
| }
| label_3:
0x00047c3c subs r4, 0 |
0x00047c3e it ne |
| if (r4 == 0) {
0x00047c40 movne r4, 1 | r4 = 1;
| }
0x00047c42 rsbs r0, r4, 0 | r0 = r4 - ;
| label_4:
0x00047c44 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
0x00047c48 adds r2, r7, 1 | r2 = r7 + 1;
0x00047c4a ldrb r3, [r5, r2] | r3 = *((r5 + r2));
0x00047c4c cmp r3, 0x1f |
| if (r3 < 0x1f) {
0x00047c4e bls 0x47c9e | goto label_2;
| }
0x00047c50 movw r1, 0x1011 |
0x00047c54 mov.w r8, 0 | r8 = 0;
0x00047c58 movt r1, 5 | r1 = 0x51011;
0x00047c5c mov.w ip, 1 |
0x00047c60 b 0x47c70 |
| while (r3 != 0x5c) {
0x00047c62 cmp r3, 0x22 |
| if (r3 == 0x22) {
0x00047c64 beq.w 0x4803e | goto label_21;
| }
0x00047c68 mov r2, r4 | r2 = r4;
| label_1:
0x00047c6a ldrb r3, [r5, r2] | r3 = *((r5 + r2));
0x00047c6c cmp r3, 0x1f |
| if (r3 < 0x1f) {
0x00047c6e bls 0x47c9e | goto label_2;
| }
0x00047c70 cmp r3, 0x5c |
0x00047c72 add.w r4, r2, 1 | r4 = r2 + 1;
0x00047c76 bne 0x47c62 |
| }
0x00047c78 ldrb r3, [r5, r4] | r3 = *((r5 + r4));
0x00047c7a add r4, r5 | r4 += r5;
0x00047c7c cmp r3, 0x5c |
0x00047c7e it ne |
| if (r3 != 0x5c) {
0x00047c80 cmpne r3, 0x22 | __asm ("cmpne r3, 0x22");
| }
| if (r3 == 0x5c) {
0x00047c82 beq 0x47cc4 | goto label_22;
| }
0x00047c84 cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x00047c86 beq 0x47cc4 | goto label_22;
| }
0x00047c88 subs r3, 0x62 | r3 -= 0x62;
0x00047c8a uxtb r3, r3 | r3 = (int8_t) r3;
0x00047c8c cmp r3, 0x13 |
| if (r3 > 0x13) {
0x00047c8e bhi 0x47c9e | goto label_2;
| }
0x00047c90 lsl.w lr, ip, r3 | lr = ip << r3;
0x00047c94 tst.w lr, r1 |
| if ((lr & r1) != 0) {
0x00047c98 bne 0x47cc4 | goto label_22;
| }
0x00047c9a cmp r3, 0x13 |
0x00047c9c beq 0x47ca6 |
| while (r3 >= r3) {
| label_2:
0x00047c9e mov.w r0, -1 | r0 = -1;
0x00047ca2 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
0x00047ca6 ldr.w r8, [pc, 0x49c] |
0x00047caa add.w lr, r5, 5 | lr = r5 + 5;
0x00047cae add lr, r2 | lr += r2;
0x00047cb0 add r8, pc | r8 = 0x8fdfa;
| label_0:
0x00047cb2 ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x00047cb6 add r3, r8 | r3 += r8;
0x00047cb8 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00047cbc lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x00047cbe bpl 0x47c9e |
| }
0x00047cc0 cmp lr, r4 |
| if (lr != r4) {
0x00047cc2 bne 0x47cb2 | goto label_0;
| }
| label_22:
0x00047cc4 adds r2, 2 | r2 += 2;
0x00047cc6 mov.w r8, 2 | r8 = 2;
0x00047cca b 0x47c6a | goto label_1;
| label_15:
0x00047ccc ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00047cce cmp r2, 0 |
| if (r2 == 0) {
0x00047cd0 beq.w 0x47e3c | goto label_23;
| }
0x00047cd4 ldrd r3, r1, [r6] | __asm ("ldrd r3, r1, [r6]");
0x00047cd8 cmp r3, r1 |
| if (r3 >= r1) {
0x00047cda bhs.w 0x47e3c | goto label_23;
| }
0x00047cde add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x00047ce2 mov r8, r3 | r8 = r3;
0x00047ce4 movs r4, 0 | r4 = 0;
0x00047ce6 lsls r1, r1, 2 | r1 <<= 2;
0x00047ce8 adds r3, 1 | r3++;
0x00047cea mov.w ip, 7 |
0x00047cee adds r0, r2, r1 | r0 = r2 + r1;
0x00047cf0 strh.w ip, [r2, r1] | *((r2 + r1)) = ip;
0x00047cf4 strd r4, r4, [r0, 4] | __asm ("strd r4, r4, [r0, 4]");
0x00047cf8 str r3, [r6] | *(r6) = r3;
| label_5:
0x00047cfa cmp.w r8, 0 |
| if (r8 < 0) {
0x00047cfe blt 0x47c9e | goto label_2;
| }
0x00047d00 adds r4, r7, 1 | r4 = r7 + 1;
0x00047d02 ldr.w r7, [pc, 0x444] |
0x00047d06 ldrh r1, [r6, 0x16] | r1 = *((r6 + 0x16));
0x00047d08 add r7, pc | r7 = 0x8fe56;
| label_6:
0x00047d0a ldrb r3, [r5, r4] | r3 = *((r5 + r4));
0x00047d0c add r3, r7 | r3 += r7;
0x00047d0e ldrb.w r3, [r3, 0x568] | r3 = *((r3 + 0x568));
0x00047d12 cmp r3, 0 |
| if (r3 != 0) {
0x00047d14 bne.w 0x47e4c | goto label_24;
| }
0x00047d18 adds r1, 1 | r1++;
0x00047d1a uxth r1, r1 | r1 = (int16_t) r1;
0x00047d1c cmp.w r1, 0x7d0 |
0x00047d20 strh r1, [r6, 0x16] | *((r6 + 0x16)) = r1;
| if (r1 > 0x7d0) {
0x00047d22 bhi 0x47c9e | goto label_2;
| }
0x00047d24 mov r1, r4 | r1 = r4;
0x00047d26 mov r0, r6 | r0 = r6;
0x00047d28 bl 0x47bc0 | r0 = fcn_00047bc0 (r0, r1);
0x00047d2c subs r3, r0, 0 | r3 = r0 - 0;
| if (r3 < r0) {
0x00047d2e blt.w 0x480f2 | goto label_25;
| }
0x00047d32 ldrb r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00047d34 cmp r2, 0 |
| if (r2 != 0) {
0x00047d36 bne 0x47c9e | goto label_2;
| }
0x00047d38 ldr r2, [r6] | r2 = *(r6);
0x00047d3a ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x00047d3c add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00047d40 lsls r2, r2, 2 | r2 <<= 2;
0x00047d42 subs r2, 0xc | r2 -= 0xc;
0x00047d44 ldrb r0, [r1, r2] | r0 = *((r1 + r2));
0x00047d46 add r1, r2 | r1 += r2;
0x00047d48 cmp r0, 5 |
| if (r0 != 5) {
0x00047d4a bne 0x47c9e | goto label_2;
| }
0x00047d4c ldrb r2, [r1, 1] | r2 = *((r1 + 1));
0x00047d4e orr r2, r2, 0x40 | r2 |= 0x40;
0x00047d52 strb r2, [r1, 1] | *((r1 + 1)) = r2;
0x00047d54 mov r1, r3 | r1 = r3;
0x00047d56 ldrb r4, [r5, r3] | r4 = *((r5 + r3));
0x00047d58 add r3, r5 | r3 += r5;
0x00047d5a adds r2, r7, r4 | r2 = r7 + r4;
0x00047d5c ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x00047d60 cbz r2, 0x47d7c | goto label_26;
| }
0x00047d62 ldr r1, [pc, 0x3e8] |
0x00047d64 add r1, pc | r1 = 0x8feb6;
| do {
0x00047d66 mov r0, r3 | r0 = r3;
0x00047d68 ldrb r4, [r3, 1]! | r4 = *((r3 += 1));
0x00047d6c adds r2, r1, r4 | r2 = r1 + r4;
0x00047d6e ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x00047d72 cmp r2, 0 |
0x00047d74 bne 0x47d66 |
| } while (r2 != 0);
0x00047d76 rsb.w r1, r5, 1 | r1 = 1 - r5;
0x00047d7a add r1, r0 | r1 += r0;
| label_26:
0x00047d7c cmp r4, 0x3a |
| if (r4 != 0x3a) {
0x00047d7e bne 0x47c9e | goto label_2;
| }
0x00047d80 adds r1, 1 | r1++;
0x00047d82 mov r0, r6 | r0 = r6;
0x00047d84 bl 0x47bc0 | fcn_00047bc0 (r0, r1);
0x00047d88 ldrh r1, [r6, 0x16] | r1 = *((r6 + 0x16));
0x00047d8a subs r3, r0, 0 | r3 = r0 - 0;
0x00047d8c add.w r1, r1, -1 | r1 += -1;
0x00047d90 uxth r1, r1 | r1 = (int16_t) r1;
0x00047d92 strh r1, [r6, 0x16] | *((r6 + 0x16)) = r1;
| if (r3 < r0) {
0x00047d94 blt 0x47c9e | goto label_2;
| }
0x00047d96 ldr r0, [pc, 0x3b8] |
0x00047d98 mov r4, r3 | r4 = r3;
0x00047d9a ldrb.w ip, [r5, r3] | ip = *((r5 + r3));
0x00047d9e add r3, r5 | r3 += r5;
0x00047da0 add r0, pc | r0 = 0x8fef6;
0x00047da2 add.w r2, r0, ip | r2 = r0 + ip;
0x00047da6 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x00047daa cbz r2, 0x47dc4 | goto label_27;
| }
| do {
0x00047dac mov lr, r3 | lr = r3;
0x00047dae ldrb ip, [r3, 1]! | ip = *((r3 += 1));
0x00047db2 add.w r2, r0, ip | r2 = r0 + ip;
0x00047db6 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x00047dba cmp r2, 0 |
0x00047dbc bne 0x47dac |
| } while (r2 != 0);
0x00047dbe rsb.w r4, r5, 1 | r4 = 1 - r5;
0x00047dc2 add r4, lr | r4 += lr;
| label_27:
0x00047dc4 cmp.w ip, 0x2c |
| if (ip == 0x2c) {
0x00047dc8 beq 0x47e4c | goto label_24;
| }
0x00047dca cmp.w ip, 0x7d |
| if (ip != 0x7d) {
0x00047dce bne.w 0x47c9e | goto label_2;
| }
0x00047dd2 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00047dd4 add.w r1, r8, r8, lsl 1 | r1 = r8 + (r8 << 1);
0x00047dd8 ldr r3, [r6] | r3 = *(r6);
0x00047dda adds r0, r4, 1 | r0 = r4 + 1;
0x00047ddc add.w r2, r2, r1, lsl 2 | r2 += (r1 << 2);
0x00047de0 subs r3, 1 | r3--;
0x00047de2 sub.w r3, r3, r8 | r3 -= r8;
0x00047de6 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x00047de8 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_18:
0x00047dec ldr r1, [pc, 0x364] |
0x00047dee movs r2, 4 | r2 = 4;
0x00047df0 add r1, pc | r1 = 0x8ff48;
0x00047df2 blx 0x8a18 | r0 = fcn_00008a18 ();
0x00047df6 cmp r0, 0 |
| if (r0 != 0) {
0x00047df8 bne.w 0x47c3c | goto label_3;
| }
0x00047dfc ldr r3, [pc, 0x358] |
0x00047dfe adds r7, 4 | r7 += 4;
0x00047e00 ldrb r2, [r5, r7] | r2 = *((r5 + r7));
0x00047e02 add r3, pc | r3 = 0x8ff5e;
0x00047e04 add r3, r2 | r3 += r2;
0x00047e06 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00047e0a ands r3, r3, 6 | r3 &= 6;
| if (r3 != r3) {
0x00047e0e bne.w 0x47c3c | goto label_3;
| }
0x00047e12 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x00047e14 cmp r1, 0 |
| if (r1 == 0) {
0x00047e16 beq.w 0x48120 | goto label_28;
| }
0x00047e1a ldrd r2, r0, [r6] | __asm ("ldrd r2, r0, [r6]");
0x00047e1e cmp r2, r0 |
| if (r2 >= r0) {
0x00047e20 bhs.w 0x48120 | goto label_28;
| }
0x00047e24 add.w r0, r2, r2, lsl 1 | r0 = r2 + (r2 << 1);
0x00047e28 movs r4, 1 | r4 = 1;
0x00047e2a adds r2, 1 | r2++;
0x00047e2c lsls r0, r0, 2 | r0 <<= 2;
0x00047e2e strh r4, [r1, r0] | *((r1 + r0)) = r4;
0x00047e30 add r1, r0 | r1 += r0;
0x00047e32 strd r3, r3, [r1, 4] | __asm ("strd r3, r3, [r1, 4]");
0x00047e36 mov r0, r7 | r0 = r7;
0x00047e38 str r2, [r6] | *(r6) = r2;
0x00047e3a b 0x47c44 | goto label_4;
| label_23:
0x00047e3c movs r3, 0 | r3 = 0;
0x00047e3e movs r1, 7 | r1 = 7;
0x00047e40 mov r2, r3 | r2 = r3;
0x00047e42 mov r0, r6 | r0 = r6;
0x00047e44 bl 0x47378 | r0 = fcn_00047378 (r0, r1, r2, r3);
0x00047e48 mov r8, r0 | r8 = r0;
0x00047e4a b 0x47cfa | goto label_5;
| label_24:
0x00047e4c adds r4, 1 | r4++;
0x00047e4e b 0x47d0a | goto label_6;
| label_19:
0x00047e50 sub.w r3, r4, 0x30 | r3 = r4 - 0x30;
0x00047e54 cmp r4, 0x2d |
0x00047e56 it ne |
| if (r4 != 0x2d) {
0x00047e58 cmpne r3, 9 | __asm ("cmpne r3, 9");
| }
| if (r4 > 0x2d) {
0x00047e5a bhi.w 0x4807e | goto label_29;
| }
0x00047e5e cmp r4, 0x30 |
| if (r4 <= 0x30) {
0x00047e60 bhi 0x47e72 |
0x00047e62 cmp r4, 0x2d |
0x00047e64 ite eq |
| if (r4 != 0x2d) {
0x00047e66 addeq r3, r7, 1 | r3 = r7 + 1;
| }
| if (r4 == 0x2d) {
0x00047e68 movne r3, r7 | r3 = r7;
| }
0x00047e6a ldrb r2, [r5, r3] | r2 = *((r5 + r3));
0x00047e6c cmp r2, 0x30 |
| if (r2 == 0x30) {
0x00047e6e beq.w 0x48090 | goto label_30;
| }
| }
| label_11:
0x00047e72 movs r3, 0 | r3 = 0;
0x00047e74 adds r4, r7, 1 | r4 = r7 + 1;
0x00047e76 mov ip, r3 |
0x00047e78 b 0x47eb4 | goto label_31;
| label_7:
0x00047e7a and r2, r2, 0xdf | r2 &= 0xdf;
0x00047e7e cmp r2, 0x45 |
| if (r2 != 0x45) {
0x00047e80 bne.w 0x4800a | goto label_32;
| }
0x00047e84 cmp r1, 0x2f |
0x00047e86 it ls |
| if (r1 > 0x2f) {
0x00047e88 orrls r3, r3, 1 | r3 |= 1;
| }
0x00047e8c cmp r3, 0 |
| if (r3 != 0) {
0x00047e8e bne.w 0x47c9e | goto label_2;
| }
0x00047e92 adds r2, r4, 1 | r2 = r4 + 1;
0x00047e94 ldrb r3, [r5, r2] | r3 = *((r5 + r2));
0x00047e96 sub.w r1, r3, 0x2b | r1 = r3 - 0x2b;
0x00047e9a tst.w r1, 0xfd |
0x00047e9e itt eq |
| if ((r1 & 0xfd) != 0) {
0x00047ea0 ldrbeq r3, [lr, 2] | r3 = *((lr + 2));
| }
| if ((r1 & 0xfd) == 0) {
0x00047ea4 mov r4, r2 | r4 = r2;
| }
0x00047ea6 subs r3, 0x30 | r3 -= 0x30;
0x00047ea8 cmp r3, 9 |
| if (r3 > 9) {
0x00047eaa bhi.w 0x47c9e | goto label_2;
| }
0x00047eae movs r3, 1 | r3 = 1;
0x00047eb0 mov ip, r3 |
| do {
| label_8:
0x00047eb2 adds r4, 1 | r4++;
| label_31:
0x00047eb4 ldrb r2, [r5, r4] | r2 = *((r5 + r4));
0x00047eb6 sub.w r1, r2, 0x30 | r1 = r2 - 0x30;
0x00047eba cmp r1, 9 |
0x00047ebc bls 0x47eb2 |
| } while (r1 < 9);
0x00047ebe cmp r2, 0x2e |
0x00047ec0 add.w lr, r5, r4 | lr = r5 + r4;
0x00047ec4 ldrb r1, [lr, -0x1] | r1 = *((lr - 0x1));
| if (r2 != 0x2e) {
0x00047ec8 bne 0x47e7a | goto label_7;
| }
0x00047eca cmp r1, 0x2d |
0x00047ecc ite ne |
| if (r1 == 0x2d) {
0x00047ece movne r2, ip | r2 = ip;
| }
| if (r1 != 0x2d) {
0x00047ed0 orreq r2, ip, 1 | r2 = ip | 1;
| }
0x00047ed4 cmp r2, 0 |
| if (r2 != 0) {
0x00047ed6 bne.w 0x47c9e | goto label_2;
| }
0x00047eda mov.w ip, 1 |
0x00047ede b 0x47eb2 | goto label_8;
| label_16:
0x00047ee0 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00047ee2 cmp r2, 0 |
| if (r2 == 0) {
0x00047ee4 beq.w 0x47ffa | goto label_33;
| }
0x00047ee8 ldrd r3, r1, [r6] | __asm ("ldrd r3, r1, [r6]");
0x00047eec cmp r3, r1 |
| if (r3 >= r1) {
0x00047eee bhs.w 0x47ffa | goto label_33;
| }
0x00047ef2 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x00047ef6 mov r8, r3 | r8 = r3;
0x00047ef8 movs r4, 0 | r4 = 0;
0x00047efa lsls r1, r1, 2 | r1 <<= 2;
0x00047efc adds r3, 1 | r3++;
0x00047efe mov.w ip, 6 |
0x00047f02 adds r0, r2, r1 | r0 = r2 + r1;
0x00047f04 strh.w ip, [r2, r1] | *((r2 + r1)) = ip;
0x00047f08 strd r4, r4, [r0, 4] | __asm ("strd r4, r4, [r0, 4]");
0x00047f0c str r3, [r6] | *(r6) = r3;
| label_10:
0x00047f0e cmp.w r8, 0 |
| if (r8 < 0) {
0x00047f12 blt.w 0x47c9e | goto label_2;
| }
0x00047f16 add.w r3, r8, r8, lsl 1 | r3 = r8 + (r8 << 1);
0x00047f1a adds r4, r7, 1 | r4 = r7 + 1;
0x00047f1c ldr.w sb, [pc, 0x23c] | sb = *(0x0004815c);
0x00047f20 movs r2, 0 | r2 = 0;
0x00047f22 lsls r7, r3, 2 | r7 = r3 << 2;
0x00047f24 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00047f26 add sb, pc | sb += pc;
0x00047f28 add r3, r7 | r3 += r7;
0x00047f2a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00047f2c ldrh r1, [r6, 0x16] | r1 = *((r6 + 0x16));
| label_9:
0x00047f2e ldrb r3, [r5, r4] | r3 = *((r5 + r4));
0x00047f30 add r3, sb | r3 += sb;
0x00047f32 ldrb.w r3, [r3, 0x568] | r3 = *((r3 + 0x568));
0x00047f36 cmp r3, 0 |
| if (r3 != 0) {
0x00047f38 bne 0x47fa8 | goto label_34;
| }
0x00047f3a adds r1, 1 | r1++;
0x00047f3c uxth r1, r1 | r1 = (int16_t) r1;
0x00047f3e cmp.w r1, 0x7d0 |
0x00047f42 strh r1, [r6, 0x16] | *((r6 + 0x16)) = r1;
| if (r1 > 0x7d0) {
0x00047f44 bhi.w 0x47c9e | goto label_2;
| }
0x00047f48 mov r1, r4 | r1 = r4;
0x00047f4a mov r0, r6 | r0 = r6;
0x00047f4c bl 0x47bc0 | fcn_00047bc0 (r0, r1);
0x00047f50 ldrh r1, [r6, 0x16] | r1 = *((r6 + 0x16));
0x00047f52 subs r3, r0, 0 | r3 = r0 - 0;
0x00047f54 add.w r1, r1, -1 | r1 += -1;
0x00047f58 uxth r1, r1 | r1 = (int16_t) r1;
0x00047f5a strh r1, [r6, 0x16] | *((r6 + 0x16)) = r1;
| if (r3 < r0) {
0x00047f5c blt.w 0x480dc | goto label_35;
| }
0x00047f60 ldrb r0, [r5, r3] | r0 = *((r5 + r3));
0x00047f62 mov r4, r3 | r4 = r3;
0x00047f64 add r3, r5 | r3 += r5;
0x00047f66 add.w r2, sb, r0 | r2 = sb + r0;
0x00047f6a ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x00047f6e cbz r2, 0x47f8a | goto label_36;
| }
0x00047f70 ldr r4, [pc, 0x1ec] |
0x00047f72 add r4, pc | r4 = 0x900d6;
| do {
0x00047f74 mov ip, r3 |
0x00047f76 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x00047f7a adds r2, r4, r0 | r2 = r4 + r0;
0x00047f7c ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x00047f80 cmp r2, 0 |
0x00047f82 bne 0x47f74 |
| } while (r2 != 0);
0x00047f84 rsb.w r4, r5, 1 | r4 = 1 - r5;
0x00047f88 add r4, ip | r4 += ip;
| label_36:
0x00047f8a cmp r0, 0x2c |
| if (r0 == 0x2c) {
0x00047f8c beq 0x47fa8 | goto label_34;
| }
0x00047f8e cmp r0, 0x5d |
| if (r0 != 0x5d) {
0x00047f90 bne.w 0x47c9e | goto label_2;
| }
0x00047f94 ldr r3, [r6] | r3 = *(r6);
0x00047f96 adds r0, r4, 1 | r0 = r4 + 1;
0x00047f98 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00047f9a subs r3, 1 | r3--;
0x00047f9c add r2, r7 | r2 += r7;
0x00047f9e sub.w r3, r3, r8 | r3 -= r8;
0x00047fa2 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x00047fa4 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_34:
0x00047fa8 adds r4, 1 | r4++;
0x00047faa b 0x47f2e | goto label_9;
| label_17:
0x00047fac ldr r1, [pc, 0x1b4] |
0x00047fae movs r2, 4 | r2 = 4;
0x00047fb0 add r1, pc | r1 = 0x90118;
0x00047fb2 blx 0x8a18 | r0 = fcn_00008a18 ();
0x00047fb6 cmp r0, 0 |
| if (r0 != 0) {
0x00047fb8 bne.w 0x47c3c | goto label_3;
| }
0x00047fbc ldr r3, [pc, 0x1a8] |
0x00047fbe adds r7, 4 | r7 += 4;
0x00047fc0 ldrb r2, [r5, r7] | r2 = *((r5 + r7));
0x00047fc2 add r3, pc | r3 = 0x9012e;
0x00047fc4 add r3, r2 | r3 += r2;
0x00047fc6 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x00047fca ands r3, r3, 6 | r3 &= 6;
| if (r3 != r3) {
0x00047fce bne.w 0x47c3c | goto label_3;
| }
0x00047fd2 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x00047fd4 cmp r1, 0 |
| if (r1 == 0) {
0x00047fd6 beq.w 0x48110 | goto label_37;
| }
0x00047fda ldrd r2, r0, [r6] | __asm ("ldrd r2, r0, [r6]");
0x00047fde cmp r2, r0 |
| if (r2 >= r0) {
0x00047fe0 bhs.w 0x48110 | goto label_37;
| }
0x00047fe4 add.w r0, r2, r2, lsl 1 | r0 = r2 + (r2 << 1);
0x00047fe8 adds r2, 1 | r2++;
0x00047fea lsls r0, r0, 2 | r0 <<= 2;
0x00047fec strh r3, [r1, r0] | *((r1 + r0)) = r3;
0x00047fee add r1, r0 | r1 += r0;
0x00047ff0 strd r3, r3, [r1, 4] | __asm ("strd r3, r3, [r1, 4]");
0x00047ff4 mov r0, r7 | r0 = r7;
0x00047ff6 str r2, [r6] | *(r6) = r2;
0x00047ff8 b 0x47c44 | goto label_4;
| label_33:
0x00047ffa movs r3, 0 | r3 = 0;
0x00047ffc movs r1, 6 | r1 = 6;
0x00047ffe mov r2, r3 | r2 = r3;
0x00048000 mov r0, r6 | r0 = r6;
0x00048002 bl 0x47378 | r0 = fcn_00047378 (r0, r1, r2, r3);
0x00048006 mov r8, r0 | r8 = r0;
0x00048008 b 0x47f0e | goto label_10;
| label_32:
0x0004800a cmp r1, 0x2f |
| if (r1 < 0x2f) {
0x0004800c bls.w 0x47c9e | goto label_2;
| }
0x00048010 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00048012 add.w r1, ip, 3 | r1 = ip + 3;
0x00048016 subs r2, r4, r7 | r2 = r4 - r7;
0x00048018 cmp r3, 0 |
| if (r3 == 0) {
0x0004801a beq 0x4809e | goto label_38;
| }
0x0004801c ldrd r5, r7, [r6] | __asm ("ldrd r5, r7, [r6]");
0x00048020 cmp r5, r7 |
| if (r5 >= r7) {
0x00048022 bhs 0x4809e | goto label_38;
| }
0x00048024 add.w r7, r5, r5, lsl 1 | r7 = r5 + (r5 << 1);
0x00048028 adds r5, 1 | r5++;
0x0004802a lsls r7, r7, 2 | r7 <<= 2;
0x0004802c strb r1, [r3, r7] | *((r3 + r7)) = r1;
0x0004802e add r3, r7 | r3 += r7;
0x00048030 strd r2, r0, [r3, 4] | __asm ("strd r2, r0, [r3, 4]");
0x00048034 movs r2, 0 | r2 = 0;
0x00048036 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x00048038 str r5, [r6] | *(r6) = r5;
| do {
0x0004803a mov r0, r4 | r0 = r4;
0x0004803c b 0x47c44 | goto label_4;
| label_21:
0x0004803e ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00048040 rsb.w r7, r7, 1 | r7 = 1 - r7;
0x00048044 add r2, r7 | r2 += r7;
| if (r3 == 0) {
0x00048046 cbz r3, 0x480aa | goto label_39;
| }
0x00048048 ldrd r1, r5, [r6] | __asm ("ldrd r1, r5, [r6]");
0x0004804c cmp r1, r5 |
| if (r1 >= r5) {
0x0004804e bhs 0x480aa | goto label_39;
| }
0x00048050 add.w r5, r1, r1, lsl 1 | r5 = r1 + (r1 << 1);
0x00048054 movs r7, 5 | r7 = 5;
0x00048056 adds r1, 1 | r1++;
0x00048058 lsls r5, r5, 2 | r5 <<= 2;
0x0004805a strh r7, [r3, r5] | *((r3 + r5)) = r7;
0x0004805c add r3, r5 | r3 += r5;
0x0004805e strd r2, r0, [r3, 4] | __asm ("strd r2, r0, [r3, 4]");
0x00048062 str r1, [r6] | *(r6) = r1;
| label_12:
0x00048064 ldrb r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00048066 cmp r3, 0 |
0x00048068 bne 0x4803a |
| } while (r3 != 0);
0x0004806a ldr r3, [r6] | r3 = *(r6);
0x0004806c mov r0, r4 | r0 = r4;
0x0004806e ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00048070 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00048074 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x00048078 strb r8, [r3, -0xb] | *((r3 - 0xb)) = r8;
0x0004807c b 0x47c44 | goto label_4;
| label_29:
0x0004807e cmp r4, 0x7d |
| if (r4 == 0x7d) {
0x00048080 beq 0x48130 | goto label_40;
| }
0x00048082 cmp r4, 0x5d |
0x00048084 it eq |
| if (r4 == 0x5d) {
0x00048086 mvneq r0, 2 | r0 = ~2;
| goto label_41;
| }
| if (r4 == 0x5d) {
| label_41:
0x0004808a beq.w 0x47c44 | goto label_4;
| }
0x0004808e b 0x47c3c | goto label_3;
| label_30:
0x00048090 add r3, r5 | r3 += r5;
0x00048092 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x00048094 subs r3, 0x30 | r3 -= 0x30;
0x00048096 cmp r3, 9 |
| if (r3 > 9) {
0x00048098 bhi.w 0x47e72 | goto label_11;
| }
0x0004809c b 0x47c9e | goto label_2;
| label_38:
0x0004809e mov r3, r0 | r3 = r0;
0x000480a0 mov r0, r6 | r0 = r6;
0x000480a2 bl 0x47378 | fcn_00047378 (r0, r1, r2, r3);
0x000480a6 mov r0, r4 | r0 = r4;
0x000480a8 b 0x47c44 | goto label_4;
| label_39:
0x000480aa mov r3, r0 | r3 = r0;
0x000480ac movs r1, 5 | r1 = 5;
0x000480ae mov r0, r6 | r0 = r6;
0x000480b0 bl 0x47378 | fcn_00047378 (r0, r1, r2, r3);
0x000480b4 b 0x48064 | goto label_12;
| label_20:
0x000480b6 ldr r2, [r6, 8] | r2 = *((r6 + 8));
| if (r2 == 0) {
0x000480b8 cbz r2, 0x48100 | goto label_42;
| }
0x000480ba ldrd r3, r1, [r6] | __asm ("ldrd r3, r1, [r6]");
0x000480be cmp r3, r1 |
| if (r3 >= r1) {
0x000480c0 bhs 0x48100 | goto label_42;
| }
0x000480c2 add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x000480c6 movs r4, 2 | r4 = 2;
0x000480c8 movs r0, 0 | r0 = 0;
0x000480ca lsls r1, r1, 2 | r1 <<= 2;
0x000480cc adds r3, 1 | r3++;
0x000480ce strh r4, [r2, r1] | *((r2 + r1)) = r4;
0x000480d0 add r2, r1 | r2 += r1;
0x000480d2 strd r0, r0, [r2, 4] | __asm ("strd r0, r0, [r2, 4]");
0x000480d6 mov r0, r7 | r0 = r7;
0x000480d8 str r3, [r6] | *(r6) = r3;
0x000480da b 0x47c44 | goto label_4;
| label_35:
0x000480dc adds r3, 3 | r3 += 3;
| if (r3 != 3) {
0x000480de bne.w 0x47c9e | goto label_2;
| }
| label_13:
0x000480e2 ldr r3, [r6] | r3 = *(r6);
0x000480e4 add.w r8, r8, 1 | r8++;
0x000480e8 cmp r3, r8 |
| if (r3 != r8) {
0x000480ea bne.w 0x47c9e | goto label_2;
| }
0x000480ee adds r0, r4, 1 | r0 = r4 + 1;
0x000480f0 b 0x47c44 | goto label_4;
| label_25:
0x000480f2 ldrh r2, [r6, 0x16] | r2 = *((r6 + 0x16));
0x000480f4 adds r3, 2 | r3 += 2;
0x000480f6 add.w r2, r2, -1 | r2 += -1;
0x000480fa strh r2, [r6, 0x16] | *((r6 + 0x16)) = r2;
| if (r3 == 2) {
0x000480fc beq 0x480e2 | goto label_13;
| }
0x000480fe b 0x47c9e | goto label_2;
| label_42:
0x00048100 movs r3, 0 | r3 = 0;
0x00048102 movs r1, 2 | r1 = 2;
0x00048104 mov r2, r3 | r2 = r3;
0x00048106 mov r0, r6 | r0 = r6;
0x00048108 bl 0x47378 | fcn_00047378 (r0, r1, r2, r3);
0x0004810c mov r0, r7 | r0 = r7;
0x0004810e b 0x47c44 | goto label_4;
| label_37:
0x00048110 movs r3, 0 | r3 = 0;
0x00048112 mov r0, r6 | r0 = r6;
0x00048114 mov r2, r3 | r2 = r3;
0x00048116 mov r1, r3 | r1 = r3;
0x00048118 bl 0x47378 | fcn_00047378 (r0, r1, r2, r3);
0x0004811c mov r0, r7 | r0 = r7;
0x0004811e b 0x47c44 | goto label_4;
| label_28:
0x00048120 movs r3, 0 | r3 = 0;
0x00048122 movs r1, 1 | r1 = 1;
0x00048124 mov r2, r3 | r2 = r3;
0x00048126 mov r0, r6 | r0 = r6;
0x00048128 bl 0x47378 | fcn_00047378 (r0, r1, r2, r3);
0x0004812c mov r0, r7 | r0 = r7;
0x0004812e b 0x47c44 | goto label_4;
| label_40:
0x00048130 mvn r0, 1 | r0 = ~1;
0x00048134 b 0x47c44 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4816c */
| #include <stdint.h>
|
; (fcn) fcn.0004816c () | void fcn_0004816c (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0004816c push {r4, r5, r6, lr} |
0x0004816e mov r5, r2 | r5 = r2;
0x00048170 mov r6, r1 | r6 = r1;
0x00048172 movs r2, 0x20 | r2 = 0x20;
0x00048174 movs r1, 0 | r1 = 0;
0x00048176 mov r4, r0 | r4 = r0;
0x00048178 blx 0x839c | fcn_0000839c ();
| if (r5 != 0) {
0x0004817c cbz r5, 0x481ae |
0x0004817e movs r1, 0 | r1 = 0;
0x00048180 mov r0, r4 | r0 = r4;
0x00048182 str r5, [r4, 0xc] | *((r4 + 0xc)) = r5;
0x00048184 bl 0x47bc0 | fcn_00047bc0 (r0, r1);
0x00048188 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r3 == 0) {
0x0004818a cbz r3, 0x481b2 | goto label_2;
| }
| if (r6 != 0) {
0x0004818c cbz r6, 0x48194 |
0x0004818e mov r0, r6 | r0 = r6;
0x00048190 blx 0x81e8 | fcn_000081e8 ();
| }
| label_1:
0x00048194 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00048196 movs r5, 0 | r5 = 0;
0x00048198 blx 0x8404 | fcn_00008404 ();
0x0004819c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000481a0 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000481a2 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x000481a4 vst1.32 {d16}, [r4] | __asm ("vst1.32 {d16}, [r4]");
0x000481a8 blx 0x8404 | fcn_00008404 ();
0x000481ac str r5, [r4, 0x10] | *((r4 + 0x10)) = r5;
| }
0x000481ae movs r0, 1 | r0 = 1;
| label_0:
0x000481b0 pop {r4, r5, r6, pc} |
| label_2:
0x000481b2 cmp r0, 0 |
| if (r0 <= 0) {
0x000481b4 ble 0x481d8 | goto label_3;
| }
0x000481b6 ldr r1, [pc, 0x34] |
0x000481b8 adds r3, r5, r0 | r3 = r5 + r0;
0x000481ba ldrb r0, [r5, r0] | r0 = *((r5 + r0));
0x000481bc add r1, pc | r1 = 0x903ae;
0x000481be adds r2, r1, r0 | r2 = r1 + r0;
0x000481c0 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x000481c4 cbz r2, 0x481d4 | goto label_4;
| }
| do {
0x000481c6 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x000481ca adds r2, r1, r0 | r2 = r1 + r0;
0x000481cc ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x000481d0 cmp r2, 0 |
0x000481d2 bne 0x481c6 |
| } while (r2 != 0);
| label_4:
0x000481d4 cmp r0, 0 |
| if (r0 == 0) {
0x000481d6 beq 0x481b0 | goto label_0;
| }
| label_3:
0x000481d8 cmp r6, 0 |
| if (r6 == 0) {
0x000481da beq 0x48194 | goto label_1;
| }
0x000481dc ldr r1, [pc, 0x10] |
0x000481de mov.w r2, -1 | r2 = -1;
0x000481e2 mov r0, r6 | r0 = r6;
0x000481e4 add r1, pc | r1 = 0x903d8;
0x000481e6 blx 0x8798 | fcn_00008798 ();
0x000481ea b 0x48194 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x48510 */
| #include <stdint.h>
|
; (fcn) fcn.00048510 () | void fcn_00048510 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00048510 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00048514 mov r5, r2 | r5 = r2;
0x00048516 ldr.w r2, [pc, 0x448] | r2 = *(0x00048960);
0x0004851a sub sp, 0x2c |
0x0004851c mov r6, r0 | r6 = r0;
0x0004851e mov r0, r1 | r0 = r1;
0x00048520 ldr.w r3, [pc, 0x440] |
0x00048524 mov r4, r1 | r4 = r1;
0x00048526 add r2, pc | r2 += pc;
0x00048528 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0004852a ldr r3, [r3] | r3 = *(0x48964);
0x0004852c str r3, [sp, 0x24] | var_24h = r3;
0x0004852e mov.w r3, 0 | r3 = 0;
0x00048532 blx 0x8944 | r0 = fcn_00008944 ();
0x00048536 cmp r0, 4 |
| if (r0 == 4) {
0x00048538 beq.w 0x486a2 | goto label_17;
| }
| label_0:
0x0004853c mov r0, r4 | r0 = r4;
0x0004853e blx 0x8944 | r0 = fcn_00008944 ();
0x00048542 cmp r0, 3 |
| if (r0 != 3) {
0x00048544 bne.w 0x4867c | goto label_18;
| }
0x00048548 mov r0, r4 | r0 = r4;
0x0004854a blx 0x82e8 | r0 = fcn_000082e8 ();
0x0004854e cmp r0, 0 |
| if (r0 == 0) {
0x00048550 beq.w 0x48816 | goto label_19;
| }
0x00048554 ldr.w r1, [pc, 0x410] |
0x00048558 movs r4, 0 | r4 = 0;
0x0004855a ldrb r3, [r0] | r3 = *(r0);
0x0004855c strd r0, r4, [sp, 0x10] | __asm ("strd r0, r4, [var_10h]");
0x00048560 add r1, pc | r1 = 0x90ecc;
0x00048562 strd r4, r4, [sp, 0x18] | __asm ("strd r4, r4, [var_18h]");
0x00048566 adds r2, r1, r3 | r2 = r1 + r3;
0x00048568 str r4, [sp, 0x20] | var_20h = r4;
0x0004856a ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x0004856e cbz r2, 0x48580 | goto label_20;
| }
| do {
0x00048570 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x00048574 adds r2, r1, r3 | r2 = r1 + r3;
0x00048576 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x0004857a cmp r2, 0 |
0x0004857c bne 0x48570 |
| } while (r2 != 0);
0x0004857e str r0, [sp, 0x10] | var_10h = r0;
| label_20:
0x00048580 cmp r3, 0x5b |
| if (r3 != 0x5b) {
0x00048582 bne.w 0x486de | goto label_21;
| }
0x00048586 ldr.w r8, [pc, 0x3e4] | r8 = *(0x0004896c);
0x0004858a adds r4, r0, 1 | r4 = r0 + 1;
0x0004858c ldr.w sl, [pc, 0x3e0] |
0x00048590 ldr r6, [pc, 0x3e0] |
0x00048592 ldr.w fp, [pc, 0x3e4] |
0x00048596 add r8, pc | r8 += pc;
0x00048598 add sl, pc | sl = 0x90f0c;
0x0004859a mov sb, r8 | sb = r8;
0x0004859c add r6, pc | r6 = 0x90f14;
0x0004859e str r5, [sp] | *(sp) = r5;
0x000485a0 add fp, pc | fp = 0x90f1e;
| label_8:
0x000485a2 ldrb r3, [r4] | r3 = *(r4);
0x000485a4 str r4, [sp, 0x10] | var_10h = r4;
0x000485a6 add.w r2, sb, r3 | r2 = sb + r3;
0x000485aa ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x000485ae cbz r2, 0x485c2 | goto label_22;
| }
| do {
0x000485b0 ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x000485b4 add.w r2, sl, r3 | r2 = sl + r3;
0x000485b8 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x000485bc cmp r2, 0 |
0x000485be bne 0x485b0 |
| } while (r2 != 0);
0x000485c0 str r4, [sp, 0x10] | var_10h = r4;
| label_22:
0x000485c2 cmp r3, 0x5b |
| if (r3 != 0x5b) {
0x000485c4 bne.w 0x48720 | goto label_23;
| }
0x000485c8 ldrd r3, r2, [sp, 0x14] | __asm ("ldrd r3, r2, [var_14h]");
0x000485cc adds r4, 1 | r4++;
0x000485ce str r4, [sp, 0x10] | var_10h = r4;
0x000485d0 cmp r3, r2 |
| if (r3 >= r2) {
0x000485d2 bge.w 0x48822 | goto label_24;
| }
| label_7:
0x000485d6 ldr r5, [pc, 0x3a4] |
0x000485d8 mov.w r8, 0 | r8 = 0;
0x000485dc add r5, pc | r5 = 0x90f5e;
| label_11:
0x000485de cmp.w r8, 1 |
0x000485e2 itett le |
| if (r8 > 1) {
0x000485e4 ldrle r3, [sp, 0x14] | r3 = var_14h;
| }
| if (r8 <= 1) {
0x000485e6 movgt r3, 0 | r3 = 0;
| }
| if (r8 > 1) {
0x000485e8 ldrle r2, [sp, 0x20] | r2 = var_20h;
| }
| if (r8 > 1) {
0x000485ea addle r3, r8, r3, lsl 1 | r3 = r8 + (r3 << 1);
| }
0x000485ee it le |
| if (r8 > 1) {
0x000485f0 addle r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| }
0x000485f4 str r3, [sp, 4] | var_4h = r3;
0x000485f6 ldrb r3, [r4] | r3 = *(r4);
0x000485f8 adds r2, r5, r3 | r2 = r5 + r3;
0x000485fa ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x000485fe cbz r2, 0x48610 | goto label_25;
| }
| do {
0x00048600 ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x00048604 adds r2, r6, r3 | r2 = r6 + r3;
0x00048606 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x0004860a cmp r2, 0 |
0x0004860c bne 0x48600 |
| } while (r2 != 0);
0x0004860e str r4, [sp, 0x10] | var_10h = r4;
| label_25:
0x00048610 cmp r3, 0x2d |
0x00048612 itte eq |
| if (r3 != 0x2d) {
0x00048614 ldrbeq r3, [r4, 1] | r3 = *((r4 + 1));
| }
| if (r3 != 0x2d) {
0x00048616 moveq r1, 1 | r1 = 1;
| }
| if (r3 == 0x2d) {
0x00048618 movne r1, 0 | r1 = 0;
| }
0x0004861a mov r2, r1 | r2 = r1;
0x0004861c cmp r3, 0x30 |
| if (r3 == 0x30) {
0x0004861e beq 0x486f0 | goto label_26;
| }
| label_2:
0x00048620 mov.w ip, 0 |
0x00048624 mov lr, ip | lr = ip;
| do {
0x00048626 ldrb r3, [r4, r2] | r3 = *((r4 + r2));
0x00048628 mov r0, r2 | r0 = r2;
0x0004862a adds r7, r4, r2 | r7 = r4 + r2;
0x0004862c add.w r1, fp, r3 | r1 = fp + r3;
0x00048630 ldrb.w r1, [r1, 0x40] | r1 = *((r1 + 0x40));
0x00048634 lsls r1, r1, 0x1d | r1 <<= 0x1d;
| if (r1 >= r1) {
0x00048636 bmi 0x48678 |
0x00048638 cmp r3, 0x2e |
0x0004863a ldrb r1, [r7, -0x1] | r1 = *((r7 - 0x1));
| if (r3 == 0x2e) {
0x0004863e beq.w 0x48800 | goto label_27;
| }
0x00048642 and lr, r3, 0xdf | lr = r3 & 0xdf;
0x00048646 cmp.w lr, 0x45 |
| if (lr != 0x45) {
0x0004864a bne.w 0x488b8 | goto label_28;
| }
0x0004864e cmp r1, 0x2f |
| if (r1 < 0x2f) {
0x00048650 bls 0x486fa | goto label_4;
| }
0x00048652 cmp.w ip, 0 |
| if (ip != 0) {
0x00048656 bne.w 0x48936 | goto label_29;
| }
0x0004865a ldrb r3, [r7, 1] | r3 = *((r7 + 1));
0x0004865c sub.w r1, r3, 0x2b | r1 = r3 - 0x2b;
0x00048660 tst.w r1, 0xfd |
0x00048664 ittt eq |
| if ((r1 & 0xfd) != 0) {
0x00048666 addeq r0, r0, r4 | r0 += r4;
| }
| if ((r1 & 0xfd) != 0) {
0x00048668 addeq r2, 1 | r2++;
| }
| if ((r1 & 0xfd) != 0) {
0x0004866a ldrbeq r3, [r0, 2] | r3 = *((r0 + 2));
| }
0x0004866c subs r3, 0x30 | r3 -= 0x30;
0x0004866e cmp r3, 9 |
| if (r3 > 9) {
0x00048670 bhi 0x486fa | goto label_4;
| }
0x00048672 mov.w ip, 1 |
0x00048676 mov lr, ip | lr = ip;
| }
| label_5:
0x00048678 adds r2, 1 | r2++;
0x0004867a b 0x48626 |
| } while (1);
| if (r5 != 0) {
| label_18:
0x0004867c cbz r5, 0x48682 |
0x0004867e movs r3, 1 | r3 = 1;
0x00048680 str r3, [r5] | *(r5) = r3;
| }
| label_6:
0x00048682 movs r4, 0 | r4 = 0;
| label_1:
0x00048684 ldr r2, [pc, 0x2f8] |
0x00048686 ldr r3, [pc, 0x2dc] | r3 = *(0x48966);
0x00048688 add r2, pc | r2 = 0x9100c;
0x0004868a ldr r3, [r2, r3] | r3 = *(0x9100c);
0x0004868c ldr r2, [r3] | r2 = *(0x9100c);
0x0004868e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00048690 eors r2, r3 | r2 ^= r3;
0x00048692 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00048696 bne.w 0x4895c | goto label_30;
| }
0x0004869a mov r0, r4 | r0 = r4;
0x0004869c add sp, 0x2c |
0x0004869e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x000486a2 mov r0, r4 | r0 = r4;
0x000486a4 blx 0x87e4 | r0 = fcn_000087e4 ();
0x000486a8 cmp r0, 0x1b |
0x000486aa mov r7, r0 | r7 = r0;
| if (r0 < 0x1b) {
0x000486ac bls.w 0x4853c | goto label_0;
| }
0x000486b0 mov r0, r4 | r0 = r4;
0x000486b2 blx 0x819c | r0 = fcn_0000819c ();
0x000486b6 mov r8, r0 | r8 = r0;
0x000486b8 cmp r0, 0 |
| if (r0 == 0) {
0x000486ba beq.w 0x488aa | goto label_14;
| }
0x000486be ldrb.w r2, [r8] | r2 = *(r8);
0x000486c2 ldrb r0, [r0, 1] | r0 = *((r0 + 1));
0x000486c4 ldrb.w r3, [r8, 2] | r3 = *((r8 + 2));
0x000486c8 cmp r2, 1 |
0x000486ca ldrb.w r1, [r8, 3] | r1 = *((r8 + 3));
| if (r2 < 1) {
0x000486ce bls.w 0x48842 | goto label_31;
| }
| label_9:
0x000486d2 movs r4, 0 | r4 = 0;
| label_10:
0x000486d4 cmp r5, 0 |
| if (r5 == 0) {
0x000486d6 beq 0x48684 | goto label_1;
| }
| label_15:
0x000486d8 movs r3, 0 | r3 = 0;
0x000486da str r3, [r5] | *(r5) = r3;
0x000486dc b 0x48684 | goto label_1;
| label_21:
0x000486de movs r7, 0 | r7 = 0;
0x000486e0 mov r6, r7 | r6 = r7;
| if (r5 != 0) {
| label_3:
0x000486e2 cbz r5, 0x486e6 |
0x000486e4 str r6, [r5] | *(r5) = r6;
| }
0x000486e6 mov r0, r7 | r0 = r7;
0x000486e8 movs r4, 0 | r4 = 0;
0x000486ea blx 0x8404 | fcn_00008404 ();
0x000486ee b 0x48684 | goto label_1;
| label_26:
0x000486f0 add r1, r4 | r1 += r4;
0x000486f2 ldrb r3, [r1, 1] | r3 = *((r1 + 1));
0x000486f4 subs r3, 0x30 | r3 -= 0x30;
0x000486f6 cmp r3, 9 |
| if (r3 > 9) {
0x000486f8 bhi 0x48620 | goto label_2;
| }
| label_4:
0x000486fa ldr r4, [sp, 0x10] | r4 = var_10h;
| label_12:
0x000486fc ldr r1, [pc, 0x284] |
0x000486fe ldrb r3, [r4] | r3 = *(r4);
0x00048700 add r1, pc | r1 = 0x91088;
0x00048702 adds r2, r1, r3 | r2 = r1 + r3;
0x00048704 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x00048708 cbz r2, 0x4871a | goto label_32;
| }
| do {
0x0004870a ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x0004870e adds r2, r1, r3 | r2 = r1 + r3;
0x00048710 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x00048714 cmp r2, 0 |
0x00048716 bne 0x4870a |
| } while (r2 != 0);
0x00048718 str r4, [sp, 0x10] | var_10h = r4;
| label_32:
0x0004871a cmp r3, 0x2c |
| if (r3 == 0x2c) {
0x0004871c beq.w 0x4883e | goto label_33;
| }
| label_23:
0x00048720 ldr r5, [sp] | r5 = *(sp);
0x00048722 movs r6, 0 | r6 = 0;
0x00048724 ldr r4, [sp, 0x10] | r4 = var_10h;
0x00048726 ldr r7, [sp, 0x20] | r7 = var_20h;
| label_16:
0x00048728 ldr r1, [pc, 0x25c] |
0x0004872a ldrb r3, [r4] | r3 = *(r4);
0x0004872c add r1, pc | r1 = 0x910b8;
0x0004872e adds r2, r1, r3 | r2 = r1 + r3;
0x00048730 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x00048734 cbz r2, 0x48744 | goto label_34;
| }
| do {
0x00048736 ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x0004873a adds r2, r1, r3 | r2 = r1 + r3;
0x0004873c ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x00048740 cmp r2, 0 |
0x00048742 bne 0x48736 |
| } while (r2 != 0);
| label_34:
0x00048744 cmp r3, 0x5d |
| if (r3 != 0x5d) {
0x00048746 bne 0x487fc | goto label_35;
| }
0x00048748 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0004874a cmp r0, 3 |
| if (r0 <= 3) {
0x0004874c ble 0x487fc | goto label_35;
| }
0x0004874e add.w sb, r0, 0x20000000 | sb = r0 + 0x20000000;
0x00048752 vldr s14, [r7] | __asm ("vldr s14, [r7]");
0x00048756 add.w sb, sb, -1 | sb += -1;
0x0004875a lsl.w sb, sb, 3 | sb <<= 3;
0x0004875e add.w r3, r7, sb | r3 = r7 + sb;
0x00048762 vldr s15, [r3] | __asm ("vldr s15, [r3]");
0x00048766 vcmp.f32 s14, s15 | __asm ("vcmp.f32 s14, s15");
0x0004876a vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r0 != 3) {
0x0004876e bne 0x487fc | goto label_35;
| }
0x00048770 vldr s15, [r3, 4] | __asm ("vldr s15, [r3, 4]");
0x00048774 vldr s14, [r7, 4] | __asm ("vldr s14, [r7, 4]");
0x00048778 vcmp.f32 s14, s15 | __asm ("vcmp.f32 s14, s15");
0x0004877c vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r0 != 3) {
0x00048780 bne 0x487fc | goto label_35;
| }
0x00048782 ldr r2, [pc, 0x208] |
0x00048784 adds r4, 1 | r4++;
0x00048786 ldrb.w r8, [r4] | r8 = *(r4);
0x0004878a str r4, [sp, 0x10] | var_10h = r4;
0x0004878c add r2, pc | r2 = 0x9111e;
0x0004878e add.w r3, r2, r8 | r3 = r2 + r8;
0x00048792 ldrb.w r3, [r3, 0x568] | r3 = *((r3 + 0x568));
| if (r3 == 0) {
0x00048796 cbz r3, 0x487aa | goto label_36;
| }
| do {
0x00048798 ldrb r8, [r4, 1]! | r8 = *((r4 += 1));
0x0004879c add.w r3, r2, r8 | r3 = r2 + r8;
0x000487a0 ldrb.w r3, [r3, 0x568] | r3 = *((r3 + 0x568));
0x000487a4 cmp r3, 0 |
0x000487a6 bne 0x48798 |
| } while (r3 != 0);
0x000487a8 str r4, [sp, 0x10] | var_10h = r4;
| label_36:
0x000487aa cmp.w r8, 0 |
| if (r8 != 0) {
0x000487ae bne 0x487fc | goto label_35;
| }
0x000487b0 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x000487b2 add.w sl, r0, -1 | sl = r0 + -1;
0x000487b6 str.w sl, [sp, 0x14] | __asm ("str.w sl, [var_14h]");
0x000487ba lsls r1, r1, 3 | r1 <<= 3;
0x000487bc orr.w r1, r1, r0, lsr 29 | r1 |= (r0 >> 29);
0x000487c0 lsls r0, r0, 3 | r0 <<= 3;
0x000487c2 blx 0x8240 | r0 = fcn_00008240 ();
0x000487c6 mov r4, r0 | r4 = r0;
0x000487c8 cmp r0, 0 |
| if (r0 == 0) {
0x000487ca beq 0x486e2 | goto label_3;
| }
0x000487cc str sl, [r0], 8 | *(r0) = sl;
| r0 += 8;
0x000487d0 mov r2, sb | r2 = sb;
0x000487d2 mov r1, r7 | r1 = r7;
0x000487d4 blx 0x8610 | fcn_00008610 ();
0x000487d8 asr.w r3, sl, 0x10 | r3 = sl >> 0x10;
0x000487dc rev16.w sl, sl | __asm ("rev16.w sl, sl");
0x000487e0 mov r0, r7 | r0 = r7;
0x000487e2 strh.w sl, [r4, 6] | *((r4 + 6)) = sl;
0x000487e6 strb r3, [r4, 5] | *((r4 + 5)) = r3;
0x000487e8 movs r3, 1 | r3 = 1;
0x000487ea strb r3, [r4, 4] | *((r4 + 4)) = r3;
0x000487ec blx 0x8404 | fcn_00008404 ();
0x000487f0 cmp r5, 0 |
| if (r5 == 0) {
0x000487f2 beq.w 0x48684 | goto label_1;
| }
0x000487f6 str.w r8, [r5] | __asm ("str.w r8, [r5]");
0x000487fa b 0x48684 | goto label_1;
| label_35:
0x000487fc movs r6, 1 | r6 = 1;
0x000487fe b 0x486e2 | goto label_3;
| label_27:
0x00048800 cmp r1, 0x2d |
0x00048802 ite ne |
| if (r1 == 0x2d) {
0x00048804 movne r3, lr | r3 = lr;
| }
| if (r1 != 0x2d) {
0x00048806 orreq r3, lr, 1 | r3 = lr | 1;
| }
0x0004880a cmp r3, 0 |
| if (r3 != 0) {
0x0004880c bne.w 0x486fa | goto label_4;
| }
0x00048810 mov.w lr, 1 | lr = 1;
0x00048814 b 0x48678 | goto label_5;
| label_19:
0x00048816 cmp r5, 0 |
| if (r5 == 0) {
0x00048818 beq.w 0x48682 | goto label_6;
| }
0x0004881c movs r3, 7 | r3 = 7;
0x0004881e str r3, [r5] | *(r5) = r3;
0x00048820 b 0x48682 | goto label_6;
| label_24:
0x00048822 adds r2, 8 | r2 += 8;
0x00048824 ldr r7, [sp, 0x20] | r7 = var_20h;
0x00048826 lsls r3, r2, 1 | r3 = r2 << 1;
0x00048828 lsls r2, r2, 4 | r2 <<= 4;
0x0004882a str r3, [sp, 0x18] | var_18h = r3;
0x0004882c mov r0, r7 | r0 = r7;
0x0004882e movs r3, 0 | r3 = 0;
0x00048830 blx 0x8500 | r0 = fcn_00008500 ();
0x00048834 cmp r0, 0 |
| if (r0 == 0) {
0x00048836 beq.w 0x48952 | goto label_37;
| }
0x0004883a str r0, [sp, 0x20] | var_20h = r0;
0x0004883c b 0x485d6 | goto label_7;
| label_33:
0x0004883e adds r4, 1 | r4++;
0x00048840 b 0x485a2 | goto label_8;
| label_31:
0x00048842 lsl.w sb, r3, 8 | sb = r3 << 8;
0x00048846 add.w sb, sb, r0, lsl 16 | sb += (r0 << 16);
0x0004884a add sb, r1 | sb += r1;
0x0004884c lsl.w sl, sb, 3 | sl = sb << 3;
0x00048850 add.w r3, sl, 4 | r3 = sl + 4;
0x00048854 cmp r7, r3 |
| if (r7 != r3) {
0x00048856 bne.w 0x486d2 | goto label_9;
| }
0x0004885a add.w r0, sl, 0x20 | r0 = sl + 0x20;
0x0004885e movs r1, 0 | r1 = 0;
0x00048860 blx 0x8240 | r0 = fcn_00008240 ();
0x00048864 mov r4, r0 | r4 = r0;
0x00048866 cmp r0, 0 |
| if (r0 == 0) {
0x00048868 beq 0x4893c | goto label_38;
| }
0x0004886a mov r2, r7 | r2 = r7;
0x0004886c mov r1, r8 | r1 = r8;
0x0004886e str sb, [r0], 4 | *(r0) = sb;
| r0 += 4;
0x00048872 blx 0x8610 | fcn_00008610 ();
0x00048876 ldrb.w r3, [r8] | r3 = *(r8);
0x0004887a cmp r3, 1 |
| if (r3 == 1) {
0x0004887c beq.w 0x486d4 | goto label_10;
| }
0x00048880 add.w r3, sl, 8 | r3 = sl + 8;
0x00048884 add.w r2, r4, 8 | r2 = r4 + 8;
0x00048888 add r3, r4 | r3 += r4;
0x0004888a cmp.w sb, 0 |
| if (sb == 0) {
0x0004888e beq 0x488a0 | goto label_39;
| }
| do {
0x00048890 vld1.8 {d16}, [r2] | __asm ("vld1.8 {d16}, [r2]");
0x00048894 vrev32.8 d16, d16 | __asm ("vrev32.8 d16, d16");
0x00048898 vst1.8 {d16}, [r2]! | __asm ("vst1.8 {d16}, [r2]!");
0x0004889c cmp r2, r3 |
0x0004889e bne 0x48890 |
| } while (r2 != r3);
| label_39:
0x000488a0 ldrb r3, [r4, 4] | r3 = *((r4 + 4));
0x000488a2 eor r3, r3, 1 | r3 ^= 1;
0x000488a6 strb r3, [r4, 4] | *((r4 + 4)) = r3;
0x000488a8 b 0x486d4 | goto label_10;
| label_14:
0x000488aa cmp r6, 0 |
| if (r6 == 0) {
0x000488ac beq.w 0x48682 | goto label_6;
| }
0x000488b0 mov r0, r6 | r0 = r6;
0x000488b2 blx 0x81e8 | fcn_000081e8 ();
0x000488b6 b 0x48682 | goto label_6;
| label_28:
0x000488b8 cmp r1, 0x2f |
| if (r1 < 0x2f) {
0x000488ba bls.w 0x486fa | goto label_4;
| }
0x000488be ldr r1, [sp, 4] | r1 = var_4h;
| if (r1 != 0) {
0x000488c0 cbz r1, 0x488dc |
0x000488c2 movs r3, 1 | r3 = 1;
0x000488c4 add r1, sp, 8 | r1 += var_8h;
0x000488c6 mov r0, r4 | r0 = r4;
0x000488c8 bl 0x8ef8 | fcn_00008ef8 (r0, r1, r2, r3);
0x000488cc vldr d16, [sp, 8] | __asm ("vldr d16, [sp, 8]");
0x000488d0 ldr r1, [sp, 4] | r1 = var_4h;
0x000488d2 vcvt.f32.f64 s15, d16 | __asm ("vcvt.f32.f64 s15, d16");
0x000488d6 vstr s15, [r1] | __asm ("vstr s15, [r1]");
0x000488da ldrb r3, [r7] | r3 = *(r7);
| }
| label_13:
0x000488dc add.w r8, r8, 1 | r8++;
0x000488e0 ldr r1, [pc, 0xac] |
0x000488e2 cmp.w r8, 2 |
0x000488e6 it eq |
| if (r8 != 2) {
0x000488e8 ldreq r2, [sp, 0x14] | r2 = var_14h;
| }
0x000488ea add r1, pc | r1 = 0x9127e;
0x000488ec itt eq |
| if (r8 != 2) {
0x000488ee addeq r2, 1 | r2++;
| }
| if (r8 != 2) {
0x000488f0 streq r2, [sp, 0x14] | var_14h = r2;
| }
0x000488f2 adds r2, r1, r3 | r2 = r1 + r3;
0x000488f4 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
| if (r2 == 0) {
0x000488f8 cbz r2, 0x48908 | goto label_40;
| }
| do {
0x000488fa ldrb r3, [r7, 1]! | r3 = *((r7 += 1));
0x000488fe adds r2, r1, r3 | r2 = r1 + r3;
0x00048900 ldrb.w r2, [r2, 0x568] | r2 = *((r2 + 0x568));
0x00048904 cmp r2, 0 |
0x00048906 bne 0x488fa |
| } while (r2 != 0);
| label_40:
0x00048908 cmp r3, 0x2c |
0x0004890a add.w r4, r7, 1 | r4 = r7 + 1;
0x0004890e str r4, [sp, 0x10] | var_10h = r4;
| if (r3 == 0x2c) {
0x00048910 beq.w 0x485de | goto label_11;
| }
0x00048914 sub.w r3, r3, 0x5d | r3 -= 0x5d;
0x00048918 cmp.w r8, 1 |
0x0004891c clz r3, r3 | r3 &= r3;
0x00048920 lsr.w r3, r3, 5 | r3 >>= 5;
0x00048924 it le |
| if (r8 > 1) {
0x00048926 movle r3, 0 | r3 = 0;
| }
0x00048928 cmp r3, 0 |
| if (r3 != 0) {
0x0004892a bne.w 0x486fc | goto label_12;
| }
0x0004892e ldr r5, [sp] | r5 = *(sp);
0x00048930 movs r6, 1 | r6 = 1;
0x00048932 ldr r7, [sp, 0x20] | r7 = var_20h;
0x00048934 b 0x486e2 | goto label_3;
| label_29:
0x00048936 ldr r7, [sp, 0x10] | r7 = var_10h;
0x00048938 ldrb r3, [r7] | r3 = *(r7);
0x0004893a b 0x488dc | goto label_13;
| label_38:
0x0004893c cmp r5, 0 |
| if (r5 == 0) {
0x0004893e beq 0x488aa | goto label_14;
| }
0x00048940 movs r3, 7 | r3 = 7;
0x00048942 str r3, [r5] | *(r5) = r3;
0x00048944 cmp r6, 0 |
| if (r6 == 0) {
0x00048946 beq.w 0x486d8 | goto label_15;
| }
0x0004894a mov r0, r6 | r0 = r6;
0x0004894c blx 0x81e8 | fcn_000081e8 ();
0x00048950 b 0x486d8 | goto label_15;
| label_37:
0x00048952 movs r3, 1 | r3 = 1;
0x00048954 ldr r5, [sp] | r5 = *(sp);
0x00048956 movs r6, 7 | r6 = 7;
0x00048958 str r3, [sp, 0x1c] | var_1ch = r3;
0x0004895a b 0x48728 | goto label_16;
| label_30:
0x0004895c blx 0x883c | fcn_0000883c ();
0x00048960 lsls r2, r6, 0x1d | r2 = r6 << 0x1d;
0x00048962 movs r0, r1 | r0 = r1;
0x00048964 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00048966 movs r0, r0 |
0x00048968 ldr r4, [r5, 0x1c] | r4 = *((r5 + 0x1c));
0x0004896a movs r7, r0 | r7 = r0;
0x0004896c ldr r6, [r6, 0x18] | r6 = *((r6 + 0x18));
0x0004896e movs r7, r0 | r7 = r0;
0x00048970 ldr r4, [r6, 0x18] | r4 = *((r6 + 0x18));
0x00048972 movs r7, r0 | r7 = r0;
0x00048974 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x00048976 movs r7, r0 | r7 = r0;
0x00048978 adds r6, 0xc4 | r6 += 0xc4;
0x0004897a movs r7, r0 | r7 = r0;
0x0004897c ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x0004897e movs r7, r0 | r7 = r0;
0x00048980 lsls r0, r2, 0x18 | r0 = r2 << 0x18;
0x00048982 movs r0, r1 | r0 = r1;
0x00048984 ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x00048986 movs r7, r0 | r7 = r0;
0x00048988 ldr r0, [r4] | r0 = *(r4);
0x0004898a movs r7, r0 | r7 = r0;
0x0004898c str r0, [r0, 0x7c] | *((r0 + 0x7c)) = r0;
0x0004898e movs r7, r0 | r7 = r0;
0x00048990 str r2, [r4, 0x64] | *((r4 + 0x64)) = r2;
0x00048992 movs r7, r0 | r7 = r0;
0x00048994 push {r4, r5, r6, lr} |
0x00048996 mov r4, r2 | r4 = r2;
0x00048998 ldr r1, [r2] | r1 = *(r2);
0x0004899a mov r6, r0 | r6 = r0;
0x0004899c movs r2, 0 | r2 = 0;
0x0004899e bl 0x48510 | fcn_00048510 (r0, r1, r2);
0x000489a2 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000489a4 mov r5, r0 | r5 = r0;
0x000489a6 movs r2, 0 | r2 = 0;
0x000489a8 mov r0, r6 | r0 = r6;
0x000489aa bl 0x48510 | fcn_00048510 (r0, r1, r2);
0x000489ae cmp r5, 0 |
0x000489b0 it ne |
| if (r5 != 0) {
0x000489b2 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x000489b4 mov r4, r0 | r4 = r0;
0x000489b6 bne 0x489c8 |
| while (1) {
0x000489b8 mov r0, r5 | r0 = r5;
0x000489ba blx 0x8404 | fcn_00008404 ();
0x000489be mov r0, r4 | r0 = r4;
0x000489c0 pop.w {r4, r5, r6, lr} |
0x000489c4 b.w 0x8400 | void (*0x8400)() ();
0x000489c8 mov r1, r0 | r1 = r0;
0x000489ca mov r0, r5 | r0 = r5;
0x000489cc bl 0x40e78 | r0 = fcn_00040e78 (r0, r1);
0x000489d0 cmp r0, 0 |
| if (r0 >= 0) {
0x000489d2 blt 0x489fc |
0x000489d4 cmp r0, 2 |
0x000489d6 itett ne |
| if (r0 == 2) {
0x000489d8 subne r0, 4 | r0 -= 4;
| }
| if (r0 != 2) {
0x000489da moveq r1, 1 | r1 = 1;
| }
| if (r0 != 2) {
0x000489dc clzne r0, r0 | __asm ("clzne r0, r0");
| }
| if (r0 != 2) {
0x000489e0 lsrs r0, r0, 5 | r0 >>= 5;
| }
0x000489e2 it ne |
| if (r0 == r0) {
0x000489e4 lslne r1, r0, 1 | r1 = r0 << 1;
| }
0x000489e6 mov r0, r6 | r0 = r6;
0x000489e8 blx 0x83ac | fcn_000083ac ();
0x000489ec mov r0, r5 | r0 = r5;
0x000489ee blx 0x8404 | fcn_00008404 ();
0x000489f2 mov r0, r4 | r0 = r4;
0x000489f4 pop.w {r4, r5, r6, lr} |
0x000489f8 b.w 0x8400 | void (*0x8400)() ();
| }
0x000489fc mov r0, r6 | r0 = r6;
0x000489fe blx 0x81e8 | fcn_000081e8 ();
0x00048a02 b 0x489b8 |
| }
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x493a4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000493a4 () | void fcn_000493a4 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000493a4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000493a8 mov r7, r0 | r7 = r0;
0x000493aa sub sp, 0x14 |
0x000493ac mov r0, r1 | r0 = r1;
0x000493ae mov r4, r1 | r4 = r1;
0x000493b0 mov r8, r2 | r8 = r2;
0x000493b2 blx 0x85b4 | r0 = fcn_000085b4 ();
| if (r0 != 0) {
0x000493b6 cbnz r0, 0x493c0 | goto label_6;
| }
| label_2:
0x000493b8 movs r0, 0 | r0 = 0;
| do {
0x000493ba add sp, 0x14 |
0x000493bc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x000493c0 ldr.w r2, [r7, 0x8c] | r2 = *((r7 + 0x8c));
0x000493c4 mov r6, r0 | r6 = r0;
0x000493c6 movs r3, 0 | r3 = 0;
0x000493c8 add r2, r0 | r2 += r0;
0x000493ca ldr.w r0, [r7, 0x90] | r0 = *((r7 + 0x90));
0x000493ce lsls r2, r2, 2 | r2 <<= 2;
0x000493d0 blx 0x8500 | r0 = fcn_00008500 ();
0x000493d4 mov sb, r0 | sb = r0;
0x000493d6 movs r0, 7 | r0 = 7;
0x000493d8 cmp.w sb, 0 |
0x000493dc beq 0x493ba |
| } while (sb == 0);
0x000493de add r6, r4 | r6 += r4;
0x000493e0 ldr.w sl, [r7, 0x8c] | sl = *((r7 + 0x8c));
0x000493e4 cmp r4, r6 |
| if (r4 >= r6) {
0x000493e6 bhs 0x4946c | goto label_7;
| }
0x000493e8 ldr r3, [pc, 0x17c] |
0x000493ea mov.w lr, 0xf800 | lr = 0xf800;
0x000493ee movw ip, 0x9fdf |
0x000493f2 movt lr, 0xffff | lr = (lr & 0xFFFF) | 0xffff0000;
0x000493f6 movt ip, 0x802 | ip = 0x8029fdf;
0x000493fa str.w lr, [sp, 8] | __asm ("str.w lr, [var_8h]");
0x000493fe add r3, pc | r3 = 0x9296a;
0x00049400 mov fp, ip |
0x00049402 str r3, [sp, 4] | var_4h = r3;
0x00049404 b 0x4940a |
| while (r5 < 0x7f) {
| label_0:
0x00049406 cmp r6, r4 |
| if (r6 < r4) {
0x00049408 bls 0x4946c | goto label_7;
| }
| label_1:
0x0004940a ldrb r5, [r4], 1 | r5 = *(r4);
| r4++;
0x0004940e cmp r5, 0xbf |
| if (r5 > 0xbf) {
0x00049410 bhi 0x49472 | goto label_8;
| }
0x00049412 cmp r5, 0x7f |
0x00049414 it ls |
| if (r5 > 0x7f) {
0x00049416 strbls r8, [r7, r5] | *((r7 + r5)) = r8;
| }
0x0004941a bls 0x49406 |
| }
| label_5:
0x0004941c mov r0, r5 | r0 = r5;
0x0004941e bl 0x10884 | fcn_00010884 (r0);
0x00049422 add r0, r7 | r0 += r7;
0x00049424 ldrb.w r2, [r0, 0x94] | r2 = *((r0 + 0x94));
0x00049428 cmp r8, r2 |
| if (r8 == r2) {
0x0004942a beq 0x49406 | goto label_0;
| }
| label_3:
0x0004942c cmp.w sl, 0 |
| if (sl <= 0) {
0x00049430 ble 0x49510 | goto label_9;
| }
0x00049432 mov r2, sb | r2 = sb;
0x00049434 movs r0, 0 | r0 = 0;
0x00049436 b 0x4943e |
| while (r3 < r5) {
0x00049438 adds r0, 1 | r0++;
0x0004943a cmp r0, sl |
| if (r0 == sl) {
0x0004943c beq 0x494e0 | goto label_10;
| }
0x0004943e mov r1, r2 | r1 = r2;
0x00049440 ldr r3, [r2], 4 | r3 = *(r2);
| r2 += 4;
0x00049444 cmp r3, r5 |
0x00049446 bls 0x49438 |
| }
0x00049448 add.w ip, r0, 1 |
0x0004944c sub.w r2, sl, r0 | r2 = sl - r0;
0x00049450 lsl.w r0, ip, 2 | r0 = ip << 2;
0x00049454 add.w ip, sl, 1 |
| label_4:
0x00049458 lsls r2, r2, 2 | r2 <<= 2;
0x0004945a add r0, sb | r0 += sb;
0x0004945c str r1, [sp, 0xc] | var_ch = r1;
0x0004945e mov sl, ip | sl = ip;
0x00049460 blx 0x88c4 | fcn_000088c4 ();
0x00049464 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00049466 cmp r6, r4 |
0x00049468 str r5, [r1] | *(r1) = r5;
| if (r6 > r4) {
0x0004946a bhi 0x4940a | goto label_1;
| }
| label_7:
0x0004946c strd sl, sb, [r7, 0x8c] | __asm ("strd sl, sb, [r7, 0x8c]");
0x00049470 b 0x493b8 | goto label_2;
| label_8:
0x00049472 ldr r3, [sp, 4] | r3 = var_4h;
0x00049474 cmp r6, r4 |
0x00049476 add r5, r3 | r5 += r3;
0x00049478 ldrb r5, [r5, -0xc0] | r5 = *((r5 - 0xc0));
| if (r6 == r4) {
0x0004947c beq 0x494f0 | goto label_11;
| }
0x0004947e mov r2, r4 | r2 = r4;
0x00049480 b 0x4948c |
| while (r1 == 0x80) {
0x00049482 cmp r6, r2 |
0x00049484 add.w r5, r3, r5, lsl 6 | r5 = r3 + (r5 << 6);
0x00049488 mov r4, r2 | r4 = r2;
| if (r6 == r2) {
0x0004948a beq 0x4949e | goto label_12;
| }
0x0004948c mov r4, r2 | r4 = r2;
0x0004948e ldrb r3, [r2], 1 | r3 = *(r2);
| r2++;
0x00049492 and r1, r3, 0xc0 | r1 = r3 & 0xc0;
0x00049496 and r3, r3, 0x3f | r3 &= 0x3f;
0x0004949a cmp r1, 0x80 |
0x0004949c beq 0x49482 |
| }
| label_12:
0x0004949e cmp r5, 0x7f |
| if (r5 < 0x7f) {
0x000494a0 bls 0x494ca | goto label_13;
| }
0x000494a2 ldr r3, [sp, 8] | r3 = var_8h;
0x000494a4 and.w r2, r5, r3 | r2 = r5 & r3;
0x000494a8 cmp.w r2, 0xd800 |
| if (r2 == 0xd800) {
0x000494ac beq 0x494ca | goto label_13;
| }
0x000494ae bic r1, r5, 1 | r1 = BIT_MASK (r5, 1);
0x000494b2 movw r2, 0xfffe | r2 = 0xfffe;
0x000494b6 cmp r1, r2 |
| if (r1 == r2) {
0x000494b8 beq 0x494ca | goto label_13;
| }
0x000494ba cmp.w r5, 0x100000 |
| if (r5 <= 0x100000) {
0x000494be blo 0x4951c | goto label_14;
| }
0x000494c0 ldrb.w r2, [r7, 0x94] | r2 = *((r7 + 0x94));
0x000494c4 cmp r8, r2 |
| if (r8 != r2) {
0x000494c6 bne 0x4942c | goto label_3;
| }
0x000494c8 b 0x49406 | goto label_0;
| label_13:
0x000494ca movw r5, 0xfffd | r5 = 0xfffd;
0x000494ce mov r0, r5 | r0 = r5;
0x000494d0 bl 0x10884 | fcn_00010884 (r0);
0x000494d4 add r0, r7 | r0 += r7;
0x000494d6 ldrb.w r2, [r0, 0x94] | r2 = *((r0 + 0x94));
0x000494da cmp r8, r2 |
| if (r8 == r2) {
0x000494dc beq 0x49406 | goto label_0;
| }
0x000494de b 0x4942c | goto label_3;
| label_10:
0x000494e0 add.w ip, r0, 1 |
0x000494e4 movs r2, 0 | r2 = 0;
0x000494e6 lsl.w r0, ip, 2 | r0 = ip << 2;
0x000494ea subs r1, r0, 4 | r1 = r0 - 4;
0x000494ec add r1, sb | r1 += sb;
0x000494ee b 0x49458 | goto label_4;
| label_11:
0x000494f0 cmp r5, 0x7f |
| if (r5 < 0x7f) {
0x000494f2 bls 0x49508 | goto label_15;
| }
0x000494f4 mov r0, r5 | r0 = r5;
0x000494f6 mov r4, r6 | r4 = r6;
0x000494f8 bl 0x10884 | r0 = fcn_00010884 (r0);
0x000494fc adds r2, r7, r0 | r2 = r7 + r0;
0x000494fe ldrb.w r2, [r2, 0x94] | r2 = *((r2 + 0x94));
0x00049502 cmp r8, r2 |
| if (r8 != r2) {
0x00049504 bne 0x4942c | goto label_3;
| }
0x00049506 b 0x49406 | goto label_0;
| label_15:
0x00049508 mov r4, r6 | r4 = r6;
0x0004950a movw r5, 0xfffd | r5 = 0xfffd;
0x0004950e b 0x4941c | goto label_5;
| label_9:
0x00049510 mov r2, sl | r2 = sl;
0x00049512 mov r1, sb | r1 = sb;
0x00049514 movs r0, 4 | r0 = 4;
0x00049516 add.w ip, sl, 1 |
0x0004951a b 0x49458 | goto label_4;
| label_14:
0x0004951c mov r0, r5 | r0 = r5;
0x0004951e bl 0x10884 | r0 = fcn_00010884 (r0);
0x00049522 adds r2, r7, r0 | r2 = r7 + r0;
0x00049524 ldrb.w r2, [r2, 0x94] | r2 = *((r2 + 0x94));
0x00049528 cmp r2, r8 |
| if (r2 == r8) {
0x0004952a beq.w 0x49406 | goto label_0;
| }
0x0004952e sub.w r1, r5, 0x300 | r1 = r5 - 0x300;
0x00049532 cmp r1, 0x31 |
| if (r1 > 0x31) {
0x00049534 bhi.w 0x4942c | goto label_3;
| }
0x00049538 cmp.w r5, 0x320 |
| if (r5 >= 0x320) {
0x0004953c bhs 0x4954e | goto label_16;
| }
0x0004953e movs r2, 1 | r2 = 1;
0x00049540 lsls r2, r1 | r2 <<= r1;
0x00049542 and.w r2, r2, fp | r2 &= fp;
0x00049546 cmp r2, 0 |
| if (r2 != 0) {
0x00049548 bne.w 0x49406 | goto label_0;
| }
0x0004954c b 0x4942c | goto label_3;
| label_16:
0x0004954e sub.w r1, r5, 0x320 | r1 = r5 - 0x320;
0x00049552 movs r2, 1 | r2 = 1;
0x00049554 lsls r2, r1 | r2 <<= r1;
0x00049556 movw r1, 0x61f8 |
0x0004955a movt r1, 3 | r1 = 0x361f8;
0x0004955e ands r2, r1 | r2 &= r1;
0x00049560 cmp r2, 0 |
| if (r2 != 0) {
0x00049562 bne.w 0x49406 | goto label_0;
| }
0x00049566 b 0x4942c | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x49b50 */
| #include <stdint.h>
|
; (fcn) fcn.00049b50 () | void fcn_00049b50 (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x00049b50 ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x00049b52 ldr r2, [r3] | r2 = *(r3);
0x00049b54 ldr r3, [r2, 0x30] | r3 = *((r2 + 0x30));
0x00049b56 cmp r3, 1 |
| if (r3 == 1) {
0x00049b58 beq 0x49b72 | goto label_1;
| }
0x00049b5a push {r4, r5, lr} |
0x00049b5c mov r4, r0 | r4 = r0;
0x00049b5e ldr r0, [r1, 0x28] | r0 = *((r1 + 0x28));
0x00049b60 sub sp, 0xc |
| if (r0 == 0) {
0x00049b62 cbz r0, 0x49b8a | goto label_2;
| }
0x00049b64 ldr r0, [r0] | r0 = *(r0);
| if (r0 != 0) {
0x00049b66 cbnz r0, 0x49b7a | goto label_3;
| }
0x00049b68 ldr r3, [pc, 0x74] |
0x00049b6a add r3, pc | r3 = 0x9374e;
0x00049b6c str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
| do {
| label_0:
0x00049b6e add sp, 0xc |
0x00049b70 pop {r4, r5, pc} |
| label_1:
0x00049b72 ldr r3, [pc, 0x70] |
0x00049b74 add r3, pc | r3 = 0x9375e;
0x00049b76 str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x00049b78 bx lr | return;
| if (r3 == 0) {
| label_3:
0x00049b7a cbz r3, 0x49b94 | goto label_4;
| }
0x00049b7c ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00049b7e cmp r2, 0x64 |
| if (r2 <= 0x64) {
0x00049b80 ble 0x49b9e | goto label_5;
| }
0x00049b82 ldr r3, [pc, 0x64] |
0x00049b84 add r3, pc | r3 = 0x93772;
0x00049b86 str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x00049b88 b 0x49b6e |
| } while (1);
| label_2:
0x00049b8a ldr r3, [pc, 0x60] |
0x00049b8c add r3, pc | r3 = 0x9377e;
0x00049b8e str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x00049b90 add sp, 0xc |
0x00049b92 pop {r4, r5, pc} |
| label_4:
0x00049b94 ldr r3, [pc, 0x58] |
0x00049b96 add r3, pc | r3 = 0x9378a;
0x00049b98 str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x00049b9a add sp, 0xc |
0x00049b9c pop {r4, r5, pc} |
| label_5:
0x00049b9e ldr r5, [r1, 0x24] | r5 = *((r1 + 0x24));
0x00049ba0 ldr r3, [pc, 0x50] |
0x00049ba2 cmp r2, r5 |
0x00049ba4 add r3, pc | r3 = 0x9379c;
0x00049ba6 str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
| if (r2 < r5) {
0x00049ba8 bls 0x49b6e | goto label_0;
| }
0x00049baa cmp r5, 0 |
0x00049bac it eq |
| if (r5 != 0) {
0x00049bae moveq r5, 0x40 | r5 = 0x40;
| }
0x00049bb0 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x00049bb2 cmp r5, r2 |
0x00049bb4 sbcs r0, r3, 0 | __asm ("sbcs r0, r3, 0");
| if (r5 >= r2) {
0x00049bb8 bhs 0x49bc6 | goto label_6;
| }
| do {
0x00049bba adds r5, r5, r5 | r5 += r5;
0x00049bbc adcs r3, r3 | __asm ("adcs r3, r3");
0x00049bbe cmp r5, r2 |
0x00049bc0 sbcs r0, r3, 0 | __asm ("sbcs r0, r3, 0");
0x00049bc4 blo 0x49bba |
| } while (r5 <= r2);
| label_6:
0x00049bc6 ldr r0, [r1, 0x1c] | r0 = *((r1 + 0x1c));
0x00049bc8 mov r2, r5 | r2 = r5;
0x00049bca str r1, [sp, 4] | var_4h = r1;
0x00049bcc blx 0x8500 | fcn_00008500 ();
0x00049bd0 ldr r1, [sp, 4] | r1 = var_4h;
| if (r0 != 0) {
0x00049bd2 cbz r0, 0x49bda |
0x00049bd4 str r5, [r1, 0x24] | *((r1 + 0x24)) = r5;
0x00049bd6 str r0, [r1, 0x1c] | *((r1 + 0x1c)) = r0;
0x00049bd8 b 0x49b6e | goto label_0;
| }
0x00049bda movs r3, 7 | r3 = 7;
0x00049bdc str r3, [r4] | *(r4) = r3;
0x00049bde b 0x49b6e | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x49bf8 */
| #include <stdint.h>
|
; (fcn) fcn.00049bf8 () | void fcn_00049bf8 (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x00049bf8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00049bfc mov sl, r0 | sl = r0;
0x00049bfe ldr r2, [r0] | r2 = *(r0);
0x00049c00 mov r4, r1 | r4 = r1;
0x00049c02 movs r6, 0 | r6 = 0;
0x00049c04 ldr r0, [pc, 0x130] |
0x00049c06 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x00049c08 ldr r5, [r1, 0x18] | r5 = *((r1 + 0x18));
0x00049c0a ldr r1, [pc, 0x130] | r1 = *(0x49d3e);
0x00049c0c add r0, pc | r0 = 0x93948;
0x00049c0e vpush {d8} | __asm ("vpush {d8}");
0x00049c12 sub sp, 0x24 |
0x00049c14 ldr.w sb, [r2, 0x30] | sb = *((r2 + 0x30));
0x00049c18 ldr r1, [r0, r1] |
0x00049c1a ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00049c1c vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x00049c20 ldr r1, [r1] | r1 = *(0x93948);
0x00049c22 str r1, [sp, 0x1c] | var_1ch = r1;
0x00049c24 mov.w r1, 0 | r1 = 0;
0x00049c28 ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
0x00049c2a ldr r7, [r3] | r7 = *(r3);
0x00049c2c add r3, sp, 0xc | r3 += var_ch;
0x00049c2e str r3, [sp, 4] | var_4h = r3;
0x00049c30 cmp r1, r2 |
0x00049c32 vstr d8, [sp, 0x10] | __asm ("vstr d8, [sp, 0x10]");
0x00049c36 it ge |
| if (r1 < r2) {
0x00049c38 movge r1, r2 | r1 = r2;
| }
0x00049c3a cmp.w sb, 1 |
0x00049c3e mov r8, r1 | r8 = r1;
| if (sb != 1) {
0x00049c40 bne 0x49c9e | goto label_3;
| }
| do {
0x00049c42 cmp r5, r8 |
| if (r5 >= r8) {
0x00049c44 bge 0x49cb8 | goto label_4;
| }
0x00049c46 ldrb r3, [r7, r5] | r3 = *((r7 + r5));
0x00049c48 adds r0, r7, r5 | r0 = r7 + r5;
| if (r3 == 0) {
0x00049c4a cbnz r3, 0x49c62 |
0x00049c4c adds r3, r5, 1 | r3 = r5 + 1;
0x00049c4e cmp r3, r8 |
| if (r3 >= r8) {
0x00049c50 bge 0x49cb8 | goto label_4;
| }
0x00049c52 ldrb r2, [r7, r3] | r2 = *((r7 + r3));
0x00049c54 adds r0, r7, r3 | r0 = r7 + r3;
0x00049c56 adds r5, 2 | r5 += 2;
0x00049c58 cmp r2, 0 |
| if (r2 != 0) {
0x00049c5a bne 0x49d30 | goto label_5;
| }
| label_0:
0x00049c5c cmp r5, r8 |
| if (r5 >= r8) {
0x00049c5e bge 0x49cb8 | goto label_4;
| }
0x00049c60 adds r0, r7, r5 | r0 = r7 + r5;
| }
| label_2:
0x00049c62 add r1, sp, 0x10 | r1 += var_10h;
0x00049c64 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00049c68 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00049c6a add r5, r0 | r5 += r0;
0x00049c6c ldr r1, [sp, 0x10] | r1 = var_10h;
0x00049c6e ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x00049c70 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00049c72 adds r3, r3, r1 | r3 += r1;
0x00049c74 ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x00049c76 adc.w r2, r2, r0 | __asm ("adc.w r2, r2, r0");
0x00049c7a cmp r1, r6 |
0x00049c7c strd r3, r2, [r4, 0x50] | __asm ("strd r3, r2, [r4, 0x50]");
| if (r1 <= r6) {
0x00049c80 ble 0x49ce8 | goto label_6;
| }
0x00049c82 ldr r0, [r4, 0x3c] | r0 = *((r4 + 0x3c));
| label_1:
0x00049c84 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00049c86 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x00049c88 cmp.w sb, 1 |
0x00049c8c vstr d8, [sp, 0x10] | __asm ("vstr d8, [sp, 0x10]");
0x00049c90 str.w r2, [r0, r6, lsl 2] | __asm ("str.w r2, [r0, r6, lsl 2]");
0x00049c94 add.w r6, r6, 1 | r6++;
0x00049c98 strd r5, r3, [r4, 0x18] | __asm ("strd r5, r3, [r4, 0x18]");
0x00049c9c beq 0x49c42 |
| } while (sb == 1);
| label_3:
0x00049c9e ldrb r3, [r7, r5] | r3 = *((r7 + r5));
0x00049ca0 adds r0, r7, r5 | r0 = r7 + r5;
0x00049ca2 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x00049ca4 str r3, [sp, 0xc] | var_ch = r3;
0x00049ca6 it pl |
| if (r2 < r3) {
0x00049ca8 movpl r0, 1 | r0 = 1;
| }
0x00049caa bmi 0x49d00 |
| while (1) {
0x00049cac add.w r3, r3, r3, lsr 31 | r3 += (r3 >> 31);
0x00049cb0 add r0, r5 | r0 += r5;
0x00049cb2 add.w r5, r0, r3, asr 1 | r5 = r0 + (r3 >> 1);
0x00049cb6 b 0x49c5c | goto label_0;
| label_4:
0x00049cb8 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x00049cbc str r6, [r4, 0x34] | *((r4 + 0x34)) = r6;
| if (r3 != 0) {
0x00049cbe cbnz r3, 0x49d12 | goto label_7;
| }
0x00049cc0 ldr r2, [pc, 0x7c] |
0x00049cc2 ldr r3, [pc, 0x78] | r3 = *(0x49d3e);
0x00049cc4 add r2, pc | r2 = 0x93a08;
0x00049cc6 ldr r3, [r2, r3] | r3 = *(0x93a08);
0x00049cc8 ldr r2, [r3] | r2 = *(0x93a08);
0x00049cca ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00049ccc eors r2, r3 | r2 ^= r3;
0x00049cce mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00049cd2 bne 0x49d34 | goto label_8;
| }
0x00049cd4 ldr.w r0, [sl] | r0 = *(sl);
0x00049cd8 mov r1, r4 | r1 = r4;
0x00049cda add sp, 0x24 |
0x00049cdc vpop {d8} | __asm ("vpop {d8}");
0x00049ce0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00049ce4 b.w 0x11ab8 | void (*0x11ab8)() ();
| label_6:
0x00049ce8 add.w fp, r1, 8 |
0x00049cec ldr r0, [r4, 0x3c] | r0 = *((r4 + 0x3c));
0x00049cee lsl.w r2, fp, 2 | r2 = fp << 2;
0x00049cf2 movs r3, 0 | r3 = 0;
0x00049cf4 blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 == 0) {
0x00049cf8 cbz r0, 0x49d0a | goto label_9;
| }
0x00049cfa strd fp, r0, [r4, 0x38] | __asm ("strd fp, r0, [r4, 0x38]");
0x00049cfe b 0x49c84 | goto label_1;
0x00049d00 ldr r1, [sp, 4] | r1 = var_4h;
0x00049d02 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x00049d06 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00049d08 b 0x49cac |
| }
| label_9:
0x00049d0a movs r3, 7 | r3 = 7;
0x00049d0c str.w r3, [sl, 0x24] | __asm ("str.w r3, [sl, 0x24]");
0x00049d10 str r6, [r4, 0x34] | *((r4 + 0x34)) = r6;
| label_7:
0x00049d12 ldr r2, [pc, 0x30] |
0x00049d14 ldr r3, [pc, 0x24] | r3 = *(0x49d3c);
0x00049d16 add r2, pc | r2 = 0x93a60;
0x00049d18 ldr r3, [r2, r3] | r3 = *(0x93a60);
0x00049d1a ldr r2, [r3] | r2 = *(0x93a60);
0x00049d1c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00049d1e eors r2, r3 | r2 ^= r3;
0x00049d20 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00049d24 bne 0x49d34 |
0x00049d26 add sp, 0x24 |
0x00049d28 vpop {d8} | __asm ("vpop {d8}");
0x00049d2c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00049d30 mov r5, r3 | r5 = r3;
0x00049d32 b 0x49c62 | goto label_2;
| }
| label_8:
0x00049d34 blx 0x883c | fcn_0000883c ();
0x00049d38 eor r0, ip, 7 | r0 = ip ^ 7;
0x00049d3c lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00049d3e movs r0, r0 |
0x00049d40 vaddl.s16 q8, d4, d7 | __asm ("vaddl.s16 q8, d4, d7");
0x00049d44 vaddl.s8 q0, d2, d7 | __asm ("vaddl.s8 q0, d2, d7");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x49d48 */
| #include <stdint.h>
|
; (fcn) fcn.00049d48 () | void fcn_00049d48 (int16_t arg1, int16_t arg2) {
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch_2;
| r0 = arg1;
| r1 = arg2;
0x00049d48 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00049d4c sub sp, 0x14 |
0x00049d4e ldr r7, [r0] | r7 = *(r0);
0x00049d50 ldr r5, [r1] | r5 = *(r1);
| if (r7 == 0) {
0x00049d52 cbnz r7, 0x49d8e |
0x00049d54 ldr r2, [r5] | r2 = *(r5);
0x00049d56 mov r4, r0 | r4 = r0;
0x00049d58 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00049d5a mov r6, r1 | r6 = r1;
0x00049d5c cmp r2, 1 |
| if (r2 > 1) {
0x00049d5e bgt 0x49d94 | goto label_5;
| }
| label_1:
0x00049d60 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00049d62 mov r0, r5 | r0 = r5;
0x00049d64 movs r7, 0 | r7 = 0;
0x00049d66 mov r3, r7 | r3 = r7;
0x00049d68 adds r2, 1 | r2++;
0x00049d6a add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00049d6e lsls r5, r2, 2 | r5 = r2 << 2;
0x00049d70 add.w r2, r5, 0x28 | r2 = r5 + 0x28;
0x00049d74 blx 0x8500 | r0 = fcn_00008500 ();
0x00049d78 cmp r0, 0 |
| if (r0 == 0) {
0x00049d7a beq 0x49e7c | goto label_6;
| }
0x00049d7c adds r5, 0xc | r5 += 0xc;
0x00049d7e adds r3, r0, r5 | r3 = r0 + r5;
0x00049d80 str r7, [r0, r5] | *((r0 + r5)) = r7;
0x00049d82 str r7, [r3, 4] | *((r3 + 4)) = r7;
0x00049d84 str r7, [r3, 8] | *((r3 + 8)) = r7;
0x00049d86 ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x00049d88 adds r3, 1 | r3++;
0x00049d8a str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x00049d8c str r0, [r6] | *(r6) = r0;
| }
| label_0:
0x00049d8e add sp, 0x14 |
0x00049d90 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00049d94 subs r3, 1 | r3--;
0x00049d96 mov r1, r7 | r1 = r7;
0x00049d98 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00049d9c lsl.w r8, r3, 2 | r8 = r3 << 2;
0x00049da0 add.w r8, r8, 0x28 | r8 += 0x28;
0x00049da4 mov r0, r8 | r0 = r8;
0x00049da6 blx 0x8240 | fcn_00008240 ();
0x00049daa str r0, [sp, 4] | var_4h_2 = r0;
0x00049dac cmp r0, 0 |
| if (r0 == 0) {
0x00049dae beq 0x49eae | goto label_7;
| }
0x00049db0 mov r2, r8 | r2 = r8;
0x00049db2 mov r1, r7 | r1 = r7;
0x00049db4 blx 0x839c | fcn_0000839c ();
0x00049db8 mov r2, r8 | r2 = r8;
0x00049dba ldr.w r8, [sp, 4] | r8 = var_4h_2;
0x00049dbe mov r1, r5 | r1 = r5;
0x00049dc0 mov r0, r8 | r0 = r8;
0x00049dc2 blx 0x8610 | fcn_00008610 ();
0x00049dc6 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00049dc8 cmp r2, 0 |
| if (r2 <= 0) {
0x00049dca ble 0x49e94 | goto label_8;
| }
0x00049dcc add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00049dd0 mov r3, r7 | r3 = r7;
0x00049dd2 add.w r0, r8, 0x20 | r0 = r8 + 0x20;
0x00049dd6 mov r1, r7 | r1 = r7;
| do {
0x00049dd8 str.w r1, [r0, r3, lsl 2] | __asm ("str.w r1, [r0, r3, lsl 2]");
0x00049ddc adds r3, 3 | r3 += 3;
0x00049dde cmp r2, r3 |
0x00049de0 bne 0x49dd8 |
| } while (r2 != r3);
0x00049de2 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00049de4 mov sb, r5 | sb = r5;
0x00049de6 mov.w fp, 0 |
0x00049dea str r7, [sp, 8] | var_8h = r7;
0x00049dec mov r8, r3 | r8 = r3;
0x00049dee str r3, [sp, 0xc] | var_ch_2 = r3;
0x00049df0 b 0x49e2c |
| while (r7 == 0) {
0x00049df2 lsl.w sl, r2, 2 | sl = r2 << 2;
0x00049df6 mov r0, sl | r0 = sl;
0x00049df8 blx 0x8240 | fcn_00008240 ();
0x00049dfc mov r1, r7 | r1 = r7;
0x00049dfe mov r2, sl | r2 = sl;
0x00049e00 mov r7, r0 | r7 = r0;
0x00049e02 cmp r0, 0 |
| if (r0 == 0) {
0x00049e04 beq 0x49e86 | goto label_9;
| }
0x00049e06 blx 0x839c | fcn_0000839c ();
0x00049e0a str.w r7, [r8, 0x20] | __asm ("str.w r7, [r8, 0x20]");
0x00049e0e mov r2, sl | r2 = sl;
0x00049e10 ldr.w r1, [sb, 0x20] | r1 = *((sb + 0x20));
0x00049e14 mov r0, r7 | r0 = r7;
0x00049e16 blx 0x8610 | fcn_00008610 ();
0x00049e1a ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00049e1c add.w fp, fp, 1 |
0x00049e20 add.w r8, r8, 0xc | r8 += 0xc;
0x00049e24 add.w sb, sb, 0xc | sb += 0xc;
0x00049e28 cmp fp, r3 |
| if (fp >= r3) {
0x00049e2a bge 0x49e94 | goto label_8;
| }
0x00049e2c ldr r7, [r4] | r7 = *(r4);
0x00049e2e ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00049e32 mov r1, r7 | r1 = r7;
0x00049e34 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00049e38 cmp r7, 0 |
0x00049e3a beq 0x49df2 |
| }
0x00049e3c ldr r7, [sp, 8] | r7 = var_8h;
| label_2:
0x00049e3e ldr r2, [sp, 4] | r2 = var_4h_2;
0x00049e40 add.w r3, fp, fp, lsl 1 | r3 = fp + (fp << 1);
0x00049e44 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x00049e48 movs r2, 0 | r2 = 0;
0x00049e4a str r2, [r3, 0x20] | *((r3 + 0x20)) = r2;
0x00049e4c ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00049e4e cmp r3, r2 |
0x00049e50 it gt |
| if (r3 <= r2) {
0x00049e52 ldrgt r8, [sp, 0xc] | r8 = var_ch_2;
| }
| if (r3 <= r2) {
0x00049e56 ble 0x49e6c | goto label_10;
| }
| do {
0x00049e58 ldr.w r0, [r8, 0x20] | r0 = *((r8 + 0x20));
0x00049e5c adds r7, 1 | r7++;
0x00049e5e blx 0x8404 | fcn_00008404 ();
0x00049e62 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00049e64 add.w r8, r8, 0xc | r8 += 0xc;
0x00049e68 cmp r7, r3 |
0x00049e6a blt 0x49e58 |
| } while (r7 < r3);
| label_10:
0x00049e6c ldr r0, [sp, 4] | r0 = var_4h_2;
0x00049e6e blx 0x8404 | fcn_00008404 ();
0x00049e72 ldr r3, [r4] | r3 = *(r4);
0x00049e74 cmp r3, 0 |
| if (r3 != 0) {
0x00049e76 bne 0x49d8e | goto label_0;
| }
| label_3:
0x00049e78 ldr r5, [r6] | r5 = *(r6);
0x00049e7a b 0x49d60 | goto label_1;
| label_6:
0x00049e7c movs r3, 7 | r3 = 7;
0x00049e7e str r3, [r4] | *(r4) = r3;
0x00049e80 add sp, 0x14 |
0x00049e82 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x00049e86 ldr r7, [sp, 8] | r7 = var_8h;
0x00049e88 cmp.w sl, 0 |
| if (sl == 0) {
0x00049e8c beq 0x49e3e | goto label_2;
| }
0x00049e8e movs r2, 7 | r2 = 7;
0x00049e90 str r2, [r4] | *(r4) = r2;
0x00049e92 b 0x49e3e | goto label_2;
| label_8:
0x00049e94 ldr r3, [r5] | r3 = *(r5);
0x00049e96 ldr r2, [sp, 4] | r2 = var_4h_2;
0x00049e98 subs r3, 1 | r3--;
0x00049e9a str r3, [r5] | *(r5) = r3;
0x00049e9c movs r3, 1 | r3 = 1;
0x00049e9e str r3, [r2] | *(r2) = r3;
| label_4:
0x00049ea0 ldr r3, [r4] | r3 = *(r4);
0x00049ea2 ldr r2, [sp, 4] | r2 = var_4h_2;
0x00049ea4 str r2, [r6] | *(r6) = r2;
0x00049ea6 cmp r3, 0 |
| if (r3 != 0) {
0x00049ea8 bne.w 0x49d8e | goto label_0;
| }
0x00049eac b 0x49e78 | goto label_3;
| label_7:
0x00049eae cmp.w r8, 0 |
| if (r8 == 0) {
0x00049eb2 beq 0x49ea0 | goto label_4;
| }
0x00049eb4 movs r3, 7 | r3 = 7;
0x00049eb6 str r3, [r4] | *(r4) = r3;
0x00049eb8 ldr r3, [sp, 4] | r3 = var_4h_2;
0x00049eba str r3, [r6] | *(r6) = r3;
0x00049ebc b 0x49d8e | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x49fec */
| #include <stdint.h>
|
; (fcn) fcn.00049fec () | void fcn_00049fec (arithmetic x, int16_t arg_4ch, int16_t arg_50h, int16_t arg_54h, int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00049fec push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00049ff0 sub sp, 0x24 |
0x00049ff2 ldrd r6, r7, [sp, 0x54] | __asm ("ldrd r6, r7, [arg_54h]");
0x00049ff6 mov sb, r0 | sb = r0;
0x00049ff8 strd r2, r3, [sp, 4] | __asm ("strd r2, r3, [var_4h]");
0x00049ffc ldr r3, [r0] | r3 = *(r0);
0x00049ffe ldrb.w r5, [sp, 0x50] | r5 = *(arg_50h);
0x0004a002 ldr.w sl, [r0, 0xc] | sl = *(xxc);
0x0004a006 str r3, [sp, 0xc] | var_ch = r3;
0x0004a008 subs r3, r7, 1 | r3 = r7 - 1;
0x0004a00a str r3, [sp, 0x14] | var_14h = r3;
| if (r3 < r7) {
0x0004a00c bmi.w 0x4a3ca | goto label_13;
| }
0x0004a010 adds r1, r6, r7 | r1 = r6 + r7;
0x0004a012 movs r2, 0xd | r2 = 0xd;
| do {
0x0004a014 ldrb r3, [r1, -0x1]! | r3 = *((r1 -= 0x1));
0x0004a018 cmp r1, r6 |
0x0004a01a eor.w r3, r3, r2, lsl 3 | r3 ^= (r2 << 3);
0x0004a01e eor.w r2, r2, r3 | r2 ^= r3;
0x0004a022 bne 0x4a014 |
| } while (r1 != r6);
0x0004a024 lsls r3, r2, 3 | r3 = r2 << 3;
| label_9:
0x0004a026 eors r2, r3 | r2 ^= r3;
0x0004a028 eor.w r0, r5, r2 | r0 = r5 ^ r2;
0x0004a02c mov r1, sl | r1 = sl;
0x0004a02e bl 0xb1e8c | fcn_000b1e8c (r0, r1, r2);
0x0004a032 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x0004a036 lsl.w fp, r1, 2 |
0x0004a03a mov r8, r1 | r8 = r1;
0x0004a03c ldr.w r4, [r3, r1, lsl 2] | offset_0 = r1 << 2;
| r4 = *((r3 + offset_0));
0x0004a040 str r3, [sp, 0x10] | var_10h = r3;
| if (r4 != 0) {
0x0004a042 cbnz r4, 0x4a04c | goto label_14;
| }
0x0004a044 b 0x4a146 | goto label_15;
| do {
| label_0:
0x0004a046 ldr r4, [r4] | r4 = *(r4);
0x0004a048 cmp r4, 0 |
| if (r4 == 0) {
0x0004a04a beq 0x4a146 | goto label_15;
| }
| label_14:
0x0004a04c ldrb.w r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x0004a050 cmp r3, r5 |
0x0004a052 bne 0x4a046 |
| } while (r3 != r5);
0x0004a054 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0004a056 cmp r3, r7 |
| if (r3 != r7) {
0x0004a058 bne 0x4a046 | goto label_0;
| }
0x0004a05a add.w r0, r4, 0x29 | r0 = r4 + 0x29;
0x0004a05e mov r2, r7 | r2 = r7;
0x0004a060 mov r1, r6 | r1 = r6;
0x0004a062 blx 0x8214 | r0 = sysconf ();
0x0004a066 cmp r0, 0 |
| if (r0 != 0) {
0x0004a068 bne 0x4a046 | goto label_0;
| }
0x0004a06a ldr r5, [r4, 8] | r5 = *((r4 + 8));
0x0004a06c ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0004a06e subs r2, r5, r1 | r2 = r5 - r1;
0x0004a070 cmp r2, 0x15 |
| if (r2 <= 0x15) {
0x0004a072 ble.w 0x4a290 | goto label_16;
| }
| label_1:
0x0004a076 ldrd r6, r7, [r4, 0x20] | __asm ("ldrd r6, r7, [r4, 0x20]");
0x0004a07a rsbs r5, r1, 0 | r5 = r1 - ;
0x0004a07c ldrd r3, r2, [sp, 4] | __asm ("ldrd r3, r2, [var_4h]");
0x0004a080 cmp r7, r2 |
0x0004a082 it eq |
| if (r7 == r2) {
0x0004a084 cmpeq r6, r3 | __asm ("cmpeq r6, r3");
| }
| if (r7 == r2) {
0x0004a086 beq.w 0x4a218 | goto label_17;
| }
0x0004a08a subs r6, r3, r6 | r6 = r3 - r6;
0x0004a08c mov r1, r4 | r1 = r4;
0x0004a08e sbc.w r7, r2, r7 | __asm ("sbc.w r7, r2, r7");
0x0004a092 mov r0, sb | r0 = sb;
0x0004a094 movs r2, 0 | r2 = 0;
0x0004a096 bl 0x1dba0 | fcn_0001dba0 (r0, r1, r2);
0x0004a09a ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0004a09c cmp r6, 0x80 |
0x0004a09e sbcs r2, r7, 0 | __asm ("sbcs r2, r7, 0");
0x0004a0a2 it lo |
| if (r6 >= 0x80) {
0x0004a0a4 movlo r1, 1 | r1 = 1;
| }
0x0004a0a6 add.w r0, r4, r3 | r0 = r4 + r3;
0x0004a0aa it lo |
| if (r6 >= 0x80) {
0x0004a0ac strblo r6, [r4, r3] | *((r4 + r3)) = r6;
| }
| if (r6 > 0x80) {
0x0004a0ae blo 0x4a0c6 |
0x0004a0b0 cmp.w r6, 0x4000 |
0x0004a0b4 sbcs r3, r7, 0 | __asm ("sbcs r3, r7, 0");
| if (r6 <= 0x4000) {
0x0004a0b8 blo.w 0x4a3a6 | goto label_18;
| }
0x0004a0bc mov r2, r6 | r2 = r6;
0x0004a0be mov r3, r7 | r3 = r7;
0x0004a0c0 bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x0004a0c4 mov r1, r0 | r1 = r0;
| }
| label_5:
0x0004a0c6 ldr r3, [sp, 4] | r3 = var_4h;
0x0004a0c8 str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x0004a0ca ldr r3, [sp, 8] | r3 = var_8h;
0x0004a0cc str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0004a0ce ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0004a0d0 add r1, r3 | r1 += r3;
0x0004a0d2 add.w r3, r4, 0xc | r3 = r4 + 0xc;
0x0004a0d6 vdup.32 d16, r1 | __asm ("vdup.32 d16, r1");
0x0004a0da vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0004a0de ldr.w r3, [sb] | r3 = *(sb);
0x0004a0e2 cmp r3, 1 |
| if (r3 == 1) {
0x0004a0e4 beq.w 0x4a2c2 | goto label_19;
| }
0x0004a0e8 movs r0, 0 | r0 = 0;
0x0004a0ea subs r2, r3, 0 | r2 = r3 - 0;
0x0004a0ec str r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x0004a0ee it ne |
| if (r2 == r3) {
0x0004a0f0 movne r2, 1 | r2 = 1;
| }
0x0004a0f2 ldr r0, [sp, 0x48] | r0 = *(x);
0x0004a0f4 adds r1, 1 | r1++;
0x0004a0f6 rsbs r2, r2, 0 | r2 -= ;
0x0004a0f8 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x0004a0fa strh r2, [r4, 0x1a] | *((r4 + 0x1a)) = r2;
0x0004a0fc cmp r0, 0 |
| if (r0 < 0) {
0x0004a0fe blt.w 0x4a2c8 | goto label_20;
| }
0x0004a102 ldr r0, [sp, 0x48] | r0 = *(x);
0x0004a104 cmp r0, r2 |
0x0004a106 it ne |
| if (r0 == r2) {
0x0004a108 movne r6, 1 | r6 = 1;
| }
0x0004a10a bne.w 0x4a23a |
| while (1) {
| label_8:
0x0004a10e ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0004a110 adds r0, r4, r1 | r0 = r4 + r1;
0x0004a112 ldr r2, [sp, 0x4c] | r2 = *(arg_4ch);
0x0004a114 subs r3, r2, r3 | r3 = r2 - r3;
0x0004a116 adds r2, r3, 2 | r2 = r3 + 2;
0x0004a118 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0004a11a cmp r2, 0x80 |
0x0004a11c sbcs r6, r3, 0 | __asm ("sbcs r6, r3, 0");
0x0004a120 itt lo |
| if (r2 >= 0x80) {
0x0004a122 strblo r2, [r4, r1] | *((r4 + r1)) = r2;
| }
| if (r2 >= 0x80) {
0x0004a124 movlo r1, 1 | r1 = 1;
| }
| if (r2 > 0x80) {
0x0004a126 blo 0x4a13a |
0x0004a128 cmp.w r2, 0x4000 |
0x0004a12c sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x0004a130 blo.w 0x4a3d8 | goto label_21;
| }
0x0004a134 bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x0004a138 mov r1, r0 | r1 = r0;
| }
| label_10:
0x0004a13a ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0004a13c ldr r2, [sp, 0x4c] | r2 = *(arg_4ch);
0x0004a13e add r1, r3 | r1 += r3;
0x0004a140 str r2, [r4, 0x1c] | *((r4 + 0x1c)) = r2;
0x0004a142 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x0004a144 b 0x4a2cc | goto label_6;
| label_15:
0x0004a146 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0004a14a add.w fp, r7, 0x6a |
0x0004a14e cmp.w fp, 0x7f |
0x0004a152 it ls |
| if (fp > 0x7f) {
0x0004a154 movls fp, 0x80 |
| }
0x0004a158 cmp.w sl, r2, lsl 1 |
| if (sl <= r2) {
0x0004a15c ble.w 0x4a2e0 | goto label_22;
| }
| label_4:
0x0004a160 mov r0, fp | r0 = fp;
0x0004a162 movs r1, 0 | r1 = 0;
0x0004a164 blx 0x8240 | r0 = fcn_00008240 ();
0x0004a168 mov r4, r0 | r4 = r0;
0x0004a16a cmp r0, 0 |
| if (r0 == 0) {
0x0004a16c beq.w 0x4a3d0 | goto label_23;
| }
0x0004a170 movs r2, 0x28 | r2 = 0x28;
0x0004a172 movs r1, 0 | r1 = 0;
0x0004a174 blx 0x839c | fcn_0000839c ();
0x0004a178 mov r2, r7 | r2 = r7;
0x0004a17a mov r1, r6 | r1 = r6;
0x0004a17c add.w r0, r4, 0x29 | r0 = r4 + 0x29;
0x0004a180 str.w fp, [r4, 8] | __asm ("str.w fp, [r4, 8]");
0x0004a184 strb.w r5, [r4, 0x28] | *((r4 + 0x28)) = r5;
0x0004a188 blx 0x8610 | fcn_00008610 ();
0x0004a18c ldr r3, [sp, 4] | r3 = var_4h;
0x0004a18e adds r2, r4, r7 | r2 = r4 + r7;
0x0004a190 movs r1, 0 | r1 = 0;
0x0004a192 str r7, [r4, 0x14] | *((r4 + 0x14)) = r7;
0x0004a194 strb.w r1, [r2, 0x29] | *((r2 + 0x29)) = r1;
0x0004a198 adds r7, 0x2a | r7 += 0x2a;
0x0004a19a ldr.w r0, [sb, 0x14] | r0 = *((sb + 0x14));
0x0004a19e cmp r3, 0x80 |
0x0004a1a0 ldr r3, [sp, 8] | r3 = var_8h;
0x0004a1a2 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0004a1a6 ldr.w r1, [r0, r8, lsl 2] | offset_1 = r8 << 2;
| r1 = *((r0 + offset_1));
0x0004a1aa sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
0x0004a1ae ldr r3, [sp, 4] | r3 = var_4h;
0x0004a1b0 add.w r2, r2, 1 | r2++;
0x0004a1b4 str r7, [r4, 0x10] | *((r4 + 0x10)) = r7;
0x0004a1b6 str r1, [r4] | *(r4) = r1;
0x0004a1b8 it lo |
| if (r3 >= 0x80) {
0x0004a1ba movlo r1, 1 | r1 = 1;
| }
0x0004a1bc str.w r4, [r0, r8, lsl 2] | __asm ("str.w r4, [r0, r8, lsl 2]");
0x0004a1c0 add.w r0, r4, r7 | r0 = r4 + r7;
0x0004a1c4 str.w r2, [sb, 8] | __asm ("str.w r2, [sb, 8]");
0x0004a1c8 it lo |
| if (r3 >= 0x80) {
0x0004a1ca strblo r3, [r4, r7] | *((r4 + r7)) = r3;
| }
| if (r3 > 0x80) {
0x0004a1cc blo 0x4a1e6 |
0x0004a1ce cmp.w r3, 0x4000 |
0x0004a1d2 ldrd r2, r3, [sp, 4] | __asm ("ldrd r2, r3, [var_4h]");
0x0004a1d6 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r3 <= 0x4000) {
0x0004a1da blo.w 0x4a400 | goto label_24;
| }
0x0004a1de ldr r3, [sp, 8] | r3 = var_8h;
0x0004a1e0 bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x0004a1e4 mov r1, r0 | r1 = r0;
| }
| label_12:
0x0004a1e6 ldr r3, [sp, 4] | r3 = var_4h;
0x0004a1e8 str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x0004a1ea ldr r3, [sp, 8] | r3 = var_8h;
0x0004a1ec str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0004a1ee ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0004a1f0 add r1, r3 | r1 += r3;
0x0004a1f2 add.w r3, r4, 0xc | r3 = r4 + 0xc;
0x0004a1f6 vdup.32 d16, r1 | __asm ("vdup.32 d16, r1");
0x0004a1fa vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0004a1fe ldr.w r3, [sb] | r3 = *(sb);
0x0004a202 cmp r3, 1 |
| if (r3 != 1) {
0x0004a204 beq 0x4a216 |
0x0004a206 subs r3, 0 |
0x0004a208 add.w r1, r1, 1 | r1++;
0x0004a20c it ne |
| if (r3 == 0) {
0x0004a20e movne r3, 1 | r3 = 1;
| }
0x0004a210 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x0004a212 rsbs r3, r3, 0 | r3 -= ;
0x0004a214 strh r3, [r4, 0x1a] | *((r4 + 0x1a)) = r3;
| }
0x0004a216 movs r5, 0 | r5 = 0;
| label_17:
0x0004a218 ldr r3, [sp, 0x48] | r3 = *(x);
0x0004a21a cmp r3, 0 |
| if (r3 < 0) {
0x0004a21c blt 0x4a2c8 | goto label_20;
| }
0x0004a21e ldr.w r3, [sb] | r3 = *(sb);
0x0004a222 cmp r3, 1 |
| if (r3 == 1) {
0x0004a224 beq.w 0x4a3b8 | goto label_25;
| }
0x0004a228 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004a22a ldr r0, [sp, 0x48] | r0 = *(x);
0x0004a22c clz r6, r2 | r6 &= r2;
0x0004a230 ldrsh.w r2, [r4, 0x1a] | r2 = *((r4 + 0x1a));
0x0004a234 lsrs r6, r6, 5 | r6 >>= 5;
0x0004a236 cmp r2, r0 |
| if (r2 != r0) {
0x0004a238 beq 0x4a28c |
0x0004a23a ldr r2, [sp, 0x48] | r2 = *(x);
0x0004a23c sxth r7, r2 | __asm ("sxth r7, r2");
0x0004a23e cmp r3, 0 |
| if (r3 != 0) {
0x0004a240 bne.w 0x4a3c2 | goto label_26;
| }
0x0004a244 adds r3, r1, 1 | r3 = r1 + 1;
0x0004a246 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0004a248 mov.w lr, 1 | lr = 1;
0x0004a24c asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0004a24e strb.w lr, [r4, r1] |
0x0004a252 cmp r2, 0x80 |
0x0004a254 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0004a256 sbcs ip, r3, 0 | __asm ("sbcs ip, r3, 0");
0x0004a25a itt lo |
| if (r2 >= 0x80) {
0x0004a25c movlo r3, r2 | r3 = r2;
| }
| if (r2 >= 0x80) {
0x0004a25e strblo r3, [r4, r1] | *((r4 + r1)) = r3;
| }
0x0004a260 add.w r0, r4, r1 | r0 = r4 + r1;
0x0004a264 it lo |
| if (r2 >= 0x80) {
0x0004a266 movlo r3, lr | r3 = lr;
| }
| if (r2 > 0x80) {
0x0004a268 blo 0x4a280 |
0x0004a26a ldr r2, [sp, 0x48] | r2 = *(x);
0x0004a26c cmp.w r2, 0x4000 |
0x0004a270 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r2 <= 0x4000) {
0x0004a274 blo.w 0x4a3ea | goto label_27;
| }
0x0004a278 ldr r2, [sp, 0x48] | r2 = *(x);
0x0004a27a bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x0004a27e mov r3, r0 | r3 = r0;
| }
| label_11:
0x0004a280 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0004a282 strh r7, [r4, 0x1a] | *((r4 + 0x1a)) = r7;
0x0004a284 add r1, r3 | r1 += r3;
0x0004a286 movs r3, 0 | r3 = 0;
0x0004a288 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x0004a28a str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
| }
| if (r6 == 0) {
0x0004a28c cbz r6, 0x4a2cc | goto label_6;
| }
0x0004a28e b 0x4a10e |
| }
| label_16:
0x0004a290 lsls r5, r5, 1 | r5 <<= 1;
0x0004a292 mov r0, r4 | r0 = r4;
0x0004a294 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x0004a296 mov r2, r5 | r2 = r5;
0x0004a298 blx 0x8500 | r0 = fcn_00008500 ();
0x0004a29c cmp r0, 0 |
| if (r0 == 0) {
0x0004a29e beq.w 0x4a3d0 | goto label_23;
| }
0x0004a2a2 ldr.w r2, [sb, 0x14] | r2 = *((sb + 0x14));
0x0004a2a6 str r5, [r0, 8] | *((r0 + 8)) = r5;
0x0004a2a8 ldr.w r3, [r2, fp] | r3 = *((r2 + fp));
0x0004a2ac add r2, fp | r2 += fp;
0x0004a2ae cmp r4, r3 |
| if (r4 == r3) {
0x0004a2b0 beq 0x4a2ba | goto label_28;
| }
| do {
0x0004a2b2 mov r2, r3 | r2 = r3;
0x0004a2b4 ldr r3, [r3] | r3 = *(r3);
0x0004a2b6 cmp r3, r4 |
0x0004a2b8 bne 0x4a2b2 |
| } while (r3 != r4);
| label_28:
0x0004a2ba ldr r1, [r0, 0x10] | r1 = *((r0 + 0x10));
0x0004a2bc mov r4, r0 | r4 = r0;
0x0004a2be str r0, [r2] | *(r2) = r0;
0x0004a2c0 b 0x4a076 | goto label_1;
| label_19:
0x0004a2c2 ldr r3, [sp, 0x48] | r3 = *(x);
0x0004a2c4 cmp r3, 0 |
| if (r3 >= 0) {
0x0004a2c6 bge 0x4a3b8 | goto label_25;
| }
| label_20:
0x0004a2c8 movs r3, 1 | r3 = 1;
0x0004a2ca strb r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| label_6:
0x0004a2cc ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x0004a2d0 add r1, r5 | r1 += r5;
0x0004a2d2 movs r0, 0 | r0 = 0;
0x0004a2d4 ldr r3, [r2] | r3 = *(r2);
0x0004a2d6 add r3, r1 | r3 += r1;
0x0004a2d8 str r3, [r2] | *(r2) = r3;
0x0004a2da add sp, 0x24 |
0x0004a2dc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_22:
0x0004a2e0 lsl.w r2, sl, 3 | r2 = sl << 3;
0x0004a2e4 movs r1, 0 | r1 = 0;
0x0004a2e6 lsl.w r8, sl, 1 | r8 = sl << 1;
0x0004a2ea mov r0, r2 | r0 = r2;
0x0004a2ec str r2, [sp, 0x18] | var_18h = r2;
0x0004a2ee blx 0x8240 | fcn_00008240 ();
0x0004a2f2 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004a2f4 mov r4, r0 | r4 = r0;
0x0004a2f6 cmp r0, 0 |
| if (r0 == 0) {
0x0004a2f8 beq 0x4a3d0 | goto label_23;
| }
0x0004a2fa movs r1, 0 | r1 = 0;
0x0004a2fc blx 0x839c | fcn_0000839c ();
0x0004a300 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x0004a304 cmp r3, 0 |
| if (r3 <= 0) {
0x0004a306 ble 0x4a36c | goto label_29;
| }
0x0004a308 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0004a30a mov sl, r7 | sl = r7;
0x0004a30c str r6, [sp, 0x54] | *(arg_54h) = r6;
0x0004a30e str r5, [sp, 0x1c] | var_1ch = r5;
0x0004a310 mov r6, r2 | r6 = r2;
0x0004a312 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x0004a316 str r3, [sp, 0x18] | var_18h = r3;
| label_3:
0x0004a318 ldr r7, [r6], 4 | r7 = *(r6);
| r6 += 4;
| if (r7 == 0) {
0x0004a31c cbz r7, 0x4a360 | goto label_30;
| }
| label_2:
0x0004a31e mov r5, r7 | r5 = r7;
0x0004a320 ldr r3, [r5], 0x28 | r3 = *(r5);
| r5 += 0x28;
0x0004a324 mov r0, r5 | r0 = r5;
0x0004a326 str r3, [r6, -0x4] | *((r6 - 0x4)) = r3;
0x0004a32a blx 0x85b4 | r0 = fcn_000085b4 ();
0x0004a32e cmp r0, 0 |
| if (r0 == 0) {
0x0004a330 beq 0x4a3be | goto label_31;
| }
0x0004a332 adds r0, 0x28 | r0 += 0x28;
0x0004a334 adds r1, r7, r0 | r1 = r7 + r0;
0x0004a336 movs r0, 0xd | r0 = 0xd;
| do {
0x0004a338 ldrb r3, [r1, -0x1]! | r3 = *((r1 -= 0x1));
0x0004a33c cmp r1, r5 |
0x0004a33e eor.w r3, r3, r0, lsl 3 | r3 ^= (r0 << 3);
0x0004a342 eor.w r0, r0, r3 | r0 ^= r3;
0x0004a346 bne 0x4a338 |
| } while (r1 != r5);
| label_7:
0x0004a348 mov r1, r8 | r1 = r8;
0x0004a34a bl 0xb1e8c | fcn_000b1e8c (r0, r1, r2);
0x0004a34e ldr.w r3, [r4, r1, lsl 2] | offset_2 = r1 << 2;
| r3 = *((r4 + offset_2));
0x0004a352 str r3, [r7] | *(r7) = r3;
0x0004a354 str.w r7, [r4, r1, lsl 2] | __asm ("str.w r7, [r4, r1, lsl 2]");
0x0004a358 ldr r7, [r6, -0x4] | r7 = *((r6 - 0x4));
0x0004a35c cmp r7, 0 |
| if (r7 != 0) {
0x0004a35e bne 0x4a31e | goto label_2;
| }
| label_30:
0x0004a360 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004a362 cmp r6, r3 |
| if (r6 != r3) {
0x0004a364 bne 0x4a318 | goto label_3;
| }
0x0004a366 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0004a368 mov r7, sl | r7 = sl;
0x0004a36a ldr r6, [sp, 0x54] | r6 = *(arg_54h);
| label_29:
0x0004a36c ldr r0, [sp, 0x10] | r0 = var_10h;
0x0004a36e blx 0x8404 | fcn_00008404 ();
0x0004a372 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004a374 str.w r4, [sb, 0x14] | __asm ("str.w r4, [sb, 0x14]");
0x0004a378 str.w r8, [sb, 0xc] | __asm ("str.w r8, [sb, 0xc]");
0x0004a37c cmp r3, 0 |
| if (r3 < 0) {
0x0004a37e blt 0x4a412 | goto label_32;
| }
0x0004a380 adds r1, r6, r7 | r1 = r6 + r7;
0x0004a382 movs r2, 0xd | r2 = 0xd;
| do {
0x0004a384 ldrb r3, [r1, -0x1]! | r3 = *((r1 -= 0x1));
0x0004a388 cmp r1, r6 |
0x0004a38a eor.w r3, r3, r2, lsl 3 | r3 ^= (r2 << 3);
0x0004a38e eor.w r2, r2, r3 | r2 ^= r3;
0x0004a392 bne 0x4a384 |
| } while (r1 != r6);
0x0004a394 lsls r3, r2, 3 | r3 = r2 << 3;
| do {
0x0004a396 eors r2, r3 | r2 ^= r3;
0x0004a398 mov r1, r8 | r1 = r8;
0x0004a39a eor.w r0, r2, r5 | r0 = r2 ^ r5;
0x0004a39e bl 0xb1e8c | fcn_000b1e8c (r0, r1, r2);
0x0004a3a2 mov r8, r1 | r8 = r1;
0x0004a3a4 b 0x4a160 | goto label_4;
| label_18:
0x0004a3a6 lsrs r3, r6, 7 | r3 = r6 >> 7;
0x0004a3a8 and r6, r6, 0x7f | r6 &= 0x7f;
0x0004a3ac movs r1, 2 | r1 = 2;
0x0004a3ae strb r6, [r0, 1] | *((r0 + 1)) = r6;
0x0004a3b0 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0004a3b4 strb r3, [r0] | *(r0) = r3;
0x0004a3b6 b 0x4a0c6 | goto label_5;
| label_25:
0x0004a3b8 movs r3, 1 | r3 = 1;
0x0004a3ba strb r3, [r4, 0x19] | *((r4 + 0x19)) = r3;
0x0004a3bc b 0x4a2cc | goto label_6;
| label_31:
0x0004a3be movs r0, 0xd | r0 = 0xd;
0x0004a3c0 b 0x4a348 | goto label_7;
| label_26:
0x0004a3c2 ldr r3, [sp, 0x48] | r3 = *(x);
0x0004a3c4 strh r7, [r4, 0x1a] | *((r4 + 0x1a)) = r7;
0x0004a3c6 str r3, [sp, 0x4c] | *(arg_4ch) = r3;
0x0004a3c8 b 0x4a10e | goto label_8;
| label_13:
0x0004a3ca movs r3, 0x68 | r3 = 0x68;
0x0004a3cc movs r2, 0xd | r2 = 0xd;
0x0004a3ce b 0x4a026 | goto label_9;
| label_23:
0x0004a3d0 movs r0, 7 | r0 = 7;
0x0004a3d2 add sp, 0x24 |
0x0004a3d4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_21:
0x0004a3d8 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x0004a3da and r2, r2, 0x7f | r2 &= 0x7f;
0x0004a3de movs r1, 2 | r1 = 2;
0x0004a3e0 strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x0004a3e2 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0004a3e6 strb r3, [r0] | *(r0) = r3;
0x0004a3e8 b 0x4a13a | goto label_10;
| label_27:
0x0004a3ea ldr r3, [sp, 0x48] | r3 = *(x);
0x0004a3ec ldr r2, [sp, 0x48] | r2 = *(x);
0x0004a3ee lsrs r3, r3, 7 | r3 >>= 7;
0x0004a3f0 and r2, r2, 0x7f | r2 &= 0x7f;
0x0004a3f4 strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x0004a3f6 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0004a3fa strb r3, [r0] | *(r0) = r3;
0x0004a3fc movs r3, 2 | r3 = 2;
0x0004a3fe b 0x4a280 | goto label_11;
| label_24:
0x0004a400 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x0004a402 movs r1, 2 | r1 = 2;
0x0004a404 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0004a408 strb r3, [r0] | *(r0) = r3;
0x0004a40a and r3, r2, 0x7f | r3 = r2 & 0x7f;
0x0004a40e strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x0004a410 b 0x4a1e6 | goto label_12;
| label_32:
0x0004a412 movs r3, 0x68 | r3 = 0x68;
0x0004a414 movs r2, 0xd | r2 = 0xd;
0x0004a416 b 0x4a396 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4a4e4 */
| #include <stdint.h>
|
; (fcn) fcn.0004a4e4 () | void fcn_0004a4e4 (int16_t arg1, uint32_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0004a4e4 push {r3, r4, r5, r6, r7, lr} |
0x0004a4e6 subs r4, r2, 0 | r4 = r2 - 0;
0x0004a4e8 mov r5, r0 | r5 = r0;
0x0004a4ea mov r6, r1 | r6 = r1;
| if (r4 < r2) {
0x0004a4ec bge 0x4a4f6 |
0x0004a4ee mov r0, r1 | r0 = r1;
0x0004a4f0 blx 0x85b4 | r0 = fcn_000085b4 ();
0x0004a4f4 mov r4, r0 | r4 = r0;
| }
0x0004a4f6 ldrd r2, r1, [r5, 4] | __asm ("ldrd r2, r1, [r5, 4]");
0x0004a4fa ldr r0, [r5] | r0 = *(r5);
0x0004a4fc adds r3, r2, r4 | r3 = r2 + r4;
0x0004a4fe adds r3, 1 | r3++;
0x0004a500 cmp r3, r1 |
| if (r3 >= r1) {
0x0004a502 blt 0x4a522 |
0x0004a504 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0004a506 adds r2, r1, r4 | r2 = r1 + r4;
0x0004a508 adc.w r3, r3, r1, asr 31 | __asm ("adc.w r3, r3, r1, asr 31");
0x0004a50c adds.w r7, r2, 0x64 | r7 = r2 + 0x64;
0x0004a510 mov r2, r7 | r2 = r7;
0x0004a512 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0004a516 blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 == 0) {
0x0004a51a cbz r0, 0x4a53c | goto label_0;
| }
0x0004a51c ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0004a51e str r0, [r5] | *(r5) = r0;
0x0004a520 str r7, [r5, 8] | *((r5 + 8)) = r7;
| }
0x0004a522 mov r1, r6 | r1 = r6;
0x0004a524 add r0, r2 | r0 += r2;
0x0004a526 mov r2, r4 | r2 = r4;
0x0004a528 blx 0x8610 | fcn_00008610 ();
0x0004a52c ldrd r2, r1, [r5] | __asm ("ldrd r2, r1, [r5]");
0x0004a530 movs r3, 0 | r3 = 0;
0x0004a532 mov r0, r3 | r0 = r3;
0x0004a534 add r4, r1 | r4 += r1;
0x0004a536 str r4, [r5, 4] | *((r5 + 4)) = r4;
0x0004a538 strb r3, [r2, r4] | *((r2 + r4)) = r3;
0x0004a53a pop {r3, r4, r5, r6, r7, pc} |
| label_0:
0x0004a53c movs r0, 7 | r0 = 7;
0x0004a53e pop {r3, r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4a920 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0004a920 () | void fcn_0004a920 (int16_t arg_0h, int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004a920 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0004a924 add.w sb, r2, r3 | sb = r2 + r3;
0x0004a928 cmp r2, sb |
0x0004a92a sub sp, 0x14 |
| if (r2 >= sb) {
0x0004a92c bhs 0x4a9f2 | goto label_6;
| }
0x0004a92e ldr.w r8, [pc, 0x254] | r8 = *(0x0004ab84);
0x0004a932 mov r5, r2 | r5 = r2;
0x0004a934 movw r3, 0x9fdf |
0x0004a938 mov.w r2, 0xf800 |
0x0004a93c movt r2, 0xffff | r2 = 0x-800;
0x0004a940 movt r3, 0x802 | r3 = 0x8029fdf;
0x0004a944 mov r7, r5 | r7 = r5;
0x0004a946 str r5, [sp, 8] | var_8h = r5;
0x0004a948 mov r6, r1 | r6 = r1;
0x0004a94a add r8, pc | r8 += pc;
0x0004a94c mov.w fp, 0 |
0x0004a950 mov r5, sb | r5 = sb;
0x0004a952 mov r4, r2 | r4 = r2;
0x0004a954 mov sl, r3 | sl = r3;
0x0004a956 str r0, [sp, 4] | var_4h = r0;
0x0004a958 b 0x4a966 |
| while (r0 < 0xbf) {
| label_2:
0x0004a95a bl 0x10188 | r0 = fcn_00010188 (r0);
0x0004a95e cmp r6, r0 |
| if (r6 != r0) {
0x0004a960 bne 0x4a9de | goto label_3;
| }
| label_0:
0x0004a962 cmp r5, r7 |
| if (r5 < r7) {
0x0004a964 bls 0x4a9e6 | goto label_11;
| }
| label_1:
0x0004a966 mov r3, r7 | r3 = r7;
0x0004a968 ldrb r0, [r3], 1 | r0 = *(r3);
| r3++;
0x0004a96c cmp r0, 0xbf |
0x0004a96e it ls |
| if (r0 > 0xbf) {
0x0004a970 movls r7, r3 | r7 = r3;
| }
0x0004a972 bls 0x4a95a |
| }
0x0004a974 cmp r5, r3 |
0x0004a976 add r0, r8 | r0 += r8;
0x0004a978 ldrb sb, [r0, -0xc0] | sb = *((r0 - 0xc0));
| if (r5 != r3) {
0x0004a97c bne 0x4a98a | goto label_12;
| }
0x0004a97e b 0x4ab44 | goto label_13;
| do {
0x0004a980 cmp r5, r3 |
0x0004a982 add.w sb, r0, sb, lsl 6 | sb = r0 + (sb << 6);
0x0004a986 mov r7, r3 | r7 = r3;
| if (r5 == r3) {
0x0004a988 beq 0x4a99e | goto label_14;
| }
| label_12:
0x0004a98a mov r7, r3 | r7 = r3;
0x0004a98c ldrb r0, [r3], 1 | r0 = *(r3);
| r3++;
0x0004a990 and ip, r0, 0xc0 |
0x0004a994 and r0, r0, 0x3f | r0 &= 0x3f;
0x0004a998 cmp.w ip, 0x80 |
0x0004a99c beq 0x4a980 |
| } while (ip == 0x80);
| label_14:
0x0004a99e cmp.w sb, 0x7f |
| if (sb < 0x7f) {
0x0004a9a2 bls 0x4a9fa | goto label_15;
| }
0x0004a9a4 and.w r3, sb, r4 | r3 = sb & r4;
0x0004a9a8 cmp.w r3, 0xd800 |
| if (r3 == 0xd800) {
0x0004a9ac beq 0x4a9fa | goto label_15;
| }
0x0004a9ae bic r0, sb, 1 | r0 = BIT_MASK (sb, 1);
0x0004a9b2 movw r3, 0xfffe | r3 = 0xfffe;
0x0004a9b6 cmp r0, r3 |
| if (r0 == r3) {
0x0004a9b8 beq 0x4a9fa | goto label_15;
| }
0x0004a9ba mov r0, sb | r0 = sb;
0x0004a9bc bl 0x10188 | r0 = fcn_00010188 (r0);
0x0004a9c0 cmp r0, r6 |
| if (r0 == r6) {
0x0004a9c2 beq 0x4a962 | goto label_0;
| }
0x0004a9c4 sub.w r0, sb, 0x300 | r0 = sb - 0x300;
0x0004a9c8 cmp r0, 0x31 |
| if (r0 > 0x31) {
0x0004a9ca bhi 0x4a9de | goto label_3;
| }
0x0004a9cc cmp.w sb, 0x320 |
| if (sb >= 0x320) {
0x0004a9d0 bge 0x4aa00 | goto label_16;
| }
0x0004a9d2 movs r3, 1 | r3 = 1;
0x0004a9d4 lsls r3, r0 | r3 <<= r0;
0x0004a9d6 and.w r3, r3, sl | r3 &= sl;
0x0004a9da cmp r3, 0 |
| if (r3 != 0) {
0x0004a9dc bne 0x4a962 | goto label_0;
| }
| label_3:
0x0004a9de cmp r5, r7 |
0x0004a9e0 add.w fp, fp, 1 |
| if (r5 > r7) {
0x0004a9e4 bhi 0x4a966 | goto label_1;
| }
| label_11:
0x0004a9e6 mov sb, r5 | sb = r5;
0x0004a9e8 ldrd r7, r5, [sp, 4] | __asm ("ldrd r7, r5, [var_8h]");
0x0004a9ec cmp.w fp, 0 |
| if (fp != 0) {
0x0004a9f0 bne 0x4aa1a | goto label_17;
| }
| label_6:
0x0004a9f2 movs r0, 0 | r0 = 0;
| label_10:
0x0004a9f4 add sp, 0x14 |
0x0004a9f6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x0004a9fa movw r0, 0xfffd | r0 = 0xfffd;
0x0004a9fe b 0x4a95a | goto label_2;
| label_16:
0x0004aa00 sub.w sb, sb, 0x320 | sb -= 0x320;
0x0004aa04 movs r3, 1 | r3 = 1;
0x0004aa06 lsl.w r3, r3, sb | r3 <<= sb;
0x0004aa0a movw r0, 0x61f8 |
0x0004aa0e movt r0, 3 | r0 = 0x361f8;
0x0004aa12 ands r3, r0 | r3 &= r0;
0x0004aa14 cmp r3, 0 |
| if (r3 != 0) {
0x0004aa16 bne 0x4a962 | goto label_0;
| }
0x0004aa18 b 0x4a9de | goto label_3;
| label_17:
0x0004aa1a ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x0004aa1c ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x0004aa1e add.w r2, fp, r3 | r2 = fp + r3;
0x0004aa22 movs r3, 0 | r3 = 0;
0x0004aa24 lsls r2, r2, 2 | r2 <<= 2;
0x0004aa26 blx 0x8500 | r0 = fcn_00008500 ();
0x0004aa2a mov r8, r0 | r8 = r0;
0x0004aa2c cmp r0, 0 |
| if (r0 == 0) {
0x0004aa2e beq.w 0x4ab6e | goto label_18;
| }
0x0004aa32 ldr r3, [pc, 0x154] |
0x0004aa34 mov.w lr, 0xf800 | lr = 0xf800;
0x0004aa38 movw ip, 0x9fdf |
0x0004aa3c movt lr, 0xffff | lr = (lr & 0xFFFF) | 0xffff0000;
0x0004aa40 movt ip, 0x802 | ip = 0x8029fdf;
0x0004aa44 ldr.w sl, [r7, 8] | sl = *((r7 + 8));
0x0004aa48 add r3, pc | r3 = 0x955d6;
0x0004aa4a strd r7, lr, [sp, 8] | __asm ("strd r7, lr, [var_8h]");
0x0004aa4e str r3, [sp, 4] | var_4h = r3;
0x0004aa50 mov r7, ip | r7 = ip;
0x0004aa52 b 0x4aa62 |
| while (r4 < 0xbf) {
| label_7:
0x0004aa54 mov r0, r4 | r0 = r4;
0x0004aa56 bl 0x10188 | r0 = fcn_00010188 (r0);
0x0004aa5a cmp r6, r0 |
| if (r6 != r0) {
0x0004aa5c bne 0x4aad4 | goto label_8;
| }
| label_4:
0x0004aa5e cmp r5, sb |
| if (r5 >= sb) {
0x0004aa60 bhs 0x4ab18 | goto label_19;
| }
| label_5:
0x0004aa62 ldrb r4, [r5], 1 | r4 = *(r5);
| r5++;
0x0004aa66 cmp r4, 0xbf |
0x0004aa68 bls 0x4aa54 |
| }
0x0004aa6a ldr r3, [sp, 4] | r3 = var_4h;
0x0004aa6c cmp sb, r5 |
0x0004aa6e add r4, r3 | r4 += r3;
0x0004aa70 ldrb r4, [r4, -0xc0] | r4 = *((r4 - 0xc0));
| if (sb == r5) {
0x0004aa74 beq 0x4ab62 | goto label_20;
| }
0x0004aa76 mov r2, r5 | r2 = r5;
0x0004aa78 b 0x4aa84 |
| while (r1 == 0x80) {
0x0004aa7a cmp sb, r2 |
0x0004aa7c add.w r4, r3, r4, lsl 6 | r4 = r3 + (r4 << 6);
0x0004aa80 mov r5, r2 | r5 = r2;
| if (sb == r2) {
0x0004aa82 beq 0x4aa96 | goto label_21;
| }
0x0004aa84 mov r5, r2 | r5 = r2;
0x0004aa86 ldrb r3, [r2], 1 | r3 = *(r2);
| r2++;
0x0004aa8a and r1, r3, 0xc0 | r1 = r3 & 0xc0;
0x0004aa8e and r3, r3, 0x3f | r3 &= 0x3f;
0x0004aa92 cmp r1, 0x80 |
0x0004aa94 beq 0x4aa7a |
| }
| label_21:
0x0004aa96 cmp r4, 0x7f |
| if (r4 < 0x7f) {
0x0004aa98 bls 0x4ab20 | goto label_22;
| }
0x0004aa9a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004aa9c and.w r2, r4, r3 | r2 = r4 & r3;
0x0004aaa0 cmp.w r2, 0xd800 |
| if (r2 == 0xd800) {
0x0004aaa4 beq 0x4ab20 | goto label_22;
| }
0x0004aaa6 bic r1, r4, 1 | r1 = BIT_MASK (r4, 1);
0x0004aaaa movw r2, 0xfffe | r2 = 0xfffe;
0x0004aaae cmp r1, r2 |
| if (r1 == r2) {
0x0004aab0 beq 0x4ab20 | goto label_22;
| }
0x0004aab2 mov r0, r4 | r0 = r4;
0x0004aab4 bl 0x10188 | r0 = fcn_00010188 (r0);
0x0004aab8 cmp r0, r6 |
| if (r0 == r6) {
0x0004aaba beq 0x4aa5e | goto label_4;
| }
0x0004aabc sub.w r1, r4, 0x300 | r1 = r4 - 0x300;
0x0004aac0 cmp r1, 0x31 |
| if (r1 > 0x31) {
0x0004aac2 bhi 0x4aad4 | goto label_8;
| }
0x0004aac4 cmp.w r4, 0x320 |
| if (r4 >= 0x320) {
0x0004aac8 bge 0x4ab26 | goto label_23;
| }
0x0004aaca movs r2, 1 | r2 = 1;
0x0004aacc lsls r2, r1 | r2 <<= r1;
0x0004aace ands r2, r7 | r2 &= r7;
0x0004aad0 cmp r2, 0 |
| if (r2 != 0) {
0x0004aad2 bne 0x4aa5e | goto label_4;
| }
| label_8:
0x0004aad4 cmp.w sl, 0 |
0x0004aad8 it le |
| if (sl > 0) {
0x0004aada movle fp, r8 |
| }
| if (sl <= 0) {
0x0004aadc ble 0x4ab0c | goto label_9;
| }
0x0004aade mov r1, r8 | r1 = r8;
0x0004aae0 movs r2, 0 | r2 = 0;
0x0004aae2 b 0x4aaea |
| while (r3 < r4) {
0x0004aae4 adds r2, 1 | r2++;
0x0004aae6 cmp r2, sl |
| if (r2 == sl) {
0x0004aae8 beq 0x4ab3e | goto label_24;
| }
0x0004aaea mov fp, r1 |
0x0004aaec ldr r3, [r1], 4 | r3 = *(r1);
| r1 += 4;
0x0004aaf0 cmp r3, r4 |
0x0004aaf2 blt 0x4aae4 |
| }
0x0004aaf4 cmp r2, sl |
| if (r2 < sl) {
0x0004aaf6 bge 0x4ab0c |
0x0004aaf8 adds r0, r2, 1 | r0 = r2 + 1;
0x0004aafa sub.w r2, sl, r2 | r2 = sl - r2;
0x0004aafe lsls r0, r0, 2 | r0 <<= 2;
0x0004ab00 lsls r2, r2, 2 | r2 <<= 2;
0x0004ab02 subs r1, r0, 4 | r1 = r0 - 4;
0x0004ab04 add r0, r8 | r0 += r8;
0x0004ab06 add r1, r8 | r1 += r8;
0x0004ab08 blx 0x88c4 | fcn_000088c4 ();
| }
| label_9:
0x0004ab0c cmp r5, sb |
0x0004ab0e add.w sl, sl, 1 | sl++;
0x0004ab12 str.w r4, [fp] | __asm ("str.w r4, [fp]");
| if (r5 <= sb) {
0x0004ab16 blo 0x4aa62 | goto label_5;
| }
| label_19:
0x0004ab18 ldr r7, [sp, 8] | r7 = var_8h;
0x0004ab1a strd sl, r8, [r7, 8] | __asm ("strd sl, r8, [r7, 8]");
0x0004ab1e b 0x4a9f2 | goto label_6;
| label_22:
0x0004ab20 movw r4, 0xfffd | r4 = 0xfffd;
0x0004ab24 b 0x4aa54 | goto label_7;
| label_23:
0x0004ab26 sub.w r1, r4, 0x320 | r1 = r4 - 0x320;
0x0004ab2a movs r2, 1 | r2 = 1;
0x0004ab2c lsls r2, r1 | r2 <<= r1;
0x0004ab2e movw r1, 0x61f8 |
0x0004ab32 movt r1, 3 | r1 = 0x361f8;
0x0004ab36 ands r2, r1 | r2 &= r1;
0x0004ab38 cmp r2, 0 |
| if (r2 != 0) {
0x0004ab3a bne 0x4aa5e | goto label_4;
| }
0x0004ab3c b 0x4aad4 | goto label_8;
| label_24:
0x0004ab3e add.w fp, r8, sl, lsl 2 |
0x0004ab42 b 0x4ab0c | goto label_9;
| label_13:
0x0004ab44 cmp.w sb, 0x7f |
| if (sb <= 0x7f) {
0x0004ab48 bhi 0x4ab52 |
0x0004ab4a mov r7, r5 | r7 = r5;
0x0004ab4c movw r0, 0xfffd | r0 = 0xfffd;
0x0004ab50 b 0x4a95a | goto label_2;
| }
0x0004ab52 mov r0, sb | r0 = sb;
0x0004ab54 mov r7, r5 | r7 = r5;
0x0004ab56 bl 0x10188 | r0 = fcn_00010188 (r0);
0x0004ab5a cmp r6, r0 |
| if (r6 == r0) {
0x0004ab5c beq.w 0x4a962 | goto label_0;
| }
0x0004ab60 b 0x4a9de | goto label_3;
| label_20:
0x0004ab62 cmp r4, 0x7f |
| if (r4 <= 0x7f) {
0x0004ab64 bhi 0x4ab72 |
0x0004ab66 mov r5, sb | r5 = sb;
0x0004ab68 movw r4, 0xfffd | r4 = 0xfffd;
0x0004ab6c b 0x4aa54 | goto label_7;
| label_18:
0x0004ab6e movs r0, 7 | r0 = 7;
0x0004ab70 b 0x4a9f4 | goto label_10;
| }
0x0004ab72 mov r0, r4 | r0 = r4;
0x0004ab74 mov r5, sb | r5 = sb;
0x0004ab76 bl 0x10188 | r0 = fcn_00010188 (r0);
0x0004ab7a cmp r0, r6 |
| if (r0 == r6) {
0x0004ab7c beq.w 0x4aa5e | goto label_4;
| }
0x0004ab80 b 0x4aad4 | goto label_8;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4acec */
| #include <stdint.h>
|
; (fcn) fcn.0004acec () | void fcn_0004acec (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0004acec push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004acf0 lsls r4, r1, 1 | r4 = r1 << 1;
0x0004acf2 mov lr, r2 | lr = r2;
0x0004acf4 adds r3, r4, r1 | r3 = r4 + r1;
0x0004acf6 sub sp, 0xc |
0x0004acf8 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x0004acfc ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0004acfe cmp r2, 0 |
| if (r2 == 0) {
0x0004ad00 beq.w 0x4ae20 | goto label_1;
| }
0x0004ad04 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0004ad08 mov sb, r0 | sb = r0;
0x0004ad0a ldr r0, [r3, 0x20] | r0 = *((r3 + 0x20));
0x0004ad0c lsls r2, r2, 2 | r2 <<= 2;
0x0004ad0e subs r2, 0xc | r2 -= 0xc;
0x0004ad10 add r2, r0 | r2 += r0;
0x0004ad12 ldrd r2, r0, [r2, 4] | __asm ("ldrd r2, r0, [r2, 4]");
0x0004ad16 add.w ip, r0, 1 |
0x0004ad1a sub.w fp, ip, r2 |
0x0004ad1e subs r2, r1, 1 | r2 = r1 - 1;
| if (r2 >= r1) {
0x0004ad20 bpl 0x4ad28 | goto label_3;
| }
0x0004ad22 b 0x4ad6a | goto label_4;
| do {
0x0004ad24 subs r2, 1 | r2--;
| if (r2 <= 1) {
0x0004ad26 blo 0x4ad6a | goto label_4;
| }
| label_3:
0x0004ad28 ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x0004ad2a subs r3, 0xc | r3 -= 0xc;
0x0004ad2c cmp r0, 0 |
0x0004ad2e beq 0x4ad24 |
| } while (r0 == 0);
0x0004ad30 add.w r3, r2, r2, lsl 1 | r3 = r2 + (r2 << 1);
0x0004ad34 add.w r3, lr, r3, lsl 2 | r3 = lr + (r3 << 2);
0x0004ad38 ldr r7, [r3, 0x1c] | r7 = *((r3 + 0x1c));
0x0004ad3a cmp r7, 0 |
| if (r7 <= 0) {
0x0004ad3c ble.w 0x4ae44 | goto label_5;
| }
0x0004ad40 ldr r0, [r3, 0x20] | r0 = *((r3 + 0x20));
0x0004ad42 add.w r7, r7, r7, lsl 1 | r7 += (r7 << 1);
0x0004ad46 movs r5, 0 | r5 = 0;
0x0004ad48 add.w r7, r0, r7, lsl 2 | r7 = r0 + (r7 << 2);
| do {
0x0004ad4c ldrd r6, r3, [r0, 4] | __asm ("ldrd r6, r3, [r0, 4]");
0x0004ad50 adds r0, 0xc | r0 += 0xc;
0x0004ad52 subs r3, r3, r6 | r3 -= r6;
0x0004ad54 adds r3, 1 | r3++;
0x0004ad56 cmp r5, r3 |
0x0004ad58 it lt |
| if (r5 >= r3) {
0x0004ad5a movlt r5, r3 | r5 = r3;
| }
0x0004ad5c cmp r0, r7 |
0x0004ad5e bne 0x4ad4c |
| } while (r0 != r7);
| label_2:
0x0004ad60 cmp fp, r5 |
0x0004ad62 ittt le |
| if (fp > r5) {
0x0004ad64 movle r1, r2 | r1 = r2;
| }
| if (fp > r5) {
0x0004ad66 movle fp, r5 |
| }
| if (fp > r5) {
0x0004ad68 lslle r4, r1, 1 | r4 = r1 << 1;
| }
| label_4:
0x0004ad6a add r4, r1 | r4 += r1;
0x0004ad6c add.w r4, lr, r4, lsl 2 | r4 = lr + (r4 << 2);
0x0004ad70 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0004ad72 cmp r3, 0 |
| if (r3 != 0) {
0x0004ad74 bne 0x4ae20 | goto label_1;
| }
0x0004ad76 ldr.w r2, [lr, 0x14] | r2 = *((lr + 0x14));
0x0004ad7a add.w sl, r1, 1 | sl = r1 + 1;
0x0004ad7e cmp sl, r2 |
| if (sl >= r2) {
0x0004ad80 bge 0x4ae20 | goto label_1;
| }
0x0004ad82 mov r7, r4 | r7 = r4;
0x0004ad84 str.w lr, [sp, 4] | __asm ("str.w lr, [var_4h]");
| label_0:
0x0004ad88 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0004ad8a cmp r3, 0 |
| if (r3 != 0) {
0x0004ad8c bne 0x4ae20 | goto label_1;
| }
0x0004ad8e ldr r6, [r4, 0x28] | r6 = *((r4 + 0x28));
0x0004ad90 subs r6, 1 | r6--;
| if (r6 < 1) {
0x0004ad92 bmi 0x4ae38 | goto label_6;
| }
0x0004ad94 add.w r5, r6, r6, lsl 1 | r5 = r6 + (r6 << 1);
0x0004ad98 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0004ad9c lsls r5, r5, 2 | r5 <<= 2;
0x0004ad9e mov sl, r5 | sl = r5;
0x0004ada0 b 0x4ae06 |
| while (r8 == 0) {
0x0004ada2 ldr r2, [r7, 0x1c] | r2 = *((r7 + 0x1c));
0x0004ada4 mov r3, r8 | r3 = r8;
0x0004ada6 ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x0004ada8 subs r6, 1 | r6--;
0x0004adaa adds r2, 1 | r2++;
0x0004adac add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0004adb0 lsls r2, r2, 2 | r2 <<= 2;
0x0004adb2 blx 0x8500 | r0 = fcn_00008500 ();
0x0004adb6 mov r5, r0 | r5 = r0;
0x0004adb8 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x0004adba cbz r0, 0x4ae26 | goto label_7;
| }
0x0004adbc ldr r2, [r7, 0x1c] | r2 = *((r7 + 0x1c));
0x0004adbe adds r0, 0xc | r0 += 0xc;
0x0004adc0 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0004adc4 lsls r2, r2, 2 | r2 <<= 2;
0x0004adc6 blx 0x88c4 | fcn_000088c4 ();
0x0004adca str.w r8, [r5] | __asm ("str.w r8, [r5]");
0x0004adce str.w r8, [r5, 4] | __asm ("str.w r8, [r5, 4]");
0x0004add2 str.w r8, [r5, 8] | __asm ("str.w r8, [r5, 8]");
0x0004add6 ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x0004adda str r5, [r7, 0x20] | *((r7 + 0x20)) = r5;
| if (r3 != 0) {
0x0004addc cbnz r3, 0x4ae20 | goto label_1;
| }
0x0004adde ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0004ade0 add.w r3, r2, sl | r3 = r2 + sl;
0x0004ade4 ldr.w r1, [r2, sl] | r1 = *((r2 + sl));
0x0004ade8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0004adea sub.w sl, sl, 0xc | sl -= 0xc;
0x0004adee ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0004adf0 str r1, [r5] | *(r5) = r1;
0x0004adf2 str r2, [r5, 4] | *((r5 + 4)) = r2;
0x0004adf4 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x0004adf6 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0004adf8 adds r3, 1 | r3++;
0x0004adfa str r3, [r7, 0x1c] | *((r7 + 0x1c)) = r3;
0x0004adfc ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x0004adfe subs r3, 1 | r3--;
0x0004ae00 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x0004ae02 adds r3, r6, 1 | r3 = r6 + 1;
| if (r3 == r6) {
0x0004ae04 beq 0x4ae32 | goto label_8;
| }
0x0004ae06 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0004ae08 add r2, sl | r2 += sl;
0x0004ae0a ldrd r2, r3, [r2, 4] | __asm ("ldrd r2, r3, [r2, 4]");
0x0004ae0e adds r3, 1 | r3++;
0x0004ae10 subs r3, r3, r2 | r3 -= r2;
0x0004ae12 cmp fp, r3 |
| if (fp < r3) {
0x0004ae14 blt 0x4ae20 | goto label_1;
| }
0x0004ae16 ldr.w r8, [sb, 0x24] | r8 = *((sb + 0x24));
0x0004ae1a cmp.w r8, 0 |
0x0004ae1e beq 0x4ada2 |
| }
| label_1:
0x0004ae20 add sp, 0xc |
0x0004ae22 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0004ae26 movs r3, 7 | r3 = 7;
0x0004ae28 str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x0004ae2c add sp, 0xc |
0x0004ae2e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x0004ae32 ldrd sl, r3, [sp] | __asm ("ldrd sl, r3, [sp]");
0x0004ae36 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
| label_6:
0x0004ae38 add.w sl, sl, 1 | sl++;
0x0004ae3c adds r4, 0xc | r4 += 0xc;
0x0004ae3e cmp sl, r2 |
| if (sl < r2) {
0x0004ae40 blt 0x4ad88 | goto label_0;
| }
0x0004ae42 b 0x4ae20 | goto label_1;
| label_5:
0x0004ae44 movs r5, 0 | r5 = 0;
0x0004ae46 b 0x4ad60 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4ae8c */
| #include <stdint.h>
|
; (fcn) fcn.0004ae8c () | void fcn_0004ae8c (int16_t arg_b0h, int16_t arg_b8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_20h;
| int32_t var_4h_2;
| int16_t var_84h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004ae8c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004ae90 mov fp, r2 |
0x0004ae92 sub sp, 0x8c |
0x0004ae94 ldr r2, [pc, 0x21c] |
0x0004ae96 mov r8, r3 | r8 = r3;
0x0004ae98 add.w ip, sp, 0x20 |
0x0004ae9c ldrd r7, r1, [sp, 0xb0] | __asm ("ldrd r7, r1, [arg_b0h]");
0x0004aea0 movs r5, 0 | r5 = 0;
0x0004aea2 ldr r3, [pc, 0x214] | r3 = *(0x4b0ba);
0x0004aea4 add r2, pc | r2 = 0x95f5c;
0x0004aea6 mov r4, r0 | r4 = r0;
0x0004aea8 mov sb, ip | sb = ip;
0x0004aeaa str r1, [sp, 0xc] | var_ch = r1;
0x0004aeac mov sl, r5 | sl = r5;
0x0004aeae ldr r3, [r2, r3] |
0x0004aeb0 ldr r3, [r3] | r3 = *(0x95f5c);
0x0004aeb2 str r3, [sp, 0x84] | var_84h = r3;
0x0004aeb4 mov.w r3, 0 | r3 = 0;
0x0004aeb8 ldr r3, [sp, 0xb8] | r3 = *(arg_b8h);
0x0004aeba str r7, [sp, 4] | var_4h = r7;
0x0004aebc str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x0004aec0 str r3, [sp, 0x10] | var_10h = r3;
0x0004aec2 movs r3, 4 | r3 = 4;
0x0004aec4 mov r7, r3 | r7 = r3;
0x0004aec6 b 0x4aecc |
| while (r3 != 0) {
| label_0:
0x0004aec8 ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
| if (r4 == 0) {
0x0004aeca cbz r4, 0x4af26 | goto label_8;
| }
| label_1:
0x0004aecc ldr r6, [r4, 8] | r6 = *((r4 + 8));
0x0004aece ldrb r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0004aed0 cmp r3, 0 |
0x0004aed2 bne 0x4aec8 |
| }
0x0004aed4 ldrd r1, r2, [r6] | __asm ("ldrd r1, r2, [r6]");
0x0004aed8 cmp r2, r8 |
0x0004aeda it eq |
| if (r2 != r8) {
0x0004aedc cmpeq r1, fp | __asm ("cmpeq r1, fp");
| goto label_9;
| }
| if (r2 != r8) {
| label_9:
0x0004aede bne 0x4aec8 | goto label_0;
| }
0x0004aee0 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0004aee2 cmp r1, 0 |
| if (r1 == 0) {
0x0004aee4 beq 0x4aec8 | goto label_0;
| }
0x0004aee6 cmp r7, r5 |
| if (r7 == r5) {
0x0004aee8 beq 0x4afea | goto label_10;
| }
0x0004aeea add.w r2, r5, r5, lsl 1 | r2 = r5 + (r5 << 1);
0x0004aeee lsls r2, r2, 3 | r2 <<= 3;
| label_3:
0x0004aef0 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x0004aef2 add.w r6, sb, r2 | r6 = sb + r2;
0x0004aef6 str.w sl, [r6, 8] | __asm ("str.w sl, [r6, 8]");
0x0004aefa add.w r3, r6, 0x10 | r3 = r6 + 0x10;
0x0004aefe str.w sl, [r6, 0xc] | __asm ("str.w sl, [r6, 0xc]");
0x0004af02 str.w sl, [r6, 0x10] | __asm ("str.w sl, [r6, 0x10]");
0x0004af06 str.w sl, [r6, 0x14] | __asm ("str.w sl, [r6, 0x14]");
0x0004af0a str.w r0, [sb, r2] | __asm ("str.w r0, [sb, r2]");
0x0004af0e add.w r2, r6, 8 | r2 = r6 + 8;
0x0004af12 str r1, [r6, 4] | *((r6 + 4)) = r1;
0x0004af14 bl 0xcd58 | r0 = fcn_0000cd58 (r0, r1, r2, r3);
| if (r0 != 0) {
0x0004af18 cbz r0, 0x4af1e |
0x0004af1a movs r3, 1 | r3 = 1;
0x0004af1c strb r3, [r6, 0xd] | *((r6 + 0xd)) = r3;
| }
0x0004af1e ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
0x0004af20 adds r5, 1 | r5++;
0x0004af22 cmp r4, 0 |
| if (r4 != 0) {
0x0004af24 bne 0x4aecc | goto label_1;
| }
| label_8:
0x0004af26 cmp r5, 1 |
0x0004af28 ldrd ip, r7, [sp] | __asm ("ldrd ip, r7, [sp]");
0x0004af2c str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h]");
| if (r5 == 1) {
0x0004af30 beq.w 0x4b08a | goto label_11;
| }
0x0004af34 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0004af38 str r4, [r7, 4] | *((r7 + 4)) = r4;
0x0004af3a vstr d16, [sp, 0x18] | __asm ("vstr d16, [sp, 0x18]");
0x0004af3e cmp r5, 0 |
| if (r5 == 0) {
0x0004af40 beq 0x4b036 | goto label_12;
| }
0x0004af42 ldr r3, [sp, 8] | r3 = var_8h;
0x0004af44 mov.w sl, -1 | sl = -1;
0x0004af48 mov fp, sl |
0x0004af4a str.w ip, [sp, 0x14] | __asm ("str.w ip, [var_14h]");
0x0004af4e adds r3, 8 | r3 += 8;
0x0004af50 str r3, [sp, 4] | var_4h = r3;
| label_2:
0x0004af52 ldr r2, [sp, 4] | r2 = var_4h;
0x0004af54 mov.w sb, -1 | sb = -1;
0x0004af58 mvn r8, 0x80000000 | r8 = ~0x80000000;
0x0004af5c movs r6, 0 | r6 = 0;
| do {
0x0004af5e ldrb r3, [r2, 5] | r3 = *((r2 + 5));
| if (r3 == 0) {
0x0004af60 cbnz r3, 0x4af7a |
0x0004af62 ldrd r1, r3, [r2, 8] | __asm ("ldrd r1, r3, [r2, 8]");
0x0004af66 cmp r3, fp |
0x0004af68 it eq |
| if (r3 == fp) {
0x0004af6a cmpeq r1, sl | __asm ("cmpeq r1, sl");
| }
| if (r3 == fp) {
0x0004af6c beq 0x4b06a | goto label_13;
| }
| label_4:
0x0004af6e cmp r1, sb |
0x0004af70 sbcs.w r0, r3, r8 | __asm ("sbcs.w r0, r3, r8");
0x0004af74 itt lt |
| if (r1 >= sb) {
0x0004af76 movlt sb, r1 | sb = r1;
| }
| if (r1 < sb) {
0x0004af78 movlt r8, r3 | r8 = r3;
| goto label_5;
| }
| }
| label_5:
0x0004af7a adds r6, 1 | r6++;
0x0004af7c adds r2, 0x18 | r2 += 0x18;
0x0004af7e cmp r5, r6 |
0x0004af80 bne 0x4af5e |
| } while (r5 != r6);
0x0004af82 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x0004af86 cmp r8, r3 |
0x0004af88 it eq |
| if (r8 == r3) {
0x0004af8a cmpeq sb, -1 | __asm ("cmpeq sb, -1");
| }
0x0004af8e ite eq |
| if (r8 != r3) {
0x0004af90 moveq r3, 1 | r3 = 1;
| }
| if (r8 == r3) {
0x0004af92 movne r3, 0 | r3 = 0;
| }
0x0004af94 cmp r4, 0 |
0x0004af96 it ne |
| if (r4 == 0) {
0x0004af98 orrne r3, r3, 1 | r3 |= 1;
| }
0x0004af9c cmp r3, 0 |
| if (r3 != 0) {
0x0004af9e bne 0x4b02e | goto label_14;
| }
0x0004afa0 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x0004afa2 ldr r4, [r7, 8] | r4 = *((r7 + 8));
0x0004afa4 adds r2, 0xf | r2 += 0xf;
0x0004afa6 cmp r2, r4 |
| if (r2 < r4) {
0x0004afa8 bls 0x4afd6 | goto label_15;
| }
0x0004afaa cmp r4, 0 |
0x0004afac it eq |
| if (r4 != 0) {
0x0004afae moveq r4, 0x40 | r4 = 0x40;
| }
0x0004afb0 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0004afb2 cmp r4, r2 |
0x0004afb4 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r4 >= r2) {
0x0004afb8 bhs 0x4afc6 | goto label_16;
| }
| do {
0x0004afba adds r4, r4, r4 | r4 += r4;
0x0004afbc adcs r3, r3 | __asm ("adcs r3, r3");
0x0004afbe cmp r4, r2 |
0x0004afc0 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x0004afc4 blo 0x4afba |
| } while (r4 <= r2);
| label_16:
0x0004afc6 ldr r0, [r7] | r0 = *(r7);
0x0004afc8 mov r2, r4 | r2 = r4;
0x0004afca blx 0x8500 | r0 = fcn_00008500 ();
0x0004afce cmp r0, 0 |
| if (r0 == 0) {
0x0004afd0 beq 0x4b09e | goto label_17;
| }
0x0004afd2 str r4, [r7, 8] | *((r7 + 8)) = r4;
0x0004afd4 str r0, [r7] | *(r7) = r0;
| label_15:
0x0004afd6 movs r4, 0 | r4 = 0;
0x0004afd8 mov r2, sb | r2 = sb;
0x0004afda mov r3, r8 | r3 = r8;
0x0004afdc add r1, sp, 0x18 | r1 += var_18h;
0x0004afde mov r0, r7 | r0 = r7;
0x0004afe0 bl 0x1d7d4 | fcn_0001d7d4 (r0, r1, r2, r3);
| label_6:
0x0004afe4 mov sl, sb | sl = sb;
0x0004afe6 mov fp, r8 |
0x0004afe8 b 0x4af52 | goto label_2;
| label_10:
0x0004afea mov r1, r3 | r1 = r3;
0x0004afec lsls r3, r7, 1 | r3 = r7 << 1;
0x0004afee add r7, r3 | r7 += r3;
0x0004aff0 str r3, [sp, 0x14] | var_14h = r3;
0x0004aff2 lsls r0, r7, 4 | r0 = r7 << 4;
0x0004aff4 blx 0x8240 | fcn_00008240 ();
0x0004aff8 str r0, [sp, 8] | var_8h = r0;
0x0004affa cmp r0, 0 |
| if (r0 == 0) {
0x0004affc beq 0x4b0a2 | goto label_18;
| }
0x0004affe ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004b000 lsls r2, r7, 3 | r2 = r7 << 3;
0x0004b002 mov r1, sb | r1 = sb;
0x0004b004 str r2, [sp, 0x14] | var_14h = r2;
0x0004b006 mov r7, r3 | r7 = r3;
0x0004b008 blx 0x8610 | fcn_00008610 ();
0x0004b00c ldr r2, [sp] | r2 = *(sp);
0x0004b00e cmp sb, r2 |
0x0004b010 ldr r2, [sp, 0x14] | r2 = var_14h;
| if (sb != r2) {
0x0004b012 beq 0x4b026 |
0x0004b014 mov r0, sb | r0 = sb;
0x0004b016 str r2, [sp, 0x14] | var_14h = r2;
0x0004b018 blx 0x8404 | fcn_00008404 ();
0x0004b01c ldr.w sb, [sp, 8] | sb = var_8h;
0x0004b020 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0004b022 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0004b024 b 0x4aef0 | goto label_3;
| }
0x0004b026 ldr.w sb, [sp, 8] | sb = var_8h;
0x0004b02a ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0004b02c b 0x4aef0 | goto label_3;
| label_14:
0x0004b02e ldr.w ip, [sp, 0x14] | ip = var_14h;
0x0004b032 mov r5, r4 | r5 = r4;
| if (r4 != 0) {
0x0004b034 cbnz r4, 0x4b042 | goto label_7;
| }
| label_12:
0x0004b036 ldr r3, [r7] | r3 = *(r7);
0x0004b038 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004b03a str r3, [r2] | *(r2) = r3;
0x0004b03c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0004b03e ldr r2, [sp, 0x10] | r2 = var_10h;
0x0004b040 str r3, [r2] | *(r2) = r3;
| do {
| label_7:
0x0004b042 ldr r3, [sp, 8] | r3 = var_8h;
0x0004b044 cmp r3, ip |
| if (r3 != ip) {
0x0004b046 beq 0x4b04e |
0x0004b048 mov r0, r3 | r0 = r3;
0x0004b04a blx 0x8404 | fcn_00008404 ();
| }
0x0004b04e ldr r2, [pc, 0x6c] |
0x0004b050 ldr r3, [pc, 0x64] | r3 = *(0x4b0b8);
0x0004b052 add r2, pc | r2 = 0x96114;
0x0004b054 ldr r3, [r2, r3] | r3 = *(0x96114);
0x0004b056 ldr r2, [r3] | r2 = *(0x96114);
0x0004b058 ldr r3, [sp, 0x84] | r3 = var_84h;
0x0004b05a eors r2, r3 | r2 ^= r3;
0x0004b05c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004b060 bne 0x4b0ae | goto label_19;
| }
0x0004b062 mov r0, r5 | r0 = r5;
0x0004b064 add sp, 0x8c |
0x0004b066 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x0004b06a ldrd r0, r1, [r2, -0x8] | __asm ("ldrd r0, r1, [r2, -0x8]");
0x0004b06e add.w r3, r2, 8 | r3 = r2 + 8;
0x0004b072 str r2, [sp] | *(sp) = r2;
0x0004b074 bl 0xcd58 | fcn_0000cd58 (r0, r1, r2, r3);
0x0004b078 ldr r2, [sp] | r2 = *(sp);
| if (r0 == 0) {
0x0004b07a cbnz r0, 0x4b082 |
0x0004b07c ldrd r1, r3, [r2, 8] | __asm ("ldrd r1, r3, [r2, 8]");
0x0004b080 b 0x4af6e | goto label_4;
| }
0x0004b082 mov.w r3, 1 | r3 = 1;
0x0004b086 strb r3, [r2, 5] | *((r2 + 5)) = r3;
0x0004b088 b 0x4af7a | goto label_5;
| label_11:
0x0004b08a ldr.w r3, [sb] | r3 = *(sb);
0x0004b08e mov r5, r4 | r5 = r4;
0x0004b090 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0004b092 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0004b094 str r3, [r1] | *(r1) = r3;
0x0004b096 ldr.w r3, [sb, 4] | r3 = var_4h_2;
0x0004b09a str r3, [r2] | *(r2) = r3;
0x0004b09c b 0x4b042 |
| } while (1);
| label_17:
0x0004b09e movs r4, 7 | r4 = 7;
| do {
0x0004b0a0 b 0x4afe4 | goto label_6;
| label_18:
0x0004b0a2 ldr.w ip, [sp] | ip = *(sp);
0x0004b0a6 movs r5, 7 | r5 = 7;
0x0004b0a8 str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h]");
0x0004b0ac b 0x4b042 | goto label_7;
| label_19:
0x0004b0ae blx 0x883c | fcn_0000883c ();
0x0004b0b2 nop |
0x0004b0b4 ble 0x4b0a0 |
| } while (r5 <= 7);
0x0004b0b6 movs r7, r0 | r7 = r0;
0x0004b0b8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0004b0ba movs r0, r0 |
| if (r0 <= r0) {
0x0004b0bc bgt 0x4b14c |
0x0004b0be movs r7, r0 | r7 = r0;
| }
0x0004b14c ldr r0, [r5] | r0 = *(r5);
0x0004b14e mov r2, r4 | r2 = r4;
0x0004b150 str r1, [sp, 4] | var_4h = r1;
0x0004b152 blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 == 0) {
0x0004b156 cbz r0, 0x4b170 | goto label_20;
| }
0x0004b158 ldr r1, [sp, 4] | r1 = var_4h;
0x0004b15a str r4, [r5, 8] | *((r5 + 8)) = r4;
0x0004b15c str r0, [r5] | *(r5) = r0;
0x0004b15e mov r0, r5 | r0 = r5;
0x0004b160 mov r2, r8 | r2 = r8;
0x0004b162 mov r3, r7 | r3 = r7;
0x0004b164 bl 0x1d7d4 | fcn_0001d7d4 (r0, r1, r2, r3);
0x0004b168 movs r0, 0 | r0 = 0;
| do {
0x0004b16a add sp, 0xc |
0x0004b16c pop.w {r4, r5, r7, r8, pc} |
| label_20:
0x0004b170 movs r0, 7 | r0 = 7;
0x0004b172 b 0x4b16a |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4b118 */
| #include <stdint.h>
|
; (fcn) fcn.0004b118 () | void fcn_0004b118 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004b118 push.w {r4, r5, r7, r8, lr} |
0x0004b11c mov r5, r0 | r5 = r0;
0x0004b11e ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x0004b120 sub sp, 0xc |
0x0004b122 mov r8, r2 | r8 = r2;
0x0004b124 mov r7, r3 | r7 = r3;
0x0004b126 ldr r4, [r5, 8] | r4 = *((r5 + 8));
0x0004b128 add.w ip, r0, 0xf |
0x0004b12c cmp ip, r4 |
| if (ip < r4) {
0x0004b12e bls 0x4b15e | void (*0x4b15e)() ();
| }
0x0004b130 cmp r4, 0 |
0x0004b132 it eq |
| if (r4 != 0) {
0x0004b134 moveq r4, 0x40 | r4 = 0x40;
| }
0x0004b136 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0004b138 cmp r4, ip |
0x0004b13a sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r4 >= ip) {
0x0004b13e bhs 0x4b14c | void (*0x4b14c)() ();
| }
| do {
0x0004b140 adds r4, r4, r4 | r4 += r4;
0x0004b142 adcs r3, r3 | __asm ("adcs r3, r3");
0x0004b144 cmp r4, ip |
0x0004b146 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
0x0004b14a blo 0x4b140 |
| } while (r4 <= ip);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4b30c */
| #include <stdint.h>
|
; (fcn) fcn.0004b30c () | void fcn_0004b30c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004b30c push.w {r4, r5, r6, r7, r8, lr} |
0x0004b310 mov r5, r1 | r5 = r1;
0x0004b312 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x0004b314 mov r6, r2 | r6 = r2;
0x0004b316 mov r7, r3 | r7 = r3;
0x0004b318 ldr r4, [r5, 8] | r4 = *((r5 + 8));
0x0004b31a add.w ip, r1, 9 |
0x0004b31e ldr r2, [r5] | r2 = *(r5);
0x0004b320 cmp ip, r4 |
| if (ip > r4) {
0x0004b322 bhi 0x4b366 | goto label_2;
| }
| label_0:
0x0004b324 cmp r6, 0x80 |
0x0004b326 add.w r0, r2, r1 | r0 = r2 + r1;
0x0004b32a sbcs r3, r7, 0 | __asm ("sbcs r3, r7, 0");
0x0004b32e itt lo |
| if (r6 >= 0x80) {
0x0004b330 movlo r4, 1 | r4 = 1;
| }
| if (r6 >= 0x80) {
0x0004b332 strblo r6, [r2, r1] | *((r2 + r1)) = r6;
| }
| if (r6 <= 0x80) {
0x0004b334 blo 0x4b34a | goto label_3;
| }
0x0004b336 cmp.w r6, 0x4000 |
0x0004b33a sbcs r3, r7, 0 | __asm ("sbcs r3, r7, 0");
| if (r6 <= 0x4000) {
0x0004b33e blo 0x4b354 | goto label_4;
| }
0x0004b340 mov r2, r6 | r2 = r6;
0x0004b342 mov r3, r7 | r3 = r7;
0x0004b344 bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x0004b348 mov r4, r0 | r4 = r0;
| do {
| label_3:
0x0004b34a ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0004b34c add r3, r4 | r3 += r4;
0x0004b34e str r3, [r5, 4] | *((r5 + 4)) = r3;
| label_1:
0x0004b350 pop.w {r4, r5, r6, r7, r8, pc} |
| label_4:
0x0004b354 lsrs r3, r6, 7 | r3 = r6 >> 7;
0x0004b356 and r6, r6, 0x7f | r6 &= 0x7f;
0x0004b35a movs r4, 2 | r4 = 2;
0x0004b35c strb r6, [r0, 1] | *((r0 + 1)) = r6;
0x0004b35e orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0004b362 strb r3, [r0] | *(r0) = r3;
0x0004b364 b 0x4b34a |
| } while (1);
| label_2:
0x0004b366 cmp r4, 0 |
0x0004b368 mov r8, r0 | r8 = r0;
0x0004b36a it eq |
| if (r4 != 0) {
0x0004b36c moveq r4, 0x40 | r4 = 0x40;
| }
0x0004b36e asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0004b370 cmp r4, ip |
0x0004b372 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r4 >= ip) {
0x0004b376 bhs 0x4b384 | goto label_5;
| }
| do {
0x0004b378 adds r4, r4, r4 | r4 += r4;
0x0004b37a adcs r3, r3 | __asm ("adcs r3, r3");
0x0004b37c cmp r4, ip |
0x0004b37e sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x0004b382 blo 0x4b378 |
| } while (r4 <= ip);
| label_5:
0x0004b384 mov r0, r2 | r0 = r2;
0x0004b386 mov r2, r4 | r2 = r4;
0x0004b388 blx 0x8500 | r0 = fcn_00008500 ();
0x0004b38c mov r2, r0 | r2 = r0;
| if (r0 != 0) {
0x0004b38e cbz r0, 0x4b398 |
0x0004b390 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0004b392 str r4, [r5, 8] | *((r5 + 8)) = r4;
0x0004b394 str r0, [r5] | *(r5) = r0;
0x0004b396 b 0x4b324 | goto label_0;
| }
0x0004b398 movs r3, 7 | r3 = 7;
0x0004b39a str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x0004b39e b 0x4b350 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4b3a0 */
| #include <stdint.h>
|
; (fcn) fcn.0004b3a0 () | void fcn_0004b3a0 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (r2 == 0) {
0x0004b3a0 cbz r2, 0x4b3fa | goto label_0;
| }
0x0004b3a2 push.w {r4, r5, r6, r7, r8, lr} |
0x0004b3a6 mov r7, r3 | r7 = r3;
0x0004b3a8 ldrd r3, r4, [r1, 4] | __asm ("ldrd r3, r4, [r1, 4]");
0x0004b3ac mov r8, r0 | r8 = r0;
0x0004b3ae mov r5, r1 | r5 = r1;
0x0004b3b0 mov r6, r2 | r6 = r2;
0x0004b3b2 ldr r0, [r1] | r0 = *(r1);
0x0004b3b4 add.w ip, r3, r2 |
0x0004b3b8 cmp ip, r4 |
| if (ip < r4) {
0x0004b3ba bls 0x4b3e6 | goto label_1;
| }
0x0004b3bc cmp r4, 0 |
0x0004b3be it eq |
| if (r4 != 0) {
0x0004b3c0 moveq r4, 0x40 | r4 = 0x40;
| }
0x0004b3c2 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0004b3c4 cmp r4, ip |
0x0004b3c6 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r4 >= ip) {
0x0004b3ca bhs 0x4b3d8 | goto label_2;
| }
| do {
0x0004b3cc adds r4, r4, r4 | r4 += r4;
0x0004b3ce adcs r3, r3 | __asm ("adcs r3, r3");
0x0004b3d0 cmp r4, ip |
0x0004b3d2 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
0x0004b3d6 blo 0x4b3cc |
| } while (r4 <= ip);
| label_2:
0x0004b3d8 mov r2, r4 | r2 = r4;
0x0004b3da blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 == 0) {
0x0004b3de cbz r0, 0x4b3fc | goto label_3;
| }
0x0004b3e0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0004b3e2 str r4, [r5, 8] | *((r5 + 8)) = r4;
0x0004b3e4 str r0, [r5] | *(r5) = r0;
| label_1:
0x0004b3e6 add r0, r3 | r0 += r3;
0x0004b3e8 mov r1, r7 | r1 = r7;
0x0004b3ea mov r2, r6 | r2 = r6;
0x0004b3ec blx 0x8610 | fcn_00008610 ();
0x0004b3f0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0004b3f2 add r3, r6 | r3 += r6;
0x0004b3f4 str r3, [r5, 4] | *((r5 + 4)) = r3;
| do {
0x0004b3f6 pop.w {r4, r5, r6, r7, r8, pc} |
| label_0:
0x0004b3fa bx lr | return;
| label_3:
0x0004b3fc movs r3, 7 | r3 = 7;
0x0004b3fe str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x0004b402 b 0x4b3f6 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4b404 */
| #include <stdint.h>
|
; (fcn) fcn.0004b404 () | void fcn_0004b404 (int16_t arg_20h, int16_t arg_24h, arithmetic x, int16_t arg_2ch, int16_t arg_34h, int16_t arg1) {
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_4h_3;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
0x0004b404 ldr r1, [pc, 0x9c] |
0x0004b406 movs r2, 0 | r2 = 0;
0x0004b408 ldr r3, [pc, 0x9c] | r3 = *(0x4b4a8);
0x0004b40a push {r4, r5, r6, r7, lr} |
0x0004b40c sub sp, 0xc |
0x0004b40e add r1, pc | r1 = 0x968b6;
0x0004b410 mov r4, r0 | r4 = r0;
0x0004b412 ldr r3, [r1, r3] |
0x0004b414 ldr r3, [r3] | r3 = *(0x968b6);
0x0004b416 str r3, [sp, 4] | var_4h = r3;
0x0004b418 mov.w r3, 0 | r3 = 0;
0x0004b41c ldr r3, [r0, 0x10] | r3 = *(arg_20hx10);
0x0004b41e str r2, [sp] | *(sp) = r2;
0x0004b420 ldrb r1, [r3, 0x10] | r1 = *((r3 + 0x10));
| if (r1 == 0) {
0x0004b422 cbz r1, 0x4b442 | goto label_19;
| }
0x0004b424 mov r0, r2 | r0 = r2;
0x0004b426 movs r3, 1 | r3 = 1;
0x0004b428 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| do {
0x0004b42a ldr r2, [pc, 0x80] |
0x0004b42c ldr r3, [pc, 0x78] | r3 = *(0x4b4a8);
0x0004b42e add r2, pc | r2 = 0x968e0;
0x0004b430 ldr r3, [r2, r3] | r3 = *(0x968e0);
0x0004b432 ldr r2, [r3] | r2 = *(0x968e0);
0x0004b434 ldr r3, [sp, 4] | r3 = var_4h;
0x0004b436 eors r2, r3 | r2 ^= r3;
0x0004b438 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004b43c bne 0x4b49e | goto label_20;
| }
0x0004b43e add sp, 0xc |
0x0004b440 pop {r4, r5, r6, r7, pc} |
| label_19:
0x0004b442 ldr r2, [r3, 0x48] | r2 = *((r3 + 0x48));
0x0004b444 ldrh r2, [r2, 4] | r2 = *((r2 + 4));
0x0004b446 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0004b44a add.w r2, r3, r2, lsl 5 | r2 = r3 + (r2 << 5);
0x0004b44e ldrd r5, r6, [r2, 0x94] | __asm ("ldrd r5, r6, [r2, 0x94]");
0x0004b452 subs r6, 1 | r6--;
| if (r5 != 0) {
0x0004b454 cbz r5, 0x4b458 |
0x0004b456 adds r5, 1 | r5++;
| }
0x0004b458 ldr r7, [r4, 0x18] | r7 = *((r4 + 0x18));
0x0004b45a cmp r7, 0 |
| if (r7 >= 0) {
0x0004b45c blt 0x4b482 |
0x0004b45e cmp r7, r6 |
0x0004b460 mov r2, r7 | r2 = r7;
0x0004b462 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x0004b464 it ge |
| if (r7 < r6) {
0x0004b466 movge r2, r6 | r2 = r6;
| }
0x0004b468 mov r1, r5 | r1 = r5;
0x0004b46a blx 0x8214 | r0 = sysconf ();
0x0004b46e cmp r0, 0 |
| if (r0 < 0) {
0x0004b470 blt 0x4b498 | goto label_21;
| }
0x0004b472 cmp r7, r6 |
0x0004b474 ite ge |
| if (r7 < r6) {
0x0004b476 movge r7, 0 | r7 = 0;
| }
| if (r7 >= r6) {
0x0004b478 movlt r7, 1 | r7 = 1;
| }
0x0004b47a cmp r0, 0 |
0x0004b47c it ne |
| if (r0 == 0) {
0x0004b47e movne r7, 0 | r7 = 0;
| }
| if (r7 != 0) {
0x0004b480 cbnz r7, 0x4b498 | goto label_21;
| }
| }
| label_0:
0x0004b482 movs r0, 0 | r0 = 0;
0x0004b484 mov r3, r5 | r3 = r5;
0x0004b486 str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x0004b488 mov r2, r6 | r2 = r6;
0x0004b48a mov r0, sp | r0 = sp;
0x0004b48c add.w r1, r4, 0x38 | r1 = r4 + 0x38;
0x0004b490 bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x0004b494 ldr r0, [sp] | r0 = *(sp);
0x0004b496 b 0x4b42a |
| } while (1);
| label_21:
0x0004b498 movs r3, 1 | r3 = 1;
0x0004b49a str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0004b49c b 0x4b482 | goto label_0;
| label_20:
0x0004b49e blx 0x883c | fcn_0000883c ();
0x0004b4a2 nop |
| if (r3 > 1) {
0x0004b4a4 bhi 0x4b3bc | void (*0x4b3bc)() ();
| }
0x0004b4a6 movs r7, r0 | r7 = r0;
0x0004b4a8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0004b4aa movs r0, r0 |
| if (r0 > r0) {
0x0004b4ac bhi 0x4b584 | goto label_22;
| }
0x0004b4ae movs r7, r0 | r7 = r0;
0x0004b4b0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004b4b4 sub sp, 0x3c |
0x0004b4b6 ldr r4, [pc, 0x2a4] |
0x0004b4b8 mov r7, r3 | r7 = r3;
0x0004b4ba add r5, sp, 0x28 | r5 += var_28h;
0x0004b4bc mov r6, r0 | r6 = r0;
0x0004b4be str r1, [sp, 0x14] | var_14h_2 = r1;
0x0004b4c0 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0004b4c2 add r4, pc | r4 = 0x96c24;
0x0004b4c4 ldr r1, [pc, 0x298] | r1 = *(0x4b760);
0x0004b4c6 str r3, [sp, 0x10] | var_10h_2 = r3;
0x0004b4c8 movs r3, 0 | r3 = 0;
0x0004b4ca ldr r1, [r4, r1] |
0x0004b4cc ldr r1, [r1] | r1 = *(0x96c24);
0x0004b4ce str r1, [sp, 0x34] | var_34h = r1;
0x0004b4d0 mov.w r1, 0 | r1 = 0;
0x0004b4d4 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x0004b4d6 str r3, [sp, 0x28] | var_28h = r3;
0x0004b4d8 strd r3, r3, [r5, 4] | __asm ("strd r3, r3, [var_30h]");
0x0004b4dc adds r2, r2, r1 | r2 += r1;
| if (r2 != r2) {
0x0004b4de bne.w 0x4b62a | goto label_23;
| }
0x0004b4e2 ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x0004b4e4 cmp r3, 0 |
| if (r3 != 0) {
0x0004b4e6 bne.w 0x4b64c | goto label_2;
| }
| label_1:
0x0004b4ea ldr r2, [sp, 0x14] | r2 = var_14h_2;
0x0004b4ec ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0004b4ee cmp r2, 0 |
0x0004b4f0 ittt le |
| if (r2 > 0) {
0x0004b4f2 movle sl, r3 | sl = r3;
| }
| if (r2 > 0) {
0x0004b4f4 movle r8, -1 | r8 = -1;
| }
| if (r2 <= 0) {
0x0004b4f8 str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h_2]");
| }
| if (r2 > 0) {
0x0004b4fc bgt.w 0x4b742 | goto label_24;
| }
| label_12:
0x0004b500 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0004b502 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0004b504 cmp r3, 0 |
0x0004b506 ittt le |
| if (r3 > 0) {
0x0004b508 movle r6, 0 | r6 = 0;
| }
| if (r3 > 0) {
0x0004b50a movle sb, -1 | sb = -1;
| }
| if (r3 <= 0) {
0x0004b50e mov r7, r6 | r7 = r6;
| }
| if (r3 > 0) {
0x0004b510 bgt.w 0x4b730 | goto label_25;
| }
| label_11:
0x0004b514 cmp.w r8, 0 |
0x0004b518 mov.w r3, 0 | r3 = 0;
0x0004b51c add r2, sp, 0x20 | r2 += var_20h;
0x0004b51e str r3, [sp, 8] | var_8h_2 = r3;
0x0004b520 str r2, [sp, 0x18] | var_18h_2 = r2;
0x0004b522 str r3, [sp, 0xc] | var_ch = r3;
0x0004b524 str r5, [sp, 0x1c] | var_1ch_2 = r5;
| if (r8 < 0) {
0x0004b526 blt.w 0x4b6a8 | goto label_26;
| }
| do {
| label_4:
0x0004b52a ldr.w fp, [sp, 4] | fp = var_4h;
0x0004b52e mov r4, sl | r4 = sl;
0x0004b530 lsr.w sl, sb, 0x1f | sl = sb >> 0x1f;
0x0004b534 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x0004b538 strd r6, r7, [sp, 8] | __asm ("strd r6, r7, [var_8h]");
| label_7:
0x0004b53c cmp r4, r6 |
0x0004b53e ldrd ip, r5, [sp, 0x28] | __asm ("ldrd ip, r5, [x]");
0x0004b542 sbcs.w r1, fp, r7 | __asm ("sbcs.w r1, fp, r7");
0x0004b546 ite ge |
| if (r4 < r6) {
0x0004b548 movge r1, sl | r1 = sl;
| }
| if (r4 >= r6) {
0x0004b54a orrlt r1, sl, 1 | r1 = sl | 1;
| }
0x0004b54e add.w r0, ip, r5 | r0 = ip + r5;
0x0004b552 cmp r1, 0 |
| if (r1 == 0) {
0x0004b554 beq.w 0x4b6e4 | goto label_27;
| }
0x0004b558 subs r2, r4, r2 | r2 = r4 - r2;
0x0004b55a sbc.w r3, fp, r3 | __asm ("sbc.w r3, fp, r3");
0x0004b55e cmp r2, 0x80 |
0x0004b560 sbcs ip, r3, 0 | __asm ("sbcs ip, r3, 0");
0x0004b564 itt lo |
| if (r2 >= 0x80) {
0x0004b566 strblo r2, [r0] | *(r0) = r2;
| }
| if (r2 >= 0x80) {
0x0004b568 movlo r0, 1 | r0 = 1;
| }
| if (r2 > 0x80) {
0x0004b56a blo 0x4b57c |
0x0004b56c cmp.w r2, 0x4000 |
0x0004b570 sbcs ip, r3, 0 | __asm ("sbcs ip, r3, 0");
| if (r2 <= 0x4000) {
0x0004b574 blo.w 0x4b6f0 | goto label_28;
| }
0x0004b578 bl 0x9758 | fcn_00009758 (r0, r1, r2);
| }
| label_9:
0x0004b57c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004b57e add r0, r5 | r0 += r5;
0x0004b580 str r0, [sp, 0x2c] | *(arg_2ch) = r0;
0x0004b582 ldr r3, [r3, 4] | r3 = *((r3 + 4));
| label_22:
0x0004b584 cmp r3, r8 |
| if (r3 > r8) {
0x0004b586 bgt.w 0x4b6c4 | goto label_29;
| }
0x0004b58a mov sl, r4 | sl = r4;
0x0004b58c mov.w r8, -1 | r8 = -1;
0x0004b590 str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
| label_5:
0x0004b594 cmp.w sb, -1 |
| if (sb == -1) {
0x0004b598 beq 0x4b5fe | goto label_3;
| }
0x0004b59a ldrd ip, r5, [sp, 0x28] | __asm ("ldrd ip, r5, [x]");
| label_8:
0x0004b59e subs r2, r6, r4 | r2 = r6 - r4;
0x0004b5a0 add.w r0, ip, r5 | r0 = ip + r5;
0x0004b5a4 sbc.w r3, r7, fp | __asm ("sbc.w r3, r7, fp");
0x0004b5a8 cmp r2, 0x80 |
0x0004b5aa sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x0004b5ae itt lo |
| if (r2 >= 0x80) {
0x0004b5b0 movlo r0, 1 | r0 = 1;
| }
| if (r2 >= 0x80) {
0x0004b5b2 strblo r2, [ip, r5] | *((ip + r5)) = r2;
| }
| if (r2 > 0x80) {
0x0004b5b6 blo 0x4b5c6 |
0x0004b5b8 cmp.w r2, 0x4000 |
0x0004b5bc sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x0004b5c0 blo 0x4b6b2 | goto label_30;
| }
0x0004b5c2 bl 0x9758 | fcn_00009758 (r0, r1, r2);
| }
| label_6:
0x0004b5c6 ldr r3, [sp, 4] | r3 = var_4h;
0x0004b5c8 add r0, r5 | r0 += r5;
0x0004b5ca str r0, [sp, 0x2c] | *(arg_2ch) = r0;
0x0004b5cc cmp r3, r7 |
0x0004b5ce it eq |
| if (r3 == r7) {
0x0004b5d0 cmpeq sl, r6 | __asm ("cmpeq sl, r6");
| }
0x0004b5d2 ite eq |
| if (r3 != r7) {
0x0004b5d4 moveq r3, 1 | r3 = 1;
| }
| if (r3 == r7) {
0x0004b5d6 movne r3, 0 | r3 = 0;
| }
0x0004b5d8 cmp.w r8, 0 |
0x0004b5dc ite lt |
| if (r8 >= 0) {
0x0004b5de movlt r3, 0 | r3 = 0;
| }
| if (r8 < 0) {
0x0004b5e0 andge r3, r3, 1 | r3 &= 1;
| }
0x0004b5e4 cmp r3, 0 |
| if (r3 != 0) {
0x0004b5e6 bne 0x4b674 | goto label_31;
| }
0x0004b5e8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004b5ea ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0004b5ec cmp r3, sb |
0x0004b5ee it gt |
| if (r3 <= sb) {
0x0004b5f0 ldrgt r1, [sp, 0x18] | r1 = var_18h;
| }
| if (r3 > sb) {
0x0004b5f2 bgt 0x4b68a | goto label_10;
| }
0x0004b5f4 cmp.w r8, 0 |
0x0004b5f8 mov.w sb, -1 | sb = -1;
0x0004b5fc bge 0x4b52a |
| } while (r8 >= 0);
| label_3:
0x0004b5fe ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0004b600 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0004b602 mov r0, r5 | r0 = r5;
0x0004b604 bl 0xc96c | fcn_0000c96c (r0, r1);
0x0004b608 ldr r2, [pc, 0x158] |
0x0004b60a ldr r3, [pc, 0x154] | r3 = *(0x4b762);
0x0004b60c add r2, pc | r2 = 0x96d74;
0x0004b60e ldr r3, [r2, r3] | r3 = *(0x96d74);
0x0004b610 ldr r2, [r3] | r2 = *(0x96d74);
0x0004b612 ldr r3, [sp, 0x34] | r3 = *(arg_34h);
0x0004b614 eors r2, r3 | r2 ^= r3;
0x0004b616 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004b61a bne.w 0x4b758 | goto label_32;
| }
0x0004b61e ldr r0, [sp, 0x28] | r0 = *(x);
0x0004b620 add sp, 0x3c |
0x0004b622 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004b626 b.w 0x8400 | void (*0x8400)() ();
| label_23:
0x0004b62a cmp r2, 0x40 |
0x0004b62c mov.w r4, 0x40 | r4 = 0x40;
| if (r2 < 0x40) {
0x0004b630 bls 0x4b63e | goto label_33;
| }
| do {
0x0004b632 adds r4, r4, r4 | r4 += r4;
0x0004b634 adcs r3, r3 | __asm ("adcs r3, r3");
0x0004b636 cmp r4, r2 |
0x0004b638 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x0004b63c blo 0x4b632 |
| } while (r4 <= r2);
| label_33:
0x0004b63e mov r2, r4 | r2 = r4;
0x0004b640 movs r0, 0 | r0 = 0;
0x0004b642 blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 == 0) {
0x0004b646 cbnz r0, 0x4b666 |
0x0004b648 movs r3, 7 | r3 = 7;
0x0004b64a str r3, [r6, 0x24] | *((r6 + 0x24)) = r3;
| label_2:
0x0004b64c ldr r2, [pc, 0x118] |
0x0004b64e ldr r3, [pc, 0x110] | r3 = *(0x4b762);
0x0004b650 add r2, pc | r2 = 0x96dbc;
0x0004b652 ldr r3, [r2, r3] | r3 = *(0x96dbc);
0x0004b654 ldr r2, [r3] | r2 = *(0x96dbc);
0x0004b656 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0004b658 eors r2, r3 | r2 ^= r3;
0x0004b65a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004b65e bne 0x4b758 | goto label_32;
| }
0x0004b660 add sp, 0x3c |
0x0004b662 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0004b666 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x0004b668 str r4, [sp, 0x30] | var_30h = r4;
0x0004b66a str r0, [sp, 0x28] | var_28h = r0;
0x0004b66c cmp r3, 0 |
| if (r3 == 0) {
0x0004b66e beq.w 0x4b4ea | goto label_1;
| }
0x0004b672 b 0x4b64c | goto label_2;
| label_31:
0x0004b674 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004b676 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0004b678 cmp r3, r8 |
| if (r3 > r8) {
0x0004b67a bgt 0x4b702 | goto label_34;
| }
0x0004b67c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004b67e ldr r3, [r3, 4] | r3 = *((r3 + 4));
| label_14:
0x0004b680 cmp r3, sb |
| if (r3 <= sb) {
0x0004b682 ble 0x4b5fe | goto label_3;
| }
0x0004b684 mov.w r8, -1 | r8 = -1;
0x0004b688 add r1, sp, 0x20 | r1 += arg_20h;
| label_10:
0x0004b68a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004b68c ldr r0, [r3] | r0 = *(r3);
0x0004b68e add r0, sb | r0 += sb;
0x0004b690 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x0004b694 ldr r3, [sp, 0x20] | r3 = *(arg_20h);
0x0004b696 add sb, r0 | sb += r0;
0x0004b698 adds r6, r6, r3 | r6 += r3;
0x0004b69a ldr r3, [sp, 0x24] | r3 = *(arg_24h);
0x0004b69c adc.w r7, r7, r3 | __asm ("adc.w r7, r7, r3");
0x0004b6a0 cmp.w r8, 0 |
| if (r8 >= 0) {
0x0004b6a4 bge.w 0x4b52a | goto label_4;
| }
| label_26:
0x0004b6a8 ldrd r4, fp, [sp, 8] | __asm ("ldrd r4, fp, [var_8h]");
0x0004b6ac strd r6, r7, [sp, 8] | __asm ("strd r6, r7, [var_8h]");
0x0004b6b0 b 0x4b594 | goto label_5;
| label_30:
0x0004b6b2 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x0004b6b4 and r4, r2, 0x7f | r4 = r2 & 0x7f;
0x0004b6b8 strb r4, [r0, 1] | *((r0 + 1)) = r4;
0x0004b6ba orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0004b6be strb r3, [r0] | *(r0) = r3;
0x0004b6c0 movs r0, 2 | r0 = 2;
0x0004b6c2 b 0x4b5c6 | goto label_6;
| label_29:
0x0004b6c4 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004b6c6 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0004b6c8 ldr r0, [r3] | r0 = *(r3);
0x0004b6ca add r0, r8 | r0 += r8;
0x0004b6cc bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x0004b6d0 ldr r3, [sp, 0x20] | r3 = *(arg_20h);
0x0004b6d2 mov r2, r4 | r2 = r4;
0x0004b6d4 ldr r1, [sp, 0x24] | r1 = *(arg_24h);
0x0004b6d6 add r8, r0 | r8 += r0;
0x0004b6d8 adds r3, r4, r3 | r3 = r4 + r3;
0x0004b6da mov r4, r3 | r4 = r3;
0x0004b6dc mov r3, fp | r3 = fp;
0x0004b6de adc.w fp, fp, r1 | __asm ("adc.w fp, fp, r1");
0x0004b6e2 b 0x4b53c | goto label_7;
| label_27:
0x0004b6e4 mov sl, r4 | sl = r4;
0x0004b6e6 str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x0004b6ea mov r4, r2 | r4 = r2;
0x0004b6ec mov fp, r3 |
0x0004b6ee b 0x4b59e | goto label_8;
| label_28:
0x0004b6f0 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x0004b6f2 and r2, r2, 0x7f | r2 &= 0x7f;
0x0004b6f6 strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x0004b6f8 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0004b6fc strb r3, [r0] | *(r0) = r3;
0x0004b6fe movs r0, 2 | r0 = 2;
0x0004b700 b 0x4b57c | goto label_9;
| label_34:
0x0004b702 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004b704 add r1, sp, 0x20 | r1 += arg_20h;
0x0004b706 ldr r0, [r3] | r0 = *(r3);
0x0004b708 add r0, r8 | r0 += r8;
0x0004b70a invalid |
| label_13:
0x0004b70c invalid |
0x0004b710 add r8, r0 | r8 += r0;
0x0004b712 ldr r2, [sp, 4] | r2 = var_4h;
0x0004b714 adds.w r3, sl, r3 | r3 = sl + r3;
0x0004b718 mov sl, r3 | sl = r3;
0x0004b71a ldr r3, [sp, 0x24] | r3 = *(arg_24h);
0x0004b71c adc.w r3, r2, r3 | __asm ("adc.w r3, r2, r3");
0x0004b720 str r3, [sp, 4] | var_4h = r3;
0x0004b722 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004b724 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0004b726 cmp r3, sb |
| if (r3 > sb) {
0x0004b728 bgt 0x4b68a | goto label_10;
| }
0x0004b72a mov.w sb, -1 | sb = -1;
0x0004b72e b 0x4b52a | goto label_4;
| label_25:
0x0004b730 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0004b732 add r1, sp, 0x20 | r1 += var_20h;
0x0004b734 ldr r0, [r3] | r0 = *(r3);
0x0004b736 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x0004b73a ldrd r6, r7, [sp, 0x20] | __asm ("ldrd r6, r7, [var_20h]");
0x0004b73e mov sb, r0 | sb = r0;
0x0004b740 b 0x4b514 | goto label_11;
| label_24:
0x0004b742 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0004b744 add r1, sp, 0x20 | r1 += var_20h;
0x0004b746 ldr r0, [r3] | r0 = *(r3);
0x0004b748 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x0004b74c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0004b74e mov r8, r0 | r8 = r0;
0x0004b750 ldr.w sl, [sp, 0x20] | sl = var_20h;
0x0004b754 str r3, [sp, 4] | var_4h_2 = r3;
0x0004b756 b 0x4b500 | goto label_12;
| label_32:
0x0004b758 blx 0x883c | fcn_0000883c ();
0x0004b75c bvc 0x4b70c | __asm ("bvc aav.0x000000ff");
| goto label_13;
0x0004b75e movs r7, r0 | r7 = r0;
0x0004b760 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0004b762 movs r0, r0 |
0x0004b764 bvs 0x4b680 | __asm ("bvs aav.0x000000ff");
| goto label_14;
0x0004b766 movs r7, r0 | r7 = r0;
0x0004b768 bvs 0x4b7fc | __asm ("bvs aav.0x000000ff");
0x0004b76a movs r7, r0 | r7 = r0;
0x0004b76c ldr r1, [r0, 0x24] | r1 = *((r0 + 0x24));
0x0004b76e push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x0004b772 ldr r5, [sp, 0x24] | r5 = var_4h;
0x0004b774 cmp r1, 0 |
| if (r1 == 0) {
0x0004b776 bne 0x4b812 |
0x0004b778 mov sb, r3 | sb = r3;
0x0004b77a ldr r3, [sp, 0x20] | r3 = var_0h;
0x0004b77c mov r6, r2 | r6 = r2;
0x0004b77e ldrd r2, r4, [r5, 4] | __asm ("ldrd r2, r4, [r5, 4]");
0x0004b782 mov r7, r0 | r7 = r0;
0x0004b784 ldr r0, [r5] | r0 = *(r5);
0x0004b786 ldr.w r8, [r3, 0xc] | r8 = *((r3 + 0xc));
0x0004b78a add.w r3, r8, 0x1a | r3 = r8 + 0x1a;
0x0004b78e add r3, r2 | r3 += r2;
0x0004b790 cmp r3, r4 |
| if (r3 > r4) {
0x0004b792 bhi 0x4b816 | goto label_35;
| }
| label_15:
0x0004b794 cmp r6, 0x80 |
0x0004b796 add.w r4, r0, r2 | r4 = r0 + r2;
0x0004b79a sbcs r3, sb, 0 | __asm ("sbcs r3, sb, 0");
0x0004b79e itt lo |
| if (r6 >= 0x80) {
0x0004b7a0 movlo r1, 1 | r1 = 1;
| }
| if (r6 >= 0x80) {
0x0004b7a2 strblo r6, [r0, r2] | *((r0 + r2)) = r6;
| }
| if (r6 > 0x80) {
0x0004b7a4 blo 0x4b7bc |
0x0004b7a6 cmp.w r6, 0x4000 |
0x0004b7aa sbcs r3, sb, 0 | __asm ("sbcs r3, sb, 0");
| if (r6 <= 0x4000) {
0x0004b7ae blo 0x4b844 | goto label_36;
| }
0x0004b7b0 mov r2, r6 | r2 = r6;
0x0004b7b2 mov r3, sb | r3 = sb;
0x0004b7b4 mov r0, r4 | r0 = r4;
0x0004b7b6 bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x0004b7ba mov r1, r0 | r1 = r0;
| }
| label_16:
0x0004b7bc ldrd r4, r3, [r5] | __asm ("ldrd r4, r3, [r5]");
0x0004b7c0 lsl.w r2, r8, 1 | r2 = r8 << 1;
0x0004b7c4 cmp r2, 0x80 |
0x0004b7c6 add r1, r3 | r1 += r3;
0x0004b7c8 asr.w r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0004b7cc str r1, [r5, 4] | *((r5 + 4)) = r1;
0x0004b7ce add.w r0, r4, r1 | r0 = r4 + r1;
0x0004b7d2 sbcs r6, r3, 0 | __asm ("sbcs r6, r3, 0");
0x0004b7d6 itt lo |
| if (r2 >= 0x80) {
0x0004b7d8 movlo r3, 1 | r3 = 1;
| }
| if (r2 >= 0x80) {
0x0004b7da strblo r2, [r4, r1] | *((r4 + r1)) = r2;
| }
| if (r2 > 0x80) {
0x0004b7dc blo 0x4b7ee |
0x0004b7de cmp.w r2, 0x4000 |
0x0004b7e2 sbcs r6, r3, 0 | __asm ("sbcs r6, r3, 0");
| if (r2 <= 0x4000) {
0x0004b7e6 blo 0x4b856 | goto label_37;
| }
0x0004b7e8 bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x0004b7ec mov r3, r0 | r3 = r0;
| }
| label_17:
0x0004b7ee ldrd r0, r2, [r5] | __asm ("ldrd r0, r2, [r5]");
0x0004b7f2 add r3, r2 | r3 += r2;
0x0004b7f4 mov r2, r8 | r2 = r8;
0x0004b7f6 add r0, r3 | r0 += r3;
0x0004b7f8 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x0004b7fa ldr r3, [sp, 0x20] | r3 = var_0h;
0x0004b7fc ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0004b7fe blx 0x8610 | fcn_00008610 ();
0x0004b802 ldrd r1, r3, [r5] | __asm ("ldrd r1, r3, [r5]");
0x0004b806 movs r2, 0 | r2 = 0;
0x0004b808 add r3, r8 | r3 += r8;
0x0004b80a adds r0, r1, r3 | r0 = r1 + r3;
0x0004b80c str r3, [r5, 4] | *((r5 + 4)) = r3;
0x0004b80e str r2, [r1, r3] | *((r1 + r3)) = r2;
0x0004b810 str r2, [r0, 4] | *((r0 + 4)) = r2;
| }
| label_18:
0x0004b812 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_35:
0x0004b816 cmp r4, 0 |
0x0004b818 it eq |
| if (r4 != 0) {
0x0004b81a moveq r4, 0x40 | r4 = 0x40;
| }
0x0004b81c asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x0004b81e cmp r4, r3 |
0x0004b820 sbcs r2, r1, 0 | __asm ("sbcs r2, r1, 0");
| if (r4 >= r3) {
0x0004b824 bhs 0x4b832 | goto label_38;
| }
| do {
0x0004b826 adds r4, r4, r4 | r4 += r4;
0x0004b828 adcs r1, r1 | __asm ("adcs r1, r1");
0x0004b82a cmp r4, r3 |
0x0004b82c sbcs r2, r1, 0 | __asm ("sbcs r2, r1, 0");
0x0004b830 blo 0x4b826 |
| } while (r4 <= r3);
| label_38:
0x0004b832 mov r3, r1 | r3 = r1;
0x0004b834 mov r2, r4 | r2 = r4;
0x0004b836 blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 != 0) {
0x0004b83a cbz r0, 0x4b868 |
0x0004b83c ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0004b83e str r4, [r5, 8] | *((r5 + 8)) = r4;
0x0004b840 str r0, [r5] | *(r5) = r0;
0x0004b842 b 0x4b794 | goto label_15;
| label_36:
0x0004b844 lsrs r3, r6, 7 | r3 = r6 >> 7;
0x0004b846 and r6, r6, 0x7f | r6 &= 0x7f;
0x0004b84a movs r1, 2 | r1 = 2;
0x0004b84c strb r6, [r4, 1] | *((r4 + 1)) = r6;
0x0004b84e orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0004b852 strb r3, [r4] | *(r4) = r3;
0x0004b854 b 0x4b7bc | goto label_16;
| label_37:
0x0004b856 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x0004b858 and r2, r2, 0x7f | r2 &= 0x7f;
0x0004b85c orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0004b860 strb r3, [r4, r1] | *((r4 + r1)) = r3;
0x0004b862 movs r3, 2 | r3 = 2;
0x0004b864 strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x0004b866 b 0x4b7ee | goto label_17;
| }
0x0004b868 movs r3, 7 | r3 = 7;
0x0004b86a str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x0004b86c b 0x4b812 | goto label_18;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4bff0 */
| #include <stdint.h>
|
; (fcn) fcn.0004bff0 () | void fcn_0004bff0 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004bff0 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0004bff4 mov r4, r2 | r4 = r2;
0x0004bff6 mov r8, r0 | r8 = r0;
0x0004bff8 mov sb, r1 | sb = r1;
0x0004bffa mov r2, r3 | r2 = r3;
0x0004bffc mov r1, r4 | r1 = r4;
0x0004bffe adds r0, 8 | r0 += 8;
0x0004c000 bl 0x3fc4c | fcn_0003fc4c (r0, r1, r2);
0x0004c004 ldr.w r7, [r8, 8] | r7 = *((r8 + 8));
0x0004c008 cmp r7, 0 |
| if (r7 != 0) {
0x0004c00a bne 0x4c0a8 | goto label_2;
| }
0x0004c00c ldrb r3, [r0] | r3 = *(r0);
0x0004c00e mov r6, r0 | r6 = r0;
0x0004c010 ldr.w r5, [r8] | r5 = *(r8);
0x0004c014 cmp r3, 0x27 |
0x0004c016 it ne |
| if (r3 != 0x27) {
0x0004c018 cmpne r3, 0x5b | __asm ("cmpne r3, 0x5b");
| }
| if (r3 != 0x27) {
0x0004c01a beq 0x4c024 |
0x0004c01c cmp r3, 0x60 |
0x0004c01e it ne |
| if (r3 != 0x60) {
0x0004c020 cmpne r3, 0x22 | __asm ("cmpne r3, 0x22");
| }
| if (r3 != 0x60) {
0x0004c022 bne 0x4c02a | goto label_3;
| }
| }
0x0004c024 mov r0, r6 | r0 = r6;
0x0004c026 bl 0xc740 | fcn_0000c740 (r0);
| label_3:
0x0004c02a ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0004c02c movs r4, 0 | r4 = 0;
0x0004c02e cmp r3, 0 |
| if (r3 > 0) {
0x0004c030 bgt 0x4c03a | goto label_4;
| }
0x0004c032 b 0x4c04c | goto label_5;
| do {
0x0004c034 adds r4, 1 | r4++;
0x0004c036 cmp r4, r3 |
| if (r4 >= r3) {
0x0004c038 bge 0x4c04c | goto label_5;
| }
| label_4:
0x0004c03a ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0004c03c mov r1, r6 | r1 = r6;
0x0004c03e ldr.w r0, [r3, r4, lsl 2] | offset_0 = r4 << 2;
| r0 = *((r3 + offset_0));
0x0004c042 blx 0x8540 | fcn_00008540 ();
0x0004c046 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0004c048 cmp r0, 0 |
0x0004c04a bne 0x4c034 |
| } while (r0 != 0);
| label_5:
0x0004c04c cmp r4, r3 |
| if (r4 == r3) {
0x0004c04e beq 0x4c096 | goto label_6;
| }
0x0004c050 cmp.w sb, 0 |
| if (sb == 0) {
0x0004c054 beq 0x4c0e4 | goto label_7;
| }
0x0004c056 ldr.w r5, [sb] | r5 = *(sb);
0x0004c05a movs r3, 0 | r3 = 0;
0x0004c05c mov r0, sb | r0 = sb;
0x0004c05e adds r2, r5, 2 | r2 = r5 + 2;
0x0004c060 lsls r2, r2, 2 | r2 <<= 2;
0x0004c062 blx 0x8500 | r0 = fcn_00008500 ();
0x0004c066 mov sl, r0 | sl = r0;
0x0004c068 cmp r0, 0 |
| if (r0 == 0) {
0x0004c06a beq 0x4c0f2 | goto label_8;
| }
0x0004c06c cmp r5, 0 |
0x0004c06e add.w r1, r0, 4 | r1 = r0 + 4;
0x0004c070 lsls r4, r0, 4 | r4 = r0 << 4;
| if (r4 <= r0) {
0x0004c072 ble 0x4c11e | goto label_9;
| }
0x0004c074 mov r3, r1 | r3 = r1;
0x0004c076 b 0x4c080 |
| if (r4 > r0) {
| while (r2 != r4) {
0x0004c078 bgt 0x4c0b8 | goto label_10;
| }
0x0004c07a adds r7, 1 | r7++;
0x0004c07c cmp r5, r7 |
| if (r5 == r7) {
0x0004c07e beq 0x4c100 | goto label_11;
| }
0x0004c080 ldr r2, [r3] | r2 = *(r3);
0x0004c082 mov r8, r3 | r8 = r3;
0x0004c084 adds r3, 4 | r3 += 4;
0x0004c086 cmp r2, r4 |
0x0004c088 bne 0x4c078 |
| }
0x0004c08a mov r0, r6 | r0 = r6;
0x0004c08c blx 0x8404 | fcn_00008404 ();
0x0004c090 mov r0, sl | r0 = sl;
0x0004c092 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x0004c096 ldr r1, [pc, 0x8c] |
0x0004c098 mov r0, r8 | r0 = r8;
0x0004c09a mov r2, r6 | r2 = r6;
0x0004c09c add r1, pc | r1 = 0x981c6;
0x0004c09e bl 0x4bf8c | fcn_0004bf8c (r0);
0x0004c0a2 mov r0, r6 | r0 = r6;
0x0004c0a4 blx 0x8404 | fcn_00008404 ();
| do {
| label_2:
0x0004c0a8 mov r0, sb | r0 = sb;
0x0004c0aa mov.w sl, 0 | sl = 0;
0x0004c0ae blx 0x8404 | fcn_00008404 ();
0x0004c0b2 mov r0, sl | r0 = sl;
0x0004c0b4 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_10:
0x0004c0b8 cmp r5, r7 |
| if (r5 > r7) {
0x0004c0ba ble 0x4c0ce |
0x0004c0bc adds r0, r7, 1 | r0 = r7 + 1;
0x0004c0be subs r2, r5, r7 | r2 = r5 - r7;
0x0004c0c0 lsls r0, r0, 2 | r0 <<= 2;
0x0004c0c2 lsls r2, r2, 2 | r2 <<= 2;
0x0004c0c4 subs r3, r0, 4 | r3 = r0 - 4;
0x0004c0c6 add r0, r1 | r0 += r1;
0x0004c0c8 add r1, r3 | r1 += r3;
0x0004c0ca blx 0x88c4 | fcn_000088c4 ();
| }
0x0004c0ce adds r5, 1 | r5++;
| label_1:
0x0004c0d0 str.w r4, [r8] | __asm ("str.w r4, [r8]");
0x0004c0d4 mov r0, r6 | r0 = r6;
0x0004c0d6 str.w r5, [sl] | __asm ("str.w r5, [sl]");
0x0004c0da blx 0x8404 | fcn_00008404 ();
| label_0:
0x0004c0de mov r0, sl | r0 = sl;
0x0004c0e0 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_7:
0x0004c0e4 movs r2, 8 | r2 = 8;
0x0004c0e6 movs r3, 0 | r3 = 0;
0x0004c0e8 mov r0, sb | r0 = sb;
0x0004c0ea blx 0x8500 | r0 = fcn_00008500 ();
0x0004c0ee mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x0004c0f0 cbnz r0, 0x4c116 | goto label_12;
| }
| label_8:
0x0004c0f2 movs r3, 7 | r3 = 7;
0x0004c0f4 mov r0, r6 | r0 = r6;
0x0004c0f6 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
0x0004c0fa blx 0x8404 | fcn_00008404 ();
0x0004c0fe b 0x4c0a8 |
| } while (1);
| label_11:
0x0004c100 add.w r8, r1, r5, lsl 2 | r8 = r1 + (r5 << 2);
0x0004c104 adds r5, 1 | r5++;
0x0004c106 mov r0, r6 | r0 = r6;
0x0004c108 str.w r4, [r8] | __asm ("str.w r4, [r8]");
0x0004c10c str.w r5, [sl] | __asm ("str.w r5, [sl]");
0x0004c110 blx 0x8404 | fcn_00008404 ();
0x0004c114 b 0x4c0de | goto label_0;
| label_12:
0x0004c116 add.w r8, sl, 4 | r8 = sl + 4;
0x0004c11a movs r5, 1 | r5 = 1;
0x0004c11c b 0x4c0d0 | goto label_1;
| label_9:
0x0004c11e adds r5, 1 | r5++;
0x0004c120 mov r8, r1 | r8 = r1;
0x0004c122 b 0x4c0d0 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4c380 */
| #include <stdint.h>
|
; (fcn) fcn.0004c380 () | void fcn_0004c380 (int16_t arg_4h, int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_24h, int16_t arg_26h, int16_t arg_2ch, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| arithmetic x;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_80h;
| int16_t var_98h;
| int16_t var_11ch;
| r0 = arg1;
| r1 = arg2;
0x0004c380 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004c384 sub sp, 0x124 |
0x0004c386 str r1, [sp, 0xc] | var_ch = r1;
0x0004c388 mov r8, r0 | r8 = r0;
0x0004c38a ldrb r3, [r1] | r3 = *(r1);
0x0004c38c ldr.w r1, [pc, 0xa54] |
0x0004c390 ldr r0, [r0, 0x18] | r0 = *((r0 + 0x18));
0x0004c392 ldr.w r2, [pc, 0xa54] | r2 = *(0x4cdea);
0x0004c396 cmp r3, 0x4b |
0x0004c398 add r1, pc | r1 = 0x99180;
0x0004c39a str r0, [sp, 0x2c] | var_2ch = r0;
0x0004c39c ldr r2, [r1, r2] |
0x0004c39e ldr r2, [r2] | r2 = *(0x99180);
0x0004c3a0 str r2, [sp, 0x11c] | var_11ch = r2;
0x0004c3a2 mov.w r2, 0 | r2 = 0;
0x0004c3a6 ldr r2, [r0] | r2 = *(r0);
0x0004c3a8 str r2, [sp, 0x20] | var_20h = r2;
| if (r3 > 0x4b) {
0x0004c3aa bhi 0x4c470 | goto label_86;
| }
0x0004c3ac cmp r3, 0x13 |
| if (r3 < 0x13) {
0x0004c3ae bls 0x4c444 | goto label_0;
| }
0x0004c3b0 subs r3, 0x14 | r3 -= 0x14;
0x0004c3b2 cmp r3, 0x37 |
| if (r3 > 0x37) {
0x0004c3b4 bhi 0x4c444 | goto label_0;
| }
| /* switch table (57 cases) at 0x4c3ba */
0x0004c3b6 tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
0x0004c42a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0004c42c movw r1, 0x44a7 | r1 = 0x44a7;
0x0004c430 ldr r4, [sp, 0xc] | r4 = var_ch;
0x0004c432 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0004c434 ldrh r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0004c436 ldr r0, [r2, 0x18] | r0 = *((r2 + 0x18));
0x0004c438 ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x0004c43a subs r3, 1 | r3--;
0x0004c43c strh r1, [r4] | *(r4) = r1;
0x0004c43e str r0, [r4, 0x2c] | *((r4 + 0x2c)) = r0;
0x0004c440 strh r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x0004c442 str r2, [r4, 0x1c] | *((r4 + 0x1c)) = r2;
| do {
| label_0:
0x0004c444 invalid |
0x0004c446 ldr r0, [r3, 0x24] | r0 = *((r3 + 0x24));
0x0004c448 subs r0, 0 |
0x0004c44a it ne |
| if (r0 == 0) {
0x0004c44c movne r0, 1 | r0 = 1;
| }
0x0004c44e lsls r0, r0, 1 | r0 <<= 1;
| label_1:
0x0004c450 ldr.w r2, [pc, 0x998] |
0x0004c454 ldr.w r3, [pc, 0x990] | r3 = *(0x4cde8);
0x0004c458 add r2, pc | r2 = 0x99248;
0x0004c45a ldr r3, [r2, r3] | r3 = *(0x99248);
0x0004c45c ldr r2, [r3] | r2 = *(0x99248);
0x0004c45e ldr r3, [sp, 0x11c] | r3 = var_11ch;
0x0004c460 eors r2, r3 | r2 ^= r3;
0x0004c462 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004c466 bne.w 0x4dd94 | goto label_87;
| }
0x0004c46a add sp, 0x124 |
0x0004c46c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_86:
0x0004c470 add.w r2, r3, 0x76 | r2 = r3 + 0x76;
0x0004c474 uxtb r2, r2 | r2 = (int8_t) r2;
0x0004c476 cmp r2, 0x22 |
0x0004c478 bhi 0x4c444 |
| } while (r2 > 0x22);
0x0004c47a subs r3, 0x8a | r3 -= 0x8a;
0x0004c47c cmp r3, 0x22 |
| if (r3 > 0x22) {
0x0004c47e bhi 0x4c444 | goto label_0;
| }
0x0004c480 adr r2, 8 | r2 = 8;
0x0004c482 ldr.w r3, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r2 + offset_0));
0x0004c486 add r2, r3 | r2 += r3;
| /* switch table (35 cases) at 0x4c48c */
0x0004c488 bx r2 | return uint32_t (*r2)() ();
0x0004c518 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004c51a ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
| if (r4 != 0) {
0x0004c51c cbnz r4, 0x4c52c | goto label_88;
| }
0x0004c51e b 0x4c540 | goto label_2;
| do {
0x0004c520 lsls r5, r3, 0xc | r5 = r3 << 0xc;
0x0004c522 itet mi |
| if (r5 >= r3) {
0x0004c524 ldrmi r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| }
| if (r5 < r3) {
0x0004c526 ldrpl r4, [r4, 0xc] | r4 = *((r4 + 0xc));
| }
| if (r5 >= r3) {
0x0004c528 ldrmi r4, [r3, 8] | r4 = *((r3 + 8));
| }
| if (r4 == 0) {
0x0004c52a cbz r4, 0x4c540 | goto label_2;
| }
| label_88:
0x0004c52c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0004c52e ands r5, r3, 0x82000 | r5 = r3 & 0x82000;
0x0004c532 bne 0x4c520 |
| } while (r5 != r3);
0x0004c534 ldrb r3, [r4] | r3 = *(r4);
0x0004c536 cmp r3, 0xaa |
0x0004c538 it ne |
| if (r3 != 0xaa) {
0x0004c53a cmpne r3, 0x3b | __asm ("cmpne r3, 0x3b");
| }
| if (r3 == 0xaa) {
0x0004c53c beq.w 0x4c9a0 | goto label_89;
| }
| label_2:
0x0004c540 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004c542 ldr r3, [r3] | r3 = *(r3);
0x0004c544 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0004c548 cmp r3, 0 |
| if (r3 != 0) {
0x0004c54a bne.w 0x4c444 | goto label_0;
| }
0x0004c54e ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004c550 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0004c552 ldrb r2, [r3] | r2 = *(r3);
0x0004c554 cmp r2, 0xb0 |
0x0004c556 it eq |
| if (r2 != 0xb0) {
0x0004c558 ldrbeq r2, [r3, 2] | r2 = *((r3 + 2));
| }
0x0004c55a cmp r2, 0xb1 |
| if (r2 == 0xb1) {
0x0004c55c beq.w 0x4d798 | goto label_90;
| }
0x0004c560 cmp r2, 0x8a |
0x0004c562 itett eq |
| if (r2 != 0x8a) {
0x0004c564 ldreq r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
| if (r2 == 0x8a) {
0x0004c566 movne r3, 1 | r3 = 1;
| }
| if (r2 != 0x8a) {
0x0004c568 ldreq r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| }
| if (r2 != 0x8a) {
0x0004c56a ldreq r3, [r3] | r3 = *(r3);
| }
| label_66:
0x0004c56c ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004c56e ldrb r2, [r2] | r2 = *(r2);
0x0004c570 cmp r2, 0x30 |
0x0004c572 ldr r2, [sp, 0xc] | r2 = var_ch;
| if (r2 == 0x30) {
0x0004c574 beq.w 0x4cc7c | goto label_91;
| }
0x0004c578 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x0004c57a ldrb r1, [r2] | r1 = *(r2);
0x0004c57c cmp r1, 0xb0 |
| if (r1 == 0xb0) {
0x0004c57e beq.w 0x4cca4 | goto label_92;
| }
| label_8:
0x0004c582 cmp r1, 0xb1 |
| if (r1 == 0xb1) {
0x0004c584 beq.w 0x4d7b0 | goto label_93;
| }
0x0004c588 cmp r1, 0x8a |
0x0004c58a itett eq |
| if (r1 != 0x8a) {
0x0004c58c ldreq r2, [r2, 0x14] | r2 = *((r2 + 0x14));
| }
| if (r1 == 0x8a) {
0x0004c58e movne r2, 1 | r2 = 1;
| }
| if (r1 != 0x8a) {
0x0004c590 ldreq r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
| }
| if (r1 != 0x8a) {
0x0004c592 ldreq r2, [r2] | r2 = *(r2);
| }
| label_67:
0x0004c594 cmp r2, r3 |
| if (r2 == r3) {
0x0004c596 beq.w 0x4c444 | goto label_0;
| }
| label_7:
0x0004c59a ldr r4, [sp, 0x20] | r4 = var_20h;
0x0004c59c ldr.w r1, [pc, 0x850] | r1 = *(0x0004cdf0);
0x0004c5a0 mov r0, r4 | r0 = r4;
0x0004c5a2 add r1, pc | r1 += pc;
0x0004c5a4 bl 0x21598 | fcn_00021598 (r0, r1);
0x0004c5a8 ldr r2, [r4] | r2 = *(r4);
0x0004c5aa ldr r1, [sp, 0xc] | r1 = var_ch;
| do {
0x0004c5ac ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0004c5ae lsls r0, r3, 0x1e | r0 = r3 << 0x1e;
| if (r0 == r3) {
0x0004c5b0 bne 0x4c5ba |
0x0004c5b2 ldr r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x0004c5b4 cmp r3, 0 |
| if (r3 > 0) {
0x0004c5b6 bgt.w 0x4d58e | goto label_94;
| }
| }
0x0004c5ba ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x0004c5bc cmp r1, 0 |
0x0004c5be bne 0x4c5ac |
| } while (r1 != 0);
0x0004c5c0 b 0x4c444 | goto label_0;
0x0004c5c2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0004c5c4 add r5, sp, 0x98 | r5 += var_98h;
0x0004c5c6 mov r0, r5 | r0 = r5;
0x0004c5c8 movs r2, 0 | r2 = 0;
| do {
0x0004c5ca ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x0004c5cc adds r2, 1 | r2++;
0x0004c5ce ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0004c5d0 str r1, [r0, 4]! | *((r0 += 4)) = r1;
0x0004c5d4 subs r1, r3, 0 | r1 = r3 - 0;
0x0004c5d6 it ne |
| if (r1 == r3) {
0x0004c5d8 movne r1, 1 | r1 = 1;
| }
0x0004c5da cmp r2, 7 |
0x0004c5dc it gt |
| if (r2 <= 7) {
0x0004c5de movgt r1, 0 | r1 = 0;
| }
0x0004c5e0 cmp r1, 0 |
0x0004c5e2 bne 0x4c5ca |
| } while (r1 != 0);
0x0004c5e4 ldr r6, [sp, 0xc] | r6 = var_ch;
0x0004c5e6 ldr r4, [r6, 0xc] | r4 = *((r6 + 0xc));
| if (r4 != 0) {
0x0004c5e8 cbz r4, 0x4c5f4 |
0x0004c5ea mov r1, r4 | r1 = r4;
0x0004c5ec mov r0, r8 | r0 = r8;
0x0004c5ee bl 0x30f3c | fcn_00030f3c (r0, r1);
0x0004c5f2 ldr r4, [r6, 0xc] | r4 = *((r6 + 0xc));
| }
0x0004c5f4 mov r0, r4 | r0 = r4;
0x0004c5f6 bl 0xa934 | r0 = fcn_0000a934 (r0);
0x0004c5fa mov r3, r0 | r3 = r0;
| if (r0 == 0) {
0x0004c5fc cbnz r0, 0x4c60a |
0x0004c5fe ldr r2, [sp, 0x20] | r2 = var_20h;
0x0004c600 ldrb.w r2, [r2, 0xd0] | r2 = *((r2 + 0xd0));
0x0004c604 cmp r2, 1 |
| if (r2 < 1) {
0x0004c606 bls.w 0x4cc2e | goto label_95;
| }
| }
| label_6:
0x0004c60a movs r0, 1 | r0 = 1;
0x0004c60c b 0x4c450 | goto label_1;
0x0004c62c ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004c62e ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0004c630 lsls r6, r3, 0x13 | r6 = r3 << 0x13;
| if (r6 >= r3) {
0x0004c632 bpl.w 0x4c444 | goto label_0;
| }
0x0004c636 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0004c638 ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x0004c63a ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
0x0004c63c tst.w r1, 0x2e |
| if ((r1 & 0x2e) != 0) {
0x0004c640 bne.w 0x4cca8 | goto label_96;
| }
0x0004c644 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004c646 mov r0, r8 | r0 = r8;
0x0004c648 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x0004c64a bl 0x31b70 | fcn_00031b70 (r0, r1, r2, r3, r4, r5);
| label_9:
0x0004c64e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0004c650 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x0004c652 cmp r3, r4 |
| if (r3 == r4) {
0x0004c654 beq.w 0x4c444 | goto label_0;
| }
0x0004c658 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0004c65a ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x0004c65c ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0004c65e orr r3, r3, 0x40 | r3 |= 0x40;
0x0004c662 orr r2, r2, 0x40 | r2 |= 0x40;
0x0004c666 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x0004c668 str r3, [r1, 0x18] | *((r1 + 0x18)) = r3;
0x0004c66a b 0x4c444 | goto label_0;
| label_89:
0x0004c9a0 mov r0, r8 | r0 = r8;
0x0004c9a2 mov r1, r4 | r1 = r4;
0x0004c9a4 bl 0x4c380 | r0 = fcn_0004c380 (r0, r1, r2, r3, r4, r5, r6);
0x0004c9a8 cmp r0, 2 |
| if (r0 == 2) {
0x0004c9aa beq.w 0x4c450 | goto label_1;
| }
0x0004c9ae ldrb r3, [r4] | r3 = *(r4);
0x0004c9b0 cmp r3, 0xaa |
| if (r3 != 0xaa) {
0x0004c9b2 bne.w 0x4c540 | goto label_2;
| }
0x0004c9b6 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0004c9b8 movs r2, 0xaf | r2 = 0xaf;
0x0004c9ba mov r0, r5 | r0 = r5;
0x0004c9bc ldrb r3, [r1] | r3 = *(r1);
0x0004c9be strb r2, [r1] | *(r1) = r2;
0x0004c9c0 strb r3, [r1, 2] | *((r1 + 2)) = r3;
0x0004c9c2 b 0x4c450 | goto label_1;
0x0004c9c4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004c9c6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004c9c8 ldr r3, [r3] | r3 = *(r3);
0x0004c9ca ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x0004c9cc str r3, [sp, 0x40] | var_40h = r3;
0x0004c9ce movs r3, 0 | r3 = 0;
0x0004c9d0 mov fp, r3 |
0x0004c9d2 str r3, [sp, 0x80] | var_80h = r3;
0x0004c9d4 mov.w r3, -1 | r3 = -1;
0x0004c9d8 str r1, [sp, 0x1c] | var_1ch = r1;
0x0004c9da str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x0004c9dc str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_18h]");
0x0004c9e0 strd fp, fp, [sp, 0x38] | __asm ("strd fp, fp, [var_0hx38]");
0x0004c9e4 ldr.w sl, [pc, 0x424] |
0x0004c9e8 ldr.w r3, [pc, 0x424] | r3 = *(0x0004ce10);
0x0004c9ec ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x0004c9f0 add sl, pc | sl = 0x99800;
0x0004c9f2 add r3, pc | r3 += pc;
0x0004c9f4 str.w sl, [sp, 0x5c] | __asm ("str.w sl, [var_5ch]");
0x0004c9f8 mov sl, fp | sl = fp;
0x0004c9fa mov fp, r8 |
0x0004c9fc str r3, [sp, 0x50] | var_50h = r3;
0x0004c9fe movs r3, 0 | r3 = 0;
0x0004ca00 str r3, [sp, 0x24] | var_24h = r3;
0x0004ca02 str r3, [sp, 0x4c] | var_4ch = r3;
0x0004ca04 str r3, [sp, 0x28] | var_28h = r3;
| label_12:
0x0004ca06 ldr.w lr, [fp, 4] |
0x0004ca0a cmp.w lr, 0 |
| if (lr != 0) {
0x0004ca0e bne.w 0x4cdc0 | goto label_97;
| }
0x0004ca12 mov r4, sl | r4 = sl;
0x0004ca14 str.w lr, [sp, 0x10] | __asm ("str.w lr, [var_10h]");
| label_36:
0x0004ca18 cmp r4, 0 |
| if (r4 != 0) {
0x0004ca1a bne.w 0x4ccfc | goto label_98;
| }
0x0004ca1e ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004ca20 ldr.w r8, [fp, 0x18] | r8 = *(arg_18h);
0x0004ca24 ldr.w sb, [r3, 0x78] | sb = *((r3 + 0x78));
0x0004ca28 cmp.w sb, 0 |
| if (sb == 0) {
0x0004ca2c beq.w 0x4d31c | goto label_99;
| }
0x0004ca30 ldrb.w r2, [r3, 0x95] | r2 = *((r3 + 0x95));
0x0004ca34 ldrb.w r3, [r3, 0x94] | r3 = *((r3 + 0x94));
0x0004ca38 cmp r2, 0 |
| if (r2 == 0) {
0x0004ca3a beq.w 0x4d2cc | goto label_100;
| }
0x0004ca3e tst.w r8, 0x400 |
| if ((r8 & 0x400) == 0) {
0x0004ca42 beq.w 0x4d37a | goto label_101;
| }
0x0004ca46 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004ca48 cmp r2, 0 |
| if (r2 == 0) {
0x0004ca4a beq.w 0x4d44a | goto label_102;
| }
0x0004ca4e ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004ca50 ldr.w r1, [sb] | r1 = *(sb);
0x0004ca54 ldr r5, [pc, 0x3bc] |
0x0004ca56 subs r6, r2, 1 | r6 = r2 - 1;
0x0004ca58 subs r1, 1 | r1--;
0x0004ca5a mov r0, r6 | r0 = r6;
0x0004ca5c add r5, pc | r5 = 0x99874;
| do {
| label_38:
0x0004ca5e ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x0004ca62 ldrb r7, [r1, 1]! | r7 = *((r1 += 1));
0x0004ca66 cmp r2, r7 |
| if (r2 == r7) {
0x0004ca68 beq.w 0x4d240 | goto label_103;
| }
0x0004ca6c add r2, r5 | r2 += r5;
0x0004ca6e add r7, r5 | r7 += r5;
0x0004ca70 ldrb.w ip, [r2, 0x140] | ip = *((r2 + 0x140));
0x0004ca74 ldrb.w r2, [r7, 0x140] | r2 = *((r7 + 0x140));
0x0004ca78 cmp ip, r2 |
0x0004ca7a beq 0x4ca5e |
| } while (ip == r2);
0x0004ca7c tst.w r8, 0x200 |
| if ((r8 & 0x200) == 0) {
0x0004ca80 beq.w 0x4d1e0 | goto label_44;
| }
| label_56:
0x0004ca84 ldr.w r5, [fp, 8] | r5 = *(arg_8h);
0x0004ca88 mov.w sb, 0 | sb = 0;
0x0004ca8c cmp r5, 0 |
| if (r5 == 0) {
0x0004ca8e beq.w 0x4d1e0 | goto label_44;
| }
| label_40:
0x0004ca92 ldr r1, [pc, 0x384] |
0x0004ca94 mov r0, r6 | r0 = r6;
0x0004ca96 ldr r6, [pc, 0x384] |
0x0004ca98 add r1, pc | r1 = 0x998b6;
0x0004ca9a add r6, pc | r6 = 0x998bc;
| do {
| label_10:
0x0004ca9c ldrb r3, [r1], 1 | r3 = *(r1);
| r1++;
0x0004caa0 ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x0004caa4 cmp r3, r2 |
| if (r3 == r2) {
0x0004caa6 beq.w 0x4cce8 | goto label_104;
| }
0x0004caaa add r3, r6 | r3 += r6;
0x0004caac add r2, r6 | r2 += r6;
0x0004caae ldrb.w r7, [r3, 0x140] | r7 = *((r3 + 0x140));
0x0004cab2 ldrb.w r3, [r2, 0x140] | r3 = *((r2 + 0x140));
0x0004cab6 cmp r7, r3 |
0x0004cab8 beq 0x4ca9c |
| } while (r7 == r3);
| label_11:
0x0004caba cmp.w sb, 0 |
| if (sb == 0) {
0x0004cabe beq.w 0x4d1e0 | goto label_44;
| }
| label_39:
0x0004cac2 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0004cac4 cmp r2, 0 |
| if (r2 == 0) {
0x0004cac6 beq.w 0x4d4be | goto label_105;
| }
0x0004caca ldrb r3, [r2] | r3 = *(r2);
0x0004cacc cmp r3, 0 |
| if (r3 == 0) {
0x0004cace beq.w 0x4d6f8 | goto label_106;
| }
0x0004cad2 ldr r1, [pc, 0x34c] |
0x0004cad4 movs r6, 0 | r6 = 0;
0x0004cad6 add r1, pc | r1 = 0x998fc;
| do {
0x0004cad8 add r3, r1 | r3 += r1;
0x0004cada ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0004cade add r6, r3 | r6 += r3;
0x0004cae0 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0004cae4 uxtb r6, r6 | r6 = (int8_t) r6;
0x0004cae6 cmp r3, 0 |
0x0004cae8 bne 0x4cad8 |
| } while (r3 != 0);
| label_59:
0x0004caea ldrsh.w r5, [sb, 0x22] | r5 = *((sb + 0x22));
0x0004caee ldr.w r3, [sb, 0x3c] | r3 = *((sb + 0x3c));
0x0004caf2 ldr.w r7, [sb, 4] | r7 = *((sb + 4));
0x0004caf6 cmp r5, 0 |
0x0004caf8 str r3, [sp, 0x3c] | x = r3;
| if (r5 <= 0) {
0x0004cafa ble.w 0x4d1c0 | goto label_107;
| }
0x0004cafe ldr r0, [pc, 0x324] |
0x0004cb00 adds r7, 0xc | r7 += 0xc;
0x0004cb02 ldr.w ip, [sp, 0x1c] | ip = var_1ch;
0x0004cb06 add r0, pc | r0 = 0x99930;
0x0004cb08 b 0x4cb14 |
| while (r3 != r6) {
| label_3:
0x0004cb0a adds r4, 1 | r4++;
0x0004cb0c adds r7, 0xc | r7 += 0xc;
0x0004cb0e cmp r4, r5 |
| if (r4 == r5) {
0x0004cb10 beq.w 0x4d3e8 | goto label_108;
| }
0x0004cb14 ldrb r3, [r7, -0x5] | r3 = *((r7 - 0x5));
0x0004cb18 cmp r3, r6 |
0x0004cb1a bne 0x4cb0a |
| }
0x0004cb1c ldr r3, [r7, -0xc] | r3 = *((r7 - 0xc));
0x0004cb20 add.w r1, ip, -1 | r1 = ip + -1;
0x0004cb24 add.w lr, r3, -1 | lr = r3 + -1;
| label_5:
0x0004cb28 ldrb r3, [lr, 1]! | r3 = *((lr += 1));
0x0004cb2c ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0004cb30 cmp r3, r2 |
| if (r3 == r2) {
0x0004cb32 beq 0x4cb50 | goto label_109;
| }
| label_4:
0x0004cb34 add r3, r0 | r3 += r0;
0x0004cb36 add r2, r0 | r2 += r0;
0x0004cb38 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0004cb3c ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x0004cb40 cmp r3, r2 |
| if (r3 != r2) {
0x0004cb42 bne 0x4cb0a | goto label_3;
| }
0x0004cb44 ldrb r3, [lr, 1]! | r3 = *((lr += 1));
0x0004cb48 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0004cb4c cmp r3, r2 |
| if (r3 != r2) {
0x0004cb4e bne 0x4cb34 | goto label_4;
| }
| label_109:
0x0004cb50 cmp r3, 0 |
| if (r3 != 0) {
0x0004cb52 bne 0x4cb28 | goto label_5;
| }
0x0004cb54 ldrsh.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x0004cb58 cmp r3, r4 |
| if (r3 == r4) {
0x0004cb5a beq.w 0x4d5ac | goto label_110;
| }
0x0004cb5e cmp r5, r4 |
| if (r5 <= r4) {
0x0004cb60 ble.w 0x4d3e8 | goto label_108;
| }
| label_33:
0x0004cb64 mov r8, fp | r8 = fp;
| label_53:
0x0004cb66 sxth r1, r4 | __asm ("sxth r1, r4");
| label_62:
0x0004cb68 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004cb6a ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0004cb6c cmp r3, 2 |
| if (r3 == 2) {
0x0004cb6e beq.w 0x4d4a4 | goto label_111;
| }
0x0004cb72 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004cb74 str.w sb, [r2, 0x2c] | __asm ("str.w sb, [r2, 0x2c]");
0x0004cb78 ldr r2, [sp, 0x20] | r2 = var_20h;
0x0004cb7a ldrb.w r2, [r2, 0x95] | r2 = *((r2 + 0x95));
0x0004cb7e cmp r2, 0 |
| if (r2 != 0) {
0x0004cb80 bne.w 0x4d696 | goto label_112;
| }
0x0004cb84 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004cb86 adds r0, r4, 1 | r0 = r4 + 1;
0x0004cb88 it eq |
| if (r0 != r4) {
0x0004cb8a moveq r3, 0x44 | r3 = 0x44;
| }
0x0004cb8c strh r1, [r2, 0x20] | *((r2 + 0x20)) = r1;
0x0004cb8e it eq |
| if (r0 != r4) {
0x0004cb90 strbeq r3, [r2, 1] | *((r2 + 1)) = r3;
| }
| if (r0 != r4) {
0x0004cb92 beq 0x4cbb4 |
0x0004cb94 cmp r3, 0 |
| if (r3 != 0) {
0x0004cb96 bne.w 0x4d5b8 | goto label_113;
| }
0x0004cb9a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004cb9c cmp r4, 0x1f |
0x0004cb9e ldr.w r2, [r3, 0x8c] | r2 = *((r3 + 0x8c));
0x0004cba2 ittet le |
| if (r4 > 0x1f) {
0x0004cba4 movle r3, 1 | r3 = 1;
| }
| if (r4 > 0x1f) {
0x0004cba6 lslle r3, r4 | r3 <<= r4;
| }
| if (r4 <= 0x1f) {
0x0004cba8 movgt r3, -1 | r3 = -1;
| }
| if (r4 <= 0x1f) {
0x0004cbac orrs r3, r2 | r3 |= r2;
| }
0x0004cbae ldr r2, [sp, 0x20] | r2 = var_20h;
0x0004cbb0 str.w r3, [r2, 0x8c] | __asm ("str.w r3, [r2, 0x8c]");
| }
| label_63:
0x0004cbb4 movs r4, 0x4d | r4 = 0x4d;
| label_58:
0x0004cbb6 movs r3, 0 | r3 = 0;
0x0004cbb8 str r3, [sp, 0x24] | var_24h = r3;
| label_74:
0x0004cbba uxtb r4, r4 | r4 = (int8_t) r4;
0x0004cbbc movs r3, 1 | r3 = 1;
0x0004cbbe str r3, [sp, 0x10] | var_10h = r3;
| label_13:
0x0004cbc0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004cbc2 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0004cbc4 tst.w r3, 0x810000 |
| if ((r3 & 0x810000) == 0) {
0x0004cbc8 bne 0x4cbf4 |
| label_46:
0x0004cbca ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004cbcc ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
| if (r1 != 0) {
0x0004cbce cbz r1, 0x4cbd6 |
0x0004cbd0 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0004cbd2 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x0004cbd6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004cbd8 movs r3, 0 | r3 = 0;
0x0004cbda ldr r1, [r2, 0x10] | r1 = *((r2 + 0x10));
0x0004cbdc str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
| if (r1 != 0) {
0x0004cbde cbz r1, 0x4cbe6 |
0x0004cbe0 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0004cbe2 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x0004cbe6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004cbe8 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0004cbea orr r3, r3, 0x800000 | r3 |= 0x800000;
0x0004cbee str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0004cbf0 movs r3, 0 | r3 = 0;
0x0004cbf2 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| }
0x0004cbf4 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004cbf6 ldr r5, [sp, 0x24] | r5 = var_24h;
0x0004cbf8 ldrsh.w r0, [r2, 0x20] | r0 = *((r2 + 0x20));
0x0004cbfc cmp r5, 0 |
0x0004cbfe mvn.w r3, r0 | r3 = ~r0;
0x0004cc02 lsr.w r3, r3, 0x1f | r3 >>= 0x1f;
0x0004cc06 it eq |
| if (r5 != 0) {
0x0004cc08 moveq r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x0004cc0a cbz r3, 0x4cc1e |
0x0004cc0c ldr r1, [r2, 0x2c] | r1 = *((r2 + 0x2c));
0x0004cc0e bl 0x12518 | fcn_00012518 (r0, r1, r2);
0x0004cc12 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0004cc14 orrs r3, r0 | r3 |= r0;
0x0004cc16 str r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x0004cc18 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0004cc1a orrs r3, r1 | r3 |= r1;
0x0004cc1c str r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
| }
0x0004cc1e ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004cc20 strb r4, [r3] | *(r3) = r4;
0x0004cc22 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004cc24 cmp r3, 1 |
| if (r3 == 1) {
0x0004cc26 beq.w 0x4d5dc | goto label_64;
| }
| label_81:
0x0004cc2a movs r0, 2 | r0 = 2;
0x0004cc2c b 0x4c450 | goto label_1;
| label_95:
0x0004cc2e ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004cc30 ldrb r1, [r2] | r1 = *(r2);
0x0004cc32 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0004cc34 cmp r1, 0x33 |
| if (r1 == 0x33) {
0x0004cc36 beq.w 0x4d842 | goto label_114;
| }
0x0004cc3a ldr r1, [pc, 0x1ec] |
0x0004cc3c orr r2, r2, 0x20000000 | r2 |= 0x20000000;
0x0004cc40 add r1, pc | r1 = 0x99a6e;
| label_71:
0x0004cc42 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0004cc44 strd r2, r1, [r0, 4] | __asm ("strd r2, r1, [r0, 4]");
0x0004cc48 movs r2, 0xaa | r2 = 0xaa;
0x0004cc4a strb r2, [r0] | *(r0) = r2;
0x0004cc4c ldr r2, [sp, 0x2c] | r2 = var_2ch;
| do {
0x0004cc4e ldr r1, [r5, 4]! | r1 = *((r5 += 4));
0x0004cc52 adds r3, 1 | r3++;
0x0004cc54 str r1, [r2, 0x10] | *((r2 + 0x10)) = r1;
0x0004cc56 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x0004cc58 subs r1, r2, 0 | r1 = r2 - 0;
0x0004cc5a it ne |
| if (r1 == r2) {
0x0004cc5c movne r1, 1 | r1 = 1;
| }
0x0004cc5e cmp r3, 7 |
0x0004cc60 it gt |
| if (r3 <= 7) {
0x0004cc62 movgt r1, 0 | r1 = 0;
| }
0x0004cc64 cmp r1, 0 |
0x0004cc66 bne 0x4cc4e |
| } while (r1 != 0);
| if (r4 != 0) {
0x0004cc68 cbz r4, 0x4cc74 |
0x0004cc6a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004cc6c mov r1, r4 | r1 = r4;
0x0004cc6e ldr r0, [r3] | r0 = *(r3);
0x0004cc70 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x0004cc74 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004cc76 movs r3, 0 | r3 = 0;
0x0004cc78 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x0004cc7a b 0x4c60a | goto label_6;
| label_91:
0x0004cc7c ldr r0, [r2, 0x14] | r0 = *((r2 + 0x14));
0x0004cc7e ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0004cc80 ldrb r1, [r2] | r1 = *(r2);
0x0004cc82 cmp r1, 0xb0 |
0x0004cc84 it eq |
| if (r1 != 0xb0) {
0x0004cc86 ldrbeq r1, [r2, 2] | r1 = *((r2 + 2));
| }
0x0004cc88 cmp r1, 0xb1 |
| if (r1 == 0xb1) {
0x0004cc8a beq.w 0x4d95c | goto label_115;
| }
0x0004cc8e cmp r1, 0x8a |
| if (r1 == 0x8a) {
0x0004cc90 beq.w 0x4d94c | goto label_116;
| }
0x0004cc94 cmp r3, 1 |
| if (r3 != 1) {
0x0004cc96 bne.w 0x4c59a | goto label_7;
| }
| label_75:
0x0004cc9a ldr r2, [r0, 0x18] | r2 = *((r0 + 0x18));
0x0004cc9c ldrb r1, [r2] | r1 = *(r2);
0x0004cc9e cmp r1, 0xb0 |
| if (r1 != 0xb0) {
0x0004cca0 bne.w 0x4c582 | goto label_8;
| }
| label_92:
0x0004cca4 ldrb r1, [r2, 2] | r1 = *((r2 + 2));
0x0004cca6 b 0x4c582 | goto label_8;
| label_96:
0x0004cca8 mov r3, r2 | r3 = r2;
0x0004ccaa str r2, [sp] | *(sp) = r2;
0x0004ccac ldr r2, [pc, 0x17c] |
0x0004ccae ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004ccb0 add r2, pc | r2 = 0x99ae0;
0x0004ccb2 bl 0x24b94 | fcn_00024b94 (r0, r1, r2, r3);
0x0004ccb6 b 0x4c64e | goto label_9;
| label_104:
0x0004cce8 cmp r3, 0 |
| if (r3 != 0) {
0x0004ccea bne.w 0x4ca9c | goto label_10;
| }
0x0004ccee ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0004ccf0 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004ccf2 ldr.w sb, [r3, 0x18] | sb = *((r3 + 0x18));
0x0004ccf6 movs r3, 2 | r3 = 2;
0x0004ccf8 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x0004ccfa b 0x4caba | goto label_11;
| label_98:
0x0004ccfc ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004ccfe ldr r2, [sp, 0x28] | r2 = var_28h;
0x0004cd00 cmp r3, 0 |
0x0004cd02 it eq |
| if (r3 == 0) {
0x0004cd04 cmpeq r2, 1 | __asm ("cmpeq r2, 1");
| }
| if (r3 != 0) {
0x0004cd06 bne.w 0x4d264 | goto label_117;
| }
0x0004cd0a ldr.w r8, [fp, 0x18] | r8 = *(arg_18h);
| label_34:
0x0004cd0e ldr r3, [sp, 0x24] | r3 = var_24h;
| if (r3 != 0) {
0x0004cd10 cbz r3, 0x4cd1a |
0x0004cd12 tst.w r8, 0x28 |
| if ((r8 & 0x28) == 0) {
0x0004cd16 beq.w 0x4d33e | goto label_118;
| }
| }
| label_45:
0x0004cd1a movs r3, 1 | r3 = 1;
0x0004cd1c str r3, [sp, 0x28] | var_28h = r3;
| label_35:
0x0004cd1e ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004cd20 clz r3, r3 | r3 &= r3;
0x0004cd24 lsrs r3, r3, 5 | r3 >>= 5;
0x0004cd26 ands.w r3, r3, r8, lsr 7 | r3 &= (r8 >> 7);
| if (r3 != r3) {
0x0004cd2a bne.w 0x4d408 | goto label_119;
| }
0x0004cd2c strh r5, [r5, 0x1a] | *((r5 + 0x1a)) = r5;
| label_54:
0x0004cd2e ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0004cd30 ldr.w fp, [fp, 0xc] | fp = *(arg_ch);
0x0004cd34 adds r3, 1 | r3++;
0x0004cd36 str r3, [sp, 0x4c] | var_4ch = r3;
0x0004cd38 cmp.w fp, 0 |
| if (fp != 0) {
0x0004cd3c bne.w 0x4ca06 | goto label_12;
| }
0x0004cd40 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004cd42 mov r8, fp | r8 = fp;
0x0004cd44 cmp r3, 0 |
| if (r3 == 0) {
0x0004cd46 beq.w 0x4d4c4 | goto label_120;
| }
0x0004cd4a str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h]");
| label_73:
0x0004cd4e ldr r3, [sp, 0x80] | r3 = var_80h;
| if (r3 != 0) {
0x0004cd50 cbz r3, 0x4cd72 |
0x0004cd52 mov r4, r8 | r4 = r8;
0x0004cd54 mov r8, r3 | r8 = r3;
0x0004cd56 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004cd58 subs r3, 1 | r3--;
| label_60:
0x0004cd5a ldr.w r2, [r8] | r2 = *(r8);
0x0004cd5e cmp r2, r3 |
| if (r2 == r3) {
0x0004cd60 beq.w 0x4d85e | goto label_121;
| }
0x0004cd64 mov r1, r8 | r1 = r8;
0x0004cd66 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0004cd68 mov r8, r4 | r8 = r4;
0x0004cd6a bl 0x1a608 | fcn_0001a608 (r0, r1);
0x0004cd6e movs r3, 0 | r3 = 0;
0x0004cd70 str r3, [sp, 0x80] | var_80h = r3;
| }
0x0004cd72 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004cd74 cmp r3, 0 |
| if (r3 == 0) {
0x0004cd76 beq.w 0x4d7b8 | goto label_122;
| }
0x0004cd7a ldr r2, [pc, 0xb8] |
0x0004cd7c add r2, pc | r2 = 0x99bb6;
| label_68:
0x0004cd7e ldr r3, [sp, 0x38] | r3 = var_38h;
0x0004cd80 cmp r3, 0 |
| if (r3 == 0) {
0x0004cd82 beq.w 0x4d7d2 | goto label_123;
| }
0x0004cd86 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0004cd88 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004cd8a str r1, [sp, 4] | var_4h = r1;
0x0004cd8c ldr r1, [sp, 0x18] | r1 = var_18h;
0x0004cd8e str r1, [sp] | *(sp) = r1;
0x0004cd90 ldr r1, [pc, 0xa4] |
0x0004cd92 add r1, pc | r1 = 0x99bce;
0x0004cd94 bl 0x21598 | fcn_00021598 (r0, r1);
| label_70:
0x0004cd98 ldr r3, [sp, 0xc] | r3 = var_ch;
| do {
0x0004cd9a ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0004cd9c lsls r1, r2, 0x1e | r1 = r2 << 0x1e;
| if (r1 == r2) {
0x0004cd9e bne 0x4cda8 |
0x0004cda0 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x0004cda2 cmp r2, 0 |
| if (r2 > 0) {
0x0004cda4 bgt.w 0x4d7c0 | goto label_124;
| }
| }
0x0004cda8 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0004cdaa cmp r3, 0 |
0x0004cdac bne 0x4cd9a |
| } while (r3 != 0);
| label_69:
0x0004cdae ldr r2, [sp, 0x20] | r2 = var_20h;
0x0004cdb0 movs r3, 1 | r3 = 1;
0x0004cdb2 movs r4, 0xa7 | r4 = 0xa7;
0x0004cdb4 strb r3, [r2, 0x11] | *((r2 + 0x11)) = r3;
0x0004cdb6 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0004cdb8 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0004cdba adds r3, 1 | r3++;
0x0004cdbc str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x0004cdbe b 0x4cbc0 | goto label_13;
| label_97:
0x0004cdc0 mov r8, lr | r8 = lr;
0x0004cdc2 ldr r3, [r8], 8 | r3 = *(r8);
| r8 += 8;
0x0004cdc6 cmp r3, 0 |
| if (r3 <= 0) {
0x0004cdc8 ble.w 0x4d538 | goto label_125;
| }
0x0004cdcc movs r3, 0 | r3 = 0;
0x0004cdce str.w fp, [sp, 0x60] | __asm ("str.w fp, [var_60h]");
0x0004cdd2 ldr r7, [sp, 0x5c] | r7 = var_5ch;
0x0004cdd4 mov fp, r8 |
0x0004cdd6 str r3, [sp, 0x10] | var_10h = r3;
0x0004cdd8 str.w lr, [sp, 0x48] | __asm ("str.w lr, [var_48h]");
0x0004cddc str r3, [sp, 0x34] | var_34h = r3;
0x0004cdde str.w sl, [sp, 0x64] | __asm ("str.w sl, [var_64h]");
0x0004cde2 b 0x4ce6a |
| while (r2 >= r3) {
0x0004ce3c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004ce3e cmp r3, 0 |
| if (r3 == 0) {
0x0004ce40 beq.w 0x4cf90 | goto label_42;
| }
0x0004ce44 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0004ce46 cmp r3, 0 |
| if (r3 == 0) {
0x0004ce48 beq 0x4cf3a | goto label_29;
| }
| label_16:
0x0004ce4a ldr.w r3, [sl, 0x3c] | r3 = *((sl + 0x3c));
0x0004ce4e ldr r2, [sp, 0x3c] | r2 = x;
0x0004ce50 cmp r3, r2 |
| if (r3 == r2) {
0x0004ce52 beq.w 0x4d15e | goto label_126;
| }
| label_15:
0x0004ce56 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0004ce58 add.w fp, fp, 0x40 |
0x0004ce5c ldr r2, [sp, 0x34] | r2 = var_34h;
0x0004ce5e ldr r3, [r3] | r3 = *(r3);
0x0004ce60 adds r2, 1 | r2++;
0x0004ce62 str r2, [sp, 0x34] | var_34h = r2;
0x0004ce64 cmp r2, r3 |
| if (r2 >= r3) {
0x0004ce66 bge.w 0x4d1ea | goto label_127;
| }
0x0004ce6a ldrb.w r3, [fp, 0x26] | r3 = *(arg_26h);
0x0004ce6e ldr.w sl, [fp, 0x10] | sl = *(arg_10h);
0x0004ce72 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
0x0004ce74 bpl 0x4ce3c |
| }
0x0004ce76 ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x0004ce7a ldr.w sb, [r3, 0x1c] | sb = *((r3 + 0x1c));
0x0004ce7e ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004ce80 ldr.w r2, [sb] | r2 = *(sb);
0x0004ce84 clz r3, r3 | r3 &= r3;
0x0004ce88 lsrs r3, r3, 5 | r3 >>= 5;
0x0004ce8a cmp r2, 0 |
| if (r2 <= 0) {
0x0004ce8c ble 0x4cf30 | goto label_128;
| }
0x0004ce8e ldr.w r4, [pc, 0xb40] | r4 = *(0x0004d9d0);
0x0004ce92 movs r6, 0 | r6 = 0;
0x0004ce94 mov r5, r6 | r5 = r6;
0x0004ce96 str.w sl, [sp, 0x54] | __asm ("str.w sl, [var_54h]");
0x0004ce9a str r6, [sp, 0x30] | var_30h = r6;
0x0004ce9c add.w r8, sb, 8 | r8 = sb + 8;
0x0004cea0 ldr r6, [sp, 0x38] | r6 = var_38h;
0x0004cea2 add r4, pc | r4 += pc;
0x0004cea4 ldr.w sl, [sp, 0x10] | sl = var_10h;
0x0004cea8 str r3, [sp, 0x58] | var_58h = r3;
0x0004ceaa str r7, [sp, 0x44] | var_44h = r7;
0x0004ceac b 0x4cf02 |
| while (r0 != 0) {
0x0004ceae cmp.w sl, 0 |
| if (sl == 0) {
0x0004ceb2 beq.w 0x4d158 | goto label_129;
| }
0x0004ceb6 ldrb.w r3, [fp, 0x26] | r3 = *(arg_26h);
0x0004ceba lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 < r3) {
0x0004cebc bmi.w 0x4d0e4 | goto label_130;
| }
| label_24:
0x0004cec0 ldr r1, [sp, 0x80] | r1 = var_80h;
| if (r1 != 0) {
0x0004cec2 cbz r1, 0x4ceca |
0x0004cec4 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0004cec6 bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x0004ceca add.w sl, sl, 1 | sl++;
0x0004cece movs r3, 0 | r3 = 0;
0x0004ced0 str r3, [sp, 0x80] | var_80h = r3;
| label_28:
0x0004ced2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004ced4 strh r5, [r3, 0x20] | *((r3 + 0x20)) = r5;
0x0004ced6 adds r5, 1 | r5++;
0x0004ced8 add.w r2, sb, r5, lsl 4 | r2 = sb + (r5 << 4);
0x0004cedc ldrb r3, [r2, 1] | r3 = *((r2 + 1));
0x0004cede orr r3, r3, 0x40 | r3 |= 0x40;
0x0004cee2 strb r3, [r2, 1] | *((r2 + 1)) = r3;
0x0004cee4 lsrs r3, r3, 7 | r3 >>= 7;
| if (r3 != r3) {
0x0004cee6 bne.w 0x4d220 | goto label_131;
| }
0x0004ceea movs r3, 1 | r3 = 1;
0x0004ceec add.w r8, r8, 0x10 | r8 += 0x10;
0x0004cef0 str r3, [sp, 0x30] | var_30h = r3;
0x0004cef2 movs r3, 2 | r3 = 2;
0x0004cef4 str r3, [sp, 0x28] | var_28h = r3;
0x0004cef6 ldr.w r3, [sb] | r3 = *(sb);
0x0004cefa str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x0004cefe cmp r5, r3 |
| if (r5 >= r3) {
0x0004cf00 bge 0x4cf22 | goto label_132;
| }
| label_14:
0x0004cf02 ldrd r0, r1, [r8, 4] | __asm ("ldrd r0, r1, [r8, 4]");
0x0004cf06 ldrd r3, r2, [sp, 0x18] | __asm ("ldrd r3, r2, [var_18h]");
0x0004cf0a str r6, [sp] | *(sp) = r6;
0x0004cf0c bl 0x1e808 | r0 = fcn_0001e808 (r0, r1, r2, r3, r4);
0x0004cf10 cmp r0, 0 |
0x0004cf12 bne 0x4ceae |
| }
| label_27:
0x0004cf14 ldr.w r3, [sb] | r3 = *(sb);
0x0004cf18 adds r5, 1 | r5++;
0x0004cf1a add.w r8, r8, 0x10 | r8 += 0x10;
0x0004cf1e cmp r5, r3 |
| if (r5 < r3) {
0x0004cf20 blt 0x4cf02 | goto label_14;
| }
| label_132:
0x0004cf22 ldr r6, [sp, 0x30] | r6 = var_30h;
0x0004cf24 str.w sl, [sp, 0x10] | __asm ("str.w sl, [var_10h]");
0x0004cf28 ldrd sl, r3, [sp, 0x54] | __asm ("ldrd sl, r3, [var_54h]");
0x0004cf2c ldr r7, [sp, 0x44] | r7 = var_44h;
0x0004cf2e orrs r3, r6 | r3 |= r6;
| label_128:
0x0004cf30 cmp r3, 0 |
| if (r3 != 0) {
0x0004cf32 bne 0x4ce56 | goto label_15;
| }
0x0004cf34 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0004cf36 cmp r3, 0 |
| if (r3 != 0) {
0x0004cf38 bne 0x4ce4a | goto label_16;
| }
| label_29:
0x0004cf3a ldr.w r5, [fp, 0xc] | r5 = *(arg_ch);
0x0004cf3e mov r1, r5 | r1 = r5;
0x0004cf40 cmp r5, 0 |
| if (r5 == 0) {
0x0004cf42 beq.w 0x4d182 | goto label_133;
| }
| label_30:
0x0004cf46 ldr.w r4, [pc, 0xa8c] | r4 = *(0x0004d9d4);
0x0004cf4a subs r1, 1 | r1--;
0x0004cf4c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004cf4e add r4, pc | r4 += pc;
0x0004cf50 subs r0, r3, 1 | r0 = r3 - 1;
| label_18:
0x0004cf52 ldrb r3, [r1, 1]! | r3 = *((r1 += 1));
0x0004cf56 ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x0004cf5a cmp r3, r2 |
| if (r3 == r2) {
0x0004cf5c beq 0x4cf7c | goto label_134;
| }
| label_17:
0x0004cf5e add r3, r4 | r3 += r4;
0x0004cf60 add r2, r4 | r2 += r4;
0x0004cf62 ldrb.w r6, [r3, 0x140] | r6 = *((r3 + 0x140));
0x0004cf66 ldrb.w r3, [r2, 0x140] | r3 = *((r2 + 0x140));
0x0004cf6a cmp r6, r3 |
| if (r6 != r3) {
0x0004cf6c bne.w 0x4ce56 | goto label_15;
| }
0x0004cf70 ldrb r3, [r1, 1]! | r3 = *((r1 += 1));
0x0004cf74 ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x0004cf78 cmp r3, r2 |
| if (r3 != r2) {
0x0004cf7a bne 0x4cf5e | goto label_17;
| }
| label_134:
0x0004cf7c cmp r3, 0 |
| if (r3 != 0) {
0x0004cf7e bne 0x4cf52 | goto label_18;
| }
0x0004cf80 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004cf82 ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x0004cf86 cmp r5, 0 |
0x0004cf88 it ne |
| if (r5 != 0) {
0x0004cf8a cmpne r3, 1 | __asm ("cmpne r3, 1");
| }
| if (r5 > 0) {
0x0004cf8c bhi.w 0x4d292 | goto label_135;
| }
| label_42:
0x0004cf90 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0004cf92 cmp r2, 0 |
| if (r2 == 0) {
0x0004cf94 beq.w 0x4d28e | goto label_136;
| }
0x0004cf98 ldrb r3, [r2] | r3 = *(r2);
0x0004cf9a cmp r3, 0 |
| if (r3 == 0) {
0x0004cf9c beq.w 0x4d376 | goto label_137;
| }
0x0004cfa0 ldr.w r1, [pc, 0xa34] | r1 = *(0x0004d9d8);
0x0004cfa4 movs r0, 0 | r0 = 0;
0x0004cfa6 add r1, pc | r1 += pc;
| do {
0x0004cfa8 add r3, r1 | r3 += r1;
0x0004cfaa ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0004cfae add r0, r3 | r0 += r3;
0x0004cfb0 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0004cfb4 uxtb r0, r0 | r0 = (int8_t) r0;
0x0004cfb6 cmp r3, 0 |
0x0004cfb8 bne 0x4cfa8 |
| } while (r3 != 0);
| label_41:
0x0004cfba ldrsh.w r8, [sl, 0x22] | r8 = *((sl + 0x22));
0x0004cfbe ldr.w r5, [sl, 4] | r5 = *((sl + 4));
0x0004cfc2 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0004cfc6 ble.w 0x4d18a | goto label_138;
| }
0x0004cfca ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004cfcc adds r5, 0xc | r5 += 0xc;
0x0004cfce ldr r6, [sp, 0x50] | r6 = var_50h;
0x0004cfd0 movs r4, 0 | r4 = 0;
0x0004cfd2 mov r2, sl | r2 = sl;
0x0004cfd4 add.w lr, r3, -1 | lr = r3 + -1;
0x0004cfd8 b 0x4cfe4 |
| while (r3 != r0) {
| label_19:
0x0004cfda adds r4, 1 | r4++;
0x0004cfdc adds r5, 0xc | r5 += 0xc;
0x0004cfde cmp r4, r8 |
| if (r4 == r8) {
0x0004cfe0 beq.w 0x4d188 | goto label_139;
| }
0x0004cfe4 ldrb r3, [r5, -0x5] | r3 = *((r5 - 0x5));
0x0004cfe8 cmp r3, r0 |
0x0004cfea bne 0x4cfda |
| }
0x0004cfec ldr r3, [r5, -0xc] | r3 = *((r5 - 0xc));
0x0004cff0 mov sb, lr | sb = lr;
0x0004cff2 subs r3, 1 | r3--;
| label_21:
0x0004cff4 ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x0004cff8 ldrb ip, [sb, 1]! | ip = *((sb += 1));
0x0004cffc cmp r1, ip |
| if (r1 == ip) {
0x0004cffe beq 0x4d01c | goto label_140;
| }
| label_20:
0x0004d000 add r1, r6 | r1 += r6;
0x0004d002 add ip, r6 |
0x0004d004 ldrb.w sl, [r1, 0x140] | sl = *((r1 + 0x140));
0x0004d008 ldrb.w r1, [ip, 0x140] | r1 = *((ip + 0x140));
0x0004d00c cmp sl, r1 |
| if (sl != r1) {
0x0004d00e bne 0x4cfda | goto label_19;
| }
0x0004d010 ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x0004d014 ldrb ip, [sb, 1]! | ip = *((sb += 1));
0x0004d018 cmp r1, ip |
| if (r1 != ip) {
0x0004d01a bne 0x4d000 | goto label_20;
| }
| label_140:
0x0004d01c cmp r1, 0 |
| if (r1 != 0) {
0x0004d01e bne 0x4cff4 | goto label_21;
| }
0x0004d020 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0004d022 ldrb.w r3, [fp, 0x26] | r3 = *(arg_26h);
0x0004d026 cmp r1, 0 |
| if (r1 == 0) {
0x0004d028 beq.w 0x4d7ca | goto label_141;
| }
0x0004d02c lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
| if (r1 >= r3) {
0x0004d02e bpl.w 0x4d1a4 | goto label_142;
| }
0x0004d032 ldr.w sb, [fp, 0x2c] | sb = *(arg_2ch);
0x0004d036 ldr.w sl, [sb] | sl = *(sb);
0x0004d03a cmp.w sl, 0 |
| if (sl <= 0) {
0x0004d03e ble.w 0x4d1a4 | goto label_142;
| }
0x0004d042 mov.w ip, 1 |
0x0004d046 str r0, [sp, 0x14] | var_14h = r0;
0x0004d048 str r5, [sp, 0x30] | var_30h = r5;
0x0004d04a str.w r8, [sp, 0x44] | __asm ("str.w r8, [var_44h]");
| label_22:
0x0004d04e ldr.w r1, [sb, ip, lsl 3] | offset_1 = ip << 3;
| r1 = *((sb + offset_1));
0x0004d052 mov r5, lr | r5 = lr;
0x0004d054 add.w r8, r1, -1 | r8 = r1 + -1;
| do {
| label_23:
0x0004d058 ldrb r1, [r8, 1]! | r1 = *((r8 += 1));
0x0004d05c ldrb r0, [r5, 1]! | r0 = *((r5 += 1));
0x0004d060 cmp r1, r0 |
| if (r1 == r0) {
0x0004d062 beq 0x4d082 | goto label_143;
| }
0x0004d064 add r1, r7 | r1 += r7;
0x0004d066 add r0, r7 | r0 += r7;
0x0004d068 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x0004d06c ldrb.w r0, [r0, 0x140] | r0 = *((r0 + 0x140));
0x0004d070 cmp r1, r0 |
0x0004d072 beq 0x4d058 |
| } while (r1 == r0);
0x0004d074 cmp ip, sl |
0x0004d076 add.w r1, ip, 1 | r1 = ip + 1;
| if (ip == sl) {
0x0004d07a beq.w 0x4d1a4 | goto label_142;
| }
0x0004d07e mov ip, r1 |
0x0004d080 b 0x4d04e | goto label_22;
| label_143:
0x0004d082 cmp r1, 0 |
| if (r1 != 0) {
0x0004d084 bne 0x4d058 | goto label_23;
| }
0x0004d086 ldrb.w r1, [fp, 0x24] | r1 = *(arg_24h);
0x0004d08a ldr r0, [sp, 0x14] | r0 = var_14h;
0x0004d08c ldr r5, [sp, 0x30] | r5 = var_30h;
0x0004d08e tst.w r1, 0x10 |
0x0004d092 ldr.w r8, [sp, 0x44] | r8 = var_44h;
| if ((r1 & 0x10) == 0) {
0x0004d096 beq 0x4cfda | goto label_19;
| }
0x0004d098 lsls r6, r1, 0x1c | r6 = r1 << 0x1c;
0x0004d09a mov sl, r2 | sl = r2;
| if (r6 < r1) {
0x0004d09c bmi.w 0x4d272 | goto label_144;
| }
0x0004d0a0 ldr r1, [sp, 0x80] | r1 = var_80h;
| if (r1 != 0) {
0x0004d0a2 cbz r1, 0x4d0ae |
0x0004d0a4 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0004d0a6 bl 0x1a608 | fcn_0001a608 (r0, r1);
0x0004d0aa ldrb.w r3, [fp, 0x26] | r3 = *(arg_26h);
| }
0x0004d0ae movs r2, 0 | r2 = 0;
0x0004d0b0 str r2, [sp, 0x80] | var_80h = r2;
0x0004d0b2 movs r2, 1 | r2 = 1;
0x0004d0b4 str r2, [sp, 0x10] | var_10h = r2;
| label_32:
0x0004d0b6 ldrsh.w r2, [sl, 0x20] | r2 = *((sl + 0x20));
0x0004d0ba and r3, r3, 0x20 | r3 &= 0x20;
0x0004d0be cmp r2, r4 |
| if (r2 == r4) {
0x0004d0c0 beq.w 0x4d230 | goto label_145;
| }
0x0004d0c4 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d0c6 strh r4, [r2, 0x20] | *((r2 + 0x20)) = r4;
| if (r3 != 0) {
0x0004d0c8 cbz r3, 0x4d0de |
| label_37:
0x0004d0ca ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x0004d0ce adds r4, 1 | r4++;
0x0004d0d0 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0004d0d2 add.w r3, r3, r4, lsl 4 | r3 += (r4 << 4);
0x0004d0d6 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0004d0d8 orr r2, r2, 0x40 | r2 |= 0x40;
0x0004d0dc strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
| label_31:
0x0004d0de str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x0004d0e2 b 0x4ce56 | goto label_15;
| label_130:
0x0004d0e4 ldr.w r7, [fp, 0x2c] | r7 = *(arg_2ch);
0x0004d0e8 ldr r3, [r7] | r3 = *(r7);
0x0004d0ea cmp r3, 0 |
| if (r3 <= 0) {
0x0004d0ec ble.w 0x4cec0 | goto label_24;
| }
0x0004d0f0 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0004d0f2 adds r7, 8 | r7 += 8;
0x0004d0f4 movs r1, 0 | r1 = 0;
0x0004d0f6 add.w lr, r2, -1 | lr = r2 + -1;
0x0004d0fa mov r2, sb | r2 = sb;
| label_25:
0x0004d0fc ldr.w r0, [r7, r1, lsl 3] | offset_2 = r1 << 3;
| r0 = *((r7 + offset_2));
0x0004d100 strd lr, r3, [sp, 0x10] | __asm ("strd lr, r3, [sp, 0x10]");
0x0004d104 add.w sb, r0, -1 | sb = r0 + -1;
| do {
| label_26:
0x0004d108 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004d10a ldrb r0, [sb, 1]! | r0 = *((sb += 1));
0x0004d10e ldrb ip, [r3, 1]! | ip = *((r3 += 1));
0x0004d112 cmp r0, ip |
0x0004d114 str r3, [sp, 0x10] | var_10h = r3;
| if (r0 == ip) {
0x0004d116 beq 0x4d134 | goto label_146;
| }
0x0004d118 add r0, r4 | r0 += r4;
0x0004d11a add ip, r4 |
0x0004d11c ldrb.w r0, [r0, 0x140] | r0 = *((r0 + 0x140));
0x0004d120 ldrb.w ip, [ip, 0x140] | ip = *((ip + 0x140));
0x0004d124 cmp r0, ip |
0x0004d126 beq 0x4d108 |
| } while (r0 == ip);
0x0004d128 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0004d12a adds r1, 1 | r1++;
0x0004d12c cmp r3, r1 |
| if (r3 != r1) {
0x0004d12e bne 0x4d0fc | goto label_25;
| }
0x0004d130 mov sb, r2 | sb = r2;
0x0004d132 b 0x4cec0 | goto label_24;
| label_146:
0x0004d134 cmp r0, 0 |
| if (r0 != 0) {
0x0004d136 bne 0x4d108 | goto label_26;
| }
0x0004d138 ldrb.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x0004d13c mov sb, r2 | sb = r2;
0x0004d13e lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
| if (r2 >= r3) {
0x0004d140 bpl.w 0x4cf14 | goto label_27;
| }
0x0004d144 lsls r7, r3, 0x1c | r7 = r3 << 0x1c;
| if (r7 < r3) {
0x0004d146 bmi.w 0x4d2b6 | goto label_147;
| }
0x0004d14a ldr r1, [sp, 0x80] | r1 = var_80h;
| if (r1 != 0) {
0x0004d14c cbz r1, 0x4d154 |
0x0004d14e ldr r0, [sp, 0x40] | r0 = var_40h;
0x0004d150 bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x0004d154 movs r3, 0 | r3 = 0;
0x0004d156 str r3, [sp, 0x80] | var_80h = r3;
| label_129:
0x0004d158 mov.w sl, 1 | sl = 1;
0x0004d15c b 0x4ced2 | goto label_28;
| label_126:
0x0004d15e cmp r2, 0 |
| if (r2 != 0) {
0x0004d160 bne.w 0x4cf3a | goto label_29;
| }
0x0004d164 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0004d166 ldrb r3, [r2] | r3 = *(r2);
0x0004d168 cmp r3, 0x2a |
| if (r3 != 0x2a) {
0x0004d16a bne.w 0x4ce56 | goto label_15;
| }
0x0004d16e ldrb r3, [r2, 1] | r3 = *((r2 + 1));
0x0004d170 cmp r3, 0 |
| if (r3 != 0) {
0x0004d172 bne.w 0x4ce56 | goto label_15;
| }
0x0004d176 ldr.w r5, [fp, 0xc] | r5 = *(arg_ch);
0x0004d17a mov r1, r5 | r1 = r5;
0x0004d17c cmp r5, 0 |
| if (r5 != 0) {
0x0004d17e bne.w 0x4cf46 | goto label_30;
| }
| label_133:
0x0004d182 ldr.w r1, [sl] | r1 = *(sl);
0x0004d186 b 0x4cf46 | goto label_30;
| label_139:
0x0004d188 mov sl, r2 | sl = r2;
| label_138:
0x0004d18a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004d18c cmp r3, 0 |
| if (r3 != 0) {
0x0004d18e bne.w 0x4ce56 | goto label_15;
| }
0x0004d192 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0004d196 lsls r0, r3, 0x16 | r0 = r3 << 0x16;
| if (r0 < r3) {
0x0004d198 bmi.w 0x4ce56 | goto label_15;
| }
0x0004d19c ldr r3, [sp, 0x28] | r3 = var_28h;
0x0004d19e adds r3, 1 | r3++;
0x0004d1a0 str r3, [sp, 0x28] | var_28h = r3;
0x0004d1a2 b 0x4d0de | goto label_31;
| label_142:
0x0004d1a4 ldr r1, [sp, 0x80] | r1 = var_80h;
0x0004d1a6 mov sl, r2 | sl = r2;
| if (r1 != 0) {
0x0004d1a8 cbz r1, 0x4d1b4 |
0x0004d1aa ldr r0, [sp, 0x40] | r0 = var_40h;
0x0004d1ac bl 0x1a608 | fcn_0001a608 (r0, r1);
0x0004d1b0 ldrb.w r3, [fp, 0x26] | r3 = *(arg_26h);
| }
0x0004d1b4 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0004d1b6 adds r2, 1 | r2++;
0x0004d1b8 str r2, [sp, 0x10] | var_10h = r2;
0x0004d1ba movs r2, 0 | r2 = 0;
0x0004d1bc str r2, [sp, 0x80] | var_80h = r2;
0x0004d1be b 0x4d0b6 | goto label_32;
| label_107:
0x0004d1c0 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0004d1c2 bl 0x1e510 | r0 = fcn_0001e510 (r0);
| if (r0 == 0) {
0x0004d1c6 cbz r0, 0x4d1da | goto label_148;
| }
0x0004d1c8 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x0004d1cc lsls r1, r3, 0x16 | r1 = r3 << 0x16;
| if (r1 < r3) {
0x0004d1ce bmi 0x4d1da | goto label_148;
| }
0x0004d1d0 mov.w r4, -1 | r4 = -1;
| label_52:
0x0004d1d4 cmp r4, r5 |
| if (r4 < r5) {
0x0004d1d6 blt.w 0x4cb64 | goto label_33;
| }
| label_148:
0x0004d1da ldr r3, [sp, 0x28] | r3 = var_28h;
0x0004d1dc adds r3, 1 | r3++;
0x0004d1de str r3, [sp, 0x28] | var_28h = r3;
| label_44:
0x0004d1e0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0004d1e2 cmp r3, 1 |
| if (r3 == 1) {
0x0004d1e4 beq.w 0x4cd0e | goto label_34;
| }
0x0004d1e8 b 0x4cd1e | goto label_35;
| label_127:
0x0004d1ea ldrd fp, sl, [sp, 0x60] | __asm ("ldrd fp, sl, [var_60h]");
0x0004d1ee ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004d1f0 orr.w r4, r3, sl | r4 = r3 | sl;
| label_61:
0x0004d1f4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0004d1f6 cmp r2, 0 |
| if (r2 == 0) {
0x0004d1f8 beq.w 0x4ca18 | goto label_36;
| }
0x0004d1fc ldr r3, [r2, 0x28] | r3 = *((r2 + 0x28));
0x0004d1fe ldr r0, [sp, 0xc] | r0 = var_ch;
0x0004d200 ldr r1, [r2, 0x10] | r1 = *((r2 + 0x10));
0x0004d202 str r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x0004d204 str r1, [r0, 0x2c] | *((r0 + 0x2c)) = r1;
0x0004d206 ldrb.w r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x0004d20a tst.w r3, 0x48 |
0x0004d20e ittt ne |
| if ((r3 & 0x48) == 0) {
0x0004d210 ldrne r3, [r0, 4] | r3 = *((r0 + 4));
| }
| if ((r3 & 0x48) == 0) {
0x0004d212 orrne r3, r3, 0x200000 | r3 |= 0x200000;
| }
| if ((r3 & 0x48) != 0) {
0x0004d216 str r3, [r0, 4] | *((r0 + 4)) = r3;
| }
0x0004d218 ldr r3, [r1, 0x3c] | r3 = *((r1 + 0x3c));
0x0004d21a str r3, [sp, 0x3c] | x = r3;
0x0004d21c b.w 0x4ca18 | goto label_36;
| label_131:
0x0004d220 movs r3, 2 | r3 = 2;
0x0004d222 ldr r7, [sp, 0x44] | r7 = var_44h;
0x0004d224 str.w sl, [sp, 0x10] | __asm ("str.w sl, [var_10h]");
0x0004d228 str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x0004d22c str r3, [sp, 0x28] | var_28h = r3;
0x0004d22e b 0x4ce56 | goto label_15;
| label_145:
0x0004d230 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0004d232 movw r2, 0xffff | r2 = 0xffff;
0x0004d236 strh r2, [r1, 0x20] | *((r1 + 0x20)) = r2;
0x0004d238 cmp r3, 0 |
| if (r3 != 0) {
0x0004d23a bne.w 0x4d0ca | goto label_37;
| }
0x0004d23e b 0x4d0de | goto label_31;
| label_103:
0x0004d240 cmp r2, 0 |
| if (r2 != 0) {
0x0004d242 bne.w 0x4ca5e | goto label_38;
| }
0x0004d246 subs r3, 0x80 | r3 -= 0x80;
0x0004d248 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d24a it ne |
| if (r3 == 0x80) {
0x0004d24c movne r3, 1 | r3 = 1;
| }
0x0004d24e tst.w r8, 0x200 |
0x0004d252 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
| if ((r8 & 0x200) == 0) {
0x0004d254 beq.w 0x4cac2 | goto label_39;
| }
| label_51:
0x0004d258 ldr.w r5, [fp, 8] | r5 = *(arg_8h);
0x0004d25c cmp r5, 0 |
| if (r5 != 0) {
0x0004d25e bne.w 0x4ca92 | goto label_40;
| }
0x0004d262 b 0x4cac2 | goto label_39;
| label_117:
0x0004d264 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004d266 cmp r3, 0 |
| if (r3 != 0) {
0x0004d268 bne.w 0x4d8ba | goto label_149;
| }
0x0004d26c ldr.w r8, [fp, 0x18] | r8 = *(arg_18h);
0x0004d270 b 0x4cd1e | goto label_35;
| label_144:
0x0004d272 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004d274 add r1, sp, 0x80 | r1 += var_80h;
0x0004d276 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0004d278 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004d27a adds r3, 1 | r3++;
0x0004d27c str r3, [sp, 0x10] | var_10h = r3;
0x0004d27e ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004d280 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0004d284 bl 0x301ec | fcn_000301ec (r0, r1, r2, r3);
0x0004d288 ldrb.w r3, [fp, 0x26] | r3 = *(arg_26h);
0x0004d28c b 0x4d0b6 | goto label_32;
| label_136:
0x0004d28e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0004d290 b 0x4cfba | goto label_41;
| label_135:
0x0004d292 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d294 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d296 ldr.w r3, [r3, 0x10c] | r3 = *((r3 + 0x10c));
0x0004d29a add.w r1, r2, 0x2c | r1 = r2 + 0x2c;
| if (r3 != 0) {
0x0004d29e cbnz r3, 0x4d2aa | goto label_150;
| }
0x0004d2a0 b 0x4cf90 | goto label_42;
| label_43:
0x0004d2a2 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0004d2a4 cmp r3, 0 |
| if (r3 == 0) {
0x0004d2a6 beq.w 0x4cf90 | goto label_42;
| }
| label_150:
0x0004d2aa ldr r2, [r3] | r2 = *(r3);
0x0004d2ac cmp r1, r2 |
| if (r1 != r2) {
0x0004d2ae bne 0x4d2a2 | goto label_43;
| }
0x0004d2b0 movs r2, 0 | r2 = 0;
0x0004d2b2 str r2, [r3] | *(r3) = r2;
0x0004d2b4 b 0x4cf90 | goto label_42;
| label_147:
0x0004d2b6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004d2b8 add r1, sp, 0x80 | r1 += var_80h;
0x0004d2ba ldr r2, [sp, 0x24] | r2 = var_24h;
0x0004d2bc add.w sl, sl, 1 | sl++;
0x0004d2c0 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004d2c2 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0004d2c6 bl 0x301ec | fcn_000301ec (r0, r1, r2, r3);
0x0004d2ca b 0x4ced2 | goto label_28;
| label_100:
0x0004d2cc ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004d2ce subs r7, r2, 0 | r7 = r2 - 0;
0x0004d2d0 it ne |
| if (r7 == r2) {
0x0004d2d2 movne r7, 1 | r7 = 1;
| }
0x0004d2d4 cmp r3, 0x80 |
0x0004d2d6 ite eq |
| if (r3 != 0x80) {
0x0004d2d8 moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0x80) {
0x0004d2da andne r2, r7, 1 | r2 = r7 & 1;
| }
0x0004d2de cmp r2, 0 |
| if (r2 != 0) {
0x0004d2e0 bne 0x4d396 | goto label_151;
| }
| label_48:
0x0004d2e2 cmp r3, 0x7f |
0x0004d2e4 ite eq |
| if (r3 != 0x7f) {
0x0004d2e6 moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0x7f) {
0x0004d2e8 andne r2, r7, 1 | r2 = r7 & 1;
| }
0x0004d2ec and ip, r8, 0x200 |
0x0004d2f0 cmp r2, 0 |
| if (r2 != 0) {
0x0004d2f2 bne.w 0x4d458 | goto label_152;
| }
0x0004d2f6 cmp.w ip, 0 |
0x0004d2fa ite eq |
| if (ip != 0) {
0x0004d2fc moveq r7, 0 | r7 = 0;
| }
| if (ip == 0) {
0x0004d2fe andne r7, r7, 1 | r7 &= 1;
| }
0x0004d302 cmp r7, 0 |
| if (r7 == 0) {
0x0004d304 beq.w 0x4d1e0 | goto label_44;
| }
0x0004d308 ldr.w r5, [fp, 8] | r5 = *(arg_8h);
0x0004d30c cmp r5, 0 |
| if (r5 == 0) {
0x0004d30e beq.w 0x4d1e0 | goto label_44;
| }
0x0004d312 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d314 mov sb, r2 | sb = r2;
0x0004d316 subs r6, r3, 1 | r6 = r3 - 1;
0x0004d318 b.w 0x4ca92 | goto label_40;
| label_99:
0x0004d31c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d31e subs r3, 0 |
0x0004d320 it ne |
| if (r3 == 0) {
0x0004d322 movne r3, 1 | r3 = 1;
| }
0x0004d324 ands.w r3, r3, r8, lsr 9 | r3 &= (r8 >> 9);
| if (r3 == r3) {
0x0004d328 beq.w 0x4d1e0 | goto label_44;
| }
0x0004d32c ldr.w r5, [fp, 8] | r5 = *(arg_8h);
0x0004d330 cmp r5, 0 |
| if (r5 == 0) {
0x0004d332 beq.w 0x4d1e0 | goto label_44;
| }
| label_47:
0x0004d336 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d338 subs r6, r3, 1 | r6 = r3 - 1;
0x0004d33a b.w 0x4ca92 | goto label_40;
| label_118:
0x0004d33e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0004d340 bl 0x1e510 | r0 = fcn_0001e510 (r0);
0x0004d344 cmp r0, 0 |
| if (r0 == 0) {
0x0004d346 beq.w 0x4cd1a | goto label_45;
| }
0x0004d34a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0004d34c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0004d34e ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0004d350 lsls r1, r3, 0x16 | r1 = r3 << 0x16;
| if (r1 < r3) {
0x0004d352 bmi.w 0x4cd1a | goto label_45;
| }
0x0004d356 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0004d358 movw r2, 0xffff | r2 = 0xffff;
0x0004d35c mov r8, fp | r8 = fp;
0x0004d35e ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0004d360 strh r2, [r1, 0x20] | *((r1 + 0x20)) = r2;
0x0004d362 movs r2, 0x44 | r2 = 0x44;
0x0004d364 strb r2, [r1, 1] | *((r1 + 1)) = r2;
0x0004d366 tst.w r3, 0x810000 |
| if ((r3 & 0x810000) != 0) {
0x0004d36a bne.w 0x4d5d6 | goto label_153;
| }
0x0004d36e movs r3, 1 | r3 = 1;
0x0004d370 movs r4, 0xa7 | r4 = 0xa7;
0x0004d372 str r3, [sp, 0x10] | var_10h = r3;
0x0004d374 b 0x4cbca | goto label_46;
| label_137:
0x0004d376 mov r0, r3 | r0 = r3;
0x0004d378 b 0x4cfba | goto label_41;
| label_101:
0x0004d37a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d37c subs r3, 0 |
0x0004d37e it ne |
| if (r3 == 0) {
0x0004d380 movne r3, 1 | r3 = 1;
| }
0x0004d382 ands.w r3, r3, r8, lsr 9 | r3 &= (r8 >> 9);
| if (r3 == r3) {
0x0004d386 beq.w 0x4d1e0 | goto label_44;
| }
0x0004d38a ldr.w r5, [fp, 8] | r5 = *(arg_8h);
0x0004d38e mov sb, r4 | sb = r4;
0x0004d390 cmp r5, 0 |
| if (r5 != 0) {
0x0004d392 bne 0x4d336 | goto label_47;
| }
0x0004d394 b 0x4d1e0 | goto label_44;
| label_151:
0x0004d396 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004d398 ldr.w r0, [pc, 0x640] | r0 = *(0x0004d9dc);
0x0004d39c ldr.w r5, [pc, 0x640] | r5 = *(0x0004d9e0);
0x0004d3a0 subs r6, r2, 1 | r6 = r2 - 1;
0x0004d3a2 add r0, pc | r0 += pc;
0x0004d3a4 mov r1, r6 | r1 = r6;
0x0004d3a6 add r5, pc | r5 += pc;
| label_50:
0x0004d3a8 ldrb r2, [r0], 1 | r2 = *(r0);
| r0++;
0x0004d3ac ldrb ip, [r1, 1]! | ip = *((r1 += 1));
0x0004d3b0 cmp r2, ip |
| if (r2 == ip) {
0x0004d3b2 beq 0x4d3d0 | goto label_154;
| }
| label_49:
0x0004d3b4 add r2, r5 | r2 += r5;
0x0004d3b6 add ip, r5 |
0x0004d3b8 ldrb.w lr, [r2, 0x140] |
0x0004d3bc ldrb.w r2, [ip, 0x140] | r2 = *((ip + 0x140));
0x0004d3c0 cmp lr, r2 |
| if (lr != r2) {
0x0004d3c2 bne 0x4d2e2 | goto label_48;
| }
0x0004d3c4 ldrb r2, [r0], 1 | r2 = *(r0);
| r0++;
0x0004d3c8 ldrb ip, [r1, 1]! | ip = *((r1 += 1));
0x0004d3cc cmp r2, ip |
| if (r2 != ip) {
0x0004d3ce bne 0x4d3b4 | goto label_49;
| }
| label_154:
0x0004d3d0 cmp r2, 0 |
| if (r2 != 0) {
0x0004d3d2 bne 0x4d3a8 | goto label_50;
| }
0x0004d3d4 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d3d6 tst.w r8, 0x200 |
0x0004d3da mov.w r3, 1 | r3 = 1;
0x0004d3de str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
| if ((r8 & 0x200) != 0) {
0x0004d3e0 bne.w 0x4d258 | goto label_51;
| }
0x0004d3e4 b.w 0x4cac2 | goto label_39;
| label_108:
0x0004d3e8 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0004d3ea bl 0x1e510 | r0 = fcn_0001e510 (r0);
0x0004d3ee cmp r0, 0 |
| if (r0 == 0) {
0x0004d3f0 beq.w 0x4d1d4 | goto label_52;
| }
0x0004d3f4 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x0004d3f8 lsls r1, r3, 0x16 | r1 = r3 << 0x16;
| if (r1 < r3) {
0x0004d3fa bmi.w 0x4d1d4 | goto label_52;
| }
0x0004d3fe mov r8, fp | r8 = fp;
0x0004d400 mov.w r4, -1 | r4 = -1;
0x0004d404 b.w 0x4cb66 | goto label_53;
| label_119:
0x0004d408 ldr.w sb, [fp, 8] | sb = *(arg_8h);
0x0004d40c ldr.w r3, [sb] | r3 = *(sb);
0x0004d410 cmp r3, 0 |
| if (r3 <= 0) {
0x0004d412 ble.w 0x4cd2e | goto label_54;
| }
0x0004d416 mov r5, sb | r5 = sb;
0x0004d418 movs r4, 0 | r4 = 0;
0x0004d41a b 0x4d428 | goto label_155;
| label_55:
0x0004d41c cmp r6, r3 |
0x0004d41e mov r4, r6 | r4 = r6;
0x0004d420 add.w r5, r5, 0x10 | r5 += 0x10;
| if (r6 >= r3) {
0x0004d424 bge.w 0x4cd2e | goto label_54;
| }
| label_155:
0x0004d428 adds r6, r4, 1 | r6 = r4 + 1;
0x0004d42a ldr r7, [r5, 0xc] | r7 = *((r5 + 0xc));
0x0004d42c add.w r2, sb, r6, lsl 4 | r2 = sb + (r6 << 4);
0x0004d430 ldrb r2, [r2, 1] | r2 = *((r2 + 1));
0x0004d432 lsls r2, r2, 0x1e | r2 <<= 0x1e;
| if (r2 != r2) {
0x0004d434 bne 0x4d41c | goto label_55;
| }
0x0004d436 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0004d438 mov r0, r7 | r0 = r7;
0x0004d43a blx 0x8540 | r0 = fcn_00008540 ();
0x0004d43e cmp r0, 0 |
| if (r0 == 0) {
0x0004d440 beq.w 0x4d618 | goto label_156;
| }
0x0004d444 ldr.w r3, [sb] | r3 = *(sb);
0x0004d448 b 0x4d41c | goto label_55;
| label_102:
0x0004d44a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d44c subs r3, 0x80 | r3 -= 0x80;
0x0004d44e it ne |
| if (r3 == 0x80) {
0x0004d450 movne r3, 1 | r3 = 1;
| }
0x0004d452 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x0004d454 b.w 0x4cac2 | goto label_39;
| label_152:
0x0004d458 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d45a ldr.w r0, [pc, 0x588] |
0x0004d45e ldr.w r5, [pc, 0x588] |
0x0004d462 subs r6, r3, 1 | r6 = r3 - 1;
0x0004d464 add r0, pc | r0 = 0x9ae4e;
0x0004d466 mov r1, r6 | r1 = r6;
0x0004d468 add r5, pc | r5 = 0x9ae56;
| do {
| label_57:
0x0004d46a ldrb r3, [r0], 1 | r3 = *(r0);
| r0++;
0x0004d46e ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0004d472 cmp r3, r2 |
| if (r3 == r2) {
0x0004d474 beq 0x4d490 | goto label_157;
| }
0x0004d476 add r3, r5 | r3 += r5;
0x0004d478 add r2, r5 | r2 += r5;
0x0004d47a ldrb.w r7, [r3, 0x140] | r7 = *((r3 + 0x140));
0x0004d47e ldrb.w r3, [r2, 0x140] | r3 = *((r2 + 0x140));
0x0004d482 cmp r7, r3 |
0x0004d484 beq 0x4d46a |
| } while (r7 == r3);
0x0004d486 cmp.w ip, 0 |
| if (ip != 0) {
0x0004d48a bne.w 0x4ca84 | goto label_56;
| }
0x0004d48e b 0x4d1e0 | goto label_44;
| label_157:
0x0004d490 cmp r3, 0 |
| if (r3 != 0) {
0x0004d492 bne 0x4d46a | goto label_57;
| }
0x0004d494 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d496 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x0004d498 cmp.w ip, 0 |
| if (ip != 0) {
0x0004d49c bne.w 0x4d258 | goto label_51;
| }
0x0004d4a0 b.w 0x4cac2 | goto label_39;
| label_111:
0x0004d4a4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d4a6 ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x0004d4aa cmp r3, 1 |
| if (r3 < 1) {
0x0004d4ac bls.w 0x4d6cc | goto label_158;
| }
0x0004d4b0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004d4b2 movs r4, 0xa7 | r4 = 0xa7;
0x0004d4b4 strh r1, [r3, 0x20] | *((r3 + 0x20)) = r1;
0x0004d4b6 str.w sb, [r3, 0x2c] | __asm ("str.w sb, [r3, 0x2c]");
0x0004d4ba b.w 0x4cbb6 | goto label_58;
| label_105:
0x0004d4be ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x0004d4c0 b.w 0x4caea | goto label_59;
| label_120:
0x0004d4c4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004d4c6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0004d4c8 lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 >= r3) {
0x0004d4ca bpl 0x4d516 | goto label_76;
| }
0x0004d4cc ldr r1, [sp, 0x40] | r1 = var_40h;
0x0004d4ce ldrb.w r3, [r1, 0xb1] | r3 = *((r1 + 0xb1));
| if (r3 != 0) {
0x0004d4d2 cbnz r3, 0x4d4f0 | goto label_77;
| }
0x0004d4d4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0004d4d6 ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x0004d4d8 ldr r3, [r1, 0x20] | r3 = *((r1 + 0x20));
0x0004d4da lsls r7, r2, 0xf | r7 = r2 << 0xf;
| if (r7 >= r2) {
0x0004d4dc bpl.w 0x4dd74 | goto label_159;
| }
0x0004d4e0 movs r2, 1 |
0x0004d4e2 movt r2, 0x1000 | r2 = 0x10000001;
0x0004d4e6 ands r2, r3 | r2 &= r3;
0x0004d4e8 cmp r2, 1 |
| if (r2 != 1) {
0x0004d4ea bne 0x4d512 | goto label_160;
| }
0x0004d4ec lsls r6, r3, 1 | r6 = r3 << 1;
0x0004d4ee bpl 0x4d512 |
| while (r5 < r3) {
| label_77:
0x0004d4f0 ldr.w r1, [pc, 0x4f8] |
0x0004d4f4 movs r0, 0x1c | r0 = 0x1c;
0x0004d4f6 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0004d4f8 add r1, pc | r1 = 0x9aee8;
0x0004d4fa blx 0x8b60 | fcn_00008b60 ();
0x0004d4fe ldr r0, [sp, 0xc] | r0 = var_ch;
0x0004d500 movs r2, 0 | r2 = 0;
0x0004d502 movs r1, 0x75 | r1 = 0x75;
0x0004d504 mov r3, r0 | r3 = r0;
0x0004d506 strb r1, [r3], 0x2c | *(r3) = r1;
| r3 += 0x2c;
0x0004d50a str r2, [r0, 0x2c] | *((r0 + 0x2c)) = r2;
0x0004d50c str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0004d50e b.w 0x4c60a | goto label_6;
| label_160:
0x0004d512 lsls r5, r3, 2 | r5 = r3 << 2;
0x0004d514 bmi 0x4d4f0 |
| }
| label_76:
0x0004d516 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0004d518 bl 0x1e378 | fcn_0001e378 (r0);
0x0004d51c str r0, [sp, 0x10] | var_10h = r0;
0x0004d51e cmp r0, 0 |
| if (r0 != 0) {
0x0004d520 bne.w 0x4c60a | goto label_6;
| }
0x0004d524 ldr.w r8, [sp, 0x80] | r8 = var_80h;
0x0004d528 cmp.w r8, 0 |
| if (r8 == 0) {
0x0004d52c beq.w 0x4d8b2 | goto label_161;
| }
0x0004d530 ldr r4, [sp, 0x10] | r4 = var_10h;
0x0004d532 mov.w r3, -1 | r3 = -1;
0x0004d536 b 0x4cd5a | goto label_60;
| label_125:
0x0004d538 movs r3, 0 | r3 = 0;
0x0004d53a mov r4, sl | r4 = sl;
0x0004d53c str r3, [sp, 0x10] | var_10h = r3;
0x0004d53e b 0x4d1f4 | goto label_61;
| label_94:
0x0004d58e str r3, [r2, 0x44] | *((r2 + 0x44)) = r3;
0x0004d590 b.w 0x4c444 | goto label_0;
| label_110:
0x0004d5ac mov.w r4, -1 | r4 = -1;
0x0004d5b0 mov r8, fp | r8 = fp;
0x0004d5b2 mov r1, r4 | r1 = r4;
0x0004d5b4 b.w 0x4cb68 | goto label_62;
| label_113:
0x0004d5b8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d5ba cmp r4, 0x1f |
0x0004d5bc ldr.w r2, [r3, 0x90] | r2 = *((r3 + 0x90));
0x0004d5c0 ittet le |
| if (r4 > 0x1f) {
0x0004d5c2 movle r3, 1 | r3 = 1;
| }
| if (r4 > 0x1f) {
0x0004d5c4 lslle r3, r4 | r3 <<= r4;
| }
| if (r4 <= 0x1f) {
0x0004d5c6 movgt r3, -1 | r3 = -1;
| }
| if (r4 <= 0x1f) {
0x0004d5ca orrs r3, r2 | r3 |= r2;
| }
0x0004d5cc ldr r2, [sp, 0x20] | r2 = var_20h;
0x0004d5ce str.w r3, [r2, 0x90] | __asm ("str.w r3, [r2, 0x90]");
0x0004d5d2 b.w 0x4cbb4 | goto label_63;
| label_153:
0x0004d5d6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d5d8 movs r3, 0xa7 | r3 = 0xa7;
0x0004d5da strb r3, [r2] | *(r2) = r3;
| label_64:
0x0004d5dc ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d5de ldr r3, [r3] | r3 = *(r3);
0x0004d5e0 ldr.w r2, [r3, 0x168] | r2 = *((r3 + 0x168));
| if (r2 != 0) {
0x0004d5e4 cbz r2, 0x4d5f4 |
0x0004d5e6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d5e8 ldrb r4, [r2] | r4 = *(r2);
0x0004d5ea cmp r4, 0x4d |
0x0004d5ec it ne |
| if (r4 != 0x4d) {
0x0004d5ee cmpne r4, 0xa7 | __asm ("cmpne r4, 0xa7");
| }
| if (r4 == 0x4d) {
0x0004d5f0 beq.w 0x4ddae | goto label_162;
| }
| }
| label_72:
0x0004d5f4 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0004d5f6 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x0004d5f8 cmp r2, r8 |
0x0004d5fa add.w r3, r3, 1 | r3++;
0x0004d5fe str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x0004d600 mov r3, r2 | r3 = r2;
| if (r2 == r8) {
0x0004d602 beq.w 0x4c60a | goto label_6;
| }
| do {
0x0004d606 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0004d608 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0004d60a cmp r3, r8 |
0x0004d60c add.w r2, r2, 1 | r2++;
0x0004d610 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x0004d612 bne 0x4d606 |
| } while (r3 != r8);
0x0004d614 b.w 0x4c60a | goto label_6;
| label_156:
0x0004d618 add.w r3, sb, r4, lsl 4 | r3 = sb + (r4 << 4);
0x0004d61c mov r8, fp | r8 = fp;
0x0004d61e ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0004d620 ldr.w r3, [fp, 0x18] | r3 = *(arg_18h);
0x0004d624 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0004d626 lsls r5, r3, 0x1f | r5 = r3 << 0x1f;
| if (r5 >= r3) {
0x0004d628 bmi 0x4d630 |
0x0004d62a lsls r0, r1, 0x1b | r0 = r1 << 0x1b;
| if (r0 < r1) {
0x0004d62c bmi.w 0x4de62 | goto label_163;
| }
| }
0x0004d630 lsls r1, r1, 0x10 | r1 <<= 0x10;
| if (r1 < r1) {
0x0004d632 bpl 0x4d64c |
0x0004d634 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0004d636 eor r3, r3, 0x4000 | r3 ^= 0x4000;
0x0004d63a ubfx r3, r3, 0xe, 1 | r3 = (r3 >> 0xe) & ((1 << 1) - 1);
0x0004d63e cmp r1, r8 |
0x0004d640 it ne |
| if (r1 == r8) {
0x0004d642 orrne r3, r3, 1 | r3 |= 1;
| }
0x0004d646 cmp r3, 0 |
| if (r3 != 0) {
0x0004d648 bne.w 0x4de72 | goto label_164;
| }
| }
0x0004d64c ldrb r3, [r2] | r3 = *(r2);
0x0004d64e cmp r3, 0xb0 |
0x0004d650 it eq |
| if (r3 != 0xb0) {
0x0004d652 ldrbeq r3, [r2, 2] | r3 = *((r2 + 2));
| }
0x0004d654 cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x0004d656 beq.w 0x4de48 | goto label_165;
| }
0x0004d65a cmp r3, 0x8a |
| if (r3 == 0x8a) {
0x0004d65c beq.w 0x4de2e | goto label_166;
| }
| label_80:
0x0004d660 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0004d662 mov r2, r4 | r2 = r4;
0x0004d664 ldr r4, [sp, 0x20] | r4 = var_20h;
0x0004d666 mov r1, sb | r1 = sb;
0x0004d668 str r3, [sp] | *(sp) = r3;
0x0004d66a mov r0, r4 | r0 = r4;
0x0004d66c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004d66e bl 0x325f8 | fcn_000325f8 (r0, r1, r2, r3, r4);
0x0004d672 ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
0x0004d676 cmp r3, 1 |
| if (r3 < 1) {
0x0004d678 bls 0x4d5dc | goto label_64;
| }
0x0004d67a ldr.w r3, [r4, 0x10c] | r3 = *((r4 + 0x10c));
| if (r3 != 0) {
0x0004d67e cbnz r3, 0x4d688 | goto label_167;
| }
0x0004d680 b 0x4d5dc | goto label_64;
| label_65:
0x0004d682 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0004d684 cmp r3, 0 |
| if (r3 == 0) {
0x0004d686 beq 0x4d5dc | goto label_64;
| }
| label_167:
0x0004d688 ldr r2, [r3] | r2 = *(r3);
0x0004d68a ldr r1, [sp, 0xc] | r1 = var_ch;
0x0004d68c cmp r1, r2 |
| if (r1 != r2) {
0x0004d68e bne 0x4d682 | goto label_65;
| }
0x0004d690 movs r2, 0 | r2 = 0;
0x0004d692 str r2, [r3] | *(r3) = r2;
0x0004d694 b 0x4d5dc | goto label_64;
| label_112:
0x0004d696 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0004d698 mla r3, r5, r3, r3 | __asm ("mla r3, r5, r3, r3");
0x0004d69c movs r2, 0xa7 | r2 = 0xa7;
0x0004d69e strb r2, [r0, 2] | *((r0 + 2)) = r2;
0x0004d6a0 ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
0x0004d6a4 adds r5, r3, r2 | r5 = r3 + r2;
0x0004d6a6 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x0004d6aa lsls r7, r3, 0x1a | r7 = r3 << 0x1a;
0x0004d6ac it pl |
| if (r7 < r3) {
0x0004d6ae movpl r4, r1 | r4 = r1;
| }
| if (r7 < r3) {
0x0004d6b0 bpl 0x4d6be |
0x0004d6b2 adds r6, r4, 1 | r6 = r4 + 1;
| if (r6 == r4) {
0x0004d6b4 beq 0x4d6be | goto label_168;
| }
0x0004d6b6 mov r0, sb | r0 = sb;
0x0004d6b8 bl 0xfdbc | r0 = fcn_0000fdbc (r0, r1);
0x0004d6bc mov r4, r0 | r4 = r0;
| }
| label_168:
0x0004d6be add r5, r4 | r5 += r4;
0x0004d6c0 adds r5, 1 | r5++;
| do {
0x0004d6c2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004d6c4 movs r4, 0xb0 | r4 = 0xb0;
0x0004d6c6 str r5, [r3, 0x1c] | *((r3 + 0x1c)) = r5;
0x0004d6c8 b.w 0x4cbb6 | goto label_58;
| label_158:
0x0004d6cc ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
0x0004d6d0 ldr r5, [r3, 0x24] | r5 = *((r3 + 0x24));
0x0004d6d2 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x0004d6d6 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
0x0004d6d8 it pl |
| if (r2 < r3) {
0x0004d6da movpl r4, r1 | r4 = r1;
| }
| if (r2 < r3) {
0x0004d6dc bpl 0x4d6ea |
0x0004d6de adds r3, r4, 1 | r3 = r4 + 1;
| if (r3 == r4) {
0x0004d6e0 beq 0x4d6ea | goto label_169;
| }
0x0004d6e2 mov r0, sb | r0 = sb;
0x0004d6e4 bl 0xfdbc | r0 = fcn_0000fdbc (r0, r1);
0x0004d6e8 mov r4, r0 | r4 = r0;
| }
| label_169:
0x0004d6ea add r5, r4 | r5 += r4;
0x0004d6ec b 0x4d6c2 |
| } while (1);
| label_106:
0x0004d6f8 mov r6, r3 | r6 = r3;
0x0004d6fa b.w 0x4caea | goto label_59;
| label_90:
0x0004d798 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0004d79a ldr r3, [r3] | r3 = *(r3);
0x0004d79c b.w 0x4c56c | goto label_66;
| label_78:
0x0004d7a6 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d7a8 movs r3, 0x79 | r3 = 0x79;
0x0004d7aa strb r3, [r2] | *(r2) = r3;
0x0004d7ac b.w 0x4c60a | goto label_6;
| label_93:
0x0004d7b0 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x0004d7b2 ldr r2, [r2] | r2 = *(r2);
0x0004d7b4 b.w 0x4c594 | goto label_67;
| label_122:
0x0004d7b8 ldr r2, [pc, 0x240] |
0x0004d7ba add r2, pc | r2 = 0x9b1ba;
0x0004d7bc b.w 0x4cd7e | goto label_68;
| label_124:
0x0004d7c0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0004d7c2 ldr r3, [r3] | r3 = *(r3);
0x0004d7c4 str r2, [r3, 0x44] | *((r3 + 0x44)) = r2;
0x0004d7c6 b.w 0x4cdae | goto label_69;
| label_141:
0x0004d7ca mov sl, r2 | sl = r2;
0x0004d7cc movs r2, 1 | r2 = 1;
0x0004d7ce str r2, [sp, 0x10] | var_10h = r2;
0x0004d7d0 b 0x4d0b6 | goto label_32;
| label_123:
0x0004d7d2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0004d7d4 cmp r3, 0 |
| if (r3 != 0) {
0x0004d7d6 beq 0x4d84e |
0x0004d7d8 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0004d7da ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004d7dc str r1, [sp] | *(sp) = r1;
0x0004d7de ldr r1, [pc, 0x220] |
0x0004d7e0 add r1, pc | r1 = 0x9b1e6;
0x0004d7e2 bl 0x21598 | fcn_00021598 (r0, r1);
0x0004d7e6 b.w 0x4cd98 | goto label_70;
| label_114:
0x0004d842 ldr r1, [pc, 0x1c4] |
0x0004d844 orr r2, r2, 0x10000000 | r2 |= 0x10000000;
0x0004d848 add r1, pc | r1 = 0x9b256;
0x0004d84a b.w 0x4cc42 | goto label_71;
| }
0x0004d84e ldr r1, [pc, 0x1bc] |
0x0004d850 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004d852 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004d854 add r1, pc | r1 = 0x9b266;
0x0004d856 bl 0x21598 | fcn_00021598 (r0, r1);
0x0004d85a b.w 0x4cd98 | goto label_70;
| label_121:
0x0004d85e ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d860 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0004d862 lsls r0, r3, 8 | r0 = r3 << 8;
0x0004d864 itt mi |
| if (r0 < r3) {
0x0004d866 bicmi r3, r3, 0x800000 | __asm ("bicmi r3, r3, aav.0x000000ff");
| }
| if (r0 < r3) {
0x0004d86a str r3, [r2, 4] | *((r2 + 4)) = r3;
| }
| if (r0 >= r3) {
0x0004d86c bmi 0x4d890 |
0x0004d86e ldr r3, [sp, 0xc] | r3 = var_ch;
0x0004d870 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
| if (r1 != 0) {
0x0004d872 cbz r1, 0x4d87a |
0x0004d874 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0004d876 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x0004d87a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d87c movs r3, 0 | r3 = 0;
0x0004d87e ldr r1, [r2, 0x10] | r1 = *((r2 + 0x10));
0x0004d880 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
| if (r1 != 0) {
0x0004d882 cbz r1, 0x4d88a |
0x0004d884 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0004d886 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x0004d88a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004d88c movs r3, 0 | r3 = 0;
0x0004d88e str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| }
0x0004d890 mov r8, r4 | r8 = r4;
0x0004d892 ldr r4, [sp, 0xc] | r4 = var_ch;
0x0004d894 ldrd r0, r2, [sp, 0x20] | __asm ("ldrd r0, r2, [var_20h]");
0x0004d898 add r1, sp, 0x80 | r1 += var_80h;
0x0004d89a ldrsh.w r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0004d89e bl 0x301ec | fcn_000301ec (r0, r1, r2, r3);
0x0004d8a2 ldr r3, [pc, 0x16c] |
0x0004d8a4 movs r1, 0xac | r1 = 0xac;
0x0004d8a6 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0004d8a8 strb r1, [r4] | *(r4) = r1;
0x0004d8aa add r3, pc | r3 = 0x9b2c0;
0x0004d8ac str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0004d8ae str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0004d8b0 b 0x4d5f4 | goto label_72;
| label_161:
0x0004d8b2 ldr r2, [pc, 0x160] |
0x0004d8b4 add r2, pc | r2 = 0x9b2ce;
0x0004d8b6 b.w 0x4cd7e | goto label_68;
| label_149:
0x0004d8ba ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004d8bc mov r8, fp | r8 = fp;
0x0004d8be cmp r3, 1 |
| if (r3 != 1) {
0x0004d8c0 bne.w 0x4cd4e | goto label_73;
| }
0x0004d8c4 movs r4, 0xa7 | r4 = 0xa7;
0x0004d8c6 b.w 0x4cbba | goto label_74;
| label_116:
0x0004d94c ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x0004d94e ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0004d950 ldr r2, [r2] | r2 = *(r2);
0x0004d952 cmp r3, r2 |
| if (r3 != r2) {
0x0004d954 bne.w 0x4c59a | goto label_7;
| }
0x0004d958 b.w 0x4cc9a | goto label_75;
| label_115:
0x0004d95c ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x0004d95e ldr r2, [r2] | r2 = *(r2);
0x0004d960 cmp r3, r2 |
| if (r3 != r2) {
0x0004d962 bne.w 0x4c59a | goto label_7;
| }
0x0004d966 b.w 0x4cc9a | goto label_75;
| label_159:
0x0004dd74 lsls r4, r3, 1 | r4 = r3 << 1;
| if (r4 >= r3) {
0x0004dd76 bpl.w 0x4d516 | goto label_76;
| }
0x0004dd7a b.w 0x4d4f0 | goto label_77;
| label_87:
0x0004dd94 blx 0x883c | fcn_0000883c ();
0x0004dd98 ldr r1, [pc, 0x138] |
0x0004dd9a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004dd9c ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004dd9e add r1, pc | r1 = 0x9bc76;
0x0004dda0 bl 0x21598 | fcn_00021598 (r0, r1);
0x0004dda4 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0004dda6 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0004dda8 adds r3, 1 | r3++;
0x0004ddaa str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x0004ddac b 0x4d7a6 | goto label_78;
| label_162:
0x0004ddae ldr r0, [sp, 0x3c] | r0 = x;
0x0004ddb0 ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x0004ddb4 cmp r0, 0 |
| if (r0 == 0) {
0x0004ddb6 beq.w 0x4d5f4 | goto label_72;
| }
0x0004ddba ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0004ddbc ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x0004ddbe cmp r3, r0 |
0x0004ddc0 mov.w r3, 0 | r3 = 0;
| if (r3 == r0) {
0x0004ddc4 beq 0x4ddd2 | goto label_170;
| }
| do {
0x0004ddc6 ldr r5, [sp, 0x3c] | r5 = x;
0x0004ddc8 adds r2, 0x10 | r2 += 0x10;
0x0004ddca ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x0004ddcc adds r3, 1 | r3++;
0x0004ddce cmp r0, r5 |
0x0004ddd0 bne 0x4ddc6 |
| } while (r0 != r5);
| label_170:
0x0004ddd2 cmp r4, 0x4d |
| if (r4 == 0x4d) {
0x0004ddd4 beq 0x4de4e | goto label_171;
| }
0x0004ddd6 ldr r5, [r1] | r5 = *(r1);
0x0004ddd8 cmp r5, 0 |
| if (r5 <= 0) {
0x0004ddda ble.w 0x4d5f4 | goto label_72;
| }
0x0004ddde ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004dde0 mov r4, r1 | r4 = r1;
0x0004dde2 ldr r7, [r2, 0x1c] | r7 = *((r2 + 0x1c));
0x0004dde4 movs r2, 0 | r2 = 0;
0x0004dde6 b 0x4ddf2 | goto label_172;
| label_79:
0x0004dde8 adds r2, 1 | r2++;
0x0004ddea adds r4, 0x40 | r4 += 0x40;
0x0004ddec cmp r5, r2 |
| if (r5 == r2) {
0x0004ddee beq.w 0x4d5f4 | goto label_72;
| }
| label_172:
0x0004ddf2 ldr r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x0004ddf4 cmp r7, r0 |
| if (r7 != r0) {
0x0004ddf6 bne 0x4dde8 | goto label_79;
| }
0x0004ddf8 add.w r1, r1, r2, lsl 6 | r1 += (r2 << 6);
0x0004ddfc ldr r1, [r1, 0x18] | r1 = *((r1 + 0x18));
| label_83:
0x0004ddfe ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004de00 ldrsh.w r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x0004de04 cmp r1, 0 |
| if (r1 == 0) {
0x0004de06 beq.w 0x4d5f4 | goto label_72;
| }
0x0004de0a cmp r2, 0 |
| if (r2 < 0) {
0x0004de0c blt 0x4de54 | goto label_173;
| }
| label_84:
0x0004de0e ldr r0, [r1, 4] | r0 = *((r1 + 4));
0x0004de10 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0004de14 ldr.w r2, [r0, r2, lsl 2] | offset_3 = r2 << 2;
| r2 = *((r0 + offset_3));
| label_85:
0x0004de18 ldr r1, [r1] | r1 = *(r1);
0x0004de1a ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004de1c bl 0x4c2d0 | r0 = fcn_0004c2d0 (r0, r1, r2, r3);
0x0004de20 cmp r0, 2 |
0x0004de22 ittt eq |
| if (r0 != 2) {
0x0004de24 ldreq r2, [sp, 0xc] | r2 = var_ch;
| }
| if (r0 != 2) {
0x0004de26 moveq r3, 0x79 | r3 = 0x79;
| }
| if (r0 != 2) {
0x0004de28 strbeq r3, [r2] | *(r2) = r3;
| }
0x0004de2a b.w 0x4d5f4 | goto label_72;
| label_166:
0x0004de2e ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0004de30 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0004de32 ldr r3, [r3] | r3 = *(r3);
| label_82:
0x0004de34 cmp r3, 1 |
| if (r3 == 1) {
0x0004de36 beq.w 0x4d660 | goto label_80;
| }
0x0004de3a ldr r1, [pc, 0x9c] |
0x0004de3c ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004de3e add r1, pc | r1 = 0x9bd1c;
0x0004de40 bl 0x21598 | fcn_00021598 (r0, r1);
0x0004de44 b.w 0x4cc2a | goto label_81;
| label_165:
0x0004de48 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0004de4a ldr r3, [r3] | r3 = *(r3);
0x0004de4c b 0x4de34 | goto label_82;
| label_171:
0x0004de4e ldr r2, [sp, 0x20] | r2 = var_20h;
0x0004de50 ldr r1, [r2, 0x78] | r1 = *((r2 + 0x78));
0x0004de52 b 0x4ddfe | goto label_83;
| label_173:
0x0004de54 ldrsh.w r2, [r1, 0x20] | r2 = *((r1 + 0x20));
0x0004de58 cmp r2, 0 |
| if (r2 >= 0) {
0x0004de5a bge 0x4de0e | goto label_84;
| }
0x0004de5c ldr r2, [pc, 0x7c] |
0x0004de5e add r2, pc | r2 = 0x9bd3e;
0x0004de60 b 0x4de18 | goto label_85;
| label_163:
0x0004de62 ldr r1, [pc, 0x7c] |
0x0004de64 mov r2, r7 | r2 = r7;
0x0004de66 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004de68 add r1, pc | r1 = 0x9bd4e;
0x0004de6a bl 0x21598 | fcn_00021598 (r0, r1);
0x0004de6e b.w 0x4cc2a | goto label_81;
| label_164:
0x0004de72 ldr r1, [pc, 0x70] |
0x0004de74 mov r2, r7 | r2 = r7;
0x0004de76 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0004de78 add r1, pc | r1 = 0x9bd62;
0x0004de7a bl 0x21598 | fcn_00021598 (r0, r1);
0x0004de7e b.w 0x4cc2a | goto label_81;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4e4ec).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x50a50 */
| #include <stdint.h>
|
; (fcn) fcn.00050a50 () | void fcn_00050a50 (int16_t arg1) {
| int16_t var_0h_2;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_14h;
| int16_t var_1h;
| int16_t var_4h_2;
| r0 = arg1;
0x00050a50 ldr.w ip, [pc, 0x7c] |
0x00050a54 push {r1, r2, r3} |
0x00050a56 ldr r2, [pc, 0x7c] | r2 = *(0x50ad6);
0x00050a58 add ip, pc | ip = 0xa152c;
0x00050a5a push {r4, lr} |
0x00050a5c mov r4, r0 | r4 = r0;
0x00050a5e sub sp, 0xc |
0x00050a60 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00050a62 add r1, sp, 0x14 | r1 += var_14h;
0x00050a64 ldr.w r2, [ip, r2] |
0x00050a68 ldr r0, [r1], 4 | r0 = *(r1);
| r1 += 4;
0x00050a6c ldr r2, [r2] | r2 = *(0xa152c);
0x00050a6e str r2, [sp, 4] | var_4h = r2;
0x00050a70 mov.w r2, 0 | r2 = 0;
0x00050a74 str r1, [sp] | *(sp) = r1;
| if (r3 != 0) {
0x00050a76 cbnz r3, 0x50a7e | goto label_2;
| }
0x00050a78 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x00050a7a cmp r3, 0x63 |
0x00050a7c ble 0x50a9c |
| while (1) {
| label_2:
0x00050a7e ldr r2, [pc, 0x58] |
0x00050a80 ldr r3, [pc, 0x50] | r3 = *(0x50ad4);
0x00050a82 add r2, pc | r2 = 0xa1560;
0x00050a84 ldr r3, [r2, r3] | r3 = *(0xa1560);
0x00050a86 ldr r2, [r3] | r2 = *(0xa1560);
0x00050a88 ldr r3, [sp, 4] | r3 = var_4h;
0x00050a8a eors r2, r3 | r2 ^= r3;
0x00050a8c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00050a90 bne 0x50acc | goto label_3;
| }
0x00050a92 add sp, 0xc |
0x00050a94 pop.w {r4, lr} |
0x00050a98 add sp, 0xc |
0x00050a9a bx lr | return;
0x00050a9c blx 0x8524 | r0 = fcn_00008524 ();
0x00050aa0 mov r3, r0 | r3 = r0;
| if (r0 == 0) {
0x00050aa2 cbz r0, 0x50ac0 | goto label_4;
| }
0x00050aa4 ldr r1, [r4, 0x2c] | r1 = *((r4 + 0x2c));
| if (r1 == 0) {
0x00050aa6 cbz r1, 0x50ac6 | goto label_5;
| }
0x00050aa8 ldr r2, [pc, 0x30] |
0x00050aaa add r2, pc | r2 = 0xa158a;
| label_1:
0x00050aac ldr r0, [pc, 0x30] |
0x00050aae add r0, pc | r0 = 0xa1592;
0x00050ab0 blx 0x8644 | fcn_00008644 ();
0x00050ab4 str r0, [r4, 0x2c] | *((r4 + 0x2c)) = r0;
| if (r0 == 0) {
0x00050ab6 cbz r0, 0x50ac0 | goto label_4;
| }
| label_0:
0x00050ab8 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x00050aba adds r3, 1 | r3++;
0x00050abc str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00050abe b 0x50a7e |
| }
| label_4:
0x00050ac0 movs r3, 7 | r3 = 7;
0x00050ac2 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x00050ac4 b 0x50ab8 | goto label_0;
| label_5:
0x00050ac6 ldr r2, [pc, 0x1c] |
0x00050ac8 add r2, pc | r2 = 0xa15b2;
0x00050aca b 0x50aac | goto label_1;
| label_3:
0x00050acc blx 0x883c | fcn_0000883c ();
0x00050ad0 strh r0, [r0, 0x12] | *((r0 + 0x12)) = r0;
0x00050ad2 movs r7, r0 | r7 = r0;
0x00050ad4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00050ad6 movs r0, r0 |
0x00050ad8 strh r6, [r2, 0x10] | *((r2 + 0x10)) = r6;
0x00050ada movs r7, r0 | r7 = r0;
0x00050adc movs r7, 0xc2 | r7 = 0xc2;
0x00050ade movs r6, r0 | r6 = r0;
0x00050ae0 asrs r2, r3 | r2 >>= r3;
0x00050ae2 movs r6, r0 | r6 = r0;
0x00050ae4 ldr r2, [pc, 0x360] | r2 = *(0x50e48);
0x00050ae6 movs r6, r0 | r6 = r0;
0x00050ae8 push.w {r4, r5, r6, r7, r8, lr} |
0x00050aec mov r5, r2 | r5 = r2;
0x00050aee sub sp, 8 |
0x00050af0 mov r7, r1 | r7 = r1;
0x00050af2 mov r6, r0 | r6 = r0;
0x00050af4 blx 0x861c | r0 = fcn_0000861c ();
0x00050af8 mov r8, r0 | r8 = r0;
0x00050afa ldr r0, [r5] | r0 = *(r5);
0x00050afc blx 0x89d4 | fcn_000089d4 ();
0x00050b00 mov r3, r1 | r3 = r1;
0x00050b02 ldr.w r1, [r8] | r1 = *(r8);
0x00050b06 mov r2, r0 | r2 = r0;
0x00050b08 ldr r4, [r1, 0x2c] | r4 = *((r1 + 0x2c));
| if (r4 != 0) {
0x00050b0a cbnz r4, 0x50b12 | goto label_6;
| }
0x00050b0c b 0x50b22 | goto label_7;
| do {
0x00050b0e ldr r4, [r4, 4] | r4 = *((r4 + 4));
| if (r4 == 0) {
0x00050b10 cbz r4, 0x50b22 | goto label_7;
| }
| label_6:
0x00050b12 ldrd r1, r0, [r4, 0x10] | __asm ("ldrd r1, r0, [r4, 0x10]");
0x00050b16 cmp r3, r0 |
0x00050b18 it eq |
| if (r3 == r0) {
0x00050b1a cmpeq r2, r1 | __asm ("cmpeq r2, r1");
| }
0x00050b1c bne 0x50b0e |
| } while (r3 != r0);
0x00050b1e ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
| if (r1 == 0) {
0x00050b20 cbnz r1, 0x50b44 |
| label_7:
0x00050b22 ldr r0, [pc, 0x48] |
0x00050b24 add r0, pc | r0 = 0xa1696;
0x00050b26 blx 0x8644 | fcn_00008644 ();
0x00050b2a mov.w r2, -1 | r2 = -1;
0x00050b2e mov r4, r0 | r4 = r0;
0x00050b30 mov r1, r0 | r1 = r0;
0x00050b32 mov r0, r6 | r0 = r6;
0x00050b34 blx 0x8798 | fcn_00008798 ();
0x00050b38 mov r0, r4 | r0 = r4;
0x00050b3a add sp, 8 |
0x00050b3c pop.w {r4, r5, r6, r7, r8, lr} |
0x00050b40 b.w 0x8400 | void (*0x8400)() ();
| }
0x00050b44 ldr r0, [pc, 0x28] |
0x00050b46 adds r5, 4 | r5 += 4;
0x00050b48 subs r3, r7, 1 | r3 -= var_1h;
0x00050b4a str.w r8, [r4, 0x60] | __asm ("str.w r8, [r4, 0x60]");
0x00050b4e mov r2, r6 | r2 = r6;
0x00050b50 str r5, [sp] | *(sp) = r5;
0x00050b52 add r0, pc | r0 = 0xa16c6;
0x00050b54 ldr.w r5, [r8, 0xc] | r5 = *((r8 + 0xc));
0x00050b58 mov r1, r4 | r1 = r4;
0x00050b5a addw r0, r0, 0xc64 | __asm ("addw r0, r0, aav.0x000000ff");
0x00050b5e blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00050b60 movs r3, 0 | r3 = 0;
0x00050b62 str r3, [r4, 0x60] | *((r4 + 0x60)) = r3;
0x00050b64 add sp, 8 |
0x00050b66 pop.w {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x51370 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00051370 () | void fcn_00051370 (int16_t arg_0h, int16_t arg_44h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00051370 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00051374 mov sb, r2 | sb = r2;
0x00051376 ldr r5, [r2] | r5 = *(r2);
0x00051378 sub sp, 0x1c |
0x0005137a mov sl, r0 | sl = r0;
0x0005137c mov fp, r3 |
0x0005137e mov r6, r1 | r6 = r1;
0x00051380 cmp r1, 0 |
| if (r1 == 0) {
0x00051382 beq.w 0x5159c | goto label_16;
| }
0x00051386 mov r0, r1 | r0 = r1;
0x00051388 blx 0x85b4 | fcn_000085b4 ();
0x0005138c lsls r3, r5, 0x19 | r3 = r5 << 0x19;
0x0005138e bic r7, r0, 0xc0000000 | r7 = BIT_MASK (r0, 0xc0000000);
| if (r3 >= r5) {
0x00051392 bpl.w 0x514f2 | goto label_17;
| }
| label_3:
0x00051396 cmp r7, 4 |
| if (r7 < 4) {
0x00051398 bls.w 0x514fe | goto label_18;
| }
0x0005139c ldr.w r1, [pc, 0x454] |
0x000513a0 movs r2, 5 | r2 = 5;
0x000513a2 mov r0, r6 | r0 = r6;
0x000513a4 add r1, pc | r1 = 0xa2b9c;
0x000513a6 blx 0x8214 | r0 = sysconf ();
0x000513aa mov r8, r0 | r8 = r0;
0x000513ac cmp r0, 0 |
| if (r0 != 0) {
0x000513ae bne.w 0x514fe | goto label_18;
| }
0x000513b2 subs r2, r6, 1 | r2 = r6 - 1;
0x000513b4 add.w r0, r7, 8 | r0 = r7 + 8;
0x000513b8 adds r4, r2, r7 | r4 = r2 + r7;
0x000513ba orr r5, r5, 0x40 | r5 |= 0x40;
0x000513be movs r1, 0 | r1 = 0;
0x000513c0 mov r7, r8 | r7 = r8;
| do {
0x000513c2 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x000513c6 sub.w r3, r3, 0x26 | r3 -= 0x26;
0x000513ca clz r3, r3 | r3 &= r3;
0x000513ce lsrs r3, r3, 5 | r3 >>= 5;
0x000513d0 adds r0, r3, r0 | r0 = r3 + r0;
0x000513d2 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000513d6 cmp r2, r4 |
0x000513d8 bne 0x513c2 |
| } while (r2 != r4);
0x000513da blx 0x8240 | r0 = fcn_00008240 ();
0x000513de mov r4, r0 | r4 = r0;
0x000513e0 cmp r0, 0 |
| if (r0 == 0) {
0x000513e2 beq.w 0x51592 | goto label_19;
| }
0x000513e6 str r7, [r4], 4 | *(r4) = r7;
| r4 += 4;
0x000513ea ldrb r3, [r6, 5] | r3 = *((r6 + 5));
0x000513ec cmp r3, 0x2f |
| if (r3 == 0x2f) {
0x000513ee beq.w 0x5171a | goto label_20;
| }
0x000513f2 mov.w ip, 5 |
0x000513f6 subs r2, r3, 0 | r2 = r3 - 0;
0x000513f8 it ne |
| if (r2 == r3) {
0x000513fa movne r2, 1 | r2 = 1;
| }
0x000513fc mov r7, ip | r7 = ip;
| label_12:
0x000513fe cmp r3, 0x23 |
0x00051400 ite eq |
| if (r3 != 0x23) {
0x00051402 moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0x23) {
0x00051404 andne r2, r2, 1 | r2 &= 1;
| }
0x00051408 cmp r2, 0 |
| if (r2 == 0) {
0x0005140a beq.w 0x517ce | goto label_21;
| }
| label_11:
0x0005140e ldr r1, [pc, 0x3e8] |
0x00051410 movs r2, 0 | r2 = 0;
0x00051412 strd r5, sb, [sp] | __asm ("strd r5, sb, [sp]");
0x00051416 add r1, pc | r1 = 0xa2c14;
0x00051418 mov sb, r1 | sb = r1;
0x0005141a b 0x51448 |
| while (r3 != 0x25) {
0x0005141c cmp r2, 1 |
| if (r2 == 1) {
0x0005141e beq.w 0x5154c | goto label_22;
| }
0x00051422 cmp r2, 0 |
0x00051424 it eq |
| if (r2 == 0) {
0x00051426 cmpeq r3, 0x3f | __asm ("cmpeq r3, 0x3f");
| }
0x00051428 itt eq |
| if (r2 != 0) {
0x0005142a moveq r2, 1 | r2 = 1;
| }
| if (r2 != 0) {
0x0005142c moveq r3, 0 | r3 = 0;
| }
| if (r2 != 0) {
0x0005142e bne.w 0x5157c | goto label_23;
| }
| label_0:
0x00051432 add.w r8, r8, 1 | r8++;
0x00051436 mov r7, r1 | r7 = r1;
0x00051438 strb r3, [r4, r0] | *((r4 + r0)) = r3;
| label_2:
0x0005143a ldrb r3, [r6, r7] | r3 = *((r6 + r7));
0x0005143c mov ip, r7 |
0x0005143e cmp r3, 0 |
0x00051440 it ne |
| if (r3 != 0) {
0x00051442 cmpne r3, 0x23 | __asm ("cmpne r3, 0x23");
| }
| if (r3 == 0) {
0x00051444 beq.w 0x515ce | goto label_24;
| }
0x00051448 cmp r3, 0x25 |
0x0005144a add.w r1, r7, 1 | r1 = r7 + 1;
0x0005144e mov r0, r8 | r0 = r8;
0x00051450 bne 0x5141c |
| }
0x00051452 ldrb r5, [r6, r1] | r5 = *((r6 + r1));
0x00051454 add.w lr, sb, r5 | lr = sb + r5;
0x00051458 ldrb.w lr, [lr, 0x40] |
0x0005145c tst.w lr, 8 |
| if ((lr & 8) == 0) {
0x00051460 beq 0x51432 | goto label_0;
| }
0x00051462 add ip, r6 |
0x00051464 ldrb.w ip, [ip, 2] | ip = *((ip + 2));
0x00051468 add.w lr, sb, ip | lr = sb + ip;
0x0005146c ldrb.w lr, [lr, 0x40] |
0x00051470 tst.w lr, 8 |
| if ((lr & 8) == 0) {
0x00051474 beq 0x51432 | goto label_0;
| }
0x00051476 ubfx r3, r5, 6, 1 | r3 = (r5 >> 6) & ((1 << 1) - 1);
0x0005147a ubfx r1, ip, 6, 1 | r1 = (ip >> 6) & ((1 << 1) - 1);
0x0005147e add.w r1, r1, r1, lsl 3 | r1 += (r1 << 3);
0x00051482 add.w r3, r3, r3, lsl 3 | r3 += (r3 << 3);
0x00051486 add r3, r5 | r3 += r5;
0x00051488 add.w r5, r1, ip | r5 = r1 + ip;
0x0005148c and r3, r3, 0xf | r3 &= 0xf;
0x00051490 and r5, r5, 0xf | r5 &= 0xf;
0x00051494 adds.w r3, r5, r3, lsl 4 | r3 = r5 + (r3 << 4);
0x00051498 add.w r1, r7, 3 | r1 = r7 + 3;
0x0005149c it ne |
| if (r3 == r5) {
0x0005149e uxtbne r3, r3 | __asm ("uxtbne r3, r3");
| goto label_25;
| }
| if (r3 != r5) {
| label_25:
0x000514a0 bne 0x51432 | goto label_0;
| }
0x000514a2 ldrb r3, [r6, r1] | r3 = *((r6 + r1));
0x000514a4 cmp r3, 0 |
0x000514a6 it ne |
| if (r3 != 0) {
0x000514a8 cmpne r3, 0x23 | __asm ("cmpne r3, 0x23");
| }
| if (r3 == 0) {
0x000514aa beq.w 0x515ce | goto label_24;
| }
0x000514ae adds r1, r7, 4 | r1 = r7 + 4;
0x000514b0 subs r5, r2, 0 | r5 = r2 - 0;
0x000514b2 add r1, r6 | r1 += r6;
0x000514b4 it ne |
| if (r5 == r2) {
0x000514b6 movne r5, 1 | r5 = 1;
| }
0x000514b8 b 0x514d0 |
| while (r2 != 1) {
0x000514ba cmp r3, 0x26 |
0x000514bc it eq |
| if (r3 == 0x26) {
0x000514be cmpeq r2, 2 | __asm ("cmpeq r2, 2");
| }
| if (r3 == 0x26) {
0x000514c0 beq.w 0x517e4 | goto label_26;
| }
| label_1:
0x000514c4 ldrb r3, [r1], 1 | r3 = *(r1);
| r1++;
0x000514c8 cmp r3, 0x23 |
0x000514ca it ne |
| if (r3 != 0x23) {
0x000514cc cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 == 0x23) {
0x000514ce beq 0x515ce | goto label_24;
| }
0x000514d0 cmp r3, 0x3f |
0x000514d2 ite eq |
| if (r3 != 0x3f) {
0x000514d4 moveq r0, r5 | r0 = r5;
| }
| if (r3 == 0x3f) {
0x000514d6 orrne r0, r5, 1 | r0 = r5 | 1;
| }
0x000514da subs r7, r1, r6 | r7 = r1 - r6;
0x000514dc subs r7, 1 | r7--;
0x000514de cmp r0, 0 |
| if (r0 == 0) {
0x000514e0 beq.w 0x517e8 | goto label_27;
| }
0x000514e4 cmp r2, 1 |
0x000514e6 bne 0x514ba |
| }
0x000514e8 cmp r3, 0x3d |
0x000514ea it ne |
| if (r3 == 0x3d) {
0x000514ec cmpne r3, 0x26 | __asm ("cmpne r3, 0x26");
| goto label_28;
| }
| if (r3 != 0x3d) {
| label_28:
0x000514ee bne 0x514c4 | goto label_1;
| }
0x000514f0 b 0x5143a | goto label_2;
| label_17:
0x000514f2 ldr r3, [pc, 0x308] |
0x000514f4 add r3, pc | r3 = 0xa2cf6;
0x000514f6 ldrb r3, [r3, 6] | r3 = *((r3 + 6));
0x000514f8 cmp r3, 0 |
| if (r3 != 0) {
0x000514fa bne.w 0x51396 | goto label_3;
| }
| label_18:
0x000514fe add.w r0, r7, 8 | r0 = r7 + 8;
0x00051502 movs r1, 0 | r1 = 0;
0x00051504 blx 0x8240 | r0 = fcn_00008240 ();
0x00051508 mov r4, r0 | r4 = r0;
0x0005150a cmp r0, 0 |
| if (r0 == 0) {
0x0005150c beq 0x51592 | goto label_19;
| }
0x0005150e movs r3, 0 | r3 = 0;
0x00051510 str r3, [r4], 4 | *(r4) = r3;
| r4 += 4;
0x00051514 cbnz r7, 0x51540 |
| while (1) {
0x00051516 add r7, r4 | r7 += r4;
| label_4:
0x00051518 bic r5, r5, 0x40 | r5 = BIT_MASK (r5, 0x40);
0x0005151c movs r3, 0 | r3 = 0;
0x0005151e str r3, [r7] | *(r7) = r3;
| label_6:
0x00051520 mov r0, sl | r0 = sl;
0x00051522 movs r6, 0 | r6 = 0;
0x00051524 blx 0x8700 | fcn_00008700 ();
0x00051528 str.w r0, [fp] | __asm ("str.w r0, [fp]");
0x0005152c cmp r0, 0 |
| if (r0 == 0) {
0x0005152e beq 0x515b2 | goto label_29;
| }
| label_5:
0x00051530 ldr r3, [sp, 0x40] | r3 = *(arg_0h);
0x00051532 mov r0, r6 | r0 = r6;
0x00051534 str.w r5, [sb] | __asm ("str.w r5, [sb]");
0x00051538 str r4, [r3] | *(r3) = r4;
0x0005153a add sp, 0x1c |
0x0005153c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00051540 mov r1, r6 | r1 = r6;
0x00051542 mov r2, r7 | r2 = r7;
0x00051544 mov r0, r4 | r0 = r4;
0x00051546 blx 0x8610 | fcn_00008610 ();
0x0005154a b 0x51516 |
| }
| label_22:
0x0005154c cmp r3, 0x3d |
0x0005154e it ne |
| if (r3 == 0x3d) {
0x00051550 cmpne r3, 0x26 | __asm ("cmpne r3, 0x26");
| goto label_30;
| }
| if (r3 != 0x3d) {
| label_30:
0x00051552 bne.w 0x51432 | goto label_0;
| }
0x00051556 add.w ip, r4, r8 |
0x0005155a ldrb r5, [ip, -0x1] | r5 = *((ip - 0x1));
0x0005155e cmp r5, 0 |
| if (r5 == 0) {
0x00051560 beq.w 0x517a2 | goto label_31;
| }
0x00051564 cmp r3, 0x26 |
0x00051566 itt ne |
| if (r3 == 0x26) {
0x00051568 movne r2, 2 | r2 = 2;
| }
| if (r3 != 0x26) {
0x0005156a movne r3, 0 | r3 = 0;
| goto label_32;
| }
| if (r3 != 0x26) {
| label_32:
0x0005156c bne.w 0x51432 | goto label_0;
| }
0x00051570 add.w r8, r8, 1 | r8++;
0x00051574 movs r3, 0 | r3 = 0;
0x00051576 strb r3, [r4, r0] | *((r4 + r0)) = r3;
0x00051578 mov r0, r8 | r0 = r8;
0x0005157a b 0x51432 | goto label_0;
| label_23:
0x0005157c cmp r2, 2 |
0x0005157e it eq |
| if (r2 == 2) {
0x00051580 cmpeq r3, 0x26 | __asm ("cmpeq r3, 0x26");
| }
0x00051582 ite eq |
| if (r2 != 2) {
0x00051584 moveq r5, 1 | r5 = 1;
| }
| if (r2 == 2) {
0x00051586 movne r5, 0 | r5 = 0;
| }
0x00051588 cmp r5, 0 |
0x0005158a itt ne |
| if (r5 == 0) {
0x0005158c movne r2, 1 | r2 = 1;
| }
| if (r5 == 0) {
0x0005158e movne r3, 0 | r3 = 0;
| }
0x00051590 b 0x51432 | goto label_0;
| do {
| label_19:
0x00051592 movs r6, 7 | r6 = 7;
0x00051594 mov r0, r6 | r0 = r6;
0x00051596 add sp, 0x1c |
0x00051598 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x0005159c movs r0, 8 | r0 = 8;
0x0005159e movs r1, 0 | r1 = 0;
0x000515a0 blx 0x8240 | r0 = fcn_00008240 ();
0x000515a4 mov r4, r0 | r4 = r0;
0x000515a6 cmp r0, 0 |
0x000515a8 beq 0x51592 |
| } while (r0 == 0);
0x000515aa str r6, [r4], 4 | *(r4) = r6;
| r4 += 4;
0x000515ae mov r7, r4 | r7 = r4;
0x000515b0 b 0x51518 | goto label_4;
| label_29:
0x000515b2 ldr r0, [pc, 0x24c] |
0x000515b4 mov r1, sl | r1 = sl;
0x000515b6 movs r6, 1 | r6 = 1;
0x000515b8 add r0, pc | r0 = 0xa2dbe;
0x000515ba blx 0x8644 | r0 = fcn_00008644 ();
0x000515be mov r3, r0 | r3 = r0;
| label_9:
0x000515c0 ldr r2, [sp, 0x44] | r2 = *(arg_44h);
0x000515c2 mov r0, r4 | r0 = r4;
0x000515c4 movs r4, 0 | r4 = 0;
0x000515c6 str r3, [r2] | *(r2) = r3;
0x000515c8 blx 0x8aac | fcn_00008aac ();
0x000515cc b 0x51530 | goto label_5;
| label_24:
0x000515ce cmp r2, 1 |
0x000515d0 ldrd r5, sb, [sp] | __asm ("ldrd r5, sb, [sp]");
0x000515d4 add.w ip, r4, r8 |
| if (r2 == 1) {
0x000515d8 beq.w 0x5177e | goto label_33;
| }
| label_13:
0x000515dc movs r3, 0 | r3 = 0;
0x000515de mov r0, r4 | r0 = r4;
0x000515e0 str.w r3, [ip] | __asm ("str.w r3, [ip]");
0x000515e4 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000515e8 bic r1, r0, 0xc0000000 | r1 = BIT_MASK (r0, 0xc0000000);
0x000515ec adds r1, 1 | r1++;
0x000515ee ldrb r3, [r4, r1] | r3 = *((r4 + r1));
0x000515f0 adds r7, r4, r1 | r7 = r4 + r1;
0x000515f2 cmp r3, 0 |
| if (r3 == 0) {
0x000515f4 beq 0x51520 | goto label_6;
| }
0x000515f6 ldr.w r8, [pc, 0x20c] |
0x000515fa str.w sl, [sp, 0x10] | __asm ("str.w sl, [var_10h]");
0x000515fe mov sl, r7 | sl = r7;
0x00051600 str.w fp, [sp, 0x14] | __asm ("str.w fp, [var_14h]");
0x00051604 add r8, pc | r8 = 0xa2e0e;
0x00051606 addw r3, r8, 0xae8 | __asm ("addw r3, r8, aav.0x000000ff");
0x0005160a str r3, [sp, 8] | var_8h = r3;
0x0005160c ldr r3, [pc, 0x1f8] |
0x0005160e add r3, pc | r3 = 0xa2e1a;
0x00051610 strd r3, r4, [sp] | __asm ("strd r3, r4, [sp]");
0x00051614 b 0x51634 |
| while (r4 != 3) {
0x00051616 cmp r4, 5 |
| if (r4 == 5) {
0x00051618 beq 0x51672 | goto label_34;
| }
0x0005161a cmp r4, 4 |
| if (r4 == 4) {
0x0005161c bne 0x51626 |
0x0005161e ldrb.w r2, [sl] | r2 = *(sl);
0x00051622 cmp r2, 0x6d |
| if (r2 == 0x6d) {
0x00051624 beq 0x516e0 | goto label_35;
| }
| }
| label_7:
0x00051626 adds r6, 1 | r6++;
0x00051628 ldrb.w r3, [r8, r6] | r3 = *((r8 + r6));
0x0005162c add.w sl, r8, r6 | sl = r8 + r6;
0x00051630 cmp r3, 0 |
| if (r3 == 0) {
0x00051632 beq 0x51712 | goto label_36;
| }
0x00051634 mov r0, sl | r0 = sl;
0x00051636 blx 0x85b4 | r0 = fcn_000085b4 ();
0x0005163a bic r4, r0, 0xc0000000 | r4 = BIT_MASK (r0, 0xc0000000);
0x0005163e adds r3, r4, 1 | r3 = r4 + 1;
0x00051640 add.w r8, sl, r3 | r8 = sl + r3;
0x00051644 mov r0, r8 | r0 = r8;
0x00051646 blx 0x85b4 | fcn_000085b4 ();
0x0005164a cmp r4, 3 |
0x0005164c bic r6, r0, 0xc0000000 | r6 = BIT_MASK (r0, 0xc0000000);
0x00051650 bne 0x51616 |
| }
0x00051652 ldrb.w r2, [sl] | r2 = *(sl);
0x00051656 cmp r2, 0x76 |
| if (r2 != 0x76) {
0x00051658 bne 0x51626 | goto label_7;
| }
0x0005165a ldrb.w r2, [sl, 1] | r2 = *((sl + 1));
0x0005165e cmp r2, 0x66 |
| if (r2 != 0x66) {
0x00051660 bne 0x51626 | goto label_7;
| }
0x00051662 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00051664 ldrb.w r2, [sl, 2] | r2 = *((sl + 2));
0x00051668 cmp r2, 0x73 |
0x0005166a it eq |
| if (r2 != 0x73) {
0x0005166c moveq r3, r8 | r3 = r8;
| }
0x0005166e str r3, [sp, 0x10] | var_10h = r3;
0x00051670 b 0x51626 | goto label_7;
| label_34:
0x00051672 ldr r0, [sp] | r0 = *(sp);
0x00051674 mov r2, r4 | r2 = r4;
0x00051676 mov r1, sl | r1 = sl;
0x00051678 blx 0x8214 | r0 = sysconf ();
0x0005167c cmp r0, 0 |
| if (r0 != 0) {
0x0005167e bne 0x51626 | goto label_7;
| }
0x00051680 ldr r2, [sp, 8] | r2 = var_8h;
0x00051682 mov.w sl, 0x60000 | sl = 0x60000;
0x00051686 ldr r3, [sp] | r3 = *(sp);
0x00051688 mov fp, sl |
0x0005168a str r3, [sp, 0xc] | var_ch = r3;
| label_10:
0x0005168c ldr r4, [r2] | r4 = *(r2);
| if (r4 == 0) {
0x0005168e cbz r4, 0x516cc | goto label_37;
| }
0x00051690 mov r7, r2 | r7 = r2;
0x00051692 b 0x5169a |
| while (r6 != r0) {
| label_8:
0x00051694 ldr r4, [r7, 8]! | r4 = *((r7 += 8));
| if (r4 == 0) {
0x00051698 cbz r4, 0x516cc | goto label_37;
| }
0x0005169a mov r0, r4 | r0 = r4;
0x0005169c blx 0x85b4 | r0 = fcn_000085b4 ();
0x000516a0 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x000516a4 cmp r6, r0 |
0x000516a6 bne 0x51694 |
| }
0x000516a8 mov r1, r4 | r1 = r4;
0x000516aa mov r2, r6 | r2 = r6;
0x000516ac mov r0, r8 | r0 = r8;
0x000516ae blx 0x8214 | r0 = sysconf ();
0x000516b2 cmp r0, 0 |
| if (r0 != 0) {
0x000516b4 bne 0x51694 | goto label_8;
| }
0x000516b6 ldr r2, [r7, 4] | r2 = *((r7 + 4));
| if (r2 != 0) {
0x000516b8 cbz r2, 0x516cc |
0x000516ba bic r1, r2, 0x80 | r1 = BIT_MASK (r2, 0x80);
0x000516be cmp r1, fp |
| if (r1 > fp) {
0x000516c0 bgt 0x5178e | goto label_38;
| }
0x000516c2 bic.w ip, r5, sl | ip = BIT_MASK (r5, sl);
0x000516c6 orr.w r5, r2, ip | r5 = r2 | ip;
0x000516ca b 0x51626 | goto label_7;
| }
| label_37:
0x000516cc ldr r0, [pc, 0x13c] |
0x000516ce mov r2, r8 | r2 = r8;
0x000516d0 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000516d2 movs r6, 1 | r6 = 1;
0x000516d4 ldr r4, [sp, 4] | r4 = var_4h;
0x000516d6 add r0, pc | r0 = 0xa2ee6;
0x000516d8 blx 0x8644 | r0 = fcn_00008644 ();
0x000516dc mov r3, r0 | r3 = r0;
0x000516de b 0x515c0 | goto label_9;
| label_35:
0x000516e0 ldrb.w r2, [sl, 1] | r2 = *((sl + 1));
0x000516e4 add.w r1, sl, 1 | r1 = sl + 1;
0x000516e8 cmp r2, 0x6f |
| if (r2 != 0x6f) {
0x000516ea bne 0x51626 | goto label_7;
| }
0x000516ec ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x000516f0 cmp r2, 0x64 |
| if (r2 != 0x64) {
0x000516f2 bne 0x51626 | goto label_7;
| }
0x000516f4 ldrb r2, [r1, 1] | r2 = *((r1 + 1));
0x000516f6 cmp r2, 0x65 |
| if (r2 != 0x65) {
0x000516f8 bne 0x51626 | goto label_7;
| }
0x000516fa ldr r2, [pc, 0x114] |
0x000516fc and fp, r5, 0x87 |
0x00051700 ldr r3, [pc, 0x110] |
0x00051702 mov.w sl, 0x87 | sl = 0x87;
0x00051706 add r2, pc |
0x00051708 add r3, pc | r3 = 0xa2f20;
0x0005170a add.w r2, r2, 0xb00 | r2 = 0xa3a1c;
0x0005170e str r3, [sp, 0xc] | var_ch = r3;
0x00051710 b 0x5168c | goto label_10;
| label_36:
0x00051712 ldr r4, [sp, 4] | r4 = var_4h;
0x00051714 ldrd sl, fp, [sp, 0x10] | __asm ("ldrd sl, fp, [var_10h]");
0x00051718 b 0x51520 | goto label_6;
| label_20:
0x0005171a ldrb r2, [r6, 6] | r2 = *((r6 + 6));
0x0005171c cmp r2, 0x2f |
0x0005171e itt ne |
| if (r2 == 0x2f) {
0x00051720 movne ip, 5 |
| }
| if (r2 == 0x2f) {
0x00051724 mov r7, ip | r7 = ip;
| goto label_39;
| }
| if (r2 != 0x2f) {
| label_39:
0x00051726 bne.w 0x5140e | goto label_11;
| }
0x0005172a ldrb r3, [r6, 7] | r3 = *((r6 + 7));
0x0005172c adds r1, r6, 7 | r1 = r6 + 7;
0x0005172e subs r2, r3, 0 | r2 = r3 - 0;
0x00051730 it ne |
| if (r2 == r3) {
0x00051732 movne r2, 1 | r2 = 1;
| }
0x00051734 cmp r3, 0x2f |
0x00051736 ite eq |
| if (r3 != 0x2f) {
0x00051738 moveq r0, 0 | r0 = 0;
| }
| if (r3 == 0x2f) {
0x0005173a andne r0, r2, 1 | r0 = r2 & 1;
| }
0x0005173e cmp r0, 0 |
| if (r0 == 0) {
0x00051740 beq 0x517ec | goto label_40;
| }
0x00051742 mov r0, r1 | r0 = r1;
0x00051744 movs r7, 7 | r7 = 7;
| do {
0x00051746 ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x0005174a mov r3, r7 | r3 = r7;
0x0005174c adds r7, 1 | r7++;
0x0005174e cmp r2, 0 |
0x00051750 it ne |
| if (r2 != 0) {
0x00051752 cmpne r2, 0x2f | __asm ("cmpne r2, 0x2f");
| }
0x00051754 bne 0x51746 |
| } while (r2 != 0);
0x00051756 cmp r7, 0x10 |
| if (r7 != 0x10) {
0x00051758 bne 0x517d2 | goto label_41;
| }
0x0005175a ldr r0, [pc, 0xbc] |
0x0005175c movs r2, 9 | r2 = 9;
0x0005175e str r3, [sp, 4] | var_4h = r3;
0x00051760 str r1, [sp] | *(sp) = r1;
0x00051762 add r0, pc | r0 = 0xa2f80;
0x00051764 blx 0x8214 | sysconf ();
0x00051768 ldrd r1, r3, [sp] | __asm ("ldrd r1, r3, [sp]");
| if (r0 != 0) {
0x0005176c cbnz r0, 0x517d2 | goto label_41;
| }
0x0005176e ldrb r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00051770 mov ip, r7 |
0x00051772 subs r2, r3, 0 | r2 = r3 - 0;
0x00051774 it ne |
| if (r2 == r3) {
0x00051776 movne r2, 1 | r2 = 1;
| }
0x00051778 b 0x513fe | goto label_12;
| do {
| label_14:
0x0005177a ldrd r5, sb, [sp] | __asm ("ldrd r5, sb, [sp]");
| label_33:
0x0005177e add.w r8, r8, 1 | r8++;
0x00051782 movs r3, 0 | r3 = 0;
0x00051784 strb.w r3, [ip] | *(ip) = r3;
0x00051788 add.w ip, r4, r8 |
0x0005178c b 0x515dc | goto label_13;
| label_38:
0x0005178e ldr r0, [pc, 0x8c] |
0x00051790 mov r2, r8 | r2 = r8;
0x00051792 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00051794 movs r6, 3 | r6 = 3;
0x00051796 ldr r4, [sp, 4] | r4 = var_4h;
0x00051798 add r0, pc | r0 = 0xa2fba;
0x0005179a blx 0x8644 | r0 = fcn_00008644 ();
0x0005179e mov r3, r0 | r3 = r0;
0x000517a0 b 0x515c0 | goto label_9;
| label_31:
0x000517a2 ldrb r3, [r6, r1] | r3 = *((r6 + r1));
0x000517a4 cmp r3, 0x23 |
0x000517a6 it ne |
| if (r3 != 0x23) {
0x000517a8 cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
0x000517aa beq 0x5177a |
| } while (r3 == 0x23);
0x000517ac subs r3, r7, 1 | r3 = r7 - 1;
0x000517ae add r3, r6 | r3 += r6;
0x000517b0 b 0x517bc | goto label_42;
| label_15:
0x000517b2 ldrb r1, [r3, 2] | r1 = *((r3 + 2));
0x000517b4 cmp r1, 0 |
0x000517b6 it ne |
| if (r1 == 0) {
0x000517b8 cmpne r1, 0x23 | __asm ("cmpne r1, 0x23");
| goto label_43;
| }
| if (r1 == 0) {
| label_43:
0x000517ba beq 0x5177a | goto label_14;
| }
| label_42:
0x000517bc mov r0, r3 | r0 = r3;
0x000517be ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x000517c2 cmp r1, 0x26 |
| if (r1 != 0x26) {
0x000517c4 bne 0x517b2 | goto label_15;
| }
0x000517c6 rsb.w r7, r6, 2 | r7 = 2 - r6;
0x000517ca add r7, r0 | r7 += r0;
0x000517cc b 0x5143a | goto label_2;
| label_21:
0x000517ce mov ip, r4 |
0x000517d0 b 0x515dc | goto label_13;
| label_41:
0x000517d2 ldr r0, [pc, 0x4c] |
0x000517d4 mov r2, r1 | r2 = r1;
0x000517d6 subs r1, r3, 6 | r1 = r3 - 6;
0x000517d8 movs r6, 1 | r6 = 1;
0x000517da add r0, pc | r0 = 0xa3000;
0x000517dc blx 0x8644 | r0 = fcn_00008644 ();
0x000517e0 mov r3, r0 | r3 = r0;
0x000517e2 b 0x515c0 | goto label_9;
| label_26:
0x000517e4 movs r2, 2 | r2 = 2;
0x000517e6 b 0x5143a | goto label_2;
| label_27:
0x000517e8 mov r2, r0 | r2 = r0;
0x000517ea b 0x5143a | goto label_2;
| label_40:
0x000517ec mov.w ip, 7 |
0x000517f0 mov r7, ip | r7 = ip;
0x000517f2 b 0x513fe | goto label_12;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x53004 */
| #include <stdint.h>
|
; (fcn) fcn.00053004 () | void fcn_00053004 (arithmetic x, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_128h, int16_t arg_12ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int32_t var_7ch_2;
| int16_t var_84h;
| int16_t var_ech;
| int16_t var_f0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00053004 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00053008 mov r6, r2 | r6 = r2;
0x0005300a sub sp, 0xf4 |
0x0005300c ldr.w r2, [pc, 0x88c] | r2 = *(0x0005389c);
0x00053010 mov r4, r0 | r4 = r0;
0x00053012 mov r8, r3 | r8 = r3;
0x00053014 ldr r0, [sp, 0x118] | r0 = *(x);
0x00053016 mov.w fp, 8 |
0x0005301a ldr.w r3, [pc, 0x884] |
0x0005301e add r2, pc | r2 += pc;
0x00053020 strd r0, r1, [sp, 8] | __asm ("strd r0, r1, [var_8h]");
0x00053024 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00053026 movs r2, 0 | r2 = 0;
0x00053028 ldr r3, [r3] | r3 = *(0x538a2);
0x0005302a str r3, [sp, 0xec] | var_ech = r3;
0x0005302c mov.w r3, 0 | r3 = 0;
0x00053030 str r2, [sp, 0x68] | var_68h = r2;
0x00053032 ldr r2, [sp, 0x124] | r2 = *(arg_124h);
0x00053034 ldrb.w r3, [r4, 0x2e] | r3 = *((r4 + 0x2e));
0x00053038 str r2, [sp, 0x18] | var_18h = r2;
0x0005303a ldr r2, [sp, 0x128] | r2 = *(arg_128h);
0x0005303c str r2, [sp, 0x14] | var_14h = r2;
0x0005303e ldr r2, [sp, 0x12c] | r2 = *(arg_12ch);
0x00053040 str r2, [sp, 0x10] | var_10h = r2;
0x00053042 cmp r3, 0 |
| if (r3 != 0) {
0x00053044 bne.w 0x531bc | goto label_9;
| }
0x00053048 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
| if (r3 == 0) {
0x0005304c cbnz r3, 0x53064 |
0x0005304e ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00053050 movs r2, 1 | r2 = 1;
0x00053052 movs r3, 0xa | r3 = 0xa;
0x00053054 mov r1, r2 | r1 = r2;
0x00053056 ldr r5, [r0] | r5 = *(r0);
0x00053058 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x0005305a blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005305c mov fp, r0 |
0x0005305e cmp r0, 0 |
| if (r0 != 0) {
0x00053060 bne.w 0x53184 | goto label_4;
| }
| }
0x00053064 mov.w sl, 1 | sl = 1;
0x00053068 strb.w sl, [r4, 0x2d] | *((r4 + 0x2d)) = sl;
0x0005306c cmp r6, 0 |
| if (r6 != 0) {
0x0005306e bne.w 0x53212 | goto label_36;
| }
| label_3:
0x00053072 add r1, sp, 0x68 | r1 += var_68h;
0x00053074 mov r0, r4 | r0 = r4;
0x00053076 bl 0x401a4 | fcn_000401a4 (r0, r1);
0x0005307a ldr r5, [sp, 0x68] | r5 = var_68h;
0x0005307c mov fp, r0 |
0x0005307e cmp r5, 0 |
| if (r5 == 0) {
0x00053080 beq 0x53180 | goto label_37;
| }
0x00053082 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00053084 ldr r3, [r0] | r3 = *(r0);
0x00053086 ldr r2, [r3] | r2 = *(r3);
0x00053088 cmp r2, 2 |
| if (r2 > 2) {
0x0005308a ble 0x53098 |
0x0005308c movs r2, 0 | r2 = 0;
0x0005308e str r2, [sp] | *(sp) = r2;
0x00053090 movs r2, 0 | r2 = 0;
0x00053092 ldr r1, [r3, 0x48] | r1 = *((r3 + 0x48));
0x00053094 movs r3, 0 | r3 = 0;
0x00053096 blx r1 | uint32_t (*r1)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| }
0x00053098 cmp.w fp, 0 |
| if (fp != 0) {
0x0005309c bne.w 0x532a6 | goto label_38;
| }
| label_0:
0x000530a0 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x000530a2 str r3, [sp, 0x20] | var_20h = r3;
0x000530a4 cmp r3, 0 |
| if (r3 == 0) {
0x000530a6 beq.w 0x532ac | goto label_39;
| }
0x000530aa ldrh.w r3, [r4, 0x42] | r3 = *((r4 + 0x42));
0x000530ae and r2, r3, 0xfe00 | r2 = r3 & 0xfe00;
0x000530b2 lsls r3, r3, 0x10 | r3 <<= 0x10;
0x000530b4 and r3, r3, 0x10000 | r3 &= 0x10000;
0x000530b8 orrs r3, r2 | r3 |= r2;
0x000530ba ldr r2, [sp, 0x120] | r2 = *(arg_120h);
0x000530bc str r3, [sp, 0x30] | var_30h = r3;
0x000530be cmp r2, r3 |
| if (r2 != r3) {
0x000530c0 bne.w 0x5323a | goto label_40;
| }
0x000530c4 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000530c6 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000530c8 ldr r2, [r3] | r2 = *(r3);
0x000530ca ldr r3, [r2, 0x60] | r3 = *((r2 + 0x60));
0x000530cc str r2, [sp, 0x38] | var_38h = r2;
0x000530ce cmp r1, r3 |
| if (r1 < r3) {
0x000530d0 bls.w 0x5331a | goto label_41;
| }
0x000530d4 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x000530d6 movs r5, 1 | r5 = 1;
0x000530d8 str r6, [sp, 0x24] | var_24h = r6;
0x000530da add.w r7, r2, 0x68 | r7 = r2 + 0x68;
0x000530de mov.w fp, 0 |
0x000530e2 mov sb, r4 | sb = r4;
0x000530e4 mov r6, r1 | r6 = r1;
0x000530e6 str r3, [sp, 0x2c] | var_2ch = r3;
0x000530e8 str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch]");
| do {
0x000530ec ldr r4, [r7] | r4 = *(r7);
0x000530ee cmp r4, r6 |
| if (r4 <= r6) {
0x000530f0 blo.w 0x53264 | goto label_42;
| }
| label_6:
0x000530f4 adds r5, 1 | r5++;
0x000530f6 adds r7, 4 | r7 += 4;
0x000530f8 cmp r5, 5 |
0x000530fa bne 0x530ec |
| } while (r5 != 5);
0x000530fc ldr r3, [sp, 0x38] | r3 = var_38h;
0x000530fe mov r2, r6 | r2 = r6;
0x00053100 ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x00053104 mov r4, sb | r4 = sb;
0x00053106 str r6, [sp, 0x20] | var_20h = r6;
0x00053108 ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x0005310a ldr r6, [sp, 0x24] | r6 = var_24h;
0x0005310c cmp r3, r2 |
0x0005310e itt hs |
| if (r3 < r2) {
0x00053110 movhs r3, 0 | r3 = 0;
| }
| if (r3 < r2) {
0x00053112 strhs r3, [sp, 0x1c] | var_1ch = r3;
| }
| if (r3 <= r2) {
0x00053114 blo.w 0x53326 | goto label_43;
| }
| label_23:
0x00053118 cmp.w fp, 5 |
| if (fp == 5) {
0x0005311c beq.w 0x5331e | goto label_13;
| }
0x00053120 clz r5, fp | r5 &= fp;
0x00053124 lsrs r5, r5, 5 | r5 >>= 5;
0x00053126 cmp r6, 0 |
0x00053128 ite eq |
| if (r6 != 0) {
0x0005312a moveq r3, 0 | r3 = 0;
| }
| if (r6 == 0) {
0x0005312c andne r3, r5, 1 | r3 = r5 & 1;
| }
0x00053130 cmp r3, 0 |
| if (r3 == 0) {
0x00053132 beq.w 0x533de | goto label_26;
| }
| label_11:
0x00053136 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00053138 ldr r2, [r3, 0x60] | r2 = *((r3 + 0x60));
0x0005313a ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x0005313c cmp r2, r3 |
| if (r2 >= r3) {
0x0005313e bhs.w 0x532ce | goto label_44;
| }
0x00053142 mov.w sl, 1 | sl = 1;
0x00053146 mov.w fp, 5 |
0x0005314a ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0005314c blx 0x8404 | fcn_00008404 ();
| label_8:
0x00053150 ldr r2, [sp, 0x14] | r2 = var_14h;
| if (r2 != 0) {
0x00053152 cbz r2, 0x53158 |
0x00053154 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x00053156 str r3, [r2] | *(r2) = r3;
| }
0x00053158 ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r3 != 0) {
0x0005315a cbz r3, 0x53166 |
0x0005315c ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0005315e ldr r2, [sp, 0x10] | r2 = var_10h;
0x00053160 ldr r3, [r3] | r3 = *(r3);
0x00053162 ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x00053164 str r3, [r2] | *(r2) = r3;
| }
| label_10:
0x00053166 ldr r5, [sp, 0x68] | r5 = var_68h;
| if (r5 != 0) {
| label_5:
0x00053168 cbz r5, 0x53176 |
| label_7:
0x0005316a movs r2, 0x30 | r2 = 0x30;
0x0005316c movs r1, 0 | r1 = 0;
0x0005316e add.w r0, r4, 0x34 | r0 = r4 + 0x34;
0x00053172 blx 0x839c | fcn_0000839c ();
| }
0x00053176 ldrb.w r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0005317a cmp r3, 0 |
| if (r3 == 0) {
0x0005317c beq 0x53200 | goto label_45;
| }
0x0005317e b 0x531e2 | goto label_46;
| label_37:
0x00053180 cmp r0, 0 |
| if (r0 == 0) {
0x00053182 beq 0x530a0 | goto label_0;
| }
| label_4:
0x00053184 ldrb.w r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
| if (r3 != 0) {
0x00053188 cbnz r3, 0x531de | goto label_47;
| }
0x0005318a ldrb.w r2, [r4, 0x2d] | r2 = *((r4 + 0x2d));
| if (r2 == 0) {
0x0005318e cbz r2, 0x531bc | goto label_9;
| }
0x00053190 ldrb.w r2, [r4, 0x2b] | r2 = *((r4 + 0x2b));
0x00053194 mov.w sl, 1 | sl = 1;
0x00053198 cmp r2, 0 |
| if (r2 != 0) {
0x0005319a bne.w 0x532c2 | goto label_48;
| }
| label_1:
0x0005319e ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000531a0 movs r2, 1 | r2 = 1;
0x000531a2 mov r1, r2 | r1 = r2;
0x000531a4 ldr r3, [r0] | r3 = *(r0);
0x000531a6 ldr r5, [r3, 0x38] | r5 = *((r3 + 0x38));
0x000531a8 movs r3, 9 | r3 = 9;
0x000531aa blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_2:
0x000531ac movs r3, 0 | r3 = 0;
0x000531ae strb.w r3, [r4, 0x2d] | *((r4 + 0x2d)) = r3;
| do {
0x000531b2 cmp.w sl, 0 |
0x000531b6 it eq |
| if (sl != 0) {
0x000531b8 moveq fp, 5 |
| }
| label_9:
0x000531bc ldr.w r2, [pc, 0x6e4] |
0x000531c0 ldr.w r3, [pc, 0x6dc] | r3 = *(0x538a0);
0x000531c4 add r2, pc | r2 = 0xa6a6c;
0x000531c6 ldr r3, [r2, r3] | r3 = *(0xa6a6c);
0x000531c8 ldr r2, [r3] | r2 = *(0xa6a6c);
0x000531ca ldr r3, [sp, 0xec] | r3 = var_ech;
0x000531cc eors r2, r3 | r2 ^= r3;
0x000531ce mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000531d2 bne.w 0x53898 | goto label_49;
| }
0x000531d6 mov r0, fp | r0 = fp;
0x000531d8 add sp, 0xf4 |
0x000531da pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_47:
0x000531de mov.w sl, 1 | sl = 1;
| label_46:
0x000531e2 ldrb.w r1, [r4, 0x2b] | r1 = *((r4 + 0x2b));
| if (r1 == 0) {
0x000531e6 cbnz r1, 0x531f4 |
0x000531e8 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000531ea movs r3, 9 | r3 = 9;
0x000531ec movs r2, 1 | r2 = 1;
0x000531ee ldr r5, [r0] | r5 = *(r0);
0x000531f0 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x000531f2 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
| }
0x000531f4 movs r3, 0 | r3 = 0;
0x000531f6 strb.w r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000531fa str r3, [r4, 0x68] | *((r4 + 0x68)) = r3;
0x000531fc strb.w r3, [r4, 0x2f] | *((r4 + 0x2f)) = r3;
| label_45:
0x00053200 ldrb.w r3, [r4, 0x2d] | r3 = *((r4 + 0x2d));
0x00053204 cmp r3, 0 |
0x00053206 beq 0x531b2 |
| } while (r3 == 0);
0x00053208 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x0005320c cmp r3, 0 |
| if (r3 == 0) {
0x0005320e beq 0x5319e | goto label_1;
| }
0x00053210 b 0x531ac | goto label_2;
| label_36:
0x00053212 ldr r2, [sp, 8] | r2 = var_8h;
0x00053214 movs r3, 0 | r3 = 0;
0x00053216 mov r1, r8 | r1 = r8;
0x00053218 mov r0, r4 | r0 = r4;
0x0005321a str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0005321e bl 0x149d8 | r0 = fcn_000149d8 (r0, r1, r2, r3, r4);
0x00053222 mov fp, r0 |
| if (r0 == 0) {
0x00053224 cbnz r0, 0x5322c |
0x00053226 strb.w sl, [r4, 0x2c] | *((r4 + 0x2c)) = sl;
0x0005322a b 0x53072 | goto label_3;
| }
0x0005322c cmp r0, 5 |
| if (r0 != 5) {
0x0005322e bne 0x53184 | goto label_4;
| }
0x00053230 mov.w r8, 0 | r8 = 0;
0x00053234 mov sl, r8 | sl = r8;
0x00053236 mov r6, r8 | r6 = r8;
0x00053238 b 0x53072 | goto label_3;
| label_40:
0x0005323a blx 0x83b8 | strerror_r ();
0x0005323e ldr.w r2, [pc, 0x668] |
0x00053242 adds r0, 0x14 | r0 += 0x14;
0x00053244 ldr.w r1, [pc, 0x664] |
0x00053248 movs r3, 0x24 | r3 = 0x24;
0x0005324a str r0, [sp] | *(sp) = r0;
0x0005324c movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x00053250 add r2, pc | r2 = 0xa6afe;
0x00053252 movs r0, 0xb | r0 = 0xb;
0x00053254 add r1, pc | r1 = 0xa6b04;
0x00053256 mov.w sl, 1 | sl = 1;
0x0005325a mov.w fp, 0xb |
0x0005325e blx 0x8b60 | fcn_00008b60 ();
0x00053262 b 0x53168 | goto label_5;
| label_42:
0x00053264 movs r3, 1 | r3 = 1;
0x00053266 add.w sl, r5, 3 | sl = r5 + 3;
0x0005326a str r3, [sp] | *(sp) = r3;
0x0005326c mov r1, r8 | r1 = r8;
0x0005326e ldr r2, [sp, 8] | r2 = var_8h;
0x00053270 mov r3, sl | r3 = sl;
0x00053272 mov r0, sb | r0 = sb;
0x00053274 bl 0x149d8 | r0 = fcn_000149d8 (r0, r1, r2, r3, r4);
0x00053278 mov fp, r0 |
0x0005327a cmp r0, 0 |
| if (r0 != 0) {
0x0005327c bne 0x5330c | goto label_50;
| }
0x0005327e cmp r5, 1 |
0x00053280 ite eq |
| if (r5 != 1) {
0x00053282 moveq r2, r6 | r2 = r6;
| }
| if (r5 == 1) {
0x00053284 movne r2, -1 | r2 = -1;
| }
0x00053288 str r2, [r7] | *(r7) = r2;
0x0005328a ldrb.w r2, [sb, 0x2b] | r2 = *((sb + 0x2b));
0x0005328e cmp r2, 0 |
| if (r2 != 0) {
0x00053290 bne.w 0x530f4 | goto label_6;
| }
0x00053294 ldr.w r0, [sb, 4] | r0 = *((sb + 4));
0x00053298 mov r1, sl | r1 = sl;
0x0005329a movs r3, 9 | r3 = 9;
0x0005329c movs r2, 1 | r2 = 1;
0x0005329e ldr r4, [r0] | r4 = *(r0);
0x000532a0 ldr r4, [r4, 0x38] | r4 = *((r4 + 0x38));
0x000532a2 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000532a4 b 0x530f4 | goto label_6;
| label_38:
0x000532a6 mov.w sl, 1 | sl = 1;
0x000532aa b 0x5316a | goto label_7;
| label_39:
0x000532ac ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000532ae ldr r3, [r3] | r3 = *(r3);
0x000532b0 ldr r2, [r3, 0x60] | r2 = *((r3 + 0x60));
| if (r6 != 0) {
0x000532b2 cbnz r6, 0x532c8 | goto label_51;
| }
0x000532b4 str r6, [sp, 0x1c] | var_1ch = r6;
| do {
| label_12:
0x000532b6 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000532b8 mov.w fp, 0 |
0x000532bc blx 0x8404 | fcn_00008404 ();
0x000532c0 b 0x53150 | goto label_8;
| label_48:
0x000532c2 strb.w r3, [r4, 0x2d] | *((r4 + 0x2d)) = r3;
0x000532c6 b 0x531bc | goto label_9;
| label_51:
0x000532c8 ldr r3, [r3, 0x60] | r3 = *((r3 + 0x60));
0x000532ca ldr r3, [sp, 0x20] | r3 = var_20h;
0x000532cc str r3, [sp, 0x1c] | var_1ch = r3;
| label_44:
0x000532ce cmp r6, 1 |
0x000532d0 ble 0x532b6 |
| } while (r6 <= 1);
0x000532d2 add r1, sp, 0x78 | r1 += var_78h;
0x000532d4 movs r0, 4 | r0 = 4;
0x000532d6 blx 0x8ac4 | fcn_00008ac4 ();
0x000532da movs r3, 4 | r3 = 4;
0x000532dc ldr r2, [sp, 8] | r2 = var_8h;
0x000532de mov r1, r8 | r1 = r8;
0x000532e0 mov r0, r4 | r0 = r4;
0x000532e2 str r3, [sp] | *(sp) = r3;
0x000532e4 bl 0x149d8 | r0 = fcn_000149d8 (r0, r1, r2, r3, r4);
0x000532e8 mov fp, r0 |
0x000532ea cmp r0, 0 |
| if (r0 == 0) {
0x000532ec beq.w 0x5372c | goto label_52;
| }
0x000532f0 sub.w r5, r0, 5 | r5 = r0 - 5;
0x000532f4 mov.w sl, 1 | sl = 1;
0x000532f8 clz r5, r5 | r5 &= r5;
0x000532fc lsrs r5, r5, 5 | r5 >>= 5;
| label_14:
0x000532fe ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00053300 blx 0x8404 | fcn_00008404 ();
0x00053304 cmp r5, 0 |
| if (r5 == 0) {
0x00053306 beq.w 0x53166 | goto label_10;
| }
0x0005330a b 0x53150 | goto label_8;
| label_50:
0x0005330c cmp r0, 5 |
| if (r0 != 5) {
0x0005330e bne.w 0x53806 | goto label_53;
| }
0x00053312 mov r6, r4 | r6 = r4;
0x00053314 mov.w r8, 0 | r8 = 0;
0x00053318 b 0x530f4 | goto label_6;
| label_41:
0x0005331a movs r3, 0 | r3 = 0;
0x0005331c str r3, [sp, 0x1c] | var_1ch = r3;
| label_13:
0x0005331e cmp r6, 0 |
| if (r6 != 0) {
0x00053320 bne.w 0x53136 | goto label_11;
| }
0x00053324 b 0x532b6 | goto label_12;
| label_43:
0x00053326 ldr.w r2, [sb, 0x44] | r2 = *((sb + 0x44));
0x0005332a movs r1, 0 | r1 = 0;
0x0005332c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0005332e str r2, [sp, 0x64] | var_64h = r2;
0x00053330 ldr.w sb, [r3, 0x60] | sb = *((r3 + 0x60));
0x00053334 add.w r3, r2, 0x21 | r3 = r2 + 0x21;
0x00053338 lsrs r0, r3, 0xc | r0 = r3 >> 0xc;
0x0005333a adds r2, 0xe | r2 += 0xe;
0x0005333c add.w r3, r0, r0, lsl 2 | r3 = r0 + (r0 << 2);
0x00053340 str r0, [sp, 0x50] | var_50h = r0;
0x00053342 adds r5, r0, 1 | r5 = r0 + 1;
0x00053344 add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x00053348 lsls r7, r2, 1 | r7 = r2 << 1;
0x0005334a mov r0, r7 | r0 = r7;
0x0005334c blx 0x8240 | fcn_00008240 ();
0x00053350 str r0, [sp, 0x1c] | var_1ch = r0;
0x00053352 cmp r0, 0 |
| if (r0 == 0) {
0x00053354 beq.w 0x5378e | goto label_54;
| }
0x00053358 mov r2, r7 | r2 = r7;
0x0005335a movs r1, 0 | r1 = 0;
0x0005335c blx 0x839c | fcn_0000839c ();
0x00053360 ldr r0, [sp, 0x64] | r0 = var_64h;
0x00053362 movs r1, 0 | r1 = 0;
0x00053364 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00053366 cmp.w r0, 0x1000 |
0x0005336a it hs |
| if (r0 < 0x1000) {
0x0005336c movhs r0, 0x1000 | r0 = 0x1000;
| }
0x00053370 str r5, [r3, 4] | *((r3 + 4)) = r5;
0x00053372 lsls r0, r0, 1 | r0 <<= 1;
0x00053374 blx 0x8240 | r0 = fcn_00008240 ();
0x00053378 mov r7, r0 | r7 = r0;
0x0005337a cmp r0, 0 |
| if (r0 == 0) {
0x0005337c beq.w 0x5377a | goto label_55;
| }
0x00053380 add.w r2, sb, 0x22 | r2 = sb + 0x22;
0x00053384 lsrs r2, r2, 0xc | r2 >>= 0xc;
0x00053386 cmp r5, r2 |
| if (r5 <= r2) {
0x00053388 ble.w 0x5350c | goto label_56;
| }
0x0005338c ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0005338e add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x00053392 strd sl, r6, [sp, 0x40] | __asm ("strd sl, r6, [var_44h]");
0x00053396 add.w sb, sp, 0x6c | sb += var_6ch;
0x0005339a str r2, [sp, 0x34] | var_34h = r2;
0x0005339c str.w r8, [sp, 0x48] | __asm ("str.w r8, [var_48h]");
0x000533a0 add.w r3, r1, r3, lsl 2 | r3 = r1 + (r3 << 2);
0x000533a4 str r3, [sp, 0x54] | var_54h = r3;
0x000533a6 add r3, sp, 0x78 | r3 += var_78h;
0x000533a8 str r3, [sp, 0x3c] | var_3ch = r3;
0x000533aa add r3, sp, 0x70 | r3 += var_70h;
0x000533ac mov sl, r3 | sl = r3;
| label_17:
0x000533ae ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x000533b0 mov r0, r4 | r0 = r4;
0x000533b2 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000533b4 bl 0x1cd58 | r0 = fcn_0001cd58 (r0, r1, r2);
0x000533b8 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x000533ba cbz r0, 0x533ea | goto label_57;
| }
0x000533bc mov fp, r0 |
0x000533be mov r0, r7 | r0 = r7;
0x000533c0 ldr.w sl, [sp, 0x40] | sl = var_40h;
0x000533c4 ldrd r6, r8, [sp, 0x44] | __asm ("ldrd r6, r8, [var_44h]");
0x000533c8 blx 0x8404 | fcn_00008404 ();
0x000533cc ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000533ce blx 0x8404 | fcn_00008404 ();
0x000533d2 movs r3, 0 | r3 = 0;
0x000533d4 str r3, [sp, 0x1c] | var_1ch = r3;
| label_19:
0x000533d6 cmp.w fp, 5 |
| if (fp == 5) {
0x000533da beq 0x5331e | goto label_13;
| }
| label_25:
0x000533dc movs r5, 0 | r5 = 0;
| label_26:
0x000533de cmp.w fp, 0 |
0x000533e2 it ne |
| if (fp == 0) {
0x000533e4 orrne sl, sl, 1 | sl |= 1;
| }
0x000533e8 b 0x532fe | goto label_14;
| label_57:
0x000533ea ldr r3, [sp, 0x34] | r3 = var_34h;
0x000533ec ldr r1, [sp, 0x50] | r1 = var_50h;
0x000533ee ldrd r8, r2, [sp, 0x7c] | __asm ("ldrd r8, r2, [var_7ch]");
0x000533f2 cmp r3, r1 |
0x000533f4 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000533f6 itete ne |
| if (r3 == r1) {
0x000533f8 ldrne r3, [sp, 0x78] | r3 = var_78h;
| }
| if (r3 != r1) {
0x000533fa ldreq r3, [sp, 0x64] | r3 = var_64h;
| }
| if (r3 == r1) {
0x000533fc subne r3, r3, r8 | r3 -= r8;
| }
| if (r3 == r1) {
0x00053400 sub.w fp, r3, r2 |
| }
0x00053404 it ne |
| if (r3 != r1) {
0x00053406 asrne fp, r3, 2 | __asm ("asrne fp, r3, 2");
| }
0x0005340a ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0005340c cmp.w fp, 0 |
0x00053410 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00053414 lsl.w r3, r3, 2 | r3 <<= 2;
0x00053418 add.w r3, r3, 8 | r3 += 8;
0x0005341c add.w r3, r3, r2, lsl 1 | r3 += (r2 << 1);
0x00053420 add.w r2, r2, 1 | r2++;
0x00053424 str r2, [sp, 0x58] | var_58h = r2;
0x00053426 add r3, r1 | r3 += r1;
0x00053428 str r3, [sp, 0x4c] | var_4ch = r3;
| if (fp <= 0) {
0x0005342a ble.w 0x5379e | goto label_58;
| }
0x0005342e subs r2, r3, 2 | r2 = r3 - 2;
0x00053430 movs r3, 0 | r3 = 0;
| do {
0x00053432 strh r3, [r2, 2]! | *((r2 += 2)) = r3;
0x00053436 adds r3, 1 | r3++;
0x00053438 cmp r3, fp |
0x0005343a bne 0x53432 |
| } while (r3 != fp);
0x0005343c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0005343e add r0, sp, 0x84 | r0 += var_84h;
0x00053440 movs r2, 0x68 | r2 = 0x68;
0x00053442 movs r1, 0 | r1 = 0;
0x00053444 str r0, [sp, 0x28] | var_28h = r0;
0x00053446 str r3, [sp, 0x60] | var_60h = r3;
0x00053448 blx 0x839c | fcn_0000839c ();
0x0005344c ldr r3, [sp, 0x60] | r3 = var_60h;
0x0005344e str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x00053452 mov fp, r6 |
0x00053454 mov r6, sb | r6 = sb;
0x00053456 str r4, [sp, 0x5c] | var_5ch = r4;
0x00053458 mov sb, r3 | sb = r3;
| label_15:
0x0005345a movs r3, 1 | r3 = 1;
0x0005345c mov r4, sb | r4 = sb;
0x0005345e ands.w r5, fp, r3 | r5 = fp & r3;
0x00053462 strd r3, sb, [sp, 0x6c] | __asm ("strd r3, sb, [var_70h]");
| if (r5 == fp) {
0x00053466 beq 0x534fe | goto label_59;
| }
0x00053468 ldr r4, [sp, 0x28] | r4 = var_28h;
0x0005346a movs r5, 0 | r5 = 0;
| do {
0x0005346c mov r3, sl | r3 = sl;
0x0005346e strd r6, r7, [sp] | __asm ("strd r6, r7, [sp]");
0x00053472 adds r5, 1 | r5++;
0x00053474 ldrd r2, r1, [r4] | __asm ("ldrd r2, r1, [r4]");
0x00053478 mov r0, r8 | r0 = r8;
0x0005347a adds r4, 8 | r4 += 8;
0x0005347c bl 0xd7e0 | fcn_0000d7e0 (r0, r1, r2, r3, r4, r5);
0x00053480 asr.w r3, fp, r5 | r3 = fp >> r5;
0x00053484 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
0x00053486 bmi 0x5346c |
| } while (r1 < r3);
0x00053488 ldrd r0, r4, [sp, 0x6c] | __asm ("ldrd r0, r4, [var_70h]");
| label_18:
0x0005348c add r3, sp, 0xf0 | r3 += var_f0h;
0x0005348e add.w fp, fp, 1 |
0x00053492 add.w r2, r3, r5, lsl 3 | r2 = r3 + (r5 << 3);
0x00053496 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00053498 add.w sb, sb, 2 | sb += 2;
0x0005349c strd r0, r4, [r2, -0x6c] | __asm ("strd r0, r4, [var_84h]");
0x000534a0 cmp fp, r3 |
| if (fp != r3) {
0x000534a2 bne 0x5345a | goto label_15;
| }
0x000534a4 adds r5, 1 | r5++;
0x000534a6 ldr r4, [sp, 0x5c] | r4 = var_5ch;
0x000534a8 cmp r5, 0xc |
0x000534aa mov fp, r3 |
0x000534ac mov sb, r6 | sb = r6;
| if (r5 > 0xc) {
0x000534ae bhi 0x534dc | goto label_60;
| }
| label_27:
0x000534b0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000534b2 add.w r6, r3, r5, lsl 3 | r6 = r3 + (r5 << 3);
0x000534b6 b 0x534c0 |
| while (r2 >= r3) {
| label_16:
0x000534b8 adds r5, 1 | r5++;
0x000534ba adds r6, 8 | r6 += 8;
0x000534bc cmp r5, 0xd |
| if (r5 == 0xd) {
0x000534be beq 0x534da | goto label_61;
| }
0x000534c0 asr.w r3, fp, r5 | r3 = fp >> r5;
0x000534c4 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
0x000534c6 bpl 0x534b8 |
| }
0x000534c8 strd sb, r7, [sp] | __asm ("strd sb, r7, [sp]");
0x000534cc mov r3, sl | r3 = sl;
0x000534ce ldrd r2, r1, [r6] | __asm ("ldrd r2, r1, [r6]");
0x000534d2 mov r0, r8 | r0 = r8;
0x000534d4 bl 0xd7e0 | fcn_0000d7e0 (r0, r1, r2, r3, r4, r5);
0x000534d8 b 0x534b8 | goto label_16;
| label_61:
0x000534da ldr r0, [sp, 0x6c] | r0 = var_6ch;
| label_60:
0x000534dc ldrd r3, r2, [sp, 0x54] | __asm ("ldrd r3, r2, [var_54h]");
0x000534e0 ldr r1, [sp, 0x50] | r1 = var_50h;
0x000534e2 strd r0, r2, [r3, 0x14] | __asm ("strd r0, r2, [r3, 0x14]");
0x000534e6 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000534e8 strd r2, r8, [r3, 0xc] | __asm ("strd r2, r8, [r3, 0xc]");
0x000534ec adds r3, 0x14 | r3 += 0x14;
0x000534ee ldr r2, [sp, 0x34] | r2 = var_34h;
0x000534f0 str r3, [sp, 0x54] | var_54h = r3;
0x000534f2 cmp r2, r1 |
0x000534f4 add.w r3, r2, 1 | r3 = r2 + 1;
| if (r2 < r1) {
0x000534f8 bge 0x53502 |
0x000534fa str r3, [sp, 0x34] | var_34h = r3;
0x000534fc b 0x533ae | goto label_17;
| label_59:
0x000534fe movs r0, 1 | r0 = 1;
0x00053500 b 0x5348c | goto label_18;
| }
0x00053502 ldrd sl, r6, [sp, 0x40] | __asm ("ldrd sl, r6, [var_44h]");
0x00053506 mov r0, r7 | r0 = r7;
0x00053508 ldr.w r8, [sp, 0x48] | r8 = var_48h;
| label_56:
0x0005350c blx 0x8404 | fcn_00008404 ();
0x00053510 movs r3, 1 | r3 = 1;
0x00053512 ldr r2, [sp, 8] | r2 = var_8h;
0x00053514 str r3, [sp] | *(sp) = r3;
0x00053516 mov r1, r8 | r1 = r8;
0x00053518 movs r3, 3 | r3 = 3;
0x0005351a mov r0, r4 | r0 = r4;
0x0005351c bl 0x149d8 | r0 = fcn_000149d8 (r0, r1, r2, r3, r4);
0x00053520 mov fp, r0 |
0x00053522 cmp r0, 0 |
| if (r0 != 0) {
0x00053524 bne.w 0x533d6 | goto label_19;
| }
0x00053528 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0005352a ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0005352c ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0005352e ldr r1, [r2, 0x60] | r1 = *((r2 + 0x60));
0x00053530 ubfx r3, r3, 2, 2 | r3 = (r3 >> 2) & ((1 << 2) - 1);
0x00053534 str r3, [sp, 0x44] | var_44h = r3;
0x00053536 str r1, [sp, 0x24] | var_24h = r1;
0x00053538 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0005353a str.w r1, [r2, 0x80] | __asm ("str.w r1, [r2, 0x80]");
| if (r3 == 0) {
0x0005353e cbz r3, 0x53574 | goto label_62;
| }
0x00053540 ldr r3, [r0] | r3 = *(r0);
0x00053542 ldr r1, [sp, 0x44] | r1 = var_44h;
0x00053544 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00053546 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x00053548 str r0, [sp, 0x28] | var_28h = r0;
0x0005354a cbz r0, 0x53574 |
| while (r0 != 0) {
| label_22:
0x0005354c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0005354e ldr r3, [r0] | r3 = *(r0);
0x00053550 cmp r3, 0 |
| if (r3 == 0) {
0x00053552 beq.w 0x53892 | goto label_63;
| }
| label_30:
0x00053556 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00053558 movs r2, 0 | r2 = 0;
0x0005355a movs r1, 0x25 | r1 = 0x25;
0x0005355c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x0005355e ldr r3, [sp, 0x28] | r3 = var_28h;
0x00053560 cmp r3, 0 |
| if (r3 == 0) {
0x00053562 beq.w 0x53700 | goto label_31;
| }
| label_28:
0x00053566 mov fp, r3 |
| label_35:
0x00053568 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x0005356c cmp r3, 0 |
| if (r3 == 0) {
0x0005356e beq.w 0x5371c | goto label_24;
| }
0x00053572 b 0x533d6 | goto label_19;
| label_62:
0x00053574 ldrd r2, r1, [sp, 0x2c] | __asm ("ldrd r2, r1, [var_30h]");
0x00053578 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0005357a umull r1, r2, r2, r1 | r1:r2 = r2 * r1;
0x0005357e ldr r3, [r0] | r3 = *(r0);
0x00053580 strd r1, r2, [sp, 0x70] | __asm ("strd r1, r2, [var_70h]");
| if (r3 != 0) {
0x00053584 cbz r3, 0x53590 |
0x00053586 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00053588 movs r2, 0 | r2 = 0;
0x0005358a movs r1, 0x27 | r1 = 0x27;
0x0005358c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x0005358e ldr r0, [r4, 4] | r0 = *((r4 + 4));
| }
0x00053590 ldr r3, [r0] | r3 = *(r0);
0x00053592 add r1, sp, 0x78 | r1 += var_78h;
0x00053594 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00053596 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00053598 str r0, [sp, 0x28] | var_28h = r0;
0x0005359a cmp r0, 0 |
0x0005359c bne 0x5354c |
| }
0x0005359e ldr r2, [sp, 0x78] | r2 = var_78h;
0x000535a0 ldr r5, [sp, 0x70] | r5 = var_70h;
0x000535a2 ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x000535a4 ldr r0, [sp, 0x74] | r0 = var_74h;
0x000535a6 cmp r2, r5 |
0x000535a8 sbcs.w r3, r1, r0 | __asm ("sbcs.w r3, r1, r0");
| if (r2 < r5) {
0x000535ac bge 0x535da |
0x000535ae ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x000535b0 adds.w r2, r2, 0x10000 | r2 += 0x10000;
0x000535b4 ldr r7, [sp, 0x30] | r7 = var_30h;
0x000535b6 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000535ba umull r3, r7, r3, r7 | r3:r7 = r3 * r7;
0x000535be adds r3, r3, r2 | r3 += r2;
0x000535c0 adc.w r7, r7, r1 | __asm ("adc.w r7, r7, r1");
0x000535c4 cmp r3, r5 |
0x000535c6 sbcs r7, r0 | __asm ("sbcs r7, r0");
| if (r3 < r5) {
0x000535c8 blt.w 0x537e6 | goto label_64;
| }
0x000535cc ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000535ce ldr r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x000535d0 cbz r3, 0x535da | goto label_65;
| }
0x000535d2 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000535d4 add r2, sp, 0x70 | r2 += var_70h;
0x000535d6 movs r1, 5 | r1 = 5;
0x000535d8 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| }
| label_65:
0x000535da ldr r3, [sp, 0x30] | r3 = var_30h;
0x000535dc movs r7, 0 | r7 = 0;
0x000535de str.w sl, [sp, 0x34] | __asm ("str.w sl, [var_34h]");
0x000535e2 str.w fp, [sp, 0x3c] | __asm ("str.w fp, [var_3ch]");
0x000535e6 adds r3, 0x18 | r3 += 0x18;
0x000535e8 str r3, [sp, 0x40] | var_40h = r3;
| label_21:
0x000535ea ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000535ec ldrd lr, r2, [r3] | __asm ("ldrd lr, r2, [r3]");
0x000535f0 subs.w sb, r2, 1 | sb = r2 - 1;
| if (sb < r2) {
0x000535f4 bmi 0x536e2 | goto label_66;
| }
0x000535f6 add.w r2, r2, r2, lsl 2 | r2 += (r2 << 2);
0x000535fa mov.w r5, -1 | r5 = -1;
0x000535fe mov sl, r4 | sl = r4;
0x00053600 add.w ip, r3, r2, lsl 2 |
| label_20:
0x00053604 ldr r3, [ip, -0xc] | r3 = *((ip - 0xc));
0x00053608 ldr.w r4, [ip] | r4 = *(ip);
0x0005360c cmp r3, r4 |
| if (r3 >= r4) {
0x0005360e bge 0x53646 | goto label_67;
| }
0x00053610 ldr r2, [ip, -0x8] | r2 = *((ip - 0x8));
0x00053614 ldr fp, [ip, -0x4] | fp = *((ip - 0x4));
0x00053618 add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x0005361c adds r3, 1 | r3++;
0x0005361e b 0x5362e |
| while (lr >= r1) {
0x00053620 cmp r3, r4 |
0x00053622 add.w r1, r3, 1 | r1 = r3 + 1;
0x00053626 str r3, [ip, -0xc] | *((ip - 0xc)) = r3;
| if (r3 == r4) {
0x0005362a beq 0x53646 | goto label_67;
| }
0x0005362c mov r3, r1 | r3 = r1;
0x0005362e ldrh r0, [r2], 2 | r0 = *(r2);
| r2 += 2;
0x00053632 ldr.w r1, [fp, r0, lsl 2] | offset_0 = r0 << 2;
| r1 = *((fp + offset_0));
0x00053636 cmp lr, r1 |
0x00053638 bhs 0x53620 |
| }
0x0005363a cmp r1, r5 |
| if (r1 < r5) {
0x0005363c bhs 0x53646 |
0x0005363e ldr.w r7, [ip, 4] | r7 = *((ip + 4));
0x00053642 mov r5, r1 | r5 = r1;
0x00053644 add r7, r0 | r7 += r0;
| }
| label_67:
0x00053646 add.w sb, sb, -1 | sb += -1;
0x0005364a sub.w ip, ip, 0x14 |
0x0005364e cmp.w sb, -1 |
| if (sb != -1) {
0x00053652 bne 0x53604 | goto label_20;
| }
0x00053654 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00053656 mov r4, sl | r4 = sl;
0x00053658 str r5, [r3] | *(r3) = r5;
0x0005365a adds r3, r5, 1 | r3 = r5 + 1;
| if (r3 == r5) {
0x0005365c beq.w 0x53814 | goto label_68;
| }
0x00053660 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00053662 ldr.w r2, [r3, 0x128] | r2 = *((r3 + 0x128));
0x00053666 cmp r2, 0 |
| if (r2 != 0) {
0x00053668 bne 0x5374e | goto label_69;
| }
0x0005366a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005366c cmp r3, r7 |
0x0005366e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00053670 ite lo |
| if (r3 >= r7) {
0x00053672 movlo r2, 0 | r2 = 0;
| }
| if (r3 < r7) {
0x00053674 movhs r2, 1 | r2 = 1;
| }
0x00053676 cmp r3, r7 |
0x00053678 it lo |
| if (r3 >= r7) {
0x0005367a orrlo r2, r2, 1 | r2 |= 1;
| }
0x0005367e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00053680 cmp r3, r5 |
0x00053682 it lo |
| if (r3 >= r5) {
0x00053684 orrlo r2, r2, 1 | r2 |= 1;
| }
0x00053688 cmp r2, 0 |
| if (r2 != 0) {
0x0005368a bne 0x535ea | goto label_21;
| }
0x0005368c ldr r3, [sp, 0x40] | r3 = var_40h;
0x0005368e subs r2, r7, 1 | r2 = r7 - 1;
0x00053690 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00053692 ldr.w fp, [sp, 0x30] | fp = var_30h;
0x00053696 ldr.w sl, [sp, 0x18] | sl = var_18h;
0x0005369a umull r2, r1, r2, r3 | r2:r1 = r2 * r3;
0x0005369e ldr.w ip, [r0] | ip = *(r0);
0x000536a2 adds r2, 0x38 | r2 += 0x38;
0x000536a4 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000536a8 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x000536ac mov r2, fp | r2 = fp;
0x000536ae ldr.w sb, [ip, 8] | sb = *((ip + 8));
0x000536b2 mov r1, sl | r1 = sl;
0x000536b4 blx sb | r0 = sb (r0, r1, r2, r3);
| if (r0 != 0) {
0x000536b6 cbnz r0, 0x536d6 | goto label_70;
| }
0x000536b8 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000536ba subs r5, 1 | r5--;
0x000536bc umull r5, lr, r5, fp | r5:lr = r5 * fp;
0x000536c0 mov r2, fp | r2 = fp;
0x000536c2 mov r1, sl | r1 = sl;
0x000536c4 ldr.w ip, [r0] | ip = *(r0);
0x000536c8 strd r5, lr, [sp] | __asm ("strd r5, lr, [sp]");
0x000536cc ldr.w r5, [ip, 0xc] | r5 = *((ip + 0xc));
0x000536d0 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x000536d2 cmp r0, 0 |
| if (r0 == 0) {
0x000536d4 beq 0x535ea | goto label_21;
| }
| label_70:
0x000536d6 ldr.w sl, [sp, 0x34] | sl = var_34h;
0x000536da ldr.w fp, [sp, 0x3c] | fp = var_3ch;
0x000536de str r0, [sp, 0x28] | var_28h = r0;
0x000536e0 b 0x5354c | goto label_22;
| label_66:
0x000536e2 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000536e4 mov.w r3, -1 | r3 = -1;
0x000536e8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000536ea ldr.w sl, [sp, 0x34] | sl = var_34h;
0x000536ee ldr.w fp, [sp, 0x3c] | fp = var_3ch;
0x000536f2 str r3, [r2] | *(r2) = r3;
0x000536f4 ldr r3, [r0] | r3 = *(r0);
| if (r3 != 0) {
0x000536f6 cbz r3, 0x53700 |
0x000536f8 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000536fa movs r2, 0 | r2 = 0;
0x000536fc movs r1, 0x25 | r1 = 0x25;
0x000536fe blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| }
| label_31:
0x00053700 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00053702 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00053704 ldr r3, [r3] | r3 = *(r3);
0x00053706 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00053708 cmp r3, r2 |
| if (r3 == r2) {
0x0005370a beq 0x537b4 | goto label_71;
| }
| label_29:
0x0005370c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0005370e ldr r2, [sp, 0x20] | r2 = var_20h;
0x00053710 str r2, [r3, 0x60] | *((r3 + 0x60)) = r2;
0x00053712 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00053716 cmp r3, 0 |
| if (r3 != 0) {
0x00053718 bne.w 0x5331e | goto label_13;
| }
| label_24:
0x0005371c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0005371e movs r3, 9 | r3 = 9;
0x00053720 movs r2, 1 | r2 = 1;
0x00053722 movs r1, 3 | r1 = 3;
0x00053724 ldr r5, [r0] | r5 = *(r0);
0x00053726 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x00053728 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005372a b 0x53118 | goto label_23;
| label_52:
0x0005372c cmp r6, 3 |
0x0005372e it ne |
| if (r6 == 3) {
0x00053730 movne r5, 1 | r5 = 1;
| }
| if (r6 == 3) {
0x00053732 beq 0x53828 | goto label_72;
| }
| label_32:
0x00053734 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00053738 cmp r3, 0 |
| if (r3 != 0) {
0x0005373a bne.w 0x532fe | goto label_14;
| }
0x0005373e ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00053740 movs r2, 4 | r2 = 4;
0x00053742 movs r3, 9 | r3 = 9;
0x00053744 mov r1, r2 | r1 = r2;
0x00053746 ldr r6, [r0] | r6 = *(r0);
0x00053748 ldr r6, [r6, 0x38] | r6 = *((r6 + 0x38));
0x0005374a blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005374c b 0x532fe | goto label_14;
| label_69:
0x0005374e ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x00053752 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00053754 ldr.w sl, [sp, 0x34] | sl = var_34h;
0x00053758 ldr r3, [r0] | r3 = *(r0);
0x0005375a cmp r2, 0 |
| if (r2 == 0) {
0x0005375c beq 0x5385a | goto label_73;
| }
0x0005375e cmp r3, 0 |
| if (r3 == 0) {
0x00053760 beq.w 0x53868 | goto label_74;
| }
0x00053764 mov.w fp, 7 |
0x00053768 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x0005376a movs r2, 0 | r2 = 0;
0x0005376c movs r1, 0x25 | r1 = 0x25;
0x0005376e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
| label_33:
0x00053770 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00053774 cmp r3, 0 |
| if (r3 == 0) {
0x00053776 beq 0x5371c | goto label_24;
| }
0x00053778 b 0x533dc | goto label_25;
| label_55:
0x0005377a blx 0x8404 | fcn_00008404 ();
0x0005377e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00053780 mov r5, r7 | r5 = r7;
0x00053782 blx 0x8404 | fcn_00008404 ();
0x00053786 mov.w fp, 7 |
0x0005378a str r7, [sp, 0x1c] | var_1ch = r7;
0x0005378c b 0x533de | goto label_26;
| label_54:
0x0005378e blx 0x8404 | fcn_00008404 ();
0x00053792 mov.w sl, 1 | sl = 1;
0x00053796 ldr r5, [sp, 0x68] | r5 = var_68h;
0x00053798 mov.w fp, 7 |
0x0005379c b 0x53168 | goto label_5;
| label_58:
0x0005379e add r3, sp, 0x84 | r3 += var_84h;
0x000537a0 movs r1, 0 | r1 = 0;
0x000537a2 movs r2, 0x68 | r2 = 0x68;
0x000537a4 mov r0, r3 | r0 = r3;
0x000537a6 strd r1, r1, [sp, 0x6c] | __asm ("strd r1, r1, [var_70h]");
0x000537aa movs r5, 1 | r5 = 1;
0x000537ac str r3, [sp, 0x28] | var_28h = r3;
0x000537ae blx 0x839c | fcn_0000839c ();
0x000537b2 b 0x534b0 | goto label_27;
| label_71:
0x000537b4 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000537b6 ldr r2, [r4, 0x48] | r2 = *((r4 + 0x48));
0x000537b8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000537ba ldr r1, [r0] | r1 = *(r0);
0x000537bc umull r2, r3, r2, r3 | r2:r3 = r2 * r3;
0x000537c0 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x000537c2 blx r1 | r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000537c4 mov r3, r0 | r3 = r0;
0x000537c6 cmp r0, 0 |
| if (r0 != 0) {
0x000537c8 bne.w 0x53566 | goto label_28;
| }
0x000537cc ldr r3, [sp, 0x44] | r3 = var_44h;
0x000537ce ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000537d0 cmp r3, 0 |
| if (r3 == 0) {
0x000537d2 beq 0x5370c | goto label_29;
| }
0x000537d4 mov r1, r3 | r1 = r3;
0x000537d6 ldr r3, [r0] | r3 = *(r0);
0x000537d8 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000537da blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x000537dc mov r3, r0 | r3 = r0;
0x000537de cmp r0, 0 |
| if (r0 != 0) {
0x000537e0 bne.w 0x53566 | goto label_28;
| }
0x000537e4 b 0x5370c | goto label_29;
| label_64:
0x000537e6 blx 0x83b8 | strerror_r ();
0x000537ea ldr r2, [pc, 0xc4] |
0x000537ec adds r0, 0x14 | r0 += 0x14;
0x000537ee ldr r1, [pc, 0xc4] |
0x000537f0 movw r3, 0xf917 | r3 = 0xf917;
0x000537f4 str r0, [sp] | *(sp) = r0;
0x000537f6 movs r0, 0xb | r0 = 0xb;
0x000537f8 add r2, pc | r2 = 0xa70ae;
0x000537fa add r1, pc | r1 = 0xa70b4;
0x000537fc blx 0x8b60 | fcn_00008b60 ();
0x00053800 movs r3, 0xb | r3 = 0xb;
0x00053802 str r3, [sp, 0x28] | var_28h = r3;
0x00053804 b 0x5354c | goto label_22;
| label_53:
0x00053806 movs r0, 0 | r0 = 0;
0x00053808 mov r4, sb | r4 = sb;
0x0005380a mov.w sl, 1 | sl = 1;
0x0005380e blx 0x8404 | fcn_00008404 ();
0x00053812 b 0x53166 | goto label_10;
| label_68:
0x00053814 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00053816 ldr.w sl, [sp, 0x34] | sl = var_34h;
0x0005381a ldr.w fp, [sp, 0x3c] | fp = var_3ch;
0x0005381e ldr r3, [r0] | r3 = *(r0);
0x00053820 cmp r3, 0 |
| if (r3 != 0) {
0x00053822 bne.w 0x53556 | goto label_30;
| }
0x00053826 b 0x53700 | goto label_31;
| label_72:
0x00053828 ldr r1, [sp, 0x78] | r1 = var_78h;
0x0005382a mov r0, r4 | r0 = r4;
0x0005382c bl 0x184b8 | fcn_000184b8 (r0, r1);
0x00053830 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00053832 movs r2, 0 | r2 = 0;
0x00053834 ldr r3, [r0] | r3 = *(r0);
0x00053836 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x00053838 movs r3, 0 | r3 = 0;
0x0005383a blx r1 | r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005383c sub.w r5, r0, 5 | r5 = r0 - 5;
0x00053840 cmp r0, 0 |
0x00053842 clz r5, r5 | r5 &= r5;
0x00053846 mov fp, r0 |
0x00053848 lsr.w r5, r5, 5 | r5 >>= 5;
0x0005384c it ne |
| if (r0 == 0) {
0x0005384e orrne sl, sl, 1 | sl |= 1;
| }
0x00053852 it eq |
| if (r0 != 0) {
0x00053854 orreq r5, r5, 1 | r5 |= 1;
| }
0x00053858 b 0x53734 | goto label_32;
| if (r3 == 0) {
| label_73:
0x0005385a cbz r3, 0x53882 | goto label_75;
| }
0x0005385c ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x0005385e movs r1, 0x25 | r1 = 0x25;
0x00053860 mov.w fp, 9 |
0x00053864 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r1, r3);
0x00053866 b 0x53770 | goto label_33;
| label_74:
0x00053868 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x0005386c mov.w fp, 7 |
0x00053870 cmp r3, 0 |
| if (r3 == 0) {
0x00053872 beq.w 0x5371c | goto label_24;
| }
| label_34:
0x00053876 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00053878 mov.w sl, 1 | sl = 1;
0x0005387c blx 0x8404 | fcn_00008404 ();
0x00053880 b 0x53166 | goto label_10;
| label_75:
0x00053882 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00053886 mov.w fp, 9 |
0x0005388a cmp r3, 0 |
| if (r3 == 0) {
0x0005388c beq.w 0x5371c | goto label_24;
| }
0x00053890 b 0x53876 | goto label_34;
| label_63:
0x00053892 ldr.w fp, [sp, 0x28] | fp = var_28h;
0x00053896 b 0x53568 | goto label_35;
| label_49:
0x00053898 blx 0x883c | fcn_0000883c ();
0x0005389c ldrb r2, [r7, r1] | r2 = *((r7 + r1));
0x0005389e movs r7, r0 | r7 = r0;
0x000538a0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000538a2 movs r0, r0 |
0x000538a4 ldrh r4, [r2, r3] | r4 = *((r2 + r3));
0x000538a6 movs r7, r0 | r7 = r0;
0x000538a8 cdp2 p0, 0xe, c0, c12, c5, 0 | __asm ("cdp2 p0, 0xe, c0, c12, c5, 0");
0x000538ac stc2 p0, c0, [r8, -0x14] | __asm ("stc2 p0, c0, [r8, -0x14]");
0x000538b0 vst4.8 {d16, d17, d18, d19}, [r4], r5 | __asm ("vst4.8 {d16, d17, d18, d19}, [r4], r5");
0x000538b4 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x54218 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00054218 () | void fcn_00054218 (arithmetic x) {
| arithmetic var_8h;
| int32_t var_8h_2;
| int32_t var_10h;
| int32_t var_10h_2;
| r0 = x;
0x00054218 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x0005421c mov r4, r0 | r4 = r0;
0x0005421e ldr.w r8, [r0, 0x9c] | r8 = *((r0 + 0x9c));
0x00054222 sub sp, 0x18 |
0x00054224 ldr.w r5, [r0, 0xa8] | r5 = *((r0 + 0xa8));
0x00054228 ldr r3, [r0, 0x68] | r3 = *((r0 + 0x68));
0x0005422a ldr.w r6, [r0, 0xe0] | r6 = *((r0 + 0xe0));
0x0005422e cmp r5, r8 |
0x00054230 ldr r0, [r0, 0x50] | r0 = *((r0 + 0x50));
0x00054232 it hs |
| if (r5 < r8) {
0x00054234 movhs r5, r8 | r5 = r8;
| }
0x00054236 cmp r3, 0 |
0x00054238 ldr r1, [r4, 0x54] | r1 = *((r4 + 0x54));
| if (r3 <= 0) {
0x0005423a ble 0x54258 | goto label_1;
| }
0x0005423c add.w ip, r3, r3, lsl 1 |
0x00054240 ldr r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x00054242 add.w ip, r3, ip, lsl 4 |
| do {
0x00054246 ldrd r2, r7, [r3, 8] | __asm ("ldrd r2, r7, [r3, 8]");
0x0005424a orrs r7, r2 | r7 |= r2;
0x0005424c it eq |
| if (r7 == r2) {
0x0005424e strdeq r0, r1, [r3, 8] | __asm ("strdeq r0, r1, [r3, 8]");
| }
0x00054252 adds r3, 0x30 | r3 += 0x30;
0x00054254 cmp ip, r3 |
0x00054256 bne 0x54246 |
| } while (ip != r3);
| label_1:
0x00054258 orrs.w r3, r0, r1 | r3 = r0 | r1;
| if (r3 != r0) {
0x0005425c beq 0x5427c |
0x0005425e subs r0, 1 | r0--;
0x00054260 mov.w r3, 0 | r3 = 0;
0x00054264 sbc r1, r1, 0 | __asm ("sbc r1, r1, 0");
0x00054268 mov r2, r8 | r2 = r8;
0x0005426a bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x0005426e adds r0, 1 | r0++;
0x00054270 adc r3, r1, 0 | __asm ("adc r3, r1, 0");
0x00054274 umull r0, r1, r0, r8 | r0:r1 = r0 * r8;
0x00054278 mla r1, r8, r3, r1 | __asm ("mla r1, r8, r3, r1");
| }
0x0005427c strd r0, r1, [sp, 8] | __asm ("strd r0, r1, [var_8h]");
0x00054280 strd r0, r1, [sp, 0x10] | __asm ("strd r0, r1, [var_10h]");
0x00054284 ldrb r3, [r4, 7] | r3 = *((r4 + 7));
0x00054286 vldr d16, [sp, 8] | __asm ("vldr d16, [sp, 8]");
0x0005428a vldr d17, [sp, 0x10] | __asm ("vldr d17, [sp, 0x10]");
0x0005428e vstr d16, [r4, 0x50] | __asm ("vstr d16, [r4, 0x50]");
0x00054292 vstr d17, [r4, 0x58] | __asm ("vstr d17, [r4, 0x58]");
| if (r3 == 0) {
0x00054296 cbnz r3, 0x542ae |
0x00054298 ldrb r3, [r4, 5] | r3 = *((r4 + 5));
0x0005429a cmp r3, 4 |
| if (r3 == 4) {
0x0005429c beq 0x542ae | goto label_2;
| }
0x0005429e ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000542a0 ldr r3, [r0] | r3 = *(r0);
0x000542a2 cmp r3, 0 |
| if (r3 == 0) {
0x000542a4 beq 0x5432c | goto label_3;
| }
0x000542a6 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x000542a8 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x000542aa lsls r3, r0, 0x16 | r3 = r0 << 0x16;
| if (r3 >= r0) {
0x000542ac bpl 0x5432c | goto label_3;
| }
| }
| label_2:
0x000542ae ldr r3, [pc, 0x88] |
0x000542b0 add r3, pc | r3 = 0xa85ee;
0x000542b2 ldm r3!, {r0, r1} | r0 = *(r3!);
| r1 = *((r3! + 4));
0x000542b4 mov.w r3, -1 | r3 = -1;
0x000542b8 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x000542ba str r0, [r6] | *(r6) = r0;
0x000542bc str r1, [r6, 4] | *((r6 + 4)) = r1;
| label_0:
0x000542be add.w r1, r4, 0x34 | r1 = r4 + 0x34;
0x000542c2 movs r0, 4 | r0 = 4;
0x000542c4 blx 0x8ac4 | fcn_00008ac4 ();
0x000542c8 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x000542ca sub.w r2, r5, 0x1c | r2 = r5 - 0x1c;
0x000542ce movs r1, 0 | r1 = 0;
0x000542d0 add.w r0, r6, 0x1c | r0 = r6 + 0x1c;
0x000542d4 movs r7, 0 | r7 = 0;
0x000542d6 rev r3, r3 | r3 = SWAP32 (r3);
0x000542d8 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x000542da ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000542dc rev r3, r3 | r3 = SWAP32 (r3);
0x000542de str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x000542e0 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
0x000542e4 rev r3, r3 | r3 = SWAP32 (r3);
0x000542e6 str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x000542e8 ldr.w r3, [r4, 0xa8] | r3 = *((r4 + 0xa8));
0x000542ec rev r3, r3 | r3 = SWAP32 (r3);
0x000542ee str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x000542f0 blx 0x839c | fcn_0000839c ();
0x000542f4 b 0x54316 |
| while (r7 <= r3) {
0x000542f6 ldr r0, [r4, 0x44] | r0 = *((r4 + 0x44));
0x000542f8 vldr d16, [r4, 0x50] | __asm ("vldr d16, [r4, 0x50]");
0x000542fc ldr r3, [r0] | r3 = *(r0);
0x000542fe vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00054302 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00054304 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00054306 ldrd r3, r2, [r4, 0x50] | __asm ("ldrd r3, r2, [r4, 0x50]");
0x0005430a adds r3, r3, r5 | r3 += r5;
0x0005430c adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00054310 strd r3, r2, [r4, 0x50] | __asm ("strd r3, r2, [r4, 0x50]");
| if (r0 != 0) {
0x00054314 cbnz r0, 0x54326 | goto label_4;
| }
0x00054316 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
0x0005431a mov r2, r5 | r2 = r5;
0x0005431c mov r1, r6 | r1 = r6;
0x0005431e cmp r7, r3 |
0x00054320 add r7, r5 | r7 += r5;
0x00054322 blo 0x542f6 |
| }
0x00054324 movs r0, 0 | r0 = 0;
| label_4:
0x00054326 add sp, 0x18 |
0x00054328 pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x0005432c movs r3, 0 | r3 = 0;
0x0005432e str r3, [r6] | *(r6) = r3;
0x00054330 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00054332 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00054334 b 0x542be | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x54868 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00054868 () | void fcn_00054868 (int16_t arg_4h, int16_t arg_18h, int16_t arg1, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r2 = arg3;
0x00054868 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005486c mov fp, r0 |
0x0005486e ldr r5, [pc, 0x190] |
0x00054870 sub sp, 0x34 |
0x00054872 ldr r4, [pc, 0x190] | r4 = *(0x54a06);
0x00054874 add r5, pc | r5 = 0xa927a;
0x00054876 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x00054878 ldr r4, [r5, r4] |
0x0005487a ldr r4, [r4] | r4 = *(0xa927a);
0x0005487c str r4, [sp, 0x2c] | var_2ch = r4;
0x0005487e mov.w r4, 0 | r4 = 0;
0x00054882 str r2, [sp, 0x14] | var_14h = r2;
0x00054884 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x00054886 ldr.w r0, [fp, 0x18] | r0 = *(arg_18h);
0x0005488a ldr.w sb, [r2, 0x24] | sb = *((r2 + 0x24));
0x0005488e ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x00054890 ldr.w sl, [r2] | sl = *(r2);
0x00054894 mov r8, sb | r8 = sb;
0x00054896 ldr.w ip, [r0, 0x24] | ip = *((r0 + 0x24));
0x0005489a cmp sb, ip |
| if (sb == ip) {
0x0005489c beq.w 0x549e8 | goto label_3;
| }
0x000548a0 ldrb.w r2, [sl, 0xc] | r2 = *((sl + 0xc));
0x000548a4 movs r6, 8 | r6 = 8;
0x000548a6 cmp r2, 0 |
| if (r2 != 0) {
0x000548a8 bne.w 0x549c6 | goto label_4;
| }
0x000548ac ldrb.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x000548b0 subs r2, 0 |
0x000548b2 it ne |
| if (r2 == 0) {
0x000548b4 movne r2, 1 | r2 = 1;
| }
0x000548b6 lsls r6, r2, 3 | r6 = r2 << 3;
0x000548b8 eor r2, r2, 1 | r2 ^= 1;
| label_2:
0x000548bc umull r4, lr, r1, ip | r4:lr = r1 * ip;
0x000548c0 asr.w r0, ip, 0x1f | r0 = ip >> 0x1f;
0x000548c4 and r2, r2, 1 | r2 &= 1;
0x000548c8 str r0, [sp, 0x18] | var_18h = r0;
0x000548ca mla lr, r1, r0, lr | __asm ("mla lr, r1, r0, lr");
0x000548ce str r4, [sp, 4] | var_4h = r4;
0x000548d0 mov r1, r4 | r1 = r4;
0x000548d2 subs.w r4, r4, ip | r4 -= ip;
0x000548d6 sbc.w r7, lr, r0 | __asm ("sbc.w r7, lr, r0");
0x000548da cmp r4, r1 |
0x000548dc sbcs.w r1, r7, lr | __asm ("sbcs.w r1, r7, lr");
0x000548e0 it ge |
| if (r4 < r1) {
0x000548e2 movge r2, 0 | r2 = 0;
| }
0x000548e4 str r2, [sp, 0x10] | var_10h = r2;
0x000548e6 cmp r2, 0 |
| if (r2 == 0) {
0x000548e8 beq 0x549c6 | goto label_4;
| }
0x000548ea eor r3, r3, 1 | r3 ^= 1;
0x000548ee cmp sb, ip |
0x000548f0 and r3, r3, 1 | r3 &= 1;
0x000548f4 mov r2, sb | r2 = sb;
0x000548f6 str r3, [sp, 0x20] | var_20h = r3;
0x000548f8 it ge |
| if (sb < ip) {
0x000548fa movge r2, ip | r2 = ip;
| }
0x000548fc ldr r3, [pc, 0x108] |
0x000548fe mov r6, sb | r6 = sb;
0x00054900 str r2, [sp, 0x1c] | var_1ch = r2;
0x00054902 str.w ip, [sp, 0x24] | __asm ("str.w ip, [var_24h]");
0x00054906 add r3, pc | r3 = 0xa9312;
0x00054908 str.w lr, [sp, 0xc] | __asm ("str.w lr, [var_ch]");
0x0005490c str r3, [sp, 8] | var_8h = r3;
0x0005490e asr.w r3, sb, 0x1f | r3 = sb >> 0x1f;
0x00054912 mov sb, r3 | sb = r3;
0x00054914 b 0x54944 |
| while (r0 != 0) {
| label_0:
0x00054916 ldr r0, [sp, 0x28] | r0 = var_28h;
| if (r0 != 0) {
0x00054918 cbz r0, 0x5491e |
0x0005491a bl 0x129c4 | fcn_000129c4 (r0);
| }
| label_1:
0x0005491e ldr r3, [sp, 4] | r3 = var_4h;
0x00054920 adds.w r4, r4, r8 | r4 += r8;
0x00054924 adc.w r7, sb, r7 | __asm ("adc.w r7, sb, r7");
0x00054928 and r5, r5, 1 | r5 &= 1;
0x0005492c cmp r4, r3 |
0x0005492e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00054930 sbcs.w r3, r7, r3 | __asm ("sbcs.w r3, r7, r3");
0x00054934 it ge |
| if (r4 < r3) {
0x00054936 movge r5, 0 | r5 = 0;
| }
0x00054938 cmp r5, 0 |
| if (r5 == 0) {
0x0005493a beq 0x549c6 | goto label_4;
| }
0x0005493c ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00054940 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00054942 ldr r6, [r3, 0x24] | r6 = *((r3 + 0x24));
0x00054944 movs r5, 0 | r5 = 0;
0x00054946 mov r2, r8 | r2 = r8;
0x00054948 mov r3, sb | r3 = sb;
0x0005494a mov r0, r4 | r0 = r4;
0x0005494c mov r1, r7 | r1 = r7;
0x0005494e str r5, [sp, 0x28] | var_28h = r5;
0x00054950 bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x00054954 ldr r3, [sp, 8] | r3 = var_8h;
0x00054956 mov r1, r6 | r1 = r6;
0x00054958 mov r6, r0 | r6 = r0;
0x0005495a str r2, [sp] | *(sp) = r2;
0x0005495c ldr.w r0, [r3, 0x118] | r0 = *((r3 + 0x118));
0x00054960 bl 0xb1c30 | r0 = fcn_000b1c30 (r0, r1, r2);
0x00054964 cmp r6, r0 |
0x00054966 add.w r1, r6, 1 | r1 = r6 + 1;
| if (r6 == r0) {
0x0005496a beq 0x549e2 | goto label_5;
| }
0x0005496c ldr.w r6, [sl, 0xdc] | r6 = *((sl + 0xdc));
0x00054970 mov r3, r5 | r3 = r5;
0x00054972 add r2, sp, 0x28 | r2 += var_28h;
0x00054974 mov r0, sl | r0 = sl;
0x00054976 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00054978 mov r6, r0 | r6 = r0;
0x0005497a cmp r0, 0 |
0x0005497c bne 0x54916 |
| }
0x0005497e ldr r0, [sp, 0x28] | r0 = var_28h;
0x00054980 bl 0x5480c | r0 = fcn_0005480c (r0);
0x00054984 mov r6, r0 | r6 = r0;
0x00054986 cmp r0, 0 |
| if (r0 != 0) {
0x00054988 bne 0x54916 | goto label_0;
| }
0x0005498a ldr r3, [sp, 0x28] | r3 = var_28h;
0x0005498c mov r0, r4 | r0 = r4;
0x0005498e ldr r2, [sp, 0x24] | r2 = var_24h;
0x00054990 mov r1, r7 | r1 = r7;
0x00054992 ldr r5, [r3, 4] | r5 = *((r3 + 4));
0x00054994 ldr r3, [sp] | r3 = *(sp);
0x00054996 add r5, r3 | r5 += r3;
0x00054998 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005499a bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x0005499e ldr r3, [sp, 0x14] | r3 = var_14h;
0x000549a0 mov r1, r2 | r1 = r2;
0x000549a2 mov r0, r5 | r0 = r5;
0x000549a4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000549a6 add r1, r3 | r1 += r3;
0x000549a8 blx 0x8610 | fcn_00008610 ();
0x000549ac orrs.w r3, r4, r7 | r3 = r4 | r7;
0x000549b0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000549b2 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000549b4 strb r6, [r3] | *(r3) = r6;
0x000549b6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000549b8 and r3, r3, 1 | r3 &= 1;
0x000549bc it ne |
| if (r3 == r4) {
0x000549be movne r3, 0 | r3 = 0;
| }
0x000549c0 cbnz r3, 0x549ee |
| while (1) {
0x000549c2 ldr r5, [sp, 0x10] | r5 = var_10h;
0x000549c4 b 0x54916 | goto label_0;
| label_4:
0x000549c6 ldr r2, [pc, 0x44] |
0x000549c8 ldr r3, [pc, 0x38] | r3 = *(0x54a04);
0x000549ca add r2, pc | r2 = 0xa93dc;
0x000549cc ldr r3, [r2, r3] | r3 = *(0xa93dc);
0x000549ce ldr r2, [r3] | r2 = *(0xa93dc);
0x000549d0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000549d2 eors r2, r3 | r2 ^= r3;
0x000549d4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000549d8 bne 0x549fc | goto label_6;
| }
0x000549da mov r0, r6 | r0 = r6;
0x000549dc add sp, 0x34 |
0x000549de pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x000549e2 mov r6, r5 | r6 = r5;
0x000549e4 ldr r5, [sp, 0x10] | r5 = var_10h;
0x000549e6 b 0x5491e | goto label_1;
| label_3:
0x000549e8 movs r2, 1 | r2 = 1;
0x000549ea movs r6, 0 | r6 = 0;
0x000549ec b 0x548bc | goto label_2;
0x000549ee ldr.w r3, [fp, 0x18] | r3 = *(arg_18h);
0x000549f2 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000549f4 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x000549f6 rev r3, r3 | r3 = SWAP32 (r3);
0x000549f8 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x000549fa b 0x549c2 |
| }
| label_6:
0x000549fc blx 0x883c | fcn_0000883c ();
0x00054a00 add r4, r4 | r4 += r4;
0x00054a02 movs r7, r0 | r7 = r0;
0x00054a04 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00054a06 movs r0, r0 |
0x00054a08 mov lr, pc | lr = pc;
0x00054a0a movs r7, r0 | r7 = r0;
0x00054a0c cmn r6, r1 |
0x00054a0e movs r7, r0 | r7 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x54a5c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00054a5c () | void fcn_00054a5c (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_14h_2;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int32_t var_40h;
| int32_t var_40h_2;
| int16_t var_4ch;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int32_t var_60h;
| int32_t var_60h_2;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int32_t var_ch_2;
| int16_t var_78h;
| int16_t var_80h;
| int16_t var_88h;
| int16_t var_0h_2;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00054a5c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00054a60 sub sp, 0x9c |
0x00054a62 str r1, [sp, 0x4c] | var_4ch = r1;
0x00054a64 mov r4, r1 | r4 = r1;
0x00054a66 mov sl, r0 | sl = r0;
0x00054a68 mov r0, r2 | r0 = r2;
0x00054a6a ldr.w r1, [pc, 0x5bc] |
0x00054a6e str r2, [sp, 0x20] | var_20h = r2;
0x00054a70 ldr.w r2, [pc, 0x5b8] | r2 = *(0x5502c);
0x00054a74 add r1, pc | r1 = 0xa9aa2;
0x00054a76 ldr r2, [r1, r2] |
0x00054a78 movs r1, 1 | r1 = 1;
0x00054a7a ldr r2, [r2] | r2 = *(0xa9aa2);
0x00054a7c str r2, [sp, 0x94] | var_94h = r2;
0x00054a7e mov.w r2, 0 | r2 = 0;
0x00054a82 str r3, [sp, 8] | var_8h = r3;
| if (r3 == 0) {
0x00054a84 cbz r3, 0x54aa8 | goto label_10;
| }
0x00054a86 cmp r4, 0 |
| if (r4 == 0) {
0x00054a88 beq.w 0x54e90 | goto label_22;
| }
0x00054a8c add r2, sp, 0x4c | r2 += var_4ch;
0x00054a8e movs r1, 0 | r1 = 0;
| do {
0x00054a90 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00054a92 cmp r0, r3 |
0x00054a94 it hs |
| if (r0 < r3) {
0x00054a96 addhs r2, r4, 0x10 | r2 = r4 + 0x10;
| }
0x00054a9a ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x00054a9c it hs |
| if (r0 < r3) {
0x00054a9e addhs r1, 1 | r1++;
| }
0x00054aa0 str r4, [r2] | *(r2) = r4;
0x00054aa2 cmp r4, 0 |
0x00054aa4 bne 0x54a90 |
| } while (r4 != 0);
0x00054aa6 ldr r4, [sp, 0x4c] | r4 = var_4ch;
| label_10:
0x00054aa8 ldr.w r3, [sl, 0xd0] | r3 = *((sl + 0xd0));
0x00054aac add r3, r1 | r3 += r1;
0x00054aae str.w r3, [sl, 0xd0] | __asm ("str.w r3, [sl, 0xd0]");
0x00054ab2 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00054ab4 cmp r3, 1 |
| if (r3 == 1) {
0x00054ab6 beq.w 0x54e50 | goto label_23;
| }
| label_7:
0x00054aba ldr.w r3, [sl, 0xa8] | r3 = *((sl + 0xa8));
0x00054abe movs r2, 0x30 | r2 = 0x30;
0x00054ac0 ldr.w r7, [sl, 0xe8] | r7 = *((sl + 0xe8));
0x00054ac4 str r3, [sp, 0x14] | var_14h = r3;
0x00054ac6 ldrb.w r3, [sl, 0xb] | r3 = *((sl + 0xb));
0x00054aca add.w r0, r7, 0x34 | r0 = r7 + 0x34;
0x00054ace str r3, [sp, 0x1c] | var_1ch = r3;
0x00054ad0 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x00054ad2 ldr r5, [r3] | r5 = *(r3);
0x00054ad4 mov r1, r5 | r1 = r5;
0x00054ad6 blx 0x8214 | r0 = sysconf ();
0x00054ada mov sb, r0 | sb = r0;
| if (r0 != 0) {
0x00054adc cbz r0, 0x54ae4 |
0x00054ade ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00054ae0 add.w sb, r3, 1 | sb = r3 + 1;
| }
0x00054ae4 ldrsh.w r3, [r7, 0x28] | r3 = *((r7 + 0x28));
| if (r3 != 0) {
0x00054ae8 cbnz r3, 0x54b28 | goto label_24;
| }
0x00054aea ldr r3, [r5, 0x60] | r3 = *((r5 + 0x60));
0x00054aec cmp r3, 0 |
| if (r3 != 0) {
0x00054aee bne.w 0x54e58 | goto label_25;
| }
0x00054af2 ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
0x00054af6 add r5, sp, 0x58 | r5 += var_58h;
| if (r3 == 0) {
| label_8:
0x00054af8 cbnz r3, 0x54b08 |
0x00054afa ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x00054afc movs r3, 5 | r3 = 5;
0x00054afe movs r2, 1 | r2 = 1;
0x00054b00 movs r1, 3 | r1 = 3;
0x00054b02 ldr r6, [r0] | r6 = *(r0);
0x00054b04 ldr r6, [r6, 0x38] | r6 = *((r6 + 0x38));
0x00054b06 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
| label_11:
0x00054b08 movs r6, 0 | r6 = 0;
0x00054b0a movw r3, 0xffff | r3 = 0xffff;
0x00054b0e strh r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
| do {
0x00054b10 adds r6, 1 | r6++;
0x00054b12 movs r2, 1 | r2 = 1;
0x00054b14 mov r3, r6 | r3 = r6;
0x00054b16 mov r1, r5 | r1 = r5;
0x00054b18 mov r0, r7 | r0 = r7;
0x00054b1a bl 0x407d8 | r0 = fcn_000407d8 (r0, r1, r2, r3, r4);
0x00054b1e adds r3, r0, 1 | r3 = r0 + 1;
0x00054b20 beq 0x54b10 |
| } while (r3 == r0);
0x00054b22 mov r1, r0 | r1 = r0;
0x00054b24 cmp r0, 0 |
| if (r0 != 0) {
0x00054b26 bne 0x54bf4 | goto label_1;
| }
| label_24:
0x00054b28 ldr.w fp, [r7, 0x44] | fp = *((r7 + 0x44));
0x00054b2c cmp.w fp, 0 |
| if (fp == 0) {
0x00054b30 beq.w 0x54d98 | goto label_26;
| }
| label_4:
0x00054b34 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x00054b36 str r3, [sp, 0x24] | var_24h = r3;
| label_5:
0x00054b38 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00054b3a mov r5, r4 | r5 = r4;
0x00054b3c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00054b40 strd r4, sl, [sp, 0x28] | __asm ("strd r4, sl, [var_2ch]");
0x00054b44 str r3, [sp, 0x5c] | var_5ch = r3;
0x00054b46 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00054b48 str r7, [sp, 0x58] | var_58h = r7;
0x00054b4a vstr d16, [sp, 0x60] | __asm ("vstr d16, [sp, 0x60]");
0x00054b4e str r3, [sp, 0x68] | var_68h = r3;
0x00054b50 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00054b52 add.w r2, r3, 0x18 | r2 = r3 + 0x18;
0x00054b56 str r3, [sp, 0x6c] | var_6ch = r3;
0x00054b58 umull r6, r8, fp, r2 | r6:r8 = fp * r2;
0x00054b5c ldr r3, [sp, 8] | r3 = var_8h;
0x00054b5e asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x00054b60 str r2, [sp, 0x30] | var_30h = r2;
0x00054b62 eor r3, r3, 1 | r3 ^= 1;
0x00054b66 str r1, [sp, 0x34] | var_34h = r1;
0x00054b68 and r3, r3, 1 | r3 &= 1;
0x00054b6c mla r8, fp, r1, r8 | __asm ("mla r8, fp, r1, r8");
0x00054b70 str r3, [sp, 0x18] | var_18h = r3;
0x00054b72 movs r3, 0 | r3 = 0;
0x00054b74 adds r6, 0x20 | r6 += 0x20;
0x00054b76 str r3, [sp, 0xc] | var_ch = r3;
0x00054b78 add r3, sp, 0x58 | r3 += var_58h;
0x00054b7a adc r8, r8, 0 | __asm ("adc r8, r8, 0");
0x00054b7e str r3, [sp, 0x10] | var_10h = r3;
0x00054b80 mov r3, r2 | r3 = r2;
0x00054b82 mov r2, r1 | r2 = r1;
0x00054b84 mov r1, sb | r1 = sb;
0x00054b86 mov r4, r8 | r4 = r8;
0x00054b88 mov sb, r7 | sb = r7;
0x00054b8a mov sl, r3 | sl = r3;
0x00054b8c mov r8, r2 | r8 = r2;
0x00054b8e mov r7, r1 | r7 = r1;
| label_0:
0x00054b90 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00054b92 cmp r7, 0 |
| if (r7 == 0) {
0x00054b94 beq 0x54c16 | goto label_27;
| }
0x00054b96 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x00054b98 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00054b9a cmp r2, 0 |
0x00054b9c it ne |
| if (r2 == 0) {
0x00054b9e orrne r3, r3, 1 | r3 |= 1;
| }
0x00054ba2 cmp r3, 0 |
| if (r3 == 0) {
0x00054ba4 beq.w 0x54e48 | goto label_28;
| }
0x00054ba8 movs r3, 0 | r3 = 0;
0x00054baa add r2, sp, 0x54 | r2 += var_54h;
0x00054bac mov r0, sb | r0 = sb;
0x00054bae str r3, [sp, 0x54] | var_54h = r3;
0x00054bb0 bl 0x26254 | fcn_00026254 (r0, r1, r2);
0x00054bb4 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00054bb6 cmp r7, r3 |
| if (r7 > r3) {
0x00054bb8 bhi 0x54c16 | goto label_27;
| }
0x00054bba subs r1, r3, 1 | r1 = r3 - 1;
0x00054bbc ldr.w r0, [sb, 0x68] | r0 = *((sb + 0x68));
0x00054bc0 umull ip, r2, r1, sl | ip:r2 = r1 * sl;
0x00054bc4 subs r0, 1 | r0--;
0x00054bc6 mla r2, r1, r8, r2 | __asm ("mla r2, r1, r8, r2");
0x00054bca ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00054bcc adds.w ip, ip, 0x38 |
0x00054bd0 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00054bd4 cmp r3, r0 |
0x00054bd6 ldr.w r0, [sb, 8] | r0 = *((sb + 8));
0x00054bda it ls |
| if (r3 > r0) {
0x00054bdc strls r3, [sb, 0x68] | *((sb + 0x68)) = r3;
| }
0x00054be0 ldr r3, [r0] | r3 = *(r0);
0x00054be2 strd ip, r2, [sp] | __asm ("strd ip, r2, [sp]");
0x00054be6 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00054be8 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00054bea blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00054bec cmp r0, 0 |
| if (r0 == 0) {
0x00054bee beq.w 0x54d8e | goto label_29;
| }
| do {
| label_18:
0x00054bf2 mov r1, r0 | r1 = r0;
| label_1:
0x00054bf4 ldr.w r2, [pc, 0x438] |
0x00054bf8 ldr.w r3, [pc, 0x430] | r3 = *(0x5502c);
0x00054bfc add r2, pc | r2 = 0xa9c30;
0x00054bfe ldr r3, [r2, r3] | r3 = *(0xa9c30);
0x00054c00 ldr r2, [r3] | r2 = *(0xa9c30);
0x00054c02 ldr r3, [sp, 0x94] | r3 = var_94h;
0x00054c04 eors r2, r3 | r2 ^= r3;
0x00054c06 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00054c0a bne.w 0x550dc | goto label_30;
| }
0x00054c0e mov r0, r1 | r0 = r1;
0x00054c10 add sp, 0x9c |
0x00054c12 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_27:
0x00054c16 ldr r3, [sp, 8] | r3 = var_8h;
0x00054c18 add.w fp, fp, 1 |
| if (r3 != 0) {
0x00054c1c cbz r3, 0x54c26 |
0x00054c1e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00054c20 cmp r3, 0 |
| if (r3 == 0) {
0x00054c22 beq.w 0x54e4c | goto label_31;
| }
| }
0x00054c26 movs r3, 0 | r3 = 0;
| label_6:
0x00054c28 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x00054c2a ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00054c2c ldr r0, [sp, 0x10] | r0 = var_10h;
0x00054c2e strd r6, r4, [sp] | __asm ("strd r6, r4, [sp]");
0x00054c32 bl 0x1b158 | r0 = fcn_0001b158 (r0, r1, r2, r3, r4, r5);
0x00054c36 cmp r0, 0 |
0x00054c38 bne 0x54bf2 |
| } while (r0 != 0);
0x00054c3a ldrh r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00054c3c adds.w r6, sl, r6 | r6 = sl + r6;
0x00054c40 adc.w r4, r8, r4 | __asm ("adc.w r4, r8, r4");
0x00054c44 str r5, [sp, 0xc] | var_ch = r5;
0x00054c46 orr r3, r3, 0x40 | r3 |= 0x40;
0x00054c4a strh r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
| label_3:
0x00054c4c ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x00054c4e cmp r5, 0 |
| if (r5 != 0) {
0x00054c50 bne 0x54b90 | goto label_0;
| }
0x00054c52 ldr r3, [sp, 8] | r3 = var_8h;
0x00054c54 mov r8, r4 | r8 = r4;
0x00054c56 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x00054c5a mov r7, sb | r7 = sb;
0x00054c5c ldr r4, [sp, 0x28] | r4 = var_28h;
0x00054c5e cmp r3, 0 |
| if (r3 == 0) {
0x00054c60 beq.w 0x54eba | goto label_32;
| }
0x00054c64 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x00054c68 cmp r3, 0 |
| if (r3 != 0) {
0x00054c6a bne.w 0x54ed4 | goto label_33;
| }
| label_14:
0x00054c6e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00054c70 ands sb, r3, 3 | sb = r3 & 3;
| if (sb == r3) {
0x00054c74 beq.w 0x54ec4 | goto label_34;
| }
0x00054c78 ldrb.w r3, [r7, 0x31] | r3 = *((r7 + 0x31));
0x00054c7c cmp r3, 0 |
| if (r3 != 0) {
0x00054c7e bne.w 0x55034 | goto label_35;
| }
| label_20:
0x00054c82 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00054c84 mov r1, sb | r1 = sb;
0x00054c86 mov.w sb, 0 | sb = 0;
0x00054c8a ldr r3, [r0] | r3 = *(r0);
0x00054c8c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00054c8e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00054c90 ldrb.w r3, [r7, 0x2f] | r3 = *((r7 + 0x2f));
0x00054c94 mov r1, r0 | r1 = r0;
| if (r3 != 0) {
0x00054c96 cbz r3, 0x54cd6 |
0x00054c98 ldrd r2, r3, [r7, 0x10] | __asm ("ldrd r2, r3, [r7, 0x10]");
0x00054c9c cmp r3, 0 |
| if (r3 < 0) {
0x00054c9e blt 0x54cd6 | goto label_36;
| }
| label_15:
0x00054ca0 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00054ca2 add.w r6, sb, fp | r6 = sb + fp;
0x00054ca6 umull lr, r5, r6, r0 | lr:r5 = r6 * r0;
0x00054caa ldr r0, [sp, 0x34] | r0 = var_34h;
0x00054cac mla r5, r6, r0, r5 | __asm ("mla r5, r6, r0, r5");
0x00054cb0 adds.w ip, lr, 0x1f |
0x00054cb4 adc r6, r5, 0 | __asm ("adc r6, r5, 0");
0x00054cb8 cmp ip, r2 |
0x00054cba sbcs r6, r3 | __asm ("sbcs r6, r3");
| if (ip >= r2) {
0x00054cbc blt 0x54cc6 |
0x00054cbe adds.w r2, lr, 0x20 | r2 = lr + 0x20;
0x00054cc2 adc r3, r5, 0 | __asm ("adc r3, r5, 0");
| }
0x00054cc6 mov r0, r7 | r0 = r7;
0x00054cc8 str r1, [sp, 0x10] | var_10h = r1;
0x00054cca bl 0x251bc | fcn_000251bc (r0, r1, r2);
0x00054cce ldr r1, [sp, 0x10] | r1 = var_10h;
0x00054cd0 movs r3, 0 | r3 = 0;
0x00054cd2 strb.w r3, [r7, 0x2f] | *((r7 + 0x2f)) = r3;
| }
| label_36:
0x00054cd6 ldr r6, [r7, 0x44] | r6 = *((r7 + 0x44));
0x00054cd8 cmp r1, 0 |
| if (r1 != 0) {
0x00054cda bne 0x54bf4 | goto label_1;
| }
| label_12:
0x00054cdc mov r5, r4 | r5 = r4;
| do {
0x00054cde ldrh r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00054ce0 ands r3, r3, 0x40 | r3 &= 0x40;
0x00054ce4 it eq |
| if (r3 != r3) {
0x00054ce6 moveq r2, 1 | r2 = 1;
| }
| if (r3 != r3) {
0x00054ce8 beq 0x54cfe |
0x00054cea adds r6, 1 | r6++;
0x00054cec ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x00054cee mov r1, r6 | r1 = r6;
0x00054cf0 mov r0, r7 | r0 = r7;
0x00054cf2 bl 0x26684 | r0 = fcn_00026684 (r0, r1, r2);
0x00054cf6 clz r2, r0 | r2 &= r0;
0x00054cfa mov r3, r0 | r3 = r0;
0x00054cfc lsrs r2, r2, 5 | r2 >>= 5;
| }
0x00054cfe ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x00054d00 cmp r5, 0 |
0x00054d02 ite eq |
| if (r5 != 0) {
0x00054d04 moveq r1, 0 | r1 = 0;
| }
| if (r5 == 0) {
0x00054d06 andne r1, r2, 1 | r1 = r2 & 1;
| }
0x00054d0a cmp r1, 0 |
0x00054d0c bne 0x54cde |
| } while (r1 != 0);
0x00054d0e mov r1, r3 | r1 = r3;
0x00054d10 mov r3, r2 | r3 = r2;
0x00054d12 cmp.w sb, 0 |
0x00054d16 ite le |
| if (sb > 0) {
0x00054d18 movle r3, 0 | r3 = 0;
| }
| if (sb <= 0) {
0x00054d1a andgt r3, r3, 1 | r3 &= 1;
| }
| if (r3 == 0) {
0x00054d1e cbz r3, 0x54d46 | goto label_37;
| }
0x00054d20 ldr r5, [sp, 0xc] | r5 = var_ch;
0x00054d22 add sb, r6 | sb += r6;
| do {
0x00054d24 adds r6, 1 | r6++;
0x00054d26 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x00054d28 mov r1, r6 | r1 = r6;
0x00054d2a mov r0, r7 | r0 = r7;
0x00054d2c bl 0x26684 | fcn_00026684 (r0, r1, r2);
0x00054d30 sub.w r2, sb, r6 | r2 = sb - r6;
0x00054d34 clz r3, r0 | r3 &= r0;
0x00054d38 lsrs r3, r3, 5 | r3 >>= 5;
0x00054d3a cmp r2, 0 |
0x00054d3c it le |
| if (r2 > 0) {
0x00054d3e movle r3, 0 | r3 = 0;
| }
0x00054d40 cmp r3, 0 |
0x00054d42 bne 0x54d24 |
| } while (r3 != 0);
0x00054d44 mov r1, r0 | r1 = r0;
| label_37:
0x00054d46 cmp r1, 0 |
| if (r1 != 0) {
0x00054d48 bne.w 0x54bf4 | goto label_1;
| }
0x00054d4c ldr r2, [sp, 0x14] | r2 = var_14h;
0x00054d4e str r6, [r7, 0x44] | *((r7 + 0x44)) = r6;
0x00054d50 bic r3, r2, 0xff | r3 = BIT_MASK (r2, 0xff);
0x00054d54 orr.w r3, r3, r2, asr 16 | r3 |= (r2 >> 16);
0x00054d58 strh.w r3, [r7, 0x42] | *((r7 + 0x42)) = r3;
0x00054d5c ldr r3, [sp, 8] | r3 = var_8h;
0x00054d5e cmp r3, 0 |
| if (r3 != 0) {
0x00054d60 bne.w 0x54f92 | goto label_38;
| }
| label_13:
0x00054d64 ldr.w r0, [sl, 0x60] | r0 = *((sl + 0x60));
0x00054d68 cmp r0, 0 |
| if (r0 == 0) {
0x00054d6a beq.w 0x54bf4 | goto label_1;
| }
0x00054d6e mov r5, r1 | r5 = r1;
| do {
0x00054d70 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00054d72 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00054d74 bl 0x54a10 | fcn_00054a10 (r0, r1, r2);
0x00054d78 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
| if (r4 == 0) {
0x00054d7a cbz r4, 0x54d8a | goto label_39;
| }
| label_2:
0x00054d7c ldr.w r0, [sl, 0x60] | r0 = *((sl + 0x60));
0x00054d80 cmp r0, 0 |
0x00054d82 bne 0x54d70 |
| } while (r0 != 0);
0x00054d84 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x00054d86 cmp r4, 0 |
| if (r4 != 0) {
0x00054d88 bne 0x54d7c | goto label_2;
| }
| label_39:
0x00054d8a mov r1, r5 | r1 = r5;
0x00054d8c b 0x54bf4 | goto label_1;
| label_29:
0x00054d8e ldrh r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00054d90 bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x00054d94 strh r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x00054d96 b 0x54c4c | goto label_3;
| label_26:
0x00054d98 vldr d16, [pc, 0x284] | __asm ("vldr d16, aav.0x000000ff");
0x00054d9c add.w r5, r7, 0x54 | r5 = r7 + 0x54;
0x00054da0 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00054da2 vstr d16, [sp, 0x70] | __asm ("vstr d16, [sp, 0x70]");
0x00054da6 ldr r3, [r7, 0x70] | r3 = *((r7 + 0x70));
0x00054da8 strd r2, r3, [sp, 0x40] | __asm ("strd r2, r3, [var_40h]");
0x00054dac vldr d16, [sp, 0x40] | __asm ("vldr d16, [sp, 0x40]");
0x00054db0 vrev32.8 d16, d16 | __asm ("vrev32.8 d16, d16");
0x00054db4 vstr d16, [sp, 0x78] | __asm ("vstr d16, [sp, 0x78]");
0x00054db8 cmp r3, 0 |
| if (r3 == 0) {
0x00054dba beq 0x54e86 | goto label_40;
| }
| label_9:
0x00054dbc ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00054dbe movs r2, 0 | r2 = 0;
0x00054dc0 ldr r0, [r7, 0x54] | r0 = *((r7 + 0x54));
0x00054dc2 add r3, sp, 0x78 | r3 += var_78h;
0x00054dc4 add r6, sp, 0x90 | r6 += var_90h;
0x00054dc6 mov r5, r2 | r5 = r2;
0x00054dc8 add.w ip, sp, 0x80 |
0x00054dcc stm.w ip!, {r0, r1} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| do {
0x00054dd0 ldr r1, [r3, -0x8] | r1 = *((r3 - 0x8));
0x00054dd4 adds r3, 8 | r3 += 8;
0x00054dd6 add r1, r2 | r1 += r2;
0x00054dd8 add r5, r1 | r5 += r1;
0x00054dda ldr r1, [r3, -0xc] | r1 = var_ch_2;
0x00054dde cmp r3, r6 |
0x00054de0 add r1, r5 | r1 += r5;
0x00054de2 add r2, r1 | r2 += r1;
0x00054de4 bne 0x54dd0 |
| } while (r3 != r6);
0x00054de6 rev r3, r5 | r5 = SWAP32 (r3);
0x00054de8 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00054dec str r3, [sp, 0x88] | var_88h = r3;
0x00054dee rev r3, r2 | r2 = SWAP32 (r3);
0x00054df0 str r3, [sp, 0x8c] | var_8ch = r3;
0x00054df2 add r1, sp, 0x70 | r1 += var_70h;
0x00054df4 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00054df6 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00054df8 strd r5, r2, [r7, 0x4c] | __asm ("strd r5, r2, [r7, 0x4c]");
0x00054dfc movs r2, 0x20 | r2 = 0x20;
0x00054dfe str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x00054e00 movs r3, 0 | r3 = 0;
0x00054e02 strb.w r3, [r7, 0x41] | *((r7 + 0x41)) = r3;
0x00054e06 movs r3, 1 | r3 = 1;
0x00054e08 strb.w r3, [r7, 0x2f] | *((r7 + 0x2f)) = r3;
0x00054e0c ldr r3, [r0] | r3 = *(r0);
0x00054e0e vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00054e12 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00054e14 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00054e16 mov r1, r0 | r1 = r0;
0x00054e18 cmp r0, 0 |
| if (r0 != 0) {
0x00054e1a bne.w 0x54bf4 | goto label_1;
| }
0x00054e1e ldrb.w r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x00054e22 cmp r3, 0 |
| if (r3 == 0) {
0x00054e24 beq.w 0x54b34 | goto label_4;
| }
0x00054e28 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00054e2a ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00054e2c ubfx r1, r3, 2, 2 | r1 = (r3 >> 2) & ((1 << 2) - 1);
0x00054e30 str r0, [sp, 0x24] | var_24h = r0;
0x00054e32 cmp r1, 0 |
| if (r1 == 0) {
0x00054e34 beq.w 0x54b38 | goto label_5;
| }
0x00054e38 ldr r3, [r0] | r3 = *(r0);
0x00054e3a ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00054e3c blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x00054e3e mov r1, r0 | r1 = r0;
0x00054e40 cmp r0, 0 |
| if (r0 == 0) {
0x00054e42 beq.w 0x54b34 | goto label_4;
| }
0x00054e46 b 0x54bf4 | goto label_1;
| label_28:
0x00054e48 add.w fp, fp, 1 |
| label_31:
0x00054e4c ldr r3, [sp, 0x20] | r3 = var_20h;
0x00054e4e b 0x54c28 | goto label_6;
| label_23:
0x00054e50 mov r0, r4 | r0 = r4;
0x00054e52 bl 0x180f8 | fcn_000180f8 (r0);
0x00054e56 b 0x54aba | goto label_7;
| label_25:
0x00054e58 add r5, sp, 0x58 | r5 += var_58h;
0x00054e5a movs r0, 4 | r0 = 4;
0x00054e5c mov r1, r5 | r1 = r5;
0x00054e5e blx 0x8ac4 | fcn_00008ac4 ();
0x00054e62 ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
| if (r3 != 0) {
0x00054e66 cbnz r3, 0x54e94 | goto label_41;
| }
0x00054e68 ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x00054e6a movs r2, 4 | r2 = 4;
0x00054e6c mov r1, r2 | r1 = r2;
0x00054e6e movs r3, 0xa | r3 = 0xa;
0x00054e70 ldr r6, [r0] | r6 = *(r0);
0x00054e72 ldr r6, [r6, 0x38] | r6 = *((r6 + 0x38));
0x00054e74 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00054e76 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x00054e78 cbz r0, 0x54e94 | goto label_41;
| }
0x00054e7a cmp r0, 5 |
| if (r0 != 5) {
0x00054e7c bne.w 0x54bf4 | goto label_1;
| }
0x00054e80 ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
0x00054e84 b 0x54af8 | goto label_8;
| label_40:
0x00054e86 mov r1, r5 | r1 = r5;
0x00054e88 movs r0, 8 | r0 = 8;
0x00054e8a blx 0x8ac4 | fcn_00008ac4 ();
0x00054e8e b 0x54dbc | goto label_9;
| label_22:
0x00054e90 mov r1, r4 | r1 = r4;
0x00054e92 b 0x54aa8 | goto label_10;
| label_41:
0x00054e94 ldr r1, [sp, 0x58] | r1 = var_58h;
0x00054e96 mov r0, r7 | r0 = r7;
0x00054e98 bl 0x184b8 | fcn_000184b8 (r0, r1);
0x00054e9c ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
0x00054ea0 cmp r3, 0 |
| if (r3 != 0) {
0x00054ea2 bne.w 0x54b08 | goto label_11;
| }
0x00054ea6 ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x00054ea8 movs r2, 4 | r2 = 4;
0x00054eaa movs r3, 9 | r3 = 9;
0x00054eac mov r1, r2 | r1 = r2;
0x00054eae ldr r6, [r0] | r6 = *(r0);
0x00054eb0 ldr r6, [r6, 0x38] | r6 = *((r6 + 0x38));
0x00054eb2 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00054eb4 ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
0x00054eb8 b 0x54af8 | goto label_8;
| label_32:
0x00054eba ldr.w r6, [sb, 0x44] | r6 = *((sb + 0x44));
0x00054ebe ldr.w sb, [sp, 8] | sb = var_8h;
0x00054ec2 b 0x54cdc | goto label_12;
| label_34:
0x00054ec4 ldrb.w r3, [r7, 0x2f] | r3 = *((r7 + 0x2f));
0x00054ec8 cmp r3, 0 |
| if (r3 != 0) {
0x00054eca bne.w 0x5500c | goto label_42;
| }
0x00054ece ldr r6, [r7, 0x44] | r6 = *((r7 + 0x44));
0x00054ed0 mov sb, r3 | sb = r3;
0x00054ed2 b 0x54cdc | goto label_12;
| label_33:
0x00054ed4 ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x00054ed8 adds r3, 0x18 | r3 += 0x18;
0x00054eda mov r0, r3 | r0 = r3;
0x00054edc str r3, [sp, 0x10] | var_10h = r3;
0x00054ede blx 0x86a4 | fcn_000086a4 ();
0x00054ee2 movs r1, 7 | r1 = 7;
0x00054ee4 mov sb, r0 | sb = r0;
0x00054ee6 cmp r0, 0 |
| if (r0 == 0) {
0x00054ee8 beq.w 0x54bf4 | goto label_1;
| }
0x00054eec ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x00054eee cmp r3, 1 |
0x00054ef0 it eq |
| if (r3 != 1) {
0x00054ef2 moveq ip, 0x18 |
| }
| if (r3 != 1) {
0x00054ef6 beq 0x54f0e |
0x00054ef8 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00054efa subs r3, 2 | r3 -= 2;
0x00054efc asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x00054efe umull r2, r5, r3, r2 | r2:r5 = r3 * r2;
0x00054f02 mla r5, r3, r1, r5 | __asm ("mla r5, r3, r1, r5");
0x00054f06 adds.w ip, r2, 0x30 |
0x00054f0a adc r5, r5, 0 | __asm ("adc r5, r5, 0");
| }
0x00054f0e ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00054f10 mov r1, sb | r1 = sb;
0x00054f12 movs r2, 8 | r2 = 8;
0x00054f14 ldr r3, [r0] | r3 = *(r0);
0x00054f16 strd ip, r5, [sp] | __asm ("strd ip, r5, [sp]");
0x00054f1a ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00054f1c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00054f1e ldr.w r3, [sb] | r3 = *(sb);
0x00054f22 mov r1, r0 | r1 = r0;
0x00054f24 ldr.w lr, [r7, 0x68] |
0x00054f28 rev r3, r3 | r3 = SWAP32 (r3);
0x00054f2a str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x00054f2c ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00054f30 rev r3, r3 | r3 = SWAP32 (r3);
0x00054f32 str r3, [r7, 0x50] | *((r7 + 0x50)) = r3;
0x00054f34 movs r3, 0 | r3 = 0;
0x00054f36 cmp fp, lr |
0x00054f38 it hs |
| if (fp >= lr) {
0x00054f3a cmphs r0, r3 | __asm ("cmphs r0, r3");
| }
0x00054f3c str r3, [r7, 0x68] | *((r7 + 0x68)) = r3;
| if (fp != lr) {
0x00054f3e bne 0x54fea | goto label_43;
| }
0x00054f40 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00054f42 add.w r1, sb, 0x18 | r1 = sb + 0x18;
0x00054f46 strd r4, sl, [sp, 0x28] | __asm ("strd r4, sl, [var_2ch]");
0x00054f4a str r6, [sp, 0x38] | var_38h = r6;
0x00054f4c str.w r8, [sp, 0x3c] | __asm ("str.w r8, [var_3ch]");
0x00054f50 mov r6, r3 | r6 = r3;
0x00054f52 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x00054f54 mov r8, lr | r8 = lr;
0x00054f56 str r1, [sp, 0x18] | var_18h = r1;
0x00054f58 add r1, sp, 0x70 | r1 += var_70h;
0x00054f5a mov sl, r2 | sl = r2;
0x00054f5c str r1, [sp, 0x10] | var_10h = r1;
| do {
0x00054f5e add.w r3, r8, -1 | r3 = r8 + -1;
0x00054f62 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00054f64 umull r5, r4, r3, r6 | r5:r4 = r3 * r6;
0x00054f68 mov r2, r6 | r2 = r6;
0x00054f6a mov r1, sb | r1 = sb;
0x00054f6c ldr.w ip, [r0] | ip = *(r0);
0x00054f70 mla r4, r3, sl, r4 | __asm ("mla r4, r3, sl, r4");
0x00054f74 adds r5, 0x20 | r5 += 0x20;
0x00054f76 str r5, [sp] | *(sp) = r5;
0x00054f78 adc r4, r4, 0 | __asm ("adc r4, r4, 0");
0x00054f7c str r4, [sp, 4] | var_4h = r4;
0x00054f7e ldr.w r3, [ip, 8] | r3 = *((ip + 8));
0x00054f82 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 != 0) {
0x00054f84 cbz r0, 0x54faa |
0x00054f86 str r0, [sp, 8] | var_8h = r0;
0x00054f88 mov r0, sb | r0 = sb;
0x00054f8a blx 0x8404 | fcn_00008404 ();
0x00054f8e ldr r1, [sp, 8] | r1 = var_8h;
0x00054f90 b 0x54bf4 | goto label_1;
| label_38:
0x00054f92 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00054f94 mov r0, r7 | r0 = r7;
0x00054f96 str r1, [sp, 8] | var_8h = r1;
0x00054f98 str r3, [r7, 0x48] | *((r7 + 0x48)) = r3;
0x00054f9a ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00054f9c adds r3, 1 | r3++;
0x00054f9e str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x00054fa0 bl 0x14a2c | fcn_00014a2c (r0);
0x00054fa4 ldr r1, [sp, 8] | r1 = var_8h;
0x00054fa6 str r6, [r7, 0xc] | *((r7 + 0xc)) = r6;
0x00054fa8 b 0x54d64 | goto label_13;
| }
0x00054faa ldr.w r1, [sb] | r1 = *(sb);
0x00054fae mov r0, r7 | r0 = r7;
0x00054fb0 ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x00054fb4 add.w r8, r8, 1 | r8++;
0x00054fb8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00054fba rev r1, r1 | r1 = SWAP32 (r1);
0x00054fbc rev r2, r2 | r2 = SWAP32 (r2);
0x00054fbe str r3, [sp] | *(sp) = r3;
0x00054fc0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00054fc2 bl 0x1b0e0 | fcn_0001b0e0 (r0, r1, r2, r3, r4);
0x00054fc6 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00054fc8 movs r2, 0x18 | r2 = 0x18;
0x00054fca ldr r1, [sp, 0x10] | r1 = var_10h;
0x00054fcc ldr r3, [r0] | r3 = *(r0);
0x00054fce strd r5, r4, [sp] | __asm ("strd r5, r4, [sp]");
0x00054fd2 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00054fd4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00054fd6 cmp fp, r8 |
0x00054fd8 it hs |
| if (fp >= r8) {
0x00054fda cmphs r0, 0 | __asm ("cmphs r0, 0");
| }
0x00054fdc beq 0x54f5e |
| } while (fp == r8);
0x00054fde ldr r4, [sp, 0x28] | r4 = var_28h;
0x00054fe0 mov r1, r0 | r1 = r0;
0x00054fe2 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x00054fe6 ldrd r6, r8, [sp, 0x38] | __asm ("ldrd r6, r8, [var_38h]");
| label_43:
0x00054fea mov r0, sb | r0 = sb;
0x00054fec str r1, [sp, 0x10] | var_10h = r1;
0x00054fee blx 0x8404 | fcn_00008404 ();
0x00054ff2 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00054ff4 cmp r1, 0 |
| if (r1 == 0) {
0x00054ff6 beq.w 0x54c6e | goto label_14;
| }
0x00054ffa b 0x54bf4 | goto label_1;
| label_16:
0x00054ffc ldr r7, [sp, 0x10] | r7 = var_10h;
0x00054ffe ldrd fp, r4, [sp, 0x18] | __asm ("ldrd fp, r4, [var_1ch]");
0x00055002 ldr.w sl, [sp, 0x24] | sl = var_24h;
| label_21:
0x00055006 ldrb.w r3, [r7, 0x2f] | r3 = *((r7 + 0x2f));
| if (r3 == 0) {
0x0005500a cbz r3, 0x5501a | goto label_44;
| }
| label_42:
0x0005500c ldrd r2, r3, [r7, 0x10] | __asm ("ldrd r2, r3, [r7, 0x10]");
0x00055010 cmp r3, 0 |
0x00055012 it ge |
| if (r3 >= 0) {
0x00055014 movge r1, 0 | r1 = 0;
| goto label_45;
| }
| if (r3 >= 0) {
| label_45:
0x00055016 bge.w 0x54ca0 | goto label_15;
| }
| label_44:
0x0005501a ldr r6, [r7, 0x44] | r6 = *((r7 + 0x44));
0x0005501c b 0x54cdc | goto label_12;
| label_35:
0x00055034 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00055036 mov.w r2, 0x1000 | r2 = 0x1000;
0x0005503a ldr r3, [r0] | r3 = *(r0);
0x0005503c ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
| if (r3 != 0) {
0x0005503e cbz r3, 0x55054 |
0x00055040 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r0);
0x00055042 cmp r0, 0x1f |
0x00055044 mov r2, r0 | r2 = r0;
| if (r0 <= 0x1f) {
0x00055046 ble 0x550c4 | goto label_46;
| }
0x00055048 cmp.w r0, 0x10000 |
0x0005504c it ge |
| if (r0 < 0x10000) {
0x0005504e movge r2, 0x10000 | r2 = 0x10000;
| }
0x00055052 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
| }
| label_19:
0x00055054 adds r1, r6, r2 | r1 = r6 + r2;
0x00055056 adc.w r0, r8, r3 | __asm ("adc.w r0, r8, r3");
0x0005505a subs r5, r1, 1 | r5 = r1 - 1;
0x0005505c adc r1, r0, -1 | __asm ("adc r1, r0, -1");
0x00055060 mov r0, r5 | r0 = r5;
0x00055062 str r1, [sp, 0x10] | var_10h = r1;
0x00055064 bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x00055068 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0005506a subs r2, r5, r2 | r2 = r5 - r2;
0x0005506c sbc.w ip, r1, r3 | __asm ("sbc.w ip, r1, r3");
0x00055070 cmp r6, r2 |
0x00055072 sbcs.w r3, r8, ip | __asm ("sbcs.w r3, r8, ip");
0x00055076 strd r2, ip, [sp, 0x60] | __asm ("strd r2, ip, [var_60h]");
| if (r6 >= r2) {
0x0005507a bge 0x550cc | goto label_47;
| }
0x0005507c strd fp, r4, [sp, 0x18] | __asm ("strd fp, r4, [var_1ch]");
0x00055080 mov.w sb, 0 | sb = 0;
0x00055084 mov r4, r8 | r4 = r8;
0x00055086 str r7, [sp, 0x10] | var_10h = r7;
0x00055088 str.w sl, [sp, 0x24] | __asm ("str.w sl, [var_24h]");
0x0005508c add r5, sp, 0x58 | r5 += var_58h;
0x0005508e ldr r7, [sp, 0xc] | r7 = var_ch;
0x00055090 mov sl, r2 | sl = r2;
0x00055092 ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x00055096 mov fp, ip |
0x00055098 b 0x550ae | goto label_48;
| label_17:
0x0005509a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0005509c add.w sb, sb, 1 | sb++;
0x000550a0 adds r6, r3, r6 | r6 = r3 + r6;
0x000550a2 adc.w r4, r8, r4 | __asm ("adc.w r4, r8, r4");
0x000550a6 cmp r6, sl |
0x000550a8 sbcs.w r3, r4, fp | __asm ("sbcs.w r3, r4, fp");
| if (r6 >= sl) {
0x000550ac bge 0x54ffc | goto label_16;
| }
| label_48:
0x000550ae ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x000550b0 mov r0, r5 | r0 = r5;
0x000550b2 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x000550b4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000550b6 strd r6, r4, [sp] | __asm ("strd r6, r4, [sp]");
0x000550ba bl 0x1b158 | r0 = fcn_0001b158 (r0, r1, r2, r3, r4, r5);
0x000550be cmp r0, 0 |
| if (r0 == 0) {
0x000550c0 beq 0x5509a | goto label_17;
| }
0x000550c2 b 0x54bf2 | goto label_18;
| label_46:
0x000550c4 mov.w r2, 0x200 | r2 = 0x200;
0x000550c8 movs r3, 0 | r3 = 0;
0x000550ca b 0x55054 | goto label_19;
| label_47:
0x000550cc cmp ip, r8 |
0x000550ce it eq |
| if (ip != r8) {
0x000550d0 cmpeq r2, r6 | __asm ("cmpeq r2, r6");
| goto label_49;
| }
| if (ip == r8) {
| label_49:
0x000550d2 beq.w 0x54c82 | goto label_20;
| }
0x000550d6 mov.w sb, 0 | sb = 0;
0x000550da b 0x55006 | goto label_21;
| label_30:
0x000550dc blx 0x883c | fcn_0000883c ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x553ec */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000553ec () | void fcn_000553ec (int16_t arg_50h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| arithmetic x;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000553ec svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x000553f0 sub sp, 0x2c |
0x000553f2 str r2, [sp, 8] | var_8h = r2;
0x000553f4 subs r7, r3, 0 | r7 = r3 - 0;
0x000553f6 mov r6, r1 | r6 = r1;
0x000553f8 add.w sb, sp, 0x20 | sb += var_20h;
0x000553fc ldr r2, [pc, 0x2dc] |
0x000553fe mov r4, r0 | r4 = r0;
0x00055400 ldr r3, [pc, 0x2dc] | r3 = *(0x556e0);
0x00055402 mov r1, sb | r1 = sb;
0x00055404 vldr d16, [r6] | __asm ("vldr d16, [r6]");
0x00055408 add r2, pc | r2 = 0xaaae8;
0x0005540a ldr.w sl, [r0, 0xe0] | sl = *((r0 + 0xe0));
0x0005540e ldr r3, [r2, r3] |
0x00055410 ldrd r2, r8, [r0, 0x44] | __asm ("ldrd r2, r8, [r0, 0x44]");
0x00055414 ldr r3, [r3] | r3 = *(0xaaae8);
0x00055416 str r3, [sp, 0x24] | var_24h = r3;
0x00055418 mov.w r3, 0 | r3 = 0;
0x0005541c it ne |
| if (r7 == r3) {
0x0005541e movne r8, r2 | r8 = r2;
| }
0x00055420 movs r2, 4 | r2 = 4;
0x00055422 ldr.w r5, [r8] | r5 = *(r8);
0x00055426 mov r0, r8 | r0 = r8;
0x00055428 vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x0005542c ldr r5, [r5, 8] | r5 = *((r5 + 8));
0x0005542e blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00055430 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00055432 cbnz r0, 0x5549c | goto label_0;
| }
0x00055434 ldr r2, [r6] | r2 = *(r6);
0x00055436 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x00055438 ldr.w r0, [r8] | r0 = *(r8);
0x0005543c adds r2, 4 | r2 += 4;
0x0005543e ldr.w fp, [sp, 0x20] | fp = var_20h;
0x00055442 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00055446 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x0005544a mov r1, sl | r1 = sl;
0x0005544c ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0005544e mov r0, r8 | r0 = r8;
0x00055450 ldr.w r2, [r4, 0xa8] | r2 = *((r4 + 0xa8));
0x00055454 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00055456 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00055458 cbnz r0, 0x5549c | goto label_0;
| }
0x0005545a ldr.w r2, [r4, 0xa8] | r2 = *((r4 + 0xa8));
0x0005545e lsls r0, r7, 2 | r0 = r7 << 2;
0x00055460 ldr.w r1, [r4, 0xac] | r1 = *((r4 + 0xac));
0x00055464 adds r2, 4 | r2 += 4;
0x00055466 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0005546a adds r2, r2, r0 | r2 += r0;
0x0005546c adc.w r1, r1, r0, asr 31 | __asm ("adc.w r1, r1, r0, asr 31");
0x00055470 ldr r0, [r6] | r0 = *(r6);
0x00055472 adds r2, r2, r0 | r2 += r0;
0x00055474 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x00055476 str r2, [r6] | *(r6) = r2;
0x00055478 adc.w r3, r1, r0 | __asm ("adc.w r3, r1, r0");
0x0005547c str r3, [r6, 4] | *((r6 + 4)) = r3;
0x0005547e cmp.w fp, 0 |
| if (fp == 0) {
0x00055482 beq.w 0x555b0 | goto label_4;
| }
0x00055486 ldr.w r1, [r4, 0xa4] | r1 = *((r4 + 0xa4));
0x0005548a rev.w r0, fp | fp = SWAP32 (r0);
0x0005548e str r0, [sp, 0xc] | var_ch = r0;
0x00055490 cmp r1, r0 |
| if (r1 == r0) {
0x00055492 beq.w 0x555b0 | goto label_4;
| }
0x00055496 ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x00055498 cmp r1, r0 |
0x0005549a bhs 0x554ba |
| while (r0 != 0) {
| label_0:
0x0005549c ldr r2, [pc, 0x244] |
0x0005549e ldr r3, [pc, 0x240] | r3 = *(0x556e2);
0x000554a0 add r2, pc | r2 = 0xaab88;
0x000554a2 ldr r3, [r2, r3] | r3 = *(0xaab88);
0x000554a4 ldr r2, [r3] | r2 = *(0xaab88);
0x000554a6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000554a8 eors r2, r3 | r2 ^= r3;
0x000554aa mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000554ae bne.w 0x556ca | goto label_14;
| }
0x000554b2 mov r0, r5 | r0 = r5;
0x000554b4 add sp, 0x2c |
0x000554b6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000554ba ldr r1, [sp, 8] | r1 = var_8h;
0x000554bc cmp r1, 0 |
| if (r1 == 0) {
0x000554be beq 0x555b4 | goto label_15;
| }
0x000554c0 mov r1, r0 | r1 = r0;
0x000554c2 ldr r0, [sp, 8] | r0 = var_8h;
0x000554c4 strd r2, r3, [sp, 0x10] | __asm ("strd r2, r3, [var_10h]");
0x000554c8 bl 0x9c34 | r0 = fcn_00009c34 (r0, r1, r2);
0x000554cc cmp r0, 0 |
0x000554ce bne 0x5549c |
| }
0x000554d0 ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x000554d4 cmp r7, 0 |
| if (r7 != 0) {
0x000554d6 bne.w 0x555e8 | goto label_16;
| }
| label_6:
0x000554da ldrd r0, r1, [sp, 8] | __asm ("ldrd r0, r1, [var_8h]");
0x000554de bl 0x18af0 | r0 = fcn_00018af0 (r0, r1, r2);
0x000554e2 cmp r0, 0 |
| if (r0 != 0) {
0x000554e4 bne.w 0x55632 | goto label_17;
| }
| label_5:
0x000554e8 cmp.w fp, 0x1000000 |
| if (fp == 0x1000000) {
0x000554ec beq.w 0x55636 | goto label_18;
| }
| label_7:
0x000554f0 ldr.w r3, [r4, 0xe8] | r3 = *((r4 + 0xe8));
0x000554f4 cmp r3, 0 |
| if (r3 == 0) {
0x000554f6 beq.w 0x5568e | goto label_19;
| }
0x000554fa movs r3, 0 | r3 = 0;
0x000554fc str r3, [sp, 0x1c] | x = r3;
0x000554fe cmp r7, 0 |
| if (r7 == 0) {
0x00055500 beq.w 0x556ce | goto label_20;
| }
| label_10:
0x00055504 ldrb r3, [r4, 7] | r3 = *((r4 + 7));
0x00055506 cmp r3, 0 |
| if (r3 != 0) {
0x00055508 bne.w 0x55648 | goto label_21;
| }
0x0005550c ldrd r3, r2, [r6] | __asm ("ldrd r3, r2, [r6]");
0x00055510 ldr r1, [r4, 0x58] | r1 = *((r4 + 0x58));
0x00055512 cmp r1, r3 |
0x00055514 ldr r3, [r4, 0x5c] | r3 = *((r4 + 0x5c));
0x00055516 sbcs r3, r2 | __asm ("sbcs r3, r2");
0x00055518 ite ge |
| if (r1 < r3) {
0x0005551a movge r3, 1 | r3 = 1;
| }
| if (r1 >= r3) {
0x0005551c movlt r3, 0 | r3 = 0;
| }
| label_8:
0x0005551e ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x00055520 ldr r6, [r0] | r6 = *(r0);
0x00055522 cmp r6, 0 |
| if (r6 == 0) {
0x00055524 beq 0x555de | goto label_9;
| }
| label_2:
0x00055526 ldrb r2, [r4, 0x11] | r2 = *((r4 + 0x11));
0x00055528 subs r2, 1 | r2--;
0x0005552a cmp r2, 2 |
0x0005552c ite ls |
| if (r2 > 2) {
0x0005552e movls r3, 0 | r3 = 0;
| }
| if (r2 <= 2) {
0x00055530 andhi r3, r3, 1 | r3 &= 1;
| }
0x00055534 cmp r3, 0 |
| if (r3 != 0) {
0x00055536 bne.w 0x5564c | goto label_22;
| }
| label_13:
0x0005553a ldr r0, [sp, 0x1c] | r0 = x;
0x0005553c eor r7, r7, 1 | r7 ^= 1;
0x00055540 cmp r0, 0 |
0x00055542 ite ne |
| if (r0 == 0) {
0x00055544 movne r7, 0 | r7 = 0;
| }
| if (r0 != 0) {
0x00055546 andeq r7, r7, 1 | r7 &= 1;
| }
0x0005554a cmp r7, 0 |
| if (r7 == 0) {
0x0005554c beq 0x555e0 | goto label_23;
| }
| label_1:
0x0005554e ldrb r3, [r4, 0x15] | r3 = *((r4 + 0x15));
0x00055550 add r2, sp, 0x1c | r2 += x;
0x00055552 ldr.w r5, [r4, 0xdc] | r5 = *((r4 + 0xdc));
0x00055556 mov r0, r4 | r0 = r4;
0x00055558 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005555a orr r3, r3, 2 | r3 |= 2;
0x0005555e strb r3, [r4, 0x15] | *((r4 + 0x15)) = r3;
0x00055560 movs r3, 1 | r3 = 1;
0x00055562 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00055564 ldrb r3, [r4, 0x15] | r3 = *((r4 + 0x15));
0x00055566 mov r5, r0 | r5 = r0;
0x00055568 bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x0005556c strb r3, [r4, 0x15] | *((r4 + 0x15)) = r3;
0x0005556e cmp r0, 0 |
| if (r0 != 0) {
0x00055570 bne 0x5549c | goto label_0;
| }
0x00055572 ldr r0, [sp, 0x1c] | r0 = x;
0x00055574 ldrh r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x00055576 tst.w r3, 0x11 |
| if ((r3 & 0x11) != 0) {
0x0005557a beq 0x5558a |
0x0005557c movw r2, 0xffef | r2 = 0xffef;
0x00055580 ands r2, r3 | r2 &= r3;
0x00055582 lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x00055584 it pl |
| if (r3 >= r3) {
0x00055586 strhpl r2, [r0, 0x1c] | __asm ("strhpl r2, [r0, 0x1c]");
| }
| if (r3 < r3) {
0x00055588 bmi 0x555d2 | goto label_24;
| }
| }
| label_3:
0x0005558a ldr r6, [r0, 4] | r6 = *((r0 + 4));
0x0005558c mov r1, sl | r1 = sl;
0x0005558e ldr.w r2, [r4, 0xa8] | r2 = *((r4 + 0xa8));
0x00055592 mov r0, r6 | r0 = r6;
0x00055594 blx 0x8610 | fcn_00008610 ();
0x00055598 ldr.w r3, [r4, 0xd8] | r3 = *((r4 + 0xd8));
0x0005559c ldr r0, [sp, 0x1c] | r0 = x;
0x0005559e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000555a0 cmp.w fp, 0x1000000 |
| if (fp == 0x1000000) {
0x000555a4 beq.w 0x556ac | goto label_25;
| }
| label_11:
0x000555a8 ldr r0, [sp, 0x1c] | r0 = x;
0x000555aa bl 0x1297c | fcn_0001297c (r0);
0x000555ae b 0x5549c | goto label_0;
| label_4:
0x000555b0 movs r5, 0x65 | r5 = 0x65;
0x000555b2 b 0x5549c | goto label_0;
| if (r7 != 0) {
| label_15:
0x000555b4 cbnz r7, 0x555e8 | goto label_16;
| }
0x000555b6 cmp.w fp, 0x1000000 |
| if (fp == 0x1000000) {
0x000555ba beq 0x55636 | goto label_18;
| }
0x000555bc ldr.w r3, [r4, 0xe8] | r3 = *((r4 + 0xe8));
0x000555c0 cmp r3, 0 |
| if (r3 == 0) {
0x000555c2 beq 0x556be | goto label_26;
| }
0x000555c4 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000555c6 str r7, [sp, 0x1c] | x = r7;
0x000555c8 ldr r6, [r0] | r6 = *(r0);
0x000555ca cmp r6, 0 |
| if (r6 == 0) {
0x000555cc beq 0x5554e | goto label_1;
| }
| label_12:
0x000555ce movs r3, 1 | r3 = 1;
0x000555d0 b 0x55526 | goto label_2;
| label_24:
0x000555d2 eor r2, r2, 3 | r2 ^= 3;
0x000555d6 movs r1, 2 | r1 = 2;
0x000555d8 strh r2, [r0, 0x1c] | *((r0 + 0x1c)) = r2;
0x000555da bl 0x9cc0 | fcn_00009cc0 (r0, r1);
| label_9:
0x000555de ldr r0, [sp, 0x1c] | r0 = x;
| label_23:
0x000555e0 cmp r0, 0 |
| if (r0 == 0) {
0x000555e2 beq.w 0x5549c | goto label_0;
| }
0x000555e6 b 0x5558a | goto label_3;
| label_16:
0x000555e8 ldr.w ip, [r8] | ip = *(r8);
0x000555ec subs r2, 4 | r2 -= 4;
0x000555ee adc r0, r3, -1 | __asm ("adc r0, r3, -1");
0x000555f2 mov r1, sb | r1 = sb;
0x000555f4 strd r2, r0, [sp] | __asm ("strd r2, r0, [sp]");
0x000555f8 mov r0, r8 | r0 = r8;
0x000555fa ldr.w r3, [ip, 8] | r3 = *((ip + 8));
0x000555fe movs r2, 4 | r2 = 4;
0x00055600 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 != 0) {
0x00055602 cbnz r0, 0x55632 | goto label_17;
| }
0x00055604 ldr r3, [sp, 0x50] | r3 = *(arg_50h);
0x00055606 ldr r0, [sp, 0x20] | r0 = var_20h;
| if (r3 != 0) {
0x00055608 cbnz r3, 0x55628 | goto label_27;
| }
0x0005560a ldr.w r3, [r4, 0xa8] | r3 = *((r4 + 0xa8));
0x0005560e ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00055610 subs r3, 0xc8 | r3 -= 0xc8;
0x00055612 cmp r3, 0 |
| if (r3 <= 0) {
0x00055614 ble 0x55622 | goto label_28;
| }
| do {
0x00055616 ldrb.w r1, [sl, r3] | r1 = *((sl + r3));
0x0005561a subs r3, 0xc8 | r3 -= 0xc8;
0x0005561c cmp r3, 0 |
0x0005561e add r2, r1 | r2 += r1;
0x00055620 bgt 0x55616 |
| } while (r3 > 0);
| label_28:
0x00055622 rev r0, r0 | r0 = SWAP32 (r0);
0x00055624 cmp r2, r0 |
| if (r2 != r0) {
0x00055626 bne 0x555b0 | goto label_4;
| }
| label_27:
0x00055628 ldr r3, [sp, 8] | r3 = var_8h;
0x0005562a cmp r3, 0 |
| if (r3 == 0) {
0x0005562c beq.w 0x554e8 | goto label_5;
| }
0x00055630 b 0x554da | goto label_6;
| label_17:
0x00055632 mov r5, r0 | r5 = r0;
0x00055634 b 0x5549c | goto label_0;
| label_18:
0x00055636 ldrb.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x0005563a ldrsh.w r2, [r4, 0x96] | r2 = *((r4 + 0x96));
0x0005563e cmp r2, r3 |
0x00055640 it ne |
| if (r2 != r3) {
0x00055642 strhne r3, [r4, 0x96] | __asm ("strhne r3, [r4, 0x96]");
| }
0x00055646 b 0x554f0 | goto label_7;
| label_21:
0x00055648 movs r3, 1 | r3 = 1;
0x0005564a b 0x5551e | goto label_8;
| label_22:
0x0005564c ldr.w r2, [r4, 0xa8] | r2 = *((r4 + 0xa8));
0x00055650 mov r1, sl | r1 = sl;
0x00055652 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00055654 subs r7, r3, 1 | r7 = r3 - 1;
0x00055656 ldr.w r3, [r4, 0xac] | r3 = *((r4 + 0xac));
0x0005565a umull r5, ip, r7, r2 | r5:ip = r7 * r2;
0x0005565e mla r3, r7, r3, ip | __asm ("mla r3, r7, r3, ip");
0x00055662 strd r5, r3, [sp] | __asm ("strd r5, r3, [sp]");
0x00055666 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00055668 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x0005566a ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0005566c mov r5, r0 | r5 = r0;
0x0005566e ldr r2, [sp, 0xc] | r2 = var_ch;
0x00055670 ldr r0, [r4, 0x60] | r0 = *((r4 + 0x60));
0x00055672 cmp r3, r2 |
0x00055674 it lo |
| if (r3 >= r2) {
0x00055676 strlo r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
| }
0x00055678 cmp r0, 0 |
| if (r0 == 0) {
0x0005567a beq 0x555de | goto label_9;
| }
0x0005567c ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005567e mov r2, sl | r2 = sl;
0x00055680 bl 0x54a10 | fcn_00054a10 (r0, r1, r2);
0x00055684 ldr r0, [sp, 0x1c] | r0 = x;
0x00055686 cmp r0, 0 |
| if (r0 == 0) {
0x00055688 beq.w 0x5549c | goto label_0;
| }
0x0005568c b 0x5558a | goto label_3;
| label_19:
0x0005568e ldr r1, [sp, 0xc] | r1 = var_ch;
0x00055690 mov r0, r4 | r0 = r4;
0x00055692 bl 0x14fcc | fcn_00014fcc (r0, r1);
0x00055696 str r0, [sp, 0x1c] | x = r0;
0x00055698 cmp r7, 0 |
| if (r7 != 0) {
0x0005569a bne.w 0x55504 | goto label_10;
| }
| if (r0 == 0) {
| do {
0x0005569e cbz r0, 0x556ce | goto label_20;
| }
0x000556a0 ldrh r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x000556a2 eor r3, r3, 8 | r3 ^= 8;
0x000556a6 ubfx r3, r3, 3, 1 | r3 = (r3 >> 3) & ((1 << 1) - 1);
0x000556aa b 0x5551e | goto label_8;
| label_25:
0x000556ac ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x000556ae ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x000556b0 ldr r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x000556b2 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x000556b4 str r0, [r4, 0x70] | *((r4 + 0x70)) = r0;
0x000556b6 str r1, [r4, 0x74] | *((r4 + 0x74)) = r1;
0x000556b8 str r2, [r4, 0x78] | *((r4 + 0x78)) = r2;
0x000556ba str r3, [r4, 0x7c] | *((r4 + 0x7c)) = r3;
0x000556bc b 0x555a8 | goto label_11;
| label_26:
0x000556be ldr r1, [sp, 0xc] | r1 = var_ch;
0x000556c0 mov r0, r4 | r0 = r4;
0x000556c2 bl 0x14fcc | fcn_00014fcc (r0, r1);
0x000556c6 str r0, [sp, 0x1c] | x = r0;
0x000556c8 b 0x5569e |
| } while (1);
| label_14:
0x000556ca blx 0x883c | fcn_0000883c ();
| label_20:
0x000556ce ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x000556d0 ldr r6, [r0] | r6 = *(r0);
0x000556d2 cmp r6, 0 |
| if (r6 != 0) {
0x000556d4 bne.w 0x555ce | goto label_12;
| }
0x000556d8 b 0x5553a | goto label_13;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x556e8 */
| #include <stdint.h>
|
; (fcn) fcn.000556e8 () | void fcn_000556e8 (int16_t arg_64h, int16_t arg_68h, uint32_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int32_t var_18h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000556e8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000556ec mov r4, r0 | r4 = r0;
0x000556ee ldr.w r5, [pc, 0x474] | r5 = *(0x00055b64);
0x000556f2 sub sp, 0x2c |
0x000556f4 ldr.w r3, [pc, 0x470] |
0x000556f8 ldr r0, [r0, 0x68] | r0 = *((r0 + 0x68));
0x000556fa add r5, pc | r5 += pc;
0x000556fc ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x000556fe cmp r0, r2 |
0x00055700 ldr r3, [r3] | r3 = *(0x55b68);
0x00055702 str r3, [sp, 0x24] | var_24h = r3;
0x00055704 mov.w r3, 0 | r3 = 0;
| if (r0 <= r2) {
0x00055708 bgt 0x55730 |
| label_5:
0x0005570a mov.w fp, 0 |
| label_1:
0x0005570e ldr.w r1, [pc, 0x45c] | r1 = *(0x00055b6c);
0x00055712 ldr.w r3, [pc, 0x454] | r3 = *(0x55b6a);
0x00055716 add r1, pc | r1 += pc;
0x00055718 ldr r3, [r1, r3] | r3 = *((r1 + r3));
0x0005571a ldr r1, [r3] | r1 = *(0x55b6a);
0x0005571c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005571e eors r1, r3 | r1 ^= r3;
0x00055720 mov.w r3, 0 | r3 = 0;
| if (r1 != r3) {
0x00055724 bne.w 0x55b5e | goto label_20;
| }
0x00055728 mov r0, fp | r0 = fp;
0x0005572a add sp, 0x2c |
0x0005572c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00055730 cmp r1, 1 |
0x00055732 ite eq |
| if (r1 != 1) {
0x00055734 moveq r5, r2 | r5 = r2;
| }
| if (r1 == 1) {
0x00055736 addne r5, r2, 1 | r5 = r2 + 1;
| }
0x00055738 mov r6, r1 | r6 = r1;
0x0005573a cmp r0, r5 |
| if (r0 <= r5) {
0x0005573c ble 0x55784 | goto label_21;
| }
0x0005573e add.w r8, r5, r5, lsl 1 | r8 = r5 + (r5 << 1);
0x00055742 mov sb, r5 | sb = r5;
0x00055744 mov fp, r4 |
0x00055746 lsl.w r8, r8, 4 | r8 <<= 4;
| label_0:
0x0005574a ldr.w r3, [fp, 0x64] | r3 = *(arg_64h);
0x0005574e add r3, r8 | r3 += r8;
0x00055750 ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
| if (r4 == 0) {
0x00055752 cbz r4, 0x55776 | goto label_22;
| }
0x00055754 ldr r3, [r4, 8] | r3 = *((r4 + 8));
| if (r3 == 0) {
0x00055756 cbz r3, 0x5576c | goto label_23;
| }
0x00055758 add.w r7, r4, 8 | r7 = r4 + 8;
0x0005575c add.w sl, r4, 0x1fc | sl = r4 + 0x1fc;
| do {
0x00055760 ldr r0, [r7, 4]! | r0 = *((r7 += 4));
0x00055764 bl 0x1d0ec | fcn_0001d0ec (r0);
0x00055768 cmp r7, sl |
0x0005576a bne 0x55760 |
| } while (r7 != sl);
| label_23:
0x0005576c mov r0, r4 | r0 = r4;
0x0005576e blx 0x8404 | fcn_00008404 ();
0x00055772 ldr.w r0, [fp, 0x68] | r0 = *(arg_68h);
| label_22:
0x00055776 add.w sb, sb, 1 | sb++;
0x0005577a add.w r8, r8, 0x30 | r8 += 0x30;
0x0005577e cmp sb, r0 |
| if (sb < r0) {
0x00055780 blt 0x5574a | goto label_0;
| }
0x00055782 mov r4, fp | r4 = fp;
| label_21:
0x00055784 cmp r6, 1 |
0x00055786 str r5, [r4, 0x68] | *((r4 + 0x68)) = r5;
| if (r6 == 1) {
0x00055788 beq.w 0x55894 | goto label_24;
| }
0x0005578c ldr.w r6, [r4, 0xe8] | r6 = *((r4 + 0xe8));
0x00055790 cmp r6, 0 |
| if (r6 == 0) {
0x00055792 beq.w 0x55a00 | goto label_25;
| }
0x00055796 cmp r5, 0 |
| if (r5 == 0) {
0x00055798 beq.w 0x558c4 | goto label_26;
| }
0x0005579c add.w r3, r5, r5, lsl 1 | r3 = r5 + (r5 << 1);
0x000557a0 ldr r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x000557a2 lsls r3, r3, 4 | r3 <<= 4;
0x000557a4 subs r3, 0x30 | r3 -= 0x30;
0x000557a6 adds r5, r2, r3 | r5 = r2 + r3;
| if (r5 == r2) {
0x000557a8 beq.w 0x558c4 | goto label_26;
| }
| label_18:
0x000557ac mov.w r0, 0x200 | r0 = 0x200;
0x000557b0 movs r1, 0 | r1 = 0;
0x000557b2 ldr r7, [r5, 0x14] | r7 = *((r5 + 0x14));
0x000557b4 mov.w fp, 7 |
0x000557b8 bl 0x1cbb0 | r0 = fcn_0001cbb0 (r0);
0x000557bc mov r6, r0 | r6 = r0;
0x000557be cmp r0, 0 |
| if (r0 == 0) {
0x000557c0 beq 0x5570e | goto label_1;
| }
0x000557c2 str r7, [r0] | *(r0) = r7;
0x000557c4 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000557c6 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x000557c8 ldrd r7, r8, [r4, 0x50] | __asm ("ldrd r7, r8, [r4, 0x50]");
0x000557cc strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x000557ce ldr.w r3, [r4, 0xe8] | r3 = *((r4 + 0xe8));
0x000557d2 str r2, [r4, 0x1c] | *((r4 + 0x1c)) = r2;
0x000557d4 cmp r3, 0 |
| if (r3 == 0) {
0x000557d6 beq.w 0x55a24 | goto label_27;
| }
| label_8:
0x000557da vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000557de movs r2, 0 | r2 = 0;
0x000557e0 mov r3, r2 | r3 = r2;
0x000557e2 vstr d16, [r4, 0x50] | __asm ("vstr d16, [r4, 0x50]");
| label_10:
0x000557e6 mov fp, r6 |
0x000557e8 add.w r1, r4, 0x50 | r1 = r4 + 0x50;
0x000557ec str r1, [sp, 8] | var_8h = r1;
0x000557ee str r5, [sp, 0xc] | var_ch_2 = r5;
| do {
| label_2:
0x000557f0 cmp r2, r7 |
0x000557f2 sbcs.w r3, r3, r8 | __asm ("sbcs.w r3, r3, r8");
| if (r2 >= r7) {
0x000557f6 bge.w 0x55916 | goto label_28;
| }
0x000557fa add r3, sp, 0x18 | r3 += var_18h_2;
0x000557fc movs r1, 0 | r1 = 0;
0x000557fe str r3, [sp, 4] | var_4h_2 = r3;
0x00055800 add r3, sp, 0x14 | r3 += var_14h_2;
0x00055802 str r3, [sp] | *(sp) = r3;
0x00055804 mov r2, r7 | r2 = r7;
0x00055806 mov r3, r8 | r3 = r8;
0x00055808 mov r0, r4 | r0 = r4;
0x0005580a str r1, [sp, 0x14] | var_14h_2 = r1;
0x0005580c bl 0x1e5c8 | fcn_0001e5c8 (r0, r1, r2, r3, r4, r5);
0x00055810 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x00055812 mov r5, r0 | r5 = r0;
| if (r3 == 0) {
0x00055814 cbnz r3, 0x55830 |
0x00055816 ldr r2, [r4, 0x58] | r2 = *((r4 + 0x58));
0x00055818 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
0x0005581c ldrd r0, r6, [r4, 0x50] | __asm ("ldrd r0, r6, [r4, 0x50]");
0x00055820 adds r3, r3, r2 | r3 += r2;
0x00055822 ldr r2, [r4, 0x5c] | r2 = *((r4 + 0x5c));
0x00055824 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00055828 cmp r2, r6 |
0x0005582a it eq |
| if (r2 == r6) {
0x0005582c cmpeq r3, r0 | __asm ("cmpeq r3, r0");
| }
| if (r2 == r6) {
0x0005582e beq 0x55876 | goto label_29;
| }
| }
| label_4:
0x00055830 cmp r5, 0 |
| if (r5 != 0) {
0x00055832 bne.w 0x559a0 | goto label_30;
| }
0x00055836 mov sb, r5 | sb = r5;
0x00055838 ldr.w sl, [sp, 0x14] | sl = var_14h_2;
0x0005583c ldr r5, [sp, 8] | r5 = var_8h;
0x0005583e movs r6, 1 | r6 = 1;
| label_3:
0x00055840 cmp sb, sl |
0x00055842 ldrd r2, r3, [r4, 0x50] | __asm ("ldrd r2, r3, [r4, 0x50]");
0x00055846 beq 0x557f0 |
| } while (sb == sl);
0x00055848 cmp r2, r7 |
0x0005584a sbcs.w r1, r3, r8 | __asm ("sbcs.w r1, r3, r8");
| if (r2 >= r7) {
0x0005584e bge 0x557f0 | goto label_2;
| }
0x00055850 movs r3, 1 | r3 = 1;
0x00055852 mov r2, fp | r2 = fp;
0x00055854 mov r1, r5 | r1 = r5;
0x00055856 mov r0, r4 | r0 = r4;
0x00055858 str r6, [sp] | *(sp) = r6;
0x0005585a add sb, r3 | sb += r3;
0x0005585c bl 0x553ec | r0 = fcn_000553ec (r0, r1, r2, r3, r4);
0x00055860 cmp r0, 0 |
| if (r0 == 0) {
0x00055862 beq 0x55840 | goto label_3;
| }
0x00055864 ldr r5, [sp, 0xc] | r5 = var_ch_2;
0x00055866 mov r6, fp | r6 = fp;
0x00055868 mov fp, r0 |
0x0005586a cmp r5, 0 |
| if (r5 != 0) {
0x0005586c bne.w 0x559ac | goto label_16;
| }
| label_6:
0x00055870 cmp r6, 0 |
| if (r6 != 0) {
0x00055872 bne 0x55970 | goto label_14;
| }
0x00055874 b 0x5570e | goto label_1;
| label_29:
0x00055876 ldr.w r3, [r4, 0xa8] | r3 = *((r4 + 0xa8));
0x0005587a subs r0, r7, r0 | r0 = r7 - r0;
0x0005587c sbc.w r1, r8, r6 | __asm ("sbc.w r1, r8, r6");
0x00055880 adds.w r2, r3, 8 | r2 = r3 + 8;
0x00055884 ldr.w r3, [r4, 0xac] | r3 = *((r4 + 0xac));
0x00055888 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0005588c bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x00055890 str r0, [sp, 0x14] | var_14h_2 = r0;
0x00055892 b 0x55830 | goto label_4;
| label_24:
0x00055894 ldr r3, [r4, 0x64] | r3 = *((r4 + 0x64));
0x00055896 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0005589a add.w r5, r3, r5, lsl 4 | r5 = r3 + (r5 << 4);
0x0005589e ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000558a0 cmp r3, 0 |
| if (r3 == 0) {
0x000558a2 beq.w 0x5570a | goto label_5;
| }
0x000558a6 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x000558a8 ldr r2, [r0] | r2 = *(r0);
0x000558aa cmp r2, 0 |
| if (r2 == 0) {
0x000558ac beq.w 0x5570a | goto label_5;
| }
0x000558b0 ldr r3, [pc, 0x2bc] |
0x000558b2 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x000558b4 add r3, pc |
0x000558b6 add.w r3, r3, 0x1e0 | r3 = 0xab608;
0x000558ba cmp r2, r3 |
| if (r2 == r3) {
0x000558bc beq.w 0x55b0a | goto label_31;
| }
| label_13:
0x000558c0 str r1, [r4, 0x38] | *((r4 + 0x38)) = r1;
0x000558c2 b 0x5570a | goto label_5;
| label_26:
0x000558c4 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x000558c6 movs r7, 1 | r7 = 1;
0x000558c8 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000558ca str r2, [r4, 0x1c] | *((r4 + 0x1c)) = r2;
0x000558cc strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x000558ce ldrb.w r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x000558d2 mov fp, r2 |
0x000558d4 cmp r2, 0 |
| if (r2 != 0) {
0x000558d6 bne.w 0x55a7a | goto label_32;
| }
| label_12:
0x000558da ldr.w r3, [r4, 0xe4] | r3 = *((r4 + 0xe4));
0x000558de ldr r0, [r3] | r0 = *(r3);
0x000558e0 bl 0x1431c | r0 = fcn_0001431c (r0);
0x000558e4 cmp r0, 0 |
0x000558e6 ite eq |
| if (r0 != 0) {
0x000558e8 moveq r7, 0 | r7 = 0;
| }
| if (r0 == 0) {
0x000558ea andne r7, r7, 1 | r7 &= 1;
| }
0x000558ee mov r5, r0 | r5 = r0;
0x000558f0 cmp r7, 0 |
| if (r7 == 0) {
0x000558f2 beq.w 0x5570e | goto label_1;
| }
| do {
0x000558f6 mov r3, r5 | r3 = r5;
0x000558f8 ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x000558fa ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x000558fc mov r0, r4 | r0 = r4;
0x000558fe bl 0x2646c | fcn_0002646c (r0, r1);
0x00055902 subs r3, r5, 0 | r3 = r5 - 0;
0x00055904 mov fp, r0 |
0x00055906 it ne |
| if (r3 == r5) {
0x00055908 movne r3, 1 | r3 = 1;
| }
0x0005590a cmp r0, 0 |
0x0005590c it ne |
| if (r0 == 0) {
0x0005590e movne r3, 0 | r3 = 0;
| }
0x00055910 cmp r3, 0 |
0x00055912 bne 0x558f6 |
| } while (r3 != 0);
0x00055914 b 0x5570e | goto label_1;
| label_28:
0x00055916 ldr r5, [sp, 0xc] | r5 = var_ch_2;
0x00055918 mov r6, fp | r6 = fp;
0x0005591a cmp r5, 0 |
| if (r5 == 0) {
0x0005591c beq.w 0x55b36 | goto label_33;
| }
0x00055920 ldr.w sb, [r5, 0x18] | sb = *((r5 + 0x18));
0x00055924 ldr.w r3, [r4, 0xa8] | r3 = *((r4 + 0xa8));
0x00055928 ldr.w r2, [r4, 0xac] | r2 = *((r4 + 0xac));
0x0005592c ldr.w r0, [r4, 0xe8] | r0 = *((r4 + 0xe8));
0x00055930 adds r3, 4 | r3 += 4;
0x00055932 adc r1, r2, 0 | __asm ("adc r1, r2, 0");
0x00055936 umull r3, r2, r3, sb | r3:r2 = r3 * sb;
0x0005593a mla r2, sb, r1, r2 | __asm ("mla r2, sb, r1, r2");
0x0005593e strd r3, r2, [sp, 0x18] | __asm ("strd r3, r2, [var_18h_2]");
0x00055942 cmp r0, 0 |
| if (r0 != 0) {
0x00055944 bne 0x559d2 | goto label_34;
| }
| label_7:
0x00055946 add.w sl, sp, 0x18 | sl += var_18h_2;
0x0005594a movs r5, 1 | r5 = 1;
0x0005594c b 0x55964 |
| while (sb <= r3) {
0x0005594e movs r3, 0 | r3 = 0;
0x00055950 mov r2, r6 | r2 = r6;
0x00055952 mov r1, sl | r1 = sl;
0x00055954 mov r0, r4 | r0 = r4;
0x00055956 str r5, [sp] | *(sp) = r5;
0x00055958 add.w sb, sb, 1 | sb++;
0x0005595c bl 0x553ec | r0 = fcn_000553ec (r0, r1, r2, r3, r4);
0x00055960 cmp r0, 0 |
| if (r0 != 0) {
0x00055962 bne 0x55a20 | goto label_35;
| }
0x00055964 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00055966 cmp sb, r3 |
0x00055968 blo 0x5594e |
| }
0x0005596a mov.w fp, 0 |
| if (r6 == 0) {
| label_9:
0x0005596e cbz r6, 0x5598e | goto label_36;
| }
| label_14:
0x00055970 ldr r3, [r6, 8] | r3 = *((r6 + 8));
| if (r3 == 0) {
0x00055972 cbz r3, 0x55988 | goto label_37;
| }
| label_11:
0x00055974 add.w r5, r6, 8 | r5 = r6 + 8;
0x00055978 add.w sb, r6, 0x1fc | sb = r6 + 0x1fc;
| do {
0x0005597c ldr r0, [r5, 4]! | r0 = *((r5 += 4));
0x00055980 bl 0x1d0ec | fcn_0001d0ec (r0);
0x00055984 cmp sb, r5 |
0x00055986 bne 0x5597c |
| } while (sb != r5);
| label_37:
0x00055988 mov r0, r6 | r0 = r6;
0x0005598a blx 0x8404 | fcn_00008404 ();
| label_36:
0x0005598e cmp.w fp, 0 |
| if (fp != 0) {
0x00055992 bne.w 0x5570e | goto label_1;
| }
| label_15:
0x00055996 mov.w fp, 0 |
0x0005599a strd r7, r8, [r4, 0x50] | __asm ("strd r7, r8, [r4, 0x50]");
0x0005599e b 0x5570e | goto label_1;
| label_30:
0x000559a0 mov r6, fp | r6 = fp;
0x000559a2 mov fp, r5 |
0x000559a4 ldr r5, [sp, 0xc] | r5 = var_ch_2;
0x000559a6 cmp r5, 0 |
| if (r5 == 0) {
0x000559a8 beq.w 0x55870 | goto label_6;
| }
| label_16:
0x000559ac ldr.w sb, [r5, 0x18] | sb = *((r5 + 0x18));
0x000559b0 ldr.w r3, [r4, 0xa8] | r3 = *((r4 + 0xa8));
0x000559b4 ldr.w r1, [r4, 0xac] | r1 = *((r4 + 0xac));
0x000559b8 adds r3, 4 | r3 += 4;
0x000559ba adc r0, r1, 0 | __asm ("adc r0, r1, 0");
0x000559be umull r3, r1, r3, sb | r3:r1 = r3 * sb;
0x000559c2 mla r1, sb, r0, r1 | __asm ("mla r1, sb, r0, r1");
0x000559c6 ldr.w r0, [r4, 0xe8] | r0 = *((r4 + 0xe8));
0x000559ca strd r3, r1, [sp, 0x18] | __asm ("strd r3, r1, [var_18h_2]");
0x000559ce cmp r0, 0 |
| if (r0 == 0) {
0x000559d0 beq 0x55a66 | goto label_38;
| }
| label_34:
0x000559d2 ldr r3, [r0, 0x70] | r3 = *((r0 + 0x70));
0x000559d4 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x000559d6 cmp r2, r3 |
0x000559d8 itett ne |
| if (r2 == r3) {
0x000559da movne r3, 0 | r3 = 0;
| }
| if (r2 != r3) {
0x000559dc ldreq r3, [r5, 0x20] | r3 = *((r5 + 0x20));
| }
| if (r2 == r3) {
0x000559de strne r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
| }
| if (r2 == r3) {
0x000559e0 ldrne r2, [r0, 0x70] | r2 = *((r0 + 0x70));
| }
0x000559e2 it ne |
| if (r2 == r3) {
0x000559e4 strne r2, [r5, 0x2c] | *((r5 + 0x2c)) = r2;
| }
0x000559e6 ldr r2, [r0, 0x44] | r2 = *((r0 + 0x44));
0x000559e8 cmp r2, r3 |
| if (r2 < r3) {
0x000559ea bls 0x55946 | goto label_7;
| }
0x000559ec str r3, [r0, 0x44] | *((r0 + 0x44)) = r3;
0x000559ee ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x000559f0 str r3, [r0, 0x4c] | *((r0 + 0x4c)) = r3;
0x000559f2 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x000559f4 str r3, [r0, 0x50] | *((r0 + 0x50)) = r3;
0x000559f6 bl 0x1cd9c | fcn_0001cd9c (r0);
0x000559fa ldr.w sb, [r5, 0x18] | sb = *((r5 + 0x18));
0x000559fe b 0x55946 | goto label_7;
| label_25:
0x00055a00 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x00055a02 ldr r3, [r3] | r3 = *(r3);
0x00055a04 cmp r3, 0 |
| if (r3 == 0) {
0x00055a06 beq.w 0x5570a | goto label_5;
| }
0x00055a0a cmp r5, 0 |
| if (r5 != 0) {
0x00055a0c bne.w 0x55b44 | goto label_39;
| }
| label_17:
0x00055a10 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x00055a12 movs r5, 0 | r5 = 0;
0x00055a14 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00055a16 ldrd r7, r8, [r4, 0x50] | __asm ("ldrd r7, r8, [r4, 0x50]");
0x00055a1a str r2, [r4, 0x1c] | *((r4 + 0x1c)) = r2;
0x00055a1c strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x00055a1e b 0x557da | goto label_8;
| label_35:
0x00055a20 mov fp, r0 |
0x00055a22 b 0x5596e | goto label_9;
| label_27:
0x00055a24 ldrd sb, sl, [r5, 8] | __asm ("ldrd sb, sl, [r5, 8]");
0x00055a28 add.w r1, r4, 0x50 | r1 = r4 + 0x50;
0x00055a2c mov fp, r1 |
0x00055a2e orrs.w r3, sb, sl | r3 = sb | sl;
0x00055a32 ldrd r2, r3, [r5] | __asm ("ldrd r2, r3, [r5]");
0x00055a36 itt eq |
| if (r3 != sb) {
0x00055a38 moveq sb, r7 | sb = r7;
| }
| if (r3 != sb) {
0x00055a3a moveq sl, r8 | sl = r8;
| }
0x00055a3c strd r2, r3, [r4, 0x50] | __asm ("strd r2, r3, [r4, 0x50]");
0x00055a40 b 0x55a58 |
| while (r2 < sb) {
0x00055a42 movs r3, 1 | r3 = 1;
0x00055a44 mov r2, r6 | r2 = r6;
0x00055a46 mov r1, fp | r1 = fp;
0x00055a48 mov r0, r4 | r0 = r4;
0x00055a4a str r3, [sp] | *(sp) = r3;
0x00055a4c bl 0x553ec | r0 = fcn_000553ec (r0, r1, r2, r3, r4);
0x00055a50 cmp r0, 0 |
| if (r0 != 0) {
0x00055a52 bne 0x55b40 | goto label_40;
| }
0x00055a54 ldrd r2, r3, [r4, 0x50] | __asm ("ldrd r2, r3, [r4, 0x50]");
0x00055a58 cmp r2, sb |
0x00055a5a sbcs.w r3, r3, sl | __asm ("sbcs.w r3, r3, sl");
0x00055a5e blt 0x55a42 |
| }
0x00055a60 ldrd r2, r3, [r4, 0x50] | __asm ("ldrd r2, r3, [r4, 0x50]");
0x00055a64 b 0x557e6 | goto label_10;
| label_38:
0x00055a66 cmp r6, 0 |
| if (r6 == 0) {
0x00055a68 beq.w 0x5570e | goto label_1;
| }
0x00055a6c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00055a6e cmp r3, 0 |
| if (r3 != 0) {
0x00055a70 bne 0x55974 | goto label_11;
| }
0x00055a72 mov r0, r6 | r0 = r6;
0x00055a74 blx 0x8404 | fcn_00008404 ();
0x00055a78 b 0x5570e | goto label_1;
| label_32:
0x00055a7a ldr r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x00055a7c add.w r2, r6, 0x34 | r2 = r6 + 0x34;
0x00055a80 ldr.w r8, [r6, 0x44] | r8 = *((r6 + 0x44));
0x00055a84 ldr r3, [r1] | r3 = *(r1);
0x00055a86 add.w r0, r3, 0x30 | r0 = r3 + 0x30;
| do {
0x00055a8a ldr.w lr, [r3] |
0x00055a8e adds r3, 0x10 | r3 += 0x10;
0x00055a90 ldr ip, [r3, -0xc] | ip = *((r3 - 0xc));
0x00055a94 adds r2, 0x10 | r2 += 0x10;
0x00055a96 ldr r7, [r3, -0x8] | r7 = *((r3 - 0x8));
0x00055a9a ldr r5, [r3, -0x4] | r5 = *((r3 - 0x4));
0x00055a9e cmp r3, r0 |
0x00055aa0 str lr, [r2, -0x10] |
0x00055aa4 str ip, [r2, -0xc] | *((r2 - 0xc)) = ip;
0x00055aa8 str r7, [r2, -0x8] | *((r2 - 0x8)) = r7;
0x00055aac str r5, [r2, -0x4] | *((r2 - 0x4)) = r5;
0x00055ab0 bne 0x55a8a |
| } while (r3 != r0);
0x00055ab2 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x00055ab4 adds r2, r5, 1 | r2 = r5 + 1;
0x00055ab6 cmp r8, r2 |
| if (r8 <= r2) {
0x00055ab8 blo 0x55b56 | goto label_41;
| }
0x00055aba adds r5, 0x22 | r5 += 0x22;
0x00055abc b 0x55ac0 |
| while (r2 != 0) {
0x00055abe ldr r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x00055ac0 lsrs r3, r5, 0xc | r3 = r5 >> 0xc;
0x00055ac2 mov r0, r4 | r0 = r4;
0x00055ac4 iteet eq |
| if (r3 != r5) {
0x00055ac6 ldreq r3, [r1] | r3 = *(r1);
| }
| if (r3 != r5) {
0x00055ac8 ubfxne r2, r5, 0, 0xc | __asm ("ubfxne r2, r5, 0, 0xc");
| }
| if (r3 != r5) {
0x00055acc ldreq r3, [r1, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r1 + offset_0));
| }
| if (r3 == r5) {
0x00055ad0 ldr.w r1, [r3, r5, lsl 2] | offset_1 = r5 << 2;
| r1 = *((r3 + offset_1));
| }
0x00055ad4 it ne |
| if (r3 == r5) {
0x00055ad6 ldrne r1, [r3, r2, lsl 2] | offset_2 = r2 << 2;
| r1 = *((r3 + offset_2));
| }
0x00055ada bl 0x2646c | r0 = fcn_0002646c (r0, r1);
0x00055ade clz r7, r0 | r7 &= r0;
0x00055ae2 sub.w r3, r5, 0x20 | r3 = r5 - 0x20;
0x00055ae6 lsrs r7, r7, 5 | r7 >>= 5;
0x00055ae8 mov fp, r0 |
0x00055aea adds r5, 1 | r5++;
0x00055aec cmp r3, r8 |
0x00055aee ite hi |
| if (r3 <= r8) {
0x00055af0 movhi r2, 0 | r2 = 0;
| }
| if (r3 > r8) {
0x00055af2 andls r2, r7, 1 | r2 = r7 & 1;
| }
0x00055af6 cmp r2, 0 |
0x00055af8 bne 0x55abe |
| }
0x00055afa ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
| label_19:
0x00055afc cmp r5, r8 |
| if (r5 == r8) {
0x00055afe beq.w 0x558da | goto label_12;
| }
0x00055b02 mov r0, r6 | r0 = r6;
0x00055b04 bl 0x1cd9c | fcn_0001cd9c (r0);
0x00055b08 b 0x558da | goto label_12;
| label_31:
0x00055b0a ldr.w r3, [r4, 0xa8] | r3 = *((r4 + 0xa8));
0x00055b0e ldr.w r2, [r4, 0xac] | r2 = *((r4 + 0xac));
0x00055b12 adds r3, 4 | r3 += 4;
0x00055b14 adc r6, r2, 0 | __asm ("adc r6, r2, 0");
0x00055b18 umull r2, r3, r3, r1 | r2:r3 = r3 * r1;
0x00055b1c mla r3, r1, r6, r3 | __asm ("mla r3, r1, r6, r3");
0x00055b20 ldrd r7, r6, [r0, 0x10] | __asm ("ldrd r7, r6, [r0, 0x10]");
0x00055b24 cmp r2, r7 |
0x00055b26 sbcs.w r6, r3, r6 | __asm ("sbcs.w r6, r3, r6");
| if (r2 >= r7) {
0x00055b2a bge.w 0x558c0 | goto label_13;
| }
0x00055b2e bl 0xfb8c | fcn_0000fb8c (r0, r1, r2);
0x00055b32 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00055b34 b 0x558c0 | goto label_13;
| label_33:
0x00055b36 mov fp, r5 |
0x00055b38 cmp r6, 0 |
| if (r6 != 0) {
0x00055b3a bne.w 0x55970 | goto label_14;
| }
0x00055b3e b 0x55996 | goto label_15;
| label_40:
0x00055b40 mov fp, r0 |
0x00055b42 b 0x559ac | goto label_16;
| label_39:
0x00055b44 add.w r3, r5, r5, lsl 1 | r3 = r5 + (r5 << 1);
0x00055b48 ldr r2, [r4, 0x64] | r2 = *((r4 + 0x64));
0x00055b4a lsls r3, r3, 4 | r3 <<= 4;
0x00055b4c subs r3, 0x30 | r3 -= 0x30;
0x00055b4e adds r5, r2, r3 | r5 = r2 + r3;
| if (r5 == r2) {
0x00055b50 beq.w 0x55a10 | goto label_17;
| }
0x00055b54 b 0x557ac | goto label_18;
| label_41:
0x00055b56 movs r7, 1 | r7 = 1;
0x00055b58 mov.w fp, 0 |
0x00055b5c b 0x55afc | goto label_19;
| label_20:
0x00055b5e blx 0x883c | fcn_0000883c ();
0x00055b62 nop |
0x00055b64 adds r5, 0x9e | r5 += 0x9e;
0x00055b66 movs r7, r0 | r7 = r0;
0x00055b68 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00055b6a movs r0, r0 |
0x00055b6c adds r5, 0x82 | r5 += 0x82;
0x00055b6e movs r7, r0 | r7 = r0;
0x00055b70 adds r0, r0, 4 | r0 += 4;
0x00055b72 movs r7, r0 | r7 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x55b74 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00055b74 () | void fcn_00055b74 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h_2;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
0x00055b74 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00055b78 sub sp, 0x5c |
0x00055b7a str r1, [sp, 0xc] | var_ch = r1;
0x00055b7c movs r4, 1 | r4 = 1;
0x00055b7e movs r2, 0 | r2 = 0;
0x00055b80 mov r5, r0 | r5 = r0;
0x00055b82 ldr.w r1, [pc, 0x4b8] | r1 = *(0x0005603c);
0x00055b86 strd r2, r4, [sp, 0x30] | __asm ("strd r2, r4, [sp, 0x30]");
0x00055b8a ldr.w r2, [pc, 0x4b4] |
0x00055b8e add r1, pc | r1 += pc;
0x00055b90 ldr.w r3, [r5, 0xa8] | r3 = *((r5 + 0xa8));
0x00055b94 ldr r0, [r0, 0x44] | r0 = *(var_0hx44);
0x00055b96 ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x00055b98 add r1, sp, 0x40 | r1 += var_40h;
0x00055b9a ldr r4, [r5] | r4 = *(r5);
0x00055b9c ldr r2, [r2] | r2 = *(0x56042);
0x00055b9e str r2, [sp, 0x54] | var_54h = r2;
0x00055ba0 mov.w r2, 0 | r2 = 0;
0x00055ba4 str r3, [sp, 0x38] | var_38h = r3;
0x00055ba6 ldr r3, [r0] | r3 = *(r0);
0x00055ba8 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00055baa blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 == 0) {
0x00055bac cbz r0, 0x55bdc | goto label_11;
| }
0x00055bae ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00055bb0 mov r6, r0 | r6 = r0;
0x00055bb2 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
| do {
| label_1:
0x00055bb4 mov r0, r5 | r0 = r5;
0x00055bb6 bl 0x145fc | fcn_000145fc (r0);
0x00055bba ldr.w r2, [pc, 0x488] | r2 = *(0x00056044);
0x00055bbe ldr.w r3, [pc, 0x480] | r3 = *(0x56042);
0x00055bc2 add r2, pc | r2 += pc;
0x00055bc4 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00055bc6 ldr r2, [r3] | r2 = *(0x56042);
0x00055bc8 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00055bca eors r2, r3 | r2 ^= r3;
0x00055bcc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00055bd0 bne.w 0x56008 | goto label_12;
| }
0x00055bd4 mov r0, r6 | r0 = r6;
0x00055bd6 add sp, 0x5c |
0x00055bd8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x00055bdc ldr r3, [r5] | r3 = *(r5);
0x00055bde ldr.w r7, [r5, 0xe0] | r7 = *((r5 + 0xe0));
0x00055be2 ldr r0, [r5, 0x44] | r0 = *((r5 + 0x44));
0x00055be4 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00055be6 mov r1, r7 | r1 = r7;
0x00055be8 adds r2, 1 | r2++;
0x00055bea bl 0x1da34 | r0 = fcn_0001da34 (r0, r1, r2);
0x00055bee mov r6, r0 | r6 = r0;
0x00055bf0 cmp r0, 0 |
| if (r0 != 0) {
0x00055bf2 bne.w 0x55fa2 | goto label_13;
| }
0x00055bf6 ldrb r3, [r7] | r3 = *(r7);
| if (r3 == 0) {
0x00055bf8 cbz r3, 0x55c10 | goto label_14;
| }
0x00055bfa mov r1, r7 | r1 = r7;
0x00055bfc mov r0, r4 | r0 = r4;
0x00055bfe ldr r7, [r4, 0x20] | r7 = *((r4 + 0x20));
0x00055c00 add r3, sp, 0x34 | r3 += var_34h;
0x00055c02 mov r2, r6 | r2 = r6;
0x00055c04 blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 == 0) {
0x00055c06 cbz r0, 0x55c10 | goto label_14;
| }
0x00055c08 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00055c0a mov r6, r0 | r6 = r0;
0x00055c0c strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x00055c0e b 0x55bb4 |
| } while (1);
| label_14:
0x00055c10 ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x00055c14 cmp.w r8, 0 |
| if (r8 == 0) {
0x00055c18 beq 0x55d00 | goto label_15;
| }
0x00055c1a add r3, sp, 0x30 | r3 += var_30h;
0x00055c1c ldr r4, [sp, 0xc] | r4 = var_ch;
0x00055c1e str r3, [sp, 0x1c] | var_1ch = r3;
0x00055c20 add r3, sp, 0x2c | r3 += var_2ch;
0x00055c22 str r3, [sp, 0x18] | var_18h = r3;
0x00055c24 add.w sl, r5, 0x50 | sl = r5 + 0x50;
0x00055c28 ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [var_40h]");
0x00055c2c mov.w r8, 0 | r8 = 0;
0x00055c30 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00055c34 mov fp, sl |
0x00055c36 and sb, r4, 1 | sb = r4 & 1;
0x00055c3a str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_20h]");
0x00055c3e vstr d16, [r5, 0x50] | __asm ("vstr d16, [r5, 0x50]");
| label_0:
0x00055c42 movs r7, 1 | r7 = 1;
| label_2:
0x00055c44 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00055c46 mov r0, r5 | r0 = r5;
0x00055c48 str r1, [sp, 4] | var_4h = r1;
0x00055c4a ldr r1, [sp, 0x18] | r1 = var_18h;
0x00055c4c str r1, [sp] | *(sp) = r1;
0x00055c4e ldr r1, [sp, 0xc] | r1 = var_ch;
0x00055c50 bl 0x1e5c8 | r0 = fcn_0001e5c8 (r0, r1, r2, r3, r4, r5);
0x00055c54 mov sl, r0 | sl = r0;
0x00055c56 cmp r0, 0 |
| if (r0 != 0) {
0x00055c58 bne.w 0x55fa8 | goto label_16;
| }
0x00055c5c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00055c5e ldr.w sb, [r5, 0x9c] | sb = *((r5 + 0x9c));
0x00055c62 adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 == r0) {
0x00055c64 bne 0x55c88 |
0x00055c66 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00055c68 subs.w r0, r3, sb | r0 = r3 - sb;
0x00055c6c ldr r3, [sp, 0x44] | r3 = var_44h;
0x00055c6e sbc r1, r3, 0 | __asm ("sbc r1, r3, 0");
0x00055c72 ldr.w r3, [r5, 0xa8] | r3 = *((r5 + 0xa8));
0x00055c76 adds.w r2, r3, 8 | r2 = r3 + 8;
0x00055c7a ldr.w r3, [r5, 0xac] | r3 = *((r5 + 0xac));
0x00055c7e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00055c82 bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x00055c86 str r0, [sp, 0x2c] | var_2ch = r0;
| }
0x00055c88 ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x00055c8a str r3, [sp, 0x10] | var_10h = r3;
0x00055c8c ldr r3, [r5, 0x54] | r3 = *((r5 + 0x54));
0x00055c8e str r3, [sp, 0x14] | var_14h = r3;
0x00055c90 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00055c92 orrs r0, r3 | r0 |= r3;
| if (r0 == r3) {
0x00055c94 beq.w 0x55f38 | goto label_17;
| }
| label_4:
0x00055c98 ldrd r3, r2, [sp, 0x10] | __asm ("ldrd r3, r2, [var_10h]");
0x00055c9c cmp sl, r2 |
0x00055c9e it eq |
| if (sl == r2) {
0x00055ca0 cmpeq sb, r3 | __asm ("cmpeq sb, r3");
| }
| if (sl == r2) {
0x00055ca2 beq.w 0x55f5c | goto label_18;
| }
0x00055ca4 strh r3, [r3, 0xa] | *((r3 + 0xa)) = r3;
| label_3:
0x00055ca6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00055ca8 cmp r3, 0 |
| if (r3 == 0) {
0x00055caa beq.w 0x56004 | goto label_19;
| }
0x00055cae add.w sb, r6, r3 | sb = r6 + r3;
| if (r4 == 0) {
0x00055cb2 cbz r4, 0x55cda | goto label_20;
| }
0x00055cb4 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x00055cb6 ldr r3, [r5, 0x60] | r3 = *((r5 + 0x60));
0x00055cb8 adds r2, 1 | r2++;
0x00055cba str r2, [r5, 0x6c] | *((r5 + 0x6c)) = r2;
| if (r3 == 0) {
0x00055cbc cbz r3, 0x55cc6 | goto label_21;
| }
| do {
0x00055cbe str r7, [r3, 0x10] | *((r3 + 0x10)) = r7;
0x00055cc0 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x00055cc2 cmp r3, 0 |
0x00055cc4 bne 0x55cbe |
| } while (r3 != 0);
| label_21:
0x00055cc6 ldr.w r0, [r5, 0xe4] | r0 = *((r5 + 0xe4));
0x00055cca movs r1, 0 | r1 = 0;
0x00055ccc bl 0x16704 | fcn_00016704 (r0, r1);
0x00055cd0 b 0x55cda |
| while (r0 == 0) {
0x00055cd2 adds r6, 1 | r6++;
0x00055cd4 cmp r6, sb |
| if (r6 == sb) {
0x00055cd6 beq.w 0x55f2e | goto label_22;
| }
| label_20:
0x00055cda movs r3, 1 | r3 = 1;
0x00055cdc movs r2, 0 | r2 = 0;
0x00055cde mov r1, fp | r1 = fp;
0x00055ce0 mov r0, r5 | r0 = r5;
0x00055ce2 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00055ce6 bl 0x553ec | r0 = fcn_000553ec (r0, r1, r2, r3, r4);
0x00055cea cmp r0, 0 |
0x00055cec beq 0x55cd2 |
| }
0x00055cee cmp r0, 0x65 |
| if (r0 != 0x65) {
0x00055cf0 bne.w 0x55fda | goto label_23;
| }
0x00055cf4 ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [var_40h]");
0x00055cf8 movs r4, 0 | r4 = 0;
0x00055cfa strd r2, r3, [r5, 0x50] | __asm ("strd r2, r3, [r5, 0x50]");
0x00055cfe b 0x55c42 | goto label_0;
| label_15:
0x00055d00 str.w r8, [sp, 0xc] | __asm ("str.w r8, [var_ch]");
| label_8:
0x00055d04 mov.w r2, -1 | r2 = -1;
0x00055d08 add r1, sp, 0x38 | r1 += var_38h;
0x00055d0a mov r0, r5 | r0 = r5;
0x00055d0c bl 0x1b2b0 | fcn_0001b2b0 (r0, r1, r2);
0x00055d10 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00055d12 mov r6, r0 | r6 = r0;
0x00055d14 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x00055d16 cmp r0, 0 |
| if (r0 != 0) {
0x00055d18 bne.w 0x55f12 | goto label_5;
| }
0x00055d1c ldr r3, [r5] | r3 = *(r5);
0x00055d1e ldr.w r4, [r5, 0xe0] | r4 = *((r5 + 0xe0));
0x00055d22 ldr r0, [r5, 0x44] | r0 = *((r5 + 0x44));
0x00055d24 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00055d26 add.w sl, r4, 4 | sl = r4 + 4;
0x00055d2a mov r1, sl | r1 = sl;
0x00055d2c adds r2, 1 | r2++;
0x00055d2e bl 0x1da34 | r0 = fcn_0001da34 (r0, r1, r2);
0x00055d32 mov r6, r0 | r6 = r0;
0x00055d34 cmp r0, 0 |
| if (r0 != 0) {
0x00055d36 bne.w 0x55f12 | goto label_5;
| }
0x00055d3a ldrb r3, [r5, 0x11] | r3 = *((r5 + 0x11));
0x00055d3c subs r3, 1 | r3--;
0x00055d3e cmp r3, 2 |
| if (r3 > 2) {
0x00055d40 bhi.w 0x55fca | goto label_24;
| }
| label_6:
0x00055d44 ldrb r1, [r4, 4] | r1 = *((r4 + 4));
0x00055d46 movs r2, 0 | r2 = 0;
0x00055d48 mov r0, r5 | r0 = r5;
0x00055d4a subs r1, 0 |
0x00055d4c it ne |
| if (r1 == 0) {
0x00055d4e movne r1, 1 | r1 = 1;
| }
0x00055d50 bl 0x1df24 | r0 = fcn_0001df24 (r0, r1, r2, r3, r4, r5);
0x00055d54 mov r6, r0 | r6 = r0;
0x00055d56 cmp r0, 0 |
| if (r0 != 0) {
0x00055d58 bne.w 0x55f12 | goto label_5;
| }
0x00055d5c ldrb r3, [r4, 4] | r3 = *((r4 + 4));
0x00055d5e cmp r3, 0 |
| if (r3 == 0) {
0x00055d60 beq.w 0x55f12 | goto label_5;
| }
0x00055d64 ldr r6, [sp, 0x34] | r6 = var_34h;
0x00055d66 cmp r6, 0 |
| if (r6 == 0) {
0x00055d68 beq.w 0x55f12 | goto label_5;
| }
0x00055d6c str r0, [r4] | *(r4) = r0;
0x00055d6e mov r7, r0 | r7 = r0;
0x00055d70 ldr.w sb, [r5] | sb = *(r5);
0x00055d74 ldr.w r6, [sb, 4] | r6 = *((sb + 4));
0x00055d78 lsls r6, r6, 1 | r6 <<= 1;
0x00055d7a asrs r1, r6, 0x1f | r1 = r6 >> 0x1f;
0x00055d7c mov r0, r6 | r0 = r6;
0x00055d7e bl 0x13558 | r0 = fcn_00013558 (r0);
0x00055d82 mov r4, r0 | r4 = r0;
0x00055d84 cmp r0, 0 |
| if (r0 == 0) {
0x00055d86 beq.w 0x56024 | goto label_25;
| }
0x00055d8a mov r2, r6 | r2 = r6;
0x00055d8c mov r1, r7 | r1 = r7;
0x00055d8e blx 0x839c | fcn_0000839c ();
0x00055d92 str r7, [sp] | *(sp) = r7;
0x00055d94 movw r3, 0x4001 | r3 = 0x4001;
0x00055d98 ldr.w r6, [sb, 0x18] | r6 = *((sb + 0x18));
0x00055d9c mov r2, r4 | r2 = r4;
0x00055d9e mov r1, sl | r1 = sl;
0x00055da0 mov r0, sb | r0 = sb;
0x00055da2 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00055da4 ldr.w fp, [sb, 4] | fp = *((sb + 4));
0x00055da8 mov r6, r0 | r6 = r0;
0x00055daa cmp r0, 0 |
| if (r0 != 0) {
0x00055dac bne.w 0x56034 | goto label_26;
| }
0x00055db0 ldr r3, [r4] | r3 = *(r4);
0x00055db2 add r1, sp, 0x48 | r1 += var_48h;
0x00055db4 mov r0, r4 | r0 = r4;
0x00055db6 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00055db8 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00055dba mov r6, r0 | r6 = r0;
0x00055dbc cmp r0, 0 |
| if (r0 != 0) {
0x00055dbe bne.w 0x56034 | goto label_26;
| }
0x00055dc2 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x00055dc6 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00055dc8 adds r1, r3, 1 | r1 = r3 + 1;
0x00055dca ldr r3, [sp, 0x48] | r3 = var_48h;
0x00055dcc str r1, [sp, 0x20] | var_20h = r1;
0x00055dce adds r3, 4 | r3 += 4;
0x00055dd0 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00055dd4 adds r3, r3, r1 | r3 += r1;
0x00055dd6 adc.w r1, r2, r1, asr 31 | __asm ("adc.w r1, r2, r1, asr 31");
0x00055dda adds r0, r3, 2 | r0 = r3 + 2;
0x00055ddc adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00055de0 bl 0x13558 | r0 = fcn_00013558 (r0);
0x00055de4 mov r7, r0 | r7 = r0;
0x00055de6 cmp r0, 0 |
| if (r0 == 0) {
0x00055de8 beq.w 0x5602c | goto label_27;
| }
0x00055dec mov r1, r0 | r1 = r0;
0x00055dee vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00055df2 str r6, [r1], 4 | *(r1) = r6;
| r1 += 4;
0x00055df6 mov r0, r4 | r0 = r4;
0x00055df8 ldr r3, [r4] | r3 = *(r4);
0x00055dfa ldr r2, [sp, 0x48] | r2 = var_48h;
0x00055dfc vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00055e00 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00055e02 str r1, [sp, 0x14] | var_14h = r1;
0x00055e04 str r2, [sp, 0x10] | var_10h = r2;
0x00055e06 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00055e08 mov r6, r0 | r6 = r0;
0x00055e0a cmp r0, 0 |
| if (r0 != 0) {
0x00055e0c bne.w 0x56034 | goto label_26;
| }
0x00055e10 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00055e12 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00055e14 strb r0, [r1, r3] | *((r1 + r3)) = r0;
0x00055e16 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00055e18 add r3, r1 | r3 += r1;
0x00055e1a strb r0, [r3, 1] | *((r3 + 1)) = r0;
0x00055e1c ldrd r0, r3, [sp, 0x48] | __asm ("ldrd r0, r3, [var_48h]");
0x00055e20 cmp r0, 1 |
0x00055e22 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r0 < 1) {
0x00055e26 blt 0x55ed6 | goto label_28;
| }
0x00055e28 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00055e2a add.w r3, r4, fp | r3 = r4 + fp;
0x00055e2e strd r8, r7, [sp, 0x14] | __asm ("strd r8, r7, [sp, 0x14]");
0x00055e32 mov fp, r1 |
0x00055e34 str r5, [sp, 0x1c] | var_1ch = r5;
0x00055e36 mov r7, r1 | r7 = r1;
0x00055e38 adds r2, 2 | r2 += 2;
0x00055e3a mov r8, r4 | r8 = r4;
0x00055e3c adds r2, r1, r2 | r2 = r1 + r2;
0x00055e3e mov r5, r3 | r5 = r3;
0x00055e40 str r2, [sp, 0x10] | var_10h = r2;
0x00055e42 add r2, sp, 0x3c | r2 += var_3ch;
0x00055e44 str r2, [sp, 0x24] | var_24h_2 = r2;
| do {
0x00055e46 ldr.w r4, [sb, 0x20] | r4 = *((sb + 0x20));
0x00055e4a movs r2, 0 | r2 = 0;
0x00055e4c ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x00055e4e mov r1, fp | r1 = fp;
0x00055e50 mov r0, sb | r0 = sb;
0x00055e52 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00055e54 mov r4, r0 | r4 = r0;
0x00055e56 cmp r0, 0 |
| if (r0 != 0) {
0x00055e58 bne.w 0x5600c | goto label_29;
| }
0x00055e5c ldr r3, [sp, 0x3c] | r3 = var_3ch;
| if (r3 != 0) {
0x00055e5e cbz r3, 0x55eae |
0x00055e60 str r0, [sp] | *(sp) = r0;
0x00055e62 movw r3, 0x4001 | r3 = 0x4001;
0x00055e66 ldr.w r4, [sb, 0x18] | r4 = *((sb + 0x18));
0x00055e6a mov r2, r5 | r2 = r5;
0x00055e6c mov r1, fp | r1 = fp;
0x00055e6e mov r0, sb | r0 = sb;
0x00055e70 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00055e72 mov r4, r0 | r4 = r0;
0x00055e74 cmp r0, 0 |
| if (r0 != 0) {
0x00055e76 bne.w 0x5600c | goto label_29;
| }
0x00055e7a ldr r2, [sp, 0x20] | r2 = var_20h;
0x00055e7c mov r0, r5 | r0 = r5;
0x00055e7e ldr r1, [sp, 0x10] | r1 = var_10h;
0x00055e80 bl 0x1da34 | fcn_0001da34 (r0, r1, r2);
0x00055e84 ldr r3, [r5] | r3 = *(r5);
0x00055e86 mov r4, r0 | r4 = r0;
| if (r3 != 0) {
0x00055e88 cbz r3, 0x55e94 |
0x00055e8a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00055e8c mov r0, r5 | r0 = r5;
0x00055e8e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00055e90 movs r3, 0 | r3 = 0;
0x00055e92 str r3, [r5] | *(r5) = r3;
| }
0x00055e94 cmp r4, 0 |
| if (r4 != 0) {
0x00055e96 bne.w 0x5600c | goto label_29;
| }
0x00055e9a ldr r0, [sp, 0x10] | r0 = var_10h;
0x00055e9c ldrb r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x00055e9e cbz r3, 0x55eae | goto label_30;
| }
0x00055ea0 mov r1, sl | r1 = sl;
0x00055ea2 blx 0x8ad0 | r0 = fcn_00008ad0 ();
0x00055ea6 mov r4, r0 | r4 = r0;
0x00055ea8 cmp r0, 0 |
| if (r0 == 0) {
0x00055eaa beq.w 0x5600c | goto label_29;
| }
| }
| label_30:
0x00055eae mov r0, fp | r0 = fp;
0x00055eb0 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00055eb4 bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x00055eb8 ldrd r0, r1, [sp, 0x48] | __asm ("ldrd r0, r1, [var_48h]");
0x00055ebc adds r3, 1 | r3++;
0x00055ebe add fp, r3 |
0x00055ec0 sub.w r2, fp, r7 | r2 = fp - r7;
0x00055ec4 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00055ec6 cmp r2, r0 |
0x00055ec8 sbcs r3, r1 | __asm ("sbcs r3, r1");
0x00055eca blt 0x55e46 |
| } while (r2 < r0);
0x00055ecc mov r4, r8 | r4 = r8;
0x00055ece ldr r7, [sp, 0x18] | r7 = var_18h;
0x00055ed0 ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x00055ed4 ldr r5, [sp, 0x1c] | r5 = var_1ch;
| label_28:
0x00055ed6 ldr r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x00055ed8 cbz r3, 0x55ee4 |
0x00055eda ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00055edc mov r0, r4 | r0 = r4;
0x00055ede blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00055ee0 movs r3, 0 | r3 = 0;
0x00055ee2 str r3, [r4] | *(r4) = r3;
| }
0x00055ee4 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x00055ee8 cmp r3, 0 |
| if (r3 == 0) {
0x00055eea beq.w 0x56034 | goto label_26;
| }
0x00055eee mov r1, sl | r1 = sl;
0x00055ef0 mov r0, sb | r0 = sb;
0x00055ef2 movs r2, 0 | r2 = 0;
0x00055ef4 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00055ef6 mov r6, r0 | r6 = r0;
0x00055ef8 mov r0, r7 | r0 = r7;
0x00055efa blx 0x8404 | fcn_00008404 ();
| label_10:
0x00055efe ldr r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x00055f00 cbz r3, 0x55f0c |
0x00055f02 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00055f04 mov r0, r4 | r0 = r4;
0x00055f06 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00055f08 movs r3, 0 | r3 = 0;
0x00055f0a str r3, [r4] | *(r4) = r3;
| }
0x00055f0c mov r0, r4 | r0 = r4;
0x00055f0e blx 0x8404 | fcn_00008404 ();
| label_5:
0x00055f12 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00055f14 cmp r3, 0 |
| if (r3 == 0) {
0x00055f16 beq.w 0x55bb4 | goto label_1;
| }
0x00055f1a ldr r1, [pc, 0x12c] |
0x00055f1c mov r2, r8 | r2 = r8;
0x00055f1e ldr.w r3, [r5, 0xbc] | r3 = *((r5 + 0xbc));
0x00055f22 movw r0, 0x21b | r0 = 0x21b;
0x00055f26 add r1, pc | r1 = 0xabf74;
0x00055f28 blx 0x8b60 | fcn_00008b60 ();
0x00055f2c b 0x55bb4 | goto label_1;
| label_22:
0x00055f2e mov r4, r0 | r4 = r0;
| label_9:
0x00055f30 ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [var_40h]");
0x00055f34 mov r6, sb | r6 = sb;
0x00055f36 b 0x55c44 | goto label_2;
| label_17:
0x00055f38 ldr r3, [r5, 0x58] | r3 = *((r5 + 0x58));
0x00055f3a ldr r2, [r5, 0x5c] | r2 = *((r5 + 0x5c));
0x00055f3c ldrd r1, r0, [sp, 0x10] | __asm ("ldrd r1, r0, [var_10h]");
0x00055f40 adds.w r3, sb, r3 | r3 = sb + r3;
0x00055f44 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00055f48 cmp r2, r0 |
0x00055f4a it eq |
| if (r2 == r0) {
0x00055f4c cmpeq r3, r1 | __asm ("cmpeq r3, r1");
| }
| if (r2 != r0) {
0x00055f4e beq 0x55f7e |
0x00055f50 ldrd r3, r2, [sp, 0x10] | __asm ("ldrd r3, r2, [var_10h]");
0x00055f54 cmp sl, r2 |
0x00055f56 it eq |
| if (sl == r2) {
0x00055f58 cmpeq sb, r3 | __asm ("cmpeq sb, r3");
| }
| if (sl != r2) {
0x00055f5a bne 0x56004 | goto label_19;
| }
| label_18:
0x00055f5c ldr.w sb, [sp, 0x30] | sb = var_30h;
0x00055f60 mov r0, r5 | r0 = r5;
0x00055f62 mov r1, sb | r1 = sb;
0x00055f64 bl 0xd144 | r0 = fcn_0000d144 (r0, r1);
0x00055f68 cmp r0, 0 |
| if (r0 != 0) {
0x00055f6a bne 0x55ffc | goto label_31;
| }
0x00055f6c ldr.w r3, [r5, 0xa0] | r3 = *((r5 + 0xa0));
0x00055f70 str.w sb, [r5, 0x1c] | __asm ("str.w sb, [r5, 0x1c]");
0x00055f74 cmp sb, r3 |
0x00055f76 it hi |
| if (sb <= r3) {
0x00055f78 strhi sb, [r5, 0xa0] | *((r5 + 0xa0)) = sb;
| }
0x00055f7c b 0x55ca6 | goto label_3;
| }
0x00055f7e ldr r3, [sp, 0x40] | r3 = var_40h;
0x00055f80 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00055f82 subs r0, r3, r1 | r0 = r3 - r1;
0x00055f84 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00055f86 sbc.w r1, r3, r2 | __asm ("sbc.w r1, r3, r2");
0x00055f8a ldr.w r3, [r5, 0xa8] | r3 = *((r5 + 0xa8));
0x00055f8e adds.w r2, r3, 8 | r2 = r3 + 8;
0x00055f92 ldr.w r3, [r5, 0xac] | r3 = *((r5 + 0xac));
0x00055f94 adds r0, 0xac | r0 += 0xac;
0x00055f96 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00055f9a bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x00055f9e str r0, [sp, 0x2c] | var_2ch = r0;
0x00055fa0 b 0x55c98 | goto label_4;
| label_13:
0x00055fa2 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00055fa4 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x00055fa6 b 0x55bb4 | goto label_1;
| label_16:
0x00055fa8 cmp r0, 0x65 |
0x00055faa ldr.w sb, [sp, 0x20] | sb = var_20h;
0x00055fae mov fp, r0 |
| if (r0 == 0x65) {
0x00055fb0 beq 0x55fea | goto label_32;
| }
| label_7:
0x00055fb2 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00055fb4 mov r2, sb | r2 = sb;
0x00055fb6 cmp r6, 0 |
0x00055fb8 ite eq |
| if (r6 != 0) {
0x00055fba moveq r2, 0 | r2 = 0;
| }
| if (r6 == 0) {
0x00055fbc andne r2, r2, 1 | r2 &= 1;
| }
0x00055fc0 mov r8, r6 | r8 = r6;
0x00055fc2 str r2, [sp, 0xc] | var_ch = r2;
0x00055fc4 mov r6, fp | r6 = fp;
0x00055fc6 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x00055fc8 b 0x55f12 | goto label_5;
| label_24:
0x00055fca mov r1, r0 | r1 = r0;
0x00055fcc mov r0, r5 | r0 = r5;
0x00055fce bl 0x15da8 | r0 = fcn_00015da8 (r0, r1);
0x00055fd2 mov r6, r0 | r6 = r0;
0x00055fd4 cmp r0, 0 |
| if (r0 != 0) {
0x00055fd6 bne 0x55f12 | goto label_5;
| }
0x00055fd8 b 0x55d44 | goto label_6;
| label_23:
0x00055fda movw r3, 0x20a | r3 = 0x20a;
0x00055fde ldr.w sb, [sp, 0x20] | sb = var_20h;
0x00055fe2 cmp r0, r3 |
0x00055fe4 it ne |
| if (r0 != r3) {
0x00055fe6 movne fp, r0 | goto label_33;
| }
| if (r0 != r3) {
| label_33:
0x00055fe8 bne 0x55fb2 | goto label_7;
| }
| label_32:
0x00055fea mov r3, sb | r3 = sb;
0x00055fec mov r8, r6 | r8 = r6;
0x00055fee cmp r6, 0 |
0x00055ff0 ite eq |
| if (r6 != 0) {
0x00055ff2 moveq r3, 0 | r3 = 0;
| }
| if (r6 == 0) {
0x00055ff4 andne r3, r3, 1 | r3 &= 1;
| }
0x00055ff8 str r3, [sp, 0xc] | var_ch = r3;
0x00055ffa b 0x55d04 | goto label_8;
| label_31:
0x00055ffc ldr.w sb, [sp, 0x20] | sb = var_20h;
0x00056000 mov fp, r0 |
0x00056002 b 0x55fb2 | goto label_7;
| label_19:
0x00056004 mov sb, r6 | sb = r6;
0x00056006 b 0x55f30 | goto label_9;
| label_12:
0x00056008 blx 0x883c | fcn_0000883c ();
| label_29:
0x0005600c ldr r7, [sp, 0x18] | r7 = var_18h;
0x0005600e str r4, [sp, 0x10] | var_10h = r4;
0x00056010 mov r4, r8 | r4 = r8;
0x00056012 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x00056014 mov r0, r7 | r0 = r7;
0x00056016 ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x0005601a blx 0x8404 | fcn_00008404 ();
0x0005601e ldr r3, [sp, 0x10] | r3 = var_10h;
0x00056020 mov r6, r3 | r6 = r3;
0x00056022 b 0x55efe | goto label_10;
| label_25:
0x00056024 movs r6, 7 | r6 = 7;
0x00056026 blx 0x8404 | fcn_00008404 ();
0x0005602a b 0x55f12 | goto label_5;
| label_27:
0x0005602c movs r6, 7 | r6 = 7;
0x0005602e blx 0x8404 | fcn_00008404 ();
0x00056032 b 0x55efe | goto label_10;
| label_26:
0x00056034 mov r0, r7 | r0 = r7;
0x00056036 blx 0x8404 | fcn_00008404 ();
0x00056038 strd lr, r7, [r6, 0x180]! | __asm ("strd lr, r7, aav.0x000000ff!");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x56678 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00056678 () | void fcn_00056678 (int16_t arg_c8h, arithmetic arg_cch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_1h;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| arithmetic x;
| int16_t var_9ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00056678 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0005667c mov r8, r2 | r8 = r2;
0x0005667e sub sp, 0xa4 |
0x00056680 ldr.w r2, [pc, 0x5cc] | r2 = *(0x00056c50);
0x00056684 mov sb, r0 | sb = r0;
0x00056686 mov r6, r1 | r6 = r1;
0x00056688 str r3, [sp, 0x10] | var_10h = r3;
0x0005668a ldr.w r3, [pc, 0x5c8] |
0x0005668e add r2, pc | r2 += pc;
0x00056690 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00056692 ldr r3, [r3] | r3 = *(0x56c56);
0x00056694 str r3, [sp, 0x9c] | var_9ch = r3;
0x00056696 mov.w r3, 0 | r3 = 0;
| if (r1 != 0) {
0x0005669a cbz r1, 0x566b4 |
0x0005669c ldr.w r1, [pc, 0x5b8] | r1 = *(0x00056c58);
0x000566a0 mov r0, r6 | r0 = r6;
0x000566a2 add r1, pc | r1 += pc;
0x000566a4 blx 0x8ad0 | fcn_00008ad0 ();
0x000566a8 ldrb r3, [r6] | r3 = *(r6);
0x000566aa mov r5, r0 | r5 = r0;
| if (r3 != 0) {
0x000566ac cbnz r3, 0x566d6 | goto label_15;
| }
0x000566ae cmp r0, 0 |
| if (r0 == 0) {
0x000566b0 beq.w 0x567fe | goto label_16;
| }
| }
0x000566b4 ldrb.w r3, [r8, 0x56] | r3 = *((r8 + 0x56));
0x000566b8 cmp r3, 2 |
| if (r3 == 2) {
0x000566ba beq.w 0x567fe | goto label_16;
| }
0x000566be ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x000566c0 ands r3, r3, 0x80 | r3 &= 0x80;
0x000566c4 str r3, [sp, 0xc] | var_ch = r3;
| if (r3 != r3) {
0x000566c6 bne.w 0x567fe | goto label_16;
| }
0x000566ca ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x000566cc lsls r4, r3, 0x17 | r4 = r3 << 0x17;
| if (r4 >= r3) {
0x000566ce bpl.w 0x56a84 | goto label_17;
| }
0x000566d2 movs r5, 1 | r5 = 1;
0x000566d4 b 0x566f2 | goto label_18;
| label_15:
0x000566d6 cmp r0, 0 |
| if (r0 != 0) {
0x000566d8 bne.w 0x56802 | goto label_19;
| }
| label_0:
0x000566dc ldr r3, [sp, 0xc8] | r3 = *(arg_c8h);
0x000566de orr r3, r3, 2 | r3 |= 2;
0x000566e2 str r3, [sp, 0xc8] | *(arg_c8h) = r3;
0x000566e4 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x000566e6 tst.w r3, 0x100 |
0x000566ea mov.w r3, 1 | r3 = 1;
0x000566ee str r3, [sp, 0xc] | var_ch = r3;
| if ((r3 & 0x100) != 0) {
0x000566f0 beq 0x566fe |
| label_18:
0x000566f2 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x000566f4 bic r3, r3, 0x300 | r3 = BIT_MASK (r3, 0x300);
0x000566f8 orr r3, r3, 0x200 | r3 |= 0x200;
0x000566fc str r3, [sp, 0xcc] | *(arg_cch) = r3;
| }
0x000566fe movs r0, 0x30 | r0 = 0x30;
0x00056700 movs r1, 0 | r1 = 0;
0x00056702 bl 0x1cbb0 | fcn_0001cbb0 (r0);
0x00056704 invalid |
0x00056708 cmp r0, 0 |
| if (r0 == 0) {
0x0005670a beq.w 0x56bfc | goto label_20;
| }
0x0005670e movs r7, 0 | r7 = 0;
0x00056710 movs r3, 1 | r3 = 1;
0x00056712 str.w r8, [r0] | __asm ("str.w r8, [r0]");
0x00056716 str r0, [r0, 0x20] | *((r0 + 0x20)) = r0;
0x00056718 strb r7, [r0, 8] | *((r0 + 8)) = r7;
0x0005671a str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
0x0005671c cmp r5, 0 |
| if (r5 != 0) {
0x0005671e bne.w 0x56832 | goto label_21;
| }
0x00056722 ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x00056724 cbz r3, 0x5672e |
0x00056726 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x00056728 lsls r0, r3, 0x19 | r0 = r3 << 0x19;
| if (r0 >= r3) {
0x0005672a bpl.w 0x56a7c | goto label_22;
| }
| }
0x0005672e ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x00056730 ands r7, r3, 0x20000 | r7 = r3 & 0x20000;
| if (r7 == r3) {
0x00056734 beq 0x56832 | goto label_21;
| }
0x00056736 movs r5, 1 | r5 = 1;
| if (r6 != 0) {
0x00056738 cbz r6, 0x56746 |
| label_1:
0x0005673a mov r0, r6 | r0 = r6;
0x0005673c blx 0x85b4 | r0 = fcn_000085b4 ();
0x00056740 bic r5, r0, 0xc0000000 | r5 = BIT_MASK (r0, 0xc0000000);
0x00056744 adds r5, 1 | r5++;
| }
0x00056746 ldr.w r7, [sb, 8] | r7 = *((sb + 8));
0x0005674a adds r7, 1 | r7++;
0x0005674c cmp r7, r5 |
0x0005674e mov r0, r7 | r0 = r7;
0x00056750 it lt |
| if (r7 >= r5) {
0x00056752 movlt r0, r5 | r0 = r5;
| }
0x00056754 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x00056756 bl 0x13558 | fcn_00013558 (r0);
0x0005675a movs r3, 1 | r3 = 1;
0x0005675c mov sl, r0 | sl = r0;
0x0005675e strb r3, [r4, 9] | *((r4 + 9)) = r3;
0x00056760 cmp r0, 0 |
| if (r0 == 0) {
0x00056762 beq.w 0x56bf6 | goto label_23;
| }
0x00056766 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00056768 cmp r3, 0 |
| if (r3 != 0) {
0x0005676a bne.w 0x56aa6 | goto label_24;
| }
0x0005676e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00056770 mov r2, r7 | r2 = r7;
0x00056772 mov r1, r6 | r1 = r6;
0x00056774 strb r3, [r0] | *(r0) = r3;
0x00056776 mov r3, r0 | r3 = r0;
0x00056778 ldr.w r5, [sb, 0x24] | r5 = *((sb + 0x24));
0x0005677c mov r0, sb | r0 = sb;
0x0005677e blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00056780 bics r3, r0, 0x200 | __asm ("bics r3, r0, aav.0x000000ff");
0x00056784 mov fp, r0 |
| if (r3 != 0) {
0x00056786 bne.w 0x56d82 | goto label_25;
| }
| label_3:
0x0005678a ldr.w r3, [pc, 0x4d0] | r3 = *(0x00056c5c);
0x0005678e add r3, pc | r3 += pc;
0x00056790 ldrb r7, [r3, 4] | r7 = *((r3 + 4));
0x00056792 cmp r7, 0 |
| if (r7 == 0) {
0x00056794 beq.w 0x56efe | goto label_26;
| }
0x00056798 ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x0005679a movs r0, 4 | r0 = 4;
0x0005679c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0005679e str r0, [sp, 8] | var_8h = r0;
| label_7:
0x000567a0 ldr r0, [sp, 8] | r0 = var_8h;
0x000567a2 blx 0x8b50 | fcn_00008b50 ();
0x000567a6 ldr.w r3, [pc, 0x4b8] | r3 = *(0x00056c60);
0x000567aa add r3, pc | r3 += pc;
0x000567ac ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x000567ae mov fp, r2 |
| if (r2 != 0) {
0x000567b0 cbz r2, 0x567ba |
0x000567b2 ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x000567b4 movs r0, 2 | r0 = 2;
0x000567b6 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000567b8 mov fp, r0 |
| }
0x000567ba mov r0, fp | r0 = fp;
0x000567bc blx 0x8b50 | fcn_00008b50 ();
0x000567c0 ldr.w r3, [pc, 0x4a0] |
0x000567c4 add r3, pc | r3 = 0xad42c;
0x000567c6 ldr.w r5, [r3, 0x4b0] | r5 = *(0xad8dc);
| if (r5 == 0) {
0x000567ca cbz r5, 0x567f0 | goto label_27;
| }
0x000567cc ldr r7, [sp, 8] | r7 = var_8h;
0x000567ce str r6, [sp, 0x14] | var_14h = r6;
| do {
0x000567d0 ldr r6, [r5] | r6 = *(r5);
0x000567d2 mov r0, sl | r0 = sl;
0x000567d4 ldr.w r1, [r6, 0xb8] | r1 = *((r6 + 0xb8));
0x000567d8 blx 0x8ad0 | r0 = fcn_00008ad0 ();
| if (r0 == 0) {
0x000567dc cbnz r0, 0x567e6 |
0x000567de ldr r3, [r6] | r3 = *(r6);
0x000567e0 cmp sb, r3 |
| if (sb == r3) {
0x000567e2 beq.w 0x56c78 | goto label_28;
| }
| }
0x000567e6 ldr r5, [r5, 0x48] | r5 = *((r5 + 0x48));
0x000567e8 cmp r5, 0 |
0x000567ea bne 0x567d0 |
| } while (r5 != 0);
0x000567ec ldr r6, [sp, 0x14] | r6 = var_14h;
0x000567ee str r7, [sp, 8] | var_8h = r7;
| label_27:
0x000567f0 mov r0, fp | r0 = fp;
0x000567f2 blx 0x87c0 | fcn_000087c0 ();
0x000567f6 mov r0, sl | r0 = sl;
0x000567f8 blx 0x8404 | fcn_00008404 ();
0x000567fc b 0x56834 | goto label_2;
| label_16:
0x000567fe movs r5, 1 | r5 = 1;
0x00056800 b 0x566dc | goto label_0;
| label_19:
0x00056802 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x00056804 ands r3, r3, 0x80 | r3 &= 0x80;
0x00056808 str r3, [sp, 0xc] | var_ch = r3;
| if (r3 != r3) {
0x0005680a bne.w 0x56a80 | goto label_29;
| }
0x0005680e movs r0, 0x30 | r0 = 0x30;
0x00056810 movs r1, 0 | r1 = 0;
0x00056812 bl 0x1cbb0 | r0 = fcn_0001cbb0 (r0);
0x00056816 mov r4, r0 | r4 = r0;
0x00056818 cmp r0, 0 |
| if (r0 == 0) {
0x0005681a beq.w 0x56bfc | goto label_20;
| }
0x0005681e movs r3, 1 | r3 = 1;
0x00056820 ldr r7, [sp, 0xc] | r7 = var_ch;
0x00056822 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
0x00056824 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x00056826 strb r7, [r0, 8] | *((r0 + 8)) = r7;
0x00056828 str.w r8, [r0] | __asm ("str.w r8, [r0]");
0x0005682c lsls r3, r3, 0xe | r3 <<= 0xe;
0x0005682e str r0, [r0, 0x20] | *((r0 + 0x20)) = r0;
| if (r3 < r3) {
0x00056830 bmi 0x5673a | goto label_1;
| }
| label_21:
0x00056832 str r7, [sp, 8] | var_8h = r7;
| do {
| label_2:
0x00056834 movs r0, 0x5c | r0 = 0x5c;
0x00056836 movs r1, 0 | r1 = 0;
0x00056838 bl 0x1cbb0 | r0 = fcn_0001cbb0 (r0);
0x0005683c mov r5, r0 | r5 = r0;
0x0005683e cmp r0, 0 |
| if (r0 == 0) {
0x00056840 beq.w 0x56ace | goto label_30;
| }
0x00056844 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00056848 mov.w r2, 0x1000 | r2 = 0x1000;
0x0005684c str r2, [sp, 0x30] | var_30h = r2;
0x0005684e mov.w sl, 0 | sl = 0;
0x00056852 str.w sl, [r0] | __asm ("str.w sl, [r0]");
0x00056856 cmp r3, 0x40 |
0x00056858 mov r2, r3 | r2 = r3;
0x0005685a it lt |
| if (r3 >= 0x40) {
0x0005685c movlt r2, 0x40 | r2 = 0x40;
| }
0x0005685e adds r2, 7 | r2 += 7;
0x00056860 bic fp, r2, 7 | fp = BIT_MASK (r2, 7);
0x00056864 ldr r2, [sp, 0xc8] | r2 = *(arg_c8h);
0x00056866 ands r2, r2, 2 | r2 &= 2;
| if (r2 == r2) {
0x0005686a beq.w 0x56ab0 | goto label_31;
| }
0x0005686e cmp r6, 0 |
| if (r6 == 0) {
0x00056870 beq.w 0x56be0 | goto label_32;
| }
0x00056874 ldrb r2, [r6] | r2 = *(r6);
0x00056876 cmp r2, 0 |
| if (r2 != 0) {
0x00056878 bne.w 0x56fb2 | goto label_33;
| }
0x0005687c movs r1, 1 | r1 = 1;
0x0005687e str r2, [sp, 0x14] | var_14h = r2;
0x00056880 mov r0, r1 | r0 = r1;
0x00056882 strd r1, r6, [sp, 0x1c] | __asm ("strd r1, r6, [var_1ch]");
0x00056886 mov.w r1, 0x13a | r1 = 0x13a;
0x0005688a strd r0, r2, [sp, 0x28] | __asm ("strd r0, r2, [var_28h]");
0x0005688c lsls r2, r1, 8 | r2 = r1 << 8;
0x0005688e str r2, [sp, 0x18] | var_18h = r2;
| label_4:
0x00056890 str r2, [sp, 0x24] | var_24h = r2;
0x00056892 adds r3, 7 | r3 += 7;
0x00056894 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00056896 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0005689a add r1, r2 | r1 += r2;
0x0005689c add.w r0, r1, fp, lsl 1 | r0 = r1 + (fp << 1);
0x000568a0 movs r1, 0 | r1 = 0;
0x000568a2 add r0, r3 | r0 += r3;
0x000568a4 bl 0x1cbb0 | fcn_0001cbb0 (r0);
0x000568a8 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000568aa mov sl, r0 | sl = r0;
0x000568ac cmp r0, 0 |
| if (r0 == 0) {
0x000568ae beq.w 0x56fa2 | goto label_34;
| }
0x000568b2 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x000568b6 adds r1, r3, 7 | r1 = r3 + 7;
0x000568b8 add.w r3, r0, 0x120 | r3 = r0 + 0x120;
0x000568bc bic r1, r1, 7 | r1 = BIT_MASK (r1, 7);
0x000568c0 str r3, [r0, 0x40] | *((r0 + 0x40)) = r3;
0x000568c2 add r1, r3 | r1 += r3;
0x000568c4 adds r0, 0xf0 | r0 += 0xf0;
0x000568c6 str r1, [r0, -0xa8] | *((r0 - 0xa8)) = r1;
0x000568ca add r1, fp | r1 += fp;
0x000568cc add.w r3, r1, fp | r3 = r1 + fp;
0x000568d0 str r1, [r0, -0xac] | *((r0 - 0xac)) = r1;
0x000568d4 adds r3, 8 | r3 += 8;
0x000568d6 str.w r0, [sl, 0xe4] | __asm ("str.w r0, [sl, 0xe4]");
0x000568da str.w sl, [r1, fp] | __asm ("str.w sl, [r1, fp]");
0x000568de str.w r3, [sl, 0xb8] | __asm ("str.w r3, [sl, 0xb8]");
0x000568e2 cmp r2, 0 |
| if (r2 != 0) {
0x000568e4 bne.w 0x56f02 | goto label_35;
| }
0x000568e8 str.w r2, [sl, 0xbc] | __asm ("str.w r2, [sl, 0xbc]");
0x000568ec str.w r2, [sl, 0xec] | __asm ("str.w r2, [sl, 0xec]");
| label_8:
0x000568f0 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x000568f2 str.w sb, [sl] | __asm ("str.w sb, [sl]");
0x000568f6 str.w r3, [sl, 0x98] | __asm ("str.w r3, [sl, 0x98]");
0x000568fa ldr r3, [sp, 0x20] | r3 = var_20h;
0x000568fc cmp r3, 0 |
| if (r3 == 0) {
0x000568fe beq.w 0x56f76 | goto label_36;
| }
0x00056902 ldrb r3, [r3] | r3 = *(r3);
0x00056904 cmp r3, 0 |
| if (r3 != 0) {
0x00056906 bne.w 0x56e8a | goto label_37;
| }
0x0005690a ldr r2, [sp, 0xcc] | r2 = *(arg_cch);
0x0005690c str r3, [sp, 0x18] | var_18h = r3;
0x0005690e and r2, r2, 1 | r2 &= 1;
0x00056912 mov r7, r2 | r7 = r2;
| label_6:
0x00056914 movs r3, 1 | r3 = 1;
0x00056916 strb.w r3, [sl, 0xd] | *((sl + 0xd)) = r3;
0x0005691a str r3, [sp, 0x14] | var_14h = r3;
0x0005691c movw r3, 0x401 | r3 = 0x401;
0x00056920 strh.w r3, [sl, 0x11] | *((sl + 0x11)) = r3;
| label_10:
0x00056924 mov.w r2, -1 | r2 = -1;
0x00056928 add r1, sp, 0x30 | r1 += var_30h;
0x0005692a mov r0, sl | r0 = sl;
0x0005692c bl 0x1b2b0 | r0 = fcn_0001b2b0 (r0, r1, r2);
0x00056930 mov fp, r0 |
0x00056932 cmp r0, 0 |
| if (r0 != 0) {
0x00056934 bne.w 0x56c18 | goto label_5;
| }
0x00056938 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0005693a str r3, [sp, 0x1c] | var_1ch = r3;
0x0005693c ldr r3, [sp, 0x28] | r3 = var_28h;
0x0005693e eor sb, r3, 1 | sb = r3 ^ 1;
| if (r3 == 0) {
0x00056942 cbnz r3, 0x5694a |
0x00056944 ldr.w fp, [pc, 0x320] | fp = *(0x00056c68);
0x00056948 add fp, pc |
| }
0x0005694a ldr.w r3, [sl, 0xe4] | r3 = *((sl + 0xe4));
0x0005694e movs r2, 0x30 | r2 = 0x30;
0x00056950 movs r1, 0 | r1 = 0;
0x00056952 mov r0, r3 | r0 = r3;
0x00056954 blx 0x839c | fcn_0000839c ();
0x00056958 vldr d16, [pc, 0x2e4] | __asm ("vldr d16, aav.0x000000ff");
0x0005695c vldr d17, [pc, 0x2e8] | __asm ("vldr d17, aav.0x000000ff");
0x00056960 add.w r2, r0, 0x10 | r2 = r0 + 0x10;
0x00056964 strb.w sb, [r0, 0x20] | *((r0 + 0x20)) = sb;
0x00056968 mov r3, r0 | r3 = r0;
0x0005696a str.w fp, [r0, 0x24] | __asm ("str.w fp, [r0, 0x24]");
0x0005696e str.w sl, [r0, 0x28] | __asm ("str.w sl, [r0, 0x28]");
0x00056972 movs r0, 2 | r0 = 2;
0x00056974 strb.w r0, [r3, 0x21] | *((r3 + 0x21)) = r0;
0x00056978 mov r0, r3 | r0 = r3;
0x0005697a ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0005697c vst1.32 {d16, d17}, [r2] | __asm ("vst1.32 {d16, d17}, [r2]");
0x00056980 bl 0x9d30 | r0 = fcn_00009d30 (r0, r1);
0x00056984 mov sb, r0 | sb = r0;
0x00056986 cmp r0, 0 |
| if (r0 != 0) {
0x00056988 bne.w 0x56c16 | goto label_38;
| }
0x0005698c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0005698e ldr r3, [sp, 0x28] | r3 = var_28h;
0x00056990 strb.w r7, [sl, 0xe] | *((sl + 0xe)) = r7;
0x00056994 strb.w r3, [sl, 0xf] | *((sl + 0xf)) = r3;
0x00056998 uxtb r3, r2 | r3 = (int8_t) r2;
0x0005699a strb.w r3, [sl, 0xc] | *((sl + 0xc)) = r3;
0x0005699e strb.w r3, [sl, 4] | *((sl + 4)) = r3;
0x000569a2 strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x000569a6 strb.w r3, [sl, 7] | *((sl + 7)) = r3;
0x000569aa ldr r3, [sp, 0xc8] | r3 = *(arg_c8h);
0x000569ac and fp, r3, 1 |
0x000569b0 mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x000569b4 str.w r3, [sl, 0xa0] | __asm ("str.w r3, [sl, 0xa0]");
0x000569b8 eor r3, fp, 1 | r3 = fp ^ 1;
0x000569bc strb.w r3, [sl, 6] | *((sl + 6)) = r3;
| if (r2 == 0) {
0x000569c0 cbnz r2, 0x569cc |
0x000569c2 movs r3, 1 |
0x000569c4 movt r3, 0xa02 | r3 = 0xa020001;
0x000569c8 str.w r3, [sl, 8] | __asm ("str.w r3, [sl, 8]");
| }
0x000569cc vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x000569d0 movs r3, 0x58 | r3 = 0x58;
0x000569d2 mov r0, sl | r0 = sl;
0x000569d4 strh.w r3, [sl, 0x94] | *((sl + 0x94)) = r3;
0x000569d8 vstr d16, [sl, 0xb0] | __asm ("vstr d16, [sl, 0xb0]");
0x000569dc bl 0x145fc | fcn_000145fc (r0);
0x000569e0 cmp.w fp, 0 |
| if (fp == 0) {
0x000569e4 beq.w 0x57002 | goto label_39;
| }
0x000569e8 movs r3, 2 | r3 = 2;
0x000569ea strb.w r3, [sl, 5] | *((sl + 5)) = r3;
| label_9:
0x000569ee ldr r2, [pc, 0x27c] |
0x000569f0 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000569f4 add r2, pc | r2 = 0xad666;
0x000569f6 str.w r2, [sl, 0xd8] | __asm ("str.w r2, [sl, 0xd8]");
0x000569fa cmp r3, 0 |
| if (r3 != 0) {
0x000569fc bne.w 0x56ffc | goto label_40;
| }
0x00056a00 ldrb.w r3, [sl, 0x17] | r3 = *((sl + 0x17));
0x00056a04 cmp r3, 0 |
| if (r3 != 0) {
0x00056a06 bne.w 0x5708a | goto label_41;
| }
0x00056a0a ldr r3, [pc, 0x264] |
0x00056a0c add r3, pc | r3 = 0xad682;
| label_22:
0x00056a7c str r5, [sp, 8] | var_8h = r5;
0x00056a7e b 0x56834 |
| } while (1);
| label_29:
0x00056a80 movs r5, 0 | r5 = 0;
0x00056a82 b 0x566dc | goto label_0;
| label_17:
0x00056a84 movs r0, 0x30 | r0 = 0x30;
0x00056a86 movs r1, 0 | r1 = 0;
0x00056a88 bl 0x1cbb0 | r0 = fcn_0001cbb0 (r0);
0x00056a8c mov r4, r0 | r4 = r0;
0x00056a8e cmp r0, 0 |
| if (r0 == 0) {
0x00056a90 beq.w 0x56bfc | goto label_20;
| }
0x00056a94 ldr r7, [sp, 0xc] | r7 = var_ch;
0x00056a96 movs r3, 1 | r3 = 1;
0x00056a98 str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x00056a9c str r4, [r4, 0x20] | *((r4 + 0x20)) = r4;
0x00056a9e strb r7, [r4, 8] | *((r4 + 8)) = r7;
0x00056aa0 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00056aa2 str r7, [sp, 8] | var_8h = r7;
0x00056aa4 b 0x56834 | goto label_2;
| label_24:
0x00056aa6 mov r2, r5 | r2 = r5;
0x00056aa8 mov r1, r6 | r1 = r6;
0x00056aaa blx 0x8610 | fcn_00008610 ();
0x00056aae b 0x5678a | goto label_3;
| label_31:
0x00056ab0 cmp r6, 0 |
| if (r6 == 0) {
0x00056ab2 beq.w 0x56c02 | goto label_42;
| }
0x00056ab6 ldrb r1, [r6] | r1 = *(r6);
| if (r1 == 0) {
0x00056ab8 cbnz r1, 0x56b0c |
0x00056aba movs r1, 1 | r1 = 1;
0x00056abc str r2, [sp, 0x28] | var_28h = r2;
0x00056abe str r1, [sp, 0x1c] | var_1ch = r1;
0x00056ac0 mov.w r1, 0x13a | r1 = 0x13a;
0x00056ac4 str r6, [sp, 0x20] | var_20h = r6;
0x00056ac6 str r2, [sp, 0x14] | var_14h = r2;
0x00056ac8 str r2, [sp, 0x2c] | var_2ch = r2;
0x00056aca str r2, [sp, 0x18] | var_18h = r2;
0x00056acc b 0x56890 | goto label_4;
| label_30:
0x00056ace mov.w fp, 7 |
| }
0x00056b0c ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x00056b10 str r2, [sp, 0x14] | var_14h = r2;
0x00056b12 add.w sl, r3, 1 | sl = r3 + 1;
0x00056b16 lsl.w r0, sl, 1 | r0 = sl << 1;
0x00056b1a asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x00056b1c bl 0x13558 | r0 = fcn_00013558 (r0);
0x00056b20 mov r3, r0 | r3 = r0;
0x00056b22 str r0, [sp, 0x18] | var_18h = r0;
0x00056b24 cmp r0, 0 |
| if (r0 == 0) {
0x00056b26 beq.w 0x56fac | void (*0x56fac)() ();
| }
0x00056b2a ldr r2, [sp, 0x14] | r2 = var_14h;
0x00056b2c mov r1, r6 | r1 = r6;
0x00056b2e strb r2, [r0] | *(r0) = r2;
0x00056b30 mov r2, sl | r2 = sl;
0x00056b32 ldr.w r7, [sb, 0x24] | r7 = *((sb + 0x24));
0x00056b36 mov r0, sb | r0 = sb;
0x00056b38 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00056b3a str r0, [sp, 0x28] | var_28h = r0;
| if (r0 != 0) {
0x00056b3c cbz r0, 0x56b54 |
0x00056b3e cmp.w r0, 0x200 |
| if (r0 != 0x200) {
0x00056b42 bne 0x56b54 | goto label_43;
| }
0x00056b44 ldr r2, [sp, 0xcc] | r2 = *(arg_cch);
0x00056b46 movw r3, 0x60e | r3 = 0x60e;
0x00056b4a ands r2, r2, 0x1000000 | r2 &= 0x1000000;
0x00056b4e it eq |
| if (r2 != r2) {
0x00056b50 moveq r3, r2 | r3 = r2;
| }
0x00056b52 str r3, [sp, 0x28] | var_28h = r3;
| }
| label_43:
0x00056b54 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00056b56 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00056b5a bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x00056b5e mov r0, r6 | r0 = r6;
0x00056b60 mov r7, r3 | r7 = r3;
0x00056b62 str r3, [sp, 0x14] | var_14h = r3;
0x00056b64 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00056b68 bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x00056b6c mov r2, r7 | r2 = r7;
0x00056b6e adds r3, 1 | r3++;
0x00056b70 ldrb r1, [r6, r3] | r1 = *((r6 + r3));
0x00056b72 adds r3, r6, r3 | r3 = r6 + r3;
0x00056b74 str r3, [sp, 0x2c] | var_2ch = r3;
0x00056b76 cmp r1, 0 |
| if (r1 == 0) {
0x00056b78 beq.w 0x57090 | goto label_44;
| }
0x00056b7c ldr r7, [sp, 8] | r7 = var_8h;
0x00056b7e mov sl, r8 | sl = r8;
0x00056b80 str r4, [sp, 0x1c] | var_1ch = r4;
0x00056b82 mov r8, r6 | r8 = r6;
0x00056b84 mov r4, r3 | r4 = r3;
0x00056b86 mov r6, r2 | r6 = r2;
| do {
0x00056b88 mov r0, r4 | r0 = r4;
0x00056b8a blx 0x85b4 | r0 = fcn_000085b4 ();
0x00056b8e adds r2, r0, 1 | r2 = r0 + 1;
0x00056b90 add r4, r2 | r4 += r2;
0x00056b92 mov r0, r4 | r0 = r4;
0x00056b94 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00056b98 adds r3, r0, 1 | r3 = r0 + 1;
0x00056b9a ldrb r1, [r4, r3] | r1 = *((r4 + r3));
0x00056b9c add r4, r3 | r4 += r3;
0x00056b9e cmp r1, 0 |
0x00056ba0 bne 0x56b88 |
| } while (r1 != 0);
0x00056ba2 mov r2, r6 | r2 = r6;
0x00056ba4 mov r6, r8 | r6 = r8;
0x00056ba6 mov r8, sl | r8 = sl;
0x00056ba8 mov sl, r4 | sl = r4;
0x00056baa ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x00056bac str r7, [sp, 8] | var_8h = r7;
| label_14:
0x00056bae ldr r3, [sp, 0x28] | r3 = var_28h;
0x00056bb0 cmp r3, 0 |
| if (r3 != 0) {
0x00056bb2 bne.w 0x57062 | goto label_45;
| }
0x00056bb6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00056bb8 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x00056bbc adds r1, r0, 7 | r1 = r0 + 7;
0x00056bbe cmp r1, r3 |
| if (r1 >= r3) {
0x00056bc0 bge.w 0x57012 | goto label_46;
| }
0x00056bc4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00056bc6 add.w r1, r0, r0, lsl 1 | r1 = r0 + (r0 << 1);
0x00056bca add.w sl, sl, 1 | sl++;
0x00056bce str r6, [sp, 0x20] | var_20h = r6;
0x00056bd0 add.w r1, r1, 0x13a | r1 += 0x13a;
0x00056bd4 sub.w r3, sl, r3 | r3 = sl - r3;
0x00056bd8 str r3, [sp, 0x1c] | var_1ch = r3;
0x00056bda ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00056bde b 0x56890 | goto label_4;
| label_32:
0x00056be0 movs r2, 1 | r2 = 1;
0x00056be2 mov.w r1, 0x13a | r1 = 0x13a;
0x00056be6 strd r2, r6, [sp, 0x1c] | __asm ("strd r2, r6, [var_1ch]");
0x00056bea str r2, [sp, 0x28] | var_28h = r2;
0x00056bec mov r2, r6 | r2 = r6;
0x00056bee str r6, [sp, 0x2c] | var_2ch = r6;
0x00056bf0 str r6, [sp, 0x18] | var_18h = r6;
0x00056bf2 str r6, [sp, 0x14] | var_14h = r6;
0x00056bf4 b 0x56890 | goto label_4;
| label_23:
0x00056bf6 mov r0, r4 | r0 = r4;
0x00056bf8 blx 0x8404 | fcn_00008404 ();
| label_20:
0x00056bfc mov.w fp, 7 |
0x00056c00 b 0x56aee | void (*0x56aee)() ();
| label_42:
0x00056c02 movs r1, 1 | r1 = 1;
0x00056c04 str r6, [sp, 0x28] | var_28h = r6;
0x00056c06 str r1, [sp, 0x1c] | var_1ch = r1;
0x00056c08 mov.w r1, 0x13a | r1 = 0x13a;
0x00056c0c str r6, [sp, 0x20] | var_20h = r6;
0x00056c0e str r6, [sp, 0x2c] | var_2ch = r6;
0x00056c10 str r6, [sp, 0x18] | var_18h = r6;
0x00056c12 str r6, [sp, 0x14] | var_14h = r6;
0x00056c14 b 0x56890 | goto label_4;
| label_38:
0x00056c16 mov fp, r0 |
| label_5:
0x00056c18 ldr.w r6, [sl, 0x40] | r6 = *((sl + 0x40));
0x00056c1c ldr r3, [r6] | r3 = *(r6);
| if (r3 != 0) {
0x00056c1e cbz r3, 0x56c2a |
0x00056c20 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00056c22 mov r0, r6 | r0 = r6;
0x00056c24 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00056c26 movs r3, 0 | r3 = 0;
0x00056c28 str r3, [r6] | *(r6) = r3;
| }
0x00056c2a ldr.w r0, [sl, 0xe0] | r0 = *((sl + 0xe0));
0x00056c2e bl 0xf04c | fcn_0000f04c (r0);
0x00056c32 mov r0, sl | r0 = sl;
0x00056c34 blx 0x8404 | fcn_00008404 ();
0x00056c38 b 0x56a70 | void (*0x56a70)() ();
| label_28:
0x00056c78 ldr.w r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x00056c7c str r7, [sp, 8] | var_8h = r7;
0x00056c7e subs r2, r1, 1 | r2 = r1 - 1;
| if (r2 < r1) {
0x00056c80 bmi 0x56ca0 | goto label_47;
| }
0x00056c82 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00056c86 add.w r3, r3, r1, lsl 4 | r3 += (r1 << 4);
| do {
0x00056c8a ldr r1, [r3, -0xc] | r1 = *((r3 - 0xc));
| if (r1 != 0) {
0x00056c8e cbz r1, 0x56c96 |
0x00056c90 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00056c92 cmp r1, r5 |
| if (r1 == r5) {
0x00056c94 beq 0x56d72 | goto label_48;
| }
| }
0x00056c96 subs r2, 1 | r2--;
0x00056c98 subs r3, 0x10 | r3 -= 0x10;
0x00056c9a adds r1, r2, 1 | r1 = r2 + 1;
0x00056c9c bne 0x56c8a |
| } while (r1 != r2);
0x00056c9e str r7, [sp, 8] | var_8h = r7;
| label_47:
0x00056ca0 ldr r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x00056ca2 mov r0, fp | r0 = fp;
0x00056ca4 str r5, [r4, 4] | *((r4 + 4)) = r5;
0x00056ca6 adds r3, 1 | r3++;
0x00056ca8 str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x00056caa blx 0x87c0 | fcn_000087c0 ();
0x00056cae mov r0, sl | r0 = sl;
0x00056cb0 blx 0x8404 | fcn_00008404 ();
| label_48:
0x00056d72 mov r0, fp | r0 = fp;
0x00056d74 mov.w fp, 0x13 |
0x00056d78 blx 0x87c0 | fcn_000087c0 ();
0x00056d7c mov r0, r7 | r0 = r7;
0x00056d7e blx 0x87c0 | fcn_000087c0 ();
| label_25:
0x00056d82 mov r0, sl | r0 = sl;
0x00056d84 blx 0x8404 | fcn_00008404 ();
0x00056d88 mov r0, r4 | r0 = r4;
0x00056d8a blx 0x8404 | fcn_00008404 ();
0x00056d8e b 0x56aee | void (*0x56aee)() ();
| label_37:
0x00056e8a ldr r0, [sp, 0xcc] | r0 = *(arg_cch);
0x00056e8c movw r3, 0x7f7f |
0x00056e90 movt r3, 0x108 | r3 = 0x1087f7f;
0x00056e94 ldr.w r2, [sl, 0x40] | r2 = *((sl + 0x40));
0x00056e98 ldr.w r1, [sl, 0xb8] | r1 = *((sl + 0xb8));
0x00056e9c ands r3, r0 | r3 &= r0;
0x00056e9e movs r0, 0 | r0 = 0;
0x00056ea0 str r0, [sp, 0x34] | x = r0;
0x00056ea2 add r0, sp, 0x34 | r0 += x;
0x00056ea4 str r0, [sp] | *(sp) = r0;
0x00056ea6 mov r0, sb | r0 = sb;
0x00056ea8 ldr.w fp, [sb, 0x18] | fp = *((sb + 0x18));
0x00056eac blx fp | fp (r0, r1, r2, r3);
0x00056eae ldr r3, [sp, 0x34] | r3 = x;
0x00056eb0 mov fp, r0 |
0x00056eb2 ubfx r2, r3, 7, 1 | r2 = (r3 >> 7) & ((1 << 1) - 1);
0x00056eb6 strb.w r2, [sl, 0x10] | *((sl + 0x10)) = r2;
0x00056eba cmp r0, 0 |
| if (r0 != 0) {
0x00056ebc bne.w 0x56c18 | goto label_5;
| }
0x00056ec0 ldr.w r0, [sl, 0x40] | r0 = *((sl + 0x40));
0x00056ec4 and r7, r3, 1 | r7 = r3 & 1;
0x00056ec8 str r2, [sp, 0x18] | var_18h = r2;
0x00056eca ldr r2, [r0] | r2 = *(r0);
0x00056ecc cmp r2, 0 |
| if (r2 == 0) {
0x00056ece beq.w 0x57038 | goto label_49;
| }
0x00056ed2 ldr r3, [r2, 0x30] | r3 = *((r2 + 0x30));
0x00056ed4 blx r3 | r0 = uint32_t (*r3)(uint32_t) (r3);
0x00056ed6 mov sb, r0 | sb = r0;
0x00056ed8 cmp r7, 0 |
| if (r7 == 0) {
0x00056eda beq.w 0x5706a | goto label_50;
| }
| label_13:
0x00056ede ldr r1, [pc, 0x1cc] |
0x00056ee0 movs r2, 0 | r2 = 0;
0x00056ee2 ldr.w r0, [sl, 0xb8] | r0 = *((sl + 0xb8));
0x00056ee6 add r1, pc | r1 = 0xadf98;
0x00056ee8 blx 0x85d0 | fcn_000085d0 ();
0x00056eec tst.w sb, 0x2000 |
0x00056ef0 strb.w r0, [sl, 0xd] | *((sl + 0xd)) = r0;
| if ((sb & 0x2000) == 0) {
0x00056ef4 beq.w 0x5704a | goto label_51;
| }
| label_11:
0x00056ef8 movs r3, 1 | r3 = 1;
0x00056efa mov r7, r3 | r7 = r3;
0x00056efc b 0x56914 | goto label_6;
| label_26:
0x00056efe str r7, [sp, 8] | var_8h = r7;
0x00056f00 b 0x567a0 | goto label_7;
| label_35:
0x00056f02 ldr r7, [sp, 0x14] | r7 = var_14h;
0x00056f04 mov r0, r3 | r0 = r3;
0x00056f06 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00056f08 mov r2, r7 | r2 = r7;
0x00056f0a blx 0x8610 | fcn_00008610 ();
0x00056f0e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00056f10 mov r2, r7 | r2 = r7;
0x00056f12 adds r2, 1 | r2++;
0x00056f14 add r0, r2 | r0 += r2;
0x00056f16 add.w fp, r0, 1 |
| if (r1 != 0) {
0x00056f1a cbz r1, 0x56f26 |
0x00056f1c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00056f1e add.w fp, r0, r2 |
0x00056f22 blx 0x8610 | fcn_00008610 ();
| }
0x00056f26 ldrd r2, r7, [sp, 0x14] | __asm ("ldrd r2, r7, [var_18h]");
0x00056f2a mov r0, fp | r0 = fp;
0x00056f2c str.w fp, [sl, 0xbc] | __asm ("str.w fp, [sl, 0xbc]");
0x00056f30 mov r1, r7 | r1 = r7;
0x00056f32 blx 0x8610 | fcn_00008610 ();
0x00056f36 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00056f38 ldr.w ip, [pc, 0x174] | ip = *(0x000570b0);
0x00056f3c add.w lr, fp, r3 | lr = fp + r3;
0x00056f40 mov r2, r3 | r2 = r3;
0x00056f42 add.w r0, lr, 9 | r0 = lr + 9;
0x00056f46 add ip, pc |
0x00056f48 str r0, [sp, 0x18] | var_18h = r0;
0x00056f4a ldm.w ip!, {r0, r1} | r0 = *(ip!);
| r1 = *((ip! + 4));
0x00056f4e str.w r0, [fp, r3] | __asm ("str.w r0, [fp, r3]");
0x00056f52 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00056f54 str.w r1, [lr, 4] | __asm ("str.w r1, [lr, 4]");
0x00056f58 mov r1, r7 | r1 = r7;
0x00056f5a str.w r0, [sl, 0xec] | __asm ("str.w r0, [sl, 0xec]");
0x00056f5e blx 0x8610 | fcn_00008610 ();
0x00056f62 ldr r2, [pc, 0x150] |
0x00056f64 mov r1, r0 | r1 = r0;
0x00056f66 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00056f68 add r2, pc | r2 = 0xae022;
0x00056f6a ldr r0, [r2] | r0 = *(0xae022);
0x00056f6c str r0, [r1, r3] | *((r1 + r3)) = r0;
0x00056f6e mov r0, r7 | r0 = r7;
0x00056f70 blx 0x8404 | fcn_00008404 ();
0x00056f74 b 0x568f0 | goto label_8;
| label_36:
0x00056f76 ldr r3, [sp, 0xcc] | r3 = *(arg_cch);
0x00056f78 and r3, r3, 1 | r3 &= 1;
0x00056f7c mov r7, r3 | r7 = r3;
0x00056f7e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00056f80 str r3, [sp, 0x18] | var_18h = r3;
0x00056f82 b 0x56914 | goto label_6;
| label_34:
0x00056fa2 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 == 0) {
0x00056fa4 cbz r3, 0x56fac | void (*0x56fac)() ();
| }
0x00056fa6 mov r0, r3 | r0 = r3;
0x00056fa8 blx 0x8404 | fcn_00008404 ();
| label_33:
0x00056fb2 mov r0, r6 | r0 = r6;
0x00056fb4 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00056fb8 adds r2, r0, 1 | r2 = r0 + 1;
0x00056fba mov r1, sl | r1 = sl;
0x00056fbc mov r0, r2 | r0 = r2;
0x00056fbe str r2, [sp, 0x14] | var_14h = r2;
0x00056fc0 bl 0x13558 | r0 = fcn_00013558 (r0);
0x00056fc4 mov r7, r0 | r7 = r0;
0x00056fc6 str r0, [sp, 0x18] | var_18h = r0;
0x00056fc8 cmp r0, 0 |
| if (r0 == 0) {
0x00056fca beq 0x56fac | void (*0x56fac)() ();
| }
0x00056fcc ldr r2, [sp, 0x14] | r2 = var_14h;
0x00056fce mov r1, r6 | r1 = r6;
0x00056fd0 str.w sl, [sp, 0x20] | __asm ("str.w sl, [var_20h]");
0x00056fd4 blx 0x8610 | fcn_00008610 ();
0x00056fd8 mov r0, r7 | r0 = r7;
0x00056fda blx 0x85b4 | r0 = fcn_000085b4 ();
0x00056fde bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x00056fe2 movs r0, 1 | r0 = 1;
0x00056fe4 add.w r1, r2, r2, lsl 1 | r1 = r2 + (r2 << 1);
0x00056fe8 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00056fec str r2, [sp, 0x14] | var_14h = r2;
0x00056fee add.w r1, r1, 0x13a | r1 += 0x13a;
0x00056ff2 str r0, [sp, 0x1c] | var_1ch = r0;
0x00056ff4 str r0, [sp, 0x28] | var_28h = r0;
0x00056ff6 str.w sl, [sp, 0x2c] | __asm ("str.w sl, [var_2ch]");
0x00056ffa b 0x56890 | goto label_4;
| label_40:
0x00056ffc ldr r3, [pc, 0xb8] | r3 = *(0x570b8);
| label_39:
0x00057002 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00057004 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00057006 orrs r3, r2 | r3 |= r2;
0x00057008 itt ne |
| if (r3 == r2) {
0x0005700a movne r3, 4 | r3 = 4;
| }
| if (r3 == r2) {
0x0005700c strbne r3, [sl, 5] | *((sl + 5)) = r3;
| }
0x00057010 b 0x569ee | goto label_9;
| label_46:
0x00057012 blx 0x83b8 | strerror_r ();
0x00057016 ldr r2, [pc, 0xa4] |
0x00057018 adds r0, 0x14 | r0 += 0x14;
0x0005701a ldr r1, [pc, 0xa4] |
0x0005701c mov.w fp, 0xe |
0x00057020 str r0, [sp] | *(sp) = r0;
0x00057022 movw r3, 0xe527 | r3 = 0xe527;
0x00057026 add r2, pc | r2 = 0xae0e8;
0x00057028 movs r0, 0xe | r0 = 0xe;
0x0005702a add r1, pc | r1 = 0xae0f0;
0x0005702c blx 0x8b60 | fcn_00008b60 ();
| label_12:
0x00057030 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00057032 blx 0x8404 | fcn_00008404 ();
0x00057036 b 0x56a70 | void (*0x56a70)() ();
| if (r7 == 0) {
| label_49:
0x00057038 cbz r7, 0x57068 | goto label_52;
| }
0x0005703a ldr r1, [pc, 0x88] |
0x0005703c ldr.w r0, [sl, 0xb8] | r0 = *((sl + 0xb8));
0x00057040 add r1, pc | r1 = 0xae10a;
0x00057042 blx 0x85d0 | fcn_000085d0 ();
0x00057046 strb.w r0, [sl, 0xd] | *((sl + 0xd)) = r0;
| label_51:
0x0005704a ldr r1, [pc, 0x7c] |
0x0005704c movs r2, 0 | r2 = 0;
0x0005704e ldr.w r0, [sl, 0xb8] | r0 = *((sl + 0xb8));
0x00057052 add r1, pc | r1 = 0xae120;
0x00057054 blx 0x85d0 | fcn_000085d0 ();
0x00057058 str r0, [sp, 0x14] | var_14h = r0;
0x0005705a cmp r0, 0 |
| if (r0 == 0) {
0x0005705c beq.w 0x56924 | goto label_10;
| }
0x00057060 b 0x56ef8 | goto label_11;
| label_45:
0x00057062 ldr.w fp, [sp, 0x28] | fp = var_28h;
0x00057066 b 0x57030 | goto label_12;
| label_52:
0x00057068 mov sb, r7 | sb = r7;
| label_50:
0x0005706a mov r0, sl | r0 = sl;
0x0005706c bl 0x145fc | fcn_000145fc (r0);
0x00057070 ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x00057074 cmp.w r3, 0x1000 |
| if (r3 < 0x1000) {
0x00057078 bls.w 0x56ede | goto label_13;
| }
0x0005707c cmp.w r3, 0x2000 |
0x00057080 it hi |
| if (r3 <= 0x2000) {
0x00057082 movhi r3, 0x2000 | r3 = 0x2000;
| }
0x00057086 str r3, [sp, 0x30] | var_30h = r3;
0x00057088 b 0x56ede | goto label_13;
| label_41:
0x0005708a ldr r3, [pc, 0x40] |
0x0005708c add r3, pc | r3 = 0xae15e;
0x0005708e b 0x56a0e | void (*0x56a0e)() ();
| label_44:
0x00057090 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x00057094 b 0x56bae | goto label_14;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x57c50 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00057c50 () | void fcn_00057c50 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ah;
| int16_t var_1ch;
| int16_t var_1eh;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00057c50 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00057c54 mov fp, r2 |
0x00057c56 ldr.w r2, [pc, 0x558] |
0x00057c5a sub sp, 0x34 |
0x00057c5c mov r6, r0 | r6 = r0;
0x00057c5e mov r7, r1 | r7 = r1;
0x00057c60 ldr.w r3, [pc, 0x550] | r3 = *(0x581b4);
0x00057c64 add r2, pc | r2 = 0xafe1a;
0x00057c66 ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x00057c68 ldr r3, [r2, r3] |
0x00057c6a ldr.w sb, [r4] | sb = *(r4);
0x00057c6e ldr r3, [r3] | r3 = *(0xafe1a);
0x00057c70 str r3, [sp, 0x2c] | var_2ch = r3;
0x00057c72 mov.w r3, 0 | r3 = 0;
0x00057c76 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
| if (r3 != 0) {
0x00057c78 cbz r3, 0x57c86 |
0x00057c7a ldr r3, [r0, 0xc] | r3 = *(arg_0hxc);
0x00057c7c adds r3, 1 | r3++;
0x00057c7e str r3, [r0, 0xc] | *(arg_0hxc) = r3;
0x00057c80 ldrb r3, [r0, 0xa] | r3 = *(arg_0hxa);
0x00057c82 cmp r3, 0 |
| if (r3 == 0) {
0x00057c84 beq 0x57d74 | goto label_29;
| }
| }
0x00057c86 ldrb r3, [r6, 8] | r3 = *((r6 + 8));
0x00057c88 cmp r3, 2 |
| if (r3 == 2) {
0x00057c8a beq 0x57d7e | goto label_30;
| }
| label_1:
0x00057c8c cmp r3, 1 |
0x00057c8e it eq |
| if (r3 == 1) {
0x00057c90 cmpeq r7, 0 | __asm ("cmpeq r7, 0");
| }
| if (r3 == 1) {
0x00057c92 beq.w 0x58002 | goto label_31;
| }
0x00057c96 ldr r3, [r6] | r3 = *(r6);
0x00057c98 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x00057c9a ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00057c9c lsls r2, r2, 6 | r2 <<= 6;
| if (r2 >= r2) {
0x00057c9e bpl 0x57cd4 | goto label_32;
| }
0x00057ca0 ldrb.w r2, [sb, 0xe] | r2 = *((sb + 0xe));
| if (r2 != 0) {
0x00057ca4 cbnz r2, 0x57cd4 | goto label_32;
| }
0x00057ca6 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x00057caa lsls r3, r3, 0x10 | r3 <<= 0x10;
0x00057cac lsrs r3, r3, 0x10 | r3 >>= 0x10;
0x00057cae strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| if (r7 == 0) {
| label_0:
0x00057cb0 cbz r7, 0x57cde | goto label_33;
| }
0x00057cb2 ldrb r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x00057cb4 cmp r2, 2 |
| if (r2 == 2) {
0x00057cb6 beq 0x57ce2 | goto label_34;
| }
0x00057cb8 lsls r0, r3, 0x18 | r0 = r3 << 0x18;
| if (r0 < r3) {
0x00057cba bmi 0x57ce2 | goto label_34;
| }
0x00057cbc cmp r7, 1 |
| if (r7 <= 1) {
0x00057cbe ble 0x57cec | goto label_35;
| }
0x00057cc0 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
| if (r3 != 0) {
0x00057cc2 cbnz r3, 0x57cca | goto label_36;
| }
0x00057cc4 b 0x57cec | goto label_35;
| do {
0x00057cc6 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| if (r3 == 0) {
0x00057cc8 cbz r3, 0x57cec | goto label_35;
| }
| label_36:
0x00057cca ldr r2, [r3] | r2 = *(r3);
0x00057ccc cmp r2, r6 |
0x00057cce beq 0x57cc6 |
| } while (r2 == r6);
0x00057cd0 ldr r3, [r2] | r3 = *(r2);
0x00057cd2 b 0x57ce6 | goto label_37;
| label_32:
0x00057cd4 and r2, r3, 1 | r2 = r3 & 1;
0x00057cd8 cmp r2, 0 |
| if (r2 == 0) {
0x00057cda beq 0x57cb0 | goto label_0;
| }
| if (r7 == 0) {
0x00057cdc cbnz r7, 0x57d40 |
| label_33:
0x00057cde lsls r5, r3, 0x18 | r5 = r3 << 0x18;
| if (r5 < r3) {
0x00057ce0 bpl 0x57cec |
| label_34:
0x00057ce2 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00057ce4 ldr r3, [r3] | r3 = *(r3);
| label_37:
0x00057ce6 mov.w r5, 0x106 | r5 = 0x106;
| if (r3 != 0) {
0x00057cea cbnz r3, 0x57d42 | goto label_2;
| }
| }
| label_35:
0x00057cec movs r2, 1 | r2 = 1;
0x00057cee mov r0, r6 | r0 = r6;
0x00057cf0 mov r1, r2 | r1 = r2;
0x00057cf2 bl 0xa174 | r0 = fcn_0000a174 (r0, r1, r2);
0x00057cf6 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00057cf8 cbnz r0, 0x57d42 | goto label_2;
| }
0x00057cfa ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00057cfc ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x00057cfe bic r3, r3, 0x10 | r3 = BIT_MASK (r3, 0x10);
0x00057d02 lsls r3, r3, 0x10 | r3 <<= 0x10;
0x00057d04 lsrs r3, r3, 0x10 | r3 >>= 0x10;
0x00057d06 strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| if (r2 == 0) {
0x00057d08 cbnz r2, 0x57d10 |
0x00057d0a orr r3, r3, 0x10 | r3 |= 0x10;
0x00057d0e strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| }
0x00057d10 ldr.w r8, [r4, 0xc] | r8 = *((r4 + 0xc));
0x00057d14 mov sl, r7 | sl = r7;
0x00057d16 mov r7, r8 | r7 = r8;
| label_22:
0x00057d18 cmp r7, 0 |
| if (r7 == 0) {
0x00057d1a beq.w 0x57e4e | goto label_38;
| }
| label_3:
0x00057d1e clz r3, r5 | r3 &= r5;
0x00057d22 cmp.w sl, 0 |
0x00057d26 lsr.w r3, r3, 5 | r3 >>= 5;
0x00057d2a it eq |
| if (sl != 0) {
0x00057d2c moveq r3, 0 | r3 = 0;
| }
0x00057d2e cmp r3, 0 |
| if (r3 == 0) {
0x00057d30 beq 0x57dde | goto label_39;
| }
0x00057d32 ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00057d34 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00057d36 bpl 0x57dae | goto label_40;
| }
0x00057d38 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00057d3a cmp r3, 0 |
| if (r3 == 0) {
0x00057d3c beq.w 0x57f0c | goto label_41;
| }
| }
| label_18:
0x00057d40 movs r5, 8 | r5 = 8;
| label_2:
0x00057d42 ldrb r3, [r6, 9] | r3 = *((r6 + 9));
| if (r3 != 0) {
0x00057d44 cbz r3, 0x57d52 |
0x00057d46 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00057d48 subs r3, 1 | r3--;
0x00057d4a str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x00057d4c cmp r3, 0 |
| if (r3 == 0) {
0x00057d4e beq.w 0x57fce | goto label_42;
| }
| }
| label_9:
0x00057d52 ldr.w r2, [pc, 0x464] | r2 = *(0x000581b8);
0x00057d56 ldr.w r3, [pc, 0x45c] | r3 = *(0x581b6);
0x00057d5a add r2, pc | r2 += pc;
0x00057d5c ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00057d5e ldr r2, [r3] | r2 = *(0x581b6);
0x00057d60 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00057d62 eors r2, r3 | r2 ^= r3;
0x00057d64 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00057d68 bne.w 0x5834a | goto label_43;
| }
0x00057d6c mov r0, r5 | r0 = r5;
0x00057d6e add sp, 0x34 |
0x00057d70 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_29:
0x00057d74 bl 0x12e84 | fcn_00012e84 (r0);
0x00057d78 ldrb r3, [r6, 8] | r3 = *((r6 + 8));
0x00057d7a cmp r3, 2 |
| if (r3 != 2) {
0x00057d7c bne 0x57c8c | goto label_1;
| }
| label_30:
0x00057d7e cmp.w fp, 0 |
| if (fp != 0) {
0x00057d82 beq 0x57d90 |
0x00057d84 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00057d86 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x00057d88 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00057d8a rev r3, r3 | r3 = SWAP32 (r3);
0x00057d8c str.w r3, [fp] | __asm ("str.w r3, [fp]");
| }
| if (r7 != 0) {
0x00057d90 cbz r7, 0x57daa |
| label_11:
0x00057d92 ldr r2, [r6] | r2 = *(r6);
0x00057d94 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x00057d98 ldr.w r1, [r2, 0x1f4] | r1 = *((r2 + 0x1f4));
0x00057d9c cmp r1, r3 |
| if (r1 <= r3) {
0x00057d9e ble 0x57daa | goto label_10;
| }
0x00057da0 ldrb.w r3, [sb, 6] | r3 = *((sb + 6));
0x00057da4 cmp r3, 0 |
| if (r3 != 0) {
0x00057da6 bne.w 0x58166 | goto label_44;
| }
| }
| label_10:
0x00057daa movs r5, 0 | r5 = 0;
0x00057dac b 0x57d42 | goto label_2;
| label_40:
0x00057dae ldr.w r5, [sb, 0x2c] | r5 = *((sb + 0x2c));
0x00057db2 ldr r3, [r6] | r3 = *(r6);
0x00057db4 ldrb.w r3, [r3, 0x56] | r3 = *((r3 + 0x56));
0x00057db8 cmp r5, 0 |
| if (r5 != 0) {
0x00057dba bne.w 0x57f92 | goto label_17;
| }
0x00057dbe ldrb.w r7, [sb, 0x11] | r7 = *((sb + 0x11));
0x00057dc2 sub.w r3, r3, 2 | r3 -= 2;
0x00057dc6 clz r3, r3 | r3 &= r3;
0x00057dca lsrs r3, r3, 5 | r3 >>= 5;
0x00057dcc cmp r7, 1 |
0x00057dce strb.w r3, [sb, 0x16] | *((sb + 0x16)) = r3;
| if (r7 == 1) {
0x00057dd2 beq.w 0x57f1c | goto label_45;
| }
| label_12:
0x00057dd6 mov r0, r4 | r0 = r4;
0x00057dd8 bl 0x57bbc | r0 = fcn_00057bbc (r0);
0x00057ddc mov r5, r0 | r5 = r0;
| label_39:
0x00057dde cmp r5, 0 |
| if (r5 == 0) {
0x00057de0 beq.w 0x57fd6 | goto label_46;
| }
| label_4:
0x00057de4 uxtb.w r8, r5 | r8 = (int8_t) r5;
| label_13:
0x00057de8 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r3 == 0) {
0x00057dea cbnz r3, 0x57e0c |
0x00057dec ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x00057dee cmp r7, 0 |
| if (r7 == 0) {
0x00057df0 beq.w 0x57f12 | goto label_47;
| }
| label_5:
0x00057df4 ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x00057df6 movs r3, 0 | r3 = 0;
0x00057df8 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00057dfa ldr r7, [r0, 0x14] | r7 = *((r0 + 0x14));
0x00057dfc bl 0x1297c | fcn_0001297c (r0);
0x00057e00 ldr.w r3, [r7, 0xe4] | r3 = *((r7 + 0xe4));
0x00057e04 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00057e06 cmp r3, 0 |
| if (r3 == 0) {
0x00057e08 beq.w 0x57fc6 | goto label_48;
| }
| }
| label_8:
0x00057e0c cmp.w r8, 5 |
| if (r8 != 5) {
0x00057e10 bne 0x57d42 | goto label_2;
| }
| label_7:
0x00057e12 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00057e14 cmp r3, 0 |
| if (r3 != 0) {
0x00057e16 bne 0x57d42 | goto label_2;
| }
| label_6:
0x00057e18 ldr r7, [r4, 4] | r7 = *((r4 + 4));
0x00057e1a ldr.w r3, [r7, 0x1bc] | r3 = *((r7 + 0x1bc));
0x00057e1e cmp r3, 0 |
| if (r3 == 0) {
0x00057e20 beq 0x57d42 | goto label_2;
| }
0x00057e22 ldr.w r1, [r7, 0x1c4] | r1 = *((r7 + 0x1c4));
0x00057e26 cmp r1, 0 |
| if (r1 < 0) {
0x00057e28 blt 0x57d42 | goto label_2;
| }
0x00057e2a ldr.w r0, [r7, 0x1c0] | r0 = *((r7 + 0x1c0));
0x00057e2e blx r3 | r0 = uint32_t (*r3)(uint32_t) (r0);
| if (r0 == 0) {
0x00057e30 cbnz r0, 0x57e3c |
0x00057e32 mov.w r3, -1 | r3 = -1;
0x00057e36 str.w r3, [r7, 0x1c4] | __asm ("str.w r3, aav.0x000000ff");
0x00057e3a b 0x57d42 | goto label_2;
| }
0x00057e3c ldr.w r3, [r7, 0x1c4] | r3 = *((r7 + 0x1c4));
0x00057e40 adds r3, 1 | r3++;
0x00057e42 str.w r3, [r7, 0x1c4] | __asm ("str.w r3, aav.0x000000ff");
0x00057e46 ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x00057e48 cmp r7, 0 |
| if (r7 != 0) {
0x00057e4a bne.w 0x57d1e | goto label_3;
| }
| label_38:
0x00057e4e ldr r0, [r4] | r0 = *(r4);
0x00057e50 bl 0x57594 | r0 = fcn_00057594 (r0);
0x00057e54 mov r5, r0 | r5 = r0;
0x00057e56 cmp r0, 0 |
| if (r0 != 0) {
0x00057e58 bne 0x57de4 | goto label_4;
| }
0x00057e5a mov r3, r0 | r3 = r0;
0x00057e5c add r2, sp, 0x24 | r2 += var_24h;
0x00057e5e movs r1, 1 | r1 = 1;
0x00057e60 mov r0, r4 | r0 = r4;
0x00057e62 bl 0xa33c | r0 = fcn_0000a33c (r0, r1, r2);
0x00057e66 mov r5, r0 | r5 = r0;
0x00057e68 cmp r0, 0 |
| if (r0 != 0) {
0x00057e6a bne 0x57de4 | goto label_4;
| }
0x00057e6c ldr r7, [sp, 0x24] | r7 = var_24h;
0x00057e6e ldr r3, [r4] | r3 = *(r4);
0x00057e70 ldr.w r8, [r7, 0x38] | r8 = *((r7 + 0x38));
0x00057e74 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00057e76 str r2, [sp, 0x10] | var_10h = r2;
0x00057e78 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
| if (r2 != 0) {
0x00057e7c cbz r2, 0x57e8c |
0x00057e7e ldrb.w r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00057e82 ldrb.w r1, [r8, 0x5c] | r1 = *((r8 + 0x5c));
0x00057e86 cmp r0, r1 |
| if (r0 == r1) {
0x00057e88 beq.w 0x58134 | goto label_49;
| }
| }
| label_14:
0x00057e8c ldr r2, [sp, 0x10] | r2 = var_10h;
0x00057e8e str r2, [sp, 0xc] | var_ch = r2;
| label_15:
0x00057e90 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00057e92 ldrd r2, r1, [r1, 0x20] | __asm ("ldrd r2, r1, [r1, 0x20]");
0x00057e96 lsrs r2, r2, 0x19 | r2 >>= 0x19;
0x00057e98 orr.w r2, r2, r1, lsl 7 | r2 |= (r1 << 7);
0x00057e9c ldr r1, [sp, 0xc] | r1 = var_ch;
0x00057e9e eor r2, r2, 1 | r2 ^= 1;
0x00057ea2 cmp r1, 0 |
0x00057ea4 ite eq |
| if (r1 != 0) {
0x00057ea6 moveq r2, 0 | r2 = 0;
| }
| if (r1 == 0) {
0x00057ea8 andne r2, r2, 1 | r2 &= 1;
| }
0x00057eac cmp r2, 0 |
| if (r2 != 0) {
0x00057eae bne.w 0x580dc | goto label_50;
| }
0x00057eb2 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00057eb4 str r2, [sp, 0xc] | var_ch = r2;
| label_24:
0x00057eb6 strh.w r3, [sp, 0x1c] | var_1ch = r3;
0x00057eba subs r3, 0xc | r3 -= 0xc;
0x00057ebc lsls r2, r3, 6 | r2 = r3 << 6;
0x00057ebe movw r1, 0x8081 |
0x00057ec2 movt r1, 0x8080 | r1 = 0x80808081;
0x00057ec6 lsls r3, r3, 5 | r3 <<= 5;
0x00057ec8 umull r0, r2, r1, r2 | r0:r2 = r1 * r2;
0x00057ecc vldr d16, [pc, 0x2d8] | __asm ("vldr d16, aav.0x000000ff");
0x00057ed0 umull r1, r3, r1, r3 | r1:r3 = r1 * r3;
0x00057ed4 lsrs r2, r2, 7 | r2 >>= 7;
0x00057ed6 strh.w r2, [sp, 0x18] | var_18h = r2;
0x00057eda ubfx r3, r3, 7, 0x10 | r3 = (r3 >> 7) & ((1 << 0x10) - 1);
0x00057ede strh.w r3, [sp, 0x1a] | var_1ah = r3;
0x00057ee2 strh.w r3, [sp, 0x1e] | var_1eh = r3;
0x00057ee6 add.w r3, r4, 0x1a | r3 = r4 + 0x1a;
0x00057eea vldr d7, [sp, 0x18] | __asm ("vldr d7, [sp, 0x18]");
0x00057eee vadd.i16 d7, d7, d16 | __asm ("vadd.i16 d7, d7, d16");
0x00057ef2 vst1.16 {d7}, [r3] | __asm ("vst1.16 {d7}, [r3]");
0x00057ef4 strb r7, [r1, 0x1d] | *((r1 + 0x1d)) = r7;
0x00057ef6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00057ef8 str r7, [r4, 0xc] | *((r4 + 0xc)) = r7;
0x00057efa str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00057efc vmov r3, s14 | __asm ("vmov r3, s14");
0x00057f00 uxth r3, r3 | r3 = (int16_t) r3;
0x00057f02 cmp r3, 0x7f |
0x00057f04 it hs |
| if (r3 < 0x7f) {
0x00057f06 movhs r3, 0x7f | r3 = 0x7f;
| }
0x00057f08 strb r3, [r4, 0x15] | *((r4 + 0x15)) = r3;
0x00057f0a b 0x57d1e | goto label_3;
| label_41:
0x00057f0c movs r5, 8 | r5 = 8;
0x00057f0e mov r8, r5 | r8 = r5;
0x00057f10 b 0x57df4 | goto label_5;
| label_47:
0x00057f12 cmp.w r8, 5 |
| if (r8 == 5) {
0x00057f16 beq.w 0x57e18 | goto label_6;
| }
0x00057f1a b 0x57d42 | goto label_2;
| label_45:
0x00057f1c ldr.w r8, [sb, 0xe8] | r8 = *((sb + 0xe8));
0x00057f20 cmp.w r8, 0 |
| if (r8 == 0) {
0x00057f24 beq.w 0x58170 | goto label_51;
| }
0x00057f28 ldrb.w r3, [sb, 4] | r3 = *((sb + 4));
| if (r3 != 0) {
0x00057f2c cbz r3, 0x57f6c |
0x00057f2e ldrb.w r3, [r8, 0x2b] | r3 = *((r8 + 0x2b));
0x00057f32 cmp r3, 0 |
| if (r3 != 0) {
0x00057f34 bne.w 0x58066 | goto label_52;
| }
0x00057f38 movs r1, 4 | r1 = 4;
0x00057f3a mov r0, sb | r0 = sb;
0x00057f3c bl 0x9f44 | r0 = fcn_00009f44 (r0, r1);
0x00057f40 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00057f42 cbnz r0, 0x57f92 | goto label_17;
| }
0x00057f44 ldr.w r5, [sb, 0xe8] | r5 = *((sb + 0xe8));
0x00057f48 ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x00057f4c mov r8, r5 | r8 = r5;
| if (r3 == 0) {
0x00057f4e cbnz r3, 0x57f66 |
0x00057f50 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00057f52 mov r2, r7 | r2 = r7;
0x00057f54 ldrsh.w r1, [r5, 0x28] | r1 = *((r5 + 0x28));
0x00057f58 ldr r3, [r0] | r3 = *(r0);
0x00057f5a adds r1, 3 | r1 += 3;
0x00057f5c ldr r7, [r3, 0x38] | r7 = *((r3 + 0x38));
0x00057f5e movs r3, 5 | r3 = 5;
0x00057f60 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00057f62 ldr.w r8, [sb, 0xe8] | r8 = *((sb + 0xe8));
| }
0x00057f66 movs r3, 1 | r3 = 1;
0x00057f68 strb.w r3, [r5, 0x2b] | *((r5 + 0x2b)) = r3;
| }
0x00057f6c ldrb.w r3, [r8, 0x2e] | r3 = *((r8 + 0x2e));
0x00057f70 cmp r3, 0 |
| if (r3 != 0) {
0x00057f72 bne.w 0x581c0 | goto label_53;
| }
0x00057f76 ldrb.w r1, [r8, 0x2b] | r1 = *((r8 + 0x2b));
0x00057f7a cmp r1, 0 |
| if (r1 != 0) {
0x00057f7c bne 0x58070 | goto label_54;
| }
0x00057f7e ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x00057f82 movs r3, 0xa | r3 = 0xa;
0x00057f84 movs r2, 1 | r2 = 1;
0x00057f86 ldr r5, [r0] | r5 = *(r0);
0x00057f88 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x00057f8a blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00057f8c mov r5, r0 | r5 = r0;
0x00057f8e cmp r0, 0 |
| if (r0 == 0) {
0x00057f90 beq 0x58070 | goto label_54;
| }
| label_17:
0x00057f92 movw r3, 0x205 | r3 = 0x205;
0x00057f96 cmp r5, r3 |
| if (r5 != r3) {
0x00057f98 bne.w 0x57de4 | goto label_4;
| }
| label_19:
0x00057f9c ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00057f9e cmp r3, 0 |
| if (r3 != 0) {
0x00057fa0 bne 0x58060 | goto label_55;
| }
0x00057fa2 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00057fa4 movs r5, 5 | r5 = 5;
0x00057fa6 cmp r2, 0 |
| if (r2 == 0) {
0x00057fa8 beq.w 0x57e18 | goto label_6;
| }
0x00057fac ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x00057fae str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00057fb0 ldr r5, [r0, 0x14] | r5 = *((r0 + 0x14));
0x00057fb2 bl 0x1297c | fcn_0001297c (r0);
0x00057fb6 ldr.w r3, [r5, 0xe4] | r3 = *((r5 + 0xe4));
0x00057fba ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00057fbc cmp r3, 0 |
| if (r3 == 0) {
0x00057fbe beq.w 0x582c6 | goto label_56;
| }
| label_25:
0x00057fc2 movs r5, 5 | r5 = 5;
0x00057fc4 b 0x57e12 | goto label_7;
| label_48:
0x00057fc6 mov r0, r7 | r0 = r7;
0x00057fc8 bl 0x56100 | fcn_00056100 (r0);
0x00057fcc b 0x57e0c | goto label_8;
| label_42:
0x00057fce mov r0, r6 | r0 = r6;
0x00057fd0 bl 0xa14c | fcn_0000a14c (r0);
0x00057fd4 b 0x57d52 | goto label_9;
| label_46:
0x00057fd6 ldrb r3, [r6, 8] | r3 = *((r6 + 8));
0x00057fd8 mov r7, sl | r7 = sl;
| if (r3 == 0) {
0x00057fda cbnz r3, 0x57ff6 |
0x00057fdc ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00057fde adds r3, 1 | r3++;
0x00057fe0 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x00057fe2 ldrb r3, [r6, 9] | r3 = *((r6 + 9));
| if (r3 == 0) {
0x00057fe4 cbz r3, 0x57ff6 | goto label_57;
| }
0x00057fe6 movs r3, 1 | r3 = 1;
0x00057fe8 strb.w r3, [r6, 0x28] | *((r6 + 0x28)) = r3;
0x00057fec ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x00057fee str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
0x00057ff0 add.w r3, r6, 0x20 | r3 = r6 + 0x20;
0x00057ff4 str r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
| }
| label_57:
0x00057ff6 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r7 != 0) {
0x00057ff8 cbnz r7, 0x58018 | goto label_58;
| }
0x00057ffa movs r2, 1 | r2 = 1;
0x00057ffc strb r2, [r6, 8] | *((r6 + 8)) = r2;
| if (r3 == 0) {
0x00057ffe cbnz r3, 0x58002 |
0x00058000 strb r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
| }
| label_31:
0x00058002 cmp.w fp, 0 |
| if (fp == 0) {
0x00058006 beq.w 0x57daa | goto label_10;
| }
0x0005800a ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0005800c ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0005800e ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00058010 rev r3, r3 | r3 = SWAP32 (r3);
0x00058012 str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x00058016 b 0x57daa | goto label_10;
| label_58:
0x00058018 movs r2, 2 | r2 = 2;
0x0005801a cmp r3, 1 |
0x0005801c strb r2, [r6, 8] | *((r6 + 8)) = r2;
0x0005801e ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00058020 ldr.w r8, [r4, 0xc] | r8 = *((r4 + 0xc));
0x00058024 it ls |
| if (r3 > 1) {
0x00058026 strbls r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
| }
0x00058028 cmp r7, 1 |
0x0005802a bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x0005802e str r6, [r4, 0x50] | *((r4 + 0x50)) = r6;
0x00058030 lsl.w r3, r3, 0x10 | r3 <<= 0x10;
0x00058034 ldr.w r1, [r8, 0x38] | r1 = *((r8 + 0x38));
0x00058038 ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x0005803a lsr.w r3, r3, 0x10 | r3 >>= 0x10;
0x0005803e it gt |
| if (r7 <= 1) {
0x00058040 orrgt r3, r3, 0x40 | r3 |= 0x40;
| }
0x00058044 strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00058046 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x00058048 rev r3, r3 | r3 = SWAP32 (r3);
0x0005804a cmp r2, r3 |
| if (r2 != r3) {
0x0005804c bne 0x580ac | goto label_59;
| }
0x0005804e cmp.w fp, 0 |
| if (fp == 0) {
0x00058052 beq.w 0x57d92 | goto label_11;
| }
0x00058056 ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x00058058 rev r3, r3 | r3 = SWAP32 (r3);
0x0005805a str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x0005805e b 0x57d92 | goto label_11;
| label_55:
0x00058060 movw r5, 0x205 | r5 = 0x205;
0x00058064 b 0x57d42 | goto label_2;
| label_52:
0x00058066 ldrb.w r3, [r8, 0x2e] | r3 = *((r8 + 0x2e));
0x0005806a cmp r3, 0 |
| if (r3 != 0) {
0x0005806c bne.w 0x581c0 | goto label_53;
| }
| label_54:
0x00058070 ldr.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x00058074 movs r5, 1 | r5 = 1;
0x00058076 strb.w r5, [r8, 0x2c] | *((r8 + 0x2c)) = r5;
0x0005807a movs r2, 0x30 | r2 = 0x30;
0x0005807c add.w r0, r8, 0x34 | r0 = r8 + 0x34;
0x00058080 ldr r1, [r3] | r1 = *(r3);
0x00058082 blx 0x8214 | r0 = sysconf ();
0x00058086 cmp r0, 0 |
| if (r0 != 0) {
0x00058088 bne.w 0x581d8 | goto label_60;
| }
| label_16:
0x0005808c ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x00058090 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00058094 str.w r3, [sb, 0x28] | __asm ("str.w r3, [sb, 0x28]");
0x00058098 vstr d16, [sb, 0x50] | __asm ("vstr d16, [sb, 0x50]");
0x0005809c vdup.32 d16, r3 | __asm ("vdup.32 d16, r3");
0x000580a0 movs r3, 2 | r3 = 2;
0x000580a2 strb.w r3, [sb, 0x11] | *((sb + 0x11)) = r3;
0x000580a6 vstr d16, [sb, 0x20] | __asm ("vstr d16, [sb, 0x20]");
0x000580aa b 0x57dd6 | goto label_12;
| label_59:
0x000580ac ldr.w r0, [r8, 0x48] | r0 = *((r8 + 0x48));
0x000580b0 bl 0x5480c | r0 = fcn_0005480c (r0);
0x000580b4 mov r5, r0 | r5 = r0;
0x000580b6 cmp r0, 0 |
| if (r0 != 0) {
0x000580b8 bne.w 0x57d42 | goto label_2;
| }
0x000580bc ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x000580be ldr.w r2, [r8, 0x38] | r2 = *((r8 + 0x38));
0x000580c2 rev r3, r3 | r3 = SWAP32 (r3);
0x000580c4 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x000580c6 cmp.w fp, 0 |
| if (fp == 0) {
0x000580ca beq.w 0x57d92 | goto label_11;
| }
0x000580ce ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000580d0 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x000580d2 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000580d4 rev r3, r3 | r3 = SWAP32 (r3);
0x000580d6 str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x000580da b 0x57d92 | goto label_11;
| label_50:
0x000580dc ldr r1, [pc, 0xdc] |
0x000580de movs r2, 0x10 | r2 = 0x10;
0x000580e0 mov r0, r8 | r0 = r8;
0x000580e2 str r3, [sp, 0x14] | var_14h = r3;
0x000580e4 add r1, pc | r1 = 0xb02a4;
0x000580e6 addw r1, r1, 0x9f8 | __asm ("addw r1, r1, aav.0x000000ff");
0x000580ea blx 0x8214 | r0 = sysconf ();
| if (r0 == 0) {
0x000580ee cbnz r0, 0x58116 |
0x000580f0 ldrb.w r2, [r8, 0x12] | r2 = *((r8 + 0x12));
0x000580f4 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000580f6 cmp r2, 2 |
0x000580f8 ittt hi |
| if (r2 > 2) {
0x000580fa ldrhhi r2, [r4, 0x18] | __asm ("ldrhhi r2, [r4, 0x18]");
| }
| if (r2 <= 2) {
0x000580fc orrhi r2, r2, 1 | r2 |= 1;
| }
| if (r2 > 2) {
0x00058100 strh r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
| }
0x00058102 ldrb.w r2, [r8, 0x13] | r2 = *((r8 + 0x13));
0x00058106 cmp r2, 2 |
| if (r2 > 2) {
0x00058108 bhi 0x58116 | goto label_23;
| }
| if (r2 == 2) {
0x0005810a beq 0x581fc | goto label_61;
| }
| label_21:
0x0005810c ldrb.w r3, [r8, 0x15] | r3 = *((r8 + 0x15));
0x00058110 cmp r3, 0x40 |
| if (r3 == 0x40) {
0x00058112 beq.w 0x58236 | goto label_62;
| }
| }
| label_23:
0x00058116 mov.w r8, 0x1a | r8 = 0x1a;
0x0005811a mov r5, r8 | r5 = r8;
| label_27:
0x0005811c ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x0005811e ldr r7, [r0, 0x14] | r7 = *((r0 + 0x14));
0x00058120 bl 0x1297c | fcn_0001297c (r0);
0x00058124 ldr.w r3, [r7, 0xe4] | r3 = *((r7 + 0xe4));
0x00058128 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0005812a cmp r3, 0 |
| if (r3 == 0) {
0x0005812c beq 0x581f4 | goto label_63;
| }
| label_20:
0x0005812e movs r3, 0 | r3 = 0;
0x00058130 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00058132 b 0x57de8 | goto label_13;
| label_49:
0x00058134 ldrb.w r0, [r8, 0x19] | r0 = *((r8 + 0x19));
0x00058138 ldrb.w r1, [r8, 0x5d] | r1 = *((r8 + 0x5d));
0x0005813c cmp r0, r1 |
| if (r0 != r1) {
0x0005813e bne.w 0x57e8c | goto label_14;
| }
0x00058142 ldrb.w r0, [r8, 0x1a] | r0 = *((r8 + 0x1a));
0x00058146 ldrb.w r1, [r8, 0x5e] | r1 = *((r8 + 0x5e));
0x0005814a cmp r0, r1 |
| if (r0 != r1) {
0x0005814c bne.w 0x57e8c | goto label_14;
| }
0x00058150 ldrb.w r0, [r8, 0x1b] | r0 = *((r8 + 0x1b));
0x00058154 ldrb.w r1, [r8, 0x5f] | r1 = *((r8 + 0x5f));
0x00058158 cmp r0, r1 |
0x0005815a itt eq |
| if (r0 == r1) {
0x0005815c reveq r2, r2 | __asm ("reveq r2, r2");
| }
| if (r0 == r1) {
0x0005815e streq r2, [sp, 0xc] | var_ch = r2;
| goto label_64;
| }
| if (r0 != r1) {
| label_64:
0x00058160 bne.w 0x57e8c | goto label_14;
| }
0x00058164 b 0x57e90 | goto label_15;
| label_44:
0x00058166 mov r0, sb | r0 = sb;
0x00058168 bl 0x16218 | r0 = fcn_00016218 (r0, r1);
0x0005816c mov r5, r0 | r5 = r0;
0x0005816e b 0x57d42 | goto label_2;
| label_51:
0x00058170 movs r1, 2 | r1 = 2;
0x00058172 mov r0, sb | r0 = sb;
0x00058174 bl 0x9f44 | fcn_00009f44 (r0, r1);
0x00058178 cmp.w sl, 1 |
0x0005817c mov r5, r0 | r5 = r0;
0x0005817e ite le |
| if (sl > 1) {
0x00058180 movle r3, 0 | r3 = 0;
| }
| if (sl <= 1) {
0x00058182 movgt r3, 1 | r3 = 1;
| }
0x00058184 cmp r0, 0 |
0x00058186 it ne |
| if (r0 == 0) {
0x00058188 movne r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x0005818a cbnz r3, 0x58194 | goto label_65;
| }
0x0005818c cmp r5, 0 |
| if (r5 == 0) {
0x0005818e beq.w 0x5808c | goto label_16;
| }
0x00058192 b 0x57f92 | goto label_17;
| label_65:
0x00058194 movs r1, 4 | r1 = 4;
0x00058196 mov r0, sb | r0 = sb;
0x00058198 bl 0x15bf4 | r0 = fcn_00015bf4 (r0, r1);
0x0005819c mov r5, r0 | r5 = r0;
0x0005819e cmp r5, 0 |
| if (r5 == 0) {
0x000581a0 beq.w 0x5808c | goto label_16;
| }
0x000581a4 b 0x57f92 | goto label_17;
| label_53:
0x000581c0 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000581c2 cmp r3, 0 |
| if (r3 != 0) {
0x000581c4 bne.w 0x57d40 | goto label_18;
| }
0x000581c8 ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x000581ca cmp r7, 0 |
| if (r7 == 0) {
0x000581cc beq.w 0x57d40 | goto label_18;
| }
0x000581d0 mov.w r8, 8 | r8 = 8;
0x000581d4 mov r5, r8 | r5 = r8;
0x000581d6 b 0x57df4 | goto label_5;
| label_60:
0x000581d8 ldrb.w r1, [r8, 0x2b] | r1 = *((r8 + 0x2b));
| if (r1 == 0) {
0x000581dc cbnz r1, 0x581ec |
0x000581de ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x000581e2 mov r2, r5 | r2 = r5;
0x000581e4 movs r3, 9 | r3 = 9;
0x000581e6 ldr r5, [r0] | r5 = *(r0);
0x000581e8 ldr r5, [r5, 0x38] | r5 = *((r5 + 0x38));
0x000581ea blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
| }
0x000581ec movs r3, 0 | r3 = 0;
0x000581ee strb.w r3, [r8, 0x2c] | *((r8 + 0x2c)) = r3;
0x000581f2 b 0x57f9c | goto label_19;
| label_63:
0x000581f4 mov r0, r7 | r0 = r7;
0x000581f6 bl 0x56100 | fcn_00056100 (r0);
0x000581fa b 0x5812e | goto label_20;
| label_61:
0x000581fc ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x000581fe ands r2, r2, 0x20 | r2 &= 0x20;
| if (r2 != r2) {
0x00058202 bne 0x5810c | goto label_21;
| }
0x00058204 mov r0, r3 | r0 = r3;
0x00058206 add r1, sp, 0x28 | r1 += var_28h;
0x00058208 str r2, [sp, 0x28] | var_28h = r2;
0x0005820a bl 0x1cfac | r0 = fcn_0001cfac (r0, r1);
0x0005820e cmp r0, 0 |
| if (r0 != 0) {
0x00058210 bne.w 0x58342 | goto label_66;
| }
0x00058214 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00058216 cmp r3, 0 |
| if (r3 != 0) {
0x00058218 bne.w 0x5810c | goto label_21;
| }
0x0005821c ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x0005821e ldr r5, [r0, 0x14] | r5 = *((r0 + 0x14));
0x00058220 bl 0x1297c | fcn_0001297c (r0);
0x00058224 ldr.w r3, [r5, 0xe4] | r3 = *((r5 + 0xe4));
0x00058228 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0005822a cmp r3, 0 |
| if (r3 == 0) {
0x0005822c beq.w 0x5834e | goto label_67;
| }
| label_28:
0x00058230 ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x00058232 movs r5, 0 | r5 = 0;
0x00058234 b 0x57d18 | goto label_22;
| label_62:
0x00058236 ldrb.w r3, [r8, 0x16] | r3 = *((r8 + 0x16));
0x0005823a cmp r3, 0x20 |
| if (r3 != 0x20) {
0x0005823c bne.w 0x58116 | goto label_23;
| }
0x00058240 ldrb.w r3, [r8, 0x17] | r3 = *((r8 + 0x17));
0x00058244 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x00058246 bne.w 0x58116 | goto label_23;
| }
0x0005824a ldrb.w r2, [r8, 0x11] | r2 = *((r8 + 0x11));
0x0005824e ldrb.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00058252 lsls r2, r2, 0x10 | r2 <<= 0x10;
0x00058254 orr.w r2, r2, r3, lsl 8 | r2 |= (r3 << 8);
0x00058258 subs r3, r2, 1 | r3 = r2 - 1;
0x0005825a tst r3, r2 |
| if ((r3 & r2) != 0) {
0x0005825c bne.w 0x58116 | goto label_23;
| }
0x00058260 mvn r1, 0x100 | r1 = ~0x100;
0x00058264 adds r3, r2, r1 | r3 = r2 + r1;
0x00058266 cmp.w r3, 0xff00 |
| if (r3 >= 0xff00) {
0x0005826a bhs.w 0x58116 | goto label_23;
| }
0x0005826e ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00058270 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x00058272 orr r3, r3, 2 | r3 |= 2;
0x00058276 strh r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00058278 cmp r2, r1 |
0x0005827a ldrb.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0005827e str r3, [sp, 0x14] | var_14h = r3;
0x00058280 sub.w r3, r2, r3 | r3 = r2 - r3;
| if (r2 != r1) {
0x00058284 bne 0x582ce | goto label_68;
| }
0x00058286 ldrd r1, r2, [sp, 0xc] | __asm ("ldrd r1, r2, [var_10h]");
0x0005828a cmp r2, r1 |
| if (r2 < r1) {
0x0005828c bhs 0x582a2 |
0x0005828e ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00058290 ldr r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x00058292 movs r2, 1 |
0x00058294 movt r2, 0x1000 | r2 = 0x10000001;
0x00058298 ands r2, r1 | r2 &= r1;
0x0005829a cmp r2, 1 |
| if (r2 != 1) {
0x0005829c bne 0x5831e | goto label_69;
| }
0x0005829e ldr r2, [sp, 0x10] | r2 = var_10h;
0x000582a0 str r2, [sp, 0xc] | var_ch = r2;
| }
0x000582a2 cmp.w r3, 0x1e0 |
| if (r3 <= 0x1e0) {
0x000582a6 blo.w 0x58116 | goto label_23;
| }
0x000582aa str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x000582ac ldr.w r2, [r8, 0x34] | r2 = *((r8 + 0x34));
0x000582b0 subs r2, 0 |
0x000582b2 it ne |
| if (r2 == 0) {
0x000582b4 movne r2, 1 | r2 = 1;
| }
0x000582b6 strb r2, [r4, 0x11] | *((r4 + 0x11)) = r2;
0x000582b8 ldr.w r2, [r8, 0x40] | r2 = *((r8 + 0x40));
0x000582bc subs r2, 0 |
0x000582be it ne |
| if (r2 == 0) {
0x000582c0 movne r2, 1 | r2 = 1;
| }
0x000582c2 strb r2, [r4, 0x12] | *((r4 + 0x12)) = r2;
0x000582c4 b 0x57eb6 | goto label_24;
| label_56:
0x000582c6 mov r0, r5 | r0 = r5;
0x000582c8 bl 0x56100 | fcn_00056100 (r0);
0x000582cc b 0x57fc2 | goto label_25;
| label_68:
0x000582ce ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x000582d0 strd r2, r3, [sp, 0xc] | __asm ("strd r2, r3, [var_10h]");
0x000582d4 ldr r5, [r0, 0x14] | r5 = *((r0 + 0x14));
0x000582d6 bl 0x1297c | fcn_0001297c (r0);
0x000582da ldrd r2, r3, [sp, 0xc] | __asm ("ldrd r2, r3, [var_10h]");
0x000582de ldr.w r1, [r5, 0xe4] | r1 = *((r5 + 0xe4));
0x000582e2 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
| if (r1 == 0) {
0x000582e4 cbz r1, 0x58312 | goto label_70;
| }
| label_26:
0x000582e6 ldr r0, [r4, 0x54] | r0 = *((r4 + 0x54));
0x000582e8 strd r2, r3, [r4, 0x24] | __asm ("strd r2, r3, [r4, 0x24]");
| if (r0 != 0) {
0x000582ec cbz r0, 0x582fa |
0x000582ee subs r0, 4 | r0 -= 4;
0x000582f0 str r0, [r4, 0x54] | *((r4 + 0x54)) = r0;
0x000582f2 bl 0xf04c | fcn_0000f04c (r0);
0x000582f6 movs r3, 0 | r3 = 0;
0x000582f8 str r3, [r4, 0x54] | *((r4 + 0x54)) = r3;
| }
0x000582fa mov r1, r4 | r1 = r4;
0x000582fc ldr r2, [sp, 0x14] | r2 = var_14h;
0x000582fe ldr r0, [r1], 0x24 | r0 = *(r1);
| r1 += 0x24;
0x00058302 bl 0x1b2b0 | r0 = fcn_0001b2b0 (r0, r1, r2);
0x00058306 mov r5, r0 | r5 = r0;
0x00058308 cmp r0, 0 |
| if (r0 != 0) {
0x0005830a bne.w 0x57de4 | goto label_4;
| }
0x0005830e ldr r7, [r4, 0xc] | r7 = *((r4 + 0xc));
0x00058310 b 0x57d18 | goto label_22;
| label_70:
0x00058312 mov r0, r5 | r0 = r5;
0x00058314 bl 0x56100 | fcn_00056100 (r0);
0x00058318 ldrd r2, r3, [sp, 0xc] | __asm ("ldrd r2, r3, [var_10h]");
0x0005831c b 0x582e6 | goto label_26;
| label_69:
0x0005831e blx 0x83b8 | strerror_r ();
0x00058322 ldr r2, [pc, 0x34] |
0x00058324 adds r0, 0x14 | r0 += 0x14;
0x00058326 ldr r1, [pc, 0x34] |
0x00058328 movw r3, 0x120a |
0x0005832c str r0, [sp] | *(sp) = r0;
0x0005832e movt r3, 1 | r3 = 0x1120a;
0x00058332 add r2, pc | r2 = 0xb0690;
0x00058334 movs r0, 0xb | r0 = 0xb;
0x00058336 add r1, pc | r1 = 0xb0698;
0x00058338 movs r5, 0xb | r5 = 0xb;
0x0005833a mov r8, r5 | r8 = r5;
0x0005833c blx 0x8b60 | fcn_00008b60 ();
0x00058340 b 0x5811c | goto label_27;
| label_66:
0x00058342 uxtb.w r8, r0 | r8 = (int8_t) r0;
0x00058346 mov r5, r0 | r5 = r0;
0x00058348 b 0x5811c | goto label_27;
| label_43:
0x0005834a blx 0x883c | fcn_0000883c ();
| label_67:
0x0005834e mov r0, r5 | r0 = r5;
0x00058350 bl 0x56100 | fcn_00056100 (r0);
0x00058354 b 0x58230 | goto label_28;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x59168 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00059168 () | void fcn_00059168 (int16_t arg_60h, int16_t arg_64h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ah;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00059168 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005916c mov r6, r0 | r6 = r0;
0x0005916e ldr r0, [pc, 0x3ec] |
0x00059170 mov r5, r1 | r5 = r1;
0x00059172 sub sp, 0x3c |
0x00059174 ldr r1, [pc, 0x3e8] | r1 = *(0x59560);
0x00059176 ldr.w sl, [r5, 4] | sl = *((r5 + 4));
0x0005917a add r0, pc | r0 = 0xb26dc;
0x0005917c ldr.w r8, [r6] | r8 = *(r6);
0x00059180 ldr r1, [r0, r1] |
0x00059182 cmp.w sl, 2 |
0x00059186 ldr r1, [r1] | r1 = *(0xb26dc);
0x00059188 str r1, [sp, 0x34] | var_34h = r1;
0x0005918a mov.w r1, 0 | r1 = 0;
0x0005918e str r3, [sp, 8] | var_8h = r3;
| if (sl < 2) {
0x00059190 bls.w 0x59296 | goto label_15;
| }
0x00059194 mov r7, r2 | r7 = r2;
0x00059196 ldrb.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x0005919a ldr.w sb, [r5, 0x48] | sb = *((r5 + 0x48));
0x0005919e cmp r2, 0 |
| if (r2 != 0) {
0x000591a0 bne 0x59280 | goto label_16;
| }
0x000591a2 ldrh.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x000591a6 lsls r1, r2, 0x1e | r1 = r2 << 0x1e;
| if (r1 < r2) {
0x000591a8 bmi.w 0x592bc | goto label_17;
| }
| label_0:
0x000591ac ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x000591ae mov r0, r8 | r0 = r8;
0x000591b0 ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x000591b2 eor r4, r3, 1 | r4 = r3 ^ 1;
0x000591b6 and r4, r4, 1 | r4 &= 1;
0x000591ba ands.w r4, r4, r2, lsr 3 | r4 &= (r2 >> 3);
0x000591be bic r2, r2, 8 | r2 = BIT_MASK (r2, 8);
0x000591c2 strh.w r2, [sb, 0x1c] | *((sb + 0x1c)) = r2;
0x000591c6 itet ne |
| if (r4 == r4) {
0x000591c8 ldrne r3, [sb, 0x18] | r3 = *((sb + 0x18));
| }
| if (r4 == r4) {
0x000591cc strne r4, [sp, 0xc] | var_ch = r4;
| }
| if (r4 != r4) {
0x000591ce str r3, [sp, 0xc] | var_ch = r3;
| }
0x000591d0 bl 0x14fcc | r0 = fcn_00014fcc (r0, r1);
0x000591d4 mov fp, r0 |
0x000591d6 cmp r0, 0 |
| if (r0 == 0) {
0x000591d8 beq 0x592da | goto label_18;
| }
0x000591da ldrsh.w r1, [r0, 0x1e] | r1 = *((r0 + 0x1e));
0x000591de cmp r1, 1 |
| if (r1 > 1) {
0x000591e0 bgt.w 0x59412 | goto label_19;
| }
0x000591e4 ldrh r1, [r0, 0x1c] | r1 = *((r0 + 0x1c));
0x000591e6 ldrh.w ip, [sb, 0x1c] | ip = *((sb + 0x1c));
0x000591ea and r1, r1, 8 | r1 &= 8;
0x000591ee orr.w r1, r1, ip | r1 |= ip;
0x000591f2 strh.w r1, [sb, 0x1c] | *((sb + 0x1c)) = r1;
0x000591f6 ldrb.w r1, [r8, 0xc] | r1 = *((r8 + 0xc));
0x000591fa cmp r1, 0 |
| if (r1 != 0) {
0x000591fc bne 0x592ce | goto label_20;
| }
0x000591fe bl 0x9db4 | fcn_00009db4 (r0);
| label_2:
0x00059202 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00059206 mov r0, sb | r0 = sb;
0x00059208 ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x0005920a mov r4, r3 | r4 = r3;
0x0005920c bl 0xfb54 | fcn_0000fb54 (r0, r1);
0x00059210 ldrh.w r1, [sb, 0x1c] | r1 = *((sb + 0x1c));
0x00059214 tst.w r1, 0x11 |
| if ((r1 & 0x11) != 0) {
0x00059218 beq 0x5922e |
| label_3:
0x0005921a movw r0, 0xffef | r0 = 0xffef;
0x0005921e lsls r2, r1, 0x1f | r2 = r1 << 0x1f;
0x00059220 and.w r0, r0, r1 | r0 &= r1;
0x00059224 it pl |
| if (r2 >= r1) {
0x00059226 strhpl r0, [sb, 0x1c] | __asm ("strhpl r0, [sb, 0x1c]");
| }
| if (r2 < r1) {
0x0005922a bmi.w 0x59462 | goto label_21;
| }
| }
| label_8:
0x0005922e ldrb.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00059232 cmp r3, 0 |
0x00059234 it ne |
| if (r3 != 0) {
0x00059236 cmpne fp, 0 | __asm ("cmpne fp, 0");
| }
| if (r3 != 0) {
0x0005923a bne.w 0x59434 | goto label_22;
| }
| label_4:
0x0005923e ldr r1, [sp, 0xc] | r1 = var_ch;
0x00059240 cmp r1, 0 |
| if (r1 == 0) {
0x00059242 beq 0x5930a | goto label_23;
| }
0x00059244 ldr.w r4, [r8, 0xdc] | r4 = *((r8 + 0xdc));
0x00059248 movs r3, 0 | r3 = 0;
0x0005924a add r2, sp, 0x18 | r2 += var_18h;
0x0005924c mov r0, r8 | r0 = r8;
0x0005924e mov sb, r1 | sb = r1;
0x00059250 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00059252 mov fp, r0 |
0x00059254 cmp r0, 0 |
| if (r0 == 0) {
0x00059256 beq 0x592f4 | goto label_24;
| }
0x00059258 ldr.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x0005925c cmp sb, r3 |
| if (sb < r3) {
0x0005925e bls.w 0x59492 | goto label_25;
| }
| do {
| label_1:
0x00059262 ldr r2, [pc, 0x300] |
0x00059264 ldr r3, [pc, 0x2f8] | r3 = *(0x59560);
0x00059266 add r2, pc | r2 = 0xb27d0;
0x00059268 ldr r3, [r2, r3] | r3 = *(0xb27d0);
0x0005926a ldr r2, [r3] | r2 = *(0xb27d0);
0x0005926c ldr r3, [sp, 0x34] | r3 = var_34h;
0x0005926e eors r2, r3 | r2 ^= r3;
0x00059270 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00059274 bne.w 0x59558 | goto label_26;
| }
0x00059278 mov r0, fp | r0 = fp;
0x0005927a add sp, 0x3c |
0x0005927c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x00059280 mov r0, sb | r0 = sb;
0x00059282 bl 0x5480c | r0 = fcn_0005480c (r0);
0x00059286 mov fp, r0 |
0x00059288 cmp r0, 0 |
0x0005928a bne 0x59262 |
| } while (r0 != 0);
0x0005928c ldrh.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x00059290 lsls r1, r2, 0x1e | r1 = r2 << 0x1e;
| if (r1 >= r2) {
0x00059292 bpl 0x591ac | goto label_0;
| }
0x00059294 b 0x592bc | goto label_17;
| label_15:
0x00059296 blx 0x83b8 | strerror_r ();
0x0005929a ldr r2, [pc, 0x2cc] |
0x0005929c add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x000592a0 ldr r1, [pc, 0x2c8] |
0x000592a2 movw r3, 0x13f7 |
0x000592a6 movt r3, 1 | r3 = 0x113f7;
0x000592a8 lsls r1, r0, 0xc | r1 = r0 << 0xc;
0x000592aa movs r0, 0xb | r0 = 0xb;
0x000592ac add r2, pc | r2 = 0xb281a;
0x000592ae str r4, [sp] | *(sp) = r4;
0x000592b0 add r1, pc | r1 = 0xb2820;
0x000592b2 blx 0x8b60 | fcn_00008b60 ();
| label_7:
0x000592b6 mov.w fp, 0xb |
0x000592ba b 0x59262 | goto label_1;
| label_17:
0x000592bc mov r0, sb | r0 = sb;
0x000592be bl 0x19e70 | r0 = fcn_00019e70 (r0);
0x000592c2 mov fp, r0 |
0x000592c4 cmp r0, 0 |
| if (r0 != 0) {
0x000592c6 bne 0x59262 | goto label_1;
| }
0x000592c8 ldrh.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x000592cc b 0x591ac | goto label_0;
| label_20:
0x000592ce ldr.w r1, [r8, 0x1c] | r1 = *((r8 + 0x1c));
0x000592d2 adds r1, 1 | r1++;
0x000592d4 bl 0xfb54 | fcn_0000fb54 (r0, r1);
0x000592d8 b 0x59202 | goto label_2;
| label_18:
0x000592da ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x000592de mov r0, sb | r0 = sb;
0x000592e0 ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x000592e2 mov r4, r3 | r4 = r3;
0x000592e4 bl 0xfb54 | fcn_0000fb54 (r0, r1);
0x000592e8 ldrh.w r1, [sb, 0x1c] | r1 = *((sb + 0x1c));
0x000592ec tst.w r1, 0x11 |
| if ((r1 & 0x11) != 0) {
0x000592f0 bne 0x5921a | goto label_3;
| }
0x000592f2 b 0x5923e | goto label_4;
| label_24:
0x000592f4 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000592f6 ldrh r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x000592f8 tst.w r3, 0x11 |
| if ((r3 & 0x11) != 0) {
0x000592fc bne.w 0x59474 | goto label_27;
| }
0x00059300 orr r2, r3, 8 | r2 = r3 | 8;
| label_9:
0x00059304 strh r2, [r0, 0x1c] | *((r0 + 0x1c)) = r2;
| label_10:
0x00059306 bl 0x129c4 | fcn_000129c4 (r0);
| label_23:
0x0005930a ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x0005930c str r3, [r5, 4] | *((r5 + 4)) = r3;
0x0005930e movs r3, 0 | r3 = 0;
0x00059310 str r3, [sp, 0x14] | var_14h = r3;
0x00059312 and r3, r7, 0xfb | r3 = r7 & 0xfb;
0x00059316 cmp r3, 1 |
| if (r3 == 1) {
0x00059318 beq 0x593fa | goto label_28;
| }
0x0005931a ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x0005931c ldr r1, [r3] | r1 = *(r3);
0x0005931e cmp r1, 0 |
| if (r1 != 0) {
0x00059320 bne.w 0x59444 | goto label_29;
| }
| label_6:
0x00059324 ldr r1, [sp, 8] | r1 = var_8h;
0x00059326 movs r3, 0 | r3 = 0;
0x00059328 add r2, sp, 0x10 | r2 += var_10h;
0x0005932a mov r0, r6 | r0 = r6;
0x0005932c bl 0xa33c | r0 = fcn_0000a33c (r0, r1, r2);
0x00059330 mov fp, r0 |
0x00059332 str r0, [sp, 0x14] | var_14h = r0;
0x00059334 cmp r0, 0 |
| if (r0 != 0) {
0x00059336 bne 0x59262 | goto label_1;
| }
0x00059338 ldr r4, [sp, 0x10] | r4 = var_10h;
0x0005933a ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0005933c bl 0x5480c | r0 = fcn_0005480c (r0);
0x00059340 mov fp, r0 |
0x00059342 str r0, [sp, 0x14] | var_14h = r0;
0x00059344 cmp r0, 0 |
| if (r0 != 0) {
0x00059346 bne.w 0x594d2 | goto label_30;
| }
0x0005934a cmp r7, 4 |
| if (r7 == 4) {
0x0005934c beq.w 0x594a2 | goto label_31;
| }
0x00059350 ldrb r3, [r4] | r3 = *(r4);
0x00059352 cmp r3, 0 |
| if (r3 == 0) {
0x00059354 beq.w 0x5950c | goto label_32;
| }
| label_13:
0x00059358 ldrh.w r8, [r4, 0x18] | r8 = *((r4 + 0x18));
0x0005935c cmp.w r8, 0 |
| if (r8 == 0) {
0x00059360 beq.w 0x594e6 | goto label_33;
| }
0x00059364 add r5, sp, 0x18 | r5 += var_18h;
0x00059366 b 0x5937c |
| while (r7 != 3) {
0x00059368 ldr r2, [r0, r3] | r2 = *((r0 + r3));
0x0005936a rev r2, r2 | r2 = SWAP32 (r2);
0x0005936c cmp sl, r2 |
| if (sl == r2) {
0x0005936e beq.w 0x594da | goto label_34;
| }
| label_5:
0x00059372 add.w fp, fp, 1 |
0x00059376 cmp r8, fp |
| if (r8 == fp) {
0x00059378 beq.w 0x594e6 | goto label_33;
| }
0x0005937c ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0005937e cmp r7, 3 |
0x00059380 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x00059382 ldrh.w r2, [r3, fp, lsl 1] | offset_0 = fp << 1;
| r2 = *((r3 + offset_0));
0x00059386 ldrh r3, [r4, 0x1a] | r3 = *((r4 + 0x1a));
0x00059388 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x0005938a and.w r3, r3, r2 | r3 &= r2;
0x0005938e add.w sb, r0, r3 | sb = r0 + r3;
0x00059392 bne 0x59368 |
| }
0x00059394 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00059396 mov r2, r5 | r2 = r5;
0x00059398 mov r1, sb | r1 = sb;
0x0005939a mov r0, r4 | r0 = r4;
0x0005939c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005939e ldrh.w r2, [sp, 0x28] | r2 = var_28h;
0x000593a2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000593a4 cmp r2, r3 |
| if (r2 >= r3) {
0x000593a6 bhs 0x59372 | goto label_5;
| }
0x000593a8 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x000593aa ldrh.w r2, [sp, 0x2a] | r2 = var_2ah;
0x000593ae ldr r1, [r3, 0x28] | r1 = *((r3 + 0x28));
0x000593b0 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000593b2 add r3, r1 | r3 += r1;
0x000593b4 add.w r1, sb, r2 | r1 = sb + r2;
0x000593b8 cmp r1, r3 |
| if (r1 > r3) {
0x000593ba bhi.w 0x59532 | goto label_35;
| }
0x000593be subs r2, 4 | r2 -= 4;
0x000593c0 ldr.w r3, [sb, r2] | r3 = *((sb + r2));
0x000593c4 rev r3, r3 | r3 = SWAP32 (r3);
0x000593c6 cmp sl, r3 |
| if (sl != r3) {
0x000593c8 bne 0x59372 | goto label_5;
| }
0x000593ca mov r3, r2 | r3 = r2;
0x000593cc ldr r2, [sp, 0x60] | r2 = *(arg_60h);
0x000593ce cmp r8, fp |
0x000593d0 rev r2, r2 | r2 = SWAP32 (r2);
0x000593d2 str.w r2, [sb, r3] | __asm ("str.w r2, [sb, r3]");
| if (r8 == fp) {
0x000593d6 beq.w 0x594f8 | goto label_36;
| }
| label_11:
0x000593da movs r3, 0 | r3 = 0;
0x000593dc ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x000593de str r3, [sp, 0x14] | var_14h = r3;
0x000593e0 bl 0x129c4 | fcn_000129c4 (r0);
| label_14:
0x000593e4 add r4, sp, 0x14 | r4 += var_14h;
0x000593e6 ldr r3, [sp, 8] | r3 = var_8h;
0x000593e8 ldr r1, [sp, 0x60] | r1 = *(arg_60h);
0x000593ea mov r2, r7 | r2 = r7;
0x000593ec mov r0, r6 | r0 = r6;
0x000593ee str r4, [sp] | *(sp) = r4;
0x000593f0 bl 0x58aac | fcn_00058aac (r0, r1, r2, r3, r4);
0x000593f4 ldr.w fp, [sp, 0x14] | fp = var_14h;
0x000593f8 b 0x59262 | goto label_1;
| label_28:
0x000593fa mov r0, r5 | r0 = r5;
0x000593fc bl 0x58cd8 | r0 = fcn_00058cd8 (r0);
0x00059400 mov fp, r0 |
0x00059402 str r0, [sp, 0x14] | var_14h = r0;
0x00059404 cmp r0, 0 |
| if (r0 != 0) {
0x00059406 bne.w 0x59262 | goto label_1;
| }
0x0005940a cmp r7, 1 |
| if (r7 == 1) {
0x0005940c beq.w 0x59262 | goto label_1;
| }
0x00059410 b 0x59324 | goto label_6;
| label_19:
0x00059412 bl 0x129c4 | r0 = fcn_000129c4 (r0);
0x00059416 blx 0x83b8 | strerror_r ();
0x0005941a ldr r2, [pc, 0x154] |
0x0005941c add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x00059420 ldr r1, [pc, 0x150] |
0x00059422 movw r3, 0xee81 | r3 = 0xee81;
0x00059426 movs r0, 0xb | r0 = 0xb;
0x00059428 str r4, [sp] | *(sp) = r4;
0x0005942a add r2, pc | r2 = 0xb29a0;
0x0005942c add r1, pc | r1 = 0xb29a4;
0x0005942e blx 0x8b60 | fcn_00008b60 ();
0x00059432 b 0x592b6 | goto label_7;
| label_22:
0x00059434 mov r0, fp | r0 = fp;
0x00059436 mov r1, r4 | r1 = r4;
0x00059438 bl 0xfb54 | fcn_0000fb54 (r0, r1);
0x0005943c mov r0, fp | r0 = fp;
0x0005943e bl 0x129c4 | fcn_000129c4 (r0);
0x00059442 b 0x5923e | goto label_4;
| label_29:
0x00059444 add r3, sp, 0x14 | r3 += var_14h;
0x00059446 rev r1, r1 | r1 = SWAP32 (r1);
0x00059448 str r3, [sp] | *(sp) = r3;
0x0005944a movs r2, 4 | r2 = 4;
0x0005944c ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x0005944e mov r0, r6 | r0 = r6;
0x00059450 bl 0x58aac | fcn_00058aac (r0, r1, r2, r3, r4);
0x00059454 ldr.w fp, [sp, 0x14] | fp = var_14h;
0x00059458 cmp.w fp, 0 |
| if (fp == 0) {
0x0005945c beq.w 0x59324 | goto label_6;
| }
0x00059460 b 0x59262 | goto label_1;
| label_21:
0x00059462 eor r0, r0, 3 | r0 ^= 3;
0x00059466 movs r1, 2 | r1 = 2;
0x00059468 strh.w r0, [sb, 0x1c] | *((sb + 0x1c)) = r0;
0x0005946c mov r0, sb | r0 = sb;
0x0005946e bl 0x9cc0 | fcn_00009cc0 (r0, r1);
0x00059472 b 0x5922e | goto label_8;
| label_27:
0x00059474 bic r2, r3, 0x10 | r2 = BIT_MASK (r3, 0x10);
0x00059478 lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x0005947a orr r2, r2, 8 | r2 |= 8;
| if (r3 >= r3) {
0x0005947e bpl.w 0x59304 | goto label_9;
| }
0x00059482 eor r2, r2, 3 | r2 ^= 3;
0x00059486 movs r1, 2 | r1 = 2;
0x00059488 strh r2, [r0, 0x1c] | *((r0 + 0x1c)) = r2;
0x0005948a bl 0x9cc0 | fcn_00009cc0 (r0, r1);
0x0005948e ldr r0, [sp, 0x18] | r0 = var_18h;
0x00059490 b 0x59306 | goto label_10;
| label_25:
0x00059492 ldr.w r2, [r8, 0xe0] | r2 = *((r8 + 0xe0));
0x00059496 ldr.w r0, [r8, 0x3c] | r0 = *((r8 + 0x3c));
0x0005949a ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005949c bl 0xd714 | fcn_0000d714 (r0, r1, r2);
0x000594a0 b 0x59262 | goto label_1;
| label_31:
0x000594a2 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x000594a4 ldr r3, [r2] | r3 = *(r2);
0x000594a6 rev r3, r3 | r3 = SWAP32 (r3);
0x000594a8 cmp sl, r3 |
| if (sl == r3) {
0x000594aa beq 0x59524 | goto label_37;
| }
0x000594ac blx 0x83b8 | strerror_r ();
0x000594b0 ldr r2, [pc, 0xc4] |
0x000594b2 adds r0, 0x14 | r0 += 0x14;
0x000594b4 ldr r1, [pc, 0xc4] |
0x000594b6 movw r3, 0x13af | r3 = 0x13af;
0x000594ba add r2, pc | r2 = 0xb2a36;
0x000594bc add r1, pc | r1 = 0xb2a3c;
| label_12:
0x000594be str r0, [sp] | *(sp) = r0;
0x000594c0 movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x000594c4 movs r0, 0xb | r0 = 0xb;
0x000594c6 blx 0x8b60 | fcn_00008b60 ();
0x000594ca ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x000594cc bl 0x129c4 | fcn_000129c4 (r0);
0x000594d0 b 0x592b6 | goto label_7;
| label_30:
0x000594d2 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x000594d4 bl 0x129c4 | fcn_000129c4 (r0);
0x000594d8 b 0x59262 | goto label_1;
| label_34:
0x000594da ldr r2, [sp, 0x60] | r2 = *(arg_60h);
0x000594dc cmp r8, fp |
0x000594de rev r2, r2 | r2 = SWAP32 (r2);
0x000594e0 str r2, [r0, r3] | *((r0 + r3)) = r2;
| if (r8 != fp) {
0x000594e2 bne.w 0x593da | goto label_11;
| }
| label_33:
0x000594e6 cmp r7, 5 |
| if (r7 == 5) {
0x000594e8 bne 0x594f8 |
0x000594ea ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x000594ec ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x000594ee adds r3, 8 | r3 += 8;
0x000594f0 ldr r2, [r1, r3] | r2 = *((r1 + r3));
0x000594f2 rev r2, r2 | r2 = SWAP32 (r2);
0x000594f4 cmp sl, r2 |
| if (sl == r2) {
0x000594f6 beq 0x59546 | goto label_38;
| }
| }
| label_36:
0x000594f8 blx 0x83b8 | strerror_r ();
0x000594fc ldr r2, [pc, 0x80] |
0x000594fe adds r0, 0x14 | r0 += 0x14;
0x00059500 ldr r1, [pc, 0x80] |
0x00059502 movw r3, 0x13d4 | r3 = 0x13d4;
0x00059506 add r2, pc | r2 = 0xb2a8a;
0x00059508 add r1, pc | r1 = "explain";
0x0005950a b 0x594be | goto label_12;
| label_32:
0x0005950c mov r0, r4 | r0 = r4;
0x0005950e bl 0x26ea8 | r0 = fcn_00026ea8 (r0);
0x00059512 mov r3, r0 | r3 = r0;
0x00059514 cmp r0, 0 |
| if (r0 == 0) {
0x00059516 beq.w 0x59358 | goto label_13;
| }
0x0005951a ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0005951c mov fp, r3 |
0x0005951e bl 0x129c4 | fcn_000129c4 (r0);
0x00059522 b 0x59262 | goto label_1;
| label_37:
0x00059524 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x00059526 rev r3, r3 | r3 = SWAP32 (r3);
0x00059528 str r3, [r2] | *(r2) = r3;
0x0005952a ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x0005952c bl 0x129c4 | fcn_000129c4 (r0);
0x00059530 b 0x593e4 | goto label_14;
| label_35:
0x00059532 blx 0x83b8 | strerror_r ();
0x00059536 ldr r2, [pc, 0x50] |
0x00059538 adds r0, 0x14 | r0 += 0x14;
0x0005953a ldr r1, [pc, 0x50] |
0x0005953c movw r3, 0x13c2 | r3 = 0x13c2;
0x00059540 add r2, pc | r2 = 0xb2ace;
0x00059542 add r1, pc | r1 = 0xb2ad4;
0x00059544 b 0x594be | goto label_12;
| label_38:
0x00059546 ldr r2, [sp, 0x60] | r2 = *(arg_60h);
0x00059548 rev r2, r2 | r2 = SWAP32 (r2);
0x0005954a str r2, [r1, r3] | *((r1 + r3)) = r2;
0x0005954c movs r3, 0 | r3 = 0;
0x0005954e ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00059550 str r3, [sp, 0x14] | var_14h = r3;
0x00059552 bl 0x129c4 | fcn_000129c4 (r0);
0x00059556 b 0x593e4 | goto label_14;
| label_26:
0x00059558 blx 0x883c | fcn_0000883c ();
0x0005955c smlabb r0, lr, r6, r0 | __asm ("smlabb r0, lr, r6, r0");
0x00059560 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00059562 movs r0, r0 |
0x00059564 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x59ec8 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00059ec8 () | void fcn_00059ec8 (int16_t arg_1h_2, int16_t arg_48h, int16_t arg_4ch, int16_t arg_60h, int16_t arg_318h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_1c0h;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h_2;
| arithmetic x;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00059ec8 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00059ecc mov r5, r2 | r5 = r2;
0x00059ece ldr r2, [pc, 0x264] |
0x00059ed0 mov r6, r3 | r6 = r3;
0x00059ed2 sub sp, 0x24 |
0x00059ed4 mov r4, r0 | r4 = r0;
0x00059ed6 ldr r3, [pc, 0x260] | r3 = *(0x5a13a);
0x00059ed8 mov r7, r1 | r7 = r1;
0x00059eda add r2, pc | r2 = 0xb4014;
0x00059edc ldr r0, [sp, 0x48] | r0 = *(arg_48h);
0x00059ede ldrd r8, sb, [sp, 0x4c] | __asm ("ldrd r8, sb, [arg_4ch]");
0x00059ee2 ldr r3, [r2, r3] |
0x00059ee4 ldr r3, [r3] | r3 = *(0xb4014);
0x00059ee6 str r3, [sp, 0x1c] | var_1ch = r3;
0x00059ee8 mov.w r3, 0 | r3 = 0;
0x00059eec ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x00059eee cbnz r3, 0x59ef8 |
0x00059ef0 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00059ef2 adds r2, r6, 1 | r2 = r6 + 1;
0x00059ef4 cmp r2, r3 |
| if (r2 < r3) {
0x00059ef6 blt 0x59f42 | goto label_8;
| }
| }
| if (r0 != 0) {
0x00059ef8 cbz r0, 0x59f04 |
0x00059efa mov r1, r5 | r1 = r5;
0x00059efc mov r2, r6 | r2 = r6;
0x00059efe mov r5, r0 | r5 = r0;
0x00059f00 blx 0x8610 | fcn_00008610 ();
| }
0x00059f04 cmp.w r8, 0 |
0x00059f08 bne 0x59f38 |
| while (1) {
0x00059f0a ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00059f0c adds r2, r3, 1 | r2 = r3 + 1;
0x00059f0e strb r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x00059f10 add.w r2, r4, r3, lsl 2 | r2 = r4 + (r3 << 2);
0x00059f14 add.w r3, r4, r3, lsl 1 | r3 = r4 + (r3 << 1);
0x00059f18 str r5, [r2, 0x24] | *((r2 + 0x24)) = r5;
0x00059f1a strh r7, [r3, 0x1c] | *((r3 + 0x1c)) = r7;
| label_0:
0x00059f1c ldr r2, [pc, 0x21c] |
0x00059f1e ldr r3, [pc, 0x218] | r3 = *(0x5a13a);
0x00059f20 add r2, pc | r2 = "no query solution";
0x00059f22 ldr r3, [r2, r3] | r3 = "no query solution";
0x00059f24 ldr r2, [r3] | r2 = "no query solution";
0x00059f26 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00059f28 eors r2, r3 | r2 ^= r3;
0x00059f2a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00059f2e bne.w 0x5a130 | goto label_9;
| }
0x00059f32 add sp, 0x24 |
0x00059f34 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00059f38 rev.w r8, r8 | r8 = SWAP32 (r8);
0x00059f3c str.w r8, [r5] | __asm ("str.w r8, [r5]");
0x00059f40 b 0x59f0a |
| }
| label_8:
0x00059f42 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00059f44 bl 0x5480c | r0 = fcn_0005480c (r0);
0x00059f48 cmp r0, 0 |
| if (r0 != 0) {
0x00059f4a bne.w 0x5a082 | goto label_4;
| }
0x00059f4e ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00059f50 ldrh.w fp, [r4, 0x12] | fp = *((r4 + 0x12));
0x00059f54 ldrb r1, [r4, 9] | r1 = *((r4 + 9));
0x00059f56 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00059f58 str r0, [sp, 0x18] | x = r0;
0x00059f5a add.w fp, fp, r2, lsl 1 |
0x00059f5e adds r2, r1, 5 | r2 = r1 + 5;
0x00059f60 ldrh.w sl, [r3, r2] | sl = *((r3 + r2));
0x00059f64 str r1, [sp, 8] | var_8h_2 = r1;
0x00059f66 str r2, [sp, 0xc] | var_ch = r2;
0x00059f68 rev16.w sl, sl | __asm ("rev16.w sl, sl");
0x00059f6c uxth.w sl, sl | sl = (int16_t) sl;
0x00059f70 cmp fp, sl |
| if (fp > sl) {
0x00059f72 ble 0x59f86 |
0x00059f74 cmp.w sl, 0 |
| if (sl != 0) {
0x00059f78 bne 0x5a062 | goto label_10;
| }
0x00059f7a ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00059f7c ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x00059f7e cmp.w r2, 0x10000 |
| if (r2 != 0x10000) {
0x00059f82 bne 0x5a062 | goto label_10;
| }
0x00059f84 mov sl, r2 | sl = r2;
| }
0x00059f86 ldr r2, [sp, 8] | r2 = var_8h_2;
0x00059f88 adds r2, r3, r2 | r2 = r3 + r2;
0x00059f8a ldrb r1, [r2, 2] | r1 = *((r2 + 2));
0x00059f8c cmp r1, 0 |
| if (r1 == 0) {
0x00059f8e beq 0x5a088 | goto label_11;
| }
| label_2:
0x00059f90 add.w r2, fp, 1 | r2 += arg_1h_2;
0x00059f94 cmp r2, sl |
| if (r2 < sl) {
0x00059f96 blt.w 0x5a0e0 | goto label_12;
| }
| label_1:
0x00059f9a add.w fp, fp, 2 |
0x00059f9e add fp, r6 |
0x00059fa0 cmp sl, fp |
| if (sl < fp) {
0x00059fa2 blt 0x5a09e | goto label_13;
| }
0x00059fa4 ldr r1, [sp, 8] | r1 = var_8h_2;
0x00059fa6 adds r2, r6, 2 | r2 = r6 + 2;
0x00059fa8 adds r1, 6 | r1 += 6;
0x00059faa add.w ip, r1, r3 |
| label_5:
0x00059fae sub.w sl, sl, r6 | sl -= r6;
0x00059fb2 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00059fb4 uxtb.w r0, sl | r0 = (int8_t) sl;
0x00059fb8 ubfx fp, sl, 8, 8 | fp = (sl >> 8) & ((1 << 8) - 1);
0x00059fbc strb.w fp, [r3, r1] | *((r3 + r1)) = fp;
0x00059fc0 str r0, [sp, 0x10] | var_10h = r0;
0x00059fc2 strb.w r0, [ip] | *(ip) = r0;
| label_6:
0x00059fc6 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x00059fc8 uxth r2, r2 | r2 = (int16_t) r2;
0x00059fca add.w r0, r3, sl | r0 = r3 + sl;
0x00059fce subs r1, r1, r2 | r1 -= r2;
0x00059fd0 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x00059fd2 cmp.w r8, 0 |
| if (r8 == 0) {
0x00059fd6 beq 0x5a090 | goto label_14;
| }
0x00059fd8 add.w r0, sl, 4 | r0 = sl + 4;
0x00059fdc subs r2, r6, 4 | r2 = r6 - 4;
0x00059fde add r0, r3 | r0 += r3;
0x00059fe0 adds r1, r5, 4 | r1 = r5 + 4;
0x00059fe2 str r3, [sp, 8] | var_8h_2 = r3;
0x00059fe4 rev.w r8, r8 | r8 = SWAP32 (r8);
0x00059fe8 blx 0x8610 | fcn_00008610 ();
0x00059fec ldr r3, [sp, 8] | r3 = var_8h_2;
0x00059fee str.w r8, [r3, sl] | __asm ("str.w r8, [r3, sl]");
| label_3:
0x00059ff2 ldr.w r8, [r4, 0x40] | r8 = *((r4 + 0x40));
0x00059ff6 ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00059ff8 str r3, [sp, 8] | var_8h_2 = r3;
0x00059ffa add.w r6, r8, r7, lsl 1 | r6 = r8 + (r7 << 1);
0x00059ffe subs r2, r2, r7 | r2 -= r7;
0x0005a000 lsls r2, r2, 1 | r2 <<= 1;
0x0005a002 mov r1, r6 | r1 = r6;
0x0005a004 adds r0, r6, 2 | r0 = r6 + 2;
0x0005a006 blx 0x88c4 | fcn_000088c4 ();
0x0005a00a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005a00c strb.w fp, [r8, r7, lsl 1] | offset_0 = r7 << 1;
| *((r8 + offset_0)) = fp;
0x0005a010 strb r3, [r6, 1] | *((r6 + 1)) = r3;
0x0005a012 ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0005a014 ldrb r1, [r4, 9] | r1 = *((r4 + 9));
0x0005a016 ldr r3, [sp, 8] | r3 = var_8h_2;
0x0005a018 adds r2, 1 | r2++;
0x0005a01a adds r1, 4 | r1 += 4;
0x0005a01c strh r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x0005a01e ldrb r2, [r3, r1] | r2 = *((r3 + r1));
0x0005a020 adds r2, 1 | r2++;
0x0005a022 uxtb r2, r2 | r2 = (int8_t) r2;
0x0005a024 strb r2, [r3, r1] | *((r3 + r1)) = r2;
| if (r2 == 0) {
0x0005a026 cbnz r2, 0x5a032 |
0x0005a028 ldrb r2, [r4, 9] | r2 = *((r4 + 9));
0x0005a02a adds r2, 3 | r2 += 3;
0x0005a02c ldrb r1, [r3, r2] | r1 = *((r3 + r2));
0x0005a02e adds r1, 1 | r1++;
0x0005a030 strb r1, [r3, r2] | *((r3 + r2)) = r1;
| }
0x0005a032 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0005a034 ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
0x0005a036 cmp r3, 0 |
| if (r3 == 0) {
0x0005a038 beq.w 0x59f1c | goto label_0;
| }
0x0005a03c ldr r2, [pc, 0x100] |
0x0005a03e ldr r3, [pc, 0xf8] | r3 = *(0x5a13a);
0x0005a040 add r2, pc | r2 = 0xb4184;
0x0005a042 ldr r3, [r2, r3] | r3 = *(0xb4184);
0x0005a044 ldr r2, [r3] | r2 = *(0xb4184);
0x0005a046 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0005a048 eors r2, r3 | r2 ^= r3;
0x0005a04a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0005a04e bne 0x5a130 | goto label_9;
| }
0x0005a050 mov r3, sb | r3 = sb;
0x0005a052 mov r2, r5 | r2 = r5;
0x0005a054 mov r1, r4 | r1 = r4;
0x0005a056 mov r0, r4 | r0 = r4;
0x0005a058 add sp, 0x24 |
0x0005a05a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005a05e b.w 0x58c2c | void (*0x58c2c)() ();
| label_10:
0x0005a062 blx 0x83b8 | strerror_r ();
0x0005a066 ldr r2, [pc, 0xdc] |
0x0005a068 adds r0, 0x14 | r0 += 0x14;
0x0005a06a ldr r1, [pc, 0xdc] |
0x0005a06c movw r3, 0xbeb |
0x0005a070 str r0, [sp] | *(sp) = r0;
0x0005a072 movt r3, 1 | r3 = 0x10beb;
0x0005a076 add r2, pc | r2 = 0xb41c0;
0x0005a078 movs r0, 0xb | r0 = 0xb;
0x0005a07a add r1, pc | r1 = "object name reserved for internal use: %s";
0x0005a07c blx 0x8b60 | fcn_00008b60 ();
| label_7:
0x0005a080 movs r0, 0xb | r0 = 0xb;
| label_4:
0x0005a082 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0005a086 b 0x59f1c | goto label_0;
| label_11:
0x0005a088 ldrb r2, [r2, 1] | r2 = *((r2 + 1));
0x0005a08a cmp r2, 0 |
| if (r2 == 0) {
0x0005a08c beq 0x59f9a | goto label_1;
| }
0x0005a08e b 0x59f90 | goto label_2;
| label_14:
0x0005a090 mov r2, r6 | r2 = r6;
0x0005a092 mov r1, r5 | r1 = r5;
0x0005a094 str r3, [sp, 8] | var_8h_2 = r3;
0x0005a096 blx 0x8610 | fcn_00008610 ();
0x0005a09a ldr r3, [sp, 8] | r3 = var_8h_2;
0x0005a09c b 0x59ff2 | goto label_3;
| label_13:
0x0005a09e ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x0005a0a0 adds r2, r6, 2 | r2 = r6 + 2;
0x0005a0a2 mov r0, r4 | r0 = r4;
0x0005a0a4 str r3, [sp, 0x14] | var_14h_2 = r3;
0x0005a0a6 str r2, [sp, 0x10] | var_10h = r2;
0x0005a0a8 subs r1, r1, r2 | r1 -= r2;
0x0005a0aa cmp r1, 4 |
0x0005a0ac it ge |
| if (r1 < 4) {
0x0005a0ae movge r1, 4 | r1 = 4;
| }
0x0005a0b0 bl 0x36080 | fcn_00036080 (r0, r1);
0x0005a0b4 str r0, [sp, 0x18] | x = r0;
0x0005a0b6 cmp r0, 0 |
| if (r0 != 0) {
0x0005a0b8 bne 0x5a082 | goto label_4;
| }
0x0005a0ba ldr r1, [sp, 8] | r1 = var_8h_2;
0x0005a0bc ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0005a0be ldr r2, [sp, 0xc] | r2 = var_ch;
0x0005a0c0 adds r1, 6 | r1 += 6;
0x0005a0c2 ldrb.w sl, [r3, r1] | sl = *((r3 + r1));
0x0005a0c6 add.w ip, r1, r3 |
0x0005a0ca ldrb r0, [r3, r2] | r0 = *((r3 + r2));
0x0005a0cc ldr r2, [sp, 0x10] | r2 = var_10h;
0x0005a0ce orr.w sl, sl, r0, lsl 8 | sl |= (r0 << 8);
0x0005a0d2 add.w sl, sl, -1 | sl += -1;
0x0005a0d6 uxth.w sl, sl | sl = (int16_t) sl;
0x0005a0da add.w sl, sl, 1 | sl++;
0x0005a0de b 0x59fae | goto label_5;
| label_12:
0x0005a0e0 add r2, sp, 0x18 | r2 += x;
0x0005a0e2 mov r1, r6 | r1 = r6;
0x0005a0e4 mov r0, r4 | r0 = r4;
0x0005a0e6 str r3, [sp, 0x10] | var_10h = r3;
0x0005a0e8 bl 0x27b2c | fcn_00027b2c (r0, r1, r2);
0x0005a0ec ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r0 != 0) {
0x0005a0ee cbz r0, 0x5a106 |
0x0005a0f0 sub.w sl, r0, r3 | sl = r0 - r3;
0x0005a0f4 cmp fp, sl |
| if (fp >= sl) {
0x0005a0f6 bge 0x5a110 | goto label_15;
| }
0x0005a0f8 uxtb.w r2, sl | r2 = (int8_t) sl;
0x0005a0fc ubfx fp, sl, 8, 8 | fp = (sl >> 8) & ((1 << 8) - 1);
0x0005a100 str r2, [sp, 0x10] | var_10h = r2;
0x0005a102 adds r2, r6, 2 | r2 = r6 + 2;
0x0005a104 b 0x59fc6 | goto label_6;
| }
0x0005a106 ldr r0, [sp, 0x18] | r0 = x;
0x0005a108 cmp r0, 0 |
| if (r0 == 0) {
0x0005a10a beq.w 0x59f9a | goto label_1;
| }
0x0005a10e b 0x5a082 | goto label_4;
| label_15:
0x0005a110 blx 0x83b8 | strerror_r ();
0x0005a114 ldr r2, [pc, 0x34] |
0x0005a116 adds r0, 0x14 | r0 += 0x14;
0x0005a118 ldr r1, [pc, 0x34] |
0x0005a11a movw r3, 0xbfd |
0x0005a11e str r0, [sp] | *(sp) = r0;
0x0005a120 movt r3, 1 | r3 = 0x10bfd;
0x0005a124 add r2, pc | r2 = 0xb4274;
0x0005a126 movs r0, 0xb | r0 = 0xb;
0x0005a128 add r1, pc | r1 = 0xb427c;
0x0005a12a blx 0x8b60 | fcn_00008b60 ();
0x0005a12e b 0x5a080 | goto label_7;
| label_9:
0x0005a130 blx 0x883c | fcn_0000883c ();
0x0005a134 ldc p0, c0, [lr, 0x18]! | __asm ("ldc p0, c0, [lr, 0x18]!");
0x0005a138 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0005a13a movs r0, r0 |
0x0005a13c ldcl p0, c0, [r8, -0x18]! | __asm ("ldcl p0, c0, [r8, -0x18]!");
0x0005a140 mrrc p0, 0, r0, r8, c6 | __asm ("mrrc p0, 0, r0, r8, c6");
0x0005a144 str r0, [sp, 0x318] | *(arg_318h) = r0;
0x0005a146 movs r5, r0 | r5 = r0;
0x0005a148 ldrh r2, [r4, 0x36] | r2 = *((r4 + 0x36));
0x0005a14a movs r5, r0 | r5 = r0;
0x0005a14c str r0, [sp, 0x60] | *(arg_60h) = r0;
0x0005a14e movs r5, r0 | r5 = r0;
0x0005a150 ldrh r4, [r6, 0x30] | r4 = *((r6 + 0x30));
0x0005a152 movs r5, r0 | r5 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5a154 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0005a154 () | void fcn_0005a154 (int16_t arg_1h_2, int16_t arg_2h, int16_t arg_3h, int16_t arg_10h, int16_t arg_28h, int16_t arg_1h, int16_t arg_48h, int16_t arg_4ch, int16_t arg_60h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_2h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| arithmetic var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| arithmetic x;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_b4h;
| int16_t var_bch;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_e8h;
| int16_t var_fch;
| int16_t var_110h;
| int16_t var_120h;
| int16_t var_124h;
| int16_t var_138h;
| int16_t var_14ch;
| int16_t var_150h;
| int16_t var_154h;
| int16_t var_158h;
| int16_t var_174h;
| int16_t var_18ch;
| int16_t var_190h;
| int16_t var_194h;
| int16_t var_198h;
| int16_t var_1c0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0005a154 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0005a158 sub sp, 0x19c |
0x0005a15a str r2, [sp, 0x48] | var_48h = r2;
0x0005a15c mov r7, r2 | r7 = r2;
0x0005a15e movs r4, 0 | r4 = 0;
0x0005a160 mov r6, r0 | r6 = r0;
0x0005a162 ldr.w r2, [pc, 0xb04] |
0x0005a166 mov r8, r1 | r8 = r1;
0x0005a168 str r3, [sp, 0x74] | var_74h = r3;
0x0005a16a add r5, sp, 0x90 | r5 += var_90h;
0x0005a16c ldr.w r3, [pc, 0xafc] | r3 = *(0x5ac6c);
0x0005a170 add r2, pc | r2 = 0xb4dde;
0x0005a172 str r0, [sp, 0x40] | var_40h = r0;
0x0005a174 str r1, [sp, 0x6c] | var_6ch = r1;
0x0005a176 add r0, sp, 0x14c | r0 += var_14ch;
0x0005a178 ldr r3, [r2, r3] |
0x0005a17a mov r1, r4 | r1 = r4;
0x0005a17c movs r2, 0x40 | r2 = 0x40;
0x0005a17e ldr r3, [r3] | r3 = *(0xb4dde);
0x0005a180 str r3, [sp, 0x194] | var_194h = r3;
0x0005a182 mov.w r3, 0 | r3 = 0;
0x0005a186 strb.w r4, [sp, 0x190] | var_190h = r4;
0x0005a18a str r4, [sp, 0x18c] | var_18ch = r4;
0x0005a18c str r0, [sp, 0x38] | var_38h = r0;
0x0005a18e str r5, [sp, 0x58] | var_58h = r5;
0x0005a190 str r4, [sp, 0x90] | var_90h = r4;
0x0005a192 blx 0x839c | fcn_0000839c ();
0x0005a196 ldr r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x0005a198 str r0, [sp, 0x54] | var_54h = r0;
0x0005a19a cmp r7, 0 |
| if (r7 == 0) {
0x0005a19c beq.w 0x5a8ae | goto label_58;
| }
0x0005a1a0 ldrb r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0005a1a2 ldrh r2, [r6, 0x18] | r2 = *((r6 + 0x18));
0x0005a1a4 adds r3, r1, r2 | r3 = r1 + r2;
0x0005a1a6 cmp r3, 1 |
| if (r3 <= 1) {
0x0005a1a8 ble.w 0x5a714 | goto label_59;
| }
0x0005a1ac ldr r4, [sp, 0x1c0] | r4 = var_1c0h;
0x0005a1ae mov r0, r8 | r0 = r8;
0x0005a1b0 rsb.w r4, r4, 2 | r4 = 2 - r4;
0x0005a1b4 str r4, [sp, 0x28] | *(arg_28h) = r4;
0x0005a1b6 cmp r0, 0 |
| if (r0 != 0) {
0x0005a1b8 bne.w 0x5a346 | goto label_60;
| }
0x0005a1bc ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005a1be ldr r0, [sp, 0x6c] | r0 = var_6ch;
0x0005a1c0 str r0, [sp, 0x24] | var_24h = r0;
| label_0:
0x0005a1c2 subs r3, r3, r1 | r3 -= r1;
0x0005a1c4 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0005a1c6 cmp r2, r3 |
0x0005a1c8 ldr r1, [r1, 0x38] | r1 = *((r1 + 0x38));
| if (r2 == r3) {
0x0005a1ca beq.w 0x5ab4c | goto label_61;
| }
0x0005a1ce ldr r0, [sp, 0x40] | r0 = var_40h;
0x0005a1d0 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0005a1d2 ldrh.w r2, [r2, r3, lsl 1] | offset_0 = r3 << 1;
| r2 = *((r2 + offset_0));
0x0005a1d6 ldrh r3, [r0, 0x1a] | r3 = *((r0 + 0x1a));
0x0005a1d8 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x0005a1da ands r3, r2 | r3 &= r2;
0x0005a1dc adds r3, r1, r3 | r3 = r1 + r3;
0x0005a1de str r3, [sp, 0x5c] | var_5ch = r3;
| label_11:
0x0005a1e0 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0005a1e2 mov.w fp, 0 |
0x0005a1e6 ldr r7, [sp, 0x28] | r7 = *(arg_28h);
0x0005a1e8 add r1, sp, 0x94 | r1 += var_94h;
0x0005a1ea str.w fp, [sp, 0x14] | __asm ("str.w fp, [var_14h]");
0x0005a1ee add r0, sp, 0xc8 | r0 += var_c8h;
0x0005a1f0 ldr r3, [r3] | r3 = *(r3);
0x0005a1f2 ldr.w fp, [sp, 0x54] | fp = var_54h;
0x0005a1f6 lsls r2, r7, 2 | r2 = r7 << 2;
0x0005a1f8 ldr r4, [sp, 0x40] | r4 = var_40h;
0x0005a1fa rev r3, r3 | r3 = SWAP32 (r3);
0x0005a1fc ldr.w sl, [sp, 0x58] | sl = var_58h;
0x0005a200 str r1, [sp, 0x18] | var_18h = r1;
0x0005a202 add r1, sp, 0x110 | r1 += var_110h;
0x0005a204 str r3, [sp, 0x94] | var_94h = r3;
0x0005a206 add r3, sp, 0xb4 | r3 += var_b4h;
0x0005a208 add.w sb, r3, r2 | sb = r3 + r2;
0x0005a20c adds r6, r1, r2 | r6 = r1 + r2;
0x0005a20e add.w r8, r0, r2 | r8 = r0 + r2;
0x0005a212 str r2, [sp, 0x70] | var_70h = r2;
0x0005a214 str r3, [sp, 0x4c] | var_4ch = r3;
0x0005a216 str r1, [sp, 0x64] | var_64h = r1;
0x0005a218 str r0, [sp, 0x2c] | var_2ch = r0;
| do {
0x0005a21a movs r3, 0 | r3 = 0;
0x0005a21c mov r2, r8 | r2 = r8;
0x0005a21e str r3, [sp] | *(sp) = r3;
0x0005a220 mov r0, fp | r0 = fp;
0x0005a222 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005a224 ldr r1, [r3] | r1 = *(r3);
0x0005a226 movs r3, 0 | r3 = 0;
0x0005a228 bl 0x26f94 | r0 = fcn_00026f94 (r0, r1, r2, r3, r4);
0x0005a22c mov r3, r0 | r3 = r0;
0x0005a22e str.w r0, [sl] | __asm ("str.w r0, [sl]");
0x0005a232 cmp r0, 0 |
| if (r0 != 0) {
0x0005a234 bne.w 0x5ab50 | goto label_62;
| }
0x0005a238 ldr r2, [r8], -4 | r2 = *(r8);
| r8 += -4;
0x0005a23c ldr r1, [r2, 0x14] | r1 = *((r2 + 0x14));
0x0005a23e cmp r1, 0 |
| if (r1 < 0) {
0x0005a240 blt.w 0x5a37c | goto label_63;
| }
| label_2:
0x0005a244 ldrh r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x0005a246 subs r7, 1 | r7--;
0x0005a248 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0005a24a adds r2, 4 | r2 += 4;
0x0005a24c add r1, r2 | r1 += r2;
0x0005a24e adds r2, r7, 1 | r2 = r7 + 1;
0x0005a250 str r1, [sp, 0x14] | var_14h = r1;
| if (r2 == r7) {
0x0005a252 beq.w 0x5a3ca | goto label_64;
| }
0x0005a256 ldrb r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0005a258 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005a25a ldr.w r5, [sl] | r5 = *(sl);
0x0005a25e add r3, r7 | r3 += r7;
| if (r2 != 0) {
0x0005a260 cbz r2, 0x5a26a |
0x0005a262 ldrh r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x0005a264 cmp r1, r3 |
| if (r1 == r3) {
0x0005a266 beq.w 0x5a3aa | goto label_65;
| }
| }
0x0005a26a ldr r1, [r4, 0x40] | r1 = *((r4 + 0x40));
0x0005a26c subs r2, r3, r2 | r2 = r3 - r2;
0x0005a26e ldrh.w ip, [r4, 0x1a] | ip = *((r4 + 0x1a));
0x0005a272 mov r0, r4 | r0 = r4;
0x0005a274 str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x0005a276 ldrh.w r2, [r1, r2, lsl 1] | offset_1 = r2 << 1;
| r2 = *((r1 + offset_1));
0x0005a27a ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x0005a27c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005a27e rev16 r2, r2 | __asm ("rev16 r2, r2");
0x0005a280 and.w ip, ip, r2 |
0x0005a284 ldr.w lr, [r1, ip] |
0x0005a288 add r1, ip | r1 += ip;
0x0005a28a str r1, [sb, -0x4] | *((sb - 0x4)) = r1;
0x0005a28e str r1, [sp, 0x20] | var_20h = r1;
0x0005a290 rev.w r2, lr | lr = SWAP32 (r2);
0x0005a294 str r2, [r3] | *(r3) = r2;
0x0005a296 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0005a298 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005a29a mov r2, r0 | r2 = r0;
0x0005a29c str r0, [r6, -0x4] | *((r6 - 0x4)) = r0;
0x0005a2a0 ldrh.w r0, [fp, 0x18] | r0 = *(arg_60h);
0x0005a2a4 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x0005a2a6 and r0, r0, 0xc | r0 &= 0xc;
| if (r0 != 0) {
0x0005a2aa cbz r0, 0x5a2c0 |
0x0005a2ac ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x0005a2ae ldr r1, [sp, 0x20] | r1 = var_20h;
0x0005a2b0 sub.w lr, r1, r0 | lr = r1 - r0;
0x0005a2b4 ldr.w r0, [fp, 0x28] | r0 = *(arg_28h);
0x0005a2b8 add.w ip, r2, lr |
0x0005a2bc cmp ip, r0 |
| if (ip <= r0) {
0x0005a2be ble 0x5a358 | goto label_66;
| }
| }
| if (r5 != 0) {
| label_1:
0x0005a2c0 cbnz r5, 0x5a2dc | goto label_30;
| }
0x0005a2c2 ldrb r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x0005a2c4 mov r0, r4 | r0 = r4;
0x0005a2c6 subs r1, r3, r1 | r1 = r3 - r1;
0x0005a2c8 mov r3, sl | r3 = sl;
0x0005a2ca bl 0x34600 | fcn_00034600 (r0, r1, r2, r3);
0x0005a2ce ldr.w r5, [sl] | r5 = *(sl);
| label_4:
0x0005a2d2 sub.w sb, sb, 4 | sb -= 4;
0x0005a2d6 subs r6, 4 | r6 -= 4;
0x0005a2d8 cmp r5, 0 |
0x0005a2da beq 0x5a21a |
| } while (r5 == 0);
| label_30:
0x0005a2dc ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005a2de adds r2, r7, 1 | r2 = r7 + 1;
0x0005a2e0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0005a2e2 lsls r2, r2, 2 | r2 <<= 2;
0x0005a2e4 movs r1, 0 | r1 = 0;
0x0005a2e6 adds r3, 1 | r3++;
0x0005a2e8 str r3, [sp, 0x20] | var_20h = r3;
0x0005a2ea blx 0x839c | fcn_0000839c ();
0x0005a2ee movs r3, 0 | r3 = 0;
0x0005a2f0 str r3, [sp, 0x60] | var_60h = r3;
| label_3:
0x0005a2f2 ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x0005a2f4 movs r6, 0 | r6 = 0;
0x0005a2f6 ldr r4, [sp, 0x20] | r4 = var_20h;
| do {
0x0005a2f8 ldr r3, [r7], 4 | r3 = *(r7);
| r7 += 4;
| if (r3 != 0) {
0x0005a2fc cbz r3, 0x5a304 |
0x0005a2fe ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0005a300 bl 0x129c4 | fcn_000129c4 (r0);
| }
0x0005a304 adds r6, 1 | r6++;
0x0005a306 cmp r6, r4 |
0x0005a308 bne 0x5a2f8 |
| } while (r6 != r4);
0x0005a30a ldr r3, [sp, 0x60] | r3 = var_60h;
| if (r3 == 0) {
0x0005a30c cbz r3, 0x5a324 | goto label_14;
| }
0x0005a30e add r6, sp, 0xd4 | r6 += var_d4h;
0x0005a310 add.w r4, r6, r3, lsl 2 | r4 = r6 + (r3 << 2);
| do {
0x0005a314 ldr r3, [r6], 4 | r3 = *(r6);
| r6 += 4;
| if (r3 != 0) {
0x0005a318 cbz r3, 0x5a320 |
0x0005a31a ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0005a31c bl 0x129c4 | fcn_000129c4 (r0);
| }
0x0005a320 cmp r6, r4 |
0x0005a322 bne 0x5a314 |
| } while (r6 != r4);
| label_14:
0x0005a324 ldr.w r2, [pc, 0x948] |
0x0005a328 ldr.w r3, [pc, 0x940] | r3 = *(0x5ac6c);
0x0005a32c add r2, pc | r2 = 0xb4fa0;
0x0005a32e ldr r3, [r2, r3] | r3 = *(0xb4fa0);
0x0005a330 ldr r2, [r3] | r2 = *(0xb4fa0);
0x0005a332 ldr r3, [sp, 0x194] | r3 = var_194h;
0x0005a334 eors r2, r3 | r2 ^= r3;
0x0005a336 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0005a33a bne.w 0x5ab48 | goto label_67;
| }
0x0005a33e mov r0, r5 | r0 = r5;
0x0005a340 add sp, 0x19c |
0x0005a342 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_60:
0x0005a346 cmp r3, r8 |
| if (r3 == r8) {
0x0005a348 beq.w 0x5a728 | goto label_68;
| }
0x0005a34c ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0005a34e ldr r0, [sp, 0x28] | r0 = *(arg_28h);
0x0005a350 subs r3, 1 | r3--;
0x0005a352 str r3, [sp, 0x24] | var_24h = r3;
0x0005a354 add r3, r0 | r3 += r0;
0x0005a356 b 0x5a1c2 | goto label_0;
| label_66:
0x0005a358 str r3, [sp, 0x30] | var_30h = r3;
0x0005a35a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0005a35c strd r1, r2, [sp, 0x1c] | __asm ("strd r1, r2, [sp, 0x1c]");
0x0005a360 add.w r0, lr, r3 | r0 = lr + r3;
0x0005a364 blx 0x8610 | fcn_00008610 ();
0x0005a368 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x0005a36a ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x0005a36c ldr r3, [sp, 0x48] | r3 = var_48h;
0x0005a36e ldr r2, [sp, 0x20] | r2 = var_20h;
0x0005a370 subs r1, r1, r0 | r1 -= r0;
0x0005a372 add r1, r3 | r1 += r3;
0x0005a374 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0005a376 str r1, [sb, -0x4] | *((sb - 0x4)) = r1;
0x0005a37a b 0x5a2c0 | goto label_1;
| label_63:
0x0005a37c str r0, [sp, 0x20] | var_20h = r0;
0x0005a37e mov r0, r2 | r0 = r2;
0x0005a380 str r2, [sp, 0x1c] | var_1ch_2 = r2;
0x0005a382 bl 0x27d88 | fcn_00027d88 (r0);
0x0005a386 ldrd r2, r3, [sp, 0x1c] | __asm ("ldrd r2, r3, [var_1ch_2]");
0x0005a38a mov r5, r0 | r5 = r0;
0x0005a38c str.w r0, [sl] | __asm ("str.w r0, [sl]");
0x0005a390 cmp r0, 0 |
| if (r0 == 0) {
0x0005a392 beq.w 0x5a244 | goto label_2;
| }
0x0005a396 ldr r0, [sp, 0x28] | r0 = *(arg_28h);
0x0005a398 lsls r2, r7, 2 | r2 = r7 << 2;
0x0005a39a mov r1, r3 | r1 = r3;
0x0005a39c str r3, [sp, 0x60] | var_60h = r3;
0x0005a39e adds r0, 1 | r0++;
0x0005a3a0 str r0, [sp, 0x20] | var_20h = r0;
0x0005a3a2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0005a3a4 blx 0x839c | fcn_0000839c ();
0x0005a3a8 b 0x5a2f2 | goto label_3;
| label_65:
0x0005a3aa ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x0005a3ac mov r0, r4 | r0 = r4;
0x0005a3ae ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005a3b0 ldr r3, [r1] | r3 = *(r1);
0x0005a3b2 str r1, [sb, -0x4] | *((sb - 0x4)) = r1;
0x0005a3b4 adds r4, r0, 0 | r4 = r0 + 0;
0x0005a3b6 rev r3, r3 | r3 = SWAP32 (r3);
0x0005a3b8 str r3, [r2] | *(r2) = r3;
0x0005a3ba ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0005a3bc blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005a3be mov.w r3, 0 | r3 = 0;
0x0005a3c2 str r0, [r6, -0x4] | *((r6 - 0x4)) = r0;
0x0005a3c6 strb r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0005a3c8 b 0x5a2d2 | goto label_4;
| label_64:
0x0005a3ca ldr.w fp, [sp, 0x14] | fp = var_14h;
0x0005a3ce str r3, [sp, 0x60] | var_60h = r3;
0x0005a3d0 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0005a3d2 add.w r2, fp, 3 | r2 += arg_3h;
0x0005a3d6 bic r4, r2, 3 | r4 = BIT_MASK (r2, 3);
0x0005a3da ldr r0, [r3, 0x24] | r0 = *((r3 + 0x24));
0x0005a3dc lsls r5, r4, 1 | r5 = r4 << 1;
0x0005a3de adds r3, r5, r4 | r3 = r5 + r4;
0x0005a3e0 add.w r0, r0, r3, lsl 1 | r0 += (r3 << 1);
0x0005a3e4 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x0005a3e6 bl 0x13558 | fcn_00013558 (r0);
0x0005a3ea ldr r2, [sp, 0xc8] | r2 = var_c8h;
0x0005a3ec str r0, [sp, 0x1c] | var_1ch_2 = r0;
0x0005a3ee str r0, [sp, 0x154] | var_154h = r0;
0x0005a3f0 str r2, [sp, 0x34] | var_34h = r2;
0x0005a3f2 cmp r0, 0 |
| if (r0 == 0) {
0x0005a3f4 beq.w 0x5a8f0 | goto label_69;
| }
0x0005a3f8 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x0005a3fa mov.w lr, 0 | lr = 0;
0x0005a3fe ldr r2, [sp, 0x34] | r2 = var_34h;
0x0005a400 mov sb, lr | sb = lr;
0x0005a402 str.w lr, [sp, 0x44] | __asm ("str.w lr, [x]");
0x0005a406 add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
0x0005a40a str r2, [sp, 0x150] | var_150h = r2;
0x0005a40c adds r1, r3, r5 | r1 = r3 + r5;
0x0005a40e str r3, [sp, 0x14] | var_14h = r3;
0x0005a410 str r3, [sp, 0x158] | var_158h = r3;
0x0005a412 ldrb r3, [r2, 8] | r3 = *((r2 + 8));
0x0005a414 str r1, [sp, 0x50] | var_50h = r1;
0x0005a416 lsls r3, r3, 2 | r3 <<= 2;
0x0005a418 str r3, [sp, 0x68] | var_68h = r3;
0x0005a41a ldrb r3, [r2, 2] | r3 = *((r2 + 2));
0x0005a41c str r3, [sp, 0x30] | var_30h = r3;
0x0005a41e ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005a420 adds r3, 1 | r3++;
0x0005a422 str r3, [sp, 0x20] | var_20h = r3;
0x0005a424 add r3, sp, 0xfc | r3 += var_fch;
0x0005a426 str r3, [sp, 0x3c] | var_3ch = r3;
| label_5:
0x0005a428 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0005a42a ldr.w r6, [r3, sb, lsl 2] | offset_2 = sb << 2;
| r6 = *((r3 + offset_2));
0x0005a42e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0005a430 ldr r4, [r6, 0x38] | r4 = *((r6 + 0x38));
0x0005a432 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0005a434 ldrh.w r8, [r6, 0x12] | r8 = *((r6 + 0x12));
0x0005a438 ldrb r1, [r4] | r1 = *(r4);
0x0005a43a ldrb r2, [r3] | r2 = *(r3);
0x0005a43c ldrh.w fp, [r6, 0x18] | fp = *((r6 + 0x18));
0x0005a440 add r8, r4 | r8 += r4;
0x0005a442 ldrh r5, [r6, 0x1a] | r5 = *((r6 + 0x1a));
0x0005a444 cmp r1, r2 |
| if (r1 != r2) {
0x0005a446 bne.w 0x5a85e | goto label_70;
| }
0x0005a44a ldr.w sl, [sp, 0x14c] | sl = var_14ch;
0x0005a44e movs r1, 0 | r1 = 0;
0x0005a450 ldrb r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0005a452 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005a454 mov r7, sl | r7 = sl;
0x0005a456 add r2, fp | r2 += fp;
0x0005a458 lsls r2, r2, 1 | r2 <<= 1;
0x0005a45a add.w r0, r3, sl, lsl 1 | r0 = r3 + (sl << 1);
0x0005a45e blx 0x839c | fcn_0000839c ();
0x0005a462 ldrb r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0005a464 cmp r1, 0 |
| if (r1 != 0) {
0x0005a466 bne.w 0x5a646 | goto label_71;
| }
| label_8:
0x0005a46a ldrh r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0005a46c ldrh r1, [r6, 0x12] | r1 = *((r6 + 0x12));
0x0005a46e add.w r1, r1, r3, lsl 1 | r1 += (r3 << 1);
0x0005a472 add r1, r4 | r1 += r4;
0x0005a474 cmp r8, r1 |
| if (r8 >= r1) {
0x0005a476 bhs 0x5a4a2 | goto label_72;
| }
0x0005a478 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x0005a47a mov r2, r8 | r2 = r8;
0x0005a47c add.w r0, r3, r7, lsl 2 | r0 = r3 + (r7 << 2);
| do {
0x0005a480 ldrh r3, [r2], 2 | r3 = *(r2);
| r2 += 2;
0x0005a484 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x0005a486 cmp r1, r2 |
0x0005a488 and.w r3, r3, r5 | r3 &= r5;
0x0005a48c add r3, r4 | r3 += r4;
0x0005a48e str r3, [r0], 4 | *(r0) = r3;
| r0 += 4;
0x0005a492 bhi 0x5a480 |
| } while (r1 > r2);
0x0005a494 subs r1, 1 | r1--;
0x0005a496 adds r7, 1 | r7++;
0x0005a498 sub.w r1, r1, r8 | r1 -= r8;
0x0005a49c add.w r7, r7, r1, lsr 1 | r7 += (r1 >> 1);
0x0005a4a0 str r7, [sp, 0x14c] | var_14ch = r7;
| label_72:
0x0005a4a2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0005a4a4 str.w r7, [r3, sb, lsl 2] | __asm ("str.w r7, [r3, sb, lsl 2]");
0x0005a4a8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0005a4aa clz r4, r3 | r4 &= r3;
0x0005a4ae ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005a4b0 lsrs r4, r4, 5 | r4 >>= 5;
0x0005a4b2 cmp sb, r3 |
0x0005a4b4 ite ge |
| if (sb < r3) {
0x0005a4b6 movge r3, 0 | r3 = 0;
| }
| if (sb >= r3) {
0x0005a4b8 andlt r3, r4, 1 | r3 = r4 & 1;
| }
0x0005a4bc cmp r3, 0 |
| if (r3 != 0) {
0x0005a4be bne.w 0x5a696 | goto label_73;
| }
| label_9:
0x0005a4c2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005a4c4 add.w sb, sb, 1 | sb++;
0x0005a4c8 cmp r3, sb |
| if (r3 != sb) {
0x0005a4ca bne 0x5a428 | goto label_5;
| }
0x0005a4cc ldr r3, [sp, 0x54] | r3 = var_54h;
0x0005a4ce mov.w fp, 0 |
0x0005a4d2 ldr r2, [sp, 0x68] | r2 = var_68h;
0x0005a4d4 add r6, sp, 0xe8 | r6 += var_e8h;
0x0005a4d6 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0005a4d8 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x0005a4da subs r2, 0xc | r2 -= 0xc;
0x0005a4dc ldr.w sb, [sp, 0x64] | sb = var_64h;
0x0005a4e0 mov r5, r1 | r5 = r1;
0x0005a4e2 str r4, [sp, 0x80] | var_80h = r4;
0x0005a4e4 adds r3, r2, r3 | r3 = r2 + r3;
0x0005a4e6 ldr r2, [sp, 0x70] | r2 = var_70h;
0x0005a4e8 str r3, [sp, 0x78] | var_78h = r3;
0x0005a4ea add r3, sp, 0xcc | r3 += var_cch;
0x0005a4ec str r6, [sp, 0x84] | var_84h = r6;
0x0005a4ee add r3, r2 | r3 += r2;
0x0005a4f0 str.w sb, [sp, 0x50] | __asm ("str.w sb, [var_50h]");
0x0005a4f4 str r3, [sp, 0x4c] | var_4ch = r3;
0x0005a4f6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0005a4f8 str r6, [sp, 0x7c] | var_7ch = r6;
0x0005a4fa mov r2, r3 | r2 = r3;
0x0005a4fc str r3, [sp, 0x88] | var_88h = r3;
| label_6:
0x0005a4fe ldr r4, [r2], 4 | r4 = *(r2);
| r2 += 4;
0x0005a502 add r3, sp, 0x198 | r3 += var_198h;
0x0005a504 ldr sl, [r5], 4 | sl = *(r5);
| r5 += 4;
0x0005a508 add.w r3, r3, fp, lsl 2 | r3 += (fp << 2);
0x0005a50c add r1, sp, 0x198 | r1 += var_198h;
0x0005a50e add.w r0, r1, fp, lsl 2 | r0 = r1 + (fp << 2);
0x0005a512 str sl, [r3, -0x24] | *((r3 - 0x24)) = sl;
0x0005a516 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0005a518 str r3, [r0, -0x3c] | *((r0 - 0x3c)) = r3;
0x0005a51c cmp.w fp, 0 |
| if (fp == 0) {
0x0005a520 beq.w 0x5a736 | goto label_74;
| }
0x0005a524 ldr r3, [r0, -0x28] | r3 = *((r0 - 0x28));
0x0005a528 cmp sl, r3 |
0x0005a52a it ne |
| if (sl == r3) {
0x0005a52c addne fp, fp, 1 |
| }
| label_12:
0x0005a530 ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r3 == 0) {
0x0005a532 cbnz r3, 0x5a550 |
0x0005a534 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0005a536 add r1, sp, 0x198 | r1 += var_198h;
0x0005a538 add.w r0, r1, fp, lsl 2 | r0 = r1 + (fp << 2);
0x0005a53c add.w fp, fp, 1 |
0x0005a540 ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x0005a542 str r3, [r0, -0x3c] | *((r0 - 0x3c)) = r3;
0x0005a544 subs r4, 0x3c | r4 -= 0x3c;
0x0005a546 mov r3, r0 | r3 = r0;
0x0005a548 add.w r0, sl, 1 | r0 = sl + 1;
0x0005a54c str r0, [r3, -0x24] | *((r3 - 0x24)) = r0;
| }
0x0005a550 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0005a552 ldr r1, [sp, 0x78] | r1 = var_78h;
0x0005a554 subs r3, r1, r3 | r3 = r1 - r3;
0x0005a556 str r3, [sb], 4 | *(sb) = r3;
| sb += 4;
0x0005a55a ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x0005a55c cbz r3, 0x5a58c | goto label_75;
| }
0x0005a55e add.w r8, r4, 0x20 | r8 = r4 + 0x20;
0x0005a562 str r5, [sp, 0x44] | x = r5;
0x0005a564 movs r7, 0 | r7 = 0;
0x0005a566 mov r5, r8 | r5 = r8;
0x0005a568 mov r8, r2 | r8 = r2;
| do {
0x0005a56a ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0005a56c mov r0, r4 | r0 = r4;
0x0005a56e ldr r1, [r5, 4]! | r1 = *((r5 += 4));
0x0005a572 adds r7, 1 | r7++;
0x0005a574 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0005a576 ldr r3, [sb, -0x4] | r3 = *((sb - 0x4));
0x0005a578 subs r4, 4 | r4 -= 4;
0x0005a57a adds r0, 2 | r0 += 2;
0x0005a57c add r3, r0 | r3 += r0;
0x0005a57e str r3, [sb, -0x4] | *((sb - 0x4)) = r3;
0x0005a582 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0005a584 cmp r3, r7 |
0x0005a586 bgt 0x5a56a |
| } while (r3 > r7);
0x0005a588 ldr r5, [sp, 0x44] | r5 = x;
0x0005a58a mov r2, r8 | r2 = r8;
| label_75:
0x0005a58c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0005a58e str sl, [r6], 4 | *(r6) = sl;
| r6 += 4;
0x0005a592 cmp r3, r2 |
| if (r3 != r2) {
0x0005a594 bne 0x5a4fe | goto label_6;
| }
0x0005a596 ldr r6, [sp, 0x7c] | r6 = var_7ch;
0x0005a598 mov.w sl, 1 | sl = 1;
0x0005a59c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005a59e mov.w fp, 2 |
0x0005a5a2 ldr r5, [sp, 0x50] | r5 = var_50h;
0x0005a5a4 ldr.w r8, [sp, 0x30] | r8 = var_30h;
0x0005a5a8 mov r7, r6 | r7 = r6;
0x0005a5aa ldr.w sb, [sp, 0x78] | sb = var_78h;
0x0005a5ae str.w sl, [sp, 0x44] | __asm ("str.w sl, [x]");
0x0005a5b2 mov sl, r3 | sl = r3;
| label_16:
0x0005a5b4 ldr r2, [r5], 4 | r2 = *(r5);
| r5 += 4;
0x0005a5b8 cmp sb, r2 |
0x0005a5ba it ge |
| if (sb < r2) {
0x0005a5bc ldrge r3, [r7] | r3 = *(r7);
| }
| if (sb >= r2) {
0x0005a5be bge.w 0x5a742 | goto label_76;
| }
0x0005a5c2 mov r3, r8 | r3 = r8;
0x0005a5c4 str.w sb, [sp, 0x4c] | __asm ("str.w sb, [var_4ch]");
0x0005a5c8 b 0x5a5da |
| while (r3 != 0) {
| label_7:
0x0005a5ca ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0005a5cc ldr r1, [r5] | r1 = *(r5);
0x0005a5ce str r6, [r7] | *(r7) = r6;
0x0005a5d0 cmp r4, r2 |
0x0005a5d2 add r1, r0 | r1 += r0;
0x0005a5d4 str r1, [r5] | *(r5) = r1;
| if (r4 <= r2) {
0x0005a5d6 ble.w 0x5a73c | goto label_77;
| }
0x0005a5da ldr r2, [sp, 0x44] | r2 = x;
0x0005a5dc cmp r2, sl |
| if (r2 >= sl) {
0x0005a5de blt 0x5a5f2 |
0x0005a5e0 cmp.w fp, 6 |
0x0005a5e4 mov sl, fp | sl = fp;
| if (fp == 6) {
0x0005a5e6 beq.w 0x5a88e | goto label_78;
| }
0x0005a5ea ldr r1, [sp, 0x14c] | r1 = var_14ch;
0x0005a5ec movs r2, 0 | r2 = 0;
0x0005a5ee str r2, [r5] | *(r5) = r2;
0x0005a5f0 str r1, [r7, 4] | *((r7 + 4)) = r1;
| }
0x0005a5f2 ldr.w r8, [r7] | r8 = *(r7);
0x0005a5f6 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0005a5f8 add.w r6, r8, -1 | r6 = r8 + -1;
0x0005a5fc ldrh.w r0, [r2, r6, lsl 1] | offset_3 = r6 << 1;
| r0 = *((r2 + offset_3));
0x0005a600 lsl.w sb, r6, 1 | sb = r6 << 1;
| if (r0 == 0) {
0x0005a604 cbnz r0, 0x5a612 |
0x0005a606 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0005a608 mov r1, r6 | r1 = r6;
0x0005a60a str r3, [sp, 0x50] | var_50h = r3;
0x0005a60c bl 0xa3ac | fcn_0000a3ac (r0, r1, r2);
0x0005a610 ldr r3, [sp, 0x50] | r3 = var_50h;
| }
0x0005a612 ldr r4, [r5, -0x4] | r4 = *((r5 - 0x4));
0x0005a616 adds r0, 2 | r0 += 2;
0x0005a618 subs r4, r4, r0 | r4 -= r0;
0x0005a61a str r4, [r5, -0x4] | *((r5 - 0x4)) = r4;
0x0005a61e cmp r3, 0 |
0x0005a620 bne 0x5a5ca |
| }
0x0005a622 ldr r1, [sp, 0x14c] | r1 = var_14ch;
0x0005a624 cmp r8, r1 |
0x0005a626 it ge |
| if (r8 >= r1) {
0x0005a628 movge r0, r3 | r0 = r3;
| goto label_79;
| }
| if (r8 >= r1) {
| label_79:
0x0005a62a bge 0x5a5ca | goto label_7;
| }
0x0005a62c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0005a62e add sb, r2 | sb += r2;
0x0005a630 ldrh.w r0, [sb, 2] | r0 = *((sb + 2));
| if (r0 == 0) {
0x0005a634 cbnz r0, 0x5a642 |
0x0005a636 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0005a638 mov r1, r8 | r1 = r8;
0x0005a63a str r3, [sp, 0x50] | var_50h = r3;
0x0005a63c bl 0xa3ac | fcn_0000a3ac (r0, r1, r2);
0x0005a640 ldr r3, [sp, 0x50] | r3 = var_50h;
| }
0x0005a642 adds r0, 2 | r0 += 2;
0x0005a644 b 0x5a5ca | goto label_7;
| label_71:
0x0005a646 ldrh r0, [r6, 0x1c] | r0 = *((r6 + 0x1c));
0x0005a648 cmp fp, r0 |
| if (fp <= r0) {
0x0005a64a blo.w 0x5a972 | goto label_80;
| }
| if (r0 == 0) {
0x0005a64e cbz r0, 0x5a674 | goto label_81;
| }
0x0005a650 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x0005a652 mov r2, r8 | r2 = r8;
0x0005a654 add.w r8, r8, r0, lsl 1 | r8 += (r0 << 1);
0x0005a658 add.w r7, r3, sl, lsl 2 | r7 = r3 + (sl << 2);
| do {
0x0005a65c ldrh r3, [r2], 2 | r3 = *(r2);
| r2 += 2;
0x0005a660 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x0005a662 cmp r8, r2 |
0x0005a664 and.w r3, r3, r5 | r3 &= r5;
0x0005a668 add r3, r4 | r3 += r4;
0x0005a66a str r3, [r7], 4 | *(r7) = r3;
| r7 += 4;
0x0005a66e bne 0x5a65c |
| } while (r8 != r2);
0x0005a670 add.w r7, r0, sl | r7 = r0 + sl;
| label_81:
0x0005a674 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x0005a676 add.w r3, r6, 0x20 | r3 = r6 + 0x20;
0x0005a67a movs r0, 4 | r0 = 4;
0x0005a67c smlabb ip, r0, r1, r3 | __asm ("smlabb ip, r0, r1, r3");
0x0005a680 add.w r2, r2, r7, lsl 2 | r2 += (r7 << 2);
| do {
0x0005a684 ldr r0, [r3, 4]! | r0 = *((r3 += 4));
0x0005a688 cmp ip, r3 |
0x0005a68a str r0, [r2], 4 | *(r2) = r0;
| r2 += 4;
0x0005a68e bne 0x5a684 |
| } while (ip != r3);
0x0005a690 add r7, r1 | r7 += r1;
0x0005a692 str r7, [sp, 0x14c] | var_14ch = r7;
0x0005a694 b 0x5a46a | goto label_8;
| label_73:
0x0005a696 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0005a698 ldr r5, [sp, 0x14] | r5 = var_14h;
0x0005a69a ldr r1, [sp, 0x44] | r1 = x;
0x0005a69c ldr.w r2, [r3, sb, lsl 2] | offset_4 = sb << 2;
| r2 = *((r3 + offset_4));
0x0005a6a0 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0005a6a2 strh.w r2, [r5, r7, lsl 1] | offset_5 = r7 << 1;
| *((r5 + offset_5)) = r2;
0x0005a6a6 uxth r2, r2 | r2 = (int16_t) r2;
0x0005a6a8 add r3, r1 | r3 += r1;
0x0005a6aa mov r0, r3 | r0 = r3;
0x0005a6ac add r1, r2 | r1 += r2;
0x0005a6ae str r1, [sp, 0x44] | x = r1;
0x0005a6b0 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0005a6b2 ldr.w r1, [r1, sb, lsl 2] | offset_6 = sb << 2;
| r1 = *((r1 + offset_6));
0x0005a6b6 blx 0x8610 | fcn_00008610 ();
0x0005a6ba ldrh.w r2, [r5, r7, lsl 1] | offset_7 = r7 << 1;
| r2 = *((r5 + offset_7));
0x0005a6be mov r3, r0 | r3 = r0;
0x0005a6c0 ldr r1, [sp, 0x68] | r1 = var_68h;
0x0005a6c2 subs r2, r2, r1 | r2 -= r1;
0x0005a6c4 adds r1, r0, r1 | r1 = r0 + r1;
0x0005a6c6 ldr r0, [sp, 0x1c] | r0 = var_1ch_2;
0x0005a6c8 uxth r2, r2 | r2 = (int16_t) r2;
0x0005a6ca str.w r1, [r0, r7, lsl 2] | __asm ("str.w r1, [r0, r7, lsl 2]");
0x0005a6ce add.w r1, r5, r7, lsl 1 | r1 = r5 + (r7 << 1);
0x0005a6d2 strh.w r2, [r5, r7, lsl 1] | offset_8 = r7 << 1;
| *((r5 + offset_8)) = r2;
0x0005a6d6 ldrb r0, [r6, 8] | r0 = *((r6 + 8));
| if (r0 != 0) {
0x0005a6d8 cbnz r0, 0x5a6e8 | goto label_82;
| }
0x0005a6da ldr r2, [r6, 0x38] | r2 = *((r6 + 0x38));
0x0005a6dc ldr r1, [sp, 0x68] | r1 = var_68h;
0x0005a6de ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0005a6e0 str r2, [r3, r1] | *((r3 + r1)) = r2;
| do {
| label_10:
0x0005a6e2 adds r7, 1 | r7++;
0x0005a6e4 str r7, [sp, 0x14c] | var_14ch = r7;
0x0005a6e6 b 0x5a4c2 | goto label_9;
| label_82:
0x0005a6e8 cmp r2, 3 |
0x0005a6ea bhi 0x5a6e2 |
| } while (r2 > 3);
0x0005a6ec ldr r3, [sp, 0x44] | r3 = x;
0x0005a6ee movs r5, 0 | r5 = 0;
0x0005a6f0 subs r2, r3, 1 | r2 = r3 - 1;
0x0005a6f2 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0005a6f4 add r2, r3 | r2 += r3;
| do {
0x0005a6f6 mov r0, r2 | r0 = r2;
0x0005a6f8 strb r5, [r2, 1]! | *((r2 += 1)) = r5;
0x0005a6fc ldrh r3, [r1] | r3 = *(r1);
0x0005a6fe adds r3, 1 | r3++;
0x0005a700 uxth r3, r3 | r3 = (int16_t) r3;
0x0005a702 cmp r3, 3 |
0x0005a704 strh r3, [r1] | *(r1) = r3;
0x0005a706 bls 0x5a6f6 |
| } while (r3 < 3);
0x0005a708 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0005a70a rsb.w r3, r3, 2 | r3 = 2 - r3;
0x0005a70c lsls r2, r0, 0xc | r2 = r0 << 0xc;
0x0005a70e add r3, r0 | r3 += r0;
0x0005a710 str r3, [sp, 0x44] | x = r3;
0x0005a712 b 0x5a6e2 | goto label_10;
| label_59:
0x0005a714 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0005a716 str r4, [sp, 0x24] | var_24h = r4;
0x0005a718 ldr r1, [r2, 0x38] | r1 = *((r2 + 0x38));
| label_29:
0x0005a71a str r3, [sp, 0x28] | *(arg_28h) = r3;
0x0005a71c ldr r3, [sp, 0x40] | r3 = var_40h;
0x0005a71e ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x0005a720 adds r3, 8 | r3 += 8;
0x0005a722 adds r3, r1, r3 | r3 = r1 + r3;
0x0005a724 str r3, [sp, 0x5c] | var_5ch = r3;
0x0005a726 b 0x5a1e0 | goto label_11;
| label_68:
0x0005a728 ldr r0, [sp, 0x6c] | r0 = var_6ch;
0x0005a72a ldr r4, [sp, 0x1c0] | r4 = var_1c0h;
0x0005a72c subs r3, r0, 2 | r3 = r0 - 2;
0x0005a72e add r3, r4 | r3 += r4;
0x0005a730 str r3, [sp, 0x24] | var_24h = r3;
0x0005a732 mov r3, r0 | r3 = r0;
0x0005a734 b 0x5a1c2 | goto label_0;
| label_74:
0x0005a736 mov.w fp, 1 |
0x0005a73a b 0x5a530 | goto label_12;
| label_77:
0x0005a73c mov r8, r3 | r8 = r3;
0x0005a73e mov sb, r2 | sb = r2;
0x0005a740 mov r3, r6 | r3 = r6;
| label_76:
0x0005a742 ldr r6, [sp, 0x14c] | r6 = var_14ch;
0x0005a744 sub.w r2, fp, 2 | r2 = fp - 2;
0x0005a748 str r2, [sp, 0x50] | var_50h = r2;
0x0005a74a cmp r6, r3 |
| if (r6 <= r3) {
0x0005a74c ble 0x5a796 | goto label_15;
| }
0x0005a74e ldr r2, [sp, 0x14] | r2 = var_14h;
0x0005a750 mov r1, r3 | r1 = r3;
0x0005a752 add.w r4, r2, r3, lsl 1 | r4 = r2 + (r3 << 1);
| do {
| label_13:
0x0005a756 ldrh r0, [r4], 2 | r0 = *(r4);
| r4 += 2;
| if (r0 == 0) {
0x0005a75a cbnz r0, 0x5a766 |
0x0005a75c ldr r0, [sp, 0x38] | r0 = var_38h;
0x0005a75e str r1, [sp, 0x4c] | var_4ch = r1;
0x0005a760 bl 0xa3ac | fcn_0000a3ac (r0, r1, r2);
0x0005a764 ldr r1, [sp, 0x4c] | r1 = var_4ch;
| }
0x0005a766 ldr r2, [r5, -0x4] | r2 = *((r5 - 0x4));
0x0005a76a adds r0, 2 | r0 += 2;
0x0005a76c add r2, r0 | r2 += r0;
0x0005a76e cmp r2, sb |
| if (r2 > sb) {
0x0005a770 bgt.w 0x5a8b2 | goto label_83;
| }
0x0005a774 adds r1, 1 | r1++;
0x0005a776 str r2, [r5, -0x4] | *((r5 - 0x4)) = r2;
0x0005a77a str r1, [r7] | *(r7) = r1;
0x0005a77c cmp.w r8, 0 |
| if (r8 == 0) {
0x0005a780 bne 0x5a78a |
0x0005a782 cmp r1, r6 |
0x0005a784 it ge |
| if (r1 < r6) {
0x0005a786 movge r0, r8 | r0 = r8;
| }
| if (r1 < r6) {
0x0005a788 blt 0x5a846 | goto label_84;
| }
| }
0x0005a78a ldr r2, [r5] | r2 = *(r5);
0x0005a78c cmp r1, r6 |
0x0005a78e sub.w r2, r2, r0 | r2 -= r0;
0x0005a792 str r2, [r5] | *(r5) = r2;
0x0005a794 bne 0x5a756 |
| } while (r1 != r6);
| label_15:
0x0005a796 ldr.w r8, [sp, 0x50] | r8 = var_50h;
0x0005a79a add.w r3, fp, -1 | r3 = fp + -1;
0x0005a79e str r6, [sp, 0x4c] | var_4ch = r6;
0x0005a7a0 ldr r6, [sp, 0x7c] | r6 = var_7ch;
0x0005a7a2 mov r0, r8 | r0 = r8;
0x0005a7a4 str r3, [sp, 0x50] | var_50h = r3;
| label_17:
0x0005a7a6 add.w r3, r0, 0x40000000 | r3 = r0 + 0x40000000;
0x0005a7aa ldr r1, [sp, 0x64] | r1 = var_64h;
0x0005a7ac subs r3, 1 | r3--;
0x0005a7ae str r0, [sp, 0x44] | x = r0;
0x0005a7b0 lsls r2, r3, 2 | r2 = r3 << 2;
0x0005a7b2 adds r3, r6, r2 | r3 = r6 + r2;
0x0005a7b4 adds r2, 4 | r2 += 4;
0x0005a7b6 add r1, r2 | r1 += r2;
0x0005a7b8 mov r2, r1 | r2 = r1;
0x0005a7ba cmp r0, 0 |
| if (r0 == 0) {
0x0005a7bc beq.w 0x5a99a | goto label_85;
| }
0x0005a7c0 ldr.w sl, [sp, 0x38] | sl = var_38h;
0x0005a7c4 mov fp, r3 |
0x0005a7c6 str r0, [sp, 0x8c] | var_8ch = r0;
| label_19:
0x0005a7c8 ldr.w r6, [fp] | r6 = *(fp);
0x0005a7cc ldr r3, [sp, 0x30] | r3 = var_30h;
0x0005a7ce ldrd r8, r4, [r2, -0x4] | __asm ("ldrd r8, r4, [r2, -0x4]");
0x0005a7d2 subs r5, r6, 1 | r5 = r6 - 1;
0x0005a7d4 str.w fp, [sp, 0x7c] | __asm ("str.w fp, [var_7ch]");
0x0005a7d8 subs r1, r6, r3 | r1 = r6 - r3;
0x0005a7da ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005a7dc ldrh.w r0, [r3, r1, lsl 1] | offset_9 = r1 << 1;
| r0 = *((r3 + offset_9));
0x0005a7e0 add.w r7, r3, r1, lsl 1 | r7 = r3 + (r1 << 1);
| if (r0 == 0) {
0x0005a7e4 cbnz r0, 0x5a7f0 |
0x0005a7e6 mov r0, sl | r0 = sl;
0x0005a7e8 str r2, [sp, 0x64] | var_64h = r2;
0x0005a7ea bl 0xa3ac | fcn_0000a3ac (r0, r1, r2);
0x0005a7ee ldr r2, [sp, 0x64] | r2 = var_64h;
| }
0x0005a7f0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005a7f2 ldr r1, [sp, 0x8c] | r1 = var_8ch;
0x0005a7f4 str r2, [sp, 0x64] | var_64h = r2;
0x0005a7f6 add.w r6, r3, r6, lsl 1 | r6 = r3 + (r6 << 1);
0x0005a7fa ldr r3, [sp, 0x44] | r3 = x;
0x0005a7fc subs.w sb, r3, r1 | sb = r3 - r1;
0x0005a800 mov r3, fp | r3 = fp;
0x0005a802 it ne |
| if (sb == r3) {
0x0005a804 movne sb, 1 | sb = 1;
| }
0x0005a808 mov fp, r8 |
0x0005a80a lsl.w sb, sb, 1 | sb <<= 1;
0x0005a80e mov r8, r5 | r8 = r5;
0x0005a810 mov r5, r3 | r5 = r3;
| do {
0x0005a812 ldrh r3, [r6, -0x2]! | r3 = *((r6 -= 0x2));
| if (r3 == 0) {
0x0005a816 cbnz r3, 0x5a820 |
0x0005a818 mov r1, r8 | r1 = r8;
0x0005a81a mov r0, sl | r0 = sl;
0x0005a81c bl 0xa3ac | fcn_0000a3ac (r0, r1, r2);
| }
0x0005a820 cmp r4, 0 |
| if (r4 != 0) {
0x0005a822 bne 0x5a8fe | goto label_86;
| }
0x0005a824 ldrh r0, [r7] | r0 = *(r7);
0x0005a826 ldrh r3, [r6] | r3 = *(r6);
| label_18:
0x0005a828 adds r3, 2 | r3 += 2;
0x0005a82a adds r0, 2 | r0 += 2;
0x0005a82c sub.w fp, fp, r3 |
0x0005a830 subs.w r3, r8, 1 | r3 = r8 - 1;
0x0005a834 add r4, r0 | r4 += r0;
0x0005a836 sub.w r7, r7, 2 | r7 -= 2;
0x0005a83a str.w r8, [r5] | __asm ("str.w r8, [r5]");
| if (r3 < r8) {
0x0005a83e bmi.w 0x5a966 | goto label_87;
| }
0x0005a842 mov r8, r3 | r8 = r3;
0x0005a844 b 0x5a812 |
| } while (1);
| label_84:
0x0005a846 ldrh r0, [r4] | r0 = *(r4);
| if (r0 == 0) {
0x0005a848 cbnz r0, 0x5a854 |
0x0005a84a ldr r0, [sp, 0x38] | r0 = var_38h;
0x0005a84c str r1, [sp, 0x4c] | var_4ch = r1;
0x0005a84e bl 0xa3ac | fcn_0000a3ac (r0, r1, r2);
0x0005a852 ldr r1, [sp, 0x4c] | r1 = var_4ch;
| }
0x0005a854 ldr r2, [r5] | r2 = *(r5);
0x0005a856 adds r0, 2 | r0 += 2;
0x0005a858 subs r2, r2, r0 | r2 -= r0;
0x0005a85a str r2, [r5] | *(r5) = r2;
0x0005a85c b 0x5a756 | goto label_13;
| label_70:
0x0005a85e blx 0x83b8 | strerror_r ();
0x0005a862 ldr.w r2, [pc, 0x410] | r2 = *(0x0005ac74);
0x0005a866 adds r0, 0x14 | r0 += 0x14;
0x0005a868 ldr.w r1, [pc, 0x40c] | r1 = *(0x0005ac78);
0x0005a86c movw r3, 0x24ab |
0x0005a870 str r0, [sp] | *(sp) = r0;
0x0005a872 movt r3, 1 | r3 = 0x124ab;
0x0005a876 add r2, pc | r2 += pc;
0x0005a878 movs r0, 0xb | r0 = 0xb;
0x0005a87a add r1, pc | r1 += pc;
0x0005a87c blx 0x8b60 | fcn_00008b60 ();
| do {
| label_20:
0x0005a880 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0005a882 movs r5, 0xb | r5 = 0xb;
0x0005a884 str r5, [r3] | *(r3) = r5;
| label_25:
0x0005a886 ldr r0, [sp, 0x1c] | r0 = var_1ch_2;
0x0005a888 blx 0x8404 | fcn_00008404 ();
0x0005a88c b 0x5a2f2 | goto label_3;
| label_78:
0x0005a88e blx 0x83b8 | strerror_r ();
0x0005a892 ldr r2, [pc, 0x3e8] |
0x0005a894 adds r0, 0x14 | r0 += 0x14;
0x0005a896 ldr r1, [pc, 0x3e8] |
0x0005a898 movw r3, 0x2528 |
0x0005a89c str r0, [sp] | *(sp) = r0;
0x0005a89e movt r3, 1 | r3 = 0x12528;
0x0005a8a2 add r2, pc | r2 = 0xb5524;
0x0005a8a4 movs r0, 0xb | r0 = 0xb;
0x0005a8a6 add r1, pc | r1 = "LEFT-MOST SUBQUERY";
0x0005a8a8 blx 0x8b60 | fcn_00008b60 ();
0x0005a8ac b 0x5a880 |
| } while (1);
| label_58:
0x0005a8ae movs r5, 7 | r5 = 7;
0x0005a8b0 b 0x5a324 | goto label_14;
| label_83:
0x0005a8b2 cmp r1, r6 |
0x0005a8b4 mov r3, r1 | r3 = r1;
| if (r1 >= r6) {
0x0005a8b6 bge.w 0x5a796 | goto label_15;
| }
0x0005a8ba ldr r2, [sp, 0x50] | r2 = var_50h;
0x0005a8bc cmp r2, 0 |
| if (r2 == 0) {
0x0005a8be beq 0x5a992 | goto label_88;
| }
0x0005a8c0 ldr r2, [r7, -0x4] | r2 = *((r7 - 0x4));
| label_22:
0x0005a8c4 cmp r2, r3 |
| if (r2 >= r3) {
0x0005a8c6 bge.w 0x5ab28 | goto label_89;
| }
0x0005a8ca ldr r3, [sp, 0x44] | r3 = x;
0x0005a8cc add.w r2, fp, -1 | r2 = fp + -1;
0x0005a8d0 cmp sl, r2 |
0x0005a8d2 add.w r7, r7, 4 | r7 += 4;
0x0005a8d6 add.w fp, fp, 1 |
0x0005a8da add.w r3, r3, 1 | r3++;
0x0005a8de str r3, [sp, 0x44] | x = r3;
| if (sl > r2) {
0x0005a8e0 bgt.w 0x5a5b4 | goto label_16;
| }
0x0005a8e4 strd r6, sl, [sp, 0x4c] | __asm ("strd r6, sl, [sp, 0x4c]");
0x0005a8e8 add.w r0, sl, -1 | r0 = sl + -1;
0x0005a8ec ldr r6, [sp, 0x7c] | r6 = var_7ch;
0x0005a8ee b 0x5a7a6 | goto label_17;
| label_69:
0x0005a8f0 ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005a8f2 movs r5, 7 | r5 = 7;
0x0005a8f4 adds r3, 1 | r3++;
0x0005a8f6 str r3, [sp, 0x20] | var_20h = r3;
0x0005a8f8 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0005a8fa str r5, [r3] | *(r3) = r5;
0x0005a8fc b 0x5a2f2 | goto label_3;
| label_86:
0x0005a8fe ldr r3, [sp, 0x1c0] | r3 = var_1c0h;
| if (r3 != 0) {
0x0005a900 cbnz r3, 0x5a91a | goto label_90;
| }
0x0005a902 ldrh r0, [r7] | r0 = *(r7);
0x0005a904 ldrh r3, [r6] | r3 = *(r6);
0x0005a906 add.w lr, r0, r4 | lr = r0 + r4;
0x0005a90a add.w ip, r3, sb |
0x0005a90e add.w lr, lr, 1 | lr++;
0x0005a912 sub.w ip, fp, ip |
0x0005a916 cmp lr, ip |
| if (lr < ip) {
0x0005a918 blt 0x5a828 | goto label_18;
| }
| label_90:
0x0005a91a mov r8, fp | r8 = fp;
0x0005a91c ldr r2, [sp, 0x64] | r2 = var_64h;
0x0005a91e mov fp, r5 |
0x0005a920 ldr r5, [r5] | r5 = *(r5);
| label_21:
0x0005a922 ldr r3, [sp, 0x44] | r3 = x;
0x0005a924 str r4, [r2] | *(r2) = r4;
0x0005a926 str r8, [r2, -0x4]! | *((r2 -= 0x4)) = r8;
0x0005a92a cmp r3, 1 |
| if (r3 == 1) {
0x0005a92c beq 0x5a996 | goto label_91;
| }
0x0005a92e ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0005a930 sub.w fp, fp, 4 |
0x0005a934 ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x0005a938 ldr r3, [sp, 0x44] | r3 = x;
0x0005a93a cmp r1, r5 |
0x0005a93c add.w r3, r3, -1 | r3 += -1;
0x0005a940 str r3, [sp, 0x44] | x = r3;
| if (r1 < r5) {
0x0005a942 blt.w 0x5a7c8 | goto label_19;
| }
| do {
0x0005a946 blx 0x83b8 | strerror_r ();
0x0005a94a ldr r2, [pc, 0x338] |
0x0005a94c adds r0, 0x14 | r0 += 0x14;
0x0005a94e ldr r1, [pc, 0x338] |
0x0005a950 movw r3, 0x2573 |
0x0005a954 str r0, [sp] | *(sp) = r0;
0x0005a956 movt r3, 1 | r3 = 0x12573;
0x0005a95a add r2, pc | r2 = 0xb55e4;
0x0005a95c movs r0, 0xb | r0 = 0xb;
0x0005a95e add r1, pc | r1 = "AUTOINCREMENT not allowed on WITHOUT ROWID tables";
0x0005a960 blx 0x8b60 | fcn_00008b60 ();
0x0005a964 b 0x5a880 | goto label_20;
| label_87:
0x0005a966 mov r3, r5 | r3 = r5;
0x0005a968 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0005a96a mov r5, r8 | r5 = r8;
0x0005a96c mov r8, fp | r8 = fp;
0x0005a96e mov fp, r3 |
0x0005a970 b 0x5a922 | goto label_21;
| label_80:
0x0005a972 blx 0x83b8 | strerror_r ();
0x0005a976 ldr r2, [pc, 0x314] |
0x0005a978 adds r0, 0x14 | r0 += 0x14;
0x0005a97a ldr r1, [pc, 0x314] |
0x0005a97c movw r3, 0x24c3 |
0x0005a980 str r0, [sp] | *(sp) = r0;
0x0005a982 movt r3, 1 | r3 = 0x124c3;
0x0005a986 add r2, pc | r2 = 0xb5618;
0x0005a988 movs r0, 0xb | r0 = 0xb;
0x0005a98a add r1, pc | r1 = "PRIMARY KEY missing on table %s";
0x0005a98c blx 0x8b60 | fcn_00008b60 ();
0x0005a990 b 0x5a880 | goto label_20;
| label_88:
0x0005a992 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0005a994 b 0x5a8c4 | goto label_22;
| label_91:
0x0005a996 cmp r5, 0 |
0x0005a998 ble 0x5a946 |
| } while (r5 <= 0);
| label_85:
0x0005a99a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0005a99c add.w sb, sp, 0xd4 | sb += var_d4h;
0x0005a9a0 movs r7, 0 | r7 = 0;
0x0005a9a2 mov sl, sb | sl = sb;
0x0005a9a4 str.w sb, [sp, 0x64] | __asm ("str.w sb, [var_64h]");
0x0005a9a8 mov r4, r7 | r4 = r7;
0x0005a9aa ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0005a9ac str.w sb, [sp, 0x7c] | __asm ("str.w sb, [var_7ch]");
0x0005a9b0 ldr r5, [sp, 0x88] | r5 = var_88h;
0x0005a9b2 ldrb.w r8, [r3] | r8 = *(r3);
0x0005a9b6 add r3, sp, 0x98 | r3 += var_98h;
0x0005a9b8 ldr.w sb, [sp, 0x58] | sb = var_58h;
0x0005a9bc str r3, [sp, 0x34] | var_34h = r3;
0x0005a9be b 0x5aa0e |
| while (r3 == 0) {
0x0005a9c0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005a9c2 ldr r3, [r3] | r3 = *(r3);
| label_23:
0x0005a9c4 ldr r6, [sp, 0x34] | r6 = var_34h;
0x0005a9c6 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005a9c8 ldr r0, [sp, 0x54] | r0 = var_54h;
0x0005a9ca mov r1, r6 | r1 = r6;
0x0005a9cc str r4, [sp] | *(sp) = r4;
0x0005a9ce bl 0x58448 | fcn_00058448 (r0, r1, r2, r3, r4, r5, r6);
0x0005a9d2 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0005a9d6 cmp r0, 0 |
| if (r0 != 0) {
0x0005a9d8 bne 0x5aaa6 | goto label_92;
| }
0x0005a9da ldr r0, [r6] | r0 = *(r6);
0x0005a9dc mov r1, r8 | r1 = r8;
0x0005a9de add.w fp, r7, 1 |
0x0005a9e2 mov r6, fp | r6 = fp;
0x0005a9e4 str r0, [sp, 0x44] | x = r0;
0x0005a9e6 bl 0x265f8 | fcn_000265f8 (r0, r1);
0x0005a9ea ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0005a9ec ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0005a9ee ldr r0, [sp, 0x44] | r0 = x;
0x0005a9f0 str.w r2, [r3, r7, lsl 2] | __asm ("str.w r2, [r3, r7, lsl 2]");
0x0005a9f4 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0005a9f6 str.w r0, [sl] | __asm ("str.w r0, [sl]");
0x0005a9fa ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
0x0005a9fc cmp r3, 0 |
| if (r3 != 0) {
0x0005a9fe bne 0x5aa8e | goto label_93;
| }
| label_24:
0x0005aa00 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0005aa02 add.w sl, sl, 4 | sl += 4;
0x0005aa06 adds r5, 4 | r5 += 4;
0x0005aa08 mov r7, fp | r7 = fp;
0x0005aa0a cmp fp, r3 |
| if (fp >= r3) {
0x0005aa0c bge 0x5aaac | goto label_94;
| }
0x0005aa0e ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005aa10 cmp r3, r7 |
| if (r3 > r7) {
0x0005aa12 bgt 0x5aa1e | goto label_95;
| }
0x0005aa14 ldr r3, [sp, 0x1c0] | r3 = var_1c0h;
0x0005aa16 cmp r3, 0 |
0x0005aa18 beq 0x5a9c0 |
| }
0x0005aa1a movs r3, 1 | r3 = 1;
0x0005aa1c b 0x5a9c4 | goto label_23;
| label_95:
0x0005aa1e ldr r6, [r5] | r6 = *(r5);
0x0005aa20 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0005aa22 str r4, [r5] | *(r5) = r4;
0x0005aa24 ldr r0, [r6, 0x48] | r0 = *((r6 + 0x48));
0x0005aa26 str r6, [r3] | *(r3) = r6;
0x0005aa28 str.w r6, [sl] | __asm ("str.w r6, [sl]");
0x0005aa2c bl 0x5480c | fcn_0005480c (r0);
0x0005aa30 ldr r3, [r6, 0x48] | r3 = *((r6 + 0x48));
0x0005aa32 adds r6, r7, 1 | r6 = r7 + 1;
0x0005aa34 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0005aa36 mov fp, r6 |
0x0005aa38 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0005aa3c ldrsh.w r1, [r3, 0x1e] | r1 = *((r3 + 0x1e));
0x0005aa40 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0005aa42 subs r3, r3, r2 | r3 -= r2;
0x0005aa44 clz r2, r0 | r2 &= r0;
0x0005aa48 cmp r3, r7 |
0x0005aa4a ite eq |
| if (r3 != r7) {
0x0005aa4c moveq r3, 2 | r3 = 2;
| }
| if (r3 == r7) {
0x0005aa4e movne r3, 1 | r3 = 1;
| }
0x0005aa50 lsrs r2, r2, 5 | r2 >>= 5;
0x0005aa52 cmp r3, r1 |
0x0005aa54 it eq |
| if (r3 != r1) {
0x0005aa56 moveq r2, 0 | r2 = 0;
| }
| if (r2 != 0) {
0x0005aa58 cbnz r2, 0x5aa68 | goto label_96;
| }
| label_26:
0x0005aa5a cmp r0, 0 |
| if (r0 == 0) {
0x0005aa5c beq 0x5aa00 | goto label_24;
| }
0x0005aa5e mov r5, r0 | r5 = r0;
| do {
| label_27:
0x0005aa60 mov sl, r6 | sl = r6;
| label_32:
0x0005aa62 str.w sl, [sp, 0x60] | __asm ("str.w sl, [var_60h]");
0x0005aa66 b 0x5a886 | goto label_25;
| label_96:
0x0005aa68 blx 0x83b8 | strerror_r ();
0x0005aa6c ldr r2, [pc, 0x224] |
0x0005aa6e adds r0, 0x14 | r0 += 0x14;
0x0005aa70 ldr r1, [pc, 0x224] |
0x0005aa72 movw r3, 0x2594 |
0x0005aa76 movt r3, 1 | r3 = 0x12594;
0x0005aa7a str r0, [sp] | *(sp) = r0;
0x0005aa7c add r2, pc | r2 = 0xb5714;
0x0005aa7e movs r0, 0xb | r0 = 0xb;
0x0005aa80 add r1, pc | r1 = "tbl_name='%q' AND type!='trigger';
0x0005aa82 movs r5, 0xb | r5 = 0xb;
0x0005aa84 blx 0x8b60 | fcn_00008b60 ();
0x0005aa88 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0005aa8a str r5, [r3] | *(r3) = r5;
0x0005aa8c b 0x5aa60 |
| } while (1);
| label_93:
0x0005aa8e ldr r3, [sp, 0x40] | r3 = var_40h;
0x0005aa90 movs r2, 5 | r2 = 5;
0x0005aa92 ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x0005aa94 ldr r0, [sp, 0x54] | r0 = var_54h;
0x0005aa96 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0005aa9a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005aa9c bl 0x58aac | fcn_00058aac (r0, r1, r2, r3, r4);
0x0005aaa0 ldr.w r0, [sb] | r0 = *(sb);
0x0005aaa4 b 0x5aa5a | goto label_26;
| label_92:
0x0005aaa6 mov r5, r0 | r5 = r0;
0x0005aaa8 mov r6, r7 | r6 = r7;
0x0005aaaa b 0x5aa60 | goto label_27;
| label_94:
0x0005aaac ldr.w sb, [sp, 0x7c] | sb = var_7ch;
0x0005aab0 add r3, sp, 0x138 | r3 += var_138h;
0x0005aab2 add r0, sp, 0x120 | r0 += var_120h;
0x0005aab4 add r6, sp, 0xbc | r6 += var_bch;
0x0005aab6 mov r7, r3 | r7 = r3;
0x0005aab8 mov.w ip, 0 |
0x0005aabc mov r4, sb | r4 = sb;
0x0005aabe str r3, [sp, 0x3c] | var_3ch = r3;
| label_28:
0x0005aac0 ldr r3, [r4], 4 | r3 = *(r4);
| r4 += 4;
0x0005aac4 mov r1, r0 | r1 = r0;
0x0005aac6 ldr r5, [r3, 0x48] | r5 = *((r3 + 0x48));
0x0005aac8 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0005aaca ldrh r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0005aacc str r2, [r0, 4]! | *((r0 += 4)) = r2;
0x0005aad0 str r2, [r7], 4 | *(r7) = r2;
| r7 += 4;
0x0005aad4 strh r3, [r6], 2 | *(r6) = r3;
| r6 += 2;
0x0005aad8 cmp.w ip, 0 |
| if (ip == 0) {
0x0005aadc beq 0x5ab1c | goto label_97;
| }
0x0005aade add r3, sp, 0x124 | r3 += var_124h;
0x0005aae0 b 0x5aae6 |
| while (r2 != lr) {
0x0005aae2 cmp r1, r5 |
| if (r1 == r5) {
0x0005aae4 beq 0x5ab1c | goto label_97;
| }
0x0005aae6 ldr.w lr, [r3] |
0x0005aaea mov r5, r3 | r5 = r3;
0x0005aaec adds r3, 4 | r3 += 4;
0x0005aaee cmp r2, lr |
0x0005aaf0 bne 0x5aae2 |
| }
0x0005aaf2 blx 0x83b8 | strerror_r ();
0x0005aaf6 ldr r2, [pc, 0x1a4] |
0x0005aaf8 adds r0, 0x14 | r0 += 0x14;
0x0005aafa ldr r1, [pc, 0x1a4] |
0x0005aafc movw r3, 0x25c2 |
0x0005ab00 str r0, [sp] | *(sp) = r0;
0x0005ab02 movt r3, 1 | r3 = 0x125c2;
0x0005ab06 add r2, pc | r2 = 0xb57a8;
0x0005ab08 movs r0, 0xb | r0 = 0xb;
0x0005ab0a add r1, pc | r1 = 0xb57b0;
0x0005ab0c blx 0x8b60 | fcn_00008b60 ();
0x0005ab10 movs r5, 0xb | r5 = 0xb;
| label_51:
0x0005ab12 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0005ab14 str.w fp, [sp, 0x60] | __asm ("str.w fp, [var_60h]");
0x0005ab18 str r5, [r3] | *(r3) = r5;
0x0005ab1a b 0x5a886 | goto label_25;
| label_97:
0x0005ab1c add.w sl, ip, 1 | sl = ip + 1;
0x0005ab20 cmp fp, sl |
| if (fp != sl) {
0x0005ab22 beq 0x5ab56 |
0x0005ab24 mov ip, sl |
0x0005ab26 b 0x5aac0 | goto label_28;
| label_89:
0x0005ab28 blx 0x83b8 | strerror_r ();
0x0005ab2c ldr r2, [pc, 0x174] |
0x0005ab2e adds r0, 0x14 | r0 += 0x14;
0x0005ab30 ldr r1, [pc, 0x174] |
0x0005ab32 movw r3, 0x2549 |
0x0005ab36 str r0, [sp] | *(sp) = r0;
0x0005ab38 movt r3, 1 | r3 = 0x12549;
0x0005ab3c add r2, pc | r2 = 0xb57e4;
0x0005ab3e movs r0, 0xb | r0 = 0xb;
0x0005ab40 add r1, pc | r1 = 0xb57ec;
0x0005ab42 blx 0x8b60 | fcn_00008b60 ();
0x0005ab46 b 0x5a880 | goto label_20;
| label_67:
0x0005ab48 blx 0x883c | fcn_0000883c ();
| label_61:
0x0005ab4c ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005ab4e b 0x5a71a | goto label_29;
| label_62:
0x0005ab50 mov r5, r0 | r5 = r0;
0x0005ab52 b.w 0x5a2dc | goto label_30;
| }
0x0005ab56 cmp.w fp, 1 |
0x0005ab5a ldr r3, [sp, 0x138] | r3 = var_138h;
| if (fp == 1) {
0x0005ab5c beq 0x5abe2 | goto label_98;
| }
0x0005ab5e str.w r8, [sp, 0x44] | __asm ("str.w r8, [x]");
0x0005ab62 movs r7, 0 | r7 = 0;
0x0005ab64 mov r4, sb | r4 = sb;
0x0005ab66 mov r8, ip | r8 = ip;
| label_31:
0x0005ab68 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0005ab6a movs r5, 0 | r5 = 0;
0x0005ab6c movs r1, 1 | r1 = 1;
0x0005ab6e b 0x5ab72 |
| while (r8 != r1) {
0x0005ab70 mov r1, r2 | r1 = r2;
0x0005ab72 ldr r6, [r0, 4]! | r6 = *((r0 += 4));
0x0005ab76 adds r2, r1, 1 | r2 = r1 + 1;
0x0005ab78 cmp r6, r3 |
0x0005ab7a ite hs |
| if (r6 < r3) {
0x0005ab7c movhs r6, r3 | r6 = r3;
| }
| if (r6 >= r3) {
0x0005ab7e movlo r5, r1 | r5 = r1;
| }
0x0005ab80 cmp r8, r1 |
0x0005ab82 mov r3, r6 | r3 = r6;
0x0005ab84 bne 0x5ab70 |
| }
0x0005ab86 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005ab88 add r3, sp, 0x198 | r3 += var_198h;
0x0005ab8a add.w r3, r3, r5, lsl 2 | r3 += (r5 << 2);
0x0005ab8e cmp r7, r5 |
0x0005ab90 str r6, [r2] | *(r2) = r6;
0x0005ab92 mov.w r2, -1 | r2 = -1;
0x0005ab96 str r2, [r3, -0x60] | *((r3 - 0x60)) = r2;
| if (r7 != r5) {
0x0005ab9a beq 0x5abd0 |
| if (r7 < r5) {
0x0005ab9c bge 0x5abb6 |
0x0005ab9e ldr r3, [r3, -0xc4] | r3 = *((r3 - 0xc4));
0x0005aba2 mov.w r2, 0 | r2 = 0;
0x0005aba6 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0005aba8 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0005abaa ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0005abac strh r2, [r0, 0x1c] | *((r0 + 0x1c)) = r2;
0x0005abae adds r3, 1 | r3++;
0x0005abb0 adds r1, r3, r5 | r1 = r3 + r5;
0x0005abb2 bl 0xfb54 | fcn_0000fb54 (r0, r1);
| }
0x0005abb6 add r3, sp, 0x198 | r3 += var_198h;
0x0005abb8 mov r1, r6 | r1 = r6;
0x0005abba add.w r3, r3, r5, lsl 1 | r3 += (r5 << 1);
0x0005abbe mov r5, r7 | r5 = r7;
0x0005abc0 ldr r7, [r4] | r7 = *(r4);
0x0005abc2 ldrh r3, [r3, -0xdc] | r3 = *((r3 - 0xdc));
0x0005abc6 ldr r0, [r7, 0x48] | r0 = *((r7 + 0x48));
0x0005abc8 strh r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x0005abca bl 0xfb54 | fcn_0000fb54 (r0, r1);
0x0005abce str r6, [r7, 4] | *((r7 + 4)) = r6;
| }
0x0005abd0 cmp r5, r8 |
0x0005abd2 add.w r4, r4, 4 | r4 += 4;
0x0005abd6 add.w r7, r5, 1 | r7 = r5 + 1;
| if (r5 == r8) {
0x0005abda beq.w 0x5b268 | goto label_99;
| }
0x0005abde ldr r3, [sp, 0x138] | r3 = var_138h;
0x0005abe0 b 0x5ab68 | goto label_31;
| label_98:
0x0005abe2 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005abe4 tst.w r8, 8 |
0x0005abe8 ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x0005abea str r3, [r2] | *(r2) = r3;
0x0005abec mov.w r3, -1 | r3 = -1;
0x0005abf0 ldr r2, [sp, 0xd4] | r2 = var_d4h;
0x0005abf2 str r3, [sp, 0x138] | var_138h = r3;
0x0005abf4 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0005abf6 mov r7, r2 | r7 = r2;
0x0005abf8 rev r3, r3 | r3 = SWAP32 (r3);
0x0005abfa str r3, [r1] | *(r1) = r3;
| if ((r8 & 8) != 0) {
0x0005abfc bne.w 0x5b2b6 | goto label_100;
| }
0x0005ac00 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005ac02 cmp r3, 1 |
| if (r3 == 1) {
0x0005ac04 beq.w 0x5b2b6 | goto label_100;
| }
0x0005ac08 movs r6, 0 | r6 = 0;
| label_52:
0x0005ac0a add r3, sp, 0xc4 | r3 += var_c4h;
| label_53:
0x0005ac0c ldr r1, [sp, 0x70] | r1 = var_70h;
0x0005ac0e ldr r2, [r2, 0x38] | r2 = *((r2 + 0x38));
0x0005ac10 add r3, r1 | r3 += r1;
0x0005ac12 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005ac14 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0005ac16 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0005ac18 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0005ac1a ldr r3, [sp, 0x54] | r3 = var_54h;
0x0005ac1c ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
0x0005ac1e cmp r3, 0 |
| if (r3 == 0) {
0x0005ac20 beq.w 0x5ad44 | goto label_101;
| }
0x0005ac24 ldr r7, [sp, 0xd4] | r7 = var_d4h;
| label_57:
0x0005ac26 ldrh r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x0005ac28 ldrb r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x0005ac2a adds r3, r2, r3 | r3 = r2 + r3;
0x0005ac2c str r3, [sp, 0x28] | *(arg_28h) = r3;
0x0005ac2e ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0005ac30 cmp r3, 0 |
| if (r3 <= 0) {
0x0005ac32 ble.w 0x5ad44 | goto label_101;
| }
0x0005ac36 movs r4, 0 | r4 = 0;
0x0005ac38 str r6, [sp, 0x44] | x = r6;
0x0005ac3a str.w fp, [sp, 0x50] | __asm ("str.w fp, [var_50h]");
0x0005ac3e mov r8, r4 | r8 = r4;
0x0005ac40 mov r6, ip | r6 = ip;
0x0005ac42 mov fp, r7 |
0x0005ac44 str r4, [sp, 0x18] | var_18h = r4;
0x0005ac46 str r4, [sp, 0x3c] | var_3ch = r4;
| label_33:
0x0005ac48 ldr r2, [sp, 0x28] | r2 = *(arg_28h);
0x0005ac4a ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x0005ac4c cmp r2, r8 |
0x0005ac4e ldr.w r5, [r3, r8, lsl 2] | offset_10 = r8 << 2;
| r5 = *((r3 + offset_10));
| if (r2 != r8) {
0x0005ac52 bne 0x5acdc | goto label_102;
| }
0x0005ac54 ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x0005ac56 adds r1, r4, 1 | r1 = r4 + 1;
0x0005ac58 lsls r3, r1, 2 | r3 = r1 << 2;
0x0005ac5a mov ip, r2 |
0x0005ac5c str r5, [sp, 0x28] | *(arg_28h) = r5;
0x0005ac5e add.w r0, sb, r3 | r0 = sb + r3;
0x0005ac62 add r3, r7 | r3 += r7;
0x0005ac64 b 0x5acae |
| while (ip == r8) {
0x0005acac adds r1, 1 | r1++;
0x0005acae mov r2, r4 | r2 = r4;
0x0005acb0 ldr r5, [sp, 0x80] | r5 = var_80h;
0x0005acb2 cmp r2, r6 |
0x0005acb4 mov r4, r1 | r4 = r1;
0x0005acb6 it lt |
| if (r2 >= r6) {
0x0005acb8 ldrlt r7, [r0] | r7 = *(r0);
| }
0x0005acba add.w r3, r3, 4 | r3 += 4;
0x0005acbe it ge |
| if (r2 < r6) {
0x0005acc0 ldrge r7, [r3, -0x4] | r7 = *((r3 - 0x4));
| }
0x0005acc4 adds r0, 4 | r0 += 4;
0x0005acc6 ldrh r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x0005acc8 ldrb.w lr, [r7, 0xc] |
0x0005accc add r2, lr | r2 += lr;
0x0005acce add r2, r5 | r2 += r5;
0x0005acd0 add ip, r2 |
0x0005acd2 cmp ip, r8 |
0x0005acd4 beq 0x5acac |
| }
0x0005acd6 ldr r5, [sp, 0x28] | r5 = *(arg_28h);
0x0005acd8 str.w ip, [sp, 0x28] | __asm ("str.w ip, [arg_28h]");
| label_102:
0x0005acdc ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0005acde add.w r3, r3, 0x198 | r3 += 0x198;
0x0005ace2 add r3, sp, r3 | r3 = sp + r3;
0x0005ace4 ldr r3, [r3, -0xb0] | r3 = *((r3 - 0xb0));
0x0005ace8 cmp r3, r8 |
| if (r3 == r8) {
0x0005acea beq.w 0x5af76 | goto label_103;
| }
| label_37:
0x0005acee cmp sl, r4 |
| if (sl > r4) {
0x0005acf0 ble 0x5ad06 |
0x0005acf2 add r3, sp, 0x198 | r3 += var_198h;
0x0005acf4 ldr.w r2, [fp, 4] | r2 = *(arg_4ch);
0x0005acf8 add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
0x0005acfc ldr r3, [r3, -0x74] | r3 = *((r3 - 0x74));
0x0005ad00 cmp r2, r3 |
| if (r2 == r3) {
0x0005ad02 beq.w 0x5b29a | goto label_104;
| }
| }
| label_54:
0x0005ad06 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0005ad08 cmp r3, 0 |
| if (r3 == 0) {
0x0005ad0a beq.w 0x5af60 | goto label_105;
| }
| label_36:
0x0005ad0e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005ad10 ldrh.w r0, [r3, r8, lsl 1] | offset_11 = r8 << 1;
| r0 = *((r3 + offset_11));
| if (r0 == 0) {
0x0005ad14 cbnz r0, 0x5ad1e |
0x0005ad16 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0005ad18 mov r1, r8 | r1 = r8;
0x0005ad1a bl 0xa3ac | fcn_0000a3ac (r0, r1, r2);
| }
0x0005ad1e ldrh.w r2, [fp, 0x10] | r2 = *(arg_10h);
0x0005ad22 cmp r2, r0 |
| if (r2 <= r0) {
0x0005ad24 blo.w 0x5af94 | goto label_106;
| }
| label_39:
0x0005ad28 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0005ad2a ldr r5, [r3] | r5 = *(r3);
0x0005ad2c cmp r5, 0 |
| if (r5 != 0) {
0x0005ad2e bne.w 0x5aa62 | goto label_32;
| }
| label_38:
0x0005ad32 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0005ad34 add.w r8, r8, 1 | r8++;
0x0005ad38 cmp r8, r3 |
| if (r8 != r3) {
0x0005ad3a bne 0x5ac48 | goto label_33;
| }
0x0005ad3c mov ip, r6 |
0x0005ad3e ldr.w fp, [sp, 0x50] | fp = var_50h;
0x0005ad42 ldr r6, [sp, 0x44] | r6 = x;
| label_101:
0x0005ad44 cmp r6, 0 |
| if (r6 == 0) {
0x0005ad46 beq 0x5ae34 | goto label_56;
| }
| label_55:
0x0005ad48 ldr r4, [sp, 0x24] | r4 = var_24h;
0x0005ad4a ldr.w r8, [sp, 0x40] | r8 = var_40h;
0x0005ad4e str.w sb, [sp, 0x24] | __asm ("str.w sb, [var_24h]");
0x0005ad52 mov sb, ip | sb = ip;
0x0005ad54 adds r3, r6, r4 | r3 = r6 + r4;
0x0005ad56 str r3, [sp, 0x28] | *(arg_28h) = r3;
0x0005ad58 ldr r3, [sp, 0x174] | r3 = var_174h;
0x0005ad5a str r3, [sp, 0x3c] | var_3ch = r3;
0x0005ad5c movs r3, 0 | r3 = 0;
0x0005ad5e str r3, [sp, 0x18] | var_18h = r3;
| label_34:
0x0005ad60 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005ad62 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005ad64 ldr r7, [r3], 4 | r7 = *(r3);
| r3 += 4;
0x0005ad68 str r3, [sp, 0x24] | var_24h = r3;
0x0005ad6a ldr r3, [sp, 0x84] | r3 = var_84h;
0x0005ad6c ldrb.w ip, [r7, 8] | ip = *((r7 + 8));
0x0005ad70 ldr r6, [r3], 4 | r6 = *(r3);
| r3 += 4;
0x0005ad74 str r3, [sp, 0x84] | var_84h = r3;
0x0005ad76 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0005ad78 lsl.w lr, r6, 2 | lr = r6 << 2;
0x0005ad7c adds r5, r3, r2 | r5 = r3 + r2;
0x0005ad7e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005ad80 ldrh.w r0, [r3, r6, lsl 1] | offset_12 = r6 << 1;
| r0 = *((r3 + offset_12));
0x0005ad84 ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x0005ad86 ldr.w r2, [r3, r6, lsl 2] | offset_13 = r6 << 2;
| r2 = *((r3 + offset_13));
0x0005ad8a ldr r3, [sp, 0x68] | r3 = var_68h;
0x0005ad8c adds r3, r0, r3 | r3 = r0 + r3;
0x0005ad8e cmp.w ip, 0 |
| if (ip == 0) {
0x0005ad92 beq.w 0x5b188 | goto label_107;
| }
0x0005ad96 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0005ad98 cmp r1, 0 |
| if (r1 == 0) {
0x0005ad9a beq.w 0x5b16c | goto label_108;
| }
0x0005ad9e ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x0005ada0 mov r0, r7 | r0 = r7;
0x0005ada2 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0005ada4 subs r6, 1 | r6--;
0x0005ada6 add.w r1, lr, r3 | r1 = lr + r3;
0x0005adaa ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x0005adac ldr r1, [r1, -0x4] | r1 = *((r1 - 0x4));
0x0005adb0 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005adb2 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0005adb4 ldrd r2, r3, [r3] | __asm ("ldrd r2, r3, [r3]");
0x0005adb8 cmp r2, 0x80 |
0x0005adba sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x80) {
0x0005adbe blo.w 0x5b166 | goto label_109;
| }
0x0005adc2 cmp.w r2, 0x4000 |
0x0005adc6 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x0005adca blo.w 0x5b154 | goto label_110;
| }
0x0005adce adds r0, r5, 4 | r0 = r5 + 4;
0x0005add0 bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x0005add4 mov r3, r0 | r3 = r0;
| label_47:
0x0005add6 mov r2, r5 | r2 = r5;
0x0005add8 adds r3, 4 | r3 += 4;
0x0005adda movs r5, 0 | r5 = 0;
| label_48:
0x0005addc ldr r1, [sp, 0x18] | r1 = var_18h;
0x0005adde add r1, r3 | r1 += r3;
0x0005ade0 str r1, [sp, 0x18] | var_18h = r1;
0x0005ade2 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0005ade4 cmp r6, r1 |
0x0005ade6 it lt |
| if (r6 >= r1) {
0x0005ade8 movlt r1, 0 | r1 = 0;
| }
| if (r6 < r1) {
0x0005adea blt 0x5adfa | goto label_111;
| }
0x0005adec add r0, sp, 0x174 | r0 += var_174h;
0x0005adee movs r1, 0 | r1 = 0;
| do {
0x0005adf0 ldr ip, [r0, 4]! | ip = *((r0 += 4));
0x0005adf4 adds r1, 1 | r1++;
0x0005adf6 cmp ip, r6 |
0x0005adf8 ble 0x5adf0 |
| } while (ip <= r6);
| label_111:
0x0005adfa add r0, sp, 0x198 | r0 += var_198h;
0x0005adfc add.w r1, r0, r1, lsl 2 | r1 = r0 + (r1 << 2);
0x0005ae00 ldr r1, [r1, -0x3c] | r1 = *((r1 - 0x3c));
0x0005ae04 cmp r2, r1 |
| if (r2 <= r1) {
0x0005ae06 bhi 0x5ae10 |
0x0005ae08 adds r0, r2, r3 | r0 = r2 + r3;
0x0005ae0a cmp r1, r0 |
| if (r1 <= r0) {
0x0005ae0c blo.w 0x5b252 | goto label_112;
| }
| }
0x0005ae10 ldr r6, [sp, 0x58] | r6 = var_58h;
0x0005ae12 mov r0, r8 | r0 = r8;
0x0005ae14 str r6, [sp, 8] | var_8h = r6;
0x0005ae16 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x0005ae18 strd r5, r1, [sp] | __asm ("strd r5, r1, [sp]");
0x0005ae1c mov r1, r4 | r1 = r4;
0x0005ae1e bl 0x59ec8 | fcn_00059ec8 (r0, r1, r2, r3, r4, r5, r6);
0x0005ae22 ldr r5, [r6] | r5 = *(r6);
0x0005ae24 cmp r5, 0 |
| if (r5 != 0) {
0x0005ae26 bne.w 0x5aa62 | goto label_32;
| }
0x0005ae2a ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005ae2c adds r4, 1 | r4++;
0x0005ae2e cmp r4, r3 |
| if (r4 != r3) {
0x0005ae30 bne 0x5ad60 | goto label_34;
| }
0x0005ae32 mov ip, sb |
| label_56:
0x0005ae34 rsb.w lr, ip, 0 | lr = ip - ;
0x0005ae38 str.w fp, [sp, 0x70] | __asm ("str.w fp, [var_70h]");
0x0005ae3c mov fp, lr |
0x0005ae3e str.w sl, [sp, 0x3c] | __asm ("str.w sl, [var_3ch]");
0x0005ae42 str.w ip, [sp, 0x44] | __asm ("str.w ip, [x]");
| label_40:
0x0005ae46 eor.w r2, fp, fp, asr 31 | r2 = fp ^ (fp >> 31);
0x0005ae4a sub.w r2, r2, fp, asr 31 | r2 -= (fp >> 31);
0x0005ae4e add.w r3, r2, 0x198 | r3 = r2 + 0x198;
0x0005ae52 str r2, [sp, 0x24] | var_24h = r2;
0x0005ae54 add r3, sp, r3 | r3 = sp + r3;
0x0005ae56 str r3, [sp, 0x6c] | var_6ch = r3;
0x0005ae58 ldrb r3, [r3, -0xc] | r3 = *((r3 - 0xc));
0x0005ae5c cmp r3, 0 |
| if (r3 != 0) {
0x0005ae5e bne.w 0x5b00a | goto label_113;
| }
0x0005ae62 cmp.w fp, 0 |
| if (fp < 0) {
0x0005ae66 blt.w 0x5b1a2 | goto label_114;
| }
| if (fp != 0) {
0x0005ae6a bne.w 0x5b1be | goto label_115;
| }
0x0005ae6e ldr r4, [sp, 0xd4] | r4 = var_d4h;
0x0005ae70 mov sb, fp | sb = fp;
0x0005ae72 ldr r6, [sp, 0xe8] | r6 = var_e8h;
0x0005ae74 mov r7, fp | r7 = fp;
0x0005ae76 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0005ae78 ldrh r5, [r4, 0x18] | r5 = *((r4 + 0x18));
0x0005ae7a mov r8, r6 | r8 = r6;
0x0005ae7c ldr.w sl, [r4, 0x38] | sl = *((r4 + 0x38));
0x0005ae80 add.w r3, r3, r6, lsl 1 | r3 += (r6 << 1);
0x0005ae84 str r3, [sp, 0x18] | var_18h = r3;
0x0005ae86 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0005ae88 add r3, r5 | r3 += r5;
0x0005ae8a str r3, [sp, 0x30] | var_30h = r3;
0x0005ae8c ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x0005ae8e str r3, [sp, 0x28] | *(arg_28h) = r3;
| label_50:
0x0005ae90 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0005ae92 cmp r3, r8 |
| if (r3 > r8) {
0x0005ae94 bgt.w 0x5b190 | goto label_116;
| }
| label_49:
0x0005ae98 ldr r2, [sp, 0x28] | r2 = *(arg_28h);
0x0005ae9a adds r3, r2, 5 | r3 = r2 + 5;
0x0005ae9c adds r2, 6 | r2 += 6;
0x0005ae9e ldrb.w r1, [sl, r3] | r1 = *((sl + r3));
0x0005aea2 add r3, sl | r3 += sl;
0x0005aea4 str r3, [sp, 0x50] | var_50h = r3;
0x0005aea6 ldrb.w r3, [sl, r2] | r3 = *((sl + r2));
0x0005aeaa add r2, sl | r2 += sl;
0x0005aeac str r2, [sp, 0x5c] | var_5ch = r2;
0x0005aeae ldr r2, [sp, 0x34] | r2 = var_34h;
0x0005aeb0 orr.w r3, r3, r1, lsl 8 | r3 |= (r1 << 8);
0x0005aeb4 subs r3, 1 | r3--;
0x0005aeb6 uxth r3, r3 | r3 = (int16_t) r3;
0x0005aeb8 adds r3, 1 | r3++;
0x0005aeba add r3, sl | r3 += sl;
0x0005aebc str r3, [r2] | *(r2) = r3;
0x0005aebe ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005aec0 cmp r3, r2 |
| if (r3 <= r2) {
0x0005aec2 blo.w 0x5b01c | goto label_42;
| }
0x0005aec6 ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x0005aec8 cmp r3, r2 |
| if (r3 > r2) {
0x0005aeca bhi.w 0x5b01c | goto label_42;
| }
0x0005aece cmp r7, sb |
0x0005aed0 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
| if (r7 < sb) {
0x0005aed2 blt.w 0x5b078 | goto label_117;
| }
| label_43:
0x0005aed6 ldrb r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x0005aed8 cmp r1, 0 |
| if (r1 == 0) {
0x0005aeda beq 0x5afaa | goto label_118;
| }
0x0005aedc add.w r2, r4, 0x1a | r2 = r4 + 0x1a;
0x0005aee0 mov.w r8, 0 | r8 = 0;
0x0005aee4 str r2, [sp, 0x30] | var_30h = r2;
0x0005aee6 str.w sl, [sp, 0x7c] | __asm ("str.w sl, [var_7ch]");
0x0005aeea str.w fp, [sp, 0x48] | __asm ("str.w fp, [var_48h]");
0x0005aeee b 0x5af2a | goto label_119;
| label_35:
0x0005aef0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005aef2 adds r5, 1 | r5++;
0x0005aef4 ldrh.w r2, [r3, sl, lsl 1] | offset_14 = sl << 1;
| r2 = *((r3 + offset_14));
| if (r2 == 0) {
0x0005aef8 cbnz r2, 0x5af02 |
0x0005aefa ldr r0, [sp, 0x38] | r0 = var_38h;
0x0005aefc mov r1, sl | r1 = sl;
0x0005aefe bl 0xa3ac | fcn_0000a3ac (r0, r1, r2);
| }
0x0005af02 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0005af04 mov r3, fp | r3 = fp;
0x0005af06 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0005af08 mov r0, r4 | r0 = r4;
0x0005af0a str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0005af0e str r2, [sp, 8] | var_8h = r2;
0x0005af10 movs r2, 1 | r2 = 1;
0x0005af12 str r2, [sp, 4] | var_4h = r2;
0x0005af14 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0005af16 bl 0x27c34 | r0 = fcn_00027c34 (r0, r1, r2, r3, r4, r5, r6);
0x0005af1a cmp r0, 0 |
| if (r0 != 0) {
0x0005af1c bne 0x5b018 | goto label_120;
| }
0x0005af1e ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0005af20 ldrb r1, [r4, 0xc] | r1 = *((r4 + 0xc));
| do {
0x0005af22 add.w r8, r8, 1 | r8++;
0x0005af26 cmp r8, r1 |
| if (r8 >= r1) {
0x0005af28 bge 0x5afa2 | goto label_121;
| }
| label_119:
0x0005af2a ldr r2, [sp, 0x30] | r2 = var_30h;
0x0005af2c ldrh sl, [r2, 2]! | sl = *((r2 += 2));
0x0005af30 add sl, sb | sl += sb;
0x0005af32 str r2, [sp, 0x30] | var_30h = r2;
0x0005af34 sub.w r2, sl, r7 | r2 = sl - r7;
0x0005af38 mvns r0, r2 | r0 = ~r2;
0x0005af3a cmp r2, r6 |
0x0005af3c lsr.w r0, r0, 0x1f | r0 >>= 0x1f;
0x0005af40 it ge |
| if (r2 < r6) {
0x0005af42 movge r0, 0 | r0 = 0;
| }
0x0005af44 cmp r0, 0 |
0x0005af46 beq 0x5af22 |
| } while (r0 == 0);
0x0005af48 cmp r2, r5 |
0x0005af4a add.w fp, r3, r2, lsl 1 |
| if (r2 >= r5) {
0x0005af4e bge 0x5aef0 | goto label_35;
| }
0x0005af50 subs r2, r5, r2 | r2 = r5 - r2;
0x0005af52 mov r1, fp | r1 = fp;
0x0005af54 lsls r2, r2, 1 | r2 <<= 1;
0x0005af56 add.w r0, fp, 2 | r0 += arg_2h;
0x0005af5a blx 0x88c4 | fcn_000088c4 ();
0x0005af5e b 0x5aef0 | goto label_35;
| label_105:
0x0005af60 ldr r1, [r5] | r1 = *(r5);
0x0005af62 movs r2, 5 | r2 = 5;
0x0005af64 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0005af66 ldr r0, [sp, 0x54] | r0 = var_54h;
0x0005af68 rev r1, r1 | r1 = SWAP32 (r1);
0x0005af6a str r3, [sp] | *(sp) = r3;
0x0005af6c ldr.w r3, [fp, 4] | r3 = *(arg_4ch);
0x0005af70 bl 0x58aac | fcn_00058aac (r0, r1, r2, r3, r4);
0x0005af74 b 0x5ad0e | goto label_36;
| label_103:
0x0005af76 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005af78 add r3, sp, 0x198 | r3 += var_198h;
0x0005af7a adds r2, 1 | r2++;
0x0005af7c add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0005af80 str r2, [sp, 0x18] | var_18h = r2;
0x0005af82 ldr fp, [r3, -0xc4] | fp = *((r3 - 0xc4));
0x0005af86 lsls r3, r2, 2 | r3 = r2 << 2;
0x0005af88 str r3, [sp, 0x3c] | var_3ch = r3;
0x0005af8a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0005af8c cmp r3, 0 |
| if (r3 != 0) {
0x0005af8e bne.w 0x5acee | goto label_37;
| }
0x0005af92 b 0x5ad32 | goto label_38;
| label_106:
0x0005af94 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0005af96 mov r2, r5 | r2 = r5;
0x0005af98 mov r1, r7 | r1 = r7;
0x0005af9a mov r0, fp | r0 = fp;
0x0005af9c bl 0x58c2c | fcn_00058c2c (r0, r1, r2, r3);
0x0005afa0 b 0x5ad28 | goto label_39;
| label_121:
0x0005afa2 ldr.w sl, [sp, 0x7c] | sl = var_7ch;
0x0005afa6 ldr.w fp, [sp, 0x48] | fp = var_48h;
| label_118:
0x0005afaa ldr r2, [sp, 0x38] | r2 = var_38h;
0x0005afac add.w r3, r3, r5, lsl 1 | r3 += (r5 << 1);
0x0005afb0 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0005afb2 mov r0, r4 | r0 = r4;
0x0005afb4 str r2, [sp, 8] | var_8h = r2;
0x0005afb6 subs r2, r6, r5 | r2 = r6 - r5;
0x0005afb8 add r5, r7 | r5 += r7;
0x0005afba str r2, [sp, 4] | var_4h = r2;
0x0005afbc str r5, [sp] | *(sp) = r5;
0x0005afbe ldr r5, [sp, 0x34] | r5 = var_34h;
0x0005afc0 mov r2, r5 | r2 = r5;
0x0005afc2 bl 0x27c34 | r0 = fcn_00027c34 (r0, r1, r2, r3, r4, r5, r6);
| if (r0 == 0) {
0x0005afc6 cbnz r0, 0x5b01c |
0x0005afc8 uxth r6, r6 | r6 = (int16_t) r6;
0x0005afca ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005afcc strb r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x0005afce strh r6, [r4, 0x18] | *((r4 + 0x18)) = r6;
0x0005afd0 lsrs r6, r6, 8 | r6 >>= 8;
0x0005afd2 add r3, sl | r3 += sl;
0x0005afd4 ldr r1, [sp, 0x58] | r1 = var_58h;
0x0005afd6 strb r6, [r3, 3] | *((r3 + 3)) = r6;
0x0005afd8 ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0005afda str r0, [r1] | *(r1) = r0;
0x0005afdc ldr r1, [sp, 0x50] | r1 = var_50h;
0x0005afde strb r2, [r3, 4] | *((r3 + 4)) = r2;
0x0005afe0 ldr r3, [r5] | r3 = *(r5);
0x0005afe2 sub.w r3, r3, sl | r3 -= sl;
0x0005afe6 asrs r2, r3, 8 | r2 = r3 >> 8;
0x0005afe8 strb r2, [r1] | *(r1) = r2;
0x0005afea ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0005afec strb r3, [r2] | *(r2) = r3;
| label_41:
0x0005afee ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0005aff0 mov.w r2, 1 | r2 = 1;
0x0005aff4 strb r2, [r3, -0xc] | *((r3 - 0xc)) = r2;
0x0005aff8 add r2, sp, 0x198 | r2 += var_198h;
0x0005affa ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005affc add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x0005b000 ldr r2, [sp, 0x78] | r2 = var_78h;
0x0005b002 ldr r3, [r3, -0x88] | r3 = *((r3 - 0x88));
0x0005b006 subs r3, r2, r3 | r3 = r2 - r3;
0x0005b008 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
| label_113:
0x0005b00a ldr r2, [sp, 0x44] | r2 = x;
0x0005b00c add.w r3, fp, 1 | r3 += arg_1h_2;
0x0005b010 cmp fp, r2 |
| if (fp == r2) {
0x0005b012 beq 0x5b0b0 | goto label_122;
| }
0x0005b014 mov fp, r3 |
0x0005b016 b 0x5ae46 | goto label_40;
| label_120:
0x0005b018 ldr.w fp, [sp, 0x48] | fp = var_48h;
| }
| label_42:
0x0005b01c cmp r6, 0 |
| if (r6 <= 0) {
0x0005b01e ble 0x5b04e | goto label_123;
| }
0x0005b020 ldr r5, [sp, 0x158] | r5 = var_158h;
0x0005b022 adds r3, r6, r7 | r3 = r6 + r7;
0x0005b024 lsl.w r8, r7, 2 | r8 = r7 << 2;
0x0005b028 add.w sb, r5, r3, lsl 1 | sb = r5 + (r3 << 1);
0x0005b02c add.w r5, r5, r7, lsl 1 | r5 += (r7 << 1);
| do {
0x0005b030 ldrh r3, [r5], 2 | r3 = *(r5);
| r5 += 2;
| if (r3 == 0) {
0x0005b034 cbnz r3, 0x5b046 |
0x0005b036 ldrd r0, r3, [sp, 0x150] | __asm ("ldrd r0, r3, [var_150h]");
0x0005b03a ldr.w r1, [r3, r8] | r1 = *((r3 + r8));
0x0005b03e ldr r3, [r0, 0x4c] | r3 = *((r0 + 0x4c));
0x0005b040 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0005b042 strh r0, [r5, -0x2] | *((r5 - 0x2)) = r0;
| }
0x0005b046 cmp r5, sb |
0x0005b048 add.w r8, r8, 4 | r8 += 4;
0x0005b04c bne 0x5b030 |
| } while (r5 != sb);
| label_123:
0x0005b04e mov r3, r4 | r3 = r4;
0x0005b050 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0005b052 mov r2, r6 | r2 = r6;
0x0005b054 mov r1, r7 | r1 = r7;
0x0005b056 bl 0x2762c | fcn_0002762c (r0, r1, r2, r3, r4);
0x0005b05a ldr r3, [sp, 0x58] | r3 = var_58h;
0x0005b05c str r0, [r3] | *(r3) = r0;
0x0005b05e cmp r0, 0 |
| if (r0 == 0) {
0x0005b060 beq 0x5afee | goto label_41;
| }
0x0005b062 ldr r3, [sp, 0x154] | r3 = var_154h;
0x0005b064 mov r5, r0 | r5 = r0;
0x0005b066 ldr.w sl, [sp, 0x3c] | sl = var_3ch;
0x0005b06a str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x0005b06c str.w sl, [sp, 0x60] | __asm ("str.w sl, [var_60h]");
0x0005b070 cmp r3, 0 |
| if (r3 == 0) {
0x0005b072 beq.w 0x5a2f2 | goto label_3;
| }
0x0005b076 b 0x5a886 | goto label_25;
| label_117:
0x0005b078 sub.w r8, sb, r7 | r8 = sb - r7;
0x0005b07c mov r1, r3 | r1 = r3;
0x0005b07e cmp r8, r6 |
0x0005b080 lsl.w r2, r5, 1 | r2 = r5 << 1;
0x0005b084 it ge |
| if (r8 < r6) {
0x0005b086 movge r8, r6 | r8 = r6;
| }
0x0005b088 str r3, [sp, 0x30] | var_30h = r3;
0x0005b08a add.w r0, r3, r8, lsl 1 | r0 = r3 + (r8 << 1);
0x0005b08e blx 0x88c4 | fcn_000088c4 ();
0x0005b092 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0005b094 mov r0, r4 | r0 = r4;
0x0005b096 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0005b098 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0005b09a strd r8, r2, [sp, 4] | __asm ("strd r8, r2, [sp, 4]");
0x0005b09e str r7, [sp] | *(sp) = r7;
0x0005b0a0 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0005b0a2 bl 0x27c34 | r0 = fcn_00027c34 (r0, r1, r2, r3, r4, r5, r6);
0x0005b0a6 cmp r0, 0 |
| if (r0 != 0) {
0x0005b0a8 bne 0x5b01c | goto label_42;
| }
0x0005b0aa ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0005b0ac add r5, r8 | r5 += r8;
0x0005b0ae b 0x5aed6 | goto label_43;
| label_122:
0x0005b0b0 ldr r3, [sp, 0x74] | r3 = var_74h;
0x0005b0b2 ldr.w sl, [sp, 0x3c] | sl = var_3ch;
0x0005b0b6 ldr.w ip, [sp, 0x44] | ip = x;
| if (r3 != 0) {
0x0005b0ba cbz r3, 0x5b0cc |
0x0005b0bc ldr r2, [sp, 0x40] | r2 = var_40h;
0x0005b0be ldrh r3, [r2, 0x18] | r3 = *((r2 + 0x18));
| if (r3 != 0) {
0x0005b0c0 cbnz r3, 0x5b0cc | goto label_124;
| }
0x0005b0c2 ldr r5, [sp, 0xd4] | r5 = var_d4h;
0x0005b0c4 ldrb r2, [r2, 9] | r2 = *((r2 + 9));
0x0005b0c6 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x0005b0c8 cmp r2, r3 |
| if (r2 <= r3) {
0x0005b0ca ble 0x5b124 | goto label_125;
| }
| }
| label_124:
0x0005b0cc ldr r3, [sp, 0x54] | r3 = var_54h;
0x0005b0ce ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
| if (r3 != 0) {
0x0005b0d0 cbz r3, 0x5b0d6 |
0x0005b0d2 ldr r3, [sp, 0x68] | r3 = var_68h;
| if (r3 == 0) {
0x0005b0d4 cbz r3, 0x5b0ec | goto label_126;
| }
| }
| label_45:
0x0005b0d6 ldr r6, [sp, 0x58] | r6 = var_58h;
0x0005b0d8 mov r4, sl | r4 = sl;
0x0005b0da ldr r7, [sp, 0x2c] | r7 = var_2ch;
| label_44:
0x0005b0dc ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005b0de ldr r5, [r6] | r5 = *(r6);
0x0005b0e0 cmp r4, r3 |
| if (r4 >= r3) {
0x0005b0e2 bge.w 0x5aa62 | goto label_32;
| }
| if (r5 == 0) {
0x0005b0e6 cbz r5, 0x5b114 | goto label_127;
| }
| label_46:
0x0005b0e8 adds r4, 1 | r4++;
0x0005b0ea b 0x5b0dc | goto label_44;
| label_126:
0x0005b0ec ldr r4, [sp, 0x60] | r4 = var_60h;
0x0005b0ee mov r6, ip | r6 = ip;
0x0005b0f0 ldr r5, [sp, 0x64] | r5 = var_64h;
| do {
0x0005b0f2 ldr r3, [r5], 4 | r3 = *(r5);
| r5 += 4;
0x0005b0f6 movs r2, 5 | r2 = 5;
0x0005b0f8 ldr r7, [sp, 0x58] | r7 = var_58h;
0x0005b0fa ldr r0, [sp, 0x54] | r0 = var_54h;
0x0005b0fc ldr r1, [r3, 0x38] | r1 = *((r3 + 0x38));
0x0005b0fe ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0005b100 str r7, [sp] | *(sp) = r7;
0x0005b102 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005b104 rev r1, r1 | r1 = SWAP32 (r1);
0x0005b106 bl 0x58aac | fcn_00058aac (r0, r1, r2, r3, r4);
0x0005b10a cmp r4, r6 |
0x0005b10c add.w r4, r4, 1 | r4++;
0x0005b110 bne 0x5b0f2 |
| } while (r4 != r6);
0x0005b112 b 0x5b0d6 | goto label_45;
| label_127:
0x0005b114 ldr.w r1, [r7, r4, lsl 2] | offset_15 = r4 << 2;
| r1 = *((r7 + offset_15));
0x0005b118 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0005b11a ldr r0, [r1, 0x34] | r0 = *((r1 + 0x34));
0x0005b11c bl 0x599fc | fcn_000599fc (r0, r1, r2, r3);
0x0005b120 str r0, [r6] | *(r6) = r0;
0x0005b122 b 0x5b0e8 | goto label_46;
| label_125:
0x0005b124 mov.w r1, -1 | r1 = -1;
0x0005b128 mov r0, r5 | r0 = r5;
0x0005b12a bl 0x36080 | fcn_00036080 (r0, r1);
0x0005b12e ldr r4, [sp, 0x58] | r4 = var_58h;
0x0005b130 str r0, [r4] | *(r4) = r0;
0x0005b132 cmp r0, 0 |
| if (r0 != 0) {
0x0005b134 bne 0x5b0d6 | goto label_45;
| }
0x0005b136 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0005b138 mov r2, r4 | r2 = r4;
0x0005b13a mov r0, r5 | r0 = r5;
0x0005b13c bl 0x58da4 | fcn_00058da4 (r0, r1, r2);
0x0005b140 ldr r3, [r4] | r3 = *(r4);
0x0005b142 cmp r3, 0 |
| if (r3 != 0) {
0x0005b144 bne 0x5b0d6 | goto label_45;
| }
0x0005b146 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0005b148 mov r1, r5 | r1 = r5;
0x0005b14a ldr r0, [r5, 0x34] | r0 = *((r5 + 0x34));
0x0005b14c bl 0x599fc | fcn_000599fc (r0, r1, r2, r3);
0x0005b150 str r0, [r4] | *(r4) = r0;
0x0005b152 b 0x5b0d6 | goto label_45;
| label_110:
0x0005b154 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x0005b156 and r2, r2, 0x7f | r2 &= 0x7f;
0x0005b15a strb r2, [r5, 5] | *((r5 + 5)) = r2;
0x0005b15c orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x0005b160 strb r3, [r5, 4] | *((r5 + 4)) = r3;
0x0005b162 movs r3, 2 | r3 = 2;
0x0005b164 b 0x5add6 | goto label_47;
| label_109:
0x0005b166 movs r3, 1 | r3 = 1;
0x0005b168 strb r2, [r5, 4] | *((r5 + 4)) = r2;
0x0005b16a b 0x5add6 | goto label_47;
| label_108:
0x0005b16c cmp r0, 4 |
0x0005b16e sub.w r2, r2, 4 | r2 -= 4;
| if (r0 != 4) {
0x0005b172 bne.w 0x5addc | goto label_48;
| }
0x0005b176 ldr.w r3, [r8, 0x4c] | r3 = *((r8 + 0x4c));
0x0005b17a mov r1, r2 | r1 = r2;
0x0005b17c mov r0, r8 | r0 = r8;
0x0005b17e str r2, [sp, 0x44] | x = r2;
0x0005b180 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005b182 ldr r2, [sp, 0x44] | r2 = x;
0x0005b184 mov r3, r0 | r3 = r0;
0x0005b186 b 0x5addc | goto label_48;
| label_107:
0x0005b188 ldr r1, [r7, 0x38] | r1 = *((r7 + 0x38));
0x0005b18a ldr r0, [r2] | r0 = *(r2);
0x0005b18c str r0, [r1, 8] | *((r1 + 8)) = r0;
0x0005b18e b 0x5addc | goto label_48;
| label_116:
0x0005b190 sub.w r2, r3, r8 | r2 = r3 - r8;
0x0005b194 mov r1, r8 | r1 = r8;
0x0005b196 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0005b198 mov r0, r4 | r0 = r4;
0x0005b19a bl 0x34548 | r0 = fcn_00034548 (r0, r1, r2, r3);
0x0005b19e subs r5, r5, r0 | r5 -= r0;
0x0005b1a0 b 0x5ae98 | goto label_49;
| label_114:
0x0005b1a2 subs r3, r2, 1 | r3 = r2 - 1;
0x0005b1a4 add r2, sp, 0x198 | r2 += var_198h;
0x0005b1a6 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0005b1aa ldr r1, [r2, -0x9c] | r1 = *((r2 - 0x9c));
0x0005b1ae ldr r2, [r2, -0xb0] | r2 = *((r2 - 0xb0));
0x0005b1b2 cmp r1, r2 |
| if (r1 < r2) {
0x0005b1b4 bge 0x5b1c2 |
0x0005b1b6 add.w r3, fp, 1 | r3 += arg_1h_2;
0x0005b1ba mov fp, r3 |
0x0005b1bc b 0x5ae46 | goto label_40;
| label_115:
0x0005b1be ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005b1c0 subs r3, 1 | r3--;
| }
0x0005b1c2 ldrd r2, r1, [sp, 0x20] | __asm ("ldrd r2, r1, [var_20h]");
0x0005b1c6 cmp r2, r1 |
0x0005b1c8 itett gt |
| if (r2 <= r1) {
0x0005b1ca addgt r2, sp, 0x198 | r2 += var_198h;
| }
| if (r2 > r1) {
0x0005b1cc lslle r3, r3, 2 | r3 <<= 2;
| }
| if (r2 <= r1) {
0x0005b1ce addgt r2, r2, r3, lsl 2 | r2 += (r3 << 2);
| }
| if (r2 > r1) {
0x0005b1d2 lsls r3, r3, 2 | r3 <<= 2;
| }
0x0005b1d4 it gt |
| if (r3 <= r3) {
0x0005b1d6 ldrgt r1, [sp, 0x80] | r1 = var_80h;
| }
0x0005b1d8 add.w r3, r3, 0x198 | r3 += 0x198;
0x0005b1dc it gt |
| if (r3 <= r3) {
0x0005b1de ldrgt r2, [r2, -0x9c] | r2 = *((r2 - 0x9c));
| }
0x0005b1e2 add r3, sp, r3 | r3 = sp + r3;
0x0005b1e4 it le |
| if (r3 > r3) {
0x0005b1e6 ldrle sb, [sp, 0x4c] | sb = var_4ch;
| }
0x0005b1ea ldr r7, [r3, -0xb0] | r7 = *((r3 - 0xb0));
0x0005b1ee ldr r3, [sp, 0x80] | r3 = var_80h;
0x0005b1f0 it gt |
| if (r3 <= r3) {
0x0005b1f2 addgt sb, r1, r2 | sb = r1 + r2;
| }
0x0005b1f6 add r2, sp, 0x198 | r2 += var_198h;
0x0005b1f8 add r7, r3 | r7 += r3;
0x0005b1fa ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005b1fc cmp sb, r7 |
0x0005b1fe add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x0005b202 ldr r4, [r3, -0xc4] | r4 = *((r3 - 0xc4));
0x0005b206 ldr r8, [r3, -0xb0] | r8 = *((r3 - 0xb0));
0x0005b20a ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x0005b20c ldrh r5, [r4, 0x18] | r5 = *((r4 + 0x18));
0x0005b20e sub.w r6, r8, r7 | r6 = r8 - r7;
0x0005b212 ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0005b214 ldr.w sl, [r4, 0x38] | sl = *((r4 + 0x38));
0x0005b218 add.w r2, r2, r6, lsl 1 | r2 += (r6 << 1);
0x0005b21c str r2, [sp, 0x18] | var_18h = r2;
0x0005b21e add.w r2, sb, r5 | r2 = sb + r5;
0x0005b222 add r3, r2 | r3 += r2;
0x0005b224 str r3, [sp, 0x30] | var_30h = r3;
0x0005b226 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x0005b228 str r3, [sp, 0x28] | *(arg_28h) = r3;
| if (sb >= r7) {
0x0005b22a bge.w 0x5ae90 | goto label_50;
| }
0x0005b22e mov r1, sb | r1 = sb;
0x0005b230 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0005b232 sub.w r2, r7, sb | r2 = r7 - sb;
0x0005b236 mov r0, r4 | r0 = r4;
0x0005b238 bl 0x34548 | r0 = fcn_00034548 (r0, r1, r2, r3);
0x0005b23c cmp r5, r0 |
0x0005b23e mov r1, r0 | r1 = r0;
| if (r5 < r0) {
0x0005b240 blt 0x5b2c4 | goto label_128;
| }
0x0005b242 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0005b244 lsls r2, r5, 1 | r2 = r5 << 1;
0x0005b246 subs r5, r5, r1 | r5 -= r1;
0x0005b248 add.w r1, r0, r1, lsl 1 | r1 = r0 + (r1 << 1);
0x0005b24c blx 0x88c4 | fcn_000088c4 ();
0x0005b250 b 0x5ae90 | goto label_50;
| label_112:
0x0005b252 ldr r2, [pc, 0x9c] |
0x0005b254 movw r1, 0x265f |
0x0005b258 movt r1, 1 | r1 = 0x1265f;
0x0005b25c movs r0, 0xb | r0 = 0xb;
0x0005b25e add r2, pc | r2 = 0xb6554;
0x0005b260 bl 0x250e0 | r0 = fcn_000250e0 (r0, r1, r2);
0x0005b264 mov r5, r0 | r5 = r0;
0x0005b266 b 0x5ab12 | goto label_51;
| label_99:
0x0005b268 mov ip, r8 |
0x0005b26a add r3, sp, 0x198 | r3 += var_198h;
0x0005b26c add.w r3, r3, ip, lsl 2 | r3 += (ip << 2);
0x0005b270 ldr.w r8, [sp, 0x44] | r8 = x;
0x0005b274 ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x0005b276 ldr r2, [r3, -0xc4] | r2 = *((r3 - 0xc4));
0x0005b27a tst.w r8, 8 |
0x0005b27e ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0005b280 rev r3, r3 | r3 = SWAP32 (r3);
0x0005b282 str r3, [r1] | *(r1) = r3;
| if ((r8 & 8) != 0) {
0x0005b284 bne 0x5b2ac | goto label_129;
| }
0x0005b286 ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005b288 cmp r3, ip |
| if (r3 == ip) {
0x0005b28a beq 0x5b2ac | goto label_129;
| }
0x0005b28c ldr r3, [sp, 0x28] | r3 = *(arg_28h);
0x0005b28e mov r6, ip | r6 = ip;
0x0005b290 cmp r3, ip |
| if (r3 >= ip) {
0x0005b292 bge.w 0x5ac0a | goto label_52;
| }
0x0005b296 add r3, sp, 0xd0 | r3 += var_d0h;
0x0005b298 b 0x5ac0c | goto label_53;
| label_104:
0x0005b29a ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x0005b29c cmp r3, r5 |
| if (r3 > r5) {
0x0005b29e bhi.w 0x5ad06 | goto label_54;
| }
0x0005b2a2 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x0005b2a4 cmp r3, r5 |
| if (r3 > r5) {
0x0005b2a6 bhi.w 0x5ad32 | goto label_38;
| }
0x0005b2aa b 0x5ad06 | goto label_54;
| label_129:
0x0005b2ac ldr r3, [sp, 0x54] | r3 = var_54h;
0x0005b2ae ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
| if (r3 != 0) {
0x0005b2b0 cbnz r3, 0x5b2e8 | goto label_130;
| }
0x0005b2b2 mov r6, ip | r6 = ip;
0x0005b2b4 b 0x5ad48 | goto label_55;
| label_100:
0x0005b2b6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0005b2b8 ldrb r2, [r3, 0x11] | r2 = *((r3 + 0x11));
0x0005b2ba cmp r2, 0 |
| if (r2 == 0) {
0x0005b2bc beq.w 0x5ae34 | goto label_56;
| }
0x0005b2c0 movs r6, 0 | r6 = 0;
0x0005b2c2 b 0x5ac26 | goto label_57;
| label_128:
0x0005b2c4 ldr.w fp, [sp, 0x70] | fp = var_70h;
0x0005b2c8 blx 0x83b8 | strerror_r ();
0x0005b2cc ldr r2, [pc, 0x24] |
0x0005b2ce adds r0, 0x14 | r0 += 0x14;
0x0005b2d0 ldr r1, [pc, 0x24] |
0x0005b2d2 movw r3, 0x2293 |
0x0005b2d6 str r0, [sp] | *(sp) = r0;
0x0005b2d8 movt r3, 1 | r3 = 0x12293;
0x0005b2dc add r2, pc | r2 = 0xb65d4;
0x0005b2de movs r0, 0xb | r0 = 0xb;
0x0005b2e0 add r1, pc | r1 = 0xb65dc;
0x0005b2e2 blx 0x8b60 | fcn_00008b60 ();
0x0005b2e4 ldc p4, c14, [lr], -0x4c | __asm ("ldc p4, c14, [lr], -0x4c");
| label_130:
0x0005b2e8 ldr r7, [sp, 0xd4] | r7 = var_d4h;
0x0005b2ea mov r6, ip | r6 = ip;
0x0005b2ec b 0x5ac26 | goto label_57;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5bc24 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0005bc24 () | void fcn_0005bc24 (int16_t arg_18h, int16_t arg_38h, arithmetic x, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_1h;
| int16_t var_0h_3;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch_2;
| int16_t var_0h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0005bc24 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005bc28 mov r4, r1 | r4 = r1;
0x0005bc2a ldr r5, [pc, 0x2c8] |
0x0005bc2c sub sp, 0x34 |
0x0005bc2e mov r8, r2 | r8 = r2;
0x0005bc30 ldr r1, [pc, 0x2c4] | r1 = *(0x5bef8);
0x0005bc32 add r5, pc | r5 = "UPDATE %Q.sqlite_master SET rootpage=%d WHERE #%d AND rootpage=#%d";
0x0005bc34 ldr.w fp, [r0, 0x74] | fp = *(var_0h_3x74);
0x0005bc38 ldrh.w r2, [r0, 0x46] | r2 = *(var_0h_3x46);
0x0005bc3c ldr r1, [r5, r1] |
0x0005bc3e ldr.w sl, [r0, 0x14] | sl = *(var_0h_3x14);
0x0005bc42 ldr r1, [r1] | r1 = "UPDATE %Q.sqlite_master SET rootpage=%d WHERE #%d AND rootpage=#%d";
0x0005bc44 str r1, [sp, 0x2c] | var_2ch_2 = r1;
0x0005bc46 mov.w r1, 0 | r1 = 0;
0x0005bc4a str r3, [sp, 0xc] | var_ch = r3;
0x0005bc4c ldrh.w r3, [fp, 0x18] | r3 = *(arg_18h);
0x0005bc50 cmp r2, r3 |
| if (r2 >= r3) {
0x0005bc52 bhs.w 0x5bdae | goto label_10;
| }
0x0005bc56 mov r6, r0 | r6 = r0;
0x0005bc58 bl 0xe650 | fcn_0000e650 (r0);
0x0005bc5c ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x0005bc60 ldr r5, [r6, 0x28] | r5 = *((r6 + 0x28));
0x0005bc62 ldrh r1, [r6, 0x30] | r1 = *((r6 + 0x30));
0x0005bc64 subs r2, r5, r3 | r2 = r5 - r3;
0x0005bc66 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0005bc6a subs r3, r3, r1 | r3 -= r1;
0x0005bc6c cmp r2, r3 |
| if (r2 > r3) {
0x0005bc6e bhi.w 0x5beb4 | goto label_11;
| }
0x0005bc72 cmp r1, r4 |
| if (r1 > r4) {
0x0005bc74 bhi 0x5bd24 | goto label_12;
| }
0x0005bc76 subs.w r7, r8, 0 | r7 = r8 - 0;
0x0005bc7a sub.w r4, r4, r1 | r4 -= r1;
0x0005bc7e it ne |
| if (r7 == r8) {
0x0005bc80 movne r7, 1 | r7 = 1;
| }
| label_0:
0x0005bc82 mov r3, r7 | r3 = r7;
0x0005bc84 cmp r7, 0 |
| if (r7 == 0) {
0x0005bc86 beq.w 0x5bd90 | goto label_8;
| }
0x0005bc8a ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0005bc8e ldrh r0, [r6, 0x30] | r0 = *((r6 + 0x30));
0x0005bc90 ldrb r2, [r6, 1] | r2 = *((r6 + 1));
0x0005bc92 sub.w sb, r3, 4 | sb = r3 - 4;
0x0005bc94 lsrs r4, r0, 4 | r4 = r0 >> 4;
0x0005bc96 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0005bc98 ldr.w fp, [r5, r0] | fp = *((r5 + r0));
0x0005bc9c str r3, [sp, 0x10] | var_10h = r3;
0x0005bc9e lsls r3, r2, 0x1d | r3 = r2 << 0x1d;
0x0005bca0 rev.w r5, fp | fp = SWAP32 (r5);
0x0005bca4 str r5, [sp, 0x24] | var_24h = r5;
| if (r3 >= r2) {
0x0005bca6 bpl.w 0x5bde8 | goto label_13;
| }
0x0005bcaa mov r1, sb | r1 = sb;
0x0005bcac mov r0, r4 | r0 = r4;
0x0005bcae bl 0xb1e8c | fcn_000b1e8c (r0, r1, r2);
0x0005bcb2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005bcb4 mov r7, r0 | r7 = r0;
0x0005bcb6 ldr.w r3, [r3, r0, lsl 2] | offset_0 = r0 << 2;
| r3 = *((r3 + offset_0));
0x0005bcba cmp r3, 0 |
| if (r3 == 0) {
0x0005bcbc beq.w 0x5be1e | goto label_14;
| }
0x0005bcc0 mov r4, r1 | r4 = r1;
0x0005bcc2 mov r5, r3 | r5 = r3;
0x0005bcc4 str r3, [sp, 0x24] | var_24h = r3;
| label_1:
0x0005bcc6 ldr r3, [sp, 0x58] | r3 = var_0h;
0x0005bcc8 adds r7, 1 | r7++;
0x0005bcca lsls r7, r7, 2 | r7 <<= 2;
0x0005bccc mov r1, r5 | r1 = r5;
0x0005bcce eor r3, r3, 1 | r3 ^= 1;
0x0005bcd2 lsls r3, r3, 1 | r3 <<= 1;
0x0005bcd4 str r3, [sp, 0x10] | var_10h = r3;
0x0005bcd6 add r3, sp, 0x28 | r3 += var_28h;
0x0005bcd8 str r3, [sp, 0x14] | var_14h = r3;
0x0005bcda add r3, sp, 0x24 | r3 += var_24h;
0x0005bcdc str r3, [sp, 0x18] | *(arg_18h) = r3;
| label_4:
0x0005bcde ldr.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x0005bce2 cmp r3, r1 |
| if (r3 <= r1) {
0x0005bce4 blo 0x5bd0e | goto label_15;
| }
| do {
0x0005bce6 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0005bce8 cmp sb, r4 |
0x0005bcea add.w r2, r3, r7 | r2 = r3 + r7;
0x0005bcee str r1, [r2, -0x4] | *((r2 - 0x4)) = r1;
| if (sb > r4) {
0x0005bcf2 bhi 0x5bd64 | goto label_16;
| }
0x0005bcf4 ldr r2, [r3, r7] | r2 = *((r3 + r7));
0x0005bcf6 sub.w r4, r4, sb | r4 -= sb;
0x0005bcfa cmp r2, 0 |
| if (r2 == 0) {
0x0005bcfc beq.w 0x5bea8 | goto label_17;
| }
0x0005bd00 ldr.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x0005bd04 mov r1, r2 | r1 = r2;
0x0005bd06 adds r7, 4 | r7 += 4;
0x0005bd08 str r2, [sp, 0x24] | var_24h = r2;
0x0005bd0a cmp r3, r1 |
0x0005bd0c bhs 0x5bce6 |
| } while (r3 >= r1);
| label_15:
0x0005bd0e blx 0x83b8 | strerror_r ();
0x0005bd12 ldr r2, [pc, 0x1e8] | r2 = *(0x5befe);
0x0005bd14 add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x0005bd18 ldr r1, [pc, 0x1e4] |
0x0005bd1a movw r3, 0x18d3 | r3 = 0x18d3;
0x0005bd1e add r2, pc | r2 += pc;
0x0005bd20 add r1, pc | r1 = 0xb7c24;
0x0005bd22 b 0x5bdc2 | goto label_18;
| label_12:
0x0005bd24 add.w r3, r4, r8 | r3 = r4 + r8;
0x0005bd28 cmp r1, r3 |
0x0005bd2a itt hs |
| if (r1 < r3) {
0x0005bd2c movhs r7, 0 | r7 = 0;
| }
| if (r1 < r3) {
0x0005bd2e movhs sb, r7 | sb = r7;
| }
| if (r1 < r3) {
0x0005bd30 bhs 0x5bd44 |
0x0005bd32 sub.w sb, r4, r1 | sb = r4 - r1;
0x0005bd36 adds.w sb, sb, r8 | sb += r8;
0x0005bd3a sub.w r8, r1, r4 | r8 = r1 - r4;
0x0005bd3e ite ne |
| if (sb == sb) {
0x0005bd40 movne r7, 1 | r7 = 1;
| }
| if (sb == sb) {
0x0005bd42 moveq r7, 0 | r7 = 0;
| goto label_19;
| }
| }
| label_19:
0x0005bd44 ldr r3, [sp, 0x58] | r3 = var_0h;
0x0005bd46 add r4, r5 | r4 += r5;
0x0005bd48 ldr.w r0, [fp, 0x48] | r0 = *(x);
0x0005bd4c cmp r3, 0 |
| if (r3 == 0) {
0x0005bd4e beq 0x5bdd2 | goto label_20;
| }
0x0005bd50 bl 0x5480c | r0 = fcn_0005480c (r0);
0x0005bd54 mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x0005bd56 cbnz r0, 0x5bd90 | goto label_8;
| }
0x0005bd58 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005bd5a mov r0, r4 | r0 = r4;
0x0005bd5c mov r2, r8 | r2 = r8;
0x0005bd5e blx 0x8610 | fcn_00008610 ();
0x0005bd62 b 0x5bddc | goto label_21;
| label_16:
0x0005bd64 ldr.w r0, [sl] | r0 = *(sl);
0x0005bd68 add.w r3, r8, r4 | r3 = r8 + r4;
0x0005bd6c cmp r3, sb |
0x0005bd6e ldrd r3, r2, [sp, 0x10] | __asm ("ldrd r3, r2, [var_10h]");
0x0005bd72 ite hi |
| if (r3 <= sb) {
0x0005bd74 subhi r5, r4, sb | r5 = r4 - sb;
| }
| if (r3 <= sb) {
0x0005bd78 movs r5, 0 | r5 = 0;
| }
0x0005bd7a ldr.w fp, [r0, 0xdc] | fp = *((r0 + 0xdc));
0x0005bd7e itt hi |
| if (r5 <= 0) {
0x0005bd80 addhi r5, r8 | r5 += r8;
| }
| if (r5 <= 0) {
0x0005bd82 subhi r8, sb, r4 | r8 = sb - r4;
| }
0x0005bd84 lsrs r4, r0, 0x20 | r4 = r0 >> 0x20;
0x0005bd86 blx fp | r0 = fp (r0, r3);
0x0005bd88 mov fp, r0 |
0x0005bd8a cmp r0, 0 |
| if (r0 == 0) {
0x0005bd8c beq 0x5be4a | goto label_22;
| }
| label_3:
0x0005bd8e mov r3, fp | r3 = fp;
| do {
| label_8:
0x0005bd90 ldr r1, [pc, 0x170] |
0x0005bd92 ldr r2, [pc, 0x164] | r2 = *(0x5befa);
0x0005bd94 add r1, pc | r1 = 0xb7c9c;
0x0005bd96 ldr r2, [r1, r2] | r2 = imp.sinh;
0x0005bd98 ldr r1, [r2] | r1 = imp.sinh;
0x0005bd9a ldr r2, [sp, 0x2c] | r2 = var_2ch_2;
0x0005bd9c eors r1, r2 | r1 ^= r2;
0x0005bd9e mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x0005bda2 bne.w 0x5bef0 | goto label_23;
| }
0x0005bda6 mov r0, r3 | r0 = r3;
0x0005bda8 add sp, 0x34 |
0x0005bdaa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x0005bdae blx 0x83b8 | strerror_r ();
0x0005bdb2 ldr r2, [pc, 0x154] |
0x0005bdb4 add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x0005bdb8 ldr r1, [pc, 0x150] |
0x0005bdba movw r3, 0x1886 | r3 = 0x1886;
0x0005bdbe add r2, pc | r2 = 0xb7ccc;
0x0005bdc0 add r1, pc | r1 = 0xb7cd0;
| label_18:
0x0005bdc2 movt r3, 1 | r3 = (r3 & 0xFFFF) | 0x10000;
0x0005bdc6 movs r0, 0xb | r0 = 0xb;
0x0005bdc8 str r4, [sp] | *(sp) = r4;
0x0005bdca blx 0x8b60 | fcn_00008b60 ();
| label_2:
0x0005bdce movs r3, 0xb | r3 = 0xb;
0x0005bdd0 b 0x5bd90 |
| } while (1);
| label_20:
0x0005bdd2 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0005bdd4 mov r1, r4 | r1 = r4;
0x0005bdd6 mov r2, r8 | r2 = r8;
0x0005bdd8 blx 0x8610 | fcn_00008610 ();
| label_21:
0x0005bddc ldr r3, [sp, 0xc] | r3 = var_ch;
0x0005bdde movs r4, 0 | r4 = 0;
0x0005bde0 add r3, r8 | r3 += r8;
0x0005bde2 mov r8, sb | r8 = sb;
0x0005bde4 str r3, [sp, 0xc] | var_ch = r3;
0x0005bde6 b 0x5bc82 | goto label_0;
| label_13:
0x0005bde8 ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x0005bdea mov r1, sb | r1 = sb;
0x0005bdec subs r2, 1 | r2--;
0x0005bdee add r2, sb | r2 += sb;
0x0005bdf0 subs r0, r2, r0 | r0 = r2 - r0;
0x0005bdf2 bl 0xb1c30 | fcn_000b1c30 (r0, r1, r2);
0x0005bdf6 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005bdf8 mov r7, r0 | r7 = r0;
0x0005bdfa cmp r3, 0 |
| if (r3 == 0) {
0x0005bdfc beq 0x5bed8 | goto label_24;
| }
0x0005bdfe mov r0, r3 | r0 = r3;
0x0005be00 ldr r3, [pc, 0x10c] |
0x0005be02 add r3, pc |
0x0005be04 ldr r3, [r3, 0x2c] | r3 = *(0xb7d42);
0x0005be06 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0005be08 lsls r2, r7, 2 | r2 = r7 << 2;
0x0005be0a cmp r2, r0 |
| if (r2 > r0) {
0x0005be0c bgt 0x5bed6 | goto label_25;
| }
0x0005be0e ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
| label_9:
0x0005be10 movs r1, 0 | r1 = 0;
0x0005be12 blx 0x839c | fcn_0000839c ();
0x0005be16 ldrb r3, [r6, 1] | r3 = *((r6 + 1));
0x0005be18 orr r3, r3, 4 | r3 |= 4;
0x0005be1c strb r3, [r6, 1] | *((r6 + 1)) = r3;
| label_14:
0x0005be1e movs r7, 0 | r7 = 0;
0x0005be20 cmp.w fp, 0 |
| if (fp != 0) {
0x0005be24 bne.w 0x5bcc6 | goto label_1;
| }
| label_5:
0x0005be28 blx 0x83b8 | strerror_r ();
0x0005be2c ldr r2, [pc, 0xe4] |
0x0005be2e add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x0005be32 ldr r1, [pc, 0xe4] |
0x0005be34 movw r3, 0x1928 |
0x0005be38 movt r3, 1 | r3 = 0x11928;
0x0005be3c movs r0, 0xb | r0 = 0xb;
0x0005be3e add r2, pc | r2 = 0xb7d56;
0x0005be40 str r4, [sp] | *(sp) = r4;
0x0005be42 add r1, pc | r1 = 0xb7d60;
0x0005be44 blx 0x8b60 | fcn_00008b60 ();
0x0005be48 b 0x5bdce | goto label_2;
| label_22:
0x0005be4a adds r1, r4, 4 | r1 = r4 + 4;
0x0005be4c ldr r4, [sp, 0x28] | r4 = var_28h;
0x0005be4e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0005be50 add r1, r3 | r1 += r3;
0x0005be52 ldr r3, [r3] | r3 = *(r3);
0x0005be54 rev r3, r3 | r3 = SWAP32 (r3);
0x0005be56 str r3, [sp, 0x24] | var_24h = r3;
0x0005be58 ldr r3, [sp, 0x58] | r3 = var_0h;
| if (r3 == 0) {
0x0005be5a cbz r3, 0x5be98 | goto label_26;
| }
0x0005be5c mov r0, r4 | r0 = r4;
0x0005be5e str r1, [sp, 0x1c] | var_1ch_2 = r1;
0x0005be60 bl 0x5480c | r0 = fcn_0005480c (r0);
0x0005be64 mov fp, r0 |
| if (r0 == 0) {
0x0005be66 cbnz r0, 0x5be74 |
0x0005be68 ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x0005be6a mov r2, r8 | r2 = r8;
0x0005be6c mov r0, r1 | r0 = r1;
0x0005be6e ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005be70 blx 0x8610 | fcn_00008610 ();
| }
0x0005be74 ldr r4, [sp, 0x28] | r4 = var_28h;
| if (r4 != 0) {
0x0005be76 cbnz r4, 0x5bea0 | goto label_27;
| }
| label_6:
0x0005be78 cmp r5, 0 |
| if (r5 == 0) {
0x0005be7a beq 0x5bd8e | goto label_3;
| }
0x0005be7c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0005be7e movs r4, 0 | r4 = 0;
0x0005be80 add r3, r8 | r3 += r8;
0x0005be82 mov r8, r5 | r8 = r5;
0x0005be84 str r3, [sp, 0xc] | var_ch = r3;
| label_7:
0x0005be86 cmp.w fp, 0 |
| if (fp != 0) {
0x0005be8a bne 0x5bd8e | goto label_3;
| }
0x0005be8c ldr r1, [sp, 0x24] | r1 = var_24h;
0x0005be8e adds r7, 4 | r7 += 4;
0x0005be90 cmp r1, 0 |
| if (r1 != 0) {
0x0005be92 bne.w 0x5bcde | goto label_4;
| }
0x0005be96 b 0x5be28 | goto label_5;
| label_26:
0x0005be98 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0005be9a mov r2, r8 | r2 = r8;
0x0005be9c blx 0x8610 | fcn_00008610 ();
| label_27:
0x0005bea0 mov r0, r4 | r0 = r4;
0x0005bea2 bl 0x129c4 | fcn_000129c4 (r0);
0x0005bea6 b 0x5be78 | goto label_6;
| label_17:
0x0005bea8 ldr r3, [sp, 0x18] | r3 = *(arg_18h);
0x0005beaa mov r0, sl | r0 = sl;
0x0005beac bl 0x274e4 | r0 = fcn_000274e4 (r0, r1, r2, r3, r4, r5);
0x0005beb0 mov fp, r0 |
0x0005beb2 b 0x5be86 | goto label_7;
| label_11:
0x0005beb4 blx 0x83b8 | strerror_r ();
0x0005beb8 ldr r2, [pc, 0x60] |
0x0005beba add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x0005bebe ldr r1, [pc, 0x60] |
0x0005bec0 movw r3, 0x1895 |
0x0005bec4 movt r3, 1 | r3 = 0x11895;
0x0005bec8 movs r0, 0xb | r0 = 0xb;
0x0005beca add r2, pc | r2 = 0xb7dea;
0x0005becc str r4, [sp] | *(sp) = r4;
0x0005bece add r1, pc | r1 = 0xb7df4;
0x0005bed0 blx 0x8b60 | fcn_00008b60 ();
0x0005bed4 b 0x5bdce | goto label_2;
| label_25:
0x0005bed6 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| label_24:
0x0005bed8 mov r0, r3 | r0 = r3;
0x0005beda lsls r2, r7, 3 | r2 = r7 << 3;
0x0005bedc movs r3, 0 | r3 = 0;
0x0005bede bl 0x1360c | fcn_0001360c (r0, r1, r2);
0x0005bee2 movs r3, 7 | r3 = 7;
0x0005bee4 cmp r0, 0 |
| if (r0 == 0) {
0x0005bee6 beq.w 0x5bd90 | goto label_8;
| }
0x0005beea lsls r2, r7, 2 | r2 = r7 << 2;
0x0005beec str r0, [r6, 0xc] | *((r6 + 0xc)) = r0;
0x0005beee b 0x5be10 | goto label_9;
| label_23:
0x0005bef0 blx 0x883c | fcn_0000883c ();
| if (r2 != r7) {
0x0005bef4 beq 0x5bfc4 |
0x0005bef6 movs r6, r0 | r6 = r0;
0x0005bef8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0005befa movs r0, r0 |
0x0005befc strb r6, [r3, 0x10] | *((r3 + 0x10)) = r6;
0x0005befe movs r5, r0 | r5 = r0;
0x0005bf00 strb r4, [r7, 8] | *((r7 + 8)) = r4;
0x0005bf02 movs r5, r0 | r5 = r0;
0x0005bf04 ldm r7!, {r2} | r2 = *(r7!);
0x0005bf06 movs r6, r0 | r6 = r0;
0x0005bf08 strb r6, [r7, 0xd] | *((r7 + 0xd)) = r6;
0x0005bf0a movs r5, r0 | r5 = r0;
0x0005bf0c strb r4, [r3, 6] | *((r3 + 6)) = r4;
0x0005bf0e movs r5, r0 | r5 = r0;
| if (r5 < r0) {
0x0005bf10 bhs 0x5bf18 |
0x0005bf12 movs r6, r0 | r6 = r0;
0x0005bf14 strb r6, [r7, 0xb] | *((r7 + 0xb)) = r6;
0x0005bf16 movs r5, r0 | r5 = r0;
| }
0x0005bf18 strb r2, [r3, 4] | *((r3 + 4)) = r2;
0x0005bf1a movs r5, r0 | r5 = r0;
0x0005bf1c strb r2, [r6, 9] | *((r6 + 9)) = r2;
0x0005bf1e movs r5, r0 | r5 = r0;
0x0005bf20 strb r6, [r1, 2] | *((r1 + 2)) = r6;
0x0005bf22 movs r5, r0 | r5 = r0;
| }
| if (r5 == r0) {
0x0005bfc4 beq 0x5bfe0 | goto label_28;
| }
0x0005bfc6 add.w r7, r4, 0x74 | r7 = r4 + 0x74;
0x0005bfca mov r5, r0 | r5 = r0;
| do {
0x0005bfcc ldr r3, [r7, 4]! | r3 = *((r7 += 4));
0x0005bfd0 adds r5, 1 | r5++;
0x0005bfd2 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0005bfd4 bl 0x129c4 | fcn_000129c4 (r0);
0x0005bfd8 ldrsb.w r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x0005bfdc cmp r5, r3 |
0x0005bfde blt 0x5bfcc |
| } while (r5 < r3);
| label_28:
0x0005bfe0 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0005bfe2 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0005bfe4 bl 0x129c4 | fcn_000129c4 (r0);
0x0005bfe8 movs r3, 0xff | r3 = 0xff;
0x0005bfea strb.w r3, [r4, 0x44] | *((r4 + 0x44)) = r3;
0x0005bfee movs r3, 3 | r3 = 3;
0x0005bff0 strb r3, [r4] | *(r4) = r3;
0x0005bff2 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0005bff4 bic r3, r3, 0xe | r3 = BIT_MASK (r3, 0xe);
0x0005bff8 strb r3, [r4, 1] | *((r4 + 1)) = r3;
0x0005bffa mov r0, r6 | r0 = r6;
0x0005bffc pop {r3, r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5c4b0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.0005c4b0 () | void fcn_0005c4b0 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_13h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0005c4b0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005c4b4 mov r8, r2 | r8 = r2;
0x0005c4b6 ldr r2, [pc, 0x2f4] |
0x0005c4b8 sub sp, 0x34 |
0x0005c4ba ldr r5, [r0, 4] | r5 = *((r0 + 4));
0x0005c4bc ldr r3, [pc, 0x2f0] | r3 = *(0x5c7b0);
0x0005c4be add r2, pc | r2 = 0xb8c70;
0x0005c4c0 str r1, [sp, 8] | var_8h = r1;
0x0005c4c2 ldr r3, [r2, r3] |
0x0005c4c4 ldrb r2, [r5, 0x11] | r2 = *((r5 + 0x11));
0x0005c4c6 ldr r3, [r3] | r3 = *(0xb8c70);
0x0005c4c8 str r3, [sp, 0x2c] | var_2ch = r3;
0x0005c4ca mov.w r3, 0 | r3 = 0;
0x0005c4ce cmp r2, 0 |
| if (r2 == 0) {
0x0005c4d0 beq.w 0x5c640 | goto label_7;
| }
0x0005c4d4 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0005c4d6 mov r6, r0 | r6 = r0;
| if (r3 == 0) {
0x0005c4d8 cbz r3, 0x5c4e8 | goto label_8;
| }
| do {
0x0005c4da ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0005c4dc bic r2, r2, 4 | r2 = BIT_MASK (r2, 4);
0x0005c4e0 strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x0005c4e2 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0005c4e4 cmp r3, 0 |
0x0005c4e6 bne 0x5c4da |
| } while (r3 != 0);
| label_8:
0x0005c4e8 ldrb r3, [r6, 9] | r3 = *((r6 + 9));
| if (r3 != 0) {
0x0005c4ea cbz r3, 0x5c504 |
0x0005c4ec ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0005c4ee ldrb r2, [r6, 0xa] | r2 = *((r6 + 0xa));
0x0005c4f0 adds r3, 1 | r3++;
0x0005c4f2 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x0005c4f4 cmp r2, 0 |
| if (r2 == 0) {
0x0005c4f6 beq 0x5c5ec | goto label_9;
| }
0x0005c4f8 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0005c4fa ldr r2, [r2, 0x38] | r2 = *((r2 + 0x38));
0x0005c4fc ldr r4, [r2, 0x34] | r4 = *((r2 + 0x34));
0x0005c4fe rev r4, r4 | r4 = SWAP32 (r4);
0x0005c500 str r4, [sp, 0x18] | var_18h = r4;
0x0005c502 b 0x5c604 | goto label_10;
| }
0x0005c504 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0005c506 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0005c508 ldr r4, [r3, 0x34] | r4 = *((r3 + 0x34));
0x0005c50a rev r4, r4 | r4 = SWAP32 (r4);
| label_1:
0x0005c50c ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0005c50e cmp r3, r4 |
| if (r3 <= r4) {
0x0005c510 blo.w 0x5c61c | goto label_11;
| }
| label_2:
0x0005c514 ldr r3, [pc, 0x29c] |
0x0005c516 adds r4, 1 | r4++;
0x0005c518 ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x0005c51a movw fp, 0xcccd |
0x0005c51e str r4, [sp, 0x18] | var_18h = r4;
0x0005c520 movt fp, 0xcccc | fp = 0xcccccccd;
0x0005c524 add r3, pc | r3 = 0xb8cdc;
0x0005c526 mov.w sl, 0 | sl = 0;
0x0005c52a ldr.w r0, [r3, 0x118] | r0 = *(0xb8df4);
0x0005c52e bl 0xb1c30 | r0 = fcn_000b1c30 (r0, r1, r2);
0x0005c532 add.w sb, r0, 1 | sb = r0 + 1;
0x0005c536 b 0x5c53e |
| while (r2 == r4) {
| label_0:
0x0005c538 adds r4, 1 | r4++;
0x0005c53a mov.w sl, 1 | sl = 1;
0x0005c53e cmp r4, 1 |
0x0005c540 it ls |
| if (r4 > 1) {
0x0005c542 movls r2, 0 | r2 = 0;
| }
| if (r4 >= 1) {
0x0005c544 bls 0x5c562 |
0x0005c546 ldr r1, [r5, 0x28] | r1 = *((r5 + 0x28));
0x0005c548 subs r7, r4, 2 | r7 = r4 - 2;
0x0005c54a mov r0, r7 | r0 = r7;
0x0005c54c umull r2, r1, fp, r1 | r2:r1 = fp * r1;
0x0005c550 lsrs r1, r1, 2 | r1 >>= 2;
0x0005c552 adds r1, 1 | r1++;
0x0005c554 bl 0xb1e8c | fcn_000b1e8c (r0, r1, r2);
0x0005c558 subs r3, r7, r1 | r3 = r7 - r1;
0x0005c55a adds r2, r3, 2 | r2 = r3 + 2;
0x0005c55c cmp r2, sb |
0x0005c55e it eq |
| if (r2 == sb) {
0x0005c560 addeq r2, r3, 3 | r2 = r3 + 3;
| goto label_12;
| }
| }
| label_12:
0x0005c562 cmp r2, r4 |
0x0005c564 beq 0x5c538 |
| }
0x0005c566 cmp r4, sb |
| if (r4 == sb) {
0x0005c568 beq 0x5c538 | goto label_0;
| }
0x0005c56a cmp.w sl, 0 |
| if (sl != 0) {
0x0005c56e beq 0x5c572 |
0x0005c570 str r4, [sp, 0x18] | var_18h = r4;
| }
0x0005c572 mov.w sl, 1 | sl = 1;
0x0005c576 mov r3, r4 | r3 = r4;
0x0005c578 add r2, sp, 0x20 | r2 += var_20h;
0x0005c57a add r1, sp, 0x24 | r1 += var_24h;
0x0005c57c mov r0, r5 | r0 = r5;
0x0005c57e str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0005c582 bl 0x58448 | r0 = fcn_00058448 (r0, r1, r2, r3, r4, r5, r6);
0x0005c586 mov r3, r0 | r3 = r0;
0x0005c588 str r0, [sp, 0x1c] | var_1ch = r0;
| if (r0 == 0) {
0x0005c58a cbnz r0, 0x5c5ce |
0x0005c58c ldrd fp, sb, [sp, 0x20] | __asm ("ldrd fp, sb, [var_20h]");
0x0005c590 cmp fp, r4 |
| if (fp != r4) {
0x0005c592 bne 0x5c67e | goto label_13;
| }
0x0005c594 add r1, sp, 0x1c | r1 += var_1ch;
0x0005c596 mov r2, sl | r2 = sl;
0x0005c598 str r1, [sp] | *(sp) = r1;
0x0005c59a mov r0, r5 | r0 = r5;
0x0005c59c mov r1, r4 | r1 = r4;
0x0005c59e str.w sb, [sp, 0x14] | __asm ("str.w sb, [var_14h]");
0x0005c5a2 bl 0x58aac | fcn_00058aac (r0, r1, r2, r3, r4);
0x0005c5a6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 == 0) {
0x0005c5a8 cbnz r3, 0x5c5bc |
| label_5:
0x0005c5aa mov r2, r4 | r2 = r4;
0x0005c5ac mov r0, r6 | r0 = r6;
0x0005c5ae movs r1, 4 | r1 = 4;
0x0005c5b0 bl 0x58360 | r0 = fcn_00058360 (r0, r1, r2);
0x0005c5b4 mov r3, r0 | r3 = r0;
0x0005c5b6 str r0, [sp, 0x1c] | var_1ch = r0;
0x0005c5b8 cmp r0, 0 |
| if (r0 == 0) {
0x0005c5ba beq 0x5c65a | goto label_14;
| }
| }
0x0005c5bc cmp.w sb, 0 |
| if (sb == 0) {
0x0005c5c0 beq 0x5c5ce | goto label_3;
| }
| label_4:
0x0005c5c2 ldr.w r0, [sb, 0x48] | r0 = *((sb + 0x48));
0x0005c5c6 str r3, [sp, 8] | var_8h = r3;
0x0005c5c8 bl 0x129c4 | fcn_000129c4 (r0);
0x0005c5cc ldr r3, [sp, 8] | r3 = var_8h;
| }
| label_3:
0x0005c5ce ldr r1, [pc, 0x1e8] |
0x0005c5d0 ldr r2, [pc, 0x1dc] | r2 = *(0x5c7b0);
0x0005c5d2 add r1, pc | r1 = "columnsize";
0x0005c5d4 ldr r2, [r1, r2] | r2 = "columnsize";
0x0005c5d6 ldr r1, [r2] | r1 = "columnsize";
0x0005c5d8 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0005c5da eors r1, r2 | r1 ^= r2;
0x0005c5dc mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x0005c5e0 bne.w 0x5c796 | goto label_15;
| }
0x0005c5e4 mov r0, r3 | r0 = r3;
0x0005c5e6 add sp, 0x34 |
0x0005c5e8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x0005c5ec mov r0, r6 | r0 = r6;
0x0005c5ee bl 0x12e84 | fcn_00012e84 (r0);
0x0005c5f2 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0005c5f4 ldrb r3, [r6, 9] | r3 = *((r6 + 9));
0x0005c5f6 ldr r2, [r2, 0x38] | r2 = *((r2 + 0x38));
0x0005c5f8 ldr r4, [r2, 0x34] | r4 = *((r2 + 0x34));
0x0005c5fa rev r4, r4 | r4 = SWAP32 (r4);
0x0005c5fc str r4, [sp, 0x18] | var_18h = r4;
0x0005c5fe cmp r3, 0 |
| if (r3 == 0) {
0x0005c600 beq 0x5c50c | goto label_1;
| }
0x0005c602 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| label_10:
0x0005c604 subs r3, 1 | r3--;
0x0005c606 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x0005c608 cmp r3, 0 |
| if (r3 != 0) {
0x0005c60a bne.w 0x5c50c | goto label_1;
| }
0x0005c60e mov r0, r6 | r0 = r6;
0x0005c610 bl 0xa14c | fcn_0000a14c (r0);
0x0005c614 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0005c616 cmp r3, r4 |
| if (r3 >= r4) {
0x0005c618 bhs.w 0x5c514 | goto label_2;
| }
| label_11:
0x0005c61c blx 0x83b8 | strerror_r ();
0x0005c620 ldr r2, [pc, 0x198] |
0x0005c622 add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x0005c626 ldr r1, [pc, 0x198] |
0x0005c628 movw r3, 0x2af0 |
0x0005c62c movt r3, 1 | r3 = 0x12af0;
0x0005c630 movs r0, 0xb | r0 = 0xb;
0x0005c632 add r2, pc | r2 = 0xb8df2;
0x0005c634 str r4, [sp] | *(sp) = r4;
0x0005c636 add r1, pc | r1 = 0xb8dfc;
0x0005c638 blx 0x8b60 | fcn_00008b60 ();
0x0005c63c movs r3, 0xb | r3 = 0xb;
0x0005c63e b 0x5c5ce | goto label_3;
| label_7:
0x0005c640 movs r3, 1 | r3 = 1;
0x0005c642 str r2, [sp] | *(sp) = r2;
0x0005c644 mov r0, r5 | r0 = r5;
0x0005c646 add r2, sp, 0x18 | r2 += var_18h;
0x0005c648 add r1, sp, 0x14 | r1 += var_14h;
0x0005c64a bl 0x58448 | r0 = fcn_00058448 (r0, r1, r2, r3, r4, r5, r6);
0x0005c64e mov r3, r0 | r3 = r0;
0x0005c650 str r0, [sp, 0x1c] | var_1ch = r0;
0x0005c652 cmp r0, 0 |
| if (r0 != 0) {
0x0005c654 bne 0x5c5ce | goto label_3;
| }
0x0005c656 ldr.w sb, [sp, 0x14] | sb = var_14h;
| label_14:
0x0005c65a tst.w r8, 1 |
0x0005c65e mov r0, sb | r0 = sb;
0x0005c660 ite eq |
| if ((r8 & 1) != 0) {
0x0005c662 moveq r1, 0xa | r1 = 0xa;
| }
| if ((r8 & 1) == 0) {
0x0005c664 movne r1, 0xd | r1 = 0xd;
| }
0x0005c666 bl 0x265f8 | fcn_000265f8 (r0, r1);
0x0005c66a ldr.w r0, [sb, 0x48] | r0 = *((sb + 0x48));
| if (r0 != 0) {
0x0005c66e cbz r0, 0x5c674 |
0x0005c670 bl 0x129c4 | fcn_000129c4 (r0);
| }
0x0005c674 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005c676 movs r3, 0 | r3 = 0;
0x0005c678 ldr r1, [sp, 8] | r1 = var_8h;
0x0005c67a str r2, [r1] | *(r1) = r2;
0x0005c67c b 0x5c5ce | goto label_3;
| label_13:
0x0005c67e strb.w r0, [sp, 0x13] | var_13h = r0;
0x0005c682 str r0, [sp, 0x28] | var_28h = r0;
0x0005c684 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x0005c686 cmp r0, 0 |
| if (r0 == 0) {
0x0005c688 beq.w 0x5c79a | goto label_16;
| }
0x0005c68c mov r2, r3 | r2 = r3;
0x0005c68e mov r1, r3 | r1 = r3;
0x0005c690 bl 0x5c000 | r0 = fcn_0005c000 (r0, r1, r2);
0x0005c694 mov r3, r0 | r3 = r0;
0x0005c696 str r0, [sp, 0x1c] | var_1ch = r0;
0x0005c698 cmp.w sb, 0 |
| if (sb != 0) {
0x0005c69c beq 0x5c6aa |
0x0005c69e str r0, [sp, 0xc] | var_ch = r0;
0x0005c6a0 ldr.w r0, [sb, 0x48] | r0 = *((sb + 0x48));
0x0005c6a4 bl 0x129c4 | fcn_000129c4 (r0);
0x0005c6a8 ldr r3, [sp, 0xc] | r3 = var_ch;
| }
0x0005c6aa cmp r3, 0 |
| if (r3 != 0) {
0x0005c6ac bne 0x5c5ce | goto label_3;
| }
| label_6:
0x0005c6ae add.w sb, sp, 0x14 | sb += var_14h;
0x0005c6b2 movs r3, 0 | r3 = 0;
0x0005c6b4 mov r2, sb | r2 = sb;
0x0005c6b6 mov r1, r4 | r1 = r4;
0x0005c6b8 mov r0, r5 | r0 = r5;
0x0005c6ba bl 0xa33c | r0 = fcn_0000a33c (r0, r1, r2);
0x0005c6be mov r3, r0 | r3 = r0;
0x0005c6c0 str r0, [sp, 0x1c] | var_1ch = r0;
0x0005c6c2 cmp r0, 0 |
| if (r0 != 0) {
0x0005c6c4 bne 0x5c5ce | goto label_3;
| }
0x0005c6c6 add r3, sp, 0x28 | r3 += var_28h;
0x0005c6c8 add.w r2, sp, 0x13 | r2 += var_13h;
0x0005c6cc mov r1, r4 | r1 = r4;
0x0005c6ce mov r0, r5 | r0 = r5;
0x0005c6d0 bl 0x273b8 | fcn_000273b8 (r0, r1, r2, r3);
0x0005c6d4 ldrb.w r2, [sp, 0x13] | r2 = var_13h;
0x0005c6d8 mov r3, r0 | r3 = r0;
0x0005c6da ldr.w sl, [sp, 0x14] | sl = var_14h;
0x0005c6de str r0, [sp, 0x1c] | var_1ch = r0;
0x0005c6e0 subs r1, r2, 1 | r1 = r2 - 1;
0x0005c6e2 cmp r1, 1 |
| if (r1 < 1) {
0x0005c6e4 bls 0x5c752 | goto label_17;
| }
0x0005c6e6 cmp r0, 0 |
| if (r0 != 0) {
0x0005c6e8 bne 0x5c772 | goto label_18;
| }
0x0005c6ea ldr r3, [sp, 0x28] | r3 = var_28h;
0x0005c6ec mov r1, sl | r1 = sl;
0x0005c6ee strd fp, r0, [sp] | __asm ("strd fp, r0, [sp]");
0x0005c6f2 mov r0, r5 | r0 = r5;
0x0005c6f4 bl 0x59168 | r0 = fcn_00059168 (r0, r1, r2, r3, r4, r5);
0x0005c6f8 mov r3, r0 | r3 = r0;
0x0005c6fa str r0, [sp, 0x1c] | var_1ch = r0;
0x0005c6fc cmp.w sl, 0 |
| if (sl != 0) {
0x0005c700 beq 0x5c70e |
0x0005c702 str r0, [sp, 0xc] | var_ch = r0;
0x0005c704 ldr.w r0, [sl, 0x48] | r0 = *((sl + 0x48));
0x0005c708 bl 0x1b264 | fcn_0001b264 (r0);
0x0005c70c ldr r3, [sp, 0xc] | r3 = var_ch;
| }
0x0005c70e cmp r3, 0 |
| if (r3 != 0) {
0x0005c710 bne.w 0x5c5ce | goto label_3;
| }
0x0005c714 mov r2, sb | r2 = sb;
0x0005c716 mov r1, r4 | r1 = r4;
0x0005c718 mov r0, r5 | r0 = r5;
0x0005c71a bl 0xa33c | r0 = fcn_0000a33c (r0, r1, r2);
0x0005c71e mov r3, r0 | r3 = r0;
0x0005c720 str r0, [sp, 0x1c] | var_1ch = r0;
0x0005c722 cmp r0, 0 |
| if (r0 != 0) {
0x0005c724 bne.w 0x5c5ce | goto label_3;
| }
0x0005c728 ldr.w sb, [sp, 0x14] | sb = var_14h;
0x0005c72c ldr.w r0, [sb, 0x48] | r0 = *((sb + 0x48));
0x0005c730 bl 0x5480c | r0 = fcn_0005480c (r0);
0x0005c734 mov r3, r0 | r3 = r0;
0x0005c736 str r0, [sp, 0x1c] | var_1ch = r0;
| if (r0 != 0) {
0x0005c738 cbnz r0, 0x5c788 | goto label_19;
| }
0x0005c73a add r2, sp, 0x1c | r2 += var_1ch;
0x0005c73c mov r0, r5 | r0 = r5;
0x0005c73e str r2, [sp] | *(sp) = r2;
0x0005c740 mov r1, r4 | r1 = r4;
0x0005c742 movs r2, 1 | r2 = 1;
0x0005c744 bl 0x58aac | fcn_00058aac (r0, r1, r2, r3, r4);
0x0005c748 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0005c74a cmp r3, 0 |
| if (r3 != 0) {
0x0005c74c bne.w 0x5c5c2 | goto label_4;
| }
0x0005c750 b 0x5c5aa | goto label_5;
| label_17:
0x0005c752 blx 0x83b8 | strerror_r ();
0x0005c756 ldr r2, [pc, 0x6c] |
0x0005c758 adds r0, 0x14 | r0 += 0x14;
0x0005c75a ldr r1, [pc, 0x6c] |
0x0005c75c movw r3, 0x2b20 |
0x0005c760 movt r3, 1 | r3 = 0x12b20;
0x0005c764 str r0, [sp] | *(sp) = r0;
0x0005c766 add r2, pc | r2 = "%z%s%Q";
0x0005c768 movs r0, 0xb | r0 = 0xb;
0x0005c76a add r1, pc | r1 = "%z, %Q HIDDEN, %s HIDDEN)";
0x0005c76c blx 0x8b60 | fcn_00008b60 ();
0x0005c770 movs r3, 0xb | r3 = 0xb;
| label_18:
0x0005c772 cmp.w sl, 0 |
| if (sl == 0) {
0x0005c776 beq.w 0x5c5ce | goto label_3;
| }
0x0005c77a ldr.w r0, [sl, 0x48] | r0 = *((sl + 0x48));
0x0005c77e str r3, [sp, 8] | var_8h = r3;
0x0005c780 bl 0x1b264 | fcn_0001b264 (r0);
0x0005c784 ldr r3, [sp, 8] | r3 = var_8h;
0x0005c786 b 0x5c5ce | goto label_3;
| label_19:
0x0005c788 str r0, [sp, 8] | var_8h = r0;
0x0005c78a ldr.w r0, [sb, 0x48] | r0 = *((sb + 0x48));
0x0005c78e bl 0x1b264 | fcn_0001b264 (r0);
0x0005c792 ldr r3, [sp, 8] | r3 = var_8h;
0x0005c794 b 0x5c5ce | goto label_3;
| label_15:
0x0005c796 blx 0x883c | fcn_0000883c ();
| label_16:
0x0005c79a cmp.w sb, 0 |
| if (sb == 0) {
0x0005c79e beq 0x5c6ae | goto label_6;
| }
0x0005c7a0 ldr.w r0, [sb, 0x48] | r0 = *((sb + 0x48));
0x0005c7a4 bl 0x129c4 | fcn_000129c4 (r0);
0x0005c7a8 b 0x5c6ae | goto label_6;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5ca84 */
| #include <stdint.h>
|
; (fcn) fcn.0005ca84 () | void fcn_0005ca84 (int16_t arg1, int16_t arg3) {
| r0 = arg1;
| r2 = arg3;
0x0005ca84 push {r3, r4, r5, lr} |
0x0005ca86 mov r4, r0 | r4 = r0;
0x0005ca88 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
| if (r3 != 0) {
0x0005ca8a cbz r3, 0x5ca96 |
0x0005ca8c ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0005ca8e ldrb r2, [r0, 0xa] | r2 = *((r0 + 0xa));
0x0005ca90 adds r3, 1 | r3++;
0x0005ca92 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
| if (r2 == 0) {
0x0005ca94 cbz r2, 0x5cab6 | goto label_2;
| }
| }
0x0005ca96 ldrb r3, [r4, 8] | r3 = *((r4 + 8));
0x0005ca98 cmp r3, 2 |
| if (r3 == 2) {
0x0005ca9a beq 0x5cac0 | goto label_3;
| }
| do {
| label_0:
0x0005ca9c movs r1, 0 | r1 = 0;
0x0005ca9e mov r0, r4 | r0 = r4;
0x0005caa0 bl 0x574ac | r0 = fcn_000574ac (r0, r1);
0x0005caa4 mov r5, r0 | r5 = r0;
| label_1:
0x0005caa6 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
| if (r3 != 0) {
0x0005caa8 cbz r3, 0x5cab2 |
0x0005caaa ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0005caac subs r3, 1 | r3--;
0x0005caae str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| if (r3 == 0) {
0x0005cab0 cbz r3, 0x5cad0 | goto label_4;
| }
| }
0x0005cab2 mov r0, r5 | r0 = r5;
0x0005cab4 pop {r3, r4, r5, pc} |
| label_2:
0x0005cab6 bl 0x12e84 | fcn_00012e84 (r0);
0x0005caba ldrb r3, [r4, 8] | r3 = *((r4 + 8));
0x0005cabc cmp r3, 2 |
0x0005cabe bne 0x5ca9c |
| } while (r3 != 2);
| label_3:
0x0005cac0 movs r1, 0 | r1 = 0;
0x0005cac2 mov r0, r4 | r0 = r4;
0x0005cac4 bl 0x5c7cc | r0 = fcn_0005c7cc (r0, r1, r2);
0x0005cac8 mov r5, r0 | r5 = r0;
0x0005caca cmp r0, 0 |
| if (r0 == 0) {
0x0005cacc beq 0x5ca9c | goto label_0;
| }
0x0005cace b 0x5caa6 | goto label_1;
| label_4:
0x0005cad0 mov r0, r4 | r0 = r4;
0x0005cad2 bl 0xa14c | fcn_0000a14c (r0);
0x0005cad6 mov r0, r5 | r0 = r5;
0x0005cad8 pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5d84c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0005d84c () | void fcn_0005d84c (int16_t arg_0h, int16_t arg_7ch, int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
0x0005d84c ldr.w r2, [pc, 0x994] | r2 = *(0x0005e1e4);
0x0005d850 ldr.w r3, [pc, 0x994] |
0x0005d854 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005d858 sub sp, 0x34 |
0x0005d85a add r2, pc | r2 += pc;
0x0005d85c ldr r5, [r0] | r5 = *(r0);
0x0005d85e mov r4, r0 | r4 = r0;
0x0005d860 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0005d862 ldr r3, [r3] | r3 = *(0x5e1e8);
0x0005d864 str r3, [sp, 0x2c] | var_2ch = r3;
0x0005d866 mov.w r3, 0 | r3 = 0;
0x0005d86a ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
| if (r3 != 0) {
0x0005d86e cbz r3, 0x5d874 |
0x0005d870 movs r3, 7 | r3 = 7;
0x0005d872 str r3, [r0, 0x24] | *(arg_0hx24) = r3;
| }
0x0005d874 ldr.w r6, [r4, 0xcc] | r6 = *((r4 + 0xcc));
| if (r6 == 0) {
0x0005d878 cbz r6, 0x5d88e | goto label_38;
| }
| do {
0x0005d87a mov r0, r6 | r0 = r6;
0x0005d87c ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x0005d87e cmp r6, 0 |
0x0005d880 bne 0x5d87a |
| } while (r6 != 0);
0x0005d882 bl 0x5d7a8 | fcn_0005d7a8 (r0);
0x0005d886 str.w r6, [r4, 0xcc] | __asm ("str.w r6, [r4, 0xcc]");
0x0005d88a str.w r6, [r4, 0xd4] | __asm ("str.w r6, [r4, 0xd4]");
| label_38:
0x0005d88e ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0005d890 cmp r2, 0 |
| if (r2 <= 0) {
0x0005d892 ble 0x5d8b4 | goto label_39;
| }
0x0005d894 ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x0005d896 movs r6, 0 | r6 = 0;
0x0005d898 mov r7, r6 | r7 = r6;
| do {
0x0005d89a ldr.w r1, [r3, r6, lsl 2] | offset_0 = r6 << 2;
| r1 = *((r3 + offset_0));
| if (r1 != 0) {
0x0005d89e cbz r1, 0x5d8ae |
0x0005d8a0 mov r0, r4 | r0 = r4;
0x0005d8a2 bl 0x5d59c | fcn_0005d59c (r0, r1);
0x0005d8a6 ldr r3, [r4, 0x60] | r3 = *((r4 + 0x60));
0x0005d8a8 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0005d8aa str.w r7, [r3, r6, lsl 2] | __asm ("str.w r7, [r3, r6, lsl 2]");
| }
0x0005d8ae adds r6, 1 | r6++;
0x0005d8b0 cmp r6, r2 |
0x0005d8b2 blt 0x5d89a |
| } while (r6 < r2);
| label_39:
0x0005d8b4 ldr r0, [r4, 0x58] | r0 = *((r4 + 0x58));
0x0005d8b6 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x0005d8b8 cmp r0, 0 |
0x0005d8ba it ne |
| if (r0 != 0) {
0x0005d8bc cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
| if (r0 != 0) {
0x0005d8be beq 0x5d8c4 |
0x0005d8c0 bl 0x17480 | fcn_00017480 (r0, r1);
| }
0x0005d8c4 ldr.w r7, [r4, 0xd0] | r7 = *((r4 + 0xd0));
0x0005d8c8 mov sb, r5 | sb = r5;
0x0005d8ca cmp r7, 0 |
| if (r7 == 0) {
0x0005d8cc beq 0x5d944 | goto label_40;
| }
| label_0:
0x0005d8ce ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
0x0005d8d0 ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x0005d8d2 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x0005d8d4 add.w r8, r1, r1, lsl 2 | r8 = r1 + (r1 << 2);
0x0005d8d8 cmp r3, 0 |
0x0005d8da str.w r2, [r4, 0xd0] | __asm ("str.w r2, [r4, 0xd0]");
0x0005d8de lsl.w r8, r8, 3 | r8 <<= 3;
| if (r3 <= 0) {
0x0005d8e2 ble 0x5d902 | goto label_41;
| }
0x0005d8e4 add.w r8, r8, 0x54 | r8 += 0x54;
0x0005d8e8 movs r6, 0 | r6 = 0;
0x0005d8ea add r8, r7 | r8 += r7;
| do {
0x0005d8ec ldr r1, [r8, 4]! | r1 = *((r8 += 4));
| if (r1 != 0) {
0x0005d8f0 cbz r1, 0x5d8fa |
0x0005d8f2 ldr r0, [r7] | r0 = *(r7);
0x0005d8f4 bl 0x5d59c | fcn_0005d59c (r0, r1);
0x0005d8f8 ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
| }
0x0005d8fa adds r6, 1 | r6++;
0x0005d8fc cmp r6, r3 |
0x0005d8fe blt 0x5d8ec |
| } while (r6 < r3);
0x0005d900 ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
| if (r1 != 0) {
| label_41:
0x0005d902 cbz r1, 0x5d90c |
0x0005d904 add.w r0, r7, 0x58 | r0 = r7 + 0x58;
0x0005d908 bl 0x17480 | fcn_00017480 (r0, r1);
| }
0x0005d90c ldr r6, [r7, 0x28] | r6 = *((r7 + 0x28));
0x0005d90e ldr r3, [r7] | r3 = *(r7);
0x0005d910 ldr r5, [r3] | r5 = *(r3);
| if (r6 == 0) {
0x0005d912 cbz r6, 0x5d932 | goto label_42;
| }
| do {
0x0005d914 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| if (r3 != 0) {
0x0005d916 cbz r3, 0x5d91c |
0x0005d918 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x0005d91a blx r3 | uint32_t (*r3)(uint32_t) (r0);
| }
0x0005d91c ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0005d91e mov r1, r6 | r1 = r6;
0x0005d920 mov r0, r5 | r0 = r5;
0x0005d922 str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
0x0005d924 bl 0x16808 | fcn_00016808 (r0, r1);
0x0005d928 ldr r6, [r7, 0x28] | r6 = *((r7 + 0x28));
0x0005d92a cmp r6, 0 |
0x0005d92c bne 0x5d914 |
| } while (r6 != 0);
0x0005d92e ldr r3, [r7] | r3 = *(r7);
0x0005d930 ldr r5, [r3] | r5 = *(r3);
| label_42:
0x0005d932 mov r1, r7 | r1 = r7;
0x0005d934 mov r0, r5 | r0 = r5;
0x0005d936 bl 0x16808 | fcn_00016808 (r0, r1);
0x0005d93a ldr.w r7, [r4, 0xd0] | r7 = *((r4 + 0xd0));
0x0005d93e cmp r7, 0 |
| if (r7 != 0) {
0x0005d940 bne 0x5d8ce | goto label_0;
| }
0x0005d942 mov r5, sb | r5 = sb;
| label_40:
0x0005d944 ldr.w r6, [r4, 0xe0] | r6 = *((r4 + 0xe0));
| if (r6 == 0) {
0x0005d948 cbz r6, 0x5d96a | goto label_43;
| }
0x0005d94a ldr r7, [r4] | r7 = *(r4);
| do {
0x0005d94c ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| if (r3 != 0) {
0x0005d94e cbz r3, 0x5d954 |
0x0005d950 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x0005d952 blx r3 | uint32_t (*r3)(uint32_t) (r0);
| }
0x0005d954 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0005d956 mov r1, r6 | r1 = r6;
0x0005d958 mov r0, r7 | r0 = r7;
0x0005d95a str.w r3, [r4, 0xe0] | __asm ("str.w r3, [r4, 0xe0]");
0x0005d95e bl 0x16808 | fcn_00016808 (r0, r1);
0x0005d962 ldr.w r6, [r4, 0xe0] | r6 = *((r4 + 0xe0));
0x0005d966 cmp r6, 0 |
0x0005d968 bne 0x5d94c |
| } while (r6 != 0);
| label_43:
0x0005d96a ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x0005d96e lsls r6, r3, 0x18 | r6 = r3 << 0x18;
| if (r6 < r3) {
0x0005d970 bmi 0x5d9c8 | goto label_44;
| }
0x0005d972 ldr.w r2, [r5, 0xb8] | r2 = *((r5 + 0xb8));
0x0005d976 lsls r1, r3, 0x19 | r1 = r3 << 0x19;
0x0005d978 add.w r2, r2, -1 | r2 += -1;
0x0005d97c str.w r2, [r5, 0xb8] | __asm ("str.w r2, [r5, 0xb8]");
| if (r1 >= r3) {
0x0005d980 bmi 0x5d98c |
0x0005d982 ldr.w r3, [r5, 0xc0] | r3 = *((r5 + 0xc0));
0x0005d986 subs r3, 1 | r3--;
0x0005d988 str.w r3, [r5, 0xc0] | __asm ("str.w r3, [r5, 0xc0]");
| }
0x0005d98c movs r3, 3 | r3 = 3;
0x0005d98e strb.w r3, [r4, 0x95] | *((r4 + 0x95)) = r3;
0x0005d992 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
| if (r3 != 0) {
0x0005d996 cbnz r3, 0x5d9c2 | goto label_2;
| }
| label_1:
0x0005d998 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0005d99a cmp r3, 5 |
| if (r3 == 5) {
0x0005d99c beq.w 0x5df04 | goto label_45;
| }
| do {
0x0005d9a0 movs r0, 0 | r0 = 0;
| label_17:
0x0005d9a2 ldr.w r2, [pc, 0x848] | r2 = *(0x0005e1ec);
0x0005d9a6 ldr.w r3, [pc, 0x840] | r3 = *(0x5e1ea);
0x0005d9aa add r2, pc | r2 += pc;
0x0005d9ac ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0005d9ae ldr r2, [r3] | r2 = *(0x5e1ea);
0x0005d9b0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0005d9b2 eors r2, r3 | r2 ^= r3;
0x0005d9b4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0005d9b8 bne.w 0x5de92 | goto label_46;
| }
0x0005d9bc add sp, 0x34 |
0x0005d9be pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x0005d9c2 movs r3, 7 | r3 = 7;
0x0005d9c4 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0005d9c6 b 0x5d9a0 |
| } while (1);
| label_44:
0x0005d9c8 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
| if (r3 != 0) {
0x0005d9cc cbz r3, 0x5d9d4 |
0x0005d9ce mov r0, r4 | r0 = r4;
0x0005d9d0 bl 0x17f5c | fcn_00017f5c (r0);
| }
0x0005d9d4 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x0005d9d6 mov r6, r2 | r6 = r2;
0x0005d9d8 cmp r2, 0 |
| if (r2 != 0) {
0x0005d9da bne 0x5dac4 | goto label_47;
| }
| label_6:
0x0005d9dc ldrd r1, r3, [r4, 0x40] | __asm ("ldrd r1, r3, [r4, 0x40]");
0x0005d9e0 cmp r1, 1 |
0x0005d9e2 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r1 >= 1) {
0x0005d9e6 blt 0x5da02 |
0x0005d9e8 ldr.w r1, [pc, 0x804] | r1 = *(0x0005e1f0);
0x0005d9ec movw r2, 0x313 | r2 = 0x313;
0x0005d9f0 movs r3, 2 | r3 = 2;
0x0005d9f2 str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
0x0005d9f4 mov r0, r4 | r0 = r4;
0x0005d9f6 strb.w r3, [r4, 0x92] | *((r4 + 0x92)) = r3;
0x0005d9fa add r1, pc | r1 += pc;
0x0005d9fc bl 0x24e68 | fcn_00024e68 (r0);
0x0005da00 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
| }
0x0005da02 ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x0005da06 cmp r3, 0 |
| if (r3 > 0) {
0x0005da08 ble 0x5da10 |
0x0005da0a ldr.w r1, [r5, 0x194] | r1 = *((r5 + 0x194));
| if (r1 == 0) {
0x0005da0e cbz r1, 0x5da2c | goto label_48;
| }
| }
0x0005da10 ldrb.w r1, [r5, 0x55] | r1 = *((r5 + 0x55));
| if (r1 != 0) {
0x0005da14 cbz r1, 0x5da2c |
| label_10:
0x0005da16 ldrb.w r1, [r4, 0x96] | r1 = *((r4 + 0x96));
0x0005da1a ldr.w r0, [r5, 0xc0] | r0 = *((r5 + 0xc0));
0x0005da1e eor r1, r1, 0x40 | r1 ^= 0x40;
0x0005da22 ubfx r1, r1, 6, 1 | r1 = (r1 >> 6) & ((1 << 1) - 1);
0x0005da26 cmp r1, r0 |
| if (r1 == r0) {
0x0005da28 beq.w 0x5dc04 | goto label_49;
| }
| }
| label_48:
0x0005da2c cmp r2, 0 |
| if (r2 != 0) {
0x0005da2e bne.w 0x5dbf0 | goto label_20;
| }
| label_11:
0x0005da32 movs r6, 1 | r6 = 1;
| label_12:
0x0005da34 ldr r3, [r4] | r3 = *(r4);
0x0005da36 ldr.w r3, [r3, 0x1f8] | r3 = *((r3 + 0x1f8));
| if (r3 != 0) {
0x0005da3a cbz r3, 0x5da44 |
0x0005da3c ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x0005da3e cmp r3, 0 |
| if (r3 != 0) {
0x0005da40 bne.w 0x5dc94 | goto label_50;
| }
| }
| label_15:
0x0005da44 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x0005da48 lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
| if (r2 < r3) {
0x0005da4a bpl 0x5da70 |
0x0005da4c cmp r6, 2 |
| if (r6 == 2) {
0x0005da4e beq.w 0x5dbc4 | goto label_51;
| }
| label_4:
0x0005da52 ldrd r2, r0, [r4, 0x28] | __asm ("ldrd r2, r0, [r4, 0x28]");
0x0005da56 ldr r1, [r5, 0x70] | r1 = *((r5 + 0x70));
0x0005da58 adds r1, r1, r2 | r1 += r2;
0x0005da5a str r1, [r5, 0x70] | *((r5 + 0x70)) = r1;
0x0005da5c ldr r1, [r5, 0x74] | r1 = *((r5 + 0x74));
0x0005da5e adc.w r1, r0, r1 | __asm ("adc.w r1, r0, r1");
0x0005da62 str r1, [r5, 0x74] | *((r5 + 0x74)) = r1;
| label_9:
0x0005da64 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0005da68 strd r2, r0, [r5, 0x68] | __asm ("strd r2, r0, [r5, 0x68]");
0x0005da6c vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
| }
| label_3:
0x0005da70 ldr.w r2, [r4, 0x9c] | r2 = *((r4 + 0x9c));
| if (r2 != 0) {
0x0005da74 cbz r2, 0x5da80 |
0x0005da76 mov r0, r4 | r0 = r4;
0x0005da78 bl 0x17bfc | fcn_00017bfc (r0);
0x0005da7c ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
| }
0x0005da80 sxtb r1, r3 | r1 = (int32_t) r3;
0x0005da82 lsls r3, r3, 0x19 | r3 <<= 0x19;
0x0005da84 it pl |
| if (r3 < r3) {
0x0005da86 ldrpl r3, [r5, 0xc0] | r3 = *((r5 + 0xc0));
| }
0x0005da8a ldr.w r2, [r5, 0xb8] | r2 = *((r5 + 0xb8));
0x0005da8e itt pl |
| if (r3 < r3) {
0x0005da90 addpl r3, r3, -1 | r3 += -1;
| }
| if (r3 >= r3) {
0x0005da94 str.w r3, [r5, 0xc0] | __asm ("str.w r3, [r5, 0xc0]");
| }
0x0005da98 cmp r1, 0 |
0x0005da9a it lt |
| if (r1 >= 0) {
0x0005da9c ldrlt r3, [r5, 0xbc] | r3 = *((r5 + 0xbc));
| }
0x0005daa0 add.w r2, r2, -1 | r2 += -1;
0x0005daa4 str.w r2, [r5, 0xb8] | __asm ("str.w r2, [r5, 0xb8]");
0x0005daa8 itt lt |
| if (r1 >= 0) {
0x0005daaa addlt r3, r3, -1 | r3 += -1;
| }
| if (r1 < 0) {
0x0005daae str.w r3, [r5, 0xbc] | __asm ("str.w r3, [r5, 0xbc]");
| }
0x0005dab2 movs r3, 3 | r3 = 3;
0x0005dab4 strb.w r3, [r4, 0x95] | *((r4 + 0x95)) = r3;
0x0005dab8 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
0x0005dabc cmp r3, 0 |
| if (r3 == 0) {
0x0005dabe beq.w 0x5d998 | goto label_1;
| }
0x0005dac2 b 0x5d9c2 | goto label_2;
| label_47:
0x0005dac4 uxtb r1, r2 | r1 = (int8_t) r2;
0x0005dac6 sub.w r0, r1, 7 | r0 = r1 - 7;
0x0005daca clz r0, r0 | r0 &= r0;
0x0005dace lsrs r0, r0, 5 | r0 >>= 5;
0x0005dad0 cmp r1, 0xa |
0x0005dad2 ite ne |
| if (r1 == 0xa) {
0x0005dad4 movne r6, r0 | r6 = r0;
| }
| if (r1 != 0xa) {
0x0005dad6 orreq r6, r0, 1 | r6 = r0 | 1;
| }
| if (r6 == 0) {
0x0005dada cbz r6, 0x5db3e | goto label_52;
| }
0x0005dadc ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
| label_5:
0x0005dae0 cmp r1, 0xd |
0x0005dae2 it eq |
| if (r1 != 0xd) {
0x0005dae4 orreq r0, r0, 1 | r0 |= 1;
| }
0x0005dae8 cmp r0, 0 |
| if (r0 == 0) {
0x0005daea beq 0x5db76 | goto label_53;
| }
0x0005daec lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 >= r3) {
0x0005daee bpl 0x5db76 | goto label_53;
| }
0x0005daf0 ldr.w r2, [r5, 0x17c] | r2 = *((r5 + 0x17c));
0x0005daf4 cmp r2, 0 |
| if (r2 > 0) {
0x0005daf6 ble 0x5db00 |
0x0005daf8 ldr.w r2, [r5, 0x194] | r2 = *((r5 + 0x194));
0x0005dafc cmp r2, 0 |
| if (r2 == 0) {
0x0005dafe beq 0x5dc00 | goto label_54;
| }
| }
0x0005db00 ldrb.w r2, [r5, 0x55] | r2 = *((r5 + 0x55));
0x0005db04 cmp r2, 0 |
| if (r2 == 0) {
0x0005db06 beq 0x5dc00 | goto label_54;
| }
0x0005db08 ldr.w r2, [r5, 0xc0] | r2 = *((r5 + 0xc0));
0x0005db0c eor r3, r3, 0x40 | r3 ^= 0x40;
0x0005db10 ubfx r3, r3, 6, 1 | r3 = (r3 >> 6) & ((1 << 1) - 1);
0x0005db14 cmp r3, r2 |
| if (r3 != r2) {
0x0005db16 bne 0x5dc00 | goto label_54;
| }
0x0005db18 movs r6, 2 | r6 = 2;
| label_8:
0x0005db1a movs r1, 0 | r1 = 0;
0x0005db1c mov r0, r5 | r0 = r5;
0x0005db1e bl 0x5d3b8 | fcn_0005d3b8 (r0, r1);
0x0005db22 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0005db26 vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
| label_13:
0x0005db2a movs r3, 0 | r3 = 0;
0x0005db2c str.w r3, [r5, 0x1f8] | __asm ("str.w r3, aav.0x000000ff");
0x0005db30 cmp r6, 0 |
| if (r6 != 0) {
0x0005db32 bne 0x5dc00 | goto label_54;
| }
| label_14:
0x0005db34 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x0005db38 lsls r1, r3, 0x1b | r1 = r3 << 0x1b;
| if (r1 >= r3) {
0x0005db3a bpl 0x5da70 | goto label_3;
| }
0x0005db3c b 0x5da52 | goto label_4;
| label_52:
0x0005db3e and r3, r2, 0xfb | r3 = r2 & 0xfb;
0x0005db42 cmp r3, 9 |
| if (r3 != 9) {
0x0005db44 bne 0x5dbca | goto label_55;
| }
0x0005db46 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x0005db4a eor r6, r3, 0x40 | r6 = r3 ^ 0x40;
0x0005db4e ubfx r6, r6, 6, 1 | r6 = (r6 >> 6) & ((1 << 1) - 1);
0x0005db52 cmp r1, 9 |
0x0005db54 it ne |
| if (r1 == 9) {
0x0005db56 orrne r6, r6, 1 | r6 |= 1;
| }
0x0005db5a cmp r6, 0 |
| if (r6 != 0) {
0x0005db5c bne 0x5dae0 | goto label_5;
| }
0x0005db5e ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x0005db62 cmp r3, 0 |
| if (r3 <= 0) {
0x0005db64 ble.w 0x5de5a | goto label_56;
| }
0x0005db68 ldr.w r1, [r5, 0x194] | r1 = *((r5 + 0x194));
0x0005db6c movs r6, 1 | r6 = 1;
| if (r1 != 0) {
0x0005db6e cbnz r1, 0x5dbe6 | goto label_57;
| }
| label_7:
0x0005db70 ldrb.w r0, [r4, 0x92] | r0 = *((r4 + 0x92));
0x0005db74 b 0x5dbf6 | goto label_58;
| label_53:
0x0005db76 mov.w r1, 0x204 | r1 = 0x204;
0x0005db7a mov r0, r5 | r0 = r5;
0x0005db7c bl 0x5d3b8 | fcn_0005d3b8 (r0, r1);
0x0005db80 movs r6, 1 | r6 = 1;
0x0005db82 mov r0, r5 | r0 = r5;
0x0005db84 bl 0x17610 | fcn_00017610 (r0);
0x0005db88 strb.w r6, [r5, 0x55] | *((r5 + 0x55)) = r6;
0x0005db8c ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x0005db8e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0005db92 vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
0x0005db96 cmp r2, 0 |
| if (r2 == 0) {
0x0005db98 beq.w 0x5d9dc | goto label_6;
| }
0x0005db9c ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x0005dba0 cmp r3, 0 |
| if (r3 <= 0) {
0x0005dba2 ble 0x5dbac | goto label_59;
| }
0x0005dba4 ldr.w r3, [r5, 0x194] | r3 = *((r5 + 0x194));
0x0005dba8 cmp r3, 0 |
| if (r3 == 0) {
0x0005dbaa beq 0x5db70 | goto label_7;
| }
| label_59:
0x0005dbac ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x0005dbb0 ldr.w r2, [r5, 0xc0] | r2 = *((r5 + 0xc0));
0x0005dbb4 eor r3, r3, 0x40 | r3 ^= 0x40;
0x0005dbb8 ubfx r3, r3, 6, 1 | r3 = (r3 >> 6) & ((1 << 1) - 1);
0x0005dbbc cmp r3, r2 |
| if (r3 != r2) {
0x0005dbbe bne 0x5dbf0 | goto label_20;
| }
0x0005dbc0 movs r6, 0 | r6 = 0;
0x0005dbc2 b 0x5db1a | goto label_8;
| label_51:
0x0005dbc4 movs r2, 0 | r2 = 0;
0x0005dbc6 mov r0, r2 | r0 = r2;
0x0005dbc8 b 0x5da64 | goto label_9;
| label_55:
0x0005dbca ldrb.w r1, [r4, 0x92] | r1 = *((r4 + 0x92));
0x0005dbce cmp r1, 3 |
0x0005dbd0 mov r0, r1 | r0 = r1;
| if (r1 == 3) {
0x0005dbd2 beq.w 0x5d9dc | goto label_6;
| }
0x0005dbd6 ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x0005dbda cmp r3, 0 |
| if (r3 <= 0) {
0x0005dbdc ble.w 0x5de70 | goto label_60;
| }
0x0005dbe0 ldr.w r1, [r5, 0x194] | r1 = *((r5 + 0x194));
| if (r1 == 0) {
0x0005dbe4 cbz r1, 0x5dbfc | goto label_21;
| }
| label_57:
0x0005dbe6 ldrb.w r1, [r5, 0x55] | r1 = *((r5 + 0x55));
0x0005dbea cmp r1, 0 |
| if (r1 != 0) {
0x0005dbec bne.w 0x5da16 | goto label_10;
| }
| label_20:
0x0005dbf0 ldrb.w r1, [r4, 0x92] | r1 = *((r4 + 0x92));
| label_22:
0x0005dbf4 mov r0, r1 | r0 = r1;
| label_58:
0x0005dbf6 cmp r0, 3 |
| if (r0 == 3) {
0x0005dbf8 beq.w 0x5da32 | goto label_11;
| }
| label_21:
0x0005dbfc cmp r0, 2 |
| if (r0 != 2) {
0x0005dbfe bne 0x5dc74 | goto label_61;
| }
| label_54:
0x0005dc00 movs r6, 2 | r6 = 2;
0x0005dc02 b 0x5da34 | goto label_12;
| if (r2 == 0) {
| label_49:
0x0005dc04 cbz r2, 0x5dc1e | goto label_62;
| }
0x0005dc06 ldrb.w r2, [r4, 0x92] | r2 = *((r4 + 0x92));
0x0005dc0a eor r6, r6, 1 | r6 ^= 1;
0x0005dc0e cmp r2, 3 |
0x0005dc10 ite ne |
| if (r2 == 3) {
0x0005dc12 movne r6, 0 | r6 = 0;
| }
| if (r2 != 3) {
0x0005dc14 andeq r6, r6, 1 | r6 &= 1;
| }
0x0005dc18 cmp r6, 0 |
| if (r6 == 0) {
0x0005dc1a beq.w 0x5db1a | goto label_8;
| }
| label_62:
0x0005dc1e ldr r0, [r4] | r0 = *(r4);
0x0005dc20 ldr.w r1, [r0, 0x208] | r1 = *((r0 + 0x208));
0x0005dc24 ldr.w r2, [r0, 0x200] | r2 = *((r0 + 0x200));
0x0005dc28 adds r2, r2, r1 | r2 += r1;
0x0005dc2a ldr.w r1, [r0, 0x204] | r1 = *((r0 + 0x204));
0x0005dc2e ldr.w r0, [r0, 0x20c] | r0 = *((r0 + 0x20c));
0x0005dc32 adc.w r1, r1, r0 | __asm ("adc.w r1, r1, r0");
0x0005dc36 cmp r2, 1 |
0x0005dc38 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r2 < 1) {
0x0005dc3c blt 0x5dcde | goto label_63;
| }
0x0005dc3e ldr.w r1, [pc, 0x5b4] |
0x0005dc42 movs r3, 2 | r3 = 2;
0x0005dc44 movw r6, 0x313 | r6 = 0x313;
0x0005dc48 strb.w r3, [r4, 0x92] | *((r4 + 0x92)) = r3;
0x0005dc4c mov r0, r4 | r0 = r4;
0x0005dc4e str r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x0005dc50 add r1, pc | r1 = 0xbbe4a;
0x0005dc52 bl 0x24e68 | fcn_00024e68 (r0);
0x0005dc56 ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x0005dc5a lsls r7, r3, 0x19 | r7 = r3 << 0x19;
| if (r7 < r3) {
0x0005dc5c bmi 0x5dcf0 | goto label_64;
| }
| label_16:
0x0005dc5e movs r1, 0 | r1 = 0;
0x0005dc60 mov r0, r5 | r0 = r5;
0x0005dc62 str r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x0005dc64 bl 0x5d3b8 | fcn_0005d3b8 (r0, r1);
0x0005dc68 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0005dc6c vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
| label_18:
0x0005dc70 movs r6, 0 | r6 = 0;
0x0005dc72 b 0x5db2a | goto label_13;
| label_61:
0x0005dc74 mov.w r1, 0x204 | r1 = 0x204;
0x0005dc78 mov r0, r5 | r0 = r5;
0x0005dc7a bl 0x5d3b8 | fcn_0005d3b8 (r0, r1);
0x0005dc7e mov r0, r5 | r0 = r5;
0x0005dc80 bl 0x17610 | fcn_00017610 (r0);
0x0005dc84 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0005dc88 movs r3, 1 | r3 = 1;
0x0005dc8a strb.w r3, [r5, 0x55] | *((r5 + 0x55)) = r3;
0x0005dc8e vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
0x0005dc92 b 0x5db34 | goto label_14;
| label_50:
0x0005dc94 mov r1, r6 | r1 = r6;
0x0005dc96 mov r0, r4 | r0 = r4;
0x0005dc98 bl 0x5c3dc | r0 = fcn_0005c3dc (r0, r1);
0x0005dc9c cmp r0, 0 |
| if (r0 == 0) {
0x0005dc9e beq.w 0x5da44 | goto label_15;
| }
0x0005dca2 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 == 0) {
0x0005dca4 cbz r3, 0x5dccc | goto label_65;
| }
0x0005dca6 uxtb r3, r3 | r3 = (int8_t) r3;
0x0005dca8 cmp r3, 0x13 |
0x0005dcaa beq 0x5dccc |
| while (1) {
0x0005dcac mov.w r1, 0x204 | r1 = 0x204;
0x0005dcb0 mov r0, r5 | r0 = r5;
0x0005dcb2 bl 0x5d3b8 | fcn_0005d3b8 (r0, r1);
0x0005dcb6 mov r0, r5 | r0 = r5;
0x0005dcb8 bl 0x17610 | fcn_00017610 (r0);
0x0005dcbc vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0005dcc0 movs r3, 1 | r3 = 1;
0x0005dcc2 strb.w r3, [r5, 0x55] | *((r5 + 0x55)) = r3;
0x0005dcc6 vstr d16, [r4, 0x28] | __asm ("vstr d16, [r4, 0x28]");
0x0005dcca b 0x5da44 | goto label_15;
| label_65:
0x0005dccc ldr r1, [r4, 0x7c] | r1 = *((r4 + 0x7c));
0x0005dcce str r0, [r4, 0x24] | *((r4 + 0x24)) = r0;
| if (r1 != 0) {
0x0005dcd0 cbz r1, 0x5dcd8 |
0x0005dcd2 mov r0, r5 | r0 = r5;
0x0005dcd4 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x0005dcd8 movs r3, 0 | r3 = 0;
0x0005dcda str r3, [r4, 0x7c] | *((r4 + 0x7c)) = r3;
0x0005dcdc b 0x5dcac |
| }
| label_63:
0x0005dcde ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x0005dce0 and r7, r2, 2 | r7 = r2 & 2;
| if (r7 != 0) {
0x0005dce4 cbz r7, 0x5dd00 |
0x0005dce6 bic r2, r2, 2 | r2 = BIT_MASK (r2, 2);
0x0005dcea movs r6, 0xb | r6 = 0xb;
0x0005dcec str r2, [r5, 0x24] | *((r5 + 0x24)) = r2;
0x0005dcee b 0x5dc5e | goto label_16;
| label_64:
0x0005dcf0 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
| if (r3 != 0) {
0x0005dcf4 cbz r3, 0x5dcfc |
0x0005dcf6 mov r0, r4 | r0 = r4;
0x0005dcf8 bl 0x17bfc | fcn_00017bfc (r0);
| }
0x0005dcfc movs r0, 1 | r0 = 1;
0x0005dcfe b 0x5d9a2 | goto label_17;
| }
0x0005dd00 ldr.w r8, [r5, 0x194] | r8 = *((r5 + 0x194));
0x0005dd04 mov sl, r7 | sl = r7;
0x0005dd06 mov fp, r4 |
0x0005dd08 str.w r7, [r5, 0x194] | __asm ("str.w r7, aav.0x000000ff");
0x0005dd0c sub.w sb, r8, 4 | sb = r8 - 4;
| label_19:
0x0005dd10 cmp r7, r3 |
| if (r7 >= r3) {
0x0005dd12 bge 0x5dd6c | goto label_66;
| }
| do {
0x0005dd14 ldr r2, [sb, 4]! | r2 = *((sb += 4));
0x0005dd18 ldr r4, [r2, 8] | r4 = *((r2 + 8));
0x0005dd1a cmp r4, 0 |
| if (r4 == 0) {
0x0005dd1c beq.w 0x5de56 | goto label_67;
| }
0x0005dd20 ldr r2, [r4] | r2 = *(r4);
0x0005dd22 ldr r2, [r2, 0x3c] | r2 = *((r2 + 0x3c));
0x0005dd24 cmp r2, 0 |
| if (r2 == 0) {
0x0005dd26 beq.w 0x5de56 | goto label_67;
| }
0x0005dd2a mov r0, r4 | r0 = r4;
0x0005dd2c blx r2 | uint32_t (*r2)(uint32_t) (r0);
0x0005dd2e ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0005dd30 mov r6, r0 | r6 = r0;
| if (r3 != 0) {
0x0005dd32 cbz r3, 0x5dd5c |
0x0005dd34 ldr.w r1, [fp, 0x7c] | r1 = *(arg_7ch);
0x0005dd38 ldr.w r0, [fp] | r0 = *(fp);
| if (r1 != 0) {
0x0005dd3c cbz r1, 0x5dd48 |
0x0005dd3e str r0, [sp, 0xc] | var_ch = r0;
0x0005dd40 bl 0x16808 | fcn_00016808 (r0, r1);
0x0005dd44 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0005dd46 ldr r0, [sp, 0xc] | r0 = var_ch;
| }
0x0005dd48 mov r1, r3 | r1 = r3;
0x0005dd4a bl 0x22990 | fcn_00022990 (r0, r1);
0x0005dd4e str.w r0, [fp, 0x7c] | __asm ("str.w r0, [arg_7ch]");
0x0005dd52 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0005dd54 blx 0x8404 | fcn_00008404 ();
0x0005dd58 str.w sl, [r4, 8] | __asm ("str.w sl, [r4, 8]");
| }
0x0005dd5c adds r7, 1 | r7++;
0x0005dd5e cmp r6, 0 |
| if (r6 != 0) {
0x0005dd60 bne.w 0x5dfd4 | goto label_68;
| }
0x0005dd64 ldr.w r3, [r5, 0x17c] | r3 = *((r5 + 0x17c));
0x0005dd68 cmp r7, r3 |
0x0005dd6a blt 0x5dd14 |
| } while (r7 < r3);
| label_66:
0x0005dd6c ldr.w sl, [pc, 0x488] | sl = *(0x0005e1f8);
0x0005dd70 movs r1, 0 | r1 = 0;
0x0005dd72 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005dd74 mov r4, fp | r4 = fp;
0x0005dd76 str.w r8, [r5, 0x194] | __asm ("str.w r8, aav.0x000000ff");
0x0005dd7a mov sb, r1 | sb = r1;
0x0005dd7c mov r8, r1 | r8 = r1;
0x0005dd7e add sl, pc | sl += pc;
| label_23:
0x0005dd80 cmp r2, r8 |
| if (r2 <= r8) {
0x0005dd82 ble 0x5dd9e | goto label_69;
| }
| do {
0x0005dd84 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0005dd86 lsl.w r6, r8, 4 | r6 = r8 << 4;
0x0005dd8a add r3, r6 | r3 += r6;
0x0005dd8c ldr r7, [r3, 4] | r7 = *((r3 + 4));
| if (r7 != 0) {
0x0005dd8e cbz r7, 0x5dd96 |
0x0005dd90 ldrb r0, [r7, 8] | r0 = *((r7 + 8));
0x0005dd92 cmp r0, 2 |
| if (r0 == 2) {
0x0005dd94 beq 0x5de96 | goto label_70;
| }
| }
0x0005dd96 add.w r8, r8, 1 | r8++;
0x0005dd9a cmp r2, r8 |
0x0005dd9c bgt 0x5dd84 |
| } while (r2 > r8);
| if (r1 != 0) {
| label_69:
0x0005dd9e cbz r1, 0x5ddb2 |
0x0005dda0 ldr.w r3, [r5, 0xe8] | r3 = *((r5 + 0xe8));
| if (r3 == 0) {
0x0005dda4 cbz r3, 0x5ddb2 | goto label_71;
| }
0x0005dda6 ldr.w r0, [r5, 0xe4] | r0 = *((r5 + 0xe4));
0x0005ddaa blx r3 | r0 = uint32_t (*r3)(uint32_t) (r0);
0x0005ddac cmp r0, 0 |
| if (r0 != 0) {
0x0005ddae bne.w 0x5dfdc | goto label_72;
| }
| }
| label_71:
0x0005ddb2 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0005ddb4 mov.w sl, 0 | sl = 0;
0x0005ddb8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005ddba ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005ddbc ldr r3, [r3] | r3 = *(r3);
0x0005ddbe ldrb r6, [r3, 0xf] | r6 = *((r3 + 0xf));
| if (r6 == 0) {
0x0005ddc0 cbnz r6, 0x5ddee |
0x0005ddc2 ldr.w sl, [r3, 0xb8] | sl = *((r3 + 0xb8));
0x0005ddc6 cmp.w sl, 0 |
| if (sl == 0) {
0x0005ddca beq 0x5ddee | goto label_73;
| }
0x0005ddcc mov r0, sl | r0 = sl;
0x0005ddce blx 0x85b4 | r0 = fcn_000085b4 ();
0x0005ddd2 bics r8, r0, 0xc0000000 | __asm ("bics r8, r0, aav.0x000000ff");
0x0005ddd6 ite eq |
| if (sl != 0) {
0x0005ddd8 moveq r7, 1 | r7 = 1;
| }
| if (sl == 0) {
0x0005ddda movne r7, 0 | r7 = 0;
| }
0x0005dddc cmp.w sb, 1 |
0x0005dde0 it le |
| if (sb > 1) {
0x0005dde2 orrle r7, r7, 1 | r7 |= 1;
| }
0x0005dde6 cmp r7, 0 |
| if (r7 == 0) {
0x0005dde8 beq.w 0x5df30 | goto label_74;
| }
0x0005ddec mov sl, r6 | sl = r6;
| }
| label_73:
0x0005ddee ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005ddf0 cmp r2, sl |
| if (r2 <= sl) {
0x0005ddf2 ble 0x5de0e | goto label_75;
| }
| do {
0x0005ddf4 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0005ddf6 add.w r3, r3, sl, lsl 4 | r3 += (sl << 4);
0x0005ddfa ldr r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x0005ddfc cbz r0, 0x5de06 |
0x0005ddfe ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x0005de00 cmp r3, 2 |
| if (r3 == 2) {
0x0005de02 beq.w 0x5df20 | goto label_76;
| }
| }
| label_25:
0x0005de06 add.w sl, sl, 1 | sl++;
0x0005de0a cmp r2, sl |
0x0005de0c bgt 0x5ddf4 |
| } while (r2 > sl);
| label_75:
0x0005de0e movs r7, 0 | r7 = 0;
0x0005de10 cmp r2, r7 |
| if (r2 <= r7) {
0x0005de12 ble 0x5de30 | goto label_29;
| }
| do {
0x0005de14 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0005de16 add.w r3, r3, r7, lsl 4 | r3 += (r7 << 4);
0x0005de1a ldr r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x0005de1c cbz r0, 0x5de2a |
0x0005de1e movs r1, 0 | r1 = 0;
0x0005de20 bl 0x574ac | r0 = fcn_000574ac (r0, r1);
0x0005de24 cmp r0, 0 |
| if (r0 != 0) {
0x0005de26 bne 0x5df28 | goto label_77;
| }
0x0005de28 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
| }
0x0005de2a adds r7, 1 | r7++;
0x0005de2c cmp r2, r7 |
0x0005de2e bgt 0x5de14 |
| } while (r2 > r7);
| label_29:
0x0005de30 movs r1, 0x40 | r1 = 0x40;
0x0005de32 mov r0, r5 | r0 = r5;
0x0005de34 bl 0x17068 | fcn_00017068 (r0, r1);
0x0005de38 ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x0005de3a ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0005de3c vmov.i32 q8, 0 | __asm ("vmov.i32 q8, 0");
0x0005de40 bic r2, r2, 0x80000 | r2 = BIT_MASK (r2, 0x80000);
0x0005de44 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x0005de48 str r2, [r5, 0x20] | *((r5 + 0x20)) = r2;
0x0005de4a vstr d16, [r5, 0x200] | __asm ("vstr d16, aav.0x000000ff");
0x0005de4e vstr d17, [r5, 0x208] | __asm ("vstr d17, aav.0x000000ff");
0x0005de52 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0005de54 b 0x5dc70 | goto label_18;
| label_67:
0x0005de56 adds r7, 1 | r7++;
0x0005de58 b 0x5dd10 | goto label_19;
| label_56:
0x0005de5a ldrb.w r3, [r5, 0x55] | r3 = *((r5 + 0x55));
0x0005de5e cmp r3, 0 |
| if (r3 == 0) {
0x0005de60 beq.w 0x5db70 | goto label_7;
| }
0x0005de64 ldr.w r6, [r5, 0xc0] | r6 = *((r5 + 0xc0));
0x0005de68 cmp r6, 0 |
| if (r6 != 0) {
0x0005de6a bne.w 0x5dbf0 | goto label_20;
| }
0x0005de6e b 0x5db1a | goto label_8;
| label_60:
0x0005de70 ldrb.w r3, [r5, 0x55] | r3 = *((r5 + 0x55));
0x0005de74 cmp r3, 0 |
| if (r3 == 0) {
0x0005de76 beq.w 0x5dbfc | goto label_21;
| }
0x0005de7a ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x0005de7e ldr.w r2, [r5, 0xc0] | r2 = *((r5 + 0xc0));
0x0005de82 eor r3, r3, 0x40 | r3 ^= 0x40;
0x0005de86 ubfx r3, r3, 6, 1 | r3 = (r3 >> 6) & ((1 << 1) - 1);
0x0005de8a cmp r3, r2 |
| if (r3 != r2) {
0x0005de8c bne.w 0x5dbf4 | goto label_22;
| }
0x0005de90 b 0x5db1a | goto label_8;
| label_46:
0x0005de92 blx 0x883c | fcn_0000883c ();
| label_70:
0x0005de96 ldrb r2, [r7, 9] | r2 = *((r7 + 9));
| if (r2 != 0) {
0x0005de98 cbz r2, 0x5deae |
0x0005de9a ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x0005de9c adds r2, 1 | r2++;
0x0005de9e str r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
0x0005dea0 ldrb r2, [r7, 0xa] | r2 = *((r7 + 0xa));
| if (r2 != 0) {
0x0005dea2 cbnz r2, 0x5deae | goto label_78;
| }
0x0005dea4 mov r0, r7 | r0 = r7;
0x0005dea6 bl 0x12e84 | fcn_00012e84 (r0);
0x0005deaa ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0005deac add r3, r6 | r3 += r6;
| }
| label_78:
0x0005deae ldrb r3, [r3, 8] | r3 = *((r3 + 8));
0x0005deb0 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x0005deb2 cmp r3, 1 |
0x0005deb4 ldr r0, [r2] | r0 = *(r2);
| if (r3 != 1) {
0x0005deb6 beq 0x5dece |
0x0005deb8 ldrb r3, [r0, 5] | r3 = *((r0 + 5));
0x0005deba add r3, sl | r3 += sl;
0x0005debc ldrb.w r3, [r3, 0xa08] | r3 = *((r3 + 0xa08));
| if (r3 == 0) {
0x0005dec0 cbz r3, 0x5dece | goto label_79;
| }
0x0005dec2 ldrb r3, [r0, 0xc] | r3 = *((r0 + 0xc));
| if (r3 != 0) {
0x0005dec4 cbnz r3, 0x5dece | goto label_79;
| }
0x0005dec6 ldrb r3, [r0, 0x10] | r3 = *((r0 + 0x10));
| if (r3 != 0) {
0x0005dec8 cbnz r3, 0x5dece | goto label_79;
| }
0x0005deca add.w sb, sb, 1 | sb++;
| }
| label_79:
0x0005dece ldr r6, [r0, 0x2c] | r6 = *((r0 + 0x2c));
| if (r6 == 0) {
0x0005ded0 cbz r6, 0x5df08 | goto label_80;
| }
0x0005ded2 ldrb r3, [r7, 9] | r3 = *((r7 + 9));
| if (r3 != 0) {
0x0005ded4 cbz r3, 0x5dee4 |
0x0005ded6 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x0005ded8 subs r3, 1 | r3--;
0x0005deda str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
| if (r3 != 0) {
0x0005dedc cbnz r3, 0x5dee4 | goto label_24;
| }
0x0005dede mov r0, r7 | r0 = r7;
0x0005dee0 bl 0xa14c | fcn_0000a14c (r0);
| }
| label_24:
0x0005dee4 cmp r6, 5 |
| if (r6 != 5) {
0x0005dee6 bne.w 0x5dc5e | goto label_16;
| }
0x0005deea ldrb.w r3, [r4, 0x96] | r3 = *((r4 + 0x96));
0x0005deee lsls r0, r3, 0x19 | r0 = r3 << 0x19;
0x0005def0 it pl |
| if (r0 >= r3) {
0x0005def2 movpl r6, 5 | r6 = 5;
| goto label_81;
| }
| if (r0 >= r3) {
| label_81:
0x0005def4 bpl.w 0x5dc5e | goto label_16;
| }
0x0005def8 ldr.w r3, [r4, 0x9c] | r3 = *((r4 + 0x9c));
| if (r3 != 0) {
0x0005defc cbz r3, 0x5df04 |
0x0005defe mov r0, r4 | r0 = r4;
0x0005df00 bl 0x17bfc | fcn_00017bfc (r0);
| }
| label_45:
0x0005df04 movs r0, 5 | r0 = 5;
0x0005df06 b 0x5d9a2 | goto label_17;
| label_80:
0x0005df08 ldr.w r3, [r0, 0xe8] | r3 = *((r0 + 0xe8));
0x0005df0c cmp r3, 0 |
| if (r3 == 0) {
0x0005df0e beq 0x5dfb6 | goto label_82;
| }
0x0005df10 ldrb r3, [r7, 9] | r3 = *((r7 + 9));
0x0005df12 cmp r3, 0 |
| if (r3 != 0) {
0x0005df14 bne 0x5dfc2 | goto label_83;
| }
| label_27:
0x0005df16 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005df18 add.w r8, r8, 1 | r8++;
0x0005df1c movs r1, 1 | r1 = 1;
0x0005df1e b 0x5dd80 | goto label_23;
| label_76:
0x0005df20 movs r1, 0 | r1 = 0;
0x0005df22 bl 0x5c7cc | r0 = fcn_0005c7cc (r0, r1, r2);
| if (r0 != 0) {
0x0005df26 cbz r0, 0x5df2c |
| label_77:
0x0005df28 mov r6, r0 | r6 = r0;
0x0005df2a b 0x5dee4 | goto label_24;
| }
0x0005df2c ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005df2e b 0x5de06 | goto label_25;
| label_74:
0x0005df30 ldr r1, [pc, 0x2c8] |
0x0005df32 mov r3, sl | r3 = sl;
0x0005df34 mov r2, r7 | r2 = r7;
0x0005df36 ldr.w sl, [r5] | sl = *(r5);
0x0005df3a mov r0, r5 | r0 = r5;
0x0005df3c str r7, [sp] | *(sp) = r7;
0x0005df3e add r1, pc | r1 = 0xbc13e;
0x0005df40 str r7, [sp, 0x20] | var_20h = r7;
0x0005df42 bl 0x24ec8 | fcn_00024ec8 (r0);
0x0005df46 str r0, [sp, 0xc] | var_ch = r0;
0x0005df48 cmp r0, 0 |
| if (r0 == 0) {
0x0005df4a beq.w 0x5e1bc | goto label_84;
| }
0x0005df4e ldr r3, [sp, 0xc] | r3 = var_ch;
0x0005df50 add.w fp, r3, 4 |
0x0005df54 ldr r3, [pc, 0x2a8] |
0x0005df56 add.w sb, fp, r8 | sb = fp + r8;
0x0005df5a add r3, pc | r3 = 0xbc15e;
0x0005df5c str r3, [sp, 0x10] | var_10h = r3;
0x0005df5e ldr r3, [pc, 0x2a4] |
0x0005df60 add r3, pc | r3 = 0xbc16a;
0x0005df62 str r3, [sp, 0x1c] | var_1ch = r3;
0x0005df64 add r3, sp, 0x28 | r3 += var_28h;
0x0005df66 str r3, [sp, 0x18] | var_18h = r3;
0x0005df68 add r3, sp, 0x24 | r3 += var_24h;
0x0005df6a str r3, [sp, 0x14] | var_14h = r3;
| do {
| label_26:
0x0005df6c ldr r1, [sp, 0x18] | r1 = var_18h;
0x0005df6e movs r0, 4 | r0 = 4;
0x0005df70 blx 0x8ac4 | fcn_00008ac4 ();
0x0005df74 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0005df76 mov r1, sb | r1 = sb;
0x0005df78 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0005df7a movs r0, 0xd | r0 = 0xd;
0x0005df7c adds r7, 1 | r7++;
0x0005df7e uxtb r6, r3 | r6 = (int8_t) r3;
0x0005df80 lsrs r3, r3, 8 | r3 >>= 8;
0x0005df82 str r6, [sp] | *(sp) = r6;
0x0005df84 blx 0x8968 | fcn_00008968 ();
0x0005df88 ldr.w r6, [sl, 0x20] | r6 = *((sl + 0x20));
0x0005df8c movs r2, 0 | r2 = 0;
0x0005df8e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005df90 mov r1, fp | r1 = fp;
0x0005df92 mov r0, sl | r0 = sl;
0x0005df94 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005df96 mov r8, r0 | r8 = r0;
0x0005df98 cmp r0, 0 |
| if (r0 != 0) {
0x0005df9a bne.w 0x5e1b0 | goto label_85;
| }
0x0005df9e ldr r3, [sp, 0x24] | r3 = var_24h;
| if (r3 == 0) {
0x0005dfa0 cbz r3, 0x5dffc | goto label_86;
| }
0x0005dfa2 cmp r7, 0x65 |
| if (r7 == 0x65) {
0x0005dfa4 beq 0x5dfe2 | goto label_87;
| }
0x0005dfa6 cmp r7, 1 |
0x0005dfa8 bne 0x5df6c |
| } while (r7 != 1);
0x0005dfaa ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0005dfac mov r2, fp | r2 = fp;
0x0005dfae movs r0, 0xd | r0 = 0xd;
0x0005dfb0 blx 0x8b60 | fcn_00008b60 ();
0x0005dfb4 b 0x5df6c | goto label_26;
| label_82:
0x0005dfb6 movs r1, 4 | r1 = 4;
0x0005dfb8 bl 0x15bf4 | fcn_00015bf4 (r0, r1);
0x0005dfbc ldrb r3, [r7, 9] | r3 = *((r7 + 9));
0x0005dfbe mov r6, r0 | r6 = r0;
| if (r3 != 0) {
0x0005dfc0 cbz r3, 0x5dfce |
| label_83:
0x0005dfc2 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x0005dfc4 subs r3, 1 | r3--;
0x0005dfc6 str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x0005dfc8 cmp r3, 0 |
| if (r3 == 0) {
0x0005dfca beq.w 0x5e1cc | goto label_88;
| }
| }
0x0005dfce cmp r6, 0 |
| if (r6 == 0) {
0x0005dfd0 beq 0x5df16 | goto label_27;
| }
0x0005dfd2 b 0x5dee4 | goto label_24;
| label_68:
0x0005dfd4 mov r4, fp | r4 = fp;
0x0005dfd6 str.w r8, [r5, 0x194] | __asm ("str.w r8, aav.0x000000ff");
0x0005dfda b 0x5dee4 | goto label_24;
| label_72:
0x0005dfdc movw r6, 0x213 | r6 = 0x213;
0x0005dfe0 b 0x5dc5e | goto label_16;
| label_87:
0x0005dfe2 ldr r1, [pc, 0x224] |
0x0005dfe4 mov r2, fp | r2 = fp;
0x0005dfe6 movs r0, 0xd | r0 = 0xd;
0x0005dfe8 add r1, pc | r1 = 0xbc1f6;
0x0005dfea blx 0x8b60 | fcn_00008b60 ();
0x0005dfee ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
| if (r3 != 0) {
0x0005dff2 cbz r3, 0x5dffc |
0x0005dff4 mov r2, r8 | r2 = r8;
0x0005dff6 mov r1, fp | r1 = fp;
0x0005dff8 mov r0, sl | r0 = sl;
0x0005dffa blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
| label_86:
0x0005dffc movs r3, 0 | r3 = 0;
0x0005dffe add r2, sp, 0x20 | r2 += var_20h;
0x0005e000 str r3, [sp] | *(sp) = r3;
0x0005e002 mov r1, fp | r1 = fp;
0x0005e004 movw r3, 0x4016 | r3 = 0x4016;
0x0005e008 mov r0, sl | r0 = sl;
0x0005e00a bl 0x17c48 | r0 = fcn_00017c48 (r0, r1, r2, r3, r4);
0x0005e00e mov r8, r0 | r8 = r0;
0x0005e010 cmp r0, 0 |
| if (r0 != 0) {
0x0005e012 bne.w 0x5e1b0 | goto label_85;
| }
0x0005e016 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005e018 ldr r7, [sp, 0x20] | r7 = var_20h;
0x0005e01a cmp r2, 0 |
| if (r2 <= 0) {
0x0005e01c ble 0x5e09c | goto label_89;
| }
0x0005e01e strd r0, r4, [sp, 0x10] | __asm ("strd r0, r4, [var_10h]");
0x0005e022 mov sb, r0 | sb = r0;
0x0005e024 mov r4, r0 | r4 = r0;
0x0005e026 b 0x5e02e |
| while (r1 == 0) {
| label_28:
0x0005e028 adds r4, 1 | r4++;
0x0005e02a cmp r4, r2 |
| if (r4 >= r2) {
0x0005e02c bge 0x5e09a | goto label_90;
| }
0x0005e02e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0005e030 add.w r3, r3, r4, lsl 4 | r3 += (r4 << 4);
0x0005e034 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0005e036 ldr r3, [r7] | r3 = *(r7);
0x0005e038 cmp r1, 0 |
0x0005e03a beq 0x5e028 |
| }
0x0005e03c ldrb r0, [r1, 8] | r0 = *((r1 + 8));
0x0005e03e cmp r0, 2 |
| if (r0 != 2) {
0x0005e040 bne 0x5e028 | goto label_28;
| }
0x0005e042 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x0005e044 str r3, [sp, 0x18] | var_18h = r3;
0x0005e046 ldr r1, [r1] | r1 = *(r1);
0x0005e048 ldr.w r6, [r1, 0xbc] | r6 = *((r1 + 0xbc));
0x0005e04c cmp r6, 0 |
| if (r6 == 0) {
0x0005e04e beq 0x5e028 | goto label_28;
| }
0x0005e050 mov r0, r6 | r0 = r6;
0x0005e052 blx 0x85b4 | fcn_000085b4 ();
0x0005e056 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005e058 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x0005e05c str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0005e060 adds r2, 1 | r2++;
0x0005e062 mov r1, r6 | r1 = r6;
0x0005e064 mov r0, r7 | r0 = r7;
0x0005e066 str r3, [sp, 4] | var_4h = r3;
0x0005e068 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005e06a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0005e06c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005e06e mov r2, r0 | r2 = r0;
0x0005e070 mov r0, r6 | r0 = r6;
0x0005e072 str r2, [sp, 0x18] | var_18h = r2;
0x0005e074 blx 0x85b4 | r0 = fcn_000085b4 ();
0x0005e078 bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x0005e07c ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005e07e adds r3, 1 | r3++;
0x0005e080 adds.w r3, r3, sb | r3 += sb;
0x0005e084 mov sb, r3 | sb = r3;
0x0005e086 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005e088 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0005e08c str r3, [sp, 0x10] | var_10h = r3;
0x0005e08e cmp r2, 0 |
| if (r2 != 0) {
0x0005e090 bne.w 0x5e1c0 | goto label_91;
| }
0x0005e094 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005e096 ldr r7, [sp, 0x20] | r7 = var_20h;
0x0005e098 b 0x5e028 | goto label_28;
| label_90:
0x0005e09a ldr r4, [sp, 0x14] | r4 = var_14h;
| label_89:
0x0005e09c ldr r3, [r7] | r3 = *(r7);
0x0005e09e cmp r3, 0 |
| if (r3 == 0) {
0x0005e0a0 beq 0x5e17c | goto label_92;
| }
0x0005e0a2 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0005e0a4 mov r0, r7 | r0 = r7;
0x0005e0a6 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0005e0a8 lsls r6, r0, 0x15 | r6 = r0 << 0x15;
| if (r6 >= r0) {
0x0005e0aa bpl 0x5e17a | goto label_93;
| }
| label_33:
0x0005e0ac ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005e0ae mov.w sb, 0 | sb = 0;
| label_37:
0x0005e0b2 cmp sb, r2 |
| if (sb >= r2) {
0x0005e0b4 bge 0x5e0ce | goto label_94;
| }
| do {
0x0005e0b6 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0005e0b8 add.w r3, r3, sb, lsl 4 | r3 += (sb << 4);
0x0005e0bc ldr r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x0005e0be cbz r0, 0x5e0c6 |
0x0005e0c0 ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x0005e0c2 cmp r3, 2 |
| if (r3 == 2) {
0x0005e0c4 beq 0x5e150 | goto label_95;
| }
| }
0x0005e0c6 add.w sb, sb, 1 | sb++;
0x0005e0ca cmp sb, r2 |
0x0005e0cc blt 0x5e0b6 |
| } while (sb < r2);
| label_94:
0x0005e0ce ldr r3, [r7] | r3 = *(r7);
0x0005e0d0 cmp r3, 0 |
| if (r3 == 0) {
0x0005e0d2 beq 0x5e172 | goto label_96;
| }
0x0005e0d4 movs r6, 0 | r6 = 0;
| label_31:
0x0005e0d6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005e0d8 mov r0, r7 | r0 = r7;
0x0005e0da blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0005e0dc movs r3, 0 | r3 = 0;
0x0005e0de mov r0, r7 | r0 = r7;
0x0005e0e0 str r3, [r7] | *(r7) = r3;
0x0005e0e2 blx 0x8404 | fcn_00008404 ();
0x0005e0e6 cmp r6, 0 |
| if (r6 != 0) {
0x0005e0e8 bne 0x5e168 | goto label_34;
| }
| label_32:
0x0005e0ea ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
| if (r3 == 0) {
0x0005e0ee cbz r3, 0x5e146 | goto label_97;
| }
0x0005e0f0 mov r1, fp | r1 = fp;
0x0005e0f2 mov r0, sl | r0 = sl;
0x0005e0f4 movs r2, 1 | r2 = 1;
0x0005e0f6 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0005e0f8 mov r6, r0 | r6 = r0;
0x0005e0fa ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005e0fc mov r0, r5 | r0 = r5;
0x0005e0fe bl 0x16808 | fcn_00016808 (r0, r1);
0x0005e102 cmp r6, 0 |
| if (r6 != 0) {
0x0005e104 bne.w 0x5dee4 | goto label_24;
| }
| label_30:
0x0005e108 ldr r3, [pc, 0x100] |
0x0005e10a add r3, pc |
0x0005e10c ldr.w r3, [r3, 0x100] | r3 = *(0xbc41a);
| if (r3 != 0) {
0x0005e110 cbz r3, 0x5e114 |
0x0005e112 blx r3 | uint32_t (*r3)(uint32_t) (r0);
| }
0x0005e114 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005e116 cmp r2, 0 |
| if (r2 <= 0) {
0x0005e118 ble 0x5e134 | goto label_98;
| }
| do {
0x0005e11a ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0005e11c add.w r3, r3, r8, lsl 4 | r3 += (r8 << 4);
0x0005e120 ldr r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x0005e122 cbz r0, 0x5e12c |
0x0005e124 movs r1, 1 | r1 = 1;
0x0005e126 bl 0x574ac | fcn_000574ac (r0, r1);
0x0005e12a ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
| }
0x0005e12c add.w r8, r8, 1 | r8++;
0x0005e130 cmp r8, r2 |
0x0005e132 blt 0x5e11a |
| } while (r8 < r2);
| label_98:
0x0005e134 ldr r3, [pc, 0xd8] |
0x0005e136 add r3, pc |
0x0005e138 ldr.w r3, [r3, 0x104] | r3 = *(0xbc44e);
0x0005e13c cmp r3, 0 |
| if (r3 == 0) {
0x0005e13e beq.w 0x5de30 | goto label_29;
| }
0x0005e142 blx r3 | uint32_t (*r3)() ();
0x0005e144 b 0x5de30 | goto label_29;
| label_97:
0x0005e146 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005e148 mov r0, r5 | r0 = r5;
0x0005e14a bl 0x16808 | fcn_00016808 (r0, r1);
0x0005e14e b 0x5e108 | goto label_30;
| label_95:
0x0005e150 mov r1, fp | r1 = fp;
0x0005e152 bl 0x5c7cc | r0 = fcn_0005c7cc (r0, r1, r2);
0x0005e156 cmp r0, 0 |
| if (r0 == 0) {
0x0005e158 beq 0x5e1da | goto label_99;
| }
0x0005e15a ldr r3, [r7] | r3 = *(r7);
0x0005e15c mov r6, r0 | r6 = r0;
0x0005e15e cmp r3, 0 |
| if (r3 != 0) {
0x0005e160 bne 0x5e0d6 | goto label_31;
| }
0x0005e162 mov r0, r7 | r0 = r7;
0x0005e164 blx 0x8404 | fcn_00008404 ();
| label_34:
0x0005e168 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005e16a mov r0, r5 | r0 = r5;
0x0005e16c bl 0x16808 | fcn_00016808 (r0, r1);
0x0005e170 b 0x5dee4 | goto label_24;
| label_96:
0x0005e172 mov r0, r7 | r0 = r7;
0x0005e174 blx 0x8404 | fcn_00008404 ();
0x0005e178 b 0x5e0ea | goto label_32;
| label_93:
0x0005e17a ldr r3, [r7] | r3 = *(r7);
| label_92:
0x0005e17c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0005e17e movs r1, 2 | r1 = 2;
0x0005e180 mov r0, r7 | r0 = r7;
0x0005e182 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0005e184 mov r6, r0 | r6 = r0;
0x0005e186 cmp r0, 0 |
| if (r0 == 0) {
0x0005e188 beq 0x5e0ac | goto label_33;
| }
0x0005e18a ldr r3, [r7] | r3 = *(r7);
| if (r3 != 0) {
0x0005e18c cbz r3, 0x5e198 |
| label_35:
0x0005e18e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005e190 mov r0, r7 | r0 = r7;
0x0005e192 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0005e194 movs r3, 0 | r3 = 0;
0x0005e196 str r3, [r7] | *(r7) = r3;
| }
| label_36:
0x0005e198 mov r0, r7 | r0 = r7;
0x0005e19a blx 0x8404 | fcn_00008404 ();
0x0005e19e ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0005e1a2 cmp r3, 0 |
| if (r3 == 0) {
0x0005e1a4 beq 0x5e168 | goto label_34;
| }
0x0005e1a6 mov r1, fp | r1 = fp;
0x0005e1a8 mov r0, sl | r0 = sl;
0x0005e1aa movs r2, 0 | r2 = 0;
0x0005e1ac blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0005e1ae b 0x5e168 | goto label_34;
| label_85:
0x0005e1b0 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0005e1b2 mov r0, r5 | r0 = r5;
0x0005e1b4 mov r6, r8 | r6 = r8;
0x0005e1b6 bl 0x16808 | fcn_00016808 (r0, r1);
0x0005e1ba b 0x5dee4 | goto label_24;
| label_84:
0x0005e1bc movs r6, 7 | r6 = 7;
0x0005e1be b 0x5dc5e | goto label_16;
| label_91:
0x0005e1c0 ldr r3, [r7] | r3 = *(r7);
0x0005e1c2 mov r6, r2 | r6 = r2;
0x0005e1c4 ldr r4, [sp, 0x14] | r4 = var_14h;
0x0005e1c6 cmp r3, 0 |
| if (r3 != 0) {
0x0005e1c8 bne 0x5e18e | goto label_35;
| }
0x0005e1ca b 0x5e198 | goto label_36;
| label_88:
0x0005e1cc mov r0, r7 | r0 = r7;
0x0005e1ce bl 0xa14c | fcn_0000a14c (r0);
0x0005e1d2 cmp r6, 0 |
| if (r6 == 0) {
0x0005e1d4 beq.w 0x5df16 | goto label_27;
| }
0x0005e1d8 b 0x5dee4 | goto label_24;
| label_99:
0x0005e1da ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005e1dc add.w sb, sb, 1 | sb++;
0x0005e1e0 b 0x5e0b2 | goto label_37;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5ef34 */
| #include <stdint.h>
|
; (fcn) fcn.0005ef34 () | void fcn_0005ef34 (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
0x0005ef34 ldr r2, [pc, 0x248] |
0x0005ef36 ldr r3, [pc, 0x24c] | r3 = *(0x5f186);
0x0005ef38 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005ef3c sub sp, 0x24 |
0x0005ef3e add r2, pc | r2 = 0xbe0c2;
0x0005ef40 ldr r7, [r0] | r7 = *(r0);
0x0005ef42 mov r8, r0 | r8 = r0;
0x0005ef44 ldr r3, [r2, r3] |
0x0005ef46 ldr.w sl, [r7] | sl = *(r7);
0x0005ef4a ldr r3, [r3] | r3 = *(0xbe0c2);
0x0005ef4c str r3, [sp, 0x1c] | var_1ch = r3;
0x0005ef4e mov.w r3, 0 | r3 = 0;
| if (r1 == 0) {
0x0005ef52 cbz r1, 0x5ef8c | goto label_10;
| }
0x0005ef54 sub.w r3, sl, 3 | r3 = sl - 3;
0x0005ef58 mov r5, r1 | r5 = r1;
0x0005ef5a cmp r3, 1 |
| if (r3 < 1) {
0x0005ef5c bls 0x5ef9a | goto label_11;
| }
0x0005ef5e cmp.w sl, 2 |
| if (sl == 2) {
0x0005ef62 beq.w 0x5f0b2 | goto label_12;
| }
| label_4:
0x0005ef66 mov.w sb, 0 | sb = 0;
| do {
| label_7:
0x0005ef6a ldr r2, [pc, 0x21c] |
0x0005ef6c ldr r3, [pc, 0x214] | r3 = *(0x5f184);
0x0005ef6e str.w r7, [r8] | __asm ("str.w r7, [r8]");
0x0005ef72 add r2, pc | r2 = 0xbe100;
0x0005ef74 ldr r3, [r2, r3] | r3 = *(0xbe100);
0x0005ef76 ldr r2, [r3] | r2 = *(0xbe100);
0x0005ef78 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0005ef7a eors r2, r3 | r2 ^= r3;
0x0005ef7c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0005ef80 bne.w 0x5f16a | goto label_13;
| }
0x0005ef84 mov r0, sb | r0 = sb;
0x0005ef86 add sp, 0x24 |
0x0005ef88 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x0005ef8c mov.w sb, 1 | sb = 1;
| label_2:
0x0005ef90 mov r0, r7 | r0 = r7;
0x0005ef92 movs r7, 0 | r7 = 0;
0x0005ef94 bl 0x5ee7c | fcn_0005ee7c (r0);
0x0005ef98 b 0x5ef6a |
| } while (1);
| label_11:
0x0005ef9a lsls r3, r1, 2 | r3 = r1 << 2;
0x0005ef9c movs r1, 0 | r1 = 0;
0x0005ef9e mov r0, r3 | r0 = r3;
0x0005efa0 mov r4, r3 | r4 = r3;
0x0005efa2 str r3, [sp, 0xc] | var_ch = r3;
0x0005efa4 blx 0x8240 | fcn_00008240 ();
0x0005efa8 str r0, [sp, 4] | var_4h = r0;
0x0005efaa cmp r0, 0 |
| if (r0 == 0) {
0x0005efac beq.w 0x5f0f8 | goto label_14;
| }
0x0005efb0 movs r1, 0 | r1 = 0;
0x0005efb2 mov r2, r4 | r2 = r4;
0x0005efb4 blx 0x839c | fcn_0000839c ();
0x0005efb8 ldr r3, [r7] | r3 = *(r7);
0x0005efba mov r1, r7 | r1 = r7;
0x0005efbc str r7, [sp, 0x18] | var_18h = r7;
0x0005efbe cmp sl, r3 |
| if (sl != r3) {
0x0005efc0 bne 0x5efcc | goto label_15;
| }
| do {
0x0005efc2 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x0005efc4 ldr r3, [r1] | r3 = *(r1);
0x0005efc6 cmp r3, sl |
0x0005efc8 beq 0x5efc2 |
| } while (r3 == sl);
0x0005efca str r1, [sp, 0x18] | var_18h = r1;
| label_15:
0x0005efcc ldr.w sb, [r1, 8] | sb = *((r1 + 8));
0x0005efd0 subs r3, r5, 1 | r3 = r5 - 1;
0x0005efd2 movs r4, 0 | r4 = 0;
0x0005efd4 str r3, [sp, 8] | var_8h = r3;
0x0005efd6 mov r6, r4 | r6 = r4;
0x0005efd8 add r3, sp, 0x18 | r3 += var_18h;
0x0005efda mov fp, r3 |
0x0005efdc str r6, [r1, 8] | *((r1 + 8)) = r6;
0x0005efde cmp.w sb, 0 |
| if (sb == 0) {
0x0005efe2 beq 0x5f06a | goto label_16;
| }
| label_0:
0x0005efe4 str.w r6, [sb, 0xc] | __asm ("str.w r6, [sb, 0xc]");
| label_1:
0x0005efe8 ldr r1, [sp, 8] | r1 = var_8h;
0x0005efea mov r0, fp | r0 = fp;
0x0005efec bl 0x5ef34 | r0 = fcn_0005ef34 (r0, r1);
0x0005eff0 cmp r0, 0 |
| if (r0 != 0) {
0x0005eff2 bne.w 0x5f160 | goto label_17;
| }
0x0005eff6 ldr r1, [sp, 0x18] | r1 = var_18h;
| if (r1 == 0) {
0x0005eff8 cbz r1, 0x5f030 | goto label_18;
| }
0x0005effa cmp r5, 0 |
| if (r5 <= 0) {
0x0005effc ble.w 0x5f16e | goto label_19;
| }
0x0005f000 ldr r3, [sp, 4] | r3 = var_4h;
0x0005f002 mov ip, r0 |
0x0005f004 b 0x5f022 |
| while (r2 != 0) {
0x0005f006 add.w ip, ip, 1 |
0x0005f00a strd r2, r1, [r4, 0xc] | __asm ("strd r2, r1, [r4, 0xc]");
0x0005f00e cmp ip, r5 |
0x0005f010 str r4, [r2, 8] | *((r2 + 8)) = r4;
0x0005f012 str r4, [r1, 8] | *((r1 + 8)) = r4;
0x0005f014 mov r1, r4 | r1 = r4;
0x0005f016 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0005f018 str r6, [r4, 8] | *((r4 + 8)) = r6;
0x0005f01a str r6, [r3, -0x4] | *((r3 - 0x4)) = r6;
| if (ip == r5) {
0x0005f01e beq 0x5f06e | goto label_20;
| }
0x0005f020 mov r4, r2 | r4 = r2;
0x0005f022 mov lr, r3 | lr = r3;
0x0005f024 ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0005f028 cmp r2, 0 |
0x0005f02a bne 0x5f006 |
| }
0x0005f02c str.w r1, [lr] | __asm ("str.w r1, [lr]");
| label_18:
0x0005f030 cmp.w sb, 0 |
| if (sb == 0) {
0x0005f034 beq 0x5f10a | goto label_21;
| }
0x0005f036 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x0005f03a ldr r3, [r2] | r3 = *(r2);
0x0005f03c mov r1, r2 | r1 = r2;
0x0005f03e str r2, [sp, 0x18] | var_18h = r2;
0x0005f040 cmp r3, sl |
| if (r3 != sl) {
0x0005f042 bne 0x5f04e | goto label_22;
| }
| do {
0x0005f044 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x0005f046 ldr r3, [r1] | r3 = *(r1);
0x0005f048 cmp r3, sl |
0x0005f04a beq 0x5f044 |
| } while (r3 == sl);
0x0005f04c str r1, [sp, 0x18] | var_18h = r1;
| label_22:
0x0005f04e ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x0005f052 str r3, [r2, 8] | *((r2 + 8)) = r3;
| if (r3 == 0) {
0x0005f054 cbz r3, 0x5f0ae | goto label_23;
| }
0x0005f056 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
| label_3:
0x0005f058 str.w r4, [sb, 8] | __asm ("str.w r4, [sb, 8]");
0x0005f05c mov r4, sb | r4 = sb;
0x0005f05e ldr.w sb, [r1, 8] | sb = *((r1 + 8));
0x0005f062 str r6, [r1, 8] | *((r1 + 8)) = r6;
0x0005f064 cmp.w sb, 0 |
| if (sb != 0) {
0x0005f068 bne 0x5efe4 | goto label_0;
| }
| label_16:
0x0005f06a mov r7, sb | r7 = sb;
0x0005f06c b 0x5efe8 | goto label_1;
| label_20:
0x0005f06e mov r0, r4 | r0 = r4;
0x0005f070 str r2, [sp, 8] | var_8h = r2;
0x0005f072 str r4, [sp, 0x18] | var_18h = r4;
0x0005f074 mov.w sb, 0x12 | sb = 0x12;
0x0005f078 bl 0x5ee7c | fcn_0005ee7c (r0);
0x0005f07c ldr r2, [sp, 8] | r2 = var_8h;
| label_8:
0x0005f07e ldr r3, [sp, 4] | r3 = var_4h;
0x0005f080 movs r4, 0 | r4 = 0;
0x0005f082 mov sl, r2 | sl = r2;
0x0005f084 subs r6, r3, 4 | r6 = r3 - 4;
| do {
0x0005f086 ldr r0, [r6, 4]! | r0 = *((r6 += 4));
0x0005f08a adds r4, 1 | r4++;
0x0005f08c bl 0x5ee7c | fcn_0005ee7c (r0);
0x0005f090 cmp r5, r4 |
0x0005f092 bne 0x5f086 |
| } while (r5 != r4);
0x0005f094 mov r2, sl | r2 = sl;
| label_9:
0x0005f096 mov r4, r2 | r4 = r2;
| if (r2 == 0) {
0x0005f098 cbz r2, 0x5f0a6 | goto label_24;
| }
| do {
0x0005f09a mov r0, r4 | r0 = r4;
0x0005f09c ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x0005f09e blx 0x8404 | fcn_00008404 ();
0x0005f0a2 cmp r4, 0 |
0x0005f0a4 bne 0x5f09a |
| } while (r4 != 0);
| label_24:
0x0005f0a6 ldr r0, [sp, 4] | r0 = var_4h;
0x0005f0a8 blx 0x8404 | fcn_00008404 ();
0x0005f0ac b 0x5ef90 | goto label_2;
| label_23:
0x0005f0ae mov r7, r2 | r7 = r2;
0x0005f0b0 b 0x5f058 | goto label_3;
| label_12:
0x0005f0b2 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0005f0b6 add.w r3, r7, 0xc | r3 = r7 + 0xc;
0x0005f0ba ldrd r2, r4, [r7, 0xc] | __asm ("ldrd r2, r4, [r7, 0xc]");
0x0005f0be subs r5, r1, 1 | r5 = r1 - 1;
0x0005f0c0 mov r1, r5 | r1 = r5;
0x0005f0c2 add r0, sp, 0x14 | r0 += var_14h;
0x0005f0c4 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0005f0c8 movs r3, 0 | r3 = 0;
0x0005f0ca str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0005f0cc str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0005f0ce strd r2, r4, [sp, 0x14] | __asm ("strd r2, r4, [var_18h]");
0x0005f0d2 bl 0x5ef34 | r0 = fcn_0005ef34 (r0, r1);
0x0005f0d6 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x0005f0d8 cbnz r0, 0x5f0ea |
0x0005f0da mov r1, r5 | r1 = r5;
0x0005f0dc add r0, sp, 0x18 | r0 += var_18h;
0x0005f0de bl 0x5ef34 | fcn_0005ef34 (r0, r1);
0x0005f0e2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005f0e4 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x0005f0e6 cbz r0, 0x5f0fe | goto label_25;
| }
0x0005f0e8 ldr r4, [sp, 0x18] | r4 = var_18h;
| }
0x0005f0ea mov r0, r4 | r0 = r4;
0x0005f0ec bl 0x5ee7c | fcn_0005ee7c (r0);
0x0005f0f0 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0005f0f2 bl 0x5ee7c | fcn_0005ee7c (r0);
0x0005f0f6 b 0x5ef90 | goto label_2;
| label_14:
0x0005f0f8 mov.w sb, 7 | sb = 7;
0x0005f0fc b 0x5ef90 | goto label_2;
| label_25:
0x0005f0fe ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005f100 str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x0005f102 str r7, [r3, 8] | *((r3 + 8)) = r7;
0x0005f104 str r2, [r7, 0x10] | *((r7 + 0x10)) = r2;
0x0005f106 str r7, [r2, 8] | *((r2 + 8)) = r7;
0x0005f108 b 0x5ef66 | goto label_4;
| label_21:
0x0005f10a cmp r5, 0 |
0x0005f10c mov fp, sb |
0x0005f10e str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_18h]");
0x0005f112 mov sb, r0 | sb = r0;
| if (r5 <= 0) {
0x0005f114 ble 0x5f15c | goto label_26;
| }
0x0005f116 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0005f118 mov r7, fp | r7 = fp;
0x0005f11a ldr r3, [sp, 4] | r3 = var_4h;
0x0005f11c mov r5, fp | r5 = fp;
0x0005f11e mov r6, fp | r6 = fp;
0x0005f120 add r0, r3 | r0 += r3;
0x0005f122 b 0x5f13e | goto label_27;
| label_5:
0x0005f124 str r7, [r4, 0x10] | *((r4 + 0x10)) = r7;
0x0005f126 movs r5, 1 | r5 = 1;
0x0005f128 ldr r2, [r3, -0x4] | r2 = *((r3 - 0x4));
0x0005f12c str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x0005f12e str r4, [r2, 8] | *((r2 + 8)) = r4;
0x0005f130 str r4, [r7, 8] | *((r7 + 8)) = r4;
0x0005f132 mov r7, r4 | r7 = r4;
0x0005f134 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0005f136 str r6, [r4, 8] | *((r4 + 8)) = r6;
0x0005f138 mov r4, r2 | r4 = r2;
| do {
| label_6:
0x0005f13a cmp r0, r3 |
| if (r0 == r3) {
0x0005f13c beq 0x5f152 | goto label_28;
| }
| label_27:
0x0005f13e ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0005f142 cmp r2, 0 |
0x0005f144 beq 0x5f13a |
| } while (r2 == 0);
0x0005f146 cmp r7, 0 |
| if (r7 != 0) {
0x0005f148 bne 0x5f124 | goto label_5;
| }
0x0005f14a str r7, [r2, 8] | *((r2 + 8)) = r7;
0x0005f14c movs r5, 1 | r5 = 1;
0x0005f14e mov r7, r2 | r7 = r2;
0x0005f150 b 0x5f13a | goto label_6;
| label_28:
0x0005f152 cbz r5, 0x5f15c |
| while (1) {
0x0005f154 ldr r0, [sp, 4] | r0 = var_4h;
0x0005f156 blx 0x8404 | fcn_00008404 ();
0x0005f15a b 0x5ef6a | goto label_7;
| label_26:
0x0005f15c movs r7, 0 | r7 = 0;
0x0005f15e b 0x5f154 |
| }
| label_17:
0x0005f160 cmp r5, 0 |
0x0005f162 mov sb, r0 | sb = r0;
0x0005f164 mov r2, r4 | r2 = r4;
| if (r5 > 0) {
0x0005f166 bgt 0x5f07e | goto label_8;
| }
0x0005f168 b 0x5f096 | goto label_9;
| label_13:
0x0005f16a blx 0x883c | fcn_0000883c ();
| label_19:
0x0005f16e mov r0, r1 | r0 = r1;
0x0005f170 str r4, [sp, 8] | var_8h = r4;
0x0005f172 mov.w sb, 0x12 | sb = 0x12;
0x0005f176 bl 0x5ee7c | fcn_0005ee7c (r0);
0x0005f17a ldr r2, [sp, 8] | r2 = var_8h;
0x0005f17c b 0x5f096 | goto label_9;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5f1f8 */
| #include <stdint.h>
|
; (fcn) fcn.0005f1f8 () | void fcn_0005f1f8 (int16_t arg_0h, int16_t arg_238h, int16_t arg_3d0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_14h_2;
| int16_t var_2ch_2;
| int16_t var_58h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0005f1f8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005f1fc mov r8, r2 | r8 = r2;
0x0005f1fe ldr r2, [pc, 0x190] |
0x0005f200 mov fp, r3 |
0x0005f202 sub sp, 0x34 |
0x0005f204 mov sb, r0 | sb = r0;
0x0005f206 ldr r3, [pc, 0x18c] | r3 = *(0x5f396);
0x0005f208 mov r6, r1 | r6 = r1;
0x0005f20a add r2, pc | r2 = 0xbe5a0;
0x0005f20c ldr r4, [r1, 0x50] | r4 = *((r1 + 0x50));
0x0005f20e ldr r3, [r2, r3] |
0x0005f210 ldr r3, [r3] | r3 = *(0xbe5a0);
0x0005f212 str r3, [sp, 0x2c] | var_2ch = r3;
0x0005f214 mov.w r3, 0 | r3 = 0;
0x0005f218 ldrb.w r3, [r0, 0xef] | r3 = *((r0 + 0xef));
0x0005f21c str r4, [sp, 0x1c] | var_1ch = r4;
| if (r3 != 0) {
0x0005f21e cbz r3, 0x5f26a |
0x0005f220 ldr r3, [r1, 0x38] | r3 = *((r1 + 0x38));
| if (r3 == 0) {
0x0005f222 cbz r3, 0x5f26a | goto label_7;
| }
0x0005f224 movs r3, 0 | r3 = 0;
0x0005f226 strb.w r3, [sp, 0x20] | var_20h = r3;
0x0005f22a cmp.w r8, 0 |
| if (r8 != 0) {
0x0005f22e beq 0x5f23c |
0x0005f230 ldr r3, [r1, 0x54] | r3 = *((r1 + 0x54));
0x0005f232 str.w r4, [r8] | __asm ("str.w r4, [r8]");
0x0005f236 subs r3, 1 | r3--;
0x0005f238 str.w r3, [fp] | __asm ("str.w r3, [fp]");
| }
0x0005f23c add.w r1, r6, 0x54 | r1 = r6 + 0x54;
0x0005f240 add.w r0, r6, 0x58 | r0 = r6 + 0x58;
0x0005f244 add r4, sp, 0x20 | r4 += var_20h;
0x0005f246 ldr r2, [r6, 0x4c] | r2 = *((r6 + 0x4c));
0x0005f248 add r3, sp, 0x1c | r3 += var_1ch;
0x0005f24a strd r1, r4, [sp, 4] | __asm ("strd r1, r4, [var_4h]");
0x0005f24e ldr r1, [r6, 0x48] | r1 = *((r6 + 0x48));
0x0005f250 str r0, [sp] | *(sp) = r0;
0x0005f252 movs r0, 0 | r0 = 0;
0x0005f254 bl 0x15de0 | fcn_00015de0 (r0, r1, r2, r3, r4, r5, r6);
0x0005f258 ldrb.w r3, [sp, 0x20] | r3 = var_20h;
0x0005f25c cmp r3, 0 |
| if (r3 == 0) {
0x0005f25e beq.w 0x5f376 | goto label_8;
| }
| label_1:
0x0005f262 movs r3, 0 | r3 = 0;
| label_5:
0x0005f264 str r3, [r6, 0x50] | *((r6 + 0x50)) = r3;
| label_3:
0x0005f266 movs r0, 0 | r0 = 0;
0x0005f268 b 0x5f2a0 | goto label_2;
| }
| label_7:
0x0005f26a ldr r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x0005f26c movs r5, 0 | r5 = 0;
0x0005f26e ldrd r7, r3, [r6, 0x48] | __asm ("ldrd r7, r3, [r6, 0x48]");
0x0005f272 str r3, [sp, 0x10] | var_10h = r3;
0x0005f274 str r7, [sp, 0x14] | var_14h = r7;
| do {
| label_0:
0x0005f276 ldrb r3, [r4] | r3 = *(r4);
0x0005f278 orrs r5, r3 | r5 |= r3;
| if (r5 != r3) {
0x0005f27a bne 0x5f2e6 | goto label_9;
| }
0x0005f27c cmp r0, 0 |
| if (r0 == 0) {
0x0005f27e beq 0x5f2f0 | goto label_10;
| }
0x0005f280 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x0005f282 ldr r1, [r6, 0x28] | r1 = *((r6 + 0x28));
0x0005f284 add r1, r3 | r1 += r3;
0x0005f286 cmp r1, r4 |
| if (r1 > r4) {
0x0005f288 bhi 0x5f2f0 | goto label_10;
| }
0x0005f28a ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x0005f28c subs r7, r2, r3 | r7 = r2 - r3;
0x0005f28e cmp.w r7, 0x1000 |
0x0005f292 it ge |
| if (r7 < 0x1000) {
0x0005f294 movge r7, 0x1000 | r7 = 0x1000;
| }
0x0005f298 mov r2, r7 | r2 = r7;
0x0005f29a blx 0x84cc | r0 = memcpy_chk ();
| if (r0 != 0) {
0x0005f29e cbz r0, 0x5f2ba |
| label_2:
0x0005f2a0 ldr r2, [pc, 0xf4] |
0x0005f2a2 ldr r3, [pc, 0xf0] | r3 = *(0x5f396);
0x0005f2a4 add r2, pc | r2 = 0xbe640;
0x0005f2a6 ldr r3, [r2, r3] | r3 = *(0xbe640);
0x0005f2a8 ldr r2, [r3] | r2 = *(0xbe640);
0x0005f2aa ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0005f2ac eors r2, r3 | r2 ^= r3;
0x0005f2ae mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0005f2b2 bne 0x5f38a | goto label_11;
| }
0x0005f2b4 add sp, 0x34 |
0x0005f2b6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0005f2ba ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x0005f2bc adds r2, r7, r3 | r2 = r7 + r3;
0x0005f2be ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x0005f2c0 str r2, [r6, 0x30] | *((r6 + 0x30)) = r2;
0x0005f2c2 str r5, [r3, r2] | *((r3 + r2)) = r5;
0x0005f2c4 add r3, r2 | r3 += r2;
0x0005f2c6 str r5, [r3, 4] | *((r3 + 4)) = r5;
0x0005f2c8 str r5, [r3, 8] | *((r3 + 8)) = r5;
0x0005f2ca str r5, [r3, 0xc] | *((r3 + 0xc)) = r5;
0x0005f2cc str r5, [r3, 0x10] | *((r3 + 0x10)) = r5;
0x0005f2ce ldrd r3, r2, [r6, 0x2c] | __asm ("ldrd r3, r2, [r6, 0x2c]");
0x0005f2d2 ldr r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x0005f2d4 cmp r2, r3 |
0x0005f2d6 bne 0x5f276 |
| } while (r2 != r3);
0x0005f2d8 blx 0x8b04 | fcn_00008b04 ();
0x0005f2dc strd r5, r5, [r6, 0x30] | __asm ("strd r5, r5, [r6, 0x30]");
0x0005f2e0 ldrb r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x0005f2e2 cbz r3, 0x5f2f0 |
0x0005f2e4 mov r0, r5 | r0 = r5;
| label_9:
0x0005f2e6 adds r4, 1 | r4++;
0x0005f2e8 and r5, r3, 0x80 | r5 = r3 & 0x80;
0x0005f2ec str r4, [sp, 0x1c] | var_1ch = r4;
0x0005f2ee b 0x5f276 | goto label_0;
| }
| label_10:
0x0005f2f0 adds r4, 1 | r4++;
0x0005f2f2 ldr r7, [sp, 0x14] | r7 = var_14h;
0x0005f2f4 str r4, [sp, 0x1c] | var_1ch = r4;
0x0005f2f6 cmp.w r8, 0 |
| if (r8 != 0) {
0x0005f2fa beq 0x5f30a |
0x0005f2fc ldr r3, [r6, 0x50] | r3 = *((r6 + 0x50));
0x0005f2fe str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x0005f302 subs r3, r4, r3 | r3 = r4 - r3;
0x0005f304 subs r3, 1 | r3--;
0x0005f306 str.w r3, [fp] | __asm ("str.w r3, [fp]");
| }
0x0005f30a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005f30c add r7, r3 | r7 += r3;
0x0005f30e cmp r4, r7 |
0x0005f310 it lo |
| if (r4 >= r7) {
0x0005f312 movlo r2, 0 | r2 = 0;
| }
| if (r4 <= r7) {
0x0005f314 blo 0x5f322 | goto label_12;
| }
0x0005f316 b 0x5f262 | goto label_1;
| do {
0x0005f318 cmp r4, r7 |
0x0005f31a mov sl, r4 | sl = r4;
0x0005f31c mov.w r2, 1 | r2 = 1;
| if (r4 == r7) {
0x0005f320 beq 0x5f36a | goto label_13;
| }
| label_12:
0x0005f322 mov r5, r4 | r5 = r4;
0x0005f324 ldrb r3, [r4], 1 | r3 = *(r4);
| r4++;
0x0005f328 cmp r3, 0 |
0x0005f32a beq 0x5f318 |
| } while (r3 == 0);
| if (r2 != 0) {
0x0005f32c cbz r2, 0x5f332 |
0x0005f32e str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch]");
| }
0x0005f332 cmp r5, r7 |
| if (r5 >= r7) {
0x0005f334 bhs 0x5f262 | goto label_1;
| }
| label_4:
0x0005f336 movs r2, 0xa | r2 = 0xa;
0x0005f338 mov r1, r5 | r1 = r5;
0x0005f33a mov r0, r6 | r0 = r6;
0x0005f33c bl 0x5f18c | r0 = fcn_0005f18c (r0, r1, r2);
0x0005f340 cmp r0, 0 |
| if (r0 != 0) {
0x0005f342 bne 0x5f2a0 | goto label_2;
| }
0x0005f344 mov r0, r5 | r0 = r5;
0x0005f346 add r1, sp, 0x20 | r1 += var_20h;
0x0005f348 bl 0xb604 | r0 = fcn_0000b604 (r0, r1);
0x0005f34c add r5, r0 | r5 += r0;
0x0005f34e str r5, [r6, 0x50] | *((r6 + 0x50)) = r5;
0x0005f350 ldrb.w r3, [sb, 0xef] | r3 = *((sb + 0xef));
| if (r3 == 0) {
0x0005f354 cbz r3, 0x5f37a | goto label_14;
| }
0x0005f356 ldr r3, [r6, 0x58] | r3 = *((r6 + 0x58));
0x0005f358 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0005f35a ldr r2, [r6, 0x5c] | r2 = *((r6 + 0x5c));
0x0005f35c ldr r0, [sp, 0x24] | r0 = var_24h;
0x0005f35e subs r3, r3, r1 | r3 -= r1;
0x0005f360 sbc.w r2, r2, r0 | __asm ("sbc.w r2, r2, r0");
| label_6:
0x0005f364 strd r3, r2, [r6, 0x58] | __asm ("strd r3, r2, [r6, 0x58]");
0x0005f368 b 0x5f266 | goto label_3;
| label_13:
0x0005f36a mov r5, r7 | r5 = r7;
0x0005f36c str r7, [sp, 0x1c] | var_1ch = r7;
0x0005f36e cmp r5, r7 |
| if (r5 >= r7) {
0x0005f370 bhs.w 0x5f262 | goto label_1;
| }
0x0005f374 b 0x5f336 | goto label_4;
| label_8:
0x0005f376 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0005f378 b 0x5f264 | goto label_5;
| label_14:
0x0005f37a ldr r3, [r6, 0x58] | r3 = *((r6 + 0x58));
0x0005f37c ldr r1, [sp, 0x20] | r1 = var_20h;
0x0005f37e ldr r2, [r6, 0x5c] | r2 = *((r6 + 0x5c));
0x0005f380 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0005f382 adds r3, r3, r1 | r3 += r1;
0x0005f384 adc.w r2, r2, r0 | __asm ("adc.w r2, r2, r0");
0x0005f388 b 0x5f364 | goto label_6;
| label_11:
0x0005f38a blx 0x883c | fcn_0000883c ();
0x0005f38e nop |
0x0005f390 ldr r2, [sp, 0x238] | r2 = *(arg_238h);
0x0005f392 movs r6, r0 | r6 = r0;
0x0005f394 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0005f396 movs r0, r0 |
0x0005f398 ldr r1, [sp, 0x3d0] | r1 = *(arg_3d0h);
0x0005f39a movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5fdc8 */
| #include <stdint.h>
|
; (fcn) fcn.0005fdc8 () | void fcn_0005fdc8 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| arithmetic x;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x0005fdc8 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x0005fdcc mov r7, r1 | r7 = r1;
0x0005fdce ldr r1, [pc, 0x148] |
0x0005fdd0 mov r4, r2 | r4 = r2;
0x0005fdd2 mov r8, r3 | r8 = r3;
0x0005fdd4 movs r3, 0 | r3 = 0;
0x0005fdd6 ldr r2, [pc, 0x144] | r2 = *(0x5ff1e);
0x0005fdd8 sub sp, 0x18 |
0x0005fdda ldrd sl, r6, [r4] | __asm ("ldrd sl, r6, [r4]");
0x0005fdde add r1, pc | r1 = 0xbfcfc;
0x0005fde0 ldr.w sb, [r0] | sb = *(r0);
0x0005fde4 mov r5, r0 | r5 = r0;
0x0005fde6 ldr r2, [r1, r2] |
0x0005fde8 cmp r6, r3 |
0x0005fdea ldr r2, [r2] | r2 = *(0xbfcfc);
0x0005fdec str r2, [sp, 0x14] | var_14h = r2;
0x0005fdee mov.w r2, 0 | r2 = 0;
0x0005fdf2 str r7, [sp, 0xc] | x = r7;
0x0005fdf4 str r3, [sp, 0x10] | var_10h = r3;
| if (r6 < r3) {
0x0005fdf6 blt 0x5feaa | goto label_5;
| }
| label_0:
0x0005fdf8 adds r0, r6, 1 | r0 = r6 + 1;
0x0005fdfa blx 0x86a4 | r0 = fcn_000086a4 ();
0x0005fdfe mov r4, r0 | r4 = r0;
0x0005fe00 cmp r0, 0 |
| if (r0 == 0) {
0x0005fe02 beq 0x5fe96 | goto label_6;
| }
0x0005fe04 mov r2, r6 | r2 = r6;
0x0005fe06 mov r1, sl | r1 = sl;
0x0005fe08 blx 0x8610 | fcn_00008610 ();
0x0005fe0c movs r3, 0 | r3 = 0;
0x0005fe0e cmp.w r8, 0 |
0x0005fe12 strb r3, [r4, r6] | *((r4 + r6)) = r3;
0x0005fe14 it ne |
| if (r8 == 0) {
0x0005fe16 movne r6, 3 | r6 = 3;
| }
0x0005fe18 ldrb r3, [r4] | r3 = *(r4);
0x0005fe1a it eq |
| if (r8 != 0) {
0x0005fe1c moveq r6, 1 | r6 = 1;
| }
0x0005fe1e cmp r3, 0x27 |
0x0005fe20 it ne |
| if (r3 != 0x27) {
0x0005fe22 cmpne r3, 0x5b | __asm ("cmpne r3, 0x5b");
| }
| if (r3 != 0x27) {
0x0005fe24 beq 0x5fe2e |
0x0005fe26 cmp r3, 0x60 |
0x0005fe28 it ne |
| if (r3 != 0x60) {
0x0005fe2a cmpne r3, 0x22 | __asm ("cmpne r3, 0x22");
| }
| if (r3 != 0x60) {
0x0005fe2c bne 0x5fe34 | goto label_7;
| }
| }
0x0005fe2e mov r0, r4 | r0 = r4;
0x0005fe30 bl 0xc740 | fcn_0000c740 (r0);
| label_7:
0x0005fe34 mov r0, r4 | r0 = r4;
0x0005fe36 blx 0x85b4 | fcn_000085b4 ();
0x0005fe3a ldrd r1, r3, [sb, 0x38] | __asm ("ldrd r1, r3, [sb, 0x38]");
0x0005fe3e mov r2, r6 | r2 = r6;
0x0005fe40 str r0, [sp] | *(sp) = r0;
0x0005fe42 mov r0, r1 | r0 = r1;
0x0005fe44 ldr r1, [pc, 0xd8] |
0x0005fe46 add r1, pc | r1 = 0xbfd6a;
0x0005fe48 str r1, [sp, 4] | var_4h = r1;
0x0005fe4a add r1, sp, 0xc | r1 += x;
0x0005fe4c ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x0005fe4e mov r3, r4 | r3 = r4;
0x0005fe50 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005fe52 mov r6, r0 | r6 = r0;
0x0005fe54 mov r0, r4 | r0 = r4;
0x0005fe56 blx 0x8404 | fcn_00008404 ();
| if (r6 != 0) {
0x0005fe5a cbnz r6, 0x5fe9c | goto label_8;
| }
0x0005fe5c ldr r6, [sp, 0x10] | r6 = var_10h;
| if (r6 != 0) {
0x0005fe5e cbnz r6, 0x5fe9c | goto label_8;
| }
| if (r7 == 0) {
0x0005fe60 cbz r7, 0x5febe | goto label_9;
| }
| label_2:
0x0005fe62 ldr r4, [sp, 0xc] | r4 = x;
| if (r4 == 0) {
0x0005fe64 cbz r4, 0x5feca | goto label_10;
| }
0x0005fe66 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
| if (r3 != 0) {
0x0005fe68 cbnz r3, 0x5feb4 | goto label_11;
| }
| label_1:
0x0005fe6a ldrd r3, r2, [r5, 0xc] | __asm ("ldrd r3, r2, [r5, 0xc]");
0x0005fe6e add.w r3, r3, 0x40000000 | r3 += 0x40000000;
0x0005fe72 subs r3, 1 | r3--;
0x0005fe74 str.w r4, [r2, r3, lsl 2] | __asm ("str.w r4, [r2, r3, lsl 2]");
0x0005fe78 ldr r4, [sp, 0xc] | r4 = x;
| do {
| label_3:
0x0005fe7a ldr r2, [pc, 0xa8] |
0x0005fe7c ldr r3, [pc, 0x9c] | r3 = *(0x5ff1c);
0x0005fe7e add r2, pc | r2 = 0xbfda8;
0x0005fe80 ldr r3, [r2, r3] | r3 = *(0xbfda8);
0x0005fe82 ldr r2, [r3] | r2 = *(0xbfda8);
0x0005fe84 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005fe86 eors r2, r3 | r2 ^= r3;
0x0005fe88 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0005fe8c bne 0x5ff12 | goto label_12;
| }
0x0005fe8e mov r0, r4 | r0 = r4;
0x0005fe90 add sp, 0x18 |
0x0005fe92 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_6:
0x0005fe96 movs r6, 7 | r6 = 7;
0x0005fe98 blx 0x8404 | fcn_00008404 ();
| label_8:
0x0005fe9c ldr r0, [sp, 0xc] | r0 = x;
0x0005fe9e str r6, [r5, 8] | *((r5 + 8)) = r6;
| if (r0 != 0) {
0x0005fea0 cbz r0, 0x5fea6 |
0x0005fea2 bl 0x5fd20 | fcn_0005fd20 (r0, r1);
| }
0x0005fea6 movs r4, 0 | r4 = 0;
0x0005fea8 b 0x5fe7a |
| } while (1);
| label_5:
0x0005feaa mov r0, sl | r0 = sl;
0x0005feac blx 0x85b4 | r0 = fcn_000085b4 ();
0x0005feb0 mov r6, r0 | r6 = r0;
0x0005feb2 b 0x5fdf8 | goto label_0;
| label_11:
0x0005feb4 add.w r3, r4, r3, lsl 4 | r3 = r4 + (r3 << 4);
0x0005feb8 strb.w r8, [r3, 4] | *((r3 + 4)) = r8;
0x0005febc b 0x5fe6a | goto label_1;
| label_9:
0x0005febe ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0005fec0 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
0x0005fec2 beq 0x5fee6 |
| while (1) {
0x0005fec4 adds r3, 1 | r3++;
0x0005fec6 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0005fec8 b 0x5fe62 | goto label_2;
| label_10:
0x0005feca ldr r3, [r5, 8] | r3 = *((r5 + 8));
| if (r3 == 0) {
0x0005fecc cbnz r3, 0x5fee2 |
0x0005fece movs r0, 0x24 | r0 = 0x24;
0x0005fed0 movs r1, 0 | r1 = 0;
0x0005fed2 blx 0x8240 | r0 = fcn_00008240 ();
| if (r0 == 0) {
0x0005fed6 cbz r0, 0x5ff0c | goto label_13;
| }
0x0005fed8 mov r1, r4 | r1 = r4;
0x0005feda movs r2, 0x24 | r2 = 0x24;
0x0005fedc mov r4, r0 | r4 = r0;
0x0005fede blx 0x839c | fcn_0000839c ();
| }
| label_4:
0x0005fee2 str r4, [sp, 0xc] | x = r4;
0x0005fee4 b 0x5fe6a | goto label_1;
0x0005fee6 adds r3, 8 | r3 += 8;
0x0005fee8 ldr r0, [r5, 0x10] | r0 = *((r5 + 0x10));
0x0005feea lsls r2, r3, 2 | r2 = r3 << 2;
0x0005feec mov r3, r7 | r3 = r7;
0x0005feee blx 0x8500 | r0 = fcn_00008500 ();
0x0005fef2 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0005fef4 cbz r0, 0x5fefc | goto label_14;
| }
0x0005fef6 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0005fef8 str r0, [r5, 0x10] | *((r5 + 0x10)) = r0;
0x0005fefa b 0x5fec4 |
| }
| label_14:
0x0005fefc ldr r0, [sp, 0xc] | r0 = x;
0x0005fefe movs r3, 7 | r3 = 7;
0x0005ff00 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x0005ff02 cmp r0, 0 |
| if (r0 == 0) {
0x0005ff04 beq 0x5fe7a | goto label_3;
| }
0x0005ff06 bl 0x5fd20 | fcn_0005fd20 (r0, r1);
0x0005ff0a b 0x5fe7a | goto label_3;
| label_13:
0x0005ff0c movs r3, 7 | r3 = 7;
0x0005ff0e str r3, [r5, 8] | *((r5 + 8)) = r3;
0x0005ff10 b 0x5fee2 | goto label_4;
| label_12:
0x0005ff12 blx 0x883c | fcn_0000883c ();
0x0005ff16 nop |
0x0005ff18 ldrh r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x0005ff1a movs r6, r0 | r6 = r0;
0x0005ff1c lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0005ff1e movs r0, r0 |
0x0005ff20 adr r0, 0x1dc | r0 = 0x1dc;
0x0005ff22 vcvt.f32.u32 d24, d10, 2 | __asm ("vcvt.f32.u32 d24, d10, 2");
0x0005ff26 movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5ffe0 */
| #include <stdint.h>
|
; (fcn) fcn.0005ffe0 () | void fcn_0005ffe0 (int16_t arg1, int16_t arg2, uint32_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0005ffe0 invalid |
0x0005ffe4 ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0005ffe6 mov r6, r2 | r6 = r2;
| if (r5 == 0) {
0x0005ffe8 cbnz r5, 0x6001c |
0x0005ffea cmp r2, 0 |
| if (r2 == 0) {
0x0005ffec beq 0x600a2 | goto label_4;
| }
0x0005ffee mov r7, r0 | r7 = r0;
| if (r1 == 0) {
0x0005fff0 cbz r1, 0x60056 | goto label_5;
| }
0x0005fff2 ldr r5, [r1, 8] | r5 = *((r1 + 8));
0x0005fff4 ands r3, r5, 7 | r3 = r5 & 7;
| if (r3 == r5) {
0x0005fff8 beq 0x6008e | goto label_6;
| }
| label_2:
0x0005fffa cmp r5, 0 |
| if (r5 <= 0) {
0x0005fffc ble 0x6006a | goto label_7;
| }
0x0005fffe ldr r1, [r6, 0x10] | r1 = *((r6 + 0x10));
0x00060000 adds r3, r5, 1 | r3 = r5 + 1;
0x00060002 add.w r2, r4, r3, lsl 2 | r2 = r4 + (r3 << 2);
0x00060004 lsls r3, r0, 0xa | r3 = r0 << 0xa;
0x00060006 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00060008 cmp r1, 0 |
| if (r1 == 0) {
0x0006000a beq 0x600a6 | goto label_8;
| }
0x0006000c ldr r1, [r2, 0x10] | r1 = *((r2 + 0x10));
| if (r1 == 0) {
0x0006000e cbz r1, 0x60070 | goto label_9;
| }
| label_1:
0x00060010 mov r0, r4 | r0 = r4;
| label_0:
0x00060012 add.w r5, r4, r5, lsl 2 | r5 = r4 + (r5 << 2);
0x00060016 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00060018 str r6, [r5, 0xc] | *((r5 + 0xc)) = r6;
0x0006001a pop {r3, r4, r5, r6, r7, pc} |
| }
| if (r1 == 0) {
0x0006001c cbz r1, 0x6004a | goto label_10;
| }
| label_3:
0x0006001e ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00060020 cmp r3, 0 |
0x00060022 itt gt |
| if (r3 <= 0) {
0x00060024 addgt r7, r4, 8 | r7 = r4 + 8;
| }
| if (r3 > 0) {
0x00060028 movs r5, 0 | r5 = 0;
| }
| if (r5 <= 0) {
0x0006002a ble 0x6003e | goto label_11;
| }
| do {
0x0006002c ldr r0, [r7, 4]! | r0 = *((r7 += 4));
0x00060030 adds r5, 1 | r5++;
| if (r0 != 0) {
0x00060032 cbz r0, 0x6003a |
0x00060034 bl 0x5fd20 | fcn_0005fd20 (r0, r1);
0x00060038 ldr r3, [r4, 8] | r3 = *((r4 + 8));
| }
0x0006003a cmp r5, r3 |
0x0006003c blt 0x6002c |
| } while (r5 < r3);
| label_11:
0x0006003e ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00060040 blx 0x8404 | fcn_00008404 ();
0x00060044 mov r0, r4 | r0 = r4;
0x00060046 blx 0x8404 | fcn_00008404 ();
| label_10:
0x0006004a cbz r6, 0x60052 |
| while (1) {
0x0006004c mov r0, r6 | r0 = r6;
0x0006004e bl 0x5fd20 | fcn_0005fd20 (r0, r1);
0x00060052 movs r0, 0 | r0 = 0;
0x00060054 pop {r3, r4, r5, r6, r7, pc} |
| label_5:
0x00060056 movs r0, 0x30 | r0 = 0x30;
0x00060058 movs r1, 0 | r1 = 0;
0x0006005a blx 0x8240 | r0 = fcn_00008240 ();
0x0006005e mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00060060 cbz r0, 0x600bc |
0x00060062 movs r2, 0x30 | r2 = 0x30;
0x00060064 mov r1, r5 | r1 = r5;
0x00060066 blx 0x839c | fcn_0000839c ();
| label_7:
0x0006006a adds r3, r5, 1 | r3 = r5 + 1;
0x0006006c mov r0, r4 | r0 = r4;
0x0006006e b 0x60012 | goto label_0;
| label_9:
0x00060070 mov r0, r2 | r0 = r2;
0x00060072 bl 0x5fd20 | fcn_0005fd20 (r0, r1);
0x00060076 ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x00060078 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0006007a ldr r0, [r7, 0x10] | r0 = *((r7 + 0x10));
0x0006007c add.w r1, r2, 0x40000000 | r1 = r2 + 0x40000000;
0x00060080 subs r2, 1 | r2--;
0x00060082 subs r1, 2 | r1 -= 2;
0x00060084 subs r5, r3, 1 | r5 = r3 - 1;
0x00060086 str.w r6, [r0, r1, lsl 2] | __asm ("str.w r6, [r0, r1, lsl 2]");
0x0006008a str r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
0x0006008c b 0x60010 | goto label_1;
| label_6:
0x0006008e add.w r2, r5, 0xc | r2 = r5 + 0xc;
0x00060092 mov r0, r1 | r0 = r1;
0x00060094 lsls r2, r2, 2 | r2 <<= 2;
0x00060096 blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 == 0) {
0x0006009a cbz r0, 0x600c2 | goto label_12;
| }
0x0006009c ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0006009e mov r4, r0 | r4 = r0;
0x000600a0 b 0x5fffa | goto label_2;
| label_4:
0x000600a2 mov r0, r1 | r0 = r1;
0x000600a4 pop {r3, r4, r5, r6, r7, pc} |
| label_8:
0x000600a6 mov r0, r6 | r0 = r6;
0x000600a8 mov r6, r2 | r6 = r2;
0x000600aa bl 0x5fd20 | fcn_0005fd20 (r0, r1);
0x000600ae ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x000600b0 mov r0, r4 | r0 = r4;
0x000600b2 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000600b4 subs r2, 1 | r2--;
0x000600b6 subs r5, r3, 1 | r5 = r3 - 1;
0x000600b8 str r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
0x000600ba b 0x60012 | goto label_0;
| }
0x000600bc movs r3, 7 | r3 = 7;
0x000600be str r3, [r7, 8] | *((r7 + 8)) = r3;
0x000600c0 b 0x6004c |
| }
| label_12:
0x000600c2 movs r3, 7 | r3 = 7;
0x000600c4 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x000600c6 b 0x6001e | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x600c8 */
| #include <stdint.h>
|
; (fcn) fcn.000600c8 () | void fcn_000600c8 (int16_t arg_ah, int16_t arg_48h, int16_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int32_t var_18h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000600c8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000600cc sub sp, 0x24 |
0x000600ce ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x000600d0 mov sb, r2 | sb = r2;
0x000600d2 mov r6, r3 | r6 = r3;
0x000600d4 ldr r4, [sp, 0x48] | r4 = *(arg_48h);
0x000600d6 cmp r7, 0 |
| if (r7 == 0) {
0x000600d8 bne 0x60178 |
0x000600da cmp r1, 9 |
0x000600dc it eq |
| if (r1 == 9) {
0x000600de cmpeq r4, 0 | __asm ("cmpeq r4, 0");
| }
0x000600e0 mov sl, r1 | sl = r1;
| if (r1 == 9) {
0x000600e2 beq 0x601ba | goto label_16;
| }
0x000600e4 subs r1, 9 | r1 -= 9;
0x000600e6 mov r5, r6 | r5 = r6;
0x000600e8 it ne |
| if (r1 == 9) {
0x000600ea movne r1, 1 | r1 = 1;
| }
0x000600ec cmp r2, 0 |
0x000600ee ite ne |
| if (r2 == 0) {
0x000600f0 movne r3, 0 | r3 = 0;
| }
| if (r2 != 0) {
0x000600f2 andeq r3, r1, 1 | r3 = r1 & 1;
| }
0x000600f6 cmp r3, 0 |
| if (r3 != 0) {
0x000600f8 bne 0x601bc | goto label_1;
| }
0x000600fa cmp r6, 0 |
0x000600fc ite ne |
| if (r6 == 0) {
0x000600fe movne fp, 0 |
| }
| if (r6 == 0) {
0x00060102 and fp, r1, 1 |
| }
0x00060106 mov r5, r2 | r5 = r2;
0x00060108 cmp.w fp, 0 |
| if (fp != 0) {
0x0006010c bne 0x601bc | goto label_1;
| }
0x0006010e cmp.w sl, 9 |
0x00060112 mov r8, r0 | r8 = r0;
| if (sl == 9) {
0x00060114 beq 0x601c4 | goto label_17;
| }
0x00060116 cmp.w sl, 3 |
| if (sl == 3) {
0x0006011a beq.w 0x60264 | goto label_18;
| }
0x0006011e add.w r3, sl, -1 | r3 = sl + -1;
0x00060122 cmp r3, 1 |
| if (r3 > 1) {
0x00060124 bhi.w 0x602e0 | goto label_19;
| }
0x00060128 ldr r3, [r2] | r3 = *(r2);
0x0006012a movs r1, 0 | r1 = 0;
0x0006012c cmp r3, sl |
0x0006012e ldr r3, [r6] | r3 = *(r6);
0x00060130 itet eq |
| if (r3 != sl) {
0x00060132 ldreq r7, [r2, 0x1c] | r7 = *((r2 + 0x1c));
| }
| if (r3 == sl) {
0x00060134 movne r7, 2 | r7 = 2;
| }
| if (r3 != sl) {
0x00060136 addeq r7, 1 | r7++;
| }
0x00060138 cmp r3, sl |
0x0006013a ittt eq |
| if (r3 != sl) {
0x0006013c ldreq r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
| }
| if (r3 != sl) {
0x0006013e addeq r3, r3, -1 | r3 += -1;
| }
| if (r3 == sl) {
0x00060142 adds r7, r7, r3 | r7 += r3;
| }
0x00060144 adds r7, 9 | r7 += 9;
0x00060146 lsls r7, r7, 2 | r7 <<= 2;
0x00060148 mov r0, r7 | r0 = r7;
0x0006014a blx 0x8240 | r0 = fcn_00008240 ();
0x0006014e mov r5, r0 | r5 = r0;
0x00060150 cmp r0, 0 |
| if (r0 == 0) {
0x00060152 beq.w 0x602d2 | goto label_20;
| }
0x00060156 mov r2, r7 | r2 = r7;
0x00060158 movs r1, 0 | r1 = 0;
0x0006015a blx 0x839c | fcn_0000839c ();
0x0006015e cmp.w sl, 2 |
0x00060162 str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x00060166 str r4, [r5, 0x18] | *((r5 + 0x18)) = r4;
| if (sl == 2) {
0x00060168 beq.w 0x6046c | goto label_21;
| }
0x0006016c ldr r3, [pc, 0x3a4] |
0x0006016e add r3, pc | r3 = 0xc0686;
0x00060170 b 0x60288 | goto label_5;
| label_0:
0x00060172 movs r3, 7 | r3 = 7;
0x00060174 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
| }
0x00060178 cmp.w sb, 0 |
| if (sb != 0) {
0x0006017c beq 0x60184 |
0x0006017e mov r0, sb | r0 = sb;
0x00060180 bl 0x5ff28 | fcn_0005ff28 (r0);
| }
| if (r6 != 0) {
0x00060184 cbz r6, 0x6018c |
| label_4:
0x00060186 mov r0, r6 | r0 = r6;
0x00060188 bl 0x5ff28 | fcn_0005ff28 (r0);
| }
| if (r4 == 0) {
0x0006018c cbz r4, 0x601ba | goto label_16;
| }
| label_2:
0x0006018e ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00060190 cmp r2, 0 |
0x00060192 itt gt |
| if (r2 <= 0) {
0x00060194 addgt r6, r4, 8 | r6 = r4 + 8;
| }
| if (r2 > 0) {
0x00060198 movs r5, 0 | r5 = 0;
| }
| if (r5 <= 0) {
0x0006019a ble 0x601ae | goto label_22;
| }
| do {
0x0006019c ldr r0, [r6, 4]! | r0 = *((r6 += 4));
0x000601a0 adds r5, 1 | r5++;
| if (r0 != 0) {
0x000601a2 cbz r0, 0x601aa |
0x000601a4 bl 0x5fd20 | fcn_0005fd20 (r0, r1);
0x000601a8 ldr r2, [r4, 8] | r2 = *((r4 + 8));
| }
0x000601aa cmp r5, r2 |
0x000601ac blt 0x6019c |
| } while (r5 < r2);
| label_22:
0x000601ae ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000601b0 blx 0x8404 | fcn_00008404 ();
0x000601b4 mov r0, r4 | r0 = r4;
0x000601b6 blx 0x8404 | fcn_00008404 ();
| label_16:
0x000601ba movs r5, 0 | r5 = 0;
| label_1:
0x000601bc mov r0, r5 | r0 = r5;
0x000601be add sp, 0x24 |
0x000601c0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x000601c4 ldr r3, [r0, 0x18] | r3 = *((r0 + 0x18));
0x000601c6 cmp r3, 0 |
| if (r3 != 0) {
0x000601c8 bne 0x6029c | goto label_23;
| }
0x000601ca movs r0, 0x24 | r0 = 0x24;
0x000601cc movs r1, 0 | r1 = 0;
0x000601ce blx 0x8240 | r0 = fcn_00008240 ();
0x000601d2 mov r5, r0 | r5 = r0;
0x000601d4 cmp r0, 0 |
| if (r0 == 0) {
0x000601d6 beq 0x60172 | goto label_0;
| }
| label_3:
0x000601d8 movs r2, 0x20 | r2 = 0x20;
0x000601da mov r1, r7 | r1 = r7;
0x000601dc adds r0, r5, 4 | r0 = r5 + 4;
0x000601de blx 0x839c | fcn_0000839c ();
0x000601e2 str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x000601e6 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000601e8 str r4, [r5, 0x18] | *((r5 + 0x18)) = r4;
0x000601ea cmp r0, 1 |
| if (r0 == 1) {
0x000601ec beq.w 0x60438 | goto label_24;
| }
0x000601f0 ldr r3, [pc, 0x324] |
0x000601f2 cmp r0, 0 |
0x000601f4 add r3, pc |
0x000601f6 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x000601f8 ldr.w r3, [r8] | r3 = *(r8);
0x000601fc ldr r3, [r3, 0x30] | r3 = *(0xc0740);
| if (r0 <= 0) {
0x000601fe ble.w 0x60306 | goto label_25;
| }
| label_10:
0x00060202 add.w r1, r4, 8 | r1 = r4 + 8;
0x00060206 mov ip, r1 |
| do {
0x00060208 ldr r1, [ip, 4]! | r1 = *((ip += 4));
0x0006020c adds r7, 1 | r7++;
0x0006020e ldr r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x00060210 str r5, [r1] | *(r1) = r5;
| if (r2 == 0) {
0x00060212 cbnz r2, 0x60218 |
0x00060214 str r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x00060216 str r2, [r5] | *(r5) = r2;
| }
0x00060218 cmp r7, r0 |
0x0006021a bne 0x60208 |
| } while (r7 != r0);
0x0006021c cmp r3, 0 |
| if (r3 == 0) {
0x0006021e beq 0x601bc | goto label_1;
| }
0x00060220 cmp r7, 1 |
0x00060222 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r7 != 1) {
0x00060224 bne 0x6030c | goto label_26;
| }
0x00060226 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00060228 cmp r2, 1 |
| if (r2 > 1) {
0x0006022a bgt.w 0x604c0 | goto label_27;
| }
| if (r2 != 1) {
0x0006022e bne 0x601bc | goto label_1;
| }
0x00060230 ldrb r3, [r3, 0x15] | r3 = *((r3 + 0x15));
0x00060232 cmp r3, 0 |
| if (r3 == 0) {
0x00060234 beq 0x601bc | goto label_1;
| }
0x00060236 ldr r2, [pc, 0x2e4] |
0x00060238 add r2, pc | r2 = 0xc075a;
| label_6:
0x0006023a ldr r1, [pc, 0x2e4] |
0x0006023c mov r0, r8 | r0 = r8;
0x0006023e add r1, pc | r1 = 0xc0764;
0x00060240 bl 0x4bf8c | fcn_0004bf8c (r0);
0x00060244 mov r0, r5 | r0 = r5;
0x00060246 blx 0x8404 | fcn_00008404 ();
0x0006024a cmp.w sb, 0 |
| if (sb == 0) {
0x0006024e beq.w 0x60464 | goto label_28;
| }
| label_12:
0x00060252 mov r0, sb | r0 = sb;
0x00060254 bl 0x5ff28 | fcn_0005ff28 (r0);
0x00060258 cmp r6, 0 |
| if (r6 == 0) {
0x0006025a beq 0x6018e | goto label_2;
| }
| label_13:
0x0006025c mov r0, r6 | r0 = r6;
0x0006025e bl 0x5ff28 | fcn_0005ff28 (r0);
0x00060262 b 0x6018e | goto label_2;
| label_18:
0x00060264 movs r0, 0x2c | r0 = 0x2c;
0x00060266 movs r1, 0 | r1 = 0;
0x00060268 blx 0x8240 | r0 = fcn_00008240 ();
0x0006026c mov r5, r0 | r5 = r0;
0x0006026e cmp r0, 0 |
| if (r0 == 0) {
0x00060270 beq.w 0x60172 | goto label_0;
| }
0x00060274 mov r1, fp | r1 = fp;
0x00060276 movs r2, 0x28 | r2 = 0x28;
0x00060278 adds r0, r5, 4 | r0 = r5 + 4;
0x0006027a blx 0x839c | fcn_0000839c ();
0x0006027e ldr r3, [pc, 0x2a4] |
0x00060280 str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x00060284 str r4, [r5, 0x18] | *((r5 + 0x18)) = r4;
0x00060286 add r3, pc | r3 = 0xc07b0;
| label_5:
0x00060288 mov r1, sb | r1 = sb;
0x0006028a mov r0, r5 | r0 = r5;
0x0006028c str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0006028e bl 0x10294 | fcn_00010294 (r0, r1);
0x00060292 mov r1, r6 | r1 = r6;
0x00060294 mov r0, r5 | r0 = r5;
0x00060296 bl 0x10294 | fcn_00010294 (r0, r1);
0x0006029a b 0x601bc | goto label_1;
| label_23:
0x0006029c ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0006029e ldr.w fp, [r3, 0x10] | fp = *((r3 + 0x10));
0x000602a2 cmp.w fp, 1 |
| if (fp > 1) {
0x000602a6 bgt 0x60312 | goto label_29;
| }
0x000602a8 movs r0, 0x24 | r0 = 0x24;
0x000602aa movs r1, 0 | r1 = 0;
0x000602ac blx 0x8240 | r0 = fcn_00008240 ();
0x000602b0 mov r5, r0 | r5 = r0;
0x000602b2 cmp r0, 0 |
| if (r0 != 0) {
0x000602b4 bne 0x601d8 | goto label_3;
| }
0x000602b6 movs r3, 7 | r3 = 7;
0x000602b8 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
| label_11:
0x000602bc cmp.w sb, 0 |
| if (sb == 0) {
0x000602c0 beq.w 0x60464 | goto label_28;
| }
0x000602c4 mov r0, sb | r0 = sb;
0x000602c6 bl 0x5ff28 | fcn_0005ff28 (r0);
0x000602ca cmp r6, 0 |
| if (r6 != 0) {
0x000602cc bne.w 0x60186 | goto label_4;
| }
0x000602d0 b 0x6018e | goto label_2;
| label_20:
0x000602d2 cmp r7, 0 |
| if (r7 != 0) {
0x000602d4 bne.w 0x60504 | goto label_30;
| }
0x000602d8 mov r0, sb | r0 = sb;
0x000602da bl 0x5ff28 | fcn_0005ff28 (r0);
0x000602de b 0x60186 | goto label_4;
| label_19:
0x000602e0 movs r0, 0x24 | r0 = 0x24;
0x000602e2 movs r1, 0 | r1 = 0;
0x000602e4 blx 0x8240 | r0 = fcn_00008240 ();
0x000602e8 mov r5, r0 | r5 = r0;
0x000602ea cmp r0, 0 |
| if (r0 == 0) {
0x000602ec beq.w 0x60172 | goto label_0;
| }
0x000602f0 mov r1, fp | r1 = fp;
0x000602f2 movs r2, 0x20 | r2 = 0x20;
0x000602f4 adds r0, r5, 4 | r0 = r5 + 4;
0x000602f6 blx 0x839c | fcn_0000839c ();
0x000602fa ldr r3, [pc, 0x22c] |
0x000602fc str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x00060300 str r4, [r5, 0x18] | *((r5 + 0x18)) = r4;
0x00060302 add r3, pc | r3 = 0xc0830;
0x00060304 b 0x60288 | goto label_5;
| label_25:
0x00060306 cmp r3, 0 |
| if (r3 == 0) {
0x00060308 beq.w 0x601bc | goto label_1;
| }
| label_26:
0x0006030c ldr r2, [pc, 0x21c] |
0x0006030e add r2, pc | r2 = 0xc083e;
0x00060310 b 0x6023a | goto label_6;
| label_29:
0x00060312 add.w sl, fp, 0xa | sl += arg_ah;
0x00060316 lsl.w sl, sl, 2 | sl <<= 2;
0x0006031a asr.w r1, sl, 0x1f | r1 = sl >> 0x1f;
0x0006031e mov r0, sl | r0 = sl;
0x00060320 blx 0x8240 | r0 = fcn_00008240 ();
0x00060324 mov r5, r0 | r5 = r0;
0x00060326 cmp r0, 0 |
| if (r0 == 0) {
0x00060328 beq.w 0x6044e | goto label_31;
| }
0x0006032c mov r2, sl | r2 = sl;
0x0006032e mov r1, r7 | r1 = r7;
0x00060330 blx 0x839c | fcn_0000839c ();
0x00060334 ldr r2, [pc, 0x1f8] |
0x00060336 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0006033a str.w fp, [r5, 0x1c] | __asm ("str.w fp, [r5, 0x1c]");
0x0006033e add r2, pc | r2 = 0xc0872;
0x00060340 str r4, [sp, 0x48] | *(arg_48h) = r4;
0x00060342 str r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x00060344 movs r2, 2 | r2 = 2;
0x00060346 str r2, [r5] | *(r5) = r2;
0x00060348 subs r3, 1 | r3--;
0x0006034a ldr.w sl, [r8, 8] | sl = *((r8 + 8));
0x0006034e str.w r3, [r8, 0xc] | __asm ("str.w r3, [r8, 0xc]");
0x00060352 str r5, [sp, 0xc] | var_ch = r5;
0x00060354 mov r4, sl | r4 = sl;
0x00060356 strd sb, r6, [sp, 0x18] | __asm ("strd sb, r6, [var_18h]");
0x0006035a ldr.w sl, [sp, 0x48] | sl = *(arg_48h);
0x0006035e b 0x603e0 | goto label_32;
| label_7:
0x00060360 ldr.w r0, [r8, 0x10] | r0 = *((r8 + 0x10));
| label_8:
0x00060364 adds r2, r3, 1 | r2 = r3 + 1;
0x00060366 str.w r2, [r8, 0xc] | __asm ("str.w r2, [r8, 0xc]");
0x0006036a str.w r6, [r0, r3, lsl 2] | __asm ("str.w r6, [r0, r3, lsl 2]");
0x0006036e movs r3, 1 | r3 = 1;
0x00060370 str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x00060372 add.w sb, r7, r3 | sb = r7 + r3;
0x00060376 ldr.w r5, [r8, 8] | r5 = *((r8 + 8));
0x0006037a cmp r5, 0 |
| if (r5 != 0) {
0x0006037c bne.w 0x604d6 | goto label_33;
| }
0x00060380 ldr.w r2, [sl, 0xc] | r2 = *((sl + 0xc));
0x00060384 add.w sb, r7, 1 | sb = r7 + 1;
0x00060388 add.w r2, r2, sb, lsl 4 | r2 += (sb << 4);
0x0006038c ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x0006038e mov r0, r1 | r0 = r1;
0x00060390 str r1, [sp, 0x14] | var_14h = r1;
0x00060392 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00060396 mov r2, r0 | r2 = r0;
0x00060398 adds r0, 1 | r0++;
0x0006039a str r2, [sp, 0x10] | var_10h = r2;
0x0006039c blx 0x86a4 | r0 = fcn_000086a4 ();
0x000603a0 mov r4, r0 | r4 = r0;
0x000603a2 cmp r0, 0 |
| if (r0 == 0) {
0x000603a4 beq.w 0x604d0 | goto label_34;
| }
0x000603a8 ldrd r2, r1, [sp, 0x10] | __asm ("ldrd r2, r1, [var_14h]");
0x000603ac blx 0x8610 | fcn_00008610 ();
0x000603b0 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000603b2 strb r5, [r4, r2] | *((r4 + r2)) = r5;
| label_15:
0x000603b4 mov r2, r6 | r2 = r6;
0x000603b6 movs r1, 0 | r1 = 0;
0x000603b8 str r4, [r6, 0x18] | *((r6 + 0x18)) = r4;
0x000603ba mov r0, r8 | r0 = r8;
0x000603bc bl 0x5ffe0 | fcn_0005ffe0 (r0, r1, r2);
0x000603c0 movs r3, 0 | r3 = 0;
0x000603c2 str r0, [sp] | *(sp) = r0;
0x000603c4 mov r2, r3 | r2 = r3;
0x000603c6 movs r1, 9 | r1 = 9;
0x000603c8 mov r0, r8 | r0 = r8;
0x000603ca bl 0x600c8 | fcn_000600c8 (r0, r1, r2, r3, r4, r5);
0x000603ce ldr r3, [sp, 0xc] | r3 = var_ch;
0x000603d0 ldr.w r4, [r8, 8] | r4 = *((r8 + 8));
0x000603d4 adds r3, 0x20 | r3 += 0x20;
0x000603d6 str.w r0, [r3, r7, lsl 2] | __asm ("str.w r0, [r3, r7, lsl 2]");
| do {
| label_9:
0x000603da cmp fp, sb |
0x000603dc mov r7, sb | r7 = sb;
| if (fp == sb) {
0x000603de beq 0x6047e | goto label_35;
| }
| label_32:
0x000603e0 add.w sb, r7, 1 | sb = r7 + 1;
0x000603e4 cmp r4, 0 |
0x000603e6 bne 0x603da |
| } while (r4 != 0);
0x000603e8 movs r0, 0x24 | r0 = 0x24;
0x000603ea movs r1, 0 | r1 = 0;
0x000603ec blx 0x8240 | r0 = fcn_00008240 ();
0x000603f0 mov r6, r0 | r6 = r0;
0x000603f2 cmp r0, 0 |
| if (r0 == 0) {
0x000603f4 beq 0x60472 | goto label_36;
| }
0x000603f6 movs r2, 0x24 | r2 = 0x24;
0x000603f8 mov r1, r4 | r1 = r4;
0x000603fa blx 0x839c | fcn_0000839c ();
0x000603fe ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x00060402 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
| if (r2 != r3) {
0x00060404 bne 0x60360 | goto label_7;
| }
0x00060406 add.w r2, r3, 8 | r2 = r3 + 8;
0x0006040a ldr.w r0, [r8, 0x10] | r0 = *((r8 + 0x10));
0x0006040e lsls r2, r2, 2 | r2 <<= 2;
0x00060410 mov r3, r4 | r3 = r4;
0x00060412 blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 != 0) {
0x00060416 cbz r0, 0x60422 |
0x00060418 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0006041c str.w r0, [r8, 0x10] | __asm ("str.w r0, [r8, 0x10]");
0x00060420 b 0x60364 | goto label_8;
| }
0x00060422 movs r3, 7 | r3 = 7;
0x00060424 mov r0, r6 | r0 = r6;
0x00060426 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
0x0006042a add.w sb, r7, 1 | sb = r7 + 1;
0x0006042e bl 0x5fd20 | fcn_0005fd20 (r0, r1);
0x00060432 ldr.w r4, [r8, 8] | r4 = *((r8 + 8));
0x00060436 b 0x603da | goto label_9;
| label_24:
0x00060438 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0006043a ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0006043c cmp r2, 1 |
| if (r2 == 1) {
0x0006043e beq 0x604c6 | goto label_37;
| }
0x00060440 ldr r3, [pc, 0xf0] |
0x00060442 add r3, pc | r3 = 0xc097a;
| label_14:
0x00060444 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x00060446 ldr.w r3, [r8] | r3 = *(r8);
0x0006044a ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0006044c b 0x60202 | goto label_10;
| label_31:
0x0006044e cmp.w sl, 0 |
| if (sl <= 0) {
0x00060452 ble.w 0x602bc | goto label_11;
| }
0x00060456 movs r3, 7 | r3 = 7;
0x00060458 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
0x0006045c cmp.w sb, 0 |
| if (sb != 0) {
0x00060460 bne.w 0x60252 | goto label_12;
| }
| label_28:
0x00060464 cmp r6, 0 |
| if (r6 != 0) {
0x00060466 bne.w 0x6025c | goto label_13;
| }
0x0006046a b 0x6018e | goto label_2;
| label_21:
0x0006046c ldr r3, [pc, 0xc8] |
0x0006046e add r3, pc | r3 = 0xc09aa;
0x00060470 b 0x60288 | goto label_5;
| label_36:
0x00060472 movs r4, 7 | r4 = 7;
0x00060474 add.w sb, r7, 1 | sb = r7 + 1;
0x00060478 str.w r4, [r8, 8] | __asm ("str.w r4, [r8, 8]");
0x0006047c b 0x603da | goto label_9;
| label_35:
0x0006047e str.w sl, [sp, 0x48] | __asm ("str.w sl, [arg_48h]");
0x00060482 mov sl, r4 | sl = r4;
0x00060484 ldr r5, [sp, 0xc] | r5 = var_ch;
0x00060486 ldrd sb, r6, [sp, 0x18] | __asm ("ldrd sb, r6, [var_18h]");
0x0006048a ldr r4, [sp, 0x48] | r4 = *(arg_48h);
0x0006048c cmp.w sl, 0 |
| if (sl != 0) {
0x00060490 bne 0x604da | goto label_38;
| }
0x00060492 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00060494 cmp r2, 0 |
0x00060496 it gt |
| if (r2 <= 0) {
0x00060498 addgt r6, r4, 8 | r6 = r4 + 8;
| }
| if (r2 <= 0) {
0x0006049c ble 0x604b2 | goto label_39;
| }
| do {
0x0006049e ldr r0, [r6, 4]! | r0 = *((r6 += 4));
0x000604a2 add.w sl, sl, 1 | sl++;
| if (r0 != 0) {
0x000604a6 cbz r0, 0x604ae |
0x000604a8 bl 0x5fd20 | fcn_0005fd20 (r0, r1);
0x000604ac ldr r2, [r4, 8] | r2 = *((r4 + 8));
| }
0x000604ae cmp sl, r2 |
0x000604b0 blt 0x6049e |
| } while (sl < r2);
| label_39:
0x000604b2 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000604b4 blx 0x8404 | fcn_00008404 ();
0x000604b8 mov r0, r4 | r0 = r4;
0x000604ba blx 0x8404 | fcn_00008404 ();
0x000604be b 0x601bc | goto label_1;
| label_27:
0x000604c0 ldr r2, [pc, 0x78] |
0x000604c2 add r2, pc | r2 = 0xc0a02;
0x000604c4 b 0x6023a | goto label_6;
| label_37:
0x000604c6 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
| if (r2 == 0) {
0x000604c8 cbz r2, 0x604f0 | goto label_40;
| }
0x000604ca ldr r3, [pc, 0x74] |
0x000604cc add r3, pc | r3 = 0xc0a12;
0x000604ce b 0x60444 | goto label_14;
| label_34:
0x000604d0 movs r3, 7 | r3 = 7;
0x000604d2 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
| label_33:
0x000604d6 movs r4, 0 | r4 = 0;
0x000604d8 b 0x603b4 | goto label_15;
| label_38:
0x000604da mov r0, r5 | r0 = r5;
0x000604dc bl 0x5ff28 | fcn_0005ff28 (r0);
0x000604e0 cmp.w sb, 0 |
| if (sb != 0) {
0x000604e4 bne.w 0x60252 | goto label_12;
| }
0x000604e8 cmp r6, 0 |
| if (r6 != 0) {
0x000604ea bne.w 0x6025c | goto label_13;
| }
0x000604ee b 0x6018e | goto label_2;
| label_40:
0x000604f0 ldrb r3, [r3, 0x15] | r3 = *((r3 + 0x15));
| if (r3 == 0) {
0x000604f2 cbnz r3, 0x604fe |
0x000604f4 movs r3, 4 | r3 = 4;
0x000604f6 str r3, [r5] | *(r5) = r3;
0x000604f8 ldr r3, [pc, 0x48] |
0x000604fa add r3, pc | r3 = 0xc0a42;
0x000604fc b 0x60444 | goto label_14;
| }
0x000604fe ldr r3, [pc, 0x48] |
0x00060500 add r3, pc | r3 = 0xc0a4e;
0x00060502 b 0x60444 | goto label_14;
| label_30:
0x00060504 movs r3, 7 | r3 = 7;
0x00060506 mov r0, sb | r0 = sb;
0x00060508 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
0x0006050c bl 0x5ff28 | fcn_0005ff28 (r0);
0x00060510 b 0x60186 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x620d8 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.000620d8 () | void fcn_000620d8 (int16_t arg1, int16_t arg3, arithmetic arg4) {
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_0h_4;
| int16_t var_8h_3;
| int16_t var_ch_3;
| int16_t var_10h_3;
| int16_t var_14h_3;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_28h_2;
| int16_t var_34h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x000620d8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000620dc mov sl, r2 | sl = r2;
0x000620de ldr r2, [pc, 0x210] |
0x000620e0 mov r7, r3 | r7 = r3;
0x000620e2 sub sp, 0x3c |
0x000620e4 mov r6, r0 | r6 = r0;
0x000620e6 ldr r3, [pc, 0x20c] | r3 = *(0x622f6);
0x000620e8 add r2, pc | r2 = 0xc43de;
0x000620ea ldr.w sb, [sp, 0x64] | sb = var_64h;
0x000620ee ldr r3, [r2, r3] |
0x000620f0 ldr r3, [r3] | r3 = *(0xc43de);
0x000620f2 str r3, [sp, 0x34] | var_34h = r3;
0x000620f4 mov.w r3, 0 | r3 = 0;
0x000620f8 ldrb r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x000620fa cbnz r3, 0x62130 |
0x000620fc ldrb r2, [r0, 1] | r2 = *((r0 + 1));
0x000620fe lsls r1, r2, 0x1e | r1 = r2 << 0x1e;
| if (r1 >= r2) {
0x00062100 bpl 0x62130 | goto label_5;
| }
0x00062102 ldrd r1, r4, [r0, 0x20] | __asm ("ldrd r1, r4, [var_60hx20]");
0x00062106 cmp r4, r7 |
0x00062108 it eq |
| if (r4 == r7) {
0x0006210a cmpeq r1, sl | __asm ("cmpeq r1, sl");
| }
| if (r4 == r7) {
0x0006210c beq.w 0x6224e | goto label_11;
| }
0x00062110 cmp r1, sl |
0x00062112 sbcs.w r3, r4, r7 | __asm ("sbcs.w r3, r4, r7");
| if (r1 >= sl) {
0x00062116 bge 0x62130 | goto label_5;
| }
0x00062118 ands r2, r2, 8 | r2 &= 8;
| if (r2 != r2) {
0x0006211c bne.w 0x6224a | goto label_12;
| }
0x00062120 adds r1, 1 | r1++;
0x00062122 adc r4, r4, 0 | __asm ("adc r4, r4, 0");
0x00062126 cmp r4, r7 |
0x00062128 it eq |
| if (r4 == r7) {
0x0006212a cmpeq r1, sl | __asm ("cmpeq r1, sl");
| }
| if (r4 == r7) {
0x0006212c beq.w 0x62256 | goto label_13;
| }
| }
| label_5:
0x00062130 mov r0, r6 | r0 = r6;
0x00062132 bl 0x277e8 | r0 = fcn_000277e8 (r0);
0x00062136 mov r4, r0 | r4 = r0;
0x00062138 cmp r0, 0 |
| if (r0 != 0) {
0x0006213a bne 0x621de | goto label_14;
| }
0x0006213c ldr r3, [sp, 0x60] | r3 = var_60h;
0x0006213e mov r2, r6 | r2 = r6;
0x00062140 mov fp, r7 |
0x00062142 str r0, [sp, 0x20] | var_20h_2 = r0;
0x00062144 str.w sb, [sp, 0x24] | __asm ("str.w sb, [var_24h_2]");
0x00062148 rsb.w r3, r3, 1 | r3 = 1 - r3;
0x0006214c str r3, [sp, 0x10] | var_10h_3 = r3;
0x0006214e add r3, sp, 0x28 | r3 += var_28h_2;
0x00062150 str r3, [sp, 0x14] | var_14h_3 = r3;
| label_3:
0x00062152 ldr r4, [r2, 0x74] | r4 = *((r2 + 0x74));
0x00062154 mov.w sb, 0 | sb = 0;
0x00062158 str r2, [sp, 0x1c] | var_1ch_2 = r2;
0x0006215a ldr r1, [r4, 0x44] | r1 = *((r4 + 0x44));
0x0006215c ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0006215e ldrb r6, [r4, 2] | r6 = *((r4 + 2));
0x00062160 str r1, [sp, 0xc] | var_ch_3 = r1;
0x00062162 ldrh r1, [r4, 0x1a] | r1 = *((r4 + 0x1a));
0x00062164 add.w r8, r3, -1 | r8 = r3 + -1;
0x00062168 ldr r7, [r4, 0x40] | r7 = *((r4 + 0x40));
0x0006216a str r3, [sp, 0x18] | var_18h_2 = r3;
0x0006216c mov r3, r6 | r3 = r6;
0x0006216e str r1, [sp, 8] | var_8h_3 = r1;
0x00062170 ldr r1, [sp, 0x10] | r1 = var_10h_3;
0x00062172 mov r6, r7 | r6 = r7;
0x00062174 mov r7, r3 | r7 = r3;
0x00062176 asr.w r5, r8, r1 | r5 = r8 >> r1;
0x0006217a ldr r1, [sp, 0x14] | r1 = var_14h_3;
| do {
0x0006217c ldrh.w r0, [r6, r5, lsl 1] | offset_0 = r5 << 1;
| r0 = *((r6 + offset_0));
0x00062180 ldr r3, [sp, 8] | r3 = var_8h_3;
0x00062182 rev16 r0, r0 | __asm ("rev16 r0, r0");
0x00062184 ands r0, r3 | r0 &= r3;
0x00062186 ldr r3, [sp, 0xc] | r3 = var_ch_3;
0x00062188 add r0, r3 | r0 += r3;
| if (r7 != 0) {
0x0006218a cbnz r7, 0x621ac | goto label_1;
| }
| label_0:
0x0006218c bl 0x980c | fcn_0000980c (r0, r1);
0x00062190 ldrd r0, r2, [sp, 0x28] | __asm ("ldrd r0, r2, [var_28h_2]");
0x00062194 cmp r0, sl |
0x00062196 sbcs.w lr, r2, fp | __asm ("sbcs.w lr, r2, fp");
| if (r0 >= sl) {
0x0006219a bge 0x621fe | goto label_15;
| }
0x0006219c add.w sb, r5, 1 | sb = r5 + 1;
0x000621a0 cmp r8, sb |
| if (r8 < sb) {
0x000621a2 blt 0x62298 | goto label_16;
| }
| label_2:
0x000621a4 add.w r5, sb, r8 | r5 = sb + r8;
0x000621a8 asrs r5, r5, 1 | r5 >>= 1;
0x000621aa b 0x6217c |
| } while (1);
| label_1:
0x000621ac ldrsb r3, [r0], 1 | r3 = *(r0);
| r0++;
0x000621b0 cmp r3, 0 |
| if (r3 >= 0) {
0x000621b2 bge 0x6218c | goto label_0;
| }
0x000621b4 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000621b6 cmp r3, r0 |
| if (r3 > r0) {
0x000621b8 bhi 0x621ac | goto label_1;
| }
0x000621ba blx 0x83b8 | strerror_r ();
0x000621be ldr r2, [pc, 0x138] |
0x000621c0 add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x000621c4 ldr r1, [pc, 0x134] |
0x000621c6 movw r3, 0x1b3b |
0x000621ca str r4, [sp] | *(sp) = r4;
0x000621cc movt r3, 1 | r3 = 0x11b3b;
0x000621d0 add r2, pc | r2 = 0xc44ce;
0x000621d2 movs r0, 0xb | r0 = 0xb;
0x000621d4 add r1, pc | r1 = 0xc44d4;
0x000621d6 movs r4, 0xb | r4 = 0xb;
0x000621d8 blx 0x8b60 | fcn_00008b60 ();
0x000621dc b 0x621e2 | goto label_4;
| label_14:
0x000621de cmp r0, 0x10 |
| if (r0 == 0x10) {
0x000621e0 beq 0x6224a | goto label_12;
| }
| label_4:
0x000621e2 ldr r2, [pc, 0x11c] |
0x000621e4 ldr r3, [pc, 0x10c] | r3 = *(0x622f4);
0x000621e6 add r2, pc | r2 = 0xc44ec;
0x000621e8 ldr r3, [r2, r3] | r3 = *(0xc44ec);
0x000621ea ldr r2, [r3] | r2 = *(0xc44ec);
0x000621ec ldr r3, [sp, 0x34] | r3 = var_34h;
0x000621ee eors r2, r3 | r2 ^= r3;
0x000621f0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000621f4 bne 0x622ec | goto label_17;
| }
0x000621f6 mov r0, r4 | r0 = r4;
0x000621f8 add sp, 0x3c |
0x000621fa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x000621fe cmp sl, r0 |
0x00062200 sbcs.w r3, fp, r2 | __asm ("sbcs.w r3, fp, r2");
| if (sl >= r0) {
0x00062204 bge 0x6227c | goto label_18;
| }
0x00062206 add.w r8, r5, -1 | r8 = r5 + -1;
0x0006220a cmp sb, r8 |
| if (sb <= r8) {
0x0006220c ble 0x621a4 | goto label_2;
| }
0x0006220e ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x00062210 mov r7, r6 | r7 = r6;
0x00062212 ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x00062214 movs r0, 1 | r0 = 1;
| label_8:
0x00062216 ldrb r6, [r4, 8] | r6 = *((r4 + 8));
0x00062218 cmp r6, 0 |
| if (r6 != 0) {
0x0006221a bne 0x622ba | goto label_19;
| }
0x0006221c uxth.w r6, sb | r6 = (int16_t) sb;
| label_7:
0x00062220 cmp r3, sb |
0x00062222 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
| if (r3 > sb) {
0x00062224 bgt 0x62268 | goto label_20;
| }
0x00062226 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x00062228 add r3, r0 | r3 += r0;
0x0006222a ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0006222c rev r1, r1 | r1 = SWAP32 (r1);
| label_6:
0x0006222e mov r0, r2 | r0 = r2;
0x00062230 strh.w r6, [r2, 0x46] | *((r2 + 0x46)) = r6;
0x00062234 str r2, [sp, 8] | var_8h_3 = r2;
0x00062236 bl 0x270c8 | fcn_000270c8 (r0, r1);
0x0006223a ldr r2, [sp, 8] | r2 = var_8h_3;
0x0006223c cmp r0, 0 |
| if (r0 == 0) {
0x0006223e beq 0x62152 | goto label_3;
| }
0x00062240 mov r6, r2 | r6 = r2;
0x00062242 mov r4, r0 | r4 = r0;
| label_10:
0x00062244 movs r3, 0 | r3 = 0;
0x00062246 strh r3, [r6, 0x32] | *((r6 + 0x32)) = r3;
0x00062248 b 0x621e2 | goto label_4;
| label_12:
0x0006224a mov.w r3, -1 | r3 = -1;
| label_11:
0x0006224e str.w r3, [sb] | __asm ("str.w r3, [sb]");
| label_9:
0x00062252 movs r4, 0 | r4 = 0;
0x00062254 b 0x621e2 | goto label_4;
| label_13:
0x00062256 str.w r2, [sb] | __asm ("str.w r2, [sb]");
0x0006225a bl 0x62094 | r0 = fcn_00062094 (r0);
0x0006225e mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00062260 cbz r0, 0x622a4 | goto label_21;
| }
0x00062262 cmp r0, 0x65 |
| if (r0 != 0x65) {
0x00062264 bne 0x621e2 | goto label_4;
| }
0x00062266 b 0x62130 | goto label_5;
| label_20:
0x00062268 ldrh.w r3, [r7, sb, lsl 1] | offset_1 = sb << 1;
| r3 = *((r7 + offset_1));
0x0006226c ldr r1, [sp, 8] | r1 = var_8h_3;
0x0006226e rev16 r3, r3 | __asm ("rev16 r3, r3");
0x00062270 and.w sb, r1, r3 | sb = r1 & r3;
0x00062274 ldr.w r1, [r0, sb] | r1 = *((r0 + sb));
0x00062278 rev r1, r1 | r1 = SWAP32 (r1);
0x0006227a b 0x6222e | goto label_6;
| label_18:
0x0006227c mov r1, r2 | r1 = r2;
0x0006227e ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x00062280 mov r7, r6 | r7 = r6;
0x00062282 uxth r6, r5 | r6 = (int16_t) r5;
0x00062284 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x00062286 strh.w r6, [r2, 0x46] | *((r2 + 0x46)) = r6;
0x0006228a ldrb.w ip, [r4, 8] | ip = *((r4 + 8));
0x0006228e cmp.w ip, 0 |
| if (ip != 0) {
0x00062292 bne 0x622cc | goto label_22;
| }
0x00062294 mov sb, r5 | sb = r5;
0x00062296 b 0x62220 | goto label_7;
| label_16:
0x00062298 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0006229a mov r7, r6 | r7 = r6;
0x0006229c ldr r2, [sp, 0x1c] | r2 = var_1ch_2;
0x0006229e mov.w r0, -1 | r0 = -1;
0x000622a2 b 0x62216 | goto label_8;
| label_21:
0x000622a4 mov r0, r6 | r0 = r6;
0x000622a6 bl 0xe650 | fcn_0000e650 (r0);
0x000622aa ldrd r2, r3, [r6, 0x20] | __asm ("ldrd r2, r3, [r6, 0x20]");
0x000622ae cmp r3, r7 |
0x000622b0 it eq |
| if (r3 != r7) {
0x000622b2 cmpeq r2, sl | __asm ("cmpeq r2, sl");
| goto label_23;
| }
| if (r3 != r7) {
| label_23:
0x000622b4 bne.w 0x62130 | goto label_5;
| }
0x000622b8 b 0x62252 | goto label_9;
| label_19:
0x000622ba ldr.w sb, [sp, 0x24] | sb = var_24h_2;
0x000622be mov r6, r2 | r6 = r2;
0x000622c0 strh.w r5, [r2, 0x46] | *((r2 + 0x46)) = r5;
0x000622c4 ldr r4, [sp, 0x20] | r4 = var_20h_2;
0x000622c6 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x000622ca b 0x62244 | goto label_10;
| label_22:
0x000622cc mov r6, r2 | r6 = r2;
0x000622ce ldr.w sb, [sp, 0x24] | sb = var_24h_2;
0x000622d2 ldrb r3, [r6, 1] | r3 = *((r6 + 1));
0x000622d4 mov r2, r1 | r2 = r1;
0x000622d6 movs r1, 0 | r1 = 0;
0x000622d8 str r0, [r6, 0x20] | *((r6 + 0x20)) = r0;
0x000622da str r2, [r6, 0x24] | *((r6 + 0x24)) = r2;
0x000622dc orr r3, r3, 2 | r3 |= 2;
0x000622e0 strh r1, [r6, 0x32] | *((r6 + 0x32)) = r1;
0x000622e2 strb r3, [r6, 1] | *((r6 + 1)) = r3;
0x000622e4 ldr r4, [sp, 0x20] | r4 = var_20h_2;
0x000622e6 str.w r1, [sb] | __asm ("str.w r1, [sb]");
0x000622ea b 0x621e2 | goto label_4;
| label_17:
0x000622ec blx 0x883c | fcn_0000883c ();
0x000622f0 ldr r0, [r6, 0x38] | r0 = *((r6 + 0x38));
0x000622f2 movs r6, r0 | r6 = r0;
0x000622f4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000622f6 movs r0, r0 |
0x000622f8 lsrs r4, r5, 0x1d | r4 = r5 >> 0x1d;
0x000622fa movs r5, r0 | r5 = r0;
0x000622fc lsrs r0, r1, 0x16 | r0 = r1 >> 0x16;
0x000622fe movs r5, r0 | r5 = r0;
0x00062300 ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
0x00062302 movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6238c */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0006238c () | void fcn_0006238c (int16_t arg1, arithmetic arg2, arithmetic arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_10h;
| int16_t var_14h;
| arithmetic var_18h;
| int16_t var_1ch;
| arithmetic x;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h_2;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| arithmetic var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_64h_2;
| int16_t var_68h;
| int16_t var_6ah;
| int16_t var_6ch;
| int16_t var_6eh;
| int16_t var_72h;
| int16_t var_84h;
| int16_t var_0h_3;
| int16_t var_ch_2;
| int16_t var_10h_2;
| int16_t var_14h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| label_24:
0x000598a4 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x000598a8 mov r6, r1 | r6 = r1;
0x000598aa ldr r7, [r0, 0x74] | r7 = *((r0 + 0x74));
0x000598ac mov r4, r0 | r4 = r0;
0x000598ae sub sp, 0x1c |
0x000598b0 ldr r1, [r0, 0x28] | r1 = *((r0 + 0x28));
0x000598b2 ldrh r2, [r0, 0x30] | r2 = *((r0 + 0x30));
0x000598b4 ldr r0, [pc, 0x128] |
0x000598b6 ldr r3, [pc, 0x12c] | r3 = *(0x599e6);
0x000598b8 ldr.w fp, [r6, 0x1c] | fp = *((r6 + 0x1c));
0x000598bc add r0, pc | r0 = 0xb32a0;
0x000598be ldr r5, [r6, 0x20] | r5 = *((r6 + 0x20));
0x000598c0 ldr r3, [r0, r3] |
0x000598c2 adds r0, r1, r2 | r0 = r1 + r2;
0x000598c4 ldr r3, [r3] | r3 = *(0xb32a0);
0x000598c6 str r3, [sp, 0x14] | var_14h_2 = r3;
0x000598c8 mov.w r3, 0 | r3 = 0;
0x000598cc ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x000598ce str r7, [sp, 0x10] | var_10h_2 = r7;
0x000598d0 cmp r3, r0 |
| if (r3 > r0) {
0x000598d2 blo 0x598de |
0x000598d4 ldrh r0, [r7, 0x12] | r0 = *((r7 + 0x12));
0x000598d6 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x000598d8 add r3, r0 | r3 += r0;
0x000598da cmp r1, r3 |
| if (r1 >= r3) {
0x000598dc bhs 0x5991a | goto label_30;
| }
| }
0x000598de blx 0x83b8 | strerror_r ();
0x000598e2 ldr r2, [pc, 0x104] |
0x000598e4 add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x000598e8 ldr r1, [pc, 0x100] |
0x000598ea movw r3, 0x280d |
0x000598ee movt r3, 1 | r3 = 0x1280d;
0x000598f2 movs r0, 0xb | r0 = 0xb;
0x000598f4 add r2, pc | r2 = 0xb32e2;
0x000598f6 str r4, [sp] | *(sp) = r4;
0x000598f8 add r1, pc | r1 = 0xb32e8;
0x000598fa blx 0x8b60 | fcn_00008b60 ();
| label_2:
0x000598fe movs r0, 0xb | r0 = 0xb;
| do {
| label_0:
0x00059900 ldr r2, [pc, 0xec] |
0x00059902 ldr r3, [pc, 0xe0] | r3 = *(0x599e6);
0x00059904 add r2, pc | r2 = 0xb32f8;
0x00059906 ldr r3, [r2, r3] | r3 = *(0xb32f8);
0x00059908 ldr r2, [r3] | r2 = *(0xb32f8);
0x0005990a ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0005990c eors r2, r3 | r2 ^= r3;
0x0005990e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00059912 bne 0x599dc | goto label_31;
| }
0x00059914 add sp, 0x1c |
0x00059916 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_30:
0x0005991a str r2, [sp] | *(sp) = r2;
0x0005991c movs r3, 0 | r3 = 0;
0x0005991e mov r2, r6 | r2 = r6;
0x00059920 mov r0, r7 | r0 = r7;
0x00059922 bl 0x597f0 | r0 = fcn_000597f0 (r0, r1, r2, r3, r4);
0x00059926 cmp r0, 0 |
0x00059928 bne 0x59900 |
| } while (r0 != 0);
0x0005992a add fp, r5 |
0x0005992c ldrh r5, [r4, 0x30] | r5 = *((r4 + 0x30));
0x0005992e cmp r5, fp |
| if (r5 == fp) {
0x00059930 beq 0x59900 | goto label_0;
| }
0x00059932 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00059934 add.w sb, sp, 0x10 | sb += var_10h_2;
0x00059938 ldr.w sl, [r7, 0x34] | sl = *((r7 + 0x34));
0x0005993c str r0, [sp, 0xc] | var_ch_2 = r0;
0x0005993e ldr.w r8, [r3, r5] | r8 = *((r3 + r5));
0x00059942 ldr.w r7, [sl, 0x28] | r7 = *((sl + 0x28));
0x00059946 rev.w r8, r8 | r8 = SWAP32 (r8);
0x0005994a subs r7, 4 | r7 -= 4;
| label_1:
0x0005994c movs r3, 0 | r3 = 0;
0x0005994e mov r2, sb | r2 = sb;
0x00059950 mov r1, r8 | r1 = r8;
0x00059952 mov r0, sl | r0 = sl;
0x00059954 bl 0xa33c | r0 = fcn_0000a33c (r0, r1, r2);
0x00059958 cmp r0, 0 |
| if (r0 != 0) {
0x0005995a bne 0x59900 | goto label_0;
| }
0x0005995c ldr r4, [sp, 0x10] | r4 = var_10h_2;
0x0005995e ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00059960 ldrsh.w r3, [r3, 0x1e] | r3 = *((r3 + 0x1e));
0x00059964 cmp r3, 1 |
| if (r3 != 1) {
0x00059966 bne 0x599ac | goto label_32;
| }
0x00059968 ldrb r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x0005996a cbnz r3, 0x599ac | goto label_32;
| }
0x0005996c ldr r1, [r4, 0x38] | r1 = *((r4 + 0x38));
0x0005996e adds r3, r5, r7 | r3 = r5 + r7;
0x00059970 cmp r3, fp |
0x00059972 mov r0, r4 | r0 = r4;
0x00059974 it hs |
| if (r3 < fp) {
0x00059976 subhs r7, fp, r5 | r7 = fp - r5;
| }
0x0005997a mov r3, r5 | r3 = r5;
0x0005997c it lo |
| if (r3 >= fp) {
0x0005997e ldrlo r8, [r1] | r8 = *(r1);
| }
0x00059980 strh r0, [r0] | *(r0) = r0;
0x00059982 mov r2, r6 | r2 = r6;
0x00059984 add.w r1, r1, 4 | r1 += 4;
0x00059988 str r7, [sp] | *(sp) = r7;
0x0005998a it lo |
| if (r3 < fp) {
0x0005998c revlo r8, r8 | __asm ("revlo r8, r8");
| }
0x00059990 bl 0x597f0 | fcn_000597f0 (r0, r1, r2, r3, r4);
0x00059994 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00059996 mov r4, r0 | r4 = r0;
| if (r3 != 0) {
0x00059998 cbz r3, 0x599a0 |
0x0005999a mov r0, r3 | r0 = r3;
0x0005999c bl 0x129c4 | fcn_000129c4 (r0);
| }
| if (r4 != 0) {
0x000599a0 cbnz r4, 0x599d8 | goto label_33;
| }
0x000599a2 add r5, r7 | r5 += r7;
0x000599a4 cmp fp, r5 |
| if (fp > r5) {
0x000599a6 bgt 0x5994c | goto label_1;
| }
0x000599a8 ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000599aa b 0x59900 | goto label_0;
| label_32:
0x000599ac blx 0x83b8 | strerror_r ();
0x000599b0 ldr r2, [pc, 0x40] |
0x000599b2 add.w r5, r0, 0x14 | r5 = r0 + 0x14;
0x000599b6 ldr r1, [pc, 0x40] |
0x000599b8 movw r3, 0x2820 |
0x000599bc movs r0, 0xb | r0 = 0xb;
0x000599be movt r3, 1 | r3 = 0x12820;
0x000599c2 add r2, pc | r2 = 0xb33ba;
0x000599c4 str r5, [sp] | *(sp) = r5;
0x000599c6 add r1, pc | r1 = 0xb33c4;
0x000599c8 blx 0x8b60 | fcn_00008b60 ();
0x000599cc ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x000599ce cmp r0, 0 |
| if (r0 == 0) {
0x000599d0 beq 0x598fe | goto label_2;
| }
0x000599d2 bl 0x129c4 | fcn_000129c4 (r0);
0x000599d6 b 0x598fe | goto label_2;
| label_33:
0x000599d8 mov r0, r4 | r0 = r4;
0x000599da b 0x59900 | goto label_0;
| label_31:
0x000599dc blx 0x883c | fcn_0000883c ();
0x000599e0 invalid |
0x0006238c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00062390 mov r5, r0 | r5 = r0;
0x00062392 ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x00062394 mov r4, r3 | r4 = r3;
0x00062396 sub sp, 0x8c |
0x00062398 ldr.w r0, [pc, 0x838] |
0x0006239c ldr.w r3, [pc, 0x838] | r3 = *(0x62bd8);
0x000623a0 add r0, pc | r0 = 0xc4f78;
0x000623a2 ldr r3, [r0, r3] |
0x000623a4 ldr r3, [r3] | r3 = *(0xc4f78);
0x000623a6 str r3, [sp, 0x84] | var_84h = r3;
0x000623a8 mov.w r3, 0 | r3 = 0;
0x000623ac ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x000623ae str r2, [sp, 0x18] | var_18h = r2;
0x000623b0 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x000623b2 lsls r7, r3, 0x1a | r7 = r3 << 0x1a;
0x000623b4 str r4, [sp, 0x4c] | var_4ch = r4;
0x000623b6 str r1, [sp, 0x20] | x = r1;
0x000623b8 str r2, [sp, 0x14] | var_14h = r2;
| if (r7 < r3) {
0x000623ba bmi.w 0x62512 | goto label_34;
| }
0x000623be ldrb r3, [r5] | r3 = *(r5);
0x000623c0 cmp r3, 2 |
| if (r3 > 2) {
0x000623c2 bhi.w 0x624f8 | goto label_5;
| }
0x000623c6 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x000623c8 cmp r3, 0 |
| if (r3 == 0) {
0x000623ca beq.w 0x625ac | goto label_35;
| }
| if (r4 == 0) {
| label_3:
0x000623ce cbnz r4, 0x62412 |
| label_8:
0x000623d0 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000623d2 ands r2, r2, 2 | r2 &= 2;
| if (r2 != r2) {
0x000623d6 bne.w 0x625f8 | goto label_36;
| }
0x000623da ldr r0, [sp, 0x20] | r0 = x;
0x000623dc ldrh r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x000623de cmp r1, 0 |
| if (r1 == 0) {
0x000623e0 beq.w 0x6299e | goto label_37;
| }
0x000623e4 str r3, [sp, 0x58] | var_58h = r3;
0x000623e6 ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x000623e8 mov r0, r5 | r0 = r5;
0x000623ea strh.w r1, [sp, 0x6c] | var_6ch = r1;
0x000623ee add r1, sp, 0x58 | r1 += var_58h;
0x000623f0 strb.w r2, [sp, 0x6e] | var_6eh = r2;
0x000623f4 strb.w r2, [sp, 0x72] | var_72h = r2;
0x000623f8 add r2, sp, 0x4c | r2 += var_4ch;
0x000623fa str r3, [sp, 0x5c] | var_5ch = r3;
0x000623fc bl 0x6152c | r0 = fcn_0006152c (r0, r1, r2, r3);
0x00062400 mov sb, r0 | sb = r0;
0x00062402 str r0, [sp, 0x48] | var_48h = r0;
| label_19:
0x00062404 cmp.w sb, 0 |
| if (sb != 0) {
0x00062408 bne 0x624d6 | goto label_4;
| }
0x0006240a ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0006240c cmp r3, 0 |
| if (r3 == 0) {
0x0006240e beq.w 0x625f8 | goto label_36;
| }
| }
| label_6:
0x00062412 ldr r4, [r5, 0x74] | r4 = *((r5 + 0x74));
0x00062414 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00062416 cmp r3, 0 |
| if (r3 < 0) {
0x00062418 blt.w 0x62552 | goto label_38;
| }
| label_7:
0x0006241c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006241e ldr r3, [r3, 0x54] | r3 = *((r3 + 0x54));
0x00062420 str r3, [sp, 0x28] | var_28h = r3;
0x00062422 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00062424 lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 >= r3) {
0x00062426 bpl.w 0x6265c | goto label_39;
| }
0x0006242a ldr r6, [sp, 0x14] | r6 = var_14h;
0x0006242c ldr r2, [r6, 0x58] | r2 = *((r6 + 0x58));
0x0006242e ldrb r3, [r6, 0x11] | r3 = *((r6 + 0x11));
0x00062430 cmp r2, 4 |
0x00062432 it lt |
| if (r2 >= 4) {
0x00062434 movlt r2, 4 | r2 = 4;
| }
0x00062436 mov fp, r2 |
0x00062438 movs r2, 0 | r2 = 0;
0x0006243a str r2, [sp, 0x48] | var_48h = r2;
| if (r3 != 0) {
0x0006243c cbz r3, 0x6245c |
0x0006243e ldrh r3, [r4, 0xe] | r3 = *((r4 + 0xe));
0x00062440 cmp r3, fp |
| if (r3 >= fp) {
0x00062442 bge 0x6245c | goto label_12;
| }
0x00062444 ldr r7, [sp, 0x28] | r7 = var_28h;
0x00062446 add r2, sp, 0x58 | r2 += var_58h;
0x00062448 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0006244a mov r0, r4 | r0 = r4;
0x0006244c mov r1, r7 | r1 = r7;
0x0006244e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00062450 ldrh.w r3, [sp, 0x68] | r3 = var_68h;
0x00062454 ldr r2, [sp, 0x64] | r2 = var_64h_2;
0x00062456 cmp r2, r3 |
| if (r2 != r3) {
0x00062458 bne.w 0x62a02 | goto label_40;
| }
| }
| label_12:
0x0006245c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0006245e ldrh.w r6, [r5, 0x46] | r6 = *((r5 + 0x46));
0x00062462 cmp r3, 0 |
| if (r3 != 0) {
0x00062464 bne.w 0x62582 | goto label_41;
| }
0x00062468 ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0006246a cmp r3, r6 |
| if (r3 < r6) {
0x0006246c bls.w 0x629be | goto label_42;
| }
0x00062470 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00062472 bl 0x5480c | r0 = fcn_0005480c (r0);
0x00062476 mov sb, r0 | sb = r0;
0x00062478 str r0, [sp, 0x48] | var_48h = r0;
| if (r0 != 0) {
0x0006247a cbnz r0, 0x624d6 | goto label_4;
| }
0x0006247c ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0006247e ldrb r1, [r4, 8] | r1 = *((r4 + 8));
0x00062480 ldrh.w r2, [r3, r6, lsl 1] | offset_0 = r6 << 1;
| r2 = *((r3 + offset_0));
0x00062484 ldrh r3, [r4, 0x1a] | r3 = *((r4 + 0x1a));
0x00062486 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x00062488 ands r3, r2 | r3 &= r2;
0x0006248a ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x0006248c adds r7, r2, r3 | r7 = r2 + r3;
0x0006248e cmp r1, 0 |
| if (r1 == 0) {
0x00062490 beq.w 0x62af4 | goto label_43;
| }
| label_27:
0x00062494 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00062496 add r2, sp, 0x58 | r2 += var_58h;
0x00062498 mov r1, r7 | r1 = r7;
0x0006249a mov r0, r4 | r0 = r4;
0x0006249c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0006249e ldrh.w r2, [sp, 0x68] | r2 = var_68h;
0x000624a2 ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x000624a4 cmp r2, r3 |
| if (r2 != r3) {
0x000624a6 bne.w 0x62a28 | goto label_44;
| }
0x000624aa ldrh.w r2, [sp, 0x6a] | r2 = var_6ah;
0x000624ae movs r0, 0 | r0 = 0;
0x000624b0 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x000624b2 str r0, [sp, 0x48] | var_48h = r0;
0x000624b4 cmp fp, r2 |
0x000624b6 bic r3, r3, 4 | r3 = BIT_MASK (r3, 4);
0x000624ba strb r3, [r5, 1] | *((r5 + 1)) = r3;
| if (fp == r2) {
0x000624bc beq.w 0x62b06 | goto label_45;
| }
| label_23:
0x000624c0 add r7, sp, 0x48 | r7 += var_48h;
0x000624c2 mov r1, r6 | r1 = r6;
0x000624c4 mov r3, r7 | r3 = r7;
0x000624c6 mov r0, r4 | r0 = r4;
0x000624c8 bl 0x34600 | fcn_00034600 (r0, r1, r2, r3);
0x000624cc ldr.w sb, [sp, 0x48] | sb = var_48h;
0x000624d0 cmp.w sb, 0 |
| if (sb == 0) {
0x000624d4 beq 0x62588 | goto label_46;
| }
| do {
| label_4:
0x000624d6 ldr.w r2, [pc, 0x704] | r2 = *(0x00062bdc);
0x000624da ldr.w r3, [pc, 0x6fc] | r3 = *(0x62bda);
0x000624de add r2, pc | r2 += pc;
0x000624e0 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000624e2 ldr r2, [r3] | r2 = *(0x62bda);
0x000624e4 ldr r3, [sp, 0x84] | r3 = var_84h;
0x000624e6 eors r2, r3 | r2 ^= r3;
0x000624e8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000624ec bne.w 0x62bca | goto label_47;
| }
0x000624f0 mov r0, sb | r0 = sb;
0x000624f2 add sp, 0x8c |
0x000624f4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x000624f8 mov r0, r5 | r0 = r5;
0x000624fa bl 0x277e8 | r0 = fcn_000277e8 (r0);
0x000624fe bics r3, r0, 0x10 | __asm ("bics r3, r0, 0x10");
0x00062500 lsls r0, r2, 0xc | r0 = r2 << 0xc;
0x00062502 mov sb, r0 | sb = r0;
0x00062504 str r0, [sp, 0x48] | var_48h = r0;
0x00062506 bne 0x624d6 |
| } while (r0 != r2);
0x00062508 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x0006250a cmp r3, 0 |
| if (r3 != 0) {
0x0006250c bne.w 0x623ce | goto label_3;
| }
0x00062510 b 0x625ac | goto label_35;
| label_34:
0x00062512 ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x00062514 mov r2, r5 | r2 = r5;
0x00062516 ldr r1, [r5, 0x40] | r1 = *((r5 + 0x40));
0x00062518 bl 0x5c074 | r0 = fcn_0005c074 (r0, r1, r2);
0x0006251c mov sb, r0 | sb = r0;
0x0006251e str r0, [sp, 0x48] | var_48h = r0;
0x00062520 cmp r0, 0 |
| if (r0 != 0) {
0x00062522 bne 0x624d6 | goto label_4;
| }
0x00062524 cmp r4, 0 |
| if (r4 == 0) {
0x00062526 beq.w 0x6263c | goto label_48;
| }
0x0006252a ldrsb.w r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x0006252e cmp r3, 0 |
| if (r3 < 0) {
0x00062530 blt.w 0x62b16 | goto label_49;
| }
0x00062534 ldrb r3, [r5] | r3 = *(r5);
0x00062536 cmp r3, 2 |
| if (r3 > 2) {
0x00062538 bhi 0x624f8 | goto label_5;
| }
0x0006253a ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x0006253c cmp r3, 0 |
| if (r3 != 0) {
0x0006253e bne.w 0x62412 | goto label_6;
| }
0x00062542 ldrb r3, [r6, 0xb] | r3 = *((r6 + 0xb));
0x00062544 cmp r3, 0 |
| if (r3 != 0) {
0x00062546 bne.w 0x62958 | goto label_50;
| }
0x0006254a ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0006254c lsls r0, r3, 0x1e | r0 = r3 << 0x1e;
| if (r0 >= r3) {
0x0006254e bmi 0x625ba |
0x00062550 b 0x62412 | goto label_6;
| label_38:
0x00062552 ldrb r3, [r5] | r3 = *(r5);
0x00062554 cmp r3, 1 |
| if (r3 < 1) {
0x00062556 bls 0x6262a | goto label_51;
| }
0x00062558 blx 0x83b8 | strerror_r ();
0x0006255c ldr.w r2, [pc, 0x680] | r2 = *(0x00062be0);
0x00062560 add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x00062564 ldr.w r1, [pc, 0x67c] | r1 = *(0x00062be4);
0x00062568 movw r3, 0x28f2 |
0x0006256c movt r3, 1 | r3 = 0x128f2;
0x00062570 movs r0, 0xb | r0 = 0xb;
0x00062572 add r2, pc | r2 += pc;
0x00062574 str r4, [sp] | *(sp) = r4;
0x00062576 add r1, pc | r1 += pc;
0x00062578 blx 0x8b60 | fcn_00008b60 ();
| label_20:
0x0006257c mov.w sb, 0xb | sb = 0xb;
0x00062580 b 0x624d6 | goto label_4;
| if (r0 < 0xb) {
| label_41:
0x00062582 blt.w 0x6293e | goto label_52;
| }
| label_17:
0x00062586 add r7, sp, 0x48 | r7 += var_48h;
| label_46:
0x00062588 mov r1, r6 | r1 = r6;
0x0006258a movs r6, 0 | r6 = 0;
0x0006258c mov r3, fp | r3 = fp;
0x0006258e ldr r2, [sp, 0x28] | r2 = var_28h;
0x00062590 mov r0, r4 | r0 = r4;
0x00062592 str r7, [sp, 8] | var_8h_2 = r7;
0x00062594 strd r6, r6, [sp] | __asm ("strd r6, r6, [sp]");
0x00062598 bl 0x59ec8 | fcn_00059ec8 (r0, r1, r2, r3, r4, r5, r6);
0x0006259c strh r6, [r5, 0x32] | *((r5 + 0x32)) = r6;
0x0006259e ldrb r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000625a0 cmp r3, 0 |
| if (r3 != 0) {
0x000625a2 bne.w 0x628b2 | goto label_53;
| }
0x000625a6 ldr.w sb, [sp, 0x48] | sb = var_48h;
0x000625aa b 0x624d6 | goto label_4;
| label_35:
0x000625ac ldrb r3, [r6, 0xb] | r3 = *((r6 + 0xb));
0x000625ae cmp r3, 0 |
| if (r3 != 0) {
0x000625b0 bne.w 0x62958 | goto label_50;
| }
| label_18:
0x000625b4 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x000625b6 lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
| if (r1 >= r3) {
0x000625b8 bpl 0x625ce | goto label_54;
| }
| }
| label_9:
0x000625ba ldr r3, [sp, 0x20] | r3 = x;
0x000625bc ldrd r0, r2, [r3, 8] | __asm ("ldrd r0, r2, [r3, 8]");
0x000625c0 ldrd r1, r3, [r5, 0x20] | __asm ("ldrd r1, r3, [r5, 0x20]");
0x000625c4 cmp r2, r3 |
0x000625c6 it eq |
| if (r2 == r3) {
0x000625c8 cmpeq r0, r1 | __asm ("cmpeq r0, r1");
| }
| if (r2 == r3) {
0x000625ca beq.w 0x62a56 | goto label_55;
| }
| label_54:
0x000625ce cmp r4, 0 |
| if (r4 != 0) {
0x000625d0 bne.w 0x62412 | goto label_6;
| }
| label_10:
0x000625d4 add r3, sp, 0x4c | r3 += var_4ch;
0x000625d6 mov r0, r5 | r0 = r5;
0x000625d8 str r3, [sp, 4] | var_4h_2 = r3;
0x000625da ldr r3, [sp, 0x18] | r3 = var_18h;
0x000625dc ubfx r3, r3, 3, 1 | r3 = (r3 >> 3) & ((1 << 1) - 1);
0x000625e0 str r3, [sp] | *(sp) = r3;
0x000625e2 ldr r3, [sp, 0x20] | r3 = x;
0x000625e4 ldrd r2, r3, [r3, 8] | __asm ("ldrd r2, r3, [r3, 8]");
0x000625e8 bl 0x620d8 | r0 = fcn_000620d8 (r0, r1, r2);
0x000625ec mov sb, r0 | sb = r0;
0x000625ee str r0, [sp, 0x48] | var_48h = r0;
0x000625f0 cmp r0, 0 |
| if (r0 == 0) {
0x000625f2 beq.w 0x62412 | goto label_6;
| }
0x000625f6 b 0x624d6 | goto label_4;
| label_36:
0x000625f8 mov r0, r5 | r0 = r5;
0x000625fa bl 0xe650 | fcn_0000e650 (r0);
0x000625fe ldr r2, [sp, 0x20] | r2 = x;
0x00062600 ldrd r0, r1, [r5, 0x20] | __asm ("ldrd r0, r1, [r5, 0x20]");
0x00062604 ldrd r3, r2, [r2, 8] | __asm ("ldrd r3, r2, [r2, 8]");
0x00062608 cmp r1, r2 |
0x0006260a it eq |
| if (r1 != r2) {
0x0006260c cmpeq r0, r3 | __asm ("cmpeq r0, r3");
| goto label_56;
| }
| if (r1 != r2) {
| label_56:
0x0006260e bne.w 0x62412 | goto label_6;
| }
0x00062612 ldr r2, [sp, 0x20] | r2 = x;
0x00062614 movs r4, 0 | r4 = 0;
0x00062616 add r1, sp, 0x58 | r1 += var_58h;
0x00062618 mov r0, r5 | r0 = r5;
0x0006261a strd r3, r4, [sp, 0x74] | __asm ("strd r3, r4, [sp, 0x74]");
0x0006261e ldr r2, [r2] | r2 = *(r2);
0x00062620 str r2, [sp, 0x68] | var_68h = r2;
0x00062622 bl 0x598a4 | r0 = void (*0x598a4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00062626 mov sb, r0 | sb = r0;
0x00062628 b 0x624d6 | goto label_4;
| label_51:
0x0006262a mov r0, r4 | r0 = r4;
0x0006262c bl 0x27d88 | r0 = fcn_00027d88 (r0);
0x00062630 mov sb, r0 | sb = r0;
0x00062632 str r0, [sp, 0x48] | var_48h = r0;
0x00062634 cmp r0, 0 |
| if (r0 == 0) {
0x00062636 beq.w 0x6241c | goto label_7;
| }
0x0006263a b 0x624d6 | goto label_4;
| label_48:
0x0006263c ldrb r3, [r5] | r3 = *(r5);
0x0006263e cmp r3, 2 |
| if (r3 > 2) {
0x00062640 bhi.w 0x624f8 | goto label_5;
| }
0x00062644 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x00062646 cmp r3, 0 |
| if (r3 != 0) {
0x00062648 bne.w 0x623d0 | goto label_8;
| }
0x0006264c ldrb r3, [r6, 0xb] | r3 = *((r6 + 0xb));
0x0006264e cmp r3, 0 |
| if (r3 != 0) {
0x00062650 bne.w 0x62958 | goto label_50;
| }
0x00062654 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x00062656 lsls r6, r3, 0x1e | r6 = r3 << 0x1e;
| if (r6 < r3) {
0x00062658 bmi 0x625ba | goto label_9;
| }
0x0006265a b 0x625d4 | goto label_10;
| label_39:
0x0006265c ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0006265e ldrb.w fp, [r4, 0xa] | fp = *((r4 + 0xa));
0x00062662 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00062664 add.w r0, r2, fp | r0 = r2 + fp;
| if (r3 != 0) {
0x00062668 cbz r3, 0x626ae |
0x0006266a ldr r3, [sp, 0x20] | r3 = x;
0x0006266c ldrd r7, r6, [r3, 0x1c] | __asm ("ldrd r7, r6, [r3, 0x1c]");
0x00062670 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00062672 add r6, r7 | r6 += r7;
0x00062674 cmp r6, 0x7f |
0x00062676 str r3, [sp, 0x2c] | var_2ch = r3;
| if (r6 > 0x7f) {
0x00062678 bhi.w 0x62ade | goto label_57;
| }
0x0006267c movs r3, 1 | r3 = 1;
0x0006267e strb.w r6, [r2, fp] | *((r2 + fp)) = r6;
| label_26:
0x00062682 add fp, r3 |
0x00062684 ldr r3, [sp, 0x20] | r3 = x;
0x00062686 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00062688 ldrd r2, r3, [r3, 8] | __asm ("ldrd r2, r3, [r3, 8]");
0x0006268c add.w r0, r1, fp | r0 = r1 + fp;
0x00062690 cmp r2, 0x80 |
0x00062692 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x80) {
0x00062696 blo.w 0x62ad2 | goto label_58;
| }
0x0006269a cmp.w r2, 0x4000 |
0x0006269e sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x000626a2 blo.w 0x62a92 | goto label_59;
| }
0x000626a6 bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x000626aa add fp, r0 |
0x000626ac b 0x626c8 |
| } else {
0x000626ae ldr r3, [sp, 0x20] | r3 = x;
0x000626b0 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x000626b2 ldr r3, [r3] | r3 = *(r3);
0x000626b4 cmp r6, 0x7f |
0x000626b6 str r3, [sp, 0x2c] | var_2ch = r3;
| if (r6 > 0x7f) {
0x000626b8 bhi.w 0x629e0 | goto label_60;
| }
| label_21:
0x000626bc ldr r3, [sp, 0x28] | r3 = var_28h;
0x000626be strb.w r6, [r3, fp] | *((r3 + fp)) = r6;
0x000626c2 movs r3, 1 | r3 = 1;
| label_22:
0x000626c4 add fp, r3 |
0x000626c6 mov r7, r6 | r7 = r6;
| }
| label_25:
0x000626c8 ldrh r2, [r4, 0xe] | r2 = *((r4 + 0xe));
0x000626ca ldr r3, [sp, 0x28] | r3 = var_28h;
0x000626cc cmp r2, r6 |
0x000626ce add.w sl, r3, fp | sl = r3 + fp;
| if (r2 >= r6) {
0x000626d2 bge.w 0x62aaa | goto label_61;
| }
0x000626d6 ldr.w r8, [r4, 0x34] | r8 = *((r4 + 0x34));
0x000626da str r2, [sp, 0x1c] | var_1ch = r2;
0x000626dc movw r2, 0xcccd |
0x000626e0 movt r2, 0xcccc |
0x000626e4 ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000626e6 str r2, [sp, 0x38] | var_38h = r2;
0x000626e8 ldr.w r1, [r8, 0x28] | r1 = *((r8 + 0x28));
0x000626ec ldr.w r2, [pc, 0x4f8] | r2 = *(0x00062be8);
0x000626f0 subs r0, r6, r3 | r0 = r6 - r3;
0x000626f2 str r3, [sp, 0x10] | var_10h = r3;
0x000626f4 subs r1, 4 | r1 -= 4;
0x000626f6 add r2, pc | r2 = 0xccd2f3c7;
0x000626f8 str r2, [sp, 0x34] | var_34h_2 = r2;
0x000626fa bl 0xb1e8c | fcn_000b1e8c (r0, r1, r2);
0x000626fe ldr r3, [sp, 0x10] | r3 = var_10h;
0x00062700 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00062702 str r5, [sp, 0x40] | var_40h = r5;
0x00062704 add.w sb, r1, r3 | sb = r1 + r3;
0x00062708 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0006270a cmp r2, sb |
0x0006270c it lt |
| if (r2 >= sb) {
0x0006270e movlt sb, r3 | sb = r3;
| }
0x00062710 movs r3, 0 | r3 = 0;
0x00062712 str r3, [sp, 0x54] | var_54h = r3;
0x00062714 add.w r2, fp, sb | r2 = fp + sb;
0x00062718 str r3, [sp, 0x1c] | var_1ch = r3;
0x0006271a ldr r3, [sp, 0x28] | r3 = var_28h;
0x0006271c str r2, [sp, 0x44] | var_44h = r2;
0x0006271e str r4, [sp, 0x3c] | var_3ch = r4;
0x00062720 add r3, r2 | r3 += r2;
0x00062722 str r6, [sp, 0x10] | var_10h = r6;
0x00062724 str r3, [sp, 0x24] | var_24h = r3;
0x00062726 mov r3, sl | r3 = sl;
| label_13:
0x00062728 ldr r4, [sp, 0x10] | r4 = var_10h;
0x0006272a cmp r4, sb |
0x0006272c it ge |
| if (r4 < sb) {
0x0006272e movge r4, sb | r4 = sb;
| }
0x00062730 cmp r4, r7 |
| if (r4 <= r7) {
0x00062732 ble 0x627ce | goto label_62;
| }
| do {
0x00062734 cmp r7, 0 |
| if (r7 <= 0) {
0x00062736 ble 0x62802 | goto label_63;
| }
0x00062738 mov r0, r3 | r0 = r3;
0x0006273a mov r2, r7 | r2 = r7;
0x0006273c mov r1, r5 | r1 = r5;
0x0006273e mov r4, r7 | r4 = r7;
0x00062740 blx 0x8610 | r0 = fcn_00008610 ();
0x00062744 mov r3, r0 | r3 = r0;
| label_14:
0x00062746 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00062748 subs r2, r2, r4 | r2 -= r4;
0x0006274a cmp r2, 0 |
0x0006274c str r2, [sp, 0x10] | var_10h = r2;
| if (r2 <= 0) {
0x0006274e ble 0x627e4 | goto label_64;
| }
| label_11:
0x00062750 subs.w sb, sb, r4 | sb -= r4;
0x00062754 add r5, r4 | r5 += r4;
0x00062756 sub.w r7, r7, r4 | r7 -= r4;
| if (sb != sb) {
0x0006275a bne 0x627fe | goto label_65;
| }
0x0006275c str.w sb, [sp, 0x58] | __asm ("str.w sb, [var_58h]");
0x00062760 ldrb.w r3, [r8, 0x11] | r3 = *((r8 + 0x11));
0x00062764 ldr r6, [sp, 0x54] | r6 = var_54h;
0x00062766 mov r4, r6 | r4 = r6;
0x00062768 cmp r3, 0 |
| if (r3 != 0) {
0x0006276a bne 0x62810 | goto label_66;
| }
| label_15:
0x0006276c movs r2, 0 | r2 = 0;
0x0006276e mov r3, r4 | r3 = r4;
0x00062770 str r2, [sp] | *(sp) = r2;
0x00062772 add r1, sp, 0x58 | r1 += var_58h;
0x00062774 add r2, sp, 0x54 | r2 += var_54h;
0x00062776 mov r0, r8 | r0 = r8;
0x00062778 bl 0x58448 | fcn_00058448 (r0, r1, r2, r3, r4, r5, r6);
0x0006277c ldrb.w r3, [r8, 0x11] | r3 = *((r8 + 0x11));
0x00062780 str r0, [sp, 0x50] | var_50h = r0;
0x00062782 subs r3, 0 |
0x00062784 it ne |
| if (r3 == 0) {
0x00062786 movne r3, 1 | r3 = 1;
| }
0x00062788 cmp r0, 0 |
0x0006278a it ne |
| if (r0 == 0) {
0x0006278c movne r3, 0 | r3 = 0;
| }
0x0006278e cmp r3, 0 |
| if (r3 != 0) {
0x00062790 bne 0x62878 | goto label_67;
| }
0x00062792 cmp r0, 0 |
| if (r0 != 0) {
0x00062794 bne.w 0x62bce | goto label_68;
| }
0x00062798 ldr r4, [sp, 0x54] | r4 = var_54h;
| label_16:
0x0006279a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0006279c rev r4, r4 | r4 = SWAP32 (r4);
0x0006279e str r4, [r3] | *(r3) = r4;
0x000627a0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 != 0) {
0x000627a2 cbz r3, 0x627aa |
0x000627a4 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x000627a6 bl 0x129c4 | fcn_000129c4 (r0);
| }
0x000627aa ldr r2, [sp, 0x58] | r2 = var_58h;
0x000627ac movs r3, 0 | r3 = 0;
0x000627ae ldr r4, [sp, 0x10] | r4 = var_10h;
0x000627b0 ldr r1, [r2, 0x38] | r1 = *((r2 + 0x38));
0x000627b2 str r2, [sp, 0x1c] | var_1ch = r2;
0x000627b4 str r3, [r1] | *(r1) = r3;
0x000627b6 ldr r3, [r2, 0x38] | r3 = *((r2 + 0x38));
0x000627b8 ldr.w r2, [r8, 0x28] | r2 = *((r8 + 0x28));
0x000627bc str r1, [sp, 0x24] | var_24h = r1;
0x000627be adds r3, 4 | r3 += 4;
0x000627c0 sub.w sb, r2, 4 | sb = r2 - 4;
0x000627c4 cmp r4, sb |
0x000627c6 it ge |
| if (r4 < sb) {
0x000627c8 movge r4, sb | r4 = sb;
| }
0x000627ca cmp r4, r7 |
0x000627cc bgt 0x62734 |
| } while (r4 > r7);
| label_62:
0x000627ce mov r2, r4 | r2 = r4;
0x000627d0 mov r0, r3 | r0 = r3;
0x000627d2 mov r1, r5 | r1 = r5;
0x000627d4 blx 0x8610 | fcn_00008610 ();
0x000627d8 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000627da mov r3, r0 | r3 = r0;
0x000627dc subs r2, r2, r4 | r2 -= r4;
0x000627de cmp r2, 0 |
0x000627e0 str r2, [sp, 0x10] | var_10h = r2;
| if (r2 > 0) {
0x000627e2 bgt 0x62750 | goto label_11;
| }
| label_64:
0x000627e4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000627e6 ldrd r4, r5, [sp, 0x3c] | __asm ("ldrd r4, r5, [var_3ch]");
| if (r3 != 0) {
0x000627ea cbz r3, 0x627f2 |
0x000627ec ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x000627ee bl 0x129c4 | fcn_000129c4 (r0);
| }
0x000627f2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000627f4 add.w fp, r3, 4 |
0x000627f8 movs r3, 0 | r3 = 0;
0x000627fa str r3, [sp, 0x48] | var_48h = r3;
0x000627fc b 0x6245c | goto label_12;
| label_65:
0x000627fe add r3, r4 | r3 += r4;
0x00062800 b 0x62728 | goto label_13;
| label_63:
0x00062802 mov r0, r3 | r0 = r3;
0x00062804 mov r2, r4 | r2 = r4;
0x00062806 movs r1, 0 | r1 = 0;
0x00062808 blx 0x839c | r0 = fcn_0000839c ();
0x0006280c mov r3, r0 | r3 = r0;
0x0006280e b 0x62746 | goto label_14;
| label_66:
0x00062810 ldr r3, [sp, 0x34] | r3 = var_34h_2;
0x00062812 ldr.w sb, [r8, 0x24] | sb = *((r8 + 0x24));
0x00062816 ldr r4, [sp, 0x38] | r4 = var_38h;
0x00062818 ldr.w sl, [r3, 0x118] | sl = *((r3 + 0x118));
0x0006281c str r5, [sp, 0x2c] | var_2ch = r5;
0x0006281e mov r5, r6 | r5 = r6;
0x00062820 str r6, [sp, 0x30] | var_30h = r6;
| do {
0x00062822 add.w fp, r5, 1 |
0x00062826 cmp.w fp, 1 |
0x0006282a it ls |
| if (fp > 1) {
0x0006282c movls r1, 0 | r1 = 0;
| }
| if (fp >= 1) {
0x0006282e bls 0x62858 |
0x00062830 ldr.w r1, [r8, 0x28] | r1 = *((r8 + 0x28));
0x00062834 subs r6, r5, 1 | r6 = r5 - 1;
0x00062836 mov r0, r6 | r0 = r6;
0x00062838 umull r2, r1, r4, r1 | r2:r1 = r4 * r1;
0x0006283c lsrs r1, r1, 2 | r1 >>= 2;
0x0006283e adds r1, 1 | r1++;
0x00062840 bl 0xb1e8c | fcn_000b1e8c (r0, r1, r2);
0x00062844 mov r0, sl | r0 = sl;
0x00062846 subs r6, r6, r1 | r6 -= r1;
0x00062848 mov r1, sb | r1 = sb;
0x0006284a bl 0xb1c30 | fcn_000b1c30 (r0, r1, r2);
0x0006284e adds r1, r6, 2 | r1 = r6 + 2;
0x00062850 adds r0, 1 | r0++;
0x00062852 cmp r1, r0 |
0x00062854 it eq |
| if (r1 == r0) {
0x00062856 addeq r1, r6, 3 | r1 = r6 + 3;
| goto label_69;
| }
| }
| label_69:
0x00062858 cmp fp, r1 |
| if (fp != r1) {
0x0006285a beq 0x62868 |
0x0006285c mov r1, sb | r1 = sb;
0x0006285e mov r0, sl | r0 = sl;
0x00062860 bl 0xb1c30 | r0 = fcn_000b1c30 (r0, r1, r2);
0x00062864 cmp r5, r0 |
| if (r5 != r0) {
0x00062866 bne 0x6286c | goto label_70;
| }
| }
0x00062868 mov r5, fp | r5 = fp;
0x0006286a b 0x62822 |
| } while (1);
| label_70:
0x0006286c ldrd r5, r6, [sp, 0x2c] | __asm ("ldrd r5, r6, [var_2ch]");
0x00062870 mov r4, fp | r4 = fp;
0x00062872 str.w fp, [sp, 0x54] | __asm ("str.w fp, [var_54h]");
0x00062876 b 0x6276c | goto label_15;
| label_67:
0x00062878 ldr r4, [sp, 0x54] | r4 = var_54h;
0x0006287a add r2, sp, 0x50 | r2 += var_50h;
0x0006287c cmp r6, 0 |
0x0006287e str r2, [sp] | *(sp) = r2;
0x00062880 mov r0, r8 | r0 = r8;
0x00062882 mov r3, r6 | r3 = r6;
0x00062884 ite ne |
| if (r6 == 0) {
0x00062886 movne r2, 4 | r2 = 4;
| }
| if (r6 != 0) {
0x00062888 moveq r2, 3 | r2 = 3;
| }
0x0006288a mov r1, r4 | r1 = r4;
0x0006288c bl 0x58aac | fcn_00058aac (r0, r1, r2, r3, r4);
0x00062890 ldr r0, [sp, 0x50] | r0 = var_50h;
0x00062892 cmp r0, 0 |
| if (r0 == 0) {
0x00062894 beq 0x6279a | goto label_16;
| }
0x00062896 ldr r3, [sp, 0x58] | r3 = var_58h;
0x00062898 mov sb, r0 | sb = r0;
| if (r3 != 0) {
0x0006289a cbz r3, 0x628a2 |
0x0006289c ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0006289e bl 0x129c4 | fcn_000129c4 (r0);
| }
| label_29:
0x000628a2 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000628a4 cmp r3, 0 |
| if (r3 == 0) {
0x000628a6 beq.w 0x624d6 | goto label_4;
| }
0x000628aa ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x000628ac bl 0x129c4 | fcn_000129c4 (r0);
0x000628b0 b 0x624d6 | goto label_4;
| label_53:
0x000628b2 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x000628b4 mov r0, r5 | r0 = r5;
0x000628b6 bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x000628ba strb r3, [r5, 1] | *((r5 + 1)) = r3;
0x000628bc bl 0x5b2fc | fcn_0005b2fc (r0);
0x000628c0 ldr r2, [r5, 0x74] | r2 = *((r5 + 0x74));
0x000628c2 movs r1, 1 | r1 = 1;
0x000628c4 clz r3, r0 | r3 &= r0;
0x000628c8 mov sb, r0 | sb = r0;
0x000628ca lsrs r3, r3, 5 | r3 >>= 5;
0x000628cc str r0, [sp, 0x48] | var_48h = r0;
0x000628ce strb r6, [r2, 0xc] | *((r2 + 0xc)) = r6;
0x000628d0 strb r1, [r5] | *(r5) = r1;
0x000628d2 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000628d4 ands.w r3, r3, r1, lsr 1 | r3 &= (r1 >> 1);
| if (r3 == r3) {
0x000628d8 beq.w 0x624d6 | goto label_4;
| }
0x000628dc ldrsb.w r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x000628e0 cmp r3, 0 |
| if (r3 < 0) {
0x000628e2 blt 0x6290c | goto label_71;
| }
| if (r3 == 0) {
0x000628e4 beq 0x62900 | goto label_72;
| }
0x000628e6 add.w r4, r5, 0x74 | r4 = r5 + 0x74;
| do {
0x000628ea ldr r3, [r4, 4]! | r3 = *((r4 += 4));
0x000628ee adds r6, 1 | r6++;
0x000628f0 ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x000628f2 bl 0x129c4 | fcn_000129c4 (r0);
0x000628f6 ldrsb.w r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x000628fa cmp r6, r3 |
0x000628fc blt 0x628ea |
| } while (r6 < r3);
0x000628fe ldr r2, [r5, 0x74] | r2 = *((r5 + 0x74));
| label_72:
0x00062900 ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x00062902 bl 0x129c4 | fcn_000129c4 (r0);
0x00062906 movs r3, 0xff | r3 = 0xff;
0x00062908 strb.w r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
| label_71:
0x0006290c ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
| if (r3 != 0) {
0x0006290e cbz r3, 0x6292a |
0x00062910 ldr r4, [sp, 0x20] | r4 = x;
0x00062912 mov.w sb, 7 | sb = 7;
0x00062916 ldrd r0, r1, [r4, 8] | __asm ("ldrd r0, r1, [r4, 8]");
0x0006291a bl 0x13558 | fcn_00013558 (r0);
0x0006291e str r0, [r5, 0x10] | *((r5 + 0x10)) = r0;
| if (r0 == 0) {
0x00062920 cbz r0, 0x6292e | goto label_73;
| }
0x00062922 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00062924 ldr r1, [r4] | r1 = *(r4);
0x00062926 blx 0x8610 | fcn_00008610 ();
| }
0x0006292a mov.w sb, 0 | sb = 0;
| label_73:
0x0006292e movs r3, 3 | r3 = 3;
0x00062930 strb r3, [r5] | *(r5) = r3;
0x00062932 ldr r3, [sp, 0x20] | r3 = x;
0x00062934 ldrd r2, r3, [r3, 8] | __asm ("ldrd r2, r3, [r3, 8]");
0x00062938 strd r2, r3, [r5, 0x38] | __asm ("strd r2, r3, [r5, 0x38]");
0x0006293c b 0x624d6 | goto label_4;
| label_52:
0x0006293e ldrh r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00062940 cmp r3, 0 |
| if (r3 == 0) {
0x00062942 beq.w 0x62586 | goto label_17;
| }
0x00062946 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x00062948 adds r6, 1 | r6++;
0x0006294a uxth r6, r6 | r6 = (int16_t) r6;
0x0006294c bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x00062950 strh.w r6, [r5, 0x46] | *((r5 + 0x46)) = r6;
0x00062954 strb r3, [r5, 1] | *((r5 + 1)) = r3;
0x00062956 b 0x62586 | goto label_17;
| label_50:
0x00062958 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0006295a movs r2, 0 | r2 = 0;
0x0006295c ldr r1, [sp, 0x20] | r1 = x;
0x0006295e ldr r0, [r5, 0x40] | r0 = *((r5 + 0x40));
0x00062960 ldrd r7, r1, [r1, 8] | __asm ("ldrd r7, r1, [r1, 8]");
0x00062964 strb r2, [r6, 0xb] | *((r6 + 0xb)) = r2;
0x00062966 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00062968 cmp r3, 0 |
| if (r3 == 0) {
0x0006296a beq.w 0x625b4 | goto label_18;
| }
0x0006296e mov.w lr, 1 | lr = 1;
0x00062972 mov ip, r4 |
| do {
0x00062974 ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x00062976 lsls r2, r2, 0x1b | r2 <<= 0x1b;
| if (r2 < r2) {
0x00062978 bpl 0x62994 |
0x0006297a strb.w lr, [r6, 0xb] |
0x0006297e ldr r2, [r3, 0x40] | r2 = *((r3 + 0x40));
0x00062980 cmp r0, r2 |
| if (r0 != r2) {
0x00062982 bne 0x62994 | goto label_74;
| }
0x00062984 ldrd r4, r2, [r3, 0x20] | __asm ("ldrd r4, r2, [r3, 0x20]");
0x00062988 cmp r1, r2 |
0x0006298a it eq |
| if (r1 == r2) {
0x0006298c cmpeq r7, r4 | __asm ("cmpeq r7, r4");
| }
0x0006298e it eq |
| if (r1 == r2) {
0x00062990 strbeq lr, [r3] | goto label_74;
| }
| }
| label_74:
0x00062994 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00062996 cmp r3, 0 |
0x00062998 bne 0x62974 |
| } while (r3 != 0);
0x0006299a mov r4, ip | r4 = ip;
0x0006299c b 0x625b4 | goto label_18;
| label_37:
0x0006299e add r3, sp, 0x4c | r3 += var_4ch;
0x000629a0 ldr r1, [sp, 0x20] | r1 = x;
0x000629a2 str r3, [sp, 4] | var_4h_2 = r3;
0x000629a4 mov r0, r5 | r0 = r5;
0x000629a6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000629a8 ubfx r3, r3, 3, 1 | r3 = (r3 >> 3) & ((1 << 1) - 1);
0x000629ac str r3, [sp] | *(sp) = r3;
0x000629ae ldrd r2, r3, [r1, 8] | __asm ("ldrd r2, r3, [r1, 8]");
0x000629b2 ldr r1, [r1] | r1 = *(r1);
0x000629b4 bl 0x61888 | r0 = fcn_00061888 (r0, r1, r2, r3, r4);
0x000629b8 mov sb, r0 | sb = r0;
0x000629ba str r0, [sp, 0x48] | var_48h = r0;
0x000629bc b 0x62404 | goto label_19;
| label_42:
0x000629be blx 0x83b8 | strerror_r ();
0x000629c2 ldr r2, [pc, 0x228] |
0x000629c4 add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x000629c8 ldr r1, [pc, 0x224] |
0x000629ca movw r3, 0x2916 |
0x000629ce movt r3, 1 | r3 = 0x12916;
0x000629d2 movs r0, 0xb | r0 = 0xb;
0x000629d4 add r2, pc | r2 = 0xc55c6;
0x000629d6 str r4, [sp] | *(sp) = r4;
0x000629d8 add r1, pc | r1 = 0xc55cc;
0x000629da blx 0x8b60 | fcn_00008b60 ();
0x000629de b 0x6257c | goto label_20;
| label_60:
0x000629e0 asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x000629e2 cmp r6, 0x80 |
0x000629e4 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r6 <= 0x80) {
0x000629e8 blo.w 0x626bc | goto label_21;
| }
0x000629ec cmp.w r6, 0x4000 |
0x000629f0 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r6 <= 0x4000) {
0x000629f4 blo.w 0x62b38 | goto label_75;
| }
0x000629f8 mov r2, r6 | r2 = r6;
0x000629fa bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x000629fe uxtb r3, r0 | r3 = (int8_t) r0;
0x00062a00 b 0x626c4 | goto label_22;
| label_40:
0x00062a02 mov r3, r7 | r3 = r7;
0x00062a04 add r7, sp, 0x48 | r7 += var_48h;
0x00062a06 add r3, fp | r3 += fp;
0x00062a08 movs r2, 3 | r2 = 3;
0x00062a0a ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x00062a0e mov r0, r6 | r0 = r6;
0x00062a10 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00062a12 str r7, [sp] | *(sp) = r7;
0x00062a14 rev r1, r1 | r1 = SWAP32 (r1);
0x00062a16 bl 0x58aac | fcn_00058aac (r0, r1, r2, r3, r4);
0x00062a1a ldr.w sb, [sp, 0x48] | sb = var_48h;
0x00062a1e cmp.w sb, 0 |
| if (sb != 0) {
0x00062a22 bne.w 0x624d6 | goto label_4;
| }
0x00062a26 b 0x6245c | goto label_12;
| label_44:
0x00062a28 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
0x00062a2a ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x00062a2c str r2, [sp] | *(sp) = r2;
0x00062a2e ldrh.w r2, [sp, 0x6a] | r2 = var_6ah;
0x00062a32 str r2, [sp, 4] | var_4h_2 = r2;
0x00062a34 mov r2, r7 | r2 = r7;
0x00062a36 bl 0x59d34 | fcn_00059d34 (r0, r1, r2, r3, r4, r5, r6);
0x00062a3a ldrh.w r2, [sp, 0x6a] | r2 = var_6ah;
0x00062a3e ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x00062a40 str r0, [sp, 0x48] | var_48h = r0;
0x00062a42 cmp r2, fp |
0x00062a44 bic r3, r3, 4 | r3 = BIT_MASK (r3, 4);
0x00062a48 strb r3, [r5, 1] | *((r5 + 1)) = r3;
| if (r2 == fp) {
0x00062a4a beq 0x62afc | goto label_76;
| }
| label_28:
0x00062a4c mov sb, r0 | sb = r0;
0x00062a4e cmp r0, 0 |
| if (r0 != 0) {
0x00062a50 bne.w 0x624d6 | goto label_4;
| }
0x00062a54 b 0x624c0 | goto label_23;
| label_55:
0x00062a56 ldrh r3, [r5, 0x32] | r3 = *((r5 + 0x32));
0x00062a58 cmp r3, 0 |
| if (r3 == 0) {
0x00062a5a beq.w 0x62412 | goto label_6;
| }
0x00062a5e ldr r2, [sp, 0x20] | r2 = x;
0x00062a60 ldrd r3, r2, [r2, 0x1c] | __asm ("ldrd r3, r2, [r2, 0x1c]");
0x00062a64 add r3, r2 | r3 += r2;
0x00062a66 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x00062a68 cmp r2, r3 |
| if (r2 != r3) {
0x00062a6a bne.w 0x62412 | goto label_6;
| }
0x00062a6e ldr r2, [pc, 0x184] |
0x00062a70 ldr r3, [pc, 0x164] | r3 = *(0x62bd8);
0x00062a72 add r2, pc | r2 = 0xc566c;
0x00062a74 ldr r3, [r2, r3] | r3 = *(0xc566c);
0x00062a76 ldr r2, [r3] | r2 = *(0xc566c);
0x00062a78 ldr r3, [sp, 0x84] | r3 = var_84h;
0x00062a7a eors r2, r3 | r2 ^= r3;
0x00062a7c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00062a80 bne.w 0x62bca | goto label_47;
| }
0x00062a84 ldr r1, [sp, 0x20] | r1 = x;
0x00062a86 mov r0, r5 | r0 = r5;
0x00062a88 add sp, 0x8c |
0x00062a8a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00062a8e b.w 0x598a4 | goto label_24;
| label_59:
0x00062a92 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x00062a94 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00062a96 and r2, r2, 0x7f | r2 &= 0x7f;
0x00062a9a orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x00062a9e strb.w r3, [r1, fp] | *((r1 + fp)) = r3;
0x00062aa2 strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x00062aa4 movs r0, 2 | r0 = 2;
0x00062aa6 add fp, r0 |
0x00062aa8 b 0x626c8 | goto label_25;
| label_61:
0x00062aaa add fp, r6 |
0x00062aac ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00062aae cmp.w fp, 4 |
0x00062ab2 mov r2, r7 | r2 = r7;
0x00062ab4 mov r0, sl | r0 = sl;
0x00062ab6 it lt |
| if (fp >= 4) {
0x00062ab8 movlt fp, 4 |
| }
0x00062abc blx 0x8610 | fcn_00008610 ();
0x00062ac0 subs r2, r6, r7 | r2 = r6 - r7;
0x00062ac2 add.w r0, sl, r7 | r0 = sl + r7;
0x00062ac6 movs r1, 0 | r1 = 0;
0x00062ac8 blx 0x839c | fcn_0000839c ();
0x00062acc movs r3, 0 | r3 = 0;
0x00062ace str r3, [sp, 0x48] | var_48h = r3;
0x00062ad0 b 0x6245c | goto label_12;
| label_58:
0x00062ad2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00062ad4 movs r0, 1 | r0 = 1;
0x00062ad6 strb.w r2, [r3, fp] | *((r3 + fp)) = r2;
0x00062ada add fp, r0 |
0x00062adc b 0x626c8 | goto label_25;
| label_57:
0x00062ade asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x00062ae0 cmp.w r6, 0x4000 |
0x00062ae4 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r6 <= 0x4000) {
0x00062ae8 blo 0x62b4e | goto label_77;
| }
0x00062aea mov r2, r6 | r2 = r6;
0x00062aec bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x00062af0 uxtb r3, r0 | r3 = (int8_t) r0;
0x00062af2 b 0x62682 | goto label_26;
| label_43:
0x00062af4 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00062af6 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00062af8 str r3, [r2] | *(r2) = r3;
0x00062afa b 0x62494 | goto label_27;
| label_76:
0x00062afc ldrh.w r1, [sp, 0x68] | r1 = var_68h;
0x00062b00 ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x00062b02 cmp r1, r3 |
| if (r1 != r3) {
0x00062b04 bne 0x62a4c | goto label_28;
| }
| label_45:
0x00062b06 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00062b08 ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
| if (r3 != 0) {
0x00062b0a cbz r3, 0x62b64 |
0x00062b0c ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00062b0e cmp r3, fp |
| if (r3 > fp) {
0x00062b10 bgt 0x62b64 | goto label_78;
| }
0x00062b12 mov r2, fp | r2 = fp;
0x00062b14 b 0x62a4c | goto label_28;
| label_49:
0x00062b16 blx 0x83b8 | strerror_r ();
0x00062b1a ldr r2, [pc, 0xdc] |
0x00062b1c add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x00062b20 ldr r1, [pc, 0xd8] |
0x00062b22 movw r3, 0x2877 |
0x00062b24 lsls r7, r6, 0xd | r7 = r6 << 0xd;
0x00062b26 movt r3, 1 | r3 = 0x12877;
0x00062b2a movs r0, 0xb | r0 = 0xb;
0x00062b2c add r2, pc | r2 = 0xc572a;
0x00062b2e str r4, [sp] | *(sp) = r4;
0x00062b30 add r1, pc | r1 = 0xc5730;
0x00062b32 blx 0x8b60 | fcn_00008b60 ();
0x00062b36 b 0x6257c | goto label_20;
| label_75:
0x00062b38 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00062b3a lsrs r3, r6, 7 | r3 = r6 >> 7;
0x00062b3c orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x00062b40 strb.w r3, [r2, fp] | *((r2 + fp)) = r3;
0x00062b44 and r3, r6, 0x7f | r3 = r6 & 0x7f;
0x00062b48 strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x00062b4a movs r3, 2 | r3 = 2;
0x00062b4c b 0x626c4 | goto label_22;
| label_77:
0x00062b4e ldr r2, [sp, 0x28] | r2 = var_28h;
0x00062b50 lsrs r3, r6, 7 | r3 = r6 >> 7;
0x00062b52 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x00062b56 strb.w r3, [r2, fp] | *((r2 + fp)) = r3;
0x00062b5a and r3, r6, 0x7f | r3 = r6 & 0x7f;
0x00062b5e strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x00062b60 movs r3, 2 | r3 = 2;
0x00062b62 b 0x62682 | goto label_26;
| }
| label_78:
0x00062b64 ldrb r2, [r4, 9] | r2 = *((r4 + 9));
0x00062b66 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00062b68 adds r2, 0xa | r2 += 0xa;
0x00062b6a add r3, r2 | r3 += r2;
0x00062b6c cmp r7, r3 |
| if (r7 > r3) {
0x00062b6e blo 0x62ba8 |
0x00062b70 ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x00062b72 add.w r3, r7, fp | r3 = r7 + fp;
0x00062b76 cmp r2, r3 |
| if (r2 < r3) {
0x00062b78 bhs 0x62b9c |
0x00062b7a blx 0x83b8 | strerror_r ();
0x00062b7e ldr r2, [pc, 0x80] |
0x00062b80 add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x00062b84 ldr r1, [pc, 0x7c] |
0x00062b86 movw r3, 0x2934 |
0x00062b8a movt r3, 1 | r3 = 0x12934;
0x00062b8e movs r0, 0xb | r0 = 0xb;
0x00062b90 add r2, pc | r2 = 0xc5796;
0x00062b92 str r4, [sp] | *(sp) = r4;
0x00062b94 add r1, pc | r1 = 0xc579c;
0x00062b96 blx 0x8b60 | fcn_00008b60 ();
0x00062b9a b 0x6257c | goto label_20;
| }
0x00062b9c ldr r1, [sp, 0x28] | r1 = var_28h;
0x00062b9e mov r2, fp | r2 = fp;
0x00062ba0 mov r0, r7 | r0 = r7;
0x00062ba2 blx 0x8610 | fcn_00008610 ();
0x00062ba6 b 0x624d6 | goto label_4;
| }
0x00062ba8 blx 0x83b8 | strerror_r ();
0x00062bac ldr r2, [pc, 0x58] |
0x00062bae add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x00062bb2 ldr r1, [pc, 0x58] |
0x00062bb4 movw r3, 0x2931 |
0x00062bb8 movt r3, 1 | r3 = 0x12931;
0x00062bbc movs r0, 0xb | r0 = 0xb;
0x00062bbe add r2, pc | r2 = 0xc57ca;
0x00062bc0 str r4, [sp] | *(sp) = r4;
0x00062bc2 add r1, pc | r1 = 0xc57d4;
0x00062bc4 blx 0x8b60 | fcn_00008b60 ();
0x00062bc8 b 0x6257c | goto label_20;
| label_47:
0x00062bca blx 0x883c | r0 = fcn_0000883c ();
| label_68:
0x00062bce mov sb, r0 | sb = r0;
0x00062bd0 b 0x628a2 | goto label_29;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x62d9c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00062d9c () | void fcn_00062d9c (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_34h;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_38h;
| int32_t var_38h_2;
| int16_t var_64h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00062d9c push.w {r4, r5, r6, r7, r8, lr} |
0x00062da0 mov r5, r2 | r5 = r2;
0x00062da2 ldr r2, [pc, 0x12c] |
0x00062da4 sub sp, 0x68 |
0x00062da6 mov r4, r1 | r4 = r1;
0x00062da8 mov r6, r0 | r6 = r0;
0x00062daa ldr r3, [pc, 0x128] | r3 = *(0x62ed6);
0x00062dac mov r0, r1 | r0 = r1;
0x00062dae add r2, pc | r2 = 0xc5c84;
0x00062db0 ldr r3, [r2, r3] |
0x00062db2 ldr r3, [r3] | r3 = *(0xc5c84);
0x00062db4 str r3, [sp, 0x64] | var_64h = r3;
0x00062db6 mov.w r3, 0 | r3 = 0;
0x00062dba bl 0xe650 | fcn_0000e650 (r0);
0x00062dbe ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x00062dc0 movs r1, 0 | r1 = 0;
0x00062dc2 ldr r7, [r4, 0x28] | r7 = *((r4 + 0x28));
0x00062dc4 ldrh r0, [r4, 0x30] | r0 = *((r4 + 0x30));
0x00062dc6 ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x00062dc8 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x00062dca str r6, [sp, 0x24] | var_24h = r6;
0x00062dcc subs r3, r3, r7 | r3 -= r7;
0x00062dce strh.w r1, [sp, 0x20] | var_20h = r1;
0x00062dd2 bic.w r3, r3, r3, asr 31 | r3 = BIT_MASK (r3, r3);
0x00062dd6 str r1, [sp, 0x28] | var_28h = r1;
0x00062dd8 str r7, [sp, 0x18] | var_18h = r7;
0x00062dda cmp r3, r0 |
0x00062ddc it ge |
| if (r3 < r0) {
0x00062dde movge r3, r0 | r3 = r0;
| }
0x00062de0 cmp r2, r3 |
| if (r2 > r3) {
0x00062de2 bhi 0x62ea0 | goto label_6;
| }
0x00062de4 mov r6, r1 | r6 = r1;
0x00062de6 movw r3, 0x4010 | r3 = 0x4010;
0x00062dea strh.w r3, [sp, 0x20] | var_20h = r3;
0x00062dee str r2, [sp, 0x1c] | var_1ch = r2;
| label_2:
0x00062df0 ldrb r4, [r7] | r4 = *(r7);
0x00062df2 cmp r4, 0x7f |
0x00062df4 str r4, [sp, 8] | var_8h = r4;
| if (r4 > 0x7f) {
0x00062df6 bhi 0x62e90 | goto label_7;
| }
0x00062df8 cmp r4, 2 |
0x00062dfa bls 0x62e52 |
| while (r4 > 2) {
0x00062dfc ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x00062e00 cmp r8, r4 |
| if (r8 > r4) {
0x00062e02 blo 0x62e52 |
0x00062e04 subs r0, r4, 1 | r0 = r4 - 1;
0x00062e06 ldrb r1, [r7, r0] | r1 = *((r7 + r0));
0x00062e08 add r0, r7 | r0 += r7;
0x00062e0a cmp r1, 0x7f |
0x00062e0c str r1, [sp, 0xc] | var_ch = r1;
| if (r1 > 0x7f) {
0x00062e0e bhi 0x62eba | goto label_8;
| }
| label_4:
0x00062e10 sub.w r3, r1, 7 | r3 = r1 - 7;
0x00062e14 subs r2, r1, 1 | r2 = r1 - 1;
0x00062e16 clz r3, r3 | r3 &= r3;
0x00062e1a lsrs r3, r3, 5 | r3 >>= 5;
0x00062e1c cmp r2, 8 |
0x00062e1e it hi |
| if (r2 <= 8) {
0x00062e20 orrhi r3, r3, 1 | r3 |= 1;
| }
| if (r3 == 0) {
0x00062e24 cbnz r3, 0x62e52 |
0x00062e26 ldr r3, [pc, 0xb0] |
0x00062e28 add r3, pc | r3 = 0xc5d06;
0x00062e2a add r3, r1 | r3 += r1;
0x00062e2c ldrb.w r3, [r3, 0xa8] | r3 = *((r3 + 0xa8));
0x00062e30 add r4, r3 | r4 += r3;
0x00062e32 cmp r8, r4 |
| if (r8 <= r4) {
0x00062e34 blo 0x62e52 | goto label_0;
| }
0x00062e36 sub.w r0, r8, r3 | r0 = r8 - r3;
0x00062e3a add r2, sp, 0x38 | r2 += var_38h;
0x00062e3c add r0, r7 | r0 += r7;
0x00062e3e bl 0xd8bc | fcn_0000d8bc (r0, r1, r2);
0x00062e42 ldrd r2, r3, [sp, 0x38] | __asm ("ldrd r2, r3, [var_38h]");
0x00062e46 strd r2, r3, [r5] | __asm ("strd r2, r3, [r5]");
0x00062e4a cmp r6, 0 |
| if (r6 != 0) {
0x00062e4c bne 0x62ec4 | goto label_9;
| }
| label_5:
0x00062e4e movs r0, 0 | r0 = 0;
0x00062e50 b 0x62e76 |
| }
| } else {
| if (r6 != 0) {
| label_0:
0x00062e52 cbnz r6, 0x62eb2 | goto label_10;
| }
| label_3:
0x00062e54 blx 0x83b8 | strerror_r ();
0x00062e58 ldr r2, [pc, 0x80] |
0x00062e5a add.w r4, r0, 0x14 | r4 += var_24h;
0x00062e5e ldr r1, [pc, 0x80] |
0x00062e60 movw r3, 0x4ecf |
0x00062e64 movs r0, 0xb | r0 = 0xb;
0x00062e66 movt r3, 1 | r3 = 0x14ecf;
0x00062e6a add r2, pc | r2 = 0xc5d4a;
0x00062e6c str r4, [sp] | *(sp) = r4;
0x00062e6e add r1, pc | r1 = 0xc5d54;
0x00062e70 blx 0x8b60 | fcn_00008b60 ();
0x00062e74 movs r0, 0xb | r0 = 0xb;
| }
| label_1:
0x00062e76 ldr r2, [pc, 0x6c] |
0x00062e78 ldr r3, [pc, 0x58] | r3 = *(0x62ed4);
0x00062e7a add r2, pc | r2 = 0xc5d64;
0x00062e7c ldr r3, [r2, r3] | r3 = *(0xc5d64);
0x00062e7e ldr r2, [r3] | r2 = *(0xc5d64);
0x00062e80 ldr r3, [sp, 0x64] | r3 = var_64h;
0x00062e82 eors r2, r3 | r2 ^= r3;
0x00062e84 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00062e88 bne 0x62ecc | goto label_11;
| }
0x00062e8a add sp, 0x68 |
0x00062e8c pop.w {r4, r5, r6, r7, r8, pc} |
| label_7:
0x00062e90 add r1, sp, 8 | r1 += var_8h;
0x00062e92 mov r0, r7 | r0 = r7;
0x00062e94 bl 0xf95c | fcn_0000f95c (r0, r1, r2, r3);
0x00062e98 ldr r4, [sp, 8] | r4 = var_8h;
0x00062e9a cmp r4, 2 |
0x00062e9c bhi 0x62dfc |
| }
0x00062e9e b 0x62e52 | goto label_0;
| label_6:
0x00062ea0 add r3, sp, 0x10 | r3 += var_10h;
0x00062ea2 mov r0, r4 | r0 = r4;
0x00062ea4 bl 0x62cb0 | r0 = fcn_00062cb0 (r0, r1, r2, r3);
0x00062ea8 cmp r0, 0 |
| if (r0 != 0) {
0x00062eaa bne 0x62e76 | goto label_1;
| }
0x00062eac ldr r7, [sp, 0x18] | r7 = var_18h;
0x00062eae ldr r6, [sp, 0x28] | r6 = var_28h;
0x00062eb0 b 0x62df0 | goto label_2;
| label_10:
0x00062eb2 add r0, sp, 0x10 | r0 += var_10h;
0x00062eb4 bl 0x16c50 | fcn_00016c50 (r0);
0x00062eb8 b 0x62e54 | goto label_3;
| label_8:
0x00062eba add r1, sp, 0xc | r1 += var_ch;
0x00062ebc bl 0xf95c | fcn_0000f95c (r0, r1, r2, r3);
0x00062ec0 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00062ec2 b 0x62e10 | goto label_4;
| label_9:
0x00062ec4 add r0, sp, 0x10 | r0 += var_10h;
0x00062ec6 bl 0x16c50 | fcn_00016c50 (r0);
0x00062eca b 0x62e4e | goto label_5;
| label_11:
0x00062ecc blx 0x883c | fcn_0000883c ();
0x00062ed0 ldrsh r2, [r5, r3] | r2 = *((r5 + r3));
0x00062ed2 movs r6, r0 | r6 = r0;
0x00062ed4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00062ed6 movs r0, r0 |
0x00062ed8 stm r1!, {r2, r5} | *(r1!) = r2;
| *((r1! + 4)) = r5;
0x00062eda movs r5, r0 | r5 = r0;
0x00062edc lsls r2, r2, 0xb | r2 <<= 0xb;
0x00062ede movs r5, r0 | r5 = r0;
0x00062ee0 lsls r6, r5, 3 | r6 = r5 << 3;
0x00062ee2 movs r5, r0 | r5 = r0;
0x00062ee4 ldrsh r6, [r3, r0] | r6 = *((r3 + r0));
0x00062ee6 movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x63034 */
| #include <stdint.h>
|
; (fcn) fcn.00063034 () | void fcn_00063034 (int16_t arg_ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00063034 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00063038 sub sp, 0x5c |
0x0006303a str r2, [sp, 0x2c] | var_2ch = r2;
0x0006303c mov r5, r2 | r5 = r2;
0x0006303e mov r4, r3 | r4 = r3;
0x00063040 mov r8, r0 | r8 = r0;
0x00063042 ldr r2, [pc, 0x3e8] |
0x00063044 str r3, [sp, 0x30] | var_30h = r3;
0x00063046 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006304a ldr r3, [pc, 0x3e4] | r3 = *(0x63432);
0x0006304c add r2, pc | r2 = 0xc647e;
0x0006304e vstr d16, [sp, 0x40] | __asm ("vstr d16, [sp, 0x40]");
0x00063052 vstr d16, [sp, 0x48] | __asm ("vstr d16, [sp, 0x48]");
0x00063056 ldr r3, [r2, r3] |
0x00063058 ldr r3, [r3] | r3 = *(0xc647e);
0x0006305a str r3, [sp, 0x54] | var_54h = r3;
0x0006305c mov.w r3, 0 | r3 = 0;
0x00063060 str r1, [sp, 0x14] | var_14h = r1;
0x00063062 cmp r1, 0 |
| if (r1 == 0) {
0x00063064 beq.w 0x633aa | goto label_18;
| }
0x00063068 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006306a ldr r4, [r3] | r4 = *(r3);
0x0006306c add.w r5, r4, r4, lsl 1 | r5 = r4 + (r4 << 1);
0x00063070 lsls r5, r5, 2 | r5 <<= 2;
0x00063072 cmp r0, 0 |
| if (r0 == 0) {
0x00063074 beq.w 0x63260 | goto label_19;
| }
0x00063078 mov r2, r5 | r2 = r5;
0x0006307a movs r3, 0 | r3 = 0;
0x0006307c bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x00063080 mov fp, r0 |
| label_3:
0x00063082 cmp.w fp, 0 |
| if (fp != 0) {
0x00063086 beq 0x63092 |
0x00063088 mov r2, r5 | r2 = r5;
0x0006308a movs r1, 0 | r1 = 0;
0x0006308c mov r0, fp | r0 = fp;
0x0006308e blx 0x839c | fcn_0000839c ();
| }
0x00063092 movw r3, 0x7fff | r3 = 0x7fff;
0x00063096 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00063098 cmp r3, r4 |
0x0006309a it ge |
| if (r3 < r4) {
0x0006309c movge r3, r4 | r3 = r4;
| }
0x0006309e cmp r4, 0 |
0x000630a0 strh r3, [r2] | *(r2) = r3;
0x000630a2 str r3, [sp, 0x24] | var_24h = r3;
0x000630a4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000630a6 str.w fp, [r3] | __asm ("str.w fp, [r3]");
| if (r4 <= 0) {
0x000630aa ble.w 0x63404 | goto label_20;
| }
0x000630ae ldr r3, [pc, 0x384] |
0x000630b0 add.w sb, fp, 0xc | sb += arg_ch;
0x000630b4 ldr r7, [pc, 0x380] |
0x000630b6 ldr.w sl, [pc, 0x384] |
0x000630ba add r3, pc | r3 = 0xc64f4;
0x000630bc ldr r6, [pc, 0x380] |
0x000630be str r3, [sp, 0x28] | var_28h = r3;
0x000630c0 add r7, pc | r7 = 0xc64fc;
0x000630c2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000630c4 add sl, pc | sl = 0xc6506;
0x000630c6 add r6, pc | r6 = 0xc650a;
0x000630c8 str.w fp, [sp, 0x34] | __asm ("str.w fp, [var_34h]");
0x000630cc adds r3, 8 | r3 += 8;
0x000630ce str r3, [sp, 0xc] | var_ch = r3;
0x000630d0 movs r3, 1 | r3 = 1;
| label_0:
0x000630d2 ldrb.w r5, [r8, 0x57] | r5 = *((r8 + 0x57));
0x000630d6 subs r2, r3, 1 | r2 = r3 - 1;
0x000630d8 str r2, [sp, 0x18] | var_18h = r2;
0x000630da cmp r5, 0 |
| if (r5 != 0) {
0x000630dc bne.w 0x633a4 | goto label_21;
| }
0x000630e0 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000630e2 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000630e4 cmp r1, 0 |
| if (r1 == 0) {
0x000630e6 beq.w 0x6333a | goto label_22;
| }
0x000630ea ldr r2, [sp, 0x14] | r2 = var_14h;
0x000630ec add.w r2, r2, r3, lsl 4 | r2 += (r3 << 4);
0x000630f0 ldrb r2, [r2, 1] | r2 = *((r2 + 1));
0x000630f2 lsls r4, r2, 0x1e | r4 = r2 << 0x1e;
| if (r4 != r2) {
0x000630f4 bne.w 0x6333a | goto label_22;
| }
| label_10:
0x000630f8 ldr.w ip, [pc, 0x348] | ip = *(0x00063444);
0x000630fc add.w lr, r1, -1 | lr = r1 + -1;
0x00063100 mov r4, lr | r4 = lr;
0x00063102 add ip, pc |
| do {
| label_4:
0x00063104 ldrb r2, [r4, 1]! | r2 = *((r4 += 1));
0x00063108 ldrb r0, [ip], 1 | r0 = *(ip);
| ip++;
0x0006310c cmp r2, r0 |
| if (r2 == r0) {
0x0006310e beq.w 0x6326c | goto label_23;
| }
0x00063112 add r2, r7 | r2 += r7;
0x00063114 add r0, r7 | r0 += r7;
0x00063116 ldrb.w fp, [r2, 0x140] | fp = *((r2 + 0x140));
0x0006311a ldrb.w r2, [r0, 0x140] | r2 = *((r0 + 0x140));
0x0006311e cmp fp, r2 |
0x00063120 beq 0x63104 |
| } while (fp == r2);
0x00063122 ldr r4, [pc, 0x324] |
0x00063124 add r4, pc | r4 = 0xc6572;
| do {
| label_6:
0x00063126 ldrb r2, [lr, 1]! | r2 = *((lr += 1));
0x0006312a ldrb r0, [r4], 1 | r0 = *(r4);
| r4++;
0x0006312e cmp r2, r0 |
| if (r2 == r0) {
0x00063130 beq.w 0x63284 | goto label_24;
| }
0x00063134 add r2, sl | r2 += sl;
0x00063136 add r0, sl | r0 += sl;
0x00063138 ldrb.w ip, [r2, 0x140] | ip = *((r2 + 0x140));
0x0006313c ldrb.w r2, [r0, 0x140] | r2 = *((r0 + 0x140));
0x00063140 cmp ip, r2 |
0x00063142 beq 0x63126 |
| } while (ip == r2);
0x00063144 mov r0, r8 | r0 = r8;
0x00063146 str r3, [sp, 0x10] | var_10h = r3;
0x00063148 bl 0x22990 | fcn_00022990 (r0, r1);
0x0006314c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006314e mov r4, r0 | r4 = r0;
| label_5:
0x00063150 movs r2, 0 | r2 = 0;
0x00063152 str r2, [sp, 0x3c] | var_3ch = r2;
0x00063154 cmp r4, 0 |
| if (r4 == 0) {
0x00063156 beq 0x631c8 | goto label_25;
| }
0x00063158 ldr r2, [pc, 0x2f0] |
0x0006315a add.w fp, sp, 0x40 |
0x0006315e str r5, [sp, 0x20] | var_20h = r5;
0x00063160 str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch]");
0x00063164 mov sl, r7 | sl = r7;
0x00063166 add r2, pc | r2 = 0xc65b6;
0x00063168 mov r7, r3 | r7 = r3;
0x0006316a mov r5, r2 | r5 = r2;
| do {
| label_1:
0x0006316c movs r2, 0 | r2 = 0;
0x0006316e mov r1, r4 | r1 = r4;
0x00063170 mov r0, fp | r0 = fp;
0x00063172 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x00063176 ldr r2, [r0, 8] | r2 = var_48h;
0x00063178 cmp r2, 0 |
| if (r2 == 0) {
0x0006317a beq.w 0x632bc | goto label_26;
| }
0x0006317e ldrsb.w r2, [r2, 9] | r2 = *((r2 + 9));
0x00063182 mov r0, r4 | r0 = r4;
0x00063184 cmp r2, 0 |
0x00063186 ittt lt |
| if (r2 < 0) {
0x00063188 ldrhlt r2, [sb, -0x2] | __asm ("ldrhlt r2, [sb, -0x2]");
| }
| if (r2 >= 0) {
0x0006318c orrlt r2, r2, 0x400 | r2 |= 0x400;
| }
| if (r2 < 0) {
0x00063190 strh r2, [sb, -0x2] | *((sb - 0x2)) = r2;
| }
0x00063194 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00063198 bics r0, r0, 0xc0000000 | __asm ("bics r0, r0, aav.0x000000ff");
0x0006319c it eq |
| if (r2 != 0) {
0x0006319e moveq r2, r0 | r2 = r0;
| }
| if (r2 != 0) {
0x000631a0 bne 0x6328c | goto label_27;
| }
| label_8:
0x000631a2 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000631a4 mov r3, r4 | r3 = r4;
0x000631a6 mov r0, r8 | r0 = r8;
0x000631a8 adds r1, 1 | r1++;
0x000631aa str r1, [sp] | *(sp) = r1;
0x000631ac str r1, [sp, 0x3c] | var_3ch = r1;
0x000631ae mov r1, r5 | r1 = r5;
0x000631b0 bl 0x24ec8 | fcn_00024ec8 (r0);
0x000631b4 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x000631b6 mov r4, r0 | r4 = r0;
0x000631b8 cmp r2, 3 |
| if (r2 > 3) {
0x000631ba bhi 0x63252 | goto label_28;
| }
0x000631bc cmp r4, 0 |
0x000631be bne 0x6316c |
| } while (r4 != 0);
| label_2:
0x000631c0 mov r3, r7 | r3 = r7;
0x000631c2 mov r7, sl | r7 = sl;
0x000631c4 ldr.w sl, [sp, 0x1c] | sl = var_1ch;
| label_25:
0x000631c8 ldrd r2, r1, [sp, 0x14] | __asm ("ldrd r2, r1, [var_14h]");
0x000631cc str r4, [sb, -0xc] | *((sb - 0xc)) = r4;
0x000631d0 add.w r2, r2, r1, lsl 4 | r2 += (r1 << 4);
0x000631d4 movs r1, 0 | r1 = 0;
0x000631d6 strb r1, [sb, -0x5] | *((sb - 0x5)) = r1;
0x000631da ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x000631dc lsls r2, r2, 0x1f | r2 <<= 0x1f;
| if (r2 < r2) {
0x000631de bpl 0x631ec |
0x000631e0 ldrh r2, [sb, -0x2] | r2 = *((sb - 0x2));
0x000631e4 orr r2, r2, 0x400 | r2 |= 0x400;
0x000631e8 strh r2, [sb, -0x2] | *((sb - 0x2)) = r2;
| }
| label_9:
0x000631ec ldr r2, [sp, 0xc] | r2 = var_ch;
0x000631ee add.w sb, sb, 0xc | sb += 0xc;
0x000631f2 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000631f4 adds r3, 1 | r3++;
0x000631f6 adds r2, 0x10 | r2 += 0x10;
0x000631f8 str r2, [sp, 0xc] | var_ch = r2;
0x000631fa ldr r2, [sp, 0x24] | r2 = var_24h;
0x000631fc cmp r2, r1 |
| if (r2 > r1) {
0x000631fe bgt.w 0x630d2 | goto label_0;
| }
0x00063202 ldr.w fp, [sp, 0x34] | fp = var_34h;
0x00063206 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00063208 str r3, [sp, 0x18] | var_18h = r3;
| label_13:
0x0006320a ldr r4, [sp, 0x48] | r4 = var_48h;
0x0006320c movs r5, 0 | r5 = 0;
0x0006320e ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x00063210 str r5, [sp, 0x48] | var_48h = r5;
0x00063212 blx 0x8404 | fcn_00008404 ();
0x00063216 str r5, [sp, 0x4c] | var_4ch = r5;
0x00063218 str r5, [sp, 0x40] | var_40h = r5;
| if (r4 == 0) {
0x0006321a cbz r4, 0x63228 | goto label_29;
| }
| do {
0x0006321c mov r0, r4 | r0 = r4;
0x0006321e ldr r4, [r4] | r4 = *(r4);
0x00063220 blx 0x8404 | fcn_00008404 ();
0x00063224 cmp r4, 0 |
0x00063226 bne 0x6321c |
| } while (r4 != 0);
| label_29:
0x00063228 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x0006322c movs r5, 0 | r5 = 0;
0x0006322e str r5, [sp, 0x44] | var_44h = r5;
0x00063230 cmp r3, 0 |
| if (r3 != 0) {
0x00063232 bne.w 0x633de | goto label_30;
| }
| label_14:
0x00063236 ldr r2, [pc, 0x218] |
0x00063238 ldr r3, [pc, 0x1f4] | r3 = *(0x63430);
0x0006323a add r2, pc | r2 = 0xc6690;
0x0006323c ldr r3, [r2, r3] | r3 = *(0xc6690);
0x0006323e ldr r2, [r3] | r2 = *(0xc6690);
0x00063240 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00063242 eors r2, r3 | r2 ^= r3;
0x00063244 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00063248 bne.w 0x63420 | goto label_31;
| }
0x0006324c add sp, 0x5c |
0x0006324e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_28:
0x00063252 add r1, sp, 0x3c | r1 += var_3ch;
0x00063254 movs r0, 4 | r0 = 4;
0x00063256 blx 0x8ac4 | fcn_00008ac4 ();
0x0006325a cmp r4, 0 |
| if (r4 != 0) {
0x0006325c bne 0x6316c | goto label_1;
| }
0x0006325e b 0x631c0 | goto label_2;
| label_19:
0x00063260 mov r0, r5 | r0 = r5;
0x00063262 mov r1, r8 | r1 = r8;
0x00063264 bl 0x13558 | r0 = fcn_00013558 (r0);
0x00063268 mov fp, r0 |
0x0006326a b 0x63082 | goto label_3;
| label_23:
0x0006326c cmp r2, 0 |
| if (r2 != 0) {
0x0006326e bne.w 0x63104 | goto label_4;
| }
| label_7:
0x00063272 mov r2, r3 | r2 = r3;
0x00063274 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00063276 mov r0, r8 | r0 = r8;
0x00063278 str r3, [sp, 0x10] | var_10h = r3;
0x0006327a bl 0x24ec8 | fcn_00024ec8 (r0);
0x0006327e ldr r3, [sp, 0x10] | r3 = var_10h;
0x00063280 mov r4, r0 | r4 = r0;
0x00063282 b 0x63150 | goto label_5;
| label_24:
0x00063284 cmp r2, 0 |
| if (r2 != 0) {
0x00063286 bne.w 0x63126 | goto label_6;
| }
0x0006328a b 0x63272 | goto label_7;
| label_27:
0x0006328c subs r2, r0, 1 | r2 = r0 - 1;
0x0006328e it ne |
| if (r2 == r0) {
0x00063290 addne ip, r4, r0 |
| }
| if (r2 != r0) {
0x00063294 bne 0x6329c | goto label_32;
| }
0x00063296 b 0x632b2 | goto label_33;
| do {
0x00063298 subs r2, 1 | r2--;
| if (r2 == 1) {
0x0006329a beq 0x632b2 | goto label_33;
| }
| label_32:
0x0006329c ldrb r1, [ip, -0x1]! | r1 = *((ip -= 0x1));
0x000632a0 adds r3, r6, r1 | r3 = r6 + r1;
0x000632a2 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000632a6 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x000632a8 bmi 0x63298 |
| } while (r3 < r3);
0x000632aa cmp r1, 0x3a |
0x000632ac it ne |
| if (r1 == 0x3a) {
0x000632ae movne r2, r0 | r2 = r0;
| }
0x000632b0 b 0x631a2 | goto label_8;
| label_33:
0x000632b2 ldrb r1, [r4] | r1 = *(r4);
0x000632b4 cmp r1, 0x3a |
0x000632b6 it ne |
| if (r1 == 0x3a) {
0x000632b8 movne r2, r0 | r2 = r0;
| }
0x000632ba b 0x631a2 | goto label_8;
| label_26:
0x000632bc str r4, [sb, -0xc] | *((sb - 0xc)) = r4;
0x000632c0 mov r3, r7 | r3 = r7;
0x000632c2 ldrb r2, [r4] | r2 = *(r4);
0x000632c4 mov r7, sl | r7 = sl;
0x000632c6 ldr r5, [sp, 0x20] | r5 = var_20h;
0x000632c8 ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x000632cc cmp r2, 0 |
| if (r2 == 0) {
0x000632ce beq 0x633a0 | goto label_34;
| }
0x000632d0 ldr r0, [pc, 0x180] |
0x000632d2 mov r1, r4 | r1 = r4;
0x000632d4 add r0, pc | r0 = 0xc672c;
| do {
0x000632d6 add r2, r0 | r2 += r0;
0x000632d8 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000632dc add r5, r2 | r5 += r2;
0x000632de ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x000632e2 uxtb r5, r5 | r5 = (int8_t) r5;
0x000632e4 cmp r2, 0 |
0x000632e6 bne 0x632d6 |
| } while (r2 != 0);
| label_12:
0x000632e8 ldrd r2, r1, [sp, 0x14] | __asm ("ldrd r2, r1, [var_14h]");
0x000632ec strb r5, [sb, -0x5] | *((sb - 0x5)) = r5;
0x000632f0 add.w r2, r2, r1, lsl 4 | r2 += (r1 << 4);
0x000632f4 ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x000632f6 lsls r1, r2, 0x1f | r1 = r2 << 0x1f;
| if (r1 < r2) {
0x000632f8 bpl 0x63306 |
0x000632fa ldrh r2, [sb, -0x2] | r2 = *((sb - 0x2));
0x000632fe orr r2, r2, 0x400 | r2 |= 0x400;
0x00063302 strh r2, [sb, -0x2] | *((sb - 0x2)) = r2;
| }
0x00063306 mov r1, r4 | r1 = r4;
0x00063308 ldr r4, [sp, 0xc] | r4 = var_ch;
0x0006330a mov r0, fp | r0 = fp;
0x0006330c str r3, [sp, 0x18] | var_18h = r3;
0x0006330e mov r2, r4 | r2 = r4;
0x00063310 bl 0x17978 | r0 = fcn_00017978 (r0, r1, r2, r3, r4);
0x00063314 cmp r4, r0 |
0x00063316 ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r4 != r0) {
0x00063318 bne.w 0x631ec | goto label_9;
| }
0x0006331c ldrb.w r2, [r8, 0x57] | r2 = *((r8 + 0x57));
0x00063320 cmp r2, 0 |
| if (r2 != 0) {
0x00063322 bne.w 0x631ec | goto label_9;
| }
0x00063326 ldrb.w r2, [r8, 0x58] | r2 = *((r8 + 0x58));
0x0006332a cmp r2, 0 |
| if (r2 != 0) {
0x0006332c bne.w 0x631ec | goto label_9;
| }
0x00063330 mov r0, r8 | r0 = r8;
0x00063332 bl 0x21644 | fcn_00021644 (r0);
0x00063336 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00063338 b 0x631ec | goto label_9;
| label_22:
0x0006333a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006333c ldr r2, [r2] | r2 = *(r2);
| if (r2 != 0) {
0x0006333e cbnz r2, 0x63350 | goto label_35;
| }
0x00063340 b 0x63424 | goto label_36;
| do {
0x00063342 lsls r0, r0, 0xc | r0 <<= 0xc;
0x00063344 itet mi |
| if (r0 >= r0) {
0x00063346 ldrmi r2, [r2, 0x14] | r2 = *((r2 + 0x14));
| }
| if (r0 < r0) {
0x00063348 ldrpl r2, [r2, 0xc] | r2 = *((r2 + 0xc));
| }
| if (r0 >= r0) {
0x0006334a ldrmi r2, [r2, 8] | r2 = *((r2 + 8));
| }
0x0006334c cmp r2, 0 |
| if (r2 == 0) {
0x0006334e beq 0x63424 | goto label_36;
| }
| label_35:
0x00063350 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x00063352 tst.w r0, 0x82000 |
0x00063356 bne 0x63342 |
| } while ((r0 & 0x82000) != 0);
0x00063358 b 0x63360 |
| while (r0 == 0x8d) {
0x0006335a ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x0006335c cmp r2, 0 |
| if (r2 == 0) {
0x0006335e beq 0x63424 | goto label_36;
| }
0x00063360 ldrb r0, [r2] | r0 = *(r2);
0x00063362 cmp r0, 0x8d |
0x00063364 beq 0x6335a |
| }
0x00063366 cmp r0, 0xa7 |
| if (r0 == 0xa7) {
0x00063368 beq 0x63378 | goto label_37;
| }
0x0006336a cmp r0, 0x3b |
0x0006336c it eq |
| if (r0 != 0x3b) {
0x0006336e ldreq r1, [r2, 8] | r1 = *((r2 + 8));
| }
| label_11:
0x00063370 cmp r1, 0 |
| if (r1 == 0) {
0x00063372 beq.w 0x63272 | goto label_7;
| }
0x00063376 b 0x630f8 | goto label_10;
| label_37:
0x00063378 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x0006337a tst.w r0, 0x3000000 |
| if ((r0 & 0x3000000) != 0) {
0x0006337e bne 0x63370 | goto label_11;
| }
0x00063380 ldr r0, [r2, 0x2c] | r0 = *((r2 + 0x2c));
0x00063382 cmp r0, 0 |
| if (r0 == 0) {
0x00063384 beq 0x63370 | goto label_11;
| }
0x00063386 ldrsh.w r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x0006338a cmp r2, 0 |
| if (r2 < 0) {
0x0006338c blt 0x633d0 | goto label_38;
| }
| label_15:
0x0006338e ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x00063390 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00063394 ldr.w r1, [r1, r2, lsl 2] | offset_0 = r2 << 2;
| r1 = *((r1 + offset_0));
0x00063398 cmp r1, 0 |
| if (r1 == 0) {
0x0006339a beq.w 0x63272 | goto label_7;
| }
0x0006339e b 0x630f8 | goto label_10;
| label_34:
0x000633a0 mov r5, r2 | r5 = r2;
0x000633a2 b 0x632e8 | goto label_12;
| label_21:
0x000633a4 ldr.w fp, [sp, 0x34] | fp = var_34h;
0x000633a8 b 0x6320a | goto label_13;
| label_18:
0x000633aa mov r3, r4 | r3 = r4;
0x000633ac strh r1, [r5] | *(r5) = r1;
0x000633ae mov r0, r1 | r0 = r1;
0x000633b0 str r1, [r3] | *(r3) = r1;
0x000633b2 mov r4, r1 | r4 = r1;
0x000633b4 blx 0x8404 | fcn_00008404 ();
0x000633b8 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x000633bc str r4, [sp, 0x44] | var_44h = r4;
0x000633be cmp r3, 0 |
| if (r3 == 0) {
0x000633c0 beq.w 0x63236 | goto label_14;
| }
| label_16:
0x000633c4 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000633c6 movs r3, 0 | r3 = 0;
0x000633c8 str r3, [r2] | *(r2) = r3;
0x000633ca ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000633cc strh r3, [r2] | *(r2) = r3;
0x000633ce b 0x63236 | goto label_14;
| label_38:
0x000633d0 ldrsh.w r2, [r0, 0x20] | r2 = *((r0 + 0x20));
0x000633d4 cmp r2, 0 |
| if (r2 >= 0) {
0x000633d6 bge 0x6338e | goto label_15;
| }
0x000633d8 ldr r1, [pc, 0x7c] |
0x000633da add r1, pc | r1 = 0xc6836;
0x000633dc b 0x630f8 | goto label_10;
| label_30:
0x000633de ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 == 0) {
0x000633e0 cbz r3, 0x63418 | goto label_39;
| }
0x000633e2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000633e4 add.w r4, r3, r3, lsl 1 | r4 = r3 + (r3 << 1);
| do {
0x000633e8 ldr.w r1, [fp, r5, lsl 2] | offset_1 = r5 << 2;
| r1 = *((fp + offset_1));
| if (r1 != 0) {
0x000633ec cbz r1, 0x633f4 |
0x000633ee mov r0, r8 | r0 = r8;
0x000633f0 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000633f4 adds r5, 3 | r5 += 3;
0x000633f6 cmp r5, r4 |
0x000633f8 bne 0x633e8 |
| } while (r5 != r4);
| label_17:
0x000633fa mov r1, fp | r1 = fp;
0x000633fc mov r0, r8 | r0 = r8;
0x000633fe bl 0x16808 | fcn_00016808 (r0, r1);
0x00063402 b 0x633c4 | goto label_16;
| label_20:
0x00063404 movs r0, 0 | r0 = 0;
0x00063406 blx 0x8404 | fcn_00008404 ();
0x0006340a movs r3, 0 | r3 = 0;
0x0006340c str r3, [sp, 0x44] | var_44h = r3;
0x0006340e ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x00063412 cmp r3, 0 |
| if (r3 == 0) {
0x00063414 beq.w 0x63236 | goto label_14;
| }
| label_39:
0x00063418 cmp.w fp, 0 |
| if (fp == 0) {
0x0006341c beq 0x633c4 | goto label_16;
| }
0x0006341e b 0x633fa | goto label_17;
| label_31:
0x00063420 blx 0x883c | fcn_0000883c ();
| label_36:
0x00063424 movs r3, 0 | r3 = 0;
0x00063426 ldrb r3, [r3] | r3 = *(r3);
0x00063428 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x63500 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00063500 () | void fcn_00063500 (int16_t arg_0h, arithmetic arg_2h, int16_t arg_4h, int16_t arg_8h, int16_t arg_10h, int16_t arg_1ch, int16_t arg_20h, int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, arithmetic arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_44h, int16_t arg_50h, int16_t arg_57h, int16_t arg_bbch, int16_t arg_bc4h, int16_t arg_1h, arithmetic arg1, int16_t arg2, arithmetic arg3) {
| int16_t var_10h;
| int16_t var_0h;
| arithmetic var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int32_t var_ch_2;
| int16_t var_18h;
| arithmetic var_1ch;
| arithmetic var_20h;
| arithmetic var_24h;
| arithmetic x;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| arithmetic var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int32_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int32_t var_94h;
| int32_t var_94h_2;
| int16_t var_9ch;
| int16_t var_a0h;
| int32_t var_a4h;
| int32_t var_a4h_2;
| int16_t var_ach;
| int16_t var_b4h;
| int16_t var_b5h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| arithmetic var_dch;
| int16_t var_e0h;
| int16_t var_e4h;
| int16_t var_e8h;
| int16_t var_ech;
| int16_t var_f0h;
| int16_t var_f4h;
| int32_t var_f4h_2;
| int16_t var_fch;
| int16_t var_100h;
| int16_t var_104h;
| int16_t var_108h;
| int32_t var_10ch;
| int16_t var_110h;
| arithmetic var_114h;
| int16_t var_118h;
| int16_t var_11ch;
| int16_t var_124h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00063500 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00063504 mov sl, r0 | sl = r0;
0x00063506 ldr.w r3, [sl] | r3 = *(sl);
0x0006350a mov fp, r1 |
0x0006350c vpush {d8} | __asm ("vpush {d8}");
0x00063510 sub sp, 0x12c |
0x00063512 str r2, [sp, 0x1c] | var_1ch = r2;
0x00063514 ldr.w r2, [pc, 0xb2c] |
0x00063518 str r3, [sp, 0x20] | var_20h = r3;
0x0006351a ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x0006351c ldr.w r3, [pc, 0xb28] | r3 = *(0x64048);
0x00063520 add r2, pc | r2 = 0xc7568;
0x00063522 str r0, [sp, 0x24] | var_24h = r0;
0x00063524 ldr r3, [r2, r3] |
0x00063526 ldr r3, [r3] | r3 = *(0xc7568);
0x00063528 str r3, [sp, 0x124] | var_124h = r3;
0x0006352a mov.w r3, 0 | r3 = 0;
0x0006352e cbz r0, 0x63564 |
| while (1) {
0x00063530 cmp.w fp, 0 |
| if (fp != 0) {
0x00063534 beq 0x6353c |
0x00063536 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
| if (r3 == 0) {
0x0006353a cbz r3, 0x63578 | goto label_128;
| }
| }
| label_0:
0x0006353c movs r4, 1 | r4 = 1;
| label_1:
0x0006353e ldr.w r2, [pc, 0xb0c] | r2 = *(0x0006404c);
0x00063542 ldr.w r3, [pc, 0xb04] | r3 = *(0x6404a);
0x00063546 add r2, pc | r2 += pc;
0x00063548 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0006354a ldr r2, [r3] | r2 = *(0x6404a);
0x0006354c ldr r3, [sp, 0x124] | r3 = var_124h;
0x0006354e eors r2, r3 | r2 ^= r3;
0x00063550 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00063554 bne.w 0x656b2 | goto label_129;
| }
0x00063558 mov r0, r4 | r0 = r4;
0x0006355a add sp, 0x12c |
0x0006355c vpop {d8} | __asm ("vpop {d8}");
0x00063560 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00063564 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x00063568 cmp r3, 0 |
| if (r3 == 0) {
0x0006356a beq.w 0x6395e | goto label_130;
| }
| label_7:
0x0006356e mov r0, sl | r0 = sl;
0x00063570 bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x00063574 str r0, [sp, 0x24] | var_24h = r0;
0x00063576 b 0x63530 |
| }
| label_128:
0x00063578 mov r2, r3 | r2 = r3;
0x0006357a movs r1, 0x15 | r1 = 0x15;
0x0006357c mov r0, sl | r0 = sl;
0x0006357e str r3, [sp] | *(sp) = r3;
0x00063580 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x00063584 cmp r0, 0 |
| if (r0 != 0) {
0x00063586 bne 0x6353c | goto label_0;
| }
0x00063588 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006358a ldrb r3, [r3] | r3 = *(r3);
0x0006358c cmp r3, 6 |
| if (r3 <= 6) {
0x0006358e bhi 0x635d8 |
0x00063590 ldr.w r4, [fp, 0x30] | r4 = *(arg_30h);
| if (r4 != 0) {
0x00063594 cbz r4, 0x635c8 |
0x00063596 ldr.w r0, [sl] | r0 = *(sl);
0x0006359a cmp r0, 0 |
| if (r0 == 0) {
0x0006359c beq.w 0x639de | goto label_131;
| }
0x000635a0 movs r2, 0xc | r2 = 0xc;
0x000635a2 movs r3, 0 | r3 = 0;
0x000635a4 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
| label_10:
0x000635a8 cmp r0, 0 |
| if (r0 == 0) {
0x000635aa beq.w 0x642d6 | goto label_132;
| }
0x000635ae ldr.w r3, [sl, 0x80] | r3 = *((sl + 0x80));
0x000635b2 str r3, [r0] | *(r0) = r3;
0x000635b4 ldr.w r3, [pc, 0xa98] | r3 = *(0x00064050);
0x000635b8 str.w r0, [sl, 0x80] | __asm ("str.w r0, [sl, 0x80]");
0x000635bc str r4, [r0, 4] | *((r0 + 4)) = r4;
0x000635be add r3, pc | r3 += pc;
0x000635c0 str r3, [r0, 8] | *((r0 + 8)) = r3;
| label_26:
0x000635c2 movs r3, 0 | r3 = 0;
0x000635c4 str.w r3, [fp, 0x30] | __asm ("str.w r3, [arg_30h]");
| }
0x000635c8 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x000635cc bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x000635d0 orr r3, r3, 0x400000 | r3 |= 0x400000;
0x000635d4 str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
| }
0x000635d8 movs r2, 0 | r2 = 0;
0x000635da mov r1, fp | r1 = fp;
0x000635dc mov r0, sl | r0 = sl;
0x000635de bl 0x338b0 | fcn_000338b0 (r0, r1, r2);
0x000635e2 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x000635e6 str r3, [sp, 0x30] | var_30h = r3;
0x000635e8 cmp r3, 0 |
| if (r3 != 0) {
0x000635ea bne.w 0x639ac | goto label_19;
| }
0x000635ee ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x000635f2 lsls r4, r3, 8 | r4 = r3 << 8;
| if (r4 < r3) {
0x000635f4 bmi.w 0x6397a | goto label_133;
| }
| label_9:
0x000635f8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000635fa ldrb r2, [r2] | r2 = *(r2);
0x000635fc cmp r2, 9 |
| if (r2 == 9) {
0x000635fe beq.w 0x63cee | goto label_134;
| }
| label_17:
0x00063602 ldr.w r4, [fp, 0x44] | r4 = *(arg_44h);
0x00063606 mov r8, r3 | r8 = r3;
| if (r4 != 0) {
0x00063608 cbz r4, 0x63614 |
0x0006360a ldr.w r2, [fp, 0x34] | r2 = *(arg_34h);
0x0006360e cmp r2, 0 |
| if (r2 == 0) {
0x00063610 beq.w 0x63a2a | goto label_135;
| }
| }
| label_15:
0x00063614 and r3, r8, 8 | r3 = r8 & 8;
0x00063618 movs r2, 0x24 | r2 = 0x24;
0x0006361a str r3, [sp, 0x38] | var_38h = r3;
0x0006361c movs r1, 0 | r1 = 0;
0x0006361e ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x00063622 add r0, sp, 0x100 | r0 += var_100h;
0x00063624 str r3, [sp, 0x18] | var_18h = r3;
0x00063626 blx 0x839c | fcn_0000839c ();
0x0006362a ldr.w r3, [fp, 0x34] | r3 = *(arg_34h);
0x0006362e str r3, [sp, 0x34] | var_34h = r3;
0x00063630 mov r2, r3 | r2 = r3;
0x00063632 ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x00063636 ldr.w r3, [fp, 0x30] | r3 = *(arg_30h);
0x0006363a mov r4, r8 | r4 = r8;
0x0006363c str r3, [sp, 0xfc] | var_fch = r3;
0x0006363e cmp r2, 0 |
| if (r2 != 0) {
0x00063640 bne 0x63700 | goto label_136;
| }
| do {
0x00063642 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00063644 ldr r3, [r3] | r3 = *(r3);
0x00063646 cmp r3, r4 |
| if (r3 <= r4) {
0x00063648 ble.w 0x63cfc | goto label_137;
| }
0x0006364c ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006364e lsls r3, r4, 6 | r3 = r4 << 6;
0x00063650 str r3, [sp, 0x28] | x = r3;
0x00063652 add.w r8, r2, r3 | r8 = r2 + r3;
0x00063656 ldrb.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0006365a ldrd r6, r5, [r8, 0x18] | __asm ("ldrd r6, r5, [r8, 0x18]");
0x0006365e and r3, r3, 0x18 | r3 &= 0x18;
0x00063662 cmp r3, 8 |
| if (r3 == 8) {
0x00063664 beq 0x63744 | goto label_138;
| }
| label_2:
0x00063666 cmp r5, 0 |
| if (r5 != 0) {
0x00063668 beq 0x636f6 |
0x0006366a ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0006366c ldrsh.w r2, [r6, 0x22] | r2 = *((r6 + 0x22));
0x00063670 ldr r0, [r3] | r0 = *(r3);
0x00063672 cmp r2, r0 |
| if (r2 != r0) {
0x00063674 bne.w 0x641a2 | goto label_139;
| }
0x00063678 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0006367a lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
| if (r1 < r3) {
0x0006367c bmi 0x636f6 | goto label_140;
| }
0x0006367e ldr r6, [r5, 0x30] | r6 = *((r5 + 0x30));
| if (r6 != 0) {
0x00063680 cbz r6, 0x636b2 |
0x00063682 ldr.w r2, [fp, 0x30] | r2 = *(arg_30h);
0x00063686 cmp r2, 0 |
| if (r2 == 0) {
0x00063688 beq.w 0x6396e | goto label_141;
| }
| label_8:
0x0006368c ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x0006368e cmp r2, 0 |
| if (r2 == 0) {
0x00063690 beq 0x63780 | goto label_142;
| }
| if (r4 != 0) {
| label_3:
0x00063692 cbnz r4, 0x636b2 | goto label_4;
| }
0x00063694 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00063698 lsls r5, r3, 0xd | r5 = r3 << 0xd;
| if (r5 >= r3) {
0x0006369a bpl 0x636b2 | goto label_4;
| }
0x0006369c ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006369e ldr r3, [r2] | r3 = *(r2);
0x000636a0 cmp r3, 1 |
| if (r3 == 1) {
0x000636a2 beq.w 0x63a26 | goto label_143;
| }
0x000636a6 ldrb.w r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
0x000636aa tst.w r3, 0x22 |
| if ((r3 & 0x22) != 0) {
0x000636ae bne.w 0x63a26 | goto label_143;
| }
| }
| label_4:
0x000636b2 ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x000636b6 ldr.w r8, [sl] | r8 = *(sl);
0x000636ba ldr.w r6, [sl, 0xf8] | r6 = *((sl + 0xf8));
0x000636be str r3, [sp, 0x18] | var_18h = r3;
0x000636c0 ldr.w r3, [r8, 0x50] | r3 = *((r8 + 0x50));
0x000636c4 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 >= r3) {
0x000636c6 bmi 0x636dc |
0x000636c8 ldr r0, [sp, 0x28] | r0 = x;
0x000636ca ldr r2, [sp, 0x18] | r2 = var_18h;
0x000636cc ldr.w r1, [fp, 0x44] | r1 = *(arg_44h);
0x000636d0 add r2, r0 | r2 += r0;
0x000636d2 ldr r0, [r2, 0x30] | r0 = *((r2 + 0x30));
0x000636d4 ldr r5, [r2, 0x1c] | r5 = *((r2 + 0x1c));
0x000636d6 str r0, [sp, 0x2c] | var_2ch = r0;
0x000636d8 cmp r1, 0 |
| if (r1 == 0) {
0x000636da beq 0x637cc | goto label_144;
| }
| }
| label_5:
0x000636dc ldr r3, [sp, 0x20] | r3 = var_20h;
0x000636de ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000636e2 cmp r3, 0 |
| if (r3 != 0) {
0x000636e4 bne.w 0x639ac | goto label_19;
| }
0x000636e8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000636ea ldrb r3, [r3] | r3 = *(r3);
0x000636ec cmp r3, 8 |
0x000636ee itt hi |
| if (r3 <= 8) {
0x000636f0 ldrhi r3, [fp, 0x30] | r3 = *(arg_30h);
| }
| if (r3 <= 8) {
0x000636f4 str r3, [sp, 0xfc] | var_fch = r3;
| goto label_140;
| }
| }
| label_140:
0x000636f6 adds r4, 1 | r4++;
| label_14:
0x000636f8 ldr.w r3, [fp, 0x34] | r3 = *(arg_34h);
0x000636fc cmp r3, 0 |
0x000636fe beq 0x63642 |
| } while (r3 == 0);
| label_136:
0x00063700 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00063702 mov r1, fp | r1 = fp;
0x00063704 mov r0, sl | r0 = sl;
0x00063706 bl 0x758e8 | fcn_000758e8 (r0, r1, r2, r3, r4, r5, r6);
0x0006370a ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x0006370e mov r4, r0 | r4 = r0;
0x00063710 cmp r3, 0 |
| if (r3 != 0) {
0x00063712 bne.w 0x6353e | goto label_1;
| }
0x00063716 ldr.w r3, [sl, 0xdc] | r3 = *((sl + 0xdc));
0x0006371a ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x0006371e cmp r3, 0 |
| if (r3 == 0) {
0x00063720 beq.w 0x639d8 | goto label_145;
| }
0x00063724 ldr r1, [r2] | r1 = *(r2);
0x00063726 it lt |
| if (r3 >= 0) {
0x00063728 ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x0006372a ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x0006372e it lt |
| if (r3 >= 0) {
0x00063730 addlt r3, r3, -1 | r3 += -1;
| }
0x00063734 cmp r1, 0 |
| if (r1 == 0) {
0x00063736 beq.w 0x639cc | goto label_146;
| }
0x0006373a ldr.w r3, [pc, 0x918] | r3 = *(0x00064054);
0x0006373e add r3, pc | r3 += pc;
0x00063740 adds r3, 4 | r3 += 4;
0x00063742 b 0x639d6 | goto label_13;
| label_138:
0x00063744 ldr.w r1, [r8, 0x30] | r1 = *((r8 + 0x30));
0x00063748 ldr.w r0, [fp, 0x24] | r0 = *(arg_24h);
0x0006374c bl 0x310cc | r0 = fcn_000310cc (r0, r1);
0x00063750 cmp r0, 0 |
| if (r0 == 0) {
0x00063752 beq 0x63666 | goto label_2;
| }
0x00063754 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00063756 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00063758 lsls r0, r3, 0x12 | r0 = r3 << 0x12;
| if (r0 < r3) {
0x0006375a bmi 0x63666 | goto label_2;
| }
0x0006375c ldrb.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x00063760 ldr.w r1, [r8, 0x30] | r1 = *((r8 + 0x30));
0x00063764 ldr.w r0, [fp, 0x24] | r0 = *(arg_24h);
0x00063768 bic r3, r3, 0x28 | r3 = BIT_MASK (r3, 0x28);
0x0006376c strb.w r3, [r8, 0x2c] | *((r8 + 0x2c)) = r3;
0x00063770 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00063772 ldrb.w r2, [r3, 0x2c] | r2 = *((r3 + 0x2c));
0x00063776 and r2, r2, 0x40 | r2 &= 0x40;
0x0006377a bl 0xacf0 | fcn_0000acf0 (r0, r1, r2);
0x0006377e b 0x63666 | goto label_2;
| label_142:
0x00063780 lsls r2, r3, 4 | r2 = r3 << 4;
| if (r2 < r3) {
0x00063782 bmi 0x63692 | goto label_3;
| }
0x00063784 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00063788 lsls r3, r3, 4 | r3 <<= 4;
| if (r3 < r3) {
0x0006378a bmi 0x63692 | goto label_3;
| }
0x0006378c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006378e ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00063790 lsls r7, r3, 0xd | r7 = r3 << 0xd;
| if (r7 < r3) {
0x00063792 bmi.w 0x63692 | goto label_3;
| }
0x00063796 ldr.w r0, [sl] | r0 = *(sl);
0x0006379a cmp r0, 0 |
| if (r0 == 0) {
0x0006379c beq.w 0x64c32 | goto label_147;
| }
0x000637a0 movs r2, 0xc | r2 = 0xc;
0x000637a2 movs r3, 0 | r3 = 0;
0x000637a4 bl 0x21784 | fcn_00021784 (r0, r1);
| label_41:
0x000637a8 ldr.w r3, [sl] | r3 = *(sl);
0x000637ac cmp r0, 0 |
| if (r0 == 0) {
0x000637ae beq.w 0x64f7e | goto label_148;
| }
0x000637b2 ldr.w r3, [sl, 0x80] | r3 = *((sl + 0x80));
0x000637b6 str r3, [r0] | *(r0) = r3;
0x000637b8 ldr.w r3, [pc, 0x89c] | r3 = *(0x00064058);
0x000637bc str.w r0, [sl, 0x80] | __asm ("str.w r0, [sl, 0x80]");
0x000637c0 str r6, [r0, 4] | *((r0 + 4)) = r6;
0x000637c2 add r3, pc | r3 += pc;
0x000637c4 str r3, [r0, 8] | *((r0 + 8)) = r3;
| label_65:
0x000637c6 movs r3, 0 | r3 = 0;
0x000637c8 str r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x000637ca b 0x636b2 | goto label_4;
| label_144:
0x000637cc ldr r2, [r5, 0x44] | r2 = *((r5 + 0x44));
0x000637ce cmp r2, 0 |
| if (r2 != 0) {
0x000637d0 bne 0x636dc | goto label_5;
| }
0x000637d2 ldr r0, [r5, 0x3c] | r0 = *((r5 + 0x3c));
0x000637d4 ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x000637d6 cmp r0, 0 |
| if (r0 == 0) {
0x000637d8 beq.w 0x639e8 | goto label_149;
| }
0x000637dc ldr.w r1, [fp, 0x3c] | r1 = *(arg_3ch);
0x000637e0 cmp r1, 0 |
| if (r1 != 0) {
0x000637e2 bne.w 0x636dc | goto label_5;
| }
0x000637e6 ldr r1, [r0, 0x10] | r1 = *((r0 + 0x10));
0x000637e8 cmp r1, 0 |
| if (r1 != 0) {
0x000637ea bne.w 0x636dc | goto label_5;
| }
0x000637ee ldr.w lr, [fp, 4] |
0x000637f2 tst.w lr, 0x100 |
| if ((lr & 0x100) != 0) {
0x000637f6 bne.w 0x636dc | goto label_5;
| }
| label_11:
0x000637fa ldr.w ip, [r2] | ip = *(r2);
0x000637fe cmp.w ip, 0 |
| if (ip == 0) {
0x00063802 beq.w 0x636dc | goto label_5;
| }
0x00063806 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00063808 lsls r7, r1, 0x1f | r7 = r1 << 0x1f;
| if (r7 < r1) {
0x0006380a bmi.w 0x636dc | goto label_5;
| }
0x0006380e cmp r0, 0 |
| if (r0 == 0) {
0x00063810 beq.w 0x63a08 | goto label_150;
| }
0x00063814 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00063816 ldr r0, [r0] | r0 = *(r0);
0x00063818 cmp r0, 1 |
| if (r0 > 1) {
0x0006381a bgt.w 0x636dc | goto label_5;
| }
0x0006381e ldr r0, [sp, 0x38] | r0 = var_38h;
0x00063820 cmp r0, 0 |
| if (r0 != 0) {
0x00063822 bne.w 0x636dc | goto label_5;
| }
0x00063826 ldr.w r0, [fp, 0x30] | r0 = *(arg_30h);
| if (r0 == 0) {
0x0006382a cbz r0, 0x63834 | goto label_151;
| }
0x0006382c ldr r7, [r5, 0x30] | r7 = *((r5 + 0x30));
0x0006382e cmp r7, 0 |
| if (r7 != 0) {
0x00063830 bne.w 0x636dc | goto label_5;
| }
| label_151:
0x00063834 ldr.w r7, [fp, 0x24] | r7 = *(arg_24h);
0x00063838 cmp r7, 0 |
| if (r7 != 0) {
0x0006383a bne.w 0x636dc | goto label_5;
| }
0x0006383e tst.w lr, 1 |
| if ((lr & 1) != 0) {
0x00063842 bne.w 0x636dc | goto label_5;
| }
| label_12:
0x00063846 lsls r1, r1, 0x12 | r1 <<= 0x12;
| if (r1 < r1) {
0x00063848 bmi.w 0x636dc | goto label_5;
| }
0x0006384c ldr r1, [sp, 0x18] | r1 = var_18h;
0x0006384e ldr r7, [sp, 0x28] | r7 = x;
0x00063850 adds r7, r1, r7 | r7 = r1 + r7;
0x00063852 ldrb.w sb, [r7, 0x2c] | sb = *((r7 + 0x2c));
0x00063856 ands r1, sb, 0x60 | r1 = sb & 0x60;
| if (r1 == sb) {
0x0006385a beq.w 0x65760 | goto label_152;
| }
0x0006385e cmp.w ip, 1 |
| if (ip > 1) {
0x00063862 bgt.w 0x636dc | goto label_5;
| }
0x00063866 ldr r1, [sp, 0x38] | r1 = var_38h;
0x00063868 cmp r1, 0 |
| if (r1 != 0) {
0x0006386a bne.w 0x636dc | goto label_5;
| }
0x0006386e ldr r1, [r2, 0x18] | r1 = *((r2 + 0x18));
0x00063870 ldrb.w r1, [r1, 0x2b] | r1 = *((r1 + 0x2b));
0x00063874 cmp r1, 1 |
| if (r1 == 1) {
0x00063876 beq.w 0x636dc | goto label_5;
| }
0x0006387a tst.w lr, 1 |
| if ((lr & 1) != 0) {
0x0006387e bne.w 0x636dc | goto label_5;
| }
0x00063882 tst.w sb, 0x10 |
| if ((sb & 0x10) != 0) {
0x00063886 bne.w 0x636dc | goto label_5;
| }
0x0006388a cmp r4, 0 |
| if (r4 <= 0) {
0x0006388c ble.w 0x658fc | goto label_153;
| }
0x00063890 movs r1, 1 | r1 = 1;
0x00063892 str r1, [sp, 0x40] | var_40h = r1;
| label_92:
0x00063894 ldrb.w r1, [r2, 0x2c] | r1 = *((r2 + 0x2c));
0x00063898 lsls r7, r1, 0x19 | r7 = r1 << 0x19;
| if (r7 < r1) {
0x0006389a bmi.w 0x636dc | goto label_5;
| }
| label_93:
0x0006389e ldr r7, [sp, 0x28] | r7 = x;
0x000638a0 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000638a2 add r1, r7 | r1 += r7;
0x000638a4 ldrb.w r7, [r1, 0x2e] | r7 = *((r1 + 0x2e));
0x000638a8 lsls r1, r7, 0x1f | r1 = r7 << 0x1f;
| if (r1 >= r7) {
0x000638aa bpl 0x638bc | goto label_154;
| }
0x000638ac ldr r1, [sp, 0x18] | r1 = var_18h;
0x000638ae add.w r1, r1, r4, lsl 6 | r1 += (r4 << 6);
0x000638b2 ldr r1, [r1, 0x44] | r1 = *((r1 + 0x44));
0x000638b4 ldrb r1, [r1, 0x12] | r1 = *((r1 + 0x12));
0x000638b6 cmp r1, 0 |
| if (r1 == 0) {
0x000638b8 beq.w 0x636dc | goto label_5;
| }
| label_154:
0x000638bc cmp.w ip, 1 |
| if (ip <= 1) {
0x000638c0 ble 0x638f0 | goto label_155;
| }
0x000638c2 add.w r2, r2, ip, lsl 6 | r2 += (ip << 6);
0x000638c6 ldrb r2, [r2, -0x14] | r2 = *((r2 - 0x14));
0x000638ca lsls r1, r2, 0x1a | r1 = r2 << 0x1a;
| if (r1 >= r2) {
0x000638cc bpl 0x638f0 | goto label_155;
| }
0x000638ce tst.w sb, 4 |
| if ((sb & 4) != 0) {
0x000638d2 bne.w 0x636dc | goto label_5;
| }
0x000638d6 lsls r2, r7, 0x1d | r2 = r7 << 0x1d;
| if (r2 < r7) {
0x000638d8 bmi.w 0x636dc | goto label_5;
| }
0x000638dc ldr r2, [sp, 0x18] | r2 = var_18h;
0x000638de ldr r1, [sp, 0x28] | r1 = x;
0x000638e0 add r2, r1 | r2 += r1;
0x000638e2 ldr r2, [r2, 0x34] | r2 = *((r2 + 0x34));
0x000638e4 cmp r2, 0 |
| if (r2 != 0) {
0x000638e6 bne.w 0x636dc | goto label_5;
| }
0x000638ea lsls r7, r7, 0x1c | r7 <<= 0x1c;
| if (r7 < r7) {
0x000638ec bmi.w 0x636dc | goto label_5;
| }
| label_155:
0x000638f0 ldr r2, [r5, 0x34] | r2 = *((r5 + 0x34));
0x000638f2 str r2, [sp, 0x3c] | var_3ch = r2;
0x000638f4 cmp r2, 0 |
| if (r2 == 0) {
0x000638f6 beq.w 0x65922 | goto label_126;
| }
0x000638fa ldr r2, [r5, 0x30] | r2 = *((r5 + 0x30));
0x000638fc cmp r2, 0 |
| if (r2 != 0) {
0x000638fe bne.w 0x636dc | goto label_5;
| }
0x00063902 ldr r2, [sp, 0x38] | r2 = var_38h;
0x00063904 cmp r2, 0 |
| if (r2 != 0) {
0x00063906 bne.w 0x636dc | goto label_5;
| }
0x0006390a tst.w lr, 1 |
| if ((lr & 1) != 0) {
0x0006390e bne.w 0x636dc | goto label_5;
| }
0x00063910 add r6, sp, 0x394 | r6 = sp + 0x394;
0x00063912 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00063914 cmp r2, 0 |
| if (r2 != 0) {
0x00063916 bne.w 0x636dc | goto label_5;
| }
0x0006391a mov r1, r5 | r1 = r5;
0x0006391c mov ip, r3 |
| label_6:
0x0006391e ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x00063920 tst.w r2, 9 |
| if ((r2 & 9) != 0) {
0x00063924 bne.w 0x636dc | goto label_5;
| }
0x00063928 ldr r2, [r1, 0x34] | r2 = *((r1 + 0x34));
| if (r2 == 0) {
0x0006392a cbz r2, 0x63934 | goto label_156;
| }
0x0006392c ldrb r7, [r1] | r7 = *(r1);
0x0006392e cmp r7, 0x87 |
| if (r7 != 0x87) {
0x00063930 bne.w 0x636dc | goto label_5;
| }
| label_156:
0x00063934 ldr r7, [r1, 0x20] | r7 = *((r1 + 0x20));
0x00063936 ldr r3, [r7] | r3 = *(r7);
0x00063938 cmp r3, 0 |
| if (r3 <= 0) {
0x0006393a ble.w 0x636dc | goto label_5;
| }
0x0006393e ldr r1, [r1, 0x44] | r1 = *((r1 + 0x44));
0x00063940 cmp r1, 0 |
| if (r1 != 0) {
0x00063942 bne.w 0x636dc | goto label_5;
| }
0x00063946 cmp r4, 0 |
| if (r4 <= 0) {
0x00063948 ble 0x63954 | goto label_157;
| }
0x0006394a ldrb.w r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x0006394e lsls r1, r1, 0x19 | r1 <<= 0x19;
| if (r1 < r1) {
0x00063950 bmi.w 0x636dc | goto label_5;
| }
| label_157:
0x00063954 cmp r2, 0 |
| if (r2 == 0) {
0x00063956 beq.w 0x65e5e | goto label_158;
| }
0x0006395a mov r1, r2 | r1 = r2;
0x0006395c b 0x6391e | goto label_6;
| label_130:
0x0006395e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00063960 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00063962 lsls r5, r3, 0x1c | r5 = r3 << 0x1c;
0x00063964 itt pl |
| if (r5 < r3) {
0x00063966 movpl r3, 1 | r3 = 1;
| }
| if (r5 < r3) {
0x00063968 strbpl r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| }
0x0006396c b 0x6356e | goto label_7;
| label_141:
0x0006396e ldr r2, [sp, 0x18] | r2 = var_18h;
0x00063970 ldr r2, [r2] | r2 = *(r2);
0x00063972 cmp r2, 1 |
| if (r2 > 1) {
0x00063974 bgt.w 0x6368c | goto label_8;
| }
0x00063978 b 0x63692 | goto label_3;
| label_133:
0x0006397a ldr.w r4, [fp, 0x20] | r4 = *(arg_20h);
0x0006397e mov r1, r4 | r1 = r4;
0x00063980 add.w r0, r4, 8 | r0 = r4 + 8;
0x00063984 bl 0x1b9d4 | r0 = fcn_0001b9d4 (r0, r1);
| if (r0 == 0) {
0x00063988 cbnz r0, 0x63998 |
0x0006398a ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x0006398e bic r3, r3, 0x800000 | r3 = BIT_MASK (r3, 0x800000);
0x00063992 str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x00063996 b 0x635f8 | goto label_9;
| }
0x00063998 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x0006399a cmp r2, 0 |
| if (r2 == 0) {
0x0006399c beq.w 0x64804 | goto label_159;
| }
| label_33:
0x000639a0 ldr.w r1, [pc, 0x6b8] | r1 = *(0x0006405c);
0x000639a4 mov r0, sl | r0 = sl;
0x000639a6 add r1, pc | r1 += pc;
0x000639a8 bl 0x21598 | fcn_00021598 (r0, r1);
| label_19:
0x000639ac movs r4, 1 | r4 = 1;
| label_27:
0x000639ae ldr.w r3, [sl, 0xdc] | r3 = *((sl + 0xdc));
0x000639b2 ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x000639b6 cmp r3, 0 |
| if (r3 != 0) {
0x000639b8 beq 0x639d8 |
0x000639ba ldr r1, [r2] | r1 = *(r2);
0x000639bc it lt |
| if (r3 >= 0) {
0x000639be ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x000639c0 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x000639c4 it lt |
| if (r3 >= 0) {
0x000639c6 addlt r3, r3, -1 | r3 += -1;
| }
| if (r1 != 0) {
0x000639ca cbnz r1, 0x63a1c | goto label_160;
| }
| label_146:
0x000639cc ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x000639ce add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000639d2 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_13:
0x000639d6 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| }
| label_145:
0x000639d8 str.w r3, [sl, 0xdc] | __asm ("str.w r3, [sl, 0xdc]");
0x000639dc b 0x6353e | goto label_1;
| label_131:
0x000639de movs r1, 0 | r1 = 0;
0x000639e0 movs r0, 0xc | r0 = 0xc;
0x000639e2 bl 0x13558 | fcn_00013558 (r0);
0x000639e6 b 0x635a8 | goto label_10;
| label_149:
0x000639e8 ldr.w lr, [fp, 4] |
0x000639ec tst.w lr, 0x100 |
| if ((lr & 0x100) == 0) {
0x000639f0 beq.w 0x637fa | goto label_11;
| }
0x000639f4 ldr.w ip, [r2] | ip = *(r2);
0x000639f8 cmp.w ip, 0 |
| if (ip == 0) {
0x000639fc beq.w 0x636dc | goto label_5;
| }
0x00063a00 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00063a02 lsls r0, r1, 0x1f | r0 = r1 << 0x1f;
| if (r0 < r1) {
0x00063a04 bmi.w 0x636dc | goto label_5;
| }
| label_150:
0x00063a08 ldr.w r0, [fp, 0x30] | r0 = *(arg_30h);
0x00063a0c cmp r0, 0 |
| if (r0 == 0) {
0x00063a0e beq.w 0x6560c | goto label_161;
| }
0x00063a12 ldr r7, [r5, 0x30] | r7 = *((r5 + 0x30));
0x00063a14 cmp r7, 0 |
| if (r7 != 0) {
0x00063a16 bne.w 0x636dc | goto label_5;
| }
0x00063a1a b 0x63846 | goto label_12;
| label_160:
0x00063a1c ldr.w r3, [pc, 0x640] |
0x00063a20 add r3, pc | r3 = 0xc7a84;
0x00063a22 adds r3, 4 | r3 += 4;
0x00063a24 b 0x639d6 | goto label_13;
| label_143:
0x00063a26 movs r4, 1 | r4 = 1;
0x00063a28 b 0x636f8 | goto label_14;
| label_135:
0x00063a2a lsls r0, r3, 0xb | r0 = r3 << 0xb;
| if (r0 < r3) {
0x00063a2c bmi.w 0x63614 | goto label_15;
| }
0x00063a30 ldrb.w r3, [sl, 0xd0] | r3 = *((sl + 0xd0));
0x00063a34 cmp r3, 1 |
| if (r3 > 1) {
0x00063a36 bhi.w 0x63614 | goto label_15;
| }
0x00063a3a ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x00063a3e str r3, [sp, 0x44] | var_44h = r3;
0x00063a40 cmp r3, 0 |
| if (r3 == 0) {
0x00063a42 beq.w 0x64d3e | goto label_162;
| }
| label_45:
0x00063a46 ldr.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x00063a4a ldr.w r3, [sl] | r3 = *(sl);
0x00063a4e str r2, [sp, 0x2c] | var_2ch = r2;
0x00063a50 ldr.w r2, [fp, 0x24] | r2 = *(arg_24h);
0x00063a54 str r3, [sp, 0x28] | x = r3;
0x00063a56 str r2, [sp, 0x50] | var_50h = r2;
0x00063a58 ldr.w r2, [fp, 0x28] | r2 = *(arg_28h);
0x00063a5c str r2, [sp, 0x54] | var_54h = r2;
0x00063a5e ldr.w r2, [fp, 0x2c] | r2 = *(arg_2ch);
0x00063a62 str r2, [sp, 0x58] | var_58h = r2;
0x00063a64 cmp r3, 0 |
| if (r3 == 0) {
0x00063a66 beq.w 0x64d2a | goto label_163;
| }
0x00063a6a mov r0, r3 | r0 = r3;
0x00063a6c movs r2, 0x40 | r2 = 0x40;
0x00063a6e movs r3, 0 | r3 = 0;
0x00063a70 bl 0x21784 | fcn_00021784 (r0, r1);
0x00063a74 str r0, [sp, 0x18] | var_18h = r0;
0x00063a76 cmp r0, 0 |
| if (r0 == 0) {
0x00063a78 beq.w 0x64fc6 | goto label_164;
| }
| label_44:
0x00063a7c movs r2, 0x40 | r2 = 0x40;
0x00063a7e movs r1, 0 | r1 = 0;
0x00063a80 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00063a82 blx 0x839c | fcn_0000839c ();
0x00063a86 ldr.w r3, [pc, 0x5dc] | r3 = *(0x00064064);
0x00063a8a mov r1, fp | r1 = fp;
0x00063a8c str.w sl, [sp, 0xdc] | __asm ("str.w sl, [var_dch]");
0x00063a90 add r3, pc | r3 += pc;
0x00063a92 str r3, [sp, 0xe0] | var_e0h = r3;
0x00063a94 ldr.w r3, [pc, 0x5d0] | r3 = *(0x00064068);
0x00063a98 add r3, pc | r3 += pc;
0x00063a9a str r3, [sp, 0xe4] | var_e4h = r3;
0x00063a9c add r3, sp, 0xdc | r3 += var_dch;
0x00063a9e mov r0, r3 | r0 = r3;
0x00063aa0 str r3, [sp, 0x48] | var_48h = r3;
0x00063aa2 movs r3, 0 | r3 = 0;
0x00063aa4 strd r3, r3, [sp, 0xe8] | __asm ("strd r3, r3, [var_e8h]");
0x00063aa8 strd r3, r3, [sp, 0xf0] | __asm ("strd r3, r3, [var_f4h]");
0x00063aac bl 0x31b70 | fcn_00031b70 (r0, r1, r2, r3, r4, r5);
0x00063ab0 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00063ab4 ands r2, r3, 8 | r2 = r3 & 8;
| if (r2 == r3) {
0x00063ab8 beq.w 0x64eae | goto label_165;
| }
| label_59:
0x00063abc vmov.i32 q8, 0 | __asm ("vmov.i32 q8, 0");
0x00063ac0 add.w r2, fp, 0x20 | r2 += arg_20h;
0x00063ac4 bic r3, r3, 8 | r3 = BIT_MASK (r3, 8);
0x00063ac8 movs r1, 0 | r1 = 0;
0x00063aca orr r3, r3, 0x100000 | r3 |= 0x100000;
0x00063ace mov r0, sl | r0 = sl;
0x00063ad0 vst1.32 {d16, d17}, [r2] | __asm ("vst1.32 {d16, d17}, [r2]");
0x00063ad4 str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x00063ad8 movs r3, 1 | r3 = 1;
0x00063ada ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00063adc bl 0x328e8 | fcn_000328e8 (r0, r1, r2, r3, r4);
0x00063ae0 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00063ae2 mov r1, r0 | r1 = r0;
0x00063ae4 movs r3, 1 | r3 = 1;
0x00063ae6 mov r0, sl | r0 = sl;
0x00063ae8 bl 0x328e8 | fcn_000328e8 (r0, r1, r2, r3, r4);
0x00063aec str r0, [sp, 0x4c] | var_4ch = r0;
| if (r0 != 0) {
0x00063aee cbz r0, 0x63b00 |
0x00063af0 ldr.w r1, [fp, 0x30] | r1 = *(arg_30h);
| if (r1 == 0) {
0x00063af4 cbz r1, 0x63b00 | goto label_73;
| }
0x00063af6 ldr r3, [r1] | r3 = *(r1);
0x00063af8 ldr r5, [r0] | r5 = *(r0);
0x00063afa cmp r3, r5 |
| if (r3 <= r5) {
0x00063afc ble.w 0x65350 | goto label_166;
| }
| }
| label_73:
0x00063b00 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x00063b04 movs r2, 0 | r2 = 0;
0x00063b06 ldr.w r1, [fp, 0x1c] | r1 = *(arg_1ch);
0x00063b0a add.w sb, sp, 0x108 | sb += var_108h;
0x00063b0e str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00063b10 adds r3, 4 | r3 += 4;
0x00063b12 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x00063b16 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00063b18 str r4, [sp, 0xc0] | var_c0h = r4;
0x00063b1a str.w sl, [sp, 0xfc] | __asm ("str.w sl, [var_fch]");
0x00063b1e str r3, [sp, 0xc4] | var_c4h = r3;
0x00063b20 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00063b22 str r2, [sp, 0x108] | var_108h = r2;
0x00063b24 str r2, [sp, 0xd0] | var_d0h = r2;
0x00063b26 str r3, [sp, 0xcc] | var_cch = r3;
0x00063b28 ldr.w r3, [pc, 0x540] | r3 = *(0x0006406c);
0x00063b2c str r2, [sp, 0xc8] | var_c8h = r2;
0x00063b2e strd r2, r2, [sp, 0x10c] | __asm ("strd r2, r2, [var_110h]");
0x00063b32 add r3, pc | r3 += pc;
0x00063b34 str r3, [sp, 0x100] | var_100h = r3;
0x00063b36 ldr.w r3, [pc, 0x538] | r3 = *(0x00064070);
0x00063b3a add r3, pc | r3 += pc;
0x00063b3c str r3, [sp, 0x104] | var_104h = r3;
0x00063b3e add r3, sp, 0xc0 | r3 += var_c0h;
0x00063b40 str r3, [sp, 0x38] | var_38h = r3;
0x00063b42 str r3, [sp, 0x114] | var_114h = r3;
| if (r1 == 0) {
0x00063b44 cbz r1, 0x63b6c | goto label_98;
| }
0x00063b46 ldr r5, [r1] | r5 = *(r1);
0x00063b48 cmp r5, r2 |
| if (r5 <= r2) {
0x00063b4a ble.w 0x657c8 | goto label_167;
| }
0x00063b4e add.w r6, r1, 0x18 | r6 = r1 + 0x18;
0x00063b52 add r7, sp, 0xfc | r7 += var_fch;
| do {
0x00063b54 ldr r1, [r6, -0x10] | r1 = *((r6 - 0x10));
| if (r1 != 0) {
0x00063b58 cbz r1, 0x63b62 |
0x00063b5a mov r0, r7 | r0 = r7;
0x00063b5c bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
| if (r0 != 0) {
0x00063b60 cbnz r0, 0x63b6a | goto label_168;
| }
| }
0x00063b62 subs r5, 1 | r5--;
0x00063b64 add.w r6, r6, 0x10 | r6 += 0x10;
0x00063b68 bne 0x63b54 |
| } while (r5 != 1);
| label_168:
0x00063b6a ldr r1, [sp, 0xc8] | r1 = var_c8h;
| label_98:
0x00063b6c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00063b6e str r4, [sp, 0xa0] | var_a0h = r4;
0x00063b70 str.w sl, [sp, 0xfc] | __asm ("str.w sl, [var_fch]");
0x00063b74 strd r3, r1, [sp, 0xa4] | __asm ("strd r3, r1, [var_a4h]");
0x00063b78 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00063b7a str r4, [sp, 0x34] | var_34h = r4;
0x00063b7c str r3, [sp, 0xac] | var_ach = r3;
0x00063b7e ldr r3, [sp, 0x38] | r3 = var_38h;
0x00063b80 ldr.w r6, [fp, 0x30] | r6 = *(arg_30h);
0x00063b84 vldr d16, [sp, 0xa0] | __asm ("vldr d16, [sp, 0xa0]");
0x00063b88 vldr d17, [sp, 0xa8] | __asm ("vldr d17, [sp, 0xa8]");
0x00063b8c str r3, [sp, 0x114] | var_114h = r3;
0x00063b8e ldr.w r3, [pc, 0x4e4] | r3 = *(0x00064074);
0x00063b92 vstr d16, [sp, 0xc0] | __asm ("vstr d16, [sp, 0xc0]");
0x00063b96 vstr d17, [sp, 0xc8] | __asm ("vstr d17, [sp, 0xc8]");
0x00063b9a add r3, pc | r3 += pc;
0x00063b9c str r3, [sp, 0x100] | var_100h = r3;
0x00063b9e ldr.w r3, [pc, 0x4d8] | r3 = *(0x00064078);
0x00063ba2 add r3, pc | r3 += pc;
0x00063ba4 str r3, [sp, 0x104] | var_104h = r3;
0x00063ba6 movs r3, 0 | r3 = 0;
0x00063ba8 str r3, [sp, 0x108] | var_108h = r3;
0x00063baa str r3, [sp, 0xd0] | var_d0h = r3;
0x00063bac strd r3, r3, [sb, 4] | __asm ("strd r3, r3, [var_110h]");
| if (r6 == 0) {
0x00063bb0 cbz r6, 0x63bd4 | goto label_169;
| }
0x00063bb2 ldr r5, [r6] | r5 = *(r6);
0x00063bb4 cmp r5, r3 |
| if (r5 <= r3) {
0x00063bb6 ble 0x63bd4 | goto label_169;
| }
0x00063bb8 adds r6, 0x18 | r6 += 0x18;
0x00063bba add r7, sp, 0xfc | r7 += var_fch;
| do {
0x00063bbc ldr r1, [r6, -0x10] | r1 = *((r6 - 0x10));
| if (r1 != 0) {
0x00063bc0 cbz r1, 0x63bca |
0x00063bc2 mov r0, r7 | r0 = r7;
0x00063bc4 bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
| if (r0 != 0) {
0x00063bc8 cbnz r0, 0x63bd2 | goto label_170;
| }
| }
0x00063bca subs r5, 1 | r5--;
0x00063bcc add.w r6, r6, 0x10 | r6 += 0x10;
0x00063bd0 bne 0x63bbc |
| } while (r5 != 1);
| label_170:
0x00063bd2 ldr r1, [sp, 0xc8] | r1 = var_c8h;
| label_169:
0x00063bd4 mov r3, r1 | r3 = r1;
| if (r1 != 0) {
0x00063bd6 cbz r1, 0x63bda |
0x00063bd8 ldr r3, [r1] | r3 = *(r1);
| }
0x00063bda ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00063bdc mov r0, sl | r0 = sl;
0x00063bde str r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
0x00063be0 movs r3, 0 | r3 = 0;
0x00063be2 bl 0x328e8 | fcn_000328e8 (r0, r1, r2, r3, r4);
0x00063be6 movs r3, 0 | r3 = 0;
0x00063be8 mov r1, r0 | r1 = r0;
0x00063bea ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00063bec mov r0, sl | r0 = sl;
0x00063bee bl 0x328e8 | fcn_000328e8 (r0, r1, r2, r3, r4);
0x00063bf2 ldr.w r3, [pc, 0x488] | r3 = *(0x0006407c);
0x00063bf6 mov r7, sl | r7 = sl;
0x00063bf8 mov r5, r0 | r5 = r0;
0x00063bfa ldr.w sl, [sp, 0x44] | sl = var_44h;
0x00063bfe movs r6, 0 | r6 = 0;
0x00063c00 str.w r8, [sp, 0x5c] | __asm ("str.w r8, [var_5ch]");
0x00063c04 add r3, pc | r3 += pc;
0x00063c06 str.w fp, [sp, 0x44] | __asm ("str.w fp, [var_44h]");
0x00063c0a str r3, [sp, 0x3c] | var_3ch = r3;
0x00063c0c ldr.w r3, [pc, 0x470] | r3 = *(0x00064080);
0x00063c10 add r3, pc | r3 += pc;
0x00063c12 str r3, [sp, 0x40] | var_40h = r3;
0x00063c14 b 0x63c70 |
| while (r2 >= r2) {
0x00063c16 mov r2, r5 | r2 = r5;
| if (r5 != 0) {
0x00063c18 cbz r5, 0x63c1c |
0x00063c1a ldr r2, [r5] | r2 = *(r5);
| }
0x00063c1c mov r1, r5 | r1 = r5;
0x00063c1e str r2, [r4, 0x50] | *((r4 + 0x50)) = r2;
0x00063c20 mov r0, r7 | r0 = r7;
0x00063c22 mov r2, r3 | r2 = r3;
0x00063c24 movs r3, 0 | r3 = 0;
0x00063c26 bl 0x328e8 | r0 = fcn_000328e8 (r0, r1, r2, r3, r4);
0x00063c2a mov r5, r0 | r5 = r0;
| label_16:
0x00063c2c ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
| if (r1 != 0) {
0x00063c2e cbz r1, 0x63c46 |
0x00063c30 movs r3, 0 | r3 = 0;
0x00063c32 ldr r0, [sp, 0x28] | r0 = x;
0x00063c34 mov r2, r3 | r2 = r3;
0x00063c36 bl 0x31eb4 | fcn_00031eb4 (r0, r1, r2, r3);
0x00063c3a mov r1, r5 | r1 = r5;
0x00063c3c mov r2, r0 | r2 = r0;
0x00063c3e mov r0, r7 | r0 = r7;
0x00063c40 bl 0x301b0 | r0 = fcn_000301b0 (r0, r1, r2);
0x00063c44 mov r5, r0 | r5 = r0;
| }
0x00063c46 ldr.w ip, [r7, 0x2c] | ip = *((r7 + 0x2c));
0x00063c4a movs r2, 0 | r2 = 0;
0x00063c4c movs r1, 0x4b | r1 = 0x4b;
0x00063c4e mov r0, sl | r0 = sl;
0x00063c50 add.w r3, ip, 1 | r3 = ip + 1;
0x00063c54 add.w ip, ip, 2 |
0x00063c58 str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x00063c5a str.w ip, [r7, 0x2c] | __asm ("str.w ip, [r7, 0x2c]");
0x00063c5e str.w ip, [r4, 0x38] | __asm ("str.w ip, [r4, 0x38]");
0x00063c62 str r6, [sp] | *(sp) = r6;
0x00063c64 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00063c68 ldr r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x00063c6a cmp r4, 0 |
| if (r4 == 0) {
0x00063c6c beq.w 0x64866 | goto label_171;
| }
0x00063c70 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00063c72 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00063c74 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00063c76 lsls r2, r2, 0xb | r2 <<= 0xb;
0x00063c78 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00063c7a bpl 0x63c16 |
| }
0x00063c7c ldr r2, [sp, 0x34] | r2 = var_34h;
0x00063c7e str r6, [sp, 0xd0] | var_d0h = r6;
0x00063c80 str r2, [sp, 0x90] | var_90h = r2;
0x00063c82 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00063c84 strd r2, r5, [sp, 0x94] | __asm ("strd r2, r5, [var_94h]");
0x00063c88 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00063c8a str r2, [sp, 0x9c] | var_9ch = r2;
0x00063c8c ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00063c8e vldr d16, [sp, 0x90] | __asm ("vldr d16, [sp, 0x90]");
0x00063c92 vldr d17, [sp, 0x98] | __asm ("vldr d17, [sp, 0x98]");
0x00063c96 strd r6, r6, [sb] | __asm ("strd r6, r6, [sb]");
0x00063c9a str.w r6, [sb, 8] | __asm ("str.w r6, [var_110h]");
0x00063c9e str r2, [sp, 0x100] | var_100h = r2;
0x00063ca0 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00063ca2 str r7, [sp, 0xfc] | var_fch = r7;
0x00063ca4 vstr d16, [sp, 0xc0] | __asm ("vstr d16, [sp, 0xc0]");
0x00063ca8 vstr d17, [sp, 0xc8] | __asm ("vstr d17, [sp, 0xc8]");
0x00063cac str r2, [sp, 0x104] | var_104h = r2;
0x00063cae ldr r2, [sp, 0x38] | r2 = var_38h;
0x00063cb0 str r2, [sp, 0x114] | var_114h = r2;
| if (r3 == 0) {
0x00063cb2 cbz r3, 0x63cde | goto label_172;
| }
0x00063cb4 ldr.w r8, [r3] | r8 = *(r3);
0x00063cb8 cmp.w r8, 0 |
| if (r8 <= 0) {
0x00063cbc ble 0x63cde | goto label_172;
| }
0x00063cbe add.w fp, r3, 0x18 |
0x00063cc2 add r5, sp, 0xfc | r5 += var_fch;
| do {
0x00063cc4 ldr r1, [fp, -0x10] | r1 = var_10h;
| if (r1 != 0) {
0x00063cc8 cbz r1, 0x63cd2 |
0x00063cca mov r0, r5 | r0 = r5;
0x00063ccc bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
| if (r0 != 0) {
0x00063cd0 cbnz r0, 0x63cdc | goto label_173;
| }
| }
0x00063cd2 subs.w r8, r8, 1 | r8--;
0x00063cd6 add.w fp, fp, 0x10 |
0x00063cda bne 0x63cc4 |
| } while (r8 != r8);
| label_173:
0x00063cdc ldr r5, [sp, 0xc8] | r5 = var_c8h;
| label_172:
0x00063cde mov r3, r5 | r3 = r5;
| if (r5 != 0) {
0x00063ce0 cbz r5, 0x63ce4 |
0x00063ce2 ldr r3, [r5] | r3 = *(r5);
| }
0x00063ce4 str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x00063ce6 movs r3, 1 | r3 = 1;
0x00063ce8 strb.w r3, [r4, 0x60] | *((r4 + 0x60)) = r3;
0x00063cec b 0x63c2c | goto label_16;
| label_134:
0x00063cee mov r1, fp | r1 = fp;
0x00063cf0 mov r0, sl | r0 = sl;
0x00063cf2 bl 0x2c968 | fcn_0002c968 (r0, r1, r2);
0x00063cf6 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00063cfa b 0x63602 | goto label_17;
| label_137:
0x00063cfc ldr.w r1, [fp, 0x24] | r1 = *(arg_24h);
| if (r1 != 0) {
0x00063d00 cbz r1, 0x63d0a |
0x00063d02 ldrb r2, [r1] | r2 = *(r1);
0x00063d04 cmp r2, 0x2c |
| if (r2 == 0x2c) {
0x00063d06 beq.w 0x6476a | goto label_174;
| }
| }
| label_30:
0x00063d0a cmp r3, 0 |
| if (r3 <= 0) {
0x00063d0c ble.w 0x63ea2 | goto label_175;
| }
0x00063d10 ldr r5, [sp, 0x18] | r5 = var_18h;
0x00063d12 movs r6, 0 | r6 = 0;
0x00063d14 ldr r3, [pc, 0x36c] |
0x00063d16 str.w fp, [sp, 0x28] | __asm ("str.w fp, [x]");
0x00063d1a ldr.w fp, [sp, 0x20] | fp = var_20h;
0x00063d1e add.w ip, r5, 8 |
0x00063d22 mov r4, ip | r4 = ip;
0x00063d24 add r3, pc | r3 = 0xc7dac;
0x00063d26 str r3, [sp, 0x40] | var_40h = r3;
0x00063d28 str.w ip, [sp, 0x3c] | __asm ("str.w ip, [var_3ch]");
| label_20:
0x00063d2c ldrd r3, r2, [r4, 0x30] | __asm ("ldrd r3, r2, [r4, 0x30]");
0x00063d30 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x00063d32 bne 0x63d46 |
0x00063d34 ldr r2, [r4, 8] | r2 = *((r4 + 8));
| if (r2 == 0) {
0x00063d36 cbz r2, 0x63d46 | goto label_176;
| }
0x00063d38 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00063d3a movs r1, 0x14 | r1 = 0x14;
0x00063d3c mov r0, sl | r0 = sl;
0x00063d3e str r3, [sp] | *(sp) = r3;
0x00063d40 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00063d42 bl 0x24140 | fcn_00024140 (r0, r1);
| }
| label_176:
0x00063d46 ldr r7, [r4, 0x14] | r7 = *((r4 + 0x14));
0x00063d48 cmp r7, 0 |
| if (r7 == 0) {
0x00063d4a beq.w 0x63e92 | goto label_177;
| }
0x00063d4e add.w r8, sp, 0xdc | r8 += var_dch;
0x00063d52 movs r3, 0 | r3 = 0;
0x00063d54 ldr r0, [sp, 0x28] | r0 = x;
0x00063d56 mov r1, r8 | r1 = r8;
0x00063d58 str r3, [sp, 0xdc] | var_dch = r3;
0x00063d5a bl 0x14480 | fcn_00014480 (r0, r1);
0x00063d5e ldr.w r3, [sl, 0xd8] | r3 = *((sl + 0xd8));
0x00063d62 ldr r2, [sp, 0xdc] | r2 = var_dch;
0x00063d64 add r3, r2 | r3 += r2;
0x00063d66 str.w r3, [sl, 0xd8] | __asm ("str.w r3, [sl, 0xd8]");
0x00063d6a ldr.w r3, [fp, 0x50] | r3 = *(arg_50h);
0x00063d6e lsls r2, r3, 0x13 | r2 = r3 << 0x13;
| if (r2 >= r3) {
0x00063d70 bmi 0x63d8e |
0x00063d72 add.w r3, r5, r6, lsl 6 | r3 = r5 + (r6 << 6);
0x00063d76 ldrb.w r3, [r3, 0x2e] | r3 = *((r3 + 0x2e));
0x00063d7a lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00063d7c bpl.w 0x64192 | goto label_178;
| }
0x00063d80 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00063d82 ldrb r2, [r3, 0x12] | r2 = *((r3 + 0x12));
| if (r2 == 0) {
0x00063d84 cbz r2, 0x63d8e | goto label_23;
| }
0x00063d86 ldr r3, [r3] | r3 = *(r3);
0x00063d88 cmp r3, 1 |
| if (r3 <= 1) {
0x00063d8a ble.w 0x64192 | goto label_178;
| }
| }
| label_23:
0x00063d8e ldr.w r2, [sl, 0xf8] | r2 = *((sl + 0xf8));
0x00063d92 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00063d94 str r2, [sp, 0x2c] | var_2ch = r2;
0x00063d96 str.w r3, [sl, 0xf8] | __asm ("str.w r3, [sl, 0xf8]");
| if (r6 == 0) {
0x00063d9a cbnz r6, 0x63dc6 |
0x00063d9c ldr r3, [r5] | r3 = *(r5);
0x00063d9e cmp r3, 1 |
| if (r3 != 1) {
0x00063da0 beq 0x63dac |
0x00063da2 ldrb.w r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x00063da6 tst.w r3, 0x22 |
| if ((r3 & 0x22) == 0) {
0x00063daa beq 0x63dc6 | goto label_179;
| }
| }
0x00063dac ldrb.w r3, [r5, 0x2e] | r3 = *((r5 + 0x2e));
0x00063db0 lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 < r3) {
0x00063db2 bpl 0x63dba |
0x00063db4 ldr r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x00063db6 ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
| if (r3 == 0) {
0x00063db8 cbz r3, 0x63dd2 | goto label_180;
| }
| }
0x00063dba ldrb.w r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x00063dbe ands r3, r3, 0x40 | r3 &= 0x40;
| if (r3 == r3) {
0x00063dc2 beq.w 0x646c2 | goto label_181;
| }
| }
| label_179:
0x00063dc6 add.w r3, r5, r6, lsl 6 | r3 = r5 + (r6 << 6);
0x00063dca ldrb.w r3, [r3, 0x2e] | r3 = *((r3 + 0x2e));
0x00063dce lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 < r3) {
0x00063dd0 bpl 0x63de0 |
| label_180:
0x00063dd2 ldr.w sb, [r4, 0x3c] | sb = *((r4 + 0x3c));
0x00063dd6 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00063dda cmp r3, 0 |
| if (r3 > 0) {
0x00063ddc bgt.w 0x64160 | goto label_182;
| }
| }
0x00063de0 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00063de2 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00063de4 lsls r2, r3, 7 | r2 = r3 << 7;
| if (r2 < r3) {
0x00063de6 bmi.w 0x641c6 | goto label_183;
| }
0x00063dea ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00063dec cmp r3, r4 |
0x00063dee mov sb, r3 | sb = r3;
| if (r3 <= r4) {
0x00063df0 blo 0x63dfe | goto label_184;
| }
0x00063df2 b 0x641c6 | goto label_183;
| do {
| label_18:
0x00063df4 add.w sb, sb, 0x40 | sb += 0x40;
0x00063df8 cmp sb, r4 |
| if (sb >= r4) {
0x00063dfa bhs.w 0x641c6 | goto label_183;
| }
| label_184:
0x00063dfe ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00063e02 cmp r3, 0 |
0x00063e04 beq 0x63df4 |
| } while (r3 == 0);
0x00063e06 ldrb.w r3, [sb, 0x25] | r3 = *((sb + 0x25));
0x00063e0a lsls r3, r3, 0x1a | r3 <<= 0x1a;
| if (r3 < r3) {
0x00063e0c bmi 0x63df4 | goto label_18;
| }
0x00063e0e ldr.w r0, [sb, 8] | r0 = *((sb + 8));
0x00063e12 cmp r0, 0 |
| if (r0 == 0) {
0x00063e14 beq 0x63df4 | goto label_18;
| }
0x00063e16 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x00063e1a ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x00063e1c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00063e1e ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x00063e20 cmp r2, r3 |
| if (r2 != r3) {
0x00063e22 bne 0x63df4 | goto label_18;
| }
0x00063e24 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00063e26 blx 0x8540 | r0 = fcn_00008540 ();
0x00063e2a cmp r0, 0 |
| if (r0 != 0) {
0x00063e2c bne 0x63df4 | goto label_18;
| }
0x00063e2e ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x00063e32 ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x00063e34 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00063e38 cmp r2, 0 |
| if (r2 == 0) {
0x00063e3a beq.w 0x642c8 | goto label_185;
| }
| label_25:
0x00063e3e ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00063e40 ands r1, r1, 0x1000000 | r1 &= 0x1000000;
| if (r1 != r1) {
0x00063e44 bne 0x63df4 | goto label_18;
| }
0x00063e46 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00063e4a cmp r3, 0 |
| if (r3 != 0) {
0x00063e4c bne.w 0x641b6 | goto label_186;
| }
| label_24:
0x00063e50 movs r1, 0 | r1 = 0;
0x00063e52 ldr.w r3, [sb, 0x28] | r3 = *((sb + 0x28));
0x00063e56 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x00063e58 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00063e5a str r1, [sp] | *(sp) = r1;
0x00063e5c movs r1, 0x73 | r1 = 0x73;
0x00063e5e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00063e62 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00063e66 ldrsh.w r3, [r3, 2] | r3 = *((r3 + 2));
0x00063e6a strh r3, [r7, 2] | *((r7 + 2)) = r3;
| label_22:
0x00063e6c ldrb.w r3, [fp, 0x57] | r3 = *(arg_57h);
0x00063e70 cmp r3, 0 |
| if (r3 != 0) {
0x00063e72 bne.w 0x639ac | goto label_19;
| }
0x00063e76 ldr r0, [sp, 0x28] | r0 = x;
0x00063e78 add r1, sp, 0xc0 | r1 += var_c0h;
0x00063e7a str r3, [sp, 0xc0] | var_c0h = r3;
0x00063e7c bl 0x14480 | fcn_00014480 (r0, r1);
0x00063e80 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00063e82 ldr r2, [sp, 0xc0] | r2 = var_c0h;
0x00063e84 str.w r3, [sl, 0xf8] | __asm ("str.w r3, [sl, 0xf8]");
0x00063e88 ldr.w r3, [sl, 0xd8] | r3 = *((sl + 0xd8));
0x00063e8c subs r3, r3, r2 | r3 -= r2;
0x00063e8e str.w r3, [sl, 0xd8] | __asm ("str.w r3, [sl, 0xd8]");
| label_177:
0x00063e92 ldr r3, [r5] | r3 = *(r5);
0x00063e94 adds r6, 1 | r6++;
0x00063e96 adds r4, 0x40 | r4 += 0x40;
0x00063e98 cmp r3, r6 |
| if (r3 > r6) {
0x00063e9a bgt.w 0x63d2c | goto label_20;
| }
0x00063e9e ldr.w fp, [sp, 0x28] | fp = x;
| label_175:
0x00063ea2 ldr.w r2, [fp, 0x1c] | r2 = *(arg_1ch);
0x00063ea6 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00063ea8 adds r0, 4 | r0 += 4;
0x00063eaa ldr r5, [sp, 0xfc] | r5 = var_fch;
0x00063eac str r2, [sp, 0x2c] | var_2ch = r2;
0x00063eae ldr.w r2, [fp, 0x24] | r2 = *(arg_24h);
0x00063eb2 str r2, [sp, 0x3c] | var_3ch = r2;
0x00063eb4 ldr.w r2, [fp, 0x28] | r2 = *(arg_28h);
0x00063eb8 str r2, [sp, 0x28] | x = r2;
0x00063eba ldr.w r2, [fp, 0x2c] | r2 = *(arg_2ch);
0x00063ebe str r2, [sp, 0x44] | var_44h = r2;
0x00063ec0 and r2, r3, 1 | r2 = r3 & 1;
0x00063ec4 and r3, r3, 9 | r3 &= 9;
0x00063ec8 strb.w r2, [sp, 0xb4] | var_b4h = r2;
0x00063ecc cmp r3, 1 |
| if (r3 == 1) {
0x00063ece beq.w 0x64cde | goto label_187;
| }
| label_43:
0x00063ed2 mov.w r7, -1 | r7 = -1;
| if (r5 != 0) {
0x00063ed6 cbz r5, 0x63f10 |
0x00063ed8 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x00063eda movs r2, 0 | r2 = 0;
0x00063edc mov r1, r5 | r1 = r5;
0x00063ede mov r0, sl | r0 = sl;
0x00063ee0 ldr r3, [r4] | r3 = *(r4);
0x00063ee2 bl 0x2c2d4 | fcn_0002c2d4 (r0, r1, r2, r3);
0x00063ee6 ldr r3, [r5] | r3 = *(r5);
0x00063ee8 ldr.w r2, [sl, 0x28] | r2 = *((sl + 0x28));
0x00063eec ldr r1, [r4] | r1 = *(r4);
0x00063eee adds r3, 1 | r3++;
0x00063ef0 str r0, [sp, 4] | var_4h = r0;
0x00063ef2 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00063ef4 add r3, r1 | r3 += r1;
0x00063ef6 adds r1, r2, 1 | r1 = r2 + 1;
0x00063ef8 str.w r1, [sl, 0x28] | __asm ("str.w r1, [sl, 0x28]");
0x00063efc mvn r1, 7 | r1 = ~7;
0x00063f00 str r1, [sp, 8] | var_8h = r1;
0x00063f02 movs r1, 0 | r1 = 0;
0x00063f04 str r1, [sp] | *(sp) = r1;
0x00063f06 movs r1, 0x76 | r1 = 0x76;
0x00063f08 str r2, [sp, 0x104] | var_104h = r2;
0x00063f0a bl 0x2e4d0 | r0 = fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x00063f0e mov r7, r0 | r7 = r0;
| }
0x00063f10 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00063f12 str r7, [sp, 0x110] | var_110h = r7;
0x00063f14 ldrb r3, [r3] | r3 = *(r3);
0x00063f16 cmp r3, 0xc |
| if (r3 == 0xc) {
0x00063f18 beq.w 0x64c3e | goto label_188;
| }
0x00063f1c ldr.w r1, [fp, 4] | r1 = *(arg_4h);
| label_42:
0x00063f20 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x00063f24 lsls r0, r1, 0x11 | r0 = r1 << 0x11;
0x00063f26 mov r1, fp | r1 = fp;
0x00063f28 mov r0, sl | r0 = sl;
0x00063f2a add.w r2, r3, -1 | r2 = r3 + -1;
0x00063f2e str r3, [sp, 0x40] | var_40h = r3;
0x00063f30 it pl |
| if (r0 < r1) {
0x00063f32 movpl r3, 0x140 | r3 = 0x140;
| }
0x00063f36 str.w r2, [sl, 0x38] | __asm ("str.w r2, [sl, 0x38]");
0x00063f3a it pl |
| if (r0 >= r1) {
0x00063f3c strhpl r3, [fp, 2] | __asm ("strhpl r3, [arg_2h]");
| }
0x00063f40 bl 0x6a028 | fcn_0006a028 (r0, r1, r2, r3);
0x00063f44 ldr.w r3, [fp, 8] | r3 = *(arg_8h);
| if (r3 == 0) {
0x00063f48 cbnz r3, 0x63f50 |
0x00063f4a cmp r7, 0 |
| if (r7 >= 0) {
0x00063f4c bge.w 0x64c0c | goto label_189;
| }
| }
| label_40:
0x00063f50 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00063f54 ands r3, r3, 1 | r3 &= 1;
| if (r3 != r3) {
0x00063f58 bne.w 0x6480c | goto label_190;
| }
| label_34:
0x00063f5c ldr r2, [sp, 0x28] | r2 = x;
0x00063f5e strb.w r3, [sp, 0xb5] | var_b5h = r3;
0x00063f62 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00063f64 orrs r3, r2 | r3 |= r2;
0x00063f66 str r3, [sp, 0x38] | var_38h = r3;
| if (r3 != r2) {
0x00063f68 bne.w 0x644ce | goto label_191;
| }
0x00063f6c ldrb.w r2, [sp, 0xb4] | r2 = var_b4h;
0x00063f70 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00063f74 ldr.w r6, [fp, 0x44] | r6 = *(arg_44h);
0x00063f78 str r2, [sp, 0x30] | var_30h = r2;
0x00063f7a subs r2, 0 |
0x00063f7c and r3, r3, 0x4000 | r3 &= 0x4000;
0x00063f80 it ne |
| if (r2 == 0) {
0x00063f82 movne r2, 1 | r2 = 1;
| }
0x00063f84 orr.w r3, r3, r2, lsl 8 | r3 |= (r2 << 8);
0x00063f88 str r3, [sp, 0x28] | x = r3;
0x00063f8a cmp r6, 0 |
| if (r6 == 0) {
0x00063f8c beq.w 0x64310 | goto label_74;
| }
0x00063f90 ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x00063f94 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00063f96 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00063f98 ldr r4, [r3] | r4 = *(r3);
0x00063f9a ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x00063f9e mov r7, r3 | r7 = r3;
0x00063fa0 cmp r3, 0 |
| if (r3 == 0) {
0x00063fa2 beq.w 0x64e62 | goto label_192;
| }
| label_55:
0x00063fa6 mov r3, r4 | r3 = r4;
0x00063fa8 movs r4, 0 | r4 = 0;
0x00063faa ldr r2, [r6, 0x30] | r2 = *((r6 + 0x30));
0x00063fac movs r1, 0x76 | r1 = 0x76;
0x00063fae mov r0, r7 | r0 = r7;
0x00063fb0 str r4, [sp] | *(sp) = r4;
0x00063fb2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00063fb6 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x00063fb8 movs r1, 0x73 | r1 = 0x73;
0x00063fba mov r0, r7 | r0 = r7;
0x00063fbc str r4, [sp] | *(sp) = r4;
0x00063fbe adds r2, r3, 1 | r2 = r3 + 1;
0x00063fc0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00063fc4 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x00063fc6 movs r1, 0x73 | r1 = 0x73;
0x00063fc8 mov r0, r7 | r0 = r7;
0x00063fca str r4, [sp] | *(sp) = r4;
0x00063fcc adds r2, r3, 2 | r2 = r3 + 2;
0x00063fce bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00063fd2 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x00063fd4 movs r1, 0x73 | r1 = 0x73;
0x00063fd6 mov r0, r7 | r0 = r7;
0x00063fd8 str r4, [sp] | *(sp) = r4;
0x00063fda adds r2, r3, 3 | r2 = r3 + 3;
0x00063fdc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00063fe0 ldr r3, [r6, 8] | r3 = *((r6 + 8));
| if (r3 != 0) {
0x00063fe2 cbz r3, 0x64008 |
0x00063fe4 mov r2, r4 | r2 = r4;
0x00063fe6 ldr.w r4, [sl, 0x2c] | r4 = *((sl + 0x2c));
0x00063fea ldr.w ip, [r3] | ip = *(r3);
0x00063fee movs r1, 0x4b | r1 = 0x4b;
0x00063ff0 mov r0, r7 | r0 = r7;
0x00063ff2 adds r3, r4, 1 | r3 = r4 + 1;
0x00063ff4 add r4, ip | r4 += ip;
0x00063ff6 add ip, r3 |
0x00063ff8 str r3, [r6, 0x44] | *((r6 + 0x44)) = r3;
0x00063ffa str.w r4, [sl, 0x2c] | __asm ("str.w r4, [sl, 0x2c]");
0x00063ffe add.w r4, ip, -1 | r4 = ip + -1;
0x00064002 str r4, [sp] | *(sp) = r4;
0x00064004 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x00064008 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x0006400c movs r4, 0 | r4 = 0;
0x0006400e movs r2, 1 | r2 = 1;
0x00064010 movs r1, 0x47 | r1 = 0x47;
0x00064012 mov r0, r7 | r0 = r7;
0x00064014 adds r3, 1 | r3++;
0x00064016 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x0006401a str r3, [r6, 0x54] | *((r6 + 0x54)) = r3;
0x0006401c str r4, [sp] | *(sp) = r4;
0x0006401e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00064022 ldrb r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00064024 cmp r3, 0 |
| if (r3 != 0) {
0x00064026 bne.w 0x65376 | goto label_193;
| }
0x0006402a ldr r1, [pc, 0x5c] |
0x0006402c mov r4, r6 | r4 = r6;
0x0006402e str r5, [sp, 0x34] | var_34h = r5;
0x00064030 mov r5, r7 | r5 = r7;
0x00064032 str.w fp, [sp, 0x44] | __asm ("str.w fp, [var_44h]");
0x00064036 add r1, pc | r1 = 0xc80c4;
0x00064038 addw sb, r1, 0xba4 | __asm ("addw sb, r1, aav.0x000000ff");
0x0006403c add.w r8, r1, 0xbb0 | r8 = r1 + 0xbb0;
0x00064040 mov fp, r1 |
0x00064042 b 0x6411c |
| while (r2 < r2) {
0x0006408c ldrb r2, [r4, 0x11] | r2 = *((r4 + 0x11));
0x0006408e cmp r2, 0x5a |
| if (r2 == 0x5a) {
0x00064090 beq 0x64124 | goto label_194;
| }
0x00064092 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00064094 mov r0, sl | r0 = sl;
0x00064096 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x00064098 movs r3, 0 | r3 = 0;
0x0006409a mov r2, r3 | r2 = r3;
0x0006409c bl 0x2c2d4 | fcn_0002c2d4 (r0, r1, r2, r3);
0x000640a0 ldrd r2, r3, [sl, 0x28] | __asm ("ldrd r2, r3, [sl, 0x28]");
0x000640a4 mov r7, r0 | r7 = r0;
0x000640a6 adds r1, r2, 1 | r1 = r2 + 1;
0x000640a8 str.w r1, [sl, 0x28] | __asm ("str.w r1, [sl, 0x28]");
0x000640ac adds r1, r3, 1 | r1 = r3 + 1;
0x000640ae adds r3, 3 | r3 += 3;
0x000640b0 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x000640b2 str r1, [r4, 0x40] | *((r4 + 0x40)) = r1;
0x000640b4 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x000640b8 cmp r0, 0 |
| if (r0 == 0) {
0x000640ba beq.w 0x64e3c | goto label_195;
| }
0x000640be ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000640c0 movs r1, 0x76 | r1 = 0x76;
0x000640c2 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000640c4 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x000640c6 cmp r3, 0x69 |
0x000640c8 itt eq |
| if (r3 != 0x69) {
0x000640ca ldreq r3, [r0, 0x10] | r3 = *((r0 + 0x10));
| }
| if (r3 != 0x69) {
0x000640cc moveq r2, 1 | r2 = 1;
| }
0x000640ce mov r0, r5 | r0 = r5;
0x000640d0 it eq |
| if (r3 != 0x69) {
0x000640d2 strbeq r2, [r3] | *(r3) = r2;
| }
0x000640d4 mov.w r3, 0 | r3 = 0;
0x000640d8 it eq |
| if (r3 != 0x69) {
0x000640da ldreq r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
| }
0x000640dc str r3, [sp] | *(sp) = r3;
0x000640de movs r3, 2 | r3 = 2;
0x000640e0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000640e4 ldr r3, [r5] | r3 = *(r5);
0x000640e6 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x000640ea cmp r2, 0 |
| if (r2 != 0) {
0x000640ec bne.w 0x64f0e | goto label_196;
| }
| label_53:
0x000640f0 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000640f2 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x000640f4 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000640f8 lsls r3, r3, 2 | r3 <<= 2;
0x000640fa subs r3, 0x14 | r3 -= 0x14;
0x000640fc add r3, r2 | r3 += r2;
0x000640fe movs r2, 0xf8 | r2 = 0xf8;
0x00064100 str r7, [r3, 0x10] | *((r3 + 0x10)) = r7;
0x00064102 strb r2, [r3, 1] | *((r3 + 1)) = r2;
| label_54:
0x00064104 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00064106 movs r2, 0 | r2 = 0;
0x00064108 movs r1, 0x47 | r1 = 0x47;
0x0006410a mov r0, r5 | r0 = r5;
0x0006410c str r2, [sp] | *(sp) = r2;
0x0006410e adds r3, 1 | r3++;
0x00064110 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_21:
0x00064114 ldr r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x00064116 cmp r4, 0 |
| if (r4 == 0) {
0x00064118 beq.w 0x6430a | goto label_197;
| }
0x0006411c ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0006411e ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00064120 lsls r2, r2, 0x13 | r2 <<= 0x13;
0x00064122 bmi 0x6408c |
| }
| label_194:
0x00064124 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00064126 cmp r3, r8 |
0x00064128 it ne |
| if (r3 != r8) {
0x0006412a cmpne r3, sb | __asm ("cmpne r3, sb");
| }
0x0006412c ite eq |
| if (r3 != r8) {
0x0006412e moveq r1, 1 | r1 = 1;
| }
| if (r3 == r8) {
0x00064130 movne r1, 0 | r1 = 0;
| }
| if (r3 == r8) {
0x00064132 beq.w 0x642e4 | goto label_198;
| }
0x00064136 addw r2, fp, 0xbbc | __asm ("addw r2, arg_bbch");
0x0006413a addw r0, fp, 0xbc4 | __asm ("addw r0, arg_bc4h");
0x0006413e cmp r3, r0 |
0x00064140 it ne |
| if (r3 == r0) {
0x00064142 cmpne r3, r2 | __asm ("cmpne r3, r2");
| goto label_199;
| }
| if (r3 != r0) {
| label_199:
0x00064144 bne 0x64114 | goto label_21;
| }
0x00064146 ldr.w r2, [sl, 0x28] | r2 = *((sl + 0x28));
0x0006414a ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x0006414c adds r0, r2, 1 | r0 = r2 + 1;
0x0006414e str.w r0, [sl, 0x28] | __asm ("str.w r0, [sl, 0x28]");
0x00064152 mov r0, r5 | r0 = r5;
0x00064154 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x00064156 str r1, [sp] | *(sp) = r1;
0x00064158 movs r1, 0x73 | r1 = 0x73;
0x0006415a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006415e b 0x64114 | goto label_21;
| label_182:
0x00064160 mov.w r8, 0 | r8 = 0;
0x00064164 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x00064168 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0006416a movs r1, 9 | r1 = 9;
0x0006416c str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00064170 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00064174 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x00064176 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x0006417a cmp r2, r3 |
| if (r2 != r3) {
0x0006417c beq 0x6418a |
0x0006417e ldr r0, [sp, 0x24] | r0 = var_24h;
0x00064180 movs r1, 0x73 | r1 = 0x73;
0x00064182 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00064186 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x0006418a ldrh.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x0006418e strh r3, [r7, 2] | *((r7 + 2)) = r3;
0x00064190 b 0x63e6c | goto label_22;
| label_178:
0x00064192 ldr r3, [sp, 0x28] | r3 = x;
0x00064194 mov r1, r7 | r1 = r7;
0x00064196 mov r0, sl | r0 = sl;
0x00064198 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x0006419a mov r3, r4 | r3 = r4;
0x0006419c bl 0x33f78 | fcn_00033f78 (r0, r1, r2, r3);
0x000641a0 b 0x63d8e | goto label_23;
| label_139:
0x000641a2 ldr.w r1, [pc, 0xbf4] |
0x000641a6 ldr r3, [r6] | r3 = *(r6);
0x000641a8 str r0, [sp] | *(sp) = r0;
0x000641aa mov r0, sl | r0 = sl;
0x000641ac add r1, pc | r1 = 0xc8f4a;
0x000641ae bl 0x21598 | fcn_00021598 (r0, r1);
0x000641b2 b.w 0x639ac | goto label_19;
| label_186:
0x000641b6 ldr.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x000641ba ldr r0, [sp, 0x24] | r0 = var_24h;
0x000641bc str r1, [sp] | *(sp) = r1;
0x000641be movs r1, 9 | r1 = 9;
0x000641c0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000641c4 b 0x63e50 | goto label_24;
| label_183:
0x000641c6 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000641ca adds r3, 1 | r3++;
0x000641cc str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x000641d0 str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x000641d2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000641d4 ldrd sb, r3, [r3, 0x6c] | __asm ("ldrd sb, r3, [r3, 0x6c]");
0x000641d8 cmp sb, r3 |
| if (sb >= r3) {
0x000641da bge.w 0x64dfc | goto label_200;
| }
0x000641de ldr r0, [sp, 0x24] | r0 = var_24h;
0x000641e0 add.w r2, sb, 1 | r2 = sb + 1;
0x000641e4 add.w ip, sb, sb, lsl 2 |
0x000641e8 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000641ec str r2, [sp, 0x44] | var_44h = r2;
0x000641ee movs r1, 0 | r1 = 0;
0x000641f0 ldr r3, [r0, 0x68] | r3 = *((r0 + 0x68));
0x000641f2 str r2, [r0, 0x6c] | *((r0 + 0x6c)) = r2;
0x000641f4 movs r0, 8 | r0 = 8;
0x000641f6 str.w r0, [r3, ip, lsl 2] | __asm ("str.w r0, [r3, ip, lsl 2]");
0x000641fa add.w r3, r3, ip, lsl 2 | r3 += (ip << 2);
0x000641fe adds r2, r3, 4 | r2 = r3 + 4;
0x00064200 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00064204 strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_51:
0x00064208 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006420a str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0006420c lsls r3, r6, 6 | r3 = r6 << 6;
0x0006420e adds r2, r5, r3 | r2 = r5 + r3;
0x00064210 str r3, [sp, 0x48] | var_48h = r3;
0x00064212 ldrb.w r3, [r2, 0x2d] | r3 = *((r2 + 0x2d));
0x00064216 orr r3, r3, 0x10 | r3 |= 0x10;
0x0006421a strb.w r3, [r2, 0x2d] | *((r2 + 0x2d)) = r3;
0x0006421e ands r3, r3, 8 | r3 &= 8;
| if (r3 == r3) {
0x00064222 beq.w 0x64b70 | goto label_201;
| }
0x00064226 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00064228 movs r1, 0xc | r1 = 0xc;
0x0006422a ldr.w r2, [pc, 0xb70] | r2 = *(0x00064d9c);
0x0006422e mov r0, sl | r0 = sl;
0x00064230 strb.w r1, [sp, 0xdc] | var_dch = r1;
0x00064234 movs r1, 1 | r1 = 1;
0x00064236 str r3, [sp, 0xe0] | var_e0h = r3;
0x00064238 movs r3, 0 | r3 = 0;
0x0006423a add r2, pc | r2 += pc;
0x0006423c str r3, [sp, 0xe4] | var_e4h = r3;
0x0006423e str r3, [sp, 0xf0] | var_f0h = r3;
0x00064240 strd r3, r3, [sp, 0xe8] | __asm ("strd r3, r3, [var_e8h]");
0x00064244 mov r3, r4 | r3 = r4;
0x00064246 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x0006424a mov r2, r8 | r2 = r8;
0x0006424c mov r1, r7 | r1 = r7;
0x0006424e mov r0, sl | r0 = sl;
0x00064250 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00064254 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00064256 ldrh r2, [r7, 2] | r2 = *((r7 + 2));
0x00064258 strh r2, [r3, 0x26] | *((r3 + 0x26)) = r2;
| label_39:
0x0006425a ldr.w r8, [sp, 0x24] | r8 = var_24h;
0x0006425e movs r1, 0 | r1 = 0;
0x00064260 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00064262 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00064264 str r1, [sp] | *(sp) = r1;
0x00064266 mov r0, r8 | r0 = r8;
0x00064268 movs r1, 0x43 | r1 = 0x43;
0x0006426a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006426e ldr r0, [sp, 0x24] | r0 = var_24h;
0x00064270 cmp.w sb, 0 |
0x00064274 ldr.w r2, [r8, 0x6c] | r2 = *((r8 + 0x6c));
0x00064278 ldr r3, [r0] | r3 = *(r0);
0x0006427a it lt |
| if (sb >= 0) {
0x0006427c addlt sb, r2, -1 | sb = r2 + -1;
| }
0x00064280 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00064284 cmp r3, 0 |
| if (r3 != 0) {
0x00064286 bne.w 0x6485c | goto label_202;
| }
0x0006428a ldr r3, [r0, 0x68] | r3 = *((r0 + 0x68));
0x0006428c add.w r1, sb, sb, lsl 2 | r1 = sb + (sb << 2);
0x00064290 add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| label_35:
0x00064294 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00064296 movs r3, 0 | r3 = 0;
0x00064298 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0006429a strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x0006429e str.w r3, [sl, 0x1c] | __asm ("str.w r3, [sl, 0x1c]");
0x000642a2 add r2, r5 | r2 += r5;
0x000642a4 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x000642a6 and r3, r3, 0x10800 | r3 &= 0x10800;
0x000642aa cmp.w r3, 0x10000 |
| if (r3 != 0x10000) {
0x000642ae bne.w 0x63e6c | goto label_22;
| }
0x000642b2 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000642b4 vldr d16, [r4, 0x18] | __asm ("vldr d16, [r4, 0x18]");
0x000642b8 ldrh r1, [r7, 2] | r1 = *((r7 + 2));
0x000642ba adds r2, r3, 4 | r2 = r3 + 4;
0x000642bc vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000642c0 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x000642c2 strh r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x000642c4 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000642c6 b 0x63e6c | goto label_22;
| label_185:
0x000642c8 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x000642ca ldr r1, [r2, 0x10] | r1 = *((r2 + 0x10));
0x000642cc ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x000642ce cmp r1, r2 |
| if (r1 == r2) {
0x000642d0 beq.w 0x63e3e | goto label_25;
| }
0x000642d4 b 0x63df4 | goto label_18;
| label_132:
0x000642d6 ldr.w r0, [sl] | r0 = *(sl);
0x000642da mov r1, r4 | r1 = r4;
0x000642dc bl 0x1a608 | fcn_0001a608 (r0, r1);
0x000642e0 b.w 0x635c2 | goto label_26;
| label_198:
0x000642e4 ldrd r2, r1, [sl, 0x28] | __asm ("ldrd r2, r1, [sl, 0x28]");
0x000642e8 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x000642ea adds r0, r1, 1 | r0 = r1 + 1;
0x000642ec adds r1, 2 | r1 += 2;
0x000642ee str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x000642f0 adds r0, r2, 1 | r0 = r2 + 1;
0x000642f2 str.w r0, [sl, 0x28] | __asm ("str.w r0, [sl, 0x28]");
0x000642f6 mov r0, r5 | r0 = r5;
0x000642f8 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x000642fa str.w r1, [sl, 0x2c] | __asm ("str.w r1, [sl, 0x2c]");
0x000642fe movs r1, 0 | r1 = 0;
0x00064300 str r1, [sp] | *(sp) = r1;
0x00064302 movs r1, 0x73 | r1 = 0x73;
0x00064304 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00064308 b 0x64114 | goto label_21;
| label_197:
0x0006430a ldr r5, [sp, 0x34] | r5 = var_34h;
0x0006430c ldr.w fp, [sp, 0x44] | fp = var_44h;
| label_74:
0x00064310 ldr r3, [sp, 0x28] | r3 = x;
0x00064312 mov r0, sl | r0 = sl;
0x00064314 str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x00064318 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0006431a str r3, [sp, 8] | var_8h = r3;
0x0006431c ldrsh.w r3, [fp, 2] | r3 = *(arg_2h);
0x00064320 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00064322 str r3, [sp, 0xc] | var_ch = r3;
0x00064324 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x00064328 str r3, [sp] | *(sp) = r3;
0x0006432a mov r3, r5 | r3 = r5;
0x0006432c bl 0x707d8 | r0 = fcn_000707d8 (r0, r1, r2, r3, r4, r5, r6);
0x00064330 mov r4, r0 | r4 = r0;
0x00064332 cmp r0, 0 |
| if (r0 == 0) {
0x00064334 beq.w 0x639ac | goto label_19;
| }
0x00064338 ldrsh.w r3, [r0, 0x36] | r3 = *((r0 + 0x36));
0x0006433c ldrsh.w r2, [fp, 2] | r2 = *(arg_2h);
0x00064340 cmp r2, r3 |
0x00064342 it gt |
| if (r2 > r3) {
0x00064344 strhgt r3, [fp, 2] | __asm ("strhgt r3, [arg_2h]");
| }
0x00064348 ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r3 != 0) {
0x0006434a cbz r3, 0x64356 |
0x0006434c ldrb.w r3, [r0, 0x33] | r3 = *((r0 + 0x33));
| if (r3 == 0) {
0x00064350 cbz r3, 0x64356 | goto label_203;
| }
0x00064352 strb.w r3, [sp, 0xb5] | var_b5h = r3;
| }
| label_203:
0x00064356 cmp r5, 0 |
| if (r5 == 0) {
0x00064358 beq.w 0x644be | goto label_204;
| }
0x0006435c ldrb.w r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00064360 ldrsb.w r1, [r4, 0x31] | r1 = *((r4 + 0x31));
0x00064364 lsls r7, r3, 0x1d | r7 = r3 << 0x1d;
0x00064366 str r1, [sp, 0x100] | var_100h = r1;
| if (r7 < r3) {
0x00064368 bpl 0x64382 |
0x0006436a ldrb.w r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x0006436e subs r3, 1 | r3--;
0x00064370 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x00064374 add.w r2, r4, r2, lsl 5 | r2 = r4 + (r2 << 5);
0x00064378 ldr.w r2, [r2, 0x338] | r2 = *((r2 + 0x338));
0x0006437c cmp r2, 0 |
| if (r2 == 0) {
0x0006437e beq.w 0x65330 | goto label_205;
| }
| }
0x00064382 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
| label_71:
0x00064384 str r3, [sp, 0x118] | var_118h = r3;
0x00064386 ldr r3, [r5] | r3 = *(r5);
0x00064388 cmp r3, r1 |
0x0006438a itt eq |
| if (r3 != r1) {
0x0006438c moveq r3, 0 | r3 = 0;
| }
| if (r3 != r1) {
0x0006438e streq r3, [sp, 0xfc] | var_fch = r3;
| }
| if (r3 == r1) {
0x00064390 beq.w 0x644be | goto label_204;
| }
| label_28:
0x00064394 cmp r6, 0 |
| if (r6 == 0) {
0x00064396 beq.w 0x64e14 | goto label_206;
| }
0x0006439a ldr.w r6, [sl, 0x2c] | r6 = *((sl + 0x2c));
0x0006439e mov r2, r4 | r2 = r4;
0x000643a0 ldr.w r4, [sl, 0x38] | r4 = *((sl + 0x38));
0x000643a4 mov r1, fp | r1 = fp;
0x000643a6 mov r0, sl | r0 = sl;
0x000643a8 adds r6, 1 | r6++;
0x000643aa subs r5, r4, 3 | r5 = r4 - 3;
0x000643ac subs r3, r4, 1 | r3 = r4 - 1;
0x000643ae str.w r6, [sl, 0x2c] | __asm ("str.w r6, [sl, 0x2c]");
0x000643b2 str.w r5, [sl, 0x38] | __asm ("str.w r5, [sl, 0x38]");
0x000643b6 str r3, [sp] | *(sp) = r3;
0x000643b8 mov r3, r6 | r3 = r6;
0x000643ba bl 0x74730 | fcn_00074730 (r0, r1, r2, r3, r4);
0x000643be ldr r7, [sp, 0x24] | r7 = var_24h;
0x000643c0 movs r2, 0 | r2 = 0;
0x000643c2 mov r3, r5 | r3 = r5;
0x000643c4 str r2, [sp] | *(sp) = r2;
0x000643c6 movs r1, 8 | r1 = 8;
0x000643c8 mov r0, r7 | r0 = r7;
0x000643ca bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000643ce ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x000643d0 subs r7, r4, 2 | r7 = r4 - 2;
0x000643d2 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x000643d6 cmn r2, r3 |
| if (r2 < r3) {
0x000643d8 bmi.w 0x64f72 | goto label_207;
| }
0x000643dc ldr r1, [sp, 0x24] | r1 = var_24h;
0x000643de lsls r3, r4, 2 | r3 = r4 << 2;
0x000643e0 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x000643e2 rsbs r3, r3, 0 | r3 -= ;
0x000643e4 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x000643e6 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_64:
0x000643e8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000643ea mov.w r2, -1 | r2 = -1;
0x000643ee mov r1, fp | r1 = fp;
0x000643f0 mov r0, sl | r0 = sl;
0x000643f2 strd r7, r5, [sp, 8] | __asm ("strd r7, r5, [var_8h]");
0x000643f6 str r3, [sp, 4] | var_4h = r3;
0x000643f8 add r3, sp, 0xb4 | r3 += var_b4h;
0x000643fa str r3, [sp] | *(sp) = r3;
0x000643fc movs r3, 0 | r3 = 0;
0x000643fe str r3, [sp, 0x118] | var_118h = r3;
0x00064400 add r3, sp, 0xfc | r3 += var_fch;
0x00064402 bl 0x6e488 | fcn_0006e488 (r0, r1, r2, r3, r4, r5, r6);
0x00064406 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00064408 mvns r2, r7 | r2 = ~r7;
0x0006440a ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0006440c ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00064410 cmn r1, r3 |
| if (r1 < r3) {
0x00064412 bmi.w 0x64f68 | goto label_208;
| }
0x00064416 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00064418 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0006441a ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x0006441c str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_63:
0x00064420 ldr r4, [sp, 0x24] | r4 = var_24h;
0x00064422 movs r3, 0 | r3 = 0;
0x00064424 mov r2, r6 | r2 = r6;
0x00064426 movs r1, 0x43 | r1 = 0x43;
0x00064428 str r3, [sp] | *(sp) = r3;
0x0006442a mov r0, r4 | r0 = r4;
0x0006442c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00064430 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00064432 mvns r2, r5 | r2 = ~r5;
0x00064434 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00064438 cmn r1, r3 |
| if (r1 < r3) {
0x0006443a bmi.w 0x64e88 | goto label_209;
| }
0x0006443e ldr r1, [sp, 0x24] | r1 = var_24h;
0x00064440 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00064442 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x00064444 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_52:
0x00064448 ldrb.w r3, [sp, 0xb5] | r3 = var_b5h;
0x0006444c cmp r3, 3 |
| if (r3 == 3) {
0x0006444e beq.w 0x64eec | goto label_210;
| }
| label_60:
0x00064452 ldr r3, [sp, 0xfc] | r3 = var_fch;
| if (r3 != 0) {
0x00064454 cbz r3, 0x64484 |
0x00064456 ldr r3, [sp, 0x100] | r3 = var_100h;
0x00064458 cmp r3, 0 |
| if (r3 <= 0) {
0x0006445a ble.w 0x64d5c | goto label_211;
| }
0x0006445e ldr.w r3, [pc, 0x940] | r3 = *(0x00064da0);
0x00064462 add r3, pc | r3 += pc;
| label_46:
0x00064464 ldr.w r2, [pc, 0x93c] |
0x00064468 movs r1, 0 | r1 = 0;
0x0006446a mov r0, sl | r0 = sl;
0x0006446c add r2, pc | r2 = 0xc9214;
0x0006446e bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00064472 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00064474 mov r1, fp | r1 = fp;
0x00064476 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00064478 mov r0, sl | r0 = sl;
0x0006447a ldr r3, [r3] | r3 = *(r3);
0x0006447c str r2, [sp] | *(sp) = r2;
0x0006447e add r2, sp, 0xfc | r2 += var_fch;
0x00064480 bl 0x3554c | fcn_0003554c (r0, r1, r2, r3, r4, r5, r6);
| }
0x00064484 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00064486 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00064488 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0006448c cmn r2, r3 |
| if (r2 < r3) {
0x0006448e bmi.w 0x64d88 | goto label_212;
| }
0x00064492 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00064494 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00064496 ldr r1, [r3, 0x6c] | r1 = *((r3 + 0x6c));
0x00064498 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0006449a lsls r3, r3, 2 | r3 <<= 2;
0x0006449c rsbs r3, r3, 0 | r3 -= ;
0x0006449e str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_50:
0x000644a0 ldr.w r4, [sl, 0x24] | r4 = *((sl + 0x24));
0x000644a4 cmp r4, 0 |
0x000644a6 ite le |
| if (r4 > 0) {
0x000644a8 movle r4, 0 | r4 = 0;
| }
| if (r4 <= 0) {
0x000644aa movgt r4, 1 | r4 = 1;
| }
| label_58:
0x000644ac ldr r1, [sp, 0x38] | r1 = var_38h;
0x000644ae cmp r1, 0 |
| if (r1 == 0) {
0x000644b0 beq.w 0x639ae | goto label_27;
| }
0x000644b4 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000644b6 bl 0x1a608 | fcn_0001a608 (r0, r1);
0x000644ba b.w 0x639ae | goto label_27;
| label_204:
0x000644be ldr r1, [sp, 0x110] | r1 = var_110h;
0x000644c0 cmp r1, 0 |
| if (r1 < 0) {
0x000644c2 blt.w 0x64394 | goto label_28;
| }
0x000644c6 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000644c8 bl 0x1cab0 | fcn_0001cab0 (r0, r1);
0x000644cc b 0x64394 | goto label_28;
| label_191:
0x000644ce ldr r3, [sp, 0x28] | r3 = x;
0x000644d0 cmp r3, 0 |
| if (r3 == 0) {
0x000644d2 beq.w 0x64d74 | goto label_213;
| }
0x000644d6 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x000644da ldr r2, [r3], 8 | r2 = *(r3);
| r3 += 8;
0x000644de cmp r2, 0 |
| if (r2 <= 0) {
0x000644e0 ble 0x644ee | goto label_214;
| }
0x000644e2 movs r1, 0 | r1 = 0;
| do {
0x000644e4 subs r2, 1 | r2--;
0x000644e6 strh r1, [r3, 0xe] | *((r3 + 0xe)) = r1;
0x000644e8 add.w r3, r3, 0x10 | r3 += 0x10;
0x000644ec bne 0x644e4 |
| } while (r2 != 1);
| label_214:
0x000644ee ldr r3, [sp, 0x28] | r3 = x;
0x000644f0 ldr r0, [r3], 8 | r0 = *(r3);
| r3 += 8;
0x000644f4 cmp r0, 0 |
0x000644f6 itt gt |
| if (r0 <= 0) {
0x000644f8 movgt r2, r0 | r2 = r0;
| }
| if (r0 <= 0) {
0x000644fa movgt r1, 0 | r1 = 0;
| }
| if (r0 <= 0) {
0x000644fc ble 0x64508 | goto label_215;
| }
| do {
0x000644fe subs r2, 1 | r2--;
0x00064500 strh r1, [r3, 0xe] | *((r3 + 0xe)) = r1;
0x00064502 add.w r3, r3, 0x10 | r3 += 0x10;
0x00064506 bne 0x644fe |
| } while (r2 != 1);
| label_215:
0x00064508 ldrsh.w r3, [fp, 2] | r3 = *(arg_2h);
0x0006450c cmp r3, 0x42 |
0x0006450e itt gt |
| if (r3 <= 0x42) {
0x00064510 movgt r3, 0x42 | r3 = 0x42;
| }
| if (r3 > 0x42) {
0x00064512 strhgt r3, [fp, 2] | __asm ("strhgt r3, [arg_2h]");
| }
| if (r5 != 0) {
0x00064516 cbz r5, 0x64520 |
0x00064518 ldr r3, [r5] | r3 = *(r5);
0x0006451a cmp r3, r0 |
| if (r3 == r0) {
0x0006451c beq.w 0x64f30 | goto label_216;
| }
| }
| label_48:
0x00064520 movs r3, 0 | r3 = 0;
0x00064522 str r3, [sp, 0x4c] | var_4ch = r3;
| label_62:
0x00064524 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x00064528 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0006452a str r3, [sp, 0x58] | var_58h = r3;
0x0006452c subs r3, 1 | r3--;
0x0006452e str r3, [sp, 0x50] | var_50h = r3;
0x00064530 str.w r3, [sl, 0x38] | __asm ("str.w r3, [sl, 0x38]");
0x00064534 cmp r0, 0 |
| if (r0 == 0) {
0x00064536 beq.w 0x649a0 | goto label_217;
| }
0x0006453a movs r2, 0x34 | r2 = 0x34;
0x0006453c movs r3, 0 | r3 = 0;
0x0006453e bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x00064542 mov r6, r0 | r6 = r0;
| if (r6 != 0) {
| label_37:
0x00064544 cbz r6, 0x6457c |
0x00064546 movs r2, 0x34 | r2 = 0x34;
0x00064548 movs r1, 0 | r1 = 0;
0x0006454a mov r0, r6 | r0 = r6;
0x0006454c blx 0x839c | fcn_0000839c ();
0x00064550 ldr.w r0, [sl] | r0 = *(sl);
0x00064554 cmp r0, 0 |
| if (r0 == 0) {
0x00064556 beq.w 0x64e78 | goto label_218;
| }
0x0006455a movs r2, 0xc | r2 = 0xc;
0x0006455c movs r3, 0 | r3 = 0;
0x0006455e bl 0x21784 | r0 = fcn_00021784 (r0, r1);
| label_56:
0x00064562 cmp r0, 0 |
| if (r0 == 0) {
0x00064564 beq.w 0x655fe | goto label_219;
| }
0x00064568 ldr.w r3, [sl, 0x80] | r3 = *((sl + 0x80));
0x0006456c str r3, [r0] | *(r0) = r3;
0x0006456e ldr.w r3, [pc, 0x838] | r3 = *(0x00064da8);
0x00064572 str.w r0, [sl, 0x80] | __asm ("str.w r0, [sl, 0x80]");
0x00064576 str r6, [r0, 4] | *((r0 + 4)) = r6;
0x00064578 add r3, pc | r3 += pc;
0x0006457a str r3, [r0, 8] | *((r0 + 8)) = r3;
| }
| label_83:
0x0006457c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006457e ldrb.w r4, [r3, 0x57] | r4 = *((r3 + 0x57));
0x00064582 str r4, [sp, 0x54] | var_54h = r4;
0x00064584 cmp r4, 0 |
| if (r4 != 0) {
0x00064586 bne.w 0x639ac | goto label_19;
| }
0x0006458a ldr.w r2, [fp, 0x10] | r2 = *(arg_10h);
0x0006458e add r0, sp, 0xdc | r0 += var_dch;
0x00064590 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00064594 mov r7, r0 | r7 = r0;
0x00064596 str r0, [sp, 0x48] | var_48h = r0;
0x00064598 str r2, [r6, 0x30] | *((r6 + 0x30)) = r2;
0x0006459a ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006459c adds r3, 1 | r3++;
0x0006459e str r4, [sp, 0xe8] | var_e8h = r4;
0x000645a0 str.w sl, [sp, 0xdc] | __asm ("str.w sl, [var_dch]");
0x000645a4 strd r2, r6, [sp, 0xe0] | __asm ("strd r2, r6, [var_e0h]");
0x000645a8 ldr r2, [sp, 0x28] | r2 = x;
0x000645aa strd r4, r4, [sp, 0xec] | __asm ("strd r4, r4, [var_f0h]");
0x000645ae strd r4, r4, [sp, 0xf4] | __asm ("strd r4, r4, [var_f4h]");
0x000645b2 str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x000645b4 cmp r2, 0 |
| if (r2 == 0) {
0x000645b6 beq.w 0x64f9e | goto label_220;
| }
0x000645ba ldr r3, [r2] | r3 = *(r2);
0x000645bc ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000645be str r2, [r6, 0x18] | *((r6 + 0x18)) = r2;
0x000645c0 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x000645c2 bl 0x3156c | fcn_0003156c (r0, r1);
0x000645c6 mov r1, r5 | r1 = r5;
0x000645c8 mov r0, r7 | r0 = r7;
0x000645ca bl 0x3156c | fcn_0003156c (r0, r1);
0x000645ce ldr r3, [sp, 0x44] | r3 = var_44h;
| if (r3 != 0) {
0x000645d0 cbz r3, 0x6462a |
0x000645d2 ldr.w r3, [pc, 0x7d8] | r3 = *(0x00064dac);
0x000645d6 ldr.w r1, [fp, 0x2c] | r1 = *(arg_2ch);
0x000645da str r4, [sp, 0xc8] | var_c8h = r4;
0x000645dc add r3, pc | r3 += pc;
0x000645de str.w sl, [sp, 0xc0] | __asm ("str.w sl, [var_c0h]");
0x000645e2 str r3, [sp, 0xc4] | var_c4h = r3;
0x000645e4 add r3, sp, 0xc0 | r3 += var_c0h;
0x000645e6 str.w fp, [sp, 0xd8] | __asm ("str.w fp, [var_d8h]");
0x000645ea strd r4, r4, [sp, 0xcc] | __asm ("strd r4, r4, [var_cch]");
0x000645ee str r4, [sp, 0xd4] | var_d4h = r4;
0x000645f0 str r3, [sp, 0x38] | var_38h = r3;
| if (r1 != 0) {
0x000645f2 cbz r1, 0x645fa |
0x000645f4 mov r0, r3 | r0 = r3;
0x000645f6 bl 0x30f3c | fcn_00030f3c (r0, r1);
| }
0x000645fa ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x000645fe str r3, [sp, 0x3c] | var_3ch = r3;
| label_68:
0x00064600 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00064602 ldr r0, [sp, 0x38] | r0 = var_38h;
0x00064604 ldr r1, [sp, 0x44] | r1 = var_44h;
0x00064606 str r3, [sp, 0xd8] | var_d8h = r3;
0x00064608 ldr.w r3, [pc, 0x7a4] | r3 = *(0x00064db0);
0x0006460c add r3, pc | r3 += pc;
0x0006460e str r3, [sp, 0xc4] | var_c4h = r3;
0x00064610 ldr.w r3, [pc, 0x7a0] | r3 = *(0x00064db4);
0x00064614 add r3, pc | r3 += pc;
0x00064616 str r3, [sp, 0xc8] | var_c8h = r3;
0x00064618 ldr.w r3, [pc, 0x79c] | r3 = *(0x00064db8);
0x0006461c add r3, pc | r3 += pc;
0x0006461e str r3, [sp, 0xcc] | var_cch = r3;
0x00064620 movs r3, 0 | r3 = 0;
0x00064622 str r3, [sp, 0xd0] | var_d0h = r3;
0x00064624 str r3, [sp, 0xc0] | var_c0h = r3;
0x00064626 bl 0x30f3c | fcn_00030f3c (r0, r1);
| }
| label_67:
0x0006462a ldr.w r3, [fp, 0x28] | r3 = *(arg_28h);
0x0006462e ldr r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x00064630 str r2, [r6, 0x24] | *((r6 + 0x24)) = r2;
0x00064632 cmp r3, 0 |
| if (r3 == 0) {
0x00064634 beq.w 0x64f8a | goto label_221;
| }
0x00064638 ldr r0, [r6, 0x2c] | r0 = *((r6 + 0x2c));
0x0006463a movs r3, 0 | r3 = 0;
0x0006463c str r3, [sp, 0x38] | var_38h = r3;
| label_66:
0x0006463e cmp r0, 0 |
| if (r0 <= 0) {
0x00064640 ble.w 0x653f8 | goto label_222;
| }
0x00064644 ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
| label_88:
0x00064646 ldr.w sb, [pc, 0x774] | sb = *(0x00064dbc);
0x0006464a movs r4, 0 | r4 = 0;
0x0006464c ldr.w r5, [pc, 0x770] | r5 = *(0x00064dc0);
0x00064650 ldr.w r8, [pc, 0x770] | r8 = *(0x00064dc4);
0x00064654 add sb, pc | sb += pc;
0x00064656 ldr r1, [sp, 0xf4] | r1 = var_f4h;
0x00064658 mov r3, sb | r3 = sb;
0x0006465a ldr r7, [sp, 0x48] | r7 = var_48h;
0x0006465c mov sb, r4 | sb = r4;
0x0006465e add r5, pc | r5 += pc;
0x00064660 add r8, pc | r8 += pc;
0x00064662 mov r4, r3 | r4 = r3;
0x00064664 str.w sl, [sp, 0x5c] | __asm ("str.w sl, [var_5ch]");
0x00064668 b 0x64680 |
| while (r3 >= r2) {
| label_29:
0x0006466a ldr r0, [r6, 0x2c] | r0 = *((r6 + 0x2c));
0x0006466c add.w sb, sb, 1 | sb++;
0x00064670 ldr r1, [sp, 0xf4] | r1 = var_f4h;
0x00064672 cmp r0, sb |
0x00064674 bic r1, r1, 0x20000 | r1 = BIT_MASK (r1, 0x20000);
0x00064678 str r1, [sp, 0xf4] | var_f4h = r1;
| if (r0 <= sb) {
0x0006467a ble.w 0x649ac | goto label_223;
| }
0x0006467e ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
0x00064680 add.w r3, sb, sb, lsl 2 | r3 = sb + (sb << 2);
0x00064684 orr r1, r1, 0x20000 | r1 |= 0x20000;
0x00064688 mov r0, r7 | r0 = r7;
0x0006468a ldr.w sl, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| sl = *((r2 + offset_0));
0x0006468e str r1, [sp, 0xf4] | var_f4h = r1;
0x00064690 ldr.w r1, [sl, 0x14] | r1 = *((sl + 0x14));
0x00064694 bl 0x3156c | fcn_0003156c (r0, r1);
0x00064698 ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x0006469c lsls r3, r2, 7 | r3 = r2 << 7;
0x0006469e bpl 0x6466a |
| }
0x000646a0 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000646a4 ldr r1, [r3, 0x28] | r1 = *((r3 + 0x28));
0x000646a6 movs r3, 0 | r3 = 0;
0x000646a8 strd r4, r5, [sp, 0xc4] | __asm ("strd r4, r5, [var_c4h]");
0x000646ac str.w r8, [sp, 0xcc] | __asm ("str.w r8, [var_cch]");
0x000646b0 str r7, [sp, 0xd8] | var_d8h = r7;
0x000646b2 str r3, [sp, 0xd0] | var_d0h = r3;
0x000646b4 str r3, [sp, 0xc0] | var_c0h = r3;
0x000646b6 cmp r1, 0 |
| if (r1 == 0) {
0x000646b8 beq 0x6466a | goto label_29;
| }
0x000646ba add r0, sp, 0xc0 | r0 += var_c0h;
0x000646bc bl 0x30f3c | fcn_00030f3c (r0, r1);
0x000646c0 b 0x6466a | goto label_29;
| label_181:
0x000646c2 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000646c4 ldr.w r2, [sl, 0x2c] | r2 = *((sl + 0x2c));
0x000646c8 str r3, [sp, 0x48] | var_48h = r3;
0x000646ca ldr.w sb, [r0, 0x6c] | sb = *((r0 + 0x6c));
0x000646ce adds r2, 1 | r2++;
0x000646d0 str.w r2, [sl, 0x2c] | __asm ("str.w r2, [sl, 0x2c]");
0x000646d4 add.w r1, sb, 1 | r1 = sb + 1;
0x000646d8 str r2, [r5, 0x24] | *((r5 + 0x24)) = r2;
0x000646da str r1, [sp, 0x44] | var_44h = r1;
0x000646dc str r1, [sp] | *(sp) = r1;
0x000646de movs r1, 0xa | r1 = 0xa;
0x000646e0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000646e4 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x000646e6 mov r0, sl | r0 = sl;
0x000646e8 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000646ea ldr r3, [sp, 0x48] | r3 = var_48h;
0x000646ec str r1, [r5, 0x20] | *((r5 + 0x20)) = r1;
0x000646ee movs r1, 0xd | r1 = 0xd;
0x000646f0 str r2, [sp, 0xe0] | var_e0h = r2;
0x000646f2 ldr.w r2, [pc, 0x6d4] | r2 = *(0x00064dc8);
0x000646f6 str r3, [sp, 0xe4] | var_e4h = r3;
0x000646f8 str r3, [sp, 0xf0] | var_f0h = r3;
0x000646fa add r2, pc | r2 += pc;
0x000646fc strd r3, r3, [sp, 0xe8] | __asm ("strd r3, r3, [var_e8h]");
0x00064700 strb.w r1, [sp, 0xdc] | var_dch = r1;
0x00064704 mov r3, r4 | r3 = r4;
0x00064706 movs r1, 1 | r1 = 1;
0x00064708 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x0006470c mov r1, r7 | r1 = r7;
0x0006470e mov r2, r8 | r2 = r8;
0x00064710 mov r0, sl | r0 = sl;
0x00064712 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00064714 mrc2 p8, 7, apsr_nzcv, c5, c5, 4 | __asm ("mrc2 p8, 7, apsr_nzcv, c5, c5, 4");
0x00064718 adds r0, 0x2d | r0 += 0x2d;
0x0006471a ldrh r1, [r7, 2] | r1 = *((r7 + 2));
0x0006471c ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x0006471e orr r3, r3, 0x20 | r3 |= 0x20;
0x00064722 ldr r7, [sp, 0x24] | r7 = var_24h;
0x00064724 strh r1, [r2, 0x26] | *((r2 + 0x26)) = r1;
0x00064726 strb.w r3, [r5, 0x2d] | *((r5 + 0x2d)) = r3;
0x0006472a mov r0, r7 | r0 = r7;
0x0006472c ldr r3, [sp, 0xe8] | r3 = var_e8h;
0x0006472e ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x00064730 str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
0x00064732 bl 0x2e8b0 | fcn_0002e8b0 (r0, r1, r2);
0x00064736 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00064738 cmp.w sb, 0 |
0x0006473c ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x0006473e ldr r3, [r1] | r3 = *(r1);
0x00064740 it lt |
| if (sb >= 0) {
0x00064742 addlt sb, r2, -1 | sb = r2 + -1;
| }
0x00064746 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006474a cmp r3, 0 |
| if (r3 != 0) {
0x0006474c bne.w 0x64996 | goto label_224;
| }
0x00064750 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x00064752 add.w sb, sb, sb, lsl 2 | sb += (sb << 2);
0x00064756 add.w r3, r3, sb, lsl 2 | r3 += (sb << 2);
| label_36:
0x0006475a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0006475c movs r3, 0 | r3 = 0;
0x0006475e strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x00064762 str.w r3, [sl, 0x1c] | __asm ("str.w r3, [sl, 0x1c]");
0x00064766 b.w 0x63e6c | goto label_22;
| label_174:
0x0006476a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0006476c ldr r2, [r2, 0x50] | r2 = *((r2 + 0x50));
0x0006476e lsls r0, r2, 0x10 | r0 = r2 << 0x10;
| if (r0 < r2) {
0x00064770 bmi.w 0x63d0a | goto label_30;
| }
0x00064774 ldr.w r3, [sl] | r3 = *(sl);
0x00064778 add r6, sp, 0xc0 | r6 += var_c0h;
0x0006477a ldr.w r5, [pc, 0x650] | r5 = *(0x00064dcc);
0x0006477e mov r7, sl | r7 = sl;
0x00064780 ldr.w r4, [pc, 0x64c] | r4 = *(0x00064dd0);
0x00064784 adds r3, 0x57 | r3 += 0x57;
0x00064786 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x0006478a add r5, pc | r5 += pc;
0x0006478c str.w sl, [sp, 0xc0] | __asm ("str.w sl, [var_c0h]");
0x00064790 add r4, pc | r4 += pc;
0x00064792 str r3, [sp, 0xc4] | var_c4h = r3;
0x00064794 b 0x647a2 |
| while (r3 == 0) {
| label_31:
0x00064796 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x00064798 cmp r3, 0 |
| if (r3 == 0) {
0x0006479a beq.w 0x64e58 | goto label_225;
| }
0x0006479e ldr.w r1, [fp, 0x24] | r1 = *(arg_24h);
0x000647a2 ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x000647a6 movs r2, 0 | r2 = 0;
0x000647a8 vstr d8, [sp, 0xc8] | __asm ("vstr d8, [sp, 0xc8]");
0x000647ac str r2, [sp, 0xd8] | var_d8h = r2;
0x000647ae str r2, [sp, 0xd0] | var_d0h = r2;
| if (r3 == 0) {
0x000647b0 cbz r3, 0x64800 | goto label_226;
| }
0x000647b2 ldr r2, [r3] | r2 = *(r3);
0x000647b4 cmp r2, 0 |
| if (r2 <= 0) {
0x000647b6 ble 0x64800 | goto label_226;
| }
0x000647b8 ldrb.w r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x000647bc tst.w r3, 0x40 |
0x000647c0 ite eq |
| if ((r3 & 0x40) != 0) {
0x000647c2 moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x40) == 0) {
0x000647c4 movne r3, 3 | r3 = 3;
| }
| label_32:
0x000647c6 mov r0, r6 | r0 = r6;
0x000647c8 str r3, [sp, 0xd4] | var_d4h = r3;
0x000647ca bl 0x3190c | fcn_0003190c (r0, r1);
0x000647ce ldr r3, [sp, 0xc8] | r3 = var_c8h;
0x000647d0 cmp r3, 0 |
0x000647d2 beq 0x64796 |
| }
0x000647d4 ldr.w r1, [fp, 0x24] | r1 = *(arg_24h);
0x000647d8 movs r3, 0 | r3 = 0;
0x000647da add r0, sp, 0xdc | r0 += var_dch;
0x000647dc strd r7, r5, [sp, 0xdc] | __asm ("strd r7, r5, [var_dch]");
0x000647e0 str r4, [sp, 0xe4] | var_e4h = r4;
0x000647e2 str r6, [sp, 0xf4] | var_f4h = r6;
0x000647e4 strd r3, r3, [sp, 0xe8] | __asm ("strd r3, r3, [var_e8h]");
0x000647e8 str r3, [sp, 0xf0] | var_f0h = r3;
| if (r1 != 0) {
0x000647ea cbz r1, 0x647f0 |
0x000647ec bl 0x30f3c | fcn_00030f3c (r0, r1);
| }
0x000647f0 ldr r1, [sp, 0xd8] | r1 = var_d8h;
0x000647f2 ldr r3, [sp, 0xc0] | r3 = var_c0h;
0x000647f4 ldr r0, [r3] | r0 = *(r3);
0x000647f6 cmp r1, 0 |
| if (r1 == 0) {
0x000647f8 beq 0x64796 | goto label_31;
| }
0x000647fa bl 0x16808 | fcn_00016808 (r0, r1);
0x000647fe b 0x64796 | goto label_31;
| label_226:
0x00064800 movs r3, 1 | r3 = 1;
0x00064802 b 0x647c6 | goto label_32;
| label_159:
0x00064804 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x00064806 ldr r2, [r3] | r2 = *(r3);
0x00064808 b.w 0x639a0 | goto label_33;
| label_190:
0x0006480c ldr.w r4, [sl, 0x28] | r4 = *((sl + 0x28));
0x00064810 movs r3, 0 | r3 = 0;
0x00064812 ldr.w r1, [fp, 0x1c] | r1 = *(arg_1ch);
0x00064816 mov r0, sl | r0 = sl;
0x00064818 adds r2, r4, 1 | r2 = r4 + 1;
0x0006481a str r4, [sp, 0xb8] | var_b8h = r4;
0x0006481c str.w r2, [sl, 0x28] | __asm ("str.w r2, [sl, 0x28]");
0x00064820 mov r2, r3 | r2 = r3;
0x00064822 bl 0x2c2d4 | fcn_0002c2d4 (r0, r1, r2, r3);
0x00064826 mov r2, r4 | r2 = r4;
0x00064828 ldr r4, [sp, 0x24] | r4 = var_24h;
0x0006482a movs r3, 0 | r3 = 0;
0x0006482c mvn r1, 7 | r1 = ~7;
0x00064830 str r0, [sp, 4] | var_4h = r0;
0x00064832 str r3, [sp] | *(sp) = r3;
0x00064834 mov r0, r4 | r0 = r4;
0x00064836 str r1, [sp, 8] | var_8h = r1;
0x00064838 movs r1, 0x76 | r1 = 0x76;
0x0006483a bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0006483e ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x00064840 str r0, [sp, 0xbc] | var_bch = r0;
0x00064842 cmp r3, 0 |
| if (r3 > 0) {
0x00064844 ble 0x64856 |
0x00064846 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x00064848 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0006484c add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x00064850 movs r3, 8 | r3 = 8;
0x00064852 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
0x00064856 movs r3, 3 | r3 = 3;
0x00064858 b.w 0x63f5c | goto label_34;
| label_202:
0x0006485c ldr.w r3, [pc, 0x574] |
0x00064860 add r3, pc | r3 = 0xc9638;
0x00064862 adds r3, 4 | r3 += 4;
0x00064864 b 0x64294 | goto label_35;
| label_171:
0x00064866 ldr.w r8, [sp, 0x5c] | r8 = var_5ch;
0x0006486a mov sl, r7 | sl = r7;
0x0006486c ldr.w fp, [sp, 0x44] | fp = var_44h;
0x00064870 cmp r5, 0 |
| if (r5 == 0) {
0x00064872 beq.w 0x653c4 | goto label_227;
| }
| label_75:
0x00064876 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00064878 mov r1, r5 | r1 = r5;
0x0006487a movs r5, 0 | r5 = 0;
0x0006487c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0006487e mov r0, sl | r0 = sl;
0x00064880 strd r5, r5, [sp, 0xc] | __asm ("strd r5, r5, [var_ch]");
0x00064884 str r3, [sp, 8] | var_8h = r3;
0x00064886 ldr r3, [sp, 0x58] | r3 = var_58h;
0x00064888 str r3, [sp, 4] | var_4h = r3;
0x0006488a ldr r3, [sp, 0x54] | r3 = var_54h;
0x0006488c str r3, [sp] | *(sp) = r3;
0x0006488e ldr r3, [sp, 0x50] | r3 = var_50h;
0x00064890 bl 0x23b94 | fcn_00023b94 (r0, r1, r2, r3, r4, r5, r6);
0x00064894 mov r3, r5 | r3 = r5;
0x00064896 mov r4, r0 | r4 = r0;
0x00064898 mov r2, r5 | r2 = r5;
0x0006489a mov r1, r5 | r1 = r5;
0x0006489c mov r0, sl | r0 = sl;
0x0006489e bl 0x2d5f4 | fcn_0002d5f4 (r0, r1, r2, r3);
0x000648a2 str.w r0, [fp, 0x20] | __asm ("str.w r0, [arg_20h]");
0x000648a6 cmp r0, 0 |
| if (r0 == 0) {
0x000648a8 beq.w 0x64d64 | goto label_228;
| }
0x000648ac mov r1, r0 | r1 = r0;
0x000648ae str r4, [r0, 0x1c] | *((r0 + 0x1c)) = r4;
0x000648b0 mov r0, sl | r0 = sl;
0x000648b2 bl 0xab9c | fcn_0000ab9c (r0, r1);
0x000648b6 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000648b8 movs r2, 0x40 | r2 = 0x40;
0x000648ba mov r1, r4 | r1 = r4;
0x000648bc mov r0, sl | r0 = sl;
0x000648be orr r3, r3, 0x8000000 | r3 |= 0x8000000;
0x000648c2 orr r3, r3, 0x40 | r3 |= 0x40;
0x000648c6 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x000648c8 bl 0x6345c | fcn_0006345c (r0, r1, r2);
0x000648cc ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000648ce and r2, r8, 8 | r2 = r8 & 8;
0x000648d2 orrs r3, r2 | r3 |= r2;
0x000648d4 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x000648d6 cmp r0, 0 |
| if (r0 == 0) {
0x000648d8 beq.w 0x64f64 | goto label_229;
| }
0x000648dc ldr r2, [sp, 0x18] | r2 = var_18h;
0x000648de mov r3, r0 | r3 = r0;
0x000648e0 add.w ip, r0, 0x40 |
| do {
0x000648e4 ldr r7, [r3] | r7 = *(r3);
0x000648e6 adds r3, 0x10 | r3 += 0x10;
0x000648e8 ldr r6, [r3, -0xc] | r6 = *((r3 - 0xc));
0x000648ec adds r2, 0x10 | r2 += 0x10;
0x000648ee ldr r5, [r3, -0x8] | r5 = *((r3 - 0x8));
0x000648f2 ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x000648f6 cmp r3, ip |
0x000648f8 str r7, [r2, -0x10] | *((r2 - 0x10)) = r7;
0x000648fc str r6, [r2, -0xc] | *((r2 - 0xc)) = r6;
0x00064900 str r5, [r2, -0x8] | *((r2 - 0x8)) = r5;
0x00064904 str r1, [r2, -0x4] | *((r2 - 0x4)) = r1;
0x00064908 bne 0x648e4 |
| } while (r3 != ip);
0x0006490a ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006490c mov r1, r4 | r1 = r4;
0x0006490e str r0, [sp, 0x18] | var_18h = r0;
0x00064910 movs r4, 0 | r4 = 0;
0x00064912 ldr.w r0, [pc, 0x4c4] | r0 = *(0x00064dd8);
0x00064914 lsls r4, r0, 0x13 | r4 = r0 << 0x13;
0x00064916 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x00064918 ldr r5, [sp, 0x48] | r5 = var_48h;
0x0006491a add r0, pc | r0 += pc;
0x0006491c orr r3, r3, 0x4000 | r3 |= 0x4000;
0x00064920 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x00064922 ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x00064926 str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
0x00064928 ldr.w r2, [pc, 0x4b0] | r2 = *(0x00064ddc);
0x0006492c ldr.w r3, [pc, 0x4b0] | r3 = *(0x00064de0);
0x00064930 str r4, [sp, 0xdc] | var_dch = r4;
0x00064932 add r2, pc | r2 += pc;
0x00064934 strd r4, r4, [r5, 4] | __asm ("strd r4, r4, [r5, 4]");
0x00064938 strd r4, r4, [r5, 0xc] | __asm ("strd r4, r4, [r5, 0xc]");
0x0006493c add r3, pc | r3 += pc;
0x0006493e strd r4, r4, [r5, 0x14] | __asm ("strd r4, r4, [r5, 0x14]");
0x00064942 strd r0, r2, [sp, 0xe0] | __asm ("strd r0, r2, [var_e0h]");
0x00064946 mov r0, r5 | r0 = r5;
0x00064948 str r3, [sp, 0xe8] | var_e8h = r3;
0x0006494a bl 0x31b70 | fcn_00031b70 (r0, r1, r2, r3, r4, r5);
| label_47:
0x0006494e ldr r3, [sp, 0x28] | r3 = x;
0x00064950 ldr.w r0, [sl] | r0 = *(sl);
0x00064954 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00064958 cmp r3, 0 |
0x0006495a it ne |
| if (r3 == 0) {
0x0006495c movne r4, 7 | r4 = 7;
| }
0x0006495e cmp r0, 0 |
| if (r0 == 0) {
0x00064960 beq.w 0x64d7e | goto label_230;
| }
0x00064964 movs r2, 0xc | r2 = 0xc;
0x00064966 movs r3, 0 | r3 = 0;
0x00064968 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
| label_49:
0x0006496c cmp r0, 0 |
| if (r0 == 0) {
0x0006496e beq.w 0x653ea | goto label_231;
| }
0x00064972 ldr.w r3, [sl, 0x80] | r3 = *((sl + 0x80));
0x00064976 str r3, [r0] | *(r0) = r3;
0x00064978 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006497a str.w r0, [sl, 0x80] | __asm ("str.w r0, [sl, 0x80]");
0x0006497e str r3, [r0, 4] | *((r0 + 4)) = r3;
0x00064980 ldr.w r3, [pc, 0x460] | r3 = *(0x00064de4);
0x00064984 add r3, pc | r3 += pc;
0x00064986 str r3, [r0, 8] | *((r0 + 8)) = r3;
| label_76:
0x00064988 cmp r4, 0 |
| if (r4 != 0) {
0x0006498a bne.w 0x639ac | goto label_19;
| }
0x0006498e ldr.w r8, [fp, 4] | r8 = *(arg_4h);
0x00064992 b.w 0x63614 | goto label_15;
| label_224:
0x00064996 ldr.w r3, [pc, 0x450] | r3 = *(0x00064de8);
0x0006499a add r3, pc | r3 += pc;
0x0006499c adds r3, 4 | r3 += 4;
0x0006499e b 0x6475a | goto label_36;
| label_217:
0x000649a0 movs r0, 0x34 | r0 = 0x34;
0x000649a2 movs r1, 0 | r1 = 0;
0x000649a4 bl 0x13558 | r0 = fcn_00013558 (r0);
0x000649a8 mov r6, r0 | r6 = r0;
0x000649aa b 0x64544 | goto label_37;
| label_223:
0x000649ac ldr.w sl, [sp, 0x5c] | sl = var_5ch;
0x000649b0 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000649b2 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000649b6 str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x000649b8 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x000649bc cmp r2, 0 |
| if (r2 != 0) {
0x000649be bne.w 0x64ea8 | goto label_77;
| }
0x000649c2 ldr r2, [sp, 0x28] | r2 = x;
0x000649c4 cmp r2, 0 |
| if (r2 == 0) {
0x000649c6 beq.w 0x65412 | goto label_232;
| }
0x000649ca cmp r0, 1 |
| if (r0 == 1) {
0x000649cc beq.w 0x65632 | goto label_233;
| }
| label_78:
0x000649d0 movs r3, 0 | r3 = 0;
0x000649d2 str r3, [sp, 0x60] | var_60h = r3;
| label_85:
0x000649d4 ldr.w r5, [sl, 0x28] | r5 = *((sl + 0x28));
0x000649d8 movs r2, 0 | r2 = 0;
0x000649da ldr.w sb, [sp, 0x28] | sb = x;
0x000649de mov r0, sl | r0 = sl;
0x000649e0 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x000649e2 mov r4, r2 | r4 = r2;
0x000649e4 adds r7, r5, 1 | r7 = r5 + 1;
0x000649e6 str.w r7, [sl, 0x28] | __asm ("str.w r7, [sl, 0x28]");
0x000649ea mov r1, sb | r1 = sb;
0x000649ec str r5, [r6, 4] | *((r6 + 4)) = r5;
0x000649ee bl 0x2c2d4 | fcn_0002c2d4 (r0, r1, r2, r3);
0x000649f2 ldr.w r8, [sp, 0x24] | r8 = var_24h;
0x000649f6 mvn r1, 7 | r1 = ~7;
0x000649fa ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000649fc ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x000649fe str r0, [sp, 0x78] | var_78h = r0;
0x00064a00 strd r4, r0, [sp] | __asm ("strd r4, r0, [sp]");
0x00064a04 mov r0, r8 | r0 = r8;
0x00064a06 str r1, [sp, 8] | var_8h = r1;
0x00064a08 movs r1, 0x77 | r1 = 0x77;
0x00064a0a bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x00064a0e ldr.w r5, [sl, 0x2c] | r5 = *((sl + 0x2c));
0x00064a12 ldr.w r3, [sb] | r3 = *(sb);
0x00064a16 str r4, [sp] | *(sp) = r4;
0x00064a18 adds r1, r5, 4 | r1 = r5 + 4;
0x00064a1a ldr.w r2, [sl, 0x38] | r2 = *((sl + 0x38));
0x00064a1e str r1, [sp, 0x5c] | var_5ch = r1;
0x00064a20 add r1, r3 | r1 += r3;
0x00064a22 add r3, r1 | r3 += r1;
0x00064a24 str r0, [sp, 0x80] | var_80h = r0;
0x00064a26 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x00064a2a mov r0, r2 | r0 = r2;
0x00064a2c adds r3, r1, 1 | r3 = r1 + 1;
0x00064a2e adds r7, r5, 2 | r7 = r5 + 2;
0x00064a30 strd r0, r3, [sp, 0x6c] | __asm ("strd r0, r3, [var_6ch]");
0x00064a34 subs r3, r0, 2 | r3 = r0 - 2;
0x00064a36 str r7, [sp, 0x74] | var_74h = r7;
0x00064a38 mov r2, r4 | r2 = r4;
0x00064a3a str r3, [sp, 0x68] | var_68h = r3;
0x00064a3c movs r1, 0x47 | r1 = 0x47;
0x00064a3e str.w r3, [sl, 0x38] | __asm ("str.w r3, [sl, 0x38]");
0x00064a42 mov r3, r7 | r3 = r7;
0x00064a44 adds r7, r5, 5 | r7 = r5 + 5;
0x00064a46 mov r0, r8 | r0 = r8;
0x00064a48 str r7, [sp, 0x64] | var_64h = r7;
0x00064a4a adds r7, r5, 1 | r7 = r5 + 1;
0x00064a4c adds r5, 3 | r5 += 3;
0x00064a4e str r7, [sp, 0x54] | var_54h = r7;
0x00064a50 str r5, [sp, 0x48] | var_48h = r5;
0x00064a52 str.w sb, [sp, 0x28] | __asm ("str.w sb, [x]");
0x00064a56 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00064a5a ldr r7, [sp, 0x28] | r7 = x;
0x00064a5c mov r2, r4 | r2 = r4;
0x00064a5e ldr r5, [sp, 0x64] | r5 = var_64h;
0x00064a60 movs r1, 0x4b | r1 = 0x4b;
0x00064a62 mov r0, r8 | r0 = r8;
0x00064a64 ldr r3, [r7] | r3 = *(r7);
0x00064a66 add r3, r5 | r3 += r5;
0x00064a68 subs r3, 1 | r3--;
0x00064a6a str r3, [sp] | *(sp) = r3;
0x00064a6c mov r3, r5 | r3 = r5;
0x00064a6e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00064a72 ldr r3, [sp, 0x68] | r3 = var_68h;
0x00064a74 movs r1, 9 | r1 = 9;
0x00064a76 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00064a78 mov r0, r8 | r0 = r8;
0x00064a7a str r4, [sp] | *(sp) = r4;
0x00064a7c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00064a80 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00064a82 ldrb.w r5, [sp, 0xb4] | r5 = var_b4h;
0x00064a86 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00064a88 str r3, [sp] | *(sp) = r3;
0x00064a8a mov r3, r7 | r3 = r7;
0x00064a8c ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x00064a8e cmp r5, 2 |
0x00064a90 ite eq |
| if (r5 != 2) {
0x00064a92 moveq r0, 0x80 | r0 = 0x80;
| }
| if (r5 == 2) {
0x00064a94 movne r0, 0x40 | r0 = 0x40;
| }
0x00064a96 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00064a98 str r4, [sp, 0xc] | var_ch = r4;
0x00064a9a orr.w r0, r0, r7, lsl 9 | r0 |= (r7 << 9);
0x00064a9e ldr r7, [sp, 0x60] | r7 = var_60h;
0x00064aa0 str r4, [sp, 4] | var_4h = r4;
0x00064aa2 orrs r0, r7 | r0 |= r7;
0x00064aa4 str r0, [sp, 8] | var_8h = r0;
0x00064aa6 mov r0, sl | r0 = sl;
0x00064aa8 bl 0x707d8 | fcn_000707d8 (r0, r1, r2, r3, r4, r5, r6);
0x00064aac ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x00064aae mov r7, r0 | r7 = r0;
0x00064ab0 subs r3, r1, 1 | r3 = r1 - 1;
0x00064ab2 str r3, [sp, 0x7c] | var_7ch = r3;
0x00064ab4 cmp r0, 0 |
| if (r0 == 0) {
0x00064ab6 beq.w 0x64e9c | goto label_234;
| }
0x00064aba ldr r3, [sp, 0x28] | r3 = x;
0x00064abc ldrsb.w r2, [r0, 0x31] | r2 = *((r0 + 0x31));
0x00064ac0 ldrb.w r8, [r0, 0x33] | r8 = *((r0 + 0x33));
0x00064ac4 ldr r3, [r3] | r3 = *(r3);
0x00064ac6 cmp r3, r2 |
| if (r3 == r2) {
0x00064ac8 beq.w 0x656a4 | goto label_235;
| }
0x00064acc cmp r5, 0 |
| if (r5 == 0) {
0x00064ace beq.w 0x6569c | goto label_236;
| }
0x00064ad2 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00064ad6 lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 < r3) {
0x00064ad8 bmi.w 0x65736 | goto label_237;
| }
0x00064adc ldr r3, [pc, 0x30c] |
0x00064ade add r3, pc | r3 = 0xc98ce;
| label_86:
0x00064ae0 ldr r2, [pc, 0x30c] |
0x00064ae2 movs r1, 0 | r1 = 0;
0x00064ae4 mov r0, sl | r0 = sl;
0x00064ae6 add r2, pc | r2 = 0xc98da;
0x00064ae8 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00064aec ldr r3, [sp, 0x28] | r3 = x;
0x00064aee ldr r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x00064af0 ldr r0, [r3] | r0 = *(r3);
0x00064af2 cmp r1, 0 |
0x00064af4 str r0, [sp, 0x3c] | var_3ch = r0;
| if (r1 <= 0) {
0x00064af6 ble.w 0x65d70 | goto label_238;
| }
0x00064afa ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x00064afc movs r2, 0x14 | r2 = 0x14;
0x00064afe mov sb, r0 | sb = r0;
0x00064b00 mla r1, r2, r1, r3 | __asm ("mla r1, r2, r1, r3");
| do {
0x00064b04 ldrsh.w r2, [r3, 0x12] | r2 = *((r3 + 0x12));
0x00064b08 adds r3, 0x14 | r3 += 0x14;
0x00064b0a cmp r2, sb |
0x00064b0c it ge |
| if (r2 < sb) {
0x00064b0e addge sb, sb, 1 | sb++;
| }
0x00064b12 cmp r1, r3 |
0x00064b14 bne 0x64b04 |
| } while (r1 != r3);
| label_114:
0x00064b16 movs r4, 0 | r4 = 0;
0x00064b18 mov r1, sb | r1 = sb;
0x00064b1a mov r0, sl | r0 = sl;
0x00064b1c bl 0xfd2c | fcn_0000fd2c (r0, r1);
0x00064b20 ldr r1, [sp, 0x28] | r1 = x;
0x00064b22 mov r2, r0 | r2 = r0;
0x00064b24 str r0, [sp, 0x18] | var_18h = r0;
0x00064b26 mov r3, r4 | r3 = r4;
0x00064b28 mov r0, sl | r0 = sl;
0x00064b2a str r4, [sp] | *(sp) = r4;
0x00064b2c bl 0x6cf04 | fcn_0006cf04 (r0, r1, r2, r3, r4);
0x00064b30 ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x00064b32 cmp r0, r4 |
0x00064b34 ittt gt |
| if (r0 <= r4) {
0x00064b36 strgt r7, [sp, 0x84] | var_84h = r7;
| }
| if (r0 <= r4) {
0x00064b38 movgt r5, r4 | r5 = r4;
| }
| if (r0 <= r4) {
0x00064b3a ldrgt r7, [sp, 0x3c] | r7 = var_3ch;
| }
| if (r0 > r4) {
0x00064b3c bgt 0x64b4a | goto label_239;
| }
0x00064b3e b 0x64fe2 | goto label_240;
| do {
| label_38:
0x00064b40 adds r4, 1 | r4++;
0x00064b42 adds r5, 0x14 | r5 += 0x14;
0x00064b44 cmp r0, r4 |
| if (r0 <= r4) {
0x00064b46 ble.w 0x64fe0 | goto label_241;
| }
| label_239:
0x00064b4a ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x00064b4c adds r2, r3, r5 | r2 = r3 + r5;
0x00064b4e ldrsh.w r1, [r2, 0x12] | r1 = *((r2 + 0x12));
0x00064b52 cmp r1, r7 |
0x00064b54 blt 0x64b40 |
| } while (r1 < r7);
0x00064b56 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00064b58 ldr r1, [r3, r5] | r1 = *((r3 + r5));
0x00064b5a ldrsh.w r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00064b5e add r0, r7 | r0 += r7;
0x00064b60 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00064b62 str r0, [sp] | *(sp) = r0;
0x00064b64 adds r7, 1 | r7++;
0x00064b66 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00064b68 bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
0x00064b6c ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x00064b6e b 0x64b40 | goto label_38;
| label_201:
0x00064b70 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00064b72 ldr r1, [r2, 0x6c] | r1 = *((r2 + 0x6c));
0x00064b74 ldr r2, [r2, 0x70] | r2 = *((r2 + 0x70));
0x00064b76 str r1, [sp, 0x4c] | var_4ch = r1;
0x00064b78 cmp r1, r2 |
| if (r1 >= r2) {
0x00064b7a bge.w 0x655ec | goto label_242;
| }
0x00064b7e ldr r2, [sp, 0x24] | r2 = var_24h;
0x00064b80 ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x00064b82 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00064b86 ldr.w ip, [r2, 0x68] | ip = *((r2 + 0x68));
0x00064b8a add.w r1, r0, r0, lsl 2 | r1 = r0 + (r0 << 2);
0x00064b8e adds r0, 1 | r0++;
0x00064b90 str r0, [r2, 0x6c] | *((r2 + 0x6c)) = r0;
0x00064b92 movs r0, 0xe | r0 = 0xe;
0x00064b94 add.w r2, ip, r1, lsl 2 | r2 = ip + (r1 << 2);
0x00064b98 str.w r0, [ip, r1, lsl 2] | __asm ("str.w r0, [ip, r1, lsl 2]");
0x00064b9c adds r1, r2, 4 | r1 = r2 + 4;
0x00064b9e vst1.32 {d16}, [r1] | __asm ("vst1.32 {d16}, [r1]");
0x00064ba0 lsls r7, r1, 0x1e | r7 = r1 << 0x1e;
0x00064ba2 strd r3, r3, [r2, 0xc] | __asm ("strd r3, r3, [r2, 0xc]");
| label_82:
0x00064ba6 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00064ba8 movs r1, 0xc | r1 = 0xc;
0x00064baa ldr r2, [pc, 0x248] |
0x00064bac mov r0, sl | r0 = sl;
0x00064bae strb.w r1, [sp, 0xdc] | var_dch = r1;
0x00064bb2 movs r1, 1 | r1 = 1;
0x00064bb4 str r3, [sp, 0xe0] | var_e0h = r3;
0x00064bb6 movs r3, 0 | r3 = 0;
0x00064bb8 add r2, pc | r2 = 0xc99b2;
0x00064bba str r3, [sp, 0xe4] | var_e4h = r3;
0x00064bbc str r3, [sp, 0xf0] | var_f0h = r3;
0x00064bbe strd r3, r3, [sp, 0xe8] | __asm ("strd r3, r3, [var_e8h]");
0x00064bc2 mov r3, r4 | r3 = r4;
0x00064bc4 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00064bc8 mov r2, r8 | r2 = r8;
0x00064bca mov r1, r7 | r1 = r7;
0x00064bcc mov r0, sl | r0 = sl;
0x00064bce bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00064bd2 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00064bd4 ldrh r2, [r7, 2] | r2 = *((r7 + 2));
0x00064bd6 strh r2, [r3, 0x26] | *((r3 + 0x26)) = r2;
0x00064bd8 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00064bda cmp r3, 0 |
| if (r3 == 0) {
0x00064bdc beq.w 0x6425a | goto label_39;
| }
0x00064be0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00064be2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00064be4 ldr r1, [r3, 0x6c] | r1 = *((r3 + 0x6c));
0x00064be6 itt lt |
| if (r3 >= 0) {
0x00064be8 addlt r3, r1, -1 | r3 = r1 + -1;
| }
| if (r3 < 0) {
0x00064bec str r3, [sp, 0x4c] | var_4ch = r3;
| }
0x00064bee ldr r3, [r2] | r3 = *(r2);
0x00064bf0 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00064bf4 cmp r3, 0 |
| if (r3 != 0) {
0x00064bf6 bne.w 0x64e92 | goto label_243;
| }
0x00064bfa ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00064bfc ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x00064bfe add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00064c02 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_57:
0x00064c06 str r1, [r3, 8] | *((r3 + 8)) = r1;
0x00064c08 b.w 0x6425a | goto label_39;
| label_189:
0x00064c0c ldr r2, [sp, 0x24] | r2 = var_24h;
0x00064c0e ldr r3, [r2] | r3 = *(r2);
0x00064c10 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00064c14 cmp r3, 0 |
| if (r3 != 0) {
0x00064c16 bne.w 0x64f04 | goto label_244;
| }
0x00064c1a ldr r3, [r2, 0x68] | r3 = *((r2 + 0x68));
0x00064c1c add.w r4, r7, r7, lsl 2 | r4 = r7 + (r7 << 2);
0x00064c20 add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_61:
0x00064c24 movs r2, 0x77 | r2 = 0x77;
0x00064c26 strb r2, [r3] | *(r3) = r2;
0x00064c28 movs r3, 1 | r3 = 1;
0x00064c2a strb.w r3, [sp, 0x11c] | var_11ch = r3;
0x00064c2e b.w 0x63f50 | goto label_40;
| label_147:
0x00064c32 movs r1, 0 | r1 = 0;
0x00064c34 movs r0, 0xc | r0 = 0xc;
0x00064c36 bl 0x13558 | fcn_00013558 (r0);
0x00064c3a b.w 0x637a8 | goto label_41;
| label_188:
0x00064c3e ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x00064c40 movs r2, 0 | r2 = 0;
0x00064c42 movs r1, 0x76 | r1 = 0x76;
0x00064c44 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00064c46 ldr r3, [r4] | r3 = *(r4);
0x00064c48 str r2, [sp] | *(sp) = r2;
0x00064c4a ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00064c4c str r3, [sp, 0x40] | var_40h = r3;
0x00064c4e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00064c50 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00064c54 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00064c58 lsls r2, r3, 0x14 | r2 = r3 << 0x14;
0x00064c5a mov r1, r3 | r1 = r3;
| if (r2 >= r3) {
0x00064c5c bpl.w 0x63f20 | goto label_42;
| }
0x00064c60 ldr r2, [r4] | r2 = *(r4);
0x00064c62 subs r6, r2, 1 | r6 = r2 - 1;
0x00064c64 cmp r6, 0 |
| if (r6 <= 0) {
0x00064c66 ble 0x64cb0 | goto label_245;
| }
0x00064c68 mov r3, r4 | r3 = r4;
0x00064c6a ldr.w r8, [sp, 0x20] | r8 = var_20h;
0x00064c6e add.w r4, r4, r2, lsl 4 | r4 += (r2 << 4);
0x00064c72 mov sb, r3 | sb = r3;
0x00064c74 b 0x64ca2 |
| while (r3 >= r3) {
0x00064c76 ldr r1, [r4, -0x8] | r1 = *((r4 - 0x8));
| if (r1 != 0) {
0x00064c7a cbz r1, 0x64c82 |
0x00064c7c mov r0, r8 | r0 = r8;
0x00064c7e bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x00064c82 ldr r1, [r4, -0x4] | r1 = *((r4 - 0x4));
| if (r1 != 0) {
0x00064c86 cbz r1, 0x64c8e |
0x00064c88 mov r0, r8 | r0 = r8;
0x00064c8a bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x00064c8e ldr.w r2, [sb] | r2 = *(sb);
0x00064c92 subs r6, 1 | r6--;
0x00064c94 sub.w r4, r4, 0x10 | r4 -= 0x10;
0x00064c98 add.w r2, r2, -1 | r2 += -1;
0x00064c9c str.w r2, [sb] | __asm ("str.w r2, [sb]");
| if (r6 == 1) {
0x00064ca0 beq 0x64cac | goto label_246;
| }
0x00064ca2 add.w r3, sb, r6, lsl 4 | r3 = sb + (r6 << 4);
0x00064ca6 ldrb r3, [r3, 0x11] | r3 = *((r3 + 0x11));
0x00064ca8 lsls r3, r3, 0x19 | r3 <<= 0x19;
0x00064caa bpl 0x64c76 |
| }
| label_246:
0x00064cac ldr.w r3, [fp, 4] | r3 = *(arg_4h);
| label_245:
0x00064cb0 cmp r2, 0 |
0x00064cb2 mov r1, r3 | r1 = r3;
| if (r2 <= 0) {
0x00064cb4 ble.w 0x63f20 | goto label_42;
| }
0x00064cb8 ldr.w ip, [sp, 0x2c] | ip = var_2ch;
0x00064cbc movs r3, 0 | r3 = 0;
0x00064cbe movs r4, 0x79 | r4 = 0x79;
0x00064cc0 mov r0, ip | r0 = ip;
| do {
0x00064cc2 adds r3, 1 | r3++;
0x00064cc4 adds r0, 0x10 | r0 += 0x10;
0x00064cc6 add.w r6, ip, r3, lsl 4 | r6 = ip + (r3 << 4);
0x00064cca ldrb r6, [r6, 1] | r6 = *((r6 + 1));
0x00064ccc lsls r6, r6, 0x19 | r6 <<= 0x19;
0x00064cce itt pl |
| if (r6 < r6) {
0x00064cd0 ldrpl r6, [r0, -0x8] | r6 = *((r0 - 0x8));
| }
| if (r6 >= r6) {
0x00064cd4 strb r4, [r6] | *(r6) = r4;
| }
0x00064cd6 cmp r3, r2 |
0x00064cd8 bne 0x64cc2 |
| } while (r3 != r2);
0x00064cda b.w 0x63f20 | goto label_42;
| label_187:
0x00064cde ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00064ce0 mov.w r2, -1 | r2 = -1;
0x00064ce4 mov r0, r5 | r0 = r5;
0x00064ce6 bl 0x39af4 | r0 = fcn_00039af4 (r0, r1, r2);
0x00064cea cmp r0, 0 |
| if (r0 != 0) {
0x00064cec bne.w 0x63ed2 | goto label_43;
| }
0x00064cf0 ldr.w r2, [fp, 0x44] | r2 = *(arg_44h);
0x00064cf4 cmp r2, 0 |
| if (r2 != 0) {
0x00064cf6 bne.w 0x63ed2 | goto label_43;
| }
0x00064cfa ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00064cfe ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00064d00 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00064d02 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x00064d06 str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x00064d0a bl 0x321b0 | fcn_000321b0 (r0, r1, r2, r3, r4);
0x00064d0e ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00064d12 str r0, [sp, 0x28] | x = r0;
0x00064d14 str.w r0, [fp, 0x28] | __asm ("str.w r0, [arg_28h]");
0x00064d18 orr r3, r3, 8 | r3 |= 8;
0x00064d1c str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x00064d20 movs r3, 2 | r3 = 2;
0x00064d22 strb.w r3, [sp, 0xb4] | var_b4h = r3;
0x00064d26 b.w 0x63ed2 | goto label_43;
| label_163:
0x00064d2a movs r0, 0x40 | r0 = 0x40;
0x00064d2c movs r1, 0 | r1 = 0;
0x00064d2e bl 0x13558 | fcn_00013558 (r0);
0x00064d32 str r0, [sp, 0x18] | var_18h = r0;
0x00064d34 cmp r0, 0 |
| if (r0 != 0) {
0x00064d36 bne.w 0x63a7c | goto label_44;
| }
0x00064d3a b.w 0x639ac | goto label_19;
| label_162:
0x00064d3e ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x00064d42 cmp r3, 0 |
| if (r3 == 0) {
0x00064d44 beq.w 0x6533e | goto label_247;
| }
| label_72:
0x00064d48 mov r0, sl | r0 = sl;
0x00064d4a bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x00064d4e ldr.w r4, [fp, 0x44] | r4 = *(arg_44h);
0x00064d52 ldr.w r8, [fp, 4] | r8 = *(arg_4h);
0x00064d56 str r0, [sp, 0x44] | var_44h = r0;
0x00064d58 b.w 0x63a46 | goto label_45;
| label_211:
0x00064d5c ldr r3, [pc, 0x98] |
0x00064d5e add r3, pc | r3 = 0xc9b5a;
0x00064d60 b.w 0x64464 | goto label_46;
| if (r4 != 0) {
| label_228:
0x00064d64 cbz r4, 0x64d70 |
0x00064d66 ldr r0, [sp, 0x28] | r0 = x;
0x00064d68 mov r1, r4 | r1 = r4;
0x00064d6a movs r2, 1 | r2 = 1;
0x00064d6c bl 0x1a4b8 | fcn_0001a4b8 (r0, r1, r2);
| }
0x00064d70 movs r4, 0 | r4 = 0;
0x00064d72 b 0x6494e | goto label_47;
| label_213:
0x00064d74 ldr r3, [sp, 0x28] | r3 = x;
0x00064d76 strh.w r3, [fp, 2] | *(arg_2h) = r3;
0x00064d7a b.w 0x64520 | goto label_48;
| label_230:
0x00064d7e movs r1, 0 | r1 = 0;
0x00064d80 movs r0, 0xc | r0 = 0xc;
0x00064d82 bl 0x13558 | fcn_00013558 (r0);
0x00064d86 b 0x6496c | goto label_49;
| label_212:
0x00064d88 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00064d8a ldr r1, [sp, 0x24] | r1 = var_24h;
0x00064d8c rsbs r2, r3, 0 | r2 = r3 - ;
0x00064d8e bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00064d92 b.w 0x644a0 | goto label_50;
| label_200:
0x00064dfc movs r3, 0 | r3 = 0;
0x00064dfe ldr r0, [sp, 0x24] | r0 = var_24h;
0x00064e00 mov r2, r3 | r2 = r3;
0x00064e02 str r3, [sp] | *(sp) = r3;
0x00064e04 movs r1, 8 | r1 = 8;
0x00064e06 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00064e0a adds r3, r0, 1 | r3 = r0 + 1;
0x00064e0c mov sb, r0 | sb = r0;
0x00064e0e str r3, [sp, 0x44] | var_44h = r3;
0x00064e10 b.w 0x64208 | goto label_51;
| label_206:
0x00064e14 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00064e16 mov r0, sl | r0 = sl;
0x00064e18 mov.w r2, -1 | r2 = -1;
0x00064e1c mov r1, fp | r1 = fp;
0x00064e1e str r3, [sp, 0xc] | var_ch = r3;
0x00064e20 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x00064e22 str r3, [sp, 8] | var_8h = r3;
0x00064e24 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00064e26 str r3, [sp, 4] | var_4h = r3;
0x00064e28 add r3, sp, 0xb4 | r3 += var_b4h;
0x00064e2a str r3, [sp] | *(sp) = r3;
0x00064e2c add r3, sp, 0xfc | r3 += var_fch;
0x00064e2e bl 0x6e488 | fcn_0006e488 (r0, r1, r2, r3, r4, r5, r6);
0x00064e32 mov r0, r4 | r0 = r4;
0x00064e34 bl 0x73e14 | fcn_00073e14 (r0, r1);
0x00064e38 b.w 0x64448 | goto label_52;
| label_195:
0x00064e3c movs r3, 2 | r3 = 2;
0x00064e3e str r0, [sp] | *(sp) = r0;
0x00064e40 movs r1, 0x76 | r1 = 0x76;
0x00064e42 mov r0, r5 | r0 = r5;
0x00064e44 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00064e48 ldr r3, [r5] | r3 = *(r5);
0x00064e4a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00064e4e cmp r3, 0 |
| if (r3 == 0) {
0x00064e50 beq.w 0x640f0 | goto label_53;
| }
0x00064e54 b.w 0x64104 | goto label_54;
| label_225:
0x00064e58 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00064e5a mov sl, r7 | sl = r7;
0x00064e5c ldr r3, [r3] | r3 = *(r3);
0x00064e5e b.w 0x63d0a | goto label_30;
| label_192:
0x00064e62 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x00064e66 cmp r3, 0 |
| if (r3 == 0) {
0x00064e68 beq.w 0x65620 | goto label_248;
| }
| label_84:
0x00064e6c mov r0, sl | r0 = sl;
0x00064e6e bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x00064e72 mov r7, r0 | r7 = r0;
0x00064e74 b.w 0x63fa6 | goto label_55;
| label_218:
0x00064e78 movs r1, 0 | r1 = 0;
0x00064e7a movs r0, 0xc | r0 = 0xc;
0x00064e7c bl 0x13558 | fcn_00013558 (r0);
0x00064e80 b.w 0x64562 | goto label_56;
| label_70:
0x00064e84 ldr r3, [sp, 0x58] | r3 = var_58h;
0x00064e86 rsbs r2, r3, 0 | r2 = r3 - ;
| label_209:
0x00064e88 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00064e8a bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00064e8e b.w 0x64448 | goto label_52;
| label_243:
0x00064e92 ldr.w r3, [pc, 0xb08] | r3 = *(0x0006599c);
0x00064e96 add r3, pc | r3 += pc;
0x00064e98 adds r3, 4 | r3 += 4;
0x00064e9a b 0x64c06 | goto label_57;
| label_234:
0x00064e9c ldr r3, [sp, 0x34] | r3 = var_34h;
| if (r3 != 0) {
0x00064e9e cbz r3, 0x64ea8 |
0x00064ea0 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00064ea2 mov r1, r3 | r1 = r3;
0x00064ea4 bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
| label_77:
0x00064ea8 movs r4, 1 | r4 = 1;
0x00064eaa b.w 0x644ac | goto label_58;
| label_165:
0x00064eae str r2, [sp, 0xe4] | var_e4h = r2;
0x00064eb0 ldr.w r5, [fp, 0x30] | r5 = *(arg_30h);
0x00064eb4 ldr.w r2, [pc, 0xae8] | r2 = *(0x000659a0);
0x00064eb8 add r2, pc | r2 += pc;
0x00064eba str r2, [sp, 0xe0] | var_e0h = r2;
0x00064ebc cmp r5, 0 |
| if (r5 == 0) {
0x00064ebe beq.w 0x63abc | goto label_59;
| }
0x00064ec2 ldr r6, [r5] | r6 = *(r5);
0x00064ec4 cmp r6, 0 |
| if (r6 <= 0) {
0x00064ec6 ble.w 0x63abc | goto label_59;
| }
0x00064eca ldr r7, [sp, 0x48] | r7 = var_48h;
0x00064ecc adds r5, 0x18 | r5 += 0x18;
| do {
0x00064ece ldr r1, [r5, -0x10] | r1 = *((r5 - 0x10));
| if (r1 != 0) {
0x00064ed2 cbz r1, 0x64edc |
0x00064ed4 mov r0, r7 | r0 = r7;
0x00064ed6 bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
| if (r0 != 0) {
0x00064eda cbnz r0, 0x64ee4 | goto label_249;
| }
| }
0x00064edc subs r6, 1 | r6--;
0x00064ede add.w r5, r5, 0x10 | r5 += 0x10;
0x00064ee2 bne 0x64ece |
| } while (r6 != 1);
| label_249:
0x00064ee4 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00064ee8 b.w 0x63abc | goto label_59;
| label_210:
0x00064eec ldr.w r3, [pc, 0xab4] |
0x00064ef0 movs r1, 0 | r1 = 0;
0x00064ef2 ldr.w r2, [pc, 0xab4] | r2 = *(0x000659a8);
0x00064ef6 mov r0, sl | r0 = sl;
0x00064ef8 add r3, pc | r3 = 0xca8a0;
0x00064efa add r2, pc | r2 += pc;
0x00064efc bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00064f00 b.w 0x64452 | goto label_60;
| label_244:
0x00064f04 ldr.w r3, [pc, 0xaa4] |
0x00064f08 add r3, pc | r3 = 0xca8b8;
0x00064f0a adds r3, 4 | r3 += 4;
0x00064f0c b 0x64c24 | goto label_61;
| label_196:
0x00064f0e ldr.w r3, [r3, 0x210] | r3 = *((r3 + 0x210));
0x00064f12 cmp r3, 0 |
| if (r3 != 0) {
0x00064f14 bne.w 0x64104 | goto label_54;
| }
0x00064f18 ldr r3, [r7] | r3 = *(r7);
0x00064f1a subs r3, 1 | r3--;
0x00064f1c str r3, [r7] | *(r7) = r3;
0x00064f1e cmp r3, 0 |
| if (r3 != 0) {
0x00064f20 bne.w 0x64104 | goto label_54;
| }
0x00064f24 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x00064f26 mov r1, r7 | r1 = r7;
0x00064f28 bl 0x16808 | fcn_00016808 (r0, r1);
0x00064f2c b.w 0x64104 | goto label_54;
| label_216:
0x00064f30 cmp r0, 0 |
| if (r0 <= 0) {
0x00064f32 ble 0x64f4c | goto label_250;
| }
0x00064f34 ldr r4, [sp, 0x28] | r4 = x;
0x00064f36 movs r1, 0 | r1 = 0;
0x00064f38 movs r3, 0x10 | r3 = 0x10;
| do {
0x00064f3a ldrb r2, [r5, r3] | r2 = *((r5 + r3));
0x00064f3c adds r1, 1 | r1++;
0x00064f3e cmp r0, r1 |
0x00064f40 and r2, r2, 1 | r2 &= 1;
0x00064f44 strb r2, [r4, r3] | *((r4 + r3)) = r2;
0x00064f46 add.w r3, r3, 0x10 | r3 += 0x10;
0x00064f4a bne 0x64f3a |
| } while (r0 != r1);
| label_250:
0x00064f4c ldr r0, [sp, 0x28] | r0 = x;
0x00064f4e mov.w r2, -1 | r2 = -1;
0x00064f52 mov r1, r5 | r1 = r5;
0x00064f54 bl 0x39af4 | r0 = fcn_00039af4 (r0, r1, r2);
0x00064f58 clz r3, r0 | r3 &= r0;
0x00064f5c lsrs r3, r3, 5 | r3 >>= 5;
0x00064f5e str r3, [sp, 0x4c] | var_4ch = r3;
0x00064f60 b.w 0x64524 | goto label_62;
| label_229:
0x00064f64 movs r4, 7 | r4 = 7;
0x00064f66 b 0x6494e | goto label_47;
| label_208:
0x00064f68 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00064f6a bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00064f6e b.w 0x64420 | goto label_63;
| label_207:
0x00064f72 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00064f74 rsbs r2, r4, 0 | r2 = r4 - ;
0x00064f76 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00064f7a b.w 0x643e8 | goto label_64;
| label_148:
0x00064f7e mov r1, r6 | r1 = r6;
0x00064f80 mov r0, r3 | r0 = r3;
0x00064f82 bl 0x1a608 | fcn_0001a608 (r0, r1);
0x00064f86 b.w 0x637c6 | goto label_65;
| label_221:
0x00064f8a ldr.w r2, [fp, 0x2c] | r2 = *(arg_2ch);
0x00064f8e str r2, [sp, 0x38] | var_38h = r2;
0x00064f90 cmp r2, 0 |
| if (r2 == 0) {
0x00064f92 beq.w 0x656b6 | goto label_251;
| }
0x00064f96 ldr r0, [r6, 0x2c] | r0 = *((r6 + 0x2c));
0x00064f98 str r3, [sp, 0x38] | var_38h = r3;
0x00064f9a b.w 0x6463e | goto label_66;
| label_220:
0x00064f9e ldr r3, [sp, 0x28] | r3 = x;
0x00064fa0 ldr r4, [sp, 0x48] | r4 = var_48h;
0x00064fa2 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00064fa4 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x00064fa6 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x00064fa8 mov r0, r4 | r0 = r4;
0x00064faa bl 0x3156c | fcn_0003156c (r0, r1);
0x00064fae mov r1, r5 | r1 = r5;
0x00064fb0 mov r0, r4 | r0 = r4;
0x00064fb2 bl 0x3156c | fcn_0003156c (r0, r1);
0x00064fb6 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00064fb8 cmp r3, 0 |
| if (r3 == 0) {
0x00064fba beq.w 0x6462a | goto label_67;
| }
0x00064fbe add r3, sp, 0xc0 | r3 += var_c0h;
0x00064fc0 str r3, [sp, 0x38] | var_38h = r3;
0x00064fc2 b.w 0x64600 | goto label_68;
| label_164:
0x00064fc6 ldr r3, [sp, 0x28] | r3 = x;
0x00064fc8 ldr.w r3, [r3, 0x108] | r3 = *((r3 + 0x108));
0x00064fcc cmp r3, 0 |
| if (r3 == 0) {
0x00064fce beq.w 0x639ac | goto label_19;
| }
0x00064fd2 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x00064fd4 movs r1, 7 | r1 = 7;
0x00064fd6 str r1, [r3, 0xc] | *((r3 + 0xc)) = r1;
0x00064fd8 adds r2, 1 | r2++;
0x00064fda str r2, [r3, 0x24] | *((r3 + 0x24)) = r2;
0x00064fdc b.w 0x639ac | goto label_19;
| label_241:
0x00064fe0 ldr r7, [sp, 0x84] | r7 = var_84h;
| label_240:
0x00064fe2 ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x00064fe6 cmp r3, 0 |
| if (r3 == 0) {
0x00064fe8 beq.w 0x6579a | goto label_252;
| }
0x00064fec subs r3, 1 | r3--;
0x00064fee uxtb r3, r3 | r3 = (int8_t) r3;
0x00064ff0 strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x00064ff4 adds r3, 0x26 | r3 += 0x26;
0x00064ff6 ldr.w r4, [sl, r3, lsl 2] | offset_1 = r3 << 2;
| r4 = *((sl + offset_1));
| label_96:
0x00064ffa ldr r5, [sp, 0x24] | r5 = var_24h;
0x00064ffc mov r3, sb | r3 = sb;
0x00064ffe ldr r2, [sp, 0x18] | r2 = var_18h;
0x00065000 movs r1, 0x61 | r1 = 0x61;
0x00065002 str r4, [sp] | *(sp) = r4;
0x00065004 mov r0, r5 | r0 = r5;
0x00065006 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006500a movs r3, 0 | r3 = 0;
0x0006500c ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0006500e movs r1, 0x8b | r1 = 0x8b;
0x00065010 str r3, [sp] | *(sp) = r3;
0x00065012 mov r0, r5 | r0 = r5;
0x00065014 mov r3, r4 | r3 = r4;
0x00065016 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| if (r4 != 0) {
0x0006501a cbz r4, 0x65024 |
0x0006501c mov r1, r4 | r1 = r4;
0x0006501e mov r0, sl | r0 = sl;
0x00065020 bl 0xfd18 | fcn_0000fd18 (r0, r1);
| }
0x00065024 cmp.w sb, 1 |
| if (sb == 1) {
0x00065028 beq.w 0x657ce | goto label_253;
| }
0x0006502c ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x00065030 cmp r3, sb |
0x00065032 itt lt |
| if (r3 >= sb) {
0x00065034 ldrlt r3, [sp, 0x18] | r3 = var_18h;
| }
| if (r3 < sb) {
0x00065036 strdlt sb, r3, [sl, 0x1c] | __asm ("strdlt sb, r3, [sl, 0x1c]");
| }
| label_99:
0x0006503a mov r0, r7 | r0 = r7;
0x0006503c bl 0x73e14 | fcn_00073e14 (r0, r1);
0x00065040 ldr.w r5, [sl, 0x28] | r5 = *((sl + 0x28));
0x00065044 adds r3, r5, 1 | r3 = r5 + 1;
0x00065046 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x0006504a str r5, [r6, 8] | *((r6 + 8)) = r5;
0x0006504c ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x00065050 cmp r3, 0 |
| if (r3 == 0) {
0x00065052 beq.w 0x6573e | goto label_254;
| }
0x00065056 subs r3, 1 | r3--;
0x00065058 uxtb r3, r3 | r3 = (int8_t) r3;
0x0006505a strb.w r3, [sl, 0x13] | *((sl + 0x13)) = r3;
0x0006505e adds r3, 0x26 | r3 += 0x26;
0x00065060 ldr.w r4, [sl, r3, lsl 2] | offset_2 = r3 << 2;
| r4 = *((sl + offset_2));
| label_91:
0x00065064 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00065068 mov r3, r4 | r3 = r4;
0x0006506a ldr.w sb, [sp, 0x24] | sb = var_24h;
0x0006506e mov r2, r5 | r2 = r5;
0x00065070 movs r1, 0x79 | r1 = 0x79;
0x00065072 mov r0, sb | r0 = sb;
0x00065074 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065078 movs r3, 0 | r3 = 0;
0x0006507a ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0006507c movs r1, 0x21 | r1 = 0x21;
0x0006507e str r3, [sp] | *(sp) = r3;
0x00065080 mov r0, sb | r0 = sb;
0x00065082 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00065084 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065088 movs r3, 1 | r3 = 1;
0x0006508a strb r3, [r6, 1] | *((r6 + 1)) = r3;
0x0006508c ldr r3, [sp, 0x4c] | r3 = var_4ch;
| if (r3 != 0) {
0x0006508e cbz r3, 0x650aa |
0x00065090 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00065092 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00065094 ands r3, r3, 4 | r3 &= 4;
| if (r3 != r3) {
0x00065098 bne.w 0x657a6 | goto label_255;
| }
0x0006509c ldr.w sb, [sp, 0x24] | sb = var_24h;
0x000650a0 ldr r1, [sp, 0x110] | r1 = var_110h;
0x000650a2 str r3, [sp, 0xfc] | var_fch = r3;
0x000650a4 mov r0, sb | r0 = sb;
0x000650a6 bl 0x1cab0 | fcn_0001cab0 (r0, r1);
| }
0x000650aa ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x000650ae str r3, [sp, 0x18] | var_18h = r3;
| label_97:
0x000650b0 mov r3, r4 | r3 = r4;
0x000650b2 str r5, [sp] | *(sp) = r5;
0x000650b4 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000650b6 movs r1, 0x85 | r1 = 0x85;
0x000650b8 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x000650ba bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000650be ldr r3, [sp, 0x28] | r3 = x;
0x000650c0 movs r2, 1 | r2 = 1;
0x000650c2 str r2, [sp, 0x4c] | var_4ch = r2;
0x000650c4 ldr r3, [r3] | r3 = *(r3);
| label_87:
0x000650c6 cmp r3, 0 |
| if (r3 <= 0) {
0x000650c8 ble 0x6512a | goto label_256;
| }
0x000650ca ldr r3, [sp, 0x28] | r3 = x;
0x000650cc mov.w sb, 1 | sb = 1;
0x000650d0 strd r8, fp, [sp, 0x88] | __asm ("strd r8, fp, [var_0hx88]");
0x000650d4 str r5, [sp, 0x3c] | var_3ch = r5;
0x000650d6 str r7, [sp, 0x84] | var_84h = r7;
0x000650d8 mov r4, r3 | r4 = r3;
0x000650da ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x000650dc mov r7, r3 | r7 = r3;
0x000650de ldr.w fp, [sp, 0x30] | fp = var_30h;
0x000650e0 add sp, 0xc0 |
0x000650e2 ldr.w r8, [sp, 0x70] | r8 = var_70h;
0x000650e6 b 0x65102 |
| while (r5 != 0) {
0x000650e8 str r2, [sp] | *(sp) = r2;
0x000650ea mov r3, fp | r3 = fp;
0x000650ec ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x000650ee movs r1, 0x5e | r1 = 0x5e;
0x000650f0 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000650f2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_69:
0x000650f6 ldr r2, [r7] | r2 = *(r7);
0x000650f8 add.w fp, fp, 1 |
0x000650fc adds r4, 0x10 | r4 += 0x10;
0x000650fe cmp r2, fp |
| if (r2 <= fp) {
0x00065100 ble 0x65120 | goto label_257;
| }
0x00065102 add.w r2, r8, fp | r2 = r8 + fp;
0x00065106 cmp r5, 0 |
0x00065108 bne 0x650e8 |
| }
0x0006510a strb.w sb, [r6] | *(r6) = sb;
0x0006510e ldr.w r1, [sl, 8] | r1 = *((sl + 8));
0x00065112 cmp r1, 0 |
| if (r1 == 0) {
0x00065114 beq 0x650f6 | goto label_69;
| }
0x00065116 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00065118 mov r0, sl | r0 = sl;
0x0006511a bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x0006511e b 0x650f6 | goto label_69;
| label_257:
0x00065120 ldrd r7, r8, [sp, 0x84] | __asm ("ldrd r7, r8, [var_84h]");
0x00065124 mov r3, r2 | r3 = r2;
0x00065126 ldr.w fp, [sp, 0x8c] | fp = var_8ch;
| label_256:
0x0006512a ldr r1, [sp, 0x78] | r1 = var_78h;
| if (r1 != 0) {
0x0006512c cbz r1, 0x65134 |
0x0006512e ldr r2, [r1] | r2 = *(r1);
0x00065130 adds r2, 1 | r2++;
0x00065132 str r2, [r1] | *(r1) = r2;
| }
0x00065134 ldr r2, [sp, 0x78] | r2 = var_78h;
0x00065136 movs r1, 0x5a | r1 = 0x5a;
0x00065138 ldr r4, [sp, 0x24] | r4 = var_24h;
0x0006513a strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x0006513e mvn r3, 7 | r3 = ~7;
0x00065142 ldr r2, [sp, 0x64] | r2 = var_64h;
0x00065144 mov r0, r4 | r0 = r4;
0x00065146 str r3, [sp, 8] | var_8h = r3;
0x00065148 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0006514a bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0006514e mov r0, r4 | r0 = r4;
0x00065150 ldr r4, [r4, 0x6c] | r4 = *((r4 + 0x6c));
0x00065152 movs r3, 0 | r3 = 0;
0x00065154 movs r1, 0xd | r1 = 0xd;
0x00065156 mov r5, r3 | r5 = r3;
0x00065158 mov sb, r0 | sb = r0;
0x0006515a adds r2, r4, 1 | r2 = r4 + 1;
0x0006515c str r2, [sp] | *(sp) = r2;
0x0006515e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065162 ldr r1, [sp, 0x28] | r1 = x;
0x00065164 ldr r2, [sp, 0x70] | r2 = var_70h;
0x00065166 ldr r3, [r1] | r3 = *(r1);
0x00065168 movs r1, 0x4f | r1 = 0x4f;
0x0006516a str r3, [sp] | *(sp) = r3;
0x0006516c ldr r3, [sp, 0x64] | r3 = var_64h;
0x0006516e ldr.w r0, [sl, 8] | r0 = *((sl + 8));
0x00065172 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065176 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x00065178 movs r1, 9 | r1 = 9;
0x0006517a ldr r2, [sp, 0x48] | r2 = var_48h;
0x0006517c mov r0, sb | r0 = sb;
0x0006517e str r5, [sp] | *(sp) = r5;
0x00065180 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065184 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00065186 movs r1, 0x31 | r1 = 0x31;
0x00065188 ldr r2, [sp, 0x74] | r2 = var_74h;
0x0006518a mov r0, sb | r0 = sb;
0x0006518c str r5, [sp] | *(sp) = r5;
0x0006518e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065192 ldr r3, [sp, 0x68] | r3 = var_68h;
0x00065194 movs r1, 9 | r1 = 9;
0x00065196 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00065198 mov r0, sb | r0 = sb;
0x0006519a str r5, [sp] | *(sp) = r5;
0x0006519c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000651a0 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000651a2 cmp r4, r5 |
0x000651a4 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x000651a8 ldr r3, [r1] | r3 = *(r1);
0x000651aa it lt |
| if (r4 >= r5) {
0x000651ac addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x000651b0 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000651b4 cmp r3, 0 |
| if (r3 != 0) {
0x000651b6 bne.w 0x655e4 | goto label_258;
| }
0x000651ba ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x000651bc movs r1, 0x14 | r1 = 0x14;
0x000651be mla r3, r1, r4, r3 | __asm ("mla r3, r1, r4, r3");
| label_81:
0x000651c2 ldr r5, [sp, 0x54] | r5 = var_54h;
0x000651c4 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000651c6 mov r0, sl | r0 = sl;
0x000651c8 mov r3, r8 | r3 = r8;
0x000651ca mov r2, r6 | r2 = r6;
0x000651cc mov r1, r5 | r1 = r5;
0x000651ce movs r4, 0 | r4 = 0;
0x000651d0 bl 0x6f4f0 | fcn_0006f4f0 (r0, r1, r2, r3, r4, r5, r6);
0x000651d4 mov r3, r5 | r3 = r5;
0x000651d6 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000651d8 movs r2, 1 | r2 = 1;
0x000651da movs r1, 0x47 | r1 = 0x47;
0x000651dc str r4, [sp] | *(sp) = r4;
0x000651de mov r0, r5 | r0 = r5;
0x000651e0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000651e4 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000651e6 cmp r3, 0 |
| if (r3 == 0) {
0x000651e8 beq.w 0x655d4 | goto label_259;
| }
0x000651ec str r4, [sp] | *(sp) = r4;
0x000651ee movs r1, 0x24 | r1 = 0x24;
0x000651f0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000651f2 mov r0, r5 | r0 = r5;
0x000651f4 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x000651f6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_80:
0x000651fa ldr r3, [sp, 0x34] | r3 = var_34h;
| if (r3 != 0) {
0x000651fc cbz r3, 0x65206 |
0x000651fe ldr r0, [sp, 0x20] | r0 = var_20h;
0x00065200 mov r1, r3 | r1 = r3;
0x00065202 bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x00065206 ldr r5, [sp, 0x24] | r5 = var_24h;
0x00065208 movs r4, 0 | r4 = 0;
0x0006520a ldr.w sb, [sp, 0x48] | sb = var_48h;
0x0006520e movs r1, 9 | r1 = 9;
0x00065210 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x00065212 mov r0, r5 | r0 = r5;
0x00065214 str r4, [sp] | *(sp) = r4;
0x00065216 mov r2, sb | r2 = sb;
0x00065218 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006521c ldr r1, [sp, 0x50] | r1 = var_50h;
0x0006521e mov r0, r5 | r0 = r5;
0x00065220 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x00065224 ldr r3, [sp, 0x74] | r3 = var_74h;
0x00065226 movs r2, 1 | r2 = 1;
0x00065228 ldr r7, [r5, 0x6c] | r7 = *((r5 + 0x6c));
0x0006522a movs r1, 0x47 | r1 = 0x47;
0x0006522c mov r0, r5 | r0 = r5;
0x0006522e str r4, [sp] | *(sp) = r4;
0x00065230 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065234 mov r3, r4 | r3 = r4;
0x00065236 mov r2, sb | r2 = sb;
0x00065238 movs r1, 0x43 | r1 = 0x43;
0x0006523a mov r0, r5 | r0 = r5;
0x0006523c str r4, [sp] | *(sp) = r4;
0x0006523e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065242 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00065244 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00065248 cmn r2, r3 |
| if (r2 < r3) {
0x0006524a bmi.w 0x6572a | goto label_260;
| }
0x0006524e ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00065250 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00065252 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00065254 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x00065256 lsls r3, r3, 2 | r3 <<= 2;
0x00065258 rsbs r3, r3, 0 | r3 -= ;
0x0006525a str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_90:
0x0006525c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0006525e movs r5, 0 | r5 = 0;
0x00065260 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00065262 movs r1, 0x31 | r1 = 0x31;
0x00065264 ldr r4, [r3, 0x6c] | r4 = *((r3 + 0x6c));
0x00065266 mov sb, r3 | sb = r3;
0x00065268 mov r0, r3 | r0 = r3;
0x0006526a str r5, [sp] | *(sp) = r5;
0x0006526c adds r3, r4, 2 | r3 = r4 + 2;
0x0006526e adds r4, 1 | r4++;
0x00065270 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065274 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00065276 mov r3, r5 | r3 = r5;
0x00065278 movs r1, 0x43 | r1 = 0x43;
0x0006527a mov r0, sb | r0 = sb;
0x0006527c str r5, [sp] | *(sp) = r5;
0x0006527e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065282 ldr.w r0, [sl, 8] | r0 = *((sl + 8));
0x00065286 mov r1, r6 | r1 = r6;
0x00065288 bl 0x2df50 | fcn_0002df50 (r0, r1, r2);
0x0006528c ldr r1, [sp, 0x44] | r1 = var_44h;
0x0006528e movs r3, 0x10 | r3 = 0x10;
0x00065290 mov r2, r4 | r2 = r4;
0x00065292 mov r0, sl | r0 = sl;
0x00065294 bl 0x67af8 | fcn_00067af8 (r0, r1, r2, r3);
0x00065298 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0006529a add r3, sp, 0xb4 | r3 += var_b4h;
0x0006529c mov.w r2, -1 | r2 = -1;
0x000652a0 mov r0, sl | r0 = sl;
0x000652a2 str r3, [sp] | *(sp) = r3;
0x000652a4 add r3, sp, 0xfc | r3 += var_fch;
0x000652a6 str r1, [sp, 4] | var_4h = r1;
0x000652a8 mov r1, fp | r1 = fp;
0x000652aa strd r4, r7, [sp, 8] | __asm ("strd r4, r7, [var_8h]");
0x000652ae bl 0x6e488 | fcn_0006e488 (r0, r1, r2, r3, r4, r5, r6);
0x000652b2 ldr r2, [sp, 0x48] | r2 = var_48h;
0x000652b4 mov r3, r5 | r3 = r5;
0x000652b6 movs r1, 0x43 | r1 = 0x43;
0x000652b8 mov r0, sb | r0 = sb;
0x000652ba str r5, [sp] | *(sp) = r5;
0x000652bc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000652c0 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x000652c4 ldr r2, [sp, 0x68] | r2 = var_68h;
0x000652c6 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000652ca mvns r2, r2 | r2 = ~r2;
0x000652cc cmn r1, r3 |
| if (r1 < r3) {
0x000652ce bmi.w 0x65722 | goto label_261;
| }
0x000652d2 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000652d4 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000652d6 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x000652d8 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_89:
0x000652dc mov r1, r6 | r1 = r6;
0x000652de mov r0, sl | r0 = sl;
0x000652e0 bl 0x30670 | fcn_00030670 (r0, r1);
0x000652e4 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000652e6 movs r4, 0 | r4 = 0;
0x000652e8 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000652ea mov r2, r4 | r2 = r4;
0x000652ec movs r1, 0x47 | r1 = 0x47;
0x000652ee str r4, [sp] | *(sp) = r4;
0x000652f0 mov r0, r5 | r0 = r5;
0x000652f2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000652f6 mov r3, r4 | r3 = r4;
0x000652f8 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x000652fa movs r1, 0x43 | r1 = 0x43;
0x000652fc mov r0, r5 | r0 = r5;
0x000652fe str r4, [sp] | *(sp) = r4;
0x00065300 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065304 ldr r3, [sp, 0x60] | r3 = var_60h;
0x00065306 cmp r3, r4 |
0x00065308 it ne |
| if (r3 != r4) {
0x0006530a cmpne r8, r4 | __asm ("cmpne r8, r4");
| }
| if (r3 != r4) {
0x0006530c bne.w 0x6568c | goto label_262;
| }
| label_79:
0x00065310 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00065312 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00065314 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00065318 cmn r2, r3 |
| if (r2 < r3) {
0x0006531a bmi.w 0x64e84 | goto label_70;
| }
0x0006531e ldr r3, [sp, 0x58] | r3 = var_58h;
0x00065320 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00065322 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00065324 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x00065326 lsls r3, r3, 2 | r3 <<= 2;
0x00065328 rsbs r3, r3, 0 | r3 -= ;
0x0006532a str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0006532c b.w 0x64448 | goto label_52;
| label_205:
0x00065330 movs r2, 0x60 | r2 = 0x60;
0x00065332 mla r3, r2, r3, r4 | __asm ("mla r3, r2, r3, r4");
0x00065336 ldr.w r3, [r3, 0x310] | r3 = *((r3 + 0x310));
0x0006533a b.w 0x64384 | goto label_71;
| label_247:
0x0006533e ldr.w r3, [sl] | r3 = *(sl);
0x00065342 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00065344 lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x00065346 itt pl |
| if (r1 < r3) {
0x00065348 movpl r3, 1 | r3 = 1;
| }
| if (r1 < r3) {
0x0006534a strbpl r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| }
0x0006534e b 0x64d48 | goto label_72;
| label_166:
0x00065350 mov.w r2, -1 | r2 = -1;
0x00065354 str r3, [r0] | *(r0) = r3;
0x00065356 bl 0x39af4 | r0 = fcn_00039af4 (r0, r1, r2);
| if (r0 == 0) {
0x0006535a cbnz r0, 0x6536e |
0x0006535c ldr.w r1, [fp, 0x30] | r1 = *(arg_30h);
| if (r1 != 0) {
0x00065360 cbz r1, 0x65368 |
0x00065362 ldr r0, [sp, 0x28] | r0 = x;
0x00065364 bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x00065368 movs r3, 0 | r3 = 0;
0x0006536a str.w r3, [fp, 0x30] | __asm ("str.w r3, [arg_30h]");
| }
0x0006536e ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00065370 str r5, [r3] | *(r3) = r5;
0x00065372 b.w 0x63b00 | goto label_73;
| label_193:
0x00065376 ldrd lr, ip, [sl, 0x28] | __asm ("ldrd lr, ip, [sl, 0x28]");
0x0006537a movs r2, 1 | r2 = 1;
0x0006537c movs r1, 0x47 | r1 = 0x47;
0x0006537e mov r0, r7 | r0 = r7;
0x00065380 add.w r3, ip, r2 | r3 = ip + r2;
0x00065384 add.w ip, ip, 2 |
0x00065388 str r3, [r6, 0x58] | *((r6 + 0x58)) = r3;
0x0006538a str.w ip, [sl, 0x2c] | __asm ("str.w ip, [sl, 0x2c]");
0x0006538e str.w ip, [r6, 0x5c] | __asm ("str.w ip, [r6, 0x5c]");
0x00065392 add.w ip, lr, r2 |
0x00065396 str.w ip, [sl, 0x28] | __asm ("str.w ip, [sl, 0x28]");
0x0006539a str.w lr, [r6, 0x3c] | __asm ("str.w lr, [r6, 0x3c]");
0x0006539e str r4, [sp] | *(sp) = r4;
0x000653a0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000653a4 mov r2, r4 | r2 = r4;
0x000653a6 str r4, [sp] | *(sp) = r4;
0x000653a8 movs r1, 0x47 | r1 = 0x47;
0x000653aa ldr r3, [r6, 0x5c] | r3 = *((r6 + 0x5c));
0x000653ac mov r0, r7 | r0 = r7;
0x000653ae bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000653b2 str r4, [sp] | *(sp) = r4;
0x000653b4 mov r0, r7 | r0 = r7;
0x000653b6 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x000653b8 movs r1, 0x73 | r1 = 0x73;
0x000653ba ldr r2, [r6, 0x3c] | r2 = *((r6 + 0x3c));
0x000653bc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000653c0 b.w 0x64310 | goto label_74;
| label_227:
0x000653c4 ldr.w r2, [pc, 0x5e8] | r2 = *(0x000659b0);
0x000653c8 movs r1, 1 | r1 = 1;
0x000653ca mov r3, r5 | r3 = r5;
0x000653cc str r1, [sp, 0x100] | var_100h = r1;
0x000653ce ldr r0, [sp, 0x28] | r0 = x;
0x000653d0 movs r1, 0x9b | r1 = 0x9b;
0x000653d2 add r2, pc | r2 += pc;
0x000653d4 str r2, [sp, 0xfc] | var_fch = r2;
0x000653d6 add r2, sp, 0xfc | r2 += var_fch;
0x000653d8 bl 0x21bd8 | r0 = fcn_00021bd8 (r0, r1, r2, r3);
0x000653dc mov r1, r0 | r1 = r0;
0x000653de ldr r0, [r7] | r0 = *(r7);
0x000653e0 bl 0x21b94 | r0 = fcn_00021b94 (r0, r1);
0x000653e4 mov r5, r0 | r5 = r0;
0x000653e6 b.w 0x64876 | goto label_75;
| label_231:
0x000653ea ldr r1, [sp, 0x18] | r1 = var_18h;
0x000653ec ldr.w r0, [sl] | r0 = *(sl);
0x000653f0 bl 0x1d000 | fcn_0001d000 (r0, r1);
0x000653f4 b.w 0x64988 | goto label_76;
| label_222:
0x000653f8 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x000653fc ldr r2, [sp, 0x20] | r2 = var_20h;
0x000653fe str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x00065400 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x00065404 cmp r2, 0 |
| if (r2 != 0) {
0x00065406 bne.w 0x64ea8 | goto label_77;
| }
0x0006540a ldr r2, [sp, 0x28] | r2 = x;
0x0006540c cmp r2, 0 |
| if (r2 != 0) {
0x0006540e bne.w 0x649d0 | goto label_78;
| }
| label_232:
0x00065412 ldr.w r2, [fp, 0x24] | r2 = *(arg_24h);
0x00065416 cmp r2, 0 |
| if (r2 != 0) {
0x00065418 bne.w 0x657ee | goto label_263;
| }
0x0006541c ldr.w r4, [fp, 0x1c] | r4 = *(arg_1ch);
0x00065420 ldr r2, [r4] | r2 = *(r4);
0x00065422 cmp r2, 1 |
| if (r2 != 1) {
0x00065424 bne.w 0x657ee | goto label_263;
| }
0x00065428 ldr.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x0006542c ldr r1, [r2] | r1 = *(r2);
0x0006542e cmp r1, 1 |
| if (r1 != 1) {
0x00065430 bne.w 0x657ee | goto label_263;
| }
0x00065434 ldr r1, [r2, 0x1c] | r1 = *((r2 + 0x1c));
0x00065436 cmp r1, 0 |
| if (r1 != 0) {
0x00065438 bne.w 0x657ee | goto label_263;
| }
0x0006543c cmp r0, 1 |
| if (r0 != 1) {
0x0006543e bne.w 0x65ef0 | goto label_264;
| }
0x00065442 ldr.w r5, [fp, 0x2c] | r5 = *(arg_2ch);
0x00065446 cmp r5, 0 |
| if (r5 != 0) {
0x00065448 bne.w 0x65da4 | goto label_265;
| }
0x0006544c ldr.w sb, [r2, 0x18] | sb = *((r2 + 0x18));
0x00065450 ldrb.w r2, [sb, 0x2b] | r2 = *((sb + 0x2b));
0x00065454 cmp r2, 0 |
| if (r2 != 0) {
0x00065456 bne.w 0x65da4 | goto label_265;
| }
0x0006545a ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x0006545c ldrb r2, [r4] | r2 = *(r4);
0x0006545e cmp r2, 0xa8 |
| if (r2 != 0xa8) {
0x00065460 bne.w 0x65da4 | goto label_265;
| }
0x00065464 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x00065466 cmp r6, r2 |
| if (r6 != r2) {
0x00065468 bne.w 0x65da4 | goto label_265;
| }
0x0006546c ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
0x0006546e ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00065470 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00065472 lsls r7, r1, 0x17 | r7 = r1 << 0x17;
| if (r7 >= r1) {
0x00065474 bpl.w 0x65e1a | goto label_266;
| }
0x00065478 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x0006547a movs r1, 4 |
0x0006547c movt r1, 0x100 | r1 = 0x1000004;
0x00065480 tst r1, r4 |
| if ((r1 & r4) != 0) {
0x00065482 bne.w 0x65e1a | goto label_266;
| }
0x00065486 ldr.w r1, [sb, 0x3c] | r1 = *((sb + 0x3c));
0x0006548a ldr.w r0, [sl] | r0 = *(sl);
0x0006548e cmp r1, 0 |
| if (r1 == 0) {
0x00065490 beq.w 0x65e0e | goto label_267;
| }
0x00065494 bl 0xfdfc | r0 = fcn_0000fdfc (r0, r1);
0x00065498 mov r4, r0 | r4 = r0;
| label_120:
0x0006549a ldr.w r8, [sl, 0x28] | r8 = *((sl + 0x28));
0x0006549e mov r1, r4 | r1 = r4;
0x000654a0 ldr.w r0, [sl, 0x74] | r0 = *((sl + 0x74));
0x000654a4 ldr.w r7, [sb, 0x14] | r7 = *((sb + 0x14));
0x000654a8 add.w r3, r8, 1 | r3 = r8 + 1;
0x000654ac cmp r0, 0 |
0x000654ae it eq |
| if (r0 != 0) {
0x000654b0 moveq r0, sl | r0 = sl;
| }
0x000654b2 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x000654b6 bl 0x572e0 | fcn_000572e0 (r0, r1);
0x000654ba ldr.w r3, [sb] | r3 = *(sb);
0x000654be mov r1, r4 | r1 = r4;
0x000654c0 mov r0, sl | r0 = sl;
0x000654c2 str r3, [sp] | *(sp) = r3;
0x000654c4 movs r3, 0 | r3 = 0;
0x000654c6 ldr.w r2, [sb, 0x14] | r2 = *((sb + 0x14));
0x000654ca bl 0x2fc68 | fcn_0002fc68 (r0, r1, r2, r3);
0x000654ce ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x000654d2 tst.w r3, 0x80 |
0x000654d6 ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
| if ((r3 & 0x80) != 0) {
0x000654da bne.w 0x6576c | goto label_268;
| }
0x000654de ldrb.w r3, [r3, 0x2d] | r3 = *((r3 + 0x2d));
0x000654e2 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 < r3) {
0x000654e4 bmi.w 0x658a6 | goto label_269;
| }
0x000654e8 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x000654ec cmp r3, 0 |
| if (r3 == 0) {
0x000654ee beq.w 0x658a6 | goto label_269;
| }
| do {
| label_95:
0x000654f2 ldrb.w r2, [r3, 0x37] | r2 = *((r3 + 0x37));
0x000654f6 lsls r2, r2, 0x1d | r2 <<= 0x1d;
| if (r2 >= r2) {
0x000654f8 bmi 0x6550e |
0x000654fa ldrsh.w r2, [r3, 0x30] | r2 = *((r3 + 0x30));
0x000654fe ldrsh.w r1, [sb, 0x28] | r1 = *((sb + 0x28));
0x00065502 cmp r1, r2 |
| if (r1 <= r2) {
0x00065504 ble 0x6550e | goto label_101;
| }
0x00065506 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x00065508 cmp r1, 0 |
| if (r1 == 0) {
0x0006550a beq.w 0x6588e | goto label_270;
| }
| }
| label_101:
0x0006550e ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00065510 cmp r3, 0 |
0x00065512 bne 0x654f2 |
| } while (r3 != 0);
0x00065514 cmp r5, 0 |
| if (r5 == 0) {
0x00065516 beq.w 0x658a6 | goto label_269;
| }
| label_94:
0x0006551a ldr r7, [r5, 0x2c] | r7 = *((r5 + 0x2c));
0x0006551c mov r1, r5 | r1 = r5;
0x0006551e mov r0, sl | r0 = sl;
0x00065520 bl 0x2bec8 | fcn_0002bec8 (r0, r1);
0x00065524 movs r2, 1 | r2 = 1;
0x00065526 str r4, [sp] | *(sp) = r4;
0x00065528 mov r4, r0 | r4 = r0;
0x0006552a str r2, [sp, 4] | var_4h = r2;
0x0006552c ldr r0, [sp, 0x24] | r0 = var_24h;
0x0006552e mov r3, r7 | r3 = r7;
0x00065530 mov r2, r8 | r2 = r8;
0x00065532 movs r1, 0x70 | r1 = 0x70;
0x00065534 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
| if (r4 != 0) {
0x00065538 cbz r4, 0x6554a |
0x0006553a ldr r0, [sp, 0x24] | r0 = var_24h;
0x0006553c mov r2, r4 | r2 = r4;
0x0006553e mvn r3, 7 | r3 = ~7;
0x00065542 mov.w r1, -1 | r1 = -1;
0x00065546 bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
| }
0x0006554a ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x0006554c movs r4, 0 | r4 = 0;
0x0006554e ldr r6, [sp, 0x24] | r6 = var_24h;
0x00065550 mov r2, r8 | r2 = r8;
0x00065552 movs r1, 0x62 | r1 = 0x62;
0x00065554 str r4, [sp] | *(sp) = r4;
0x00065556 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00065558 mov r0, r6 | r0 = r6;
0x0006555a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006555e mov r3, r4 | r3 = r4;
0x00065560 mov r2, r8 | r2 = r8;
0x00065562 movs r1, 0x7a | r1 = 0x7a;
0x00065564 mov r0, r6 | r0 = r6;
0x00065566 str r4, [sp] | *(sp) = r4;
0x00065568 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006556c ldrb.w r3, [sl, 0xcf] | r3 = *((sl + 0xcf));
0x00065570 cmp r3, 2 |
| if (r3 == 2) {
0x00065572 bne 0x655a8 |
0x00065574 ldr.w r2, [sb, 0x1c] | r2 = *((sb + 0x1c));
0x00065578 ldr.w r3, [sb] | r3 = *(sb);
0x0006557c lsls r2, r2, 0x18 | r2 <<= 0x18;
| if (r2 < r2) {
0x0006557e bpl 0x6558e |
0x00065580 ldrb.w r2, [r5, 0x37] | r2 = *((r5 + 0x37));
0x00065584 and r2, r2, 3 | r2 &= 3;
0x00065588 cmp r2, 2 |
| if (r2 == 2) {
0x0006558a beq.w 0x65e54 | goto label_271;
| }
| }
0x0006558e ldr.w r2, [pc, 0x424] |
0x00065592 ldr r1, [r5] | r1 = *(r5);
0x00065594 add r2, pc | r2 = 0xcaf4e;
| label_102:
0x00065596 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x0006559a mov r0, sl | r0 = sl;
0x0006559c ldr.w r2, [pc, 0x418] | r2 = *(0x000659b8);
0x000655a0 movs r1, 0 | r1 = 0;
0x000655a2 add r2, pc | r2 += pc;
0x000655a4 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
| }
| label_100:
0x000655a8 ldr r5, [sp, 0x50] | r5 = var_50h;
0x000655aa movs r4, 0 | r4 = 0;
0x000655ac ldr r1, [sp, 0x44] | r1 = var_44h;
0x000655ae mov r0, sl | r0 = sl;
0x000655b0 movs r3, 0x10 | r3 = 0x10;
0x000655b2 str r4, [sp, 0xfc] | var_fch = r4;
0x000655b4 mov r2, r5 | r2 = r5;
0x000655b6 bl 0x67af8 | fcn_00067af8 (r0, r1, r2, r3);
0x000655ba ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000655bc mov.w r2, -1 | r2 = -1;
0x000655c0 mov r1, fp | r1 = fp;
0x000655c2 mov r0, sl | r0 = sl;
0x000655c4 strd r5, r5, [sp, 8] | __asm ("strd r5, r5, [var_8h]");
0x000655c8 strd r4, r3, [sp] | __asm ("strd r4, r3, [sp]");
0x000655cc mov r3, r4 | r3 = r4;
0x000655ce bl 0x6e488 | fcn_0006e488 (r0, r1, r2, r3, r4, r5, r6);
0x000655d2 b 0x65310 | goto label_79;
| label_259:
0x000655d4 mov r0, r7 | r0 = r7;
0x000655d6 bl 0x73e14 | fcn_00073e14 (r0, r1);
0x000655da ldr r1, [sp, 0x80] | r1 = var_80h;
0x000655dc ldr r0, [sp, 0x24] | r0 = var_24h;
0x000655de bl 0x1cab0 | fcn_0001cab0 (r0, r1);
0x000655e2 b 0x651fa | goto label_80;
| label_258:
0x000655e4 ldr r3, [pc, 0x3d4] |
0x000655e6 add r3, pc | r3 = 0xcafa6;
0x000655e8 adds r3, 4 | r3 += 4;
0x000655ea b 0x651c2 | goto label_81;
| label_242:
0x000655ec ldr r0, [sp, 0x24] | r0 = var_24h;
0x000655ee mov r2, r3 | r2 = r3;
0x000655f0 movs r1, 0xe | r1 = 0xe;
0x000655f2 str r3, [sp] | *(sp) = r3;
0x000655f4 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000655f8 str r0, [sp, 0x4c] | var_4ch = r0;
0x000655fa b.w 0x64ba6 | goto label_82;
| label_219:
0x000655fe ldr.w r0, [sl] | r0 = *(sl);
0x00065602 mov r1, r6 | r1 = r6;
0x00065604 bl 0x16fac | fcn_00016fac (r0, r1);
0x00065608 b.w 0x6457c | goto label_83;
| label_161:
0x0006560c ldr r7, [sp, 0x38] | r7 = var_38h;
0x0006560e cmp r7, 0 |
| if (r7 == 0) {
0x00065610 beq.w 0x63846 | goto label_12;
| }
0x00065614 ldr r0, [r5, 0x30] | r0 = *((r5 + 0x30));
0x00065616 cmp r0, 0 |
| if (r0 != 0) {
0x00065618 bne.w 0x636dc | goto label_5;
| }
0x0006561c b.w 0x63846 | goto label_12;
| label_248:
0x00065620 ldr.w r3, [sl] | r3 = *(sl);
0x00065624 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00065626 lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x00065628 itt pl |
| if (r1 < r3) {
0x0006562a movpl r3, 1 | r3 = 1;
| }
| if (r1 < r3) {
0x0006562c strbpl r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| }
0x00065630 b 0x64e6c | goto label_84;
| label_233:
0x00065632 ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x00065634 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00065636 cmp r2, 0 |
| if (r2 < 0) {
0x00065638 blt.w 0x649d0 | goto label_78;
| }
0x0006563c ldr r2, [r3] | r2 = *(r3);
0x0006563e cmp r2, 0 |
| if (r2 == 0) {
0x00065640 beq.w 0x649d0 | goto label_78;
| }
0x00065644 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00065646 ands r3, r3, 0x1000 | r3 &= 0x1000;
| if (r3 != r3) {
0x0006564a bne.w 0x649d0 | goto label_78;
| }
0x0006564e ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x00065650 cmp r2, 0 |
| if (r2 == 0) {
0x00065652 beq.w 0x649d0 | goto label_78;
| }
0x00065656 ldr r4, [r2, 8] | r4 = *((r2 + 8));
| if (r4 != 0) {
0x00065658 cbz r4, 0x65666 |
0x0006565a mov r1, r4 | r1 = r4;
0x0006565c ldr r0, [sp, 0x20] | r0 = var_20h;
0x0006565e mov r2, r3 | r2 = r3;
0x00065660 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x00065664 mov r4, r0 | r4 = r0;
| }
0x00065666 ldr r1, [sp, 0x28] | r1 = x;
0x00065668 movs r2, 0 | r2 = 0;
0x0006566a ldr r0, [sp, 0x20] | r0 = var_20h;
0x0006566c bl 0x321b0 | fcn_000321b0 (r0, r1, r2, r3, r4);
0x00065670 mov r2, r4 | r2 = r4;
0x00065672 mov r1, r0 | r1 = r0;
0x00065674 mov r0, sl | r0 = sl;
0x00065676 bl 0x301b0 | r0 = fcn_000301b0 (r0, r1, r2);
0x0006567a subs r3, r0, 0 | r3 = r0 - 0;
0x0006567c str r3, [sp, 0x34] | var_34h = r3;
0x0006567e ite ne |
| if (r3 == r0) {
0x00065680 movne r3, 0x500 | r3 = 0x500;
| }
| if (r3 == r0) {
0x00065684 movs r3, 0 | r3 = 0;
| }
0x00065686 str r3, [sp, 0x60] | var_60h = r3;
0x00065688 b.w 0x649d4 | goto label_85;
| label_262:
0x0006568c ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
0x0006568e mov r1, r8 | r1 = r8;
0x00065690 mov r0, sl | r0 = sl;
0x00065692 ldrd r2, r3, [r2, 0xc] | __asm ("ldrd r2, r3, [r2, 0xc]");
0x00065696 bl 0x1ea94 | fcn_0001ea94 (r0, r1, r2, r3, r4);
0x0006569a b 0x65310 | goto label_79;
| label_236:
0x0006569c ldr r3, [pc, 0x320] |
0x0006569e add r3, pc | r3 = 0xcb062;
0x000656a0 b.w 0x64ae0 | goto label_86;
| label_235:
0x000656a4 ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x000656a6 cmp r5, 0 |
| if (r5 != 0) {
0x000656a8 bne 0x6574a | goto label_272;
| }
0x000656aa ldr r2, [sp, 0x24] | r2 = var_24h;
0x000656ac ldr r2, [r2, 0x6c] | r2 = *((r2 + 0x6c));
0x000656ae str r2, [sp, 0x18] | var_18h = r2;
0x000656b0 b 0x650c6 | goto label_87;
| label_129:
0x000656b2 blx 0x883c | fcn_0000883c ();
| label_251:
0x000656b6 ldr r0, [r6, 0x2c] | r0 = *((r6 + 0x2c));
0x000656b8 cmp r0, 1 |
| if (r0 != 1) {
0x000656ba bne.w 0x6463e | goto label_66;
| }
0x000656be ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
0x000656c0 ldr r3, [r2] | r3 = *(r2);
0x000656c2 ldr r4, [r3, 0x14] | r4 = *((r3 + 0x14));
0x000656c4 cmp r4, 0 |
| if (r4 == 0) {
0x000656c6 beq.w 0x64646 | goto label_88;
| }
0x000656ca ldr r5, [r4] | r5 = *(r4);
0x000656cc cmp r5, 1 |
| if (r5 != 1) {
0x000656ce bne.w 0x64646 | goto label_88;
| }
0x000656d2 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000656d4 lsls r0, r1, 7 | r0 = r1 << 7;
| if (r0 < r1) {
0x000656d6 bmi.w 0x64646 | goto label_88;
| }
0x000656da ldr r1, [sp, 0x20] | r1 = var_20h;
0x000656dc ldr r1, [r1, 0x50] | r1 = *((r1 + 0x50));
0x000656de lsls r1, r1, 0xf | r1 <<= 0xf;
| if (r1 < r1) {
0x000656e0 bmi.w 0x64646 | goto label_88;
| }
0x000656e4 ldr r7, [r3, 8] | r7 = *((r3 + 8));
0x000656e6 ldr r1, [pc, 0x2dc] |
0x000656e8 str r2, [sp, 0x5c] | var_5ch = r2;
0x000656ea mov r0, r7 | r0 = r7;
0x000656ec add r1, pc | r1 = 0xcb0b6;
0x000656ee bl 0x8ec0 | fcn_00008ec0 (r0);
0x000656f2 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x000656f4 cmp r0, 0 |
| if (r0 != 0) {
0x000656f6 bne.w 0x65dc8 | goto label_273;
| }
0x000656fa ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000656fc bl 0xa934 | r0 = fcn_0000a934 (r0);
0x00065700 subs r3, r0, 0 | r3 = r0 - 0;
0x00065702 it ne |
| if (r3 == r0) {
0x00065704 movne r3, 1 | r3 = 1;
| }
0x00065706 lsls r7, r3, 1 | r7 = r3 << 1;
| label_118:
0x00065708 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0006570a mov r1, r4 | r1 = r4;
0x0006570c movs r2, 0 | r2 = 0;
0x0006570e bl 0x321b0 | fcn_000321b0 (r0, r1, r2, r3, r4);
0x00065712 str r0, [sp, 0x38] | var_38h = r0;
| if (r0 != 0) {
0x00065714 cbz r0, 0x65718 |
0x00065716 strb r7, [r0, 0x10] | *((r0 + 0x10)) = r7;
| }
0x00065718 uxtb r3, r5 | r3 = (int8_t) r5;
0x0006571a ldr r0, [r6, 0x2c] | r0 = *((r6 + 0x2c));
0x0006571c str r3, [sp, 0x54] | var_54h = r3;
0x0006571e b.w 0x6463e | goto label_66;
| label_261:
0x00065722 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00065724 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00065728 b 0x652dc | goto label_89;
| label_260:
0x0006572a ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0006572c ldr r1, [sp, 0x24] | r1 = var_24h;
0x0006572e rsbs r2, r3, 0 | r2 = r3 - ;
0x00065730 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00065734 b 0x6525c | goto label_90;
| label_237:
0x00065736 ldr r3, [pc, 0x290] |
0x00065738 add r3, pc | r3 = 0xcb106;
0x0006573a b.w 0x64ae0 | goto label_86;
| label_254:
0x0006573e ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00065742 adds r4, r3, 1 | r4 = r3 + 1;
0x00065744 str.w r4, [sl, 0x2c] | __asm ("str.w r4, [sl, 0x2c]");
0x00065748 b 0x65064 | goto label_91;
| label_272:
0x0006574a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0006574c ldr r2, [r2, 0x50] | r2 = *((r2 + 0x50));
0x0006574e ands r2, r2, 4 | r2 &= 4;
| if (r2 == r2) {
0x00065752 beq 0x657ae | goto label_274;
| }
0x00065754 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00065756 mov r5, r4 | r5 = r4;
0x00065758 str r4, [sp, 0x4c] | var_4ch = r4;
0x0006575a ldr r2, [r2, 0x6c] | r2 = *((r2 + 0x6c));
0x0006575c str r2, [sp, 0x18] | var_18h = r2;
0x0006575e b 0x650c6 | goto label_87;
| label_152:
0x00065760 cmp r4, 0 |
0x00065762 str r1, [sp, 0x40] | var_40h = r1;
| if (r4 > 0) {
0x00065764 bgt.w 0x63894 | goto label_92;
| }
0x00065768 b.w 0x6389e | goto label_93;
| label_268:
0x0006576c ldrb.w r1, [r3, 0x2d] | r1 = *((r3 + 0x2d));
0x00065770 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x00065774 and r1, r1, 1 | r1 &= 1;
0x00065778 mov r5, r3 | r5 = r3;
| if (r3 != 0) {
0x0006577a cbnz r3, 0x65786 | goto label_275;
| }
0x0006577c b 0x658a6 | goto label_269;
| do {
0x0006577e ldr r5, [r5, 0x14] | r5 = *((r5 + 0x14));
0x00065780 cmp r5, 0 |
| if (r5 == 0) {
0x00065782 beq.w 0x658a0 | goto label_276;
| }
| label_275:
0x00065786 ldrb.w r2, [r5, 0x37] | r2 = *((r5 + 0x37));
0x0006578a and r2, r2, 3 | r2 &= 3;
0x0006578e cmp r2, 2 |
0x00065790 bne 0x6577e |
| } while (r2 != 2);
0x00065792 cmp r1, 0 |
| if (r1 != 0) {
0x00065794 bne.w 0x6551a | goto label_94;
| }
0x00065798 b 0x654f2 | goto label_95;
| label_252:
0x0006579a ldr.w r4, [sl, 0x2c] | r4 = *((sl + 0x2c));
0x0006579e adds r4, 1 | r4++;
0x000657a0 str.w r4, [sl, 0x2c] | __asm ("str.w r4, [sl, 0x2c]");
0x000657a4 b 0x64ffa | goto label_96;
| label_255:
0x000657a6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000657a8 ldr r3, [r3, 0x6c] | r3 = *((r3 + 0x6c));
0x000657aa str r3, [sp, 0x18] | var_18h = r3;
0x000657ac b 0x650b0 | goto label_97;
| label_274:
0x000657ae ldrb.w r1, [r0, 0x34] | r1 = *((r0 + 0x34));
0x000657b2 ubfx r0, r1, 3, 1 | r0 = (r1 >> 3) & ((1 << 1) - 1);
0x000657b6 lsls r1, r1, 0x1c | r1 <<= 0x1c;
| if (r1 < r1) {
0x000657b8 bmi.w 0x65d7e | goto label_277;
| }
0x000657bc ldr r2, [sp, 0x24] | r2 = var_24h;
0x000657be mov r5, r0 | r5 = r0;
0x000657c0 str r0, [sp, 0x4c] | var_4ch = r0;
0x000657c2 ldr r2, [r2, 0x6c] | r2 = *((r2 + 0x6c));
0x000657c4 str r2, [sp, 0x18] | var_18h = r2;
0x000657c6 b 0x650c6 | goto label_87;
| label_167:
0x000657c8 mov r1, r2 | r1 = r2;
0x000657ca b.w 0x63b6c | goto label_98;
| label_253:
0x000657ce ldr r1, [sp, 0x18] | r1 = var_18h;
0x000657d0 cmp r1, 0 |
| if (r1 == 0) {
0x000657d2 beq.w 0x6503a | goto label_99;
| }
0x000657d6 ldrb.w r3, [sl, 0x13] | r3 = *((sl + 0x13));
0x000657da cmp r3, 7 |
| if (r3 > 7) {
0x000657dc bhi.w 0x6503a | goto label_99;
| }
0x000657e0 adds r2, r3, 1 | r2 = r3 + 1;
0x000657e2 adds r3, 0x26 | r3 += 0x26;
0x000657e4 strb.w r2, [sl, 0x13] | *((sl + 0x13)) = r2;
0x000657e8 str.w r1, [sl, r3, lsl 2] | __asm ("str.w r1, [sl, r3, lsl 2]");
0x000657ec b 0x6503a | goto label_99;
| label_263:
0x000657ee ldr r2, [r6, 0x24] | r2 = *((r6 + 0x24));
0x000657f0 cmp r2, 0 |
| if (r2 == 0) {
0x000657f2 beq 0x658f0 | goto label_278;
| }
| label_127:
0x000657f4 cmp r0, 0 |
| if (r0 <= 0) {
0x000657f6 ble.w 0x65e50 | goto label_279;
| }
| label_116:
0x000657fa ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
| label_121:
0x000657fc movs r1, 0 | r1 = 0;
| do {
0x000657fe ldr r4, [r2] | r4 = *(r2);
0x00065800 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00065802 lsls r5, r4, 7 | r5 = r4 << 7;
| if (r5 >= r4) {
0x00065804 bmi 0x6580e |
0x00065806 ldr r4, [r2, 4] | r4 = *((r2 + 4));
0x00065808 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x0006580a lsls r4, r4, 0x1a | r4 <<= 0x1a;
| if (r4 < r4) {
0x0006580c bmi 0x65816 | goto label_124;
| }
| }
0x0006580e adds r1, 1 | r1++;
0x00065810 adds r2, 0x14 | r2 += 0x14;
0x00065812 cmp r0, r1 |
0x00065814 bgt 0x657fe |
| } while (r0 > r1);
| label_124:
0x00065816 cmp r0, r1 |
| if (r0 == r1) {
0x00065818 beq.w 0x65e38 | goto label_280;
| }
| label_117:
0x0006581c movs r4, 0 | r4 = 0;
| label_103:
0x0006581e mov r1, r6 | r1 = r6;
0x00065820 mov r0, sl | r0 = sl;
0x00065822 bl 0x30670 | fcn_00030670 (r0, r1);
0x00065826 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00065828 mov r0, sl | r0 = sl;
0x0006582a ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0006582c ldr r1, [sp, 0x18] | r1 = var_18h;
0x0006582e str r3, [sp] | *(sp) = r3;
0x00065830 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00065832 orrs r4, r3 | r4 |= r3;
0x00065834 movs r3, 0 | r3 = 0;
0x00065836 str r4, [sp, 8] | var_8h = r4;
0x00065838 str r3, [sp, 0xc] | var_ch = r3;
0x0006583a str r3, [sp, 4] | var_4h = r3;
0x0006583c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0006583e bl 0x707d8 | r0 = fcn_000707d8 (r0, r1, r2, r3, r4, r5, r6);
0x00065842 mov r4, r0 | r4 = r0;
0x00065844 cmp r0, 0 |
| if (r0 == 0) {
0x00065846 beq.w 0x64ea8 | goto label_77;
| }
0x0006584a ldrb.w r5, [r0, 0x33] | r5 = *((r0 + 0x33));
0x0006584e mov r2, r6 | r2 = r6;
0x00065850 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00065852 mov r0, sl | r0 = sl;
0x00065854 mov r3, r5 | r3 = r5;
0x00065856 bl 0x6f4f0 | fcn_0006f4f0 (r0, r1, r2, r3, r4, r5, r6);
| if (r5 != 0) {
0x0006585a cbz r5, 0x6586c |
0x0006585c ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
| if (r2 == 0) {
0x0006585e cbz r2, 0x6586c | goto label_281;
| }
0x00065860 ldrd r2, r3, [r2, 0xc] | __asm ("ldrd r2, r3, [r2, 0xc]");
0x00065864 mov r1, r5 | r1 = r5;
0x00065866 mov r0, sl | r0 = sl;
0x00065868 bl 0x1ea94 | fcn_0001ea94 (r0, r1, r2, r3, r4);
| }
| label_281:
0x0006586c ldr r3, [sp, 0x30] | r3 = var_30h;
0x0006586e cmp r3, 0 |
| if (r3 != 0) {
0x00065870 bne.w 0x65d60 | goto label_282;
| }
| label_113:
0x00065874 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00065876 cmp r3, 0 |
| if (r3 != 0) {
0x00065878 bne.w 0x65d1a | goto label_283;
| }
| label_112:
0x0006587c mov r0, r4 | r0 = r4;
0x0006587e bl 0x73e14 | fcn_00073e14 (r0, r1);
0x00065882 ldr.w r0, [sl, 8] | r0 = *((sl + 8));
0x00065886 mov r1, r6 | r1 = r6;
0x00065888 bl 0x2df50 | fcn_0002df50 (r0, r1, r2);
0x0006588c b 0x655a8 | goto label_100;
| label_270:
0x0006588e cmp r5, 0 |
| if (r5 == 0) {
0x00065890 beq.w 0x65d78 | goto label_284;
| }
0x00065894 ldrsh.w r1, [r5, 0x30] | r1 = *((r5 + 0x30));
0x00065898 cmp r1, r2 |
0x0006589a it gt |
| if (r1 <= r2) {
0x0006589c movgt r5, r3 | r5 = r3;
| }
0x0006589e b 0x6550e | goto label_101;
| label_276:
0x000658a0 cmp r1, 0 |
| if (r1 == 0) {
0x000658a2 beq.w 0x654f2 | goto label_95;
| }
| label_269:
0x000658a6 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000658a8 movs r2, 1 | r2 = 1;
0x000658aa mov r3, r7 | r3 = r7;
0x000658ac movs r1, 0x70 | r1 = 0x70;
0x000658ae str r4, [sp] | *(sp) = r4;
0x000658b0 movs r4, 0 | r4 = 0;
0x000658b2 str r2, [sp, 4] | var_4h = r2;
0x000658b4 mov r0, r5 | r0 = r5;
0x000658b6 mov r2, r8 | r2 = r8;
0x000658b8 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x000658bc ldr r3, [r6, 0x28] | r3 = *((r6 + 0x28));
0x000658be mov r2, r8 | r2 = r8;
0x000658c0 movs r1, 0x62 | r1 = 0x62;
0x000658c2 str r4, [sp] | *(sp) = r4;
0x000658c4 mov r0, r5 | r0 = r5;
0x000658c6 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000658c8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000658cc mov r3, r4 | r3 = r4;
0x000658ce mov r2, r8 | r2 = r8;
0x000658d0 movs r1, 0x7a | r1 = 0x7a;
0x000658d2 mov r0, r5 | r0 = r5;
0x000658d4 str r4, [sp] | *(sp) = r4;
0x000658d6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000658da ldrb.w r3, [sl, 0xcf] | r3 = *((sl + 0xcf));
0x000658de cmp r3, 2 |
| if (r3 != 2) {
0x000658e0 bne.w 0x655a8 | goto label_100;
| }
0x000658e4 ldr r2, [pc, 0xe4] |
0x000658e6 ldr.w r3, [sb] | r3 = *(sb);
0x000658ea add r2, pc | r2 = 0xcb2ba;
0x000658ec mov r1, r2 | r1 = r2;
0x000658ee b 0x65596 | goto label_102;
| label_278:
0x000658f0 cmp r0, 1 |
| if (r0 == 1) {
0x000658f2 beq.w 0x65dac | goto label_285;
| }
0x000658f4 strh r3, [r3, 0x12] | *((r3 + 0x12)) = r3;
0x000658f6 mov r4, r2 | r4 = r2;
0x000658f8 str r2, [sp, 0x30] | var_30h = r2;
0x000658fa b 0x6581e | goto label_103;
| label_153:
0x000658fc ldrb.w r3, [r7, 0x2e] | r3 = *((r7 + 0x2e));
0x00065900 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00065902 bpl 0x65914 | goto label_286;
| }
0x00065904 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00065906 add.w r3, r3, r4, lsl 6 | r3 += (r4 << 6);
0x0006590a ldr r3, [r3, 0x44] | r3 = *((r3 + 0x44));
0x0006590c ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
0x0006590e cmp r3, 0 |
| if (r3 == 0) {
0x00065910 beq.w 0x636dc | goto label_5;
| }
| label_286:
0x00065914 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x00065916 str r3, [sp, 0x3c] | var_3ch = r3;
0x00065918 cmp r3, 0 |
| if (r3 != 0) {
0x0006591a bne.w 0x636dc | goto label_5;
| }
0x0006591e movs r3, 1 | r3 = 1;
0x00065920 str r3, [sp, 0x40] | var_40h = r3;
| label_126:
0x00065922 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00065924 movs r1, 0x15 | r1 = 0x15;
0x00065926 ldr r2, [sp, 0x28] | r2 = x;
0x00065928 mov r0, sl | r0 = sl;
0x0006592a adds r7, r3, r2 | r7 = r3 + r2;
0x0006592c movs r3, 0 | r3 = 0;
0x0006592e ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x00065930 str.w r2, [sl, 0xf8] | __asm ("str.w r2, [sl, 0xf8]");
0x00065934 mov r2, r3 | r2 = r3;
0x00065936 str r3, [sp] | *(sp) = r3;
0x00065938 bl 0x24140 | fcn_00024140 (r0, r1);
0x0006593c ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x0006593e str.w r6, [sl, 0xf8] | __asm ("str.w r6, [sl, 0xf8]");
0x00065942 ldr r7, [r7, 0x1c] | r7 = *((r7 + 0x1c));
| if (r1 != 0) {
0x00065944 cbz r1, 0x6594c |
0x00065946 mov r0, r8 | r0 = r8;
0x00065948 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x0006594c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006594e ldr r2, [sp, 0x28] | r2 = x;
0x00065950 add r3, r2 | r3 += r2;
0x00065952 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
| if (r1 != 0) {
0x00065954 cbz r1, 0x6595c |
0x00065956 mov r0, r8 | r0 = r8;
0x00065958 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x0006595c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006595e ldr r2, [sp, 0x28] | r2 = x;
0x00065960 add r3, r2 | r3 += r2;
0x00065962 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
| if (r1 != 0) {
0x00065964 cbz r1, 0x6596c |
0x00065966 mov r0, r8 | r0 = r8;
0x00065968 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x0006596c ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0006596e ldr r2, [sp, 0x18] | r2 = var_18h;
0x00065970 ldr r1, [sp, 0x28] | r1 = x;
0x00065972 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00065976 str r3, [sp, 0x44] | var_44h = r3;
0x00065978 adds r3, r2, r1 | r3 = r2 + r1;
0x0006597a adds r3, 0xc | r3 += 0xc;
0x0006597c vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x00065980 adds r3, r2, r1 | r3 = r2 + r1;
0x00065982 mov r2, r3 | r2 = r3;
0x00065984 str r3, [sp, 0x48] | var_48h = r3;
0x00065986 movs r3, 0 | r3 = 0;
0x00065988 str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x0006598a str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x0006598c ldr r3, [pc, 0x40] |
0x0006598e add r3, pc | r3 = 0xcb362;
0x00065990 str r3, [sp, 0x4c] | var_4ch = r3;
0x00065992 ldr r3, [pc, 0x40] |
0x00065994 add r3, pc | r3 = 0xcb36e;
0x00065996 strd r3, r7, [sp, 0x50] | __asm ("strd r3, r7, [var_54h]");
0x0006599a b 0x659ee | goto label_287;
| label_104:
0x000659d8 str r6, [r5, 0x34] | *((r5 + 0x34)) = r6;
| if (r6 != 0) {
0x000659da cbz r6, 0x659de |
0x000659dc str r5, [r6, 0x38] | *((r6 + 0x38)) = r5;
| }
0x000659de mov r6, r5 | r6 = r5;
0x000659e0 str.w fp, [r5, 0x38] | __asm ("str.w fp, [r5, 0x38]");
| do {
0x000659e4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000659e6 str.w r6, [fp, 0x34] | __asm ("str.w r6, [arg_34h]");
0x000659ea ldr r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x000659ec str r3, [sp, 0x44] | var_44h = r3;
| label_287:
0x000659ee ldr r3, [sp, 0x44] | r3 = var_44h;
0x000659f0 cmp r3, 0 |
| if (r3 == 0) {
0x000659f2 beq 0x65a7c | goto label_288;
| }
0x000659f4 ldr r1, [sp, 0x48] | r1 = var_48h;
0x000659f6 add.w r3, fp, 0x30 | r3 += arg_30h;
0x000659fa vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000659fe movs r2, 0 | r2 = 0;
0x00065a00 ldr.w sb, [fp, 0x3c] | sb = *(arg_3ch);
0x00065a04 mov r0, r8 | r0 = r8;
0x00065a06 ldr r7, [r1, 0x18] | r7 = *((r1 + 0x18));
0x00065a08 ldrd r5, r6, [fp, 0x30] | __asm ("ldrd r5, r6, [arg_30h]");
0x00065a0c str r2, [r1, 0x18] | *((r1 + 0x18)) = r2;
0x00065a0e mov r1, fp | r1 = fp;
0x00065a10 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x00065a14 str.w r2, [fp, 0x3c] | __asm ("str.w r2, [arg_3ch]");
0x00065a18 bl 0x31d00 | fcn_00031d00 (r0, r1, r2);
0x00065a1c ldr r1, [sp, 0x48] | r1 = var_48h;
0x00065a1e movs r3, 0x87 | r3 = 0x87;
0x00065a20 str.w r5, [fp, 0x30] | __asm ("str.w r5, [arg_30h]");
0x00065a24 mov r5, r0 | r5 = r0;
0x00065a26 str.w sb, [fp, 0x3c] | __asm ("str.w sb, [arg_3ch]");
0x00065a2a strb.w r3, [fp] | *(fp) = r3;
0x00065a2e str r7, [r1, 0x18] | *((r1 + 0x18)) = r7;
0x00065a30 cmp r0, 0 |
0x00065a32 beq 0x659e4 |
| } while (r0 == 0);
0x00065a34 ldr.w r3, [sl, 0x64] | r3 = *((sl + 0x64));
0x00065a38 adds r3, 1 | r3++;
0x00065a3a str.w r3, [sl, 0x64] | __asm ("str.w r3, [sl, 0x64]");
0x00065a3e str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00065a40 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00065a42 cmp r3, 0 |
| if (r3 == 0) {
0x00065a44 beq 0x659d8 | goto label_104;
| }
0x00065a46 ldrb.w r7, [r8, 0x57] | r7 = *((r8 + 0x57));
0x00065a4a cmp r7, 0 |
| if (r7 != 0) {
0x00065a4c bne 0x659d8 | goto label_104;
| }
0x00065a4e mov r1, r3 | r1 = r3;
0x00065a50 mov r0, sl | r0 = sl;
0x00065a52 mov r3, r4 | r3 = r4;
0x00065a54 ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x00065a56 bl 0xad80 | fcn_0000ad80 (r0, r1, r2, r3);
0x00065a5a ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00065a5c add.w sb, sp, 0xdc | sb += var_dch;
0x00065a60 mov r0, sb | r0 = sb;
0x00065a62 mov r1, r5 | r1 = r5;
0x00065a64 str r7, [sp, 0xdc] | var_dch = r7;
0x00065a66 str r3, [sp, 0xf4] | var_f4h = r3;
0x00065a68 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00065a6a strd r7, r7, [sp, 0xe8] | __asm ("strd r7, r7, [var_e8h]");
0x00065a6e str r7, [sp, 0xf0] | var_f0h = r7;
0x00065a70 str r3, [sp, 0xe0] | var_e0h = r3;
0x00065a72 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00065a74 str r3, [sp, 0xe4] | var_e4h = r3;
0x00065a76 bl 0x31b70 | fcn_00031b70 (r0, r1, r2, r3, r4, r5);
0x00065a7a b 0x659d8 | goto label_104;
| label_288:
0x00065a7c ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00065a7e ldr r7, [sp, 0x54] | r7 = var_54h;
| if (r3 != 0) {
0x00065a80 cbz r3, 0x65a8a |
0x00065a82 mov r1, r3 | r1 = r3;
0x00065a84 mov r0, r8 | r0 = r8;
0x00065a86 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x00065a8a ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x00065a8e cmp r3, 0 |
| if (r3 != 0) {
0x00065a90 bne.w 0x65d9a | goto label_289;
| }
0x00065a94 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00065a96 ldr r2, [sp, 0x28] | r2 = x;
0x00065a98 add r3, r2 | r3 += r2;
0x00065a9a ldr r6, [r3, 0x18] | r6 = *((r3 + 0x18));
| if (r6 != 0) {
0x00065a9c cbz r6, 0x65ab4 |
0x00065a9e ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x00065aa0 cmp r3, 1 |
| if (r3 == 1) {
0x00065aa2 beq.w 0x65de2 | goto label_290;
| }
0x00065aa6 subs r3, 1 | r3--;
0x00065aa8 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
| label_119:
0x00065aaa ldr r2, [sp, 0x28] | r2 = x;
0x00065aac ldr r3, [sp, 0x18] | r3 = var_18h;
0x00065aae add r3, r2 | r3 += r2;
0x00065ab0 movs r2, 0 | r2 = 0;
0x00065ab2 str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
| }
0x00065ab4 ldr.w r3, [pc, 0x448] | r3 = *(0x00065f00);
0x00065ab8 mov r1, r7 | r1 = r7;
0x00065aba ldr r2, [sp, 0x18] | r2 = var_18h;
0x00065abc mov r5, fp | r5 = fp;
0x00065abe vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x00065ac2 add r3, pc | r3 += pc;
0x00065ac4 str.w r8, [sp, 0x4c] | __asm ("str.w r8, [var_4ch]");
0x00065ac8 str r3, [sp, 0x5c] | var_5ch = r3;
0x00065aca ldr.w r3, [pc, 0x438] | r3 = *(0x00065f04);
0x00065ace str r7, [sp, 0x68] | var_68h = r7;
0x00065ad0 mov r7, r2 | r7 = r2;
0x00065ad2 str.w sl, [sp, 0x44] | __asm ("str.w sl, [var_44h]");
0x00065ad6 mov sl, r1 | sl = r1;
0x00065ad8 add r3, pc | r3 += pc;
0x00065ada str r4, [sp, 0x64] | var_64h = r4;
0x00065adc str r3, [sp, 0x60] | var_60h = r3;
0x00065ade ldr r3, [sp, 0x28] | r3 = x;
0x00065ae0 str.w fp, [sp, 0x54] | __asm ("str.w fp, [var_54h]");
0x00065ae4 adds r3, 8 | r3 += 8;
0x00065ae6 str r3, [sp, 0x6c] | var_6ch = r3;
0x00065ae8 mov.w r3, -1 | r3 = -1;
0x00065aec str r3, [sp, 0x3c] | var_3ch = r3;
0x00065aee add r3, sp, 0xdc | r3 += var_dch;
0x00065af0 mov r8, r3 | r8 = r3;
0x00065af2 str r3, [sp, 0x70] | var_70h = r3;
| label_105:
0x00065af4 ldr r3, [sp, 0x28] | r3 = x;
0x00065af6 ldr.w r4, [sl, 0x20] | r4 = *((sl + 0x20));
0x00065afa add r7, r3 | r7 += r3;
0x00065afc ldrb.w r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x00065b00 ldr.w fp, [r4] | fp = *(r4);
0x00065b04 ldr r7, [r5, 0x20] | r7 = *((r5 + 0x20));
0x00065b06 and r3, r3, 0x40 | r3 &= 0x40;
0x00065b0a str r3, [sp, 0x48] | var_48h = r3;
0x00065b0c ldr r3, [sp, 0x54] | r3 = var_54h;
0x00065b0e cmp r3, r5 |
0x00065b10 itett eq |
| if (r3 != r5) {
0x00065b12 ldreq r3, [sp, 0x18] | r3 = var_18h;
| }
| if (r3 == r5) {
0x00065b14 movne r3, 0 | r3 = 0;
| }
| if (r3 != r5) {
0x00065b16 ldreq r2, [sp, 0x28] | r2 = x;
| }
| if (r3 != r5) {
0x00065b18 addeq r3, r3, r2 | r3 += r2;
| }
0x00065b1a it eq |
| if (r3 != r5) {
0x00065b1c ldrbeq r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
| }
0x00065b20 cmp.w fp, 1 |
0x00065b24 str r3, [sp, 0x58] | var_58h = r3;
| if (fp > 1) {
0x00065b26 bgt.w 0x65cbc | goto label_291;
| }
| if (fp != 1) {
0x00065b2a bne 0x65ba2 | goto label_292;
| }
| label_108:
0x00065b2c ldr r3, [sp, 0x28] | r3 = x;
0x00065b2e adds r4, 8 | r4 += 8;
0x00065b30 adds r6, r7, r3 | r6 = r7 + r3;
0x00065b32 ldr r3, [sp, 0x64] | r3 = var_64h;
0x00065b34 mov sb, r3 | sb = r3;
0x00065b36 add.w r2, fp, r3 | r2 = fp + r3;
0x00065b3a str r2, [sp, 0x50] | var_50h = r2;
| do {
0x00065b3c add.w r3, r7, sb, lsl 6 | r3 = r7 + (sb << 6);
0x00065b40 ldrb.w r3, [r3, 0x2e] | r3 = *((r3 + 0x2e));
0x00065b44 lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 < r3) {
0x00065b46 bpl 0x65b52 |
0x00065b48 ldr r1, [r6, 0x34] | r1 = *((r6 + 0x34));
| if (r1 == 0) {
0x00065b4a cbz r1, 0x65b52 | goto label_293;
| }
0x00065b4c ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x00065b4e bl 0x189b0 | fcn_000189b0 (r0, r1);
| }
| label_293:
0x00065b52 mov lr, r4 | lr = r4;
0x00065b54 add.w ip, r6, 8 |
0x00065b58 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00065b5c adds r6, 0x40 | r6 += 0x40;
0x00065b5e add.w sb, sb, 1 | sb++;
0x00065b62 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00065b66 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00065b6a stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00065b6e ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00065b72 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00065b76 ldm.w lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x00065b7a stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00065b7e mov r0, r4 | r0 = r4;
0x00065b80 ldrb r3, [r6, -0x14] | r3 = *((r6 - 0x14));
0x00065b84 movs r1, 0 | r1 = 0;
0x00065b86 adds r4, 0x40 | r4 += 0x40;
0x00065b88 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00065b8a orrs r3, r2 | r3 |= r2;
0x00065b8c movs r2, 0x40 | r2 = 0x40;
0x00065b8e strb r3, [r6, -0x14] | *((r6 - 0x14)) = r3;
0x00065b92 ldr r3, [r4, -0x18] | r3 = *((r4 - 0x18));
0x00065b96 str r3, [sp, 0x3c] | var_3ch = r3;
0x00065b98 blx 0x839c | fcn_0000839c ();
0x00065b9c ldr r3, [sp, 0x50] | r3 = var_50h;
0x00065b9e cmp r3, sb |
0x00065ba0 bne 0x65b3c |
| } while (r3 != sb);
| label_292:
0x00065ba2 ldr r2, [sp, 0x58] | r2 = var_58h;
0x00065ba4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00065ba6 orrs r3, r2 | r3 |= r2;
0x00065ba8 ldr r2, [sp, 0x28] | r2 = x;
0x00065baa adds r1, r7, r2 | r1 = r7 + r2;
0x00065bac ldrb.w r2, [r1, 0x2c] | r2 = *((r1 + 0x2c));
0x00065bb0 and r2, r2, 0x40 | r2 &= 0x40;
0x00065bb4 orrs r3, r2 | r3 |= r2;
0x00065bb6 strb.w r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x00065bba ldr.w r2, [sl, 0x30] | r2 = *((sl + 0x30));
| if (r2 != 0) {
0x00065bbe cbz r2, 0x65bca |
0x00065bc0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00065bc2 ands r3, r3, 0x400000 | r3 &= 0x400000;
| if (r3 == r3) {
0x00065bc6 beq.w 0x65cfa | goto label_294;
| }
| }
| label_111:
0x00065bca movs r3, 0 | r3 = 0;
0x00065bcc ldr.w r4, [sl, 0x24] | r4 = *((sl + 0x24));
0x00065bd0 str.w r3, [sl, 0x24] | __asm ("str.w r3, [sl, 0x24]");
0x00065bd4 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00065bd6 cmp r3, 0 |
| if (r3 != 0) {
0x00065bd8 bne 0x65cb0 | goto label_295;
| }
| if (r4 != 0) {
| label_106:
0x00065bda cbz r4, 0x65bf0 |
0x00065bdc ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00065bde cmp r3, 0 |
| if (r3 == 0) {
0x00065be0 beq.w 0x65cf6 | goto label_296;
| }
0x00065be4 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00065be6 mov r2, r4 | r2 = r4;
0x00065be8 movs r1, 0x2c | r1 = 0x2c;
0x00065bea bl 0x24c54 | fcn_00024c54 (r0, r1, r2, r3);
0x00065bee str r0, [r5, 0x24] | *((r5 + 0x24)) = r0;
| }
| label_110:
0x00065bf0 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00065bf2 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x00065bf6 cmp r2, 0 |
| if (r2 == 0) {
0x00065bf8 beq 0x65cd6 | goto label_297;
| }
| label_109:
0x00065bfa ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00065bfe and r2, r3, 0x100 | r2 = r3 & 0x100;
0x00065c02 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00065c04 orrs r3, r2 | r3 |= r2;
0x00065c06 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x00065c08 ldr.w r3, [sl, 0x3c] | r3 = *((sl + 0x3c));
| if (r3 != 0) {
0x00065c0c cbz r3, 0x65c16 |
0x00065c0e str r3, [r5, 0x3c] | *((r5 + 0x3c)) = r3;
0x00065c10 movs r3, 0 | r3 = 0;
0x00065c12 str.w r3, [sl, 0x3c] | __asm ("str.w r3, [sl, 0x3c]");
| }
0x00065c16 cmp.w fp, 0 |
| if (fp <= 0) {
0x00065c1a ble 0x65c52 | goto label_298;
| }
0x00065c1c ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00065c1e movs r6, 0 | r6 = 0;
0x00065c20 adds r4, r7, r3 | r4 = r7 + r3;
| do {
0x00065c22 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
| if (r3 != 0) {
0x00065c24 cbz r3, 0x65c4a |
0x00065c26 movs r3, 0 | r3 = 0;
0x00065c28 mov r1, r5 | r1 = r5;
0x00065c2a strd r3, r3, [r8] | __asm ("strd r3, r3, [r8]");
0x00065c2e mov r0, r8 | r0 = r8;
0x00065c30 strd r3, r3, [r8, 8] | __asm ("strd r3, r3, [var_e8h]");
0x00065c34 strd r3, r3, [r8, 0x10] | __asm ("strd r3, r3, [var_f0h]");
0x00065c38 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00065c3a str r4, [sp, 0xf4] | var_f4h = r4;
0x00065c3c str r3, [sp, 0xe0] | var_e0h = r3;
0x00065c3e ldr r3, [sp, 0x60] | r3 = var_60h;
0x00065c40 str r3, [sp, 0xe4] | var_e4h = r3;
0x00065c42 vstr d8, [r4, 0x30] | __asm ("vstr d8, [r4, 0x30]");
0x00065c46 bl 0x31b70 | fcn_00031b70 (r0, r1, r2, r3, r4, r5);
| }
0x00065c4a adds r6, 1 | r6++;
0x00065c4c adds r4, 0x40 | r4 += 0x40;
0x00065c4e cmp fp, r6 |
0x00065c50 bne 0x65c22 |
| } while (fp != r6);
| label_298:
0x00065c52 ldr r5, [r5, 0x34] | r5 = *((r5 + 0x34));
0x00065c54 ldr.w sl, [sl, 0x34] | sl = *((sl + 0x34));
0x00065c58 cmp r5, 0 |
| if (r5 != 0) {
0x00065c5a bne.w 0x65af4 | goto label_105;
| }
| label_107:
0x00065c5e ldr r3, [pc, 0x2a8] |
0x00065c60 ldr r7, [sp, 0x68] | r7 = var_68h;
0x00065c62 ldr.w sl, [sp, 0x44] | sl = var_44h;
0x00065c66 add r3, pc | r3 = 0xcbb74;
0x00065c68 ldr r0, [sp, 0x70] | r0 = var_70h;
0x00065c6a str r3, [sp, 0xe0] | var_e0h = r3;
0x00065c6c mov r1, r7 | r1 = r7;
0x00065c6e ldr r3, [pc, 0x29c] |
0x00065c70 ldr.w r8, [sp, 0x4c] | r8 = var_4ch;
0x00065c74 ldr.w fp, [sp, 0x54] | fp = var_54h;
0x00065c78 add r3, pc | r3 = 0xcbb8a;
0x00065c7a str.w sl, [sp, 0xdc] | __asm ("str.w sl, [var_dch]");
0x00065c7e str r3, [sp, 0xe4] | var_e4h = r3;
0x00065c80 movs r3, 0 | r3 = 0;
0x00065c82 strd r3, r3, [sp, 0xe8] | __asm ("strd r3, r3, [var_e8h]");
0x00065c86 strd r3, r3, [sp, 0xf0] | __asm ("strd r3, r3, [var_f4h]");
0x00065c8a bl 0x31b70 | fcn_00031b70 (r0, r1, r2, r3, r4, r5);
| if (r7 != 0) {
0x00065c8e cbz r7, 0x65c98 |
0x00065c90 mov r1, r7 | r1 = r7;
0x00065c92 mov r0, r8 | r0 = r8;
0x00065c94 bl 0x1a570 | fcn_0001a570 (r0, r1);
| }
| label_115:
0x00065c98 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x00065c9c cmp r3, 0 |
| if (r3 != 0) {
0x00065c9e bne.w 0x639ac | goto label_19;
| }
0x00065ca2 ldr.w r3, [fp, 0x20] | r3 = *(arg_20h);
0x00065ca6 mov.w r4, -1 | r4 = -1;
0x00065caa str r3, [sp, 0x18] | var_18h = r3;
0x00065cac b.w 0x636dc | goto label_5;
| label_295:
0x00065cb0 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x00065cb2 mov r2, r3 | r2 = r3;
0x00065cb4 mov r0, r4 | r0 = r4;
0x00065cb6 bl 0xac90 | fcn_0000ac90 (r0, r1, r2);
0x00065cba b 0x65bda | goto label_106;
| label_291:
0x00065cbc ldr r3, [sp, 0x64] | r3 = var_64h;
0x00065cbe mov r1, r7 | r1 = r7;
0x00065cc0 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00065cc2 add.w r2, fp, -1 | r2 = fp + -1;
0x00065cc6 adds r3, 1 | r3++;
0x00065cc8 bl 0x2d4a8 | r0 = fcn_0002d4a8 (r0, r1, r2, r3);
0x00065ccc mov r7, r0 | r7 = r0;
0x00065cce cmp r0, 0 |
| if (r0 == 0) {
0x00065cd0 beq 0x65c5e | goto label_107;
| }
0x00065cd2 str r0, [r5, 0x20] | *((r5 + 0x20)) = r0;
0x00065cd4 b 0x65b2c | goto label_108;
| label_297:
0x00065cd6 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00065cd8 mov r1, r5 | r1 = r5;
0x00065cda mov r0, r8 | r0 = r8;
0x00065cdc str r3, [sp, 0xdc] | var_dch = r3;
0x00065cde ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00065ce0 str r3, [sp, 0xe0] | var_e0h = r3;
0x00065ce2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00065ce4 str r3, [sp, 0xe4] | var_e4h = r3;
0x00065ce6 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00065ce8 str r3, [sp, 0xe8] | var_e8h = r3;
0x00065cea ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x00065cee str r3, [sp, 0xec] | var_ech = r3;
0x00065cf0 bl 0x340d4 | fcn_000340d4 (r0, r1, r2);
0x00065cf4 b 0x65bfa | goto label_109;
| label_296:
0x00065cf6 str r4, [r5, 0x24] | *((r5 + 0x24)) = r4;
0x00065cf8 b 0x65bf0 | goto label_110;
| label_294:
0x00065cfa mov r1, r2 | r1 = r2;
0x00065cfc ldr r0, [r1], 0x14 | r0 = *(r1);
| r1 += 0x14;
0x00065d00 b 0x65d0c |
| while (r3 < r0) {
0x00065d02 lsls r4, r3, 4 | r4 = r3 << 4;
0x00065d04 adds r3, 1 | r3++;
0x00065d06 mov.w r6, 0 | r6 = 0;
0x00065d0a strh r6, [r1, r4] | *((r1 + r4)) = r6;
0x00065d0c cmp r3, r0 |
0x00065d0e blt 0x65d02 |
| }
0x00065d10 movs r3, 0 | r3 = 0;
0x00065d12 str r2, [r5, 0x30] | *((r5 + 0x30)) = r2;
0x00065d14 str.w r3, [sl, 0x30] | __asm ("str.w r3, [sl, 0x30]");
0x00065d18 b 0x65bca | goto label_111;
| label_283:
0x00065d1a ldrb.w r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00065d1e lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
0x00065d20 bpl.w 0x6587c | goto label_112;
| }
0x00065d24 ldrsb.w r3, [r4, 0x31] | r3 = *((r4 + 0x31));
0x00065d28 cmp r3, 0 |
| if (r3 == 0) {
0x00065d2a beq.w 0x6587c | goto label_112;
| }
0x00065d2e ldrb.w r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x00065d32 add.w r5, r4, 0x350 | r5 = r4 + 0x350;
0x00065d36 movs r1, 0x60 | r1 = 0x60;
0x00065d38 subs r3, 1 | r3--;
0x00065d3a b 0x65d4c |
| while (r0 != r3) {
0x00065d3c mul r2, r1, r3 | r2 = r1 * r3;
0x00065d40 ldr r0, [r5, r2] | r0 = *((r5 + r2));
0x00065d42 ldr r0, [r0, 0x28] | r0 = *((r0 + 0x28));
0x00065d44 lsls r7, r0, 0x1d | r7 = r0 << 0x1d;
| if (r7 < r0) {
0x00065d46 bmi.w 0x65edc | goto label_299;
| }
0x00065d4a subs r3, 1 | r3--;
0x00065d4c adds r0, r3, 1 | r0 = r3 + 1;
0x00065d4e bne 0x65d3c |
| }
0x00065d50 movs r2, 0 | r2 = 0;
0x00065d52 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00065d54 str r2, [sp] | *(sp) = r2;
0x00065d56 movs r1, 8 | r1 = 8;
0x00065d58 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00065d5a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065d5c vabal.u8 q7, d25, d13 | __asm ("vabal.u8 q7, d25, d13");
| label_282:
0x00065d60 movs r2, 0 | r2 = 0;
0x00065d62 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00065d64 str r2, [sp] | *(sp) = r2;
0x00065d66 movs r1, 0x47 | r1 = 0x47;
0x00065d68 movs r2, 1 | r2 = 1;
0x00065d6a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065d6e b 0x65874 | goto label_113;
| label_238:
0x00065d70 ldr.w sb, [sp, 0x3c] | sb = var_3ch;
0x00065d74 b.w 0x64b16 | goto label_114;
| label_284:
0x00065d78 mov r5, r3 | r5 = r3;
0x00065d7a b.w 0x6550e | goto label_101;
| label_277:
0x00065d7e ldr r4, [sp, 0x24] | r4 = var_24h;
0x00065d80 mov r5, r2 | r5 = r2;
0x00065d82 ldr r1, [sp, 0x110] | r1 = var_110h;
0x00065d84 str r2, [sp, 0xfc] | var_fch = r2;
0x00065d86 mov r0, r4 | r0 = r4;
0x00065d88 str r2, [sp, 0x4c] | var_4ch = r2;
0x00065d8a bl 0x1cab0 | fcn_0001cab0 (r0, r1);
0x00065d8e ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x00065d90 str r3, [sp, 0x18] | var_18h = r3;
0x00065d92 ldr r3, [sp, 0x28] | r3 = x;
0x00065d94 ldr r3, [r3] | r3 = *(r3);
0x00065d96 b.w 0x650c6 | goto label_87;
| label_289:
0x00065d9a ldr r3, [sp, 0x18] | r3 = var_18h;
0x00065d9c ldr r2, [sp, 0x28] | r2 = x;
0x00065d9e add r3, r2 | r3 += r2;
0x00065da0 str r7, [r3, 0x1c] | *((r3 + 0x1c)) = r7;
0x00065da2 b 0x65c98 | goto label_115;
| label_265:
0x00065da4 ldr r2, [r6, 0x24] | r2 = *((r6 + 0x24));
0x00065da6 cmp r2, 0 |
| if (r2 != 0) {
0x00065da8 bne.w 0x657fa | goto label_116;
| }
| label_285:
0x00065dac ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
| label_122:
0x00065dae ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x00065db0 cmp r3, 0 |
| if (r3 < 0) {
0x00065db2 blt.w 0x6581c | goto label_117;
| }
0x00065db6 ldr r3, [r2] | r3 = *(r2);
0x00065db8 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00065dba cmp r3, 0 |
0x00065dbc str r3, [sp, 0x34] | var_34h = r3;
0x00065dbe ite eq |
| if (r3 != 0) {
0x00065dc0 moveq r4, 0 | r4 = 0;
| }
| if (r3 == 0) {
0x00065dc2 movne r4, 0x500 | r4 = 0x500;
| }
0x00065dc6 b 0x6581e | goto label_103;
| label_273:
0x00065dc8 ldr r1, [pc, 0x144] |
0x00065dca mov r0, r7 | r0 = r7;
0x00065dcc str r2, [sp, 0x5c] | var_5ch = r2;
0x00065dce add r1, pc | r1 = 0xcbce2;
0x00065dd0 bl 0x8ec0 | fcn_00008ec0 (r0);
0x00065dd4 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00065dd6 cmp r0, 0 |
| if (r0 != 0) {
0x00065dd8 bne.w 0x64646 | goto label_88;
| }
0x00065ddc mov r7, r5 | r7 = r5;
0x00065dde movs r5, 2 | r5 = 2;
0x00065de0 b 0x65708 | goto label_118;
| label_290:
0x00065de2 ldr.w r5, [sl, 0x74] | r5 = *((sl + 0x74));
0x00065de6 cmp r5, 0 |
0x00065de8 it eq |
| if (r5 != 0) {
0x00065dea moveq r5, sl | r5 = sl;
| }
0x00065dec ldr r0, [r5] | r0 = *(r5);
| if (r0 == 0) {
0x00065dee cbz r0, 0x65e24 | goto label_300;
| }
0x00065df0 movs r2, 0xc | r2 = 0xc;
0x00065df2 movs r3, 0 | r3 = 0;
0x00065df4 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
| if (r0 == 0) {
| label_123:
0x00065df8 cbz r0, 0x65e2e | goto label_301;
| }
0x00065dfa ldr.w r2, [r5, 0x80] | r2 = *((r5 + 0x80));
0x00065dfe str r2, [r0] | *(r0) = r2;
0x00065e00 ldr r2, [pc, 0x110] |
0x00065e02 str.w r0, [r5, 0x80] | __asm ("str.w r0, [r5, 0x80]");
0x00065e06 str r6, [r0, 4] | *((r0 + 4)) = r6;
0x00065e08 add r2, pc | r2 = 0xcbd20;
0x00065e0a str r2, [r0, 8] | *((r0 + 8)) = r2;
0x00065e0c b 0x65aaa | goto label_119;
| label_267:
0x00065e0e mov.w r4, 0x8000 |
0x00065e12 movt r4, 0xffff | r4 = 0x-8000;
0x00065e16 b.w 0x6549a | goto label_120;
| label_266:
0x00065e1a ldr r1, [r6, 0x24] | r1 = *((r6 + 0x24));
0x00065e1c cmp r1, 0 |
| if (r1 != 0) {
0x00065e1e bne.w 0x657fc | goto label_121;
| }
0x00065e22 b 0x65dae | goto label_122;
| label_300:
0x00065e24 movs r1, 0 | r1 = 0;
0x00065e26 movs r0, 0xc | r0 = 0xc;
0x00065e28 bl 0x13558 | fcn_00013558 (r0);
0x00065e2c b 0x65df8 | goto label_123;
| label_301:
0x00065e2e ldr r0, [r5] | r0 = *(r5);
0x00065e30 mov r1, r6 | r1 = r6;
0x00065e32 bl 0x1ab74 | fcn_0001ab74 (r0, r1);
0x00065e36 b 0x65aaa | goto label_119;
| label_280:
0x00065e38 adds r3, 1 | r3++;
0x00065e3a movs r2, 0 | r2 = 0;
0x00065e3c str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x00065e40 movs r1, 0x47 | r1 = 0x47;
0x00065e42 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00065e44 mov r4, r2 | r4 = r2;
0x00065e46 str r2, [sp] | *(sp) = r2;
0x00065e48 str r3, [sp, 0x30] | var_30h = r3;
0x00065e4a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065e4e b 0x6581e | goto label_103;
| label_279:
0x00065e50 movs r1, 0 | r1 = 0;
0x00065e52 b 0x65816 | goto label_124;
| label_271:
0x00065e54 ldr r2, [pc, 0xc0] |
0x00065e56 add r2, pc | r2 = 0xcbd72;
0x00065e58 mov r1, r2 | r1 = r2;
0x00065e5a b.w 0x65596 | goto label_102;
| label_158:
0x00065e5e mov r3, ip | r3 = ip;
0x00065e60 str r2, [sp, 0x3c] | var_3ch = r2;
| if (r0 == 0) {
0x00065e62 cbz r0, 0x65e7e | goto label_302;
| }
0x00065e64 mov r1, r0 | r1 = r0;
0x00065e66 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00065e68 ldr r0, [r1], 0x14 | r0 = *(r1);
| r1 += 0x14;
0x00065e6c b 0x65e7a | goto label_303;
| label_125:
0x00065e6e lsls r7, r2, 4 | r7 = r2 << 4;
0x00065e70 ldrh r7, [r1, r7] | r7 = *((r1 + r7));
0x00065e72 cmp r7, 0 |
| if (r7 == 0) {
0x00065e74 beq.w 0x636dc | goto label_5;
| }
0x00065e78 adds r2, 1 | r2++;
| label_303:
0x00065e7a cmp r2, r0 |
| if (r2 < r0) {
0x00065e7c blt 0x65e6e | goto label_125;
| }
| label_302:
0x00065e7e tst.w lr, 0x2000 |
| if ((lr & 0x2000) != 0) {
0x00065e82 bne.w 0x636dc | goto label_5;
| }
0x00065e86 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00065e88 ldr r2, [r2] | r2 = *(r2);
0x00065e8a cmp r2, 1 |
| if (r2 <= 1) {
0x00065e8c ble.w 0x65922 | goto label_126;
| }
0x00065e90 ldr.w r2, [sl, 0x64] | r2 = *((sl + 0x64));
0x00065e94 cmp.w r2, 0x1f4 |
| if (r2 > 0x1f4) {
0x00065e98 bgt.w 0x636dc | goto label_5;
| }
0x00065e9c ands r7, r3, 0x800000 | r7 = r3 & 0x800000;
| if (r7 != r3) {
0x00065ea0 bne.w 0x636dc | goto label_5;
| }
0x00065ea4 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x00065ea8 mov r0, r8 | r0 = r8;
0x00065eaa adds r2, r3, 1 | r2 = r3 + 1;
0x00065eac asr.w r3, r3, 0x1f | r3 >>= 0x1f;
0x00065eb0 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00065eb4 lsls r3, r3, 2 | r3 <<= 2;
0x00065eb6 orr.w r3, r3, r2, lsr 30 | r3 |= (r2 >> 30);
0x00065eba lsls r2, r2, 2 | r2 <<= 2;
0x00065ebc str r2, [sp, 0x44] | var_44h = r2;
0x00065ebe bl 0x21784 | fcn_00021784 (r0, r1);
0x00065ec2 str r0, [sp, 0x3c] | var_3ch = r0;
0x00065ec4 cmp r0, 0 |
| if (r0 == 0) {
0x00065ec6 beq.w 0x65922 | goto label_126;
| }
0x00065eca ldr r2, [sp, 0x44] | r2 = var_44h;
0x00065ecc mov r1, r7 | r1 = r7;
0x00065ece blx 0x839c | fcn_0000839c ();
0x00065ed2 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x00065ed6 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00065ed8 str r3, [r2] | *(r2) = r3;
0x00065eda b 0x65922 | goto label_126;
| label_299:
0x00065edc adds r3, r4, r2 | r3 = r4 + r2;
0x00065ede movs r2, 0 | r2 = 0;
0x00065ee0 str r2, [sp] | *(sp) = r2;
0x00065ee2 movs r1, 8 | r1 = 8;
0x00065ee4 ldr.w r3, [r3, 0x310] | r3 = *((r3 + 0x310));
0x00065ee8 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00065eea bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065eee b 0x6587c | goto label_112;
| label_264:
0x00065ef0 ldr r2, [r6, 0x24] | r2 = *((r6 + 0x24));
0x00065ef2 cmp r2, 0 |
| if (r2 != 0) {
0x00065ef4 bne.w 0x657f4 | goto label_127;
| }
0x00065ef8 mov r4, r2 | r4 = r2;
0x00065efa strd r2, r2, [sp, 0x30] | __asm ("strd r2, r2, [var_34h]");
0x00065efe b 0x6581e | goto label_103;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x65f1c */
| #include <stdint.h>
|
; (fcn) fcn.00065f1c () | void fcn_00065f1c (int16_t arg1, int16_t arg2) {
| int16_t var_0h_2;
| int16_t var_ch_2;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h;
| int16_t var_1ch_3;
| int16_t var_20h_2;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_68h;
| r0 = arg1;
| r1 = arg2;
0x00065f1c ldr r2, [pc, 0x27c] |
0x00065f1e ldr r3, [pc, 0x280] | r3 = *(0x661a2);
0x00065f20 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00065f24 mov r5, r1 | r5 = r1;
0x00065f26 add r2, pc | r2 = 0xcc0c6;
0x00065f28 ldr r1, [r0, 0x24] | r1 = *((r0 + 0x24));
0x00065f2a sub sp, 0x38 |
0x00065f2c ldr r3, [r2, r3] |
0x00065f2e ldr r3, [r3] | r3 = imp.sinh;
0x00065f30 str r3, [sp, 0x34] | var_68h = r3;
0x00065f32 mov.w r3, 0 | r3 = 0;
0x00065f36 cmp r1, 0 |
| if (r1 != 0) {
0x00065f38 bne.w 0x660d0 | goto label_8;
| }
0x00065f3c ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00065f3e mov r4, r0 | r4 = r0;
0x00065f40 ldr r6, [r0, 8] | r6 = *((r0 + 8));
0x00065f42 ldr r7, [r5, 0x14] | r7 = *((r5 + 0x14));
0x00065f44 ands r2, r3, 0x2000000 | r2 = r3 & 0x2000000;
| if (r2 != r3) {
0x00065f48 bne.w 0x6606e | goto label_9;
| }
0x00065f4c orr sl, r3, 0x2000000 | sl = r3 | 0x2000000;
0x00065f50 ldr r3, [r0, 0x2c] | r3 = *((r0 + 0x2c));
0x00065f52 str.w sl, [r5, 4] | __asm ("str.w sl, [r5, 4]");
0x00065f54 adr r0, 0x10 | r0 = 0x10;
0x00065f56 adds r3, 1 | r3++;
0x00065f58 str r3, [r0, 0x2c] | *((r0 + 0x2c)) = r3;
0x00065f5a ldrd r0, r1, [r6, 0x6c] | __asm ("ldrd r0, r1, [r6, 0x6c]");
0x00065f5e str r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x00065f60 cmp r0, r1 |
| if (r0 >= r1) {
0x00065f62 bge.w 0x6616e | goto label_10;
| }
0x00065f66 add.w lr, r0, r0, lsl 2 | lr = r0 + (r0 << 2);
0x00065f6a ldr.w r8, [r6, 0x68] | r8 = *((r6 + 0x68));
0x00065f6e adds r0, 1 | r0++;
0x00065f70 lsl.w lr, lr, 2 | lr <<= 2;
0x00065f74 mov.w sb, 0x4a | sb = 0x4a;
0x00065f78 str r0, [r6, 0x6c] | *((r6 + 0x6c)) = r0;
0x00065f7a add.w ip, r8, lr |
0x00065f7e strd r3, r2, [ip, 8] | __asm ("strd r3, r2, [ip, 8]");
0x00065f82 str.w r2, [ip, 0x10] | __asm ("str.w r2, [ip, 0x10]");
0x00065f86 str.w sb, [r8, lr] | __asm ("str.w sb, [r8, lr]");
0x00065f8a str.w r2, [ip, 4] | __asm ("str.w r2, [ip, 4]");
| label_5:
0x00065f8e ands r3, sl, 0x40 | r3 = sl & 0x40;
0x00065f92 str r0, [r5, 0x2c] | *((r5 + 0x2c)) = r0;
| if (r3 == sl) {
0x00065f94 beq.w 0x66136 | goto label_11;
| }
| label_3:
0x00065f98 ldr r3, [pc, 0x208] |
0x00065f9a mov.w sb, 0 | sb = 0;
0x00065f9e add r3, pc | r3 = 0xcc146;
| label_4:
0x00065fa0 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x00065fa2 movs r1, 1 | r1 = 1;
0x00065fa4 mov r0, r4 | r0 = r4;
0x00065fa6 str r2, [sp] | *(sp) = r2;
0x00065fa8 ldr r2, [pc, 0x1fc] |
0x00065faa add r2, pc | r2 = 0xcc156;
0x00065fac bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00065fb0 ldrb r3, [r5] | r3 = *(r5);
0x00065fb2 cmp r3, 0x8a |
| if (r3 == 0x8a) {
0x00065fb4 beq.w 0x660d4 | goto label_12;
| }
0x00065fb8 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00065fba movs r2, 0 | r2 = 0;
0x00065fbc movs r1, 3 | r1 = 3;
0x00065fbe mov r0, r6 | r0 = r6;
0x00065fc0 strb.w r1, [sp, 0x18] | var_18h = r1;
0x00065fc4 movs r1, 0x47 | r1 = 0x47;
0x00065fc6 adds r3, 1 | r3++;
0x00065fc8 str r2, [sp, 0x20] | var_20h_2 = r2;
0x00065fca str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x00065fcc str r2, [sp] | *(sp) = r2;
0x00065fce str r3, [sp, 0x1c] | var_1ch_3 = r3;
0x00065fd0 str r2, [sp, 0x2c] | var_ch = r2;
0x00065fd2 strd r2, r2, [sp, 0x24] | __asm ("strd r2, r2, [var_8h_2]");
0x00065fd6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00065fda ldr.w r8, [r7, 0x3c] | r8 = *((r7 + 0x3c));
0x00065fde ldr.w sl, [r4] | sl = *(r4);
0x00065fe2 cmp.w r8, 0 |
| if (r8 == 0) {
0x00065fe6 beq.w 0x66110 | goto label_13;
| }
| label_1:
0x00065fea ldr r3, [pc, 0x1c0] |
0x00065fec add r2, sp, 0x10 | r2 += var_10h_2;
0x00065fee movs r1, 0x9b | r1 = 0x9b;
0x00065ff0 mov r0, sl | r0 = sl;
0x00065ff2 add r3, pc | r3 = 0xcc1a4;
0x00065ff4 str r3, [sp, 0x10] | var_10h_2 = r3;
0x00065ff6 movs r3, 1 | r3 = 1;
0x00065ff8 str r3, [sp, 0x14] | var_14h_2 = r3;
0x00065ffa movs r3, 0 | r3 = 0;
0x00065ffc bl 0x21bd8 | r0 = fcn_00021bd8 (r0, r1, r2, r3);
0x00066000 mov r8, r0 | r8 = r0;
| if (r0 != 0) {
0x00066002 cbz r0, 0x66028 |
0x00066004 movs r3, 0x43 | r3 = 0x43;
0x00066006 strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x00066008 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x0006600a ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
| if (r2 != 0) {
0x0006600c cbz r2, 0x6601c |
0x0006600e movs r3, 0 | r3 = 0;
0x00066010 mov r1, r2 | r1 = r2;
0x00066012 mov r0, sl | r0 = sl;
0x00066014 mov r2, r3 | r2 = r3;
0x00066016 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0006601a mov r2, r0 | r2 = r0;
| }
0x0006601c mov r3, r8 | r3 = r8;
0x0006601e movs r1, 0x34 | r1 = 0x34;
0x00066020 mov r0, r4 | r0 = r4;
0x00066022 bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x00066026 mov r8, r0 | r8 = r0;
| }
0x00066028 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x0006602a ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
| if (r1 != 0) {
0x0006602c cbz r1, 0x66036 |
0x0006602e mov r0, sl | r0 = sl;
0x00066030 bl 0x1a57c | fcn_0001a57c (r0, r1);
0x00066034 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
| }
0x00066036 str.w r8, [r3, 0xc] | __asm ("str.w r8, [r3, 0xc]");
| label_2:
0x0006603a movs r3, 0 | r3 = 0;
0x0006603c mov r1, r7 | r1 = r7;
0x0006603e add r2, sp, 0x18 | r2 += var_18h;
0x00066040 mov r0, r4 | r0 = r4;
0x00066042 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x00066044 bl 0x63500 | r0 = fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00066048 cmp r0, 0 |
| if (r0 != 0) {
0x0006604a bne 0x660c8 | goto label_14;
| }
0x0006604c ldr r7, [sp, 0x1c] | r7 = var_1ch_3;
0x0006604e cmp.w sb, 0 |
0x00066052 str r7, [r5, 0x1c] | *((r5 + 0x1c)) = r7;
0x00066054 bne 0x660a8 |
| while (1) {
0x00066056 movs r3, 1 | r3 = 1;
0x00066058 mov r0, r6 | r0 = r6;
0x0006605a str r3, [sp] | *(sp) = r3;
0x0006605c movs r1, 0x43 | r1 = 0x43;
0x0006605e ldrd r3, r2, [r5, 0x2c] | __asm ("ldrd r3, r2, [r5, 0x2c]");
0x00066062 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00066066 movs r3, 0 | r3 = 0;
0x00066068 strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x0006606a str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0006606c b 0x6608c | goto label_0;
| label_9:
0x0006606e ldr r2, [pc, 0x140] |
0x00066070 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x00066072 str r1, [sp, 0xc] | var_ch_2 = r1;
0x00066074 add r2, pc | r2 = 0xcc22a;
0x00066076 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x0006607a ldr r1, [sp, 0xc] | r1 = var_ch_2;
0x0006607c mov r0, r6 | r0 = r6;
0x0006607e ldrd r3, r2, [r5, 0x2c] | __asm ("ldrd r3, r2, [r5, 0x2c]");
0x00066082 str r1, [sp] | *(sp) = r1;
0x00066084 movs r1, 9 | r1 = 9;
0x00066086 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006608a ldr r7, [r5, 0x1c] | r7 = *((r5 + 0x1c));
| label_0:
0x0006608c ldr r2, [pc, 0x124] |
0x0006608e ldr r3, [pc, 0x110] | r3 = *(0x661a2);
0x00066090 add r2, pc | r2 = 0xcc248;
0x00066092 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00066094 ldr r2, [r3] | r2 = imp.sinh;
0x00066096 ldr r3, [sp, 0x34] | r3 = var_68h;
0x00066098 eors r2, r3 | r2 ^= r3;
0x0006609a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006609e bne 0x66198 | goto label_15;
| }
0x000660a0 mov r0, r7 | r0 = r7;
0x000660a2 add sp, 0x38 |
0x000660a4 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x000660a8 ldr r3, [r6] | r3 = *(r6);
0x000660aa ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x000660ac ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000660b0 it lt |
| if (r2 >= r3) {
0x000660b2 addlt sb, r2, -1 | sb = r2 + -1;
| }
0x000660b6 cmp r3, 0 |
| if (r3 != 0) {
0x000660b8 bne 0x66180 | goto label_16;
| }
0x000660ba ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x000660bc add.w sb, sb, sb, lsl 2 | sb += (sb << 2);
0x000660c0 add.w r3, r3, sb, lsl 2 | r3 += (sb << 2);
| label_6:
0x000660c4 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000660c6 b 0x66056 |
| }
| label_14:
0x000660c8 ldrb r3, [r5] | r3 = *(r5);
0x000660ca movs r2, 0xb6 | r2 = 0xb6;
0x000660cc strb r2, [r5] | *(r5) = r2;
0x000660ce strb r3, [r5, 2] | *((r5 + 2)) = r3;
| label_8:
0x000660d0 movs r7, 0 | r7 = 0;
0x000660d2 b 0x6608c | goto label_0;
| label_12:
0x000660d4 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x000660d6 movs r2, 0 | r2 = 0;
0x000660d8 ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x000660da str r2, [sp, 0x20] | var_20h_2 = r2;
0x000660dc ldr r1, [r3] | r1 = *(r3);
0x000660de adds r3, r0, 1 | r3 = r0 + 1;
0x000660e0 str r2, [sp, 0x2c] | var_ch = r2;
0x000660e2 str r3, [sp, 0x1c] | var_1ch_3 = r3;
0x000660e4 add r0, r1 | r0 += r1;
0x000660e6 str r1, [sp, 0x28] | var_8h_2 = r1;
0x000660e8 add r1, r3 | r1 += r3;
0x000660ea str r0, [r4, 0x2c] | *((r4 + 0x2c)) = r0;
0x000660ec subs r1, 1 | r1--;
0x000660ee mov r0, r6 | r0 = r6;
0x000660f0 str r1, [sp] | *(sp) = r1;
0x000660f2 movs r1, 0xa | r1 = 0xa;
0x000660f4 strb.w r1, [sp, 0x18] | var_18h = r1;
0x000660f8 movs r1, 0x4b | r1 = 0x4b;
0x000660fa str r3, [sp, 0x24] | var_4h_2 = r3;
0x000660fc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00066100 ldr.w r8, [r7, 0x3c] | r8 = *((r7 + 0x3c));
0x00066104 ldr.w sl, [r4] | sl = *(r4);
0x00066108 cmp.w r8, 0 |
| if (r8 != 0) {
0x0006610c bne.w 0x65fea | goto label_1;
| }
| label_13:
0x00066110 ldr r3, [pc, 0xa4] |
0x00066112 movs r1, 0x9b | r1 = 0x9b;
0x00066114 add r2, sp, 0x10 | r2 += var_10h_2;
0x00066116 mov r0, sl | r0 = sl;
0x00066118 add r3, pc | r3 = 0xcc2d4;
0x0006611a str r3, [sp, 0x10] | var_10h_2 = r3;
0x0006611c movs r3, 1 | r3 = 1;
0x0006611e str r3, [sp, 0x14] | var_14h_2 = r3;
0x00066120 mov r3, r8 | r3 = r8;
0x00066122 bl 0x21bd8 | fcn_00021bd8 (r0, r1, r2, r3);
0x00066126 mov r3, r8 | r3 = r8;
0x00066128 mov r2, r0 | r2 = r0;
0x0006612a movs r1, 0x94 | r1 = 0x94;
0x0006612c mov r0, r4 | r0 = r4;
0x0006612e bl 0x24c54 | fcn_00024c54 (r0, r1, r2, r3);
0x00066132 str r0, [r7, 0x3c] | *((r7 + 0x3c)) = r0;
0x00066134 b 0x6603a | goto label_2;
| label_11:
0x00066136 ldrd sb, r2, [r6, 0x6c] | __asm ("ldrd sb, r2, [r6, 0x6c]");
0x0006613a cmp sb, r2 |
| if (sb >= r2) {
0x0006613c bge 0x66188 | goto label_17;
| }
0x0006613e add.w r1, sb, sb, lsl 2 | r1 = sb + (sb << 2);
0x00066142 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x00066144 add.w r0, sb, 1 | r0 = sb + 1;
0x00066148 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006614c lsls r1, r1, 2 | r1 <<= 2;
0x0006614e str r0, [r6, 0x6c] | *((r6 + 0x6c)) = r0;
0x00066150 movs r0, 0xe | r0 = 0xe;
0x00066152 str r0, [r2, r1] | *((r2 + r1)) = r0;
0x00066154 add r2, r1 | r2 += r1;
0x00066156 adds r1, r2, 4 | r1 = r2 + 4;
0x00066158 vst1.32 {d16}, [r1] | __asm ("vst1.32 {d16}, [r1]");
0x0006615c strd r3, r3, [r2, 0xc] | __asm ("strd r3, r3, [r2, 0xc]");
| label_7:
0x00066160 cmp.w sb, 0 |
| if (sb == 0) {
0x00066164 beq.w 0x65f98 | goto label_3;
| }
0x00066168 ldr r3, [pc, 0x50] |
0x0006616a add r3, pc | r3 = 0xcc32a;
0x0006616c b 0x65fa0 | goto label_4;
| label_10:
0x0006616e movs r1, 0x4a | r1 = 0x4a;
0x00066170 mov r0, r6 | r0 = r6;
0x00066172 str r2, [sp] | *(sp) = r2;
0x00066174 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00066178 ldr.w sl, [r5, 4] | sl = *((r5 + 4));
0x0006617c adds r0, 1 | r0++;
0x0006617e b 0x65f8e | goto label_5;
| label_16:
0x00066180 ldr r3, [pc, 0x3c] |
0x00066182 add r3, pc | r3 = 0xcc346;
0x00066184 adds r3, 4 | r3 += 4;
0x00066186 b 0x660c4 | goto label_6;
| label_17:
0x00066188 mov r2, r3 | r2 = r3;
0x0006618a movs r1, 0xe | r1 = 0xe;
0x0006618c mov r0, r6 | r0 = r6;
0x0006618e str r3, [sp] | *(sp) = r3;
0x00066190 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00066194 mov sb, r0 | sb = r0;
0x00066196 b 0x66160 | goto label_7;
| label_15:
0x00066198 blx 0x883c | fcn_0000883c ();
0x0006619c cmp r5, 0x72 |
0x0006619e movs r6, r0 | r6 = r0;
0x000661a0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000661a2 movs r0, r0 |
0x000661a4 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x661c4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000661c4 () | void fcn_000661c4 (int16_t arg_4h, int16_t arg_ch, int16_t arg_14h, int16_t arg_1ch, int16_t arg_2ch, int16_t arg_30h, arithmetic arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_3fh;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int32_t var_48h_2;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000661c4 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x000661c8 mov r5, r0 | r5 = r0;
0x000661ca ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x000661cc mov fp, r1 |
0x000661ce sub sp, 0x64 |
0x000661d0 ldr.w r0, [pc, 0x64c] | r0 = *(0x00066820);
0x000661d4 ldr.w r3, [pc, 0x64c] |
0x000661d8 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x000661da add r0, pc | r0 += pc;
0x000661dc ldr r3, [r0, r3] | r3 = *((r0 + r3));
0x000661de ands r6, r1, 0x40 | r6 = r1 & 0x40;
0x000661e2 ldrd sb, r0, [r4, 0x6c] | __asm ("ldrd sb, r0, [r4, 0x6c]");
0x000661e6 ldr r3, [r3] | r3 = *(0x66824);
0x000661e8 str r3, [sp, 0x5c] | var_5ch = r3;
0x000661ea mov.w r3, 0 | r3 = 0;
0x000661ee str r2, [sp, 0xc] | var_ch = r2;
| if (r6 != r1) {
0x000661f0 bne.w 0x66536 | goto label_23;
| }
0x000661f4 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x000661f6 cmp r3, 0 |
| if (r3 == 0) {
0x000661f8 beq.w 0x664ba | goto label_24;
| }
| label_2:
0x000661fc ldr.w r7, [fp, 0xc] | r7 = *(arg_ch);
0x00066200 ldrb r3, [r7] | r3 = *(r7);
0x00066202 cmp r3, 0xb0 |
0x00066204 it eq |
| if (r3 != 0xb0) {
0x00066206 ldrbeq r3, [r7, 2] | r3 = *((r7 + 2));
| }
0x00066208 cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x0006620a beq.w 0x66600 | goto label_25;
| }
0x0006620e cmp r3, 0x8a |
0x00066210 itett eq |
| if (r3 != 0x8a) {
0x00066212 ldreq r3, [r7, 0x14] | r3 = *((r7 + 0x14));
| }
| if (r3 == 0x8a) {
0x00066214 movne r8, 1 | r8 = 1;
| }
| if (r3 != 0x8a) {
0x00066218 ldreq r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| }
| if (r3 == 0x8a) {
0x0006621a ldr.w r8, [r3] | r8 = *(r3);
| }
0x0006621e cmp r0, sb |
0x00066220 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00066222 str.w r3, [fp, 0x1c] | __asm ("str.w r3, [arg_1ch]");
| if (r0 <= sb) {
0x00066226 ble.w 0x66612 | goto label_26;
| }
| label_11:
0x0006622a add.w r3, sb, sb, lsl 2 | r3 = sb + (sb << 2);
0x0006622e ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x00066230 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00066232 add.w r2, sb, 1 | r2 = sb + 1;
0x00066236 lsls r3, r3, 2 | r3 <<= 2;
0x00066238 str r2, [r4, 0x6c] | *((r4 + 0x6c)) = r2;
0x0006623a mov.w lr, 0 | lr = 0;
0x0006623e adds r2, r1, r3 | r2 = r1 + r3;
0x00066240 mov.w ip, 0x76 |
0x00066244 strd r0, r8, [r2, 4] | __asm ("strd r0, r8, [r2, 4]");
0x00066248 strd lr, lr, [r2, 0xc] | __asm ("strd lr, lr, [r2, 0xc]");
0x0006624c str.w ip, [r1, r3] | __asm ("str.w ip, [r1, r3]");
| label_12:
0x00066250 ldr r0, [r5] | r0 = *(r5);
0x00066252 movs r2, 1 | r2 = 1;
0x00066254 mov r1, r8 | r1 = r8;
0x00066256 bl 0x221c0 | fcn_000221c0 (r0, r1, r2);
0x0006625a ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x0006625e ldr.w sl, [fp, 0x14] | sl = *(arg_14h);
0x00066262 str r0, [sp, 0x10] | var_10h = r0;
0x00066264 lsls r3, r3, 0x13 | r3 <<= 0x13;
| if (r3 >= r3) {
0x00066266 bpl 0x662d0 | goto label_27;
| }
0x00066268 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0006626c str r3, [sp, 0x14] | var_14h = r3;
0x0006626e cmp r6, 0 |
| if (r6 != 0) {
0x00066270 bne.w 0x6656a | goto label_28;
| }
0x00066274 ldr.w r3, [pc, 0x5b0] |
0x00066278 add r3, pc | r3 = 0xccaa4;
| label_4:
0x0006627a ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x0006627e movs r1, 1 | r1 = 1;
0x00066280 mov r0, r5 | r0 = r5;
0x00066282 str r2, [sp] | *(sp) = r2;
0x00066284 ldr.w r2, [pc, 0x5a4] |
0x00066288 add r2, pc | r2 = 0xccab8;
0x0006628a bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x0006628e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00066290 ldr r3, [r3] | r3 = *(r3);
0x00066292 cmp r3, r8 |
| if (r3 == r8) {
0x00066294 beq.w 0x66696 | goto label_29;
| }
| do {
| label_10:
0x00066298 ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r3 != 0) {
0x0006629a cbz r3, 0x662aa |
0x0006629c mov r2, r3 | r2 = r3;
0x0006629e mov r1, sb | r1 = sb;
0x000662a0 mvn r3, 7 | r3 = ~7;
0x000662a4 mov r0, r4 | r0 = r4;
0x000662a6 bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
| }
0x000662aa cmp r6, 0 |
| if (r6 != 0) {
0x000662ac bne.w 0x6653a | goto label_30;
| }
| label_3:
0x000662b0 ldr.w r2, [pc, 0x57c] |
0x000662b4 ldr.w r3, [pc, 0x56c] | r3 = *(0x66824);
0x000662b8 add r2, pc | r2 = 0xccaec;
0x000662ba ldr r3, [r2, r3] | r3 = imp.sinh;
0x000662bc ldr r2, [r3] | r2 = imp.sinh;
0x000662be ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000662c0 eors r2, r3 | r2 ^= r3;
0x000662c2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000662c6 bne.w 0x66818 | goto label_31;
| }
0x000662ca add sp, 0x64 |
0x000662cc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_27:
0x000662d0 cmp.w sl, 0 |
0x000662d4 beq 0x66298 |
| } while (sl == 0);
0x000662d6 mov r0, r7 | r0 = r7;
0x000662d8 bl 0xd620 | r0 = fcn_0000d620 (r0);
0x000662dc cmp r0, 0x40 |
0x000662de it ls |
| if (r0 > 0x40) {
0x000662e0 movls r0, 0x41 | r0 = 0x41;
| }
| if (r0 > 0x40) {
0x000662e2 bhi.w 0x6657c | goto label_32;
| }
0x000662e6 ldr r7, [sp, 0x10] | r7 = var_10h;
0x000662e8 strb.w r0, [sp, 0x3f] | var_3fh = r0;
| if (r7 != 0) {
0x000662ec cbz r7, 0x662fa |
| label_5:
0x000662ee ldr.w r1, [fp, 0xc] | r1 = *(arg_ch);
0x000662f2 mov r0, r5 | r0 = r5;
0x000662f4 bl 0x2bfc0 | fcn_0002bfc0 (r0, r1);
0x000662f8 str r0, [r7, 0x14] | *((r7 + 0x14)) = r0;
| }
| label_6:
0x000662fa ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x000662fc cmp r3, 0 |
| if (r3 == 0) {
0x000662fe beq.w 0x66590 | goto label_33;
| }
0x00066302 subs r1, r3, 1 | r1 = r3 - 1;
0x00066304 uxtb r1, r1 | r1 = (int8_t) r1;
0x00066306 add.w r2, r1, 0x26 | r2 = r1 + 0x26;
0x0006630a strb r1, [r5, 0x13] | *((r5 + 0x13)) = r1;
0x0006630c ldr.w r8, [r5, r2, lsl 2] | offset_0 = r2 << 2;
| r8 = *((r5 + offset_0));
0x00066310 cmp r1, 0 |
| if (r1 == 0) {
0x00066312 beq.w 0x6681c | goto label_34;
| }
0x00066316 subs r3, 2 | r3 -= 2;
0x00066318 uxtb r3, r3 | r3 = (int8_t) r3;
0x0006631a strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x0006631c adds r3, 0x26 | r3 += 0x26;
0x0006631e ldr.w r3, [r5, r3, lsl 2] | offset_1 = r3 << 2;
| r3 = *((r5 + offset_1));
0x00066322 str r3, [sp, 0x20] | var_20h = r3;
| label_7:
0x00066324 ldr.w ip, [sl] | ip = *(sl);
0x00066328 cmp.w ip, 0 |
| if (ip <= 0) {
0x0006632c ble.w 0x665ce | goto label_35;
| }
0x00066330 ldr.w r3, [pc, 0x500] | r3 = *(0x00066834);
0x00066334 mov r7, r8 | r7 = r8;
0x00066336 str.w sb, [sp, 0x24] | __asm ("str.w sb, [var_24h]");
0x0006633a add.w sl, sl, 0x18 | sl += 0x18;
0x0006633e str.w fp, [sp, 0x1c] | __asm ("str.w fp, [var_1ch]");
0x00066342 mov r8, r5 | r8 = r5;
0x00066344 add r3, pc | r3 += pc;
0x00066346 ldr.w sb, [sp, 0x20] | sb = var_20h;
0x0006634a str r3, [sp, 0x14] | var_14h = r3;
0x0006634c mov fp, ip |
0x0006634e ldr.w r3, [pc, 0x4e8] | r3 = *(0x00066838);
0x00066352 add r3, pc | r3 += pc;
0x00066354 str r3, [sp, 0x18] | var_18h = r3;
0x00066356 b 0x66418 |
| while (r6 == 0) {
| label_1:
0x00066358 movs r6, 0 | r6 = 0;
| label_0:
0x0006635a ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
| if (r3 != 0) {
0x0006635e cbz r3, 0x6636a |
0x00066360 mov r1, r5 | r1 = r5;
0x00066362 mov r2, r7 | r2 = r7;
0x00066364 mov r0, r8 | r0 = r8;
0x00066366 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
| }
0x0006636a ldrd r0, r3, [r4, 0x6c] | __asm ("ldrd r0, r3, [r4, 0x6c]");
0x0006636e cmp r0, r3 |
| if (r0 >= r3) {
0x00066370 bge.w 0x665a0 | goto label_36;
| }
0x00066374 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x00066376 add.w r3, r0, r0, lsl 2 | r3 = r0 + (r0 << 2);
0x0006637a adds r1, r0, 1 | r1 = r0 + 1;
0x0006637c movs r5, 0 | r5 = 0;
0x0006637e str r1, [r4, 0x6c] | *((r4 + 0x6c)) = r1;
0x00066380 movs r1, 0x61 | r1 = 0x61;
0x00066382 add.w ip, r2, r3, lsl 2 |
0x00066386 str.w r5, [ip, 0x10] | __asm ("str.w r5, [ip, 0x10]");
0x0006638a movs r5, 1 | r5 = 1;
0x0006638c str.w r7, [ip, 4] | __asm ("str.w r7, [ip, 4]");
0x00066390 strd r5, sb, [ip, 8] | __asm ("strd r5, sb, [ip, 8]");
0x00066394 str.w r1, [r2, r3, lsl 2] | __asm ("str.w r1, [r2, r3, lsl 2]");
| label_8:
0x00066398 ldr r3, [r4] | r3 = *(r4);
0x0006639a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x0006639e cbnz r3, 0x663c4 |
0x000663a0 cmp r0, 0 |
0x000663a2 ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x000663a4 it lt |
| if (r0 >= 0) {
0x000663a6 ldrlt r0, [r4, 0x6c] | r0 = *((r4 + 0x6c));
| }
0x000663a8 mov.w r3, 1 | r3 = 1;
0x000663ac add.w r2, sp, 0x3f | r2 += var_3fh;
0x000663b0 it lt |
| if (r0 >= 0) {
0x000663b2 addlt r0, r0, -1 | r0 += -1;
| }
0x000663b6 add.w r0, r0, r0, lsl 2 | r0 += (r0 << 2);
0x000663ba add.w r1, r1, r0, lsl 2 | r1 += (r0 << 2);
0x000663be mov r0, r4 | r0 = r4;
0x000663c0 bl 0x22c24 | fcn_00022c24 (r0, r1, r2, r3);
| }
0x000663c4 ldrd r0, r3, [r4, 0x6c] | __asm ("ldrd r0, r3, [r4, 0x6c]");
0x000663c8 cmp r0, r3 |
| if (r0 >= r3) {
0x000663ca bge.w 0x665b2 | goto label_37;
| }
0x000663ce ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x000663d0 add.w r3, r0, r0, lsl 2 | r3 = r0 + (r0 << 2);
0x000663d4 adds r1, r0, 1 | r1 = r0 + 1;
0x000663d6 movs r5, 0 | r5 = 0;
0x000663d8 str r1, [r4, 0x6c] | *((r4 + 0x6c)) = r1;
0x000663da movs r1, 0x8a | r1 = 0x8a;
0x000663dc add.w ip, r2, r3, lsl 2 |
0x000663e0 str.w r5, [ip, 0x10] | __asm ("str.w r5, [ip, 0x10]");
0x000663e4 ldr r5, [sp, 0xc] | r5 = var_ch;
0x000663e6 str.w r7, [ip, 0xc] | __asm ("str.w r7, [ip, 0xc]");
0x000663ea strd r5, sb, [ip, 4] | __asm ("strd r5, sb, [ip, 4]");
0x000663ee str.w r1, [r2, r3, lsl 2] | __asm ("str.w r1, [r2, r3, lsl 2]");
| label_9:
0x000663f2 ldr r3, [r4] | r3 = *(r4);
0x000663f4 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000663f8 cbnz r3, 0x6640c |
0x000663fa ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x000663fc add.w r0, r0, r0, lsl 2 | r0 += (r0 << 2);
0x00066400 movs r2, 1 | r2 = 1;
0x00066402 add.w r3, r3, r0, lsl 2 | r3 += (r0 << 2);
0x00066406 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x00066408 movs r2, 0xfd | r2 = 0xfd;
0x0006640a strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
0x0006640c subs.w fp, fp, 1 |
0x00066410 add.w sl, sl, 0x10 | sl += 0x10;
| if (fp == fp) {
0x00066414 beq.w 0x665c2 | goto label_38;
| }
0x00066418 ldr r5, [sl, -0x10] | r5 = *((sl - 0x10));
0x0006641c cmp r6, 0 |
0x0006641e beq 0x66358 |
| }
0x00066420 mov.w r3, 1 | r3 = 1;
0x00066424 strh.w r3, [sp, 0x54] | var_54h = r3;
0x00066428 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006642a str r3, [sp, 0x44] | var_44h = r3;
0x0006642c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006642e str r3, [sp, 0x48] | var_48h = r3;
0x00066430 movs r3, 0 | r3 = 0;
0x00066432 str r3, [sp, 0x58] | var_58h = r3;
0x00066434 cmp r5, 0 |
| if (r5 == 0) {
0x00066436 beq 0x6635a | goto label_0;
| }
0x00066438 mov r1, r5 | r1 = r5;
0x0006643a add r0, sp, 0x40 | r0 += var_40h;
0x0006643c bl 0x30f3c | fcn_00030f3c (r0, r1);
0x00066440 ldrh.w r3, [sp, 0x54] | r3 = var_54h;
0x00066444 cmp r3, 0 |
| if (r3 != 0) {
0x00066446 bne 0x6635a | goto label_0;
| }
0x00066448 ldr r0, [r4] | r0 = *(r4);
0x0006644a ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0006644e str r3, [sp, 0x28] | var_28h = r3;
| if (r3 == 0) {
0x00066450 cbnz r3, 0x664ae |
0x00066452 subs r6, 1 | r6--;
0x00066454 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x00066456 add.w r6, r6, r6, lsl 2 | r6 += (r6 << 2);
0x0006645a lsls r3, r6, 2 | r3 = r6 << 2;
0x0006645c strd r3, r2, [sp, 0x30] | __asm ("strd r3, r2, [var_34h]");
0x00066460 add r2, r3 | r2 += r3;
0x00066462 mov r1, r2 | r1 = r2;
0x00066464 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x00066466 str r1, [sp, 0x2c] | var_2ch = r1;
0x00066468 ldrsb.w r1, [r1, 1] | r1 = *((r1 + 1));
0x0006646c bl 0x1c888 | fcn_0001c888 (r0);
0x00066470 ldrd r3, r2, [sp, 0x28] | __asm ("ldrd r3, r2, [var_28h]");
0x00066474 mov.w r1, 0xb8 | r1 = 0xb8;
0x00066478 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x0006647a ldr r2, [sp, 0x34] | r2 = var_34h;
0x0006647c strh.w r1, [r2, r6, lsl 2] | offset_2 = r6 << 2;
| *((r2 + offset_2)) = r1;
0x00066480 ldr r0, [r4] | r0 = *(r4);
0x00066482 ldrb.w r2, [r0, 0x57] | r2 = *((r0 + 0x57));
0x00066486 str r2, [sp, 0x28] | var_28h = r2;
| if (r2 != 0) {
0x00066488 cbnz r2, 0x664ae | goto label_39;
| }
0x0006648a ldr r6, [sp, 0x30] | r6 = var_30h;
0x0006648c ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0006648e adds r6, 0x14 | r6 += 0x14;
0x00066490 str r3, [sp, 0x2c] | var_2ch = r3;
0x00066492 add r3, r6 | r3 += r6;
0x00066494 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00066496 ldrsb.w r1, [r3, 1] | r1 = *((r3 + 1));
0x0006649a str r3, [sp, 0x30] | var_30h = r3;
0x0006649c bl 0x1c888 | fcn_0001c888 (r0);
0x000664a0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000664a2 mov.w r1, 0xb8 | r1 = 0xb8;
0x000664a6 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000664a8 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x000664aa ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000664ac strh r1, [r3, r6] | *((r3 + r6)) = r1;
| }
| label_39:
0x000664ae ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000664b0 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000664b2 bic r3, r3, 0x2000000 | r3 = BIT_MASK (r3, 0x2000000);
0x000664b6 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x000664b8 b 0x66358 | goto label_1;
| label_24:
0x000664ba ands r2, r1, 0x2000000 | r2 = r1 & 0x2000000;
| if (r2 != r1) {
0x000664be bne.w 0x66626 | goto label_40;
| }
0x000664c2 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x000664c4 cmp r0, sb |
0x000664c6 orr r1, r1, 0x2000000 | r1 |= 0x2000000;
0x000664ca str.w r1, [fp, 4] | __asm ("str.w r1, [arg_4h]");
0x000664ce add.w r3, r3, 1 | r3++;
0x000664d2 str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x000664d4 str.w r3, [fp, 0x30] | __asm ("str.w r3, [arg_30h]");
| if (r0 <= sb) {
0x000664d8 ble.w 0x6673e | goto label_41;
| }
0x000664dc add.w ip, sb, sb, lsl 2 |
0x000664e0 ldr.w lr, [r4, 0x68] |
0x000664e4 add.w r1, sb, 1 | r1 = sb + 1;
0x000664e8 lsl.w ip, ip, 2 |
0x000664ec mov r6, r1 | r6 = r1;
0x000664ee mov.w r8, 0x4a | r8 = 0x4a;
0x000664f2 str r1, [r4, 0x6c] | *((r4 + 0x6c)) = r1;
0x000664f4 add.w r7, lr, ip | r7 = lr + ip;
0x000664f8 strd r3, r2, [r7, 8] | __asm ("strd r3, r2, [r7, 8]");
0x000664fc str r2, [r7, 0x10] | *((r7 + 0x10)) = r2;
0x000664fe str.w r8, [lr, ip] | __asm ("str.w r8, [lr, ip]");
0x00066502 str r2, [r7, 4] | *((r7 + 4)) = r2;
| label_14:
0x00066504 cmp r0, r6 |
0x00066506 str.w r1, [fp, 0x2c] | __asm ("str.w r1, [arg_2ch]");
| if (r0 <= r6) {
0x0006650a ble.w 0x667be | goto label_42;
| }
0x0006650e add.w r2, r6, r6, lsl 2 | r2 = r6 + (r6 << 2);
0x00066512 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00066514 add.w sb, r6, 1 | sb = r6 + 1;
0x00066518 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006651c lsls r2, r2, 2 | r2 <<= 2;
0x0006651e movs r7, 0xe | r7 = 0xe;
0x00066520 str.w sb, [r4, 0x6c] | __asm ("str.w sb, [r4, 0x6c]");
0x00066524 movs r1, 0 | r1 = 0;
0x00066526 str r7, [r3, r2] | *((r3 + r2)) = r7;
0x00066528 add r3, r2 | r3 += r2;
0x0006652a adds r2, r3, 4 | r2 = r3 + 4;
0x0006652c vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00066530 strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
0x00066534 b 0x661fc | goto label_2;
| label_23:
0x00066536 movs r6, 0 | r6 = 0;
0x00066538 b 0x661fc | goto label_2;
| label_30:
0x0006653a ldr r3, [r4] | r3 = *(r4);
0x0006653c ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0006653e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00066542 it lt |
| if (r6 >= 0) {
0x00066544 addlt r6, r2, -1 | r6 = r2 + -1;
| }
| if (r3 == 0) {
0x00066548 cbz r3, 0x66570 | goto label_43;
| }
0x0006654a ldr r3, [pc, 0x2f0] |
0x0006654c add r3, pc | r3 = 0xccd8e;
0x0006654e adds r3, 4 | r3 += 4;
| do {
0x00066550 movs r1, 1 | r1 = 1;
0x00066552 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00066554 mov r0, r4 | r0 = r4;
0x00066556 ldrd r3, r2, [fp, 0x2c] | __asm ("ldrd r3, r2, [arg_2ch]");
0x0006655a str r1, [sp] | *(sp) = r1;
0x0006655c movs r1, 0x43 | r1 = 0x43;
0x0006655e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00066562 movs r3, 0 | r3 = 0;
0x00066564 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x00066566 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x00066568 b 0x662b0 | goto label_3;
| label_28:
0x0006656a ldr r3, [pc, 0x2d4] |
0x0006656c add r3, pc | r3 = 0xccdb2;
0x0006656e b 0x6627a | goto label_4;
| label_43:
0x00066570 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00066572 add.w r6, r6, r6, lsl 2 | r6 += (r6 << 2);
0x00066576 add.w r3, r3, r6, lsl 2 | r3 += (r6 << 2);
0x0006657a b 0x66550 |
| } while (1);
| label_32:
0x0006657c ldr r7, [sp, 0x10] | r7 = var_10h;
0x0006657e cmp r0, 0x45 |
0x00066580 it eq |
| if (r0 != 0x45) {
0x00066582 moveq r0, 0x43 | r0 = 0x43;
| }
0x00066584 strb.w r0, [sp, 0x3f] | var_3fh = r0;
0x00066588 cmp r7, 0 |
| if (r7 != 0) {
0x0006658a bne.w 0x662ee | goto label_5;
| }
0x0006658e b 0x662fa | goto label_6;
| label_33:
0x00066590 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x00066592 add.w r8, r2, 1 | r8 = r2 + 1;
0x00066596 mov r3, r8 | r3 = r8;
| label_22:
0x00066598 adds r3, 1 | r3++;
0x0006659a str r3, [sp, 0x20] | var_20h = r3;
0x0006659c str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x0006659e b 0x66324 | goto label_7;
| label_36:
0x000665a0 movs r3, 1 | r3 = 1;
0x000665a2 mov r2, r7 | r2 = r7;
0x000665a4 movs r1, 0x61 | r1 = 0x61;
0x000665a6 mov r0, r4 | r0 = r4;
0x000665a8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000665ac bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000665b0 b 0x66398 | goto label_8;
| label_37:
0x000665b2 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000665b4 mov r3, sb | r3 = sb;
0x000665b6 movs r1, 0x8a | r1 = 0x8a;
0x000665b8 mov r0, r4 | r0 = r4;
0x000665ba str r7, [sp] | *(sp) = r7;
0x000665bc bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000665c0 b 0x663f2 | goto label_9;
| label_38:
0x000665c2 ldr.w sb, [sp, 0x24] | sb = var_24h;
0x000665c6 mov r5, r8 | r5 = r8;
0x000665c8 ldr.w fp, [sp, 0x1c] | fp = var_1ch;
0x000665cc mov r8, r7 | r8 = r7;
| label_35:
0x000665ce cmp.w r8, 0 |
| if (r8 == 0) {
0x000665d2 beq 0x665e6 | goto label_44;
| }
0x000665d4 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x000665d6 cmp r3, 7 |
| if (r3 > 7) {
0x000665d8 bhi.w 0x66298 | goto label_10;
| }
0x000665dc adds r1, r3, 1 | r1 = r3 + 1;
0x000665de adds r3, 0x26 | r3 += 0x26;
0x000665e0 strb r1, [r5, 0x13] | *((r5 + 0x13)) = r1;
0x000665e2 str.w r8, [r5, r3, lsl 2] | __asm ("str.w r8, [r5, r3, lsl 2]");
| label_44:
0x000665e6 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000665e8 cmp r1, 0 |
| if (r1 == 0) {
0x000665ea beq.w 0x66298 | goto label_10;
| }
0x000665ee ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x000665f0 cmp r3, 7 |
0x000665f2 itttt ls |
| if (r3 > 7) {
0x000665f4 addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x000665f6 addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x000665f8 strbls r2, [r5, 0x13] | *((r5 + 0x13)) = r2;
| }
| if (r3 > 7) {
0x000665fa strls r1, [r5, r3, lsl 2] | offset_3 = r3 << 2;
| *((r5 + offset_3)) = r1;
| }
0x000665fe b 0x66298 | goto label_10;
| label_25:
0x00066600 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00066602 cmp r0, sb |
0x00066604 ldr.w r8, [r3] | r8 = *(r3);
0x00066608 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006660a str.w r3, [fp, 0x1c] | __asm ("str.w r3, [arg_1ch]");
| if (r0 > sb) {
0x0006660e bgt.w 0x6622a | goto label_11;
| }
| label_26:
0x00066612 movs r3, 0 | r3 = 0;
0x00066614 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00066616 str r3, [sp] | *(sp) = r3;
0x00066618 movs r1, 0x76 | r1 = 0x76;
0x0006661a mov r3, r8 | r3 = r8;
0x0006661c mov r0, r4 | r0 = r4;
0x0006661e bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00066622 mov sb, r0 | sb = r0;
0x00066624 b 0x66250 | goto label_12;
| label_40:
0x00066626 cmp r0, sb |
| if (r0 <= sb) {
0x00066628 ble.w 0x66804 | goto label_45;
| }
0x0006662c add.w r0, sb, sb, lsl 2 | r0 = sb + (sb << 2);
0x00066630 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x00066632 add.w r6, sb, 1 | r6 = sb + 1;
0x00066636 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006663a lsls r0, r0, 2 | r0 <<= 2;
0x0006663c str r6, [r4, 0x6c] | *((r4 + 0x6c)) = r6;
0x0006663e movs r6, 0xe | r6 = 0xe;
0x00066640 str r6, [r2, r0] | *((r2 + r0)) = r6;
0x00066642 add r2, r0 | r2 += r0;
0x00066644 adds r0, r2, 4 | r0 = r2 + 4;
0x00066646 vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
0x0006664a strd r3, r3, [r2, 0xc] | __asm ("strd r3, r3, [r2, 0xc]");
| label_21:
0x0006664e lsls r2, r1, 0x13 | r2 = r1 << 0x13;
| if (r2 < r1) {
0x00066650 bmi.w 0x667d4 | goto label_46;
| }
| label_18:
0x00066654 movs r5, 0 | r5 = 0;
0x00066656 movs r1, 9 | r1 = 9;
0x00066658 str r5, [sp] | *(sp) = r5;
0x0006665a mov r0, r4 | r0 = r4;
0x0006665c ldrd r3, r2, [fp, 0x2c] | __asm ("ldrd r3, r2, [arg_2ch]");
0x00066660 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00066664 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x00066668 movs r1, 0x73 | r1 = 0x73;
0x0006666a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006666c mov r0, r4 | r0 = r4;
0x0006666e str r5, [sp] | *(sp) = r5;
0x00066670 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00066674 ldr r3, [r4] | r3 = *(r4);
0x00066676 cmp sb, r5 |
0x00066678 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0006667a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006667e it lt |
| if (sb >= r5) {
0x00066680 addlt sb, r2, -1 | sb = r2 + -1;
| }
0x00066684 cmp r3, 0 |
| if (r3 != 0) {
0x00066686 bne 0x66736 | goto label_47;
| }
0x00066688 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0006668a add.w r1, sb, sb, lsl 2 | r1 = sb + (sb << 2);
0x0006668e add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| label_13:
0x00066692 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00066694 b 0x662b0 | goto label_3;
| label_29:
0x00066696 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00066698 movs r2, 0 | r2 = 0;
0x0006669a mov r1, fp | r1 = fp;
0x0006669c ldr r0, [r5] | r0 = *(r5);
0x0006669e strd r2, r2, [sp, 0x48] | __asm ("strd r2, r2, [var_48h]");
0x000666a2 str r3, [sp, 0x44] | var_44h = r3;
0x000666a4 movs r3, 0xb | r3 = 0xb;
0x000666a6 strb.w r3, [sp, 0x40] | var_40h = r3;
0x000666aa str r2, [sp, 0x50] | var_50h = r2;
0x000666ac bl 0x22d20 | fcn_00022d20 (r0, r1);
0x000666b0 movs r2, 0 | r2 = 0;
0x000666b2 str r0, [sp, 0x54] | var_54h = r0;
0x000666b4 mov r1, sl | r1 = sl;
0x000666b6 str r0, [sp, 0xc] | var_ch = r0;
0x000666b8 str.w r2, [sl, 8] | __asm ("str.w r2, [sl, 8]");
0x000666bc ldr r0, [r5] | r0 = *(r5);
0x000666be bl 0x31d00 | r0 = fcn_00031d00 (r0, r1, r2);
0x000666c2 mov r1, r0 | r1 = r0;
0x000666c4 ldr r0, [r5] | r0 = *(r5);
0x000666c6 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x000666ca cmp r3, 0 |
| if (r3 == 0) {
0x000666cc beq.w 0x667e8 | goto label_48;
| }
0x000666d0 mov.w sl, 1 | sl = 1;
0x000666d4 cmp r1, 0 |
| if (r1 == 0) {
0x000666d6 beq 0x66778 | goto label_49;
| }
| label_19:
0x000666d8 movs r2, 1 | r2 = 1;
0x000666da bl 0x1a4b8 | fcn_0001a4b8 (r0, r1, r2);
0x000666de ldr r0, [r5] | r0 = *(r5);
| label_20:
0x000666e0 ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x000666e2 cbz r3, 0x666ea |
0x000666e4 mov r1, r3 | r1 = r3;
0x000666e6 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000666ea cmp.w sl, 0 |
| if (sl != 0) {
0x000666ee bne 0x66780 | goto label_50;
| }
0x000666f0 cmp.w r8, 0 |
| if (r8 <= 0) {
0x000666f4 ble.w 0x66298 | goto label_10;
| }
0x000666f8 ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x000666fc str r6, [sp, 0xc] | var_ch = r6;
0x000666fe str r4, [sp, 0x14] | var_14h = r4;
0x00066700 adds r2, 0x10 | r2 += 0x10;
0x00066702 mov r4, r3 | r4 = r3;
0x00066704 mov r6, r2 | r6 = r2;
| do {
0x00066706 ldrb r2, [r7] | r2 = *(r7);
0x00066708 cmp r2, 0xb0 |
0x0006670a ite eq |
| if (r2 != 0xb0) {
0x0006670c ldrbeq r1, [r7, 2] | r1 = *((r7 + 2));
| }
| if (r2 == 0xb0) {
0x0006670e movne r1, r2 | r1 = r2;
| }
0x00066710 cmp r1, 0xb1 |
| if (r1 == 0xb1) {
0x00066712 beq 0x667b8 | goto label_51;
| }
0x00066714 cmp r1, 0x8a |
| if (r1 == 0x8a) {
0x00066716 beq 0x66750 | goto label_52;
| }
| label_15:
0x00066718 mov r1, r7 | r1 = r7;
| label_16:
0x0006671a ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0006671c add.w sl, sl, 1 | sl++;
0x00066720 mov r0, r5 | r0 = r5;
0x00066722 adds r4, 0x10 | r4 += 0x10;
0x00066724 bl 0x2c0bc | fcn_0002c0bc (r0, r1, r2);
0x00066728 cmp sl, r8 |
0x0006672a str r0, [r6, 4]! | *((r6 += 4)) = r0;
0x0006672e bne 0x66706 |
| } while (sl != r8);
0x00066730 ldr r6, [sp, 0xc] | r6 = var_ch;
0x00066732 ldr r4, [sp, 0x14] | r4 = var_14h;
0x00066734 b 0x66298 | goto label_10;
| label_47:
0x00066736 ldr r3, [pc, 0x10c] |
0x00066738 add r3, pc | r3 = 0xccf82;
0x0006673a adds r3, 4 | r3 += 4;
0x0006673c b 0x66692 | goto label_13;
| label_41:
0x0006673e movs r1, 0x4a | r1 = 0x4a;
0x00066740 mov r0, r4 | r0 = r4;
0x00066742 str r2, [sp] | *(sp) = r2;
0x00066744 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00066748 adds r1, r0, 1 | r1 = r0 + 1;
0x0006674a ldrd r6, r0, [r4, 0x6c] | __asm ("ldrd r6, r0, [r4, 0x6c]");
0x0006674e b 0x66504 | goto label_14;
| label_52:
0x00066750 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x00066752 ldr r1, [r1, 0x1c] | r1 = *((r1 + 0x1c));
0x00066754 ldr r1, [r1] | r1 = *(r1);
| label_17:
0x00066756 cmp r1, 1 |
| if (r1 <= 1) {
0x00066758 ble 0x66718 | goto label_15;
| }
0x0006675a ldrb r0, [r7, 2] | r0 = *((r7 + 2));
0x0006675c ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0006675e cmp r2, 0x8a |
0x00066760 it ne |
| if (r2 != 0x8a) {
0x00066762 cmpne r0, 0x8a | __asm ("cmpne r0, 0x8a");
| }
0x00066764 iteet eq |
| if (r2 != 0x8a) {
0x00066766 ldreq r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
| }
| if (r2 == 0x8a) {
0x00066768 addne r1, r1, sl, lsl 4 | r1 += (sl << 4);
| }
| if (r2 != 0x8a) {
0x0006676c ldreq r1, [r1, 8] | r1 = *((r1 + 8));
| }
| if (r2 == 0x8a) {
0x0006676e add.w r2, r2, sl, lsl 4 | r2 += (sl << 4);
| }
0x00066772 it eq |
| if (r2 != 0x8a) {
0x00066774 ldreq r1, [r2, 8] | r1 = *((r2 + 8));
| }
0x00066776 b 0x6671a | goto label_16;
| label_49:
0x00066778 ldr r1, [sp, 0xc] | r1 = var_ch;
| if (r1 != 0) {
0x0006677a cbz r1, 0x66780 |
0x0006677c bl 0x16808 | fcn_00016808 (r0, r1);
| }
| label_50:
0x00066780 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00066782 cmp r2, 0 |
| if (r2 == 0) {
0x00066784 beq.w 0x662b0 | goto label_3;
| }
0x00066788 ldr r3, [r2] | r3 = *(r2);
0x0006678a subs r3, 1 | r3--;
0x0006678c str r3, [r2] | *(r2) = r3;
0x0006678e cmp r3, 0 |
| if (r3 != 0) {
0x00066790 bne.w 0x662b0 | goto label_3;
| }
0x00066794 ldr r2, [pc, 0xb0] |
0x00066796 ldr r3, [pc, 0x8c] | r3 = *(0x66826);
0x00066798 add r2, pc | r2 = 0xccfe4;
0x0006679a ldr r3, [r2, r3] | r3 = imp.sinh;
0x0006679c ldr r2, [r3] | r2 = imp.sinh;
0x0006679e ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000667a0 eors r2, r3 | r2 ^= r3;
0x000667a2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000667a6 bne 0x66818 | goto label_31;
| }
0x000667a8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000667aa ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000667ac mov r1, r3 | r1 = r3;
0x000667ae add sp, 0x64 |
0x000667b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000667b4 b.w 0x16808 | void (*0x16808)() ();
| label_51:
0x000667b8 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x000667ba ldr r1, [r1] | r1 = *(r1);
0x000667bc b 0x66756 | goto label_17;
| label_42:
0x000667be movs r3, 0 | r3 = 0;
0x000667c0 movs r1, 0xe | r1 = 0xe;
0x000667c2 mov r2, r3 | r2 = r3;
0x000667c4 mov r0, r4 | r0 = r4;
0x000667c6 str r3, [sp] | *(sp) = r3;
0x000667c8 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000667cc mov r6, r0 | r6 = r0;
0x000667ce ldrd sb, r0, [r4, 0x6c] | __asm ("ldrd sb, r0, [r4, 0x6c]");
0x000667d2 b 0x661fc | goto label_2;
| label_46:
0x000667d4 ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x000667d8 mov r0, r5 | r0 = r5;
0x000667da ldr r2, [pc, 0x70] |
0x000667dc movs r1, 0 | r1 = 0;
0x000667de ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000667e0 add r2, pc | r2 = 0xcd032;
0x000667e2 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x000667e6 b 0x66654 | goto label_18;
| label_48:
0x000667e8 add r2, sp, 0x40 | r2 += var_40h;
0x000667ea mov r0, r5 | r0 = r5;
0x000667ec str r1, [sp, 0xc] | var_ch = r1;
0x000667ee bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x000667f2 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000667f4 mov sl, r0 | sl = r0;
0x000667f6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000667f8 ldr r0, [r5] | r0 = *(r5);
0x000667fa str r3, [sp, 0xc] | var_ch = r3;
0x000667fc cmp r1, 0 |
| if (r1 != 0) {
0x000667fe bne.w 0x666d8 | goto label_19;
| }
0x00066802 b 0x666e0 | goto label_20;
| label_45:
0x00066804 movs r1, 0xe | r1 = 0xe;
0x00066806 mov r2, r3 | r2 = r3;
0x00066808 mov r0, r4 | r0 = r4;
0x0006680a str r3, [sp] | *(sp) = r3;
0x0006680c bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00066810 ldr.w r1, [fp, 4] | r1 = *(arg_4h);
0x00066814 mov sb, r0 | sb = r0;
0x00066816 b 0x6664e | goto label_21;
| label_31:
0x00066818 blx 0x883c | fcn_0000883c ();
| label_34:
0x0006681c ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0006681e b 0x66598 | goto label_22;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x66850 */
| #include <stdint.h>
|
; (fcn) fcn.00066850 () | void fcn_00066850 (int16_t arg_1h, int16_t arg_ch, int16_t arg_14h, int16_t arg_20h, arithmetic x, int16_t arg_8ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00066850 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00066854 sub sp, 0x64 |
0x00066856 str r2, [sp, 0x20] | var_20h = r2;
0x00066858 mov sl, r0 | sl = r0;
0x0006685a mov fp, r1 |
0x0006685c ldr.w r2, [pc, 0x75c] |
0x00066860 str r3, [sp, 0x10] | var_10h = r3;
0x00066862 ldr r0, [sp, 0x88] | r0 = *(x);
0x00066864 ldr.w r3, [pc, 0x758] | r3 = *(0x66fc0);
0x00066868 add r2, pc | r2 = 0xcd828;
0x0006686a str r0, [sp, 8] | var_8h = r0;
0x0006686c ldr r3, [r2, r3] |
0x0006686e ldr r2, [sp, 0x8c] | r2 = *(arg_8ch);
0x00066870 ldr r3, [r3] | r3 = *(0xcd828);
0x00066872 str r3, [sp, 0x5c] | var_5ch = r3;
0x00066874 mov.w r3, 0 | r3 = 0;
0x00066878 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0006687c str r2, [sp, 0x1c] | var_1ch = r2;
0x0006687e str r3, [sp, 0x14] | var_14h = r3;
0x00066880 cmp r3, 0 |
| if (r3 == 0) {
0x00066882 beq.w 0x66a04 | goto label_34;
| }
| label_3:
0x00066886 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0006688a str r3, [sp, 0xc] | var_ch = r3;
0x0006688c adds r3, 1 | r3++;
0x0006688e str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x00066892 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00066894 cmp r3, 0 |
| if (r3 == 0) {
0x00066896 beq.w 0x66a16 | goto label_35;
| }
0x0006689a ldr.w r7, [fp, 4] | r7 = *(arg_8ch);
0x0006689e lsls r0, r7, 0x13 | r0 = r7 << 0x13;
| if (r0 >= r7) {
0x000668a0 bpl 0x668da | goto label_36;
| }
0x000668a2 ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x000668a6 movs r5, 0 | r5 = 0;
0x000668a8 ldr r4, [r3, 0x1c] | r4 = *((r3 + 0x1c));
0x000668aa ldr r6, [r4] | r6 = *(r4);
0x000668ac cmp r6, 0 |
| if (r6 > 0) {
0x000668ae bgt 0x668bc | goto label_37;
| }
0x000668b0 b 0x668c6 | goto label_38;
| do {
0x000668b2 adds r5, 1 | r5++;
0x000668b4 adds r4, 0x10 | r4 += 0x10;
0x000668b6 cmp r5, r6 |
| if (r5 == r6) {
0x000668b8 beq.w 0x66aa6 | goto label_39;
| }
| label_37:
0x000668bc ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000668be bl 0xa934 | r0 = fcn_0000a934 (r0);
0x000668c2 cmp r0, 0 |
0x000668c4 beq 0x668b2 |
| } while (r0 == 0);
| label_38:
0x000668c6 cmp r6, r5 |
| if (r6 == r5) {
0x000668c8 beq.w 0x66aa6 | goto label_39;
| }
0x000668cc ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x000668d0 cmp r3, 0 |
| if (r3 != 0) {
0x000668d2 bne 0x6699e | goto label_4;
| }
0x000668d4 ldr.w r7, [fp, 4] | r7 = *(arg_8ch);
0x000668d8 b 0x66a26 | goto label_8;
| label_36:
0x000668da ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x000668de cmp r3, 0 |
| if (r3 == 0) {
0x000668e0 beq 0x6697e | goto label_5;
| }
0x000668e2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000668e4 cmp r3, 3 |
| if (r3 != 3) {
0x000668e6 bne 0x66984 | goto label_40;
| }
0x000668e8 lsls r3, r7, 0x13 | r3 = r7 << 0x13;
| if (r3 >= r7) {
0x000668ea bpl 0x669ac | goto label_41;
| }
| label_1:
0x000668ec ldr r3, [sp, 0x10] | r3 = var_10h;
0x000668ee ldr.w r4, [sl, 0x88] | r4 = *((sl + 0x88));
0x000668f2 cmp r3, 0 |
| if (r3 == 0) {
0x000668f4 beq.w 0x66abc | goto label_42;
| }
0x000668f8 ldr.w r5, [sl, 0x2c] | r5 = *((sl + 0x2c));
0x000668fc mov r1, fp | r1 = fp;
0x000668fe ldr r3, [sp, 0x10] | r3 = var_10h;
0x00066900 mov r0, sl | r0 = sl;
0x00066902 ldr r6, [sp, 0xc] | r6 = var_ch;
0x00066904 adds r5, 1 | r5++;
0x00066906 str.w r5, [sl, 0x2c] | __asm ("str.w r5, [sl, 0x2c]");
0x0006690a mov r2, r6 | r2 = r6;
0x0006690c str r5, [r3] | *(r3) = r5;
0x0006690e bl 0x661c4 | fcn_000661c4 (r0, r1, r2, r3, r4, r5, r6);
| if (r5 != 0) {
0x00066912 cbz r5, 0x6691e |
0x00066914 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00066916 mov r2, r5 | r2 = r5;
0x00066918 mov r1, r6 | r1 = r6;
0x0006691a bl 0x2ecf8 | fcn_0002ecf8 (r0, r1, r2);
| }
| label_0:
0x0006691e ldr r3, [sp, 8] | r3 = var_8h;
0x00066920 movs r5, 2 | r5 = 2;
0x00066922 str.w r4, [sl, 0x88] | __asm ("str.w r4, [sl, 0x88]");
| if (r3 == 0) {
0x00066926 cbz r3, 0x66956 | goto label_2;
| }
0x00066928 ldr.w r4, [fp, 0xc] | r4 = *(arg_ch);
0x0006692c movs r5, 2 | r5 = 2;
| label_10:
0x0006692e ldrb r3, [r4] | r3 = *(r4);
0x00066930 cmp r3, 0xb0 |
0x00066932 it eq |
| if (r3 != 0xb0) {
0x00066934 ldrbeq r3, [r4, 2] | r3 = *((r4 + 2));
| }
0x00066936 cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x00066938 beq.w 0x66ad2 | goto label_43;
| }
0x0006693c cmp r3, 0x8a |
0x0006693e it ne |
| if (r3 == 0x8a) {
0x00066940 movne r1, 1 | r1 = 1;
| }
| if (r3 == 0x8a) {
0x00066942 beq.w 0x66a86 | goto label_44;
| }
| label_6:
0x00066946 ldr r3, [sp, 8] | r3 = var_8h;
0x00066948 subs r2, r3, 4 | r2 = r3 - 4;
0x0006694a movs r3, 0 | r3 = 0;
| do {
0x0006694c str r3, [r2, 4]! | *((r2 += 4)) = r3;
0x00066950 adds r3, 1 | r3++;
0x00066952 cmp r1, r3 |
0x00066954 bgt 0x6694c |
| } while (r1 > r3);
| label_2:
0x00066956 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00066958 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006695a str r2, [r3] | *(r3) = r2;
0x0006695c ldr.w r2, [pc, 0x664] |
0x00066960 ldr.w r3, [pc, 0x65c] | r3 = *(0x66fc0);
0x00066964 add r2, pc | r2 = 0xcd92c;
0x00066966 ldr r3, [r2, r3] | r3 = *(0xcd92c);
0x00066968 ldr r2, [r3] | r2 = *(0xcd92c);
0x0006696a ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0006696c eors r2, r3 | r2 ^= r3;
0x0006696e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00066972 bne.w 0x66fb8 | goto label_45;
| }
0x00066976 mov r0, r5 | r0 = r5;
0x00066978 add sp, 0x64 |
0x0006697a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0006697c ldrh r0, [r6, 0x3e] | r0 = *((r6 + 0x3e));
| label_5:
0x0006697e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00066980 cmp r3, 3 |
| if (r3 == 3) {
0x00066982 beq 0x669ac | goto label_41;
| }
| do {
| label_40:
0x00066984 ldr.w r4, [sl, 0x88] | r4 = *((sl + 0x88));
| label_9:
0x00066988 movs r3, 0 | r3 = 0;
0x0006698a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006698c mov r1, fp | r1 = fp;
0x0006698e mov r0, sl | r0 = sl;
0x00066990 str.w r3, [sl, 0x88] | __asm ("str.w r3, [sl, 0x88]");
0x00066994 bl 0x661c4 | fcn_000661c4 (r0, r1, r2, r3, r4, r5, r6);
0x00066998 b 0x6691e | goto label_0;
| label_12:
0x0006699a ldrd sl, fp, [sp, 0x24] | __asm ("ldrd sl, fp, [var_24h]");
| label_4:
0x0006699e ldr r3, [sp, 0x20] | r3 = var_20h;
0x000669a0 cmp r3, 3 |
0x000669a2 bne 0x66984 |
| } while (r3 != 3);
0x000669a4 ldr.w r7, [fp, 4] | r7 = *(arg_8ch);
0x000669a8 lsls r3, r7, 0x13 | r3 = r7 << 0x13;
| if (r3 < r7) {
0x000669aa bmi 0x668ec | goto label_1;
| }
| label_41:
0x000669ac ldr.w r3, [pc, 0x618] | r3 = *(0x00066fc8);
0x000669b0 mov r1, fp | r1 = fp;
0x000669b2 ldr.w r4, [fp, 0xc] | r4 = *(arg_ch);
0x000669b6 add r0, sp, 0x40 | r0 += var_40h;
0x000669b8 add r3, pc | r3 += pc;
0x000669ba str r3, [sp, 0x44] | var_44h = r3;
0x000669bc ldr.w r3, [pc, 0x60c] | r3 = *(0x00066fcc);
0x000669c0 add r3, pc | r3 += pc;
0x000669c2 str r3, [sp, 0x48] | var_48h = r3;
0x000669c4 movs r3, 0 | r3 = 0;
0x000669c6 str r3, [sp, 0x58] | var_58h = r3;
0x000669c8 str.w r3, [fp, 0xc] | __asm ("str.w r3, [arg_ch]");
0x000669cc movs r3, 1 | r3 = 1;
0x000669ce strh.w r3, [sp, 0x54] | var_54h = r3;
0x000669d2 bl 0x30f3c | fcn_00030f3c (r0, r1);
0x000669d6 ldrh.w r3, [sp, 0x54] | r3 = var_54h;
0x000669da str.w r4, [fp, 0xc] | __asm ("str.w r4, [arg_ch]");
| if (r3 == 0) {
0x000669de cbz r3, 0x669ea | goto label_46;
| }
0x000669e0 ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x000669e4 ldr r3, [r3] | r3 = *(r3);
0x000669e6 cmp r3, 2 |
| if (r3 > 2) {
0x000669e8 bgt 0x668ec | goto label_1;
| }
| label_46:
0x000669ea ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x000669ee subs r3, 1 | r3--;
0x000669f0 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x000669f4 ldr r3, [sp, 8] | r3 = var_8h;
0x000669f6 cmp r3, 0 |
| if (r3 != 0) {
0x000669f8 bne 0x66ac8 | goto label_47;
| }
0x000669fa mov.w r3, -1 | r3 = -1;
0x000669fe movs r5, 5 | r5 = 5;
0x00066a00 str r3, [sp, 0xc] | var_ch = r3;
0x00066a02 b 0x66956 | goto label_2;
| label_34:
0x00066a04 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x00066a08 cmp r3, 0 |
| if (r3 == 0) {
0x00066a0a beq 0x66a94 | goto label_48;
| }
| label_7:
0x00066a0c mov r0, sl | r0 = sl;
0x00066a0e bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x00066a12 str r0, [sp, 0x14] | var_14h = r0;
0x00066a14 b 0x66886 | goto label_3;
| label_35:
0x00066a16 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x00066a1a cmp r3, 0 |
| if (r3 != 0) {
0x00066a1c bne 0x6699e | goto label_4;
| }
0x00066a1e ldr.w r7, [fp, 4] | r7 = *(arg_8ch);
0x00066a22 lsls r1, r7, 0x13 | r1 = r7 << 0x13;
| if (r1 >= r7) {
0x00066a24 bpl 0x6697e | goto label_5;
| }
| label_8:
0x00066a26 lsls r2, r7, 0x19 | r2 = r7 << 0x19;
| if (r2 < r7) {
0x00066a28 bmi 0x6699e | goto label_4;
| }
0x00066a2a ldr.w r3, [fp, 0x14] | r3 = *(arg_14h);
0x00066a2e ldr r2, [r3, 0x34] | r2 = *((r3 + 0x34));
0x00066a30 cmp r2, 0 |
| if (r2 != 0) {
0x00066a32 bne 0x6699e | goto label_4;
| }
0x00066a34 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00066a36 tst.w r2, 9 |
| if ((r2 & 9) != 0) {
0x00066a3a bne 0x6699e | goto label_4;
| }
0x00066a3c ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x00066a3e cmp r2, 0 |
| if (r2 != 0) {
0x00066a40 bne 0x6699e | goto label_4;
| }
0x00066a42 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x00066a44 cmp r2, 0 |
| if (r2 != 0) {
0x00066a46 bne 0x6699e | goto label_4;
| }
0x00066a48 ldr r0, [r3, 0x20] | r0 = *((r3 + 0x20));
0x00066a4a ldr r2, [r0] | r2 = *(r0);
0x00066a4c cmp r2, 1 |
| if (r2 != 1) {
0x00066a4e bne 0x6699e | goto label_4;
| }
0x00066a50 ldr r2, [r0, 0x1c] | r2 = *((r0 + 0x1c));
0x00066a52 cmp r2, 0 |
| if (r2 != 0) {
0x00066a54 bne 0x6699e | goto label_4;
| }
0x00066a56 ldr r7, [r0, 0x18] | r7 = *((r0 + 0x18));
0x00066a58 ldrb.w r1, [r7, 0x2b] | r1 = *((r7 + 0x2b));
0x00066a5c cmp r1, 1 |
| if (r1 == 1) {
0x00066a5e beq 0x6699e | goto label_4;
| }
0x00066a60 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x00066a62 ldr.w r8, [r1] | r8 = *(r1);
0x00066a66 str r1, [sp, 0x2c] | var_2ch = r1;
0x00066a68 cmp.w r8, 0 |
| if (r8 <= 0) {
0x00066a6c ble 0x66ae0 | goto label_49;
| }
0x00066a6e mov r3, r2 | r3 = r2;
0x00066a70 mov r2, r1 | r2 = r1;
0x00066a72 b 0x66a7c |
| while (r1 == 0xa7) {
0x00066a74 adds r3, 1 | r3++;
0x00066a76 adds r2, 0x10 | r2 += 0x10;
0x00066a78 cmp r3, r8 |
| if (r3 == r8) {
0x00066a7a beq 0x66ad8 | goto label_50;
| }
0x00066a7c ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x00066a7e ldrb r1, [r1] | r1 = *(r1);
0x00066a80 cmp r1, 0xa7 |
0x00066a82 beq 0x66a74 |
| }
0x00066a84 b 0x6699e | goto label_4;
| label_44:
0x00066a86 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00066a88 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00066a8a ldr r1, [r3] | r1 = *(r3);
| label_11:
0x00066a8c cmp r1, 0 |
| if (r1 > 0) {
0x00066a8e bgt.w 0x66946 | goto label_6;
| }
0x00066a92 b 0x66956 | goto label_2;
| label_48:
0x00066a94 ldr.w r3, [sl] | r3 = *(sl);
0x00066a98 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00066a9a lsls r4, r3, 0x1c | r4 = r3 << 0x1c;
0x00066a9c itt pl |
| if (r4 < r3) {
0x00066a9e movpl r3, 1 | r3 = 1;
| }
| if (r4 < r3) {
0x00066aa0 strbpl r3, [sl, 0x17] | *((sl + 0x17)) = r3;
| }
0x00066aa4 b 0x66a0c | goto label_7;
| label_39:
0x00066aa6 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
| if (r3 == 0) {
0x00066aaa cbnz r3, 0x66ab0 |
0x00066aac str r3, [sp, 0x10] | var_10h = r3;
0x00066aae b 0x66a26 | goto label_8;
| }
0x00066ab0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00066ab2 ldr.w r4, [sl, 0x88] | r4 = *((sl + 0x88));
0x00066ab6 cmp r3, 3 |
| if (r3 != 3) {
0x00066ab8 bne.w 0x66988 | goto label_9;
| }
| label_42:
0x00066abc ldr r2, [sp, 0xc] | r2 = var_ch;
0x00066abe mov r1, fp | r1 = fp;
0x00066ac0 mov r0, sl | r0 = sl;
0x00066ac2 bl 0x661c4 | fcn_000661c4 (r0, r1, r2, r3, r4, r5, r6);
0x00066ac6 b 0x6691e | goto label_0;
| label_47:
0x00066ac8 mov.w r3, -1 | r3 = -1;
0x00066acc movs r5, 5 | r5 = 5;
0x00066ace str r3, [sp, 0xc] | var_ch = r3;
0x00066ad0 b 0x6692e | goto label_10;
| label_43:
0x00066ad2 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00066ad4 ldr r1, [r3] | r1 = *(r3);
0x00066ad6 b 0x66a8c | goto label_11;
| label_50:
0x00066ad8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00066ada ldr r7, [r0, 0x18] | r7 = *((r0 + 0x18));
0x00066adc ldr.w r8, [r3] | r8 = *(r3);
| label_49:
0x00066ae0 ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
0x00066ae2 ldr.w r4, [sl] | r4 = *(sl);
0x00066ae6 cmp r1, 0 |
| if (r1 == 0) {
0x00066ae8 beq.w 0x66fa8 | goto label_51;
| }
0x00066aec ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00066aee ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00066af0 cmp r1, r2 |
| if (r1 == r2) {
0x00066af2 beq.w 0x66f5e | goto label_52;
| }
0x00066af6 movs r5, 0 | r5 = 0;
| do {
0x00066af8 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00066afa adds r3, 0x10 | r3 += 0x10;
0x00066afc adds r5, 1 | r5++;
0x00066afe cmp r1, r2 |
0x00066b00 bne 0x66af8 |
| } while (r1 != r2);
0x00066b02 movs r3, 1 | r3 = 1;
0x00066b04 lsls r3, r5 | r3 <<= r5;
| label_29:
0x00066b06 ldr.w r0, [sl, 0x74] | r0 = *((sl + 0x74));
0x00066b0a cmp r0, 0 |
0x00066b0c it eq |
| if (r0 != 0) {
0x00066b0e moveq r0, sl | r0 = sl;
| }
0x00066b10 ldr r2, [r0, 0x54] | r2 = *((r0 + 0x54));
0x00066b12 tst r2, r3 |
| if ((r2 & r3) != 0) {
0x00066b14 bne.w 0x66ec4 | goto label_53;
| }
0x00066b18 cmp r5, 1 |
0x00066b1a orr.w r2, r2, r3 | r2 |= r3;
0x00066b1e str r2, [r0, 0x54] | *((r0 + 0x54)) = r2;
| if (r5 == 1) {
0x00066b20 beq.w 0x66f64 | goto label_54;
| }
0x00066b24 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x00066b26 ldr r1, [r7] | r1 = *(r7);
| label_27:
0x00066b28 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00066b2a add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x00066b2e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00066b30 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 != 0) {
0x00066b32 cbz r3, 0x66b40 |
0x00066b34 str r1, [sp] | *(sp) = r1;
0x00066b36 movs r3, 0 | r3 = 0;
0x00066b38 mov r1, r5 | r1 = r5;
0x00066b3a mov r0, sl | r0 = sl;
0x00066b3c bl 0x2fbbc | fcn_0002fbbc (r0, r1, r2, r3, r4);
| }
| label_26:
0x00066b40 cmp.w r8, 1 |
| if (r8 == 1) {
0x00066b44 beq.w 0x66ed0 | goto label_55;
| }
0x00066b48 cmp.w r8, 0 |
| if (r8 <= 0) {
0x00066b4c ble 0x66c0a | goto label_56;
| }
| label_28:
0x00066b4e ldr.w sb, [fp, 0xc] | sb = *(arg_ch);
0x00066b52 movs r4, 0 | r4 = 0;
0x00066b54 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x00066b56 str r5, [sp, 0x18] | var_18h = r5;
0x00066b58 ldrb.w r2, [sb] | r2 = *(sb);
0x00066b5c str.w sl, [sp, 0x24] | __asm ("str.w sl, [var_24h]");
0x00066b60 mov sl, r7 | sl = r7;
0x00066b62 mov r7, sb | r7 = sb;
0x00066b64 str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_28h]");
0x00066b68 sub.w r3, r2, 0x8a | r3 = r2 - 0x8a;
0x00066b6c mov sb, r2 | sb = r2;
0x00066b6e clz r3, r3 | r3 &= r3;
0x00066b72 lsrs r3, r3, 5 | r3 >>= 5;
0x00066b74 mov r5, r3 | r5 = r3;
| do {
0x00066b76 cmp.w sb, 0xb0 |
0x00066b7a ite eq |
| if (sb != 0xb0) {
0x00066b7c ldrbeq r3, [r7, 2] | r3 = *((r7 + 2));
| }
| if (sb == 0xb0) {
0x00066b7e movne r3, sb | r3 = sb;
| }
0x00066b80 cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x00066b82 beq.w 0x66e8e | goto label_57;
| }
0x00066b86 cmp r3, 0x8a |
| if (r3 == 0x8a) {
0x00066b88 beq.w 0x66dca | goto label_58;
| }
| label_15:
0x00066b8c mov r0, r7 | r0 = r7;
| label_21:
0x00066b8e ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00066b90 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00066b94 cmp r3, 0 |
| if (r3 < 0) {
0x00066b96 blt.w 0x66dfc | goto label_59;
| }
| label_16:
0x00066b9a ldrsh.w ip, [sl, 0x22] | ip = *((sl + 0x22));
0x00066b9e cmp r3, ip |
| if (r3 >= ip) {
0x00066ba0 bge.w 0x66dfc | goto label_59;
| }
0x00066ba4 add.w ip, r3, r3, lsl 1 |
0x00066ba8 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00066bac add.w r3, r3, ip, lsl 2 | r3 += (ip << 2);
0x00066bb0 ldrb.w fp, [r3, 5] | fp = *((r3 + 5));
0x00066bb4 bl 0xd620 | r0 = fcn_0000d620 (r0);
0x00066bb8 cmp r0, 0x40 |
0x00066bba it hi |
| if (r0 > 0x40) {
0x00066bbc cmphi fp, 0x40 | __asm ("cmphi fp, 0x40");
| }
0x00066bc0 ite hi |
| if (r0 <= 0x40) {
0x00066bc2 movhi ip, 1 |
| }
| if (r0 <= 0x40) {
0x00066bc6 mov.w ip, 0 |
| }
| if (r0 < 0x40) {
0x00066bca bls.w 0x66e68 | goto label_60;
| }
0x00066bce cmp.w fp, 0x42 |
0x00066bd2 ite ls |
| if (fp > 0x42) {
0x00066bd4 movls r3, 0 | r3 = 0;
| }
| if (fp <= 0x42) {
0x00066bd6 movhi r3, 1 | r3 = 1;
| }
0x00066bd8 cmp r0, 0x42 |
0x00066bda ite ls |
| if (r0 > 0x42) {
0x00066bdc movls r2, r3 | r2 = r3;
| }
| if (r0 <= 0x42) {
0x00066bde orrhi r2, r3, 1 | r2 = r3 | 1;
| }
0x00066be2 cmp r2, 0 |
| if (r2 != 0) {
0x00066be4 bne.w 0x66e0c | goto label_61;
| }
0x00066be8 movs r3, 1 | r3 = 1;
| label_17:
0x00066bea adds r4, 1 | r4++;
0x00066bec adds r6, 0x10 | r6 += 0x10;
0x00066bee cmp r4, r8 |
0x00066bf0 ite ge |
| if (r4 < r8) {
0x00066bf2 movge r0, 0 | r0 = 0;
| }
| if (r4 >= r8) {
0x00066bf4 andlt r0, ip, 1 | r0 = ip & 1;
| }
0x00066bf8 cmp r0, 0 |
0x00066bfa bne 0x66b76 |
| } while (r0 != 0);
0x00066bfc mov r7, sl | r7 = sl;
0x00066bfe ldr r5, [sp, 0x18] | r5 = var_18h;
0x00066c00 ldrd sl, fp, [sp, 0x24] | __asm ("ldrd sl, fp, [var_24h]");
0x00066c04 cmp r3, 0 |
| if (r3 == 0) {
0x00066c06 beq.w 0x6699e | goto label_4;
| }
| label_56:
0x00066c0a ldr r7, [r7, 8] | r7 = *((r7 + 8));
0x00066c0c cmp r7, 0 |
| if (r7 == 0) {
0x00066c0e beq.w 0x6699e | goto label_4;
| }
0x00066c12 movs r3, 1 | r3 = 1;
0x00066c14 sub.w r2, r8, 0x20 | r2 = r8 - 0x20;
0x00066c18 rsb.w r1, r8, 0x20 | r1 = 0x20 - r8;
0x00066c1c lsl.w r2, r3, r2 | r2 = r3 << r2;
0x00066c20 lsr.w r1, r3, r1 | r1 = r3 >> r1;
0x00066c24 lsl.w r3, r3, r8 | r3 <<= r8;
0x00066c28 ldr r4, [pc, 0x3a4] |
0x00066c2a subs r3, 1 | r3--;
0x00066c2c orr.w r2, r2, r1 | r2 |= r1;
0x00066c30 str r3, [sp, 0x34] | var_34h = r3;
0x00066c32 adc r3, r2, -1 | __asm ("adc r3, r2, -1");
0x00066c36 str r3, [sp, 0x38] | var_38h = r3;
0x00066c38 add r4, pc | r4 = 0xcdc0c;
0x00066c3a ldr r3, [sp, 0x20] | r3 = var_20h;
0x00066c3c strd sl, fp, [sp, 0x24] | __asm ("strd sl, fp, [var_24h]");
0x00066c40 str r5, [sp, 0x3c] | var_3ch = r5;
0x00066c42 and r3, r3, 4 | r3 &= 4;
0x00066c46 mov fp, r3 |
0x00066c48 b 0x66c52 | goto label_62;
| label_13:
0x00066c4a ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
0x00066c4c cmp r7, 0 |
| if (r7 == 0) {
0x00066c4e beq.w 0x6699a | goto label_12;
| }
| label_62:
0x00066c52 ldrh r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x00066c54 cmp r2, r8 |
| if (r2 < r8) {
0x00066c56 blt 0x66c4a | goto label_13;
| }
0x00066c58 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x00066c5a cmp r2, 0x3e |
0x00066c5c it ls |
| if (r2 > 0x3e) {
0x00066c5e cmpls r3, 0 | __asm ("cmpls r3, 0");
| goto label_63;
| }
| if (r2 != 0x3e) {
| label_63:
0x00066c60 bne 0x66c4a | goto label_13;
| }
0x00066c62 cmp.w fp, 0 |
| if (fp == 0) {
0x00066c66 beq 0x66c7a | goto label_64;
| }
0x00066c68 ldrh r3, [r7, 0x32] | r3 = *((r7 + 0x32));
0x00066c6a cmp r3, r8 |
| if (r3 > r8) {
0x00066c6c bgt 0x66c4a | goto label_13;
| }
0x00066c6e cmp r2, r8 |
| if (r2 <= r8) {
0x00066c70 ble 0x66c7a | goto label_64;
| }
0x00066c72 ldrb.w r3, [r7, 0x36] | r3 = *((r7 + 0x36));
0x00066c76 cmp r3, 0 |
| if (r3 == 0) {
0x00066c78 beq 0x66c4a | goto label_13;
| }
| label_64:
0x00066c7a cmp.w r8, 0 |
| if (r8 <= 0) {
0x00066c7e ble 0x66d10 | goto label_65;
| }
0x00066c80 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x00066c84 movs r6, 0 | r6 = 0;
0x00066c86 mov sb, r6 | sb = r6;
0x00066c88 mov r5, r6 | r5 = r6;
0x00066c8a str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
| label_20:
0x00066c8e ldr r3, [sp, 0x28] | r3 = var_28h;
0x00066c90 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x00066c92 ldrb r3, [r1] | r3 = *(r1);
0x00066c94 cmp r3, 0xb0 |
0x00066c96 ite eq |
| if (r3 != 0xb0) {
0x00066c98 ldrbeq r2, [r1, 2] | r2 = *((r1 + 2));
| }
| if (r3 == 0xb0) {
0x00066c9a movne r2, r3 | r2 = r3;
| }
0x00066c9c cmp r2, 0xb1 |
| if (r2 == 0xb1) {
0x00066c9e beq.w 0x66ebe | goto label_66;
| }
0x00066ca2 cmp r2, 0x8a |
| if (r2 == 0x8a) {
0x00066ca4 beq.w 0x66e94 | goto label_67;
| }
| label_24:
0x00066ca8 ldr.w fp, [sl, 8] | fp = *((sl + 8));
0x00066cac ldr r0, [sp, 0x24] | r0 = var_24h;
0x00066cae mov r2, fp | r2 = fp;
0x00066cb0 bl 0x2c0bc | fcn_0002c0bc (r0, r1, r2);
0x00066cb4 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00066cb6 movs r1, 0 | r1 = 0;
0x00066cb8 ldrsh.w lr, [fp, 0x20] |
0x00066cbc str r5, [sp, 0x18] | var_18h = r5;
0x00066cbe sub.w ip, r3, 2 |
| label_14:
0x00066cc2 ldrsh r3, [ip, 2]! | r3 = *((ip += 2));
0x00066cc6 cmp r3, lr |
| if (r3 != lr) {
0x00066cc8 bne 0x66cfc | goto label_68;
| }
0x00066cca cmp r0, 0 |
| if (r0 == 0) {
0x00066ccc beq.w 0x66e16 | goto label_69;
| }
0x00066cd0 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x00066cd2 ldr.w r5, [r3, r1, lsl 2] | offset_0 = r1 << 2;
| r5 = *((r3 + offset_0));
0x00066cd6 ldr r3, [r0] | r3 = *(r0);
0x00066cd8 subs r5, 1 | r5--;
0x00066cda add.w fp, r3, -1 |
| do {
| label_18:
0x00066cde ldrb r3, [fp, 1]! | r3 = *(arg_1h);
0x00066ce2 ldrb r2, [r5, 1]! | r2 = *((r5 += 1));
0x00066ce6 cmp r3, r2 |
| if (r3 == r2) {
0x00066ce8 beq.w 0x66e10 | goto label_70;
| }
0x00066cec add r3, r4 | r3 += r4;
0x00066cee add r2, r4 | r2 += r4;
0x00066cf0 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x00066cf4 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x00066cf8 cmp r3, r2 |
0x00066cfa beq 0x66cde |
| } while (r3 == r2);
| label_68:
0x00066cfc adds r1, 1 | r1++;
0x00066cfe cmp r1, r8 |
| if (r1 != r8) {
0x00066d00 bne 0x66cc2 | goto label_14;
| }
| label_19:
0x00066d02 ldrd fp, r3, [sp, 0x30] | __asm ("ldrd fp, r3, [var_34h]");
0x00066d06 ldr r2, [sp, 0x38] | r2 = var_38h;
0x00066d08 cmp r2, sb |
0x00066d0a it eq |
| if (r2 != sb) {
0x00066d0c cmpeq r3, r6 | __asm ("cmpeq r3, r6");
| goto label_71;
| }
| if (r2 != sb) {
| label_71:
0x00066d0e bne 0x66c4a | goto label_13;
| }
| label_65:
0x00066d10 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00066d12 ldr r5, [sp, 0x3c] | r5 = var_3ch;
0x00066d14 ldrd sl, fp, [sp, 0x24] | __asm ("ldrd sl, fp, [var_24h]");
0x00066d18 ldrd r4, r3, [r3, 0x6c] | __asm ("ldrd r4, r3, [r3, 0x6c]");
0x00066d1c cmp r4, r3 |
| if (r4 >= r3) {
0x00066d1e bge.w 0x66f8c | goto label_72;
| }
0x00066d22 ldr r6, [sp, 0x14] | r6 = var_14h;
0x00066d24 add.w r2, r4, r4, lsl 2 | r2 = r4 + (r4 << 2);
0x00066d28 adds r0, r4, 1 | r0 = r4 + 1;
0x00066d2a vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00066d2e lsls r2, r2, 2 | r2 <<= 2;
0x00066d30 movs r1, 0 | r1 = 0;
0x00066d32 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x00066d34 str r0, [r6, 0x6c] | *((r6 + 0x6c)) = r0;
0x00066d36 movs r0, 0xe | r0 = 0xe;
0x00066d38 str r0, [r3, r2] | *((r3 + r2)) = r0;
0x00066d3a add r3, r2 | r3 += r2;
0x00066d3c adds r2, r3, 4 | r2 = r3 + 4;
0x00066d3e vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00066d42 strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_33:
0x00066d46 ldr r2, [pc, 0x28c] |
0x00066d48 movs r1, 0 | r1 = 0;
0x00066d4a ldr r3, [r7] | r3 = *(r7);
0x00066d4c mov r0, sl | r0 = sl;
0x00066d4e add r2, pc | r2 = 0xcdd28;
0x00066d50 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00066d54 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x00066d56 movs r1, 0x70 | r1 = 0x70;
0x00066d58 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00066d5a str r5, [sp] | *(sp) = r5;
0x00066d5c ldr r0, [sp, 0x14] | r0 = var_14h;
0x00066d5e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00066d62 mov r1, r7 | r1 = r7;
0x00066d64 mov r0, sl | r0 = sl;
0x00066d66 bl 0x2bf78 | fcn_0002bf78 (r0, r1);
0x00066d6a ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x00066d6c ldrb r5, [r3] | r5 = *(r3);
0x00066d6e ldr r3, [sp, 0x10] | r3 = var_10h;
0x00066d70 adds r5, 3 | r5 += 3;
| if (r3 != 0) {
0x00066d72 cbz r3, 0x66d8a |
0x00066d74 ldr.w r2, [sl, 0x2c] | r2 = *((sl + 0x2c));
0x00066d78 cmp.w r8, 1 |
0x00066d7c add.w r2, r2, 1 | r2++;
0x00066d80 str.w r2, [sl, 0x2c] | __asm ("str.w r2, [sl, 0x2c]");
0x00066d84 str r2, [r3] | *(r3) = r2;
| if (r8 == 1) {
0x00066d86 beq.w 0x66f9e | goto label_73;
| }
| }
0x00066d8a ldr r3, [sp, 0x14] | r3 = var_14h;
0x00066d8c cmp r4, 0 |
0x00066d8e ldr r1, [sp, 0x14] | r1 = var_14h;
0x00066d90 ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x00066d92 ldr r3, [r1] | r3 = *(r1);
0x00066d94 it lt |
| if (r4 >= 0) {
0x00066d96 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x00066d9a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00066d9e cmp r3, 0 |
| if (r3 != 0) {
0x00066da0 bne.w 0x66f6a | goto label_74;
| }
0x00066da4 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x00066da6 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x00066daa add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_30:
0x00066dae str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00066db0 ldr r3, [sp, 8] | r3 = var_8h;
0x00066db2 cmp r3, 0 |
0x00066db4 it ne |
| if (r3 == 0) {
0x00066db6 cmpne r5, 3 | __asm ("cmpne r5, 3");
| goto label_75;
| }
| if (r3 == 0) {
| label_75:
0x00066db8 beq.w 0x66956 | goto label_2;
| }
0x00066dbc cmp r5, 4 |
0x00066dbe it ne |
| if (r5 != 4) {
0x00066dc0 ldrne r4, [fp, 0xc] | r4 = *(arg_ch);
| goto label_76;
| }
| if (r5 == 4) {
| label_76:
0x00066dc4 beq.w 0x66956 | goto label_2;
| }
0x00066dc8 b 0x6692e | goto label_10;
| label_58:
0x00066dca ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00066dcc ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00066dce ldr r3, [r3] | r3 = *(r3);
| label_23:
0x00066dd0 cmp r3, 1 |
| if (r3 <= 1) {
0x00066dd2 ble.w 0x66b8c | goto label_15;
| }
0x00066dd6 ldrb r3, [r7, 2] | r3 = *((r7 + 2));
0x00066dd8 cmp r3, 0x8a |
0x00066dda ite ne |
| if (r3 == 0x8a) {
0x00066ddc movne r0, r5 | r0 = r5;
| }
| if (r3 != 0x8a) {
0x00066dde orreq r0, r5, 1 | r0 = r5 | 1;
| }
0x00066de2 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00066de4 cmp r0, 0 |
| if (r0 == 0) {
0x00066de6 beq 0x66e60 | goto label_77;
| }
0x00066de8 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00066dea add.w r3, r3, r4, lsl 4 | r3 += (r4 << 4);
0x00066dee ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00066df0 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00066df2 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00066df6 cmp r3, 0 |
| if (r3 >= 0) {
0x00066df8 bge.w 0x66b9a | goto label_16;
| }
| label_59:
0x00066dfc bl 0xd620 | r0 = fcn_0000d620 (r0);
0x00066e00 cmp r0, 0x40 |
0x00066e02 it ls |
| if (r0 > 0x40) {
0x00066e04 movls fp, 0x44 |
| }
| if (r0 < 0x40) {
0x00066e08 bls 0x66e7c | goto label_78;
| }
| label_22:
0x00066e0a movs r3, 1 | r3 = 1;
| label_61:
0x00066e0c mov ip, r3 |
0x00066e0e b 0x66bea | goto label_17;
| label_70:
0x00066e10 cmp r3, 0 |
| if (r3 != 0) {
0x00066e12 bne.w 0x66cde | goto label_18;
| }
| label_69:
0x00066e16 cmp r1, r8 |
0x00066e18 ldr r5, [sp, 0x18] | r5 = var_18h;
| if (r1 == r8) {
0x00066e1a beq.w 0x66d02 | goto label_19;
| }
0x00066e1e movs r0, 1 | r0 = 1;
0x00066e20 sub.w r2, r1, 0x20 | r2 = r1 - 0x20;
0x00066e24 rsb.w r3, r1, 0x20 | r3 = 0x20 - r1;
0x00066e28 lsl.w r2, r0, r2 | r2 = r0 << r2;
0x00066e2c lsr.w r3, r0, r3 | r3 = r0 >> r3;
0x00066e30 lsls r0, r1 | r0 <<= r1;
0x00066e32 orrs r2, r3 | r2 |= r3;
0x00066e34 and.w r3, r0, r6 | r3 = r0 & r6;
0x00066e38 and.w ip, r2, sb |
0x00066e3c orrs.w r3, r3, ip | r3 |= ip;
| if (r3 != r3) {
0x00066e40 bne.w 0x66d02 | goto label_19;
| }
0x00066e44 ldr r3, [sp, 8] | r3 = var_8h;
0x00066e46 orrs r6, r0 | r6 |= r0;
0x00066e48 orr.w sb, r2, sb | sb = r2 | sb;
| if (r3 != 0) {
0x00066e4c cbz r3, 0x66e52 |
0x00066e4e str.w r1, [r3, r5, lsl 2] | __asm ("str.w r1, [r3, r5, lsl 2]");
| }
0x00066e52 adds r5, 1 | r5++;
0x00066e54 add.w sl, sl, 0x10 | sl += 0x10;
0x00066e58 cmp r5, r8 |
| if (r5 != r8) {
0x00066e5a bne.w 0x66c8e | goto label_20;
| }
0x00066e5e b 0x66d02 | goto label_19;
| label_77:
0x00066e60 add.w r3, r3, r4, lsl 4 | r3 += (r4 << 4);
0x00066e64 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00066e66 b 0x66b8e | goto label_21;
| label_60:
0x00066e68 cmp r0, 0x40 |
0x00066e6a itet hi |
| if (r0 <= 0x40) {
0x00066e6c orrhi r0, r0, 0x40 | r0 |= 0x40;
| }
| if (r0 <= 0x40) {
0x00066e70 orrhi r0, fp, 0x40 | r0 = fp | 0x40;
| }
| if (r0 > 0x40) {
0x00066e74 uxtb r0, r0 | r0 = (int8_t) r0;
| }
0x00066e76 subs r0, 0x41 | r0 -= 0x41;
0x00066e78 cmp r0, 1 |
| if (r0 < 1) {
0x00066e7a bls 0x66e0a | goto label_22;
| }
| label_78:
0x00066e7c cmp.w fp, 0x42 |
0x00066e80 ite ls |
| if (fp > 0x42) {
0x00066e82 movls ip, 0 |
| }
| if (fp > 0x42) {
0x00066e86 mov.w ip, 1 |
| }
0x00066e8a mov r3, ip | r3 = ip;
0x00066e8c b 0x66bea | goto label_17;
| label_57:
0x00066e8e ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00066e90 ldr r3, [r3] | r3 = *(r3);
0x00066e92 b 0x66dd0 | goto label_23;
| label_67:
0x00066e94 ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x00066e96 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x00066e98 ldr r2, [r2] | r2 = *(r2);
| label_25:
0x00066e9a cmp r2, 1 |
| if (r2 <= 1) {
0x00066e9c ble.w 0x66ca8 | goto label_24;
| }
0x00066ea0 ldrb r0, [r1, 2] | r0 = *((r1 + 2));
0x00066ea2 ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x00066ea4 cmp r3, 0x8a |
0x00066ea6 it ne |
| if (r3 != 0x8a) {
0x00066ea8 cmpne r0, 0x8a | __asm ("cmpne r0, 0x8a");
| }
0x00066eaa iteet eq |
| if (r3 != 0x8a) {
0x00066eac ldreq r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
| }
| if (r3 == 0x8a) {
0x00066eae addne r2, r2, r5, lsl 4 | r2 += (r5 << 4);
| }
| if (r3 != 0x8a) {
0x00066eb2 ldreq r1, [r2, 8] | r1 = *((r2 + 8));
| }
| if (r3 == 0x8a) {
0x00066eb4 add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
| }
0x00066eb8 it eq |
| if (r3 != 0x8a) {
0x00066eba ldreq r1, [r3, 8] | r1 = *((r3 + 8));
| }
0x00066ebc b 0x66ca8 | goto label_24;
| label_66:
0x00066ebe ldr r2, [r1, 0x14] | r2 = *((r1 + 0x14));
0x00066ec0 ldr r2, [r2] | r2 = *(r2);
0x00066ec2 b 0x66e9a | goto label_25;
| label_53:
0x00066ec4 cmp r5, 1 |
0x00066ec6 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x00066ec8 ldr r1, [r7] | r1 = *(r7);
| if (r5 == 1) {
0x00066eca beq.w 0x66b40 | goto label_26;
| }
0x00066ece b 0x66b28 | goto label_27;
| label_55:
0x00066ed0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00066ed2 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00066ed4 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00066ed8 cmp r3, 0 |
| if (r3 >= 0) {
0x00066eda bge.w 0x66b4e | goto label_28;
| }
0x00066ede ldr r3, [sp, 0x14] | r3 = var_14h;
0x00066ee0 ldrd r4, r3, [r3, 0x6c] | __asm ("ldrd r4, r3, [r3, 0x6c]");
0x00066ee4 cmp r4, r3 |
| if (r4 >= r3) {
0x00066ee6 bge 0x66f7a | goto label_79;
| }
0x00066ee8 ldr r6, [sp, 0x14] | r6 = var_14h;
0x00066eea add.w r2, r4, r4, lsl 2 | r2 = r4 + (r4 << 2);
0x00066eee adds r0, r4, 1 | r0 = r4 + 1;
0x00066ef0 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00066ef4 lsls r2, r2, 2 | r2 <<= 2;
0x00066ef6 movs r1, 0 | r1 = 0;
0x00066ef8 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x00066efa str r0, [r6, 0x6c] | *((r6 + 0x6c)) = r0;
0x00066efc movs r0, 0xe | r0 = 0xe;
0x00066efe str r0, [r3, r2] | *((r3 + r2)) = r0;
0x00066f00 add r3, r2 | r3 += r2;
0x00066f02 adds r2, r3, 4 | r2 = r3 + 4;
0x00066f04 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00066f08 strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_32:
0x00066f0c movs r3, 0x70 | r3 = 0x70;
0x00066f0e ldr r1, [sp, 0xc] | r1 = var_ch;
0x00066f10 mov r2, r5 | r2 = r5;
0x00066f12 mov r0, sl | r0 = sl;
0x00066f14 str r3, [sp] | *(sp) = r3;
0x00066f16 mov r3, r7 | r3 = r7;
0x00066f18 bl 0x2fc88 | fcn_0002fc88 (r0, r1, r2, r3, r4);
0x00066f1c ldr r2, [pc, 0xb8] |
0x00066f1e movs r1, 0 | r1 = 0;
0x00066f20 ldr r3, [r7] | r3 = *(r7);
0x00066f22 mov r0, sl | r0 = sl;
0x00066f24 add r2, pc | r2 = 0xcdf00;
0x00066f26 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00066f2a ldr r3, [sp, 0x14] | r3 = var_14h;
0x00066f2c cmp r4, 0 |
0x00066f2e ldr r1, [sp, 0x14] | r1 = var_14h;
0x00066f30 ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x00066f32 ldr r3, [r1] | r3 = *(r1);
0x00066f34 it lt |
| if (r4 >= 0) {
0x00066f36 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x00066f3a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x00066f3e cbnz r3, 0x66f72 | goto label_80;
| }
0x00066f40 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x00066f42 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x00066f46 add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_31:
0x00066f4a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00066f4c movs r5, 1 | r5 = 1;
0x00066f4e ldr r3, [sp, 8] | r3 = var_8h;
0x00066f50 cmp r3, 0 |
| if (r3 == 0) {
0x00066f52 beq.w 0x66956 | goto label_2;
| }
0x00066f56 ldr.w r4, [fp, 0xc] | r4 = *(arg_ch);
0x00066f5a movs r5, 1 | r5 = 1;
0x00066f5c b 0x6692e | goto label_10;
| label_52:
0x00066f5e movs r3, 1 | r3 = 1;
0x00066f60 movs r5, 0 | r5 = 0;
0x00066f62 b 0x66b06 | goto label_29;
| label_54:
0x00066f64 bl 0x570d0 | fcn_000570d0 (r0);
0x00066f68 b 0x66b40 | goto label_26;
| label_74:
0x00066f6a ldr r3, [pc, 0x70] |
0x00066f6c add r3, pc | r3 = 0xcdf4e;
0x00066f6e adds r3, 4 | r3 += 4;
0x00066f70 b 0x66dae | goto label_30;
| label_80:
0x00066f72 ldr r3, [pc, 0x6c] |
0x00066f74 add r3, pc | r3 = 0xcdf5a;
0x00066f76 adds r3, 4 | r3 += 4;
0x00066f78 b 0x66f4a | goto label_31;
| label_79:
0x00066f7a movs r3, 0 | r3 = 0;
0x00066f7c ldr r0, [sp, 0x14] | r0 = var_14h;
0x00066f7e mov r2, r3 | r2 = r3;
0x00066f80 movs r1, 0xe | r1 = 0xe;
0x00066f82 str r3, [sp] | *(sp) = r3;
0x00066f84 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00066f88 mov r4, r0 | r4 = r0;
0x00066f8a b 0x66f0c | goto label_32;
| label_72:
0x00066f8c movs r3, 0 | r3 = 0;
0x00066f8e ldr r0, [sp, 0x14] | r0 = var_14h;
0x00066f90 mov r2, r3 | r2 = r3;
0x00066f92 movs r1, 0xe | r1 = 0xe;
0x00066f94 str r3, [sp] | *(sp) = r3;
0x00066f96 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00066f9a mov r4, r0 | r4 = r0;
0x00066f9c b 0x66d46 | goto label_33;
| label_73:
0x00066f9e ldr r1, [sp, 0xc] | r1 = var_ch;
0x00066fa0 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00066fa2 bl 0x2ecf8 | fcn_0002ecf8 (r0, r1, r2);
0x00066fa4 mcr2 p6, 5, lr, c9, c0, 7 | __asm ("mcr2 p6, 5, lr, c9, c0, 7");
| label_51:
0x00066fa8 mov.w r2, 0x8000 | r2 = 0x8000;
0x00066fac movs r3, 1 | r3 = 1;
0x00066fae movt r2, 0xffff | r2 = (r2 & 0xFFFF) | 0xffff0000;
0x00066fb2 lsls r3, r2 | r3 <<= r2;
0x00066fb4 mov r5, r2 | r5 = r2;
0x00066fb6 b 0x66b06 | goto label_29;
| label_45:
0x00066fb8 blx 0x883c | fcn_0000883c ();
0x00066fbc movs r4, 0x30 | r4 = 0x30;
0x00066fbe movs r6, r0 | r6 = r0;
0x00066fc0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00066fc2 movs r0, r0 |
0x00066fc4 movs r3, 0x34 | r3 = 0x34;
0x00066fc6 movs r6, r0 | r6 = r0;
0x00066fc8 ldrb r1, [r3, 9] | r1 = *((r3 + 9));
0x00066fca invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x66fe4 */
| #include <stdint.h>
|
; (fcn) fcn.00066fe4 () | void fcn_00066fe4 (int16_t arg_54h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_14h;
| int16_t var_44h_2;
| int16_t var_24h;
| int16_t var_34h;
| int16_t var_0h_5;
| int16_t var_18h_3;
| int16_t var_18h_2;
| int16_t var_20h_5;
| int16_t var_20h_4;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_2ch_2;
| int16_t var_34h_3;
| int16_t var_14h_2;
| int16_t var_38h_2;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_30h_2;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00066fe4 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00066fe8 sub sp, 0x5c |
0x00066fea str r2, [sp, 0x18] | var_18h_2 = r2;
0x00066fec mov r4, r0 | r4 = r0;
0x00066fee mov r7, r1 | r7 = r1;
0x00066ff0 ldr.w r2, [pc, 0x798] | r2 = *(0x0006778c);
0x00066ff4 str r3, [sp, 0x20] | var_20h_4 = r3;
0x00066ff6 ldr.w r3, [pc, 0x798] |
0x00066ffa add r2, pc | r2 += pc;
0x00066ffc ldrb.w r8, [r0, 0x17] | r8 = *((r0 + 0x17));
0x00067000 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00067002 ldr r3, [r3] | r3 = *(0x67792);
0x00067004 str r3, [sp, 0x54] | var_54h = r3;
0x00067006 mov.w r3, 0 | r3 = 0;
0x0006700a movs r3, 0 | r3 = 0;
0x0006700c str r3, [sp, 0x44] | var_44h = r3;
0x0006700e str r3, [sp, 0x4c] | var_4ch = r3;
0x00067010 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x00067012 str r3, [sp, 0x2c] | var_2ch_2 = r3;
0x00067014 bl 0x24dd4 | r0 = fcn_00024dd4 (r0, r1);
| if (r0 != 0) {
0x00067018 cbz r0, 0x6703a |
| label_2:
0x0006701a ldr.w r2, [pc, 0x778] | r2 = *(0x00067794);
0x0006701e ldr.w r3, [pc, 0x770] | r3 = *(0x67792);
0x00067022 add r2, pc | r2 += pc;
0x00067024 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00067026 ldr r2, [r3] | r2 = *(0x67792);
0x00067028 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0006702a eors r2, r3 | r2 ^= r3;
0x0006702c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00067030 bne.w 0x67788 | goto label_23;
| }
0x00067034 add sp, 0x5c |
0x00067036 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0006703a mov fp, r0 |
0x0006703c mov r1, r7 | r1 = r7;
0x0006703e ldr r0, [r4] | r0 = *(r4);
0x00067040 bl 0x22d20 | fcn_00022d20 (r0, r1);
0x00067044 ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x00067046 str r0, [sp, 0x24] | var_4h_2 = r0;
0x00067048 ldrb r3, [r2] | r3 = *(r2);
0x0006704a cmp r3, 0xb0 |
0x0006704c it eq |
| if (r3 != 0xb0) {
0x0006704e ldrbeq r3, [r2, 2] | r3 = *((r2 + 2));
| }
0x00067050 cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x00067052 beq.w 0x6744a | goto label_24;
| }
0x00067056 cmp r3, 0x8a |
0x00067058 ittt ne |
| if (r3 == 0x8a) {
0x0006705a movne r2, 6 | r2 = 6;
| }
| if (r3 == 0x8a) {
0x0006705c movne r6, 1 | r6 = 1;
| }
| if (r3 == 0x8a) {
0x0006705e movne r5, r2 | r5 = r2;
| }
| if (r3 == 0x8a) {
0x00067060 bne 0x67070 |
0x00067062 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x00067064 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00067066 ldr r6, [r3] | r6 = *(r3);
0x00067068 add.w r5, r6, r6, lsl 2 | r5 = r6 + (r6 << 2);
0x0006706c adds r5, 1 | r5++;
0x0006706e mov r2, r5 | r2 = r5;
| }
| label_9:
0x00067070 ldr r1, [r4] | r1 = *(r4);
0x00067072 cmp r1, 0 |
| if (r1 == 0) {
0x00067074 beq.w 0x673ba | goto label_25;
| }
0x00067078 mov r0, r1 | r0 = r1;
0x0006707a movs r3, 0 | r3 = 0;
0x0006707c bl 0x21784 | fcn_00021784 (r0, r1);
0x00067080 str r0, [sp, 0x1c] | var_20h_5 = r0;
| label_5:
0x00067082 ldr r3, [sp, 0x1c] | r3 = var_20h_5;
0x00067084 cmp r3, 0 |
| if (r3 == 0) {
0x00067086 beq.w 0x673ac | goto label_26;
| }
0x0006708a mov r0, r3 | r0 = r3;
0x0006708c mov r2, r5 | r2 = r5;
0x0006708e movs r1, 0 | r1 = 0;
0x00067090 blx 0x839c | fcn_0000839c ();
0x00067094 ldr r0, [r4] | r0 = *(r4);
0x00067096 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0006709a cmp r3, 0 |
| if (r3 != 0) {
0x0006709c bne.w 0x67376 | goto label_27;
| }
| label_3:
0x000670a0 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x000670a2 ldr r2, [sp, 0x20] | r2 = var_20h_4;
0x000670a4 ldr r5, [r4, 8] | r5 = *((r4 + 8));
0x000670a6 cmp r3, r2 |
0x000670a8 it eq |
| if (r3 != r2) {
0x000670aa moveq r3, 0 | r3 = 0;
| }
| if (r3 != r2) {
0x000670ac beq 0x670b0 |
0x000670ae add r3, sp, 0x44 | r3 += var_44h;
| }
0x000670b0 ldr r2, [sp, 0x1c] | r2 = var_20h_5;
0x000670b2 mov r1, r7 | r1 = r7;
0x000670b4 mov.w sb, 0 | sb = 0;
0x000670b8 mov r0, r4 | r0 = r4;
0x000670ba str r2, [sp] | *(sp) = r2;
0x000670bc add r2, sp, 0x4c | r2 += var_4ch;
0x000670be str r2, [sp, 4] | *((sp + 4)) = r2;
0x000670c0 movs r2, 3 | r2 = 3;
0x000670c2 bl 0x66850 | fcn_00066850 (r0, r1, r2, r3, r4, r5, r6);
0x000670c6 ldr r1, [sp, 0x2c] | r1 = var_2ch_2;
0x000670c8 add r2, sp, 0x48 | r2 += var_48h;
0x000670ca str r0, [sp, 0x30] | var_34h_3 = r0;
0x000670cc mov r0, r4 | r0 = r4;
0x000670ce strb.w sb, [r4, 0x17] | *((r4 + 0x17)) = sb;
0x000670d2 bl 0x6a6d8 | fcn_0006a6d8 (r0, r1, r2, r3, r4, r5);
0x000670d6 cmp r6, sb |
0x000670d8 strb.w r8, [r4, 0x17] | *((r4 + 0x17)) = r8;
0x000670dc str r0, [sp, 0x34] | var_14h_2 = r0;
| if (r6 <= sb) {
0x000670de ble.w 0x6771a | goto label_28;
| }
0x000670e2 ldr r2, [sp, 0x1c] | r2 = var_20h_5;
0x000670e4 mov r3, sb | r3 = sb;
0x000670e6 sub.w sb, r2, 4 | sb = r2 - 4;
0x000670ea mov r2, sb | r2 = sb;
0x000670ec b 0x670f6 |
| while (r1 == r3) {
0x000670ee adds r3, 1 | r3++;
0x000670f0 cmp r3, r6 |
| if (r3 == r6) {
0x000670f2 beq.w 0x673f4 | goto label_29;
| }
0x000670f6 ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x000670fa cmp r1, r3 |
0x000670fc beq 0x670ee |
| }
0x000670fe cmp r6, r3 |
| if (r6 == r3) {
0x00067100 beq.w 0x673f4 | goto label_29;
| }
0x00067104 mov r1, r6 | r1 = r6;
0x00067106 mov r0, r4 | r0 = r4;
0x00067108 bl 0xfd2c | fcn_0000fd2c (r0, r1);
0x0006710c ldr r3, [sp, 0x34] | r3 = var_14h_2;
0x0006710e mov.w sl, 0 | sl = 0;
0x00067112 str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_8h]");
0x00067116 str r6, [sp, 0x38] | var_38h_2 = r6;
0x00067118 mov r8, r3 | r8 = r3;
0x0006711a adds r3, r6, r3 | r3 = r6 + r3;
0x0006711c mov fp, r3 |
0x0006711e mov r6, r0 | r6 = r0;
0x00067120 str r0, [sp, 0x14] | var_18h_3 = r0;
| do {
0x00067122 ldr r3, [sb, 4]! | r3 = *((sb += 4));
0x00067126 mov r2, r8 | r2 = r8;
0x00067128 movs r1, 0x50 | r1 = 0x50;
0x0006712a add.w r8, r8, 1 | r8++;
0x0006712e mov r0, r5 | r0 = r5;
0x00067130 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00067134 add r3, r6 | r3 += r6;
0x00067136 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006713a cmp fp, r8 |
0x0006713c bne 0x67122 |
| } while (fp != r8);
0x0006713e ldr.w fp, [sp, 0x28] | fp = var_8h;
0x00067142 ldr r6, [sp, 0x38] | r6 = var_38h_2;
| label_8:
0x00067144 ldr r3, [sp, 0x30] | r3 = var_34h_3;
0x00067146 cmp r3, 5 |
| if (r3 == 5) {
0x00067148 beq.w 0x6754e | goto label_30;
| }
0x0006714c ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0006714e ldr r2, [sp, 0x20] | r2 = var_20h_4;
0x00067150 cmp r3, r2 |
0x00067152 iteet ne |
| if (r3 == r2) {
0x00067154 ldrne r3, [r4, 0x38] | r3 = *((r4 + 0x38));
| }
| if (r3 != r2) {
0x00067156 moveq sl, 0 | sl = 0;
| }
| if (r3 == r2) {
0x0006715a ldrne sb, [sp, 0x18] | sb = var_18h_2;
| }
| if (r3 != r2) {
0x0006715e add.w sb, r3, -1 | sb = r3 + -1;
| }
0x00067162 itt ne |
| if (r3 == r2) {
0x00067164 movne sl, sb | sl = sb;
| }
| if (r3 == r2) {
0x00067166 strne sb, [r4, 0x38] | *((r4 + 0x38)) = sb;
| }
0x0006716a cmp r6, 0 |
0x0006716c itt gt |
| if (r6 <= 0) {
0x0006716e movgt r8, 0 | r8 = 0;
| }
| if (r6 > 0) {
0x00067172 str r5, [sp, 0x28] | var_8h = r5;
| }
| if (r6 > 0) {
0x00067174 bgt 0x67180 | goto label_1;
| }
0x00067176 b 0x671c2 | goto label_21;
| label_0:
0x00067178 add.w r8, r8, 1 | r8++;
0x0006717c cmp r8, r6 |
| if (r8 == r6) {
0x0006717e beq 0x671c0 | void (*0x671c0)() ();
| }
| label_1:
0x00067180 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x00067182 ldrb r3, [r0] | r3 = *(r0);
0x00067184 cmp r3, 0xb0 |
0x00067186 ite eq |
| if (r3 != 0xb0) {
0x00067188 ldrbeq r2, [r0, 2] | r2 = *((r0 + 2));
| }
| if (r3 == 0xb0) {
0x0006718a movne r2, r3 | r2 = r3;
| }
0x0006718c cmp r2, 0xb1 |
| if (r2 == 0xb1) {
0x0006718e beq.w 0x673ee | goto label_31;
| }
0x00067192 cmp r2, 0x8a |
| if (r2 == 0x8a) {
0x00067194 beq.w 0x673c4 | goto label_32;
| }
| label_6:
0x00067198 ldr r5, [r4, 0x24] | r5 = *((r4 + 0x24));
0x0006719a cmp r5, 0 |
| if (r5 != 0) {
0x0006719c bne.w 0x67370 | goto label_33;
| }
0x000671a0 bl 0xa934 | r0 = fcn_0000a934 (r0);
0x000671a4 cmp r0, 0 |
| if (r0 == 0) {
0x000671a6 beq 0x67178 | goto label_0;
| }
0x000671a8 ldr r2, [sp, 0x14] | r2 = var_18h_3;
0x000671aa mov r3, sb | r3 = sb;
0x000671ac ldr r0, [sp, 0x28] | r0 = var_8h;
0x000671ae movs r1, 0x32 | r1 = 0x32;
0x000671b0 str r5, [sp] | *(sp) = r5;
0x000671b2 add r2, r8 | r2 += r8;
0x000671b4 add.w r8, r8, 1 | r8++;
0x000671b8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000671bc cmp r8, r6 |
| if (r8 != r6) {
0x000671be bne 0x67180 | goto label_1;
| }
| label_21:
0x000671c2 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000671c4 str r3, [sp, 0x28] | var_8h = r3;
0x000671c6 ldr r3, [sp, 0x30] | r3 = var_34h_3;
0x000671c8 cmp r3, 1 |
| if (r3 == 1) {
0x000671ca beq.w 0x674be | goto label_34;
| }
0x000671ce ldr r3, [sp, 0x24] | r3 = var_4h_2;
0x000671d0 movs r7, 0 | r7 = 0;
0x000671d2 ldr r2, [sp, 0x14] | r2 = var_18h_3;
0x000671d4 movs r1, 0x60 | r1 = 0x60;
0x000671d6 mov r0, r5 | r0 = r5;
0x000671d8 str r6, [sp, 8] | *((sp + 8)) = r6;
0x000671da str r3, [sp, 4] | *((sp + 4)) = r3;
0x000671dc mov r3, r6 | r3 = r6;
0x000671de str r7, [sp] | *(sp) = r7;
0x000671e0 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000671e4 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x000671e6 ldr r2, [sp, 0x20] | r2 = var_20h_4;
0x000671e8 cmp r3, r2 |
| if (r3 == r2) {
0x000671ea beq.w 0x67706 | goto label_35;
| }
0x000671ee ldr r2, [sp, 0x14] | r2 = var_18h_3;
0x000671f0 mov r3, r7 | r3 = r7;
0x000671f2 movs r1, 0x1c | r1 = 0x1c;
0x000671f4 mov r0, r5 | r0 = r5;
0x000671f6 str r6, [sp, 4] | *((sp + 4)) = r6;
0x000671f8 str r2, [sp] | *(sp) = r2;
0x000671fa ldr r2, [sp, 0x28] | r2 = var_8h;
0x000671fc bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x00067200 ldr r2, [sp, 0x44] | r2 = var_44h;
0x00067202 mov r7, r0 | r7 = r0;
0x00067204 subs r3, r2, 0 | r3 = r2 - 0;
0x00067206 it ne |
| if (r3 == r2) {
0x00067208 movne r3, 1 | r3 = 1;
| }
0x0006720a cmp r6, 1 |
0x0006720c it ne |
| if (r6 == 1) {
0x0006720e movne r3, 0 | r3 = 0;
| }
0x00067210 cmp r3, 0 |
| if (r3 != 0) {
0x00067212 bne.w 0x6750e | goto label_36;
| }
| label_10:
0x00067216 cmp.w sl, 0 |
| if (sl != 0) {
0x0006721a bne.w 0x67530 | goto label_37;
| }
0x0006721e ldrd r8, r3, [r5, 0x6c] | __asm ("ldrd r8, r3, [r5, 0x6c]");
0x00067222 cmp r8, r3 |
| if (r8 >= r3) {
0x00067224 bge.w 0x676ce | void (*0x676ce)() ();
| }
| label_13:
0x00067352 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00067354 ldr r2, [sp, 0x34] | r2 = var_14h_2;
0x00067356 cmp r3, r2 |
0x00067358 it ne |
| if (r3 != r2) {
0x0006735a cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 != r2) {
0x0006735c beq 0x67370 |
0x0006735e ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x00067360 cmp r3, 7 |
| if (r3 > 7) {
0x00067362 bhi 0x67370 | goto label_33;
| }
0x00067364 adds r2, r3, 1 | r2 = r3 + 1;
0x00067366 adds r3, 0x26 | r3 += 0x26;
0x00067368 strb r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
0x0006736a ldr r2, [sp, 0x14] | r2 = var_14h;
0x0006736c str.w r2, [r4, r3, lsl 2] | __asm ("str.w r2, [r4, r3, lsl 2]");
| }
| label_33:
0x00067370 ldr r3, [sp, 0x1c] | r3 = var_44h_2;
0x00067372 ldr r0, [r4] | r0 = *(r4);
| if (r3 != 0) {
0x00067374 cbz r3, 0x6737e |
| label_27:
0x00067376 ldr r1, [sp, 0x1c] | r1 = var_20h_5;
0x00067378 bl 0x16808 | fcn_00016808 (r0, r1);
0x0006737c ldr r0, [r4] | r0 = *(r4);
| }
| label_4:
0x0006737e ldr r3, [sp, 0x24] | r3 = var_4h_2;
0x00067380 cmp r3, 0 |
| if (r3 == 0) {
0x00067382 beq.w 0x6701a | goto label_2;
| }
0x00067386 ldr.w r2, [pc, 0x410] | r2 = *(0x00067798);
0x0006738a ldr.w r3, [pc, 0x404] | r3 = *(0x67792);
0x0006738e add r2, pc | r2 += pc;
0x00067390 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00067392 ldr r2, [r3] | r2 = *(0x67792);
0x00067394 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00067396 eors r2, r3 | r2 ^= r3;
0x00067398 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006739c bne.w 0x67788 | goto label_23;
| }
0x000673a0 ldr r1, [sp, 0x24] | r1 = var_4h_2;
0x000673a2 add sp, 0x5c |
0x000673a4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000673a8 b.w 0x16808 | void (*0x16808)() ();
| label_26:
0x000673ac ldr r0, [r4] | r0 = *(r4);
0x000673ae ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x000673b2 cmp r3, 0 |
| if (r3 == 0) {
0x000673b4 beq.w 0x670a0 | goto label_3;
| }
0x000673b8 b 0x6737e | goto label_4;
| label_25:
0x000673ba mov r0, r2 | r0 = r2;
0x000673bc bl 0x13558 | fcn_00013558 (r0);
0x000673c0 str r0, [sp, 0x1c] | var_20h_5 = r0;
0x000673c2 b 0x67082 | goto label_5;
| label_32:
0x000673c4 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x000673c6 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x000673c8 ldr r2, [r2] | r2 = *(r2);
| label_7:
0x000673ca cmp r2, 1 |
| if (r2 <= 1) {
0x000673cc ble.w 0x67198 | goto label_6;
| }
0x000673d0 ldrb r1, [r0, 2] | r1 = *((r0 + 2));
0x000673d2 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x000673d4 cmp r3, 0x8a |
0x000673d6 it ne |
| if (r3 != 0x8a) {
0x000673d8 cmpne r1, 0x8a | __asm ("cmpne r1, 0x8a");
| }
0x000673da iteet eq |
| if (r3 != 0x8a) {
0x000673dc ldreq r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
| }
| if (r3 == 0x8a) {
0x000673de addne r2, r2, r8, lsl 4 | r2 += (r8 << 4);
| }
| if (r3 != 0x8a) {
0x000673e2 ldreq r0, [r2, 8] | r0 = *((r2 + 8));
| }
| if (r3 == 0x8a) {
0x000673e4 add.w r3, r3, r8, lsl 4 | r3 += (r8 << 4);
| }
0x000673e8 it eq |
| if (r3 != 0x8a) {
0x000673ea ldreq r0, [r3, 8] | r0 = *((r3 + 8));
| }
0x000673ec b 0x67198 | goto label_6;
| label_31:
0x000673ee ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x000673f0 ldr r2, [r2] | r2 = *(r2);
0x000673f2 b 0x673ca | goto label_7;
| label_29:
0x000673f4 ldr r3, [sp, 0x34] | r3 = var_14h_2;
0x000673f6 str r3, [sp, 0x14] | var_18h_3 = r3;
0x000673f8 b 0x67144 | goto label_8;
| label_24:
0x0006744a ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0006744c ldr r6, [r3] | r6 = *(r3);
0x0006744e add.w r5, r6, r6, lsl 2 | r5 = r6 + (r6 << 2);
0x00067452 adds r5, 1 | r5++;
0x00067454 mov r2, r5 | r2 = r5;
0x00067456 b 0x67070 | goto label_9;
| label_14:
0x000674b8 ldr r3, [sp, 0x34] | r3 = var_14h_2;
0x000674ba mov sl, r6 | sl = r6;
0x000674bc str r3, [sp, 0x14] | var_18h_3 = r3;
| label_34:
0x000674be ldr r3, [sp, 0x14] | r3 = var_18h_3;
0x000674c0 movs r1, 0x1d | r1 = 0x1d;
0x000674c2 ldr r2, [sp, 0x28] | r2 = var_8h;
0x000674c4 mov r0, r5 | r0 = r5;
0x000674c6 str r3, [sp] | *(sp) = r3;
0x000674c8 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x000674ca bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000674ce ldrd r7, r3, [r5, 0x6c] | __asm ("ldrd r7, r3, [r5, 0x6c]");
0x000674d2 cmp r7, r3 |
| if (r7 >= r3) {
0x000674d4 bge.w 0x6773e | goto label_38;
| }
0x000674d8 add.w r2, r7, r7, lsl 2 | r2 = r7 + (r7 << 2);
0x000674dc ldr r3, [r5, 0x68] | r3 = *((r5 + 0x68));
0x000674de adds r0, r7, 1 | r0 = r7 + 1;
0x000674e0 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000674e4 lsls r2, r2, 2 | r2 <<= 2;
0x000674e6 str r0, [r5, 0x6c] | *((r5 + 0x6c)) = r0;
0x000674e8 movs r0, 8 | r0 = 8;
0x000674ea str r0, [r3, r2] | *((r3 + r2)) = r0;
0x000674ec add r3, r2 | r3 += r2;
0x000674ee adds r2, r3, 4 | r2 = r3 + 4;
0x000674f0 movs r1, 0 | r1 = 0;
0x000674f2 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000674f6 strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_17:
0x000674fa ldr r2, [sp, 0x44] | r2 = var_44h;
0x000674fc sub.w r3, r6, 1 | r3 = r6 - 1;
0x00067500 clz r3, r3 | r3 &= r3;
0x00067504 lsrs r3, r3, 5 | r3 >>= 5;
0x00067506 cmp r2, 0 |
0x00067508 it eq |
| if (r2 != 0) {
0x0006750a moveq r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x0006750c cbz r3, 0x6751c |
| label_36:
0x0006750e movs r3, 0 | r3 = 0;
0x00067510 movs r1, 0x33 | r1 = 0x33;
0x00067512 str r3, [sp] | *(sp) = r3;
0x00067514 mov r0, r5 | r0 = r5;
0x00067516 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x00067518 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x0006751c ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0006751e ldr r2, [sp, 0x20] | r2 = var_20h_4;
0x00067520 cmp r3, r2 |
| if (r3 != r2) {
0x00067522 bne.w 0x67216 | goto label_10;
| }
0x00067526 mov r1, r3 | r1 = r3;
0x00067528 mov r0, r5 | r0 = r5;
0x0006752a bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x0006752e b 0x67216 | goto label_10;
| label_37:
0x00067530 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00067532 mvn.w r2, sl | r2 = ~sl;
0x00067536 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0006753a cmn r1, r3 |
| if (r1 < r3) {
0x0006753c bmi.w 0x67736 | void (*0x67736)() ();
| }
| label_19:
0x0006754a ldr r3, [sp, 0x34] | r3 = var_14h_2;
0x0006754c str r3, [sp, 0x14] | var_18h_3 = r3;
| label_30:
0x0006754e ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00067550 mov r0, r4 | r0 = r4;
0x00067552 ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x00067554 ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
0x00067556 str r3, [sp, 0x3c] | var_3ch = r3;
0x00067558 subs r3, 1 | r3--;
0x0006755a str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x0006755c str r3, [sp, 0x30] | var_34h_3 = r3;
0x0006755e bl 0x2bfc0 | fcn_0002bfc0 (r0, r1);
0x00067562 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x00067564 mov sl, r0 | sl = r0;
0x00067566 ldr r2, [sp, 0x20] | r2 = var_20h_4;
0x00067568 cmp r3, r2 |
| if (r3 == r2) {
0x0006756a beq.w 0x67728 | goto label_39;
| }
0x0006756e ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x00067570 cmp r3, 0 |
| if (r3 == 0) {
0x00067572 beq.w 0x6777c | goto label_40;
| }
0x00067576 subs r3, 1 | r3--;
0x00067578 uxtb r3, r3 | r3 = (int8_t) r3;
0x0006757a strb r3, [r4, 0x13] | *((r4 + 0x13)) = r3;
0x0006757c adds r3, 0x26 | r3 += 0x26;
0x0006757e ldr.w r8, [r4, r3, lsl 2] | offset_0 = r3 << 2;
| r8 = *((r4 + offset_0));
| label_22:
0x00067582 ldr r3, [sp, 0x14] | r3 = var_18h_3;
0x00067584 movs r1, 0x66 | r1 = 0x66;
0x00067586 mov r0, r5 | r0 = r5;
0x00067588 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0006758c mov r2, r3 | r2 = r3;
0x0006758e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00067592 ldr r3, [r7] | r3 = *(r7);
0x00067594 cmp r3, 0 |
| if (r3 <= 0) {
0x00067596 ble 0x6767e | goto label_41;
| }
| label_15:
0x00067598 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0006759a mov r6, r7 | r6 = r7;
0x0006759c ldr r2, [sp, 0x20] | r2 = var_20h_4;
0x0006759e subs.w sb, r3, r2 | sb = r3 - r2;
0x000675a2 add r3, sp, 0x50 | r3 += var_30h_2;
0x000675a4 strd r3, sl, [sp, 0x28] | __asm ("strd r3, sl, [var_2ch_2]");
0x000675a8 it ne |
| if (sb == r3) {
0x000675aa movne sb, 1 | sb = 1;
| }
0x000675ae ldr.w sl, [sp, 0x14] | sl = var_18h_3;
0x000675b2 b 0x6761c |
| while (r8 == 0) {
| label_11:
0x000675b4 ldr r2, [sp, 0x50] | r2 = var_30h_2;
| if (r2 != 0) {
0x000675b6 cbz r2, 0x675c8 |
0x000675b8 ldrb r1, [r4, 0x13] | r1 = *((r4 + 0x13));
0x000675ba cmp r1, 7 |
0x000675bc itttt ls |
| if (r1 > 7) {
0x000675be addls r0, r1, 1 | r0 = r1 + 1;
| }
| if (r1 > 7) {
0x000675c0 addls r1, 0x26 | r1 += 0x26;
| }
| if (r1 > 7) {
0x000675c2 strbls r0, [r4, 0x13] | *((r4 + 0x13)) = r0;
| }
| if (r1 <= 7) {
0x000675c4 strls r2, [r4, r1, lsl 2] | offset_1 = r1 << 2;
| *((r4 + offset_1)) = r2;
| goto label_42;
| }
| }
| label_42:
0x000675c8 ldr r2, [r7] | r2 = *(r7);
0x000675ca subs r2, 1 | r2--;
0x000675cc cmp r2, fp |
0x000675ce ite le |
| if (r2 > fp) {
0x000675d0 movle r1, sb | r1 = sb;
| }
| if (r2 <= fp) {
0x000675d2 orrgt r1, sb, 1 | r1 = sb | 1;
| }
0x000675d6 mvn r2, 1 | r2 = ~1;
0x000675da str r2, [sp, 8] | *((sp + 8)) = r2;
0x000675dc ldr r2, [sp, 0x2c] | r2 = var_2ch_2;
0x000675de strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x000675e2 cmp r1, 0 |
| if (r1 == 0) {
0x000675e4 beq 0x6764e | goto label_43;
| }
0x000675e6 cmp r3, sl |
0x000675e8 ite ne |
| if (r3 == sl) {
0x000675ea movne r1, 0x35 | r1 = 0x35;
| }
| if (r3 != sl) {
0x000675ec moveq r1, 0x33 | r1 = 0x33;
| }
0x000675ee mov r2, sl | r2 = sl;
0x000675f0 ldr r3, [sp, 0x30] | r3 = var_34h_3;
0x000675f2 mov r0, r5 | r0 = r5;
0x000675f4 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000675f8 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000675fa ldr r2, [sp, 0x24] | r2 = var_4h_2;
0x000675fc cmp r3, 0 |
0x000675fe ldrb r1, [r2] | r1 = *(r2);
| if (r3 > 0) {
0x00067600 ble 0x67610 |
0x00067602 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x00067604 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00067608 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0006760c strh r1, [r2, -0x12] | *((r2 - 0x12)) = r1;
| }
| label_12:
0x00067610 ldr r3, [r7] | r3 = *(r7);
0x00067612 add.w fp, fp, 1 |
0x00067616 adds r6, 0x10 | r6 += 0x10;
0x00067618 cmp r3, fp |
| if (r3 <= fp) {
0x0006761a ble 0x6767e | goto label_41;
| }
0x0006761c ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0006761e mov r0, r4 | r0 = r4;
0x00067620 ldr r2, [sp, 0x28] | r2 = var_8h;
0x00067622 bl 0x6a5dc | r0 = fcn_0006a5dc (r0, r1, r2);
0x00067626 mov r3, r0 | r3 = r0;
0x00067628 cmp.w r8, 0 |
0x0006762c beq 0x675b4 |
| }
0x0006762e str r0, [sp, 0x38] | var_38h_2 = r0;
0x00067630 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x00067632 bl 0xa934 | fcn_0000a934 (r0);
0x00067636 ldr r3, [sp, 0x38] | r3 = var_38h_2;
0x00067638 cmp r0, 0 |
| if (r0 == 0) {
0x0006763a beq 0x675b4 | goto label_11;
| }
0x0006763c mov r2, r8 | r2 = r8;
0x0006763e movs r1, 0x66 | r1 = 0x66;
0x00067640 mov r0, r5 | r0 = r5;
0x00067642 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00067646 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006764a ldr r3, [sp, 0x38] | r3 = var_38h_2;
0x0006764c b 0x675b4 | goto label_11;
| label_43:
0x0006764e cmp r3, sl |
0x00067650 ite ne |
| if (r3 == sl) {
0x00067652 movne r1, 0x34 | r1 = 0x34;
| }
| if (r3 != sl) {
0x00067654 moveq r1, 0x32 | r1 = 0x32;
| }
0x00067656 mov r2, sl | r2 = sl;
0x00067658 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0006765a mov r0, r5 | r0 = r5;
0x0006765c bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x00067660 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x00067662 ldr r2, [sp, 0x24] | r2 = var_4h_2;
0x00067664 cmp r3, 0 |
0x00067666 ldrb r2, [r2] | r2 = *(r2);
| if (r3 <= 0) {
0x00067668 ble 0x67610 | goto label_12;
| }
0x0006766a ldr r1, [r5, 0x68] | r1 = *((r5 + 0x68));
0x0006766c add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00067670 orr r2, r2, 0x10 | r2 |= 0x10;
0x00067674 add.w r1, r1, r3, lsl 2 | r1 += (r3 << 2);
0x00067678 strh r2, [r1, -0x12] | *((r1 - 0x12)) = r2;
0x0006767c b 0x67610 | goto label_12;
| label_41:
0x0006767e cmp.w r8, 0 |
| if (r8 != 0) {
0x00067682 beq 0x6769c |
0x00067684 movs r2, 0 | r2 = 0;
0x00067686 movs r1, 0x32 | r1 = 0x32;
0x00067688 str r2, [sp] | *(sp) = r2;
0x0006768a mov r0, r5 | r0 = r5;
0x0006768c ldr r3, [sp, 0x20] | r3 = var_20h_4;
0x0006768e mov r2, r8 | r2 = r8;
0x00067690 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00067694 ldr r1, [sp, 0x18] | r1 = var_18h_2;
0x00067696 mov r0, r5 | r0 = r5;
0x00067698 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
| }
| label_16:
0x0006769c ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x0006769e ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x000676a2 cmn r2, r3 |
| if (r2 < r3) {
0x000676a4 bmi 0x67750 | goto label_44;
| }
0x000676a6 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000676a8 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x000676aa ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x000676ac lsls r3, r3, 2 | r3 <<= 2;
0x000676ae rsbs r3, r3, 0 | r3 -= ;
0x000676b0 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_18:
0x000676b2 cmp.w r8, 0 |
| if (r8 == 0) {
0x000676b6 beq.w 0x67352 | goto label_13;
| }
0x000676ba ldrb r3, [r4, 0x13] | r3 = *((r4 + 0x13));
0x000676bc cmp r3, 7 |
| if (r3 > 7) {
0x000676be bhi.w 0x67352 | goto label_13;
| }
0x000676c2 adds r2, r3, 1 | r2 = r3 + 1;
0x000676c4 adds r3, 0x26 | r3 += 0x26;
0x000676c6 strb r2, [r4, 0x13] | *((r4 + 0x13)) = r2;
0x000676c8 str.w r8, [r4, r3, lsl 2] | __asm ("str.w r8, [r4, r3, lsl 2]");
0x000676cc b 0x67352 | goto label_13;
| label_20:
0x000676e2 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000676e4 str r3, [sp, 0x28] | var_8h = r3;
0x000676e6 ldr r3, [sp, 0x30] | r3 = var_34h_3;
0x000676e8 cmp r3, 1 |
| if (r3 == 1) {
0x000676ea beq.w 0x674b8 | goto label_14;
| }
0x000676ee ldr r3, [sp, 0x24] | r3 = var_4h_2;
0x000676f0 movs r1, 0x60 | r1 = 0x60;
0x000676f2 ldr r7, [sp, 0x34] | r7 = var_14h_2;
0x000676f4 mov r0, r5 | r0 = r5;
0x000676f6 str r6, [sp, 8] | *((sp + 8)) = r6;
0x000676f8 strd r6, r3, [sp] | __asm ("strd r6, r3, [sp]");
0x000676fc mov r3, r6 | r3 = r6;
0x000676fe mov r2, r7 | r2 = r7;
0x00067700 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x00067704 str r7, [sp, 0x14] | var_18h_3 = r7;
| label_35:
0x00067706 ldr r1, [sp, 0x14] | r1 = var_18h_3;
0x00067708 mov r0, r5 | r0 = r5;
0x0006770a ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0006770c ldr r2, [sp, 0x28] | r2 = var_8h;
0x0006770e str r1, [sp] | *(sp) = r1;
0x00067710 movs r1, 0x1b | r1 = 0x1b;
0x00067712 str r6, [sp, 4] | *((sp + 4)) = r6;
0x00067714 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x00067718 b 0x67352 | goto label_13;
| if (r1 == 0x1b) {
| label_28:
0x0006771a beq 0x6775c | goto label_45;
| }
0x0006771c mov r1, r6 | r1 = r6;
0x0006771e mov r0, r4 | r0 = r4;
0x00067720 bl 0xfd2c | fcn_0000fd2c (r0, r1);
0x00067724 str r0, [sp, 0x14] | var_18h_3 = r0;
0x00067726 b 0x67144 | goto label_8;
| label_39:
0x00067728 ldr r3, [r7] | r3 = *(r7);
0x0006772a mov.w r8, 0 | r8 = 0;
0x0006772e cmp r3, 0 |
| if (r3 > 0) {
0x00067730 bgt.w 0x67598 | goto label_15;
| }
0x00067734 b 0x6769c | goto label_16;
| label_38:
0x0006773e movs r3, 0 | r3 = 0;
0x00067740 movs r1, 8 | r1 = 8;
0x00067742 mov r2, r3 | r2 = r3;
0x00067744 mov r0, r5 | r0 = r5;
0x00067746 str r3, [sp] | *(sp) = r3;
0x00067748 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0006774c mov r7, r0 | r7 = r0;
0x0006774e b 0x674fa | goto label_17;
| label_44:
0x00067750 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00067752 mov r1, r5 | r1 = r5;
0x00067754 rsbs r2, r3, 0 | r2 = r3 - ;
0x00067756 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0006775a b 0x676b2 | goto label_18;
| label_45:
0x0006775c ldr r3, [sp, 0x30] | r3 = var_34h_3;
0x0006775e cmp r3, 5 |
| if (r3 == 5) {
0x00067760 beq.w 0x6754a | goto label_19;
| }
0x00067764 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x00067766 ldr r2, [sp, 0x20] | r2 = var_20h_4;
0x00067768 cmp r3, r2 |
| if (r3 == r2) {
0x0006776a beq 0x676e2 | goto label_20;
| }
0x0006776c ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0006776e add.w sl, r3, -1 | sl = r3 + -1;
0x00067772 ldr r3, [sp, 0x34] | r3 = var_14h_2;
0x00067774 str.w sl, [r4, 0x38] | __asm ("str.w sl, [r4, 0x38]");
0x00067778 str r3, [sp, 0x14] | var_18h_3 = r3;
0x0006777a b 0x671c2 | goto label_21;
| label_40:
0x0006777c ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0006777e add.w r8, r3, 1 | r8 = r3 + 1;
0x00067782 str.w r8, [r4, 0x2c] | __asm ("str.w r8, [r4, 0x2c]");
0x00067786 b 0x67582 | goto label_22;
| label_23:
0x00067788 blx 0x883c | fcn_0000883c ();
0x0006778c adds r6, r3, 2 | r6 = r3 + 2;
0x0006778e movs r6, r0 | r6 = r0;
0x00067790 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00067792 movs r0, r0 |
0x00067794 adds r6, r6, 1 | r6++;
0x00067796 movs r6, r0 | r6 = r0;
0x00067798 adds r2, r1, r4 | r2 = r1 + r4;
0x0006779a movs r6, r0 | r6 = r0;
0x0006779c subs r3, 0xf2 | r3 -= 0xf2;
0x0006779e movs r6, r0 | r6 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x69310 */
| #include <stdint.h>
|
; (fcn) fcn.00069310 () | void fcn_00069310 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
0x00069310 blhs 0x88524 | __asm ("blhs aav.0x000000ff");
| if (? != ?) {
0x00069314 bne.w 0x6957e | goto label_16;
| }
0x00069318 ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x0006931a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006931e mov r4, r0 | r4 = r0;
0x00069320 vpush {d8} | __asm ("vpush {d8}");
0x00069324 sub sp, 0x1c |
0x00069326 ldr r6, [r0] | r6 = *(r0);
0x00069328 str r3, [sp, 0x10] | var_10h = r3;
0x0006932a cmp r3, 0 |
| if (r3 != 0) {
0x0006932c bne.w 0x69500 | goto label_17;
| }
0x00069330 ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x00069332 cmp r7, 0 |
| if (r7 == 0) {
0x00069334 beq.w 0x69764 | goto label_18;
| }
| label_8:
0x00069338 ldrb.w r2, [r4, 0x95] | r2 = *((r4 + 0x95));
0x0006933c ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x0006933e cmp r2, 0 |
| if (r2 != 0) {
0x00069340 bne.w 0x69580 | goto label_19;
| }
| label_2:
0x00069344 ldr r2, [r7, 0x70] | r2 = *((r7 + 0x70));
0x00069346 cmp r2, r3 |
| if (r2 <= r3) {
0x00069348 ble.w 0x69798 | goto label_20;
| }
0x0006934c add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x00069350 adds r3, 1 | r3++;
0x00069352 str r3, [r7, 0x6c] | *((r7 + 0x6c)) = r3;
0x00069354 movs r0, 0x46 | r0 = 0x46;
0x00069356 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x00069358 lsls r2, r2, 2 | r2 <<= 2;
0x0006935a vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006935e movs r1, 0 | r1 = 0;
0x00069360 str r0, [r3, r2] | *((r3 + r2)) = r0;
0x00069362 add r3, r2 | r3 += r2;
0x00069364 adds r2, r3, 4 | r2 = r3 + 4;
0x00069366 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0006936a strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
0x0006936e ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x00069372 cmp r3, 0 |
| if (r3 != 0) {
0x00069374 bne.w 0x69568 | goto label_9;
| }
0x00069378 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
| if (r2 == 0) {
0x0006937a cbnz r2, 0x69384 |
0x0006937c ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x0006937e cmp r3, 0 |
| if (r3 == 0) {
0x00069380 beq.w 0x69568 | goto label_9;
| }
| }
0x00069384 ldr r3, [r7] | r3 = *(r7);
0x00069386 ldr r1, [r7, 0x6c] | r1 = *((r7 + 0x6c));
0x00069388 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006938c cmp r3, 0 |
| if (r3 != 0) {
0x0006938e bne.w 0x697a8 | goto label_21;
| }
0x00069392 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
| label_10:
0x00069394 movs r5, 0 | r5 = 0;
0x00069396 mov.w r8, 1 | r8 = 1;
0x0006939a str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0006939c b 0x693a0 |
| while (r3 > r5) {
0x0006939e ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x000693a0 lsl.w r3, r8, r5 | r3 = r8 << r5;
0x000693a4 lsls r1, r5, 4 | r1 = r5 << 4;
0x000693a6 tst r3, r2 |
| if ((r3 & r2) != 0) {
0x000693a8 beq 0x69410 |
0x000693aa ldr.w r2, [r7, 0x98] | r2 = *((r7 + 0x98));
0x000693ae cmp r5, 1 |
0x000693b0 orr.w r2, r2, r3 | r2 |= r3;
0x000693b4 str.w r2, [r7, 0x98] | __asm ("str.w r2, [r7, 0x98]");
| if (r5 != 1) {
0x000693b8 beq 0x693d0 |
0x000693ba ldr r2, [r7] | r2 = *(r7);
0x000693bc ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x000693be add r2, r1 | r2 += r1;
0x000693c0 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000693c2 ldrb r2, [r2, 9] | r2 = *((r2 + 9));
| if (r2 == 0) {
0x000693c4 cbz r2, 0x693d0 | goto label_22;
| }
0x000693c6 ldr.w r2, [r7, 0x9c] | r2 = *((r7 + 0x9c));
0x000693ca orrs r2, r3 | r2 |= r3;
0x000693cc str.w r2, [r7, 0x9c] | __asm ("str.w r2, [r7, 0x9c]");
| }
| label_22:
0x000693d0 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x000693d2 mov r0, r7 | r0 = r7;
0x000693d4 add r2, r1 | r2 += r1;
0x000693d6 ldr r1, [r4, 0x50] | r1 = *((r4 + 0x50));
0x000693d8 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x000693da tst r3, r1 |
0x000693dc mov.w r1, 2 | r1 = 2;
0x000693e0 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000693e2 str r3, [sp, 4] | var_4h = r3;
0x000693e4 ldr r3, [r2] | r3 = *(r2);
0x000693e6 mov r2, r5 | r2 = r5;
0x000693e8 str r3, [sp] | *(sp) = r3;
0x000693ea ite ne |
| if ((r3 & r1) == 0) {
0x000693ec movne r3, 1 | r3 = 1;
| }
| if ((r3 & r1) != 0) {
0x000693ee moveq r3, 0 | r3 = 0;
| }
0x000693f0 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x000693f4 ldrb.w r3, [r6, 0xb1] | r3 = *((r6 + 0xb1));
| if (r3 != 0) {
0x000693f8 cbnz r3, 0x69410 | goto label_23;
| }
0x000693fa ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x000693fc cmp r3, 0 |
0x000693fe it gt |
| if (r3 <= 0) {
0x00069400 ldrgt r2, [r7, 0x68] | r2 = *((r7 + 0x68));
| }
0x00069402 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00069406 itt gt |
| if (r3 <= 0) {
0x00069408 addgt r2, r2, r3, lsl 2 | r2 += (r3 << 2);
| }
| if (r3 <= 0) {
0x0006940c strh r8, [r2, -0x12] | *((r2 - 0x12)) = r8;
| goto label_23;
| }
| }
| label_23:
0x00069410 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00069412 adds r5, 1 | r5++;
0x00069414 cmp r3, r5 |
0x00069416 bgt 0x6939e |
| }
0x00069418 ldr.w r3, [r4, 0xd4] | r3 = *((r4 + 0xd4));
0x0006941c mov.w r8, 0 | r8 = 0;
0x00069420 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x00069424 mov.w sl, 0xaa | sl = 0xaa;
0x00069428 mov sb, r8 | sb = r8;
0x0006942a cmp r3, 0 |
| if (r3 <= 0) {
0x0006942c ble 0x69484 | goto label_24;
| }
| label_0:
0x0006942e ldr.w r3, [r4, 0x104] | r3 = *((r4 + 0x104));
0x00069432 ldr.w r3, [r3, r8, lsl 2] | offset_0 = r8 << 2;
| r3 = *((r3 + offset_0));
0x00069436 ldr r5, [r3, 0x34] | r5 = *((r3 + 0x34));
| if (r5 != 0) {
0x00069438 cbnz r5, 0x69440 | goto label_25;
| }
0x0006943a b 0x69446 | goto label_26;
| do {
0x0006943c ldr r5, [r5, 0x18] | r5 = *((r5 + 0x18));
| if (r5 == 0) {
0x0006943e cbz r5, 0x69446 | goto label_26;
| }
| label_25:
0x00069440 ldr r3, [r5] | r3 = *(r5);
0x00069442 cmp r6, r3 |
0x00069444 bne 0x6943c |
| } while (r6 != r3);
| label_26:
0x00069446 ldrd r1, r3, [r7, 0x6c] | __asm ("ldrd r1, r3, [r7, 0x6c]");
0x0006944a cmp r1, r3 |
| if (r1 >= r3) {
0x0006944c bge.w 0x69656 | goto label_27;
| }
0x00069450 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x00069452 add.w r2, r1, r1, lsl 2 | r2 = r1 + (r1 << 2);
0x00069456 adds r0, r1, 1 | r0 = r1 + 1;
0x00069458 str r0, [r7, 0x6c] | *((r7 + 0x6c)) = r0;
0x0006945a str.w sl, [r3, r2, lsl 2] | __asm ("str.w sl, [r3, r2, lsl 2]");
0x0006945e add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00069462 adds r2, r3, 4 | r2 = r3 + 4;
0x00069464 vst1.32 {d8}, [r2] | __asm ("vst1.32 {d8}, [r2]");
0x00069468 strd sb, sb, [r3, 0xc] | __asm ("strd sb, sb, [r3, 0xc]");
| label_3:
0x0006946c mvn r3, 0xa | r3 = ~0xa;
0x00069470 mov r2, r5 | r2 = r5;
0x00069472 mov r0, r7 | r0 = r7;
0x00069474 add.w r8, r8, 1 | r8++;
0x00069478 bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
0x0006947c ldr.w r3, [r4, 0xd4] | r3 = *((r4 + 0xd4));
0x00069480 cmp r3, r8 |
| if (r3 > r8) {
0x00069482 bgt 0x6942e | goto label_0;
| }
| label_24:
0x00069484 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00069486 movs r5, 0 | r5 = 0;
0x00069488 ldr r6, [r4, 8] | r6 = *((r4 + 8));
0x0006948a str.w r5, [r4, 0xd4] | __asm ("str.w r5, [r4, 0xd4]");
0x0006948e cmp r3, r5 |
0x00069490 itt gt |
| if (r3 <= r5) {
0x00069492 movgt sl, 0xa9 | sl = 0xa9;
| }
| if (r3 > r5) {
0x00069496 mov sb, r5 | sb = r5;
| }
| if (r3 > r5) {
0x00069498 bgt 0x694d2 | goto label_28;
| }
0x0006949a b 0x6966c | goto label_29;
| do {
0x0006949c ldr.w lr, [r6, 0x68] |
0x000694a0 add.w r0, r1, r1, lsl 2 | r0 = r1 + (r1 << 2);
0x000694a4 add.w fp, r1, 1 |
0x000694a8 str.w fp, [r6, 0x6c] | __asm ("str.w fp, [r6, 0x6c]");
0x000694ac add.w fp, lr, r0, lsl 2 |
0x000694b0 strd r2, r3, [fp, 4] | __asm ("strd r2, r3, [fp, 4]");
0x000694b4 strd ip, sb, [fp, 0xc] | __asm ("strd ip, sb, [fp, 0xc]");
0x000694b8 str.w sl, [lr, r0, lsl 2] | __asm ("str.w sl, [lr, r0, lsl 2]");
| label_1:
0x000694bc mov.w r3, -1 | r3 = -1;
0x000694c0 mov r2, r8 | r2 = r8;
0x000694c2 mov r0, r6 | r0 = r6;
0x000694c4 adds r5, 1 | r5++;
0x000694c6 bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
0x000694ca ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x000694cc cmp r5, r3 |
| if (r5 >= r3) {
0x000694ce bge.w 0x6966a | goto label_30;
| }
| label_28:
0x000694d2 ldrd r1, r0, [r6, 0x6c] | __asm ("ldrd r1, r0, [r6, 0x6c]");
0x000694d6 lsls r3, r5, 4 | r3 = r5 << 4;
0x000694d8 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x000694da cmp r1, r0 |
0x000694dc add.w ip, r2, r3 |
0x000694e0 ldr r2, [r2, r3] | r2 = *((r2 + r3));
0x000694e2 ldr.w r8, [ip, 0xc] | r8 = *((ip + 0xc));
0x000694e6 ldr.w r3, [ip, 4] | r3 = *((ip + 4));
0x000694ea ldrb.w ip, [ip, 8] | ip = *((ip + 8));
0x000694ee blt 0x6949c |
| } while (r1 < r0);
0x000694f0 movs r1, 0xa9 | r1 = 0xa9;
0x000694f2 mov r0, r6 | r0 = r6;
0x000694f4 str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x000694f8 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000694fc mov r1, r0 | r1 = r0;
0x000694fe b 0x694bc | goto label_1;
| label_17:
0x00069500 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x00069504 cmp r3, 0 |
| if (r3 == 0) {
0x00069506 beq 0x69574 | goto label_31;
| }
0x00069508 movs r3, 7 | r3 = 7;
0x0006950a str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0006950c add sp, 0x1c |
0x0006950e vpop {d8} | __asm ("vpop {d8}");
0x00069512 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00069516 ldr r7, [sp, 0x14] | r7 = var_14h;
0x00069518 mov r4, r8 | r4 = r8;
| label_4:
0x0006951a ldr r6, [r4, 0x44] | r6 = *((r4 + 0x44));
| if (r6 == 0) {
0x0006951c cbz r6, 0x6954e | goto label_32;
| }
0x0006951e movs r3, 0 | r3 = 0;
0x00069520 strb r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
0x00069522 ldr r3, [r6] | r3 = *(r6);
0x00069524 cmp r3, 0 |
| if (r3 <= 0) {
0x00069526 ble 0x6954e | goto label_32;
| }
0x00069528 ldr.w r8, [sp, 0x10] | r8 = var_10h;
0x0006952c mov r5, r6 | r5 = r6;
| do {
0x0006952e ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00069530 add.w r8, r8, 1 | r8++;
0x00069534 cmp r2, 0 |
| if (r2 > 0) {
0x00069536 ble 0x69546 |
0x00069538 ldr r1, [r4, 8] | r1 = *((r4 + 8));
| if (r1 == 0) {
0x0006953a cbz r1, 0x69546 | goto label_33;
| }
0x0006953c ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0006953e mov r0, r4 | r0 = r4;
0x00069540 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x00069544 ldr r3, [r6] | r3 = *(r6);
| }
| label_33:
0x00069546 cmp r3, r8 |
0x00069548 add.w r5, r5, 0x10 | r5 += 0x10;
0x0006954c bgt 0x6952e |
| } while (r3 > r8);
| label_32:
0x0006954e ldrb.w r3, [r4, 0x95] | r3 = *((r4 + 0x95));
| if (r3 != 0) {
0x00069552 cbz r3, 0x69560 |
0x00069554 ldr.w r2, [r4, 0x84] | r2 = *((r4 + 0x84));
0x00069558 ldr r3, [r2, 0x60] | r3 = *((r2 + 0x60));
0x0006955a cmp r3, 0 |
| if (r3 != 0) {
0x0006955c bne.w 0x697b0 | goto label_34;
| }
| }
| label_11:
0x00069560 movs r1, 1 | r1 = 1;
0x00069562 mov r0, r7 | r0 = r7;
0x00069564 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
| label_9:
0x00069568 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0006956a cmp r3, 0 |
| if (r3 == 0) {
0x0006956c beq.w 0x69782 | goto label_35;
| }
0x00069570 movs r3, 1 | r3 = 1;
0x00069572 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| label_31:
0x00069574 add sp, 0x1c |
0x00069576 vpop {d8} | __asm ("vpop {d8}");
0x0006957a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x0006957e bx lr | return;
| label_19:
0x00069580 ldr.w r8, [r4, 0x84] | r8 = *((r4 + 0x84));
0x00069584 ldr.w r2, [r8, 0x60] | r2 = *((r8 + 0x60));
0x00069588 cmp r2, 0 |
| if (r2 == 0) {
0x0006958a beq.w 0x69344 | goto label_2;
| }
0x0006958e ldr r1, [r7, 0x70] | r1 = *((r7 + 0x70));
0x00069590 cmp r3, r1 |
| if (r3 >= r1) {
0x00069592 bge.w 0x697cc | goto label_36;
| }
0x00069596 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x0006959a add.w sb, r3, 1 | sb = r3 + 1;
0x0006959e ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000695a0 movs r5, 0x53 | r5 = 0x53;
0x000695a2 lsls r2, r2, 2 | r2 <<= 2;
0x000695a4 str.w sb, [r7, 0x6c] | __asm ("str.w sb, [r7, 0x6c]");
0x000695a8 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000695ac movs r0, 0 | r0 = 0;
0x000695ae str r5, [r3, r2] | *((r3 + r2)) = r5;
0x000695b0 add r3, r2 | r3 += r2;
0x000695b2 adds r2, r3, 4 | r2 = r3 + 4;
0x000695b4 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000695b8 strd r0, r0, [r3, 0xc] | __asm ("strd r0, r0, [r3, 0xc]");
| label_13:
0x000695bc cmp sb, r1 |
0x000695be ldr.w r2, [r8, 0x5c] | r2 = *((r8 + 0x5c));
| if (sb >= r1) {
0x000695c2 bge.w 0x697e8 | goto label_37;
| }
0x000695c6 add.w r3, sb, sb, lsl 2 | r3 = sb + (sb << 2);
0x000695ca ldr r5, [r7, 0x68] | r5 = *((r7 + 0x68));
0x000695cc movs r0, 0 | r0 = 0;
0x000695ce lsls r3, r3, 2 | r3 <<= 2;
0x000695d0 add.w fp, sb, 1 |
0x000695d4 mov.w ip, 0x23 |
0x000695d8 str.w fp, [r7, 0x6c] | __asm ("str.w fp, [r7, 0x6c]");
0x000695dc adds r1, r5, r3 | r1 = r5 + r3;
0x000695de strd r2, r0, [r1, 4] | __asm ("strd r2, r0, [r1, 4]");
0x000695e2 strd r0, r0, [r1, 0xc] | __asm ("strd r0, r0, [r1, 0xc]");
0x000695e6 str.w ip, [r5, r3] | __asm ("str.w ip, [r5, r3]");
| label_15:
0x000695ea ldrd r3, sl, [r8, 0x60] | __asm ("ldrd r3, sl, [r8, 0x60]");
0x000695ee movs r5, 0 | r5 = 0;
0x000695f0 cmp r3, 0 |
| if (r3 <= 0) {
0x000695f2 ble 0x69612 | goto label_38;
| }
| do {
0x000695f4 add.w r3, r5, sl | r3 = r5 + sl;
0x000695f8 ldr.w r2, [r8, 0x5c] | r2 = *((r8 + 0x5c));
0x000695fc movs r1, 0x5e | r1 = 0x5e;
0x000695fe str r3, [sp] | *(sp) = r3;
0x00069600 mov r0, r7 | r0 = r7;
0x00069602 mov r3, r5 | r3 = r5;
0x00069604 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00069608 ldr.w r3, [r8, 0x60] | r3 = *((r8 + 0x60));
0x0006960c adds r5, 1 | r5++;
0x0006960e cmp r3, r5 |
0x00069610 bgt 0x695f4 |
| } while (r3 > r5);
| label_38:
0x00069612 mov r3, r5 | r3 = r5;
0x00069614 movs r5, 0 | r5 = 0;
0x00069616 mov r2, sl | r2 = sl;
0x00069618 movs r1, 0x54 | r1 = 0x54;
0x0006961a mov r0, r7 | r0 = r7;
0x0006961c str r5, [sp] | *(sp) = r5;
0x0006961e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00069622 ldr.w r2, [r8, 0x5c] | r2 = *((r8 + 0x5c));
0x00069626 mov r3, fp | r3 = fp;
0x00069628 movs r1, 0x26 | r1 = 0x26;
0x0006962a mov r0, r7 | r0 = r7;
0x0006962c str r5, [sp] | *(sp) = r5;
0x0006962e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00069632 ldr r2, [r7] | r2 = *(r7);
0x00069634 cmp sb, r5 |
0x00069636 ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x00069638 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0006963c it lt |
| if (sb >= r5) {
0x0006963e addlt sb, r3, -1 | sb = r3 + -1;
| }
0x00069642 cmp r2, 0 |
| if (r2 != 0) {
0x00069644 bne.w 0x697e0 | goto label_39;
| }
0x00069648 ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x0006964a add.w sb, sb, sb, lsl 2 | sb += (sb << 2);
0x0006964e add.w r2, r2, sb, lsl 2 | r2 += (sb << 2);
| label_14:
0x00069652 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x00069654 b 0x69344 | goto label_2;
| label_27:
0x00069656 movs r3, 0 | r3 = 0;
0x00069658 movs r1, 0xaa | r1 = 0xaa;
0x0006965a mov r2, r3 | r2 = r3;
0x0006965c mov r0, r7 | r0 = r7;
0x0006965e str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00069662 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00069666 mov r1, r0 | r1 = r0;
0x00069668 b 0x6946c | goto label_3;
| label_30:
0x0006966a ldr r6, [r4, 8] | r6 = *((r4 + 8));
| label_29:
0x0006966c ldr.w r8, [r4, 0x70] | r8 = *((r4 + 0x70));
0x00069670 ldr.w sl, [r4] | sl = *(r4);
0x00069674 cmp.w r8, 0 |
| if (r8 == 0) {
0x00069678 beq.w 0x6951a | goto label_4;
| }
0x0006967c ldr r3, [pc, 0x17c] |
0x0006967e mov.w sb, 0 | sb = 0;
0x00069682 str r7, [sp, 0x14] | var_14h = r7;
0x00069684 mov r7, r8 | r7 = r8;
0x00069686 mov r8, r4 | r8 = r4;
0x00069688 add r3, pc |
0x0006968a add.w r3, r3, 0xbd0 | r3 = 0xd3a58;
0x0006968e str r3, [sp, 0xc] | var_ch = r3;
0x00069690 b 0x69726 | goto label_40;
| label_6:
0x00069692 ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x00069694 add.w r2, r0, r0, lsl 2 | r2 = r0 + (r0 << 2);
0x00069698 adds r3, r0, 1 | r3 = r0 + 1;
0x0006969a str r3, [r6, 0x6c] | *((r6 + 0x6c)) = r3;
0x0006969c mov.w ip, 0x75 |
0x000696a0 add.w r3, r1, r2, lsl 2 | r3 = r1 + (r2 << 2);
0x000696a4 strd r4, sb, [r3, 8] | __asm ("strd r4, sb, [r3, 8]");
0x000696a8 str.w sb, [r3, 0x10] | __asm ("str.w sb, [r3, 0x10]");
0x000696ac str.w ip, [r1, r2, lsl 2] | __asm ("str.w ip, [r1, r2, lsl 2]");
0x000696b0 str.w sb, [r3, 4] | __asm ("str.w sb, [r3, 4]");
| label_7:
0x000696b4 ldr r3, [r6] | r3 = *(r6);
0x000696b6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000696ba cbnz r3, 0x696de |
0x000696bc cmp r0, 0 |
0x000696be ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x000696c0 it lt |
| if (r0 >= 0) {
0x000696c2 ldrlt r0, [r6, 0x6c] | r0 = *((r6 + 0x6c));
| }
0x000696c4 mov r2, fp | r2 = fp;
0x000696c6 mov.w r3, 0 | r3 = 0;
0x000696ca it lt |
| if (r0 >= 0) {
0x000696cc addlt r0, r0, -1 | r0 += -1;
| }
0x000696d0 add.w r0, r0, r0, lsl 2 | r0 += (r0 << 2);
0x000696d4 add.w r1, r1, r0, lsl 2 | r1 += (r0 << 2);
0x000696d8 mov r0, r6 | r0 = r6;
0x000696da bl 0x22c24 | fcn_00022c24 (r0, r1, r2, r3);
| }
0x000696de ldr r2, [sp, 0xc] | r2 = var_ch;
0x000696e0 movs r1, 0xc | r1 = 0xc;
0x000696e2 mov r0, r6 | r0 = r6;
0x000696e4 bl 0x2db78 | r0 = fcn_0002db78 (r0, r1, r2);
0x000696e8 cmp r0, 0 |
| if (r0 == 0) {
0x000696ea beq.w 0x69516 | goto label_5;
| }
0x000696ee ldr.w r2, [r8, 0x28] | r2 = *((r8 + 0x28));
0x000696f2 adds r3, r5, 2 | r3 = r5 + 2;
0x000696f4 str r5, [r0, 8] | *((r0 + 8)) = r5;
0x000696f6 str r5, [r0, 0x34] | *((r0 + 0x34)) = r5;
0x000696f8 str r5, [r0, 0x48] | *((r0 + 0x48)) = r5;
0x000696fa str r5, [r0, 0x70] | *((r0 + 0x70)) = r5;
0x000696fc str r5, [r0, 0x7c] | *((r0 + 0x7c)) = r5;
0x000696fe str.w r5, [r0, 0x90] | __asm ("str.w r5, [r0, 0x90]");
0x00069702 str.w r5, [r0, 0xd0] | __asm ("str.w r5, [r0, 0xd0]");
0x00069706 adds r5, 1 | r5++;
0x00069708 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0006970a str.w r3, [r0, 0x94] | __asm ("str.w r3, [r0, 0x94]");
0x0006970e movs r3, 0x10 | r3 = 0x10;
0x00069710 str r4, [r0, 0x40] | *((r0 + 0x40)) = r4;
0x00069712 str r5, [r0, 0x58] | *((r0 + 0x58)) = r5;
0x00069714 strh r3, [r0, 0x3e] | *((r0 + 0x3e)) = r3;
| if (r2 == 0) {
0x00069716 cbnz r2, 0x6971e |
0x00069718 movs r3, 1 | r3 = 1;
0x0006971a str.w r3, [r8, 0x28] | __asm ("str.w r3, [r8, 0x28]");
| }
0x0006971e ldr r7, [r7] | r7 = *(r7);
0x00069720 cmp r7, 0 |
| if (r7 == 0) {
0x00069722 beq.w 0x69516 | goto label_5;
| }
| label_40:
0x00069726 ldr r2, [r7, 8] | r2 = *((r7 + 8));
0x00069728 movs r1, 0x70 | r1 = 0x70;
0x0006972a ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x0006972e mov r0, r8 | r0 = r8;
0x00069730 ldr r5, [r7, 0xc] | r5 = *((r7 + 0xc));
0x00069732 add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00069736 subs r4, r5, 1 | r4 = r5 - 1;
0x00069738 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0006973a ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x0006973c str r1, [sp] | *(sp) = r1;
0x0006973e movs r1, 0 | r1 = 0;
0x00069740 bl 0x2fc88 | fcn_0002fc88 (r0, r1, r2, r3, r4);
0x00069744 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00069746 ldr.w fp, [r3] | fp = *(r3);
0x0006974a ldrd r0, r3, [r6, 0x6c] | __asm ("ldrd r0, r3, [r6, 0x6c]");
0x0006974e cmp r0, r3 |
| if (r0 < r3) {
0x00069750 blt 0x69692 | goto label_6;
| }
0x00069752 mov r3, r4 | r3 = r4;
0x00069754 movs r2, 0 | r2 = 0;
0x00069756 movs r1, 0x75 | r1 = 0x75;
0x00069758 mov r0, r6 | r0 = r6;
0x0006975a str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0006975e bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00069762 b 0x696b4 | goto label_7;
| label_18:
0x00069764 ldrb.w r3, [r6, 0xb1] | r3 = *((r6 + 0xb1));
| if (r3 != 0) {
0x00069768 cbnz r3, 0x6978a | goto label_41;
| }
0x0006976a ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
| if (r3 == 0) {
0x0006976c cbz r3, 0x697c0 | goto label_42;
| }
| label_12:
0x0006976e mov r0, r4 | r0 = r4;
0x00069770 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x00069774 mov r7, r0 | r7 = r0;
0x00069776 cmp r0, 0 |
| if (r0 != 0) {
0x00069778 bne.w 0x69338 | goto label_8;
| }
0x0006977c movs r3, 1 | r3 = 1;
0x0006977e str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00069780 b 0x69568 | goto label_9;
| label_35:
0x00069782 mov r1, r4 | r1 = r4;
0x00069784 mov r0, r7 | r0 = r7;
0x00069786 bl 0x2c560 | fcn_0002c560 (r0, r1, r2, r3);
| label_41:
0x0006978a movs r3, 0x65 | r3 = 0x65;
0x0006978c str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0006978e add sp, 0x1c |
0x00069790 vpop {d8} | __asm ("vpop {d8}");
0x00069794 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_20:
0x00069798 movs r3, 0 | r3 = 0;
0x0006979a movs r1, 0x46 | r1 = 0x46;
0x0006979c mov r2, r3 | r2 = r3;
0x0006979e mov r0, r7 | r0 = r7;
0x000697a0 str r3, [sp] | *(sp) = r3;
0x000697a2 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000697a4 invalid |
| label_21:
0x000697a8 ldr r3, [pc, 0x54] |
0x000697aa add r3, pc | r3 = 0xd2fae;
0x000697ac adds r3, 4 | r3 += 4;
0x000697ae b 0x69394 | goto label_10;
| label_34:
0x000697b0 movs r1, 0 | r1 = 0;
0x000697b2 ldr r2, [r2, 0x5c] | r2 = *((r2 + 0x5c));
0x000697b4 mov r0, r7 | r0 = r7;
0x000697b6 str r1, [sp] | *(sp) = r1;
0x000697b8 movs r1, 0x76 | r1 = 0x76;
0x000697ba bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000697be b 0x69560 | goto label_11;
| label_42:
0x000697c0 ldr r3, [r6, 0x50] | r3 = *((r6 + 0x50));
0x000697c2 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000697c4 itt pl |
| if (r3 < r3) {
0x000697c6 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000697c8 strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x000697ca b 0x6976e | goto label_12;
| label_36:
0x000697cc movs r3, 0 | r3 = 0;
0x000697ce movs r1, 0x53 | r1 = 0x53;
0x000697d0 mov r2, r3 | r2 = r3;
0x000697d2 mov r0, r7 | r0 = r7;
0x000697d4 str r3, [sp] | *(sp) = r3;
0x000697d6 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000697da ldrd sb, r1, [r7, 0x6c] | __asm ("ldrd sb, r1, [r7, 0x6c]");
0x000697de b 0x695bc | goto label_13;
| label_39:
0x000697e0 ldr r2, [pc, 0x20] |
0x000697e2 add r2, pc | r2 = 0xd2fea;
0x000697e4 adds r2, 4 | r2 += 4;
0x000697e6 b 0x69652 | goto label_14;
| label_37:
0x000697e8 movs r3, 0 | r3 = 0;
0x000697ea movs r1, 0x23 | r1 = 0x23;
0x000697ec mov r0, r7 | r0 = r7;
0x000697ee str r3, [sp] | *(sp) = r3;
0x000697f0 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000697f4 mov sb, r0 | sb = r0;
0x000697f6 add.w fp, r0, 1 |
0x000697fa b 0x695ea | goto label_15;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6999c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0006999c () | void fcn_0006999c (int16_t arg_30h, arithmetic arg1, arithmetic arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006999c push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000699a0 sub sp, 0x14 |
0x000699a2 ldr r5, [pc, 0x25c] |
0x000699a4 ldr r4, [pc, 0x25c] | r4 = *(0x69c04);
0x000699a6 add r5, pc | r5 = 0xd35ac;
0x000699a8 ldr.w r8, [sp, 0x30] | r8 = *(arg_30h);
0x000699ac ldr r4, [r5, r4] |
0x000699ae ldr r4, [r4] | r4 = *(0xd35ac);
0x000699b0 str r4, [sp, 0xc] | var_ch = r4;
0x000699b2 mov.w r4, 0 | r4 = 0;
0x000699b6 cmp r1, 0 |
| if (r1 == 0) {
0x000699b8 beq.w 0x69b7c | goto label_6;
| }
0x000699bc cmp r3, 0 |
0x000699be mov r5, r0 | r5 = r0;
0x000699c0 mov r6, r2 | r6 = r2;
0x000699c2 mov ip, r3 |
| if (r3 >= 0) {
0x000699c4 blt 0x69ab8 |
0x000699c6 ldrsh.w r3, [r1, 0x20] | r3 = *((r1 + 0x20));
0x000699ca mov r4, r1 | r4 = r1;
0x000699cc cmp r3, ip |
| if (r3 == ip) {
0x000699ce beq 0x69ab8 | goto label_7;
| }
0x000699d0 ldrb.w r3, [r1, 0x2b] | r3 = *((r1 + 0x2b));
0x000699d4 add.w r7, ip, ip, lsl 1 | r7 = ip + (ip << 1);
0x000699d8 lsls r7, r7, 2 | r7 <<= 2;
0x000699da cmp r3, 1 |
| if (r3 == 1) {
0x000699dc beq.w 0x69b9c | goto label_8;
| }
0x000699e0 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x000699e2 add.w sb, r2, r7 | sb = r2 + r7;
0x000699e6 ldrh.w r3, [sb, 0xa] | r3 = *((sb + 0xa));
0x000699ea lsls r0, r3, 0x1a | r0 = r3 << 0x1a;
| if (r0 < r3) {
0x000699ec bmi.w 0x69b26 | goto label_9;
| }
0x000699f0 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x000699f2 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 < r3) {
0x000699f4 bmi 0x69ae2 | goto label_10;
| }
0x000699f6 eor r3, r3, 0x20 | r3 ^= 0x20;
0x000699fa ubfx r2, ip, 0xf, 1 | r2 = (ip >> 0xf) & ((1 << 1) - 1);
0x000699fe ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x00069a02 sxth.w ip, ip | __asm ("sxth.w ip, ip");
0x00069a06 orrs r2, r3 | r2 |= r3;
| if (r2 == r3) {
0x00069a08 bne 0x69a14 |
0x00069a0a mov r1, ip | r1 = ip;
0x00069a0c mov r0, r4 | r0 = r4;
0x00069a0e bl 0xfdbc | r0 = fcn_0000fdbc (r0, r1);
0x00069a12 mov ip, r0 |
| }
| label_0:
0x00069a14 movs r1, 0x5e | r1 = 0x5e;
| label_3:
0x00069a16 mov r3, ip | r3 = ip;
0x00069a18 mov r2, r6 | r2 = r6;
0x00069a1a mov r0, r5 | r0 = r5;
0x00069a1c str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00069a20 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00069a24 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00069a28 cmp r3, 2 |
| if (r3 == 2) {
0x00069a2a beq.w 0x69b52 | goto label_11;
| }
0x00069a2e subs r2, r3, 0 | r2 = r3 - 0;
0x00069a30 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00069a32 mov.w r1, 0 | r1 = 0;
0x00069a36 it ne |
| if (r2 == r3) {
0x00069a38 movne r2, 1 | r2 = 1;
| }
0x00069a3a str r1, [sp, 8] | var_8h = r1;
0x00069a3c add r3, r7 | r3 += r7;
0x00069a3e ldrh r1, [r3, 8] | r1 = *((r3 + 8));
0x00069a40 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x00069a42 cmp r1, 0 |
0x00069a44 it eq |
| if (r1 != 0) {
0x00069a46 orreq r2, r2, 1 | r2 |= 1;
| }
| if (r2 == 0) {
0x00069a4a cbnz r2, 0x69a98 |
0x00069a4c ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
| if (r2 == 0) {
0x00069a4e cbz r2, 0x69a98 | goto label_5;
| }
0x00069a50 ldr r0, [r2] | r0 = *(r2);
0x00069a52 cmp r0, r1 |
| if (r0 < r1) {
0x00069a54 blt 0x69a98 | goto label_5;
| }
0x00069a56 add.w r2, r2, r1, lsl 4 | r2 += (r1 << 4);
0x00069a5a ldr r1, [r2, -0x8] | r1 = *((r2 - 0x8));
| if (r1 == 0) {
0x00069a5e cbz r1, 0x69a98 | goto label_5;
| }
0x00069a60 ldr r0, [r5] | r0 = *(r5);
0x00069a62 add r6, sp, 8 | r6 += var_8h;
0x00069a64 ldrb.w r2, [r0, 0x54] | r2 = *((r0 + 0x54));
0x00069a68 str r6, [sp] | *(sp) = r6;
0x00069a6a bl 0x346dc | fcn_000346dc (r0, r1, r2, r3, r4);
0x00069a6e ldr r1, [sp, 8] | r1 = var_8h;
| if (r1 != 0) {
0x00069a70 cbz r1, 0x69a92 |
0x00069a72 ldr r0, [r5] | r0 = *(r5);
0x00069a74 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x00069a78 cmp r3, 0 |
| if (r3 != 0) {
0x00069a7a bne.w 0x69bda | goto label_12;
| }
0x00069a7e ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x00069a80 ldr r2, [r5, 0x68] | r2 = *((r5 + 0x68));
0x00069a82 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00069a86 lsls r3, r3, 2 | r3 <<= 2;
0x00069a88 subs r3, 0x14 | r3 -= 0x14;
0x00069a8a add r3, r2 | r3 += r2;
0x00069a8c movs r2, 0xf6 | r2 = 0xf6;
0x00069a8e str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x00069a90 strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
0x00069a92 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00069a94 add r3, r7 | r3 += r7;
0x00069a96 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
| }
| label_5:
0x00069a98 cmp r3, 0x45 |
| if (r3 == 0x45) {
0x00069a9a beq.w 0x69ba0 | goto label_13;
| }
| label_1:
0x00069a9e ldr r2, [pc, 0x168] |
0x00069aa0 ldr r3, [pc, 0x160] | r3 = *(0x69c04);
0x00069aa2 add r2, pc | r2 = 0xd36b0;
0x00069aa4 ldr r3, [r2, r3] | r3 = *(0xd36b0);
0x00069aa6 ldr r2, [r3] | r2 = *(0xd36b0);
0x00069aa8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00069aaa eors r2, r3 | r2 ^= r3;
0x00069aac mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00069ab0 bne 0x69b98 | goto label_14;
| }
0x00069ab2 add sp, 0x14 |
0x00069ab4 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| }
| label_7:
0x00069ab8 ldr r2, [pc, 0x150] |
0x00069aba ldr r3, [pc, 0x148] | r3 = *(0x69c06);
0x00069abc add r2, pc | r2 = 0xd36cc;
0x00069abe ldr r3, [r2, r3] | r3 = *(0xd36cc);
0x00069ac0 ldr r2, [r3] | r2 = *(0xd36cc);
0x00069ac2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00069ac4 eors r2, r3 | r2 ^= r3;
0x00069ac6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00069aca bne 0x69b98 | goto label_14;
| }
0x00069acc mov r3, r8 | r3 = r8;
0x00069ace mov r2, r6 | r2 = r6;
0x00069ad0 movs r1, 0x87 | r1 = 0x87;
0x00069ad2 mov r0, r5 | r0 = r5;
0x00069ad4 movs r4, 0 | r4 = 0;
0x00069ad6 str r4, [sp, 0x30] | *(arg_30h) = r4;
| label_2:
0x00069ad8 add sp, 0x14 |
0x00069ada pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00069ade b.w 0x2dc70 | void (*0x2dc70)() ();
| label_10:
0x00069ae2 ldr r3, [r1, 8] | r3 = *((r1 + 8));
| if (r3 != 0) {
0x00069ae4 cbnz r3, 0x69af0 | goto label_15;
| }
0x00069ae6 b 0x69bfa | goto label_16;
| do {
0x00069ae8 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00069aea cmp r3, 0 |
| if (r3 == 0) {
0x00069aec beq.w 0x69bfa | goto label_16;
| }
| label_15:
0x00069af0 ldrb.w r1, [r3, 0x37] | r1 = *((r3 + 0x37));
0x00069af4 and r1, r1, 3 | r1 &= 3;
0x00069af8 cmp r1, 2 |
0x00069afa bne 0x69ae8 |
| } while (r1 != 2);
0x00069afc ldrh r0, [r3, 0x34] | r0 = *((r3 + 0x34));
0x00069afe sxth.w r1, ip | __asm ("sxth.w r1, ip");
0x00069b02 cmp r0, 0 |
| if (r0 == 0) {
0x00069b04 beq 0x69bd4 | goto label_17;
| }
0x00069b06 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00069b08 mov.w ip, 0 |
0x00069b0c subs r3, 2 | r3 -= 2;
0x00069b0e b 0x69b18 |
| while (r2 != r1) {
0x00069b10 add.w ip, ip, 1 |
0x00069b14 cmp ip, r0 |
| if (ip == r0) {
0x00069b16 beq 0x69bd4 | goto label_17;
| }
0x00069b18 ldrsh r2, [r3, 2]! | r2 = *((r3 += 2));
0x00069b1c cmp r2, r1 |
0x00069b1e bne 0x69b10 |
| }
0x00069b20 sxth.w ip, ip | __asm ("sxth.w ip, ip");
0x00069b24 b 0x69a14 | goto label_0;
| label_9:
0x00069b26 lsls r0, r3, 0x17 | r0 = r3 << 0x17;
0x00069b28 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
| if (r0 >= r3) {
0x00069b2a bpl 0x69bac | goto label_18;
| }
0x00069b2c ldr r1, [pc, 0xe0] |
0x00069b2e ldr r3, [pc, 0xd4] | r3 = *(0x69c06);
0x00069b30 add r1, pc | r1 = 0xd3744;
0x00069b32 ldr r3, [r1, r3] | r3 = *(0xd3744);
0x00069b34 ldr r1, [r3] | r1 = *(0xd3744);
0x00069b36 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00069b38 eors r1, r3 | r1 ^= r3;
0x00069b3a mov.w r3, 0 | r3 = 0;
| if (r1 != r3) {
0x00069b3e bne 0x69b98 | goto label_14;
| }
0x00069b40 ldr r1, [pc, 0xd0] |
0x00069b42 mov r0, r5 | r0 = r5;
0x00069b44 ldr r2, [r2, r7] | r2 = *((r2 + r7));
0x00069b46 add r1, pc | r1 = 0xd375e;
0x00069b48 add sp, 0x14 |
0x00069b4a pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x00069b4e b.w 0x21598 | void (*0x21598)() ();
| label_11:
0x00069b52 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00069b54 add r3, r7 | r3 += r7;
0x00069b56 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x00069b58 cmp r3, 0x45 |
| if (r3 != 0x45) {
0x00069b5a bne 0x69a9e | goto label_1;
| }
| label_4:
0x00069b5c ldr r2, [pc, 0xb8] |
0x00069b5e ldr r3, [pc, 0xa4] | r3 = *(0x69c06);
0x00069b60 add r2, pc | r2 = 0xd377c;
0x00069b62 ldr r3, [r2, r3] | r3 = *(0xd377c);
0x00069b64 ldr r2, [r3] | r2 = *(0xd377c);
0x00069b66 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00069b68 eors r2, r3 | r2 ^= r3;
0x00069b6a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00069b6e bne 0x69b98 | goto label_14;
| }
0x00069b70 movs r3, 0 | r3 = 0;
0x00069b72 mov r2, r8 | r2 = r8;
0x00069b74 movs r1, 0x57 | r1 = 0x57;
0x00069b76 mov r0, r5 | r0 = r5;
0x00069b78 str r3, [sp, 0x30] | *(arg_30h) = r3;
0x00069b7a b 0x69ad8 | goto label_2;
| label_6:
0x00069b7c ldr r4, [pc, 0x9c] |
0x00069b7e ldr r1, [pc, 0x84] | r1 = *(0x69c06);
0x00069b80 add r4, pc | r4 = 0xd37a0;
0x00069b82 ldr r1, [r4, r1] | r1 = *(0xd37a0);
0x00069b84 ldr r4, [r1] | r4 = *(0xd37a0);
0x00069b86 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00069b88 eors r4, r1 | r4 ^= r1;
0x00069b8a mov.w r1, 0 | r1 = 0;
0x00069b8e itt eq |
| if (r4 != r1) {
0x00069b90 moveq r1, 0x5e | r1 = 0x5e;
| }
| if (r4 == r1) {
0x00069b92 streq r8, [sp, 0x30] | *(arg_30h) = r8;
| goto label_19;
| }
| if (r4 == r1) {
| label_19:
0x00069b96 beq 0x69ad8 | goto label_2;
| }
| label_14:
0x00069b98 blx 0x883c | fcn_0000883c ();
| label_8:
0x00069b9c movs r1, 0xaf | r1 = 0xaf;
0x00069b9e b 0x69a16 | goto label_3;
| label_13:
0x00069ba0 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x00069ba4 cmp r3, 1 |
| if (r3 == 1) {
0x00069ba6 beq.w 0x69a9e | goto label_1;
| }
0x00069baa b 0x69b5c | goto label_4;
| label_18:
0x00069bac orr r4, r3, 0x100 | r4 = r3 | 0x100;
0x00069bb0 adds r6, 1 | r6++;
0x00069bb2 ldr r7, [r5, 0x34] | r7 = *((r5 + 0x34));
0x00069bb4 mov r3, r8 | r3 = r8;
0x00069bb6 strh.w r4, [sb, 0xa] | *((sb + 0xa)) = r4;
0x00069bba mov r2, sb | r2 = sb;
0x00069bbc mov r0, r5 | r0 = r5;
0x00069bbe str r6, [r5, 0x34] | *((r5 + 0x34)) = r6;
0x00069bc0 bl 0x69854 | fcn_00069854 (r0, r1, r2, r3);
0x00069bc4 ldrh.w r3, [sb, 0xa] | r3 = *((sb + 0xa));
0x00069bc8 str r7, [r5, 0x34] | *((r5 + 0x34)) = r7;
0x00069bca bic r3, r3, 0x100 | r3 = BIT_MASK (r3, 0x100);
0x00069bce strh.w r3, [sb, 0xa] | *((sb + 0xa)) = r3;
0x00069bd2 b 0x69a9e | goto label_1;
| label_17:
0x00069bd4 mov.w ip, -1 |
0x00069bd8 b 0x69a14 | goto label_0;
| label_12:
0x00069bda ldr.w r3, [r0, 0x210] | r3 = *((r0 + 0x210));
| if (r3 != 0) {
0x00069bde cbz r3, 0x69bec |
0x00069be0 bl 0x1c7bc | fcn_0001c7bc (r0, r1);
0x00069be4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00069be6 add r3, r7 | r3 += r7;
0x00069be8 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x00069bea b 0x69a98 | goto label_5;
| }
0x00069bec mov r0, r1 | r0 = r1;
0x00069bee bl 0x1c81c | fcn_0001c81c (r0);
0x00069bf2 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00069bf4 add r3, r7 | r3 += r7;
0x00069bf6 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x00069bf8 b 0x69a98 | goto label_5;
| label_16:
0x00069bfa movs r3, 0 | r3 = 0;
0x00069bfc ldrh r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x00069bfe udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x69c20 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00069c20 () | void fcn_00069c20 (int16_t arg_0h, arithmetic arg1, int16_t arg2, arithmetic arg3) {
| arithmetic var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int32_t var_10h;
| int32_t var_10h_2;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00069c20 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00069c24 sub sp, 0x2c |
0x00069c26 str r0, [sp] | *(sp) = r0;
0x00069c28 mov r4, r0 | r4 = r0;
0x00069c2a mov r5, r2 | r5 = r2;
0x00069c2c mov r2, r1 | r2 = r1;
0x00069c2e ldr r0, [pc, 0x1b0] |
0x00069c30 ldr r3, [pc, 0x1b0] | r3 = *(0x69de4);
0x00069c32 str r1, [sp, 4] | var_4h = r1;
0x00069c34 mov r1, r5 | r1 = r5;
0x00069c36 add r0, pc | r0 = 0xd3a1c;
0x00069c38 ldr r3, [r0, r3] |
0x00069c3a ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00069c3c ldr r3, [r3] | r3 = *(0xd3a1c);
0x00069c3e str r3, [sp, 0x24] | var_24h = r3;
0x00069c40 mov.w r3, 0 | r3 = 0;
0x00069c44 bl 0x36b24 | fcn_00036b24 (r0, r1, r2);
0x00069c48 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00069c4a lsls r3, r3, 0x19 | r3 <<= 0x19;
| if (r3 < r3) {
0x00069c4c bpl 0x69c7a |
0x00069c4e ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00069c50 ldr r1, [r3] | r1 = *(r3);
0x00069c52 ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x00069c54 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x00069c58 cmp r1, 0 |
| if (r1 != 0) {
0x00069c5a bne.w 0x69d9e | goto label_4;
| }
0x00069c5e ldr r3, [r3, 0x68] | r3 = *((r3 + 0x68));
0x00069c60 subs r2, 1 | r2--;
0x00069c62 add.w r2, r2, r2, lsl 2 | r2 += (r2 << 2);
0x00069c66 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00069c6a ldrb r2, [r3] | r2 = *(r3);
0x00069c6c cmp r2, 0x60 |
| if (r2 == 0x60) {
0x00069c6e beq.w 0x69dac | goto label_5;
| }
| label_2:
0x00069c72 cmp r2, 0x5f |
0x00069c74 itt eq |
| if (r2 != 0x5f) {
0x00069c76 moveq r2, 1 | r2 = 1;
| }
| if (r2 == 0x5f) {
0x00069c78 streq r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
| goto label_3;
| }
| }
| label_3:
0x00069c7a ldrsh.w r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x00069c7e cmp r3, 0 |
| if (r3 <= 0) {
0x00069c80 ble 0x69ca0 | goto label_6;
| }
0x00069c82 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00069c84 movs r0, 0xc | r0 = 0xc;
0x00069c86 smlabb r0, r3, r0, r2 | __asm ("smlabb r0, r3, r0, r2");
| do {
0x00069c8a ldrh r1, [r2, 0xa] | r1 = *((r2 + 0xa));
0x00069c8c adds r2, 0xc | r2 += 0xc;
0x00069c8e tst.w r1, 0x60 |
0x00069c92 itt ne |
| if ((r1 & 0x60) == 0) {
0x00069c94 orrne r1, r1, 0x80 | r1 |= 0x80;
| }
| if ((r1 & 0x60) != 0) {
0x00069c98 strh r1, [r2, -0x2] | *((r2 - 0x2)) = r1;
| }
0x00069c9c cmp r0, r2 |
0x00069c9e bne 0x69c8a |
| } while (r0 != r2);
| label_6:
0x00069ca0 ldr r2, [pc, 0x144] |
0x00069ca2 mov.w r8, 0 | r8 = 0;
0x00069ca6 ldr r1, [sp] | r1 = *(sp);
0x00069ca8 str r5, [sp, 0x20] | var_20h = r5;
0x00069caa add r2, pc | r2 = 0xd3a96;
0x00069cac strd r8, r8, [sp, 0x10] | __asm ("strd r8, r8, [var_10h]");
0x00069cb0 str r2, [sp, 0xc] | var_ch = r2;
0x00069cb2 ldr r2, [sp, 4] | r2 = var_4h;
0x00069cb4 rsbs r2, r2, 0 | r2 -= ;
0x00069cb6 str r2, [r1, 0x34] | *((r1 + 0x34)) = r2;
| label_0:
0x00069cb8 cmp r3, 0 |
| if (r3 <= 0) {
0x00069cba ble 0x69d4c | goto label_7;
| }
0x00069cbc movs r6, 0 | r6 = 0;
0x00069cbe add.w sb, sp, 8 | sb += var_8h;
0x00069cc2 mov sl, r6 | sl = r6;
0x00069cc4 mov fp, r6 |
0x00069cc6 mov r7, r6 | r7 = r6;
| do {
0x00069cc8 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x00069cca adds r4, r2, r6 | r4 = r2 + r6;
0x00069ccc ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x00069cce lsls r1, r3, 0x18 | r1 = r3 << 0x18;
| if (r1 < r3) {
0x00069cd0 bpl 0x69d1c |
0x00069cd2 orr r1, r3, 0x100 | r1 = r3 | 0x100;
0x00069cd6 strh r1, [r4, 0xa] | *((r4 + 0xa)) = r1;
0x00069cd8 strh.w r8, [sp, 0x1c] | var_1ch = r8;
0x00069cdc ldrh r2, [r4, 8] | r2 = *((r4 + 8));
0x00069cde cmp r2, 0 |
| if (r2 == 0) {
0x00069ce0 beq 0x69d6c | goto label_8;
| }
0x00069ce2 ldrb.w r1, [r5, 0x2b] | r1 = *((r5 + 0x2b));
0x00069ce6 cmp r1, 0 |
| if (r1 != 0) {
0x00069ce8 bne 0x69d6c | goto label_8;
| }
0x00069cea ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x00069cec cmp r1, 0 |
| if (r1 == 0) {
0x00069cee beq 0x69d6c | goto label_8;
| }
0x00069cf0 ldr r0, [r1] | r0 = *(r1);
0x00069cf2 cmp r0, r2 |
| if (r0 < r2) {
0x00069cf4 blt 0x69d6c | goto label_8;
| }
0x00069cf6 add.w r1, r1, r2, lsl 4 | r1 += (r2 << 4);
0x00069cfa ldr r1, [r1, -0x8] | r1 = *((r1 - 0x8));
0x00069cfe cmp r1, 0 |
| if (r1 == 0) {
0x00069d00 beq 0x69d6c | goto label_8;
| }
0x00069d02 mov r0, sb | r0 = sb;
0x00069d04 bl 0x30f3c | fcn_00030f3c (r0, r1);
0x00069d08 ldrh.w r1, [sp, 0x1c] | r1 = var_1ch;
0x00069d0c ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x00069d0e lsls r2, r1, 0x18 | r2 = r1 << 0x18;
0x00069d10 bic r3, r3, 0x100 | r3 = BIT_MASK (r3, 0x100);
0x00069d14 it mi |
| if (r2 >= r1) {
0x00069d16 movmi fp, r4 |
| }
0x00069d18 strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
| if (r2 >= r1) {
0x00069d1a bpl 0x69d72 | goto label_9;
| }
| }
| label_1:
0x00069d1c ldrsh.w r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x00069d20 adds r7, 1 | r7++;
0x00069d22 adds r6, 0xc | r6 += 0xc;
0x00069d24 cmp r3, r7 |
0x00069d26 bgt 0x69cc8 |
| } while (r3 > r7);
0x00069d28 cmp.w fp, 0 |
0x00069d2c ite eq |
| if (fp != 0) {
0x00069d2e moveq r0, 0 | r0 = 0;
| }
| if (fp == 0) {
0x00069d30 andne r0, sl, 1 | r0 = sl & 1;
| }
0x00069d34 cmp r0, 0 |
| if (r0 != 0) {
0x00069d36 bne 0x69cb8 | goto label_0;
| }
0x00069d38 cmp.w fp, 0 |
| if (fp != 0) {
0x00069d3c beq 0x69d4c |
0x00069d3e ldr r1, [pc, 0xac] |
0x00069d40 ldr.w r2, [fp] | r2 = *(fp);
0x00069d44 ldr r0, [sp] | r0 = *(sp);
0x00069d46 add r1, pc | r1 = 0xd3b38;
0x00069d48 bl 0x21598 | fcn_00021598 (r0, r1);
| }
| label_7:
0x00069d4c ldr r2, [sp] | r2 = *(sp);
0x00069d4e movs r3, 0 | r3 = 0;
0x00069d50 str r3, [r2, 0x34] | *((r2 + 0x34)) = r3;
0x00069d52 ldr r2, [pc, 0x9c] |
0x00069d54 ldr r3, [pc, 0x8c] | r3 = *(0x69de4);
0x00069d56 add r2, pc | r2 = 0xd3b4c;
0x00069d58 ldr r3, [r2, r3] | r3 = *(0xd3b4c);
0x00069d5a ldr r2, [r3] | r2 = *(0xd3b4c);
0x00069d5c ldr r3, [sp, 0x24] | r3 = var_24h;
0x00069d5e eors r2, r3 | r2 ^= r3;
0x00069d60 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00069d64 bne 0x69ddc | goto label_10;
| }
0x00069d66 add sp, 0x2c |
0x00069d68 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00069d6c bic r3, r3, 0x100 | r3 = BIT_MASK (r3, 0x100);
0x00069d70 strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
| label_9:
0x00069d72 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00069d74 sxth r1, r7 | __asm ("sxth r1, r7");
0x00069d76 lsls r3, r3, 0x1a | r3 <<= 0x1a;
| if (r3 < r3) {
0x00069d78 bpl 0x69d82 |
0x00069d7a mov r0, r5 | r0 = r5;
0x00069d7c bl 0xfdbc | r0 = fcn_0000fdbc (r0, r1);
0x00069d80 mov r1, r0 | r1 = r0;
| }
0x00069d82 ldr r3, [sp, 4] | r3 = var_4h;
0x00069d84 mov r2, r4 | r2 = r4;
0x00069d86 ldr r0, [sp] | r0 = *(sp);
0x00069d88 mov.w sl, 1 | sl = 1;
0x00069d8c adds r3, r1, r3 | r3 = r1 + r3;
0x00069d8e mov r1, r5 | r1 = r5;
0x00069d90 bl 0x69854 | fcn_00069854 (r0, r1, r2, r3);
0x00069d94 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x00069d96 bic r3, r3, 0x80 | r3 = BIT_MASK (r3, 0x80);
0x00069d9a strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
0x00069d9c b 0x69d1c | goto label_1;
| label_4:
0x00069d9e ldr r3, [pc, 0x54] |
0x00069da0 add r3, pc | r3 = 0xd3b9a;
0x00069da2 ldrb r2, [r3, 4] | r2 = *((r3 + 4));
0x00069da4 adds r3, 4 | r3 += 4;
0x00069da6 cmp r2, 0x60 |
| if (r2 != 0x60) {
0x00069da8 bne.w 0x69c72 | goto label_2;
| }
| label_5:
0x00069dac ldr r0, [r3, 0x10] | r0 = *((r3 + 0x10));
0x00069dae ldrb r3, [r0] | r3 = *(r0);
0x00069db0 cmp r3, 0 |
| if (r3 == 0) {
0x00069db2 beq.w 0x69c7a | goto label_3;
| }
0x00069db6 movs r1, 0 | r1 = 0;
0x00069db8 mov r4, r0 | r4 = r0;
0x00069dba mov r2, r1 | r2 = r1;
0x00069dbc movs r6, 0x40 | r6 = 0x40;
| do {
0x00069dbe ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00069dc0 add r3, r1 | r3 += r1;
0x00069dc2 ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x00069dc4 lsls r7, r3, 0x1a | r7 = r3 << 0x1a;
| if (r7 >= r3) {
0x00069dc6 bmi 0x69dd0 |
0x00069dc8 adds r2, 1 | r2++;
0x00069dca lsls r7, r3, 0x19 | r7 = r3 << 0x19;
0x00069dcc it mi |
| if (r7 < r3) {
0x00069dce strbmi r6, [r4] | *(r4) = r6;
| goto label_11;
| }
| }
| label_11:
0x00069dd0 ldrb r3, [r0, r2] | r3 = *((r0 + r2));
0x00069dd2 adds r4, r0, r2 | r4 = r0 + r2;
0x00069dd4 adds r1, 0xc | r1 += 0xc;
0x00069dd6 cmp r3, 0 |
0x00069dd8 bne 0x69dbe |
| } while (r3 != 0);
0x00069dda b 0x69c7a | goto label_3;
| label_10:
0x00069ddc blx 0x883c | fcn_0000883c ();
0x00069de0 orn r0, r2, 5 | r0 = r2 | 5;
| r0 = ~r0;
0x00069de4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00069de6 movs r0, r0 |
0x00069de8 strh r7, [r0] | *(r0) = r7;
0x00069dea invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6a028 */
| #include <stdint.h>
|
; (fcn) fcn.0006a028 () | void fcn_0006a028 (int16_t arg_1h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_3;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006a028 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0006a02c mov r8, r2 | r8 = r2;
0x0006a02e ldr r2, [pc, 0x1b8] |
0x0006a030 sub sp, 0x14 |
0x0006a032 ldr r3, [pc, 0x1b8] | r3 = *(0x6a1ee);
0x0006a034 add r2, pc | r2 = 0xd4222;
0x0006a036 ldr r6, [r1, 8] | r6 = *((r1 + 8));
0x0006a038 ldr r3, [r2, r3] |
0x0006a03a ldr r3, [r3] | r3 = *(0xd4222);
0x0006a03c str r3, [sp, 0xc] | var_ch = r3;
0x0006a03e mov.w r3, 0 | r3 = 0;
0x0006a042 cmp r6, 0 |
| if (r6 != 0) {
0x0006a044 bne 0x6a0da | goto label_3;
| }
0x0006a046 ldr r7, [r1, 0x3c] | r7 = *((r1 + 0x3c));
0x0006a048 mov r5, r1 | r5 = r1;
0x0006a04a cmp r7, 0 |
| if (r7 == 0) {
0x0006a04c beq 0x6a0da | goto label_3;
| }
0x0006a04e ldr r6, [r0, 0x2c] | r6 = *((r0 + 0x2c));
0x0006a050 mov r4, r0 | r4 = r0;
0x0006a052 ldr.w sb, [r0, 8] | sb = *((r0 + 8));
0x0006a056 adds r6, 1 | r6++;
0x0006a058 str r6, [r0, 0x2c] | *((r0 + 0x2c)) = r6;
0x0006a05a str r6, [r1, 8] | *((r1 + 8)) = r6;
0x0006a05c cmp.w sb, 0 |
| if (sb == 0) {
0x0006a060 beq 0x6a0f4 | goto label_4;
| }
0x0006a062 ldr.w sl, [r7, 0xc] | sl = *((r7 + 0xc));
0x0006a066 add r1, sp, 8 | r1 += var_8h;
0x0006a068 mov r0, sl | r0 = sl;
0x0006a06a bl 0xa8b8 | r0 = fcn_0000a8b8 (r0, r1);
0x0006a06e cmp r0, 0 |
| if (r0 != 0) {
0x0006a070 bne 0x6a112 | goto label_5;
| }
| do {
0x0006a072 ldr r3, [r4, 8] | r3 = *((r4 + 8));
| if (r3 != 0) {
0x0006a074 cbz r3, 0x6a080 |
0x0006a076 mov r1, sl | r1 = sl;
0x0006a078 mov r2, r6 | r2 = r6;
0x0006a07a mov r0, r4 | r0 = r4;
0x0006a07c bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
| }
0x0006a080 mov.w sl, 0 | sl = 0;
0x0006a084 mov r2, r6 | r2 = r6;
0x0006a086 mov r3, sl | r3 = sl;
0x0006a088 movs r1, 0xc | r1 = 0xc;
0x0006a08a mov r0, sb | r0 = sb;
0x0006a08c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0006a090 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006a094 mov r3, r8 | r3 = r8;
0x0006a096 mov r2, r6 | r2 = r6;
0x0006a098 movs r1, 0x10 | r1 = 0x10;
0x0006a09a mov r0, sb | r0 = sb;
0x0006a09c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0006a0a0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_0:
0x0006a0a4 ldr r1, [r7, 0x10] | r1 = *((r7 + 0x10));
| if (r1 != 0) {
0x0006a0a6 cbz r1, 0x6a0da |
0x0006a0a8 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0006a0aa ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0006a0ac adds r7, r3, 1 | r7 = r3 + 1;
0x0006a0ae str r7, [r5, 0xc] | *((r5 + 0xc)) = r7;
0x0006a0b0 adds r5, r3, 2 | r5 = r3 + 2;
0x0006a0b2 str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
| if (r2 != 0) {
0x0006a0b4 cbz r2, 0x6a0be |
0x0006a0b6 mov r0, r4 | r0 = r4;
0x0006a0b8 mov r2, r7 | r2 = r7;
0x0006a0ba bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
| }
0x0006a0be movs r3, 0 | r3 = 0;
0x0006a0c0 mov r2, r7 | r2 = r7;
0x0006a0c2 movs r1, 0xc | r1 = 0xc;
0x0006a0c4 str r3, [sp] | *(sp) = r3;
0x0006a0c6 mov r0, sb | r0 = sb;
0x0006a0c8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006a0cc mov r3, r5 | r3 = r5;
0x0006a0ce mov r2, r6 | r2 = r6;
0x0006a0d0 movs r1, 0xa0 | r1 = 0xa0;
0x0006a0d2 mov r0, sb | r0 = sb;
0x0006a0d4 str r7, [sp] | *(sp) = r7;
0x0006a0d6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
| label_3:
0x0006a0da ldr r2, [pc, 0x114] |
0x0006a0dc ldr r3, [pc, 0x10c] | r3 = *(0x6a1ec);
0x0006a0de add r2, pc | r2 = 0xd42d4;
0x0006a0e0 ldr r3, [r2, r3] | r3 = *(0xd42d4);
0x0006a0e2 ldr r2, [r3] | r2 = *(0xd42d4);
0x0006a0e4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006a0e6 eors r2, r3 | r2 ^= r3;
0x0006a0e8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006a0ec bne 0x6a1e2 | goto label_6;
| }
0x0006a0ee add sp, 0x14 |
0x0006a0f0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x0006a0f4 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0006a0f6 cmp r3, 0 |
| if (r3 == 0) {
0x0006a0f8 beq 0x6a18e | goto label_7;
| }
| label_1:
0x0006a0fa mov r0, r4 | r0 = r4;
0x0006a0fc bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x0006a100 ldr.w sl, [r7, 0xc] | sl = *((r7 + 0xc));
0x0006a104 mov sb, r0 | sb = r0;
0x0006a106 add r1, sp, 8 | r1 += var_8h;
0x0006a108 mov r0, sl | r0 = sl;
0x0006a10a bl 0xa8b8 | r0 = fcn_0000a8b8 (r0, r1);
0x0006a10e cmp r0, 0 |
0x0006a110 beq 0x6a072 |
| } while (r0 == 0);
| label_5:
0x0006a112 ldr.w fp, [sp, 8] | fp = var_8h;
0x0006a116 mov.w sl, 0 | sl = 0;
0x0006a11a mov r3, r6 | r3 = r6;
0x0006a11c movs r1, 0x47 | r1 = 0x47;
0x0006a11e mov r0, sb | r0 = sb;
0x0006a120 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0006a124 mov r2, fp | r2 = fp;
0x0006a126 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006a12a cmp fp, sl |
| if (fp == sl) {
0x0006a12c beq 0x6a19c | goto label_8;
| }
| if (fp < sl) {
0x0006a12e blt 0x6a0a4 | goto label_0;
| }
0x0006a130 cmp.w fp, 7 |
0x0006a134 ldrsh.w r2, [r5, 2] | r2 = *((r5 + 2));
0x0006a138 asr.w r0, fp, 0x1f | r0 = fp >> 0x1f;
| if (fp > 7) {
0x0006a13c bgt 0x6a1a6 | goto label_9;
| }
0x0006a13e add.w r3, fp, -1 | r3 = fp + -1;
0x0006a142 orrs r3, r0 | r3 |= r0;
| if (r3 != r0) {
0x0006a144 beq 0x6a17c |
0x0006a146 adds.w r3, fp, fp | r3 = fp + fp;
0x0006a14a adcs r0, r0 | __asm ("adcs r0, r0");
0x0006a14c cmp r3, 8 |
0x0006a14e sbcs r0, r0, 0 | __asm ("sbcs r0, r0, 0");
0x0006a152 ite lo |
| if (r3 >= 8) {
0x0006a154 movlo r1, 0x14 | r1 = 0x14;
| }
| if (r3 < 8) {
0x0006a156 movhs r1, 0x1e | r1 = 0x1e;
| }
0x0006a158 sub.w sl, r1, 0xa | sl = r1 - 0xa;
0x0006a15c it lo |
| if (r3 >= 8) {
0x0006a15e lsllo r3, fp, 2 | r3 = fp << 2;
| }
0x0006a162 uxth.w sl, sl | sl = (int16_t) sl;
| label_2:
0x0006a166 ldr r1, [pc, 0x8c] |
0x0006a168 and r3, r3, 7 | r3 &= 7;
0x0006a16c add r1, pc | r1 = 0xd4366;
0x0006a16e add.w r3, r1, r3, lsl 1 | r3 = r1 + (r3 << 1);
0x0006a172 ldrh.w r3, [r3, 0x128] | r3 = *((r3 + 0x128));
0x0006a176 add sl, r3 | sl += r3;
0x0006a178 sxth.w sl, sl | __asm ("sxth.w sl, sl");
| }
0x0006a17c cmp r2, sl |
| if (r2 <= sl) {
0x0006a17e ble 0x6a0a4 | goto label_0;
| }
0x0006a180 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0006a182 strh.w sl, [r5, 2] | *((r5 + 2)) = sl;
0x0006a186 orr r3, r3, 0x4000 | r3 |= 0x4000;
0x0006a18a str r3, [r5, 4] | *((r5 + 4)) = r3;
0x0006a18c b 0x6a0a4 | goto label_0;
| label_7:
0x0006a18e ldr r3, [r0] | r3 = *(r0);
0x0006a190 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0006a192 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0006a194 itt pl |
| if (r3 < r3) {
0x0006a196 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0006a198 strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x0006a19a b 0x6a0fa | goto label_1;
| label_8:
0x0006a19c mov r1, r8 | r1 = r8;
0x0006a19e mov r0, sb | r0 = sb;
0x0006a1a0 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x0006a1a4 b 0x6a0a4 | goto label_0;
| label_9:
0x0006a1a6 clz ip, r0 |
| if (r0 == 0) {
0x0006a1aa cbnz r0, 0x6a1b4 |
0x0006a1ac clz r1, fp | r1 &= fp;
0x0006a1b0 add.w ip, r1, 0x20 |
| }
0x0006a1b4 rsb.w r1, ip, 0x3c | r1 = 0x3c - ip;
0x0006a1b8 lsr.w r3, fp, r1 | r3 = fp >> r1;
0x0006a1bc add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x0006a1c0 lsl.w sl, r1, 1 | sl = r1 << 1;
0x0006a1c4 sub.w r1, ip, 0x1c | r1 = ip - 0x1c;
0x0006a1c8 lsl.w r1, r0, r1 | r1 = r0 << r1;
0x0006a1cc add.w sl, sl, 0x1e | sl += 0x1e;
0x0006a1d0 orrs r3, r1 | r3 |= r1;
0x0006a1d2 rsb.w r1, ip, 0x1c | r1 = 0x1c - ip;
0x0006a1d6 lsr.w r1, r0, r1 | r1 = r0 >> r1;
0x0006a1da uxth.w sl, sl | sl = (int16_t) sl;
0x0006a1de orrs r3, r1 | r3 |= r1;
0x0006a1e0 b 0x6a166 | goto label_2;
| label_6:
0x0006a1e2 blx 0x883c | fcn_0000883c ();
0x0006a1e6 nop |
0x0006a1e8 stcl p0, c0, [r4], -0x14 | __asm ("stcl p0, c0, [r4], -0x14");
0x0006a1ec lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0006a1ee movs r0, r0 |
0x0006a1f0 subs.w r0, sl, r5 | r0 = sl - r5;
0x0006a1f4 ldr r5, [pc, 0x380] | r5 = *(0x6a578);
0x0006a1f6 movs r5, r0 | r5 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6a27c */
| #include <stdint.h>
|
; (fcn) fcn.0006a27c () | void fcn_0006a27c (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int32_t var_18h;
| int32_t var_18h_2;
| int32_t var_20h;
| int32_t var_20h_2;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_7ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006a27c mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, aav.0x000000ff");
0x0006a280 mov r6, r2 | r6 = r2;
0x0006a282 ldr r2, [pc, 0x124] |
0x0006a284 sub sp, 0x84 |
0x0006a286 mov r4, r0 | r4 = r0;
0x0006a288 ldr r3, [pc, 0x120] | r3 = *(0x6a3ac);
0x0006a28a add r2, pc | r2 = 0xd4638;
0x0006a28c ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0006a28e str r1, [sp, 0xc] | var_ch = r1;
0x0006a290 ldr r3, [r2, r3] |
0x0006a292 ldr r3, [r3] | r3 = *(0xd4638);
0x0006a294 str r3, [sp, 0x7c] | var_7ch = r3;
0x0006a296 mov.w r3, 0 | r3 = 0;
0x0006a29a cmp r5, 0 |
| if (r5 == 0) {
0x0006a29c beq 0x6a36e | goto label_5;
| }
| label_1:
0x0006a29e ldr r7, [r4, 0x24] | r7 = *((r4 + 0x24));
| if (r7 != 0) {
0x0006a2a0 cbnz r7, 0x6a2c2 | goto label_0;
| }
0x0006a2a2 ldr r2, [sp, 0xc] | r2 = var_ch;
| if (r2 == 0) {
0x0006a2a4 cbz r2, 0x6a2e8 | goto label_6;
| }
0x0006a2a6 add r3, sp, 0xc | r3 += var_ch;
0x0006a2a8 mov r1, r2 | r1 = r2;
0x0006a2aa mov r0, r4 | r0 = r4;
0x0006a2ac bl 0x241a8 | r0 = fcn_000241a8 (r0, r1, r2, r3);
0x0006a2b0 subs r3, r0, 1 | r3 = r0 - 1;
0x0006a2b2 mov r8, r0 | r8 = r0;
0x0006a2b4 it ne |
| if (r3 == r0) {
0x0006a2b6 movne r3, 1 | r3 = 1;
| }
0x0006a2b8 cmp r0, 0 |
0x0006a2ba it lt |
| if (r0 >= 0) {
0x0006a2bc movlt r3, 0 | r3 = 0;
| }
0x0006a2be cmp r3, 0 |
| if (r3 != 0) {
0x0006a2c0 bne 0x6a38a | goto label_7;
| }
| if (r6 != 0) {
| label_0:
0x0006a2c2 cbnz r6, 0x6a2de | void (*0x6a2de)() ();
| }
| label_6:
0x0006a2e8 mov r8, r7 | r8 = r7;
0x0006a2ea mov.w sb, 1 | sb = 1;
| label_3:
0x0006a2ee cmp r6, 0 |
| if (r6 == 0) {
0x0006a2f0 beq 0x6a384 | goto label_8;
| }
0x0006a2f2 add r3, sp, 0x30 | r3 += var_30h;
0x0006a2f4 movs r1, 0 | r1 = 0;
0x0006a2f6 mov r0, r3 | r0 = r3;
0x0006a2f8 movs r2, 0x48 | r2 = 0x48;
0x0006a2fa strd r1, r1, [sp, 0x18] | __asm ("strd r1, r1, [var_18h]");
0x0006a2fe strd r1, r1, [sp, 0x20] | __asm ("strd r1, r1, [var_20h]");
0x0006a302 str r1, [sp, 0x2c] | var_2ch = r1;
0x0006a304 blx 0x839c | fcn_0000839c ();
0x0006a308 mov.w r3, 0x10000 | r3 = 0x10000;
0x0006a30c str r0, [sp, 0x14] | var_14h = r0;
0x0006a30e mov r1, r6 | r1 = r6;
0x0006a310 add r0, sp, 0x10 | r0 += var_10h;
0x0006a312 str r4, [sp, 0x10] | var_10h = r4;
0x0006a314 str r3, [sp, 0x28] | var_28h = r3;
0x0006a316 bl 0x3119c | r0 = fcn_0003119c (r0, r1);
| if (r0 == 0) {
0x0006a31a cbnz r0, 0x6a330 |
0x0006a31c ldr r7, [r4, 0x2c] | r7 = *((r4 + 0x2c));
0x0006a31e ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0006a320 adds r7, 1 | r7++;
0x0006a322 str r7, [r4, 0x2c] | *((r4 + 0x2c)) = r7;
| if (r3 == 0) {
0x0006a324 cbz r3, 0x6a330 | goto label_9;
| }
0x0006a326 mov r2, r7 | r2 = r7;
0x0006a328 mov r1, r6 | r1 = r6;
0x0006a32a mov r0, r4 | r0 = r4;
0x0006a32c bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
| }
| label_9:
0x0006a330 mov r3, r7 | r3 = r7;
0x0006a332 movs r2, 0 | r2 = 0;
0x0006a334 str r2, [sp] | *(sp) = r2;
| label_2:
0x0006a336 mov r2, r8 | r2 = r8;
0x0006a338 movs r1, 5 | r1 = 5;
0x0006a33a mov r0, r5 | r0 = r5;
0x0006a33c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006a340 ldr.w r3, [r5, 0x98] | r3 = *((r5 + 0x98));
0x0006a344 orr.w r3, sb, r3 | r3 = sb | r3;
0x0006a348 str.w r3, [r5, 0x98] | __asm ("str.w r3, [r5, 0x98]");
0x0006a34c ldr r3, [r5] | r3 = *(r5);
0x0006a34e ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0006a350 add.w r3, r3, r8, lsl 4 | r3 += (r8 << 4);
0x0006a354 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006a356 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x0006a358 cmp r3, 0 |
| if (r3 == 0) {
0x0006a35a beq 0x6a2c2 | goto label_0;
| }
| label_5:
0x0006a36e ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
| if (r3 == 0) {
0x0006a370 cbz r3, 0x6a394 | goto label_10;
| }
| label_4:
0x0006a372 mov r0, r4 | r0 = r4;
0x0006a374 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x0006a378 mov r5, r0 | r5 = r0;
0x0006a37a cmp r0, 0 |
| if (r0 != 0) {
0x0006a37c bne 0x6a29e | goto label_1;
| }
0x0006a37e cmp r6, 0 |
| if (r6 == 0) {
0x0006a380 beq 0x6a2c4 | void (*0x6a2c4)() ();
| }
0x0006a382 b 0x6a2de | void (*0x6a2de)() ();
| label_8:
0x0006a384 mov r3, r6 | r3 = r6;
0x0006a386 str r6, [sp] | *(sp) = r6;
0x0006a388 b 0x6a336 | goto label_2;
| label_7:
0x0006a38a mov.w sb, 1 | sb = 1;
0x0006a38e lsl.w sb, sb, r0 | sb <<= r0;
0x0006a392 b 0x6a2ee | goto label_3;
| label_10:
0x0006a394 ldr r3, [r0] | r3 = *(r0);
0x0006a396 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0006a398 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0006a39a itt pl |
| if (r3 < r3) {
0x0006a39c movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0006a39e strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x0006a3a0 b 0x6a372 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6a3b4 */
| #include <stdint.h>
|
; (fcn) fcn.0006a3b4 () | void fcn_0006a3b4 (int16_t arg_8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_1ch;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_3ch;
| int16_t var_14h;
| int16_t var_68h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006a3b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006a3b8 mov r7, r2 | r7 = r2;
0x0006a3ba ldr r2, [pc, 0x214] |
0x0006a3bc mov fp, r3 |
0x0006a3be sub sp, 0x44 |
0x0006a3c0 ldr r3, [pc, 0x210] | r3 = *(0x6a5d4);
0x0006a3c2 add r2, pc | r2 = 0xd4998;
0x0006a3c4 ldr r5, [sp, 0x68] | r5 = var_68h;
0x0006a3c6 ldrd r8, sb, [sp, 0x6c] | __asm ("ldrd r8, sb, [var_6ch]");
0x0006a3ca ldr r3, [r2, r3] |
0x0006a3cc ldr r2, [r0, 0x24] | r2 = *((r0 + 0x24));
0x0006a3ce ldr.w sl, [r0] | sl = *(r0);
0x0006a3d2 ldr r3, [r3] | r3 = *(0xd4998);
0x0006a3d4 str r3, [sp, 0x3c] | var_3ch = r3;
0x0006a3d6 mov.w r3, 0 | r3 = 0;
| if (r2 == 0) {
0x0006a3da cbz r2, 0x6a41e | goto label_9;
| }
| if (r5 != 0) {
| label_3:
0x0006a3dc cbz r5, 0x6a3e6 |
| label_4:
0x0006a3de mov r1, r5 | r1 = r5;
0x0006a3e0 mov r0, sl | r0 = sl;
0x0006a3e2 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
| label_2:
0x0006a3e6 cmp.w r8, 0 |
0x0006a3ea beq 0x6a3f4 |
| while (r5 == 0) {
| label_0:
0x0006a3ec mov r1, r8 | r1 = r8;
0x0006a3ee mov r0, sl | r0 = sl;
0x0006a3f0 bl 0x1a57c | fcn_0001a57c (r0, r1);
0x0006a3f4 cmp.w sb, 0 |
| if (sb != 0) {
0x0006a3f8 beq 0x6a402 |
| label_6:
0x0006a3fa mov r1, sb | r1 = sb;
0x0006a3fc mov r0, sl | r0 = sl;
0x0006a3fe bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x0006a402 ldr r2, [pc, 0x1d4] |
0x0006a404 ldr r3, [pc, 0x1cc] | r3 = *(0x6a5d4);
0x0006a406 add r2, pc | r2 = 0xd49e4;
0x0006a408 ldr r3, [r2, r3] | r3 = *(0xd49e4);
0x0006a40a ldr r2, [r3] | r2 = *(0xd49e4);
0x0006a40c ldr r3, [sp, 0x3c] | r3 = var_68h;
0x0006a40e eors r2, r3 | r2 ^= r3;
0x0006a410 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006a414 bne.w 0x6a5c0 | goto label_10;
| }
0x0006a418 add sp, 0x44 |
0x0006a41a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x0006a41e mov r4, r0 | r4 = r0;
0x0006a420 mov r6, r1 | r6 = r1;
0x0006a422 add r3, sp, 0x1c | r3 += var_1ch;
0x0006a424 strd r0, r2, [sp, 0x1c] | __asm ("strd r0, r2, [sp, 0x1c]");
0x0006a428 strd r2, r2, [sp, 0x24] | __asm ("strd r2, r2, [sp, 0x24]");
0x0006a42c strd r2, r2, [sp, 0x2c] | __asm ("strd r2, r2, [sp, 0x2c]");
0x0006a430 strd r2, r2, [sp, 0x34] | __asm ("strd r2, r2, [sp, 0x34]");
| if (r5 != 0) {
0x0006a434 cbz r5, 0x6a442 |
0x0006a436 ldrb r2, [r5] | r2 = *(r5);
0x0006a438 cmp r2, 0x3b |
0x0006a43a itt eq |
| if (r2 != 0x3b) {
0x0006a43c moveq r2, 0x75 | r2 = 0x75;
| }
| if (r2 != 0x3b) {
0x0006a43e strbeq r2, [r5] | *(r5) = r2;
| }
| if (r2 != 0x3b) {
0x0006a440 bne 0x6a474 | goto label_11;
| }
| }
| label_1:
0x0006a442 cmp.w r8, 0 |
| if (r8 == 0) {
0x0006a446 beq 0x6a48e | goto label_12;
| }
0x0006a448 ldrb.w r2, [r8] | r2 = *(r8);
0x0006a44c cmp r2, 0x3b |
0x0006a44e itt eq |
| if (r2 != 0x3b) {
0x0006a450 moveq r2, 0x75 | r2 = 0x75;
| }
| if (r2 != 0x3b) {
0x0006a452 strbeq r2, [r8] | *(r8) = r2;
| }
| if (r2 == 0x3b) {
0x0006a456 beq 0x6a48e | goto label_12;
| }
0x0006a458 mov r0, r3 | r0 = r3;
0x0006a45a mov r1, r8 | r1 = r8;
0x0006a45c str r3, [sp, 0x14] | var_14h = r3;
0x0006a45e bl 0x3119c | fcn_0003119c (r0, r1);
0x0006a462 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r0 == 0) {
0x0006a464 cbz r0, 0x6a48e | goto label_12;
| }
0x0006a466 cmp r5, 0 |
0x0006a468 beq 0x6a3ec |
| }
0x0006a46a mov r1, r5 | r1 = r5;
0x0006a46c mov r0, sl | r0 = sl;
0x0006a46e bl 0x1a57c | fcn_0001a57c (r0, r1);
0x0006a472 b 0x6a3ec | goto label_0;
| label_11:
0x0006a474 mov r0, r3 | r0 = r3;
0x0006a476 mov r1, r5 | r1 = r5;
0x0006a478 str r3, [sp, 0x14] | var_14h = r3;
0x0006a47a bl 0x3119c | fcn_0003119c (r0, r1);
0x0006a47e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006a480 cmp r0, 0 |
| if (r0 == 0) {
0x0006a482 beq 0x6a442 | goto label_1;
| }
0x0006a484 mov r1, r5 | r1 = r5;
0x0006a486 mov r0, sl | r0 = sl;
0x0006a488 bl 0x1a57c | fcn_0001a57c (r0, r1);
0x0006a48c b 0x6a3e6 | goto label_2;
| label_12:
0x0006a48e cmp.w sb, 0 |
| if (sb != 0) {
0x0006a492 beq 0x6a4a4 |
0x0006a494 ldrb.w r2, [sb] | r2 = *(sb);
0x0006a498 cmp r2, 0x3b |
0x0006a49a itt eq |
| if (r2 != 0x3b) {
0x0006a49c moveq r3, 0x75 | r3 = 0x75;
| }
| if (r2 != 0x3b) {
0x0006a49e strbeq r3, [sb] | *(sb) = r3;
| }
| if (r2 != 0x3b) {
0x0006a4a2 bne 0x6a564 | goto label_13;
| }
| }
| label_5:
0x0006a4a4 cmp.w fp, 0 |
| if (fp == 0) {
0x0006a4a8 beq 0x6a4ca | goto label_14;
| }
0x0006a4aa ldrb.w r3, [fp] | r3 = *(fp);
0x0006a4ae mov r1, r6 | r1 = r6;
0x0006a4b0 mov r0, r4 | r0 = r4;
0x0006a4b2 cmp r3, 0x75 |
0x0006a4b4 mov.w r3, 0 | r3 = 0;
0x0006a4b8 ite eq |
| if (r3 != 0x75) {
0x0006a4ba ldreq r2, [fp, 8] | r2 = *(arg_8h);
| }
| if (r3 != 0x75) {
0x0006a4be movs r2, 0 | r2 = 0;
| }
0x0006a4c0 str r3, [sp] | *(sp) = r3;
0x0006a4c2 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x0006a4c6 cmp r0, 0 |
| if (r0 != 0) {
0x0006a4c8 bne 0x6a3dc | goto label_3;
| }
| label_14:
0x0006a4ca ldr.w fp, [r4, 8] | fp = *((r4 + 8));
0x0006a4ce mov r2, fp | r2 = fp;
0x0006a4d0 cmp.w fp, 0 |
| if (fp == 0) {
0x0006a4d4 beq 0x6a590 | goto label_15;
| }
| label_8:
0x0006a4d6 add.w r3, r4, 0x1c | r3 = r4 + 0x1c;
0x0006a4da vld1.32 {d7}, [r3] | __asm ("vld1.32 {d7}, [r3]");
0x0006a4de vmov r1, s14 | __asm ("vmov r1, s14");
0x0006a4e2 cmp r1, 3 |
| if (r1 <= 3) {
0x0006a4e4 ble 0x6a584 | goto label_16;
| }
0x0006a4e6 vldr d16, [pc, 0xe0] | __asm ("vldr d16, aav.0x000000ff");
0x0006a4ea vadd.i32 d16, d7, d16 | __asm ("vadd.i32 d16, d7, d16");
0x0006a4ee vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0006a4f2 add r3, sp, 0x14 | r3 += var_14h;
0x0006a4f4 vst1.32 {d7[1]}, [r3] | __asm ("vst1.32 {d7[1]}, [r3]");
| if (r2 != 0) {
| label_7:
0x0006a4f8 cbz r2, 0x6a524 |
0x0006a4fa ldr r2, [sp, 0x14] | r2 = var_14h;
0x0006a4fc mov r1, r5 | r1 = r5;
0x0006a4fe mov r0, r4 | r0 = r4;
0x0006a500 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x0006a504 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0006a506 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0006a508 adds r2, 1 | r2++;
| if (r3 == 0) {
0x0006a50a cbz r3, 0x6a524 | goto label_17;
| }
0x0006a50c mov r1, r8 | r1 = r8;
0x0006a50e mov r0, r4 | r0 = r4;
0x0006a510 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x0006a514 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0006a516 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0006a518 adds r2, 2 | r2 += 2;
| if (r3 == 0) {
0x0006a51a cbz r3, 0x6a524 | goto label_17;
| }
0x0006a51c mov r1, sb | r1 = sb;
0x0006a51e mov r0, r4 | r0 = r4;
0x0006a520 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
| }
| label_17:
0x0006a524 cmp.w fp, 0 |
| if (fp == 0) {
0x0006a528 beq.w 0x6a3dc | goto label_3;
| }
0x0006a52c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006a52e mov r0, r4 | r0 = r4;
0x0006a530 str r7, [sp, 4] | var_4h = r7;
0x0006a532 movs r4, 0 | r4 = 0;
0x0006a534 ldrsb.w r2, [r7] | r2 = *(r7);
0x0006a538 mov r1, r4 | r1 = r4;
0x0006a53a adds r3, 3 | r3 += 3;
0x0006a53c str r4, [sp, 8] | var_8h = r4;
0x0006a53e str r2, [sp] | *(sp) = r2;
0x0006a540 subs r2, r3, r2 | r2 = r3 - r2;
0x0006a542 bl 0x2f54c | fcn_0002f54c (r0, r1, r2, r3, r4, r5, r6);
0x0006a546 sub.w r2, r6, 0x18 | r2 = r6 - 0x18;
0x0006a54a mov r0, fp | r0 = fp;
0x0006a54c clz r2, r2 | r2 &= r2;
0x0006a550 mov r3, r4 | r3 = r4;
0x0006a552 lsrs r2, r2, 5 | r2 >>= 5;
0x0006a554 movs r1, 0xa6 | r1 = 0xa6;
0x0006a556 str r4, [sp] | *(sp) = r4;
0x0006a558 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006a55c cmp r5, 0 |
| if (r5 != 0) {
0x0006a55e bne.w 0x6a3de | goto label_4;
| }
0x0006a562 b 0x6a3e6 | goto label_2;
| label_13:
0x0006a564 mov r0, r3 | r0 = r3;
0x0006a566 mov r1, sb | r1 = sb;
0x0006a568 bl 0x3119c | r0 = fcn_0003119c (r0, r1);
0x0006a56c cmp r0, 0 |
| if (r0 == 0) {
0x0006a56e beq 0x6a4a4 | goto label_5;
| }
| if (r5 == 0) {
0x0006a570 cbz r5, 0x6a5ae | goto label_18;
| }
0x0006a572 mov r1, r5 | r1 = r5;
0x0006a574 mov r0, sl | r0 = sl;
0x0006a576 bl 0x1a57c | fcn_0001a57c (r0, r1);
0x0006a57a cmp.w r8, 0 |
| if (r8 != 0) {
0x0006a57e bne.w 0x6a3ec | goto label_0;
| }
0x0006a582 b 0x6a3fa | goto label_6;
| label_16:
0x0006a584 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0006a586 adds r1, r3, 1 | r1 = r3 + 1;
0x0006a588 adds r3, 4 | r3 += 4;
0x0006a58a str r1, [sp, 0x14] | var_14h = r1;
0x0006a58c str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0006a58e b 0x6a4f8 | goto label_7;
| label_15:
0x0006a590 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0006a592 cbz r3, 0x6a5a0 |
| while (1) {
0x0006a594 mov r0, r4 | r0 = r4;
0x0006a596 bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x0006a59a ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0006a59c mov fp, r0 |
0x0006a59e b 0x6a4d6 | goto label_8;
0x0006a5a0 ldr r3, [r4] | r3 = *(r4);
0x0006a5a2 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0006a5a4 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0006a5a6 itt pl |
| if (r3 < r3) {
0x0006a5a8 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0006a5aa strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x0006a5ac b 0x6a594 |
| }
| label_18:
0x0006a5ae cmp.w r8, 0 |
| if (r8 == 0) {
0x0006a5b2 beq.w 0x6a3fa | goto label_6;
| }
0x0006a5b6 mov r1, r8 | r1 = r8;
0x0006a5b8 mov r0, sl | r0 = sl;
0x0006a5ba bl 0x1a57c | fcn_0001a57c (r0, r1);
0x0006a5be b 0x6a3fa | goto label_6;
| label_10:
0x0006a5c0 blx 0x883c | fcn_0000883c ();
0x0006a5c4 nop.w |
0x0006a5c8 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6a5dc */
| #include <stdint.h>
|
; (fcn) fcn.0006a5dc () | void fcn_0006a5dc (arithmetic arg1, int16_t arg2, arithmetic arg3) {
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006a5dc ssub16mi fp, r6, r0 | __asm ("ssub16mi fp, r6, r0");
0x0006a5e0 ldr r2, [pc, 0xdc] |
0x0006a5e2 sub sp, 0x28 |
0x0006a5e4 mov r5, r0 | r5 = r0;
0x0006a5e6 ldr r3, [pc, 0xdc] | r3 = *(0x6a6c6);
0x0006a5e8 add r2, pc | r2 = 0xd4cac;
0x0006a5ea ldr r3, [r2, r3] |
0x0006a5ec ldr r3, [r3] | r3 = *(0xd4cac);
0x0006a5ee str r3, [sp, 0x24] | var_24h_2 = r3;
0x0006a5f0 mov.w r3, 0 | r3 = 0;
| if (r1 != 0) {
0x0006a5f4 cbnz r1, 0x6a604 | goto label_2;
| }
0x0006a5f6 b 0x6a616 | goto label_1;
| do {
0x0006a5f8 lsls r3, r3, 0xc | r3 <<= 0xc;
0x0006a5fa itet mi |
| if (r3 >= r3) {
0x0006a5fc ldrmi r3, [r1, 0x14] | r3 = *((r1 + 0x14));
| }
| if (r3 < r3) {
0x0006a5fe ldrpl r1, [r1, 0xc] | r1 = *((r1 + 0xc));
| }
| if (r3 >= r3) {
0x0006a600 ldrmi r1, [r3, 8] | r1 = *((r3 + 8));
| }
| if (r1 == 0) {
0x0006a602 cbz r1, 0x6a616 | goto label_1;
| }
| label_2:
0x0006a604 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0006a606 ands r4, r3, 0x82000 | r4 = r3 & 0x82000;
0x0006a60a bne 0x6a5f8 |
| } while (r4 != r3);
0x0006a60c ldrb r3, [r5, 0x17] | r3 = *((r5 + 0x17));
| if (r3 != 0) {
0x0006a60e cbz r3, 0x6a616 |
0x0006a610 ldrb r3, [r1] | r3 = *(r1);
0x0006a612 cmp r3, 0xb0 |
| if (r3 != 0xb0) {
0x0006a614 bne 0x6a670 | goto label_3;
| }
| }
| label_1:
0x0006a616 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
| if (r3 == 0) {
0x0006a618 cbz r3, 0x6a668 | goto label_4;
| }
0x0006a61a subs r3, 1 | r3--;
0x0006a61c uxtb r3, r3 | r3 = (int8_t) r3;
0x0006a61e add.w r2, r3, 0x26 | r2 = r3 + 0x26;
0x0006a622 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x0006a624 ldr.w r4, [r5, r2, lsl 2] | offset_0 = r2 << 2;
| r4 = *((r5 + offset_0));
| label_0:
0x0006a628 mov r2, r4 | r2 = r4;
0x0006a62a mov r0, r5 | r0 = r5;
0x0006a62c bl 0x67e64 | r0 = fcn_00067e64 (r0, r1, r2, r3);
0x0006a630 cmp r0, r4 |
0x0006a632 it eq |
| if (r0 != r4) {
0x0006a634 streq r4, [r6] | *(r6) = r4;
| }
| if (r0 == r4) {
0x0006a636 beq 0x6a63e | goto label_5;
| }
0x0006a638 cbnz r4, 0x6a656 |
| while (1) {
0x0006a63a movs r3, 0 | r3 = 0;
0x0006a63c str r3, [r6] | *(r6) = r3;
| label_5:
0x0006a63e ldr r2, [pc, 0x88] |
0x0006a640 ldr r3, [pc, 0x80] | r3 = *(0x6a6c4);
0x0006a642 add r2, pc | r2 = 0xd4d10;
0x0006a644 ldr r3, [r2, r3] | r3 = *(0xd4d10);
0x0006a646 ldr r2, [r3] | r2 = *(0xd4d10);
0x0006a648 ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x0006a64a eors r2, r3 | r2 ^= r3;
0x0006a64c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006a650 bne 0x6a6bc | goto label_6;
| }
0x0006a652 add sp, 0x28 |
0x0006a654 pop {r4, r5, r6, pc} |
0x0006a656 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x0006a658 cmp r3, 7 |
0x0006a65a itttt ls |
| if (r3 > 7) {
0x0006a65c addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0006a65e addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0006a660 strbls r2, [r5, 0x13] | *((r5 + 0x13)) = r2;
| }
| if (r3 > 7) {
0x0006a662 strls r4, [r5, r3, lsl 2] | offset_1 = r3 << 2;
| *((r5 + offset_1)) = r4;
| }
0x0006a666 b 0x6a63a |
| }
| label_4:
0x0006a668 ldr r4, [r5, 0x2c] | r4 = *((r5 + 0x2c));
0x0006a66a adds r4, 1 | r4++;
0x0006a66c str r4, [r5, 0x2c] | *((r5 + 0x2c)) = r4;
0x0006a66e b 0x6a628 | goto label_0;
| label_3:
0x0006a670 movs r3, 2 | r3 = 2;
0x0006a672 add r0, sp, 8 | r0 += var_8h_2;
0x0006a674 strh.w r3, [sp, 0x1c] | var_1ch_2 = r3;
0x0006a678 ldr r3, [pc, 0x50] |
0x0006a67a str r1, [sp, 4] | var_4h_2 = r1;
0x0006a67c str r4, [sp, 0x20] | var_20h = r4;
0x0006a67e add r3, pc | r3 = 0xd4d4e;
0x0006a680 str r3, [sp, 0xc] | var_ch = r3;
0x0006a682 ldr r3, [pc, 0x4c] |
0x0006a684 add r3, pc | r3 = 0xd4d5a;
0x0006a686 str r3, [sp, 0x10] | var_10h = r3;
0x0006a688 bl 0x30f3c | fcn_00030f3c (r0, r1);
0x0006a68c ldrh.w r3, [sp, 0x1c] | r3 = var_1ch_2;
0x0006a690 ldr r1, [sp, 4] | r1 = var_4h_2;
0x0006a692 cmp r3, 0 |
| if (r3 == 0) {
0x0006a694 beq 0x6a616 | goto label_1;
| }
0x0006a696 ldr r2, [pc, 0x3c] |
0x0006a698 ldr r3, [pc, 0x28] | r3 = *(0x6a6c4);
0x0006a69a str r4, [r6] | *(r6) = r4;
0x0006a69c add r2, pc | r2 = 0xd4d76;
0x0006a69e ldr r3, [r2, r3] | r3 = *(0xd4d76);
0x0006a6a0 ldr r2, [r3] | r2 = *(0xd4d76);
0x0006a6a2 ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x0006a6a4 eors r2, r3 | r2 ^= r3;
0x0006a6a6 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0006a6aa bne 0x6a6bc |
0x0006a6ac mov.w r2, -1 | r2 = -1;
0x0006a6b0 mov r0, r5 | r0 = r5;
0x0006a6b2 add sp, 0x28 |
0x0006a6b4 pop.w {r4, r5, r6, lr} |
0x0006a6b8 b.w 0x69df8 | void (*0x69df8)() ();
| }
| label_6:
0x0006a6bc blx 0x883c | fcn_0000883c ();
0x0006a6c0 b 0x6a424 | return void (*0x6a424)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6a88c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0006a88c () | void fcn_0006a88c (int16_t arg_d8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_bp_0h;
| int16_t var_bp_ch;
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_sp_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int32_t var_1ch;
| int32_t var_1ch_2;
| int16_t var_54h_2;
| int16_t var_78h;
| int32_t var_84h;
| int16_t var_88h;
| int8_t var_30h;
| int16_t var_ach;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006a88c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006a890 sub sp, 0xb4 |
0x0006a892 str r2, [sp, 4] | var_4h = r2;
0x0006a894 mov r7, r3 | r7 = r3;
0x0006a896 movs r4, 0 | r4 = 0;
0x0006a898 add.w fp, sp, 0x44 |
0x0006a89c ldr r2, [pc, 0x150] |
0x0006a89e mov r5, r0 | r5 = r0;
0x0006a8a0 ldr r3, [pc, 0x150] | r3 = *(0x6a9f4);
0x0006a8a2 mov r6, r1 | r6 = r1;
0x0006a8a4 mov r0, fp | r0 = fp;
0x0006a8a6 mov r1, r4 | r1 = r4;
0x0006a8a8 add r2, pc | r2 = 0xd529c;
0x0006a8aa add.w sl, sp, 0x78 | sl += var_78h;
0x0006a8ae ldr r3, [r2, r3] |
0x0006a8b0 movs r2, 0x34 | r2 = 0x34;
0x0006a8b2 ldr.w r8, [r5] | r8 = *(r5);
0x0006a8b6 add.w sb, sp, 0x10 | sb += var_10h;
0x0006a8ba ldr r3, [r3] | r3 = *(0xd529c);
0x0006a8bc str r3, [sp, 0xac] | var_ach = r3;
0x0006a8be mov.w r3, 0 | r3 = 0;
0x0006a8c2 str r4, [sp, 0xc] | var_ch = r4;
0x0006a8c4 blx 0x839c | fcn_0000839c ();
0x0006a8c8 movs r2, 0x34 | r2 = 0x34;
0x0006a8ca mov r1, r4 | r1 = r4;
0x0006a8cc mov r0, sl | r0 = sl;
0x0006a8ce blx 0x839c | fcn_0000839c ();
0x0006a8d2 mov r1, r4 | r1 = r4;
0x0006a8d4 movs r2, 0x34 | r2 = 0x34;
0x0006a8d6 mov r0, sb | r0 = sb;
0x0006a8d8 blx 0x839c | fcn_0000839c ();
0x0006a8dc ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0006a8de cmp r1, 0 |
| if (r1 == 0) {
0x0006a8e0 beq 0x6a994 | goto label_8;
| }
0x0006a8e2 mov r3, r4 | r3 = r4;
0x0006a8e4 mov r2, r4 | r2 = r4;
0x0006a8e6 mov r0, r8 | r0 = r8;
0x0006a8e8 bl 0x31eb4 | fcn_00031eb4 (r0, r1, r2, r3);
0x0006a8ec ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x0006a8f0 mov r4, r0 | r4 = r0;
| if (r3 != 0) {
0x0006a8f2 cbz r3, 0x6a918 |
| if (r4 != 0) {
| label_0:
0x0006a8f4 cbz r4, 0x6a8fe |
| label_3:
0x0006a8f6 mov r1, r4 | r1 = r4;
0x0006a8f8 mov r0, r8 | r0 = r8;
0x0006a8fa bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
| label_1:
0x0006a8fe ldr r2, [pc, 0xf8] |
0x0006a900 ldr r3, [pc, 0xf0] | r3 = *(0x6a9f4);
0x0006a902 add r2, pc | r2 = 0xd5300;
0x0006a904 ldr r3, [r2, r3] | r3 = *(0xd5300);
0x0006a906 ldr r2, [r3] | r2 = *(0xd5300);
0x0006a908 ldr r3, [sp, 0xac] | r3 = var_ach;
0x0006a90a eors r2, r3 | r2 ^= r3;
0x0006a90c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006a910 bne 0x6a9ec | goto label_9;
| }
0x0006a912 add sp, 0xb4 |
0x0006a914 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0006a918 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0006a91a movs r2, 0x2c | r2 = 0x2c;
0x0006a91c strb.w r2, [sp, 0x10] | var_10h = r2;
0x0006a920 movs r2, 0x39 | r2 = 0x39;
0x0006a922 strb.w r2, [sp, 0x44] | var_bp_0h = r2;
0x0006a926 mov r1, r0 | r1 = r0;
0x0006a928 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0006a92a ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0006a92c str r0, [sp, 0x50] | var_bp_ch = r0;
0x0006a92e str r2, [sp, 0x54] | var_54h_2 = r2;
0x0006a930 add r2, sp, 0xc | r2 += var_ch;
0x0006a932 strd r0, r3, [sp, 0x84] | __asm ("strd r0, r3, [var_88h]");
0x0006a936 movs r3, 0x37 | r3 = 0x37;
0x0006a938 mov r0, r5 | r0 = r5;
0x0006a93a strb.w r3, [sp, 0x78] | var_78h = r3;
0x0006a93e strd fp, sl, [sp, 0x1c] | __asm ("strd fp, sl, [var_1ch]");
0x0006a942 bl 0x6a6d8 | fcn_0006a6d8 (r0, r1, r2, r3, r4, r5);
0x0006a946 mov r3, r4 | r3 = r4;
| if (r4 != 0) {
0x0006a948 cbnz r4, 0x6a958 | goto label_10;
| }
0x0006a94a b 0x6a9c4 | goto label_11;
| do {
0x0006a94c lsls r2, r2, 0xc | r2 <<= 0xc;
0x0006a94e itet mi |
| if (r2 >= r2) {
0x0006a950 ldrmi r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| }
| if (r2 < r2) {
0x0006a952 ldrpl r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
| if (r2 >= r2) {
0x0006a954 ldrmi r3, [r3, 8] | r3 = *((r3 + 8));
| }
| if (r3 == 0) {
0x0006a956 cbz r3, 0x6a970 | goto label_2;
| }
| label_10:
0x0006a958 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0006a95a tst.w r2, 0x82000 |
0x0006a95e bne 0x6a94c |
| } while ((r2 & 0x82000) != 0);
0x0006a960 bic r2, r2, 0x2000 | r2 = BIT_MASK (r2, 0x2000);
0x0006a964 str r0, [r3, 0x1c] | *((r3 + 0x1c)) = r0;
0x0006a966 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0006a968 ldrb r2, [r3] | r2 = *(r3);
0x0006a96a strb r2, [r3, 2] | *((r3 + 2)) = r2;
0x0006a96c movs r2, 0xb0 | r2 = 0xb0;
0x0006a96e strb r2, [r3] | *(r3) = r2;
| label_2:
0x0006a970 ldr r6, [sp, 0xc] | r6 = var_ch;
0x0006a972 mov r1, sb | r1 = sb;
0x0006a974 ldr r2, [sp, 4] | r2 = var_4h;
| if (r7 == 0) {
0x0006a976 cbz r7, 0x6a9c8 | goto label_12;
| }
0x0006a978 ldr r3, [sp, 0xd8] | r3 = *(arg_d8h);
0x0006a97a mov r0, r5 | r0 = r5;
0x0006a97c blx r7 | uint32_t (*r7)(uint32_t, uint32_t) (r0, r3);
0x0006a97e cmp r6, 0 |
| if (r6 == 0) {
0x0006a980 beq 0x6a8f4 | goto label_0;
| }
0x0006a982 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x0006a984 cmp r3, 7 |
0x0006a986 itttt ls |
| if (r3 > 7) {
0x0006a988 addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0006a98a addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0006a98c strbls r2, [r5, 0x13] | *((r5 + 0x13)) = r2;
| }
| if (r3 > 7) {
0x0006a98e strls r6, [r5, r3, lsl 2] | offset_0 = r3 << 2;
| *((r5 + offset_0)) = r6;
| }
0x0006a992 b 0x6a8f4 | goto label_0;
| label_8:
0x0006a994 ldrb.w r1, [r8, 0x57] | r1 = *((r8 + 0x57));
0x0006a998 cmp r1, 0 |
| if (r1 != 0) {
0x0006a99a bne 0x6a8fe | goto label_1;
| }
0x0006a99c ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0006a99e movs r2, 0x2c | r2 = 0x2c;
0x0006a9a0 strb.w r2, [sp, 0x10] | var_10h = r2;
0x0006a9a4 movs r2, 0x39 | r2 = 0x39;
0x0006a9a6 strb.w r2, [sp, 0x44] | var_bp_0h = r2;
0x0006a9aa mov r0, r5 | r0 = r5;
0x0006a9ac ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0006a9ae ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0006a9b0 strd fp, sl, [sp, 0x1c] | __asm ("strd fp, sl, [var_1ch]");
0x0006a9b4 str r2, [sp, 0x54] | var_54h_2 = r2;
0x0006a9b6 add r2, sp, 0xc | r2 += var_ch;
0x0006a9b8 str r3, [sp, 0x88] | var_88h = r3;
0x0006a9ba movs r3, 0x37 | r3 = 0x37;
0x0006a9bc strb.w r3, [sp, 0x78] | var_78h = r3;
0x0006a9c0 bl 0x6a6d8 | fcn_0006a6d8 (r0, r1, r2, r3, r4, r5);
| label_11:
0x0006a9c4 movs r4, 0 | r4 = 0;
0x0006a9c6 b 0x6a970 | goto label_2;
| label_12:
0x0006a9c8 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006a9ca mov r0, r5 | r0 = r5;
0x0006a9cc orr r3, r3, 1 | r3 |= 1;
0x0006a9d0 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0006a9d2 bl 0x67e64 | fcn_00067e64 (r0, r1, r2, r3);
0x0006a9d6 cmp r6, 0 |
| if (r6 == 0) {
0x0006a9d8 beq 0x6a8f6 | goto label_3;
| }
0x0006a9da ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x0006a9dc cmp r3, 7 |
| if (r3 > 7) {
0x0006a9de bhi 0x6a8f6 | goto label_3;
| }
0x0006a9e0 adds r2, r3, 1 | r2 = r3 + 1;
0x0006a9e2 adds r3, 0x26 | r3 += 0x26;
0x0006a9e4 strb r2, [r5, 0x13] | *((r5 + 0x13)) = r2;
0x0006a9e6 str.w r6, [r5, r3, lsl 2] | __asm ("str.w r6, [r5, r3, lsl 2]");
0x0006a9ea b 0x6a8f6 | goto label_3;
| label_9:
0x0006a9ec blx 0x883c | fcn_0000883c ();
0x0006a9f0 b 0x6b1d4 |
0x0006b1d4 asrs r4, r0, 0x11 | r4 = r0 >> 0x11;
0x0006b1d6 add.w r4, r4, 0x300 | r4 += 0x300;
| do {
0x0006b1da ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0006b1dc cmp r3, 0 |
| if (r3 != 0) {
0x0006b1de beq 0x6b28a |
0x0006b1e0 ldr r2, [r4, 0x50] | r2 = *((r4 + 0x50));
0x0006b1e2 ldrh r3, [r2, 0x2e] | r3 = *((r2 + 0x2e));
0x0006b1e4 cmp r3, 0 |
| if (r3 != 0) {
0x0006b1e6 bne 0x6b28a | goto label_13;
| }
0x0006b1e8 ldr r3, [r2] | r3 = *(r2);
0x0006b1ea ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0006b1ec ldr r7, [sp, 8] | r7 = var_sp_8h;
0x0006b1ee and.w r3, sb, r3 | r3 = sb & r3;
0x0006b1f2 ands r1, r7 | r1 &= r7;
0x0006b1f4 orrs r3, r1 | r3 |= r1;
| if (r3 != r1) {
0x0006b1f6 bne 0x6b28a | goto label_13;
| }
0x0006b1f8 ldr r3, [r2, 0x28] | r3 = *((r2 + 0x28));
0x0006b1fa str.w fp, [r4, 0xc] | __asm ("str.w fp, [r4, 0xc]");
0x0006b1fe ands r3, r3, 0x100 | r3 &= 0x100;
| if (r3 == r3) {
0x0006b202 beq 0x6b2ac | goto label_14;
| }
0x0006b204 ldr r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x0006b206 ldr r1, [r3] | r1 = *(r3);
0x0006b208 ldrb r3, [r6, 0x13] | r3 = *((r6 + 0x13));
0x0006b20a cmp r3, 0 |
| if (r3 == 0) {
0x0006b20c beq.w 0x6b332 | goto label_15;
| }
0x0006b210 subs r3, 1 | r3--;
0x0006b212 uxtb r3, r3 | r3 = (int8_t) r3;
0x0006b214 strb r3, [r6, 0x13] | *((r6 + 0x13)) = r3;
0x0006b216 adds r3, 0x26 | r3 += 0x26;
0x0006b218 ldr.w r3, [r6, r3, lsl 2] | offset_1 = r3 << 2;
| r3 = *((r6 + offset_1));
| label_5:
0x0006b21c str r3, [sp, 4] | var_4h = r3;
0x0006b21e movs r3, 0 | r3 = 0;
0x0006b220 mov r2, r4 | r2 = r4;
0x0006b222 str r3, [sp] | *(sp) = r3;
0x0006b224 mov r0, r6 | r0 = r6;
0x0006b226 bl 0x6a9fc | fcn_0006a9fc (r0, r1, r2, r3, r4, r5, r6);
0x0006b22a ldr.w r8, [r6, 8] | r8 = *((r6 + 8));
0x0006b22e ldr.w ip, [r4, 0x34] | ip = *((r4 + 0x34));
0x0006b232 ldrd r3, r2, [r8, 0x6c] | __asm ("ldrd r3, r2, [r8, 0x6c]");
0x0006b236 cmp r3, r2 |
| if (r3 >= r2) {
0x0006b238 bge 0x6b33a | goto label_16;
| }
0x0006b23a ldr.w r2, [r8, 0x68] | r2 = *((r8 + 0x68));
0x0006b23e add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x0006b242 add.w lr, r3, 1 | lr = r3 + 1;
0x0006b246 str.w lr, [r8, 0x6c] | __asm ("str.w lr, [r8, 0x6c]");
0x0006b24a add.w lr, r2, r1, lsl 2 | lr = r2 + (r1 << 2);
0x0006b24e strd fp, r0, [lr, 8] | __asm ("strd fp, r0, [lr, 8]");
0x0006b252 movs r0, 0 | r0 = 0;
0x0006b254 str.w r0, [lr, 0x10] | __asm ("str.w r0, [lr, 0x10]");
0x0006b258 movs r0, 0x3f | r0 = 0x3f;
0x0006b25a str.w ip, [lr, 4] | __asm ("str.w ip, [lr, 4]");
0x0006b25e str.w r0, [r2, r1, lsl 2] | __asm ("str.w r0, [r2, r1, lsl 2]");
| label_6:
0x0006b262 ldr.w r2, [r8] | r2 = *(r8);
0x0006b266 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
| if (r2 == 0) {
0x0006b26a cbnz r2, 0x6b280 |
0x0006b26c ldr.w r2, [r8, 0x68] | r2 = *((r8 + 0x68));
0x0006b270 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0006b274 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x0006b278 movs r2, 0xfd | r2 = 0xfd;
0x0006b27a strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x0006b27c movs r2, 1 | r2 = 1;
0x0006b27e str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
| }
| label_4:
0x0006b280 movs r3, 0 | r3 = 0;
0x0006b282 str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x0006b284 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0006b286 ldrb.w r0, [sl, 0x30] | r0 = var_30h;
| }
| label_13:
0x0006b28a adds r5, 1 | r5++;
0x0006b28c adds r4, 0x60 | r4 += 0x60;
0x0006b28e cmp r0, r5 |
0x0006b290 bgt 0x6b1da |
| } while (r0 > r5);
0x0006b292 ldr r2, [pc, 0xd4] |
0x0006b294 ldr r3, [pc, 0xcc] | r3 = *(0x6b364);
0x0006b296 add r2, pc | r2 = 0xd6604;
0x0006b298 ldr r3, [r2, r3] | r3 = *(0xd6604);
0x0006b29a ldr r2, [r3] | r2 = *(0xd6604);
0x0006b29c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006b29e eors r2, r3 | r2 ^= r3;
0x0006b2a0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006b2a4 bne 0x6b35c | goto label_17;
| }
0x0006b2a6 add sp, 0x1c |
0x0006b2a8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x0006b2ac ldrh r7, [r2, 0x18] | r7 = *((r2 + 0x18));
0x0006b2ae add r2, sp, 0x10 | r2 += var_10h;
0x0006b2b0 mov r1, r4 | r1 = r4;
0x0006b2b2 str r2, [sp] | *(sp) = r2;
0x0006b2b4 mov r0, r6 | r0 = r6;
0x0006b2b6 mov r2, r3 | r2 = r3;
0x0006b2b8 bl 0x6af48 | fcn_0006af48 (r0, r1, r2, r3, r4, r5);
0x0006b2bc ldr.w r8, [sp, 0x10] | r8 = var_10h;
0x0006b2c0 mov r1, r0 | r1 = r0;
0x0006b2c2 str r0, [sp, 0xc] | var_ch = r0;
0x0006b2c4 mov r2, r7 | r2 = r7;
0x0006b2c6 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x0006b2c8 mov r3, r8 | r3 = r8;
0x0006b2ca bl 0x2f62c | fcn_0002f62c (r0, r1, r2, r3);
0x0006b2ce cmp.w r8, 0 |
| if (r8 != 0) {
0x0006b2d2 beq 0x6b2dc |
0x0006b2d4 ldr r0, [r6] | r0 = *(r6);
0x0006b2d6 mov r1, r8 | r1 = r8;
0x0006b2d8 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x0006b2dc ldr.w r8, [r6, 8] | r8 = *((r6 + 8));
0x0006b2e0 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x0006b2e2 ldrd r0, r3, [r8, 0x6c] | __asm ("ldrd r0, r3, [r8, 0x6c]");
0x0006b2e6 cmp r0, r3 |
| if (r0 >= r3) {
0x0006b2e8 bge 0x6b34c | goto label_18;
| }
0x0006b2ea ldr.w ip, [r8, 0x68] | ip = *((r8 + 0x68));
0x0006b2ee add.w r3, r0, r0, lsl 2 | r3 = r0 + (r0 << 2);
0x0006b2f2 adds r1, r0, 1 | r1 = r0 + 1;
0x0006b2f4 str.w r1, [r8, 0x6c] | __asm ("str.w r1, [r8, 0x6c]");
0x0006b2f8 mov.w lr, 0 | lr = 0;
0x0006b2fc add.w r1, ip, r3, lsl 2 | r1 = ip + (r3 << 2);
0x0006b300 str r2, [r1, 4] | *((r1 + 4)) = r2;
0x0006b302 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006b304 str.w fp, [r1, 8] | __asm ("str.w fp, [r1, 8]");
0x0006b308 strd r2, lr, [r1, 0xc] | __asm ("strd r2, lr, [r1, 0xc]");
0x0006b30c movs r2, 0x3f | r2 = 0x3f;
0x0006b30e str.w r2, [ip, r3, lsl 2] | __asm ("str.w r2, [ip, r3, lsl 2]");
| label_7:
0x0006b312 ldr.w r3, [r8] | r3 = *(r8);
0x0006b316 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006b31a cmp r3, 0 |
| if (r3 != 0) {
0x0006b31c bne 0x6b280 | goto label_4;
| }
0x0006b31e ldr.w r3, [r8, 0x68] | r3 = *((r8 + 0x68));
0x0006b322 add.w r0, r0, r0, lsl 2 | r0 += (r0 << 2);
0x0006b326 movs r2, 0xfd | r2 = 0xfd;
| do {
0x0006b328 add.w r3, r3, r0, lsl 2 | r3 += (r0 << 2);
0x0006b32c str r7, [r3, 0x10] | *((r3 + 0x10)) = r7;
0x0006b32e strb r2, [r3, 1] | *((r3 + 1)) = r2;
0x0006b330 b 0x6b280 | goto label_4;
| label_15:
0x0006b332 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0006b334 adds r3, 1 | r3++;
0x0006b336 str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
0x0006b338 b 0x6b21c | goto label_5;
| label_16:
0x0006b33a mov r3, fp | r3 = fp;
0x0006b33c str r0, [sp] | *(sp) = r0;
0x0006b33e mov r2, ip | r2 = ip;
0x0006b340 movs r1, 0x3f | r1 = 0x3f;
0x0006b342 mov r0, r8 | r0 = r8;
0x0006b344 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0006b348 mov r3, r0 | r3 = r0;
0x0006b34a b 0x6b262 | goto label_6;
| label_18:
0x0006b34c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006b34e movs r1, 0x3f | r1 = 0x3f;
0x0006b350 mov r0, r8 | r0 = r8;
0x0006b352 str r3, [sp] | *(sp) = r3;
0x0006b354 mov r3, fp | r3 = fp;
0x0006b356 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0006b35a b 0x6b312 | goto label_7;
| label_17:
0x0006b35c blx 0x883c | fcn_0000883c ();
0x0006b360 bge 0x6b328 |
| } while (r1 >= 0x3f);
0x0006b362 movs r5, r0 | r5 = r0;
0x0006b364 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0006b366 movs r0, r0 |
| if (r0 >= r0) {
0x0006b368 bge 0x6b370 | void (*0x6b370)() ();
| }
0x0006b36a movs r5, r0 | r5 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6a9fc */
| #include <stdint.h>
|
; (fcn) fcn.0006a9fc () | void fcn_0006a9fc (int16_t arg_8h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_60h, int16_t arg_64h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| arithmetic var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_28h_2;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006a9fc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006aa00 mov sl, r1 | sl = r1;
0x0006aa02 ldr.w r4, [pc, 0x538] |
0x0006aa06 sub sp, 0x3c |
0x0006aa08 ldr.w r1, [pc, 0x534] | r1 = *(0x6af40);
0x0006aa0c add r4, pc | r4 = 0xd594e;
0x0006aa0e str r0, [sp, 0x14] | var_14h = r0;
0x0006aa10 ldr.w fp, [r0, 8] | fp = *((r0 + 8));
0x0006aa14 ldr r1, [r4, r1] |
0x0006aa16 ldr.w r4, [sl] | r4 = *(sl);
0x0006aa1a ldr r1, [r1] | r1 = *(0xd594e);
0x0006aa1c str r1, [sp, 0x34] | var_34h = r1;
0x0006aa1e mov.w r1, 0 | r1 = 0;
0x0006aa22 strd r2, r3, [sp, 0xc] | __asm ("strd r2, r3, [var_ch]");
0x0006aa26 ldrb r3, [r4] | r3 = *(r4);
0x0006aa28 sub.w r2, r3, 0x2d | r2 = r3 - 0x2d;
0x0006aa2c tst.w r2, 0xf7 |
| if ((r2 & 0xf7) == 0) {
0x0006aa30 beq 0x6aad2 | goto label_18;
| }
0x0006aa32 cmp r3, 0x32 |
| if (r3 == 0x32) {
0x0006aa34 beq.w 0x6acfe | goto label_19;
| }
0x0006aa38 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006aa3a ldr r7, [r3, 0x50] | r7 = *((r3 + 0x50));
0x0006aa3c ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0006aa3e lsls r6, r3, 0x15 | r6 = r3 << 0x15;
| if (r6 >= r3) {
0x0006aa40 bpl 0x6ab18 | goto label_20;
| }
| label_0:
0x0006aa42 ldr r2, [sp, 0x10] | r2 = var_10h;
| if (r2 == 0) {
0x0006aa44 cbz r2, 0x6aa5c | goto label_21;
| }
0x0006aa46 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0006aa48 add.w r1, r3, r2, lsl 2 | r1 = r3 + (r2 << 2);
| do {
0x0006aa4c ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
| if (r2 != 0) {
0x0006aa50 cbz r2, 0x6aa58 |
0x0006aa52 ldr r2, [r2] | r2 = *(r2);
0x0006aa54 cmp r2, r4 |
| if (r2 == r4) {
0x0006aa56 beq 0x6aaee | goto label_22;
| }
| }
0x0006aa58 cmp r1, r3 |
0x0006aa5a bne 0x6aa4c |
| } while (r1 != r3);
| label_21:
0x0006aa5c ldrh r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x0006aa5e ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006aa60 cmp r2, r1 |
| if (r2 >= r1) {
0x0006aa62 bge.w 0x6ae9e | goto label_23;
| }
0x0006aa66 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0006aa68 mov.w r8, 0 | r8 = 0;
0x0006aa6c add.w r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
0x0006aa70 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
| do {
0x0006aa74 ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0006aa78 ldr r2, [r2] | r2 = *(r2);
0x0006aa7a cmp r4, r2 |
0x0006aa7c it eq |
| if (r4 != r2) {
0x0006aa7e addeq r8, r8, 1 | r8++;
| }
0x0006aa82 cmp r1, r3 |
0x0006aa84 bne 0x6aa74 |
| } while (r1 != r3);
| label_13:
0x0006aa86 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006aa88 movs r2, 0 | r2 = 0;
0x0006aa8a str r2, [sp, 0x30] | var_30h = r2;
0x0006aa8c lsls r5, r3, 0x13 | r5 = r3 << 0x13;
| if (r5 >= r3) {
0x0006aa8e bpl 0x6ab34 | goto label_24;
| }
0x0006aa90 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x0006aa92 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0006aa94 ldr r2, [r2] | r2 = *(r2);
0x0006aa96 cmp r2, 1 |
| if (r2 == 1) {
0x0006aa98 beq 0x6ab34 | goto label_24;
| }
0x0006aa9a ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x0006aa9c ldr r1, [sp, 0x14] | r1 = var_14h;
0x0006aa9e ldr r5, [r1] | r5 = *(r1);
| if (r2 != 0) {
0x0006aaa0 cbz r2, 0x6aaa8 |
0x0006aaa2 lsls r0, r3, 6 | r0 = r3 << 6;
| if (r0 < r3) {
0x0006aaa4 bmi.w 0x6aea4 | goto label_25;
| }
| }
0x0006aaa8 movs r3, 0 | r3 = 0;
0x0006aaaa mov r1, r4 | r1 = r4;
0x0006aaac mov r2, r3 | r2 = r3;
0x0006aaae mov r0, r5 | r0 = r5;
0x0006aab0 bl 0x31eb4 | fcn_00031eb4 (r0, r1, r2, r3);
0x0006aab4 ldrb.w r2, [r5, 0x57] | r2 = *((r5 + 0x57));
0x0006aab8 mov r6, r0 | r6 = r0;
0x0006aaba cmp r2, 0 |
| if (r2 == 0) {
0x0006aabc beq.w 0x6ad58 | goto label_26;
| }
0x0006aac0 cmp r0, 0 |
| if (r0 != 0) {
0x0006aac2 bne.w 0x6add6 | goto label_10;
| }
| label_8:
0x0006aac6 movs r3, 0 | r3 = 0;
0x0006aac8 movs r2, 5 | r2 = 5;
0x0006aaca str r3, [sp, 0x18] | var_18h = r3;
0x0006aacc strd r3, r2, [sp, 0x1c] | __asm ("strd r3, r2, [var_1ch]");
0x0006aad0 b 0x6ab5e | goto label_27;
| label_18:
0x0006aad2 ldr r2, [sp, 0x64] | r2 = *(arg_64h);
0x0006aad4 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0006aad6 bl 0x67e64 | fcn_00067e64 (r0, r1, r2, r3);
0x0006aada str r0, [sp, 0x64] | *(arg_64h) = r0;
| label_2:
0x0006aadc ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006aade ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0006aae0 ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x0006aae2 lsls r2, r3, 0xa | r2 = r3 << 0xa;
| if (r2 < r3) {
0x0006aae4 bpl 0x6aaee |
0x0006aae6 ldrh.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x0006aaea lsls r3, r3, 0x14 | r3 <<= 0x14;
| if (r3 < r3) {
0x0006aaec bmi 0x6aaf6 | goto label_28;
| }
| }
| label_22:
0x0006aaee ldr r0, [sp, 0xc] | r0 = var_ch;
0x0006aaf0 mov r1, sl | r1 = sl;
0x0006aaf2 bl 0xae30 | fcn_0000ae30 (r0, r1);
| label_28:
0x0006aaf6 ldr.w r2, [pc, 0x44c] | r2 = *(0x0006af44);
0x0006aafa ldr.w r3, [pc, 0x444] | r3 = *(0x6af42);
0x0006aafe add r2, pc | r2 += pc;
0x0006ab00 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0006ab02 ldr r2, [r3] | r2 = *(0x6af42);
0x0006ab04 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006ab06 eors r2, r3 | r2 ^= r3;
0x0006ab08 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006ab0c bne.w 0x6af38 | goto label_29;
| }
0x0006ab10 ldr r0, [sp, 0x64] | r0 = *(arg_64h);
0x0006ab12 add sp, 0x3c |
0x0006ab14 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_20:
0x0006ab18 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0006ab1a cmp r3, 0 |
| if (r3 == 0) {
0x0006ab1c beq 0x6aa42 | goto label_0;
| }
0x0006ab1e ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0006ab20 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006ab22 ldrb r3, [r3, r2] | r3 = *((r3 + r2));
0x0006ab24 cmp r3, 0 |
| if (r3 == 0) {
0x0006ab26 beq 0x6aa42 | goto label_0;
| }
0x0006ab28 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x0006ab2a clz r3, r3 | r3 &= r3;
0x0006ab2e lsrs r3, r3, 5 | r3 >>= 5;
0x0006ab30 str r3, [sp, 0x60] | *(arg_60h) = r3;
0x0006ab32 b 0x6aa42 | goto label_0;
| label_24:
0x0006ab34 movs r3, 0 | r3 = 0;
0x0006ab36 add r2, sp, 0x30 | r2 += var_30h;
0x0006ab38 str r3, [sp] | *(sp) = r3;
0x0006ab3a str r2, [sp, 4] | var_4h = r2;
0x0006ab3c str r3, [sp, 0x1c] | var_1ch = r3;
| label_14:
0x0006ab3e ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006ab40 movs r2, 4 | r2 = 4;
0x0006ab42 mov r1, r4 | r1 = r4;
0x0006ab44 bl 0x66850 | fcn_00066850 (r0, r1, r2, r3, r4, r5, r6);
0x0006ab48 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0006ab4a str r0, [sp, 0x20] | var_20h = r0;
0x0006ab4c str r3, [sp, 0x18] | var_18h = r3;
| label_11:
0x0006ab4e ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006ab50 cmp r3, 4 |
0x0006ab52 itttt eq |
| if (r3 != 4) {
0x0006ab54 ldreq r3, [sp, 0x60] | r3 = *(arg_60h);
| }
| if (r3 == 4) {
0x0006ab56 clzeq r3, r3 | __asm ("clzeq r3, r3");
| }
| if (r3 != 4) {
0x0006ab5a lsreq r3, r3, 5 | r3 >>= 5;
| }
| if (r3 == 4) {
0x0006ab5c str r3, [sp, 0x60] | *(arg_60h) = r3;
| }
| label_27:
0x0006ab5e ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x0006ab60 mov r0, fp | r0 = fp;
0x0006ab62 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006ab64 cmp r3, 0 |
0x0006ab66 mov.w r3, 0 | r3 = 0;
0x0006ab6a ite ne |
| if (r3 == 0) {
0x0006ab6c movne r1, 0x1f | r1 = 0x1f;
| }
| if (r3 != 0) {
0x0006ab6e moveq r1, 0x23 | r1 = 0x23;
| }
0x0006ab70 str r3, [sp] | *(sp) = r3;
0x0006ab72 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006ab76 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0006ab78 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0006ab7a ldr.w sb, [r1, 0x48] | sb = *((r1 + 0x48));
0x0006ab7e orr r2, r3, 0x800 | r2 = r3 | 0x800;
0x0006ab82 str r2, [r7, 0x28] | *((r7 + 0x28)) = r2;
0x0006ab84 cmp.w sb, 0 |
| if (sb == 0) {
0x0006ab88 bne 0x6ab94 |
0x0006ab8a ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006ab8c ldr r2, [r0, 0x38] | r2 = *((r0 + 0x38));
0x0006ab8e subs r2, 1 | r2--;
0x0006ab90 str r2, [r0, 0x38] | *((r0 + 0x38)) = r2;
0x0006ab92 str r2, [r1, 0x10] | *((r1 + 0x10)) = r2;
| }
0x0006ab94 ldr r2, [sp, 0x10] | r2 = var_10h;
| if (r2 != 0) {
0x0006ab96 cbz r2, 0x6aba2 |
0x0006ab98 lsls r1, r3, 0xb | r1 = r3 << 0xb;
0x0006ab9a itt pl |
| if (r1 < r3) {
0x0006ab9c orrpl r3, r3, 0x40800 | r3 |= 0x40800;
| }
| if (r1 < r3) {
0x0006aba0 str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
| goto label_30;
| }
| }
| label_30:
0x0006aba2 ldr r5, [sp, 0xc] | r5 = var_ch;
0x0006aba4 add.w r3, sb, r8 | r3 = sb + r8;
0x0006aba8 add.w r8, r3, r3, lsl 2 | r8 = r3 + (r3 << 2);
0x0006abac movs r6, 0 | r6 = 0;
0x0006abae str r3, [r5, 0x48] | *((r5 + 0x48)) = r3;
0x0006abb0 lsl.w r8, r8, 2 | r8 <<= 2;
0x0006abb4 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0006abb8 adds.w r2, r8, 0x10 | r2 = r8 + 0x10;
0x0006abbc ldr r5, [r5, 0x4c] | r5 = *((r5 + 0x4c));
0x0006abbe ldr r1, [r3] | r1 = *(r3);
0x0006abc0 adc r3, r6, 0 | __asm ("adc r3, r6, 0");
0x0006abc4 ldr r0, [r1] | r0 = *(r1);
0x0006abc6 str r1, [sp, 0x24] | var_24h = r1;
0x0006abc8 ldr r0, [r0] | r0 = *(r0);
0x0006abca bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0006abce cmp r0, 0 |
| if (r0 == 0) {
0x0006abd0 beq.w 0x6ad42 | goto label_31;
| }
0x0006abd4 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0006abd6 ldr r3, [r1, 0x48] | r3 = *((r1 + 0x48));
0x0006abd8 strd r8, r6, [r0, 8] | __asm ("strd r8, r6, [r0, 8]");
0x0006abdc str r3, [r0] | *(r0) = r3;
0x0006abde add.w r3, r0, 0x10 | r3 = r0 + 0x10;
0x0006abe2 str r0, [r1, 0x48] | *((r1 + 0x48)) = r0;
| if (r5 != 0) {
0x0006abe4 cbz r5, 0x6abf4 |
0x0006abe6 mov r0, r3 | r0 = r3;
0x0006abe8 ldr r2, [r5, -0x8] | r2 = *((r5 - 0x8));
0x0006abec mov r1, r5 | r1 = r5;
0x0006abee blx 0x8610 | fcn_00008610 ();
0x0006abf0 ldc p6, c4, [r0, -0xc] | __asm ("ldc p6, c4, [r0, -0xc]");
| }
0x0006abf4 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006abf6 add.w sb, sb, sb, lsl 2 | sb += (sb << 2);
0x0006abfa add.w sb, r3, sb, lsl 2 | sb = r3 + (sb << 2);
0x0006abfe str r3, [r2, 0x4c] | *((r2 + 0x4c)) = r3;
0x0006ac00 ldrh r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x0006ac02 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006ac04 cmp r2, r3 |
| if (r2 >= r3) {
0x0006ac06 bge 0x6acae | goto label_32;
| }
0x0006ac08 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006ac0a movs r5, 0 | r5 = 0;
0x0006ac0c ldr r1, [sp, 0x64] | r1 = *(arg_64h);
0x0006ac0e mov r8, r2 | r8 = r2;
0x0006ac10 subs r1, r1, r2 | r1 -= r2;
0x0006ac12 strd r1, sl, [sp, 0x24] | __asm ("strd r1, sl, [var_24h]");
0x0006ac16 mov sl, r2 | sl = r2;
0x0006ac18 b 0x6ac22 |
| while (r2 != r4) {
0x0006ac1a add.w r8, r8, 1 | r8++;
0x0006ac1e cmp r3, r8 |
| if (r3 <= r8) {
0x0006ac20 ble 0x6acaa | goto label_33;
| }
| label_1:
0x0006ac22 ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x0006ac24 ldr.w r2, [r2, r8, lsl 2] | offset_0 = r8 << 2;
| r2 = *((r2 + offset_0));
0x0006ac28 ldr r2, [r2] | r2 = *(r2);
0x0006ac2a cmp r2, r4 |
0x0006ac2c bne 0x6ac1a |
| }
0x0006ac2e ldr r3, [sp, 0x24] | r3 = var_24h;
0x0006ac30 ldrd r0, r2, [fp, 0x6c] | __asm ("ldrd r0, r2, [arg_6ch]");
0x0006ac34 add.w r6, r3, r8 | r6 = r3 + r8;
0x0006ac38 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006ac3a cmp r3, 1 |
| if (r3 == 1) {
0x0006ac3c beq 0x6ad12 | goto label_34;
| }
0x0006ac3e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006ac40 cmp r3, 0 |
| if (r3 == 0) {
0x0006ac42 beq 0x6ad0e | goto label_35;
| }
0x0006ac44 ldr.w r3, [r3, r5, lsl 2] | offset_1 = r5 << 2;
| r3 = *((r3 + offset_1));
0x0006ac48 adds r5, 1 | r5++;
| label_4:
0x0006ac4a cmp r2, r0 |
| if (r2 <= r0) {
0x0006ac4c ble 0x6ad4a | goto label_36;
| }
0x0006ac4e ldr.w r1, [fp, 0x68] | r1 = *(arg_68h);
0x0006ac52 add.w r2, r0, r0, lsl 2 | r2 = r0 + (r0 << 2);
0x0006ac56 add.w ip, r0, 1 |
0x0006ac5a str.w ip, [fp, 0x6c] | __asm ("str.w ip, [arg_6ch]");
0x0006ac5e mov.w ip, 0x5e |
0x0006ac62 add.w lr, r1, r2, lsl 2 | lr = r1 + (r2 << 2);
0x0006ac66 str.w r3, [lr, 8] | __asm ("str.w r3, [lr, 8]");
0x0006ac6a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006ac6c str.w r6, [lr, 0xc] | __asm ("str.w r6, [lr, 0xc]");
0x0006ac70 str.w r3, [lr, 4] | __asm ("str.w r3, [lr, 4]");
0x0006ac74 movs r3, 0 | r3 = 0;
0x0006ac76 str.w r3, [lr, 0x10] | __asm ("str.w r3, [lr, 0x10]");
0x0006ac7a str.w ip, [r1, r2, lsl 2] | __asm ("str.w ip, [r1, r2, lsl 2]");
| label_5:
0x0006ac7e movs r3, 0 | r3 = 0;
0x0006ac80 str.w r0, [sb, 4] | __asm ("str.w r0, [sb, 4]");
0x0006ac84 mov r2, r6 | r2 = r6;
0x0006ac86 str r3, [sp] | *(sp) = r3;
0x0006ac88 movs r1, 0x32 | r1 = 0x32;
0x0006ac8a mov r0, fp | r0 = fp;
0x0006ac8c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006ac90 cmp sl, r8 |
0x0006ac92 itt ne |
| if (sl == r8) {
0x0006ac94 movne r3, 0xb8 | r3 = 0xb8;
| }
| if (sl == r8) {
0x0006ac96 strbne r3, [sb, 0x10] | *((sb + 0x10)) = r3;
| }
| if (sl == r8) {
0x0006ac9a beq 0x6acd4 | goto label_37;
| }
| label_3:
0x0006ac9c ldrh r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x0006ac9e add.w r8, r8, 1 | r8++;
0x0006aca2 add.w sb, sb, 0x14 | sb += 0x14;
0x0006aca6 cmp r3, r8 |
| if (r3 > r8) {
0x0006aca8 bgt 0x6ac22 | goto label_1;
| }
| label_33:
0x0006acaa ldr.w sl, [sp, 0x28] | sl = var_28h;
| label_32:
0x0006acae ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r3 != 0) {
0x0006acb0 cbz r3, 0x6acc2 |
0x0006acb2 ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x0006acb4 mov.w r3, 0x400 |
0x0006acb8 movt r3, 0x10 | r3 = 0x100400;
0x0006acbc ands r3, r2 | r3 &= r2;
| if (r3 == r2) {
0x0006acbe beq.w 0x6ae8c | goto label_38;
| }
| }
| label_6:
0x0006acc2 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0006acc4 cmp r1, 0 |
| if (r1 == 0) {
0x0006acc6 beq.w 0x6aadc | goto label_2;
| }
0x0006acca ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006accc ldr r0, [r3] | r0 = *(r3);
0x0006acce bl 0x16808 | fcn_00016808 (r0, r1);
0x0006acd2 b 0x6aadc | goto label_2;
| label_37:
0x0006acd4 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x0006acd6 str.w sl, [sb, 0xc] | __asm ("str.w sl, [sb, 0xc]");
0x0006acda cmp r3, 0 |
0x0006acdc ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006acde str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x0006ace2 ite eq |
| if (r3 != 0) {
0x0006ace4 moveq r3, 0x26 | r3 = 0x26;
| }
| if (r3 == 0) {
0x0006ace6 movne r3, 0x25 | r3 = 0x25;
| }
0x0006ace8 strb.w r3, [sb, 0x10] | *((sb + 0x10)) = r3;
0x0006acec cmp.w sl, 0 |
| if (sl == 0) {
0x0006acf0 beq 0x6ac9c | goto label_3;
| }
0x0006acf2 ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x0006acf4 sub.w r3, r3, sl | r3 -= sl;
0x0006acf8 str.w r3, [sb, 8] | __asm ("str.w r3, [sb, 8]");
0x0006acfc b 0x6ac9c | goto label_3;
| label_19:
0x0006acfe movs r2, 0 | r2 = 0;
0x0006ad00 ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x0006ad02 mov r0, fp | r0 = fp;
0x0006ad04 movs r1, 0x4b | r1 = 0x4b;
0x0006ad06 str r2, [sp] | *(sp) = r2;
0x0006ad08 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006ad0c b 0x6aadc | goto label_2;
| label_35:
0x0006ad0e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006ad10 b 0x6ac4a | goto label_4;
| label_34:
0x0006ad12 cmp r2, r0 |
| if (r2 <= r0) {
0x0006ad14 ble.w 0x6aef0 | goto label_39;
| }
0x0006ad18 ldr.w r2, [fp, 0x68] | r2 = *(arg_68h);
0x0006ad1c add.w r3, r0, r0, lsl 2 | r3 = r0 + (r0 << 2);
0x0006ad20 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0006ad22 add.w ip, r0, 1 |
0x0006ad26 str.w ip, [fp, 0x6c] | __asm ("str.w ip, [arg_6ch]");
0x0006ad2a mov.w ip, 0x87 |
0x0006ad2e add.w lr, r2, r3, lsl 2 | lr = r2 + (r3 << 2);
0x0006ad32 strd r1, r6, [lr, 4] | __asm ("strd r1, r6, [lr, 4]");
0x0006ad36 movs r1, 0 | r1 = 0;
0x0006ad38 strd r1, r1, [lr, 0xc] | __asm ("strd r1, r1, [lr, 0xc]");
0x0006ad3c str.w ip, [r2, r3, lsl 2] | __asm ("str.w ip, [r2, r3, lsl 2]");
0x0006ad40 b 0x6ac7e | goto label_5;
| label_31:
0x0006ad42 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006ad44 strd r0, r0, [r3, 0x48] | __asm ("strd r0, r0, [r3, 0x48]");
0x0006ad48 b 0x6acc2 | goto label_6;
| label_36:
0x0006ad4a ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006ad4c movs r1, 0x5e | r1 = 0x5e;
0x0006ad4e mov r0, fp | r0 = fp;
0x0006ad50 str r6, [sp] | *(sp) = r6;
0x0006ad52 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0006ad56 b 0x6ac7e | goto label_5;
| label_26:
0x0006ad58 ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x0006ad5a ldr r1, [sp, 0x10] | r1 = var_10h;
0x0006ad5c ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0006ad5e str r3, [sp, 0x20] | var_20h = r3;
0x0006ad60 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0006ad62 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0006ad64 str r3, [sp, 0x24] | var_24h = r3;
0x0006ad66 ldrh r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x0006ad68 cmp r1, r3 |
| if (r1 >= r3) {
0x0006ad6a bge 0x6ade0 | goto label_40;
| }
0x0006ad6c mov sb, r1 | sb = r1;
0x0006ad6e str r2, [sp, 0x18] | var_18h = r2;
0x0006ad70 mov r1, r3 | r1 = r3;
0x0006ad72 str r2, [sp, 0x1c] | var_1ch = r2;
0x0006ad74 strd fp, r5, [sp, 0x28] | __asm ("strd fp, r5, [var_28h]");
0x0006ad78 b 0x6ad84 |
| while (r4 != r3) {
| label_7:
0x0006ad7a add.w sb, sb, 1 | sb++;
0x0006ad7e cmp sb, r1 |
| if (sb >= r1) {
0x0006ad80 bge.w 0x6ae86 | goto label_41;
| }
0x0006ad84 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0006ad86 ldr.w r2, [r3, sb, lsl 2] | offset_2 = sb << 2;
| r2 = *((r3 + offset_2));
0x0006ad8a ldr r3, [r2] | r3 = *(r2);
0x0006ad8c cmp r4, r3 |
0x0006ad8e bne 0x6ad7a |
| }
0x0006ad90 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0006ad92 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006ad94 add.w fp, r2, -1 |
0x0006ad98 lsl.w fp, fp, 4 |
0x0006ad9c add.w r5, r3, fp | r5 = r3 + fp;
0x0006ada0 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0006ada2 cmp r2, 0 |
| if (r2 == 0) {
0x0006ada4 beq 0x6ad7a | goto label_7;
| }
0x0006ada6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0006ada8 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0006adaa ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006adac add fp, r3 |
0x0006adae bl 0x301b0 | fcn_000301b0 (r0, r1, r2);
0x0006adb2 movs r3, 0 | r3 = 0;
0x0006adb4 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0006adb6 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x0006adb8 str r0, [sp, 0x1c] | var_1ch = r0;
0x0006adba ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x0006adbe ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006adc0 bl 0x301b0 | fcn_000301b0 (r0, r1, r2);
0x0006adc4 movs r3, 0 | r3 = 0;
0x0006adc6 ldrh r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x0006adc8 str.w r3, [fp, 8] | __asm ("str.w r3, [arg_8h]");
0x0006adcc str r0, [sp, 0x18] | var_18h = r0;
0x0006adce b 0x6ad7a | goto label_7;
| do {
| label_9:
0x0006add0 cmp.w ip, 0 |
| if (ip == 0) {
0x0006add4 beq 0x6ae3a | goto label_42;
| }
| label_10:
0x0006add6 mov r1, r6 | r1 = r6;
0x0006add8 mov r0, r5 | r0 = r5;
0x0006adda bl 0x1a57c | fcn_0001a57c (r0, r1);
0x0006adde b 0x6aac6 | goto label_8;
| label_40:
0x0006ade0 strd r2, r2, [sp, 0x18] | __asm ("strd r2, r2, [var_1ch]");
| label_12:
0x0006ade4 ldr r3, [sp, 0x20] | r3 = var_20h;
| if (r3 != 0) {
0x0006ade6 cbz r3, 0x6adf0 |
0x0006ade8 mov r1, r3 | r1 = r3;
0x0006adea mov r0, r5 | r0 = r5;
0x0006adec bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x0006adf0 ldr r3, [sp, 0x24] | r3 = var_24h;
| if (r3 != 0) {
0x0006adf2 cbz r3, 0x6adfc |
0x0006adf4 mov r1, r3 | r1 = r3;
0x0006adf6 mov r0, r5 | r0 = r5;
0x0006adf8 bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x0006adfc ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0006adfe ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006ae00 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006ae02 str r2, [r1, 0x14] | *((r1 + 0x14)) = r2;
0x0006ae04 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0006ae06 str r0, [r3, 0x1c] | *((r3 + 0x1c)) = r0;
| if (r2 != 0) {
0x0006ae08 cbz r2, 0x6ae12 |
0x0006ae0a ldr r2, [r2] | r2 = *(r2);
0x0006ae0c cmp r2, 1 |
| if (r2 == 1) {
0x0006ae0e beq.w 0x6af1a | goto label_43;
| }
| }
| label_16:
0x0006ae12 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0006ae14 ldrb.w ip, [r5, 0x57] | ip = *((r5 + 0x57));
0x0006ae18 cmp r3, 0 |
0x0006ae1a beq 0x6add0 |
| } while (r3 == 0);
0x0006ae1c ldr r1, [r3] | r1 = *(r3);
0x0006ae1e cmp r1, 0 |
0x0006ae20 itt gt |
| if (r1 <= 0) {
0x0006ae22 movgt r2, 0 | r2 = 0;
| }
| if (r1 > 0) {
0x0006ae24 movgt r0, r2 | r0 = r2;
| goto label_44;
| }
| if (r1 <= 0) {
| label_44:
0x0006ae26 ble 0x6add0 | goto label_9;
| }
| do {
0x0006ae28 adds r2, 1 | r2++;
0x0006ae2a strh r0, [r3, 0x14] | *((r3 + 0x14)) = r0;
0x0006ae2c cmp r1, r2 |
0x0006ae2e add.w r3, r3, 0x10 | r3 += 0x10;
0x0006ae32 bne 0x6ae28 |
| } while (r1 != r2);
0x0006ae34 cmp.w ip, 0 |
| if (ip != 0) {
0x0006ae38 bne 0x6add6 | goto label_10;
| }
| label_42:
0x0006ae3a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006ae3c lsl.w sb, r8, 2 | sb = r8 << 2;
0x0006ae40 ldr r0, [r3] | r0 = *(r3);
0x0006ae42 cmp r0, 0 |
| if (r0 == 0) {
0x0006ae44 beq 0x6af02 | goto label_45;
| }
0x0006ae46 mov r2, sb | r2 = sb;
0x0006ae48 movs r3, 0 | r3 = 0;
0x0006ae4a bl 0x21784 | fcn_00021784 (r0, r1);
0x0006ae4e str r0, [sp, 0x1c] | var_1ch = r0;
| do {
0x0006ae50 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 != 0) {
0x0006ae52 cbz r3, 0x6ae5e |
0x0006ae54 mov r2, sb | r2 = sb;
0x0006ae56 movs r1, 0 | r1 = 0;
0x0006ae58 mov r0, r3 | r0 = r3;
0x0006ae5a blx 0x839c | fcn_0000839c ();
| }
0x0006ae5e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006ae60 mov r1, r6 | r1 = r6;
0x0006ae62 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006ae64 movs r2, 4 | r2 = 4;
0x0006ae66 str r3, [sp] | *(sp) = r3;
0x0006ae68 add r3, sp, 0x30 | r3 += var_30h;
0x0006ae6a str r3, [sp, 4] | var_4h = r3;
0x0006ae6c movs r3, 0 | r3 = 0;
0x0006ae6e bl 0x66850 | r0 = fcn_00066850 (r0, r1, r2, r3, r4, r5, r6);
0x0006ae72 mov r3, r0 | r3 = r0;
0x0006ae74 mov r1, r6 | r1 = r6;
0x0006ae76 str r3, [sp, 0x20] | var_20h = r3;
0x0006ae78 mov r0, r5 | r0 = r5;
0x0006ae7a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0006ae7c str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0006ae7e str r3, [sp, 0x18] | var_18h = r3;
0x0006ae80 bl 0x1a57c | fcn_0001a57c (r0, r1);
0x0006ae84 b 0x6ab4e | goto label_11;
| label_41:
0x0006ae86 ldrd fp, r5, [sp, 0x28] | __asm ("ldrd fp, r5, [var_28h]");
0x0006ae8a b 0x6ade4 | goto label_12;
| label_38:
0x0006ae8c ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006ae8e mov r0, fp | r0 = fp;
0x0006ae90 movs r1, 0x7d | r1 = 0x7d;
0x0006ae92 str r2, [sp] | *(sp) = r2;
0x0006ae94 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006ae96 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0006ae98 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006ae9c b 0x6acc2 | goto label_6;
| label_23:
0x0006ae9e mov.w r8, 0 | r8 = 0;
0x0006aea2 b 0x6aa86 | goto label_13;
| label_25:
0x0006aea4 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0006aea6 ldrb r3, [r2] | r3 = *(r2);
0x0006aea8 cmp r3, 0xb0 |
0x0006aeaa it eq |
| if (r3 != 0xb0) {
0x0006aeac ldrbeq r3, [r2, 2] | r3 = *((r2 + 2));
| }
0x0006aeae cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x0006aeb0 beq 0x6af32 | goto label_46;
| }
0x0006aeb2 cmp r3, 0x8a |
0x0006aeb4 itett eq |
| if (r3 != 0x8a) {
0x0006aeb6 ldreq r3, [r2, 0x14] | r3 = *((r2 + 0x14));
| }
| if (r3 == 0x8a) {
0x0006aeb8 movne r3, 1 | r3 = 1;
| }
| if (r3 != 0x8a) {
0x0006aeba ldreq r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| }
| if (r3 != 0x8a) {
0x0006aebc ldreq r3, [r3] | r3 = *(r3);
| }
| label_17:
0x0006aebe cmp r3, r8 |
0x0006aec0 it lt |
| if (r3 >= r8) {
0x0006aec2 movlt r3, r8 | r3 = r8;
| }
0x0006aec4 lsl.w sb, r3, 2 | sb = r3 << 2;
| if (r5 == 0) {
0x0006aec8 cbz r5, 0x6af0e | goto label_47;
| }
0x0006aeca mov r0, r5 | r0 = r5;
0x0006aecc mov r2, sb | r2 = sb;
0x0006aece movs r3, 0 | r3 = 0;
0x0006aed0 bl 0x21784 | fcn_00021784 (r0, r1);
0x0006aed4 str r0, [sp, 0x1c] | var_1ch = r0;
| label_15:
0x0006aed6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 != 0) {
0x0006aed8 cbz r3, 0x6aee4 |
0x0006aeda mov r2, sb | r2 = sb;
0x0006aedc movs r1, 0 | r1 = 0;
0x0006aede mov r0, r3 | r0 = r3;
0x0006aee0 blx 0x839c | fcn_0000839c ();
| }
0x0006aee4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006aee6 str r3, [sp] | *(sp) = r3;
0x0006aee8 add r3, sp, 0x30 | r3 += var_30h;
0x0006aeea str r3, [sp, 4] | var_4h = r3;
0x0006aeec movs r3, 0 | r3 = 0;
0x0006aeee b 0x6ab3e | goto label_14;
| label_39:
0x0006aef0 movs r3, 0 | r3 = 0;
0x0006aef2 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006aef4 str r3, [sp] | *(sp) = r3;
0x0006aef6 movs r1, 0x87 | r1 = 0x87;
0x0006aef8 mov r3, r6 | r3 = r6;
0x0006aefa mov r0, fp | r0 = fp;
0x0006aefc bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0006af00 b 0x6ac7e | goto label_5;
| label_45:
0x0006af02 mov r1, r0 | r1 = r0;
0x0006af04 mov r0, sb | r0 = sb;
0x0006af06 bl 0x13558 | fcn_00013558 (r0);
0x0006af0a str r0, [sp, 0x1c] | var_1ch = r0;
0x0006af0c b 0x6ae50 |
| } while (1);
| label_47:
0x0006af0e mov r1, r5 | r1 = r5;
0x0006af10 mov r0, sb | r0 = sb;
0x0006af12 bl 0x13558 | fcn_00013558 (r0);
0x0006af16 str r0, [sp, 0x1c] | var_1ch = r0;
0x0006af18 b 0x6aed6 | goto label_15;
| label_43:
0x0006af1a ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006af1c movs r3, 0 | r3 = 0;
0x0006af1e mov r0, r5 | r0 = r5;
0x0006af20 ldr.w sb, [r2, 8] | sb = *((r2 + 8));
0x0006af24 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0006af26 bl 0x1a57c | fcn_0001a57c (r0, r1);
0x0006af2a ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0006af2c str.w sb, [r6, 0xc] | __asm ("str.w sb, [r6, 0xc]");
0x0006af30 b 0x6ae12 | goto label_16;
| label_46:
0x0006af32 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0006af34 ldr r3, [r3] | r3 = *(r3);
0x0006af36 b 0x6aebe | goto label_17;
| label_29:
0x0006af38 blx 0x883c | fcn_0000883c ();
0x0006af3c b 0x6b458 | return void (*0x6b458)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6af48 */
| #include <stdint.h>
|
; (fcn) fcn.0006af48 () | void fcn_0006af48 (int16_t arg_8h, int16_t arg_14h, int16_t arg_48h, arithmetic arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006af48 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006af4c sub sp, 0x24 |
0x0006af4e ldr r7, [r1, 0x50] | r7 = *((r1 + 0x50));
0x0006af50 mov fp, r1 |
0x0006af52 mov r8, r0 | r8 = r0;
0x0006af54 str r2, [sp, 0x18] | var_18h = r2;
0x0006af56 ldrh.w sl, [r7, 0x18] | sl = *((r7 + 0x18));
0x0006af5a ldr r2, [r0, 0x2c] | r2 = *(arg_48hx2c);
0x0006af5c ldr r1, [r0, 8] | r1 = *((r0 + 8));
0x0006af5e ldr r4, [r0] | r4 = *(r0);
0x0006af60 add r3, sl | r3 += sl;
0x0006af62 ldrh r5, [r7, 0x2e] | r5 = *((r7 + 0x2e));
0x0006af64 add.w sb, r2, 1 | sb = r2 + 1;
0x0006af68 str r3, [sp, 8] | var_8h = r3;
0x0006af6a adds r3, r2, r3 | r3 = r2 + r3;
0x0006af6c str r1, [sp, 0xc] | var_ch = r1;
0x0006af6e ldr r1, [r7, 0x20] | r1 = *((r7 + 0x20));
0x0006af70 str r3, [r0, 0x2c] | *(arg_48hx2c) = r3;
0x0006af72 mov r0, r4 | r0 = r4;
0x0006af74 bl 0x35b10 | r0 = fcn_00035b10 (r0, r1);
0x0006af78 mov r1, r0 | r1 = r0;
0x0006af7a mov r0, r4 | r0 = r4;
0x0006af7c bl 0x22990 | fcn_00022990 (r0, r1);
0x0006af80 str r0, [sp, 0x14] | var_14h = r0;
0x0006af82 cmp r5, 0 |
| if (r5 != 0) {
0x0006af84 bne.w 0x6b0b8 | goto label_11;
| }
0x0006af88 mov r4, r5 | r4 = r5;
0x0006af8a cmp.w sl, 0 |
| if (sl == 0) {
0x0006af8e beq.w 0x6b180 | goto label_12;
| }
| label_7:
0x0006af92 mov r5, r4 | r5 = r4;
0x0006af94 str r4, [sp, 0x10] | var_10h = r4;
0x0006af96 ldr r4, [sp, 0x18] | r4 = var_18h;
| label_2:
0x0006af98 ldr r1, [r7, 0x34] | r1 = *((r7 + 0x34));
0x0006af9a add.w r6, sb, r5 | r6 = sb + r5;
0x0006af9e mov r3, r5 | r3 = r5;
0x0006afa0 mov r2, fp | r2 = fp;
0x0006afa2 mov r0, r8 | r0 = r8;
0x0006afa4 ldr.w r1, [r1, r5, lsl 2] | offset_0 = r5 << 2;
| r1 = *((r1 + offset_0));
0x0006afa8 adds r5, 1 | r5++;
0x0006afaa strd r4, r6, [sp] | __asm ("strd r4, r6, [sp]");
0x0006afae bl 0x6a9fc | r0 = fcn_0006a9fc (r0, r1, r2, r3, r4, r5, r6);
0x0006afb2 cmp r6, r0 |
| if (r6 == r0) {
0x0006afb4 beq 0x6b062 | goto label_13;
| }
0x0006afb6 ldr r3, [sp, 8] | r3 = var_8h;
0x0006afb8 mov r2, r0 | r2 = r0;
0x0006afba cmp r3, 1 |
0x0006afbc mov r3, r6 | r3 = r6;
| if (r3 != 1) {
0x0006afbe bne 0x6b056 | goto label_14;
| }
0x0006afc0 ldr r4, [sp, 0x10] | r4 = var_10h;
0x0006afc2 cmp.w sb, 0 |
| if (sb != 0) {
0x0006afc6 bne 0x6b06c | goto label_15;
| }
| label_3:
0x0006afc8 cmp sl, r4 |
| if (sl <= r4) {
0x0006afca ble 0x6b048 | goto label_8;
| }
0x0006afcc str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h]");
0x0006afd0 movs r6, 0x41 | r6 = 0x41;
0x0006afd2 ldr r5, [sp, 0x14] | r5 = var_14h;
0x0006afd4 mov fp, r2 |
0x0006afd6 b 0x6aff0 |
| while (r1 < r2) {
0x0006afd8 ldr r2, [r3] | r2 = *(r3);
0x0006afda subs r3, r5, 0 | r3 = r5 - 0;
0x0006afdc it ne |
| if (r3 == r5) {
0x0006afde movne r3, 1 | r3 = 1;
| }
0x0006afe0 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0006afe2 ands.w r3, r3, r2, lsr 12 | r3 &= (r2 >> 12);
0x0006afe6 it ne |
| if (r3 == r3) {
0x0006afe8 strbne r6, [r5, r4] | *((r5 + r4)) = r6;
| }
| label_0:
0x0006afea adds r4, 1 | r4++;
0x0006afec cmp sl, r4 |
| if (sl == r4) {
0x0006afee beq 0x6b046 | goto label_16;
| }
| label_1:
0x0006aff0 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0006aff2 ldr.w r3, [r3, r4, lsl 2] | offset_1 = r4 << 2;
| r3 = *((r3 + offset_1));
0x0006aff6 ldrh r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0006aff8 lsls r1, r2, 0x1f | r1 = r2 << 0x1f;
0x0006affa bmi 0x6afd8 |
| }
0x0006affc lsls r2, r2, 0x17 | r2 <<= 0x17;
| if (r2 < r2) {
0x0006affe bmi 0x6afea | goto label_0;
| }
0x0006b000 ldr r2, [r3] | r2 = *(r3);
0x0006b002 ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x0006b004 ldr.w sb, [r2, 0x10] | sb = *((r2 + 0x10));
0x0006b008 ands r3, r3, 0x800 | r3 &= 0x800;
| if (r3 == r3) {
0x0006b00c beq 0x6b082 | goto label_17;
| }
| label_4:
0x0006b00e ldr.w r3, [r8, 0x24] | r3 = *((r8 + 0x24));
0x0006b012 cmp r3, 0 |
| if (r3 != 0) {
0x0006b014 bne 0x6afea | goto label_0;
| }
0x0006b016 mov r0, sb | r0 = sb;
0x0006b018 bl 0xd620 | fcn_0000d620 (r0);
0x0006b01c ldrb r1, [r5, r4] | r1 = *((r5 + r4));
0x0006b01e cmp r0, 0x40 |
0x0006b020 it hi |
| if (r0 > 0x40) {
0x0006b022 cmphi r1, 0x40 | __asm ("cmphi r1, 0x40");
| }
| if (r0 < 0x40) {
0x0006b024 bls 0x6b0a4 | goto label_18;
| }
0x0006b026 cmp r1, 0x42 |
0x0006b028 it ls |
| if (r1 <= 0x42) {
0x0006b02a cmpls r0, 0x42 | __asm ("cmpls r0, 0x42");
| }
| if (r1 <= 0x42) {
0x0006b02c bhi 0x6b032 |
| label_6:
0x0006b02e movs r1, 0x41 | r1 = 0x41;
0x0006b030 strb r1, [r5, r4] | *((r5 + r4)) = r1;
| }
| label_5:
0x0006b032 mov r0, sb | r0 = sb;
0x0006b034 bl 0xa9a4 | r0 = fcn_0000a9a4 (r0, r1);
0x0006b038 cmp r0, 0 |
| if (r0 == 0) {
0x0006b03a beq 0x6afea | goto label_0;
| }
0x0006b03c movs r3, 0x41 | r3 = 0x41;
0x0006b03e strb r3, [r5, r4] | *((r5 + r4)) = r3;
0x0006b040 adds r4, 1 | r4++;
0x0006b042 cmp sl, r4 |
| if (sl != r4) {
0x0006b044 bne 0x6aff0 | goto label_1;
| }
| label_16:
0x0006b046 mov r2, fp | r2 = fp;
| label_8:
0x0006b048 ldr r3, [sp, 0x48] | r3 = *(arg_48h);
0x0006b04a mov r0, r2 | r0 = r2;
0x0006b04c ldr r1, [sp, 0x14] | r1 = var_14h;
0x0006b04e str r1, [r3] | *(r3) = r1;
0x0006b050 add sp, 0x24 |
0x0006b052 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x0006b056 movs r1, 0 | r1 = 0;
0x0006b058 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0006b05a str r1, [sp] | *(sp) = r1;
0x0006b05c movs r1, 0x50 | r1 = 0x50;
0x0006b05e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_13:
0x0006b062 cmp sl, r5 |
| if (sl > r5) {
0x0006b064 bgt 0x6af98 | goto label_2;
| }
0x0006b066 ldr r4, [sp, 0x10] | r4 = var_10h;
0x0006b068 mov r2, sb | r2 = sb;
0x0006b06a b 0x6afc8 | goto label_3;
| label_15:
0x0006b06c ldrb.w r3, [r8, 0x13] | r3 = *((r8 + 0x13));
0x0006b070 cmp r3, 7 |
| if (r3 > 7) {
0x0006b072 bhi 0x6afc8 | goto label_3;
| }
0x0006b074 adds r1, r3, 1 | r1 = r3 + 1;
0x0006b076 adds r3, 0x26 | r3 += 0x26;
0x0006b078 strb.w r1, [r8, 0x13] | *((r8 + 0x13)) = r1;
0x0006b07c str.w sb, [r8, r3, lsl 2] | __asm ("str.w sb, [r8, r3, lsl 2]");
0x0006b080 b 0x6afc8 | goto label_3;
| label_17:
0x0006b082 mov r0, sb | r0 = sb;
0x0006b084 str r3, [sp, 8] | var_8h = r3;
0x0006b086 bl 0xa934 | fcn_0000a934 (r0);
0x0006b08a ldr r3, [sp, 8] | r3 = var_8h;
0x0006b08c cmp r0, 0 |
| if (r0 == 0) {
0x0006b08e beq 0x6b00e | goto label_4;
| }
0x0006b090 str r3, [sp] | *(sp) = r3;
0x0006b092 add.w r2, fp, r4 | r2 = fp + r4;
0x0006b096 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006b098 movs r1, 0x32 | r1 = 0x32;
0x0006b09a ldr r0, [sp, 0xc] | r0 = var_ch;
0x0006b09c ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0006b09e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006b0a2 b 0x6b00e | goto label_4;
| label_18:
0x0006b0a4 cmp r0, 0x40 |
0x0006b0a6 itet hi |
| if (r0 <= 0x40) {
0x0006b0a8 orrhi r3, r0, 0x40 | r3 = r0 | 0x40;
| }
| if (r0 <= 0x40) {
0x0006b0ac orrhi r3, r1, 0x40 | r3 = r1 | 0x40;
| }
| if (r0 > 0x40) {
0x0006b0b0 uxtb r3, r3 | r3 = (int8_t) r3;
| }
0x0006b0b2 cmp r3, 0x41 |
| if (r3 != 0x41) {
0x0006b0b4 bne 0x6b032 | goto label_5;
| }
0x0006b0b6 b 0x6b02e | goto label_6;
| label_11:
0x0006b0b8 add.w r3, r5, sb | r3 = r5 + sb;
0x0006b0bc ldr r4, [sp, 0xc] | r4 = var_ch;
0x0006b0be subs r3, 1 | r3--;
0x0006b0c0 movs r1, 0x4b | r1 = 0x4b;
0x0006b0c2 str r3, [sp] | *(sp) = r3;
0x0006b0c4 movs r2, 0 | r2 = 0;
0x0006b0c6 ldr.w r6, [fp, 8] | r6 = *(arg_8h);
0x0006b0ca mov r3, sb | r3 = sb;
0x0006b0cc mov r0, r4 | r0 = r4;
0x0006b0ce str r6, [sp, 0x10] | var_10h = r6;
0x0006b0d0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006b0d4 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006b0d6 movs r3, 0 | r3 = 0;
0x0006b0d8 mov r0, r4 | r0 = r4;
0x0006b0da str r3, [sp] | *(sp) = r3;
0x0006b0dc cmp r2, 0 |
0x0006b0de mov r2, r6 | r2 = r6;
0x0006b0e0 ite ne |
| if (r2 == 0) {
0x0006b0e2 movne r1, 0x1f | r1 = 0x1f;
| }
| if (r2 != 0) {
0x0006b0e4 moveq r1, 0x23 | r1 = 0x23;
| }
0x0006b0e6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006b0ea ldrd r4, r2, [r4, 0x6c] | __asm ("ldrd r4, r2, [r4, 0x6c]");
0x0006b0ee movs r3, 0 | r3 = 0;
0x0006b0f0 cmp r4, r2 |
| if (r4 >= r2) {
0x0006b0f2 bge 0x6b18c | goto label_19;
| }
0x0006b0f4 ldr r6, [sp, 0xc] | r6 = var_ch;
0x0006b0f6 add.w r1, r4, r4, lsl 2 | r1 = r4 + (r4 << 2);
0x0006b0fa adds r0, r4, 1 | r0 = r4 + 1;
0x0006b0fc vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006b100 lsls r1, r1, 2 | r1 <<= 2;
0x0006b102 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0006b104 str r0, [r6, 0x6c] | *((r6 + 0x6c)) = r0;
0x0006b106 movs r0, 8 | r0 = 8;
0x0006b108 str r0, [r2, r1] | *((r2 + r1)) = r0;
0x0006b10a add r2, r1 | r2 += r1;
0x0006b10c adds r1, r2, 4 | r1 = r2 + 4;
0x0006b10e vst1.32 {d16}, [r1] | __asm ("vst1.32 {d16}, [r1]");
0x0006b112 strd r3, r3, [r2, 0xc] | __asm ("strd r3, r3, [r2, 0xc]");
| label_10:
0x0006b116 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006b118 ldr r6, [sp, 0xc] | r6 = var_ch;
0x0006b11a ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006b11c cmp r3, 0 |
0x0006b11e strd sb, r5, [sp] | __asm ("strd sb, r5, [sp]");
0x0006b122 mov.w r3, 0 | r3 = 0;
0x0006b126 ite ne |
| if (r3 == 0) {
0x0006b128 movne r1, 0x14 | r1 = 0x14;
| }
| if (r3 != 0) {
0x0006b12a moveq r1, 0x17 | r1 = 0x17;
| }
0x0006b12c mov r0, r6 | r0 = r6;
0x0006b12e bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0006b132 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006b134 cmp r4, 0 |
0x0006b136 str.w r0, [fp, 0x14] | __asm ("str.w r0, [arg_14h]");
0x0006b13a ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0006b13c ldr r2, [r2] | r2 = *(r2);
0x0006b13e it lt |
| if (r4 >= 0) {
0x0006b140 addlt r4, r3, -1 | r4 = r3 + -1;
| }
0x0006b144 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
| if (r2 != 0) {
0x0006b148 cbnz r2, 0x6b184 | goto label_20;
| }
0x0006b14a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006b14c add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x0006b150 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x0006b152 add.w r2, r2, r4, lsl 2 | r2 += (r4 << 2);
0x0006b156 str r3, [r2, 8] | *((r2 + 8)) = r3;
| label_9:
0x0006b158 str r7, [sp, 0x1c] | var_1ch = r7;
0x0006b15a movs r4, 0 | r4 = 0;
0x0006b15c ldrd r7, r6, [sp, 0xc] | __asm ("ldrd r7, r6, [var_ch]");
| do {
0x0006b160 add.w r3, sb, r4 | r3 = sb + r4;
0x0006b164 mov r2, r6 | r2 = r6;
0x0006b166 str r3, [sp] | *(sp) = r3;
0x0006b168 movs r1, 0x5e | r1 = 0x5e;
0x0006b16a mov r3, r4 | r3 = r4;
0x0006b16c mov r0, r7 | r0 = r7;
0x0006b16e adds r4, 1 | r4++;
0x0006b170 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006b174 cmp r5, r4 |
0x0006b176 bne 0x6b160 |
| } while (r5 != r4);
0x0006b178 cmp sl, r4 |
0x0006b17a ldr r7, [sp, 0x1c] | r7 = var_1ch;
| if (sl > r4) {
0x0006b17c bgt.w 0x6af92 | goto label_7;
| }
| label_12:
0x0006b180 mov r2, sb | r2 = sb;
0x0006b182 b 0x6b048 | goto label_8;
| label_20:
0x0006b184 ldr r2, [pc, 0x14] |
0x0006b186 add r2, pc | r2 = 0xd6326;
0x0006b188 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x0006b18a b 0x6b158 | goto label_9;
| label_19:
0x0006b18c ldr r0, [sp, 0xc] | r0 = var_ch;
0x0006b18e mov r2, r3 | r2 = r3;
0x0006b190 movs r1, 8 | r1 = 8;
0x0006b192 str r3, [sp] | *(sp) = r3;
0x0006b194 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0006b198 mov r4, r0 | r4 = r0;
0x0006b19a b 0x6b116 | goto label_10;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6b36c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0006b36c () | void fcn_0006b36c (arithmetic arg1, int16_t arg2, int16_t arg3) {
| int16_t var_bp_0h;
| int16_t var_bp_4h;
| int16_t var_8h;
| int16_t var_9h;
| int16_t var_bp_ch;
| int16_t var_bp_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_0h;
| int16_t var_2ch_2;
| int16_t var_14h_2;
| arithmetic var_sp_18h;
| int16_t var_1ch;
| arithmetic x;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_78h_2;
| int16_t var_79h;
| int16_t var_7ah;
| int16_t var_7bh;
| int16_t var_7ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006b36c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006b370 mov fp, r1 |
0x0006b372 vpush {d8} | __asm ("vpush {d8}");
0x0006b376 sub sp, 0x84 |
0x0006b378 str r2, [sp, 0x24] | var_24h = r2;
0x0006b37a ldr r5, [r1] | r5 = *(r1);
0x0006b37c mov r1, r2 | r1 = r2;
0x0006b37e ldr.w r2, [pc, 0xb70] |
0x0006b382 ldr.w r3, [pc, 0xb70] | r3 = *(0x6bef6);
0x0006b386 str r0, [sp, 0x20] | x = r0;
0x0006b388 add r2, pc | r2 = 0xd727e;
0x0006b38a ldr r3, [r2, r3] |
0x0006b38c ldr r3, [r3] | r3 = *(0xd727e);
0x0006b38e str r3, [sp, 0x7c] | var_7ch = r3;
0x0006b390 mov.w r3, 0 | r3 = 0;
0x0006b394 ldr r3, [r5] | r3 = *(r5);
0x0006b396 str r3, [sp, 0x1c] | var_1ch = r3;
0x0006b398 ldr r3, [r3] | r3 = *(r3);
0x0006b39a str r3, [sp, 0x2c] | var_2ch = r3;
0x0006b39c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006b3a0 cmp r3, 0 |
| if (r3 != 0) {
0x0006b3a2 bne.w 0x6b52e | goto label_1;
| }
0x0006b3a6 add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x0006b3aa ldr.w r7, [fp, 0x18] | r7 = var_18h;
0x0006b3ae add.w r0, r5, 0x1f8 | r0 = r5 + 0x1f8;
0x0006b3b2 lsls r2, r2, 4 | r2 <<= 4;
0x0006b3b4 str r0, [sp, 0x28] | var_28h = r0;
0x0006b3b6 ldr r1, [r7, r2] | r1 = *((r7 + r2));
0x0006b3b8 add r7, r2 | r7 += r2;
0x0006b3ba str r2, [sp, 0x18] | var_sp_18h = r2;
0x0006b3bc str.w r3, [r5, 0x1f8] | __asm ("str.w r3, aav.0x000000ff");
0x0006b3c0 ldr r6, [r1, 0xc] | r6 = *((r1 + 0xc));
0x0006b3c2 str r1, [sp, 0x14] | var_14h_2 = r1;
0x0006b3c4 cmp r6, 0 |
| if (r6 == 0) {
0x0006b3c6 beq.w 0x6b552 | goto label_87;
| }
0x0006b3ca mov r1, r6 | r1 = r6;
0x0006b3cc bl 0x1c3b4 | fcn_0001c3b4 (r0, r1);
0x0006b3d0 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b3d2 strd r0, r1, [sp, 0x30] | __asm ("strd r0, r1, [sp, 0x30]");
0x0006b3d6 ldrb.w sl, [r3] | sl = *(r3);
0x0006b3da cmp.w sl, 0x31 |
| if (sl == 0x31) {
0x0006b3de beq.w 0x6b564 | goto label_88;
| }
| label_0:
0x0006b3e2 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b3e4 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x0006b3e6 cmp r1, 0 |
| if (r1 == 0) {
0x0006b3e8 beq.w 0x6b63a | goto label_89;
| }
0x0006b3ec ldr r0, [sp, 0x28] | r0 = var_28h;
0x0006b3ee bl 0x1c3b4 | fcn_0001c3b4 (r0, r1);
| label_4:
0x0006b3f2 strd r0, r1, [r7, 0x20] | __asm ("strd r0, r1, [r7, 0x20]");
| if (r6 != 0) {
0x0006b3f6 cbz r6, 0x6b40e |
0x0006b3f8 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b3fa ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x0006b3fc tst.w r6, 0x41000 |
| if ((r6 & 0x41000) != 0) {
0x0006b400 bne 0x6b40e | goto label_90;
| }
0x0006b402 ldr.w sb, [r3, 0x14] | sb = *((r3 + 0x14));
0x0006b406 cmp.w sb, 0 |
| if (sb == 0) {
0x0006b40a beq.w 0x6bb66 | goto label_91;
| }
| }
| label_90:
0x0006b40e ldr r4, [sp, 0x14] | r4 = var_14h_2;
0x0006b410 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0006b412 mov r1, r4 | r1 = r4;
0x0006b414 bl 0x1c3b4 | fcn_0001c3b4 (r0, r1);
0x0006b418 ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x0006b41a mov r8, r0 | r8 = r0;
0x0006b41c mov sb, r1 | sb = r1;
| label_2:
0x0006b41e ldr.w r3, [r5, 0x1f8] | r3 = *((r5 + 0x1f8));
| if (r3 != 0) {
0x0006b422 cbz r3, 0x6b42c |
0x0006b424 ldrh r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x0006b426 orr r3, r3, 0x1000 | r3 |= 0x1000;
0x0006b42a strh r3, [r7, 0xa] | *((r7 + 0xa)) = r3;
| }
0x0006b42c lsls r3, r6, 0x1e | r3 = r6 << 0x1e;
| if (r3 != r6) {
0x0006b42e bne.w 0x6b5a0 | goto label_92;
| }
| label_9:
0x0006b432 movs r3, 0 | r3 = 0;
0x0006b434 strd r3, r3, [sp, 0x38] | __asm ("strd r3, r3, [sp, 0x38]");
| label_3:
0x0006b438 sub.w r3, sl, 0x2d | r3 = sl - 0x2d;
0x0006b43c vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x0006b440 uxtb r3, r3 | r3 = (int8_t) r3;
0x0006b442 movs r2, 0 | r2 = 0;
0x0006b444 strd r8, sb, [r7, 0x28] | __asm ("strd r8, sb, [r7, 0x28]");
0x0006b448 cmp r3, 0xc |
0x0006b44a vstr d16, [r7, 0x10] | __asm ("vstr d16, [r7, 0x10]");
0x0006b44e strh r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
| if (r3 > 0xc) {
0x0006b450 bhi 0x6b502 | goto label_93;
| }
0x0006b452 movw r2, 0x1f31 | r2 = 0x1f31;
0x0006b456 invalid |
0x0006b458 ssat r7, 0x1d, r3, lsl 3 | __asm ("ssat r7, 0x1d, r3, lsl 3");
| if (r3 >= 0xc) {
0x0006b45c bpl 0x6b502 | goto label_93;
| }
0x0006b45e ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b460 ldr r5, [r3, 0xc] | r5 = *((r3 + 0xc));
| if (r5 != 0) {
0x0006b462 cbnz r5, 0x6b46a | goto label_94;
| }
0x0006b464 b 0x6b470 | goto label_95;
| do {
0x0006b466 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
| if (r5 == 0) {
0x0006b468 cbz r5, 0x6b470 | goto label_95;
| }
| label_94:
0x0006b46a ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0006b46c lsls r0, r3, 0x12 | r0 = r3 << 0x12;
0x0006b46e bmi 0x6b466 |
| } while (r0 < r3);
| label_95:
0x0006b470 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b472 ldr r6, [r3, 0x10] | r6 = *((r3 + 0x10));
| if (r6 != 0) {
0x0006b474 cbnz r6, 0x6b47c | goto label_96;
| }
0x0006b476 b 0x6b482 | goto label_97;
| do {
0x0006b478 ldr r6, [r6, 0xc] | r6 = *((r6 + 0xc));
| if (r6 == 0) {
0x0006b47a cbz r6, 0x6b482 | goto label_97;
| }
| label_96:
0x0006b47c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0006b47e lsls r1, r3, 0x12 | r1 = r3 << 0x12;
0x0006b480 bmi 0x6b478 |
| } while (r1 < r3);
| label_97:
0x0006b482 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0006b484 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0006b486 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0006b488 ldr r0, [sp, 0x20] | r0 = x;
0x0006b48a ands r3, r2 | r3 &= r2;
0x0006b48c ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x0006b48e ands r2, r1 | r2 &= r1;
0x0006b490 add r1, sp, 0x70 | r1 += var_70h;
0x0006b492 orrs r3, r2 | r3 |= r2;
0x0006b494 str r1, [sp, 0x40] | var_40h = r1;
0x0006b496 ite eq |
| if (r3 == r2) {
0x0006b498 movweq r3, 0x3fff | __asm ("movweq r3, aav.0x000000ff");
| }
| if (r3 != r2) {
0x0006b49c mov.w r3, 0x800 | r3 = 0x800;
| }
0x0006b4a0 str r3, [sp, 0x44] | var_44h = r3;
0x0006b4a2 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0006b4a4 cmp r3, 0 |
0x0006b4a6 ittt gt |
| if (r3 <= 0) {
0x0006b4a8 ldrgt r2, [r5, 0x14] | r2 = *((r5 + 0x14));
| }
| if (r3 <= 0) {
0x0006b4aa addgt r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
| }
| if (r3 > 0) {
0x0006b4ae ldr r5, [r3, -0x8] | r5 = *((r3 - 0x8));
| }
0x0006b4b2 str r1, [sp] | *(sp) = r1;
0x0006b4b4 ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [var_30h]");
0x0006b4b8 strd r5, sl, [sp, 4] | __asm ("strd r5, sl, [sp, 4]");
0x0006b4bc bl 0x38e4c | fcn_00038e4c (r0, r1, r2, r3, r4, r5);
0x0006b4c0 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0006b4c2 cmp r0, 0 |
| if (r0 == 0) {
0x0006b4c4 beq.w 0x6b9ca | goto label_98;
| }
0x0006b4c8 vldr d16, [sp, 0x70] | __asm ("vldr d16, [sp, 0x70]");
0x0006b4cc add.w r3, r7, 0x14 | r3 = r7 + 0x14;
0x0006b4d0 cmp.w sl, 0x31 |
0x0006b4d4 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
| if (sl == 0x31) {
0x0006b4d8 beq.w 0x6c23a | goto label_99;
| }
0x0006b4dc cmp.w sl, 0x32 |
| if (sl == 0x32) {
0x0006b4e0 beq.w 0x6bbf2 | goto label_100;
| }
0x0006b4e4 cmp.w sl, 0x2d |
| if (sl == 0x2d) {
0x0006b4e8 beq.w 0x6bbda | goto label_101;
| }
0x0006b4ec sub.w r2, sl, 0x35 | r2 = sl - 0x35;
0x0006b4f0 movs r3, 2 | r3 = 2;
0x0006b4f2 lsls r3, r2 | r3 <<= r2;
0x0006b4f4 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0006b4f6 ands r3, r2 | r3 &= r2;
0x0006b4f8 strh r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x0006b4fa cmp r6, 0 |
| if (r6 != 0) {
0x0006b4fc bne.w 0x6b9d4 | goto label_10;
| }
0x0006b500 b 0x6b9f4 | goto label_11;
| label_93:
0x0006b502 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b504 ldrb r5, [r3] | r5 = *(r3);
0x0006b506 cmp r5, 0x30 |
| if (r5 != 0x30) {
0x0006b508 bne.w 0x6b63e | goto label_102;
| }
0x0006b50c ldrb.w r3, [fp, 8] | r3 = var_8h;
0x0006b510 cmp r3, 0x2c |
| if (r3 == 0x2c) {
0x0006b512 beq.w 0x6c254 | goto label_103;
| }
| label_5:
0x0006b516 ldr.w r3, [fp, 0x18] | r3 = var_18h;
0x0006b51a ldr r2, [sp, 0x18] | r2 = var_sp_18h;
0x0006b51c add r3, r2 | r3 += r2;
| label_31:
0x0006b51e ldrd r1, r2, [r3, 0x20] | __asm ("ldrd r1, r2, [r3, 0x20]");
0x0006b522 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0006b524 orrs r1, r0 | r1 |= r0;
0x0006b526 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0006b528 orrs r2, r0 | r2 |= r0;
0x0006b52a strd r1, r2, [r3, 0x20] | __asm ("strd r1, r2, [r3, 0x20]");
| label_1:
0x0006b52e ldr.w r2, [pc, 0x9c8] | r2 = *(0x0006bef8);
0x0006b532 ldr.w r3, [pc, 0x9c0] | r3 = *(0x6bef6);
0x0006b536 add r2, pc | r2 += pc;
0x0006b538 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0006b53a ldr r2, [r3] | r2 = *(0x6bef6);
0x0006b53c ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0006b53e eors r2, r3 | r2 ^= r3;
0x0006b540 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006b544 bne.w 0x6cd7e | goto label_104;
| }
0x0006b548 add sp, 0x84 |
0x0006b54a vpop {d8} | __asm ("vpop {d8}");
0x0006b54e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_87:
0x0006b552 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b554 strd r6, r6, [sp, 0x30] | __asm ("strd r6, r6, [sp, 0x30]");
0x0006b558 ldrb.w sl, [r3] | sl = *(r3);
0x0006b55c cmp.w sl, 0x31 |
| if (sl != 0x31) {
0x0006b560 bne.w 0x6b3e2 | goto label_0;
| }
| label_88:
0x0006b564 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006b566 mov r1, r3 | r1 = r3;
0x0006b568 mov r4, r3 | r4 = r3;
0x0006b56a bl 0x24dd4 | r0 = fcn_00024dd4 (r0, r1);
0x0006b56e cmp r0, 0 |
| if (r0 != 0) {
0x0006b570 bne 0x6b52e | goto label_1;
| }
0x0006b572 ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x0006b574 ldr.w sb, [r4, 0x14] | sb = *((r4 + 0x14));
0x0006b578 lsls r2, r6, 0x13 | r2 = r6 << 0x13;
| if (r2 < r6) {
0x0006b57a bmi.w 0x6c306 | goto label_105;
| }
0x0006b57e cmp.w sb, 0 |
| if (sb == 0) {
0x0006b582 beq.w 0x6c098 | goto label_106;
| }
0x0006b586 mov r1, sb | r1 = sb;
0x0006b588 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0006b58a bl 0x1c220 | fcn_0001c220 (r0, r1);
0x0006b58c vseleq.f64 d25, d9, d12 | __asm ("vseleq.f64 d25, d9, d12");
0x0006b590 orr.w r8, r0, r3 | r8 = r0 | r3;
0x0006b594 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006b596 orr.w sb, r1, r3 | sb = r1 | r3;
| label_22:
0x0006b59a strd r0, r1, [r7, 0x20] | __asm ("strd r0, r1, [r7, 0x20]");
0x0006b59e b 0x6b41e | goto label_2;
| label_92:
0x0006b5a0 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b5a2 and r1, r6, 1 | r1 = r6 & 1;
0x0006b5a6 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x0006b5a8 ldr.w r3, [r5, 0x200] | r3 = *((r5 + 0x200));
0x0006b5ac cmp r2, r3 |
| if (r2 == r3) {
0x0006b5ae beq.w 0x6bddc | goto label_107;
| }
0x0006b5b2 ldr.w r0, [r5, 0x1fc] | r0 = *((r5 + 0x1fc));
0x0006b5b6 cmp r0, 1 |
| if (r0 <= 1) {
0x0006b5b8 ble.w 0x6bb90 | goto label_108;
| }
0x0006b5bc add.w r5, r5, 0x200 | r5 += 0x200;
0x0006b5c0 movs r3, 1 | r3 = 1;
0x0006b5c2 b 0x6b5cc |
| while (r2 != r4) {
0x0006b5c4 adds r3, 1 | r3++;
0x0006b5c6 cmp r3, r0 |
| if (r3 == r0) {
0x0006b5c8 beq.w 0x6bb90 | goto label_108;
| }
0x0006b5cc ldr r4, [r5, 4]! | r4 = *((r5 += 4));
0x0006b5d0 cmp r2, r4 |
0x0006b5d2 bne 0x6b5c4 |
| }
0x0006b5d4 movs r5, 1 | r5 = 1;
0x0006b5d6 sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x0006b5d8 lsls r0, r4, 8 | r0 = r4 << 8;
0x0006b5da rsb.w r0, r3, 0x20 | r0 = 0x20 - r3;
0x0006b5de lsl.w r2, r5, r2 | r2 = r5 << r2;
0x0006b5e2 lsr.w r0, r5, r0 | r0 = r5 >> r0;
0x0006b5e6 lsl.w r3, r5, r3 | r3 = r5 << r3;
0x0006b5ea orrs r2, r0 | r2 |= r0;
| label_17:
0x0006b5ec cmp r1, 0 |
| if (r1 == 0) {
0x0006b5ee beq.w 0x6bde2 | goto label_109;
| }
0x0006b5f2 orr.w r8, r8, r3 | r8 |= r3;
0x0006b5f6 orr.w sb, sb, r2 | sb |= r2;
0x0006b5fa lsr.w r1, r8, 1 | r1 = r8 >> 1;
0x0006b5fe subs r4, r3, 1 | r4 = r3 - 1;
0x0006b600 lsr.w r0, sb, 1 | r0 = sb >> 1;
0x0006b604 str r4, [sp, 0x38] | var_38h = r4;
0x0006b606 orr.w r1, r1, sb, lsl 31 | r1 |= (sb << 31);
0x0006b60a adc r4, r2, -1 | __asm ("adc r4, r2, -1");
0x0006b60e str r4, [sp, 0x3c] | var_3ch = r4;
0x0006b610 cmp r1, r3 |
0x0006b612 sbcs r0, r2 | __asm ("sbcs r0, r2");
| if (r1 <= r3) {
0x0006b614 blo.w 0x6b438 | goto label_3;
| }
| label_8:
0x0006b618 ldr.w r2, [pc, 0x8e0] |
0x0006b61c ldr.w r3, [pc, 0x8d4] | r3 = *(0x6bef4);
0x0006b620 add r2, pc | r2 = 0xd7520;
0x0006b622 ldr r3, [r2, r3] | r3 = *(0xd7520);
0x0006b624 ldr r2, [r3] | r2 = *(0xd7520);
0x0006b626 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0006b628 eors r2, r3 | r2 ^= r3;
0x0006b62a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006b62e bne.w 0x6cd7e | goto label_104;
| }
0x0006b632 ldr.w r1, [pc, 0x8cc] | r1 = *(0x0006bf00);
0x0006b636 add r1, pc | r1 += pc;
0x0006b638 b 0x6bbc0 | goto label_110;
| label_89:
0x0006b63a mov r0, r1 | r0 = r1;
0x0006b63c b 0x6b3f2 | goto label_4;
| label_102:
0x0006b63e cmp r5, 0x2b |
| if (r5 == 0x2b) {
0x0006b640 beq.w 0x6be02 | goto label_111;
| }
0x0006b644 cmp r5, 0x33 |
| if (r5 == 0x33) {
0x0006b646 beq.w 0x6bc4c | goto label_112;
| }
0x0006b64a cmp r5, 0xac |
0x0006b64c ldrb.w r0, [fp, 8] | r0 = var_8h;
| if (r5 != 0xac) {
0x0006b650 bne.w 0x6bcce | goto label_113;
| }
0x0006b654 cmp r0, 0x2c |
| if (r0 != 0x2c) {
0x0006b656 bne.w 0x6b516 | goto label_5;
| }
0x0006b65a ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b65c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006b65e ldr.w sb, [r3, 0x14] | sb = *((r3 + 0x14));
0x0006b662 ldr r0, [r2] | r0 = *(r2);
0x0006b664 str r0, [sp, 0x34] | var_34h = r0;
0x0006b666 cmp.w sb, 0 |
| if (sb == 0) {
0x0006b66a beq.w 0x6b516 | goto label_5;
| }
0x0006b66e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0006b670 movs r5, 0 | r5 = 0;
0x0006b672 ldr.w r6, [sb] | r6 = *(sb);
0x0006b676 str r5, [sp] | *(sp) = r5;
0x0006b678 mov r1, r3 | r1 = r3;
0x0006b67a str r3, [sp, 0x30] | var_30h = r3;
0x0006b67c mov r2, r6 | r2 = r6;
0x0006b67e movs r3, 1 | r3 = 1;
0x0006b680 bl 0x37594 | r0 = fcn_00037594 (r0, r1, r2, r3, r4, r5);
0x0006b684 cmp r0, 0 |
| if (r0 == 0) {
0x0006b686 beq.w 0x6bcc6 | goto label_28;
| }
0x0006b68a ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0006b68c lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
| if (r2 >= r3) {
0x0006b68e bpl.w 0x6bcc6 | goto label_28;
| }
0x0006b692 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0006b694 cmp r6, 2 |
0x0006b696 ldrh r1, [r2] | r1 = *(r2);
0x0006b698 ldrb r2, [r2, 2] | r2 = *((r2 + 2));
0x0006b69a strh.w r1, [sp, 0x78] | var_78h_2 = r1;
0x0006b69e strb.w r2, [sp, 0x7a] | var_7ah = r2;
| if (r6 <= 2) {
0x0006b6a2 ble.w 0x6ca6e | goto label_114;
| }
0x0006b6a6 ldr r0, [sp, 0x14] | r0 = var_14h_2;
0x0006b6a8 ldr.w sb, [r0, 0x14] | sb = *((r0 + 0x14));
0x0006b6ac ldr.w r2, [sb, 0x28] | r2 = *((sb + 0x28));
0x0006b6b0 ldrb r1, [r2] | r1 = *(r2);
0x0006b6b2 cmp r1, 0x75 |
0x0006b6b4 itt ne |
| if (r1 == 0x75) {
0x0006b6b6 ldrbne r5, [r0] | r5 = *(r0);
| }
| if (r1 == 0x75) {
0x0006b6b8 ldrbne r0, [fp, 8] | r0 = var_8h;
| }
| if (r1 != 0x75) {
0x0006b6bc bne.w 0x6bcce | goto label_113;
| }
0x0006b6c0 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0006b6c2 ldrb.w sl, [r2] | sl = *(r2);
0x0006b6c6 cmp.w sl, 0 |
| if (sl == 0) {
0x0006b6ca beq.w 0x6bcc6 | goto label_28;
| }
0x0006b6ce ldrb r2, [r2, 1] | r2 = *((r2 + 1));
0x0006b6d0 cmp r2, 0 |
| if (r2 != 0) {
0x0006b6d2 bne.w 0x6bcc6 | goto label_28;
| }
0x0006b6d6 ldrb.w r2, [sp, 0x78] | r2 = var_78h_2;
0x0006b6da cmp r2, sl |
| if (r2 == sl) {
0x0006b6dc beq.w 0x6bcc6 | goto label_28;
| }
0x0006b6e0 ldrb.w r2, [sp, 0x79] | r2 = var_79h;
0x0006b6e4 cmp r2, sl |
| if (r2 == sl) {
0x0006b6e6 beq.w 0x6bcc6 | goto label_28;
| }
| label_56:
0x0006b6ea and r3, r3, 8 | r3 &= 8;
0x0006b6ee ldr.w r5, [sb, 8] | r5 = *((sb + 8));
0x0006b6f2 str r3, [sp, 0x48] | var_48h = r3;
0x0006b6f4 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x0006b6f8 strb.w sl, [sp, 0x7b] | var_7bh = sl;
0x0006b6fc str r3, [sp, 0x40] | var_40h = r3;
| if (r5 != 0) {
0x0006b6fe cbnz r5, 0x6b70c | goto label_115;
| }
0x0006b700 b.w 0x6cef2 | goto label_116;
| do {
0x0006b704 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x0006b706 cmp r5, 0 |
| if (r5 == 0) {
0x0006b708 beq.w 0x6cef2 | goto label_116;
| }
| label_115:
0x0006b70c ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0006b70e ands r3, r3, 0x2000 | r3 &= 0x2000;
0x0006b712 bne 0x6b704 |
| } while (r3 != r3);
0x0006b714 mov r6, r3 | r6 = r3;
0x0006b716 ldrb r3, [r5] | r3 = *(r5);
0x0006b718 cmp r3, 0x9c |
0x0006b71a str r3, [sp, 0x4c] | var_4ch = r3;
| if (r3 == 0x9c) {
0x0006b71c beq.w 0x6c9d6 | goto label_117;
| }
0x0006b720 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0006b722 cmp r3, 0x75 |
| if (r3 != 0x75) {
0x0006b724 bne.w 0x6bcc6 | goto label_28;
| }
0x0006b728 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x0006b72a cmp r0, 0 |
| if (r0 == 0) {
0x0006b72c beq.w 0x6bcc6 | goto label_28;
| }
0x0006b730 ldrb.w sb, [r0] | sb = *(r0);
0x0006b734 cmp.w sb, 0 |
| if (sb == 0) {
0x0006b738 beq.w 0x6bcc6 | goto label_28;
| }
0x0006b73c str r6, [sp, 0x30] | var_30h = r6;
| label_77:
0x0006b73e ldrb.w r1, [sp, 0x78] | r1 = var_78h_2;
0x0006b742 mov r3, sb | r3 = sb;
0x0006b744 ldrb.w lr, [sp, 0x79] | lr = var_79h;
0x0006b748 mov.w r8, 0 | r8 = 0;
0x0006b74c ldrb.w ip, [sp, 0x7a] | ip = var_7ah;
0x0006b750 b 0x6b75e |
| while (sl != r3) {
| label_53:
0x0006b752 ldrb.w r3, [r0, r8] | r3 = *((r0 + r8));
0x0006b756 mov r6, r8 | r6 = r8;
0x0006b758 cmp r3, 0 |
| if (r3 == 0) {
0x0006b75a beq.w 0x6ce28 | goto label_118;
| }
0x0006b75e cmp r1, r3 |
| if (r1 == r3) {
0x0006b760 beq.w 0x6ca7a | goto label_119;
| }
0x0006b764 cmp lr, r3 |
| if (lr == r3) {
0x0006b766 beq.w 0x6ca7a | goto label_119;
| }
0x0006b76a cmp ip, r3 |
| if (ip == r3) {
0x0006b76c beq.w 0x6ca7a | goto label_119;
| }
0x0006b770 cmp sl, r3 |
0x0006b772 add.w r2, r8, 1 | r2 = r8 + 1;
0x0006b776 it ne |
| if (sl == r3) {
0x0006b778 movne r8, r2 | r8 = r2;
| }
0x0006b77a bne 0x6b752 |
| }
0x0006b77c ldrb r3, [r0, r2] | r3 = *((r0 + r2));
0x0006b77e mov r6, r2 | r6 = r2;
0x0006b780 cmp r3, 0 |
| if (r3 != 0) {
0x0006b782 bne.w 0x6c9b4 | goto label_120;
| }
| label_79:
0x0006b786 mov r8, r2 | r8 = r2;
0x0006b788 movs r3, 0 | r3 = 0;
| label_57:
0x0006b78a adds r2, r0, r6 | r2 = r0 + r6;
0x0006b78c ldrb ip, [r2, -0x1] | ip = *((r2 - 0x1));
0x0006b790 cmp.w ip, 0xff |
| if (ip == 0xff) {
0x0006b794 beq.w 0x6ca82 | goto label_74;
| }
0x0006b798 cmp.w r8, 1 |
| if (r8 == 1) {
0x0006b79c beq.w 0x6cd5c | goto label_121;
| }
| label_73:
0x0006b7a0 cmp r1, r3 |
0x0006b7a2 ite eq |
| if (r1 != r3) {
0x0006b7a4 ldrbeq r3, [r2, 1] | r3 = *((r2 + 1));
| }
| if (r1 == r3) {
0x0006b7a6 movne r4, 0 | r4 = 0;
| }
0x0006b7a8 str r0, [sp, 0x68] | var_68h = r0;
0x0006b7aa itt eq |
| if (r1 == r3) {
0x0006b7ac clzeq r4, r3 | __asm ("clzeq r4, r3");
| }
| if (r1 == r3) {
0x0006b7b0 lsrs r4, r4, 5 | r4 >>= 5;
| }
0x0006b7b2 blx 0x85b4 | fcn_000085b4 ();
0x0006b7b6 add r3, sp, 0x68 | r3 += var_68h;
0x0006b7b8 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x0006b7bc mov r2, r3 | r2 = r3;
0x0006b7be str r0, [sp, 0x6c] | var_6ch = r0;
0x0006b7c0 str r3, [sp, 0x50] | var_50h = r3;
0x0006b7c2 movs r1, 0x75 | r1 = 0x75;
0x0006b7c4 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0006b7c6 movs r3, 0 | r3 = 0;
0x0006b7c8 bl 0x21bd8 | r0 = fcn_00021bd8 (r0, r1, r2, r3);
0x0006b7cc mov sb, r0 | sb = r0;
0x0006b7ce cmp r0, 0 |
| if (r0 == 0) {
0x0006b7d0 beq 0x6b854 | goto label_76;
| }
0x0006b7d2 ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x0006b7d4 movs r3, 0 | r3 = 0;
0x0006b7d6 strb r3, [r0, r6] | *((r0 + r6)) = r3;
0x0006b7d8 mov r6, r0 | r6 = r0;
0x0006b7da str r0, [sp, 0x44] | var_44h = r0;
0x0006b7dc b 0x6b7e0 |
| while (r8 > r3) {
0x0006b7de mov r6, r2 | r6 = r2;
0x0006b7e0 ldrb r1, [r0, r3] | r1 = *((r0 + r3));
0x0006b7e2 mov r2, r6 | r2 = r6;
0x0006b7e4 cmp sl, r1 |
0x0006b7e6 itt eq |
| if (sl != r1) {
0x0006b7e8 addeq r3, 1 | r3++;
| }
| if (sl != r1) {
0x0006b7ea ldrbeq r1, [r0, r3] | r1 = *((r0 + r3));
| }
0x0006b7ec adds r3, 1 | r3++;
0x0006b7ee cmp r8, r3 |
0x0006b7f0 strb r1, [r2], 1 | *(r2) = r1;
| r2++;
0x0006b7f4 bgt 0x6b7de |
| }
0x0006b7f6 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0006b7f8 mov r3, r6 | r3 = r6;
0x0006b7fa str r6, [sp, 0x54] | var_54h = r6;
0x0006b7fc rsb.w r6, r2, 1 | r6 = 1 - r2;
0x0006b800 add r6, r3 | r6 += r3;
0x0006b802 movs r3, 0 | r3 = 0;
0x0006b804 strb r3, [r2, r6] | *((r2 + r6)) = r3;
0x0006b806 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0006b808 ldrb r3, [r3] | r3 = *(r3);
0x0006b80a cmp r3, 0xa7 |
| if (r3 == 0xa7) {
0x0006b80c beq.w 0x6cdc0 | goto label_122;
| }
| label_75:
0x0006b810 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0006b812 movs r3, 1 | r3 = 1;
0x0006b814 ldr r0, [sp, 0x44] | r0 = var_44h;
0x0006b816 mov r2, r6 | r2 = r6;
0x0006b818 bl 0x8ef8 | r0 = fcn_00008ef8 (r0, r1, r2, r3);
0x0006b81c cmp r0, 0 |
| if (r0 > 0) {
0x0006b81e bgt.w 0x6cd64 | goto label_123;
| }
0x0006b822 cmp r6, 1 |
| if (r6 == 1) {
0x0006b824 bne 0x6b830 |
0x0006b826 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006b828 ldrb r3, [r3] | r3 = *(r3);
0x0006b82a cmp r3, 0x2d |
| if (r3 == 0x2d) {
0x0006b82c beq.w 0x6cd64 | goto label_123;
| }
| }
0x0006b830 mov r2, r6 | r2 = r6;
0x0006b832 ldr r6, [sp, 0x54] | r6 = var_54h;
0x0006b834 movs r3, 1 | r3 = 1;
0x0006b836 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0006b838 ldr r0, [sp, 0x44] | r0 = var_44h;
0x0006b83a ldrb.w r8, [r6] | r8 = *(r6);
0x0006b83e add.w ip, r8, r3 |
0x0006b842 strb.w ip, [r6] | *(r6) = ip;
0x0006b846 bl 0x8ef8 | r0 = fcn_00008ef8 (r0, r1, r2, r3);
0x0006b84a cmp r0, 0 |
0x0006b84c strb.w r8, [r6] | *(r6) = r8;
| if (r0 > 0) {
0x0006b850 bgt.w 0x6cd64 | goto label_123;
| }
| label_76:
0x0006b854 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0006b856 cmp r3, 0x9c |
| if (r3 == 0x9c) {
0x0006b858 beq.w 0x6ce34 | goto label_124;
| }
| label_81:
0x0006b85c ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r3 != 0) {
0x0006b85e cbz r3, 0x6b886 |
0x0006b860 movs r5, 1 | r5 = 1;
| label_55:
0x0006b862 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0006b864 ldrh r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x0006b866 tst.w r3, 0x9000 |
| if ((r3 & 0x9000) == 0) {
0x0006b86a bne 0x6b870 |
0x0006b86c ldr r3, [r2, 0x18] | r3 = *((r2 + 0x18));
| if (r3 == 0) {
0x0006b86e cbz r3, 0x6b876 | goto label_125;
| }
| }
0x0006b870 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0006b872 bl 0x16c50 | fcn_00016c50 (r0);
| label_125:
0x0006b876 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0006b878 ldr r0, [r3, 0x14] | r0 = *((r3 + 0x14));
0x0006b87a mov r1, r3 | r1 = r3;
0x0006b87c bl 0x16808 | fcn_00016808 (r0, r1);
0x0006b880 cmp r5, 0 |
| if (r5 == 0) {
0x0006b882 beq.w 0x6bcc6 | goto label_28;
| }
| }
0x0006b886 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b888 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0006b88a ldr.w r8, [r3, 0x18] | r8 = *((r3 + 0x18));
0x0006b88e cmp.w sb, 0 |
| if (sb == 0) {
0x0006b892 beq.w 0x6ce2e | goto label_126;
| }
0x0006b896 movs r3, 0 | r3 = 0;
0x0006b898 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0006b89a mov r1, sb | r1 = sb;
0x0006b89c mov r2, r3 | r2 = r3;
0x0006b89e bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0006b8a2 mov r6, r0 | r6 = r0;
| label_80:
0x0006b8a4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0006b8a6 cmp r3, 0 |
| if (r3 == 0) {
0x0006b8a8 beq.w 0x6c992 | goto label_127;
| }
0x0006b8ac ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0006b8ae ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x0006b8b2 cbnz r3, 0x6b8d0 |
0x0006b8b4 ldr r5, [r6, 8] | r5 = *((r6 + 8));
0x0006b8b6 cmp r5, 0 |
| if (r5 == 0) {
0x0006b8b8 beq.w 0x6cd4c | goto label_128;
| }
0x0006b8bc mov r0, r5 | r0 = r5;
0x0006b8be blx 0x85b4 | r0 = fcn_000085b4 ();
0x0006b8c2 bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x0006b8c6 subs r3, 1 | r3--;
0x0006b8c8 ldrb r2, [r5, r3] | r2 = *((r5 + r3));
0x0006b8ca add r3, r5 | r3 += r5;
| label_72:
0x0006b8cc adds r2, 1 | r2++;
0x0006b8ce strb r2, [r3] | *(r3) = r2;
| }
0x0006b8d0 ldr.w r3, [pc, 0x630] |
0x0006b8d4 add r3, pc | r3 = 0xd77dc;
0x0006b8d6 add.w r7, r3, 0x2dc | r7 = r3 + 0x2dc;
| label_52:
0x0006b8da cmp.w r8, 0 |
| if (r8 == 0) {
0x0006b8de beq.w 0x6ca8c | goto label_129;
| }
0x0006b8e2 movs r3, 0 | r3 = 0;
0x0006b8e4 mov r1, r8 | r1 = r8;
0x0006b8e6 mov r2, r3 | r2 = r3;
0x0006b8e8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0006b8ea bl 0x31eb4 | fcn_00031eb4 (r0, r1, r2, r3);
0x0006b8ee ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0006b8f0 mov r1, r0 | r1 = r0;
0x0006b8f2 mov r2, r7 | r2 = r7;
0x0006b8f4 mov r0, r5 | r0 = r5;
0x0006b8f6 bl 0x21d84 | fcn_00021d84 (r0, r1, r2);
0x0006b8fa movs r1, 0x39 | r1 = 0x39;
0x0006b8fc mov r2, r0 | r2 = r0;
0x0006b8fe mov r3, sb | r3 = sb;
0x0006b900 mov r0, r5 | r0 = r5;
0x0006b902 bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0006b906 mov r1, r0 | r1 = r0;
0x0006b908 cmp r0, 0 |
| if (r0 == 0) {
0x0006b90a beq.w 0x6c9bc | goto label_130;
| }
0x0006b90e ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b910 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006b912 ands r3, r3, 3 | r3 &= 3;
| if (r3 == r3) {
0x0006b916 beq.w 0x6c9bc | goto label_130;
| }
| label_59:
0x0006b91a ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0006b91c mov r0, fp | r0 = fp;
0x0006b91e orrs r2, r3 | r2 |= r3;
0x0006b920 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006b922 str r2, [r1, 4] | *((r1 + 4)) = r2;
0x0006b924 movw r2, 0x103 | r2 = 0x103;
0x0006b928 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x0006b92a str r3, [r1, 0x24] | *((r1 + 0x24)) = r3;
0x0006b92c bl 0x22290 | fcn_00022290 (r0, r1, r2, r3);
0x0006b930 mov r1, fp | r1 = fp;
0x0006b932 mov r5, r0 | r5 = r0;
0x0006b934 mov r2, r0 | r2 = r0;
0x0006b936 ldr r0, [sp, 0x20] | r0 = x;
0x0006b938 bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006b93c cmp.w r8, 0 |
| if (r8 != 0) {
0x0006b940 beq 0x6b950 |
| label_54:
0x0006b942 movs r3, 0 | r3 = 0;
0x0006b944 mov r1, r8 | r1 = r8;
0x0006b946 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0006b948 mov r2, r3 | r2 = r3;
0x0006b94a bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0006b94e mov r8, r0 | r8 = r0;
| }
| label_60:
0x0006b950 mov r2, r7 | r2 = r7;
0x0006b952 ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x0006b954 mov r1, r8 | r1 = r8;
0x0006b956 mov r0, r7 | r0 = r7;
0x0006b958 bl 0x21d84 | fcn_00021d84 (r0, r1, r2);
0x0006b95c movs r1, 0x38 | r1 = 0x38;
0x0006b95e mov r2, r0 | r2 = r0;
0x0006b960 mov r3, r6 | r3 = r6;
0x0006b962 mov r0, r7 | r0 = r7;
0x0006b964 bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0006b968 mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0006b96a cbz r0, 0x6b980 |
0x0006b96c ldr r0, [sp, 0x14] | r0 = var_14h_2;
0x0006b96e ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0006b970 ands r3, r3, 3 | r3 &= 3;
| if (r3 == r3) {
0x0006b974 beq 0x6b980 | goto label_131;
| }
0x0006b976 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0006b978 orrs r2, r3 | r2 |= r3;
0x0006b97a ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x0006b97c str r2, [r1, 4] | *((r1 + 4)) = r2;
0x0006b97e str r3, [r1, 0x24] | *((r1 + 0x24)) = r3;
| }
| label_131:
0x0006b980 movw r2, 0x103 | r2 = 0x103;
0x0006b984 mov r0, fp | r0 = fp;
0x0006b986 bl 0x22290 | fcn_00022290 (r0, r1, r2, r3);
0x0006b98a mov r1, fp | r1 = fp;
0x0006b98c mov r2, r0 | r2 = r0;
0x0006b98e mov r6, r0 | r6 = r0;
0x0006b990 ldr r0, [sp, 0x20] | r0 = x;
0x0006b992 bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006b996 ldr.w r3, [fp, 0x18] | r3 = var_18h;
0x0006b998 adds r0, 0x18 | r0 += 0x18;
0x0006b99a ldr r2, [sp, 0x18] | r2 = var_sp_18h;
0x0006b99c adds r7, r3, r2 | r7 = r3 + r2;
0x0006b99e cmp r4, 0 |
| if (r4 == 0) {
0x0006b9a0 beq.w 0x6bcc6 | goto label_28;
| }
0x0006b9a4 add.w r2, r5, r5, lsl 1 | r2 = r5 + (r5 << 1);
0x0006b9a8 ldrsh.w r1, [r7, 8] | r1 = *((r7 + 8));
0x0006b9ac ldr r0, [sp, 0x24] | r0 = var_24h;
0x0006b9ae add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x0006b9b2 add.w r2, r3, r2, lsl 4 | r2 = r3 + (r2 << 4);
0x0006b9b6 add.w r3, r3, r6, lsl 4 | r3 += (r6 << 4);
0x0006b9ba str r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
0x0006b9bc strh r1, [r2, 8] | *((r2 + 8)) = r1;
0x0006b9be ldrb r2, [r7, 0xe] | r2 = *((r7 + 0xe));
0x0006b9c0 strh r1, [r3, 8] | *((r3 + 8)) = r1;
0x0006b9c2 str r0, [r3, 0x10] | *((r3 + 0x10)) = r0;
0x0006b9c4 adds r3, r2, 2 | r3 = r2 + 2;
0x0006b9c6 strb r3, [r7, 0xe] | *((r7 + 0xe)) = r3;
0x0006b9c8 b 0x6bcc6 | goto label_28;
| label_98:
0x0006b9ca cmp.w sl, 0x2d |
| if (sl == 0x2d) {
0x0006b9ce beq.w 0x6bbe2 | goto label_132;
| }
| if (r6 != 0) {
0x0006b9d2 cbz r6, 0x6b9ec |
| label_10:
0x0006b9d4 ldrd r2, r3, [r7, 0x20] | __asm ("ldrd r2, r3, [r7, 0x20]");
0x0006b9d8 ldr r0, [sp, 0x20] | r0 = x;
0x0006b9da stm.w sp, {r1, r6, sl} | *(sp) = r1;
| *((sp + 4)) = r6;
| *((sp + 8)) = sl;
0x0006b9de bl 0x38e4c | r0 = fcn_00038e4c (r0, r1, r2, r3, r4, r5);
| if (r0 == 0) {
0x0006b9e2 cbz r0, 0x6b9ec | goto label_133;
| }
0x0006b9e4 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0006b9e6 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 >= r3) {
0x0006b9e8 bpl.w 0x6c036 | goto label_134;
| }
| }
| label_133:
0x0006b9ec cmp.w sl, 0x32 |
| if (sl == 0x32) {
0x0006b9f0 beq.w 0x6bc14 | goto label_135;
| }
| label_11:
0x0006b9f4 ldr r3, [sp, 0x14] | r3 = var_14h_2;
| label_12:
0x0006b9f6 ldrb r5, [r3] | r5 = *(r3);
0x0006b9f8 sub.w r3, r5, 0x2d | r3 = r5 - 0x2d;
0x0006b9fc and r3, r3, 0xf7 | r3 &= 0xf7;
| label_26:
0x0006ba00 ldrb.w r0, [fp, 8] | r0 = var_8h;
| label_13:
0x0006ba04 cmp r3, 0 |
| if (r3 != 0) {
0x0006ba06 bne.w 0x6bb74 | goto label_136;
| }
0x0006ba0a ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006ba0c ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0006ba0e ldrb r6, [r2] | r6 = *(r2);
0x0006ba10 mov r1, r2 | r1 = r2;
0x0006ba12 cmp r6, 0xb0 |
0x0006ba14 ite eq |
| if (r6 != 0xb0) {
0x0006ba16 ldrbeq r3, [r2, 2] | r3 = *((r2 + 2));
| }
| if (r6 == 0xb0) {
0x0006ba18 movne r3, r6 | r3 = r6;
| }
0x0006ba1a cmp r3, 0xb1 |
| if (r3 == 0xb1) {
0x0006ba1c beq.w 0x6bdfa | goto label_137;
| }
0x0006ba20 cmp r3, 0x8a |
| if (r3 == 0x8a) {
0x0006ba22 beq.w 0x6bcd8 | goto label_138;
| }
| label_14:
0x0006ba26 cmp r5, 0x31 |
| if (r5 == 0x31) {
0x0006ba28 beq.w 0x6bb7a | goto label_139;
| }
0x0006ba2c cmp r0, 0x2c |
| if (r0 != 0x2c) {
0x0006ba2e bne.w 0x6b516 | goto label_5;
| }
| label_16:
0x0006ba32 cmp r5, 0xab |
0x0006ba34 it ne |
| if (r5 != 0xab) {
0x0006ba36 cmpne r5, 0x34 | __asm ("cmpne r5, 0x34");
| }
0x0006ba38 ite eq |
| if (r5 != 0xab) {
0x0006ba3a moveq sl, 1 | sl = 1;
| }
| if (r5 != 0xab) {
0x0006ba3e mov.w sl, 0 | sl = 0;
| }
0x0006ba42 cmp r5, 0x33 |
0x0006ba44 ite ne |
| if (r5 == 0x33) {
0x0006ba46 movne r3, sl | r3 = sl;
| }
| if (r5 != 0x33) {
0x0006ba48 orreq r3, sl, 1 | r3 = sl | 1;
| }
0x0006ba4c cmp r3, 0 |
| if (r3 == 0) {
0x0006ba4e beq.w 0x6b516 | goto label_5;
| }
0x0006ba52 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006ba54 ldrd r6, sb, [r3, 0xc] | __asm ("ldrd r6, sb, [r3, 0xc]");
0x0006ba58 ldrb r3, [r6] | r3 = *(r6);
0x0006ba5a cmp r3, 0xa7 |
0x0006ba5c it ne |
| if (r3 == 0xa7) {
0x0006ba5e movne r8, 0 | r8 = 0;
| }
| if (r3 == 0xa7) {
0x0006ba62 beq.w 0x6c134 | goto label_140;
| }
| label_24:
0x0006ba66 cmp.w sb, 0 |
| if (sb != 0) {
0x0006ba6a beq 0x6ba76 |
0x0006ba6c ldrb.w r3, [sb] | r3 = *(sb);
0x0006ba70 cmp r3, 0xa7 |
| if (r3 == 0xa7) {
0x0006ba72 beq.w 0x6c630 | goto label_141;
| }
| }
| label_39:
0x0006ba76 cmp r5, 0x34 |
0x0006ba78 itet ne |
| if (r5 != 0x34) {
0x0006ba7a rsbne sl, sl, 0x46 | __asm ("rsbne sl, sl, 0x46");
| }
| if (r5 == 0x34) {
0x0006ba7e movne sl, 0x44 | sl = 0x44;
| }
| if (r5 != 0x34) {
0x0006ba82 uxtb.w sl, sl | sl = (int8_t) sl;
| }
0x0006ba86 cmp.w r8, 1 |
| if (r8 != 1) {
0x0006ba8a bne.w 0x6b516 | goto label_5;
| }
| label_23:
0x0006ba8e mov r4, sb | r4 = sb;
0x0006ba90 str.w sl, [sp, 0x20] | __asm ("str.w sl, [x]");
0x0006ba94 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x0006ba98 mov.w r8, 0 | r8 = 0;
0x0006ba9c ldr.w sl, [sp, 0x14] | sl = var_14h_2;
| if (r4 == 0) {
| label_40:
0x0006baa0 cbz r4, 0x6badc | goto label_142;
| }
| label_6:
0x0006baa2 mov r1, r4 | r1 = r4;
0x0006baa4 mov r0, sb | r0 = sb;
0x0006baa6 bl 0x1c3b4 | r0 = fcn_0001c3b4 (r0, r1);
0x0006baaa mov r7, r0 | r7 = r0;
0x0006baac mov r5, r1 | r5 = r1;
0x0006baae cmp r6, 0 |
| if (r6 == 0) {
0x0006bab0 beq.w 0x6c150 | goto label_143;
| }
0x0006bab4 mov r1, r6 | r1 = r6;
0x0006bab6 mov r0, sb | r0 = sb;
0x0006bab8 bl 0x1c3b4 | fcn_0001c3b4 (r0, r1);
0x0006babc ands r0, r7 | r0 &= r7;
0x0006babe ands r1, r5 | r1 &= r5;
0x0006bac0 orrs r0, r1 | r0 |= r1;
| if (r0 == r1) {
0x0006bac2 beq.w 0x6c150 | goto label_143;
| }
| label_7:
0x0006bac6 cmp.w r8, 1 |
0x0006baca mov r3, r6 | r3 = r6;
0x0006bacc mov r6, r4 | r6 = r4;
| if (r8 != 1) {
0x0006bace bne.w 0x6b516 | goto label_5;
| }
0x0006bad2 mov r4, r3 | r4 = r3;
0x0006bad4 mov.w r8, 0 | r8 = 0;
0x0006bad8 cmp r4, 0 |
| if (r4 != 0) {
0x0006bada bne 0x6baa2 | goto label_6;
| }
| if (r6 != 0) {
| label_142:
0x0006badc cbz r6, 0x6bae6 |
0x0006bade mov r1, r6 | r1 = r6;
0x0006bae0 mov r0, sb | r0 = sb;
0x0006bae2 bl 0x1c3b4 | fcn_0001c3b4 (r0, r1);
| }
0x0006bae6 movs r3, 0 | r3 = 0;
0x0006bae8 mov r7, r3 | r7 = r3;
0x0006baea mov r5, r3 | r5 = r3;
| label_25:
0x0006baec movs r1, 0x2e | r1 = 0x2e;
0x0006baee ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006baf0 movs r2, 0 | r2 = 0;
0x0006baf2 bl 0x24c54 | fcn_00024c54 (r0, r1, r2, r3);
0x0006baf6 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0006bafa mov r1, r0 | r1 = r0;
0x0006bafc cmp r0, 0 |
0x0006bafe ite eq |
| if (r0 != 0) {
0x0006bb00 moveq r3, 0 | r3 = 0;
| }
| if (r0 == 0) {
0x0006bb02 andne r3, r3, 1 | r3 &= 1;
| }
| if (r3 != 0) {
0x0006bb06 cbz r3, 0x6bb16 |
0x0006bb08 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0006bb0a orr r3, r3, 1 | r3 |= 1;
0x0006bb0e str r3, [r0, 4] | *((r0 + 4)) = r3;
0x0006bb10 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0006bb14 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
| }
0x0006bb16 movs r2, 3 | r2 = 3;
0x0006bb18 mov r0, fp | r0 = fp;
0x0006bb1a bl 0x22290 | fcn_00022290 (r0, r1, r2, r3);
0x0006bb1e ldr.w r2, [fp, 0x18] | r2 = var_18h;
0x0006bb22 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x0006bb24 lsls r0, r0, 1 | r0 <<= 1;
0x0006bb26 ldr r1, [sp, 0x18] | r1 = var_sp_18h;
0x0006bb28 add.w r3, r2, r0, lsl 4 | r3 = r2 + (r0 << 4);
0x0006bb2c add r2, r1 | r2 += r1;
0x0006bb2e ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x0006bb30 strd r7, r5, [r3, 0x20] | __asm ("strd r7, r5, [r3, 0x20]");
0x0006bb34 str r1, [r3, 0x14] | *((r3 + 0x14)) = r1;
0x0006bb36 ldrsh.w r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x0006bb3a str r1, [r3, 0x18] | *((r3 + 0x18)) = r1;
0x0006bb3c ldr r1, [sp, 0x20] | r1 = x;
0x0006bb3e strb r1, [r3, 0xf] | *((r3 + 0xf)) = r1;
0x0006bb40 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0006bb42 str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x0006bb44 ldrsh.w r1, [r2, 8] | r1 = *((r2 + 8));
0x0006bb48 strh r1, [r3, 8] | *((r3 + 8)) = r1;
0x0006bb4a movs r1, 0x40 | r1 = 0x40;
0x0006bb4c strh r1, [r3, 0xc] | *((r3 + 0xc)) = r1;
0x0006bb4e ldrh r1, [r2, 0xa] | r1 = *((r2 + 0xa));
0x0006bb50 orr r1, r1, 8 | r1 |= 8;
0x0006bb54 strh r1, [r2, 0xa] | *((r2 + 0xa)) = r1;
0x0006bb56 ldrb r1, [r2, 0xe] | r1 = *((r2 + 0xe));
0x0006bb58 adds r1, 1 | r1++;
0x0006bb5a strb r1, [r2, 0xe] | *((r2 + 0xe)) = r1;
0x0006bb5c ldrd r0, r1, [r2, 0x28] | __asm ("ldrd r0, r1, [r2, 0x28]");
0x0006bb60 strd r0, r1, [r3, 0x28] | __asm ("strd r0, r1, [r3, 0x28]");
0x0006bb64 b 0x6bac6 | goto label_7;
| label_91:
0x0006bb66 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0006bb68 orr.w r8, r0, r3 | r8 = r0 | r3;
0x0006bb6c ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006bb6e orr.w sb, r1, r3 | sb = r1 | r3;
0x0006bb72 b 0x6b41e | goto label_2;
| label_136:
0x0006bb74 cmp r5, 0x31 |
| if (r5 != 0x31) {
0x0006bb76 bne.w 0x6c0a4 | goto label_144;
| }
| label_139:
0x0006bb7a ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0006bb7c cmp r3, 0 |
| if (r3 != 0) {
0x0006bb7e bne.w 0x6b516 | goto label_5;
| }
0x0006bb82 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006bb84 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0006bb86 ldrb r3, [r2] | r3 = *(r2);
0x0006bb88 cmp r3, 0xb1 |
| if (r3 != 0xb1) {
0x0006bb8a bne.w 0x6b516 | goto label_5;
| }
0x0006bb8e b 0x6bd42 | goto label_145;
| label_108:
0x0006bb90 cmp r1, 0 |
| if (r1 != 0) {
0x0006bb92 bne.w 0x6b618 | goto label_8;
| }
| label_18:
0x0006bb96 ldr r2, [sp, 0x20] | r2 = x;
0x0006bb98 ldr r3, [r2] | r3 = *(r2);
0x0006bb9a cmp r3, 0 |
| if (r3 > 0) {
0x0006bb9c ble 0x6bbd0 |
0x0006bb9e ldrb.w r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0006bba2 lsls r5, r3, 0x19 | r5 = r3 << 0x19;
| if (r5 >= r3) {
0x0006bba4 bpl 0x6bbd0 | goto label_146;
| }
0x0006bba6 ldr r2, [pc, 0x360] |
0x0006bba8 ldr r3, [pc, 0x348] | r3 = *(0x6bef4);
0x0006bbaa add r2, pc | r2 = 0xd7ab8;
0x0006bbac ldr r3, [r2, r3] | r3 = *(0xd7ab8);
0x0006bbae ldr r2, [r3] | r2 = *(0xd7ab8);
0x0006bbb0 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0006bbb2 eors r2, r3 | r2 ^= r3;
0x0006bbb4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006bbb8 bne.w 0x6cd7e | goto label_104;
| }
0x0006bbbc ldr r1, [pc, 0x34c] |
0x0006bbbe add r1, pc | r1 = 0xd7ace;
| label_110:
0x0006bbc0 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006bbc2 add sp, 0x84 |
0x0006bbc4 vpop {d8} | __asm ("vpop {d8}");
0x0006bbc8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006bbcc b.w 0x21598 | void (*0x21598)() ();
| }
| label_146:
0x0006bbd0 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006bbd2 bic r6, r6, 2 | r6 = BIT_MASK (r6, 2);
0x0006bbd6 str r6, [r3, 4] | *((r3 + 4)) = r6;
0x0006bbd8 b 0x6b432 | goto label_9;
| label_101:
0x0006bbda ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006bbdc and r3, r3, 0x80 | r3 &= 0x80;
0x0006bbe0 strh r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
| label_132:
0x0006bbe2 ldrh r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x0006bbe4 orr r3, r3, 0x800 | r3 |= 0x800;
0x0006bbe8 strh r3, [r7, 0xa] | *((r7 + 0xa)) = r3;
0x0006bbea cmp r6, 0 |
| if (r6 != 0) {
0x0006bbec bne.w 0x6b9d4 | goto label_10;
| }
0x0006bbf0 b 0x6b9f4 | goto label_11;
| label_100:
0x0006bbf2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006bbf4 and r3, r3, 0x100 | r3 &= 0x100;
0x0006bbf8 strh r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
| if (r6 != 0) {
0x0006bbfa cbz r6, 0x6bc14 |
0x0006bbfc ldrd r2, r3, [r7, 0x20] | __asm ("ldrd r2, r3, [r7, 0x20]");
0x0006bc00 ldr r0, [sp, 0x20] | r0 = x;
0x0006bc02 stm.w sp, {r1, r6, sl} | *(sp) = r1;
| *((sp + 4)) = r6;
| *((sp + 8)) = sl;
0x0006bc06 bl 0x38e4c | r0 = fcn_00038e4c (r0, r1, r2, r3, r4, r5);
| if (r0 == 0) {
0x0006bc0a cbz r0, 0x6bc14 | goto label_135;
| }
0x0006bc0c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0006bc0e lsls r3, r3, 0x1a | r3 <<= 0x1a;
| if (r3 >= r3) {
0x0006bc10 bpl.w 0x6c036 | goto label_134;
| }
| }
| label_135:
0x0006bc14 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006bc16 ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x0006bc18 lsls r0, r6, 0x1f | r0 = r6 << 0x1f;
| if (r0 < r6) {
0x0006bc1a bmi.w 0x6b9f6 | goto label_12;
| }
0x0006bc1e mov r0, r5 | r0 = r5;
0x0006bc20 bl 0xa934 | r0 = fcn_0000a934 (r0);
0x0006bc24 cmp r0, 0 |
| if (r0 != 0) {
0x0006bc26 bne.w 0x6b9f4 | goto label_11;
| }
0x0006bc2a ldr r3, [pc, 0x2e4] |
0x0006bc2c orr r6, r6, 0x20000000 | r6 |= 0x20000000;
0x0006bc30 ldr r2, [sp, 0x14] | r2 = var_14h_2;
0x0006bc32 movs r5, 0xaa | r5 = 0xaa;
0x0006bc34 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006bc38 add r3, pc | r3 = 0xd7b4e;
0x0006bc3a str r6, [r2, 4] | *((r2 + 4)) = r6;
0x0006bc3c str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0006bc3e strb r5, [r2] | *(r2) = r5;
0x0006bc40 strh r0, [r7, 0xc] | *((r7 + 0xc)) = r0;
0x0006bc42 vstr d16, [r7, 0x28] | __asm ("vstr d16, [r7, 0x28]");
0x0006bc46 ldrb.w r3, [fp, 8] | r3 = var_8h;
0x0006bc4a b 0x6bdd4 | goto label_147;
| label_112:
0x0006bc4c ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006bc4e ldr r6, [r3, 0xc] | r6 = *((r3 + 0xc));
0x0006bc50 ldrb r3, [r6] | r3 = *(r6);
0x0006bc52 cmp r3, 0xa7 |
| if (r3 != 0xa7) {
0x0006bc54 bne.w 0x6bdd0 | goto label_148;
| }
0x0006bc58 ldrsh.w r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0006bc5c cmp r3, 0 |
| if (r3 < 0) {
0x0006bc5e blt.w 0x6bdd0 | goto label_148;
| }
0x0006bc62 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006bc64 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006bc66 ands r8, r3, 1 | r8 = r3 & 1;
| if (r8 != r3) {
0x0006bc6a bne.w 0x6bdd0 | goto label_148;
| }
0x0006bc6e ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0006bc70 mov r3, r8 | r3 = r8;
0x0006bc72 mov r2, r8 | r2 = r8;
0x0006bc74 mov r1, r6 | r1 = r6;
0x0006bc76 mov r0, r4 | r0 = r4;
0x0006bc78 bl 0x31eb4 | fcn_00031eb4 (r0, r1, r2, r3);
0x0006bc7c movs r2, 0x34 | r2 = 0x34;
0x0006bc7e mov sb, r0 | sb = r0;
0x0006bc80 movs r3, 0 | r3 = 0;
0x0006bc82 mov r0, r4 | r0 = r4;
0x0006bc84 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0006bc88 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x0006bc8a cbz r0, 0x6bcaa |
0x0006bc8c mov r2, r5 | r2 = r5;
0x0006bc8e mov r1, r8 | r1 = r8;
0x0006bc90 adds r0, 1 | r0++;
0x0006bc92 blx 0x839c | fcn_0000839c ();
0x0006bc96 movs r3, 0x79 | r3 = 0x79;
0x0006bc98 strb.w r3, [sl] | *(sl) = r3;
0x0006bc9c movw r3, 0xffff | r3 = 0xffff;
0x0006bca0 strh.w r3, [sl, 0x22] | *((sl + 0x22)) = r3;
0x0006bca4 movs r3, 1 | r3 = 1;
0x0006bca6 str.w r3, [sl, 0x18] | __asm ("str.w r3, [sl, 0x18]");
| }
0x0006bcaa mov r2, sb | r2 = sb;
0x0006bcac movs r1, 0x36 | r1 = 0x36;
0x0006bcae ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006bcb0 mov r3, sl | r3 = sl;
0x0006bcb2 bl 0x24c54 | fcn_00024c54 (r0, r1, r2, r3);
0x0006bcb6 movs r2, 0x83 | r2 = 0x83;
0x0006bcb8 mov r1, r0 | r1 = r0;
0x0006bcba mov r0, fp | r0 = fp;
0x0006bcbc bl 0x22290 | r0 = fcn_00022290 (r0, r1, r2, r3);
0x0006bcc0 cmp r0, 0 |
| if (r0 != 0) {
0x0006bcc2 bne.w 0x6ca24 | goto label_149;
| }
| label_28:
0x0006bcc6 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006bcc8 ldrb.w r0, [fp, 8] | r0 = var_8h;
0x0006bccc ldrb r5, [r3] | r5 = *(r3);
| label_113:
0x0006bcce sub.w r3, r5, 0x2d | r3 = r5 - 0x2d;
0x0006bcd2 and r3, r3, 0xf7 | r3 &= 0xf7;
0x0006bcd6 b 0x6ba04 | goto label_13;
| label_138:
0x0006bcd8 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0006bcda ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0006bcdc ldr.w r8, [r3] | r8 = *(r3);
| label_19:
0x0006bce0 cmp.w r8, 1 |
| if (r8 <= 1) {
0x0006bce4 ble.w 0x6ba26 | goto label_14;
| }
0x0006bce8 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006bcea ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0006bcec ldrb.w ip, [r3] | ip = *(r3);
0x0006bcf0 cmp.w ip, 0xb0 |
0x0006bcf4 it eq |
| if (ip != 0xb0) {
0x0006bcf6 ldrbeq ip, [r3, 2] | ip = *((r3 + 2));
| }
0x0006bcfa cmp.w ip, 0xb1 |
| if (ip == 0xb1) {
0x0006bcfe beq.w 0x6c24c | goto label_150;
| }
0x0006bd02 cmp.w ip, 0x8a |
| if (ip != 0x8a) {
0x0006bd06 bne.w 0x6ba26 | goto label_14;
| }
0x0006bd0a ldr r4, [r3, 0x14] | r4 = *((r3 + 0x14));
0x0006bd0c ldr.w ip, [r4, 0x1c] | ip = *((r4 + 0x1c));
0x0006bd10 ldr.w ip, [ip] | ip = *(ip);
| label_27:
0x0006bd14 cmp r8, ip |
| if (r8 != ip) {
0x0006bd16 bne.w 0x6ba26 | goto label_14;
| }
0x0006bd1a ldr r4, [r2, 4] | r4 = *((r2 + 4));
0x0006bd1c lsls r4, r4, 0x13 | r4 <<= 0x13;
| if (r4 >= r4) {
0x0006bd1e bpl 0x6bd28 | goto label_151;
| }
0x0006bd20 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006bd22 lsls r3, r3, 0x13 | r3 <<= 0x13;
| if (r3 < r3) {
0x0006bd24 bmi.w 0x6ba26 | goto label_14;
| }
| label_151:
0x0006bd28 cmp r0, 0x2c |
| if (r0 == 0x2c) {
0x0006bd2a beq.w 0x6c3f0 | goto label_152;
| }
0x0006bd2e cmp r5, 0x31 |
| if (r5 != 0x31) {
0x0006bd30 bne.w 0x6b516 | goto label_5;
| }
0x0006bd34 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0006bd36 cmp r3, 0 |
| if (r3 != 0) {
0x0006bd38 bne.w 0x6b516 | goto label_5;
| }
0x0006bd3c cmp r6, 0xb1 |
| if (r6 != 0xb1) {
0x0006bd3e bne.w 0x6b516 | goto label_5;
| }
| label_145:
0x0006bd42 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006bd44 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006bd46 lsls r6, r3, 0x13 | r6 = r3 << 0x13;
| if (r6 >= r3) {
0x0006bd48 bpl.w 0x6b516 | goto label_5;
| }
0x0006bd4c ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006bd4e ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0006bd50 ldr r1, [r3, 0x34] | r1 = *((r3 + 0x34));
0x0006bd52 cmp r1, 0 |
| if (r1 != 0) {
0x0006bd54 bne.w 0x6b516 | goto label_5;
| }
0x0006bd58 ldr r5, [r3, 0x44] | r5 = *((r3 + 0x44));
0x0006bd5a cmp r5, 0 |
| if (r5 != 0) {
0x0006bd5c bne.w 0x6b516 | goto label_5;
| }
0x0006bd60 cmp r0, 0x2c |
| if (r0 != 0x2c) {
0x0006bd62 bne.w 0x6b516 | goto label_5;
| }
| label_15:
0x0006bd66 ldrb r3, [r2] | r3 = *(r2);
0x0006bd68 cmp r3, 0xb0 |
0x0006bd6a it eq |
| if (r3 != 0xb0) {
0x0006bd6c ldrbeq r3, [r2, 2] | r3 = *((r2 + 2));
| }
0x0006bd6e cmp r3, 0xb1 |
0x0006bd70 itt eq |
| if (r3 != 0xb1) {
0x0006bd72 ldreq r3, [r2, 0x14] | r3 = *((r2 + 0x14));
| }
| if (r3 != 0xb1) {
0x0006bd74 ldreq r3, [r3] | r3 = *(r3);
| }
| if (r3 != 0xb1) {
0x0006bd76 beq 0x6bd84 |
0x0006bd78 cmp r3, 0x8a |
0x0006bd7a itett eq |
| if (r3 != 0x8a) {
0x0006bd7c ldreq r3, [r2, 0x14] | r3 = *((r2 + 0x14));
| }
| if (r3 == 0x8a) {
0x0006bd7e movne r3, 1 | r3 = 1;
| }
| if (r3 != 0x8a) {
0x0006bd80 ldreq r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| }
| if (r3 == 0x8a) {
0x0006bd82 ldreq r3, [r3] | r3 = *(r3);
| goto label_153;
| }
| }
| label_153:
0x0006bd84 cmp r5, r3 |
| if (r5 >= r3) {
0x0006bd86 bge.w 0x6b516 | goto label_5;
| }
0x0006bd8a ldr r6, [sp, 0x14] | r6 = var_14h_2;
0x0006bd8c movw r2, 0x8002 | r2 = 0x8002;
0x0006bd90 mov r0, fp | r0 = fp;
0x0006bd92 adds r5, 1 | r5++;
0x0006bd94 mov r1, r6 | r1 = r6;
0x0006bd96 bl 0x22290 | r0 = fcn_00022290 (r0, r1, r2, r3);
0x0006bd9a add.w r4, r0, r0, lsl 1 | r4 = r0 + (r0 << 1);
0x0006bd9e ldr.w r3, [fp, 0x18] | r3 = var_18h;
0x0006bda2 mov r2, r0 | r2 = r0;
0x0006bda4 ldr r0, [sp, 0x20] | r0 = x;
0x0006bda6 lsls r4, r4, 4 | r4 <<= 4;
0x0006bda8 mov r1, fp | r1 = fp;
0x0006bdaa add r3, r4 | r3 += r4;
0x0006bdac str r5, [r3, 0x1c] | *((r3 + 0x1c)) = r5;
0x0006bdae bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006bdb2 ldr.w r3, [fp, 0x18] | r3 = var_18h;
0x0006bdb6 ldr r2, [sp, 0x18] | r2 = var_sp_18h;
0x0006bdb8 add r4, r3 | r4 += r3;
0x0006bdba add r3, r2 | r3 += r2;
0x0006bdbc ldr r2, [sp, 0x24] | r2 = var_24h;
0x0006bdbe str r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x0006bdc0 ldrsh.w r2, [r3, 8] | r2 = *((r3 + 8));
0x0006bdc4 strh r2, [r4, 8] | *((r4 + 8)) = r2;
0x0006bdc6 ldrb r2, [r3, 0xe] | r2 = *((r3 + 0xe));
0x0006bdc8 adds r2, 1 | r2++;
0x0006bdca strb r2, [r3, 0xe] | *((r3 + 0xe)) = r2;
0x0006bdcc ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0006bdce b 0x6bd66 | goto label_15;
| label_148:
0x0006bdd0 ldrb.w r3, [fp, 8] | r3 = var_8h;
| label_147:
0x0006bdd4 cmp r3, 0x2c |
| if (r3 != 0x2c) {
0x0006bdd6 bne.w 0x6b516 | goto label_5;
| }
0x0006bdda b 0x6ba32 | goto label_16;
| label_107:
0x0006bddc movs r3, 1 | r3 = 1;
0x0006bdde movs r2, 0 | r2 = 0;
0x0006bde0 b 0x6b5ec | goto label_17;
| label_109:
0x0006bde2 lsr.w r0, r8, 1 | r0 = r8 >> 1;
0x0006bde6 lsr.w r1, sb, 1 | r1 = sb >> 1;
0x0006bdea orr.w r0, r0, sb, lsl 31 | r0 |= (sb << 31);
0x0006bdee cmp r0, r3 |
0x0006bdf0 mov r3, r1 | r3 = r1;
0x0006bdf2 sbcs r3, r2 | __asm ("sbcs r3, r2");
| if (r0 <= r3) {
0x0006bdf4 blo.w 0x6b432 | goto label_9;
| }
0x0006bdf8 b 0x6bb96 | goto label_18;
| label_137:
0x0006bdfa ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0006bdfc ldr.w r8, [r3] | r8 = *(r3);
0x0006be00 b 0x6bce0 | goto label_19;
| label_111:
0x0006be02 ldr.w r3, [fp] | r3 = *(fp);
0x0006be06 ldr r1, [sp, 0x18] | r1 = var_sp_18h;
0x0006be08 mov r2, r3 | r2 = r3;
0x0006be0a str r3, [sp, 0x48] | var_48h = r3;
0x0006be0c ldr.w r3, [fp, 0x18] | r3 = var_18h;
0x0006be10 ldr r2, [r2] | r2 = *(r2);
0x0006be12 ldr r0, [r3, r1] | r0 = *((r3 + r1));
0x0006be14 adds r4, r3, r1 | r4 = r3 + r1;
0x0006be16 str r2, [sp, 0x50] | var_50h = r2;
0x0006be18 str r0, [sp, 0x4c] | var_4ch = r0;
0x0006be1a ldr r0, [r2] | r0 = *(r2);
0x0006be1c str r0, [sp, 0x34] | var_34h = r0;
0x0006be1e cmp r0, 0 |
| if (r0 == 0) {
0x0006be20 beq.w 0x6c08a | goto label_154;
| }
0x0006be24 mov.w r2, 0x1a8 | r2 = 0x1a8;
0x0006be28 movs r3, 0 | r3 = 0;
0x0006be2a bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0006be2e mov r8, r0 | r8 = r0;
| label_21:
0x0006be30 cmp.w r8, 0 |
| if (r8 == 0) {
0x0006be34 beq.w 0x6c31e | goto label_155;
| }
0x0006be38 mov.w r2, 0x1a8 | r2 = 0x1a8;
0x0006be3c movs r1, 0 | r1 = 0;
0x0006be3e mov r0, r8 | r0 = r8;
0x0006be40 blx 0x839c | fcn_0000839c ();
0x0006be44 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x0006be46 mov.w r2, 0x180 | r2 = 0x180;
0x0006be4a movs r1, 0 | r1 = 0;
0x0006be4c str.w r8, [r4, 0x18] | __asm ("str.w r8, [r4, 0x18]");
0x0006be50 orr r3, r3, 0x10 | r3 |= 0x10;
0x0006be54 strh r3, [r4, 0xa] | *((r4 + 0xa)) = r3;
0x0006be56 add.w r3, r8, 0x20 | r3 = r8 + 0x20;
0x0006be5a mov r0, r3 | r0 = r3;
0x0006be5c blx 0x839c | fcn_0000839c ();
0x0006be60 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0006be62 movs r1, 0 | r1 = 0;
0x0006be64 vldr d16, [pc, 0x80] | __asm ("vldr d16, aav.0x000000ff");
0x0006be68 strb.w r1, [r8, 9] | *((r8 + 9)) = r1;
0x0006be6c str.w r2, [r8] | __asm ("str.w r2, [r8]");
0x0006be70 add.w r2, r8, 0xc | r2 = r8 + 0xc;
0x0006be74 str.w r1, [r8, 4] | __asm ("str.w r1, [r8, 4]");
0x0006be78 str.w r1, [r8, 0x14] | __asm ("str.w r1, [r8, 0x14]");
0x0006be7c vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0006be80 movs r2, 0x2b | r2 = 0x2b;
0x0006be82 str.w r0, [r8, 0x18] | __asm ("str.w r0, [r8, 0x18]");
0x0006be86 mov r0, r8 | r0 = r8;
0x0006be88 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0006be8a bl 0x22418 | fcn_00022418 (r0, r1, r2);
0x0006be8e ldr.w r5, [r8, 0xc] | r5 = *((r8 + 0xc));
0x0006be92 subs r5, 1 | r5--;
0x0006be94 it pl |
| if (r5 < 1) {
0x0006be96 ldrpl r6, [sp, 0x20] | r6 = x;
| }
| if (r5 < 1) {
0x0006be98 bmi.w 0x6c954 | goto label_156;
| }
| do {
0x0006be9c mov r2, r5 | r2 = r5;
0x0006be9e mov r1, r8 | r1 = r8;
0x0006bea0 subs r5, 1 | r5--;
0x0006bea2 mov r0, r6 | r0 = r6;
0x0006bea4 bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006bea8 adds r1, r5, 1 | r1 = r5 + 1;
0x0006beaa bne 0x6be9c |
| } while (r1 != r5);
0x0006beac ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006beae ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006beb2 cmp r3, 0 |
| if (r3 != 0) {
0x0006beb4 bne.w 0x6c222 | goto label_29;
| }
0x0006beb8 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0006bebc ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x0006bec0 subs.w sb, r3, 1 | sb = r3 - 1;
| if (sb < r3) {
0x0006bec4 bmi.w 0x6c960 | goto label_157;
| }
0x0006bec8 mov r3, r5 | r3 = r5;
0x0006beca mov r6, r5 | r6 = r5;
0x0006becc mov r7, r5 | r7 = r5;
0x0006bece str r5, [sp, 0x30] | var_30h = r5;
0x0006bed0 str.w fp, [sp, 0x40] | __asm ("str.w fp, [var_40h]");
0x0006bed4 add.w sl, r2, 0x30 | sl = r2 + 0x30;
0x0006bed8 ldr r5, [sp, 0x48] | r5 = var_48h;
0x0006beda mov fp, r3 |
0x0006bedc vldr d8, [pc, 8] | __asm ("vldr d8, aav.0x000000ff");
0x0006bee0 strd r8, r4, [sp, 0x54] | __asm ("strd r8, r4, [sp, 0x54]");
0x0006bee4 b 0x6bf2a |
| while (r3 != r8) {
0x0006bf14 orrs.w r3, r6, r7 | r3 = r6 | r7;
0x0006bf18 and r4, r4, 1 | r4 &= 1;
0x0006bf1c it eq |
| if (r3 != r6) {
0x0006bf1e moveq r4, 0 | r4 = 0;
| }
| label_20:
0x0006bf20 add.w sl, sl, 0x30 | sl += 0x30;
0x0006bf24 cmp r4, 0 |
| if (r4 == 0) {
0x0006bf26 beq.w 0x6c6ec | goto label_158;
| }
0x0006bf2a ldrh r0, [sl, -0x24] | r0 = *((sl - 0x24));
0x0006bf2e add.w sb, sb, -1 | sb += -1;
0x0006bf32 mvn.w r4, sb | r4 = ~sb;
0x0006bf36 lsrs r4, r4, 0x1f | r4 >>= 0x1f;
0x0006bf38 ubfx r8, r0, 0, 9 | r8 = (r0 >> 0) & ((1 << 9) - 1);
0x0006bf3c cmp.w r8, 0 |
| if (r8 == 0) {
0x0006bf40 beq.w 0x6c160 | goto label_159;
| }
0x0006bf44 ldrh r8, [sl, -0x26] | r8 = *((sl - 0x26));
0x0006bf48 ands r3, r8, 8 | r3 = r8 & 8;
0x0006bf4c bne 0x6bf14 |
| }
0x0006bf4e ldr.w r2, [r5, 0x200] | r2 = *((r5 + 0x200));
0x0006bf52 ldr ip, [sl, -0x1c] | ip = *((sl - 0x1c));
0x0006bf56 str r2, [sp, 0x44] | var_44h = r2;
0x0006bf58 cmp ip, r2 |
| if (ip == r2) {
0x0006bf5a beq.w 0x6c46a | goto label_160;
| }
0x0006bf5e ldr.w lr, [r5, 0x1fc] |
0x0006bf62 cmp.w lr, 1 |
| if (lr <= 1) {
0x0006bf66 ble.w 0x6c98a | goto label_161;
| }
0x0006bf6a add.w r2, r5, 0x200 | r2 = r5 + 0x200;
0x0006bf6e movs r3, 1 | r3 = 1;
0x0006bf70 b 0x6bf7a |
| while (ip != r1) {
0x0006bf72 adds r3, 1 | r3++;
0x0006bf74 cmp lr, r3 |
| if (lr == r3) {
0x0006bf76 beq.w 0x6c324 | goto label_162;
| }
0x0006bf7a ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x0006bf7e cmp ip, r1 |
0x0006bf80 bne 0x6bf72 |
| }
0x0006bf82 mov.w ip, 1 |
0x0006bf86 sub.w r1, r3, 0x20 | r1 = r3 - 0x20;
0x0006bf8a rsb.w r2, r3, 0x20 | r2 = 0x20 - r3;
0x0006bf8e lsl.w r1, ip, r1 | r1 = ip << r1;
0x0006bf92 lsr.w r2, ip, r2 | r2 = ip >> r2;
0x0006bf96 lsl.w ip, ip, r3 |
0x0006bf9a orrs r1, r2 | r1 |= r2;
| label_30:
0x0006bf9c tst.w r8, 2 |
| if ((r8 & 2) == 0) {
0x0006bfa0 beq 0x6c00a | goto label_32;
| }
0x0006bfa2 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0006bfa4 ldr r2, [sl, -0x20] | r2 = *((sl - 0x20));
0x0006bfa8 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0006bfaa add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0006bfae add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x0006bfb2 ldr.w lr, [r3, 0x14] |
0x0006bfb6 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006bfb8 cmp r3, lr |
0x0006bfba it eq |
| if (r3 != lr) {
0x0006bfbc orreq ip, ip, 1 |
| }
| if (r3 == lr) {
0x0006bfc0 beq 0x6c00a | goto label_32;
| }
0x0006bfc2 ldr.w r8, [r5, 0x1fc] | r8 = *((r5 + 0x1fc));
0x0006bfc6 cmp.w r8, 1 |
| if (r8 <= 1) {
0x0006bfca ble 0x6c00a | goto label_32;
| }
0x0006bfcc add.w r2, r5, 0x200 | r2 = r5 + 0x200;
0x0006bfd0 movs r3, 1 | r3 = 1;
0x0006bfd2 str r5, [sp, 0x44] | var_44h = r5;
0x0006bfd4 b 0x6bfde |
| while (lr != r5) {
0x0006bfd6 adds r3, 1 | r3++;
0x0006bfd8 cmp r8, r3 |
| if (r8 == r3) {
0x0006bfda beq.w 0x6c472 | goto label_163;
| }
0x0006bfde ldr r5, [r2, 4]! | r5 = *((r2 += 4));
0x0006bfe2 cmp lr, r5 |
0x0006bfe4 bne 0x6bfd6 |
| }
0x0006bfe6 mov.w lr, 1 | lr = 1;
0x0006bfea sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x0006bfee rsb.w r8, r3, 0x20 | r8 = 0x20 - r3;
0x0006bff2 lsl.w r2, lr, r2 | r2 = lr << r2;
0x0006bff6 lsr.w r8, lr, r8 | r8 = lr >> r8;
0x0006bffa ldr r5, [sp, 0x44] | r5 = var_44h;
0x0006bffc lsl.w lr, lr, r3 | lr <<= r3;
0x0006c000 orr.w r2, r2, r8 | r2 |= r8;
0x0006c004 orr.w ip, lr, ip |
0x0006c008 orrs r1, r2 | r1 |= r2;
| label_32:
0x0006c00a and.w r6, ip, r6 | r6 = ip & r6;
0x0006c00e ands r7, r1 | r7 &= r1;
0x0006c010 orrs.w r3, r6, r7 | r3 = r6 | r7;
0x0006c014 and r4, r4, 1 | r4 &= 1;
0x0006c018 it eq |
| if (r3 != r6) {
0x0006c01a moveq r4, 0 | r4 = 0;
| }
0x0006c01c ands r0, r0, 2 | r0 &= 2;
0x0006c020 itete ne |
| if (r0 == r0) {
0x0006c022 ldrne r3, [sp, 0x30] | r3 = var_30h;
| }
| if (r0 != r0) {
0x0006c024 moveq fp, r0 |
| }
| if (r0 == r0) {
0x0006c026 andne fp, ip, fp |
| }
| if (r0 == r0) {
0x0006c02a str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
| }
0x0006c02e itt ne |
| if (r0 == r0) {
0x0006c030 andne r3, r1 | r3 &= r1;
| }
| if (r0 == r0) {
0x0006c032 strne r3, [sp, 0x30] | var_30h = r3;
| }
0x0006c034 b 0x6bf20 | goto label_20;
| label_134:
0x0006c036 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0006c038 cmp r3, 0 |
| if (r3 < 0) {
0x0006c03a blt.w 0x6c32c | goto label_164;
| }
0x0006c03e ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0006c040 movs r3, 0 | r3 = 0;
0x0006c042 mov r2, r3 | r2 = r3;
0x0006c044 ldr r1, [sp, 0x14] | r1 = var_14h_2;
0x0006c046 mov r0, r4 | r0 = r4;
0x0006c048 bl 0x31eb4 | fcn_00031eb4 (r0, r1, r2, r3);
0x0006c04c ldrb.w r2, [r4, 0x57] | r2 = *((r4 + 0x57));
0x0006c050 mov r6, r0 | r6 = r0;
0x0006c052 cmp r2, 0 |
| if (r2 == 0) {
0x0006c054 beq.w 0x6c476 | goto label_165;
| }
0x0006c058 cmp r0, 0 |
| if (r0 == 0) {
0x0006c05a beq.w 0x6b52e | goto label_1;
| }
0x0006c05e ldr.w r1, [pc, 0xaf4] | r1 = *(0x0006cb54);
0x0006c062 ldr.w r2, [pc, 0xaf4] | r2 = *(0x6cb5a);
0x0006c066 add r1, pc | r1 += pc;
0x0006c068 ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x0006c06a ldr r1, [r2] | r1 = *(0x6cb5a);
0x0006c06c ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0006c06e eors r1, r2 | r1 ^= r2;
0x0006c070 mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x0006c074 bne.w 0x6cd7e | goto label_104;
| }
0x0006c078 mov r1, r0 | r1 = r0;
0x0006c07a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0006c07c add sp, 0x84 |
0x0006c07e vpop {d8} | __asm ("vpop {d8}");
0x0006c082 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006c086 b.w 0x1a57c | void (*0x1a57c)() ();
| label_154:
0x0006c08a mov.w r0, 0x1a8 | r0 = 0x1a8;
0x0006c08e movs r1, 0 | r1 = 0;
0x0006c090 bl 0x13558 | r0 = fcn_00013558 (r0);
0x0006c094 mov r8, r0 | r8 = r0;
0x0006c096 b 0x6be30 | goto label_21;
| label_106:
0x0006c098 mov r0, sb | r0 = sb;
0x0006c09a ldrd r8, sb, [sp, 0x30] | __asm ("ldrd r8, sb, [var_30h]");
0x0006c09e mov r1, r0 | r1 = r0;
0x0006c0a0 b.w 0x6b59a | goto label_22;
| label_144:
0x0006c0a4 cmp r0, 0x2c |
| if (r0 != 0x2c) {
0x0006c0a6 bne.w 0x6b516 | goto label_5;
| }
0x0006c0aa cmp r5, 0xac |
| if (r5 != 0xac) {
0x0006c0ac bne.w 0x6ba32 | goto label_16;
| }
0x0006c0b0 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006c0b2 ldr.w sb, [r3, 0x14] | sb = *((r3 + 0x14));
0x0006c0b6 cmp.w sb, 0 |
| if (sb == 0) {
0x0006c0ba beq.w 0x6b516 | goto label_5;
| }
0x0006c0be ldr.w r3, [sb] | r3 = *(sb);
0x0006c0c2 cmp r3, 2 |
| if (r3 != 2) {
0x0006c0c4 bne.w 0x6b516 | goto label_5;
| }
0x0006c0c8 ldr.w r6, [sb, 0x18] | r6 = *((sb + 0x18));
0x0006c0cc ldrb r3, [r6] | r3 = *(r6);
0x0006c0ce cmp r3, 0xa7 |
| if (r3 == 0xa7) {
0x0006c0d0 beq.w 0x6c66a | goto label_166;
| }
| label_41:
0x0006c0d4 ldr.w r6, [sb, 8] | r6 = *((sb + 8));
0x0006c0d8 ldrb r3, [r6] | r3 = *(r6);
0x0006c0da cmp r3, 0xa7 |
| if (r3 != 0xa7) {
0x0006c0dc bne.w 0x6b516 | goto label_5;
| }
0x0006c0e0 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0006c0e2 cmp r3, 0 |
| if (r3 == 0) {
0x0006c0e4 beq.w 0x6b516 | goto label_5;
| }
0x0006c0e8 ldrb.w r2, [r3, 0x2b] | r2 = *((r3 + 0x2b));
0x0006c0ec cmp r2, 1 |
| if (r2 != 1) {
0x0006c0ee bne.w 0x6b516 | goto label_5;
| }
0x0006c0f2 ldr r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x0006c0f4 ldr r1, [sp, 0x2c] | r1 = var_2ch;
| if (r3 != 0) {
0x0006c0f6 cbnz r3, 0x6c104 | goto label_167;
| }
0x0006c0f8 b.w 0x6cef8 | goto label_168;
| do {
0x0006c0fc ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0006c0fe cmp r3, 0 |
| if (r3 == 0) {
0x0006c100 beq.w 0x6cef8 | goto label_168;
| }
| label_167:
0x0006c104 ldr r2, [r3] | r2 = *(r3);
0x0006c106 cmp r1, r2 |
0x0006c108 bne 0x6c0fc |
| } while (r1 != r2);
0x0006c10a ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0006c10c ldr r3, [r0] | r3 = *(r0);
0x0006c10e ldr r5, [r3, 0x48] | r5 = *((r3 + 0x48));
0x0006c110 cmp r5, 0 |
| if (r5 == 0) {
0x0006c112 beq.w 0x6b516 | goto label_5;
| }
0x0006c116 ldr r2, [sp, 0x14] | r2 = var_14h_2;
0x0006c118 add r3, sp, 0x68 | r3 += var_68h;
0x0006c11a str r3, [sp] | *(sp) = r3;
0x0006c11c movs r1, 2 | r1 = 2;
0x0006c11e add r3, sp, 0x64 | r3 += var_64h;
0x0006c120 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0006c122 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x0006c124 cmp r0, 0x95 |
| if (r0 <= 0x95) {
0x0006c126 ble.w 0x6b516 | goto label_5;
| }
0x0006c12a ldr.w sb, [sb, 0x18] | sb = *((sb + 0x18));
0x0006c12e uxtb.w sl, r0 | sl = (int8_t) r0;
0x0006c132 b 0x6ba8e | goto label_23;
| label_140:
0x0006c134 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0006c136 mov r8, r3 | r8 = r3;
0x0006c138 cmp r3, 0 |
| if (r3 == 0) {
0x0006c13a beq.w 0x6ba66 | goto label_24;
| }
0x0006c13e ldrb.w r8, [r3, 0x2b] | r8 = *((r3 + 0x2b));
0x0006c142 sub.w r8, r8, 1 | r8--;
0x0006c146 clz r8, r8 | r8 &= r8;
0x0006c14a lsr.w r8, r8, 5 | r8 >>= 5;
0x0006c14e b 0x6ba66 | goto label_24;
| label_143:
0x0006c150 movs r3, 0 | r3 = 0;
0x0006c152 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0006c154 mov r2, r3 | r2 = r3;
0x0006c156 mov r1, r4 | r1 = r4;
0x0006c158 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0006c15c mov r3, r0 | r3 = r0;
0x0006c15e b 0x6baec | goto label_25;
| label_159:
0x0006c160 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0006c162 mov.w r2, 0x1a0 | r2 = 0x1a0;
0x0006c166 movs r3, 0 | r3 = 0;
0x0006c168 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0006c16c mov fp, r0 |
0x0006c16e cmp r0, 0 |
| if (r0 == 0) {
0x0006c170 beq.w 0x6c2f6 | goto label_169;
| }
0x0006c174 ldrh r3, [sl, -0x26] | r3 = *((sl - 0x26));
0x0006c178 mov.w r2, 0x400 | r2 = 0x400;
0x0006c17c strh r2, [sl, -0x24] | *((sl - 0x24)) = r2;
0x0006c180 mov.w r2, -1 | r2 = -1;
0x0006c184 mov r1, r8 | r1 = r8;
0x0006c186 str r0, [sl, -0x18] | *((sl - 0x18)) = r0;
0x0006c18a orr r3, r3, 0x20 | r3 |= 0x20;
0x0006c18e str r2, [sl, -0x1c] | *((sl - 0x1c)) = r2;
0x0006c192 strh r3, [sl, -0x26] | *((sl - 0x26)) = r3;
0x0006c196 add.w r3, r0, 0x20 | r3 = r0 + 0x20;
0x0006c19a mov r0, r3 | r0 = r3;
0x0006c19c mov.w r2, 0x180 | r2 = 0x180;
0x0006c1a0 blx 0x839c | fcn_0000839c ();
0x0006c1a4 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0006c1a6 ldr r2, [r2] | r2 = *(r2);
0x0006c1a8 strb.w r8, [fp, 9] | var_9h = r8;
0x0006c1ac str.w r8, [fp, 4] | __asm ("str.w r8, [var_bp_4h]");
0x0006c1b0 str.w r2, [fp] | __asm ("str.w r2, [fp]");
0x0006c1b4 add.w r2, fp, 0xc | r2 += var_bp_ch;
0x0006c1b8 str.w r8, [fp, 0x14] | __asm ("str.w r8, [var_bp_14h]");
0x0006c1bc ldr r1, [sl, -0x30] | r1 = *((sl - 0x30));
0x0006c1c0 vst1.32 {d8}, [r2] | __asm ("vst1.32 {d8}, [r2]");
0x0006c1c4 movs r2, 0x2c | r2 = 0x2c;
0x0006c1c6 str.w r0, [fp, 0x18] | __asm ("str.w r0, [var_18h]");
0x0006c1ca mov r0, fp | r0 = fp;
0x0006c1cc bl 0x22418 | fcn_00022418 (r0, r1, r2);
0x0006c1d0 ldr.w r3, [fp, 0xc] | r3 = var_bp_ch;
0x0006c1d4 subs.w r8, r3, 1 | r8 = r3 - 1;
| if (r8 < r3) {
0x0006c1d8 bmi 0x6c1f4 | goto label_170;
| }
0x0006c1da str r4, [sp, 0x30] | var_30h = r4;
0x0006c1dc mov r4, r8 | r4 = r8;
0x0006c1de ldr.w r8, [sp, 0x20] | r8 = x;
| do {
0x0006c1e2 mov r2, r4 | r2 = r4;
0x0006c1e4 mov r1, fp | r1 = fp;
0x0006c1e6 subs r4, 1 | r4--;
0x0006c1e8 mov r0, r8 | r0 = r8;
0x0006c1ea bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006c1ee adds r2, r4, 1 | r2 = r4 + 1;
0x0006c1f0 bne 0x6c1e2 |
| } while (r2 != r4);
0x0006c1f2 ldr r4, [sp, 0x30] | r4 = var_30h;
| label_170:
0x0006c1f4 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0006c1f6 str.w r3, [fp, 4] | __asm ("str.w r3, [var_bp_4h]");
0x0006c1fa ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006c1fc ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006c200 cmp r3, 0 |
| if (r3 == 0) {
0x0006c202 beq.w 0x6c56c | goto label_171;
| }
| label_35:
0x0006c206 ldrd r8, r4, [sp, 0x54] | __asm ("ldrd r8, r4, [var_54h]");
0x0006c20a mov.w r3, 0x200 | r3 = 0x200;
0x0006c20e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006c212 ldr.w fp, [sp, 0x40] | fp = var_40h;
0x0006c216 vstr d16, [r8, 0x1a0] | __asm ("vstr d16, aav.0x000000ff");
0x0006c21a strh r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0006c21c mov.w r3, -1 | r3 = -1;
0x0006c220 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
| label_29:
0x0006c222 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006c224 ldr.w r7, [fp, 0x18] | r7 = var_18h;
0x0006c228 ldrb r5, [r3] | r5 = *(r3);
0x0006c22a ldr r3, [sp, 0x18] | r3 = var_sp_18h;
0x0006c22c add r7, r3 | r7 += r3;
0x0006c22e sub.w r3, r5, 0x2d | r3 = r5 - 0x2d;
0x0006c232 and r3, r3, 0xf7 | r3 &= 0xf7;
0x0006c236 b.w 0x6ba00 | goto label_26;
| label_99:
0x0006c23a ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006c23c and r3, r3, 1 | r3 &= 1;
0x0006c240 strh r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x0006c242 cmp r6, 0 |
| if (r6 != 0) {
0x0006c244 bne.w 0x6b9d4 | goto label_10;
| }
0x0006c248 b.w 0x6b9f4 | goto label_11;
| label_150:
0x0006c24c ldr r4, [r3, 0x14] | r4 = *((r3 + 0x14));
0x0006c24e ldr.w ip, [r4] | ip = *(r4);
0x0006c252 b 0x6bd14 | goto label_27;
| label_103:
0x0006c254 ldr r5, [sp, 0x14] | r5 = var_14h_2;
0x0006c256 ldr.w r6, [pc, 0x904] | r6 = *(0x0006cb5c);
0x0006c25a ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x0006c25e ldr.w sb, [r5, 0x14] | sb = *((r5 + 0x14));
0x0006c262 add r6, pc | r6 += pc;
0x0006c264 add.w r8, r6, 0xc00 | r8 = r6 + 0xc00;
0x0006c268 addw r6, r6, 0xc02 | __asm ("addw r6, r6, aav.0x000000ff");
| do {
0x0006c26c ldr r4, [r5, 0xc] | r4 = *((r5 + 0xc));
0x0006c26e ldrb r7, [r8], 1 | r7 = *(r8);
| r8++;
| if (r4 != 0) {
0x0006c272 cbz r4, 0x6c282 |
0x0006c274 movs r3, 0 | r3 = 0;
0x0006c276 mov r1, r4 | r1 = r4;
0x0006c278 mov r2, r3 | r2 = r3;
0x0006c27a mov r0, sl | r0 = sl;
0x0006c27c bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0006c280 mov r4, r0 | r4 = r0;
| }
0x0006c282 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
| if (r3 != 0) {
0x0006c286 cbz r3, 0x6c296 |
0x0006c288 mov r1, r3 | r1 = r3;
0x0006c28a movs r3, 0 | r3 = 0;
0x0006c28c mov r2, r3 | r2 = r3;
0x0006c28e mov r0, sl | r0 = sl;
0x0006c290 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0006c294 mov r3, r0 | r3 = r0;
| }
0x0006c296 mov r1, r7 | r1 = r7;
0x0006c298 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006c29a mov r2, r4 | r2 = r4;
0x0006c29c bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0006c2a0 mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0006c2a2 cbz r0, 0x6c2b6 |
0x0006c2a4 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0006c2a6 ands r3, r3, 3 | r3 &= 3;
| if (r3 == r3) {
0x0006c2aa beq 0x6c2b6 | goto label_172;
| }
0x0006c2ac ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0006c2ae orrs r2, r3 | r2 |= r3;
0x0006c2b0 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x0006c2b2 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x0006c2b4 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
| }
| label_172:
0x0006c2b6 movs r2, 3 | r2 = 3;
0x0006c2b8 mov r0, fp | r0 = fp;
0x0006c2ba bl 0x22290 | fcn_00022290 (r0, r1, r2, r3);
0x0006c2be mov r1, fp | r1 = fp;
0x0006c2c0 mov r4, r0 | r4 = r0;
0x0006c2c2 mov r2, r0 | r2 = r0;
0x0006c2c4 ldr r0, [sp, 0x20] | r0 = x;
0x0006c2c6 bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006c2ca ldr.w r7, [fp, 0x18] | r7 = var_18h;
0x0006c2ce add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x0006c2d2 ldr r3, [sp, 0x18] | r3 = var_sp_18h;
0x0006c2d4 cmp r6, r8 |
0x0006c2d6 add.w sb, sb, 0x10 | sb += 0x10;
0x0006c2da add.w r4, r7, r4, lsl 4 | r4 = r7 + (r4 << 4);
0x0006c2de add r7, r3 | r7 += r3;
0x0006c2e0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0006c2e2 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x0006c2e4 ldrsh.w r3, [r7, 8] | r3 = *((r7 + 8));
0x0006c2e8 strh r3, [r4, 8] | *((r4 + 8)) = r3;
0x0006c2ea ldrb r3, [r7, 0xe] | r3 = *((r7 + 0xe));
0x0006c2ec add.w r3, r3, 1 | r3++;
0x0006c2f0 strb r3, [r7, 0xe] | *((r7 + 0xe)) = r3;
0x0006c2f2 bne 0x6c26c |
| } while (r6 != r8);
0x0006c2f4 b 0x6bcc6 | goto label_28;
| label_169:
0x0006c2f6 orrs.w r3, r6, r7 | r3 = r6 | r7;
0x0006c2fa and r4, r4, 1 | r4 &= 1;
0x0006c2fe str r0, [sp, 0x30] | var_30h = r0;
0x0006c300 it eq |
| if (r3 != r6) {
0x0006c302 moveq r4, 0 | r4 = 0;
| }
0x0006c304 b 0x6bf20 | goto label_20;
| label_105:
0x0006c306 mov r1, sb | r1 = sb;
0x0006c308 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0006c30a bl 0x1c41c | fcn_0001c41c (r0, r1, r2);
0x0006c30e ldr r3, [sp, 0x30] | r3 = var_30h;
0x0006c310 orr.w r8, r0, r3 | r8 = r0 | r3;
0x0006c314 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006c316 orr.w sb, r1, r3 | sb = r1 | r3;
0x0006c31a b.w 0x6b59a | goto label_22;
| label_155:
0x0006c31e str.w r8, [r4, 0x18] | __asm ("str.w r8, [r4, 0x18]");
0x0006c322 b 0x6c222 | goto label_29;
| label_162:
0x0006c324 mov.w ip, 0 |
0x0006c328 mov r1, ip | r1 = ip;
0x0006c32a b 0x6bf9c | goto label_30;
| label_164:
0x0006c32c ldr r6, [sp, 0x14] | r6 = var_14h_2;
0x0006c32e mov r5, r7 | r5 = r7;
| label_33:
0x0006c330 mov.w sl, 0 | sl = 0;
| label_34:
0x0006c334 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0006c336 add.w r3, r6, 0xc | r3 = r6 + 0xc;
0x0006c33a vld1.32 {d16}, [r3] | __asm ("vld1.32 {d16}, [r3]");
0x0006c33e ldrb r2, [r1] | r2 = *(r1);
0x0006c340 cmp r2, 0xb1 |
| if (r2 != 0xb1) {
0x0006c342 beq 0x6c36c |
0x0006c344 vmov.32 r2, d16[1] | __asm ("vmov.32 r2, d16[1]");
0x0006c348 ldrb r0, [r2] | r0 = *(r2);
0x0006c34a cmp r0, 0xb1 |
| if (r0 == 0xb1) {
0x0006c34c beq 0x6c36c | goto label_173;
| }
0x0006c34e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006c350 str r3, [sp, 0x40] | var_40h = r3;
0x0006c352 bl 0x2c0bc | fcn_0002c0bc (r0, r1, r2);
0x0006c356 ldrd r2, r1, [r6, 0xc] | __asm ("ldrd r2, r1, [r6, 0xc]");
0x0006c35a mov r4, r0 | r4 = r0;
0x0006c35c ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006c35e bl 0x2c0bc | fcn_0002c0bc (r0, r1, r2);
0x0006c362 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0006c364 cmp r4, r0 |
0x0006c366 vld1.32 {d16}, [r3] | __asm ("vld1.32 {d16}, [r3]");
| if (r4 == r0) {
0x0006c36a beq 0x6c374 | goto label_174;
| }
| }
| label_173:
0x0006c36c ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0006c36e eor r2, r2, 0x400 | r2 ^= 0x400;
0x0006c372 str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_174:
0x0006c374 vrev64.32 d16, d16 | __asm ("vrev64.32 d16, d16");
0x0006c378 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0006c37c ldrb r2, [r6] | r2 = *(r6);
0x0006c37e cmp r2, 0x35 |
| if (r2 >= 0x35) {
0x0006c380 bls 0x6c38e |
0x0006c382 subs r2, 0x36 | r2 -= 0x36;
0x0006c384 eor r2, r2, 2 | r2 ^= 2;
0x0006c388 adds r2, 0x36 | r2 += 0x36;
0x0006c38a uxtb r2, r2 | r2 = (int8_t) r2;
0x0006c38c strb r2, [r6] | *(r6) = r2;
| }
0x0006c38e ldr r3, [sp, 0x38] | r3 = var_38h;
0x0006c390 cmp r2, 0x31 |
0x0006c392 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0006c394 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0006c396 vldr d16, [sp, 0x70] | __asm ("vldr d16, [sp, 0x70]");
0x0006c39a orr.w r1, r1, r3 | r1 |= r3;
0x0006c39e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006c3a0 orr.w r3, r3, r0 | r3 |= r0;
0x0006c3a4 add.w r0, r5, 0x14 | r0 = r5 + 0x14;
0x0006c3a8 vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
0x0006c3ac strd r1, r3, [r5, 0x20] | __asm ("strd r1, r3, [r5, 0x20]");
0x0006c3b0 it eq |
| if (r2 != 0x31) {
0x0006c3b2 moveq r3, 1 | r3 = 1;
| }
0x0006c3b4 strd r8, sb, [r5, 0x28] | __asm ("strd r8, sb, [r5, 0x28]");
| if (r2 != 0x31) {
0x0006c3b8 beq 0x6c3d8 |
0x0006c3ba cmp r2, 0x32 |
0x0006c3bc it eq |
| if (r2 != 0x32) {
0x0006c3be moveq r3, 0x100 | r3 = 0x100;
| }
| if (r2 == 0x32) {
0x0006c3c2 beq 0x6c3d8 | goto label_175;
| }
0x0006c3c4 cmp r2, 0x2d |
0x0006c3c6 ittte ne |
| if (r2 == 0x2d) {
0x0006c3c8 subne r3, r2, 0x35 | r3 = r2 - 0x35;
| }
| if (r2 == 0x2d) {
0x0006c3cc movne r2, 2 | r2 = 2;
| }
| if (r2 != 0x2d) {
0x0006c3ce lsleq r3, r2, r3 | r3 = r2 << r3;
| }
| if (r2 == 0x2d) {
0x0006c3d2 movs r3, 0x80 | r3 = 0x80;
| }
0x0006c3d4 it ne |
| if (r3 == 0x80) {
0x0006c3d6 uxthne r3, r3 | __asm ("uxthne r3, r3");
| goto label_175;
| }
| }
| label_175:
0x0006c3d8 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0006c3da add r3, sl | r3 += sl;
0x0006c3dc ands r2, r3 | r2 &= r3;
0x0006c3de ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006c3e0 strh r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x0006c3e2 ldrb r5, [r3] | r5 = *(r3);
0x0006c3e4 sub.w r3, r5, 0x2d | r3 = r5 - 0x2d;
0x0006c3e8 and r3, r3, 0xf7 | r3 &= 0xf7;
0x0006c3ec b.w 0x6ba00 | goto label_26;
| label_152:
0x0006c3f0 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x0006c3f2 movs r5, 0 | r5 = 0;
0x0006c3f4 ldr r4, [sp, 0x14] | r4 = var_14h_2;
0x0006c3f6 ldr r7, [sp, 0x20] | r7 = x;
| do {
0x0006c3f8 mov r3, r8 | r3 = r8;
0x0006c3fa mov r2, r5 | r2 = r5;
0x0006c3fc mov r0, r6 | r0 = r6;
0x0006c3fe bl 0x32a04 | fcn_00032a04 (r0, r1, r2, r3);
0x0006c402 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0006c404 mov sb, r0 | sb = r0;
0x0006c406 mov r3, r8 | r3 = r8;
0x0006c408 mov r2, r5 | r2 = r5;
0x0006c40a mov r0, r6 | r0 = r6;
0x0006c40c bl 0x32a04 | fcn_00032a04 (r0, r1, r2, r3);
0x0006c410 ldrb r1, [r4] | r1 = *(r4);
0x0006c412 mov r3, r0 | r3 = r0;
0x0006c414 mov r2, sb | r2 = sb;
0x0006c416 mov r0, r6 | r0 = r6;
0x0006c418 bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0006c41c mov r1, r0 | r1 = r0;
| if (r0 != 0) {
0x0006c41e cbz r0, 0x6c432 |
0x0006c420 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0006c422 ands r3, r3, 3 | r3 &= 3;
| if (r3 == r3) {
0x0006c426 beq 0x6c432 | goto label_176;
| }
0x0006c428 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x0006c42a orrs r2, r3 | r2 |= r3;
0x0006c42c ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0006c42e str r2, [r0, 4] | *((r0 + 4)) = r2;
0x0006c430 str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
| }
| label_176:
0x0006c432 movw r2, 0x8001 | r2 = 0x8001;
0x0006c436 mov r0, fp | r0 = fp;
0x0006c438 bl 0x22290 | fcn_00022290 (r0, r1, r2, r3);
0x0006c43c adds r5, 1 | r5++;
0x0006c43e mov r2, r0 | r2 = r0;
0x0006c440 mov r1, fp | r1 = fp;
0x0006c442 mov r0, r7 | r0 = r7;
0x0006c444 bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006c448 cmp r5, r8 |
| if (r5 == r8) {
0x0006c44a beq 0x6c450 | goto label_177;
| }
0x0006c44c ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x0006c44e b 0x6c3f8 |
| } while (1);
| label_177:
0x0006c450 ldr.w r3, [fp, 0x18] | r3 = var_18h;
0x0006c454 mov.w r1, 0x2000 | r1 = 0x2000;
0x0006c458 ldr r2, [sp, 0x18] | r2 = var_sp_18h;
0x0006c45a add r3, r2 | r3 += r2;
0x0006c45c ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x0006c45e strh r1, [r3, 0xc] | *((r3 + 0xc)) = r1;
0x0006c460 orr r2, r2, 6 | r2 |= 6;
0x0006c464 strh r2, [r3, 0xa] | *((r3 + 0xa)) = r2;
0x0006c466 b.w 0x6b51e | goto label_31;
| label_160:
0x0006c46a mov r1, r3 | r1 = r3;
0x0006c46c mov.w ip, 1 |
0x0006c470 b 0x6bf9c | goto label_30;
| label_163:
0x0006c472 ldr r5, [sp, 0x44] | r5 = var_44h;
0x0006c474 b 0x6c00a | goto label_32;
| label_165:
0x0006c476 mov r1, r0 | r1 = r0;
0x0006c478 movs r2, 3 | r2 = 3;
0x0006c47a mov r0, fp | r0 = fp;
0x0006c47c bl 0x22290 | r0 = fcn_00022290 (r0, r1, r2, r3);
0x0006c480 cmp r0, 0 |
| if (r0 == 0) {
0x0006c482 beq.w 0x6b52e | goto label_1;
| }
0x0006c486 ldr.w r7, [fp, 0x18] | r7 = var_18h;
0x0006c48a add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x0006c48e ldr r3, [sp, 0x18] | r3 = var_sp_18h;
0x0006c490 cmp.w sl, 0x2d |
0x0006c494 add.w r5, r7, r0, lsl 4 | r5 = r7 + (r0 << 4);
0x0006c498 add r7, r3 | r7 += r3;
0x0006c49a ldrsh.w r2, [r7, 8] | r2 = *((r7 + 8));
0x0006c49e ldr r3, [sp, 0x24] | r3 = var_24h;
0x0006c4a0 strh r2, [r5, 8] | *((r5 + 8)) = r2;
0x0006c4a2 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0006c4a4 ldrb r2, [r7, 0xe] | r2 = *((r7 + 0xe));
0x0006c4a6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006c4a8 add.w r2, r2, 1 | r2++;
0x0006c4ac strb r2, [r7, 0xe] | *((r7 + 0xe)) = r2;
0x0006c4ae ittt eq |
| if (sl == 0x2d) {
0x0006c4b0 ldrheq r2, [r5, 0xa] | __asm ("ldrheq r2, [r5, 0xa]");
| }
| if (sl != 0x2d) {
0x0006c4b2 orreq r2, r2, 0x800 | r2 |= 0x800;
| }
| if (sl == 0x2d) {
0x0006c4b6 strh r2, [r5, 0xa] | *((r5 + 0xa)) = r2;
| }
0x0006c4b8 ldr r2, [r3] | r2 = *(r3);
0x0006c4ba ldr r1, [r2, 0x50] | r1 = *((r2 + 0x50));
0x0006c4bc ldrh r2, [r7, 0xa] | r2 = *((r7 + 0xa));
0x0006c4be lsls r3, r1, 0x18 | r3 = r1 << 0x18;
0x0006c4c0 orr r2, r2, 8 | r2 |= 8;
0x0006c4c4 strh r2, [r7, 0xa] | *((r7 + 0xa)) = r2;
| if (r3 < r1) {
0x0006c4c6 bmi.w 0x6c330 | goto label_33;
| }
0x0006c4ca ldrb r2, [r6] | r2 = *(r6);
0x0006c4cc subs r2, 0x2d | r2 -= 0x2d;
0x0006c4ce tst.w r2, 0xf7 |
| if ((r2 & 0xf7) != 0) {
0x0006c4d2 bne.w 0x6c330 | goto label_33;
| }
0x0006c4d6 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0006c4d8 tst.w r1, 1 |
0x0006c4dc str r1, [sp, 0x48] | var_48h = r1;
| if ((r1 & 1) != 0) {
0x0006c4de bne.w 0x6c330 | goto label_33;
| }
0x0006c4e2 ldr.w sl, [r6, 0xc] | sl = *((r6 + 0xc));
0x0006c4e6 mov r0, sl | r0 = sl;
0x0006c4e8 bl 0xd620 | fcn_0000d620 (r0);
0x0006c4ec ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0006c4ee mov r4, r0 | r4 = r0;
0x0006c4f0 mov r0, r3 | r0 = r3;
0x0006c4f2 str r3, [sp, 0x40] | var_40h = r3;
0x0006c4f4 bl 0xd620 | r0 = fcn_0000d620 (r0);
0x0006c4f8 cmp r4, r0 |
0x0006c4fa ldr r3, [sp, 0x40] | r3 = var_40h;
0x0006c4fc ldr r1, [sp, 0x48] | r1 = var_48h;
0x0006c4fe mov r2, r0 | r2 = r0;
| if (r4 == r0) {
0x0006c500 beq 0x6c50e | goto label_178;
| }
0x0006c502 cmp r4, 0x42 |
| if (r4 < 0x42) {
0x0006c504 bls.w 0x6c330 | goto label_33;
| }
0x0006c508 cmp r0, 0x42 |
| if (r0 < 0x42) {
0x0006c50a bls.w 0x6c330 | goto label_33;
| }
| label_178:
0x0006c50e lsls r4, r1, 0x15 | r4 = r1 << 0x15;
0x0006c510 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006c512 itete mi |
| if (r4 >= r1) {
0x0006c514 movmi r1, r3 | r1 = r3;
| }
| if (r4 < r1) {
0x0006c516 movpl r1, sl | r1 = sl;
| }
| if (r4 >= r1) {
0x0006c518 movmi r2, sl | r2 = sl;
| }
| if (r4 < r1) {
0x0006c51a movpl r2, r3 | r2 = r3;
| }
0x0006c51c bl 0x2c0bc | fcn_0002c0bc (r0, r1, r2);
0x0006c520 ldrd r1, r4, [r6, 0xc] | __asm ("ldrd r1, r4, [r6, 0xc]");
| if (r0 == 0) {
0x0006c524 cbz r0, 0x6c55e | goto label_179;
| }
0x0006c526 ldr.w r2, [pc, 0x638] | r2 = *(0x0006cb60);
0x0006c52a ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x0006c52c add r2, pc | r2 += pc;
0x0006c52e cmp r0, r2 |
| if (r0 == r2) {
0x0006c530 beq 0x6c55e | goto label_179;
| }
0x0006c532 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006c534 bl 0x2bfc0 | r0 = fcn_0002bfc0 (r0, r1);
0x0006c538 mov sl, r0 | sl = r0;
0x0006c53a cmp r0, 0 |
| if (r0 == 0) {
0x0006c53c beq.w 0x6cebc | goto label_180;
| }
| label_83:
0x0006c540 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006c542 mov r1, r4 | r1 = r4;
0x0006c544 bl 0x2bfc0 | r0 = fcn_0002bfc0 (r0, r1);
0x0006c548 cmp r0, 0 |
| if (r0 == 0) {
0x0006c54a beq.w 0x6ce1e | goto label_181;
| }
| label_78:
0x0006c54e ldr r1, [r0] | r1 = *(r0);
0x0006c550 ldr.w r0, [sl] | r0 = *(sl);
0x0006c554 bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x0006c558 cmp r0, 0 |
| if (r0 != 0) {
0x0006c55a bne.w 0x6c330 | goto label_33;
| }
| label_179:
0x0006c55e ldrh r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x0006c560 mov.w sl, 0x800 | sl = 0x800;
0x0006c564 orr r2, r2, 0x800 | r2 |= 0x800;
0x0006c568 strh r2, [r7, 0xc] | *((r7 + 0xc)) = r2;
0x0006c56a b 0x6c334 | goto label_34;
| label_171:
0x0006c56c ldr.w r8, [fp, 0xc] | r8 = var_bp_ch;
0x0006c570 ldr.w r2, [fp, 0x18] | r2 = var_18h;
0x0006c574 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0006c578 ble.w 0x6c206 | goto label_35;
| }
0x0006c57c str r4, [sp, 0x44] | var_44h = r4;
0x0006c57e mov lr, r3 | lr = r3;
0x0006c580 add.w ip, r2, 0x30 |
0x0006c584 mov r1, r3 | r1 = r3;
0x0006c586 mov r4, r3 | r4 = r3;
0x0006c588 str.w sl, [sp, 0x30] | __asm ("str.w sl, [var_30h]");
| label_36:
0x0006c58c ldr r3, [ip, -0x30] | r3 = *((ip - 0x30));
0x0006c590 ldrb r3, [r3] | r3 = *(r3);
0x0006c592 subs r3, 0x2d | r3 -= 0x2d;
0x0006c594 uxtb r3, r3 | r3 = (int8_t) r3;
0x0006c596 cmp r3, 0xc |
| if (r3 > 0xc) {
0x0006c598 bhi 0x6c626 | goto label_182;
| }
0x0006c59a movw r2, 0x1f31 | r2 = 0x1f31;
0x0006c59e lsr.w r3, r2, r3 | r3 = r2 >> r3;
0x0006c5a2 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x0006c5a4 bpl 0x6c626 | goto label_182;
| }
| label_38:
0x0006c5a6 ldr sl, [ip, -0x1c] | sl = *((ip - 0x1c));
0x0006c5aa ldr.w r3, [r5, 0x200] | r3 = *((r5 + 0x200));
0x0006c5ae cmp sl, r3 |
0x0006c5b0 it eq |
| if (sl != r3) {
0x0006c5b2 orreq r1, r1, 1 | r1 |= 1;
| }
| if (sl == r3) {
0x0006c5b6 beq 0x6c5f6 | goto label_37;
| }
0x0006c5b8 ldr.w fp, [r5, 0x1fc] | fp = *((r5 + 0x1fc));
0x0006c5bc cmp.w fp, 1 |
| if (fp <= 1) {
0x0006c5c0 ble 0x6c5f6 | goto label_37;
| }
0x0006c5c2 add.w r2, r5, 0x200 | r2 = r5 + 0x200;
0x0006c5c6 movs r3, 1 | r3 = 1;
0x0006c5c8 b 0x6c5d0 |
| while (sl != r0) {
0x0006c5ca adds r3, 1 | r3++;
0x0006c5cc cmp r3, fp |
| if (r3 == fp) {
0x0006c5ce beq 0x6c5f6 | goto label_37;
| }
0x0006c5d0 ldr r0, [r2, 4]! | r0 = *((r2 += 4));
0x0006c5d4 cmp sl, r0 |
0x0006c5d6 bne 0x6c5ca |
| }
0x0006c5d8 mov.w sl, 1 | sl = 1;
0x0006c5dc sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x0006c5e0 rsb.w r0, r3, 0x20 | r0 = 0x20 - r3;
0x0006c5e4 lsl.w r2, sl, r2 | r2 = sl << r2;
0x0006c5e8 lsr.w r0, sl, r0 | r0 = sl >> r0;
0x0006c5ec lsl.w r3, sl, r3 | r3 = sl << r3;
0x0006c5f0 orrs r2, r0 | r2 |= r0;
0x0006c5f2 orrs r1, r3 | r1 |= r3;
0x0006c5f4 orrs r4, r2 | r4 |= r2;
| label_37:
0x0006c5f6 add.w lr, lr, 1 | lr++;
0x0006c5fa add.w ip, ip, 0x30 |
0x0006c5fe cmp lr, r8 |
| if (lr != r8) {
0x0006c600 bne 0x6c58c | goto label_36;
| }
0x0006c602 mov r3, r4 | r3 = r4;
0x0006c604 ldr r4, [sp, 0x44] | r4 = var_44h;
0x0006c606 ands r3, r7 | r3 &= r7;
0x0006c608 ands r6, r1 | r6 &= r1;
0x0006c60a mov r7, r3 | r7 = r3;
0x0006c60c mov.w fp, 0 |
0x0006c610 orrs.w r3, r6, r7 | r3 = r6 | r7;
0x0006c614 ldr.w sl, [sp, 0x30] | sl = var_30h;
0x0006c618 and r4, r4, 1 | r4 &= 1;
0x0006c61c str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x0006c620 it eq |
| if (r3 != r6) {
0x0006c622 moveq r4, 0 | r4 = 0;
| }
0x0006c624 b 0x6bf20 | goto label_20;
| label_182:
0x0006c626 ldrh r3, [ip, -0x24] | r3 = *((ip - 0x24));
0x0006c62a cmp r3, 0x40 |
| if (r3 != 0x40) {
0x0006c62c bne 0x6c5f6 | goto label_37;
| }
0x0006c62e b 0x6c5a6 | goto label_38;
| label_141:
0x0006c630 ldr.w r3, [sb, 0x2c] | r3 = *((sb + 0x2c));
0x0006c634 cmp r3, 0 |
| if (r3 == 0) {
0x0006c636 beq.w 0x6ba76 | goto label_39;
| }
0x0006c63a ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0006c63e cmp r3, 1 |
| if (r3 != 1) {
0x0006c640 bne.w 0x6ba76 | goto label_39;
| }
0x0006c644 cmp r5, 0x34 |
0x0006c646 mov r3, sb | r3 = sb;
| if (r5 == 0x34) {
0x0006c648 beq.w 0x6cd20 | goto label_183;
| }
0x0006c64c rsb.w sl, sl, 0x46 | sl = 0x46 - sl;
0x0006c650 mov sb, r6 | sb = r6;
0x0006c652 uxtb.w sl, sl | sl = (int8_t) sl;
0x0006c656 mov r4, sb | r4 = sb;
0x0006c658 mov r6, r3 | r6 = r3;
0x0006c65a ldr.w sb, [sp, 0x28] | sb = var_28h;
0x0006c65e str.w sl, [sp, 0x20] | __asm ("str.w sl, [x]");
0x0006c662 ldr.w sl, [sp, 0x14] | sl = var_14h_2;
0x0006c666 b.w 0x6baa0 | goto label_40;
| label_166:
0x0006c66a ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0006c66c cmp r3, 0 |
| if (r3 == 0) {
0x0006c66e beq.w 0x6c0d4 | goto label_41;
| }
0x0006c672 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0006c676 cmp r3, 1 |
| if (r3 != 1) {
0x0006c678 bne.w 0x6c0d4 | goto label_41;
| }
0x0006c67c ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006c67e movs r5, 0 | r5 = 0;
0x0006c680 ldr.w r0, [pc, 0x4e0] | r0 = *(0x0006cb64);
0x0006c684 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0006c686 add r0, pc | r0 += pc;
0x0006c688 add.w ip, r3, -1 |
0x0006c68c ldr.w r3, [pc, 0x4d8] |
0x0006c690 add r3, pc | r3 = 0xd91fc;
0x0006c692 addw r7, r3, 0xcb4 | __asm ("addw r7, r3, aav.0x000000ff");
| label_42:
0x0006c696 ldr.w r1, [r7, r5, lsl 3] | offset_0 = r5 << 3;
| r1 = *((r7 + offset_0));
0x0006c69a mov r4, ip | r4 = ip;
0x0006c69c subs r1, 1 | r1--;
| do {
| label_43:
0x0006c69e ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x0006c6a2 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x0006c6a6 cmp r3, r2 |
| if (r3 == r2) {
0x0006c6a8 beq 0x6c6c2 | goto label_184;
| }
0x0006c6aa add r3, r0 | r3 += r0;
0x0006c6ac add r2, r0 | r2 += r0;
0x0006c6ae ldrb.w lr, [r3, 0x140] |
0x0006c6b2 ldrb.w r3, [r2, 0x140] | r3 = *((r2 + 0x140));
0x0006c6b6 cmp lr, r3 |
0x0006c6b8 beq 0x6c69e |
| } while (lr == r3);
0x0006c6ba adds r5, 1 | r5++;
0x0006c6bc cmp r5, 4 |
| if (r5 != 4) {
0x0006c6be bne 0x6c696 | goto label_42;
| }
0x0006c6c0 b 0x6c0d4 | goto label_41;
| label_184:
0x0006c6c2 cmp r3, 0 |
| if (r3 != 0) {
0x0006c6c4 bne 0x6c69e | goto label_43;
| }
0x0006c6c6 mov r8, r3 | r8 = r3;
0x0006c6c8 ldr.w r3, [pc, 0x4a0] |
0x0006c6cc ldr.w sb, [sb, 8] | sb = *((sb + 8));
0x0006c6d0 add r3, pc | r3 = 0xd9240;
0x0006c6d2 add.w r3, r3, r5, lsl 3 | r3 += (r5 << 3);
0x0006c6d6 mov r4, sb | r4 = sb;
0x0006c6d8 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x0006c6dc ldrb.w sl, [r3, 0xcb8] | sl = *((r3 + 0xcb8));
0x0006c6e0 str.w sl, [sp, 0x20] | __asm ("str.w sl, [x]");
0x0006c6e4 ldr.w sl, [sp, 0x14] | sl = var_14h_2;
0x0006c6e8 b.w 0x6baa0 | goto label_40;
| label_158:
0x0006c6ec ldrd r8, r4, [sp, 0x54] | __asm ("ldrd r8, r4, [var_54h]");
0x0006c6f0 mov.w r3, 0x200 | r3 = 0x200;
0x0006c6f4 str.w fp, [sp, 0x54] | __asm ("str.w fp, [var_54h]");
0x0006c6f8 ldr.w fp, [sp, 0x40] | fp = var_40h;
0x0006c6fc strd r6, r7, [r8, 0x1a0] | __asm ("strd r6, r7, aav.0x000000ff");
0x0006c700 strh r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0006c702 mov.w r3, -1 | r3 = -1;
0x0006c706 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x0006c708 orrs.w r3, r6, r7 | r3 = r6 | r7;
| if (r3 != r6) {
0x0006c70c beq 0x6c71e |
0x0006c70e movs r3, 1 | r3 = 1;
0x0006c710 strb.w r3, [fp, 9] | var_9h = r3;
0x0006c714 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0006c718 cmp r3, 2 |
| if (r3 == 2) {
0x0006c71a beq.w 0x6cb88 | goto label_185;
| }
| }
| label_62:
0x0006c71e ldr r3, [sp, 0x54] | r3 = var_54h;
0x0006c720 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0006c722 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0006c724 beq.w 0x6c222 | goto label_29;
| }
0x0006c728 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
| label_51:
0x0006c72c ldr r2, [sp, 0x54] | r2 = var_54h;
0x0006c72e mov.w r5, -1 | r5 = -1;
0x0006c732 ldr r7, [sp, 0x48] | r7 = var_48h;
0x0006c734 movs r6, 2 | r6 = 2;
0x0006c736 mov.w sl, 1 | sl = 1;
0x0006c73a mov r4, r5 | r4 = r5;
0x0006c73c and r2, r2, 1 | r2 &= 1;
0x0006c740 str.w fp, [sp, 0x5c] | __asm ("str.w fp, [var_5ch]");
0x0006c744 str r2, [sp, 0x58] | var_58h = r2;
| label_44:
0x0006c746 subs.w sb, r3, 1 | sb = r3 - 1;
0x0006c74a ldr.w r5, [r8, 0x18] | r5 = *((r8 + 0x18));
0x0006c74c str r0, [r3, r0] | *((r3 + r0)) = r0;
| if (sb < r3) {
0x0006c74e bmi.w 0x6c8ac | goto label_186;
| }
| label_46:
0x0006c752 ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x0006c754 ldrh r3, [r5, 0xa] | r3 = *((r5 + 0xa));
0x0006c756 cmp r0, r4 |
0x0006c758 bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x0006c75c strh r3, [r5, 0xa] | *((r5 + 0xa)) = r3;
| if (r0 == r4) {
0x0006c75e beq.w 0x6c89e | goto label_187;
| }
0x0006c762 ldr.w r3, [r7, 0x200] | r3 = *((r7 + 0x200));
0x0006c766 cmp r0, r3 |
| if (r0 == r3) {
0x0006c768 beq.w 0x6c8d4 | goto label_188;
| }
0x0006c76c ldr.w ip, [r7, 0x1fc] | ip = *((r7 + 0x1fc));
0x0006c770 cmp.w ip, 1 |
| if (ip <= 1) {
0x0006c774 ble.w 0x6c89e | goto label_187;
| }
0x0006c778 add.w r2, r7, 0x200 | r2 = r7 + 0x200;
0x0006c77c movs r3, 1 | r3 = 1;
0x0006c77e b 0x6c788 |
| while (r0 != r1) {
0x0006c780 adds r3, 1 | r3++;
0x0006c782 cmp ip, r3 |
| if (ip == r3) {
0x0006c784 beq.w 0x6c89e | goto label_187;
| }
0x0006c788 ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x0006c78c cmp r0, r1 |
0x0006c78e bne 0x6c780 |
| }
0x0006c790 sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x0006c794 rsb.w r1, r3, 0x20 | r1 = 0x20 - r3;
0x0006c798 lsr.w r1, sl, r1 | r1 = sl >> r1;
0x0006c79c lsl.w r2, sl, r2 | r2 = sl << r2;
0x0006c7a0 lsl.w r3, sl, r3 | r3 = sl << r3;
0x0006c7a4 orrs r2, r1 | r2 |= r1;
0x0006c7a6 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0006c7a8 ands r2, r1 | r2 &= r1;
0x0006c7aa ldr r1, [sp, 0x54] | r1 = var_54h;
0x0006c7ac ands r3, r1 | r3 &= r1;
| label_49:
0x0006c7ae orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0006c7b0 beq 0x6c89e | goto label_187;
| }
0x0006c7b2 mov r4, r5 | r4 = r5;
0x0006c7b4 ldr r5, [r5, 0x18] | r5 = *((r5 + 0x18));
0x0006c7b6 ldr r3, [r4], 0x30 | r3 = *(r4);
| r4 += 0x30;
0x0006c7ba mov fp, r0 |
0x0006c7bc ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0006c7be str r3, [sp, 0x44] | var_44h = r3;
| do {
0x0006c7c0 ldr r3, [r4, -0x1c] | r3 = *((r4 - 0x1c));
0x0006c7c4 cmp fp, r3 |
| if (fp == r3) {
0x0006c7c6 beq 0x6c858 | goto label_189;
| }
0x0006c7c8 ldrh r3, [r4, -0x26] | r3 = *((r4 - 0x26));
0x0006c7cc bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x0006c7d0 lsls r3, r3, 0x10 | r3 <<= 0x10;
0x0006c7d2 lsrs r3, r3, 0x10 | r3 >>= 0x10;
| label_45:
0x0006c7d4 add.w sb, sb, -1 | sb += -1;
0x0006c7d8 strh r3, [r4, -0x26] | *((r4 - 0x26)) = r3;
0x0006c7dc cmp.w sb, -1 |
0x0006c7e0 add.w r4, r4, 0x30 | r4 += 0x30;
0x0006c7e4 bne 0x6c7c0 |
| } while (sb != -1);
0x0006c7e6 ldr.w r6, [r8, 0xc] | r6 = *((r8 + 0xc));
0x0006c7ea ldr.w fp, [sp, 0x5c] | fp = var_5ch;
0x0006c7ee ldr.w r5, [r8, 0x18] | r5 = *((r8 + 0x18));
0x0006c7f2 subs r6, 1 | r6--;
| if (r6 >= 1) {
0x0006c7f4 bpl 0x6c8e0 | goto label_190;
| }
0x0006c7f6 movs r3, 0 | r3 = 0;
0x0006c7f8 movs r1, 0x31 | r1 = 0x31;
0x0006c7fa ldr r0, [sp, 0x50] | r0 = var_50h;
0x0006c7fc mov r2, r3 | r2 = r3;
0x0006c7fe bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0006c802 mov r1, r0 | r1 = r0;
0x0006c804 cmp r0, 0 |
| if (r0 == 0) {
0x0006c806 beq.w 0x6c222 | goto label_29;
| }
0x0006c80a movs r7, 0 | r7 = 0;
| label_50:
0x0006c80c ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0006c80e ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0006c810 ands r3, r3, 3 | r3 &= 3;
| if (r3 != r3) {
0x0006c814 beq 0x6c820 |
0x0006c816 ldr r2, [r2, 0x24] | r2 = *((r2 + 0x24));
0x0006c818 str r2, [r1, 0x24] | *((r1 + 0x24)) = r2;
0x0006c81a ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0006c81c orrs r2, r3 | r2 |= r3;
0x0006c81e str r2, [r1, 4] | *((r1 + 4)) = r2;
| }
0x0006c820 movs r2, 3 | r2 = 3;
0x0006c822 str r7, [r1, 0x14] | *((r1 + 0x14)) = r7;
0x0006c824 mov r0, fp | r0 = fp;
0x0006c826 bl 0x22290 | fcn_00022290 (r0, r1, r2, r3);
0x0006c82a mov r1, fp | r1 = fp;
0x0006c82c mov r2, r0 | r2 = r0;
0x0006c82e mov r5, r0 | r5 = r0;
0x0006c830 ldr r0, [sp, 0x20] | r0 = x;
0x0006c832 bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006c836 ldr.w r2, [fp, 0x18] | r2 = var_18h;
0x0006c83a add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x0006c83e ldr r1, [sp, 0x18] | r1 = var_sp_18h;
0x0006c840 add.w r3, r2, r5, lsl 4 | r3 = r2 + (r5 << 4);
0x0006c844 add r2, r1 | r2 += r1;
0x0006c846 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0006c848 str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x0006c84a ldrsh.w r1, [r2, 8] | r1 = *((r2 + 8));
0x0006c84e strh r1, [r3, 8] | *((r3 + 8)) = r1;
0x0006c850 ldrb r3, [r2, 0xe] | r3 = *((r2 + 0xe));
0x0006c852 adds r3, 1 | r3++;
0x0006c854 strb r3, [r2, 0xe] | *((r2 + 0xe)) = r3;
0x0006c856 b 0x6c222 | goto label_29;
| label_189:
0x0006c858 ldr r3, [r4, -0x18] | r3 = *((r4 - 0x18));
0x0006c85c cmp r3, r5 |
0x0006c85e beq 0x6c86e |
| while (r3 != 0) {
| label_47:
0x0006c860 cmp r6, 1 |
| if (r6 == 1) {
0x0006c862 beq 0x6c8ac | goto label_186;
| }
0x0006c864 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0006c868 mov r4, fp | r4 = fp;
0x0006c86a movs r6, 1 | r6 = 1;
0x0006c86c b 0x6c746 | goto label_44;
0x0006c86e adds r3, r5, 2 | r3 = r5 + 2;
0x0006c870 ldr r2, [r4, -0x30] | r2 = *((r4 - 0x30));
| if (r3 == r5) {
0x0006c874 beq 0x6c8b2 | goto label_191;
| }
| label_48:
0x0006c876 ldr r0, [r2, 0x10] | r0 = *((r2 + 0x10));
0x0006c878 str r2, [sp, 0x40] | var_40h = r2;
0x0006c87a bl 0xd620 | fcn_0000d620 (r0);
0x0006c87e ldr r2, [sp, 0x40] | r2 = var_40h;
0x0006c880 mov r3, r0 | r3 = r0;
0x0006c882 str r3, [sp, 0x40] | var_40h = r3;
0x0006c884 ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x0006c886 bl 0xd620 | fcn_0000d620 (r0);
0x0006c88a ldr r3, [sp, 0x40] | r3 = var_40h;
0x0006c88c cmp r3, 0 |
0x0006c88e it ne |
| if (r3 != 0) {
0x0006c890 cmpne r0, r3 | __asm ("cmpne r0, r3");
| }
0x0006c892 bne 0x6c860 |
| }
0x0006c894 ldrh r3, [r4, -0x26] | r3 = *((r4 - 0x26));
0x0006c898 orr r3, r3, 0x40 | r3 |= 0x40;
0x0006c89c b 0x6c7d4 | goto label_45;
| label_187:
0x0006c89e add.w sb, sb, -1 | sb += -1;
0x0006c8a2 adds r5, 0x30 | r5 += 0x30;
0x0006c8a4 cmp.w sb, -1 |
| if (sb != -1) {
0x0006c8a8 bne.w 0x6c752 | goto label_46;
| }
| label_186:
0x0006c8ac ldr.w fp, [sp, 0x5c] | fp = var_5ch;
0x0006c8b0 b 0x6c222 | goto label_29;
| label_191:
0x0006c8b2 ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x0006c8b4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0006c8b6 cmp r3, 0 |
0x0006c8b8 it ne |
| if (r3 != 0) {
0x0006c8ba cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
| if (r3 == 0) {
0x0006c8bc beq 0x6c8da | goto label_192;
| }
0x0006c8be ldr r2, [sp, 0x44] | r2 = var_44h;
0x0006c8c0 mov.w r3, -1 | r3 = -1;
0x0006c8c4 ldr r0, [sp, 0x50] | r0 = var_50h;
0x0006c8c6 bl 0x38abc | r0 = fcn_00038abc (r0, r1, r2, r3);
0x0006c8ca cmp r0, 0 |
| if (r0 != 0) {
0x0006c8cc bne 0x6c860 | goto label_47;
| }
0x0006c8ce ldr r2, [r4, -0x30] | r2 = *((r4 - 0x30));
0x0006c8d2 b 0x6c876 | goto label_48;
| label_188:
0x0006c8d4 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0006c8d6 movs r2, 0 | r2 = 0;
0x0006c8d8 b 0x6c7ae | goto label_49;
| label_192:
0x0006c8da cmp r1, r3 |
| if (r1 != r3) {
0x0006c8dc bne 0x6c860 | goto label_47;
| }
0x0006c8de b 0x6c876 | goto label_48;
| label_190:
0x0006c8e0 ldr r4, [sp, 0x48] | r4 = var_48h;
0x0006c8e2 movs r2, 0 | r2 = 0;
0x0006c8e4 ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x0006c8e8 adds r5, 0x30 | r5 += 0x30;
0x0006c8ea mov r7, r2 | r7 = r2;
| do {
0x0006c8ec ldrh r3, [r5, -0x26] | r3 = *((r5 - 0x26));
0x0006c8f0 lsls r0, r3, 0x19 | r0 = r3 << 0x19;
| if (r0 < r3) {
0x0006c8f2 bpl 0x6c91a |
0x0006c8f4 ldr r3, [r5, -0x30] | r3 = *((r5 - 0x30));
0x0006c8f8 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
| if (r2 != 0) {
0x0006c8fa cbz r2, 0x6c90a |
0x0006c8fc movs r3, 0 | r3 = 0;
0x0006c8fe mov r1, r2 | r1 = r2;
0x0006c900 mov r0, r8 | r0 = r8;
0x0006c902 mov r2, r3 | r2 = r3;
0x0006c904 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0006c908 mov r2, r0 | r2 = r0;
| }
0x0006c90a mov r1, r7 | r1 = r7;
0x0006c90c ldr r0, [r4] | r0 = *(r4);
0x0006c90e bl 0x301b0 | fcn_000301b0 (r0, r1, r2);
0x0006c912 ldr r3, [r5, -0x30] | r3 = *((r5 - 0x30));
0x0006c916 mov r7, r0 | r7 = r0;
0x0006c918 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
| }
0x0006c91a subs r6, 1 | r6--;
0x0006c91c adds r5, 0x30 | r5 += 0x30;
0x0006c91e adds r1, r6, 1 | r1 = r6 + 1;
0x0006c920 bne 0x6c8ec |
| } while (r1 != r6);
| if (r2 != 0) {
0x0006c922 cbz r2, 0x6c932 |
0x0006c924 movs r3, 0 | r3 = 0;
0x0006c926 mov r1, r2 | r1 = r2;
0x0006c928 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0006c92a mov r2, r3 | r2 = r3;
0x0006c92c bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0006c930 mov r2, r0 | r2 = r0;
| }
0x0006c932 movs r1, 0x31 | r1 = 0x31;
0x0006c934 ldr r0, [sp, 0x50] | r0 = var_50h;
0x0006c936 movs r3, 0 | r3 = 0;
0x0006c938 bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0006c93c mov r1, r0 | r1 = r0;
0x0006c93e cmp r0, 0 |
| if (r0 != 0) {
0x0006c940 bne.w 0x6c80c | goto label_50;
| }
0x0006c944 cmp r7, 0 |
| if (r7 == 0) {
0x0006c946 beq.w 0x6c222 | goto label_29;
| }
0x0006c94a ldr r0, [sp, 0x34] | r0 = var_34h;
0x0006c94c mov r1, r7 | r1 = r7;
0x0006c94e bl 0x1a608 | fcn_0001a608 (r0, r1);
0x0006c952 b 0x6c222 | goto label_29;
| label_156:
0x0006c954 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006c956 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006c95a cmp r3, 0 |
| if (r3 != 0) {
0x0006c95c bne.w 0x6c222 | goto label_29;
| }
| label_157:
0x0006c960 vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x0006c964 mov.w r3, 0x200 | r3 = 0x200;
0x0006c968 mov.w r2, -1 | r2 = -1;
0x0006c96c vstr d16, [r8, 0x1a0] | __asm ("vstr d16, aav.0x000000ff");
0x0006c970 strh r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0006c972 movs r3, 1 | r3 = 1;
0x0006c974 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0006c976 strb.w r3, [fp, 9] | var_9h = r3;
0x0006c97a ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0006c97e cmp r3, 2 |
| if (r3 == 2) {
0x0006c980 beq.w 0x6cb84 | goto label_193;
| }
0x0006c984 str r2, [sp, 0x54] | var_54h = r2;
0x0006c986 str r2, [sp, 0x30] | var_30h = r2;
0x0006c988 b 0x6c72c | goto label_51;
| label_161:
0x0006c98a mov ip, r3 |
0x0006c98c mov r1, r3 | r1 = r3;
0x0006c98e b.w 0x6bf9c | goto label_30;
| label_127:
0x0006c992 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006c994 ldr r3, [r3] | r3 = *(r3);
0x0006c996 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006c99a cmp r3, 0 |
| if (r3 == 0) {
0x0006c99c beq.w 0x6cb06 | goto label_194;
| }
0x0006c9a0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0006c9a2 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006c9a6 cmp r3, 0 |
| if (r3 == 0) {
0x0006c9a8 beq.w 0x6cad2 | goto label_61;
| }
0x0006c9ac ldr r7, [pc, 0x1c0] |
0x0006c9ae add r7, pc | r7 = 0xd9522;
0x0006c9b0 b.w 0x6b8da | goto label_52;
| label_120:
0x0006c9b4 add.w r8, r8, 2 | r8 += 2;
0x0006c9b8 b.w 0x6b752 | goto label_53;
| label_130:
0x0006c9bc movw r2, 0x103 | r2 = 0x103;
0x0006c9c0 mov r0, fp | r0 = fp;
0x0006c9c2 bl 0x22290 | fcn_00022290 (r0, r1, r2, r3);
0x0006c9c6 mov r1, fp | r1 = fp;
0x0006c9c8 mov r5, r0 | r5 = r0;
0x0006c9ca mov r2, r0 | r2 = r0;
0x0006c9cc ldr r0, [sp, 0x20] | r0 = x;
0x0006c9ce bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006c9d2 b.w 0x6b942 | goto label_54;
| label_117:
0x0006c9d6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0006c9d8 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0006c9da lsls r3, r3, 8 | r3 <<= 8;
| if (r3 < r3) {
0x0006c9dc bmi.w 0x6bcc6 | goto label_28;
| }
0x0006c9e0 ldrsh.w r8, [r5, 0x20] | r8 = *((r5 + 0x20));
0x0006c9e4 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x0006c9e6 mov r1, r8 | r1 = r8;
0x0006c9e8 ldr.w r0, [r4, 0xe4] | r0 = *((r4 + 0xe4));
0x0006c9ec bl 0x23784 | fcn_00023784 (r0, r1);
0x0006c9f0 str r0, [sp, 0x30] | var_30h = r0;
0x0006c9f2 cmp r0, 0 |
| if (r0 == 0) {
0x0006c9f4 beq.w 0x6cd94 | goto label_195;
| }
0x0006c9f8 blx 0x8944 | r0 = fcn_00008944 ();
0x0006c9fc cmp r0, 3 |
| if (r0 == 3) {
0x0006c9fe beq.w 0x6cdee | goto label_196;
| }
0x0006ca02 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006ca04 cmp.w r8, 0x1f |
0x0006ca08 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0006ca0a ldr.w r2, [r1, 0xd8] | r2 = *((r1 + 0xd8));
| if (r8 <= 0x1f) {
0x0006ca0e ble.w 0x6cd82 | goto label_197;
| }
0x0006ca12 orr r2, r2, 0x80000000 | r2 |= 0x80000000;
0x0006ca16 str.w r2, [r1, 0xd8] | __asm ("str.w r2, [r1, 0xd8]");
| label_58:
0x0006ca1a movs r4, 0 | r4 = 0;
0x0006ca1c mov sb, r4 | sb = r4;
0x0006ca1e mov r5, r4 | r5 = r4;
0x0006ca20 b.w 0x6b862 | goto label_55;
| label_149:
0x0006ca24 ldr.w r7, [fp, 0x18] | r7 = var_18h;
0x0006ca28 add.w r3, r0, r0, lsl 1 | r3 = r0 + (r0 << 1);
0x0006ca2c ldr r2, [sp, 0x18] | r2 = var_sp_18h;
0x0006ca2e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006ca32 add.w r3, r7, r3, lsl 4 | r3 = r7 + (r3 << 4);
0x0006ca36 add r7, r2 | r7 += r2;
0x0006ca38 ldr r2, [r6, 0x1c] | r2 = *((r6 + 0x1c));
0x0006ca3a vstr d16, [r3, 0x20] | __asm ("vstr d16, [r3, 0x20]");
0x0006ca3e ldrd r0, r1, [r7, 0x28] | __asm ("ldrd r0, r1, [r7, 0x28]");
0x0006ca42 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0006ca44 ldrsh.w r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x0006ca48 str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
0x0006ca4a ldr r2, [sp, 0x24] | r2 = var_24h;
0x0006ca4c str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x0006ca4e ldrsh.w r2, [r7, 8] | r2 = *((r7 + 8));
0x0006ca52 strh r2, [r3, 8] | *((r3 + 8)) = r2;
0x0006ca54 movs r2, 4 | r2 = 4;
0x0006ca56 strh r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x0006ca58 ldrh r2, [r7, 0xa] | r2 = *((r7 + 0xa));
0x0006ca5a orr r2, r2, 8 | r2 |= 8;
0x0006ca5e strh r2, [r7, 0xa] | *((r7 + 0xa)) = r2;
0x0006ca60 ldrb r2, [r7, 0xe] | r2 = *((r7 + 0xe));
0x0006ca62 adds r2, 1 | r2++;
0x0006ca64 strb r2, [r7, 0xe] | *((r7 + 0xe)) = r2;
0x0006ca66 strd r0, r1, [r3, 0x28] | __asm ("strd r0, r1, [r3, 0x28]");
0x0006ca6a b.w 0x6bcc6 | goto label_28;
| label_114:
0x0006ca6e ldr r2, [sp, 0x14] | r2 = var_14h_2;
0x0006ca70 mov sl, r5 | sl = r5;
0x0006ca72 ldr.w sb, [r2, 0x14] | sb = *((r2 + 0x14));
0x0006ca76 b.w 0x6b6ea | goto label_56;
| label_119:
0x0006ca7a cmp.w r8, 0 |
| if (r8 != 0) {
0x0006ca7e bne.w 0x6b78a | goto label_57;
| }
| label_74:
0x0006ca82 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0006ca84 cmp r3, 0 |
| if (r3 != 0) {
0x0006ca86 bne 0x6ca1a | goto label_58;
| }
0x0006ca88 b.w 0x6bcc6 | goto label_28;
| label_129:
0x0006ca8c ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0006ca8e mov r1, r8 | r1 = r8;
0x0006ca90 mov r2, r7 | r2 = r7;
0x0006ca92 mov r0, r5 | r0 = r5;
0x0006ca94 bl 0x21d84 | fcn_00021d84 (r0, r1, r2);
0x0006ca98 movs r1, 0x39 | r1 = 0x39;
0x0006ca9a mov r2, r0 | r2 = r0;
0x0006ca9c mov r3, sb | r3 = sb;
0x0006ca9e mov r0, r5 | r0 = r5;
0x0006caa0 bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0006caa4 mov r1, r0 | r1 = r0;
0x0006caa6 cmp r0, 0 |
| if (r0 == 0) {
0x0006caa8 beq.w 0x6cd3a | goto label_198;
| }
0x0006caac ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x0006caae ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006cab0 ands r3, r3, 3 | r3 &= 3;
| if (r3 != r3) {
0x0006cab4 bne.w 0x6b91a | goto label_59;
| }
| label_70:
0x0006cab8 movw r2, 0x103 | r2 = 0x103;
0x0006cabc mov r0, fp | r0 = fp;
0x0006cabe bl 0x22290 | fcn_00022290 (r0, r1, r2, r3);
0x0006cac2 mov r1, fp | r1 = fp;
0x0006cac4 mov r5, r0 | r5 = r0;
0x0006cac6 mov r2, r0 | r2 = r0;
0x0006cac8 ldr r0, [sp, 0x20] | r0 = x;
0x0006caca bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
0x0006cace b.w 0x6b950 | goto label_60;
| label_61:
0x0006cad2 ldr r5, [r6, 8] | r5 = *((r6 + 8));
0x0006cad4 cmp r5, 0 |
| if (r5 == 0) {
0x0006cad6 beq.w 0x6cd3e | goto label_199;
| }
0x0006cada mov r0, r5 | r0 = r5;
0x0006cadc blx 0x85b4 | r0 = fcn_000085b4 ();
0x0006cae0 bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x0006cae4 subs r3, 1 | r3--;
0x0006cae6 ldrb r2, [r5, r3] | r2 = *((r5 + r3));
0x0006cae8 add r3, r5 | r3 += r5;
| label_71:
0x0006caea ldr r1, [pc, 0x88] |
0x0006caec cmp r2, 0x40 |
0x0006caee ldr r7, [pc, 0x88] |
0x0006caf0 it eq |
| if (r2 != 0x40) {
0x0006caf2 moveq r4, 0 | r4 = 0;
| }
0x0006caf4 add r1, pc | r1 = 0xd966e;
0x0006caf6 add r2, r1 | r2 += r1;
0x0006caf8 add r7, pc | r7 = 0xd9676;
0x0006cafa ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x0006cafe adds r2, 1 | r2++;
0x0006cb00 strb r2, [r3] | *(r3) = r2;
0x0006cb02 b.w 0x6b8da | goto label_52;
| label_194:
0x0006cb06 ldrh r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x0006cb08 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0006cb0c orr r3, r3, 0x400 | r3 |= 0x400;
0x0006cb10 strh r3, [r7, 0xa] | *((r7 + 0xa)) = r3;
0x0006cb12 ldrb r3, [r2] | r3 = *(r2);
| if (r3 == 0) {
0x0006cb14 cbz r3, 0x6cb42 | goto label_200;
| }
0x0006cb16 ldr r5, [pc, 0x64] |
0x0006cb18 ldr r1, [sp, 0x48] | r1 = var_48h;
0x0006cb1a add r5, pc | r5 = 0xd969c;
| do {
0x0006cb1c adds r7, r5, r3 | r7 = r5 + r3;
0x0006cb1e ldrb.w r0, [r7, 0x40] | r0 = *((r7 + 0x40));
0x0006cb22 ldrb.w r7, [r7, 0x140] | r7 = *((r7 + 0x140));
0x0006cb26 and r0, r0, 0x20 | r0 &= 0x20;
0x0006cb2a bic.w r3, r3, r0 | r3 = BIT_MASK (r3, r0);
0x0006cb2e strb r3, [r2] | *(r2) = r3;
0x0006cb30 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0006cb32 strb r7, [r3, r1] | *((r3 + r1)) = r7;
0x0006cb34 adds r1, 1 | r1++;
0x0006cb36 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x0006cb3a ldrb r3, [r2, r1] | r3 = *((r2 + r1));
0x0006cb3c add r2, r1 | r2 += r1;
0x0006cb3e cmp r3, 0 |
0x0006cb40 bne 0x6cb1c |
| } while (r3 != 0);
| label_200:
0x0006cb42 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0006cb44 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006cb48 cmp r3, 0 |
| if (r3 == 0) {
0x0006cb4a beq 0x6cad2 | goto label_61;
| }
0x0006cb4c ldr r7, [pc, 0x30] |
0x0006cb4e add r7, pc | r7 = 0xd96d2;
0x0006cb50 b.w 0x6b8da | goto label_52;
| label_193:
0x0006cb84 str r2, [sp, 0x54] | var_54h = r2;
0x0006cb86 str r2, [sp, 0x30] | var_30h = r2;
| label_185:
0x0006cb88 ldr.w ip, [r8, 0x18] | ip = *((r8 + 0x18));
0x0006cb8c ldrh.w r3, [ip, 0xc] | r3 = *((ip + 0xc));
0x0006cb90 cmp.w r3, 0x400 |
| if (r3 != 0x400) {
0x0006cb94 bne.w 0x6ceb6 | goto label_201;
| }
0x0006cb98 movs r3, 1 | r3 = 1;
0x0006cb9a movs r4, 0 | r4 = 0;
| label_63:
0x0006cb9c ldr.w r2, [ip, 0x18] | r2 = *((ip + 0x18));
0x0006cba0 ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x0006cba2 cmp r4, r1 |
| if (r4 >= r1) {
0x0006cba4 bge.w 0x6c71e | goto label_62;
| }
0x0006cba8 ldr r6, [r2, 0x18] | r6 = *((r2 + 0x18));
0x0006cbaa add.w r2, r4, r4, lsl 1 | r2 = r4 + (r4 << 1);
0x0006cbae adds.w r6, r6, r2, lsl 4 | r6 += (r2 << 4);
| if (r6 == r6) {
0x0006cbb2 beq.w 0x6c71e | goto label_62;
| }
0x0006cbb6 mov r4, r3 | r4 = r3;
| label_82:
0x0006cbb8 ldrh.w r1, [ip, 0x3c] | r1 = *((ip + 0x3c));
0x0006cbbc cmp.w r1, 0x400 |
0x0006cbc0 itt eq |
| if (r1 != 0x400) {
0x0006cbc2 moveq sl, 1 | sl = 1;
| }
| if (r1 == 0x400) {
0x0006cbc6 movs r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x0006cbc8 beq.w 0x6ccce | goto label_202;
| }
0x0006cbcc ldrh.w r2, [ip, 0x3a] | r2 = *((ip + 0x3a));
0x0006cbd0 ldrh r3, [r6, 0xa] | r3 = *((r6 + 0xa));
0x0006cbd2 orrs r3, r2 | r3 |= r2;
0x0006cbd4 ldrh r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0006cbd6 lsls r5, r3, 0x18 | r5 = r3 << 0x18;
| if (r5 < r3) {
0x0006cbd8 bmi 0x6ccbc | goto label_64;
| }
0x0006cbda add.w r5, ip, 0x30 | r5 = ip + 0x30;
0x0006cbde orr.w r7, r2, r1 | r7 = r2 | r1;
0x0006cbe2 mov.w sb, 2 | sb = 2;
0x0006cbe6 mov.w sl, 1 | sl = 1;
| label_66:
0x0006cbea tst.w r2, 0x3e |
| if ((r2 & 0x3e) == 0) {
0x0006cbee beq 0x6ccae | goto label_65;
| }
0x0006cbf0 tst.w r1, 0x3e |
| if ((r1 & 0x3e) == 0) {
0x0006cbf4 beq 0x6ccae | goto label_65;
| }
0x0006cbf6 movw r3, 0xffe5 | r3 = 0xffe5;
0x0006cbfa ands r3, r7 | r3 &= r7;
| if (r3 != 0) {
0x0006cbfc cbz r3, 0x6cc08 |
0x0006cbfe movw r3, 0xffd9 | r3 = 0xffd9;
0x0006cc02 ands r3, r7 | r3 &= r7;
0x0006cc04 cmp r3, 0 |
| if (r3 != 0) {
0x0006cc06 bne 0x6ccae | goto label_65;
| }
| }
0x0006cc08 ldr r3, [r6] | r3 = *(r6);
0x0006cc0a ldr.w lr, [r5] |
0x0006cc0e ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x0006cc10 ldr.w r2, [lr, 0xc] | r2 = *((lr + 0xc));
0x0006cc14 cmp r2, 0 |
0x0006cc16 it ne |
| if (r2 != 0) {
0x0006cc18 cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
0x0006cc1a ite eq |
| if (r2 != 0) {
0x0006cc1c moveq r0, 1 | r0 = 1;
| }
| if (r2 == 0) {
0x0006cc1e movne r0, 0 | r0 = 0;
| }
| if (r2 == 0) {
0x0006cc20 beq 0x6ccfc | goto label_203;
| }
0x0006cc22 mov.w r3, -1 | r3 = -1;
0x0006cc26 bl 0x38abc | r0 = fcn_00038abc (r0, r1, r2, r3);
0x0006cc2a cmp r0, 0 |
| if (r0 != 0) {
0x0006cc2c bne 0x6ccaa | goto label_68;
| }
0x0006cc2e ldr.w lr, [r5] |
0x0006cc32 ldr r3, [r6] | r3 = *(r6);
| label_67:
0x0006cc34 ldr.w r2, [lr, 0x10] | r2 = *((lr + 0x10));
0x0006cc38 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x0006cc3a cmp r2, 0 |
0x0006cc3c it ne |
| if (r2 != 0) {
0x0006cc3e cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
0x0006cc40 ite eq |
| if (r2 != 0) {
0x0006cc42 moveq r0, 1 | r0 = 1;
| }
| if (r2 == 0) {
0x0006cc44 movne r0, 0 | r0 = 0;
| }
| if (r2 == 0) {
0x0006cc46 beq 0x6cd02 | goto label_204;
| }
0x0006cc48 mov.w r3, -1 | r3 = -1;
0x0006cc4c bl 0x38abc | r0 = fcn_00038abc (r0, r1, r2, r3);
| if (r0 != 0) {
0x0006cc50 cbnz r0, 0x6ccaa | goto label_68;
| }
0x0006cc52 subs r2, r7, 1 | r2 = r7 - 1;
0x0006cc54 ldr r3, [r6] | r3 = *(r6);
0x0006cc56 tst r2, r7 |
| if ((r2 & r7) != 0) {
0x0006cc58 beq 0x6cc64 |
0x0006cc5a tst.w r7, 0x18 |
0x0006cc5e ite ne |
| if ((r7 & 0x18) == 0) {
0x0006cc60 movne r7, 8 | r7 = 8;
| }
| if ((r7 & 0x18) == 0) {
0x0006cc62 moveq r7, 0x20 | r7 = 0x20;
| goto label_205;
| }
| }
| label_205:
0x0006cc64 ldr.w r2, [fp] | r2 = *(fp);
0x0006cc68 ldr r2, [r2] | r2 = *(r2);
0x0006cc6a ldr r0, [r2] | r0 = *(r2);
| if (r3 == 0) {
0x0006cc6c cbz r3, 0x6ccaa | goto label_68;
| }
| label_69:
0x0006cc6e mov r1, r3 | r1 = r3;
0x0006cc70 movs r3, 0 | r3 = 0;
0x0006cc72 mov r2, r3 | r2 = r3;
0x0006cc74 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0006cc78 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x0006cc7a cbz r0, 0x6ccaa | goto label_68;
| }
0x0006cc7c cmp r7, 2 |
0x0006cc7e mov.w r2, 0x35 | r2 = 0x35;
| if (r7 == 2) {
0x0006cc82 beq 0x6cc96 | goto label_206;
| }
0x0006cc84 movs r5, 2 | r5 = 2;
| do {
0x0006cc86 sub.w r3, r2, 0x34 | r3 = r2 - 0x34;
0x0006cc8a adds r2, 1 | r2++;
0x0006cc8c lsl.w r3, r5, r3 | r3 = r5 << r3;
0x0006cc90 cmp r7, r3 |
0x0006cc92 bne 0x6cc86 |
| } while (r7 != r3);
0x0006cc94 uxtb r2, r2 | r2 = (int8_t) r2;
| label_206:
0x0006cc96 strb r2, [r1] | *(r1) = r2;
0x0006cc98 mov r0, fp | r0 = fp;
0x0006cc9a movs r2, 3 | r2 = 3;
0x0006cc9c bl 0x22290 | fcn_00022290 (r0, r1, r2, r3);
0x0006cca0 mov r1, fp | r1 = fp;
0x0006cca2 mov r2, r0 | r2 = r0;
0x0006cca4 ldr r0, [sp, 0x20] | r0 = x;
0x0006cca6 bl 0x6b36c | fcn_0006b36c (r0, r1, r2);
| label_68:
0x0006ccaa ldr.w ip, [r8, 0x18] | ip = *((r8 + 0x18));
| label_65:
0x0006ccae ldrh.w r2, [ip, 0x3c] | r2 = *((ip + 0x3c));
0x0006ccb2 mov r3, sl | r3 = sl;
0x0006ccb4 mov sl, sb | sl = sb;
0x0006ccb6 cmp.w r2, 0x400 |
| if (r2 == 0x400) {
0x0006ccba beq 0x6ccce | goto label_202;
| }
| label_64:
0x0006ccbc ldrh.w r3, [ip, 0xc] | r3 = *((ip + 0xc));
0x0006ccc0 cmp.w r3, 0x400 |
0x0006ccc4 it eq |
| if (r3 == 0x400) {
0x0006ccc6 addeq r3, r4, 1 | r3 = r4 + 1;
| goto label_207;
| }
| if (r3 == 0x400) {
| label_207:
0x0006ccc8 beq.w 0x6cb9c | goto label_63;
| }
0x0006cccc b 0x6c71e | goto label_62;
| label_202:
0x0006ccce ldr.w r2, [ip, 0x48] | r2 = *((ip + 0x48));
0x0006ccd2 ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x0006ccd4 cmp r1, r3 |
| if (r1 <= r3) {
0x0006ccd6 ble 0x6ccbc | goto label_64;
| }
0x0006ccd8 ldr r5, [r2, 0x18] | r5 = *((r2 + 0x18));
0x0006ccda add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0006ccde adds.w r5, r5, r3, lsl 4 | r5 += (r3 << 4);
| if (r5 == r5) {
0x0006cce2 beq 0x6ccbc | goto label_64;
| }
0x0006cce4 ldrh r2, [r5, 0xa] | r2 = *((r5 + 0xa));
0x0006cce6 add.w sb, sl, 1 | sb = sl + 1;
0x0006ccea ldrh r3, [r6, 0xa] | r3 = *((r6 + 0xa));
0x0006ccec ldrh r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x0006ccee orrs r3, r2 | r3 |= r2;
0x0006ccf0 ldrh r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0006ccf2 lsls r7, r3, 0x18 | r7 = r3 << 0x18;
| if (r7 < r3) {
0x0006ccf4 bmi 0x6ccae | goto label_65;
| }
0x0006ccf6 orr.w r7, r2, r1 | r7 = r2 | r1;
0x0006ccfa b 0x6cbea | goto label_66;
| label_203:
0x0006ccfc cmp r1, r2 |
| if (r1 != r2) {
0x0006ccfe bne 0x6ccae | goto label_65;
| }
0x0006cd00 b 0x6cc34 | goto label_67;
| label_204:
0x0006cd02 cmp r1, r2 |
| if (r1 != r2) {
0x0006cd04 bne 0x6ccaa | goto label_68;
| }
0x0006cd06 ldr.w r2, [fp] | r2 = *(fp);
0x0006cd0a ldr r2, [r2] | r2 = *(r2);
0x0006cd0c ldr r0, [r2] | r0 = *(r2);
0x0006cd0e subs r2, r7, 1 | r2 = r7 - 1;
0x0006cd10 tst r2, r7 |
| if ((r2 & r7) == 0) {
0x0006cd12 beq 0x6cc6e | goto label_69;
| }
0x0006cd14 tst.w r7, 0x18 |
0x0006cd18 ite ne |
| if ((r7 & 0x18) == 0) {
0x0006cd1a movne r7, 8 | r7 = 8;
| }
| if ((r7 & 0x18) != 0) {
0x0006cd1c moveq r7, 0x20 | r7 = 0x20;
| }
0x0006cd1e b 0x6cc6e | goto label_69;
| label_183:
0x0006cd20 mov sb, r6 | sb = r6;
0x0006cd22 mov.w sl, 0x44 | sl = 0x44;
0x0006cd26 mov r4, sb | r4 = sb;
0x0006cd28 str.w sl, [sp, 0x20] | __asm ("str.w sl, [x]");
0x0006cd2c ldr.w sb, [sp, 0x28] | sb = var_28h;
0x0006cd30 mov r6, r3 | r6 = r3;
0x0006cd32 ldr.w sl, [sp, 0x14] | sl = var_14h_2;
0x0006cd36 b.w 0x6baa0 | goto label_40;
| label_198:
0x0006cd3a mov r1, r8 | r1 = r8;
0x0006cd3c b 0x6cab8 | goto label_70;
| label_199:
0x0006cd3e mvn r3, 0xff | r3 = ~0xff;
0x0006cd42 ldrb.w r2, [r3, 0xff] | r2 = *((r3 + 0xff));
0x0006cd46 mov.w r3, -1 | r3 = -1;
0x0006cd4a b 0x6caea | goto label_71;
| label_128:
0x0006cd4c mvn r3, 0xff | r3 = ~0xff;
0x0006cd50 ldrb.w r2, [r3, 0xff] | r2 = *((r3 + 0xff));
0x0006cd54 mov.w r3, -1 | r3 = -1;
0x0006cd58 b.w 0x6b8cc | goto label_72;
| label_121:
0x0006cd5c cmp sl, sb |
| if (sl != sb) {
0x0006cd5e bne.w 0x6b7a0 | goto label_73;
| }
0x0006cd62 b 0x6ca82 | goto label_74;
| label_123:
0x0006cd64 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0006cd66 mov r1, sb | r1 = sb;
0x0006cd68 bl 0x1a57c | fcn_0001a57c (r0, r1);
0x0006cd6c ldr r3, [sp, 0x30] | r3 = var_30h;
0x0006cd6e cmp r3, 0 |
| if (r3 == 0) {
0x0006cd70 beq.w 0x6bcc6 | goto label_28;
| }
0x0006cd74 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0006cd76 bl 0x1c81c | fcn_0001c81c (r0);
0x0006cd7a b.w 0x6bcc6 | goto label_28;
| label_104:
0x0006cd7e blx 0x883c | fcn_0000883c ();
| label_197:
0x0006cd82 add.w r8, r8, -1 | r8 += -1;
0x0006cd86 movs r3, 1 | r3 = 1;
0x0006cd88 lsl.w r3, r3, r8 | r3 <<= r8;
0x0006cd8c orrs r3, r2 | r3 |= r2;
0x0006cd8e str.w r3, [r1, 0xd8] | __asm ("str.w r3, [r1, 0xd8]");
0x0006cd92 b 0x6ca1a | goto label_58;
| label_195:
0x0006cd94 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0006cd96 cmp.w r8, 0x1f |
0x0006cd9a ldr.w r2, [r1, 0xd8] | r2 = *((r1 + 0xd8));
| if (r8 > 0x1f) {
0x0006cd9e ble 0x6cdac |
0x0006cda0 orr r2, r2, 0x80000000 | r2 |= 0x80000000;
0x0006cda4 str.w r2, [r1, 0xd8] | __asm ("str.w r2, [r1, 0xd8]");
0x0006cda8 b.w 0x6bcc6 | goto label_28;
| }
0x0006cdac add.w r8, r8, -1 | r8 += -1;
0x0006cdb0 movs r3, 1 | r3 = 1;
0x0006cdb2 lsl.w r3, r3, r8 | r3 <<= r8;
0x0006cdb6 orrs r3, r2 | r3 |= r2;
0x0006cdb8 str.w r3, [r1, 0xd8] | __asm ("str.w r3, [r1, 0xd8]");
0x0006cdbc b.w 0x6bcc6 | goto label_28;
| label_122:
0x0006cdc0 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0006cdc2 bl 0xd620 | r0 = fcn_0000d620 (r0);
0x0006cdc6 cmp r0, 0x42 |
| if (r0 != 0x42) {
0x0006cdc8 bne.w 0x6b810 | goto label_75;
| }
0x0006cdcc ldr r2, [sp, 0x40] | r2 = var_40h;
0x0006cdce ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0006cdd0 tst.w r3, 0x3000000 |
| if ((r3 & 0x3000000) != 0) {
0x0006cdd4 bne.w 0x6b854 | goto label_76;
| }
0x0006cdd8 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0006cdda cmp r3, 0 |
| if (r3 == 0) {
0x0006cddc beq.w 0x6b854 | goto label_76;
| }
0x0006cde0 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0006cde4 cmp r3, 1 |
| if (r3 != 1) {
0x0006cde6 bne.w 0x6b854 | goto label_76;
| }
0x0006cdea b.w 0x6b810 | goto label_75;
| label_196:
0x0006cdee ldr r0, [sp, 0x30] | r0 = var_30h;
0x0006cdf0 blx 0x82e8 | fcn_000082e8 ();
0x0006cdf4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006cdf6 cmp.w r8, 0x1f |
0x0006cdfa ldr r2, [r3, 8] | r2 = *((r3 + 8));
| if (r8 <= 0x1f) {
0x0006cdfc ble 0x6cec8 | goto label_208;
| }
0x0006cdfe ldr.w r3, [r2, 0xd8] | r3 = *((r2 + 0xd8));
0x0006ce02 orr r3, r3, 0x80000000 | r3 |= 0x80000000;
| label_84:
0x0006ce06 str.w r3, [r2, 0xd8] | __asm ("str.w r3, [r2, 0xd8]");
0x0006ce0a cmp r0, 0 |
| if (r0 == 0) {
0x0006ce0c beq.w 0x6ca1a | goto label_58;
| }
0x0006ce10 ldrb.w sb, [r0] | sb = *(r0);
0x0006ce14 cmp.w sb, 0 |
| if (sb != 0) {
0x0006ce18 bne.w 0x6b73e | goto label_77;
| }
0x0006ce1c b 0x6ca1a | goto label_58;
| label_181:
0x0006ce1e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006ce20 ldr r2, [r3] | r2 = *(r3);
0x0006ce22 ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x0006ce24 b.w 0x6c54e | goto label_78;
| label_118:
0x0006ce28 mov r2, r8 | r2 = r8;
0x0006ce2a b.w 0x6b786 | goto label_79;
| label_126:
0x0006ce2e mov r6, sb | r6 = sb;
0x0006ce30 b.w 0x6b8a4 | goto label_80;
| label_124:
0x0006ce34 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006ce36 ldrsh.w r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x0006ce3a ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x0006ce3c cmp r2, 0x1f |
0x0006ce3e itt le |
| if (r2 > 0x1f) {
0x0006ce40 addle r2, r2, -1 | r2 += -1;
| }
| if (r2 <= 0x1f) {
0x0006ce44 movs r1, 1 | r1 = 1;
| }
0x0006ce46 ldr.w r3, [r6, 0xd8] | r3 = *((r6 + 0xd8));
0x0006ce4a itet le |
| if (r1 > 1) {
0x0006ce4c lslle r2, r1, r2 | r2 = r1 << r2;
| }
| if (r1 > 1) {
0x0006ce50 orrle r3, r3, 0x80000000 | r3 |= 0x80000000;
| }
| if (r1 <= 1) {
0x0006ce54 orrs r3, r2 | r3 |= r2;
| }
0x0006ce56 str.w r3, [r6, 0xd8] | __asm ("str.w r3, [r6, 0xd8]");
0x0006ce5a cmp r4, 0 |
| if (r4 == 0) {
0x0006ce5c beq.w 0x6b85c | goto label_81;
| }
0x0006ce60 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0006ce62 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x0006ce64 cmp r3, 0 |
| if (r3 == 0) {
0x0006ce66 beq.w 0x6b85c | goto label_81;
| }
0x0006ce6a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006ce6c ldrb r3, [r3, 0x13] | r3 = *((r3 + 0x13));
0x0006ce6e cmp r3, 0 |
| if (r3 == 0) {
0x0006ce70 beq 0x6cee4 | goto label_209;
| }
0x0006ce72 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006ce74 subs r3, 1 | r3--;
0x0006ce76 uxtb r3, r3 | r3 = (int8_t) r3;
0x0006ce78 strb r3, [r2, 0x13] | *((r2 + 0x13)) = r3;
0x0006ce7a adds r3, 0x26 | r3 += 0x26;
0x0006ce7c ldr.w r8, [r2, r3, lsl 2] | offset_1 = r3 << 2;
| r8 = *((r2 + offset_1));
| label_86:
0x0006ce80 mov r2, r8 | r2 = r8;
0x0006ce82 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006ce84 mov r1, r5 | r1 = r5;
0x0006ce86 bl 0x67e64 | fcn_00067e64 (r0, r1, r2, r3);
0x0006ce8a ldr r3, [r6] | r3 = *(r6);
0x0006ce8c ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0006ce8e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0006ce92 cbnz r3, 0x6cedc | goto label_210;
| }
0x0006ce94 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x0006ce96 subs r2, 1 | r2--;
0x0006ce98 movs r1, 0x14 | r1 = 0x14;
0x0006ce9a mla r3, r1, r2, r3 | __asm ("mla r3, r1, r2, r3");
| label_85:
0x0006ce9e movs r2, 0 | r2 = 0;
0x0006cea0 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x0006cea2 cmp.w r8, 0 |
| if (r8 == 0) {
0x0006cea6 beq.w 0x6b85c | goto label_81;
| }
0x0006ceaa ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0006ceac mov r1, r8 | r1 = r8;
0x0006ceae bl 0xfd18 | fcn_0000fd18 (r0, r1);
0x0006ceb2 b.w 0x6b85c | goto label_81;
| label_201:
0x0006ceb6 mov r6, ip | r6 = ip;
0x0006ceb8 movs r4, 1 | r4 = 1;
0x0006ceba b 0x6cbb8 | goto label_82;
| label_180:
0x0006cebc ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006cebe ldr r2, [r3] | r2 = *(r3);
0x0006cec0 ldr.w sl, [r2, 8] | sl = *((r2 + 8));
0x0006cec4 b.w 0x6c540 | goto label_83;
| label_208:
0x0006cec8 ldr.w r1, [r2, 0xd8] | r1 = *((r2 + 0xd8));
0x0006cecc add.w r3, r8, -1 | r3 = r8 + -1;
0x0006ced0 mov.w ip, 1 |
0x0006ced4 lsl.w r3, ip, r3 | r3 = ip << r3;
0x0006ced8 orrs r3, r1 | r3 |= r1;
0x0006ceda b 0x6ce06 | goto label_84;
| label_210:
0x0006cedc ldr r3, [pc, 0x20] |
0x0006cede add r3, pc | r3 = 0xd9de2;
0x0006cee0 adds r3, 4 | r3 += 4;
0x0006cee2 b 0x6ce9e | goto label_85;
| label_209:
0x0006cee4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006cee6 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0006cee8 add.w r8, r3, 1 | r8 = r3 + 1;
0x0006ceec str.w r8, [r2, 0x2c] | __asm ("str.w r8, [r2, 0x2c]");
0x0006cef0 b 0x6ce80 | goto label_86;
| label_116:
0x0006cef2 movs r3, 0 | r3 = 0;
0x0006cef4 ldrb r3, [r3] | r3 = *(r3);
0x0006cef6 udf 0xff | __asm ("udf 0xff");
| label_168:
0x0006cef8 movs r3, 0 | r3 = 0;
0x0006cefa ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0006cefc udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6cf04 */
| #include <stdint.h>
|
; (fcn) fcn.0006cf04 () | void fcn_0006cf04 (int16_t arg_68h, int16_t arg1, arithmetic arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006cf04 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006cf08 mov sb, r2 | sb = r2;
0x0006cf0a ldr r2, [pc, 0x168] |
0x0006cf0c mov ip, r3 |
0x0006cf0e sub sp, 0x44 |
0x0006cf10 mov r8, r0 | r8 = r0;
0x0006cf12 ldr r3, [pc, 0x164] | r3 = *(0x6d07a);
0x0006cf14 add r2, pc | r2 = 0xd9f8e;
0x0006cf16 ldrb.w lr, [sp, 0x68] |
0x0006cf1a ldr.w sl, [r0, 8] | sl = *((r0 + 8));
0x0006cf1e ldr r3, [r2, r3] |
0x0006cf20 and fp, lr, 1 |
0x0006cf24 ldr r7, [r1] | r7 = *(r1);
0x0006cf26 rsb.w fp, fp, 0x51 |
0x0006cf2a ldr r3, [r3] | r3 = *(0xd9f8e);
0x0006cf2c str r3, [sp, 0x3c] | var_3ch = r3;
0x0006cf2e mov.w r3, 0 | r3 = 0;
0x0006cf32 ldrb r3, [r0, 0x17] | r3 = *((r0 + 0x17));
0x0006cf34 uxtb.w fp, fp | fp = (int8_t) fp;
| if (r3 == 0) {
0x0006cf38 cbnz r3, 0x6cf3e |
0x0006cf3a and lr, lr, 0xfd | lr &= 0xfd;
| }
0x0006cf3e cmp r7, 0 |
| if (r7 <= 0) {
0x0006cf40 ble 0x6d000 | goto label_4;
| }
0x0006cf42 ldr r3, [pc, 0x138] |
0x0006cf44 add.w r4, r1, 0x18 | r4 = r1 + 0x18;
0x0006cf48 and r6, lr, 4 | r6 = lr & 4;
0x0006cf4c movs r5, 0 | r5 = 0;
0x0006cf4e strd lr, ip, [sp, 0x18] | __asm ("strd lr, ip, [var_18h]");
0x0006cf52 add r3, pc | r3 = 0xd9fd4;
0x0006cf54 str r3, [sp, 0x14] | var_14h = r3;
0x0006cf56 and r3, lr, 2 | r3 = lr & 2;
0x0006cf5a strd r3, r8, [sp, 8] | __asm ("strd r3, r8, [var_8h]");
0x0006cf5e b 0x6cf7c |
| while (r6 != 0) {
0x0006cf60 ldrh r2, [r4, -0x4] | r2 = *((r4 - 0x4));
| if (r2 == 0) {
0x0006cf64 cbz r2, 0x6cf84 | goto label_5;
| }
0x0006cf66 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006cf68 ands r3, r3, 8 | r3 &= 8;
0x0006cf6c it ne |
| if (r3 == r3) {
0x0006cf6e addne r7, r7, -1 | r7 += -1;
| }
| if (r3 == r3) {
0x0006cf72 beq 0x6d056 | goto label_6;
| }
| label_1:
0x0006cf74 cmp r7, r5 |
0x0006cf76 add.w r4, r4, 0x10 | r4 += 0x10;
| if (r7 <= r5) {
0x0006cf7a ble 0x6d000 | goto label_4;
| }
| label_0:
0x0006cf7c ldr r1, [r4, -0x10] | r1 = *((r4 - 0x10));
0x0006cf80 cmp r6, 0 |
0x0006cf82 bne 0x6cf60 |
| }
| label_5:
0x0006cf84 ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 != 0) {
0x0006cf86 cbz r3, 0x6cfb0 |
0x0006cf88 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006cf8a str r3, [sp, 0x24] | var_24h = r3;
0x0006cf8c ldr r3, [pc, 0xf0] |
0x0006cf8e add r3, pc | r3 = 0xda012;
0x0006cf90 str r3, [sp, 0x28] | var_28h = r3;
0x0006cf92 movs r3, 2 | r3 = 2;
0x0006cf94 strh.w r3, [sp, 0x34] | var_34h = r3;
0x0006cf98 movs r3, 0 | r3 = 0;
0x0006cf9a str r3, [sp, 0x38] | var_38h = r3;
0x0006cf9c cmp r1, 0 |
| if (r1 == 0) {
0x0006cf9e beq 0x6d01a | goto label_7;
| }
0x0006cfa0 add r0, sp, 0x20 | r0 += var_20h;
0x0006cfa2 str r1, [sp, 0x10] | var_10h = r1;
0x0006cfa4 bl 0x30f3c | fcn_00030f3c (r0, r1);
0x0006cfa8 ldrh.w r3, [sp, 0x34] | r3 = var_34h;
0x0006cfac ldr r1, [sp, 0x10] | r1 = var_10h;
| if (r3 != 0) {
0x0006cfae cbnz r3, 0x6d01a | goto label_7;
| }
| }
0x0006cfb0 add.w r8, sb, r5 | r8 = sb + r5;
0x0006cfb4 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0006cfb6 mov r2, r8 | r2 = r8;
0x0006cfb8 bl 0x67e64 | r0 = fcn_00067e64 (r0, r1, r2, r3);
0x0006cfbc cmp r8, r0 |
0x0006cfbe mov r2, r0 | r2 = r0;
| if (r8 != r0) {
0x0006cfc0 beq 0x6cff8 |
0x0006cfc2 cmp.w fp, 0x50 |
| if (fp == 0x50) {
0x0006cfc6 bne 0x6cfea |
0x0006cfc8 ldr.w r1, [sl] | r1 = *(sl);
0x0006cfcc ldrb.w r0, [r1, 0x57] | r0 = *((r1 + 0x57));
0x0006cfd0 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
| if (r0 != 0) {
0x0006cfd4 cbnz r0, 0x6d028 | goto label_8;
| }
0x0006cfd6 ldr.w r0, [sl, 0x68] | r0 = *((sl + 0x68));
0x0006cfda subs r1, 1 | r1--;
0x0006cfdc add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x0006cfe0 add.w r1, r0, r1, lsl 2 | r1 = r0 + (r1 << 2);
0x0006cfe4 ldrb r0, [r1] | r0 = *(r1);
0x0006cfe6 cmp r0, 0x50 |
| if (r0 == 0x50) {
0x0006cfe8 beq 0x6d034 | goto label_9;
| }
| }
| label_2:
0x0006cfea movs r1, 0 | r1 = 0;
0x0006cfec mov r3, r8 | r3 = r8;
0x0006cfee str r1, [sp] | *(sp) = r1;
0x0006cff0 mov r0, sl | r0 = sl;
0x0006cff2 mov r1, fp | r1 = fp;
0x0006cff4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
| label_3:
0x0006cff8 adds r5, 1 | r5++;
0x0006cffa adds r4, 0x10 | r4 += 0x10;
0x0006cffc cmp r7, r5 |
| if (r7 > r5) {
0x0006cffe bgt 0x6cf7c | goto label_0;
| }
| label_4:
0x0006d000 ldr r2, [pc, 0x80] |
0x0006d002 ldr r3, [pc, 0x74] | r3 = *(0x6d07a);
0x0006d004 add r2, pc | r2 = 0xda08c;
0x0006d006 ldr r3, [r2, r3] | r3 = *(0xda08c);
0x0006d008 ldr r2, [r3] | r2 = *(0xda08c);
0x0006d00a ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0006d00c eors r2, r3 | r2 ^= r3;
0x0006d00e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006d012 bne 0x6d06e | goto label_10;
| }
0x0006d014 add sp, 0x44 |
0x0006d016 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0006d01a add.w r2, sb, r5 | r2 = sb + r5;
0x0006d01e ldr r0, [sp, 0xc] | r0 = var_ch;
0x0006d020 adds r5, 1 | r5++;
0x0006d022 bl 0x69df8 | fcn_00069df8 (r0, r1, r2, r3, r4, r5, r6);
0x0006d026 b 0x6cf74 | goto label_1;
| label_8:
0x0006d028 ldr r1, [pc, 0x5c] |
0x0006d02a add r1, pc | r1 = 0xda0b6;
0x0006d02c ldrb r0, [r1, 4] | r0 = *((r1 + 4));
0x0006d02e adds r1, 4 | r1 += 4;
0x0006d030 cmp r0, 0x50 |
| if (r0 != 0x50) {
0x0006d032 bne 0x6cfea | goto label_2;
| }
| label_9:
0x0006d034 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x0006d036 ldr r0, [r1, 4] | r0 = *((r1 + 4));
0x0006d038 add r0, r3 | r0 += r3;
0x0006d03a adds r0, 1 | r0++;
0x0006d03c cmp r2, r0 |
| if (r2 != r0) {
0x0006d03e bne 0x6cfea | goto label_2;
| }
0x0006d040 ldr r0, [r1, 8] | r0 = *((r1 + 8));
0x0006d042 add r0, r3 | r0 += r3;
0x0006d044 adds r0, 1 | r0++;
0x0006d046 cmp r8, r0 |
| if (r8 != r0) {
0x0006d048 bne 0x6cfea | goto label_2;
| }
0x0006d04a ldrh r0, [r1, 2] | r0 = *((r1 + 2));
0x0006d04c cmp r0, 0 |
| if (r0 != 0) {
0x0006d04e bne 0x6cfea | goto label_2;
| }
0x0006d050 adds r3, 1 | r3++;
0x0006d052 str r3, [r1, 0xc] | *((r1 + 0xc)) = r3;
0x0006d054 b 0x6cff8 | goto label_3;
| label_6:
0x0006d056 str r3, [sp] | *(sp) = r3;
0x0006d058 mov r1, fp | r1 = fp;
0x0006d05a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006d05c mov r0, sl | r0 = sl;
0x0006d05e add r2, r3 | r2 += r3;
0x0006d060 add.w r3, sb, r5 | r3 = sb + r5;
0x0006d064 subs r2, 1 | r2--;
0x0006d066 adds r5, 1 | r5++;
0x0006d068 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d06c b 0x6cf74 | goto label_1;
| label_10:
0x0006d06e blx 0x883c | fcn_0000883c ();
0x0006d072 nop |
0x0006d074 pop {r2, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6d08c */
| #include <stdint.h>
|
; (fcn) fcn.0006d08c () | void fcn_0006d08c (int16_t arg_1h, int16_t arg_50h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| arithmetic x;
| int16_t var_20h;
| int32_t var_20h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006d08c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0006d090 sub sp, 0x2c |
0x0006d092 ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x0006d094 mov sl, r2 | sl = r2;
0x0006d096 ldr.w fp, [sp, 0x50] | fp = *(arg_50h);
0x0006d09a str r0, [sp, 0x14] | var_14h = r0;
0x0006d09c str r1, [sp, 0x10] | var_10h = r1;
0x0006d09e str r3, [sp, 0x18] | var_18h = r3;
0x0006d0a0 cmp r4, 0 |
| if (r4 == 0) {
0x0006d0a2 beq.w 0x6d4a0 | goto label_19;
| }
| label_12:
0x0006d0a6 ldr r5, [sp, 0x10] | r5 = var_10h;
0x0006d0a8 cmp r5, 0 |
| if (r5 == 0) {
0x0006d0aa beq.w 0x6d1c8 | goto label_20;
| }
0x0006d0ae ldr.w r3, [pc, 0x480] | r3 = *(0x0006d530);
0x0006d0b2 add r3, pc | r3 += pc;
0x0006d0b4 addw r3, r3, 0xba4 | __asm ("addw r3, r3, aav.0x000000ff");
0x0006d0b8 str r3, [sp, 0xc] | var_ch = r3;
| label_2:
0x0006d0ba ldrb.w r6, [r5, 0x60] | r6 = *((r5 + 0x60));
0x0006d0be movs r7, 0 | r7 = 0;
0x0006d0c0 ldr.w sb, [r5, 0x2c] | sb = *((r5 + 0x2c));
0x0006d0c4 cmp r6, 0 |
| if (r6 != 0) {
0x0006d0c6 bne 0x6d13a | goto label_21;
| }
0x0006d0c8 ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0006d0ca ldr r7, [r3, 0x14] | r7 = *((r3 + 0x14));
| if (r7 == 0) {
0x0006d0cc cbz r7, 0x6d13a | goto label_21;
| }
0x0006d0ce ldr r7, [r7] | r7 = *(r7);
0x0006d0d0 cmp r7, 0 |
| if (r7 <= 0) {
0x0006d0d2 ble 0x6d13a | goto label_21;
| }
0x0006d0d4 mov r8, r6 | r8 = r6;
0x0006d0d6 b 0x6d10c |
| while (r6 != 1) {
| label_0:
0x0006d0d8 ldrd r2, r1, [r4, 0x6c] | __asm ("ldrd r2, r1, [r4, 0x6c]");
0x0006d0dc add r3, r6 | r3 += r6;
0x0006d0de cmp r2, r1 |
0x0006d0e0 add.w r1, r2, 1 | r1 = r2 + 1;
0x0006d0e4 add.w r2, r2, r2, lsl 2 | r2 += (r2 << 2);
| if (r2 >= r1) {
0x0006d0e8 bge 0x6d1ce | goto label_22;
| }
0x0006d0ea ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x0006d0ec mov.w lr, 0x5e | lr = 0x5e;
0x0006d0f0 str r1, [r4, 0x6c] | *((r4 + 0x6c)) = r1;
0x0006d0f2 add.w r1, r0, r2, lsl 2 | r1 = r0 + (r2 << 2);
0x0006d0f6 strd r3, ip, [r1, 8] | __asm ("strd r3, ip, [r1, 8]");
0x0006d0fa str.w sl, [r1, 4] | __asm ("str.w sl, [r1, 4]");
0x0006d0fe str.w r8, [r1, 0x10] | __asm ("str.w r8, [r1, 0x10]");
0x0006d102 str.w lr, [r0, r2, lsl 2] | __asm ("str.w lr, [r0, r2, lsl 2]");
| label_3:
0x0006d106 adds r6, 1 | r6++;
0x0006d108 cmp r7, r6 |
| if (r7 == r6) {
0x0006d10a beq 0x6d13a | goto label_21;
| }
| label_1:
0x0006d10c cmp r6, 1 |
0x0006d10e ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x0006d110 add.w ip, r6, fp |
0x0006d114 bne 0x6d0d8 |
| }
0x0006d116 ldr.w r2, [sb, 0x20] | r2 = *((sb + 0x20));
0x0006d11a ldr r1, [sp, 0xc] | r1 = var_ch;
0x0006d11c cmp r2, r1 |
| if (r2 != r1) {
0x0006d11e bne 0x6d0d8 | goto label_0;
| }
0x0006d120 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006d122 add.w r1, fp, 1 | r1 += arg_1h;
0x0006d126 adds r3, 1 | r3++;
0x0006d128 mov r0, r4 | r0 = r4;
0x0006d12a adds r6, 1 | r6++;
0x0006d12c ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x0006d12e str r1, [sp] | *(sp) = r1;
0x0006d130 movs r1, 0x5e | r1 = 0x5e;
0x0006d132 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d134 ldc2 p2, c4, [sp, 0x2dc] | __asm ("ldc2 p2, c4, aav.0x000000ff");
| if (r1 != 0x5e) {
0x0006d138 bne 0x6d10c | goto label_1;
| }
| label_21:
0x0006d13a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006d13c ldr r3, [r3, 0x58] | r3 = *((r3 + 0x58));
0x0006d13e cmp r3, 0 |
| if (r3 != 0) {
0x0006d140 bne 0x6d1de | goto label_23;
| }
0x0006d142 ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x0006d146 lsls r1, r2, 0x13 | r1 = r2 << 0x13;
| if (r1 >= r2) {
0x0006d148 bpl 0x6d1de | goto label_23;
| }
0x0006d14a ldrb r2, [r5, 0x11] | r2 = *((r5 + 0x11));
0x0006d14c cmp r2, 0x5a |
| if (r2 == 0x5a) {
0x0006d14e beq 0x6d1de | goto label_23;
| }
0x0006d150 ldrd r6, r2, [r4, 0x6c] | __asm ("ldrd r6, r2, [r4, 0x6c]");
0x0006d154 cmp r6, r2 |
| if (r6 >= r2) {
0x0006d156 bge.w 0x6d510 | goto label_24;
| }
0x0006d15a ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x0006d15c add.w r2, r6, r6, lsl 2 | r2 = r6 + (r6 << 2);
0x0006d160 adds r1, r6, 1 | r1 = r6 + 1;
0x0006d162 str r1, [r4, 0x6c] | *((r4 + 0x6c)) = r1;
0x0006d164 movs r7, 0x32 | r7 = 0x32;
0x0006d166 add.w r1, r0, r2, lsl 2 | r1 = r0 + (r2 << 2);
0x0006d16a strd fp, r3, [r1, 4] | __asm ("strd fp, r3, [r1, 4]");
0x0006d16e strd r3, r3, [r1, 0xc] | __asm ("strd r3, r3, [r1, 0xc]");
0x0006d172 str.w r7, [r0, r2, lsl 2] | __asm ("str.w r7, [r0, r2, lsl 2]");
| label_17:
0x0006d176 ldr r7, [sp, 0x18] | r7 = var_18h;
0x0006d178 cmp r7, 0 |
| if (r7 == 0) {
0x0006d17a beq.w 0x6d422 | goto label_25;
| }
0x0006d17e movs r3, 1 | r3 = 1;
0x0006d180 ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x0006d182 movs r1, 0x16 | r1 = 0x16;
0x0006d184 str r3, [sp, 4] | var_4h = r3;
0x0006d186 mov r0, r4 | r0 = r4;
0x0006d188 movs r3, 0 | r3 = 0;
0x0006d18a str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0006d18e bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0006d192 movs r3, 0 | r3 = 0;
0x0006d194 ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x0006d196 movs r1, 0x82 | r1 = 0x82;
0x0006d198 str r3, [sp] | *(sp) = r3;
0x0006d19a mov r0, r4 | r0 = r4;
0x0006d19c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d1a0 ldr r1, [r4] | r1 = *(r4);
0x0006d1a2 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0006d1a4 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x0006d1a8 subs r3, r2, 2 | r3 = r2 - 2;
0x0006d1aa it mi |
| if (r3 >= r2) {
0x0006d1ac addmi r3, r2, -1 | r3 = r2 + -1;
| }
0x0006d1b0 cmp r1, 0 |
| if (r1 == 0) {
0x0006d1b2 beq.w 0x6d4dc | goto label_26;
| }
0x0006d1b6 ldr r3, [pc, 0x37c] |
0x0006d1b8 add r3, pc | r3 = 0xda6f2;
0x0006d1ba str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x0006d1bc adds r3, 4 | r3 += 4;
| label_10:
0x0006d1be ldr r5, [r5, 0x24] | r5 = *((r5 + 0x24));
0x0006d1c0 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0006d1c2 cmp r5, 0 |
| if (r5 != 0) {
0x0006d1c4 bne.w 0x6d0ba | goto label_2;
| }
| label_20:
0x0006d1c8 add sp, 0x2c |
0x0006d1ca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_22:
0x0006d1ce mov r2, sl | r2 = sl;
0x0006d1d0 movs r1, 0x5e | r1 = 0x5e;
0x0006d1d2 mov r0, r4 | r0 = r4;
0x0006d1d4 str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x0006d1d8 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0006d1dc b 0x6d106 | goto label_3;
| label_23:
0x0006d1de ldr r6, [r5, 0x40] | r6 = *((r5 + 0x40));
0x0006d1e0 cmp r6, 0 |
| if (r6 != 0) {
0x0006d1e2 bne 0x6d2dc | goto label_27;
| }
0x0006d1e4 ldr r3, [pc, 0x350] |
0x0006d1e6 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x0006d1ea add r3, pc | r3 = 0xda726;
0x0006d1ec cmp r2, r3 |
| if (r2 != r3) {
0x0006d1ee beq 0x6d2ce |
0x0006d1f0 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0006d1f2 cmp r3, 0 |
| if (r3 != 0) {
0x0006d1f4 beq 0x6d268 |
0x0006d1f6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006d1f8 ldrb r3, [r3, 0x13] | r3 = *((r3 + 0x13));
0x0006d1fa cmp r3, 0 |
| if (r3 == 0) {
0x0006d1fc beq.w 0x6d38c | goto label_28;
| }
0x0006d200 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0006d202 subs r3, 1 | r3--;
0x0006d204 uxtb r3, r3 | r3 = (int8_t) r3;
0x0006d206 strb r3, [r2, 0x13] | *((r2 + 0x13)) = r3;
0x0006d208 adds r3, 0x26 | r3 += 0x26;
0x0006d20a ldr.w r8, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r8 = *((r2 + offset_0));
| label_8:
0x0006d20e ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x0006d210 mov r2, sl | r2 = sl;
0x0006d212 movs r1, 0x5e | r1 = 0x5e;
0x0006d214 mov r0, r4 | r0 = r4;
0x0006d216 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0006d21a add r3, r7 | r3 += r7;
0x0006d21c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d220 ldrd r6, r3, [r4, 0x6c] | __asm ("ldrd r6, r3, [r4, 0x6c]");
0x0006d224 cmp r6, r3 |
| if (r6 >= r3) {
0x0006d226 bge.w 0x6d48c | goto label_29;
| }
0x0006d22a ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0006d22c add.w r3, r6, r6, lsl 2 | r3 = r6 + (r6 << 2);
0x0006d230 adds r0, r6, 1 | r0 = r6 + 1;
0x0006d232 str r0, [r4, 0x6c] | *((r4 + 0x6c)) = r0;
0x0006d234 movs r1, 0 | r1 = 0;
0x0006d236 mov.w ip, 1 |
0x0006d23a movs r0, 0x10 | r0 = 0x10;
0x0006d23c add.w lr, r2, r3, lsl 2 | lr = r2 + (r3 << 2);
0x0006d240 str.w ip, [lr, 0xc] | __asm ("str.w ip, [lr, 0xc]");
0x0006d244 strd r8, r1, [lr, 4] | __asm ("strd r8, r1, [lr, 4]");
0x0006d248 str.w r1, [lr, 0x10] | __asm ("str.w r1, [lr, 0x10]");
0x0006d24c str.w r0, [r2, r3, lsl 2] | __asm ("str.w r0, [r2, r3, lsl 2]");
| label_11:
0x0006d250 cmp.w r8, 0 |
| if (r8 == 0) {
0x0006d254 beq 0x6d268 | goto label_30;
| }
0x0006d256 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0006d258 ldrb r3, [r1, 0x13] | r3 = *((r1 + 0x13));
0x0006d25a cmp r3, 7 |
0x0006d25c itttt ls |
| if (r3 > 7) {
0x0006d25e addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0006d260 addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0006d262 strbls r2, [r1, 0x13] | *((r1 + 0x13)) = r2;
| }
| if (r3 <= 7) {
0x0006d264 strls r8, [r1, r3, lsl 2] | offset_1 = r3 << 2;
| *((r1 + offset_1)) = r8;
| goto label_30;
| }
| }
| label_30:
0x0006d268 ldrb.w r3, [r5, 0x60] | r3 = *((r5 + 0x60));
0x0006d26c cmp r3, 0 |
| if (r3 != 0) {
0x0006d26e bne.w 0x6d3a2 | goto label_31;
| }
0x0006d272 str.w fp, [sp, 0x1c] | __asm ("str.w fp, [x]");
| label_9:
0x0006d276 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0006d27a lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 < r3) {
0x0006d27c bmi 0x6d336 | goto label_32;
| }
| label_7:
0x0006d27e ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0006d280 mov r0, r4 | r0 = r4;
0x0006d282 str r3, [sp] | *(sp) = r3;
0x0006d284 ldrd r2, r3, [sp, 0x18] | __asm ("ldrd r2, r3, [var_18h]");
0x0006d288 rsb.w r1, r2, 0xa2 | r1 = 0xa2 - r2;
0x0006d28c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d290 ldr r0, [r4] | r0 = *(r4);
0x0006d292 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0006d294 adds r0, 0x57 | r0 += 0x57;
0x0006d296 cmp r3, 0 |
| if (r3 != 0) {
0x0006d298 bne 0x6d328 | goto label_33;
| }
0x0006d29a ldrd r1, r3, [r4, 0x68] | __asm ("ldrd r1, r3, [r4, 0x68]");
0x0006d29e movs r0, 0xf9 | r0 = 0xf9;
0x0006d2a0 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x0006d2a4 lsls r2, r2, 2 | r2 <<= 2;
0x0006d2a6 subs r2, 0x14 | r2 -= 0x14;
0x0006d2a8 add r1, r2 | r1 += r2;
0x0006d2aa strb r0, [r1, 1] | *((r1 + 1)) = r0;
0x0006d2ac str.w sb, [r1, 0x10] | __asm ("str.w sb, [r1, 0x10]");
| label_6:
0x0006d2b0 cmp r3, 0 |
| if (r3 > 0) {
0x0006d2b2 ble 0x6d2c4 |
0x0006d2b4 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0006d2b6 add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x0006d2ba add.w r2, r2, r1, lsl 2 | r2 += (r1 << 2);
0x0006d2be uxtb r1, r7 | r1 = (int8_t) r7;
0x0006d2c0 strh r1, [r2, -0x12] | *((r2 - 0x12)) = r1;
| }
0x0006d2c4 ldrb.w r2, [r5, 0x60] | r2 = *((r5 + 0x60));
| if (r2 != 0) {
0x0006d2c8 cbnz r2, 0x6d310 | goto label_34;
| }
| label_5:
0x0006d2ca cmp r6, 0 |
| if (r6 != 0) {
0x0006d2cc bne 0x6d2f2 | goto label_35;
| }
| }
| label_4:
0x0006d2ce ldr r5, [r5, 0x24] | r5 = *((r5 + 0x24));
0x0006d2d0 cmp r5, 0 |
| if (r5 != 0) {
0x0006d2d2 bne.w 0x6d0ba | goto label_2;
| }
0x0006d2d6 add sp, 0x2c |
0x0006d2d8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_27:
0x0006d2dc ldr r1, [sp, 0x18] | r1 = var_18h;
0x0006d2de adds r2, r6, 1 | r2 = r6 + 1;
0x0006d2e0 movs r3, 0 | r3 = 0;
0x0006d2e2 mov r0, r4 | r0 = r4;
0x0006d2e4 str r3, [sp] | *(sp) = r3;
0x0006d2e6 movs r3, 1 | r3 = 1;
0x0006d2e8 subs r2, r2, r1 | r2 -= r1;
0x0006d2ea movs r1, 0x56 | r1 = 0x56;
0x0006d2ec bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d2f0 b 0x6d2ce | goto label_4;
| label_35:
0x0006d2f2 ldr r2, [r4] | r2 = *(r4);
0x0006d2f4 it lt |
| if (r1 >= 0x56) {
0x0006d2f6 addlt r6, r3, -1 | r6 = r3 + -1;
| }
0x0006d2fa ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0006d2fe cmp r2, 0 |
| if (r2 != 0) {
0x0006d300 bne 0x6d39a | goto label_36;
| }
0x0006d302 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x0006d304 add.w r6, r6, r6, lsl 2 | r6 += (r6 << 2);
0x0006d308 add.w r2, r2, r6, lsl 2 | r2 += (r6 << 2);
| do {
0x0006d30c str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0006d30e b 0x6d2ce | goto label_4;
| label_34:
0x0006d310 cmp r7, 1 |
| if (r7 == 1) {
0x0006d312 beq.w 0x6d4f2 | goto label_37;
| }
0x0006d316 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0006d318 ldr r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x0006d31a cmp r7, r2 |
0x0006d31c itttt gt |
| if (r7 <= r2) {
0x0006d31e movgt r2, r1 | r2 = r1;
| }
| if (r7 <= r2) {
0x0006d320 ldrgt r1, [sp, 0x1c] | r1 = x;
| }
| if (r7 <= r2) {
0x0006d322 strgt r7, [r2, 0x1c] | *((r2 + 0x1c)) = r7;
| }
| if (r7 <= r2) {
0x0006d324 strgt r1, [r2, 0x20] | *((r2 + 0x20)) = r1;
| }
0x0006d326 b 0x6d2ca | goto label_5;
| label_33:
0x0006d328 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0006d32c lsls r3, r3, 0x1b | r3 <<= 0x1b;
| if (r3 < r3) {
0x0006d32e bmi.w 0x6d4b0 | goto label_38;
| }
| label_13:
0x0006d332 ldr r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
0x0006d334 b 0x6d2b0 | goto label_6;
| label_32:
0x0006d336 ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0006d338 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006d33a ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0006d33c ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0006d33e bl 0x2bfc0 | r0 = fcn_0002bfc0 (r0, r1);
0x0006d342 mov r8, r0 | r8 = r0;
0x0006d344 cmp r0, 0 |
| if (r0 == 0) {
0x0006d346 beq.w 0x6d4b8 | goto label_39;
| }
0x0006d34a ldrd r1, r3, [r4, 0x6c] | __asm ("ldrd r1, r3, [r4, 0x6c]");
0x0006d34e cmp r1, r3 |
| if (r1 >= r3) {
0x0006d350 bge.w 0x6d4ca | goto label_40;
| }
| label_14:
0x0006d354 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0006d356 add.w r2, r1, r1, lsl 2 | r2 = r1 + (r1 << 2);
0x0006d35a add.w ip, r1, 1 |
0x0006d35e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0006d362 str.w ip, [r4, 0x6c] | __asm ("str.w ip, [r4, 0x6c]");
0x0006d366 mov.w ip, 0x55 |
0x0006d36a str.w ip, [r3, r2, lsl 2] | __asm ("str.w ip, [r3, r2, lsl 2]");
0x0006d36e movs r0, 0 | r0 = 0;
0x0006d370 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0006d374 adds r2, r3, 4 | r2 = r3 + 4;
0x0006d376 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0006d37a strd r0, r0, [r3, 0xc] | __asm ("strd r0, r0, [r3, 0xc]");
0x0006d37c movs r3, r0 | r3 = r0;
| label_15:
0x0006d37e mov r2, r8 | r2 = r8;
0x0006d380 mvn r3, 1 | r3 = ~1;
0x0006d384 mov r0, r4 | r0 = r4;
0x0006d386 bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
0x0006d38a b 0x6d27e | goto label_7;
| label_28:
0x0006d38c ldr r2, [sp, 0x14] | r2 = var_14h;
0x0006d38e ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0006d390 add.w r8, r3, 1 | r8 = r3 + 1;
0x0006d394 str.w r8, [r2, 0x2c] | __asm ("str.w r8, [r2, 0x2c]");
0x0006d398 b 0x6d20e | goto label_8;
| label_36:
0x0006d39a ldr r2, [pc, 0x1a0] |
0x0006d39c add r2, pc | r2 = 0xda8de;
0x0006d39e adds r2, 4 | r2 += 4;
0x0006d3a0 b 0x6d30c |
| } while (1);
| label_31:
0x0006d3a2 ldr r3, [r5, 0x48] | r3 = *((r5 + 0x48));
0x0006d3a4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006d3a6 ldr.w r8, [r4, 0x6c] | r8 = *((r4 + 0x6c));
0x0006d3aa ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0006d3ac ldr r7, [r3] | r7 = *(r3);
0x0006d3ae str r3, [sp, 0x20] | var_20h = r3;
0x0006d3b0 mov r1, r7 | r1 = r7;
0x0006d3b2 bl 0xfd2c | fcn_0000fd2c (r0, r1);
0x0006d3b6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006d3b8 mov r2, r0 | r2 = r0;
0x0006d3ba str r0, [sp, 0x1c] | x = r0;
0x0006d3bc ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006d3be mov r1, r3 | r1 = r3;
0x0006d3c0 movs r3, 0 | r3 = 0;
0x0006d3c2 str r3, [sp] | *(sp) = r3;
0x0006d3c4 bl 0x6cf04 | fcn_0006cf04 (r0, r1, r2, r3, r4);
0x0006d3c8 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0006d3ca cmp r8, r2 |
| if (r8 >= r2) {
0x0006d3cc bge.w 0x6d276 | goto label_9;
| }
0x0006d3d0 ldr r3, [r4] | r3 = *(r4);
0x0006d3d2 add.w lr, r2, -1 | lr = r2 + -1;
0x0006d3d6 ldr.w ip, [pc, 0x168] |
0x0006d3da strd r6, r5, [sp, 0x20] | __asm ("strd r6, r5, [var_20h]");
0x0006d3de ldrb.w r0, [r3, 0x57] | r0 = *((r3 + 0x57));
0x0006d3e2 ldr r5, [sp, 0x10] | r5 = var_10h;
0x0006d3e4 add ip, pc | ip = 0xda92a;
0x0006d3e6 add.w ip, ip, 4 |
| do {
0x0006d3ea cmp.w r8, 0 |
0x0006d3ee mov r3, ip | r3 = ip;
0x0006d3f0 ite ge |
| if (r8 < 0) {
0x0006d3f2 movge r1, r8 | r1 = r8;
| }
| if (r8 >= 0) {
0x0006d3f4 movlt r1, lr | r1 = lr;
| }
| if (r0 == 0) {
0x0006d3f6 cbnz r0, 0x6d402 |
0x0006d3f8 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0006d3fa add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x0006d3fe add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| }
0x0006d402 ldrb r1, [r3] | r1 = *(r3);
0x0006d404 add.w r8, r8, 1 | r8++;
0x0006d408 cmp r1, 0x5e |
| if (r1 == 0x5e) {
0x0006d40a bne 0x6d418 |
0x0006d40c ldr r1, [r5, 0x30] | r1 = *((r5 + 0x30));
0x0006d40e ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x0006d410 cmp r6, r1 |
0x0006d412 it eq |
| if (r6 == r1) {
0x0006d414 streq sl, [r3, 4] | *((r3 + 4)) = sl;
| goto label_41;
| }
| }
| label_41:
0x0006d418 cmp r2, r8 |
0x0006d41a bne 0x6d3ea |
| } while (r2 != r8);
0x0006d41c ldrd r6, r5, [sp, 0x20] | __asm ("ldrd r6, r5, [var_20h]");
0x0006d420 b 0x6d276 | goto label_9;
| label_25:
0x0006d422 ldr r2, [r5, 0x40] | r2 = *((r5 + 0x40));
0x0006d424 movs r3, 1 | r3 = 1;
0x0006d426 movs r1, 0x56 | r1 = 0x56;
0x0006d428 str r7, [sp] | *(sp) = r7;
0x0006d42a mov r0, r4 | r0 = r4;
0x0006d42c adds r2, 1 | r2++;
0x0006d42e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d432 ldr r3, [r5, 0x40] | r3 = *((r5 + 0x40));
0x0006d434 mov r2, fp | r2 = fp;
0x0006d436 movs r1, 0x51 | r1 = 0x51;
0x0006d438 str r7, [sp] | *(sp) = r7;
0x0006d43a mov r0, r4 | r0 = r4;
0x0006d43c str r7, [sp, 0x18] | var_18h = r7;
0x0006d43e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d442 ldr r2, [r5, 0x40] | r2 = *((r5 + 0x40));
0x0006d444 movs r3, 2 | r3 = 2;
0x0006d446 movs r1, 0x61 | r1 = 0x61;
0x0006d448 mov r0, r4 | r0 = r4;
0x0006d44a adds r7, r2, r3 | r7 = r2 + r3;
0x0006d44c str r7, [sp] | *(sp) = r7;
0x0006d44e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d452 ldr r3, [r5, 0x40] | r3 = *((r5 + 0x40));
0x0006d454 movs r1, 0x8a | r1 = 0x8a;
0x0006d456 ldr r7, [sp, 0x18] | r7 = var_18h;
0x0006d458 mov r0, r4 | r0 = r4;
0x0006d45a ldr r2, [r5, 0x3c] | r2 = *((r5 + 0x3c));
0x0006d45c adds r3, 2 | r3 += 2;
0x0006d45e str r7, [sp] | *(sp) = r7;
0x0006d460 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006d464 ldr r3, [r4] | r3 = *(r4);
0x0006d466 cmp r6, 0 |
0x0006d468 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0006d46a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r6 < 0) {
0x0006d46e blt 0x6d47e | goto label_42;
| }
| if (r3 != 0) {
0x0006d470 cbnz r3, 0x6d484 | goto label_43;
| }
| do {
0x0006d472 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
| label_16:
0x0006d474 add.w r6, r6, r6, lsl 2 | r6 += (r6 << 2);
0x0006d478 add.w r3, r3, r6, lsl 2 | r3 += (r6 << 2);
0x0006d47c b 0x6d1be | goto label_10;
| label_42:
0x0006d47e subs r6, r2, 1 | r6 = r2 - 1;
0x0006d480 cmp r3, 0 |
0x0006d482 beq 0x6d472 |
| } while (r3 == 0);
| label_43:
0x0006d484 ldr r3, [pc, 0xbc] |
0x0006d486 add r3, pc | r3 = 0xda9ce;
0x0006d488 adds r3, 4 | r3 += 4;
0x0006d48a b 0x6d1be | goto label_10;
| label_29:
0x0006d48c movs r3, 1 | r3 = 1;
0x0006d48e mov r2, r8 | r2 = r8;
0x0006d490 str r3, [sp] | *(sp) = r3;
0x0006d492 movs r1, 0x10 | r1 = 0x10;
0x0006d494 movs r3, 0 | r3 = 0;
0x0006d496 mov r0, r4 | r0 = r4;
0x0006d498 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0006d49c mov r6, r0 | r6 = r0;
0x0006d49e b 0x6d250 | goto label_11;
| label_19:
0x0006d4a0 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0006d4a2 cmp r3, 0 |
| if (r3 == 0) {
0x0006d4a4 beq 0x6d520 | goto label_44;
| }
| label_18:
0x0006d4a6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0006d4a8 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x0006d4ac mov r4, r0 | r4 = r0;
0x0006d4ae b 0x6d0a6 | goto label_12;
| label_38:
0x0006d4b0 mov r1, sb | r1 = sb;
0x0006d4b2 bl 0x16808 | fcn_00016808 (r0, r1);
0x0006d4b6 b 0x6d332 | goto label_13;
| label_39:
0x0006d4b8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006d4ba ldr r3, [r3] | r3 = *(r3);
0x0006d4bc ldr.w r8, [r3, 8] | r8 = *((r3 + 8));
0x0006d4c0 ldrd r1, r3, [r4, 0x6c] | __asm ("ldrd r1, r3, [r4, 0x6c]");
0x0006d4c4 cmp r1, r3 |
| if (r1 < r3) {
0x0006d4c6 blt.w 0x6d354 | goto label_14;
| }
| label_40:
0x0006d4ca movs r3, 0 | r3 = 0;
0x0006d4cc movs r1, 0x55 | r1 = 0x55;
0x0006d4ce mov r2, r3 | r2 = r3;
0x0006d4d0 mov r0, r4 | r0 = r4;
0x0006d4d2 str r3, [sp] | *(sp) = r3;
0x0006d4d4 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0006d4d8 mov r1, r0 | r1 = r0;
0x0006d4da b 0x6d37e | goto label_15;
| label_26:
0x0006d4dc add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x0006d4e0 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x0006d4e2 cmp r6, 0 |
0x0006d4e4 it lt |
| if (r6 >= 0) {
0x0006d4e6 addlt r6, r2, -1 | r6 = r2 + -1;
| }
0x0006d4ea add.w r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
0x0006d4ee str r2, [r1, 8] | *((r1 + 8)) = r2;
0x0006d4f0 b 0x6d474 | goto label_16;
| label_37:
0x0006d4f2 ldr r0, [sp, 0x1c] | r0 = x;
0x0006d4f4 cmp r0, 0 |
| if (r0 == 0) {
0x0006d4f6 beq.w 0x6d2ca | goto label_5;
| }
0x0006d4fa ldr r7, [sp, 0x14] | r7 = var_14h;
0x0006d4fc ldrb r2, [r7, 0x13] | r2 = *((r7 + 0x13));
0x0006d4fe cmp r2, 7 |
| if (r2 > 7) {
0x0006d500 bhi.w 0x6d2ca | goto label_5;
| }
0x0006d504 adds r1, r2, 1 | r1 = r2 + 1;
0x0006d506 adds r2, 0x26 | r2 += 0x26;
0x0006d508 strb r1, [r7, 0x13] | *((r7 + 0x13)) = r1;
0x0006d50a str.w r0, [r7, r2, lsl 2] | __asm ("str.w r0, [r7, r2, lsl 2]");
0x0006d50e b 0x6d2ca | goto label_5;
| label_24:
0x0006d510 mov r2, fp | r2 = fp;
0x0006d512 movs r1, 0x32 | r1 = 0x32;
0x0006d514 mov r0, r4 | r0 = r4;
0x0006d516 str r3, [sp] | *(sp) = r3;
0x0006d518 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0006d51c mov r6, r0 | r6 = r0;
0x0006d51e b 0x6d176 | goto label_17;
| label_44:
0x0006d520 ldr r3, [r0] | r3 = *(r0);
0x0006d522 mov r2, r0 | r2 = r0;
0x0006d524 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0006d526 lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
0x0006d528 itt pl |
| if (r0 < r3) {
0x0006d52a movpl r3, 1 | r3 = 1;
| }
| if (r0 < r3) {
0x0006d52c strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x0006d52e b 0x6d4a6 | goto label_18;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6e074 */
| #include <stdint.h>
|
; (fcn) fcn.0006e074 () | void fcn_0006e074 (int16_t arg_1h, int16_t arg_6h, int16_t arg_10h, int16_t arg_50h, arithmetic x, int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006e074 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006e078 mov r5, r1 | r5 = r1;
0x0006e07a ldr r1, [r1] | r1 = *(r1);
0x0006e07c sub sp, 0x2c |
0x0006e07e mov r4, r0 | r4 = r0;
0x0006e080 mov fp, r3 |
0x0006e082 ldrb.w r8, [r5, 0x20] | r8 = *((r5 + 0x20));
0x0006e086 str r2, [sp, 0x10] | var_10h = r2;
0x0006e088 ldr r2, [r1] | r2 = *(r1);
0x0006e08a and r8, r8, 1 | r8 &= 1;
0x0006e08e ldr.w sl, [sp, 0x58] | sl = *(arg_58h);
0x0006e092 eor r0, r8, 1 | r0 = r8 ^ 1;
0x0006e096 ldr r3, [sp, 0x50] | r3 = *(arg_50h);
0x0006e098 str r2, [sp, 0x18] | var_18h = r2;
0x0006e09a adds r2, r0, r2 | r2 = r0 + r2;
0x0006e09c str r0, [sp, 0x1c] | var_1ch = r0;
0x0006e09e sub.w sb, fp, sl | sb = fp - sl;
0x0006e0a2 ldr r0, [sp, 0x54] | r0 = *(x);
0x0006e0a4 ldr r6, [r4, 8] | r6 = *((r4 + 8));
0x0006e0a6 add r2, r0 | r2 += r0;
0x0006e0a8 str r2, [sp, 0xc] | var_ch = r2;
0x0006e0aa ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0006e0ac str r2, [sp, 8] | var_8h = r2;
0x0006e0ae cmp.w sl, 0 |
| if (sl == 0) {
0x0006e0b2 bne 0x6e0c0 |
0x0006e0b4 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0006e0b6 ldr r0, [sp, 0xc] | r0 = var_ch;
0x0006e0b8 add.w sb, r2, 1 | sb = r2 + 1;
0x0006e0bc add r2, r0 | r2 += r0;
0x0006e0be str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
| }
0x0006e0c0 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006e0c2 ldr r7, [r2, 0xc] | r7 = *((r2 + 0xc));
0x0006e0c4 cmp r7, 0 |
| if (r7 == 0) {
0x0006e0c6 beq 0x6e1a4 | goto label_12;
| }
0x0006e0c8 adds r7, 1 | r7++;
| do {
0x0006e0ca ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x0006e0cc cmp r3, 0 |
0x0006e0ce mov r0, r4 | r0 = r4;
0x0006e0d0 add.w r2, r2, -1 | r2 += -1;
0x0006e0d4 str r2, [r4, 0x38] | *((r4 + 0x38)) = r2;
0x0006e0d6 str r2, [r5, 0x18] | *((r5 + 0x18)) = r2;
0x0006e0d8 ite ne |
| if (r3 == 0) {
0x0006e0da movne r2, 5 | r2 = 5;
| }
| if (r3 != 0) {
0x0006e0dc moveq r2, 1 | r2 = 1;
| }
0x0006e0de str r2, [sp] | *(sp) = r2;
0x0006e0e0 mov r2, sb | r2 = sb;
0x0006e0e2 bl 0x6cf04 | fcn_0006cf04 (r0, r1, r2, r3, r4);
0x0006e0e6 cmp.w r8, 0 |
| if (r8 == 0) {
0x0006e0ea beq.w 0x6e246 | goto label_13;
| }
| label_1:
0x0006e0ee ldr r2, [sp, 0x54] | r2 = *(x);
0x0006e0f0 clz r3, sl | r3 &= sl;
0x0006e0f4 lsrs r3, r3, 5 | r3 >>= 5;
0x0006e0f6 cmp r2, 0 |
0x0006e0f8 it le |
| if (r2 > 0) {
0x0006e0fa movle r3, 0 | r3 = 0;
| }
0x0006e0fc cmp r3, 0 |
| if (r3 != 0) {
0x0006e0fe bne.w 0x6e22e | goto label_14;
| }
| label_0:
0x0006e102 ldr r3, [sp, 8] | r3 = var_8h;
0x0006e104 cmp r3, 0 |
| if (r3 > 0) {
0x0006e106 bgt 0x6e1aa | goto label_15;
| }
0x0006e108 add.w r8, sb, r3 | r8 = sb + r3;
0x0006e10c cmp r7, 0 |
| if (r7 != 0) {
0x0006e10e bne.w 0x6e3c6 | goto label_16;
| }
| label_6:
0x0006e112 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0006e114 ldr.w sl, [r5, 4] | sl = *((r5 + 4));
0x0006e118 ldr.w fp, [r4, 8] | fp = *((r4 + 8));
0x0006e11c adds r3, 1 | r3++;
0x0006e11e mov r2, r3 | r2 = r3;
0x0006e120 str r3, [sp, 0x14] | var_14h = r3;
0x0006e122 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x0006e124 str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
| if (r3 != 0) {
0x0006e126 cbz r3, 0x6e13a |
0x0006e128 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006e12a mov r0, r4 | r0 = r4;
0x0006e12c ldr r1, [r2, 0x1c] | r1 = *((r2 + 0x1c));
0x0006e12e ldr r2, [r3] | r2 = *(r3);
0x0006e130 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0006e132 str r3, [sp] | *(sp) = r3;
0x0006e134 movs r3, 0 | r3 = 0;
0x0006e136 bl 0x6cf04 | fcn_0006cf04 (r0, r1, r2, r3, r4);
| }
0x0006e13a ldr r1, [sp, 0x14] | r1 = var_14h;
0x0006e13c add.w r2, sb, sl | r2 = sb + sl;
0x0006e140 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006e142 mov r0, fp | r0 = fp;
0x0006e144 str r1, [sp] | *(sp) = r1;
0x0006e146 movs r1, 0x61 | r1 = 0x61;
0x0006e148 sub.w r3, r3, sl | r3 -= sl;
0x0006e14c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_5:
0x0006e150 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_ch]");
0x0006e154 mov r0, r6 | r0 = r6;
0x0006e156 subs r3, r3, r2 | r3 -= r2;
0x0006e158 strd r8, r3, [sp] | __asm ("strd r8, r3, [sp]");
0x0006e15c ldrb.w r1, [r5, 0x20] | r1 = *((r5 + 0x20));
0x0006e160 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0006e162 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006e164 and r1, r1, 1 | r1 &= 1;
0x0006e168 subs r1, 0x76 | r1 -= 0x76;
0x0006e16a uxtb r1, r1 | r1 = (int8_t) r1;
0x0006e16c bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
| if (r7 != 0) {
0x0006e170 cbz r7, 0x6e19e |
0x0006e172 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x0006e174 cmp r2, 0 |
| if (r2 == 0) {
0x0006e176 beq.w 0x6e3c2 | goto label_17;
| }
| label_4:
0x0006e17a ldr r3, [r6] | r3 = *(r6);
0x0006e17c cmp r7, 0 |
0x0006e17e it lt |
| if (r7 >= 0) {
0x0006e180 ldrlt r7, [r6, 0x6c] | r7 = *((r6 + 0x6c));
| }
0x0006e182 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006e186 it lt |
| if (r7 >= 0) {
0x0006e188 addlt r7, r7, -1 | r7 += -1;
| }
0x0006e18c cmp r3, 0 |
| if (r3 != 0) {
0x0006e18e bne.w 0x6e3ba | goto label_18;
| }
0x0006e192 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x0006e194 add.w r7, r7, r7, lsl 2 | r7 += (r7 << 2);
0x0006e198 add.w r3, r3, r7, lsl 2 | r3 += (r7 << 2);
| label_3:
0x0006e19c str r2, [r3, 8] | *((r3 + 8)) = r2;
| }
| label_2:
0x0006e19e add sp, 0x2c |
0x0006e1a0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x0006e1a4 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006e1a6 ldr r7, [r2, 8] | r7 = *((r2 + 8));
0x0006e1a8 b 0x6e0ca |
| } while (1);
| label_15:
0x0006e1aa ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0006e1ac ldr.w sl, [r5, 4] | sl = *((r5 + 4));
0x0006e1b0 ldr.w fp, [r4, 8] | fp = *((r4 + 8));
0x0006e1b4 adds r3, 1 | r3++;
0x0006e1b6 mov r2, r3 | r2 = r3;
0x0006e1b8 str r3, [sp, 0x14] | var_14h = r3;
0x0006e1ba ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x0006e1bc str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
| if (r3 != 0) {
0x0006e1be cbz r3, 0x6e1d2 |
0x0006e1c0 ldr r2, [r3] | r2 = *(r3);
0x0006e1c2 mov r0, r4 | r0 = r4;
0x0006e1c4 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x0006e1c6 str r3, [sp] | *(sp) = r3;
0x0006e1c8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006e1ca ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x0006e1cc movs r3, 0 | r3 = 0;
0x0006e1ce bl 0x6cf04 | fcn_0006cf04 (r0, r1, r2, r3, r4);
| }
0x0006e1d2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006e1d4 add.w r2, sb, sl | r2 = sb + sl;
0x0006e1d8 mov r0, fp | r0 = fp;
0x0006e1da movs r1, 0x61 | r1 = 0x61;
0x0006e1dc str r3, [sp] | *(sp) = r3;
0x0006e1de ldr r3, [sp, 0xc] | r3 = var_ch;
0x0006e1e0 sub.w r3, r3, sl | r3 -= sl;
0x0006e1e4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e1e8 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0006e1ea ldr.w fp, [r5, 4] | fp = *((r5 + 4));
0x0006e1ee adds r2, r3, 1 | r2 = r3 + 1;
0x0006e1f0 add r3, fp | r3 += fp;
0x0006e1f2 str r2, [sp, 0x20] | var_20h = r2;
0x0006e1f4 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0006e1f6 ldrd sl, r3, [r6, 0x6c] | __asm ("ldrd sl, r3, [r6, 0x6c]");
0x0006e1fa cmp.w r8, 0 |
| if (r8 == 0) {
0x0006e1fe bne 0x6e25a |
0x0006e200 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006e202 cmp sl, r3 |
0x0006e204 add r2, sb | r2 += sb;
| if (sl >= r3) {
0x0006e206 bge.w 0x6e450 | goto label_19;
| }
0x0006e20a add.w r3, sl, sl, lsl 2 | r3 = sl + (sl << 2);
0x0006e20e ldr r0, [r6, 0x68] | r0 = *((r6 + 0x68));
0x0006e210 add.w r1, sl, 1 | r1 = sl + 1;
0x0006e214 lsls r3, r3, 2 | r3 <<= 2;
0x0006e216 str r1, [r6, 0x6c] | *((r6 + 0x6c)) = r1;
0x0006e218 mov.w ip, 0x10 |
0x0006e21c adds r1, r0, r3 | r1 = r0 + r3;
0x0006e21e strd r2, r8, [r1, 4] | __asm ("strd r2, r8, [r1, 4]");
0x0006e222 strd r8, r8, [r1, 0xc] | __asm ("strd r8, r8, [r1, 0xc]");
0x0006e226 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
0x0006e22a mov r3, fp | r3 = fp;
0x0006e22c b 0x6e28a | goto label_11;
| label_14:
0x0006e22e ldr r3, [sp, 0x54] | r3 = *(x);
0x0006e230 mov r2, fp | r2 = fp;
0x0006e232 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0006e234 str r3, [sp] | *(sp) = r3;
0x0006e236 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006e238 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0006e23a add r3, sb | r3 += sb;
0x0006e23c add r3, r1 | r3 += r1;
0x0006e23e movs r1, 0x4f | r1 = 0x4f;
0x0006e240 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e244 b 0x6e102 | goto label_0;
| label_13:
0x0006e246 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006e248 movs r1, 0x7e | r1 = 0x7e;
0x0006e24a str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0006e24e mov r0, r6 | r0 = r6;
0x0006e250 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0006e252 add r3, sb | r3 += sb;
0x0006e254 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e258 b 0x6e0ee | goto label_1;
| }
0x0006e25a cmp sl, r3 |
0x0006e25c ldr.w lr, [r5, 8] |
| if (sl >= r3) {
0x0006e260 bge.w 0x6e464 | goto label_20;
| }
0x0006e264 add.w r1, sl, sl, lsl 2 | r1 = sl + (sl << 2);
0x0006e268 ldr.w ip, [r6, 0x68] | ip = *((r6 + 0x68));
0x0006e26c add.w r0, sl, 1 | r0 = sl + 1;
0x0006e270 lsls r1, r1, 2 | r1 <<= 2;
0x0006e272 str r0, [r6, 0x6c] | *((r6 + 0x6c)) = r0;
0x0006e274 movs r2, 0 | r2 = 0;
0x0006e276 add.w r0, ip, r1 | r0 = ip + r1;
0x0006e27a mov r3, fp | r3 = fp;
0x0006e27c strd lr, r2, [r0, 4] | __asm ("strd lr, r2, [r0, 4]");
0x0006e280 strd r2, r2, [r0, 0xc] | __asm ("strd r2, r2, [r0, 0xc]");
0x0006e284 movs r2, 0x78 | r2 = 0x78;
0x0006e286 str.w r2, [ip, r1] | __asm ("str.w r2, [ip, r1]");
| label_11:
0x0006e28a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0006e28c movs r1, 0x5a | r1 = 0x5a;
0x0006e28e str r3, [sp] | *(sp) = r3;
0x0006e290 mov r0, r6 | r0 = r6;
0x0006e292 mov r3, sb | r3 = sb;
0x0006e294 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e298 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x0006e29a ldr r2, [r6] | r2 = *(r6);
0x0006e29c cmp r3, 0 |
0x0006e29e ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0006e2a2 itt lt |
| if (r3 >= 0) {
0x0006e2a4 ldrlt r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
| }
| if (r3 >= 0) {
0x0006e2a6 addlt r3, r3, -1 | r3 += -1;
| }
0x0006e2aa cmp r2, 0 |
| if (r2 != 0) {
0x0006e2ac bne.w 0x6e424 | goto label_21;
| }
0x0006e2b0 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0006e2b2 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0006e2b6 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x0006e2ba str r3, [sp, 0x24] | var_24h = r3;
| label_7:
0x0006e2bc ldr r3, [r4] | r3 = *(r4);
0x0006e2be ldrb.w r8, [r3, 0x57] | r8 = *((r3 + 0x57));
0x0006e2c2 cmp.w r8, 0 |
| if (r8 != 0) {
0x0006e2c6 bne.w 0x6e19e | goto label_2;
| }
0x0006e2ca ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006e2cc mov r1, r8 | r1 = r8;
0x0006e2ce ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0006e2d0 sub.w r3, r3, fp | r3 -= fp;
0x0006e2d4 add r3, r2 | r3 += r2;
0x0006e2d6 ldr r2, [sp, 0x54] | r2 = *(x);
0x0006e2d8 add r3, r2 | r3 += r2;
0x0006e2da ldr r2, [sp, 0x24] | r2 = var_24h;
0x0006e2dc ldr.w fp, [r2, 0x10] | fp = *((r2 + 0x10));
0x0006e2e0 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0006e2e2 ldr.w r0, [fp, 0x10] | r0 = *(arg_10h);
0x0006e2e4 movs r0, r2 | r0 = r2;
0x0006e2e6 ldrh.w r2, [fp, 6] | r2 = *(arg_6h);
0x0006e2ea blx 0x839c | fcn_0000839c ();
0x0006e2ee mov r2, fp | r2 = fp;
0x0006e2f0 mvn r3, 7 | r3 = ~7;
0x0006e2f4 mov.w r1, -1 | r1 = -1;
0x0006e2f8 mov r0, r6 | r0 = r6;
0x0006e2fa bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
0x0006e2fe ldrh.w r2, [fp, 6] | r2 = *(arg_6h);
0x0006e302 mov r0, r4 | r0 = r4;
0x0006e304 ldrh.w r3, [fp, 8] | r3 = *(arg_58h);
0x0006e308 ldr r1, [r5] | r1 = *(r5);
0x0006e30a subs r3, r3, r2 | r3 -= r2;
0x0006e30c ldr r2, [sp, 8] | r2 = var_8h;
0x0006e30e subs r3, 1 | r3--;
0x0006e310 bl 0x2c2d4 | fcn_0002c2d4 (r0, r1, r2, r3);
0x0006e314 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0006e316 mov r3, r8 | r3 = r8;
0x0006e318 ldr.w fp, [r6, 0x6c] | fp = *((r6 + 0x6c));
0x0006e31c movs r1, 0xd | r1 = 0xd;
0x0006e31e str r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
0x0006e320 mov r0, r6 | r0 = r6;
0x0006e322 add.w r2, fp, 1 | r2 += arg_1h;
0x0006e326 str r2, [sp] | *(sp) = r2;
0x0006e328 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e32c str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0006e330 movs r1, 9 | r1 = 9;
0x0006e332 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0006e334 mov r0, r6 | r0 = r6;
0x0006e336 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0006e338 subs r3, 1 | r3--;
0x0006e33a adds r2, 1 | r2++;
0x0006e33c str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x0006e33e str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0006e340 str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
0x0006e342 str r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x0006e344 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e348 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0006e34c mov r3, r8 | r3 = r8;
0x0006e34e ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0006e350 movs r1, 0x92 | r1 = 0x92;
0x0006e352 mov r0, r6 | r0 = r6;
0x0006e354 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e358 cmp r7, 0 |
| if (r7 != 0) {
0x0006e35a bne 0x6e43e | goto label_22;
| }
| label_10:
0x0006e35c ldr r3, [r6] | r3 = *(r6);
0x0006e35e cmp.w sl, 0 |
0x0006e362 ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x0006e364 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006e368 it lt |
| if (sl >= 0) {
0x0006e36a addlt sl, r1, -1 | sl = r1 + -1;
| }
0x0006e36e cmp r3, 0 |
| if (r3 != 0) {
0x0006e370 bne 0x6e436 | goto label_23;
| }
0x0006e372 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0006e374 add.w r3, sl, sl, lsl 2 | r3 = sl + (sl << 2);
0x0006e378 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_9:
0x0006e37c ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0006e37e str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0006e380 movs r1, 0x4f | r1 = 0x4f;
0x0006e382 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0006e384 str r2, [sp] | *(sp) = r2;
0x0006e386 mov r2, sb | r2 = sb;
0x0006e388 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0006e38a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e38e ldr r2, [r6] | r2 = *(r6);
0x0006e390 cmp.w fp, 0 |
0x0006e394 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0006e396 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0006e39a it lt |
| if (fp >= 0) {
0x0006e39c addlt fp, r3, -1 |
| }
0x0006e3a0 cmp r2, 0 |
| if (r2 != 0) {
0x0006e3a2 bne 0x6e42e | goto label_24;
| }
0x0006e3a4 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0006e3a6 add.w sl, fp, fp, lsl 2 | sl = fp + (fp << 2);
0x0006e3aa add.w r2, r2, sl, lsl 2 | r2 += (sl << 2);
| label_8:
0x0006e3ae str r3, [r2, 8] | *((r2 + 8)) = r3;
| if (r7 == 0) {
0x0006e3b0 cbnz r7, 0x6e3cc |
0x0006e3b2 ldr r3, [sp, 8] | r3 = var_8h;
0x0006e3b4 add.w r8, sb, r3 | r8 = sb + r3;
0x0006e3b8 b 0x6e41a | goto label_25;
| label_18:
0x0006e3ba ldr r3, [pc, 0xbc] |
0x0006e3bc add r3, pc | r3 = 0xdc83a;
0x0006e3be adds r3, 4 | r3 += 4;
0x0006e3c0 b 0x6e19c | goto label_3;
| label_17:
0x0006e3c2 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0006e3c4 b 0x6e17a | goto label_4;
| label_16:
0x0006e3c6 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0006e3c8 movs r2, 0 | r2 = 0;
0x0006e3ca str r2, [sp, 0x14] | var_14h = r2;
| }
0x0006e3cc ldr.w sl, [r5, 8] | sl = *((r5 + 8));
0x0006e3d0 mov r2, r7 | r2 = r7;
0x0006e3d2 movs r7, 0 | r7 = 0;
0x0006e3d4 adds r3, 4 | r3 += 4;
0x0006e3d6 movs r1, 0x3b | r1 = 0x3b;
0x0006e3d8 str r7, [sp] | *(sp) = r7;
0x0006e3da mov r0, r6 | r0 = r6;
0x0006e3dc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e3e0 mov r3, r7 | r3 = r7;
0x0006e3e2 mov r2, sl | r2 = sl;
0x0006e3e4 movs r1, 0x1f | r1 = 0x1f;
0x0006e3e6 str r7, [sp] | *(sp) = r7;
0x0006e3e8 mov r0, r6 | r0 = r6;
0x0006e3ea bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e3ee ldr r2, [sp, 8] | r2 = var_8h;
0x0006e3f0 movs r1, 0x27 | r1 = 0x27;
0x0006e3f2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006e3f4 mov r0, r6 | r0 = r6;
0x0006e3f6 add.w r8, sb, r2 | r8 = sb + r2;
0x0006e3fa subs r3, r3, r2 | r3 -= r2;
0x0006e3fc str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0006e400 mov r2, sl | r2 = sl;
0x0006e402 str r3, [sp, 4] | var_4h = r3;
0x0006e404 mov r3, r7 | r3 = r7;
0x0006e406 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0006e40a mov r3, r7 | r3 = r7;
0x0006e40c str r7, [sp] | *(sp) = r7;
0x0006e40e mov r2, sl | r2 = sl;
0x0006e410 mov r7, r0 | r7 = r0;
0x0006e412 movs r1, 0x82 | r1 = 0x82;
0x0006e414 mov r0, r6 | r0 = r6;
0x0006e416 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_25:
0x0006e41a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006e41c cmp r3, 0 |
| if (r3 != 0) {
0x0006e41e bne.w 0x6e150 | goto label_5;
| }
0x0006e422 b 0x6e112 | goto label_6;
| label_21:
0x0006e424 ldr r3, [pc, 0x54] |
0x0006e426 add r3, pc | r3 = 0xdc8a6;
0x0006e428 adds r3, 4 | r3 += 4;
0x0006e42a str r3, [sp, 0x24] | var_24h = r3;
0x0006e42c b 0x6e2bc | goto label_7;
| label_24:
0x0006e42e ldr r2, [pc, 0x50] |
0x0006e430 add r2, pc | r2 = 0xdc8b6;
0x0006e432 adds r2, 4 | r2 += 4;
0x0006e434 b 0x6e3ae | goto label_8;
| label_23:
0x0006e436 ldr r3, [pc, 0x4c] |
0x0006e438 add r3, pc | r3 = 0xdc8c2;
0x0006e43a adds r3, 4 | r3 += 4;
0x0006e43c b 0x6e37c | goto label_9;
| label_22:
0x0006e43e str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0006e442 mov r2, r7 | r2 = r7;
0x0006e444 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0006e446 movs r1, 0x10 | r1 = 0x10;
0x0006e448 mov r0, r6 | r0 = r6;
0x0006e44a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006e44e b 0x6e35c | goto label_10;
| label_19:
0x0006e450 mov r3, r8 | r3 = r8;
0x0006e452 movs r1, 0x10 | r1 = 0x10;
0x0006e454 mov r0, r6 | r0 = r6;
0x0006e456 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0006e45a bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0006e45e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0006e460 mov sl, r0 | sl = r0;
0x0006e462 b 0x6e28a | goto label_11;
| label_20:
0x0006e464 movs r3, 0 | r3 = 0;
0x0006e466 mov r2, lr | r2 = lr;
0x0006e468 str r3, [sp] | *(sp) = r3;
0x0006e46a movs r1, 0x78 | r1 = 0x78;
0x0006e46c mov r0, r6 | r0 = r6;
0x0006e46e bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0006e472 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0006e474 mov sl, r0 | sl = r0;
0x0006e476 b 0x6e28a | goto label_11;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6e488).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6edfc).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6f4f0 */
| #include <stdint.h>
|
; (fcn) fcn.0006f4f0 () | void fcn_0006f4f0 (int16_t arg_0h, int16_t arg_1ch, int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| arithmetic x;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0006f4f0 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0006f4f4 sub sp, 0x24 |
0x0006f4f6 strd r1, r3, [sp, 0x18] | __asm ("strd r1, r3, [var_18h]");
0x0006f4fa mov fp, r2 |
0x0006f4fc mov r6, r0 | r6 = r0;
0x0006f4fe ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0006f500 movs r2, 1 | r2 = 1;
0x0006f502 ldr.w r7, [fp, 0x28] | r7 = *(arg_28h);
0x0006f506 ldr.w sb, [r0, 8] | sb = *((r0 + 8));
0x0006f50a cmp r3, 0 |
0x0006f50c strb.w r2, [fp] | *(fp) = r2;
0x0006f510 itttt gt |
| if (r3 <= 0) {
0x0006f512 movgt ip, 0 |
| }
| if (r3 <= 0) {
0x0006f516 addgt r7, 0x14 | r7 += 0x14;
| }
| if (r3 <= 0) {
0x0006f518 strgt ip, [sp, 0xc] | var_ch = ip;
| }
| if (r3 > 0) {
0x0006f51c str.w ip, [sp, 0x14] | __asm ("str.w ip, [var_14h]");
| }
| if (r3 <= 0) {
0x0006f520 ble.w 0x6f640 | goto label_10;
| }
| do {
0x0006f524 ldr r3, [r7, -0x14] | r3 = *((r7 - 0x14));
0x0006f528 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x0006f52a ldr r5, [r3, 0x14] | r5 = *((r3 + 0x14));
0x0006f52c ands r4, r4, 0x1000000 | r4 &= 0x1000000;
| if (r4 != r4) {
0x0006f530 beq 0x6f564 |
0x0006f532 ldr.w r2, [fp, 0x24] | r2 = *(arg_24h);
0x0006f536 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x0006f538 ldr r4, [r3, 0x28] | r4 = *((r3 + 0x28));
| if (r2 != 0) {
0x0006f53a cbz r2, 0x6f552 |
0x0006f53c ldr r3, [r7, -0x10] | r3 = *((r7 - 0x10));
0x0006f540 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0006f542 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006f544 subs r3, 0 |
0x0006f546 it ne |
| if (r3 == 0) {
0x0006f548 movne r3, 1 | r3 = 1;
| }
0x0006f54a ands.w r3, r3, r2, lsr 5 | r3 &= (r2 >> 5);
| if (r3 != r3) {
0x0006f54e bne.w 0x6f7b4 | goto label_11;
| }
| }
| label_7:
0x0006f552 ldr r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x0006f554 mov r1, r4 | r1 = r4;
0x0006f556 mov r0, r6 | r0 = r6;
0x0006f558 subs r4, r3, 1 | r4 = r3 - 1;
0x0006f55a movs r3, 0x10 | r3 = 0x10;
0x0006f55c mov r2, r4 | r2 = r4;
0x0006f55e str r4, [r6, 0x38] | *((r6 + 0x38)) = r4;
0x0006f560 bl 0x67af8 | fcn_00067af8 (r0, r1, r2, r3);
| }
0x0006f564 cmp r5, 0 |
| if (r5 == 0) {
0x0006f566 beq 0x6f666 | goto label_12;
| }
0x0006f568 ldr.w r8, [r5] | r8 = *(r5);
0x0006f56c mov r0, r6 | r0 = r6;
0x0006f56e mov r1, r8 | r1 = r8;
0x0006f570 bl 0xfd2c | fcn_0000fd2c (r0, r1);
0x0006f574 movs r3, 1 | r3 = 1;
0x0006f576 mov r2, r0 | r2 = r0;
0x0006f578 str r0, [sp, 8] | x = r0;
0x0006f57a mov r1, r5 | r1 = r5;
0x0006f57c str r3, [sp] | *(sp) = r3;
0x0006f57e mov r0, r6 | r0 = r6;
0x0006f580 movs r3, 0 | r3 = 0;
0x0006f582 bl 0x6cf04 | fcn_0006cf04 (r0, r1, r2, r3, r4);
0x0006f586 ldr r2, [r7, -0x8] | r2 = *((r7 - 0x8));
0x0006f58a cmp r2, 0 |
| if (r2 >= 0) {
0x0006f58c blt 0x6f5aa |
| if (r4 == 0) {
0x0006f58e cbnz r4, 0x6f596 |
0x0006f590 ldr r4, [r6, 0x38] | r4 = *((r6 + 0x38));
0x0006f592 subs r4, 1 | r4--;
0x0006f594 str r4, [r6, 0x38] | *((r6 + 0x38)) = r4;
| }
0x0006f596 ldr r3, [sp, 8] | r3 = x;
0x0006f598 mov r0, r6 | r0 = r6;
0x0006f59a ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0006f59c strd r5, r3, [sp] | __asm ("strd r5, r3, [sp]");
0x0006f5a0 mov r3, r4 | r3 = r4;
0x0006f5a2 bl 0x2e958 | fcn_0002e958 (r0, r1, r2, r3, r4, r5);
0x0006f5a6 str r0, [r7, -0x8] | *((r7 - 0x8)) = r0;
| }
0x0006f5aa ldr r3, [r7, -0x10] | r3 = *((r7 - 0x10));
0x0006f5ae uxtb.w r2, r8 | r2 = (int8_t) r8;
0x0006f5b2 str r2, [sp, 0x10] | var_10h = r2;
0x0006f5b4 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006f5b6 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 < r3) {
0x0006f5b8 bmi.w 0x6f6f2 | goto label_13;
| }
| label_0:
0x0006f5bc ldr r3, [r7, -0xc] | r3 = *((r7 - 0xc));
0x0006f5c0 movs r1, 0xa2 | r1 = 0xa2;
0x0006f5c2 movs r2, 0 | r2 = 0;
0x0006f5c4 mov r0, sb | r0 = sb;
0x0006f5c6 str r3, [sp] | *(sp) = r3;
0x0006f5c8 ldr r3, [sp, 8] | r3 = x;
0x0006f5ca bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006f5ce ldr.w r0, [sb] | r0 = *(sb);
0x0006f5d2 ldr r1, [r7, -0x10] | r1 = *((r7 - 0x10));
0x0006f5d6 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0006f5da cmp r3, 0 |
| if (r3 != 0) {
0x0006f5dc bne 0x6f6d0 | goto label_14;
| }
0x0006f5de ldrd r0, r3, [sb, 0x68] | __asm ("ldrd r0, r3, [sb, 0x68]");
0x0006f5e2 movs r5, 0xf9 | r5 = 0xf9;
0x0006f5e4 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x0006f5e8 lsls r2, r2, 2 | r2 <<= 2;
0x0006f5ea subs r2, 0x14 | r2 -= 0x14;
0x0006f5ec add r0, r2 | r0 += r2;
0x0006f5ee strb r5, [r0, 1] | *((r0 + 1)) = r5;
0x0006f5f0 str r1, [r0, 0x10] | *((r0 + 0x10)) = r1;
| label_1:
0x0006f5f2 cmp r3, 0 |
| if (r3 > 0) {
0x0006f5f4 ble 0x6f608 |
0x0006f5f6 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0006f5fa add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x0006f5fe add.w r2, r2, r1, lsl 2 | r2 += (r1 << 2);
0x0006f602 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0006f604 strh r1, [r2, -0x12] | *((r2 - 0x12)) = r1;
| }
0x0006f608 cmp.w r8, 1 |
| if (r8 == 1) {
0x0006f60c beq.w 0x6f726 | goto label_15;
| }
0x0006f610 ldr r2, [r6, 0x1c] | r2 = *((r6 + 0x1c));
0x0006f612 cmp r8, r2 |
0x0006f614 ittt gt |
| if (r8 <= r2) {
0x0006f616 ldrgt r2, [sp, 8] | r2 = x;
| }
| if (r8 <= r2) {
0x0006f618 strgt r8, [r6, 0x1c] | *((r6 + 0x1c)) = r8;
| }
| if (r8 > r2) {
0x0006f61c str r2, [r6, 0x20] | *((r6 + 0x20)) = r2;
| }
| label_5:
0x0006f61e cmp r4, 0 |
| if (r4 != 0) {
0x0006f620 bne 0x6f6dc | goto label_16;
| }
| label_2:
0x0006f622 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0006f624 adds r7, 0x14 | r7 += 0x14;
0x0006f626 ldr.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x0006f62a adds r2, 1 | r2++;
0x0006f62c cmp r3, r2 |
0x0006f62e str r2, [sp, 0xc] | var_ch = r2;
0x0006f630 bgt.w 0x6f524 |
| } while (r3 > r2);
0x0006f634 ldr.w ip, [sp, 0x14] | ip = var_14h;
0x0006f638 cmp.w ip, 0 |
| if (ip != 0) {
0x0006f63c bne.w 0x6f754 | goto label_17;
| }
| label_10:
0x0006f640 ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x0006f644 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006f646 cmp r2, 0 |
0x0006f648 it ne |
| if (r2 != 0) {
0x0006f64a cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
0x0006f64c ite ne |
| if (r2 == 0) {
0x0006f64e movne r7, 1 | r7 = 1;
| }
| if (r2 != 0) {
0x0006f650 moveq r7, 0 | r7 = 0;
| }
| if (r2 != 0) {
0x0006f652 bne 0x6f750 | goto label_18;
| }
0x0006f654 cmp r3, 0 |
0x0006f656 ldr.w r4, [fp, 0x1c] | r4 = *(arg_1ch);
0x0006f65a it le |
| if (r3 > 0) {
0x0006f65c strble r7, [fp] | *(fp) = r7;
| }
| if (r3 > 0) {
0x0006f660 bgt.w 0x6f788 | goto label_19;
| }
0x0006f664 b 0x6f7ae | goto label_20;
| label_12:
0x0006f666 ldr r3, [r7, -0x10] | r3 = *((r7 - 0x10));
0x0006f66a mov r8, r5 | r8 = r5;
0x0006f66c str r5, [sp, 0x10] | var_10h = r5;
0x0006f66e str r5, [sp, 8] | x = r5;
0x0006f670 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006f672 tst.w r3, 0x20 |
| if ((r3 & 0x20) == 0) {
0x0006f676 beq 0x6f5bc | goto label_0;
| }
| do {
| label_4:
0x0006f678 ldr r3, [r6] | r3 = *(r6);
0x0006f67a ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0006f67c mov sl, r3 | sl = r3;
| label_3:
0x0006f67e ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 == 0) {
0x0006f680 cbnz r3, 0x6f692 |
0x0006f682 ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x0006f686 str r3, [sp, 0x14] | var_14h = r3;
| if (r3 == 0) {
0x0006f688 cbz r3, 0x6f692 | goto label_21;
| }
0x0006f68a ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0006f68c adds r3, 1 | r3++;
0x0006f68e str r3, [sp, 0x14] | var_14h = r3;
0x0006f690 str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
| }
| label_21:
0x0006f692 ldrd r1, r3, [sb, 0x6c] | __asm ("ldrd r1, r3, [sb, 0x6c]");
0x0006f696 cmp r1, r3 |
| if (r1 >= r3) {
0x0006f698 bge.w 0x6f7d2 | goto label_22;
| }
0x0006f69c ldr.w r0, [sb, 0x68] | r0 = *((sb + 0x68));
0x0006f6a0 add.w r3, r1, r1, lsl 2 | r3 = r1 + (r1 << 2);
0x0006f6a4 ldr r5, [sp, 0x14] | r5 = var_14h;
0x0006f6a6 adds r2, r1, 1 | r2 = r1 + 1;
0x0006f6a8 str.w r2, [sb, 0x6c] | __asm ("str.w r2, [sb, 0x6c]");
0x0006f6ac mov.w ip, 0x55 |
0x0006f6b0 add.w r2, r0, r3, lsl 2 | r2 = r0 + (r3 << 2);
0x0006f6b4 str r5, [r2, 4] | *((r2 + 4)) = r5;
0x0006f6b6 movs r5, 0 | r5 = 0;
0x0006f6b8 strd r5, r5, [r2, 8] | __asm ("strd r5, r5, [r2, 8]");
0x0006f6bc str r5, [r2, 0x10] | *((r2 + 0x10)) = r5;
0x0006f6be str.w ip, [r0, r3, lsl 2] | __asm ("str.w ip, [r0, r3, lsl 2]");
| label_8:
0x0006f6c2 mov r2, sl | r2 = sl;
0x0006f6c4 mvn r3, 1 | r3 = ~1;
0x0006f6c8 mov r0, sb | r0 = sb;
0x0006f6ca bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
0x0006f6ce b 0x6f5bc | goto label_0;
| label_14:
0x0006f6d0 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0006f6d2 lsls r3, r3, 0x1b | r3 <<= 0x1b;
| if (r3 < r3) {
0x0006f6d4 bmi 0x6f742 | goto label_23;
| }
| label_6:
0x0006f6d6 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0006f6da b 0x6f5f2 | goto label_1;
| label_16:
0x0006f6dc ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0006f6e0 mvns r2, r4 | r2 = ~r4;
0x0006f6e2 ldrd r1, r5, [r0, 0x38] | __asm ("ldrd r1, r5, [r0, 0x38]");
0x0006f6e6 cmn r5, r1 |
| if (r5 < r1) {
0x0006f6e8 bmi 0x6f748 | goto label_24;
| }
0x0006f6ea ldr r1, [r0, 0x40] | r1 = *((r0 + 0x40));
0x0006f6ec str.w r3, [r1, r2, lsl 2] | __asm ("str.w r3, [r1, r2, lsl 2]");
0x0006f6f0 b 0x6f622 | goto label_2;
| label_13:
0x0006f6f2 cmp.w r8, 0 |
0x0006f6f6 ble 0x6f678 |
| } while (r8 <= 0);
0x0006f6f8 add.w sl, r5, 0x18 | sl = r5 + 0x18;
0x0006f6fc movs r5, 0 | r5 = 0;
| do {
0x0006f6fe ldr r1, [sl, -0x10] | r1 = *((sl - 0x10));
0x0006f702 mov r0, r6 | r0 = r6;
0x0006f704 bl 0x2bfc0 | fcn_0002bfc0 (r0, r1);
0x0006f708 adds r5, 1 | r5++;
0x0006f70a clz r3, r0 | r3 &= r0;
0x0006f70e lsrs r3, r3, 5 | r3 >>= 5;
0x0006f710 cmp r8, r5 |
0x0006f712 it le |
| if (r8 > r5) {
0x0006f714 movle r3, 0 | r3 = 0;
| }
0x0006f716 add.w sl, sl, 0x10 | sl += 0x10;
0x0006f71a cmp r3, 0 |
0x0006f71c bne 0x6f6fe |
| } while (r3 != 0);
0x0006f71e mov sl, r0 | sl = r0;
0x0006f720 cmp r0, 0 |
| if (r0 != 0) {
0x0006f722 bne 0x6f67e | goto label_3;
| }
0x0006f724 b 0x6f678 | goto label_4;
| label_15:
0x0006f726 ldr r0, [sp, 8] | r0 = x;
0x0006f728 cmp r0, 0 |
| if (r0 == 0) {
0x0006f72a beq.w 0x6f61e | goto label_5;
| }
0x0006f72e ldrb r2, [r6, 0x13] | r2 = *((r6 + 0x13));
0x0006f730 cmp r2, 7 |
| if (r2 > 7) {
0x0006f732 bhi.w 0x6f61e | goto label_5;
| }
0x0006f734 add r7, sp, 0x1d0 | r7 = sp + 0x1d0;
0x0006f736 adds r1, r2, 1 | r1 = r2 + 1;
0x0006f738 adds r2, 0x26 | r2 += 0x26;
0x0006f73a strb r1, [r6, 0x13] | *((r6 + 0x13)) = r1;
0x0006f73c str.w r0, [r6, r2, lsl 2] | __asm ("str.w r0, [r6, r2, lsl 2]");
0x0006f740 b 0x6f61e | goto label_5;
| label_23:
0x0006f742 bl 0x16808 | fcn_00016808 (r0, r1);
0x0006f746 b 0x6f6d6 | goto label_6;
| label_24:
0x0006f748 mov r1, sb | r1 = sb;
0x0006f74a bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0006f74e b 0x6f622 | goto label_2;
| label_18:
0x0006f750 ldr.w ip, [sp, 0x18] | ip = var_18h;
| label_17:
0x0006f754 ldrd r7, r3, [sb, 0x6c] | __asm ("ldrd r7, r3, [sb, 0x6c]");
0x0006f758 cmp r7, r3 |
| if (r7 >= r3) {
0x0006f75a bge 0x6f81a | goto label_25;
| }
0x0006f75c add.w r3, r7, r7, lsl 2 | r3 = r7 + (r7 << 2);
0x0006f760 ldr.w r0, [sb, 0x68] | r0 = *((sb + 0x68));
0x0006f764 adds r2, r7, 1 | r2 = r7 + 1;
0x0006f766 lsls r3, r3, 2 | r3 <<= 2;
0x0006f768 str.w r2, [sb, 0x6c] | __asm ("str.w r2, [sb, 0x6c]");
0x0006f76c movs r1, 0 | r1 = 0;
0x0006f76e adds r2, r0, r3 | r2 = r0 + r3;
0x0006f770 movs r4, 0xf | r4 = 0xf;
0x0006f772 strd ip, r1, [r2, 4] | __asm ("strd ip, r1, [r2, 4]");
0x0006f776 strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x0006f77a str r4, [r0, r3] | *((r0 + r3)) = r4;
| label_9:
0x0006f77c ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x0006f780 ldr.w r4, [fp, 0x1c] | r4 = *(arg_1ch);
0x0006f784 cmp r3, 0 |
| if (r3 <= 0) {
0x0006f786 ble 0x6f7a6 | goto label_26;
| }
| label_19:
0x0006f788 movs r5, 0 | r5 = 0;
| do {
0x0006f78a ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x0006f78c mov r0, r6 | r0 = r6;
0x0006f78e adds r5, 1 | r5++;
| if (r2 != 0) {
0x0006f790 cbz r2, 0x6f79e |
0x0006f792 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0006f794 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0006f796 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x0006f79a ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
| }
0x0006f79e cmp r3, r5 |
0x0006f7a0 add.w r4, r4, 0x14 | r4 += 0x14;
0x0006f7a4 bgt 0x6f78a |
| } while (r3 > r5);
| label_26:
0x0006f7a6 movs r3, 0 | r3 = 0;
0x0006f7a8 strb.w r3, [fp] | *(fp) = r3;
0x0006f7ac cbnz r7, 0x6f7e4 |
| while (r7 == r2) {
| label_20:
0x0006f7ae add sp, 0x24 |
0x0006f7b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x0006f7b4 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 == 0) {
0x0006f7b6 cbnz r3, 0x6f7c0 |
0x0006f7b8 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0006f7ba adds r3, 1 | r3++;
0x0006f7bc str r3, [sp, 0x14] | var_14h = r3;
0x0006f7be str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
| }
0x0006f7c0 movs r3, 0 | r3 = 0;
0x0006f7c2 movs r1, 0x50 | r1 = 0x50;
0x0006f7c4 str r3, [sp] | *(sp) = r3;
0x0006f7c6 mov r0, sb | r0 = sb;
0x0006f7c8 ldrd r3, r2, [sp, 0x14] | __asm ("ldrd r3, r2, [var_14h]");
0x0006f7cc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006f7d0 b 0x6f552 | goto label_7;
| label_22:
0x0006f7d2 movs r3, 0 | r3 = 0;
0x0006f7d4 movs r1, 0x55 | r1 = 0x55;
0x0006f7d6 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0006f7d8 mov r0, sb | r0 = sb;
0x0006f7da str r3, [sp] | *(sp) = r3;
0x0006f7dc bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0006f7e0 mov r1, r0 | r1 = r0;
0x0006f7e2 b 0x6f6c2 | goto label_8;
0x0006f7e4 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0006f7e8 subs r2, r3, 1 | r2 = r3 - 1;
0x0006f7ea cmp r7, r2 |
0x0006f7ec it eq |
| if (r7 != r2) {
0x0006f7ee streq r7, [sb, 0x6c] | *((sb + 0x6c)) = r7;
| }
0x0006f7f2 beq 0x6f7ae |
| }
0x0006f7f4 ldr.w r1, [sb] | r1 = *(sb);
0x0006f7f8 bics.w r7, r7, r7, asr 32 | __asm ("bics.w r7, r7, r7, asr 32");
0x0006f7fc it hs |
| if (r7 < r2) {
0x0006f7fe movhs r7, r2 | r7 = r2;
| }
0x0006f800 ldrb.w r2, [r1, 0x57] | r2 = *((r1 + 0x57));
| if (r2 != 0) {
0x0006f804 cbnz r2, 0x6f82c | goto label_27;
| }
0x0006f806 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0006f80a add.w r7, r7, r7, lsl 2 | r7 += (r7 << 2);
0x0006f80e add.w r2, r2, r7, lsl 2 | r2 += (r7 << 2);
| do {
0x0006f812 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0006f814 add sp, 0x24 |
0x0006f816 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_25:
0x0006f81a movs r3, 0 | r3 = 0;
0x0006f81c mov r2, ip | r2 = ip;
0x0006f81e movs r1, 0xf | r1 = 0xf;
0x0006f820 mov r0, sb | r0 = sb;
0x0006f822 str r3, [sp] | *(sp) = r3;
0x0006f824 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0006f828 mov r7, r0 | r7 = r0;
0x0006f82a b 0x6f77c | goto label_9;
| label_27:
0x0006f82c ldr r2, [pc, 4] | r2 = *(0x0006f834);
0x0006f82e add r2, pc | r2 += pc;
0x0006f830 adds r2, 4 | r2 += 4;
0x0006f832 b 0x6f812 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6fa4c */
| #include <stdint.h>
|
; (fcn) fcn.0006fa4c () | void fcn_0006fa4c (int16_t arg_1h, int16_t arg_d0h, int16_t arg_380h, int16_t arg1, uint32_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006fa4c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006fa50 sub sp, 0x2c |
0x0006fa52 str r2, [sp, 0x14] | var_14h = r2;
0x0006fa54 mov r7, r1 | r7 = r1;
0x0006fa56 mov r5, r0 | r5 = r0;
0x0006fa58 ldr.w r2, [pc, 0x484] |
0x0006fa5c ldr.w r3, [pc, 0x484] | r3 = *(0x6fee4);
0x0006fa60 ldr.w r8, [r0, 0x28] | r8 = *((r0 + 0x28));
0x0006fa64 add r2, pc | r2 = 0xdf948;
0x0006fa66 ldr.w sb, [r1, 0xc] | sb = *(arg_1hxc);
0x0006fa6a ldr r3, [r2, r3] |
0x0006fa6c ldr r1, [r1, 0x18] | r1 = *(arg_1hx18);
0x0006fa6e add.w r2, r8, 2 | r2 = r8 + 2;
0x0006fa72 ldr r3, [r3] | r3 = *(0xdf948);
0x0006fa74 str r3, [sp, 0x24] | var_24h = r3;
0x0006fa76 mov.w r3, 0 | r3 = 0;
0x0006fa7a ldr r3, [r0] | r3 = *(r0);
0x0006fa7c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0006fa7e str r2, [r0, 0x28] | *((r0 + 0x28)) = r2;
0x0006fa80 cmp r1, 0 |
| if (arg_1h == ) {
0x0006fa82 beq.w 0x6febc | goto label_16;
| }
0x0006fa86 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0006fa88 cmp r1, r2 |
| if (r1 == r2) {
0x0006fa8a beq.w 0x6fe46 | goto label_17;
| }
0x0006fa8e adds r3, 0x10 | r3 += 0x10;
0x0006fa90 movs r4, 0 | r4 = 0;
| do {
0x0006fa92 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0006fa94 mov r0, r3 | r0 = r3;
0x0006fa96 adds r4, 1 | r4++;
0x0006fa98 adds r3, 0x10 | r3 += 0x10;
0x0006fa9a cmp r1, r2 |
0x0006fa9c bne 0x6fa92 |
| } while (r1 != r2);
0x0006fa9e ldr r3, [r0] | r3 = *(r0);
0x0006faa0 movs r1, 0x1b | r1 = 0x1b;
0x0006faa2 mov r0, r5 | r0 = r5;
0x0006faa4 str r3, [sp] | *(sp) = r3;
0x0006faa6 movs r3, 0 | r3 = 0;
0x0006faa8 ldr r2, [r7] | r2 = *(r7);
0x0006faaa bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x0006faae cbz r0, 0x6fad0 |
| while (1) {
| label_4:
0x0006fab0 ldr.w r2, [pc, 0x434] |
0x0006fab4 ldr.w r3, [pc, 0x42c] | r3 = *(0x6fee4);
0x0006fab8 add r2, pc | r2 = 0xdf9a4;
0x0006faba ldr r3, [r2, r3] | r3 = *(0xdf9a4);
0x0006fabc ldr r2, [r3] | r2 = *(0xdf9a4);
0x0006fabe ldr r3, [sp, 0x24] | r3 = var_24h;
0x0006fac0 eors r2, r3 | r2 ^= r3;
0x0006fac2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0006fac6 bne.w 0x6fed0 | goto label_18;
| }
0x0006faca add sp, 0x2c |
0x0006facc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0006fad0 cmp r4, 1 |
| if (r4 != 1) {
0x0006fad2 beq 0x6faee |
0x0006fad4 ldr.w r2, [sb, 0x14] | r2 = *((sb + 0x14));
0x0006fad8 lsls r6, r4, 4 | r6 = r4 << 4;
0x0006fada ldr.w r1, [sb] | r1 = *(sb);
| label_10:
0x0006fade ldr r3, [r5] | r3 = *(r5);
0x0006fae0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0006fae2 add r3, r6 | r3 += r6;
0x0006fae4 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0006fae6 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x0006fae8 cmp r3, 0 |
| if (r3 != 0) {
0x0006faea bne.w 0x6fd82 | goto label_19;
| }
| }
| label_5:
0x0006faee ldr r6, [r5, 8] | r6 = *((r5 + 8));
0x0006faf0 cmp r6, 0 |
| if (r6 == 0) {
0x0006faf2 beq.w 0x6fd6e | goto label_20;
| }
| label_3:
0x0006faf6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006faf8 mov r1, r7 | r1 = r7;
0x0006fafa mov r0, r5 | r0 = r5;
0x0006fafc cmp r3, 0 |
0x0006fafe ite lt |
| if (r3 >= 0) {
0x0006fb00 ldrlt r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
| }
| if (r3 < 0) {
0x0006fb02 ldrge r3, [sp, 0x14] | r3 = var_14h;
| }
0x0006fb04 str r3, [sp, 0x18] | var_18h = r3;
0x0006fb06 bl 0x2bec8 | fcn_0002bec8 (r0, r1);
0x0006fb0a ldr.w sl, [r5, 0x28] | sl = *((r5 + 0x28));
0x0006fb0e mov fp, r0 |
0x0006fb10 ldrh r2, [r7, 0x32] | r2 = *((r7 + 0x32));
0x0006fb12 add.w r3, sl, 1 | r3 = sl + 1;
0x0006fb16 str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
| if (r0 != 0) {
0x0006fb18 cbz r0, 0x6fb20 |
0x0006fb1a ldr r3, [r0] | r3 = *(r0);
0x0006fb1c adds r3, 1 | r3++;
0x0006fb1e str r3, [r0] | *(r0) = r3;
| }
0x0006fb20 mvn r3, 7 | r3 = ~7;
0x0006fb24 movs r1, 0x77 | r1 = 0x77;
0x0006fb26 strd r2, fp, [sp] | __asm ("strd r2, fp, [sp]");
0x0006fb2a mov r0, r6 | r0 = r6;
0x0006fb2c mov r2, sl | r2 = sl;
0x0006fb2e str r3, [sp, 8] | var_8h = r3;
0x0006fb30 movs r3, 0 | r3 = 0;
0x0006fb32 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0006fb36 movs r2, 0x70 | r2 = 0x70;
0x0006fb38 mov r3, sb | r3 = sb;
0x0006fb3a str r2, [sp] | *(sp) = r2;
0x0006fb3c mov r1, r8 | r1 = r8;
0x0006fb3e mov r2, r4 | r2 = r4;
0x0006fb40 mov r0, r5 | r0 = r5;
0x0006fb42 bl 0x2fc88 | fcn_0002fc88 (r0, r1, r2, r3, r4);
0x0006fb46 ldrd sb, r3, [r6, 0x6c] | __asm ("ldrd sb, r3, [r6, 0x6c]");
0x0006fb4a cmp sb, r3 |
| if (sb >= r3) {
0x0006fb4c bge.w 0x6fe80 | goto label_21;
| }
0x0006fb50 add.w r3, sb, sb, lsl 2 | r3 = sb + (sb << 2);
0x0006fb54 ldr r0, [r6, 0x68] | r0 = *((r6 + 0x68));
0x0006fb56 add.w r2, sb, 1 | r2 = sb + 1;
0x0006fb5a lsls r3, r3, 2 | r3 <<= 2;
0x0006fb5c str r2, [r6, 0x6c] | *((r6 + 0x6c)) = r2;
0x0006fb5e movs r1, 0 | r1 = 0;
0x0006fb60 str r2, [sp, 0x1c] | var_1ch = r2;
0x0006fb62 mov.w ip, 0x23 |
0x0006fb66 adds r2, r0, r3 | r2 = r0 + r3;
0x0006fb68 strd r8, r1, [r2, 4] | __asm ("strd r8, r1, [r2, 4]");
0x0006fb6c strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x0006fb70 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_12:
0x0006fb74 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x0006fb76 cmp r3, 0 |
| if (r3 == 0) {
0x0006fb78 beq.w 0x6fd9e | goto label_22;
| }
0x0006fb7c subs r3, 1 | r3--;
0x0006fb7e uxtb r3, r3 | r3 = (int8_t) r3;
0x0006fb80 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x0006fb82 adds r3, 0x26 | r3 += 0x26;
0x0006fb84 ldr.w r3, [r5, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r5 + offset_0));
0x0006fb88 str r3, [sp, 0x10] | var_10h = r3;
| label_7:
0x0006fb8a ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x0006fb8c movs r2, 1 | r2 = 1;
0x0006fb8e mov r1, r7 | r1 = r7;
0x0006fb90 mov r0, r5 | r0 = r5;
0x0006fb92 cmp r3, 0 |
0x0006fb94 it eq |
| if (r3 != 0) {
0x0006fb96 moveq r3, r5 | r3 = r5;
| }
0x0006fb98 strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0006fb9a movs r3, 0 | r3 = 0;
0x0006fb9c strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [var_8h]");
0x0006fba0 mov r2, r8 | r2 = r8;
0x0006fba2 str r3, [sp] | *(sp) = r3;
0x0006fba4 add r3, sp, 0x20 | r3 += var_20h;
0x0006fba6 str r3, [sp, 4] | var_4h = r3;
0x0006fba8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006fbaa bl 0x6f88c | fcn_0006f88c (r0, r1, r2, r3, r4, r5, r6);
0x0006fbae movs r2, 0 | r2 = 0;
0x0006fbb0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006fbb2 str r2, [sp] | *(sp) = r2;
0x0006fbb4 movs r1, 0x8b | r1 = 0x8b;
0x0006fbb6 mov r2, sl | r2 = sl;
0x0006fbb8 mov r0, r6 | r0 = r6;
0x0006fbba bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fbbe ldr r2, [sp, 0x20] | r2 = var_20h;
0x0006fbc0 cmp r2, 0 |
| if (r2 != 0) {
0x0006fbc2 bne.w 0x6fda8 | goto label_23;
| }
| label_8:
0x0006fbc6 movs r2, 0 | r2 = 0;
0x0006fbc8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0006fbca str r2, [sp] | *(sp) = r2;
0x0006fbcc movs r1, 0x26 | r1 = 0x26;
0x0006fbce mov r2, r8 | r2 = r8;
0x0006fbd0 mov r0, r6 | r0 = r6;
0x0006fbd2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fbd6 ldr r3, [r6] | r3 = *(r6);
0x0006fbd8 cmp.w sb, 0 |
0x0006fbdc ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0006fbde ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006fbe2 it lt |
| if (sb >= 0) {
0x0006fbe4 addlt sb, r2, -1 | sb = r2 + -1;
| }
0x0006fbe8 cmp r3, 0 |
| if (r3 != 0) {
0x0006fbea bne.w 0x6fd28 | goto label_24;
| }
0x0006fbee ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x0006fbf0 add.w sb, sb, sb, lsl 2 | sb += (sb << 2);
0x0006fbf4 add.w r3, r3, sb, lsl 2 | r3 += (sb << 2);
0x0006fbf8 add.w sb, r8, 1 | sb = r8 + 1;
0x0006fbfc str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0006fbfe ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006fc00 cmp r3, 0 |
| if (r3 < 0) {
0x0006fc02 blt.w 0x6fd3c | goto label_25;
| }
| label_0:
0x0006fc06 mvn r2, 7 | r2 = ~7;
0x0006fc0a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006fc0c str r2, [sp, 8] | var_8h = r2;
0x0006fc0e movs r1, 0x71 | r1 = 0x71;
0x0006fc10 mov r2, sb | r2 = sb;
0x0006fc12 mov r0, r6 | r0 = r6;
0x0006fc14 strd r4, fp, [sp] | __asm ("strd r4, fp, [sp]");
0x0006fc18 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0006fc1c movs r2, 0x11 | r2 = 0x11;
| label_1:
0x0006fc1e ldr r4, [r6, 0x6c] | r4 = *((r6 + 0x6c));
0x0006fc20 cmp r4, 0 |
0x0006fc22 itttt gt |
| if (r4 <= 0) {
0x0006fc24 ldrgt r3, [r6, 0x68] | r3 = *((r6 + 0x68));
| }
| if (r4 <= 0) {
0x0006fc26 addgt r1, r4, r4, lsl 2 | r1 = r4 + (r4 << 2);
| }
| if (r4 <= 0) {
0x0006fc2a addgt r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| }
| if (r4 > 0) {
0x0006fc2e strh r2, [r3, -0x12] | *((r3 - 0x12)) = r2;
| }
0x0006fc32 ldr r3, [r6, 0x70] | r3 = *((r6 + 0x70));
0x0006fc34 cmp r4, r3 |
| if (r4 >= r3) {
0x0006fc36 bge.w 0x6fe6a | goto label_26;
| }
0x0006fc3a add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x0006fc3e ldr r0, [r6, 0x68] | r0 = *((r6 + 0x68));
0x0006fc40 movs r1, 0 | r1 = 0;
0x0006fc42 lsls r3, r3, 2 | r3 <<= 2;
0x0006fc44 add.w fp, r4, 1 |
0x0006fc48 mov.w ip, 0x21 |
0x0006fc4c str.w fp, [r6, 0x6c] | __asm ("str.w fp, [r6, 0x6c]");
0x0006fc50 adds r2, r0, r3 | r2 = r0 + r3;
0x0006fc52 strd sl, r1, [r2, 4] | __asm ("strd sl, r1, [r2, 4]");
0x0006fc56 strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x0006fc5a str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_11:
0x0006fc5e ldrb.w r3, [r7, 0x36] | r3 = *((r7 + 0x36));
0x0006fc62 cmp r3, 0 |
| if (r3 != 0) {
0x0006fc64 bne.w 0x6fdd0 | goto label_27;
| }
0x0006fc68 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x0006fc6a movs r2, 1 | r2 = 1;
0x0006fc6c cmp r3, 0 |
0x0006fc6e it eq |
| if (r3 != 0) {
0x0006fc70 moveq r3, r5 | r3 = r5;
| }
0x0006fc72 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
| label_9:
0x0006fc74 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006fc76 mov r2, sl | r2 = sl;
0x0006fc78 movs r1, 0x85 | r1 = 0x85;
0x0006fc7a mov r0, r6 | r0 = r6;
0x0006fc7c str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0006fc80 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fc84 ldrb.w r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x0006fc88 ands r3, r3, 2 | r3 &= 2;
| if (r3 == r3) {
0x0006fc8c beq.w 0x6fdc2 | goto label_28;
| }
0x0006fc90 movs r3, 0 | r3 = 0;
0x0006fc92 mov r2, sb | r2 = sb;
0x0006fc94 str r3, [sp] | *(sp) = r3;
0x0006fc96 movs r1, 0x8a | r1 = 0x8a;
0x0006fc98 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0006fc9a mov r0, r6 | r0 = r6;
0x0006fc9c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fca0 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0006fca2 cmp r3, 0 |
| if (r3 > 0) {
0x0006fca4 ble 0x6fcb6 |
0x0006fca6 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0006fca8 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0006fcac add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0006fcb0 movs r3, 0x10 | r3 = 0x10;
0x0006fcb2 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
0x0006fcb6 ldr r1, [sp, 0x10] | r1 = var_10h;
| if (r1 != 0) {
0x0006fcb8 cbz r1, 0x6fcca |
0x0006fcba ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x0006fcbc cmp r3, 7 |
0x0006fcbe itttt ls |
| if (r3 > 7) {
0x0006fcc0 addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x0006fcc2 addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x0006fcc4 strbls r2, [r5, 0x13] | *((r5 + 0x13)) = r2;
| }
| if (r3 <= 7) {
0x0006fcc6 strls r1, [r5, r3, lsl 2] | offset_1 = r3 << 2;
| *((r5 + offset_1)) = r1;
| goto label_29;
| }
| }
| label_29:
0x0006fcca movs r2, 0 | r2 = 0;
0x0006fccc mov r3, fp | r3 = fp;
0x0006fcce str r2, [sp] | *(sp) = r2;
0x0006fcd0 movs r1, 0x24 | r1 = 0x24;
0x0006fcd2 mov r2, sl | r2 = sl;
0x0006fcd4 mov r0, r6 | r0 = r6;
0x0006fcd6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fcda ldr r3, [r6] | r3 = *(r6);
0x0006fcdc cmp r4, 0 |
0x0006fcde ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0006fce0 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0006fce4 it lt |
| if (r4 >= 0) {
0x0006fce6 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0006fcea cmp r3, 0 |
| if (r3 != 0) {
0x0006fcec bne 0x6fd66 | goto label_30;
| }
0x0006fcee ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x0006fcf0 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x0006fcf4 add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_2:
0x0006fcf8 movs r4, 0 | r4 = 0;
0x0006fcfa str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0006fcfc movs r1, 0x7a | r1 = 0x7a;
0x0006fcfe mov r2, r8 | r2 = r8;
0x0006fd00 mov r3, r4 | r3 = r4;
0x0006fd02 mov r0, r6 | r0 = r6;
0x0006fd04 str r4, [sp] | *(sp) = r4;
0x0006fd06 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fd0a mov r3, r4 | r3 = r4;
0x0006fd0c mov r2, sb | r2 = sb;
0x0006fd0e movs r1, 0x7a | r1 = 0x7a;
0x0006fd10 mov r0, r6 | r0 = r6;
0x0006fd12 str r4, [sp] | *(sp) = r4;
0x0006fd14 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fd18 mov r3, r4 | r3 = r4;
0x0006fd1a mov r2, sl | r2 = sl;
0x0006fd1c movs r1, 0x7a | r1 = 0x7a;
0x0006fd1e mov r0, r6 | r0 = r6;
0x0006fd20 str r4, [sp] | *(sp) = r4;
0x0006fd22 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fd26 b 0x6fab0 |
| }
| label_24:
0x0006fd28 ldr r3, [pc, 0x1c0] |
0x0006fd2a add.w sb, r8, 1 | sb = r8 + 1;
0x0006fd2e add r3, pc | r3 = 0xdfc1e;
0x0006fd30 adds r3, 4 | r3 += 4;
0x0006fd32 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0006fd34 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006fd36 cmp r3, 0 |
| if (r3 >= 0) {
0x0006fd38 bge.w 0x6fc06 | goto label_0;
| }
| label_25:
0x0006fd3c movs r3, 0 | r3 = 0;
0x0006fd3e ldr r2, [sp, 0x18] | r2 = var_18h;
0x0006fd40 movs r1, 0x91 | r1 = 0x91;
0x0006fd42 str r3, [sp] | *(sp) = r3;
0x0006fd44 mov r0, r6 | r0 = r6;
0x0006fd46 mov r3, r4 | r3 = r4;
0x0006fd48 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fd4c mvn r2, 7 | r2 = ~7;
0x0006fd50 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0006fd52 str r2, [sp, 8] | var_8h = r2;
0x0006fd54 movs r1, 0x71 | r1 = 0x71;
0x0006fd56 mov r2, sb | r2 = sb;
0x0006fd58 mov r0, r6 | r0 = r6;
0x0006fd5a strd r4, fp, [sp] | __asm ("strd r4, fp, [sp]");
0x0006fd5e bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0006fd62 movs r2, 1 | r2 = 1;
0x0006fd64 b 0x6fc1e | goto label_1;
| label_30:
0x0006fd66 ldr r3, [pc, 0x188] |
0x0006fd68 add r3, pc | r3 = 0xdfc5e;
0x0006fd6a adds r3, 4 | r3 += 4;
0x0006fd6c b 0x6fcf8 | goto label_2;
| label_20:
0x0006fd6e ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
| if (r3 == 0) {
0x0006fd70 cbz r3, 0x6fd90 | goto label_31;
| }
| label_6:
0x0006fd72 mov r0, r5 | r0 = r5;
0x0006fd74 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x0006fd78 mov r6, r0 | r6 = r0;
0x0006fd7a cmp r0, 0 |
| if (r0 != 0) {
0x0006fd7c bne.w 0x6faf6 | goto label_3;
| }
0x0006fd80 b 0x6fab0 | goto label_4;
| label_19:
0x0006fd82 str r1, [sp] | *(sp) = r1;
0x0006fd84 movs r3, 1 | r3 = 1;
0x0006fd86 mov r1, r4 | r1 = r4;
0x0006fd88 mov r0, r5 | r0 = r5;
0x0006fd8a bl 0x2fbbc | fcn_0002fbbc (r0, r1, r2, r3, r4);
0x0006fd8e b 0x6faee | goto label_5;
| label_31:
0x0006fd90 ldr r3, [r5] | r3 = *(r5);
0x0006fd92 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0006fd94 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0006fd96 itt pl |
| if (r3 < r3) {
0x0006fd98 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0006fd9a strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x0006fd9c b 0x6fd72 | goto label_6;
| label_22:
0x0006fd9e ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0006fda0 adds r3, 1 | r3++;
0x0006fda2 str r3, [sp, 0x10] | var_10h = r3;
0x0006fda4 str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x0006fda6 b 0x6fb8a | goto label_7;
| label_23:
0x0006fda8 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0006fdaa mvn.w ip, r2 |
0x0006fdae ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x0006fdb0 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0006fdb4 cmn r2, r3 |
| if (r2 < r3) {
0x0006fdb6 bmi 0x6fe9e | goto label_32;
| }
0x0006fdb8 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x0006fdba ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0006fdbc str.w r1, [r3, ip, lsl 2] | __asm ("str.w r1, [r3, ip, lsl 2]");
0x0006fdc0 b 0x6fbc6 | goto label_8;
| label_28:
0x0006fdc2 mov r2, sb | r2 = sb;
0x0006fdc4 movs r1, 0x89 | r1 = 0x89;
0x0006fdc6 mov r0, r6 | r0 = r6;
0x0006fdc8 str r3, [sp] | *(sp) = r3;
0x0006fdca bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0006fdcc invalid |
| label_27:
0x0006fdd0 ldr r3, [r6, 0x70] | r3 = *((r6 + 0x70));
0x0006fdd2 cmp fp, r3 |
| if (fp >= r3) {
0x0006fdd4 bge 0x6fea6 | goto label_33;
| }
0x0006fdd6 add.w r1, fp, 1 | r1 += arg_1h;
0x0006fdda add.w r2, fp, fp, lsl 2 | r2 = fp + (fp << 2);
0x0006fdde str r1, [r6, 0x6c] | *((r6 + 0x6c)) = r1;
0x0006fde0 mov r3, fp | r3 = fp;
0x0006fde2 mov fp, r1 |
0x0006fde4 ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x0006fde6 lsls r2, r2, 2 | r2 <<= 2;
0x0006fde8 ldr r0, [r6, 0x68] | r0 = *((r6 + 0x68));
0x0006fdea vldr d16, [pc, 0xec] | __asm ("vldr d16, aav.0x000000ff");
0x0006fdee mov.w lr, 8 | lr = 8;
0x0006fdf2 add r1, r2 | r1 += r2;
0x0006fdf4 add.w ip, r1, 4 |
0x0006fdf8 str.w lr, [r0, r2] | __asm ("str.w lr, [r0, r2]");
0x0006fdfc movs r2, 0 | r2 = 0;
0x0006fdfe vst1.32 {d16}, [ip] | __asm ("vst1.32 {d16}, [ip]");
0x0006fe02 strd r2, r2, [r1, 0xc] | __asm ("strd r2, r2, [r1, 0xc]");
| label_14:
0x0006fe06 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0006fe08 movs r1, 0x84 | r1 = 0x84;
0x0006fe0a mov r0, r6 | r0 = r6;
0x0006fe0c str r3, [sp, 0x14] | var_14h = r3;
0x0006fe0e str r2, [sp] | *(sp) = r2;
0x0006fe10 ldrh r2, [r7, 0x32] | r2 = *((r7 + 0x32));
0x0006fe12 str r2, [sp, 4] | var_4h = r2;
0x0006fe14 mov r2, sl | r2 = sl;
0x0006fe16 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0006fe1a mov r2, r7 | r2 = r7;
0x0006fe1c movs r1, 2 | r1 = 2;
0x0006fe1e mov r0, r5 | r0 = r5;
0x0006fe20 bl 0x2ee48 | fcn_0002ee48 (r0, r1, r2, r3, r4, r5, r6);
0x0006fe24 ldr r2, [r6] | r2 = *(r6);
0x0006fe26 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0006fe28 ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x0006fe2a ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0006fe2e cmp r3, 0 |
0x0006fe30 it lt |
| if (r3 >= 0) {
0x0006fe32 addlt r3, r1, -1 | r3 = r1 + -1;
| }
0x0006fe34 adds r3, 0xff | r3 += 0xff;
| if (r2 != 0) {
0x0006fe36 cbnz r2, 0x6fe96 | goto label_34;
| }
0x0006fe38 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0006fe3a add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0006fe3e add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_13:
0x0006fe42 str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0006fe44 b 0x6fc74 | goto label_9;
| label_17:
0x0006fe46 movs r6, 0 | r6 = 0;
0x0006fe48 mov r4, r6 | r4 = r6;
| label_15:
0x0006fe4a ldr r3, [r3] | r3 = *(r3);
0x0006fe4c movs r1, 0x1b | r1 = 0x1b;
0x0006fe4e mov r0, r5 | r0 = r5;
0x0006fe50 str r3, [sp] | *(sp) = r3;
0x0006fe52 movs r3, 0 | r3 = 0;
0x0006fe54 ldr r2, [r7] | r2 = *(r7);
0x0006fe56 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x0006fe5a cmp r0, 0 |
| if (r0 != 0) {
0x0006fe5c bne.w 0x6fab0 | goto label_4;
| }
0x0006fe60 ldr.w r2, [sb, 0x14] | r2 = *((sb + 0x14));
0x0006fe64 ldr.w r1, [sb] | r1 = *(sb);
0x0006fe68 b 0x6fade | goto label_10;
| label_26:
0x0006fe6a movs r3, 0 | r3 = 0;
0x0006fe6c mov r2, sl | r2 = sl;
0x0006fe6e movs r1, 0x21 | r1 = 0x21;
0x0006fe70 mov r0, r6 | r0 = r6;
0x0006fe72 str r3, [sp] | *(sp) = r3;
0x0006fe74 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0006fe78 ldr.w fp, [r6, 0x6c] | fp = *((r6 + 0x6c));
0x0006fe7c mov r4, r0 | r4 = r0;
0x0006fe7e b 0x6fc5e | goto label_11;
| label_21:
0x0006fe80 movs r3, 0 | r3 = 0;
0x0006fe82 mov r2, r8 | r2 = r8;
0x0006fe84 str r3, [sp] | *(sp) = r3;
0x0006fe86 movs r1, 0x23 | r1 = 0x23;
0x0006fe88 mov r0, r6 | r0 = r6;
0x0006fe8a bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0006fe8e adds r3, r0, 1 | r3 = r0 + 1;
0x0006fe90 mov sb, r0 | sb = r0;
0x0006fe92 str r3, [sp, 0x1c] | var_1ch = r3;
0x0006fe94 b 0x6fb74 | goto label_12;
| label_34:
0x0006fe96 ldr r3, [pc, 0x5c] |
0x0006fe98 add r3, pc | r3 = 0xdfd92;
0x0006fe9a adds r3, 4 | r3 += 4;
0x0006fe9c b 0x6fe42 | goto label_13;
| label_32:
0x0006fe9e mov r2, ip | r2 = ip;
0x0006fea0 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0006fea4 b 0x6fbc6 | goto label_8;
| label_33:
0x0006fea6 movs r2, 0 | r2 = 0;
0x0006fea8 movs r3, 1 | r3 = 1;
0x0006feaa movs r1, 8 | r1 = 8;
0x0006feac mov r0, r6 | r0 = r6;
0x0006feae str r2, [sp] | *(sp) = r2;
0x0006feb0 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0006feb4 ldr.w fp, [r6, 0x6c] | fp = *((r6 + 0x6c));
0x0006feb8 mov r3, r0 | r3 = r0;
0x0006feba b 0x6fe06 | goto label_14;
| label_16:
0x0006febc movs r6, 0 | r6 = 0;
0x0006febe mov.w r4, 0x8000 | r4 = 0x8000;
0x0006fec2 sub.w r3, r3, 0x80000 | r3 -= 0x80000;
0x0006fec6 movt r6, 0xfff8 | r6 = (r6 & 0xFFFF) | 0xfff80000;
0x0006feca movt r4, 0xffff | r4 = (r4 & 0xFFFF) | 0xffff0000;
0x0006fece b 0x6fe4a | goto label_15;
| label_18:
0x0006fed0 blx 0x883c | fcn_0000883c ();
0x0006fed4 nop.w |
0x0006fed8 movs r0, r0 |
0x0006feda movs r0, r0 |
0x0006fedc movs r1, r0 | r1 = r0;
0x0006fede movs r0, r0 |
0x0006fee0 str r2, [sp, 0xd0] | *(arg_d0h) = r2;
0x0006fee2 movs r5, r0 | r5 = r0;
0x0006fee4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0006fee6 movs r0, r0 |
0x0006fee8 str r1, [sp, 0x380] | *(arg_380h) = r1;
0x0006feea movs r5, r0 | r5 = r0;
| if (r6 == 0) {
0x0006feec cbz r6, 0x6ff36 | goto label_35;
| }
0x0006feee movs r5, r0 | r5 = r0;
0x0006fef0 uxtb r4, r4 | r4 = (int8_t) r4;
0x0006fef2 movs r5, r0 | r5 = r0;
| if (r4 == 0) {
0x0006fef4 cbz r4, 0x6ff24 | void (*0x6ff24)() ();
| }
0x0006fef6 movs r5, r0 | r5 = r0;
| label_35:
0x0006ff36 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x6fef8 */
| #include <stdint.h>
|
; (fcn) fcn.0006fef8 () | void fcn_0006fef8 (int16_t arg_140h, int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0006fef8 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0006fefc ldr.w r8, [r1, 8] | r8 = *((r1 + 8));
0x0006ff00 cmp.w r8, 0 |
| if (r8 == 0) {
0x0006ff04 beq 0x6ff7c | goto label_9;
| }
0x0006ff06 ldr r4, [pc, 0xf4] |
0x0006ff08 mov r7, r1 | r7 = r1;
0x0006ff0a mov r6, r0 | r6 = r0;
0x0006ff0c mov r5, r2 | r5 = r2;
0x0006ff0e add r4, pc | r4 = 0xdff10;
| label_0:
0x0006ff10 cmp r5, 0 |
| if (r5 != 0) {
0x0006ff12 bne 0x6ff8a | goto label_10;
| }
| label_5:
0x0006ff14 ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
0x0006ff16 ldr r3, [r6] | r3 = *(r6);
0x0006ff18 cmp r0, 0 |
| if (r0 == 0) {
0x0006ff1a beq 0x6fff2 | goto label_11;
| }
0x0006ff1c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0006ff1e ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0006ff20 cmp r2, r0 |
| if (r2 == r0) {
0x0006ff22 beq 0x6ffe2 | goto label_12;
| }
0x0006ff24 movs r2, 0 | r2 = 0;
| do {
0x0006ff26 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x0006ff28 adds r2, 1 | r2++;
0x0006ff2a adds r3, 0x10 | r3 += 0x10;
0x0006ff2c cmp r0, r1 |
0x0006ff2e bne 0x6ff26 |
| } while (r0 != r1);
| label_8:
0x0006ff30 mov.w sb, 1 | sb = 1;
0x0006ff34 lsl.w sb, sb, r2 | sb <<= r2;
| label_6:
0x0006ff38 ldr.w sl, [r6, 0x74] | sl = *((r6 + 0x74));
0x0006ff3c cmp.w sl, 0 |
0x0006ff40 it eq |
| if (sl != 0) {
0x0006ff42 moveq sl, r6 | sl = r6;
| }
0x0006ff44 ldr.w r3, [sl, 0x54] | r3 = *((sl + 0x54));
0x0006ff48 tst.w r3, sb |
| if ((r3 & sb) == 0) {
0x0006ff4c bne 0x6ff5a |
0x0006ff4e cmp r2, 1 |
0x0006ff50 orr.w r3, r3, sb | r3 |= sb;
0x0006ff54 str.w r3, [sl, 0x54] | __asm ("str.w r3, [sl, 0x54]");
| if (r2 == 1) {
0x0006ff58 beq 0x6ffea | goto label_13;
| }
| }
| label_7:
0x0006ff5a ldr.w r3, [sl, 0x50] | r3 = *((sl + 0x50));
0x0006ff5e mov.w r2, -1 | r2 = -1;
0x0006ff62 mov r1, r8 | r1 = r8;
0x0006ff64 mov r0, r6 | r0 = r6;
0x0006ff66 orr.w r3, r3, sb | r3 |= sb;
0x0006ff6a str.w r3, [sl, 0x50] | __asm ("str.w r3, [sl, 0x50]");
0x0006ff6e bl 0x6fa4c | fcn_0006fa4c (r0, r1, r2, r3, r4, r5);
| label_1:
0x0006ff72 ldr.w r8, [r8, 0x14] | r8 = *((r8 + 0x14));
0x0006ff76 cmp.w r8, 0 |
| if (r8 != 0) {
0x0006ff7a bne 0x6ff10 | goto label_0;
| }
| do {
| label_9:
0x0006ff7c pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x0006ff80 ldr.w r8, [r8, 0x14] | r8 = *((r8 + 0x14));
0x0006ff84 cmp.w r8, 0 |
0x0006ff88 beq 0x6ff7c |
| } while (r8 == 0);
| label_10:
0x0006ff8a ldrh.w r3, [r8, 0x34] | r3 = *((r8 + 0x34));
0x0006ff8e cmp r3, 0 |
| if (r3 == 0) {
0x0006ff90 beq 0x6ff72 | goto label_1;
| }
0x0006ff92 ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x0006ff96 ldr.w sb, [r8, 0x20] | sb = *((r8 + 0x20));
0x0006ff9a add.w sl, r0, r3, lsl 1 | sl = r0 + (r3 << 1);
0x0006ff9e b 0x6ffa8 | goto label_14;
| label_3:
0x0006ffa0 cmp sl, r0 |
0x0006ffa2 add.w sb, sb, 4 | sb += 4;
| if (sl == r0) {
0x0006ffa6 beq 0x6ff80 | goto label_2;
| }
| label_14:
0x0006ffa8 ldrsh r3, [r0], 2 | r3 = *(r0);
| r0 += 2;
0x0006ffac cmp r3, 0 |
| if (r3 < 0) {
0x0006ffae blt 0x6ffa0 | goto label_3;
| }
0x0006ffb0 ldr.w r3, [sb] | r3 = *(sb);
0x0006ffb4 subs r2, r5, 1 | r2 = r5 - 1;
0x0006ffb6 add.w lr, r3, -1 | lr = r3 + -1;
| do {
| label_4:
0x0006ffba ldrb r3, [lr, 1]! | r3 = *((lr += 1));
0x0006ffbe ldrb ip, [r2, 1]! | ip = *((r2 += 1));
0x0006ffc2 add.w fp, r4, r3 |
0x0006ffc6 cmp r3, ip |
0x0006ffc8 add.w r1, r4, ip | r1 = r4 + ip;
| if (r3 == ip) {
0x0006ffcc beq 0x6ffdc | goto label_15;
| }
0x0006ffce ldrb.w ip, [fp, 0x140] | ip = *(arg_140h);
0x0006ffd2 ldrb.w r3, [r1, 0x140] | r3 = *((r1 + 0x140));
0x0006ffd6 cmp ip, r3 |
0x0006ffd8 beq 0x6ffba |
| } while (ip == r3);
0x0006ffda b 0x6ffa0 | goto label_3;
| label_15:
0x0006ffdc cmp r3, 0 |
| if (r3 != 0) {
0x0006ffde bne 0x6ffba | goto label_4;
| }
0x0006ffe0 b 0x6ff14 | goto label_5;
| label_12:
0x0006ffe2 mov.w sb, 1 | sb = 1;
0x0006ffe6 movs r2, 0 | r2 = 0;
0x0006ffe8 b 0x6ff38 | goto label_6;
| label_13:
0x0006ffea mov r0, sl | r0 = sl;
0x0006ffec bl 0x570d0 | fcn_000570d0 (r0);
0x0006fff0 b 0x6ff5a | goto label_7;
| label_11:
0x0006fff2 mov.w r2, 0x8000 |
0x0006fff6 movt r2, 0xffff | r2 = 0x-8000;
0x0006fffa b 0x6ff30 | goto label_8;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x70048 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00070048 () | void fcn_00070048 (int16_t arg_13h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_38h, int16_t arg_80h, int16_t arg_88h, int16_t arg_368h, int16_t arg_398h, arithmetic arg1, int16_t arg2, int16_t arg3) {
| int16_t var_1ch_2;
| int16_t var_38h_2;
| int16_t var_40h_2;
| int16_t var_48h;
| int16_t var_54h_2;
| int16_t var_5ch;
| int16_t var_64h;
| int16_t var_c4h;
| int16_t var_1ach;
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_1f0h;
| int16_t var_1ch;
| int16_t var_20h;
| arithmetic x;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h_2;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00070048 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007004c mov fp, r0 |
0x0007004e ldr.w r0, [pc, 0x754] | r0 = *(0x000707a4);
0x00070052 sub sp, 0x5c |
0x00070054 mov r5, r2 | r5 = r2;
0x00070056 ldr.w r3, [pc, 0x750] |
0x0007005a add r0, pc | r0 += pc;
0x0007005c ldr r2, [sp, 0x88] | r2 = *(arg_88h);
0x0007005e ldr r3, [r0, r3] | r3 = *((r0 + r3));
0x00070060 ldr r3, [r3] | r3 = *(0x707aa);
0x00070062 str r3, [sp, 0x54] | var_54h = r3;
0x00070064 mov.w r3, 0 | r3 = 0;
0x00070068 ldrd r3, r4, [sp, 0x80] | __asm ("ldrd r3, r4, [arg_80h]");
0x0007006c str r2, [sp, 0x30] | var_30h = r2;
0x0007006e str r1, [sp, 0x38] | var_38h = r1;
0x00070070 strd r3, r4, [sp, 0x10] | __asm ("strd r3, r4, [var_10h]");
0x00070074 ldr.w r3, [fp, 8] | r3 = *(arg_88h);
0x00070078 ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x0007007a str r3, [sp, 0x24] | x = r3;
0x0007007c ldr r3, [r3, 0x70] | r3 = *((r3 + 0x70));
0x0007007e str r2, [sp, 0x40] | var_40h = r2;
0x00070080 cmp r2, r3 |
| if (r2 >= r3) {
0x00070082 bge.w 0x70724 | goto label_23;
| }
0x00070086 ldr r0, [sp, 0x40] | r0 = var_40h;
0x00070088 movs r1, 0 | r1 = 0;
0x0007008a ldr r4, [sp, 0x24] | r4 = x;
0x0007008c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00070090 add.w r2, r0, r0, lsl 2 | r2 = r0 + (r0 << 2);
0x00070094 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00070096 adds r0, 1 | r0++;
0x00070098 lsls r2, r2, 2 | r2 <<= 2;
0x0007009a str r0, [r4, 0x6c] | *((r4 + 0x6c)) = r0;
0x0007009c movs r0, 0xe | r0 = 0xe;
0x0007009e str r0, [r3, r2] | *((r3 + r2)) = r0;
0x000700a0 add r3, r2 | r3 += r2;
0x000700a2 adds r2, r3, 4 | r2 = r3 + 4;
0x000700a4 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000700a8 strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_14:
0x000700ac ldr r3, [sp, 0x38] | r3 = var_38h;
0x000700ae ldr r7, [r3, 0xc] | r7 = *((r3 + 0xc));
0x000700b0 ldr r4, [r3, 0x18] | r4 = *((r3 + 0x18));
0x000700b2 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000700b4 add.w r7, r7, r7, lsl 1 | r7 += (r7 << 1);
0x000700b8 str r3, [sp, 0x34] | var_34h = r3;
0x000700ba ldr r3, [sp, 0x30] | r3 = var_30h;
0x000700bc add.w r7, r4, r7, lsl 4 | r7 = r4 + (r7 << 4);
0x000700c0 cmp r4, r7 |
0x000700c2 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000700c4 str r3, [sp, 0x2c] | var_2ch = r3;
| if (r4 >= r7) {
0x000700c6 bhs.w 0x70792 | goto label_24;
| }
0x000700ca ldr.w r3, [pc, 0x6e0] | r3 = *(0x000707ac);
0x000700ce str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_28h]");
0x000700d2 add r3, pc | r3 += pc;
0x000700d4 str r3, [sp, 0x3c] | var_3ch = r3;
0x000700d6 movs r3, 0 | r3 = 0;
0x000700d8 mov sb, r3 | sb = r3;
0x000700da mov sl, r3 | sl = r3;
0x000700dc mov fp, r3 |
0x000700de str r3, [sp, 0x1c] | var_1ch = r3;
0x000700e0 str r3, [sp, 0x20] | var_20h = r3;
| do {
0x000700e2 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x000700e4 ands r6, r3, 2 | r6 = r3 & 2;
| if (r6 == r3) {
0x000700e8 beq.w 0x704a4 | goto label_25;
| }
| label_2:
0x000700ec ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x000700f0 mov r1, r5 | r1 = r5;
0x000700f2 mov r0, r4 | r0 = r4;
0x000700f4 bl 0x18a90 | r0 = fcn_00018a90 (r0, r1);
| if (r0 != 0) {
0x000700f8 cbz r0, 0x7013e |
0x000700fa ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000700fc cmp r3, 0x3f |
0x000700fe itt gt |
| if (r3 <= 0x3f) {
0x00070100 movgt r8, 0 | r8 = 0;
| }
| if (r3 > 0x3f) {
0x00070104 mov.w r6, -0x80000000 | r6 = -0x80000000;
| }
| if (r3 <= 0x3f) {
0x00070108 bgt 0x70122 |
0x0007010a movs r1, 1 | r1 = 1;
0x0007010c sub.w r6, r3, 0x20 | r6 = r3 - 0x20;
0x00070110 rsb.w r2, r3, 0x20 | r2 = 0x20 - r3;
0x00070114 lsl.w r6, r1, r6 | r6 = r1 << r6;
0x00070118 lsr.w r2, r1, r2 | r2 = r1 >> r2;
0x0007011c lsl.w r8, r1, r3 | r8 = r1 << r3;
0x00070120 orrs r6, r2 | r6 |= r2;
| }
0x00070122 cmp.w sb, 0 |
| if (sb == 0) {
0x00070126 beq.w 0x7050e | goto label_26;
| }
| label_4:
0x0007012a and.w r3, r8, sl | r3 = r8 & sl;
0x0007012e and.w r2, r6, fp | r2 = r6 & fp;
0x00070132 orrs r3, r2 | r3 |= r2;
0x00070134 it ne |
| if (r3 == r2) {
0x00070136 movne sb, 1 | sb = 1;
| }
| if (r3 == r2) {
0x0007013a beq.w 0x704da | goto label_27;
| }
| }
| label_3:
0x0007013e adds r4, 0x30 | r4 += 0x30;
0x00070140 cmp r7, r4 |
0x00070142 bhi 0x700e2 |
| } while (r7 > r4);
0x00070144 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00070146 mov r2, fp | r2 = fp;
0x00070148 ldr.w fp, [sp, 0x28] | fp = var_28h;
0x0007014c mvns r4, r2 | r4 = ~r2;
0x0007014e mvn.w ip, sl |
0x00070152 orr r4, r4, 0x80000000 | r4 |= 0x80000000;
0x00070156 uxth r2, r3 | r2 = (int16_t) r3;
| label_22:
0x00070158 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x0007015a ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x0007015c strh r2, [r6, 0x2c] | *((r6 + 0x2c)) = r2;
0x0007015e strh r2, [r6, 0x18] | *((r6 + 0x18)) = r2;
0x00070160 ands r4, r1 | r4 &= r1;
0x00070162 ldr r2, [r5, 0x30] | r2 = *((r5 + 0x30));
0x00070164 and.w sb, r2, ip | sb = r2 & ip;
0x00070168 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0007016a ldrsh.w r0, [r2, 0x22] | r0 = *((r2 + 0x22));
0x0007016e movw r2, 0x4241 | r2 = 0x4241;
0x00070172 str r2, [r6, 0x28] | *((r6 + 0x28)) = r2;
0x00070174 cmp r0, 0x3f |
0x00070176 mov r2, r0 | r2 = r0;
0x00070178 str r0, [sp, 0x28] | var_28h = r0;
0x0007017a it ge |
| if (r0 < 0x3f) {
0x0007017c movge r0, 0x3f | r0 = 0x3f;
| }
0x0007017e cmp r2, 0 |
0x00070180 mov sl, r0 | sl = r0;
| if (r2 <= 0) {
0x00070182 ble 0x701aa | goto label_28;
| }
0x00070184 movs r2, 0 | r2 = 0;
| do {
0x00070186 rsb.w r6, r2, 0x20 | r6 = 0x20 - r2;
0x0007018a lsr.w r0, sb, r2 | r0 = sb >> r2;
0x0007018e lsl.w r6, r4, r6 | r6 = r4 << r6;
0x00070192 orrs r0, r6 | r0 |= r6;
0x00070194 sub.w r6, r2, 0x20 | r6 = r2 - 0x20;
0x00070198 lsr.w r6, r4, r6 | r6 = r4 >> r6;
0x0007019c adds r2, 1 | r2++;
0x0007019e orrs r0, r6 | r0 |= r6;
0x000701a0 lsls r6, r0, 0x1f | r6 = r0 << 0x1f;
0x000701a2 it mi |
| if (r6 >= r0) {
0x000701a4 addmi r3, 1 | r3++;
| }
0x000701a6 cmp sl, r2 |
0x000701a8 bne 0x70186 |
| } while (sl != r2);
| label_28:
0x000701aa cmp r1, 0 |
0x000701ac ldr.w r0, [fp] | r0 = *(fp);
0x000701b0 ittt lt |
| if (r1 >= 0) {
0x000701b2 ldrlt r2, [sp, 0x28] | r2 = var_28h;
| }
| if (r1 >= 0) {
0x000701b4 sublt r2, 0x3f | r2 -= 0x3f;
| }
| if (r1 >= 0) {
0x000701b6 addlt r3, r3, r2 | r3 += r2;
| }
0x000701b8 movs r2, 0 | r2 = 0;
0x000701ba adds r3, 1 | r3++;
0x000701bc sxth r1, r3 | __asm ("sxth r1, r3");
0x000701be str r3, [sp, 0x3c] | var_3ch = r3;
0x000701c0 add r3, sp, 0x50 | r3 += var_50h;
0x000701c2 bl 0x2310c | fcn_0002310c (r0, r1, r2, r3);
0x000701c6 str r0, [sp, 0x20] | var_20h = r0;
0x000701c8 cmp r0, 0 |
| if (r0 == 0) {
0x000701ca beq.w 0x70578 | goto label_17;
| }
0x000701ce ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000701d0 str r0, [r3, 0x20] | *((r3 + 0x20)) = r0;
0x000701d2 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000701d4 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x000701d6 ldr.w r3, [pc, 0x5d8] | r3 = *(0x000707b0);
0x000701da add r3, pc | r3 += pc;
0x000701dc str r3, [r0] | *(r0) = r3;
0x000701de ldr r3, [sp, 0x38] | r3 = var_38h;
0x000701e0 ldr r6, [r3, 0x18] | r6 = *((r3 + 0x18));
0x000701e2 cmp r7, r6 |
| if (r7 < r6) {
0x000701e4 bls.w 0x70756 | goto label_29;
| }
0x000701e8 mov.w ip, 0 |
0x000701ec str.w sl, [sp, 0x44] | __asm ("str.w sl, [var_44h]");
0x000701f0 str.w sb, [sp, 0x48] | __asm ("str.w sb, [var_48h_2]");
0x000701f4 mov r8, ip | r8 = ip;
0x000701f6 str r4, [sp, 0x4c] | var_4ch = r4;
0x000701f8 mov sl, ip | sl = ip;
0x000701fa mov sb, ip | sb = ip;
0x000701fc mov r4, r0 | r4 = r0;
0x000701fe b 0x70206 |
| while (r0 == 0) {
| label_0:
0x00070200 adds r6, 0x30 | r6 += 0x30;
0x00070202 cmp r7, r6 |
| if (r7 < r6) {
0x00070204 bls 0x70286 | goto label_30;
| }
| label_1:
0x00070206 ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x0007020a mov r1, r5 | r1 = r5;
0x0007020c mov r0, r6 | r0 = r6;
0x0007020e bl 0x18a90 | r0 = fcn_00018a90 (r0, r1);
0x00070212 cmp r0, 0 |
0x00070214 beq 0x70200 |
| }
0x00070216 ldr r1, [r6, 0x18] | r1 = *((r6 + 0x18));
0x00070218 cmp r1, 0x3f |
0x0007021a itt gt |
| if (r1 <= 0x3f) {
0x0007021c movgt r0, 0 | r0 = 0;
| }
| if (r1 <= 0x3f) {
0x0007021e movgt r2, -0x80000000 | r2 = -0x80000000;
| }
| if (r1 <= 0x3f) {
0x00070222 bgt 0x7023a |
0x00070224 movs r0, 1 | r0 = 1;
0x00070226 sub.w r2, r1, 0x20 | r2 = r1 - 0x20;
0x0007022a rsb.w r3, r1, 0x20 | r3 = 0x20 - r1;
0x0007022e lsl.w r2, r0, r2 | r2 = r0 << r2;
0x00070232 lsr.w r3, r0, r3 | r3 = r0 >> r3;
0x00070236 lsls r0, r1 | r0 <<= r1;
0x00070238 orrs r2, r3 | r2 |= r3;
| }
0x0007023a and.w r3, r0, sb | r3 = r0 & sb;
0x0007023e and.w ip, r2, sl |
0x00070242 orrs.w r3, r3, ip | r3 |= ip;
| if (r3 != r3) {
0x00070246 bne 0x70200 | goto label_0;
| }
0x00070248 ldr r3, [r6] | r3 = *(r6);
0x0007024a orr.w sl, r2, sl | sl = r2 | sl;
0x0007024e ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00070250 orr.w sb, r0, sb | sb = r0 | sb;
0x00070254 strh.w r1, [r2, r8, lsl 1] | offset_0 = r8 << 1;
| *((r2 + offset_0)) = r1;
0x00070258 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0007025a ldrd r1, r3, [r3, 0xc] | __asm ("ldrd r1, r3, [r3, 0xc]");
0x0007025e lsls r0, r2, 0x15 | r0 = r2 << 0x15;
0x00070260 mov r0, fp | r0 = fp;
0x00070262 itet mi |
| if (r0 >= r2) {
0x00070264 movmi r2, r1 | r2 = r1;
| }
| if (r0 < r2) {
0x00070266 movpl r2, r3 | r2 = r3;
| }
| if (r0 >= r2) {
0x00070268 movmi r1, r3 | r1 = r3;
| }
0x0007026a bl 0x2c0bc | r0 = fcn_0002c0bc (r0, r1, r2);
0x0007026e cmp r0, 0 |
| if (r0 == 0) {
0x00070270 beq.w 0x70706 | goto label_31;
| }
0x00070274 ldr r3, [r0] | r3 = *(r0);
| label_12:
0x00070276 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x00070278 adds r6, 0x30 | r6 += 0x30;
0x0007027a cmp r7, r6 |
0x0007027c str.w r3, [r2, r8, lsl 2] | __asm ("str.w r3, [r2, r8, lsl 2]");
0x00070280 add.w r8, r8, 1 | r8++;
| if (r7 > r6) {
0x00070284 bhi 0x70206 | goto label_1;
| }
| label_30:
0x00070286 ldrd sl, sb, [sp, 0x44] | __asm ("ldrd sl, sb, [var_44h]");
0x0007028a lsl.w r7, r8, 1 | r7 = r8 << 1;
0x0007028e ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x00070290 lsl.w r1, r8, 2 | r1 = r8 << 2;
| label_19:
0x00070294 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00070296 ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x00070298 ldr r0, [r3, 0x20] | r0 = *((r3 + 0x20));
0x0007029a ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007029c cmp r3, 0 |
| if (r3 <= 0) {
0x0007029e ble 0x702e6 | goto label_32;
| }
0x000702a0 ldr.w r7, [pc, 0x510] | r7 = *(0x000707b4);
0x000702a4 movs r3, 0 | r3 = 0;
0x000702a6 add r7, pc | r7 += pc;
0x000702a8 add.w r7, r7, 0x2dc | r7 += 0x2dc;
| do {
0x000702ac rsb.w r1, r3, 0x20 | r1 = 0x20 - r3;
0x000702b0 lsr.w r2, sb, r3 | r2 = sb >> r3;
0x000702b4 lsl.w r1, r4, r1 | r1 = r4 << r1;
0x000702b8 orrs r2, r1 | r2 |= r1;
0x000702ba sub.w r1, r3, 0x20 | r1 = r3 - 0x20;
0x000702be lsr.w r1, r4, r1 | r1 = r4 >> r1;
0x000702c2 orrs r2, r1 | r2 |= r1;
0x000702c4 lsls r2, r2, 0x1f | r2 <<= 0x1f;
0x000702c6 it mi |
| if (r2 < r2) {
0x000702c8 strhmi r3, [r6, r8, lsl 1] | __asm ("strhmi r3, [r6, r8, lsl 1]");
| }
0x000702cc add.w r3, r3, 1 | r3++;
0x000702d0 itt mi |
| if (r2 >= r2) {
0x000702d2 strmi r7, [r0, r8, lsl 2] | offset_1 = r8 << 2;
| *((r0 + offset_1)) = r7;
| }
| if (r2 < r2) {
0x000702d6 add.w r8, r8, 1 | r8++;
| }
0x000702da cmp sl, r3 |
0x000702dc bne 0x702ac |
| } while (sl != r3);
0x000702de lsl.w r7, r8, 1 | r7 = r8 << 1;
0x000702e2 lsl.w r1, r8, 2 | r1 = r8 << 2;
| label_32:
0x000702e6 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x000702e8 cmp r3, 0 |
| if (r3 < 0) {
0x000702ea blt.w 0x70636 | goto label_33;
| }
| label_8:
0x000702ee ldr.w r4, [pc, 0x4c8] | r4 = *(0x000707b8);
0x000702f2 movw ip, 0xffff | ip = 0xffff;
0x000702f6 ldr.w r2, [fp, 0x28] | r2 = *(arg_28h);
0x000702fa strh.w ip, [r6, r7] | *((r6 + r7)) = ip;
0x000702fe add r4, pc | r4 += pc;
0x00070300 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00070302 add.w r4, r4, 0x2dc | r4 += 0x2dc;
0x00070306 adds r5, r2, 1 | r5 = r2 + 1;
0x00070308 str r4, [r0, r1] | *((r0 + r1)) = r4;
0x0007030a ldr r1, [sp, 0x30] | r1 = var_30h;
0x0007030c str.w r5, [fp, 0x28] | __asm ("str.w r5, [arg_28h]");
0x00070310 ldr r0, [sp, 0x24] | r0 = x;
0x00070312 str r2, [r1, 8] | *((r1 + 8)) = r2;
0x00070314 movs r1, 0 | r1 = 0;
0x00070316 str r1, [sp] | *(sp) = r1;
0x00070318 movs r1, 0x74 | r1 = 0x74;
0x0007031a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007031e ldr r1, [sp, 0x20] | r1 = var_20h;
0x00070320 mov r0, fp | r0 = fp;
0x00070322 bl 0x2bf78 | fcn_0002bf78 (r0, r1);
0x00070326 ldr.w r3, [fp] | r3 = *(fp);
0x0007032a ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0007032c ands r3, r3, 0x80000 | r3 &= 0x80000;
| if (r3 == r3) {
0x00070330 beq.w 0x7067a | goto label_34;
| }
| label_9:
0x00070334 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00070336 ldr r3, [r3] | r3 = *(r3);
0x00070338 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0007033a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0007033c str r2, [sp, 0x10] | var_10h = r2;
0x0007033e ldrb.w r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x00070342 lsl.w sl, r3, 6 | sl = r3 << 6;
0x00070346 ldr r3, [sp, 0x24] | r3 = x;
0x00070348 add r2, sl | r2 += sl;
0x0007034a ldrd r5, r1, [r3, 0x6c] | __asm ("ldrd r5, r1, [r3, 0x6c]");
0x0007034e ldrb.w r3, [r2, 0x2d] | r3 = *((r2 + 0x2d));
0x00070352 ands r3, r3, 0x20 | r3 &= 0x20;
| if (r3 != r3) {
0x00070356 bne.w 0x705a6 | goto label_35;
| }
0x0007035a ldr r2, [sp, 0x30] | r2 = var_30h;
0x0007035c cmp r5, r1 |
0x0007035e ldr r2, [r2, 4] | r2 = *((r2 + 4));
| if (r5 >= r1) {
0x00070360 bge.w 0x7075e | goto label_36;
| }
0x00070364 ldr r4, [sp, 0x24] | r4 = x;
0x00070366 add.w r1, r5, r5, lsl 2 | r1 = r5 + (r5 << 2);
0x0007036a adds r0, r5, 1 | r0 = r5 + 1;
0x0007036c lsls r1, r1, 2 | r1 <<= 2;
0x0007036e ldr r6, [r4, 0x68] | r6 = *((r4 + 0x68));
0x00070370 str r0, [r4, 0x6c] | *((r4 + 0x6c)) = r0;
0x00070372 mov r4, r5 | r4 = r5;
0x00070374 mov r5, r3 | r5 = r3;
0x00070376 adds r0, r6, r1 | r0 = r6 + r1;
0x00070378 strd r2, r3, [r0, 4] | __asm ("strd r2, r3, [r0, 4]");
0x0007037c strd r3, r3, [r0, 0xc] | __asm ("strd r3, r3, [r0, 0xc]");
0x00070380 movs r3, 0x23 | r3 = 0x23;
0x00070382 str r3, [r6, r1] | *((r6 + r1)) = r3;
| label_20:
0x00070384 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00070386 cmp r1, 0 |
| if (r1 == 0) {
0x00070388 beq.w 0x7061c | goto label_37;
| }
| label_5:
0x0007038c ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x00070390 mov r0, fp | r0 = fp;
0x00070392 subs r3, 1 | r3--;
0x00070394 mov r2, r3 | r2 = r3;
0x00070396 str r3, [sp, 0x28] | var_28h = r3;
0x00070398 str.w r3, [fp, 0x38] | __asm ("str.w r3, [arg_38h]");
0x0007039c movs r3, 0x10 | r3 = 0x10;
0x0007039e bl 0x67af8 | fcn_00067af8 (r0, r1, r2, r3);
0x000703a2 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000703a4 ldr r3, [r2, 0x28] | r3 = *((r2 + 0x28));
0x000703a6 orr r3, r3, 0x20000 | r3 |= 0x20000;
0x000703aa str r3, [r2, 0x28] | *((r2 + 0x28)) = r3;
0x000703ac ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x000703b0 cmp r3, 0 |
| if (r3 == 0) {
0x000703b2 beq.w 0x7062a | goto label_38;
| }
| label_6:
0x000703b6 subs r3, 1 | r3--;
0x000703b8 uxtb r3, r3 | r3 = (int8_t) r3;
0x000703ba strb.w r3, [fp, 0x13] | *(arg_13h) = r3;
0x000703be adds r3, 0x26 | r3 += 0x26;
0x000703c0 ldr.w r6, [fp, r3, lsl 2] | offset_2 = r3 << 2;
| r6 = *((fp + offset_2));
| label_7:
0x000703c4 ldr r7, [sp, 0x30] | r7 = var_30h;
0x000703c6 mov.w sb, 0 | sb = 0;
0x000703ca strd sb, sb, [sp, 8] | __asm ("strd sb, sb, [var_8h]");
0x000703ce mov r3, r6 | r3 = r6;
0x000703d0 strd sb, sb, [sp] | __asm ("strd sb, sb, [sp]");
0x000703d4 mov r0, fp | r0 = fp;
0x000703d6 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x000703d8 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000703da bl 0x6f88c | fcn_0006f88c (r0, r1, r2, r3, r4, r5, r6);
0x000703de ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x000703e0 str r0, [sp, 0x20] | var_20h = r0;
0x000703e2 cmp r2, 0 |
| if (r2 != 0) {
0x000703e4 bne.w 0x70710 | goto label_39;
| }
| label_13:
0x000703e8 movs r3, 0 | r3 = 0;
0x000703ea ldr r7, [sp, 0x24] | r7 = x;
0x000703ec str r3, [sp] | *(sp) = r3;
0x000703ee movs r1, 0x8a | r1 = 0x8a;
0x000703f0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000703f2 mov r0, r7 | r0 = r7;
0x000703f4 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000703f6 mov r3, r6 | r3 = r6;
0x000703f8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000703fc ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x000703fe cmp r3, 0 |
| if (r3 > 0) {
0x00070400 ble 0x70412 |
0x00070402 ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x00070404 add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x00070408 add.w r2, r2, r1, lsl 2 | r2 += (r1 << 2);
0x0007040c movs r1, 0x10 | r1 = 0x10;
0x0007040e strh r1, [r2, -0x12] | *((r2 - 0x12)) = r1;
| }
0x00070412 ldr r2, [sp, 0x1c] | r2 = var_1ch;
| if (r2 != 0) {
0x00070414 cbz r2, 0x7042e |
0x00070416 ldr r1, [sp, 0x24] | r1 = x;
0x00070418 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0007041a ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x0007041c mvns r2, r2 | r2 = ~r2;
0x0007041e ldrd r1, r7, [r0, 0x38] | __asm ("ldrd r1, r7, [r0, 0x38]");
0x00070422 cmn r7, r1 |
| if (r7 < r1) {
0x00070424 bmi.w 0x7074e | goto label_40;
| }
0x00070428 ldr r1, [r0, 0x40] | r1 = *((r0 + 0x40));
0x0007042a str.w r3, [r1, r2, lsl 2] | __asm ("str.w r3, [r1, r2, lsl 2]");
| }
| label_18:
0x0007042e movs r4, r0 | r4 = r0;
0x00070430 invalid |
0x00070434 asrs r5, r5, 0x20 | r5 >>= 0x20;
0x00070436 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00070438 ands r1, r1, 0x20 | r1 &= 0x20;
0x0007043c ldr r3, [r3, 4] | r3 = *((r3 + 4));
| if (r1 == r1) {
0x0007043e beq 0x70528 | goto label_41;
| }
0x00070440 cmp r5, 0 |
0x00070442 ldr r0, [sp, 0x24] | r0 = x;
0x00070444 it lt |
| if (r5 >= 0) {
0x00070446 ldrlt r2, [sp, 0x24] | r2 = x;
| }
0x00070448 ldr r1, [sp, 0x20] | r1 = var_20h;
0x0007044a it lt |
| if (r5 >= 0) {
0x0007044c ldrlt r5, [r2, 0x6c] | r5 = *((r2 + 0x6c));
| }
0x0007044e ldr r2, [r0] | r2 = *(r0);
0x00070450 add r1, r8 | r1 += r8;
0x00070452 it lt |
| if (r5 >= 0) {
0x00070454 addlt r5, r5, -1 | r5 += -1;
| }
0x00070458 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0007045c cmp r2, 0 |
| if (r2 != 0) {
0x0007045e bne.w 0x70740 | goto label_42;
| }
0x00070462 ldr r2, [r0, 0x68] | r2 = *((r0 + 0x68));
0x00070464 add.w r5, r5, r5, lsl 2 | r5 += (r5 << 2);
0x00070468 add.w r2, r2, r5, lsl 2 | r2 += (r5 << 2);
| label_16:
0x0007046c str r1, [r2, 8] | *((r2 + 8)) = r1;
0x0007046e ldr r2, [sp, 0x30] | r2 = var_30h;
0x00070470 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00070472 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00070474 add r1, sl | r1 += sl;
0x00070476 add.w r5, r1, 0x28 | r5 = r1 + 0x28;
0x0007047a str r2, [sp, 4] | var_4h = r2;
0x0007047c ldr r2, [r1, 0x28] | r2 = *((r1 + 0x28));
0x0007047e str r2, [sp] | *(sp) = r2;
0x00070480 mov r2, r4 | r2 = r4;
0x00070482 ldr.w r1, [fp, 8] | r1 = *(arg_88h);
0x00070486 ldr.w r0, [fp] | r0 = *(fp);
0x0007048a bl 0x12374 | fcn_00012374 (r0, r1, r2, r3, r4, r5);
0x0007048e ldr r7, [sp, 0x24] | r7 = x;
0x00070490 mov r1, r4 | r1 = r4;
0x00070492 mov r0, r7 | r0 = r7;
0x00070494 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x00070498 ldrb r3, [r5, 5] | r3 = *((r5 + 5));
0x0007049a ldr r1, [r7, 0x6c] | r1 = *((r7 + 0x6c));
0x0007049c bfc r3, 5, 1 | value_3 = BIT_MASK (1, );
| value_3 = ~value_3;
| r3 &= value_3;
0x000704a0 strb r3, [r5, 5] | *((r5 + 5)) = r3;
0x000704a2 b 0x7054e | goto label_43;
| label_25:
0x000704a4 ldr.w r8, [r4] | r8 = *(r4);
0x000704a8 mov r1, r5 | r1 = r5;
0x000704aa mov r0, r8 | r0 = r8;
0x000704ac bl 0x31600 | r0 = fcn_00031600 (r0, r1);
0x000704b0 cmp r0, 0 |
| if (r0 == 0) {
0x000704b2 beq.w 0x700ec | goto label_2;
| }
0x000704b6 cmp.w r8, 0 |
| if (r8 != 0) {
0x000704ba beq 0x704cc |
0x000704bc ldr r3, [sp, 0x28] | r3 = var_28h;
0x000704be mov r1, r8 | r1 = r8;
0x000704c0 mov r2, r6 | r2 = r6;
0x000704c2 ldr r0, [r3] | r0 = *(r3);
0x000704c4 mov r3, r6 | r3 = r6;
0x000704c6 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x000704ca mov r8, r0 | r8 = r0;
| }
0x000704cc ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000704ce mov r2, r8 | r2 = r8;
0x000704d0 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000704d2 bl 0x30378 | fcn_00030378 (r0, r1, r2);
0x000704d6 str r0, [sp, 0x1c] | var_1ch = r0;
0x000704d8 b 0x700ec | goto label_2;
| label_27:
0x000704da ldr r3, [sp, 0x20] | r3 = var_20h;
0x000704dc ldr r1, [sp, 0x28] | r1 = var_28h;
0x000704de add.w sb, r3, 1 | sb = r3 + 1;
0x000704e2 ldr r0, [r1] | r0 = *(r1);
0x000704e4 mov r2, sb | r2 = sb;
0x000704e6 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000704e8 bl 0x21910 | r0 = fcn_00021910 (r0, r1, r2);
0x000704ec cmp r0, 0 |
| if (r0 != 0) {
0x000704ee bne.w 0x70748 | goto label_44;
| }
0x000704f2 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000704f4 orr.w sl, r8, sl | sl = r8 | sl;
0x000704f8 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000704fa orr.w fp, r6, fp |
0x000704fe str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_20h]");
0x00070502 mov.w sb, 1 | sb = 1;
0x00070506 ldr r3, [r1, 0x34] | r3 = *((r1 + 0x34));
0x00070508 str.w r4, [r3, r2, lsl 2] | __asm ("str.w r4, [r3, r2, lsl 2]");
0x0007050c b 0x7013e | goto label_3;
| label_26:
0x0007050e ldr r1, [sp, 0x34] | r1 = var_34h;
0x00070510 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00070514 mov.w r0, 0x11c | r0 = 0x11c;
0x00070518 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0007051a ldr.w r3, [r2, r3, lsl 2] | offset_4 = r3 << 2;
| r3 = *((r2 + offset_4));
0x0007051e ldr r2, [r1] | r2 = *(r1);
0x00070520 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x00070522 blx 0x8b60 | fcn_00008b60 ();
0x00070526 b 0x7012a | goto label_4;
| label_41:
0x00070528 ldr r5, [sp, 0x24] | r5 = x;
0x0007052a mov r2, r3 | r2 = r3;
0x0007052c str r1, [sp] | *(sp) = r1;
0x0007052e adds r3, r4, 1 | r3 = r4 + 1;
0x00070530 movs r1, 0x26 | r1 = 0x26;
0x00070532 mov r0, r5 | r0 = r5;
0x00070534 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00070538 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x0007053a cmp r1, 0 |
| if (r1 > 0) {
0x0007053c ble 0x7054e |
0x0007053e ldr r3, [r5, 0x68] | r3 = *((r5 + 0x68));
0x00070540 add.w r2, r1, r1, lsl 2 | r2 = r1 + (r1 << 2);
0x00070544 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00070548 movs r2, 3 | r2 = 3;
0x0007054a strh r2, [r3, -0x12] | *((r3 - 0x12)) = r2;
| }
| label_43:
0x0007054e ldr r3, [sp, 0x24] | r3 = x;
0x00070550 cmp r4, 0 |
0x00070552 it lt |
| if (r4 >= 0) {
0x00070554 addlt r4, r1, -1 | r4 = r1 + -1;
| }
0x00070558 ldr r3, [r3] | r3 = *(r3);
0x0007055a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0007055e cmp r3, 0 |
| if (r3 == 0) {
0x00070560 beq.w 0x706b2 | goto label_45;
| }
0x00070564 ldr r2, [pc, 0x254] |
0x00070566 add r2, pc | r2 = 0xe0d26;
0x00070568 str r1, [r2, 0xc] | *((r2 + 0xc)) = r1;
0x0007056a cmp r6, 0 |
| if (r6 != 0) {
0x0007056c bne.w 0x70736 | goto label_46;
| }
| label_10:
0x00070570 ldr r3, [pc, 0x24c] |
0x00070572 add r3, pc | r3 = 0xe0d36;
0x00070574 adds r3, 4 | r3 += 4;
| label_11:
0x00070576 str r1, [r3, 8] | *((r3 + 8)) = r1;
| label_17:
0x00070578 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007057a cmp r3, 0 |
| if (r3 == 0) {
0x0007057c beq.w 0x70698 | goto label_47;
| }
0x00070580 ldr r2, [pc, 0x240] |
0x00070582 ldr r3, [pc, 0x224] | r3 = *(0x707aa);
0x00070584 add r2, pc | r2 = 0xe0d4c;
0x00070586 ldr r3, [r2, r3] | r3 = *(0xe0d4c);
0x00070588 ldr r2, [r3] | r2 = *(0xe0d4c);
0x0007058a ldr r3, [sp, 0x54] | r3 = var_54h;
0x0007058c eors r2, r3 | r2 ^= r3;
0x0007058e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00070592 bne.w 0x707a0 | goto label_48;
| }
0x00070596 ldr.w r0, [fp] | r0 = *(fp);
0x0007059a ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0007059c add sp, 0x5c |
0x0007059e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000705a2 b.w 0x1a57c | void (*0x1a57c)() ();
| label_35:
0x000705a6 cmp r5, r1 |
0x000705a8 ldr r6, [r2, 0x24] | r6 = *((r2 + 0x24));
| if (r5 >= r1) {
0x000705aa bge.w 0x70780 | goto label_49;
| }
0x000705ae ldr r4, [sp, 0x24] | r4 = x;
0x000705b0 add.w r2, r5, r5, lsl 2 | r2 = r5 + (r5 << 2);
0x000705b4 adds r0, r5, 1 | r0 = r5 + 1;
0x000705b6 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000705ba lsls r2, r2, 2 | r2 <<= 2;
0x000705bc movs r1, 0 | r1 = 0;
0x000705be ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x000705c0 str r0, [r4, 0x6c] | *((r4 + 0x6c)) = r0;
0x000705c2 movs r0, 0x47 | r0 = 0x47;
0x000705c4 str r0, [r3, r2] | *((r3 + r2)) = r0;
0x000705c6 add r3, r2 | r3 += r2;
0x000705c8 adds r2, r3, 4 | r2 = r3 + 4;
0x000705ca vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000705ce strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_21:
0x000705d2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000705d4 mov r2, r6 | r2 = r6;
0x000705d6 ldr r4, [sp, 0x24] | r4 = x;
0x000705d8 movs r1, 0xa | r1 = 0xa;
0x000705da add r3, sl | r3 += sl;
0x000705dc ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000705de mov r0, r4 | r0 = r4;
0x000705e0 str r3, [sp] | *(sp) = r3;
0x000705e2 movs r3, 0 | r3 = 0;
0x000705e4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000705e8 ldrd r4, r3, [r4, 0x6c] | __asm ("ldrd r4, r3, [r4, 0x6c]");
0x000705ec cmp r4, r3 |
| if (r4 >= r3) {
0x000705ee bge.w 0x7076e | goto label_50;
| }
0x000705f2 ldr r7, [sp, 0x24] | r7 = x;
0x000705f4 add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x000705f8 adds r2, r4, 1 | r2 = r4 + 1;
0x000705fa lsls r3, r3, 2 | r3 <<= 2;
0x000705fc movs r1, 0 | r1 = 0;
0x000705fe ldr r0, [r7, 0x68] | r0 = *((r7 + 0x68));
0x00070600 mov.w ip, 0xb |
0x00070604 str r2, [r7, 0x6c] | *((r7 + 0x6c)) = r2;
0x00070606 adds r2, r0, r3 | r2 = r0 + r3;
0x00070608 strd r6, r1, [r2, 4] | __asm ("strd r6, r1, [r2, 4]");
0x0007060c strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x00070610 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00070612 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
0x00070616 cmp r1, 0 |
| if (r1 != 0) {
0x00070618 bne.w 0x7038c | goto label_5;
| }
| label_37:
0x0007061c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0007061e str r3, [sp, 0x28] | var_28h = r3;
0x00070620 ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x00070624 cmp r3, 0 |
| if (r3 != 0) {
0x00070626 bne.w 0x703b6 | goto label_6;
| }
| label_38:
0x0007062a ldr.w r6, [fp, 0x2c] | r6 = *(arg_2ch);
0x0007062e adds r6, 1 | r6++;
0x00070630 str.w r6, [fp, 0x2c] | __asm ("str.w r6, [arg_2ch]");
0x00070634 b 0x703c4 | goto label_7;
| label_33:
0x00070636 ldr r4, [sp, 0x34] | r4 = var_34h;
0x00070638 ldrsh.w r3, [r4, 0x22] | r3 = *((r4 + 0x22));
0x0007063c cmp r3, 0x3f |
| if (r3 <= 0x3f) {
0x0007063e ble.w 0x702ee | goto label_8;
| }
0x00070642 ldr r5, [pc, 0x184] |
0x00070644 add.w r1, r6, r8, lsl 1 | r1 = r6 + (r8 << 1);
0x00070648 add.w r2, r0, r8, lsl 2 | r2 = r0 + (r8 << 2);
0x0007064c movs r3, 0x3f | r3 = 0x3f;
0x0007064e mov ip, r4 |
0x00070650 add r5, pc |
0x00070652 add.w r5, r5, 0x2dc | r5 = 0xe10fa;
| do {
0x00070656 strh r3, [r1], 2 | *(r1) = r3;
| r1 += 2;
0x0007065a mov r7, r3 | r7 = r3;
0x0007065c ldrsh.w r4, [ip, 0x22] | r4 = *((ip + 0x22));
0x00070660 adds r3, 1 | r3++;
0x00070662 str r5, [r2], 4 | *(r2) = r5;
| r2 += 4;
0x00070666 cmp r4, r3 |
0x00070668 bgt 0x70656 |
| } while (r4 > r3);
0x0007066a sub.w r8, r8, 0x3e | r8 -= 0x3e;
0x0007066e add r8, r7 | r8 += r7;
0x00070670 lsl.w r7, r8, 1 | r7 = r8 << 1;
0x00070674 lsl.w r1, r8, 2 | r1 = r8 << 2;
0x00070678 b 0x702ee | goto label_8;
| label_34:
0x0007067a str r3, [sp] | *(sp) = r3;
0x0007067c movs r1, 0x4d | r1 = 0x4d;
0x0007067e ldr.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x00070682 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00070684 ldr r0, [sp, 0x24] | r0 = x;
0x00070686 adds r3, 1 | r3++;
0x00070688 str.w r3, [fp, 0x2c] | __asm ("str.w r3, [arg_2ch]");
0x0007068c str r3, [r2, 0x34] | *((r2 + 0x34)) = r3;
0x0007068e movw r2, 0x2710 | r2 = 0x2710;
0x00070692 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00070696 b 0x70334 | goto label_9;
| label_47:
0x00070698 ldr r2, [pc, 0x130] |
0x0007069a ldr r3, [pc, 0x10c] | r3 = *(0x707aa);
0x0007069c add r2, pc | r2 = 0xe0e6c;
0x0007069e ldr r3, [r2, r3] | r3 = *(0xe0e6c);
0x000706a0 ldr r2, [r3] | r2 = *(0xe0e6c);
0x000706a2 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000706a4 eors r2, r3 | r2 ^= r3;
0x000706a6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000706aa bne 0x707a0 | goto label_48;
| }
0x000706ac add sp, 0x5c |
0x000706ae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_45:
0x000706b2 ldr r2, [sp, 0x24] | r2 = x;
0x000706b4 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x000706b8 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x000706ba add.w r4, r2, r4, lsl 2 | r4 = r2 + (r4 << 2);
0x000706be str r1, [r4, 8] | *((r4 + 8)) = r1;
| if (r6 == 0) {
0x000706c0 cbz r6, 0x706ee | goto label_51;
| }
0x000706c2 ldrb.w r0, [fp, 0x13] | r0 = *(arg_13h);
0x000706c6 cmp r0, 7 |
| if (r0 > 7) {
0x000706c8 bhi 0x706ee | goto label_51;
| }
| label_15:
0x000706ca adds r2, r0, 1 | r2 = r0 + 1;
0x000706cc adds r0, 0x26 | r0 += 0x26;
0x000706ce strb.w r2, [fp, 0x13] | *(arg_13h) = r2;
0x000706d2 ldr r2, [sp, 0x40] | r2 = var_40h;
0x000706d4 str.w r6, [fp, r0, lsl 2] | __asm ("str.w r6, [fp, r0, lsl 2]");
0x000706d8 cmp r2, 0 |
0x000706da itt lt |
| if (r2 >= 0) {
0x000706dc addlt r2, r1, -1 | r2 = r1 + -1;
| }
| if (r2 < 0) {
0x000706e0 str r2, [sp, 0x40] | var_40h = r2;
| }
0x000706e2 cmp r3, 0 |
| if (r3 != 0) {
0x000706e4 bne.w 0x70570 | goto label_10;
| }
0x000706e8 ldr r3, [sp, 0x24] | r3 = x;
0x000706ea ldr r2, [r3, 0x68] | r2 = *((r3 + 0x68));
0x000706ec b 0x706fa | goto label_52;
| label_51:
0x000706ee ldr r3, [sp, 0x40] | r3 = var_40h;
0x000706f0 cmp r3, 0 |
0x000706f2 itt lt |
| if (r3 >= 0) {
0x000706f4 addlt r3, r1, -1 | r3 = r1 + -1;
| }
| if (r3 < 0) {
0x000706f8 str r3, [sp, 0x40] | var_40h = r3;
| }
| label_52:
0x000706fa ldr r3, [sp, 0x40] | r3 = var_40h;
0x000706fc add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00070700 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x00070704 b 0x70576 | goto label_11;
| label_31:
0x00070706 ldr r3, [pc, 0xc8] |
0x00070708 add r3, pc |
0x0007070a add.w r3, r3, 0x2dc | r3 = 0xe11ba;
0x0007070e b 0x70276 | goto label_12;
| label_39:
0x00070710 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00070712 movs r1, 0xb4 | r1 = 0xb4;
0x00070714 ldrh r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00070716 str r0, [sp] | *(sp) = r0;
0x00070718 ldr r0, [sp, 0x24] | r0 = x;
0x0007071a str r3, [sp, 4] | var_4h = r3;
0x0007071c mov r3, sb | r3 = sb;
0x0007071e bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x00070722 b 0x703e8 | goto label_13;
| label_23:
0x00070724 movs r3, 0 | r3 = 0;
0x00070726 ldr r0, [sp, 0x24] | r0 = x;
0x00070728 mov r2, r3 | r2 = r3;
0x0007072a movs r1, 0xe | r1 = 0xe;
0x0007072c str r3, [sp] | *(sp) = r3;
0x0007072e bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00070732 str r0, [sp, 0x40] | var_40h = r0;
0x00070734 b 0x700ac | goto label_14;
| label_46:
0x00070736 ldrb.w r0, [fp, 0x13] | r0 = *(arg_13h);
0x0007073a cmp r0, 7 |
| if (r0 < 7) {
0x0007073c bls 0x706ca | goto label_15;
| }
0x0007073e b 0x70570 | goto label_10;
| label_42:
0x00070740 ldr r2, [pc, 0x90] |
0x00070742 add r2, pc | r2 = 0xe0f1a;
0x00070744 adds r2, 4 | r2 += 4;
0x00070746 b 0x7046c | goto label_16;
| label_44:
0x00070748 ldr.w fp, [sp, 0x28] | fp = var_28h;
0x0007074c b 0x70578 | goto label_17;
| label_40:
0x0007074e ldr r1, [sp, 0x24] | r1 = x;
0x00070750 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00070754 b 0x7042e | goto label_18;
| label_29:
0x00070756 movs r1, 0 | r1 = 0;
0x00070758 mov r7, r1 | r7 = r1;
0x0007075a mov r8, r1 | r8 = r1;
0x0007075c b 0x70294 | goto label_19;
| label_36:
0x0007075e ldr r0, [sp, 0x24] | r0 = x;
0x00070760 movs r1, 0x23 | r1 = 0x23;
0x00070762 str r3, [sp] | *(sp) = r3;
0x00070764 mov r5, r3 | r5 = r3;
0x00070766 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0007076a mov r4, r0 | r4 = r0;
0x0007076c b 0x70384 | goto label_20;
| label_50:
0x0007076e movs r3, 0 | r3 = 0;
0x00070770 ldr r0, [sp, 0x24] | r0 = x;
0x00070772 mov r2, r6 | r2 = r6;
0x00070774 movs r1, 0xb | r1 = 0xb;
0x00070776 str r3, [sp] | *(sp) = r3;
0x00070778 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0007077c mov r4, r0 | r4 = r0;
0x0007077e b 0x70384 | goto label_20;
| label_49:
0x00070780 movs r3, 0 | r3 = 0;
0x00070782 ldr r0, [sp, 0x24] | r0 = x;
0x00070784 mov r2, r3 | r2 = r3;
0x00070786 movs r1, 0x47 | r1 = 0x47;
0x00070788 str r3, [sp] | *(sp) = r3;
0x0007078a bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0007078e mov r5, r0 | r5 = r0;
0x00070790 b 0x705d2 | goto label_21;
| label_24:
0x00070792 movs r2, 0 | r2 = 0;
0x00070794 mov.w ip, -1 |
0x00070798 mov r4, ip | r4 = ip;
0x0007079a mov r3, r2 | r3 = r2;
0x0007079c str r2, [sp, 0x1c] | var_1ch = r2;
0x0007079e b 0x70158 | goto label_22;
| label_48:
0x000707a0 blx 0x883c | fcn_0000883c ();
0x000707a4 ldrh r6, [r7, 0x20] | r6 = *((r7 + 0x20));
0x000707a6 movs r5, r0 | r5 = r0;
0x000707a8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000707aa movs r0, r0 |
0x000707ac strh r6, [r1, r3] | *((r1 + r3)) = r6;
0x000707ae movs r4, r0 | r4 = r0;
0x000707b0 str r2, [r4, r7] | *((r4 + r7)) = r2;
0x000707b2 movs r4, r0 | r4 = r0;
0x000707b4 stc p0, c0, [r6], 0x10 | __asm ("stc p0, c0, [r6], 0x10");
0x000707b8 mcrr p0, 0, r0, lr, c4 | __asm ("mcrr p0, 0, r0, lr, c4");
0x000707bc add r2, sp, 0x398 | r2 += arg_398h;
0x000707be movs r5, r0 | r5 = r0;
0x000707c0 add r2, sp, 0x368 | r2 += arg_368h;
0x000707c2 movs r5, r0 | r5 = r0;
0x000707c4 strh r4, [r2, 0x38] | *((r2 + 0x38)) = r4;
0x000707c6 movs r5, r0 | r5 = r0;
0x000707c8 ldrd r0, r0, [ip], 0x10 | __asm ("ldrd r0, r0, [ip], 0x10");
0x000707cc strh r4, [r7, 0x2e] | *((r7 + 0x2e)) = r4;
0x000707ce movs r5, r0 | r5 = r0;
0x000707d0 strex r0, r0, [r4, 0x10] | __asm ("strex r0, r0, [r4, 0x10]");
0x000707d4 add r1, sp, 0x28 | r1 += var_28h;
0x000707d6 movs r5, r0 | r5 = r0;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x707d8).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x73aec */
| #include <stdint.h>
|
; (fcn) fcn.00073aec () | void fcn_00073aec (int16_t arg_4h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_28h_2;
| int16_t var_30h;
| int16_t var_54h;
| int16_t var_74h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00073aec push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00073af0 sub sp, 0x7c |
0x00073af2 mov r6, r2 | r6 = r2;
0x00073af4 str r2, [sp, 0x20] | var_20h = r2;
0x00073af6 mov sb, r1 | sb = r1;
0x00073af8 mov sl, r0 | sl = r0;
0x00073afa ldr r2, [pc, 0x300] |
0x00073afc movs r1, 1 | r1 = 1;
0x00073afe ldr r3, [pc, 0x300] | r3 = *(0x73e02);
0x00073b00 ldr r7, [r0, 4] | r7 = *((r0 + 4));
0x00073b02 add r2, pc | r2 = 0xe7904;
0x00073b04 ldr r4, [r6, 0x38] | r4 = *((r6 + 0x38));
0x00073b06 ldr r3, [r2, r3] |
0x00073b08 ldr.w r8, [r0] | r8 = *(r0);
0x00073b0c ldr r2, [pc, 0x2f4] |
0x00073b0e ldr r3, [r3] | r3 = *(0xe7904);
0x00073b10 str r3, [sp, 0x74] | var_74h = r3;
0x00073b12 mov.w r3, 0 | r3 = 0;
0x00073b16 ldrb.w r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x00073b1a str r4, [sp, 0x10] | var_10h = r4;
0x00073b1c mov r0, r8 | r0 = r8;
0x00073b1e ldr r4, [r6, 0x50] | r4 = *((r6 + 0x50));
0x00073b20 add r2, pc | r2 = 0xe7928;
0x00073b22 ldr.w r5, [r8, 8] | r5 = *((r8 + 8));
0x00073b26 lsls r6, r3, 6 | r6 = r3 << 6;
0x00073b28 add.w r3, r7, r3, lsl 6 | r3 = r7 + (r3 << 6);
0x00073b2c str r7, [sp, 0x14] | var_14h = r7;
0x00073b2e adds r3, 8 | r3 += 8;
0x00073b30 str r4, [sp, 0x24] | var_24h = r4;
0x00073b32 str r3, [sp, 0x1c] | var_1ch = r3;
0x00073b34 adds r3, r7, r6 | r3 = r7 + r6;
0x00073b36 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00073b38 str r6, [sp, 0x18] | var_18h = r6;
0x00073b3a ldr r3, [r3] | r3 = *(r3);
0x00073b3c bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00073b40 cmp.w sb, 0 |
| if (sb == 0) {
0x00073b44 beq.w 0x73dea | goto label_3;
| }
0x00073b48 add.w r4, sb, sb, lsl 1 | r4 = sb + (sb << 1);
0x00073b4c mov.w fp, 0 |
0x00073b50 mov r6, sl | r6 = sl;
0x00073b52 add.w sb, sl, r4, lsl 5 | sb = sl + (r4 << 5);
0x00073b56 mov r7, fp | r7 = fp;
0x00073b58 mov r4, fp | r4 = fp;
0x00073b5a b 0x73b62 |
| while (r2 == 0) {
0x00073b5c adds r6, 0x60 | r6 += 0x60;
0x00073b5e cmp sb, r6 |
| if (sb == r6) {
0x00073b60 beq 0x73b9a | goto label_2;
| }
| label_0:
0x00073b62 ldr.w r3, [r6, 0x350] | r3 = *((r6 + 0x350));
0x00073b66 mov r0, r5 | r0 = r5;
0x00073b68 ldr.w r2, [r6, 0x304] | r2 = *((r6 + 0x304));
0x00073b6c ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00073b6e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00073b70 str r4, [sp] | *(sp) = r4;
0x00073b72 orr.w fp, fp, r1 |
0x00073b76 movs r1, 0x88 | r1 = 0x88;
0x00073b78 orrs r7, r3 | r7 |= r3;
0x00073b7a movs r3, 0 | r3 = 0;
0x00073b7c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00073b80 ldr.w r2, [r6, 0x308] | r2 = *((r6 + 0x308));
0x00073b84 cmp r2, 0 |
0x00073b86 beq 0x73b5c |
| }
0x00073b88 movs r3, 0 | r3 = 0;
0x00073b8a movs r1, 0x88 | r1 = 0x88;
0x00073b8c mov r0, r5 | r0 = r5;
0x00073b8e adds r6, 0x60 | r6 += 0x60;
0x00073b90 str r4, [sp] | *(sp) = r4;
0x00073b92 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00073b96 cmp sb, r6 |
| if (sb != r6) {
0x00073b98 bne 0x73b62 | goto label_0;
| }
| label_2:
0x00073b9a ldrd r3, r2, [sp, 0x14] | __asm ("ldrd r3, r2, [var_14h]");
0x00073b9e add r3, r2 | r3 += r2;
0x00073ba0 ldrb.w sb, [r3, 0x2c] | sb = *((r3 + 0x2c));
0x00073ba4 ands sb, sb, 0x40 | sb &= 0x40;
0x00073ba8 it ne |
| if (sb == sb) {
0x00073baa movne sb, 0 | sb = 0;
| }
| if (sb != sb) {
0x00073bae bne 0x73c2a | goto label_4;
| }
0x00073bb0 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00073bb2 ldr.w r0, [sl, 0x64] | r0 = *((sl + 0x64));
0x00073bb6 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x00073bb8 cmp r0, 0 |
0x00073bba orr.w r4, fp, r3 | r4 = fp | r3;
0x00073bbe ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x00073bc0 orr.w r7, r7, r3 | r7 |= r3;
| if (r0 <= 0) {
0x00073bc4 ble 0x73c2a | goto label_4;
| }
0x00073bc6 mvns r3, r7 | r3 = ~r7;
0x00073bc8 movw fp, 0x8002 |
0x00073bcc str r5, [sp, 0x24] | var_24h = r5;
0x00073bce mov r6, sb | r6 = sb;
0x00073bd0 mvns r4, r4 | r4 = ~r4;
0x00073bd2 movt fp, 0xffff | fp = 0xffff8002;
0x00073bd6 mov r7, sb | r7 = sb;
0x00073bd8 mov r5, r3 | r5 = r3;
| do {
0x00073bda ldr.w r3, [sl, 0x70] | r3 = *((sl + 0x70));
0x00073bde add r3, r6 | r3 += r6;
0x00073be0 ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x00073be2 tst.w fp, r2 |
| if ((fp & r2) != 0) {
0x00073be6 beq 0x73bf0 |
0x00073be8 ldrh r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00073bea cmp.w r2, 0x2000 |
| if (r2 != 0x2000) {
0x00073bee bne 0x73c28 | goto label_5;
| }
| }
0x00073bf0 ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x00073bf2 ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x00073bf4 ands r2, r4 | r2 &= r4;
0x00073bf6 ands r1, r5 | r1 &= r5;
0x00073bf8 orrs r2, r1 | r2 |= r1;
| if (r2 == r1) {
0x00073bfa bne 0x73c20 |
0x00073bfc ldr r1, [r3] | r1 = *(r3);
0x00073bfe ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00073c00 ands r3, r3, 3 | r3 &= 3;
| if (r3 != r3) {
0x00073c04 bne 0x73c20 | goto label_6;
| }
0x00073c06 mov r2, r3 | r2 = r3;
0x00073c08 ldr.w r0, [r8] | r0 = *(r8);
0x00073c0c bl 0x31eb4 | fcn_00031eb4 (r0, r1, r2, r3);
0x00073c10 mov r1, sb | r1 = sb;
0x00073c12 mov r2, r0 | r2 = r0;
0x00073c14 mov r0, r8 | r0 = r8;
0x00073c16 bl 0x30378 | r0 = fcn_00030378 (r0, r1, r2);
0x00073c1a mov sb, r0 | sb = r0;
0x00073c1c ldr.w r0, [sl, 0x64] | r0 = *((sl + 0x64));
| }
| label_6:
0x00073c20 adds r7, 1 | r7++;
0x00073c22 adds r6, 0x30 | r6 += 0x30;
0x00073c24 cmp r0, r7 |
0x00073c26 bgt 0x73bda |
| } while (r0 > r7);
| label_5:
0x00073c28 ldr r5, [sp, 0x24] | r5 = var_24h;
| label_4:
0x00073c2a ldr.w ip, [sp, 0x1c] | ip = var_1ch;
0x00073c2e add r6, sp, 0x30 | r6 += var_30h;
0x00073c30 movs r3, 1 | r3 = 1;
0x00073c32 strd r3, r3, [sp, 0x28] | __asm ("strd r3, r3, [var_28h]");
0x00073c36 add.w r7, ip, 0x40 | r7 = ip + 0x40;
| do {
0x00073c3a ldr.w r0, [ip] | r0 = *(ip);
0x00073c3e add.w ip, ip, 0x10 |
0x00073c42 ldr r1, [ip, -0xc] | r1 = *((ip - 0xc));
0x00073c46 mov r4, r6 | r4 = r6;
0x00073c48 ldr r2, [ip, -0x8] | r2 = *((ip - 0x8));
0x00073c4c adds r6, 0x10 | r6 += 0x10;
0x00073c4e ldr r3, [ip, -0x4] | r3 = *((ip - 0x4));
0x00073c52 cmp ip, r7 |
0x00073c54 stm r4!, {r0, r1, r2, r3} | *(r4!) = r0;
| *((r4! + 4)) = r1;
| *((r4! + 8)) = r2;
| *((r4! + 12)) = r3;
0x00073c56 bne 0x73c3a |
| } while (ip != r7);
0x00073c58 movs r3, 0 | r3 = 0;
0x00073c5a add r1, sp, 0x28 | r1 += var_28h;
0x00073c5c mov r0, r8 | r0 = r8;
0x00073c5e strb.w r3, [sp, 0x54] | var_54h = r3;
0x00073c62 ldrb.w r2, [r8, 0x1a] | r2 = *((r8 + 0x1a));
0x00073c66 adds r2, 1 | r2++;
0x00073c68 strb.w r2, [r8, 0x1a] | *((r8 + 0x1a)) = r2;
0x00073c6c mov.w r2, 0x1000 | r2 = 0x1000;
0x00073c70 str r2, [sp, 8] | var_8h = r2;
0x00073c72 mov r2, sb | r2 = sb;
0x00073c74 str r3, [sp, 0xc] | var_ch = r3;
0x00073c76 strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x00073c7a bl 0x707d8 | r0 = fcn_000707d8 (r0, r1, r2, r3, r4, r5, r6);
0x00073c7e mov r7, r0 | r7 = r0;
0x00073c80 cmp r0, 0 |
| if (r0 == 0) {
0x00073c82 beq 0x73d78 | goto label_7;
| }
0x00073c84 ldrd r3, r2, [sp, 0x14] | __asm ("ldrd r3, r2, [var_14h]");
0x00073c88 ldr.w r6, [r8, 0x2c] | r6 = *((r8 + 0x2c));
0x00073c8c ldr r0, [r0, 0x20] | r0 = *((r0 + 0x20));
0x00073c8e add r3, r2 | r3 += r2;
0x00073c90 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00073c92 ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
0x00073c94 adds r6, 1 | r6++;
0x00073c96 str r0, [sp, 0x14] | var_14h = r0;
0x00073c98 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00073c9a ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x00073c9c str.w r6, [r8, 0x2c] | __asm ("str.w r6, [r8, 0x2c]");
0x00073ca0 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x00073ca4 beq 0x73d0a | goto label_8;
| }
0x00073ca6 ldr.w fp, [r1, 8] | fp = *((r1 + 8));
0x00073caa mov r0, fp | r0 = fp;
0x00073cac cmp.w fp, 0 |
| if (fp != 0) {
0x00073cb0 bne 0x73cbc | goto label_9;
| }
0x00073cb2 b 0x73df4 | goto label_10;
| do {
0x00073cb4 ldr r0, [r0, 0x14] | r0 = *((r0 + 0x14));
0x00073cb6 cmp r0, 0 |
| if (r0 == 0) {
0x00073cb8 beq.w 0x73df4 | goto label_10;
| }
| label_9:
0x00073cbc ldrb.w r3, [r0, 0x37] | r3 = *((r0 + 0x37));
0x00073cc0 and r3, r3, 3 | r3 &= 3;
0x00073cc4 cmp r3, 2 |
0x00073cc6 bne 0x73cb4 |
| } while (r3 != 2);
0x00073cc8 ldrh.w sl, [r0, 0x32] | sl = *((r0 + 0x32));
0x00073ccc mov fp, r0 |
0x00073cce add.w r3, sl, -1 | r3 = sl + -1;
0x00073cd2 add r3, r6 | r3 += r6;
0x00073cd4 str.w r3, [r8, 0x2c] | __asm ("str.w r3, [r8, 0x2c]");
0x00073cd8 cmp.w sl, 0 |
| if (sl == 0) {
0x00073cdc beq 0x73d1a | goto label_11;
| }
0x00073cde strd sb, r8, [sp, 0x18] | __asm ("strd sb, r8, [var_1ch]");
0x00073ce2 movs r4, 0 | r4 = 0;
0x00073ce4 mov r8, r2 | r8 = r2;
0x00073ce6 mov sb, r1 | sb = r1;
| do {
0x00073ce8 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00073cec adds r2, r6, r4 | r2 = r6 + r4;
0x00073cee mov r1, sb | r1 = sb;
0x00073cf0 mov r0, r5 | r0 = r5;
0x00073cf2 ldrsh.w r3, [r3, r4, lsl 1] | offset_0 = r4 << 1;
| r3 = *((r3 + offset_0));
0x00073cf6 adds r4, 1 | r4++;
0x00073cf8 str r2, [sp] | *(sp) = r2;
0x00073cfa mov r2, r8 | r2 = r8;
0x00073cfc bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
0x00073d00 cmp sl, r4 |
0x00073d02 bne 0x73ce8 |
| } while (sl != r4);
0x00073d04 ldrd sb, r8, [sp, 0x18] | __asm ("ldrd sb, r8, [var_1ch]");
0x00073d08 b 0x73d1a | goto label_11;
| label_8:
0x00073d0a mov.w sl, 1 | sl = 1;
0x00073d0e str r3, [sp] | *(sp) = r3;
0x00073d10 movs r1, 0x87 | r1 = 0x87;
0x00073d12 mov r3, r6 | r3 = r6;
0x00073d14 mov r0, r5 | r0 = r5;
0x00073d16 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_11:
0x00073d1a ldr r3, [sp, 0x10] | r3 = var_10h;
0x00073d1c movs r1, 0x3f | r1 = 0x3f;
0x00073d1e mov r0, r5 | r0 = r5;
0x00073d20 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00073d22 movs r3, 0 | r3 = 0;
0x00073d24 strd r6, sl, [sp] | __asm ("strd r6, sl, [sp]");
0x00073d28 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x00073d2c ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x00073d30 mov r4, r0 | r4 = r0;
0x00073d32 movs r1, 0x1c | r1 = 0x1c;
0x00073d34 mov r0, r5 | r0 = r5;
0x00073d36 ldr r2, [r2] | r2 = *(r2);
0x00073d38 strd r6, sl, [sp] | __asm ("strd r6, sl, [sp]");
0x00073d3c bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x00073d40 ldr r3, [r5] | r3 = *(r5);
0x00073d42 cmp r4, 0 |
0x00073d44 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x00073d46 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00073d4a it lt |
| if (r4 >= 0) {
0x00073d4c addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x00073d50 cmp r3, 0 |
| if (r3 != 0) {
0x00073d52 bne 0x73de2 | goto label_12;
| }
0x00073d54 ldr r3, [r5, 0x68] | r3 = *((r5 + 0x68));
0x00073d56 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x00073d5a add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_1:
0x00073d5e str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00073d60 movs r1, 0 | r1 = 0;
0x00073d62 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00073d64 mov r0, r5 | r0 = r5;
0x00073d66 ldrd r2, r3, [r2, 8] | __asm ("ldrd r2, r3, [r2, 8]");
0x00073d6a str r1, [sp] | *(sp) = r1;
0x00073d6c movs r1, 9 | r1 = 9;
0x00073d6e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00073d72 mov r0, r7 | r0 = r7;
0x00073d74 bl 0x73e14 | fcn_00073e14 (r0, r1);
| label_7:
0x00073d78 cmp.w sb, 0 |
| if (sb != 0) {
0x00073d7c beq 0x73d88 |
0x00073d7e ldr.w r0, [r8] | r0 = *(r8);
0x00073d82 mov r1, sb | r1 = sb;
0x00073d84 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x00073d88 ldr.w r3, [r8, 0xdc] | r3 = *((r8 + 0xdc));
0x00073d8c ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
0x00073d90 cmp r3, 0 |
| if (r3 == 0) {
0x00073d92 beq 0x73db2 | goto label_13;
| }
0x00073d94 ldr r1, [r2] | r1 = *(r2);
0x00073d96 it lt |
| if (r3 >= 0) {
0x00073d98 ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x00073d9a ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x00073d9e it lt |
| if (r3 >= 0) {
0x00073da0 addlt r3, r3, -1 | r3 += -1;
| }
| if (r1 != 0) {
0x00073da4 cbnz r1, 0x73dda | goto label_14;
| }
0x00073da6 ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x00073da8 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00073dac add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| do {
0x00073db0 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| label_13:
0x00073db2 ldrb.w r2, [r8, 0x1a] | r2 = *((r8 + 0x1a));
0x00073db6 str.w r3, [r8, 0xdc] | __asm ("str.w r3, [r8, 0xdc]");
0x00073dba subs r3, r2, 1 | r3 = r2 - 1;
0x00073dbc ldr r2, [pc, 0x48] |
0x00073dbe strb.w r3, [r8, 0x1a] | *((r8 + 0x1a)) = r3;
0x00073dc2 ldr r3, [pc, 0x3c] | r3 = *(0x73e02);
0x00073dc4 add r2, pc | r2 = 0xe7bd0;
0x00073dc6 ldr r3, [r2, r3] | r3 = *(0xe7bd0);
0x00073dc8 ldr r2, [r3] | r2 = *(0xe7bd0);
0x00073dca ldr r3, [sp, 0x74] | r3 = var_74h;
0x00073dcc eors r2, r3 | r2 ^= r3;
0x00073dce mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00073dd2 bne 0x73df0 | goto label_15;
| }
0x00073dd4 add sp, 0x7c |
0x00073dd6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x00073dda ldr r3, [pc, 0x30] |
0x00073ddc add r3, pc | r3 = 0xe7bee;
0x00073dde adds r3, 4 | r3 += 4;
0x00073de0 b 0x73db0 |
| } while (1);
| label_12:
0x00073de2 ldr r3, [pc, 0x2c] |
0x00073de4 add r3, pc | r3 = 0xe7bfa;
0x00073de6 adds r3, 4 | r3 += 4;
0x00073de8 b 0x73d5e | goto label_1;
| label_3:
0x00073dea mov fp, sb |
0x00073dec mov r7, sb | r7 = sb;
0x00073dee b 0x73b9a | goto label_2;
| label_15:
0x00073df0 blx 0x883c | fcn_0000883c ();
| label_10:
0x00073df4 movs r3, 0 | r3 = 0;
0x00073df6 ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x00073df8 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x73e14 */
| #include <stdint.h>
|
; (fcn) fcn.00073e14 () | void fcn_00073e14 (int16_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int32_t var_2ch_2;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
0x00073e14 push {r0, r1, fp, sp, lr} |
0x00073e18 ldr r7, [pc, 0x3c0] | r7 = *(0x741dc);
0x00073e1a sub sp, 0x3c |
0x00073e1c ldrb.w r4, [r0, 0x30] | r4 = *((r0 + 0x30));
0x00073e20 mov sb, r0 | sb = r0;
0x00073e22 ldr.w sl, [r3, 8] | sl = *((r3 + 8));
0x00073e26 str r3, [sp, 0x10] | var_10h = r3;
0x00073e28 ldr r3, [r3] | r3 = *(r3);
0x00073e2a ldr.w fp, [r0, 4] | fp = *((r0 + 4));
0x00073e2e str r3, [sp, 8] | var_8h = r3;
0x00073e30 ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x00073e34 str r3, [sp, 0x34] | var_34h = r3;
0x00073e36 cmp r4, 0 |
| if (r4 == 0) {
0x00073e38 beq.w 0x746cc | goto label_39;
| }
0x00073e3c ldr.w r3, [pc, 0x8d4] |
0x00073e40 add.w r8, r4, -1 | r8 = r4 + -1;
0x00073e44 ldr.w r2, [pc, 0x8d0] | r2 = *(0x00074718);
0x00073e48 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x00073e4c str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x00073e50 add r3, pc | r3 = 0xe8568;
0x00073e52 add.w r4, r0, r4, lsl 5 | r4 = r0 + (r4 << 5);
0x00073e56 add r2, pc | r2 += pc;
0x00073e58 str r3, [sp, 0x18] | var_18h = r3;
0x00073e5a str r2, [sp, 0x20] | var_20h = r2;
0x00073e5c adds r3, 4 | r3 += 4;
0x00073e5e movs r2, 0 | r2 = 0;
0x00073e60 str r3, [sp, 0x1c] | var_1ch = r3;
0x00073e62 mov fp, r2 |
0x00073e64 b 0x73f2c |
| while (r3 != 0xb8) {
0x00073e66 ldrb.w r3, [sb, 0x33] | r3 = *((sb + 0x33));
0x00073e6a cmp r3, 2 |
| if (r3 == 2) {
0x00073e6c beq.w 0x74222 | goto label_40;
| }
| label_6:
0x00073e70 movs r5, 0 | r5 = 0;
| label_7:
0x00073e72 ldr.w r2, [r4, 0x2b8] | r2 = *((r4 + 0x2b8));
0x00073e76 cmp r2, 0 |
| if (r2 != 0) {
0x00073e78 bne.w 0x74322 | goto label_41;
| }
| label_8:
0x00073e7c ldrb.w r0, [r4, 0x2de] | r0 = *((r4 + 0x2de));
0x00073e80 ldrd r2, r3, [r4, 0x2e0] | __asm ("ldrd r2, r3, aav.0x000000ff");
0x00073e84 ldrb.w r1, [r4, 0x2dd] | r1 = *((r4 + 0x2dd));
0x00073e88 str r0, [sp] | *(sp) = r0;
0x00073e8a mov r0, sl | r0 = sl;
0x00073e8c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00073e90 ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x00073e94 cmp r3, 0 |
| if (r3 > 0) {
0x00073e96 ble 0x73eac |
0x00073e98 ldr.w r2, [sl, 0x68] | r2 = *((sl + 0x68));
0x00073e9c add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x00073ea0 add.w r2, r2, r1, lsl 2 | r2 += (r1 << 2);
0x00073ea4 ldrb.w r1, [r4, 0x2df] | r1 = *((r4 + 0x2df));
0x00073ea8 strh r1, [r2, -0x12] | *((r2 - 0x12)) = r1;
| }
0x00073eac ldr.w r2, [r4, 0x2c4] | r2 = *((r4 + 0x2c4));
0x00073eb0 cmp r2, 0 |
| if (r2 != 0) {
0x00073eb2 bne.w 0x742c2 | goto label_42;
| }
0x00073eb6 cmp r5, 0 |
0x00073eb8 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
| if (r5 != 0) {
0x00073ebc bne.w 0x742fc | goto label_43;
| }
| label_0:
0x00073ec0 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00073ec2 lsls r5, r3, 0x14 | r5 = r3 << 0x14;
| if (r5 < r3) {
0x00073ec4 bpl 0x73ed0 |
0x00073ec6 ldr.w r3, [r4, 0x2e8] | r3 = *((r4 + 0x2e8));
0x00073eca cmp r3, 0 |
| if (r3 > 0) {
0x00073ecc bgt.w 0x743d8 | goto label_44;
| }
| }
| label_22:
0x00073ed0 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00073ed4 ldr.w r2, [r4, 0x2ac] | r2 = *((r4 + 0x2ac));
0x00073ed8 cmn r1, r3 |
0x00073eda mvn.w r2, r2 | r2 = ~r2;
| if (r1 < r3) {
0x00073ede bmi.w 0x7421a | goto label_45;
| }
0x00073ee2 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00073ee4 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00073ee8 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_5:
0x00073eec ldr.w r3, [r4, 0x2d8] | r3 = *((r4 + 0x2d8));
| if (r3 != 0) {
0x00073ef0 cbz r3, 0x73f02 |
0x00073ef2 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00073ef4 movs r3, 1 | r3 = 1;
0x00073ef6 str r3, [sp] | *(sp) = r3;
0x00073ef8 movs r1, 0x43 | r1 = 0x43;
0x00073efa movs r3, 0 | r3 = 0;
0x00073efc mov r0, sl | r0 = sl;
0x00073efe bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x00073f02 ldr.w r3, [r4, 0x2b4] | r3 = *((r4 + 0x2b4));
0x00073f06 cmp r3, 0 |
| if (r3 != 0) {
0x00073f08 bne.w 0x741ac | goto label_46;
| }
| label_4:
0x00073f0c ldr.w r3, [r4, 0x2d0] | r3 = *((r4 + 0x2d0));
0x00073f10 cmp r3, 0 |
| if (r3 != 0) {
0x00073f12 bne.w 0x74198 | goto label_47;
| }
| label_3:
0x00073f16 ldr.w r2, [r4, 0x2a0] | r2 = *((r4 + 0x2a0));
0x00073f1a cmp r2, 0 |
| if (r2 != 0) {
0x00073f1c bne 0x73fa2 | goto label_48;
| }
0x00073f1e add.w r8, r8, -1 | r8 += -1;
0x00073f22 subs r4, 0x60 | r4 -= 0x60;
0x00073f24 cmp.w r8, -1 |
| if (r8 == -1) {
0x00073f28 beq.w 0x740a0 | goto label_49;
| }
| label_1:
0x00073f2c ldr.w r5, [r4, 0x2d8] | r5 = *((r4 + 0x2d8));
| if (r5 != 0) {
0x00073f30 cbz r5, 0x73f70 |
0x00073f32 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00073f36 ldr.w r2, [r4, 0x2b8] | r2 = *((r4 + 0x2b8));
0x00073f3a ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00073f3e mvns r2, r2 | r2 = ~r2;
0x00073f40 cmn r1, r3 |
| if (r1 < r3) {
0x00073f42 bmi.w 0x74358 | goto label_50;
| }
0x00073f46 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00073f48 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00073f4c str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_13:
0x00073f50 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00073f54 movs r0, 0 | r0 = 0;
0x00073f56 ldrd r2, r3, [r5, 8] | __asm ("ldrd r2, r3, [r5, 8]");
0x00073f5a add.w fp, fp, 1 |
0x00073f5e str.w r0, [r4, 0x2b8] | __asm ("str.w r0, aav.0x000000ff");
0x00073f62 mov r0, sl | r0 = sl;
0x00073f64 str r1, [r5, 0x10] | *((r5 + 0x10)) = r1;
0x00073f66 movs r1, 1 | r1 = 1;
0x00073f68 str r1, [sp] | *(sp) = r1;
0x00073f6a movs r1, 0x43 | r1 = 0x43;
0x00073f6c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x00073f70 ldrb.w r3, [r4, 0x2dd] | r3 = *((r4 + 0x2dd));
0x00073f74 ldr.w r7, [r4, 0x2f0] | r7 = *((r4 + 0x2f0));
0x00073f78 cmp r3, 0xb8 |
0x00073f7a bne.w 0x73e66 |
| }
0x00073f7e ldr.w r2, [r4, 0x2b8] | r2 = *((r4 + 0x2b8));
0x00073f82 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00073f86 cmp r2, 0 |
| if (r2 == 0) {
0x00073f88 beq 0x73ec0 | goto label_0;
| }
0x00073f8a ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00073f8e mvns r2, r2 | r2 = ~r2;
0x00073f90 cmn r1, r3 |
| if (r1 < r3) {
0x00073f92 bmi.w 0x7468a | goto label_51;
| }
0x00073f96 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00073f9a ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00073f9c str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x00073fa0 b 0x73ec0 | goto label_0;
| label_48:
0x00073fa2 ldrd r5, r3, [sl, 0x6c] | __asm ("ldrd r5, r3, [sl, 0x6c]");
0x00073fa6 ldr r6, [r7, 0x28] | r6 = *((r7 + 0x28));
0x00073fa8 cmp r5, r3 |
| if (r5 >= r3) {
0x00073faa bge.w 0x745c6 | goto label_52;
| }
0x00073fae ldr.w r0, [sl, 0x68] | r0 = *((sl + 0x68));
0x00073fb2 add.w r3, r5, r5, lsl 2 | r3 = r5 + (r5 << 2);
0x00073fb4 lsls r5, r0, 0xe | r5 = r0 << 0xe;
0x00073fb6 adds r7, r5, 1 | r7 = r5 + 1;
0x00073fb8 str.w r7, [sl, 0x6c] | __asm ("str.w r7, [sl, 0x6c]");
0x00073fbc movs r1, 0 | r1 = 0;
0x00073fbe movs r7, 0x31 | r7 = 0x31;
0x00073fc0 add.w ip, r0, r3, lsl 2 |
0x00073fc4 strd r2, r1, [ip, 4] | __asm ("strd r2, r1, [ip, 4]");
0x00073fc8 strd r1, r1, [ip, 0xc] | __asm ("strd r1, r1, [ip, 0xc]");
0x00073fcc str.w r7, [r0, r3, lsl 2] | __asm ("str.w r7, [r0, r3, lsl 2]");
| label_26:
0x00073fd0 ands r3, r6, 0x40 | r3 = r6 & 0x40;
| if (r3 == r6) {
0x00073fd4 beq.w 0x743c8 | goto label_53;
| }
| label_19:
0x00073fd8 lsls r1, r6, 0x16 | r1 = r6 << 0x16;
0x00073fda and r3, r6, 0x2000 | r3 = r6 & 0x2000;
| if (r1 < r6) {
0x00073fde bmi.w 0x74346 | goto label_54;
| }
| if (r3 == 0) {
0x00073fe2 cbz r3, 0x74030 | goto label_55;
| }
0x00073fe4 ldr.w r6, [r4, 0x2e8] | r6 = *((r4 + 0x2e8));
| if (r6 == 0) {
0x00073fe8 cbz r6, 0x74030 | goto label_55;
| }
| label_11:
0x00073fea ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x00073fec cmp r0, 0 |
| if (r0 == 0) {
0x00073fee beq.w 0x74702 | goto label_56;
| }
0x00073ff2 ldr r3, [sp, 8] | r3 = var_8h;
0x00073ff4 movs r1, 0 | r1 = 0;
0x00073ff6 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00073ff8 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00073ffa cmp r0, r2 |
| if (r0 == r2) {
0x00073ffc beq 0x74008 | goto label_38;
| }
| do {
0x00073ffe ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00074000 adds r3, 0x10 | r3 += 0x10;
0x00074002 adds r1, 1 | r1++;
0x00074004 cmp r0, r2 |
0x00074006 bne 0x73ffe |
| } while (r0 != r2);
| label_38:
0x00074008 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x0007400a mov r0, sl | r0 = sl;
0x0007400c ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x00074010 str r1, [sp] | *(sp) = r1;
0x00074012 movs r1, 0x65 | r1 = 0x65;
0x00074014 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074018 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0007401a mov r1, r6 | r1 = r6;
0x0007401c bl 0x2bf78 | fcn_0002bf78 (r0, r1);
| label_10:
0x00074020 movs r3, 0 | r3 = 0;
0x00074022 ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x00074026 movs r1, 0x88 | r1 = 0x88;
0x00074028 mov r0, sl | r0 = sl;
0x0007402a str r3, [sp] | *(sp) = r3;
0x0007402c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_55:
0x00074030 ldrb.w r2, [r4, 0x2dd] | r2 = *((r4 + 0x2dd));
0x00074034 ldr.w r3, [r4, 0x2bc] | r3 = *((r4 + 0x2bc));
0x00074038 cmp r2, 0x43 |
| if (r2 == 0x43) {
0x0007403a beq.w 0x74376 | goto label_57;
| }
0x0007403e ldrd r2, r1, [sl, 0x6c] | __asm ("ldrd r2, r1, [sl, 0x6c]");
0x00074042 cmp r2, r1 |
| if (r2 >= r1) {
0x00074044 bge.w 0x7461a | goto label_58;
| }
0x00074048 ldr.w r6, [sl, 0x68] | r6 = *((sl + 0x68));
0x0007404c add.w r7, r2, r2, lsl 2 | r7 = r2 + (r2 << 2);
0x00074050 movs r0, 0 | r0 = 0;
0x00074052 adds r2, 1 | r2++;
0x00074054 mov.w ip, 8 |
0x00074058 str.w r2, [sl, 0x6c] | __asm ("str.w r2, [sl, 0x6c]");
0x0007405c add.w r1, r6, r7, lsl 2 | r1 = r6 + (r7 << 2);
0x00074060 strd r3, r0, [r1, 8] | __asm ("strd r3, r0, [r1, 8]");
0x00074064 str r0, [r1, 0x10] | *((r1 + 0x10)) = r0;
0x00074066 str.w ip, [r6, r7, lsl 2] | __asm ("str.w ip, [r6, r7, lsl 2]");
0x0007406a str r0, [r1, 4] | *((r1 + 4)) = r0;
| label_15:
0x0007406c ldr.w r3, [sl] | r3 = *(sl);
0x00074070 cmp r5, 0 |
0x00074072 it lt |
| if (r5 >= 0) {
0x00074074 addlt r5, r2, -1 | r5 = r2 + -1;
| }
0x00074078 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0007407c cmp r3, 0 |
| if (r3 != 0) {
0x0007407e bne.w 0x74352 | goto label_59;
| }
0x00074082 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x00074086 add.w r5, r5, r5, lsl 2 | r5 += (r5 << 2);
0x0007408a add.w r3, r3, r5, lsl 2 | r3 += (r5 << 2);
| label_12:
0x0007408e add.w r8, r8, -1 | r8 += -1;
0x00074092 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00074094 cmp.w r8, -1 |
0x00074098 sub.w r4, r4, 0x60 | r4 -= 0x60;
| if (r8 != -1) {
0x0007409c bne.w 0x73f2c | goto label_1;
| }
| label_49:
0x000740a0 ldr.w r1, [sb, 0x44] | r1 = *((sb + 0x44));
0x000740a4 str.w fp, [sp, 0xc] | __asm ("str.w fp, [var_ch]");
0x000740a8 ldr.w fp, [sp, 0x24] | fp = var_24h;
| if (r1 == 0) {
0x000740ac cbz r1, 0x740fa | goto label_60;
| }
| label_2:
0x000740ae ldrd r0, r2, [r1] | __asm ("ldrd r0, r2, [r1]");
0x000740b2 add.w r3, r1, 8 | r3 = r1 + 8;
0x000740b6 add.w r7, r1, 0x38 | r7 = r1 + 0x38;
0x000740ba str.w r0, [sb, 0x44] | __asm ("str.w r0, [sb, 0x44]");
| do {
0x000740be ldr r6, [r3] | r6 = *(r3);
0x000740c0 adds r3, 0x10 | r3 += 0x10;
0x000740c2 ldr r5, [r3, -0xc] | r5 = *((r3 - 0xc));
0x000740c6 adds r2, 0x10 | r2 += 0x10;
0x000740c8 ldr r4, [r3, -0x8] | r4 = *((r3 - 0x8));
0x000740cc ldr r0, [r3, -0x4] | r0 = *((r3 - 0x4));
0x000740d0 cmp r3, r7 |
0x000740d2 str r6, [r2, -0x10] | *((r2 - 0x10)) = r6;
0x000740d6 str r5, [r2, -0xc] | *((r2 - 0xc)) = r5;
0x000740da str r4, [r2, -0x8] | *((r2 - 0x8)) = r4;
0x000740de str r0, [r2, -0x4] | *((r2 - 0x4)) = r0;
0x000740e2 bne 0x740be |
| } while (r3 != r7);
0x000740e4 ldr r3, [r3] | r3 = *(r3);
0x000740e6 str r3, [r2] | *(r2) = r3;
0x000740e8 ldr.w r3, [sb] | r3 = *(sb);
0x000740ec ldr r0, [r3] | r0 = *(r3);
0x000740ee bl 0x16808 | fcn_00016808 (r0, r1);
0x000740f2 ldr.w r1, [sb, 0x44] | r1 = *((sb + 0x44));
0x000740f6 cmp r1, 0 |
| if (r1 != 0) {
0x000740f8 bne 0x740ae | goto label_2;
| }
| label_60:
0x000740fa ldrb.w r1, [sb, 0x30] | r1 = *((sb + 0x30));
0x000740fe add.w r4, sb, 0x300 | r4 = sb + 0x300;
0x00074102 cmp r1, 0 |
| if (r1 == 0) {
0x00074104 beq.w 0x746fc | goto label_61;
| }
0x00074108 ldr r7, [sp, 0x10] | r7 = var_10h;
0x0007410a movs r5, 0 | r5 = 0;
0x0007410c mov r8, sl | r8 = sl;
| do {
0x0007410e ldrb.w r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00074112 ldr r2, [r4, 0x38] | r2 = *((r4 + 0x38));
0x00074114 ldr r0, [r4, 0x50] | r0 = *((r4 + 0x50));
0x00074116 add.w r3, fp, r3, lsl 6 | r3 = fp + (r3 << 6);
0x0007411a ldr r6, [r3, 0x18] | r6 = *((r3 + 0x18));
0x0007411c cmp r2, 0 |
| if (r2 != 0) {
0x0007411e bne.w 0x7438c | goto label_62;
| }
0x00074122 ldrb.w ip, [r3, 0x2d] | ip = *((r3 + 0x2d));
0x00074126 tst.w ip, 0x20 |
| if ((ip & 0x20) != 0) {
0x0007412a bne.w 0x743a8 | goto label_63;
| }
0x0007412e ldr r3, [r0, 0x28] | r3 = *((r0 + 0x28));
0x00074130 tst.w r3, 0x240 |
| if ((r3 & 0x240) == 0) {
0x00074134 beq.w 0x7439c | goto label_64;
| }
0x00074138 ldr.w ip, [r0, 0x20] | ip = *((r0 + 0x20));
| label_17:
0x0007413c cmp.w ip, 0 |
| if (ip != 0) {
0x00074140 beq 0x7414e |
0x00074142 ldr r3, [sp, 8] | r3 = var_8h;
0x00074144 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00074148 cmp r3, 0 |
| if (r3 == 0) {
0x0007414a beq.w 0x74540 | goto label_65;
| }
| }
| label_16:
0x0007414e adds r5, 1 | r5++;
0x00074150 adds r4, 0x60 | r4 += 0x60;
0x00074152 cmp r1, r5 |
0x00074154 bgt 0x7410e |
| } while (r1 > r5);
0x00074156 ldrb.w r4, [sp, 0xc] | r4 = var_ch;
0x0007415a mov sl, r8 | sl = r8;
| label_37:
0x0007415c ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00074160 ldr.w r2, [sb, 0x24] | r2 = *((sb + 0x24));
0x00074164 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00074168 mvns r2, r2 | r2 = ~r2;
0x0007416a cmn r1, r3 |
| if (r1 < r3) {
0x0007416c bmi.w 0x74682 | goto label_66;
| }
0x00074170 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00074174 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00074176 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_33:
0x0007417a ldr r5, [sp, 0x10] | r5 = var_10h;
0x0007417c mov r1, sb | r1 = sb;
0x0007417e ldr.w r3, [sb, 0x28] | r3 = *((sb + 0x28));
0x00074182 ldr r0, [sp, 8] | r0 = var_8h;
0x00074184 str.w r3, [r5, 0x88] | __asm ("str.w r3, [r5, 0x88]");
0x00074188 bl 0x1a974 | fcn_0001a974 (r0, r1);
0x0007418c ldrb r3, [r5, 0x1a] | r3 = *((r5 + 0x1a));
0x0007418e subs r3, r3, r4 | r3 -= r4;
0x00074190 strb r3, [r5, 0x1a] | *((r5 + 0x1a)) = r3;
0x00074192 add sp, 0x3c |
0x00074194 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_47:
0x00074198 ldr.w r2, [r4, 0x2cc] | r2 = *((r4 + 0x2cc));
0x0007419c movs r1, 0 | r1 = 0;
0x0007419e str r1, [sp] | *(sp) = r1;
0x000741a0 mov r0, sl | r0 = sl;
0x000741a2 movs r1, 0x3c | r1 = 0x3c;
0x000741a4 lsrs r2, r2, 1 | r2 >>= 1;
0x000741a6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000741aa b 0x73f16 | goto label_3;
| label_46:
0x000741ac ldrd r2, r1, [sl, 0x6c] | __asm ("ldrd r2, r1, [sl, 0x6c]");
0x000741b0 cmp r2, r1 |
| if (r2 >= r1) {
0x000741b2 bge.w 0x745d6 | goto label_67;
| }
0x000741b6 ldr.w r5, [sl, 0x68] | r5 = *((sl + 0x68));
0x000741ba add.w r6, r2, r2, lsl 2 | r6 = r2 + (r2 << 2);
0x000741be movs r0, 0 | r0 = 0;
0x000741c0 adds r2, 1 | r2++;
0x000741c2 mov.w ip, 8 |
0x000741c6 str.w r2, [sl, 0x6c] | __asm ("str.w r2, [sl, 0x6c]");
0x000741ca add.w r1, r5, r6, lsl 2 | r1 = r5 + (r6 << 2);
0x000741cc lsls r6, r0, 6 | r6 = r0 << 6;
0x000741ce strd r3, r0, [r1, 8] | __asm ("strd r3, r0, [r1, 8]");
0x000741d2 str r0, [r1, 0x10] | *((r1 + 0x10)) = r0;
0x000741d4 str.w ip, [r5, r6, lsl 2] | __asm ("str.w ip, [r5, r6, lsl 2]");
0x000741d8 str r0, [r1, 4] | *((r1 + 4)) = r0;
| label_27:
0x000741da ldr.w r1, [sl] | r1 = *(sl);
0x000741de cmp r3, 0 |
0x000741e0 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
| if (r3 < 0) {
0x000741e4 blt.w 0x74360 | goto label_68;
| }
0x000741e8 cmp r1, 0 |
| if (r1 != 0) {
0x000741ea bne.w 0x7433e | goto label_14;
| }
0x000741ee add.w r0, r3, r3, lsl 2 | r0 = r3 + (r3 << 2);
0x000741f2 ldr.w r1, [sl, 0x68] | r1 = *((sl + 0x68));
0x000741f6 cmp r3, 1 |
0x000741f8 lsl.w r0, r0, 2 | r0 <<= 2;
0x000741fc it le |
| if (r3 > 1) {
0x000741fe addle r3, r2, -1 | r3 = r2 + -1;
| }
0x00074202 add.w r5, r1, r0 | r5 = r1 + r0;
0x00074206 itt le |
| if (r3 > 1) {
0x00074208 movle r0, 0x14 | r0 = 0x14;
| }
| if (r3 <= 1) {
0x0007420a mlale r3, r0, r3, r1 | __asm ("mlale r3, r0, r3, r1");
| }
0x0007420e str r2, [r5, 8] | *((r5 + 8)) = r2;
0x00074210 itt gt |
| if (r3 <= 1) {
0x00074212 subgt r0, 0x28 | r0 -= 0x28;
| }
| if (r3 <= 1) {
0x00074214 addgt r3, r1, r0 | r3 = r1 + r0;
| }
| label_9:
0x00074216 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00074218 b 0x73f0c | goto label_4;
| label_45:
0x0007421a mov r1, sl | r1 = sl;
0x0007421c bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00074220 b 0x73eec | goto label_5;
| label_40:
0x00074222 ldrb.w r3, [sb, 0x30] | r3 = *((sb + 0x30));
0x00074226 subs r3, 1 | r3--;
0x00074228 cmp r3, r8 |
| if (r3 != r8) {
0x0007422a bne.w 0x73e70 | goto label_6;
| }
0x0007422e ldr r5, [r7, 0x28] | r5 = *((r7 + 0x28));
0x00074230 ands r5, r5, 0x200 | r5 &= 0x200;
| if (r5 == r5) {
0x00074234 beq.w 0x73e72 | goto label_7;
| }
0x00074238 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0007423a ldrsb.w r2, [r3, 0x37] | r2 = *((r3 + 0x37));
0x0007423e cmp r2, 0 |
| if (r2 >= 0) {
0x00074240 bge.w 0x73e70 | goto label_6;
| }
0x00074244 ldrh r5, [r7, 0x1e] | r5 = *((r7 + 0x1e));
0x00074246 cmp r5, 0 |
| if (r5 == 0) {
0x00074248 beq.w 0x73e72 | goto label_7;
| }
0x0007424c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0007424e ldrsh.w r3, [r3, r5, lsl 1] | offset_0 = r5 << 1;
| r3 = *((r3 + offset_0));
0x00074252 cmp r3, 0x23 |
| if (r3 <= 0x23) {
0x00074254 ble.w 0x73e70 | goto label_6;
| }
0x00074258 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0007425a movs r6, 0 | r6 = 0;
0x0007425c str r7, [sp, 0xc] | var_ch = r7;
0x0007425e mov r7, r6 | r7 = r6;
0x00074260 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x00074262 adds r1, r3, 1 | r1 = r3 + 1;
0x00074264 mov r6, r1 | r6 = r1;
| do {
0x00074266 adds r1, r6, r7 | r1 = r6 + r7;
0x00074268 ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x0007426c mov r3, r7 | r3 = r7;
0x0007426e str r1, [sp] | *(sp) = r1;
0x00074270 mov r0, sl | r0 = sl;
0x00074272 movs r1, 0x5e | r1 = 0x5e;
0x00074274 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074278 mov r2, r7 | r2 = r7;
0x0007427a adds r7, 1 | r7++;
0x0007427c cmp r5, r7 |
0x0007427e bne 0x74266 |
| } while (r5 != r7);
0x00074280 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00074282 mov r3, r2 | r3 = r2;
0x00074284 adds r3, 2 | r3 += 2;
0x00074286 mov r1, r6 | r1 = r6;
0x00074288 ldr r7, [sp, 0xc] | r7 = var_ch;
0x0007428a ldr r2, [r0, 0x2c] | r2 = *((r0 + 0x2c));
0x0007428c add r2, r3 | r2 += r3;
0x0007428e ldrb.w r3, [r4, 0x2dd] | r3 = *((r4 + 0x2dd));
0x00074292 str r2, [r0, 0x2c] | *((r0 + 0x2c)) = r2;
0x00074294 mov r0, sl | r0 = sl;
0x00074296 ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x0007429a cmp r3, 0x25 |
0x0007429c strd r6, r5, [sp] | __asm ("strd r6, r5, [sp]");
0x000742a0 ite ne |
| if (r3 == 0x25) {
0x000742a2 movne r1, 0x17 | r1 = 0x17;
| }
| if (r3 != 0x25) {
0x000742a4 moveq r1, 0x14 | r1 = 0x14;
| }
0x000742a6 movs r3, 0 | r3 = 0;
0x000742a8 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x000742ac movs r2, 0 | r2 = 0;
0x000742ae ldr.w r3, [r4, 0x2e4] | r3 = *((r4 + 0x2e4));
0x000742b2 mov r5, r0 | r5 = r0;
0x000742b4 str r2, [sp] | *(sp) = r2;
0x000742b6 movs r1, 8 | r1 = 8;
0x000742b8 movs r2, 1 | r2 = 1;
0x000742ba mov r0, sl | r0 = sl;
0x000742bc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000742c0 b 0x73e72 | goto label_7;
| label_42:
0x000742c2 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000742c6 ldr.w r2, [r4, 0x2c8] | r2 = *((r4 + 0x2c8));
0x000742ca ldrd r1, r6, [r0, 0x38] | __asm ("ldrd r1, r6, [r0, 0x38]");
0x000742ce mvns r2, r2 | r2 = ~r2;
0x000742d0 cmn r6, r1 |
| if (r6 < r1) {
0x000742d2 bmi.w 0x74612 | goto label_69;
| }
0x000742d6 ldr r1, [r0, 0x40] | r1 = *((r0 + 0x40));
0x000742d8 str.w r3, [r1, r2, lsl 2] | __asm ("str.w r3, [r1, r2, lsl 2]");
| label_31:
0x000742dc ldr.w r3, [r4, 0x2e4] | r3 = *((r4 + 0x2e4));
0x000742e0 movs r1, 0 | r1 = 0;
0x000742e2 ldr.w r2, [r4, 0x2c4] | r2 = *((r4 + 0x2c4));
0x000742e6 mov r0, sl | r0 = sl;
0x000742e8 str r1, [sp] | *(sp) = r1;
0x000742ea movs r1, 0x3c | r1 = 0x3c;
0x000742ec subs r3, 1 | r3--;
0x000742ee bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000742f2 cmp r5, 0 |
0x000742f4 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
| if (r5 == 0) {
0x000742f8 beq.w 0x73ec0 | goto label_0;
| }
| label_43:
0x000742fc ldr.w r3, [sl] | r3 = *(sl);
0x00074300 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x00074304 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00074308 it lt |
| if (r5 >= 0) {
0x0007430a addlt r5, r2, -1 | r5 = r2 + -1;
| }
0x0007430e cmp r3, 0 |
| if (r3 != 0) {
0x00074310 bne 0x743c0 | goto label_70;
| }
0x00074312 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x00074316 add.w r5, r5, r5, lsl 2 | r5 += (r5 << 2);
0x0007431a add.w r3, r3, r5, lsl 2 | r3 += (r5 << 2);
| label_18:
0x0007431e str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00074320 b 0x73ec0 | goto label_0;
| label_41:
0x00074322 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00074326 mvns r2, r2 | r2 = ~r2;
0x00074328 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0007432c cmn r1, r3 |
| if (r1 < r3) {
0x0007432e bmi.w 0x7460a | goto label_71;
| }
0x00074332 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00074334 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x00074338 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x0007433c b 0x73e7c | goto label_8;
| label_14:
0x0007433e ldr r3, [sp, 0x18] | r3 = var_18h;
0x00074340 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x00074342 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00074344 b 0x74216 | goto label_9;
| label_54:
0x00074346 cmp r3, 0 |
| if (r3 == 0) {
0x00074348 beq.w 0x74020 | goto label_10;
| }
0x0007434c ldr.w r6, [r4, 0x2e8] | r6 = *((r4 + 0x2e8));
0x00074350 b 0x73fea | goto label_11;
| label_59:
0x00074352 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00074354 adds r3, 4 | r3 += 4;
0x00074356 b 0x7408e | goto label_12;
| label_50:
0x00074358 mov r1, sl | r1 = sl;
0x0007435a bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0007435e b 0x73f50 | goto label_13;
| label_68:
0x00074360 cmp r1, 0 |
| if (r1 != 0) {
0x00074362 bne 0x7433e | goto label_14;
| }
0x00074364 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x00074368 subs r1, r2, 1 | r1 = r2 - 1;
0x0007436a add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x0007436e add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
0x00074372 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x00074374 b 0x74216 | goto label_9;
| label_57:
0x00074376 movs r1, 0 | r1 = 0;
0x00074378 ldr.w r2, [r4, 0x2e0] | r2 = *((r4 + 0x2e0));
0x0007437c mov r0, sl | r0 = sl;
0x0007437e str r1, [sp] | *(sp) = r1;
0x00074380 movs r1, 9 | r1 = 9;
0x00074382 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074386 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x0007438a b 0x7406c | goto label_15;
| label_62:
0x0007438c mov r1, r5 | r1 = r5;
0x0007438e mov r2, r4 | r2 = r4;
0x00074390 mov r0, sb | r0 = sb;
0x00074392 bl 0x73aec | fcn_00073aec (r0, r1, r2, r3);
0x00074396 ldrb.w r1, [sb, 0x30] | r1 = *((sb + 0x30));
0x0007439a b 0x7414e | goto label_16;
| label_64:
0x0007439c lsls r2, r3, 0x12 | r2 = r3 << 0x12;
| if (r2 >= r3) {
0x0007439e bpl.w 0x7414e | goto label_16;
| }
0x000743a2 ldr.w ip, [r4, 0x48] | ip = *((r4 + 0x48));
0x000743a6 b 0x7413c | goto label_17;
| label_63:
0x000743a8 ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x000743aa ldr r0, [r7] | r0 = *(r7);
0x000743ac str r2, [sp, 4] | var_4h = r2;
0x000743ae ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000743b0 str r3, [sp] | *(sp) = r3;
0x000743b2 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000743b4 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x000743b6 bl 0x12374 | fcn_00012374 (r0, r1, r2, r3, r4, r5);
0x000743ba ldrb.w r1, [sb, 0x30] | r1 = *((sb + 0x30));
0x000743be b 0x7414e | goto label_16;
| label_70:
0x000743c0 ldr r3, [pc, 0x358] |
0x000743c2 add r3, pc | r3 = 0xe8ae2;
0x000743c4 adds r3, 4 | r3 += 4;
0x000743c6 b 0x7431e | goto label_18;
| label_53:
0x000743c8 ldr.w r2, [r4, 0x2a4] | r2 = *((r4 + 0x2a4));
0x000743cc movs r1, 0x88 | r1 = 0x88;
0x000743ce mov r0, sl | r0 = sl;
0x000743d0 str r3, [sp] | *(sp) = r3;
0x000743d2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000743d6 b 0x73fd8 | goto label_19;
| label_44:
0x000743d8 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000743dc ldr.w r2, [r4, 0x2b0] | r2 = *((r4 + 0x2b0));
0x000743e0 cmn r1, r3 |
0x000743e2 mvn.w r2, r2 | r2 = ~r2;
| if (r1 < r3) {
0x000743e6 bmi.w 0x7469e | goto label_72;
| }
0x000743ea ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000743ec ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x000743f0 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_35:
0x000743f4 ldrd r6, r5, [r4, 0x2e8] | __asm ("ldrd r6, r5, aav.0x000000ff");
0x000743f8 cmp r6, 0 |
0x000743fa add.w r3, r6, r6, lsl 2 | r3 = r6 + (r6 << 2);
0x000743fe lsl.w r3, r3, 2 | r3 <<= 2;
| if (r6 <= 0) {
0x00074402 ble 0x744d2 | goto label_73;
| }
0x00074404 subs r3, 0x28 | r3 -= 0x28;
0x00074406 str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_28h]");
0x0007440a add r5, r3 | r5 += r3;
0x0007440c ldr.w r3, [sl] | r3 = *(sl);
0x00074410 mov.w ip, 0x400 |
0x00074414 strd r8, sb, [sp, 0x2c] | __asm ("strd r8, sb, [var_2ch]");
0x00074418 movt ip, 4 |
0x0007441c ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x00074420 ldrb.w r0, [r3, 0x57] | r0 = *((r3 + 0x57));
0x00074424 mov fp, ip |
0x00074426 ldr r3, [pc, 0x2f8] |
0x00074428 str r7, [sp, 0x14] | var_14h = r7;
0x0007442a add r3, pc | r3 = 0xe8b50;
0x0007442c adds r1, r3, 4 | r1 = r3 + 4;
0x0007442e ldr r3, [pc, 0x2f4] |
0x00074430 mov sb, r1 | sb = r1;
0x00074432 add r3, pc | r3 = 0xe8b5c;
0x00074434 adds r3, 4 | r3 += 4;
0x00074436 str r3, [sp, 0xc] | var_ch = r3;
0x00074438 b 0x744aa |
| while (r0 == 0) {
0x0007443a ldr.w r7, [sl, 0x68] | r7 = *((sl + 0x68));
0x0007443e add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x00074442 add.w r1, r7, r1, lsl 2 | r1 = r7 + (r1 << 2);
| label_20:
0x00074446 str r2, [r1, 8] | *((r1 + 8)) = r2;
0x00074448 ldrb.w r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x0007444c cmp r1, 0xb8 |
| if (r1 != 0xb8) {
0x0007444e beq 0x7448a |
0x00074450 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
| if (r0 != 0) {
0x00074452 cbz r0, 0x74470 |
0x00074454 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00074456 ldr.w r3, [r4, 0x2a0] | r3 = *((r4 + 0x2a0));
0x0007445a ldr r1, [r1, 0x28] | r1 = *((r1 + 0x28));
0x0007445c and.w r8, fp, r1 | r8 = fp & r1;
0x00074460 cmp r3, 0 |
| if (r3 != 0) {
0x00074462 bne 0x744d8 | goto label_74;
| }
0x00074464 cmp.w r8, 0x40000 |
| if (r8 == 0x40000) {
0x00074468 beq 0x744f6 | goto label_75;
| }
| label_23:
0x0007446a ldrb.w r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x0007446e ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| }
| label_24:
0x00074470 movs r0, 0 | r0 = 0;
0x00074472 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00074474 str r0, [sp] | *(sp) = r0;
0x00074476 mov r0, sl | r0 = sl;
0x00074478 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007447c ldr.w r3, [sl] | r3 = *(sl);
0x00074480 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x00074484 ldrb.w r0, [r3, 0x57] | r0 = *((r3 + 0x57));
0x00074488 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| }
0x0007448a subs r3, 1 | r3--;
0x0007448c it mi |
| if (r3 >= 1) {
0x0007448e addmi r3, r2, -1 | r3 = r2 + -1;
| }
| if (r0 != 0) {
0x00074492 cbnz r0, 0x744bc | goto label_76;
| }
0x00074494 ldr.w r1, [sl, 0x68] | r1 = *((sl + 0x68));
0x00074498 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0007449c subs r6, 1 | r6--;
0x0007449e sub.w r5, r5, 0x14 | r5 -= 0x14;
0x000744a2 add.w r3, r1, r3, lsl 2 | r3 = r1 + (r3 << 2);
0x000744a6 str r2, [r3, 8] | *((r3 + 8)) = r2;
| if (r6 == 1) {
0x000744a8 beq 0x744c8 | goto label_77;
| }
| label_21:
0x000744aa ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000744ac adds r1, r3, 1 | r1 = r3 + 1;
0x000744ae it mi |
| if (r1 >= r3) {
0x000744b0 addmi r1, r2, -1 | r1 = r2 + -1;
| }
0x000744b4 cmp r0, 0 |
0x000744b6 beq 0x7443a |
| }
0x000744b8 mov r1, sb | r1 = sb;
0x000744ba b 0x74446 | goto label_20;
| label_76:
0x000744bc ldr r3, [sp, 0xc] | r3 = var_ch;
0x000744be subs r6, 1 | r6--;
0x000744c0 sub.w r5, r5, 0x14 | r5 -= 0x14;
0x000744c4 str r2, [r3, 8] | *((r3 + 8)) = r2;
| if (r6 != 1) {
0x000744c6 bne 0x744aa | goto label_21;
| }
| label_77:
0x000744c8 ldr.w fp, [sp, 0x28] | fp = var_28h;
0x000744cc ldr r7, [sp, 0x14] | r7 = var_14h;
0x000744ce ldrd r8, sb, [sp, 0x2c] | __asm ("ldrd r8, sb, [var_2ch]");
| label_73:
0x000744d2 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000744d6 b 0x73ed0 | goto label_22;
| label_74:
0x000744d8 adds r3, r2, 2 | r3 = r2 + 2;
0x000744da movs r1, 0 | r1 = 0;
0x000744dc ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x000744de cmp.w r8, 0x40000 |
0x000744e2 it eq |
| if (r8 != 0x40000) {
0x000744e4 addeq r3, 1 | r3++;
| }
0x000744e6 str r1, [sp] | *(sp) = r1;
0x000744e8 mov r0, sl | r0 = sl;
0x000744ea movs r1, 0x18 | r1 = 0x18;
0x000744ec bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000744f0 cmp.w r8, 0x40000 |
| if (r8 != 0x40000) {
0x000744f4 bne 0x7446a | goto label_23;
| }
| label_75:
0x000744f6 ldr r1, [r5, 0x20] | r1 = *((r5 + 0x20));
0x000744f8 mov r0, sl | r0 = sl;
0x000744fa ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x000744fe ldr.w r2, [r4, 0x2a8] | r2 = *((r4 + 0x2a8));
0x00074502 str r1, [sp, 4] | var_4h = r1;
0x00074504 ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x00074506 adds r3, 2 | r3 += 2;
0x00074508 str r1, [sp] | *(sp) = r1;
0x0007450a movs r1, 0x19 | r1 = 0x19;
0x0007450c bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x00074510 ldr.w r0, [sl] | r0 = *(sl);
0x00074514 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00074516 ldr.w r1, [sl, 0x6c] | r1 = *((sl + 0x6c));
0x0007451a ldrb.w r0, [r0, 0x57] | r0 = *((r0 + 0x57));
0x0007451e adds r2, r3, 1 | r2 = r3 + 1;
0x00074520 it mi |
| if (r2 >= r3) {
0x00074522 addmi r2, r1, -1 | r2 = r1 + -1;
| }
0x00074526 cmp r0, 0 |
| if (r0 != 0) {
0x00074528 bne.w 0x74696 | goto label_78;
| }
0x0007452c add.w r0, r2, r2, lsl 2 | r0 = r2 + (r2 << 2);
0x00074530 ldr.w r2, [sl, 0x68] | r2 = *((sl + 0x68));
0x00074534 add.w r2, r2, r0, lsl 2 | r2 += (r0 << 2);
| label_34:
0x00074538 str r1, [r2, 8] | *((r2 + 8)) = r1;
0x0007453a ldrb.w r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x0007453e b 0x74470 | goto label_24;
| label_65:
0x00074540 ldrb.w r3, [sb, 0x32] | r3 = *((sb + 0x32));
0x00074544 cmp r3, 0 |
| if (r3 != 0) {
0x00074546 bne 0x745ec | goto label_79;
| }
| label_28:
0x00074548 ldr r0, [sp, 0x34] | r0 = var_34h;
| label_29:
0x0007454a ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x0007454c ldr.w r2, [r8] | r2 = *(r8);
0x00074550 adds r1, 1 | r1++;
0x00074552 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x00074556 itee pl |
| if (r1 < 1) {
0x00074558 movpl r3, r1 | r3 = r1;
| }
| if (r1 >= 1) {
0x0007455a ldrmi r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
| }
| if (r1 < 1) {
0x0007455e add.w r3, r3, -1 | r3 += -1;
| }
0x00074562 cmp r2, 0 |
| if (r2 != 0) {
0x00074564 bne 0x7462c | goto label_80;
| }
0x00074566 ldr.w r2, [r8, 0x68] | r2 = *((r8 + 0x68));
0x0007456a add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0007456e add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_32:
0x00074572 subs r0, r0, r1 | r0 -= r1;
0x00074574 strd r5, r6, [sp, 0x14] | __asm ("strd r5, r6, [var_14h]");
0x00074578 add.w r0, r0, r0, lsl 2 | r0 += (r0 << 2);
0x0007457c ldr.w sl, [r4, 4] | sl = *((r4 + 4));
0x00074580 mov lr, r7 | lr = r7;
0x00074582 add.w r0, r3, r0, lsl 2 | r0 = r3 + (r0 << 2);
0x00074586 mov r5, ip | r5 = ip;
0x00074588 adds r3, 0x14 | r3 += 0x14;
0x0007458a b 0x74594 |
| while (r1 != sl) {
| label_30:
0x0007458c cmp r0, r2 |
0x0007458e add.w r3, r3, 0x14 | r3 += 0x14;
| if (r0 < r2) {
0x00074592 bls 0x745bc | goto label_81;
| }
| label_25:
0x00074594 ldr r1, [r3, -0x10] | r1 = *((r3 - 0x10));
0x00074598 mov r2, r3 | r2 = r3;
0x0007459a cmp r1, sl |
0x0007459c bne 0x7458c |
| }
0x0007459e ldrb r1, [r3, -0x14] | r1 = *((r3 - 0x14));
0x000745a2 cmp r1, 0x5e |
| if (r1 == 0x5e) {
0x000745a4 beq 0x74634 | goto label_82;
| }
0x000745a6 cmp r1, 0x87 |
| if (r1 == 0x87) {
0x000745a8 beq 0x745fc | goto label_83;
| }
0x000745aa cmp r1, 0x12 |
0x000745ac add.w r3, r3, 0x14 | r3 += 0x14;
0x000745b0 itt eq |
| if (r1 != 0x12) {
0x000745b2 ldreq r1, [r4, 8] | r1 = *((r4 + 8));
| }
| if (r1 != 0x12) {
0x000745b4 streq r1, [r3, -0x24] | *((r3 - 0x24)) = r1;
| }
0x000745b8 cmp r0, r2 |
| if (r0 > r2) {
0x000745ba bhi 0x74594 | goto label_25;
| }
| label_81:
0x000745bc ldr r5, [sp, 0x14] | r5 = var_14h;
0x000745be mov r7, lr | r7 = lr;
0x000745c0 ldrb.w r1, [sb, 0x30] | r1 = *((sb + 0x30));
0x000745c4 b 0x7414e | goto label_16;
| label_52:
0x000745c6 movs r3, 0 | r3 = 0;
0x000745c8 movs r1, 0x31 | r1 = 0x31;
0x000745ca mov r0, sl | r0 = sl;
0x000745cc str r3, [sp] | *(sp) = r3;
0x000745ce bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000745d2 mov r5, r0 | r5 = r0;
0x000745d4 b 0x73fd0 | goto label_26;
| label_67:
0x000745d6 movs r2, 0 | r2 = 0;
0x000745d8 movs r1, 8 | r1 = 8;
0x000745da str r2, [sp] | *(sp) = r2;
0x000745dc mov r0, sl | r0 = sl;
0x000745de bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000745e2 ldr.w r3, [r4, 0x2b4] | r3 = *((r4 + 0x2b4));
0x000745e6 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x000745ea b 0x741da | goto label_27;
| label_79:
0x000745ec ldr.w r3, [ip, 0xc] | r3 = *((ip + 0xc));
0x000745f0 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000745f2 lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 < r3) {
0x000745f4 bmi 0x74548 | goto label_28;
| }
0x000745f6 ldr.w r0, [sb, 0x3c] | r0 = *((sb + 0x3c));
0x000745fa b 0x7454a | goto label_29;
| label_83:
0x000745fc ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000745fe str r1, [r3, -0x10] | *((r3 - 0x10)) = r1;
0x00074602 movs r1, 0x8e | r1 = 0x8e;
0x00074604 strb r1, [r3, -0x14] | *((r3 - 0x14)) = r1;
0x00074608 b 0x7458c | goto label_30;
| label_71:
0x0007460a mov r1, sl | r1 = sl;
0x0007460c bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00074610 b 0x73e7c | goto label_8;
| label_69:
0x00074612 mov r1, sl | r1 = sl;
0x00074614 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00074618 b 0x742dc | goto label_31;
| label_58:
0x0007461a movs r2, 0 | r2 = 0;
0x0007461c movs r1, 8 | r1 = 8;
0x0007461e str r2, [sp] | *(sp) = r2;
0x00074620 mov r0, sl | r0 = sl;
0x00074622 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00074626 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x0007462a b 0x7406c | goto label_15;
| label_80:
0x0007462c ldr r3, [pc, 0xf8] |
0x0007462e add r3, pc | r3 = 0xe8d5a;
0x00074630 adds r3, 4 | r3 += 4;
0x00074632 b 0x74572 | goto label_32;
| label_82:
0x00074634 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00074636 ldr r6, [r3, -0xc] | r6 = *((r3 - 0xc));
0x0007463a ldr r7, [r1, 0x1c] | r7 = *((r1 + 0x1c));
0x0007463c ands r1, r7, 0x80 | r1 = r7 & 0x80;
| if (r1 != r7) {
0x00074640 bne 0x746dc | goto label_84;
| }
0x00074642 lsls r7, r7, 0x1a | r7 <<= 0x1a;
0x00074644 sxth r6, r6 | __asm ("sxth r6, r6");
| if (r7 < r7) {
0x00074646 bmi 0x746a6 | goto label_85;
| }
| label_36:
0x00074648 ldrh.w ip, [r5, 0x34] | ip = *((r5 + 0x34));
0x0007464c cmp.w ip, 0 |
| if (ip == 0) {
0x00074650 beq 0x7458c | goto label_30;
| }
0x00074652 ldr r7, [r5, 4] | r7 = *((r5 + 4));
0x00074654 movs r1, 0 | r1 = 0;
0x00074656 str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch]");
0x0007465a subs r7, 2 | r7 -= 2;
0x0007465c b 0x74664 |
| while (sl != r6) {
0x0007465e adds r1, 1 | r1++;
0x00074660 cmp r1, ip |
| if (r1 == ip) {
0x00074662 beq 0x746c6 | goto label_86;
| }
0x00074664 ldrsh sl, [r7, 2]! | sl = *((r7 += 2));
0x00074668 cmp sl, r6 |
0x0007466a bne 0x7465e |
| }
0x0007466c sxth r1, r1 | __asm ("sxth r1, r1");
0x0007466e ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x00074672 cmp r1, 0 |
| if (r1 < 0) {
0x00074674 blt 0x7458c | goto label_30;
| }
0x00074676 str r1, [r3, -0xc] | *((r3 - 0xc)) = r1;
0x0007467a ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0007467c str r1, [r3, -0x10] | *((r3 - 0x10)) = r1;
0x00074680 b 0x7458c | goto label_30;
| label_66:
0x00074682 mov r1, sl | r1 = sl;
0x00074684 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00074688 b 0x7417a | goto label_33;
| label_51:
0x0007468a mov r1, sl | r1 = sl;
0x0007468c bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00074690 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x00074694 b 0x73ec0 | goto label_0;
| label_78:
0x00074696 ldr r2, [pc, 0x94] |
0x00074698 add r2, pc | r2 = 0xe8dca;
0x0007469a adds r2, 4 | r2 += 4;
0x0007469c b 0x74538 | goto label_34;
| label_72:
0x0007469e mov r1, sl | r1 = sl;
0x000746a0 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x000746a4 b 0x743f4 | goto label_35;
| label_85:
0x000746a6 cmp r6, 0 |
| if (r6 < 0) {
0x000746a8 blt 0x74648 | goto label_36;
| }
0x000746aa ldr r7, [sp, 0x18] | r7 = var_18h;
0x000746ac ldr r7, [r7, 4] | r7 = *((r7 + 4));
| do {
0x000746ae ldrh.w ip, [r7, 0xa] | ip = *((r7 + 0xa));
0x000746b2 adds r1, 1 | r1++;
0x000746b4 adds r7, 0xc | r7 += 0xc;
0x000746b6 tst.w ip, 0x20 |
0x000746ba itt ne |
| if ((ip & 0x20) == 0) {
0x000746bc addne r6, 1 | r6++;
| }
| if ((ip & 0x20) != 0) {
0x000746be sxthne r6, r6 | __asm ("sxthne r6, r6");
| }
0x000746c0 cmp r6, r1 |
0x000746c2 bge 0x746ae |
| } while (r6 >= r1);
0x000746c4 b 0x74648 | goto label_36;
| label_86:
0x000746c6 ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x000746ca b 0x7458c | goto label_30;
| label_39:
0x000746cc ldr r1, [r0, 0x44] | r1 = *((r0 + 0x44));
0x000746ce mov r4, r1 | r4 = r1;
0x000746d0 cmp r1, 0 |
| if (r1 == 0) {
0x000746d2 beq.w 0x7415c | goto label_37;
| }
0x000746d6 movs r3, 0 | r3 = 0;
0x000746d8 str r3, [sp, 0xc] | var_ch = r3;
0x000746da b 0x740ae | goto label_2;
| label_84:
0x000746dc ldr r1, [sp, 0x18] | r1 = var_18h;
0x000746de ldr r1, [r1, 8] | r1 = *((r1 + 8));
| if (r1 != 0) {
0x000746e0 cbnz r1, 0x746e8 | goto label_87;
| }
0x000746e2 b 0x7470c | goto label_88;
| do {
0x000746e4 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
| if (r1 == 0) {
0x000746e6 cbz r1, 0x7470c | goto label_88;
| }
| label_87:
0x000746e8 ldrb.w r7, [r1, 0x37] | r7 = *((r1 + 0x37));
0x000746ec and r7, r7, 3 | r7 &= 3;
0x000746f0 cmp r7, 2 |
0x000746f2 bne 0x746e4 |
| } while (r7 != 2);
0x000746f4 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x000746f6 ldrsh.w r6, [r1, r6, lsl 1] | offset_1 = r6 << 1;
| r6 = *((r1 + offset_1));
0x000746fa b 0x74648 | goto label_36;
| label_61:
0x000746fc ldrb.w r4, [sp, 0xc] | r4 = var_ch;
0x00074700 b 0x7415c | goto label_37;
| label_56:
0x00074702 mov.w r1, 0x8000 |
0x00074706 movt r1, 0xffff | r1 = 0x-8000;
0x0007470a b 0x74008 | goto label_38;
| label_88:
0x0007470c movs r3, 0 | r3 = 0;
0x0007470e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00074710 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x74730 */
| #include <stdint.h>
|
; (fcn) fcn.00074730 () | void fcn_00074730 (int16_t arg_c0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int32_t var_48h_2;
| int16_t var_50h;
| int16_t var_54h;
| int32_t var_5ch;
| int32_t var_5ch_2;
| int16_t var_64h;
| int32_t var_68h;
| int32_t var_68h_2;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00074730 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00074734 sub sp, 0x9c |
0x00074736 str r2, [sp, 0x44] | var_44h = r2;
0x00074738 mov r4, r3 | r4 = r3;
0x0007473a mov r7, r0 | r7 = r0;
0x0007473c mov sb, r1 | sb = r1;
0x0007473e ldr.w r2, [pc, 0xbec] |
0x00074742 ldr.w r3, [pc, 0xbec] | r3 = *(0x75332);
0x00074746 ldr r6, [r1, 0x44] | r6 = *((r1 + 0x44));
0x00074748 add r2, pc | r2 = 0xe9a7a;
0x0007474a ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0007474c ldr r3, [r2, r3] |
0x0007474e ldr.w r8, [sp, 0xc0] | r8 = *(arg_c0h);
0x00074752 ldr r3, [r3] | r3 = *(0xe9a7a);
0x00074754 str r3, [sp, 0x94] | var_94h = r3;
0x00074756 mov.w r3, 0 | r3 = 0;
0x0007475a ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0007475c str r3, [sp, 0x20] | var_20h = r3;
0x0007475e cmp r5, 0 |
| if (r5 == 0) {
0x00074760 beq.w 0x74e40 | goto label_15;
| }
| label_4:
0x00074764 ldr r2, [r7, 0x38] | r2 = *((r7 + 0x38));
0x00074766 movs r1, 0 | r1 = 0;
0x00074768 ldr.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x0007476c add r0, sp, 0x70 | r0 += var_70h;
0x0007476e str r2, [sp, 0x24] | var_24h = r2;
0x00074770 movs r2, 0x24 | r2 = 0x24;
0x00074772 ldr.w ip, [r3, 0x18] | ip = *((r3 + 0x18));
0x00074776 ldr.w sb, [r3, 0x30] | sb = *((r3 + 0x30));
0x0007477a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007477c ldrsh.w fp, [ip, 0x22] | fp = *((ip + 0x22));
0x00074780 subs r3, 1 | r3--;
0x00074782 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x00074784 str r3, [sp, 0x38] | var_38h = r3;
0x00074786 blx 0x839c | fcn_0000839c ();
0x0007478a ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x0007478c ldrb r2, [r6, 0x11] | r2 = *((r6 + 0x11));
0x0007478e strd r8, r4, [sp, 0x68] | __asm ("strd r8, r4, [var_68h]");
0x00074792 adds r1, r3, 2 | r1 = r3 + 2;
0x00074794 str r3, [sp, 0x1c] | var_1ch = r3;
0x00074796 cmp r2, 0x56 |
0x00074798 str r3, [sp, 0x84] | var_84h = r3;
0x0007479a str r1, [sp, 0x54] | var_54h = r1;
0x0007479c str r1, [sp, 0x7c] | var_7ch = r1;
0x0007479e add.w r1, r3, 3 | r1 = r3 + 3;
0x000747a2 add.w r3, r3, 1 | r3++;
0x000747a6 strd r7, r6, [sp, 0x5c] | __asm ("strd r7, r6, [var_5ch]");
0x000747aa str r5, [sp, 0x64] | var_64h = r5;
0x000747ac str r1, [sp, 0x40] | var_40h = r1;
0x000747ae str r1, [sp, 0x8c] | var_8ch = r1;
0x000747b0 str r3, [sp, 0x28] | var_28h = r3;
| if (r2 == 0x56) {
0x000747b2 beq.w 0x74d06 | goto label_16;
| }
0x000747b6 cmp r2, 0x5a |
| if (r2 == 0x5a) {
0x000747b8 beq.w 0x74e72 | goto label_17;
| }
0x000747bc ldrb.w ip, [r6, 0x10] | ip = *((r6 + 0x10));
0x000747c0 movs r1, 2 | r1 = 2;
0x000747c2 ldrb r0, [r6, 0x12] | r0 = *((r6 + 0x12));
0x000747c4 str r1, [sp, 0x74] | var_74h = r1;
| label_8:
0x000747c6 ldr r4, [r7, 0x2c] | r4 = *((r7 + 0x2c));
0x000747c8 subs r2, 0x56 | r2 -= 0x56;
0x000747ca tst.w r2, 0xfd |
0x000747ce add.w r1, r4, fp | r1 = r4 + fp;
0x000747d2 add.w r8, r4, 1 | r8 = r4 + 1;
0x000747d6 add.w r3, r1, 1 | r3 = r1 + 1;
0x000747da add.w sl, r1, 2 | sl = r1 + 2;
0x000747de str r3, [sp, 0x14] | var_14h = r3;
0x000747e0 it ne |
| if ((r2 & 0xfd) == 0) {
0x000747e2 movne r3, 0 | r3 = 0;
| }
0x000747e4 str.w sl, [r7, 0x2c] | __asm ("str.w sl, [r7, 0x2c]");
0x000747e8 str.w sl, [sp, 0x78] | __asm ("str.w sl, [var_78h]");
0x000747ec it ne |
| if ((r2 & 0xfd) == 0) {
0x000747ee strne r3, [sp, 0xc] | var_ch = r3;
| }
| if ((r2 & 0xfd) == 0) {
0x000747f0 beq.w 0x74d2a | goto label_18;
| }
| label_0:
0x000747f4 subs r0, 0x56 | r0 -= 0x56;
0x000747f6 tst.w r0, 0xfd |
0x000747fa iteet eq |
| if ((r0 & 0xfd) != 0) {
0x000747fc ldreq r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
| }
| if ((r0 & 0xfd) == 0) {
0x000747fe movne r3, 0 | r3 = 0;
| }
| if ((r0 & 0xfd) == 0) {
0x00074800 strne r3, [sp, 0x10] | var_10h = r3;
| }
| if ((r0 & 0xfd) != 0) {
0x00074802 addeq r3, r2, 1 | r3 = r2 + 1;
| }
0x00074804 itt eq |
| if ((r0 & 0xfd) != 0) {
0x00074806 streq r3, [sp, 0x10] | var_10h = r3;
| }
| if ((r0 & 0xfd) != 0) {
0x00074808 streq r3, [r7, 0x2c] | *((r7 + 0x2c)) = r3;
| }
0x0007480a cmp.w ip, 0x4c |
| if (ip == 0x4c) {
0x0007480e beq.w 0x74e5c | goto label_19;
| }
0x00074812 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00074814 cmp r3, 0 |
| if (r3 == 0) {
0x00074816 beq.w 0x7510a | goto label_20;
| }
0x0007481a ldr r2, [r3] | r2 = *(r3);
| label_7:
0x0007481c ldr r0, [r6, 0x4c] | r0 = *((r6 + 0x4c));
0x0007481e ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x00074820 add.w r3, r8, r0 | r3 = r8 + r0;
0x00074824 str r3, [sp, 0x3c] | var_3ch = r3;
| if (r1 != 0) {
0x00074826 cbz r1, 0x7482e |
0x00074828 ldr r1, [r1] | r1 = *(r1);
0x0007482a add r3, r1 | r3 += r1;
0x0007482c str r3, [sp, 0x3c] | var_3ch = r3;
| }
0x0007482e ldr r0, [r7, 0x2c] | r0 = *((r7 + 0x2c));
0x00074830 adds r1, r0, r2 | r1 = r0 + r2;
0x00074832 adds r3, r0, 1 | r3 = r0 + 1;
0x00074834 add.w r0, r1, r2 | r0 = r1 + r2;
0x00074838 add.w r1, r1, 1 | r1++;
0x0007483c str r3, [sp, 0x30] | var_30h = r3;
0x0007483e str r1, [sp, 0x80] | var_80h = r1;
0x00074840 add.w r1, r0, r2 | r1 = r0 + r2;
0x00074844 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00074846 add r2, r1 | r2 += r1;
0x00074848 str r2, [r7, 0x2c] | *((r7 + 0x2c)) = r2;
0x0007484a ite ne |
| if (r3 == r0) {
0x0007484c movne r2, 1 | r2 = 1;
| }
| if (r3 != r0) {
0x0007484e moveq r2, 0 | r2 = 0;
| }
0x00074850 adds r0, 1 | r0++;
0x00074852 adds r1, 1 | r1++;
0x00074854 cmp r3, 0 |
0x00074856 ite eq |
| if (r3 != 0) {
0x00074858 moveq r2, 0 | r2 = 0;
| }
| if (r3 == 0) {
0x0007485a andne r2, r2, 1 | r2 &= 1;
| }
0x0007485e str r0, [sp, 0x88] | var_88h = r0;
0x00074860 str r1, [sp, 0x90] | var_90h = r1;
0x00074862 str r2, [sp, 0x50] | var_50h = r2;
| label_5:
0x00074864 cmp.w fp, 0 |
0x00074868 it gt |
| if (fp <= 0) {
0x0007486a movgt r4, 0 | r4 = 0;
| }
| if (fp <= 0) {
0x0007486c ble 0x74886 | goto label_21;
| }
| do {
0x0007486e add.w r3, r8, r4 | r3 = r8 + r4;
0x00074872 mov r2, sb | r2 = sb;
0x00074874 str r3, [sp] | *(sp) = r3;
0x00074876 movs r1, 0x5e | r1 = 0x5e;
0x00074878 mov r3, r4 | r3 = r4;
0x0007487a mov r0, r5 | r0 = r5;
0x0007487c adds r4, 1 | r4++;
0x0007487e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074882 cmp fp, r4 |
0x00074884 bne 0x7486e |
| } while (fp != r4);
| label_21:
0x00074886 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00074888 movs r1, 0x61 | r1 = 0x61;
0x0007488a mov r3, fp | r3 = fp;
0x0007488c mov r0, r5 | r0 = r5;
0x0007488e str r2, [sp] | *(sp) = r2;
0x00074890 mov r2, r8 | r2 = r8;
0x00074892 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074896 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x00074898 cmp r1, 0 |
| if (r1 == 0) {
0x0007489a beq.w 0x74dc0 | goto label_22;
| }
0x0007489e ldr r3, [r6, 0x4c] | r3 = *((r6 + 0x4c));
0x000748a0 mov r0, r7 | r0 = r7;
0x000748a2 ldr r4, [r1] | r4 = *(r1);
0x000748a4 add r8, r3 | r8 += r3;
0x000748a6 movs r3, 0 | r3 = 0;
0x000748a8 mov r2, r3 | r2 = r3;
0x000748aa bl 0x2c2d4 | fcn_0002c2d4 (r0, r1, r2, r3);
0x000748ae ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x000748b0 mov sb, r0 | sb = r0;
0x000748b2 ldr.w ip, [r6, 0x44] | ip = *((r6 + 0x44));
0x000748b6 adds r3, 1 | r3++;
0x000748b8 str r3, [sp, 0x2c] | var_2ch = r3;
0x000748ba str r3, [r7, 0x2c] | *((r7 + 0x2c)) = r3;
0x000748bc ldrd r3, r2, [r5, 0x6c] | __asm ("ldrd r3, r2, [r5, 0x6c]");
0x000748c0 cmp r3, r2 |
| if (r3 >= r2) {
0x000748c2 bge.w 0x75376 | goto label_23;
| }
0x000748c6 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x000748ca ldr r0, [r5, 0x68] | r0 = *((r5 + 0x68));
0x000748cc adds r1, r3, 1 | r1 = r3 + 1;
0x000748ce lsls r2, r2, 2 | r2 <<= 2;
0x000748d0 str r1, [r5, 0x6c] | *((r5 + 0x6c)) = r1;
0x000748d2 mov.w lr, 0 | lr = 0;
0x000748d6 adds r1, r0, r2 | r1 = r0 + r2;
0x000748d8 str.w ip, [r1, 8] | __asm ("str.w ip, [r1, 8]");
0x000748dc str.w lr, [r1, 0x10] | __asm ("str.w lr, [r1, 0x10]");
0x000748e0 str.w r8, [r1, 4] | __asm ("str.w r8, [r1, 4]");
0x000748e4 str r4, [r1, 0xc] | *((r1 + 0xc)) = r4;
0x000748e6 movs r1, 0x5a | r1 = 0x5a;
0x000748e8 str r1, [r0, r2] | *((r0 + r2)) = r1;
| label_13:
0x000748ea ldr r2, [r5] | r2 = *(r5);
0x000748ec ldrb.w r1, [r2, 0x57] | r1 = *((r2 + 0x57));
0x000748f0 cmp r1, 0 |
| if (r1 != 0) {
0x000748f2 bne.w 0x7516c | goto label_24;
| }
0x000748f6 ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x000748f8 ldr r1, [r5, 0x68] | r1 = *((r5 + 0x68));
0x000748fa add.w r2, r2, r2, lsl 2 | r2 += (r2 << 2);
0x000748fe lsls r2, r2, 2 | r2 <<= 2;
0x00074900 subs r2, 0x14 | r2 -= 0x14;
0x00074902 add r2, r1 | r2 += r1;
0x00074904 movs r1, 0xf8 | r1 = 0xf8;
0x00074906 str.w sb, [r2, 0x10] | __asm ("str.w sb, [r2, 0x10]");
0x0007490a strb r1, [r2, 1] | *((r2 + 1)) = r1;
| label_9:
0x0007490c adds r2, r3, 2 | r2 = r3 + 2;
0x0007490e movs r1, 0xd | r1 = 0xd;
0x00074910 adds r3, 4 | r3 += 4;
0x00074912 str r2, [sp] | *(sp) = r2;
0x00074914 mov r0, r5 | r0 = r5;
0x00074916 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007491a ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0007491c mov r2, r3 | r2 = r3;
0x0007491e str r3, [sp, 0x34] | var_34h = r3;
0x00074920 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x00074922 cmp r2, r3 |
| if (r2 >= r3) {
0x00074924 bge.w 0x75318 | goto label_25;
| }
0x00074928 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0007492a movs r1, 0 | r1 = 0;
0x0007492c ldr r0, [r5, 0x68] | r0 = *((r5 + 0x68));
0x0007492e mov.w ip, 9 |
0x00074932 add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x00074936 adds r2, 1 | r2++;
0x00074938 str r2, [r5, 0x6c] | *((r5 + 0x6c)) = r2;
0x0007493a lsl.w lr, r3, 2 | lr = r3 << 2;
0x0007493e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00074940 add.w r2, r0, lr | r2 = r0 + lr;
0x00074944 strd r3, r1, [r2, 4] | __asm ("strd r3, r1, [r2, 4]");
0x00074948 strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x0007494c str.w ip, [r0, lr] | __asm ("str.w ip, [r0, lr]");
| label_12:
0x00074950 subs r4, 1 | r4--;
0x00074952 ldr r3, [r6, 0x44] | r3 = *((r6 + 0x44));
0x00074954 mov r2, r8 | r2 = r8;
0x00074956 movs r1, 0x50 | r1 = 0x50;
0x00074958 mov r0, r5 | r0 = r5;
0x0007495a str r4, [sp] | *(sp) = r4;
0x0007495c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_2:
0x00074960 ldr.w r8, [sp, 0x28] | r8 = var_28h;
0x00074964 movs r4, 0 | r4 = 0;
0x00074966 mov r3, sl | r3 = sl;
0x00074968 movs r1, 0x7f | r1 = 0x7f;
0x0007496a mov r0, r5 | r0 = r5;
0x0007496c str r4, [sp] | *(sp) = r4;
0x0007496e mov r2, r8 | r2 = r8;
0x00074970 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074974 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00074976 mov r2, r8 | r2 = r8;
0x00074978 movs r1, 0x80 | r1 = 0x80;
0x0007497a mov r0, r5 | r0 = r5;
0x0007497c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00074980 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074984 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x00074986 ldr r2, [r6, 0x54] | r2 = *((r6 + 0x54));
0x00074988 mov r1, r3 | r1 = r3;
0x0007498a str r3, [sp, 0x14] | var_14h = r3;
0x0007498c ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x0007498e cmp r1, r3 |
| if (r1 >= r3) {
0x00074990 bge.w 0x750f8 | goto label_26;
| }
0x00074994 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00074996 mov.w ip, 0x34 |
0x0007499a ldr r0, [r5, 0x68] | r0 = *((r5 + 0x68));
0x0007499c add.w r3, r1, r1, lsl 2 | r3 = r1 + (r1 << 2);
0x000749a0 adds r1, 1 | r1++;
0x000749a2 str r1, [r5, 0x6c] | *((r5 + 0x6c)) = r1;
0x000749a4 lsls r3, r3, 2 | r3 <<= 2;
0x000749a6 adds r1, r0, r3 | r1 = r0 + r3;
0x000749a8 str r2, [r1, 4] | *((r1 + 4)) = r2;
0x000749aa strd r4, sl, [r1, 8] | __asm ("strd r4, sl, [r1, 8]");
0x000749ae str r4, [r1, 0x10] | *((r1 + 0x10)) = r4;
0x000749b0 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_6:
0x000749b4 ldr.w fp, [r7, 8] | fp = *((r7 + 8));
0x000749b8 cmp.w fp, 0 |
| if (fp == 0) {
0x000749bc beq.w 0x74e2e | goto label_27;
| }
| label_3:
0x000749c0 ldr.w ip, [pc, 0x970] |
0x000749c4 mov.w sl, 0 | sl = 0;
0x000749c8 strd r5, r7, [sp, 0x48] | __asm ("strd r5, r7, [var_48h]");
0x000749cc mov r4, r6 | r4 = r6;
0x000749ce mov sb, sl | sb = sl;
0x000749d0 add ip, pc | ip = 0xe9d08;
0x000749d2 add.w r3, ip, 0xbb0 | r3 = ip + 0xbb0;
0x000749d6 mov r8, ip | r8 = ip;
0x000749d8 mov r7, r3 | r7 = r3;
| do {
0x000749da ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x000749dc movs r2, 0 | r2 = 0;
0x000749de ldr r5, [r4, 0x2c] | r5 = *((r4 + 0x2c));
0x000749e0 movs r1, 0x4b | r1 = 0x4b;
0x000749e2 mov r0, fp | r0 = fp;
0x000749e4 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000749e8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000749ec ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x000749ee ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
| if (r3 != 0) {
0x000749f0 cbz r3, 0x749f4 |
0x000749f2 ldr r3, [r3] | r3 = *(r3);
| }
0x000749f4 ldr r2, [r6, 0x58] | r2 = *((r6 + 0x58));
0x000749f6 cmp sl, r3 |
0x000749f8 it lt |
| if (sl >= r3) {
0x000749fa movlt sl, r3 | sl = r3;
| }
0x000749fc movs r1, r0 | r1 = r0;
0x000749fe movs r0, r0 |
0x00074a00 addw r1, r8, 0xba4 | __asm ("addw r1, r8, aav.0x000000ff");
0x00074a04 cmp r3, r1 |
0x00074a06 it ne |
| if (r3 != r1) {
0x00074a08 cmpne r3, r7 | __asm ("cmpne r3, r7");
| }
| if (r3 == r1) {
0x00074a0a bne 0x74a2a |
0x00074a0c ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00074a0e movs r1, 0x47 | r1 = 0x47;
0x00074a10 str r2, [sp] | *(sp) = r2;
0x00074a12 mov r0, fp | r0 = fp;
0x00074a14 str r2, [sp, 0x18] | var_18h = r2;
0x00074a16 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074a1a ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00074a1c movs r1, 0x47 | r1 = 0x47;
0x00074a1e ldr r2, [sp, 0x18] | r2 = var_18h;
0x00074a20 mov r0, fp | r0 = fp;
0x00074a22 adds r3, 1 | r3++;
0x00074a24 str r2, [sp] | *(sp) = r2;
0x00074a26 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x00074a2a ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00074a2c lsls r3, r3, 0x13 | r3 <<= 0x13;
| if (r3 < r3) {
0x00074a2e bpl 0x74a38 |
0x00074a30 ldr r2, [r4, 0x3c] | r2 = *((r4 + 0x3c));
0x00074a32 cmp r2, 0 |
| if (r2 != 0) {
0x00074a34 bne.w 0x74d32 | goto label_28;
| }
| }
| label_1:
0x00074a38 ldr r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x00074a3a cmp r4, 0 |
0x00074a3c bne 0x749da |
| } while (r4 != 0);
0x00074a3e ldrd r5, r7, [sp, 0x48] | __asm ("ldrd r5, r7, [var_48h]");
0x00074a42 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00074a44 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x00074a46 add.w r1, sl, r3 | r1 = sl + r3;
0x00074a4a adds r3, 1 | r3++;
0x00074a4c str r1, [r7, 0x2c] | *((r7 + 0x2c)) = r1;
0x00074a4e str r3, [sp, 0x70] | var_70h = r3;
| if (r2 != 0) {
0x00074a50 cbz r2, 0x74a70 |
0x00074a52 ldr r3, [r7, 8] | r3 = *((r7 + 8));
| if (r3 != 0) {
0x00074a54 cbz r3, 0x74a5e |
0x00074a56 ldr r1, [r6, 0x18] | r1 = *((r6 + 0x18));
0x00074a58 mov r0, r7 | r0 = r7;
0x00074a5a bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
| }
0x00074a5e ldrb r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00074a60 mov r0, r7 | r0 = r7;
0x00074a62 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00074a64 cmp r3, 0x59 |
0x00074a66 ite eq |
| if (r3 != 0x59) {
0x00074a68 moveq r2, 3 | r2 = 3;
| }
| if (r3 == 0x59) {
0x00074a6a movne r2, 0 | r2 = 0;
| }
0x00074a6c bl 0x2f6bc | fcn_0002f6bc (r0, r1, r2);
| }
0x00074a70 ldr r2, [sp, 0x10] | r2 = var_10h;
| if (r2 == 0) {
0x00074a72 cbz r2, 0x74a92 | void (*0x74a92)() ();
| }
0x00074a74 ldr r3, [r7, 8] | r3 = *((r7 + 8));
| if (r3 == 0) {
0x00074a76 cbz r3, 0x74a80 | void (*0x74a80)() ();
| }
0x00074a78 ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x00074a7a mov r0, r7 | r0 = r7;
0x00074a7c bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
| label_16:
0x00074d06 ldrb.w ip, [r6, 0x10] | ip = *((r6 + 0x10));
0x00074d0a cmp.w ip, 0x59 |
| if (ip != 0x59) {
0x00074d0e bne.w 0x75110 | goto label_29;
| }
0x00074d12 ldr r4, [r7, 0x2c] | r4 = *((r7 + 0x2c));
0x00074d14 ldrb r0, [r6, 0x12] | r0 = *((r6 + 0x12));
0x00074d16 add.w r1, fp, r4 | r1 = fp + r4;
0x00074d1a add.w r8, r4, 1 | r8 = r4 + 1;
0x00074d1e add.w sl, r1, 2 | sl = r1 + 2;
0x00074d22 adds r3, r1, 1 | r3 = r1 + 1;
0x00074d24 str.w sl, [sp, 0x78] | __asm ("str.w sl, [var_78h]");
0x00074d28 str r3, [sp, 0x14] | var_14h = r3;
| label_18:
0x00074d2a adds r3, r1, 3 | r3 = r1 + 3;
0x00074d2c str r3, [sp, 0xc] | var_ch = r3;
0x00074d2e str r3, [r7, 0x2c] | *((r7 + 0x2c)) = r3;
0x00074d30 b 0x747f4 | goto label_0;
| label_28:
0x00074d32 movs r5, 0 | r5 = 0;
0x00074d34 movs r1, 0x92 | r1 = 0x92;
0x00074d36 mov r3, r5 | r3 = r5;
0x00074d38 mov r0, fp | r0 = fp;
0x00074d3a str r5, [sp] | *(sp) = r5;
0x00074d3c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074d40 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00074d42 mov r2, r5 | r2 = r5;
0x00074d44 movs r1, 0x47 | r1 = 0x47;
0x00074d46 mov r0, fp | r0 = fp;
0x00074d48 str r5, [sp] | *(sp) = r5;
0x00074d4a adds r3, 1 | r3++;
0x00074d4c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00074d50 b 0x74a38 | goto label_1;
| label_22:
0x00074dc0 str r1, [sp, 0x2c] | var_2ch = r1;
0x00074dc2 str r1, [sp, 0x34] | var_34h = r1;
0x00074dc4 b 0x74960 | goto label_2;
| label_27:
0x00074e2e ldr r3, [r7, 0x74] | r3 = *((r7 + 0x74));
0x00074e30 cmp r3, 0 |
| if (r3 == 0) {
0x00074e32 beq.w 0x751d6 | goto label_30;
| }
| label_10:
0x00074e36 mov r0, r7 | r0 = r7;
0x00074e38 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x00074e3c mov fp, r0 |
0x00074e3e b 0x749c0 | goto label_3;
| label_15:
0x00074e40 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x00074e42 cmp r3, 0 |
| if (r3 == 0) {
0x00074e44 beq.w 0x751e4 | goto label_31;
| }
| label_11:
0x00074e48 mov r0, r7 | r0 = r7;
0x00074e4a bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x00074e4e mov r5, r0 | r5 = r0;
0x00074e50 b 0x74764 | goto label_4;
| label_19:
0x00074e5c movs r3, 0 | r3 = 0;
0x00074e5e str r3, [sp, 0x50] | var_50h = r3;
0x00074e60 str r3, [sp, 0x30] | var_30h = r3;
0x00074e62 str r3, [sp, 0x3c] | var_3ch = r3;
0x00074e64 b 0x74864 | goto label_5;
| label_17:
0x00074e72 ldr r2, [r6, 0x58] | r2 = *((r6 + 0x58));
0x00074e74 ldrb r0, [r6, 0x12] | r0 = *((r6 + 0x12));
0x00074e76 ldrb.w ip, [r6, 0x10] | ip = *((r6 + 0x10));
0x00074e7a cmp r2, 0 |
| if (r2 != 0) {
0x00074e7c bne.w 0x751b4 | goto label_32;
| }
0x00074e80 ldr.w r4, [pc, 0x4c8] | r4 = *(0x0007534c);
0x00074e84 mov r1, r6 | r1 = r6;
0x00074e86 add r4, pc | r4 += pc;
0x00074e88 add.w sl, r4, 0xbb0 | sl = r4 + 0xbb0;
0x00074e8c addw r8, r4, 0xba4 | __asm ("addw r8, r4, aav.0x000000ff");
0x00074e90 addw lr, r4, 0xbbc | __asm ("addw lr, r4, aav.0x000000ff");
0x00074e94 addw r4, r4, 0xbc4 | __asm ("addw r4, r4, aav.0x000000ff");
0x00074e98 b 0x74ea2 |
| while (r3 == 0) {
0x00074e9a ldr r1, [r1, 0x24] | r1 = *((r1 + 0x24));
0x00074e9c cmp r1, 0 |
| if (r1 == 0) {
0x00074e9e beq.w 0x751a8 | goto label_33;
| }
0x00074ea2 ldr r3, [r1, 0x2c] | r3 = *((r1 + 0x2c));
0x00074ea4 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x00074ea6 cmp r2, r8 |
0x00074ea8 it ne |
| if (r2 != r8) {
0x00074eaa cmpne r2, sl | __asm ("cmpne r2, sl");
| }
0x00074eac ite eq |
| if (r2 != r8) {
0x00074eae moveq r3, 1 | r3 = 1;
| }
| if (r2 == r8) {
0x00074eb0 movne r3, 0 | r3 = 0;
| }
0x00074eb2 cmp r2, lr |
0x00074eb4 it eq |
| if (r2 != lr) {
0x00074eb6 orreq r3, r3, 1 | r3 |= 1;
| }
0x00074eba cmp r2, r4 |
0x00074ebc it eq |
| if (r2 != r4) {
0x00074ebe orreq r3, r3, 1 | r3 |= 1;
| }
0x00074ec2 cmp r3, 0 |
0x00074ec4 beq 0x74e9a |
| }
0x00074ec6 b 0x751b4 | goto label_32;
| label_26:
0x000750f8 mov r3, r4 | r3 = r4;
0x000750fa movs r1, 0x34 | r1 = 0x34;
0x000750fc mov r0, r5 | r0 = r5;
0x000750fe str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00075102 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00075106 str r0, [sp, 0x14] | var_14h = r0;
0x00075108 b 0x749b4 | goto label_6;
| label_20:
0x0007510a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0007510c b.w 0x7481c | goto label_7;
| label_29:
0x00075110 ldr r1, [r6, 0x18] | r1 = *((r6 + 0x18));
0x00075112 ldr r0, [r7] | r0 = *(r7);
0x00075114 bl 0x34a78 | r0 = fcn_00034a78 (r0, r1);
| if (r0 != 0) {
0x00075118 cbz r0, 0x7511e |
0x0007511a movs r2, 1 | r2 = 1;
0x0007511c str r2, [sp, 0x74] | var_74h = r2;
| }
| label_14:
0x0007511e ldrb.w ip, [r6, 0x10] | ip = *((r6 + 0x10));
0x00075122 ldrb r2, [r6, 0x11] | r2 = *((r6 + 0x11));
0x00075124 ldrb r0, [r6, 0x12] | r0 = *((r6 + 0x12));
0x00075126 b.w 0x747c6 | goto label_8;
| label_24:
0x0007516c ldr.w r2, [r2, 0x210] | r2 = *((r2 + 0x210));
0x00075170 cmp.w sb, 0 |
0x00075174 clz r2, r2 | r2 &= r2;
0x00075178 lsr.w r2, r2, 5 | r2 >>= 5;
0x0007517c it eq |
| if (sb != 0) {
0x0007517e moveq r2, 0 | r2 = 0;
| }
0x00075180 cmp r2, 0 |
| if (r2 == 0) {
0x00075182 beq.w 0x7490c | goto label_9;
| }
0x00075186 ldr.w r2, [sb] | r2 = *(sb);
0x0007518a subs r2, 1 | r2--;
0x0007518c str.w r2, [sb] | __asm ("str.w r2, [sb]");
0x00075190 cmp r2, 0 |
| if (r2 != 0) {
0x00075192 bne.w 0x7490c | goto label_9;
| }
0x00075196 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0007519a mov r1, sb | r1 = sb;
0x0007519c str r3, [sp, 0x18] | var_18h = r3;
0x0007519e bl 0x16808 | fcn_00016808 (r0, r1);
0x000751a2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000751a4 b.w 0x7490c | goto label_9;
| label_33:
0x000751a8 cmp r0, 0x58 |
0x000751aa itt ne |
| if (r0 == 0x58) {
0x000751ac movne r2, 1 | r2 = 1;
| }
| if (r0 == 0x58) {
0x000751ae strne r2, [sp, 0x74] | var_74h = r2;
| }
0x000751b0 beq.w 0x7538a |
| while (ip == 0x59) {
| label_32:
0x000751b4 ldr r4, [r7, 0x2c] | r4 = *((r7 + 0x2c));
0x000751b6 movs r3, 0 | r3 = 0;
0x000751b8 str r3, [sp, 0xc] | var_ch = r3;
0x000751ba add.w r3, fp, r4 | r3 = fp + r4;
0x000751be add.w r8, r4, 1 | r8 = r4 + 1;
0x000751c2 add.w sl, r3, 2 | sl = r3 + 2;
0x000751c6 adds r3, 1 | r3++;
0x000751c8 str r3, [sp, 0x14] | var_14h = r3;
0x000751ca str.w sl, [r7, 0x2c] | __asm ("str.w sl, [r7, 0x2c]");
0x000751ce str.w sl, [sp, 0x78] | __asm ("str.w sl, [var_78h]");
0x000751d2 b.w 0x747f4 | goto label_0;
| label_30:
0x000751d6 ldr r3, [r7] | r3 = *(r7);
0x000751d8 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000751da lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
0x000751dc itt pl |
| if (r2 < r3) {
0x000751de movpl r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x000751e0 strbpl r3, [r7, 0x17] | *((r7 + 0x17)) = r3;
| }
0x000751e2 b 0x74e36 | goto label_10;
| label_31:
0x000751e4 ldr r3, [r0] | r3 = *(r0);
0x000751e6 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000751e8 lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x000751ea itt pl |
| if (r1 < r3) {
0x000751ec movpl r3, 1 | r3 = 1;
| }
| if (r1 < r3) {
0x000751ee strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x000751f0 b 0x74e48 | goto label_11;
| label_25:
0x00075318 movs r3, 0 | r3 = 0;
0x0007531a ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0007531c movs r1, 9 | r1 = 9;
0x0007531e mov r0, r5 | r0 = r5;
0x00075320 str r3, [sp] | *(sp) = r3;
0x00075322 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00075326 str r0, [sp, 0x34] | var_34h = r0;
0x00075328 b.w 0x74950 | goto label_12;
| label_23:
0x00075376 mov r3, ip | r3 = ip;
0x00075378 mov r2, r8 | r2 = r8;
0x0007537a movs r1, 0x5a | r1 = 0x5a;
0x0007537c mov r0, r5 | r0 = r5;
0x0007537e str r4, [sp] | *(sp) = r4;
0x00075380 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00075384 mov r3, r0 | r3 = r0;
0x00075386 b.w 0x748ea | goto label_13;
0x0007538a cmp.w ip, 0x59 |
0x0007538e beq.w 0x751b4 |
| }
0x00075392 ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x00075394 ldr r0, [r7] | r0 = *(r7);
0x00075396 bl 0x34a78 | r0 = fcn_00034a78 (r0, r1);
0x0007539a cmp r0, 0 |
| if (r0 == 0) {
0x0007539c beq.w 0x7511e | goto label_14;
| }
0x000753a0 movs r2, 3 | r2 = 3;
0x000753a2 str r2, [sp, 0x74] | var_74h = r2;
0x000753a4 b 0x7511e | goto label_14;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x75494 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00075494 () | void fcn_00075494 (int16_t arg_1ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_6;
| int16_t var_14h_3;
| int16_t var_18h_3;
| int16_t var_18h_2;
| int16_t var_20h_5;
| int16_t var_20h_4;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_34h_3;
| int16_t var_14h_2;
| int16_t var_30h_2;
| int16_t var_0h_4;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_ch_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00075494 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00075498 mov fp, r2 |
0x0007549a ldr r2, [pc, 0x31c] |
0x0007549c mov sb, r3 | sb = r3;
0x0007549e sub sp, 0x5c |
0x000754a0 mov r6, r0 | r6 = r0;
0x000754a2 ldr r3, [pc, 0x318] | r3 = *(0x757be);
0x000754a4 add r2, pc | r2 = 0xeac62;
0x000754a6 str r1, [sp, 0x2c] | var_8h = r1;
0x000754a8 ldr.w r8, [sp, 0x80] | r8 = var_0h_4;
0x000754ac ldr r3, [r2, r3] |
0x000754ae ldr r2, [r0] | r2 = *(r0);
0x000754b0 ldrd sl, r7, [sp, 0x84] | __asm ("ldrd sl, r7, [var_84h]");
0x000754b4 ldr r3, [r3] | r3 = *(0xeac62);
0x000754b6 str r3, [sp, 0x54] | var_30h_2 = r3;
0x000754b8 mov.w r3, 0 | r3 = 0;
0x000754bc ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000754be str r2, [sp, 0x18] | var_18h_3 = r2;
0x000754c0 str r3, [sp, 0x24] | var_20h_4 = r3;
0x000754c2 cmp r3, 0 |
| if (r3 == 0) {
0x000754c4 beq.w 0x755d8 | goto label_8;
| }
0x000754c8 ldr r3, [sp, 0x8c] | r3 = var_ch_2;
0x000754ca adds r3, 1 | r3++;
| if (r3 == 1) {
0x000754cc beq.w 0x755f0 | goto label_9;
| }
| label_1:
0x000754d0 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x000754d4 cmp r3, 0 |
0x000754d6 mov.w r3, 0 | r3 = 0;
0x000754da str r3, [sp, 0x28] | var_4h_2 = r3;
| if (r3 <= 0) {
0x000754dc ble.w 0x7574a | goto label_10;
| }
| label_2:
0x000754e0 movs r3, 0 | r3 = 0;
0x000754e2 str r7, [sp, 0x88] | var_88h = r7;
0x000754e4 add r2, sp, 0x34 | r2 += var_34h_3;
0x000754e6 mov r7, sb | r7 = sb;
0x000754e8 mov r4, r3 | r4 = r3;
0x000754ea ldr.w sb, [sp, 0x88] | sb = var_88h;
0x000754ee mov r5, r3 | r5 = r3;
0x000754f0 str r2, [sp, 0x14] | var_14h_3 = r2;
0x000754f2 str.w fp, [sp, 0x1c] | __asm ("str.w fp, [arg_1ch]");
0x000754f6 b 0x75546 |
| while (sl != 0) {
0x000754f8 ldrsh.w r3, [sl, r5, lsl 2] | offset_0 = r5 << 2;
| r3 = *((sl + offset_0));
| label_0:
0x000754fc ldr.w r2, [r8] | r2 = *(r8);
0x00075500 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00075504 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00075506 ldr.w r0, [r2, r3, lsl 2] | offset_1 = r3 << 2;
| r0 = *((r2 + offset_1));
0x0007550a str r0, [sp, 0x34] | var_34h_3 = r0;
| if (r0 != 0) {
0x0007550c cbz r0, 0x75516 |
0x0007550e blx 0x85b4 | r0 = fcn_000085b4 ();
0x00075512 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x00075516 movs r1, 0x3b | r1 = 0x3b;
0x00075518 movs r3, 0 | r3 = 0;
0x0007551a str r0, [sp, 0x38] | var_14h_2 = r0;
0x0007551c adds r5, 1 | r5++;
0x0007551e ldrd r2, r0, [sp, 0x14] | __asm ("ldrd r2, r0, [var_14h_3]");
0x00075522 bl 0x21bd8 | fcn_00021bd8 (r0, r1, r2, r3);
0x00075526 mov r2, fp | r2 = fp;
0x00075528 mov r3, r0 | r3 = r0;
0x0007552a movs r1, 0x35 | r1 = 0x35;
0x0007552c mov r0, r6 | r0 = r6;
0x0007552e bl 0x24c54 | fcn_00024c54 (r0, r1, r2, r3);
0x00075532 mov r1, r4 | r1 = r4;
0x00075534 mov r2, r0 | r2 = r0;
0x00075536 mov r0, r6 | r0 = r6;
0x00075538 bl 0x30378 | fcn_00030378 (r0, r1, r2);
0x0007553c ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x00075540 mov r4, r0 | r4 = r0;
0x00075542 cmp r3, r5 |
| if (r3 <= r5) {
0x00075544 ble 0x7556a | goto label_11;
| }
0x00075546 mov.w r3, -1 | r3 = -1;
| if (r7 != 0) {
0x0007554a cbz r7, 0x75552 |
0x0007554c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0007554e ldrsh.w r3, [r3, r5, lsl 1] | offset_2 = r5 << 1;
| r3 = *((r3 + offset_2));
| }
0x00075552 ldr r1, [sp, 0x1c] | r1 = *(arg_1ch);
0x00075554 mov r2, sb | r2 = sb;
0x00075556 mov r0, r6 | r0 = r6;
0x00075558 bl 0x21df4 | r0 = fcn_00021df4 (r0, r1, r2, r3, r4, r5);
0x0007555c mov fp, r0 |
0x0007555e cmp.w sl, 0 |
0x00075562 bne 0x754f8 |
| }
0x00075564 ldrsh.w r3, [r8, 0x24] | r3 = *((r8 + 0x24));
0x00075568 b 0x754fc | goto label_0;
| label_11:
0x0007556a str.w sb, [sp, 0x88] | __asm ("str.w sb, [var_88h]");
0x0007556e mov sb, r7 | sb = r7;
0x00075570 ldr.w fp, [sp, 0x1c] | fp = *(arg_1ch);
0x00075574 ldr r7, [sp, 0x88] | r7 = var_88h;
0x00075576 str r0, [sp, 0x20] | var_20h_5 = r0;
| label_6:
0x00075578 ldr.w r3, [r8] | r3 = *(r8);
0x0007557c ldr r2, [sp, 0x8c] | r2 = var_ch_2;
0x0007557e cmp r3, fp |
0x00075580 it eq |
| if (r3 == fp) {
0x00075582 cmpeq r2, 1 | __asm ("cmpeq r2, 1");
| }
| if (r3 == fp) {
0x00075584 beq.w 0x756a2 | goto label_12;
| }
| label_3:
0x00075588 ldr r3, [sp, 0x2c] | r3 = var_8h;
0x0007558a ldr r0, [sp, 0x14] | r0 = var_14h_3;
0x0007558c ldr r1, [sp, 0x20] | r1 = var_20h_5;
0x0007558e strd r6, r3, [sp, 0x34] | __asm ("strd r6, r3, [sp, 0x34]");
0x00075592 movs r3, 0 | r3 = 0;
0x00075594 strd r3, r3, [sp, 0x3c] | __asm ("strd r3, r3, [sp, 0x3c]");
0x00075598 strd r3, r3, [sp, 0x44] | __asm ("strd r3, r3, [sp, 0x44]");
0x0007559c strd r3, r3, [sp, 0x4c] | __asm ("strd r3, r3, [sp, 0x4c]");
0x000755a0 bl 0x3119c | fcn_0003119c (r0, r1);
0x000755a4 ldr r5, [r6, 0x24] | r5 = *((r6 + 0x24));
0x000755a6 cmp r5, 0 |
| if (r5 == 0) {
0x000755a8 beq 0x75670 | goto label_13;
| }
| label_4:
0x000755aa ldr r3, [sp, 0x20] | r3 = var_20h_5;
| if (r3 == 0) {
0x000755ac cbz r3, 0x755b6 | void (*0x755b6)() ();
| }
| label_8:
0x000755d8 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x000755da cmp r3, 0 |
| if (r3 == 0) {
0x000755dc beq.w 0x7573e | goto label_14;
| }
| label_5:
0x000755e0 mov r0, r6 | r0 = r6;
0x000755e2 bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x000755e6 ldr r3, [sp, 0x8c] | r3 = var_ch_2;
0x000755e8 str r0, [sp, 0x24] | var_20h_4 = r0;
0x000755ea adds r3, 1 | r3++;
| if (r3 != 1) {
0x000755ec bne.w 0x754d0 | goto label_1;
| }
| label_9:
0x000755f0 ldr r3, [sp, 0x24] | r3 = var_20h_4;
0x000755f2 ldrb.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x000755f6 ldr r1, [r3, 0x6c] | r1 = *((r3 + 0x6c));
0x000755f8 ldr r3, [r3, 0x70] | r3 = *((r3 + 0x70));
0x000755fa str r1, [sp, 0x28] | var_4h_2 = r1;
0x000755fc cmp r1, r3 |
| if (r1 >= r3) {
0x000755fe bge.w 0x757a4 | goto label_15;
| }
0x00075602 ldr r1, [sp, 0x28] | r1 = var_4h_2;
0x00075604 movs r0, 0 | r0 = 0;
0x00075606 ldr r5, [sp, 0x24] | r5 = var_20h_4;
0x00075608 add.w r3, r1, r1, lsl 2 | r3 = r1 + (r1 << 2);
0x0007560c ldr r4, [r5, 0x68] | r4 = *((r5 + 0x68));
0x0007560e adds r1, 1 | r1++;
0x00075610 lsls r3, r3, 2 | r3 <<= 2;
0x00075612 str r1, [r5, 0x6c] | *((r5 + 0x6c)) = r1;
0x00075614 movs r5, 0x30 | r5 = 0x30;
0x00075616 adds r1, r4, r3 | r1 = r4 + r3;
0x00075618 strd r2, r0, [r1, 4] | __asm ("strd r2, r0, [r1, 4]");
0x0007561c strd r0, r0, [r1, 0xc] | __asm ("strd r0, r0, [r1, 0xc]");
0x00075620 str r5, [r4, r3] | *((r4 + r3)) = r5;
| label_7:
0x00075622 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x00075626 cmp r3, 0 |
0x00075628 itttt le |
| if (r3 > 0) {
0x0007562a movle r3, 0 | r3 = 0;
| }
| if (r3 > 0) {
0x0007562c strle r3, [sp, 0x20] | var_20h_5 = r3;
| }
| if (r3 > 0) {
0x0007562e addle r3, sp, 0x34 | r3 += var_34h_3;
| }
| if (r3 <= 0) {
0x00075630 strle r3, [sp, 0x14] | var_14h_3 = r3;
| goto label_16;
| }
| if (r3 > 0) {
| label_16:
0x00075632 bgt.w 0x754e0 | goto label_2;
| }
0x00075636 b 0x75588 | goto label_3;
| label_13:
0x00075670 mov r3, r5 | r3 = r5;
0x00075672 ldr r1, [sp, 0x2c] | r1 = var_8h;
0x00075674 ldr r2, [sp, 0x20] | r2 = var_20h_5;
0x00075676 mov r0, r6 | r0 = r6;
0x00075678 strd r5, r5, [sp, 8] | __asm ("strd r5, r5, [sp, 8]");
0x0007567c strd r5, r5, [sp] | __asm ("strd r5, r5, [sp]");
0x00075680 bl 0x707d8 | fcn_000707d8 (r0, r1, r2, r3, r4, r5, r6);
0x00075684 str r5, [sp] | *(sp) = r5;
0x00075686 mov r5, r0 | r5 = r0;
0x00075688 ldrb.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x0007568c movs r1, 0x9e | r1 = 0x9e;
0x0007568e ldr r3, [sp, 0x8c] | r3 = var_ch_2;
0x00075690 ldr r0, [sp, 0x24] | r0 = var_20h_4;
0x00075692 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00075696 cmp r5, 0 |
| if (r5 == 0) {
0x00075698 beq 0x755aa | goto label_4;
| }
| label_12:
0x000756a2 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x000756a6 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x000756aa beq 0x7575a | goto label_17;
| }
0x000756ac ldrh.w r1, [sb, 0x32] | r1 = *((sb + 0x32));
| if (r1 == 0) {
0x000756b0 cbz r1, 0x75724 | goto label_18;
| }
0x000756b2 str.w r8, [sp, 0x1c] | __asm ("str.w r8, [arg_1ch]");
0x000756b6 movs r1, 0 | r1 = 0;
0x000756b8 ldr.w r8, [sp, 0x18] | r8 = var_18h_3;
0x000756bc mov r5, r1 | r5 = r1;
0x000756be mov r4, r1 | r4 = r1;
| do {
0x000756c0 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x000756c4 mov r2, r7 | r2 = r7;
0x000756c6 mov r1, fp | r1 = fp;
0x000756c8 mov r0, r6 | r0 = r6;
0x000756ca ldrsh.w sl, [r3, r5, lsl 1] | offset_3 = r5 << 1;
| sl = *((r3 + offset_3));
0x000756ce mov r3, sl | r3 = sl;
0x000756d0 bl 0x21df4 | fcn_00021df4 (r0, r1, r2, r3, r4, r5);
0x000756d4 ldr.w r2, [fp, 4] | r2 = *((fp + 4));
0x000756d8 add.w r3, sl, sl, lsl 1 | r3 = sl + (sl << 1);
0x000756dc mov sl, r0 | sl = r0;
0x000756de ldr.w r0, [r2, r3, lsl 2] | offset_4 = r3 << 2;
| r0 = *((r2 + offset_4));
0x000756e2 str r0, [sp, 0x34] | var_34h_3 = r0;
| if (r0 != 0) {
0x000756e4 cbz r0, 0x756ee |
0x000756e6 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000756ea bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x000756ee ldr r2, [sp, 0x14] | r2 = var_14h_3;
0x000756f0 movs r1, 0x3b | r1 = 0x3b;
0x000756f2 movs r3, 0 | r3 = 0;
0x000756f4 str r0, [sp, 0x38] | var_14h_2 = r0;
0x000756f6 mov r0, r8 | r0 = r8;
0x000756f8 adds r5, 1 | r5++;
0x000756fa bl 0x21bd8 | fcn_00021bd8 (r0, r1, r2, r3);
0x000756fe mov r2, sl | r2 = sl;
0x00075700 mov r3, r0 | r3 = r0;
0x00075702 movs r1, 0x2d | r1 = 0x2d;
0x00075704 mov r0, r6 | r0 = r6;
0x00075706 bl 0x24c54 | fcn_00024c54 (r0, r1, r2, r3);
0x0007570a mov r1, r4 | r1 = r4;
0x0007570c mov r2, r0 | r2 = r0;
0x0007570e mov r0, r6 | r0 = r6;
0x00075710 bl 0x30378 | fcn_00030378 (r0, r1, r2);
0x00075714 ldrh.w r3, [sb, 0x32] | r3 = *((sb + 0x32));
0x00075718 mov r4, r0 | r4 = r0;
0x0007571a cmp r3, r5 |
0x0007571c bgt 0x756c0 |
| } while (r3 > r5);
0x0007571e ldr.w r8, [sp, 0x1c] | r8 = *(arg_1ch);
0x00075722 mov r1, r0 | r1 = r0;
| label_18:
0x00075724 mov r2, r1 | r2 = r1;
0x00075726 movs r3, 0 | r3 = 0;
0x00075728 movs r1, 0x13 | r1 = 0x13;
0x0007572a mov r0, r6 | r0 = r6;
0x0007572c bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x00075730 mov r2, r0 | r2 = r0;
| do {
0x00075732 ldr r1, [sp, 0x20] | r1 = var_20h_5;
0x00075734 mov r0, r6 | r0 = r6;
0x00075736 bl 0x30378 | fcn_00030378 (r0, r1, r2);
0x0007573a str r0, [sp, 0x20] | var_20h_5 = r0;
0x0007573c b 0x75588 | goto label_3;
| label_14:
0x0007573e ldr r3, [r2, 0x50] | r3 = *((r2 + 0x50));
0x00075740 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x00075742 itt pl |
| if (r3 < r3) {
0x00075744 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x00075746 strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x00075748 b 0x755e0 | goto label_5;
| label_10:
0x0007574a add r2, sp, 0x34 | r2 += var_34h_3;
0x0007574c str r3, [sp, 0x20] | var_20h_5 = r3;
0x0007574e str r2, [sp, 0x14] | var_14h_3 = r2;
0x00075750 b 0x75578 | goto label_6;
| label_17:
0x0007575a ldr r0, [r6] | r0 = *(r6);
0x0007575c movs r1, 0xb0 | r1 = 0xb0;
0x0007575e ldr r2, [sp, 0x14] | r2 = var_14h_3;
0x00075760 ldrsb r4, [r4, r5] | r4 = *((r4 + r5));
0x00075762 movs r7, r0 | r7 = r0;
0x00075764 movs r0, r0 |
0x00075766 movs r0, r0 |
0x00075768 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0007576a cbz r0, 0x75772 |
0x0007576c movs r3, 0x44 | r3 = 0x44;
0x0007576e str r7, [r0, 0x1c] | *((r0 + 0x1c)) = r7;
0x00075770 strb r3, [r0, 1] | *((r0 + 1)) = r3;
| }
0x00075772 ldr r4, [sp, 0x2c] | r4 = var_8h;
0x00075774 movs r3, 0 | r3 = 0;
0x00075776 ldr r2, [sp, 0x14] | r2 = var_14h_3;
0x00075778 movs r1, 0xa7 | r1 = 0xa7;
0x0007577a ldr r0, [sp, 0x18] | r0 = var_18h_3;
0x0007577c strd r3, r3, [sp, 0x34] | __asm ("strd r3, r3, [sp, 0x34]");
0x00075780 ldr r4, [r4, 0x30] | r4 = *((r4 + 0x30));
0x00075782 bl 0x21bd8 | r0 = fcn_00021bd8 (r0, r1, r2, r3);
0x00075786 mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x00075788 cbz r0, 0x75796 |
0x0007578a movw r2, 0xffff | r2 = 0xffff;
0x0007578e str.w fp, [r0, 0x2c] | __asm ("str.w fp, [r0, 0x2c]");
0x00075792 str r4, [r0, 0x1c] | *((r0 + 0x1c)) = r4;
0x00075794 strh r2, [r0, 0x20] | *((r0 + 0x20)) = r2;
| }
0x00075796 mov r2, r5 | r2 = r5;
0x00075798 movs r1, 0x34 | r1 = 0x34;
0x0007579a mov r0, r6 | r0 = r6;
0x0007579c bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x000757a0 mov r2, r0 | r2 = r0;
0x000757a2 b 0x75732 |
| } while (1);
| label_15:
0x000757a4 movs r3, 0 | r3 = 0;
0x000757a6 ldr r0, [sp, 0x24] | r0 = var_20h_4;
0x000757a8 movs r1, 0x30 | r1 = 0x30;
0x000757aa str r3, [sp] | *(sp) = r3;
0x000757ac bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000757b0 str r0, [sp, 0x28] | var_4h_2 = r0;
0x000757b2 b 0x75622 | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x758e8 */
| #include <stdint.h>
|
; (fcn) fcn.000758e8 () | void fcn_000758e8 (arithmetic arg_0h, int16_t arg_8h, int16_t arg_10h, int16_t arg_13h, int16_t arg_17h, int16_t arg_18h, int16_t arg_24h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_34h, int16_t arg_38h, int16_t arg_74h, int16_t arg_80h, int16_t arg_dch, int16_t arg1, int16_t arg2, arithmetic x) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| arithmetic var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_6ch;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int32_t var_88h_2;
| int16_t var_90h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int32_t var_a4h_2;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| r0 = arg1;
| r1 = arg2;
| r2 = x;
0x000758e8 ldr r3, [r0] | r3 = *(r0);
0x000758ea push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000758ee mov r7, r2 | r7 = r2;
0x000758f0 vpush {d8} | __asm ("vpush {d8}");
0x000758f4 sub sp, 0xbc |
0x000758f6 mov fp, r0 |
0x000758f8 mov r4, r1 | r4 = r1;
0x000758fa str r2, [sp, 0x14] | var_14h = r2;
0x000758fc add.w sl, sp, 0x60 | sl += var_60h;
0x00075900 ldr.w r2, [pc, 0xb18] |
0x00075904 mov r6, sl | r6 = sl;
0x00075906 str r3, [sp, 0x18] | var_18h = r3;
0x00075908 ldr.w r3, [pc, 0xb14] | r3 = *(0x76420);
0x0007590c add r2, pc | r2 = 0xebd2c;
0x0007590e ldr.w r8, [r1, 0x34] | r8 = *((r1 + 0x34));
0x00075912 ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x00075914 ldr r3, [r2, r3] |
0x00075916 ldr r3, [r3] | r3 = *(0xebd2c);
0x00075918 str r3, [sp, 0xb4] | var_b4h = r3;
0x0007591a mov.w r3, 0 | r3 = 0;
0x0007591e ldm r7!, {r0, r1, r2, r3} | r0 = *(r7!);
| r1 = *((r7! + 4));
| r2 = *((r7! + 8));
| r3 = *((r7! + 12));
0x00075920 stm r6!, {r0, r1, r2, r3} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
0x00075922 ldm.w r7, {r0, r1, r2} | r0 = *(r7);
| r1 = *((r7 + 4));
| r2 = *((r7 + 8));
0x00075926 stm.w r6, {r0, r1, r2} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
0x0007592a cmp r5, 0 |
| if (r5 == 0) {
0x0007592c beq.w 0x761b8 | goto label_78;
| }
0x00075930 ldrb.w r3, [sp, 0x60] | r3 = var_60h;
0x00075934 cmp r3, 0xc |
| if (r3 == 0xc) {
0x00075936 beq.w 0x761d4 | goto label_79;
| }
| label_4:
0x0007593a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0007593c lsls r6, r3, 0x15 | r6 = r3 << 0x15;
| if (r6 < r3) {
0x0007593e bmi.w 0x761f4 | goto label_80;
| }
| label_5:
0x00075942 ands r3, r3, 0x2000 | r3 &= 0x2000;
| if (r3 == r3) {
0x00075946 beq 0x759f8 | goto label_81;
| }
0x00075948 mov r2, r4 | r2 = r4;
| if (r3 == 0) {
0x0007594a cbz r3, 0x7595c | goto label_82;
| }
| do {
0x0007594c ldr r2, [r2, 0x34] | r2 = *((r2 + 0x34));
0x0007594e cmp r2, 0 |
| if (r2 == 0) {
0x00075950 beq 0x759f8 | goto label_81;
| }
0x00075952 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00075954 and r3, r3, 0x2000 | r3 &= 0x2000;
0x00075958 cmp r3, 0 |
0x0007595a bne 0x7594c |
| } while (r3 != 0);
| label_82:
0x0007595c ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x0007595e ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x00075960 ldr r6, [r4, 0x20] | r6 = *((r4 + 0x20));
0x00075962 ldr.w r8, [fp, 8] | r8 = *(arg_8h);
0x00075966 ldr r7, [r1] | r7 = *(r1);
0x00075968 cmp r2, 0 |
| if (r2 == 0) {
0x0007596a beq.w 0x76274 | goto label_83;
| }
0x0007596e ldr.w r1, [pc, 0xab4] |
0x00075972 mov r0, fp | r0 = fp;
0x00075974 add r1, pc | r1 = 0xebd9e;
0x00075976 bl 0x21598 | fcn_00021598 (r0, r1);
| label_7:
0x0007597a ldr.w r7, [fp, 0x24] | r7 = *(arg_24h);
0x0007597e add r6, sp, 0x6c | r6 += var_6ch;
0x00075980 vld1.32 {d16}, [r6] | __asm ("vld1.32 {d16}, [r6]");
0x00075984 cmp r7, 0 |
| if (r7 != 0) {
0x00075986 bne.w 0x76266 | goto label_84;
| }
0x0007598a str r7, [sp, 0x1c] | var_1ch = r7;
| label_1:
0x0007598c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0007598e lsls r3, r3, 0x1a | r3 <<= 0x1a;
| if (r3 < r3) {
0x00075990 bmi.w 0x767cc | goto label_85;
| }
| label_0:
0x00075994 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00075996 vld1.32 {d16}, [r6] | __asm ("vld1.32 {d16}, [r6]");
0x0007599a adds r3, 0xc | r3 += 0xc;
0x0007599c vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000759a0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
| if (r3 != 0) {
0x000759a2 cbz r3, 0x759d2 |
0x000759a4 ldr.w r0, [fp] | r0 = *(fp);
0x000759a8 cmp r0, 0 |
| if (r0 == 0) {
0x000759aa beq.w 0x763ee | goto label_86;
| }
0x000759ae movs r2, 0xc | r2 = 0xc;
0x000759b0 movs r3, 0 | r3 = 0;
0x000759b2 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
| label_9:
0x000759b6 cmp r0, 0 |
| if (r0 == 0) {
0x000759b8 beq.w 0x76a48 | goto label_87;
| }
0x000759bc ldr.w r3, [fp, 0x80] | r3 = *(arg_80h);
0x000759c0 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000759c2 str r3, [r0] | *(r0) = r3;
0x000759c4 ldr.w r3, [pc, 0xa60] | r3 = *(0x00076428);
0x000759c8 str.w r0, [fp, 0x80] | __asm ("str.w r0, [arg_80h]");
0x000759cc add r3, pc | r3 += pc;
0x000759ce strd r2, r3, [r0, 4] | __asm ("strd r2, r3, [r0, 4]");
| }
| label_3:
0x000759d2 ldr.w r2, [pc, 0xa58] | r2 = *(0x0007642c);
0x000759d6 ldr.w r3, [pc, 0xa48] | r3 = *(0x76422);
0x000759da add r2, pc | r2 += pc;
0x000759dc ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000759de ldr r2, [r3] | r2 = *(0x76422);
0x000759e0 ldr r3, [sp, 0xb4] | r3 = var_b4h;
0x000759e2 eors r2, r3 | r2 ^= r3;
0x000759e4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000759e8 bne.w 0x770f4 | goto label_88;
| }
0x000759ec mov r0, r7 | r0 = r7;
0x000759ee add sp, 0xbc |
0x000759f0 vpop {d8} | __asm ("vpop {d8}");
0x000759f4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_81:
0x000759f8 ldr r7, [r4, 0x30] | r7 = *((r4 + 0x30));
0x000759fa cmp r7, 0 |
| if (r7 != 0) {
0x000759fc bne.w 0x75c44 | goto label_89;
| }
0x00075a00 ldr.w r3, [r8, 0x34] | r3 = *((r8 + 0x34));
0x00075a04 cmp r3, 0 |
| if (r3 == 0) {
0x00075a06 beq.w 0x769de | goto label_90;
| }
| label_28:
0x00075a0a ldrb r3, [r4] | r3 = *(r4);
0x00075a0c cmp r3, 0x87 |
| if (r3 == 0x87) {
0x00075a0e beq.w 0x765c0 | goto label_91;
| }
0x00075a12 adds r3, 0x7a | r3 += 0x7a;
0x00075a14 ands r3, r3, 0xfd | r3 &= 0xfd;
| if (r3 == r3) {
0x00075a18 beq.w 0x7645c | goto label_92;
| }
0x00075a1c ldrd r3, r2, [r5, 0x6c] | __asm ("ldrd r3, r2, [r5, 0x6c]");
0x00075a20 ldr.w sb, [fp, 0x28] | sb = *(arg_28h);
0x00075a24 cmp r3, r2 |
0x00075a26 add.w r1, sb, 2 | r1 = sb + 2;
0x00075a2a str.w r1, [fp, 0x28] | __asm ("str.w r1, [arg_28h]");
| if (r3 >= r2) {
0x00075a2e bge.w 0x76b1e | goto label_93;
| }
0x00075a32 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x00075a36 ldr r6, [r5, 0x68] | r6 = *((r5 + 0x68));
0x00075a38 adds r1, r3, 1 | r1 = r3 + 1;
0x00075a3a lsls r2, r2, 2 | r2 <<= 2;
0x00075a3c str r1, [r5, 0x6c] | *((r5 + 0x6c)) = r1;
0x00075a3e movs r0, 0 | r0 = 0;
0x00075a40 adds r1, r6, r2 | r1 = r6 + r2;
0x00075a42 movs r7, 0x76 | r7 = 0x76;
0x00075a44 strd sb, r0, [r1, 4] | __asm ("strd sb, r0, [r1, 4]");
0x00075a48 strd r0, r0, [r1, 0xc] | __asm ("strd r0, r0, [r1, 0xc]");
0x00075a4c str r7, [r6, r2] | *((r6 + r2)) = r7;
| label_38:
0x00075a4e mov r6, r4 | r6 = r4;
0x00075a50 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
| do {
0x00075a52 mov r3, r6 | r3 = r6;
0x00075a54 ldr r6, [r6, 0x38] | r6 = *((r6 + 0x38));
0x00075a56 cmp r6, 0 |
0x00075a58 bne 0x75a52 |
| } while (r6 != 0);
0x00075a5a ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00075a5c mov r1, r8 | r1 = r8;
0x00075a5e mov r0, fp | r0 = fp;
0x00075a60 orr r2, r2, 0x20 | r2 |= 0x20;
0x00075a64 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x00075a66 add r3, sp, 0x98 | r3 += var_98h;
0x00075a68 mov r2, r3 | r2 = r3;
0x00075a6a str r3, [sp, 0x1c] | var_1ch = r3;
0x00075a6c movs r3, 1 | r3 = 1;
0x00075a6e strd sb, r6, [sp, 0x9c] | __asm ("strd sb, r6, [var_a0h]");
0x00075a72 str r6, [sp, 0xac] | var_ach = r6;
0x00075a74 strd r6, r6, [sp, 0xa4] | __asm ("strd r6, r6, [var_a4h]");
0x00075a78 strb.w r3, [sp, 0x98] | var_98h = r3;
0x00075a7c bl 0x63500 | r0 = fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00075a80 mov r7, r0 | r7 = r0;
0x00075a82 cmp r0, 0 |
| if (r0 != 0) {
0x00075a84 bne.w 0x763fa | goto label_12;
| }
0x00075a88 ldrd r3, r2, [r5, 0x6c] | __asm ("ldrd r3, r2, [r5, 0x6c]");
0x00075a8c add.w r1, sb, 1 | r1 = sb + 1;
0x00075a90 str r1, [sp, 0x20] | var_20h = r1;
0x00075a92 cmp r3, r2 |
| if (r3 >= r2) {
0x00075a94 bge.w 0x76edc | goto label_94;
| }
0x00075a98 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x00075a9c ldr r0, [r5, 0x68] | r0 = *((r5 + 0x68));
0x00075a9e ldr r7, [sp, 0x20] | r7 = var_20h;
0x00075aa0 adds r1, r3, 1 | r1 = r3 + 1;
0x00075aa2 lsls r2, r2, 2 | r2 <<= 2;
0x00075aa4 str r1, [r5, 0x6c] | *((r5 + 0x6c)) = r1;
0x00075aa6 mov.w ip, 0x76 |
0x00075aaa adds r1, r0, r2 | r1 = r0 + r2;
0x00075aac strd r7, r6, [r1, 4] | __asm ("strd r7, r6, [r1, 4]");
0x00075ab0 strd r6, r6, [r1, 0xc] | __asm ("strd r6, r6, [r1, 0xc]");
0x00075ab4 str.w ip, [r0, r2] | __asm ("str.w ip, [r0, r2]");
| label_59:
0x00075ab8 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x00075aba movs r2, 0 | r2 = 0;
0x00075abc ldr r3, [sp, 0x20] | r3 = var_20h;
0x00075abe ldr r6, [r4, 0x3c] | r6 = *((r4 + 0x3c));
0x00075ac0 str r2, [r4, 0x34] | *((r4 + 0x34)) = r2;
0x00075ac2 str r3, [sp, 0x9c] | var_9ch = r3;
0x00075ac4 ldrb r3, [r4] | r3 = *(r4);
0x00075ac6 str r2, [r4, 0x3c] | *((r4 + 0x3c)) = r2;
0x00075ac8 cmp r3, 0x88 |
| if (r3 == 0x88) {
0x00075aca beq.w 0x76b58 | goto label_95;
| }
0x00075ace cmp r3, 0x89 |
| if (r3 == 0x89) {
0x00075ad0 beq.w 0x76b44 | goto label_96;
| }
0x00075ad4 cmp r3, 0x87 |
| if (r3 == 0x87) {
0x00075ad6 beq.w 0x76b3a | goto label_97;
| }
0x00075ada ldr.w r3, [pc, 0x954] | r3 = *(0x00076430);
0x00075ade add r3, pc | r3 += pc;
| label_40:
0x00075ae0 ldr.w r2, [pc, 0x950] |
0x00075ae4 movs r1, 1 | r1 = 1;
0x00075ae6 mov r0, fp | r0 = fp;
0x00075ae8 add r2, pc | r2 = 0xebf20;
0x00075aea bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00075aee ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00075af0 mov r1, r4 | r1 = r4;
0x00075af2 mov r0, fp | r0 = fp;
0x00075af4 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00075af8 ldr r1, [r4, 0x34] | r1 = *((r4 + 0x34));
0x00075afa mov r7, r0 | r7 = r0;
0x00075afc ldrsh.w r3, [r8, 2] | r3 = *((r8 + 2));
0x00075b00 ldrsh.w r2, [r4, 2] | r2 = *((r4 + 2));
0x00075b04 str r1, [sp, 0x1c] | var_1ch = r1;
0x00075b06 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
0x00075b08 cmp r2, r3 |
0x00075b0a str.w r8, [r4, 0x34] | __asm ("str.w r8, [r4, 0x34]");
0x00075b0e it gt |
| if (r2 > r3) {
0x00075b10 strhgt r3, [r4, 2] | __asm ("strhgt r3, [r4, 2]");
| }
| if (r1 != 0) {
0x00075b12 cbz r1, 0x75b1a |
0x00075b14 ldr r0, [sp, 0x18] | r0 = var_18h;
0x00075b16 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x00075b1a str r6, [r4, 0x3c] | *((r4 + 0x3c)) = r6;
0x00075b1c cmp r7, 0 |
| if (r7 == 0) {
0x00075b1e bne.w 0x75c2e |
0x00075b22 ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x00075b26 mov r1, r4 | r1 = r4;
0x00075b28 mov r0, fp | r0 = fp;
0x00075b2a subs r2, r3, 1 | r2 = r3 - 1;
0x00075b2c str r3, [sp, 0x28] | var_28h = r3;
0x00075b2e subs r3, 2 | r3 -= 2;
0x00075b30 mov r6, r2 | r6 = r2;
0x00075b32 str.w r3, [fp, 0x38] | __asm ("str.w r3, [arg_38h]");
0x00075b36 str r2, [sp, 0x2c] | var_2ch = r2;
0x00075b38 str r3, [sp, 0x24] | var_24h = r3;
0x00075b3a bl 0x6a028 | fcn_0006a028 (r0, r1, r2, r3);
0x00075b3e mov r3, r6 | r3 = r6;
0x00075b40 mov r2, sb | r2 = sb;
0x00075b42 movs r1, 0x23 | r1 = 0x23;
0x00075b44 mov r0, r5 | r0 = r5;
0x00075b46 str r7, [sp] | *(sp) = r7;
0x00075b48 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00075b4c ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x00075b50 cmp r3, 0 |
| if (r3 == 0) {
0x00075b52 beq.w 0x76f92 | goto label_98;
| }
0x00075b56 subs r3, 1 | r3--;
0x00075b58 uxtb r3, r3 | r3 = (int8_t) r3;
0x00075b5a strb.w r3, [fp, 0x13] | *(arg_13h) = r3;
0x00075b5e adds r3, 0x26 | r3 += 0x26;
0x00075b60 ldr.w r6, [fp, r3, lsl 2] | offset_0 = r3 << 2;
| r6 = *((fp + offset_0));
| label_63:
0x00075b64 ldrd r8, r3, [r5, 0x6c] | __asm ("ldrd r8, r3, [r5, 0x6c]");
0x00075b68 cmp r8, r3 |
| if (r8 >= r3) {
0x00075b6a bge.w 0x77030 | goto label_99;
| }
0x00075b6c strh r1, [r4, 0x12] | *((r4 + 0x12)) = r1;
0x00075b6e add.w r3, r8, r8, lsl 2 | r3 = r8 + (r8 << 2);
0x00075b72 ldr r1, [r5, 0x68] | r1 = *((r5 + 0x68));
0x00075b74 add.w r2, r8, 1 | r2 = r8 + 1;
0x00075b78 lsls r3, r3, 2 | r3 <<= 2;
0x00075b7a str r2, [r5, 0x6c] | *((r5 + 0x6c)) = r2;
0x00075b7c movs r0, 0 | r0 = 0;
0x00075b7e adds r2, r1, r3 | r2 = r1 + r3;
0x00075b80 mov.w ip, 0x86 |
0x00075b84 strd sb, r6, [r2, 4] | __asm ("strd sb, r6, [r2, 4]");
0x00075b88 strd r0, r0, [r2, 0xc] | __asm ("strd r0, r0, [r2, 0xc]");
0x00075b8c str.w ip, [r1, r3] | __asm ("str.w ip, [r1, r3]");
| label_70:
0x00075b90 movs r3, 0 | r3 = 0;
0x00075b92 movs r1, 0x1b | r1 = 0x1b;
0x00075b94 str r3, [sp, 4] | var_4h = r3;
0x00075b96 mov r0, r5 | r0 = r5;
0x00075b98 ldrd r2, r3, [sp, 0x20] | __asm ("ldrd r2, r3, [var_20h]");
0x00075b9c str r6, [sp] | *(sp) = r6;
0x00075b9e bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
| if (r6 != 0) {
0x00075ba2 cbz r6, 0x75bb8 |
0x00075ba4 ldrb.w r3, [fp, 0x13] | r3 = *(arg_13h);
0x00075ba8 cmp r3, 7 |
0x00075baa itttt ls |
| if (r3 > 7) {
0x00075bac addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x00075bae addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x00075bb0 strbls r2, [fp, 0x13] | *(arg_13h) = r2;
| }
| if (r3 > 7) {
0x00075bb4 str.w r6, [fp, r3, lsl 2] | __asm ("str.w r6, [fp, r3, lsl 2]");
| goto label_100;
| }
| }
| label_100:
0x00075bb8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00075bba mov r2, sb | r2 = sb;
0x00075bbc ldr r6, [sp, 0x24] | r6 = var_24h;
0x00075bbe mov r1, r4 | r1 = r4;
0x00075bc0 mov r0, fp | r0 = fp;
0x00075bc2 str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h]");
0x00075bc6 str r3, [sp, 0xc] | var_ch = r3;
0x00075bc8 movs r3, 0 | r3 = 0;
0x00075bca str r3, [sp] | *(sp) = r3;
0x00075bcc str r6, [sp, 8] | var_8h = r6;
0x00075bce bl 0x6e488 | fcn_0006e488 (r0, r1, r2, r3, r4, r5, r6);
0x00075bd2 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00075bd4 mvns r2, r6 | r2 = ~r6;
0x00075bd6 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00075bda cmn r1, r3 |
| if (r1 < r3) {
0x00075bdc bmi.w 0x77026 | goto label_101;
| }
0x00075be0 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00075be2 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x00075be4 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_69:
0x00075be8 movs r2, 0 | r2 = 0;
0x00075bea mov r3, r8 | r3 = r8;
0x00075bec str r2, [sp] | *(sp) = r2;
0x00075bee movs r1, 0x26 | r1 = 0x26;
0x00075bf0 mov r2, sb | r2 = sb;
0x00075bf2 mov r0, r5 | r0 = r5;
0x00075bf4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00075bf8 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00075bfa ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00075bfe cmn r2, r3 |
| if (r2 < r3) {
0x00075c00 bmi.w 0x77018 | goto label_102;
| }
0x00075c04 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00075c06 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00075c08 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x00075c0a lsls r3, r3, 2 | r3 <<= 2;
0x00075c0c rsbs r3, r3, 0 | r3 -= ;
0x00075c0e str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_68:
0x00075c10 movs r6, 0 | r6 = 0;
0x00075c12 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00075c14 mov r3, r6 | r3 = r6;
0x00075c16 movs r1, 0x7a | r1 = 0x7a;
0x00075c18 mov r0, r5 | r0 = r5;
0x00075c1a str r6, [sp] | *(sp) = r6;
0x00075c1c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00075c20 mov r2, sb | r2 = sb;
0x00075c22 mov r3, r6 | r3 = r6;
0x00075c24 movs r1, 0x7a | r1 = 0x7a;
0x00075c26 mov r0, r5 | r0 = r5;
0x00075c28 str r6, [sp] | *(sp) = r6;
0x00075c2a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
| label_11:
0x00075c2e ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00075c30 cmp r3, 0 |
| if (r3 == 0) {
0x00075c32 beq.w 0x769a8 | goto label_103;
| }
| label_27:
0x00075c36 ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x00075c3a add r6, sp, 0x6c | r6 += var_6ch;
0x00075c3c cmp r3, 0 |
| if (r3 != 0) {
0x00075c3e bne.w 0x75994 | goto label_0;
| }
0x00075c42 b 0x7598c | goto label_1;
| label_89:
0x00075c44 ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x00075c48 ldr r5, [r7] | r5 = *(r7);
0x00075c4a ldr.w r1, [fp] | r1 = *(fp);
0x00075c4e subs r2, r3, 2 | r2 = r3 - 2;
0x00075c50 str r3, [sp, 0x50] | var_50h = r3;
0x00075c52 str r2, [sp, 0x30] | var_30h = r2;
0x00075c54 subs r3, 1 | r3--;
0x00075c56 str.w r2, [fp, 0x38] | __asm ("str.w r2, [arg_38h]");
0x00075c5a ldrb r2, [r4] | r2 = *(r4);
0x00075c5c ldr.w r6, [fp, 8] | r6 = *(arg_8h);
0x00075c60 str r1, [sp, 0x28] | var_28h = r1;
0x00075c62 cmp r2, 0x87 |
0x00075c64 str r2, [sp, 0x18] | var_18h = r2;
0x00075c66 str r3, [sp, 0x2c] | var_2ch = r3;
| if (r2 == 0x87) {
0x00075c68 beq.w 0x76ac2 | goto label_104;
| }
0x00075c6c ldrb.w r0, [r1, 0x57] | r0 = *((r1 + 0x57));
0x00075c70 cmp r0, 0 |
| if (r0 != 0) {
0x00075c72 bne.w 0x76ff8 | goto label_105;
| }
0x00075c76 ldr.w sl, [sp, 0x28] | sl = var_28h;
0x00075c7a mov.w r8, 1 | r8 = 1;
0x00075c7e mov sb, r0 | sb = r0;
0x00075c80 add r3, sp, 0x98 | r3 += var_98h;
0x00075c82 str r3, [sp, 0x1c] | var_1ch = r3;
| label_2:
0x00075c84 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00075c86 ldr r3, [r3] | r3 = *(r3);
0x00075c88 cmp r3, r8 |
| if (r3 < r8) {
0x00075c8a blt 0x75cb8 | goto label_106;
| }
0x00075c8c cmp r5, 0 |
0x00075c8e add.w r2, r7, 8 | r2 = r7 + 8;
0x00075c90 lsls r0, r1, 8 | r0 = r1 << 8;
0x00075c92 mov.w r3, 0 | r3 = 0;
| if (r0 > r1) {
0x00075c96 bgt 0x75ca4 | goto label_107;
| }
0x00075c98 b 0x75caa | goto label_108;
| do {
0x00075c9a adds r3, 1 | r3++;
0x00075c9c adds r2, 0x10 | r2 += 0x10;
0x00075c9e cmp r3, r5 |
| if (r3 == r5) {
0x00075ca0 beq.w 0x763ac | goto label_109;
| }
| label_107:
0x00075ca4 ldrh r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x00075ca6 cmp r1, r8 |
0x00075ca8 bne 0x75c9a |
| } while (r1 != r8);
| label_108:
0x00075caa cmp r3, r5 |
| if (r3 == r5) {
0x00075cac beq.w 0x763ac | goto label_109;
| }
| label_8:
0x00075cb0 add.w r8, r8, 1 | r8++;
0x00075cb4 cmp r0, 0 |
| if (r0 == 0) {
0x00075cb6 beq 0x75c84 | goto label_2;
| }
| label_106:
0x00075cb8 adds r2, r5, 1 | r2 = r5 + 1;
0x00075cba ldr r0, [sp, 0x28] | r0 = var_28h;
0x00075cbc lsls r2, r2, 2 | r2 <<= 2;
0x00075cbe movs r3, 0 | r3 = 0;
0x00075cc0 bl 0x21784 | fcn_00021784 (r0, r1);
0x00075cc4 str r0, [sp, 0x38] | var_38h = r0;
0x00075cc6 cmp r0, 0 |
| if (r0 == 0) {
0x00075cc8 beq.w 0x766d8 | goto label_110;
| }
| label_36:
0x00075ccc ldr r3, [sp, 0x38] | r3 = var_38h;
0x00075cce cmp r5, 0 |
0x00075cd0 add.w r2, r7, 8 | r2 = r7 + 8;
0x00075cd4 str r5, [r3] | *(r3) = r5;
| if (r5 <= 0) {
0x00075cd6 ble 0x75cec | goto label_111;
| }
0x00075cd8 ldr r1, [sp, 0x38] | r1 = var_38h;
0x00075cda add.w r0, r1, r5, lsl 2 | r0 = r1 + (r5 << 2);
| do {
0x00075cde ldrh r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x00075ce0 adds r2, 0x10 | r2 += 0x10;
0x00075ce2 subs r3, 1 | r3--;
0x00075ce4 str r3, [r1, 4]! | *((r1 += 4)) = r3;
0x00075ce8 cmp r0, r1 |
0x00075cea bne 0x75cde |
| } while (r0 != r1);
| label_111:
0x00075cec mov r1, r4 | r1 = r4;
0x00075cee mov r0, fp | r0 = fp;
0x00075cf0 bl 0x2c3d4 | fcn_0002c3d4 (r0, r1, r2);
0x00075cf4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00075cf6 str r0, [sp, 0x4c] | var_4ch = r0;
0x00075cf8 cmp r3, 0x87 |
| if (r3 != 0x87) {
0x00075cfa bne.w 0x766dc | goto label_67;
| }
0x00075cfe ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00075d00 movs r2, 1 | r2 = 1;
0x00075d02 mov.w sb, 0 | sb = 0;
0x00075d06 strd r2, sb, [sp, 0x40] | __asm ("strd r2, sb, [var_44h]");
| label_19:
0x00075d0a mov r8, r3 | r8 = r3;
0x00075d0c ldr r3, [sp, 0x28] | r3 = var_28h;
0x00075d0e ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00075d10 lsls r2, r3, 0xa | r2 = r3 << 0xa;
| if (r2 >= r3) {
0x00075d12 bpl.w 0x76ade | goto label_112;
| }
| label_18:
0x00075d16 str r4, [sp, 0x34] | var_34h = r4;
| label_37:
0x00075d18 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00075d1a mov r1, r7 | r1 = r7;
0x00075d1c ldr.w r7, [pc, 0x718] |
0x00075d20 movs r2, 0 | r2 = 0;
0x00075d22 ldr.w r0, [fp] | r0 = *(fp);
0x00075d26 str r2, [r3, 0x34] | *((r3 + 0x34)) = r2;
0x00075d28 add r7, pc | r7 = 0xec164;
0x00075d2a str.w r2, [r8, 0x38] | __asm ("str.w r2, [r8, 0x38]");
0x00075d2e bl 0x321b0 | fcn_000321b0 (r0, r1, r2, r3, r4);
0x00075d32 mov r1, r4 | r1 = r4;
0x00075d34 str.w r0, [r8, 0x30] | __asm ("str.w r0, [r8, 0x30]");
0x00075d38 mov r3, r7 | r3 = r7;
0x00075d3a ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
0x00075d3c mov r0, fp | r0 = fp;
0x00075d3e bl 0x327d8 | fcn_000327d8 (r0, r1, r2, r3);
0x00075d42 mov r3, r7 | r3 = r7;
0x00075d44 ldr.w r2, [r8, 0x30] | r2 = *((r8 + 0x30));
0x00075d48 mov r1, r8 | r1 = r8;
0x00075d4a mov r0, fp | r0 = fp;
0x00075d4c bl 0x327d8 | fcn_000327d8 (r0, r1, r2, r3);
0x00075d50 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00075d52 mov r1, r4 | r1 = r4;
0x00075d54 mov r0, fp | r0 = fp;
0x00075d56 bl 0x6a028 | fcn_0006a028 (r0, r1, r2, r3);
0x00075d5a ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00075d5c ldr r1, [sp, 0x18] | r1 = var_18h;
0x00075d5e subs r3, r2, 0 | r3 = r2 - 0;
0x00075d60 it ne |
| if (r3 == r2) {
0x00075d62 movne r3, 1 | r3 = 1;
| }
0x00075d64 cmp r1, 0x87 |
0x00075d66 it ne |
| if (r1 == 0x87) {
0x00075d68 movne r3, 0 | r3 = 0;
| }
0x00075d6a cmp r3, 0 |
| if (r3 != 0) {
0x00075d6c bne.w 0x76bd6 | goto label_113;
| }
0x00075d70 mov sl, r3 | sl = r3;
0x00075d72 str r3, [sp, 0x48] | var_48h = r3;
| label_46:
0x00075d74 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
| if (r1 != 0) {
0x00075d76 cbz r1, 0x75d7e |
0x00075d78 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00075d7a bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x00075d7e ldr.w r2, [fp, 0x2c] | r2 = *(arg_2ch);
0x00075d82 movs r3, 0 | r3 = 0;
0x00075d84 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x00075d86 movs r1, 0xd | r1 = 0xd;
0x00075d88 str r3, [sp, 0x84] | var_84h = r3;
0x00075d8a str r3, [sp, 0x90] | var_90h = r3;
0x00075d8c strd r3, r3, [sp, 0x88] | __asm ("strd r3, r3, [var_88h]");
0x00075d90 str r3, [sp, 0xa0] | var_a0h = r3;
0x00075d92 str r3, [sp, 0xac] | var_ach = r3;
0x00075d94 strd r3, r3, [sp, 0xa4] | __asm ("strd r3, r3, [var_a4h]");
0x00075d98 adds r3, r2, 4 | r3 = r2 + 4;
0x00075d9a str r3, [sp, 0x5c] | var_5ch = r3;
0x00075d9c str.w r3, [fp, 0x2c] | __asm ("str.w r3, [arg_2ch]");
0x00075da0 ldrb r3, [r4] | r3 = *(r4);
0x00075da2 strb.w r1, [sp, 0x7c] | var_7ch = r1;
0x00075da6 strb.w r1, [sp, 0x98] | var_98h = r1;
0x00075daa adds r1, r2, 1 | r1 = r2 + 1;
0x00075dac cmp r3, 0x88 |
0x00075dae str r1, [sp, 0x20] | var_20h = r1;
0x00075db0 str r1, [sp, 0x80] | var_80h = r1;
0x00075db2 add.w r1, r2, 2 | r1 = r2 + 2;
0x00075db6 add.w r2, r2, 3 | r2 += 3;
0x00075dba str r1, [sp, 0x24] | var_24h = r1;
0x00075dbc str r1, [sp, 0x9c] | var_9ch = r1;
0x00075dbe str r2, [sp, 0x3c] | var_3ch = r2;
| if (r3 == 0x88) {
0x00075dc0 beq.w 0x76a84 | goto label_114;
| }
0x00075dc4 cmp r3, 0x89 |
| if (r3 == 0x89) {
0x00075dc6 beq.w 0x7699e | goto label_115;
| }
0x00075dca cmp r3, 0x87 |
| if (r3 == 0x87) {
0x00075dcc beq.w 0x76994 | goto label_116;
| }
0x00075dd0 ldr.w r3, [pc, 0x668] |
0x00075dd4 add r3, pc | r3 = 0xec214;
| label_26:
0x00075dd6 ldr.w r2, [pc, 0x668] | r2 = *(0x00076440);
0x00075dda movs r1, 1 | r1 = 1;
0x00075ddc mov r0, fp | r0 = fp;
0x00075dde add r2, pc | r2 += pc;
0x00075de0 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00075de4 ldrd r7, r3, [r6, 0x6c] | __asm ("ldrd r7, r3, [r6, 0x6c]");
0x00075de8 cmp r7, r3 |
0x00075dea add.w r1, r7, 1 | r1 = r7 + 1;
| if (r7 >= r3) {
0x00075dee bge.w 0x76b6a | goto label_117;
| }
0x00075df2 add.w r3, r7, r7, lsl 2 | r3 = r7 + (r7 << 2);
0x00075df6 ldr r0, [r6, 0x68] | r0 = *((r6 + 0x68));
0x00075df8 str r1, [r6, 0x6c] | *((r6 + 0x6c)) = r1;
0x00075dfa mov.w ip, 0 |
0x00075dfe lsls r3, r3, 2 | r3 <<= 2;
0x00075e00 mov.w lr, 0xa | lr = 0xa;
0x00075e04 adds r2, r0, r3 | r2 = r0 + r3;
0x00075e06 str r1, [r2, 0xc] | *((r2 + 0xc)) = r1;
0x00075e08 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00075e0a str.w ip, [r2, 0x10] | __asm ("str.w ip, [r2, 0x10]");
0x00075e0e strd r1, ip, [r2, 4] | __asm ("strd r1, ip, [r2, 4]");
0x00075e12 str.w lr, [r0, r3] | __asm ("str.w lr, [r0, r3]");
| label_41:
0x00075e16 ldr.w r2, [pc, 0x62c] | r2 = *(0x00076444);
0x00075e1a movs r1, 1 | r1 = 1;
0x00075e1c mov r0, fp | r0 = fp;
0x00075e1e str.w sl, [r8, 8] | __asm ("str.w sl, [r8, 8]");
0x00075e22 mov.w sl, 0 | sl = 0;
0x00075e26 add r2, pc | r2 += pc;
0x00075e28 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00075e2c add r3, sp, 0x7c | r3 += var_7ch;
0x00075e2e mov r1, r8 | r1 = r8;
0x00075e30 mov r2, r3 | r2 = r3;
0x00075e32 mov r0, fp | r0 = fp;
0x00075e34 str r3, [sp, 0x54] | var_54h = r3;
0x00075e36 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00075e3a mov r3, sl | r3 = sl;
0x00075e3c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00075e40 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00075e42 movs r1, 0x44 | r1 = 0x44;
0x00075e44 mov r0, r6 | r0 = r6;
0x00075e46 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00075e4a ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00075e4c cmp r7, 0 |
0x00075e4e strb.w sl, [r3, 0x13] | *((r3 + 0x13)) = sl;
0x00075e52 str.w sl, [r3, 0x1c] | __asm ("str.w sl, [r3, 0x1c]");
0x00075e56 ldr r3, [r6] | r3 = *(r6);
0x00075e58 ldr.w sl, [r6, 0x6c] | sl = *((r6 + 0x6c));
0x00075e5c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00075e60 it lt |
| if (r7 >= 0) {
0x00075e62 addlt r7, sl, -1 | r7 = sl + -1;
| }
0x00075e66 cmp r3, 0 |
| if (r3 != 0) {
0x00075e68 bne.w 0x7667a | goto label_118;
| }
0x00075e6c ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x00075e6e add.w r7, r7, r7, lsl 2 | r7 += (r7 << 2);
0x00075e72 add.w r3, r3, r7, lsl 2 | r3 += (r7 << 2);
| label_13:
0x00075e76 str.w sl, [r3, 8] | __asm ("str.w sl, [r3, 8]");
0x00075e7a add.w r1, sl, 1 | r1 = sl + 1;
0x00075e7e ldr r3, [r6, 0x70] | r3 = *((r6 + 0x70));
0x00075e80 cmp sl, r3 |
| if (sl >= r3) {
0x00075e82 bge.w 0x76b7e | goto label_119;
| }
0x00075e86 add.w r3, sl, sl, lsl 2 | r3 = sl + (sl << 2);
0x00075e8a ldr r0, [r6, 0x68] | r0 = *((r6 + 0x68));
0x00075e8c str r1, [r6, 0x6c] | *((r6 + 0x6c)) = r1;
0x00075e8e movs r7, 0 | r7 = 0;
0x00075e90 lsls r3, r3, 2 | r3 <<= 2;
0x00075e92 mov.w ip, 0xa |
0x00075e96 adds r2, r0, r3 | r2 = r0 + r3;
0x00075e98 str r1, [r2, 0xc] | *((r2 + 0xc)) = r1;
0x00075e9a ldr r1, [sp, 0x24] | r1 = var_24h;
0x00075e9c str r7, [r2, 0x10] | *((r2 + 0x10)) = r7;
0x00075e9e strd r1, r7, [r2, 4] | __asm ("strd r1, r7, [r2, 4]");
0x00075ea2 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_42:
0x00075ea6 add.w r3, r4, 8 | r3 = r4 + 8;
0x00075eaa ldr.w r2, [pc, 0x59c] | r2 = *(0x00076448);
0x00075eae str r3, [sp, 0x58] | var_58h = r3;
0x00075eb0 movs r7, 0 | r7 = 0;
0x00075eb2 vld1.32 {d8}, [r3] | __asm ("vld1.32 {d8}, [r3]");
0x00075eb6 movs r1, 1 | r1 = 1;
0x00075eb8 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00075eba add r2, pc | r2 += pc;
0x00075ebc mov r0, fp | r0 = fp;
0x00075ebe str r7, [r4, 0xc] | *((r4 + 0xc)) = r7;
0x00075ec0 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00075ec2 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00075ec6 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00075ec8 mov r1, r4 | r1 = r4;
0x00075eca mov r0, fp | r0 = fp;
0x00075ecc bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00075ed0 ldr r3, [sp, 0x58] | r3 = var_58h;
0x00075ed2 movs r1, 0x44 | r1 = 0x44;
0x00075ed4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00075ed6 mov r0, r6 | r0 = r6;
0x00075ed8 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x00075edc mov r3, r7 | r3 = r7;
0x00075ede str r7, [sp] | *(sp) = r7;
0x00075ee0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00075ee4 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00075ee6 mov r1, r4 | r1 = r4;
0x00075ee8 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00075eea mov r0, fp | r0 = fp;
0x00075eec strb r7, [r3, 0x13] | *((r3 + 0x13)) = r7;
0x00075eee str r7, [r3, 0x1c] | *((r3 + 0x1c)) = r7;
0x00075ef0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00075ef2 strd sb, r3, [sp, 8] | __asm ("strd sb, r3, [var_8h]");
0x00075ef6 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00075ef8 str r3, [sp, 4] | var_4h = r3;
0x00075efa ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00075efc str r3, [sp] | *(sp) = r3;
0x00075efe ldr r3, [sp, 0x14] | r3 = var_14h;
0x00075f00 bl 0x34b6c | fcn_00034b6c (r0, r1, r2, r3, r4, r5, r6);
0x00075f04 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00075f06 str r0, [sp, 0x48] | var_48h = r0;
0x00075f08 cmp r3, 1 |
| if (r3 < 1) {
0x00075f0a bls.w 0x76850 | goto label_120;
| }
0x00075f0e cmp.w sb, 0 |
| if (sb == 0) {
0x00075f12 beq.w 0x76b62 | goto label_121;
| }
0x00075f16 str r7, [sp, 0x54] | var_54h = r7;
| label_21:
0x00075f18 ldr.w r3, [sb] | r3 = *(sb);
0x00075f1c subs r3, 1 | r3--;
0x00075f1e str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x00075f22 cmp r3, 0 |
| if (r3 == 0) {
0x00075f24 beq.w 0x76ab4 | goto label_122;
| }
| label_35:
0x00075f28 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00075f2a subs r3, 0x88 | r3 -= 0x88;
0x00075f2c cmp r3, 1 |
| if (r3 > 1) {
0x00075f2e bhi.w 0x76874 | goto label_123;
| }
0x00075f32 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00075f34 str r3, [sp, 0x44] | var_44h = r3;
0x00075f36 str r3, [sp, 0x1c] | var_1ch = r3;
| label_22:
0x00075f38 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00075f3a ldrd r3, r2, [r6, 0x6c] | __asm ("ldrd r3, r2, [r6, 0x6c]");
0x00075f3e cmp r1, 0x89 |
0x00075f40 str r3, [sp, 0x14] | var_14h = r3;
| if (r1 != 0x89) {
0x00075f42 bne.w 0x76690 | goto label_124;
| }
0x00075f46 ldrsh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x00075f4a ldrsh.w r0, [r4, 2] | r0 = *((r4 + 2));
0x00075f4e cmp r0, r1 |
0x00075f50 it gt |
| if (r0 > r1) {
0x00075f52 strhgt r1, [r4, 2] | __asm ("strhgt r1, [r4, 2]");
| }
0x00075f54 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00075f56 str r1, [sp, 0x14] | var_14h = r1;
| label_15:
0x00075f58 cmp r3, r2 |
0x00075f5a mov r4, r3 | r4 = r3;
| if (r3 >= r2) {
0x00075f5c bge.w 0x76bc0 | goto label_125;
| }
0x00075f60 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00075f64 ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x00075f66 ldr r7, [sp, 0x3c] | r7 = var_3ch;
0x00075f68 adds r2, r4, 1 | r2 = r4 + 1;
0x00075f6a lsls r3, r3, 2 | r3 <<= 2;
0x00075f6c str r2, [r6, 0x6c] | *((r6 + 0x6c)) = r2;
0x00075f6e movs r0, 0 | r0 = 0;
0x00075f70 adds r2, r1, r3 | r2 = r1 + r3;
0x00075f72 mov.w ip, 9 |
0x00075f76 str r7, [r2, 4] | *((r2 + 4)) = r7;
0x00075f78 ldr r7, [sp, 0x48] | r7 = var_48h;
0x00075f7a str r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
0x00075f7c strd r7, r0, [r2, 8] | __asm ("strd r7, r0, [r2, 8]");
0x00075f80 str.w ip, [r1, r3] | __asm ("str.w ip, [r1, r3]");
| label_45:
0x00075f84 mov.w sb, 0 | sb = 0;
0x00075f88 ldrd r3, r2, [sp, 0x1c] | __asm ("ldrd r3, r2, [var_1ch]");
0x00075f8c movs r1, 0xb | r1 = 0xb;
0x00075f8e mov r0, r6 | r0 = r6;
0x00075f90 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00075f94 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00075f98 ldrd r3, r2, [r6, 0x6c] | __asm ("ldrd r3, r2, [r6, 0x6c]");
0x00075f9c cmp r3, r2 |
| if (r3 >= r2) {
0x00075f9e bge.w 0x76ba8 | goto label_126;
| }
0x00075fa2 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x00075fa6 ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x00075fa8 ldr r7, [sp, 0x30] | r7 = var_30h;
0x00075faa adds r3, 1 | r3++;
0x00075fac lsls r2, r2, 2 | r2 <<= 2;
0x00075fae str r3, [r6, 0x6c] | *((r6 + 0x6c)) = r3;
0x00075fb0 movs r0, 8 | r0 = 8;
0x00075fb2 str r3, [sp, 0x2c] | var_2ch = r3;
0x00075fb4 adds r3, r1, r2 | r3 = r1 + r2;
0x00075fb6 strd r7, sb, [r3, 8] | __asm ("strd r7, sb, [r3, 8]");
0x00075fba str.w sb, [r3, 0x10] | __asm ("str.w sb, [r3, 0x10]");
0x00075fbe str r0, [r1, r2] | *((r1 + r2)) = r0;
0x00075fc0 str.w sb, [r3, 4] | __asm ("str.w sb, [r3, 4]");
| label_44:
0x00075fc4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00075fc6 cmp r3, 0x87 |
0x00075fc8 it eq |
| if (r3 != 0x87) {
0x00075fca streq r4, [sp, 0x18] | var_18h = r4;
| }
| if (r3 != 0x87) {
0x00075fcc beq 0x76018 |
0x00075fce cmp r3, 0x89 |
0x00075fd0 itt eq |
| if (r3 != 0x89) {
0x00075fd2 addeq r3, r4, 1 | r3 = r4 + 1;
| }
| if (r3 != 0x89) {
0x00075fd4 streq r3, [sp, 0x18] | var_18h = r3;
| }
| if (r3 == 0x89) {
0x00075fd6 beq 0x76018 | goto label_127;
| }
0x00075fd8 ldr r3, [r6, 0x70] | r3 = *((r6 + 0x70));
0x00075fda ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00075fdc cmp r3, r2 |
| if (r3 <= r2) {
0x00075fde ble.w 0x76eb0 | goto label_128;
| }
0x00075fe2 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00075fe4 mov.w ip, 0 |
0x00075fe8 ldr r0, [r6, 0x68] | r0 = *((r6 + 0x68));
0x00075fea ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x00075fec mov r1, r2 | r1 = r2;
0x00075fee add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x00075ff2 adds r2, 1 | r2++;
0x00075ff4 str r2, [r6, 0x6c] | *((r6 + 0x6c)) = r2;
0x00075ff6 lsls r3, r3, 2 | r3 <<= 2;
0x00075ff8 adds r2, r0, r3 | r2 = r0 + r3;
0x00075ffa str r7, [r2, 8] | *((r2 + 8)) = r7;
0x00075ffc ldr r7, [sp, 0x20] | r7 = var_20h;
0x00075ffe strd ip, ip, [r2, 0xc] | __asm ("strd ip, ip, [r2, 0xc]");
0x00076002 str r7, [r2, 4] | *((r2 + 4)) = r7;
0x00076004 movs r2, 0xb | r2 = 0xb;
0x00076006 str r2, [r0, r3] | *((r0 + r3)) = r2;
| label_58:
0x00076008 str r4, [sp, 0x18] | var_18h = r4;
0x0007600a mov r0, r6 | r0 = r6;
0x0007600c mov r4, r1 | r4 = r1;
0x0007600e ldr r1, [sp, 0x30] | r1 = var_30h;
0x00076010 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x00076014 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x00076016 str r3, [sp, 0x2c] | var_2ch = r3;
| }
| label_127:
0x00076018 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0007601a cmp r3, 1 |
| if (r3 < 1) {
0x0007601c bls.w 0x76a70 | goto label_129;
| }
| label_32:
0x00076020 mov.w sb, 0 | sb = 0;
0x00076024 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00076026 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00076028 movs r1, 0xb | r1 = 0xb;
0x0007602a mov r0, r6 | r0 = r6;
0x0007602c str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00076030 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076034 ldrd r3, r2, [r6, 0x6c] | __asm ("ldrd r3, r2, [r6, 0x6c]");
0x00076038 cmp r3, r2 |
| if (r3 >= r2) {
0x0007603a bge.w 0x76b92 | goto label_130;
| }
0x0007603e add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x00076042 ldr r0, [r6, 0x68] | r0 = *((r6 + 0x68));
0x00076044 ldr r7, [sp, 0x30] | r7 = var_30h;
0x00076046 adds r3, 1 | r3++;
0x00076048 lsls r1, r1, 2 | r1 <<= 2;
0x0007604a mov.w ip, 8 |
0x0007604e str r3, [r6, 0x6c] | *((r6 + 0x6c)) = r3;
0x00076050 adds r2, r0, r1 | r2 = r0 + r1;
0x00076052 strd r7, sb, [r2, 8] | __asm ("strd r7, sb, [r2, 8]");
0x00076056 str.w sb, [r2, 0x10] | __asm ("str.w sb, [r2, 0x10]");
0x0007605a str.w ip, [r0, r1] | __asm ("str.w ip, [r0, r1]");
0x0007605e str.w sb, [r2, 4] | __asm ("str.w sb, [r2, 4]");
| label_43:
0x00076062 ldr r2, [r6] | r2 = *(r6);
0x00076064 cmp.w sl, 0 |
0x00076068 it lt |
| if (sl >= 0) {
0x0007606a addlt sl, r3, -1 | sl = r3 + -1;
| }
0x0007606e ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x00076072 cmp r2, 0 |
| if (r2 != 0) {
0x00076074 bne.w 0x76686 | goto label_131;
| }
0x00076078 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0007607a add.w sl, sl, sl, lsl 2 | sl += (sl << 2);
0x0007607e add.w r2, r2, sl, lsl 2 | r2 += (sl << 2);
| label_14:
0x00076082 mov.w sb, 0 | sb = 0;
0x00076086 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x00076088 movs r1, 0xb | r1 = 0xb;
0x0007608a ldr r3, [sp, 0x44] | r3 = var_44h;
0x0007608c ldr r2, [sp, 0x20] | r2 = var_20h;
0x0007608e mov r0, r6 | r0 = r6;
0x00076090 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00076094 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076098 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007609a movs r1, 0xb | r1 = 0xb;
0x0007609c ldr r2, [sp, 0x24] | r2 = var_24h;
0x0007609e mov r0, r6 | r0 = r6;
0x000760a0 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000760a4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000760a8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000760aa ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000760ac mvns r2, r3 | r2 = ~r3;
0x000760ae ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000760b2 cmn r1, r3 |
| if (r1 < r3) {
0x000760b4 bmi.w 0x76a66 | goto label_132;
| }
0x000760b8 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000760ba ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x000760bc str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_31:
0x000760c0 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000760c2 mvn r2, 0xd | r2 = ~0xd;
0x000760c6 movs r1, 0x59 | r1 = 0x59;
0x000760c8 str r2, [sp, 8] | var_8h = r2;
0x000760ca mov r0, r6 | r0 = r6;
0x000760cc str r3, [sp, 4] | var_4h = r3;
0x000760ce movs r3, 0 | r3 = 0;
0x000760d0 mov r2, r3 | r2 = r3;
0x000760d2 str r3, [sp] | *(sp) = r3;
0x000760d4 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000760d8 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000760da movs r1, 0x5a | r1 = 0x5a;
0x000760dc ldr r2, [sp, 0x88] | r2 = var_88h;
0x000760de mov r0, r6 | r0 = r6;
0x000760e0 strd r5, r3, [sp] | __asm ("strd r5, r3, [sp]");
0x000760e4 mvn r3, 7 | r3 = ~7;
0x000760e8 str r3, [sp, 8] | var_8h = r3;
0x000760ea ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x000760ec bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000760f0 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x000760f2 cmp r3, 0 |
| if (r3 > 0) {
0x000760f4 ble 0x76106 |
0x000760f6 ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x000760f8 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000760fc add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x00076100 movs r3, 1 | r3 = 1;
0x00076102 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
0x00076106 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00076108 movs r1, 0xd | r1 = 0xd;
0x0007610a ldr r2, [sp, 0x18] | r2 = var_18h;
0x0007610c mov r0, r6 | r0 = r6;
0x0007610e str r3, [sp] | *(sp) = r3;
0x00076110 mov r3, r4 | r3 = r4;
0x00076112 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076116 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x00076118 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0007611c cmn r2, r3 |
| if (r2 < r3) {
0x0007611e bmi.w 0x76a58 | goto label_133;
| }
0x00076122 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00076124 ldr r1, [r6, 0x6c] | r1 = *((r6 + 0x6c));
0x00076126 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00076128 lsls r3, r3, 2 | r3 <<= 2;
0x0007612a rsbs r3, r3, 0 | r3 -= ;
0x0007612c str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_30:
0x0007612e ldr r3, [sp, 0x34] | r3 = var_34h;
0x00076130 ldr r4, [r3, 0x34] | r4 = *((r3 + 0x34));
| if (r4 != 0) {
0x00076132 cbz r4, 0x7615e |
0x00076134 ldr.w r0, [fp] | r0 = *(fp);
0x00076138 cmp r0, 0 |
| if (r0 == 0) {
0x0007613a beq.w 0x76a8e | goto label_134;
| }
0x0007613e movs r2, 0xc | r2 = 0xc;
0x00076140 movs r3, 0 | r3 = 0;
0x00076142 bl 0x21784 | fcn_00021784 (r0, r1);
0x00076144 invalid |
| label_33:
0x00076146 cmp r0, 0 |
| if (r0 == 0) {
0x00076148 beq.w 0x76e96 | goto label_135;
| }
0x0007614c ldr.w r3, [fp, 0x80] | r3 = *(arg_80h);
0x00076150 str r3, [r0] | *(r0) = r3;
0x00076152 ldr r3, [pc, 0x2f8] |
0x00076154 str.w r0, [fp, 0x80] | __asm ("str.w r0, [arg_80h]");
0x00076158 str r4, [r0, 4] | *((r0 + 4)) = r4;
0x0007615a add r3, pc | r3 = 0xec5ac;
0x0007615c str r3, [r0, 8] | *((r0 + 8)) = r3;
| }
| label_57:
0x0007615e ldr.w r1, [r8, 0x30] | r1 = *((r8 + 0x30));
0x00076162 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00076164 str.w r8, [r3, 0x34] | __asm ("str.w r8, [r3, 0x34]");
0x00076168 str.w r3, [r8, 0x38] | __asm ("str.w r3, [r8, 0x38]");
| if (r1 != 0) {
0x0007616c cbz r1, 0x76174 |
0x0007616e ldr r0, [sp, 0x28] | r0 = var_28h;
0x00076170 bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x00076174 ldr.w r3, [fp, 0xdc] | r3 = *(arg_dch);
0x00076178 movs r2, 0 | r2 = 0;
0x0007617a str.w r2, [r8, 0x30] | __asm ("str.w r2, [r8, 0x30]");
0x0007617e ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x00076182 cmp r3, 0 |
| if (r3 != 0) {
0x00076184 beq 0x761a8 |
0x00076186 ldr r1, [r2] | r1 = *(r2);
0x00076188 it lt |
| if (r3 >= 0) {
0x0007618a ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x0007618c ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x00076190 it lt |
| if (r3 >= 0) {
0x00076192 addlt r3, r3, -1 | r3 += -1;
| }
0x00076196 cmp r1, 0 |
| if (r1 != 0) {
0x00076198 bne.w 0x7698a | goto label_136;
| }
0x0007619c ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x0007619e add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000761a2 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_25:
0x000761a6 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| }
0x000761a8 ldr.w r7, [fp, 0x24] | r7 = *(arg_24h);
0x000761ac str.w r3, [fp, 0xdc] | __asm ("str.w r3, [arg_dch]");
0x000761b0 subs r7, 0 |
0x000761b2 it ne |
| if (r7 == 0) {
0x000761b4 movne r7, 1 | r7 = 1;
| }
0x000761b6 b 0x759d2 | goto label_3;
| label_78:
0x000761b8 ldr.w r3, [fp, 0x74] | r3 = *(arg_74h);
0x000761bc cmp r3, 0 |
| if (r3 == 0) {
0x000761be beq.w 0x7640c | goto label_137;
| }
| label_10:
0x000761c2 mov r0, fp | r0 = fp;
0x000761c4 bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x000761c8 ldrb.w r3, [sp, 0x60] | r3 = var_60h;
0x000761cc mov r5, r0 | r5 = r0;
0x000761ce cmp r3, 0xc |
| if (r3 != 0xc) {
0x000761d0 bne.w 0x7593a | goto label_4;
| }
| label_79:
0x000761d4 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000761d6 movs r2, 0 | r2 = 0;
0x000761d8 movs r1, 0x76 | r1 = 0x76;
0x000761da mov r0, r5 | r0 = r5;
0x000761dc ldr r3, [r3] | r3 = *(r3);
0x000761de str r2, [sp] | *(sp) = r2;
0x000761e0 ldr r2, [sp, 0x64] | r2 = var_64h;
0x000761e2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000761e6 movs r3, 0xe | r3 = 0xe;
0x000761e8 strb.w r3, [sp, 0x60] | var_60h = r3;
0x000761ec ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000761ee lsls r6, r3, 0x15 | r6 = r3 << 0x15;
| if (r6 >= r3) {
0x000761f0 bpl.w 0x75942 | goto label_5;
| }
| label_80:
0x000761f4 ldr r7, [r4, 0x3c] | r7 = *((r4 + 0x3c));
0x000761f6 ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x000761f8 clz r0, r7 | r0 &= r7;
0x000761fc lsrs r0, r0, 5 | r0 >>= 5;
0x000761fe cmp r2, 0 |
| if (r2 != 0) {
0x00076200 bne.w 0x75942 | goto label_5;
| }
0x00076204 mov r1, r4 | r1 = r4;
0x00076206 mov.w sb, 1 | sb = 1;
0x0007620a b 0x76216 | goto label_138;
| label_6:
0x0007620c ldr r2, [r1, 0x44] | r2 = *((r1 + 0x44));
0x0007620e add sb, r0 | sb += r0;
0x00076210 cmp r2, 0 |
| if (r2 != 0) {
0x00076212 bne.w 0x75942 | goto label_5;
| }
| label_138:
0x00076216 mov r6, r1 | r6 = r1;
0x00076218 ldr r1, [r1, 0x34] | r1 = *((r1 + 0x34));
0x0007621a cmp r1, 0 |
| if (r1 != 0) {
0x0007621c bne 0x7620c | goto label_6;
| }
0x0007621e cmp.w sb, 1 |
| if (sb == 1) {
0x00076222 beq.w 0x76a9a | goto label_139;
| }
0x00076226 ldr r3, [pc, 0x228] |
0x00076228 mov r0, fp | r0 = fp;
0x0007622a ldr r2, [pc, 0x228] |
0x0007622c add r3, pc | r3 = 0xec682;
0x0007622e str r3, [sp] | *(sp) = r3;
0x00076230 add r2, pc | r2 = 0xec68a;
0x00076232 mov r3, sb | r3 = sb;
0x00076234 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
| label_34:
0x00076238 movs r4, 1 | r4 = 1;
0x0007623a movs r5, 0 | r5 = 0;
0x0007623c b 0x76246 |
| while (r7 == 0) {
0x0007623e strh.w sb, [r6, 2] | *((r6 + 2)) = sb;
0x00076242 ldr r6, [r6, 0x38] | r6 = *((r6 + 0x38));
| if (r6 == 0) {
0x00076244 cbz r6, 0x76260 | goto label_140;
| }
0x00076246 movs r3, 0 | r3 = 0;
0x00076248 mov.w r2, -1 | r2 = -1;
0x0007624c mov r1, r6 | r1 = r6;
0x0007624e mov r0, fp | r0 = fp;
0x00076250 strd r4, r4, [sp, 8] | __asm ("strd r4, r4, [var_8h]");
0x00076254 strd r5, sl, [sp] | __asm ("strd r5, sl, [sp]");
0x00076258 bl 0x6e488 | fcn_0006e488 (r0, r1, r2, r3, r4, r5, r6);
0x0007625c cmp r7, 0 |
0x0007625e beq 0x7623e |
| }
| label_140:
0x00076260 add r3, sp, 0x6c | r3 += var_6ch;
0x00076262 vld1.32 {d16}, [r3] | __asm ("vld1.32 {d16}, [r3]");
| label_84:
0x00076266 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00076268 movs r7, 0 | r7 = 0;
0x0007626a adds r3, 0xc | r3 += 0xc;
0x0007626c vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x00076270 b.w 0x759d2 | goto label_3;
| label_83:
0x00076274 mov r2, r3 | r2 = r3;
0x00076276 movs r1, 0x21 | r1 = 0x21;
0x00076278 mov r0, fp | r0 = fp;
0x0007627a str r3, [sp] | *(sp) = r3;
0x0007627c str r3, [sp, 0x20] | var_20h = r3;
0x0007627e bl 0x24140 | fcn_00024140 (r0, r1);
0x00076282 str r0, [sp, 0x1c] | var_1ch = r0;
0x00076284 cmp r0, 0 |
| if (r0 != 0) {
0x00076286 bne.w 0x7597a | goto label_7;
| }
0x0007628a ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x0007628e mov.w r2, 0x140 | r2 = 0x140;
0x00076292 mov r1, r4 | r1 = r4;
0x00076294 mov r0, fp | r0 = fp;
0x00076296 str r3, [sp, 0x30] | var_30h = r3;
0x00076298 subs r3, 1 | r3--;
0x0007629a str.w r3, [fp, 0x38] | __asm ("str.w r3, [arg_38h]");
0x0007629e strh r2, [r4, 2] | *((r4 + 2)) = r2;
0x000762a0 mov r2, r3 | r2 = r3;
0x000762a2 str r3, [sp, 0x2c] | var_2ch = r3;
0x000762a4 bl 0x6a028 | fcn_0006a028 (r0, r1, r2, r3);
0x000762a8 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000762aa add.w r2, r4, 8 | r2 = r4 + 8;
0x000762ae ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000762b0 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000762b4 str r3, [sp, 0x34] | var_34h = r3;
0x000762b6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000762b8 str r1, [sp, 0x38] | var_38h = r1;
0x000762ba ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x000762bc str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x000762be vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000762c2 ldr r0, [r6] | r0 = *(r6);
0x000762c4 ldr.w sb, [r4, 0x30] | sb = *((r4 + 0x30));
0x000762c8 str r1, [sp, 0x40] | var_40h = r1;
0x000762ca cmp r0, 0 |
| if (r0 > 0) {
0x000762cc bgt 0x762da | goto label_141;
| }
0x000762ce str r3, [sp, 0x24] | var_24h = r3;
0x000762d0 b 0x762ee | goto label_51;
| do {
0x000762d2 adds r3, 1 | r3++;
0x000762d4 cmp r3, r0 |
| if (r3 == r0) {
0x000762d6 beq.w 0x76dd8 | goto label_142;
| }
| label_141:
0x000762da add.w r1, r6, r3, lsl 6 | r1 = r6 + (r3 << 6);
0x000762de ldrb.w r2, [r1, 0x2d] | r2 = *((r1 + 0x2d));
0x000762e2 ubfx r2, r2, 6, 1 | r2 = (r2 >> 6) & ((1 << 1) - 1);
0x000762e6 cmp r2, 0 |
0x000762e8 beq 0x762d2 |
| } while (r2 == 0);
0x000762ea ldr r3, [r1, 0x30] | r3 = *((r1 + 0x30));
0x000762ec str r3, [sp, 0x24] | var_24h = r3;
| label_51:
0x000762ee ldr.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x000762f2 ldr.w r2, [fp, 0x28] | r2 = *(arg_28h);
0x000762f6 adds r3, 1 | r3++;
0x000762f8 str r3, [sp, 0x28] | var_28h = r3;
0x000762fa adds r3, r2, 1 | r3 = r2 + 1;
0x000762fc str r2, [sp, 0x20] | var_20h = r2;
0x000762fe str.w r3, [fp, 0x28] | __asm ("str.w r3, [arg_28h]");
0x00076302 ldrb r2, [r4] | r2 = *(r4);
0x00076304 cmp r2, 0x86 |
| if (r2 == 0x86) {
0x00076306 beq.w 0x76e6a | goto label_143;
| }
0x0007630a cmp.w sb, 0 |
| if (sb == 0) {
0x0007630e beq.w 0x76f48 | goto label_144;
| }
0x00076312 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00076314 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00076316 str r7, [sp] | *(sp) = r7;
0x00076318 str r3, [sp, 0x9c] | var_9ch = r3;
0x0007631a movs r3, 0 | r3 = 0;
0x0007631c str r3, [sp, 0xa0] | var_a0h = r3;
0x0007631e str r3, [sp, 0xac] | var_ach = r3;
0x00076320 strd r3, r3, [sp, 0xa4] | __asm ("strd r3, r3, [var_a4h]");
0x00076324 movs r3, 7 | r3 = 7;
0x00076326 str.w r2, [fp, 0x2c] | __asm ("str.w r2, [arg_2ch]");
| label_56:
0x0007632a movs r1, 0x79 | r1 = 0x79;
0x0007632c strb.w r3, [sp, 0x98] | var_98h = r3;
0x00076330 mov r0, r8 | r0 = r8;
0x00076332 mov r3, r2 | r3 = r2;
0x00076334 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00076336 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007633a mov r1, r4 | r1 = r4;
0x0007633c mov r0, fp | r0 = fp;
0x0007633e bl 0x2c3d4 | fcn_0002c3d4 (r0, r1, r2);
0x00076342 ldr.w r3, [sb] | r3 = *(sb);
0x00076346 mvn r2, 7 | r2 = ~7;
0x0007634a str r2, [sp, 8] | var_8h = r2;
0x0007634c movs r2, 0 | r2 = 0;
0x0007634e str r0, [sp, 4] | var_4h = r0;
0x00076350 movs r1, 0x76 | r1 = 0x76;
0x00076352 str r2, [sp] | *(sp) = r2;
0x00076354 adds r3, 2 | r3 += 2;
0x00076356 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00076358 mov r0, r8 | r0 = r8;
0x0007635a bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0007635e str.w sb, [sp, 0xb0] | __asm ("str.w sb, [var_b0h]");
| label_65:
0x00076362 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00076364 cmp r3, 0 |
| if (r3 != 0) {
0x00076366 bne.w 0x76e26 | goto label_145;
| }
| label_61:
0x0007636a ldr r3, [r4, 4] | r3 = *((r4 + 4));
| label_55:
0x0007636c movs r2, 0 | r2 = 0;
0x0007636e mov r6, r4 | r6 = r4;
0x00076370 str r2, [r4, 0x30] | *((r4 + 0x30)) = r2;
0x00076372 movs r2, 0x87 | r2 = 0x87;
0x00076374 b 0x76386 |
| while (r1 >= r3) {
0x00076376 ldr r7, [r6, 0x34] | r7 = *((r6 + 0x34));
0x00076378 strb r2, [r6] | *(r6) = r2;
0x0007637a ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0007637c ands r1, r3, 0x2000 | r1 = r3 & 0x2000;
| if (r1 == r3) {
0x00076380 beq.w 0x76c8a | goto label_146;
| }
0x00076384 mov r6, r7 | r6 = r7;
0x00076386 lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x00076388 bpl 0x76376 |
| }
0x0007638a ldr r1, [pc, 0xcc] |
0x0007638c mov r0, fp | r0 = fp;
0x0007638e add r1, pc | r1 = 0xec7ec;
0x00076390 bl 0x21598 | fcn_00021598 (r0, r1);
| label_49:
0x00076394 ldr r1, [r4, 0x30] | r1 = *((r4 + 0x30));
| if (r1 != 0) {
0x00076396 cbz r1, 0x763a0 |
0x00076398 ldr.w r0, [fp] | r0 = *(fp);
0x0007639c bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x000763a0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000763a2 str.w sb, [r4, 0x30] | __asm ("str.w sb, [r4, 0x30]");
0x000763a6 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x000763a8 b.w 0x7597a | goto label_7;
| label_109:
0x000763ac ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000763ae movs r3, 0 | r3 = 0;
0x000763b0 movs r1, 0x9b | r1 = 0x9b;
0x000763b2 mov r0, sl | r0 = sl;
0x000763b4 strd sb, sb, [sp, 0x98] | __asm ("strd sb, sb, [var_98h]");
0x000763b8 bl 0x21bd8 | r0 = fcn_00021bd8 (r0, r1, r2, r3);
0x000763bc mov r2, r0 | r2 = r0;
0x000763be cmp r0, 0 |
| if (r0 == 0) {
0x000763c0 beq.w 0x76e64 | goto label_147;
| }
0x000763c4 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000763c6 mov r1, r7 | r1 = r7;
0x000763c8 str.w r8, [r0, 8] | __asm ("str.w r8, [r0, 8]");
0x000763cc orr r3, r3, 0x800 | r3 |= 0x800;
0x000763d0 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x000763d2 mov r0, fp | r0 = fp;
0x000763d4 bl 0x301b0 | r0 = fcn_000301b0 (r0, r1, r2);
0x000763d8 mov r7, r0 | r7 = r0;
0x000763da str r0, [r4, 0x30] | *((r4 + 0x30)) = r0;
| if (r0 != 0) {
0x000763dc cbz r0, 0x763e8 |
0x000763de adds r5, 1 | r5++;
0x000763e0 add.w r3, r0, r5, lsl 4 | r3 = r0 + (r5 << 4);
0x000763e4 strh.w r8, [r3, 4] | *((r3 + 4)) = r8;
| }
0x000763e8 ldrb.w r0, [sl, 0x57] | r0 = *((sl + 0x57));
0x000763ec b 0x75cb0 | goto label_8;
| label_86:
0x000763ee movs r1, 0 | r1 = 0;
0x000763f0 movs r0, 0xc | r0 = 0xc;
0x000763f2 bl 0x13558 | fcn_00013558 (r0);
0x000763f6 b.w 0x759b6 | goto label_9;
| do {
| label_12:
0x000763fa ldr r2, [sp, 0x14] | r2 = var_14h;
0x000763fc add r3, sp, 0x6c | r3 += var_6ch;
0x000763fe vld1.32 {d16}, [r3] | __asm ("vld1.32 {d16}, [r3]");
0x00076402 adds r2, 0xc | r2 += 0xc;
0x00076404 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00076408 b.w 0x759d2 | goto label_3;
| label_137:
0x0007640c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0007640e ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00076410 lsls r7, r3, 0x1c | r7 = r3 << 0x1c;
0x00076412 itt pl |
| if (r7 < r3) {
0x00076414 movpl r3, 1 | r3 = 1;
| }
| if (r7 < r3) {
0x00076416 strbpl r3, [fp, 0x17] | *(arg_17h) = r3;
| }
0x0007641a b 0x761c2 | goto label_10;
| label_92:
0x0007645c ldrb.w sb, [sp, 0x60] | sb = var_60h;
0x00076460 cmp.w sb, 1 |
| if (sb != 1) {
0x00076464 bne.w 0x769fe | goto label_148;
| }
0x00076468 ldr r6, [sp, 0x64] | r6 = var_64h;
| label_29:
0x0007646a movs r3, 0 | r3 = 0;
0x0007646c add r2, sp, 0x98 | r2 += var_98h;
0x0007646e str r3, [sp, 0xa0] | var_a0h = r3;
0x00076470 mov r1, r8 | r1 = r8;
0x00076472 str r3, [sp, 0xac] | var_ach = r3;
0x00076474 mov r0, fp | r0 = fp;
0x00076476 strd r3, r3, [sp, 0xa4] | __asm ("strd r3, r3, [var_a4h]");
0x0007647a movs r3, 1 | r3 = 1;
0x0007647c strb.w r3, [sp, 0x98] | var_98h = r3;
0x00076480 str r6, [sp, 0x9c] | var_9ch = r6;
0x00076482 str r2, [sp, 0x1c] | var_1ch = r2;
0x00076484 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00076488 movs r3, 1 | r3 = 1;
0x0007648a mov r7, r0 | r7 = r0;
0x0007648c cmp r0, 0 |
0x0007648e bne 0x763fa |
| } while (r0 != 0);
0x00076490 ldrb r2, [r4] | r2 = *(r4);
0x00076492 str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x00076494 cmp r2, 0x88 |
| if (r2 == 0x88) {
0x00076496 beq.w 0x76c0c | goto label_149;
| }
0x0007649a ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
0x0007649c cmp r2, 0x87 |
0x0007649e str r1, [sp, 0x20] | var_20h = r1;
| if (r2 == 0x87) {
0x000764a0 beq.w 0x76b4e | goto label_150;
| }
0x000764a4 cmp r2, 0x89 |
0x000764a6 mov r2, r3 | r2 = r3;
| if (r2 != 0x89) {
0x000764a8 bne.w 0x76b32 | goto label_151;
| }
0x000764ac ldr.w r3, [pc, 0xc4c] |
0x000764b0 add r3, pc | r3 = 0xed5b0;
| label_39:
0x000764b2 strb.w r2, [sp, 0x98] | var_98h = r2;
0x000764b6 movs r7, 0 | r7 = 0;
0x000764b8 ldr.w r2, [pc, 0xc44] | r2 = *(0x00077100);
0x000764bc movs r1, 1 | r1 = 1;
0x000764be mov r0, fp | r0 = fp;
0x000764c0 str r7, [r4, 0x3c] | *((r4 + 0x3c)) = r7;
0x000764c2 add r2, pc | r2 += pc;
0x000764c4 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x000764c8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000764ca mov r1, r4 | r1 = r4;
0x000764cc mov r0, fp | r0 = fp;
0x000764ce bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x000764d2 ldrb r3, [r4] | r3 = *(r4);
0x000764d4 ldr r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x000764d6 str r7, [r4, 0x30] | *((r4 + 0x30)) = r7;
0x000764d8 mov r7, r0 | r7 = r0;
0x000764da cmp r3, 0x86 |
0x000764dc str.w r8, [r4, 0x34] | __asm ("str.w r8, [r4, 0x34]");
0x000764e0 str r2, [sp, 0x1c] | var_1ch = r2;
| if (r3 == 0x86) {
0x000764e2 bne 0x764f2 |
0x000764e4 ldrsh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x000764e8 ldrsh.w r0, [r4, 2] | r0 = *((r4 + 2));
0x000764ec bl 0xf9ec | fcn_0000f9ec (r0, r1);
0x000764f0 strh r0, [r4, 2] | *((r4 + 2)) = r0;
| }
0x000764f2 ldr r1, [r4, 0x3c] | r1 = *((r4 + 0x3c));
| if (r1 != 0) {
0x000764f4 cbz r1, 0x764fc |
0x000764f6 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000764f8 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x000764fc ldr r3, [sp, 0x20] | r3 = var_20h;
0x000764fe cmp.w sb, 1 |
0x00076502 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00076506 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x00076508 add.w r3, r4, 8 | r3 = r4 + 8;
0x0007650c vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
| if (sb == 1) {
0x00076510 beq.w 0x75c2e | goto label_11;
| }
0x00076514 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00076516 ldrb.w sb, [r3, 0x57] | sb = *((r3 + 0x57));
0x0007651a cmp.w sb, 0 |
| if (sb != 0) {
0x0007651e bne.w 0x75c2e | goto label_11;
| }
0x00076522 ldr.w r8, [fp, 0x38] | r8 = *(arg_38h);
0x00076526 mov r1, r4 | r1 = r4;
0x00076528 mov r0, fp | r0 = fp;
0x0007652a sub.w r3, r8, 2 | r3 = r8 - 2;
0x0007652e add.w r2, r8, -1 | r2 = r8 + -1;
0x00076532 str.w r3, [fp, 0x38] | __asm ("str.w r3, [arg_38h]");
0x00076536 str r3, [sp, 0x20] | var_20h = r3;
0x00076538 str r2, [sp, 0x24] | var_24h = r2;
0x0007653a bl 0x6a028 | fcn_0006a028 (r0, r1, r2, r3);
0x0007653e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00076540 mov r2, r6 | r2 = r6;
0x00076542 movs r1, 0x23 | r1 = 0x23;
0x00076544 mov r0, r5 | r0 = r5;
0x00076546 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0007654a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007654e ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x00076550 mov r0, fp | r0 = fp;
0x00076552 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00076554 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00076556 str r1, [sp, 0x28] | var_28h = r1;
0x00076558 mov r1, r4 | r1 = r4;
0x0007655a str r2, [sp, 0xc] | var_ch = r2;
0x0007655c mov r2, r6 | r2 = r6;
0x0007655e str r3, [sp, 8] | var_8h = r3;
0x00076560 mov r3, sb | r3 = sb;
0x00076562 str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h]");
0x00076566 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x0007656a bl 0x6e488 | fcn_0006e488 (r0, r1, r2, r3, r4, r5, r6);
0x0007656e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00076570 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00076572 mvns r2, r3 | r2 = ~r3;
0x00076574 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x00076578 cmn r1, r3 |
| if (r1 < r3) {
0x0007657a bmi.w 0x77054 | goto label_152;
| }
0x0007657e ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x00076580 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x00076582 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_72:
0x00076586 movs r2, 0 | r2 = 0;
0x00076588 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007658a str r2, [sp] | *(sp) = r2;
0x0007658c movs r1, 0x26 | r1 = 0x26;
0x0007658e mov r2, r6 | r2 = r6;
0x00076590 mov r0, r5 | r0 = r5;
0x00076592 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076596 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00076598 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0007659c cmn r2, r3 |
| if (r2 < r3) {
0x0007659e bmi.w 0x77046 | goto label_153;
| }
0x000765a2 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x000765a4 lsl.w r3, r8, 2 | r3 = r8 << 2;
0x000765a8 ldr r1, [r5, 0x6c] | r1 = *((r5 + 0x6c));
0x000765aa rsbs r3, r3, 0 | r3 -= ;
0x000765ac str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_71:
0x000765ae movs r3, 0 | r3 = 0;
0x000765b0 mov r2, r6 | r2 = r6;
0x000765b2 movs r1, 0x7a | r1 = 0x7a;
0x000765b4 mov r0, r5 | r0 = r5;
0x000765b6 str r3, [sp] | *(sp) = r3;
0x000765b8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000765bc b.w 0x75c2e | goto label_11;
| label_91:
0x000765c0 add.w r6, r4, 8 | r6 = r4 + 8;
0x000765c4 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000765c6 add.w sb, r8, 8 | sb = r8 + 8;
0x000765ca movs r7, 0 | r7 = 0;
0x000765cc vld1.32 {d16}, [r6] | __asm ("vld1.32 {d16}, [r6]");
0x000765d0 mov r2, sl | r2 = sl;
0x000765d2 mov r1, r8 | r1 = r8;
0x000765d4 mov r0, fp | r0 = fp;
0x000765d6 vst1.32 {d16}, [sb] | __asm ("vst1.32 {d16}, [sb]");
0x000765da str.w r3, [r8, 0x3c] | __asm ("str.w r3, [r8, 0x3c]");
0x000765dc adds r0, 0x3c | r0 += 0x3c;
0x000765de str r7, [sp, 0x98] | var_98h = r7;
0x000765e0 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x000765e4 str.w r7, [r8, 0x3c] | __asm ("str.w r7, [r8, 0x3c]");
0x000765e8 mov r7, r0 | r7 = r0;
0x000765ea cmp r0, 0 |
| if (r0 != 0) {
0x000765ec bne.w 0x763fa | goto label_12;
| }
0x000765f0 vld1.32 {d7}, [sb] | __asm ("vld1.32 {d7}, [sb]");
0x000765f4 str r0, [r4, 0x34] | *((r4 + 0x34)) = r0;
0x000765f6 vmov r3, s14 | __asm ("vmov r3, s14");
0x000765fa vst1.32 {d7}, [r6] | __asm ("vst1.32 {d7}, [r6]");
0x000765fe subs r6, r3, 0 | r6 = r3 - 0;
| if (r6 != r3) {
0x00076600 bne.w 0x76c1a | goto label_154;
| }
0x00076604 ldr.w r2, [pc, 0xafc] |
0x00076608 movs r1, 1 | r1 = 1;
0x0007660a mov r0, fp | r0 = fp;
0x0007660c add r2, pc | r2 = 0xed714;
0x0007660e bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00076612 mov r2, sl | r2 = sl;
0x00076614 mov r1, r4 | r1 = r4;
0x00076616 mov r0, fp | r0 = fp;
0x00076618 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x0007661c ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0007661e mov r7, r0 | r7 = r0;
0x00076620 ldrsh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x00076624 ldrsh.w r0, [r4, 2] | r0 = *((r4 + 2));
0x00076628 str.w r8, [r4, 0x34] | __asm ("str.w r8, [r4, 0x34]");
0x0007662c str r3, [sp, 0x1c] | var_1ch = r3;
0x0007662e bl 0xf9ec | fcn_0000f9ec (r0, r1);
0x00076632 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00076634 mov r8, r0 | r8 = r0;
0x00076636 strh r0, [r4, 2] | *((r4 + 2)) = r0;
0x00076638 cmp r3, 0 |
| if (r3 == 0) {
0x0007663a beq.w 0x75c2e | goto label_11;
| }
| label_47:
0x0007663e ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00076640 add r1, sp, 0x98 | r1 += var_98h;
0x00076642 bl 0xa8b8 | r0 = fcn_0000a8b8 (r0, r1);
| if (r0 != 0) {
0x00076646 cbz r0, 0x76650 |
0x00076648 ldr r2, [sp, 0x98] | r2 = var_98h;
0x0007664a cmp r2, 0 |
| if (r2 > 0) {
0x0007664c bgt.w 0x76f00 | goto label_155;
| }
| }
| label_48:
0x00076650 cmp r6, 0 |
| if (r6 == 0) {
0x00076652 beq.w 0x75c2e | goto label_11;
| }
| label_118:
0x0007667a ldr.w r3, [pc, 0xa8c] | r3 = *(0x00077108);
0x0007667e add r3, pc | r3 += pc;
0x00076680 adds r3, 4 | r3 += 4;
0x00076682 b.w 0x75e76 | goto label_13;
| label_131:
0x00076686 ldr.w r2, [pc, 0xa84] | r2 = *(0x0007710c);
0x0007668a add r2, pc | r2 += pc;
0x0007668c adds r2, 4 | r2 += 4;
0x0007668e b 0x76082 | goto label_14;
| label_124:
0x00076690 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00076692 cmp r3, r2 |
| if (r3 >= r2) {
0x00076694 bge.w 0x76dde | goto label_156;
| }
0x00076698 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0007669a movs r0, 0 | r0 = 0;
0x0007669c ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x0007669e movs r4, 9 | r4 = 9;
0x000766a0 ldr r7, [sp, 0x3c] | r7 = var_3ch;
0x000766a2 add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x000766a6 adds r2, 1 | r2++;
0x000766a8 str r2, [r6, 0x6c] | *((r6 + 0x6c)) = r2;
0x000766aa lsls r3, r3, 2 | r3 <<= 2;
0x000766ac adds r2, r1, r3 | r2 = r1 + r3;
0x000766ae str r7, [r2, 4] | *((r2 + 4)) = r7;
0x000766b0 ldr r7, [sp, 0x48] | r7 = var_48h;
0x000766b2 str r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
0x000766b4 strd r7, r0, [r2, 8] | __asm ("strd r7, r0, [r2, 8]");
0x000766b8 str r4, [r1, r3] | *((r1 + r3)) = r4;
| label_52:
0x000766ba movs r2, 0 | r2 = 0;
0x000766bc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000766be movs r1, 0xb | r1 = 0xb;
0x000766c0 str r2, [sp] | *(sp) = r2;
0x000766c2 mov r0, r6 | r0 = r6;
0x000766c4 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000766c6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000766ca ldr r1, [sp, 0x14] | r1 = var_14h;
0x000766cc mov r0, r6 | r0 = r6;
0x000766ce bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x000766d2 ldrd r3, r2, [r6, 0x6c] | __asm ("ldrd r3, r2, [r6, 0x6c]");
0x000766d6 b 0x75f58 | goto label_15;
| label_110:
0x000766d8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000766da str r3, [sp, 0x4c] | var_4ch = r3;
| label_67:
0x000766dc ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000766de mov.w sl, 0 | sl = 0;
0x000766e2 ldr.w r1, [fp, 0x2c] | r1 = *(arg_2ch);
0x000766e6 mov r2, sl | r2 = sl;
0x000766e8 mov r0, r6 | r0 = r6;
0x000766ea ldr r3, [r3] | r3 = *(r3);
0x000766ec str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000766f0 str r3, [sp, 0x20] | var_20h = r3;
0x000766f2 adds r3, 1 | r3++;
0x000766f4 add r3, r1 | r3 += r1;
0x000766f6 adds r1, 1 | r1++;
0x000766f8 str.w r3, [fp, 0x2c] | __asm ("str.w r3, [arg_2ch]");
0x000766fc mov r3, r1 | r3 = r1;
0x000766fe str r1, [sp, 0x44] | var_44h = r1;
0x00076700 movs r1, 0x47 | r1 = 0x47;
0x00076702 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076706 ldr.w r8, [sp, 0x20] | r8 = var_20h;
0x0007670a movs r2, 1 | r2 = 1;
0x0007670c ldr r0, [sp, 0x28] | r0 = var_28h;
0x0007670e mov r1, r8 | r1 = r8;
0x00076710 bl 0x221c0 | r0 = fcn_000221c0 (r0, r1, r2);
0x00076714 mov sb, r0 | sb = r0;
0x00076716 cmp r0, 0 |
| if (r0 == 0) {
0x00076718 beq 0x767b4 | goto label_157;
| }
0x0007671a cmp r8, sl |
0x0007671c mov r3, r8 | r3 = r8;
| if (r8 <= sl) {
0x0007671e ble 0x767b4 | goto label_157;
| }
0x00076720 mov sb, sl | sb = sl;
0x00076722 str r7, [sp, 0x34] | var_34h = r7;
0x00076724 add.w r8, r0, 0x10 | r8 = r0 + 0x10;
0x00076728 mov r7, r0 | r7 = r0;
0x0007672a mov sl, r3 | sl = r3;
0x0007672c strd r6, r5, [sp, 0x20] | __asm ("strd r6, r5, [var_20h]");
0x00076730 b 0x7675a |
| while (r6 != 0) {
0x00076732 ldr r5, [r6, 0x34] | r5 = *((r6 + 0x34));
| if (r5 == 0) {
0x00076734 cbz r5, 0x76792 | goto label_158;
| }
0x00076736 ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
| if (r1 == 0) {
0x00076738 cbz r1, 0x7677a | goto label_159;
| }
0x0007673a mov r2, sb | r2 = sb;
0x0007673c mov r0, fp | r0 = fp;
0x0007673e bl 0x2c338 | r0 = fcn_0002c338 (r0, r1, r2);
| if (r0 == 0) {
0x00076742 cbz r0, 0x7677a | goto label_159;
| }
| label_16:
0x00076744 ldr r1, [r7, 0x10] | r1 = *((r7 + 0x10));
0x00076746 mov.w r3, 0 | r3 = 0;
0x0007674a str r0, [r8, 4]! | *((r8 += 4)) = r0;
0x0007674e strb.w r3, [r1, sb] | *((r1 + sb)) = r3;
0x00076752 add.w sb, sb, 1 | sb++;
0x00076756 cmp sl, sb |
| if (sl == sb) {
0x00076758 beq 0x767ac | goto label_160;
| }
0x0007675a ldr r6, [r4, 0x34] | r6 = *((r4 + 0x34));
0x0007675c cmp r6, 0 |
0x0007675e bne 0x76732 |
| }
| label_17:
0x00076760 ldr r1, [r4, 0x1c] | r1 = *((r4 + 0x1c));
0x00076762 ldr r0, [r1] | r0 = *(r1);
0x00076764 cmp r0, sb |
0x00076766 it le |
| if (r0 <= sb) {
0x00076768 movle r0, 0 | r0 = 0;
| goto label_161;
| }
| if (r0 <= sb) {
| label_161:
0x0007676a ble 0x76744 | goto label_16;
| }
0x0007676c add.w r1, r1, sb, lsl 4 | r1 += (sb << 4);
0x00076770 mov r0, fp | r0 = fp;
0x00076772 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x00076774 bl 0x2bfc0 | fcn_0002bfc0 (r0, r1);
0x00076778 b 0x76744 | goto label_16;
| label_159:
0x0007677a ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x0007677c ldr r0, [r1] | r0 = *(r1);
0x0007677e cmp r0, sb |
| if (r0 <= sb) {
0x00076780 ble 0x76792 | goto label_158;
| }
0x00076782 add.w r1, r1, sb, lsl 4 | r1 += (sb << 4);
0x00076786 mov r0, fp | r0 = fp;
0x00076788 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0007678a bl 0x2bfc0 | r0 = fcn_0002bfc0 (r0, r1);
0x0007678e cmp r0, 0 |
| if (r0 != 0) {
0x00076790 bne 0x76744 | goto label_16;
| }
| label_158:
0x00076792 ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x00076794 ldr r0, [r1] | r0 = *(r1);
0x00076796 cmp r0, sb |
| if (r0 <= sb) {
0x00076798 ble 0x76760 | goto label_17;
| }
0x0007679a add.w r1, r1, sb, lsl 4 | r1 += (sb << 4);
0x0007679e mov r0, fp | r0 = fp;
0x000767a0 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x000767a2 bl 0x2bfc0 | r0 = fcn_0002bfc0 (r0, r1);
0x000767a6 cmp r0, 0 |
| if (r0 != 0) {
0x000767a8 bne 0x76744 | goto label_16;
| }
0x000767aa b 0x76760 | goto label_17;
| label_160:
0x000767ac mov sb, r7 | sb = r7;
0x000767ae ldrd r6, r5, [sp, 0x20] | __asm ("ldrd r6, r5, [var_20h]");
0x000767b2 ldr r7, [sp, 0x34] | r7 = var_34h;
| label_157:
0x000767b4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000767b6 ldr.w r8, [r4, 0x34] | r8 = *((r4 + 0x34));
0x000767ba subs r3, 0x86 | r3 -= 0x86;
0x000767bc mov r2, r3 | r2 = r3;
0x000767be str r3, [sp, 0x40] | var_40h = r3;
0x000767c0 cmp r2, 1 |
0x000767c2 mov r3, r8 | r3 = r8;
| if (r2 > 1) {
0x000767c4 bhi.w 0x75d16 | goto label_18;
| }
0x000767c8 b.w 0x75d0a | goto label_19;
| label_85:
0x000767cc ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000767ce movs r2, 1 | r2 = 1;
0x000767d0 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000767d2 ldr r3, [r3] | r3 = *(r3);
0x000767d4 mov r1, r3 | r1 = r3;
0x000767d6 mov sb, r3 | sb = r3;
0x000767d8 str r3, [sp, 0x20] | var_20h = r3;
0x000767da bl 0x221c0 | r0 = fcn_000221c0 (r0, r1, r2);
0x000767de mov r8, r0 | r8 = r0;
0x000767e0 cmp r0, 0 |
| if (r0 == 0) {
0x000767e2 beq.w 0x76e20 | goto label_162;
| }
0x000767e6 mov r3, sb | r3 = sb;
0x000767e8 add.w sl, r0, 0x14 | sl = r0 + 0x14;
0x000767ec cmp r3, 0 |
| if (r3 <= 0) {
0x000767ee ble.w 0x768fa | goto label_163;
| }
0x000767f2 mov.w sb, 0 | sb = 0;
0x000767f6 str r5, [sp, 0x24] | var_24h = r5;
0x000767f8 str r6, [sp, 0x28] | var_28h = r6;
0x000767fa mov r5, sb | r5 = sb;
0x000767fc mov r6, r4 | r6 = r4;
0x000767fe ldr.w sb, [sp, 0x20] | sb = var_20h;
0x00076802 ldr r4, [sp, 0x18] | r4 = var_18h;
0x00076804 b 0x7681e |
| while (r1 != 0) {
0x00076806 mov r2, r5 | r2 = r5;
0x00076808 mov r0, fp | r0 = fp;
0x0007680a bl 0x2c338 | r0 = fcn_0002c338 (r0, r1, r2);
| if (r0 == 0) {
0x0007680e cbz r0, 0x76824 | goto label_164;
| }
0x00076810 str.w r0, [sl] | __asm ("str.w r0, [sl]");
| label_20:
0x00076814 adds r5, 1 | r5++;
0x00076816 add.w sl, sl, 4 | sl += 4;
0x0007681a cmp sb, r5 |
| if (sb == r5) {
0x0007681c beq 0x768f4 | goto label_165;
| }
0x0007681e ldr r1, [r6, 0x34] | r1 = *((r6 + 0x34));
0x00076820 cmp r1, 0 |
0x00076822 bne 0x76806 |
| }
| label_164:
0x00076824 ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x00076826 ldr r0, [r1] | r0 = *(r1);
0x00076828 cmp r0, r5 |
0x0007682a itt le |
| if (r0 > r5) {
0x0007682c movle r3, 0 | r3 = 0;
| }
| if (r0 > r5) {
0x0007682e strle r3, [sl] | *(sl) = r3;
| }
| if (r0 <= r5) {
0x00076832 ble 0x76848 | goto label_166;
| }
0x00076834 add.w r1, r1, r5, lsl 4 | r1 += (r5 << 4);
0x00076838 mov r0, fp | r0 = fp;
0x0007683a ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0007683c bl 0x2bfc0 | fcn_0002bfc0 (r0, r1);
0x00076840 str.w r0, [sl] | __asm ("str.w r0, [sl]");
0x00076844 cmp r0, 0 |
| if (r0 != 0) {
0x00076846 bne 0x76814 | goto label_20;
| }
| label_166:
0x00076848 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0007684a str.w r1, [sl] | __asm ("str.w r1, [sl]");
0x0007684c asrs r0, r0, 0x20 | r0 >>= 0x20;
0x0007684e b 0x76814 | goto label_20;
| label_120:
0x00076850 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00076852 mov r0, fp | r0 = fp;
0x00076854 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00076856 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00076858 strd sb, r1, [sp, 8] | __asm ("strd sb, r1, [var_8h]");
0x0007685c ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x0007685e str r3, [sp, 4] | var_4h = r3;
0x00076860 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00076862 str r1, [sp] | *(sp) = r1;
0x00076864 mov r1, r4 | r1 = r4;
0x00076866 bl 0x34b6c | fcn_00034b6c (r0, r1, r2, r3, r4, r5, r6);
0x0007686a str r0, [sp, 0x54] | var_54h = r0;
0x0007686c cmp.w sb, 0 |
| if (sb != 0) {
0x00076870 bne.w 0x75f18 | goto label_21;
| }
| label_123:
0x00076874 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x00076876 ldr r1, [r6, 0x70] | r1 = *((r6 + 0x70));
0x00076878 str r3, [sp, 0x1c] | var_1ch = r3;
0x0007687a cmp r3, r1 |
| if (r3 >= r1) {
0x0007687c bge.w 0x76e06 | goto label_167;
| }
0x00076880 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00076882 mov.w lr, 0 | lr = 0;
0x00076886 ldr r0, [r6, 0x68] | r0 = *((r6 + 0x68));
0x00076888 mov.w ip, 9 |
0x0007688c ldr r7, [sp, 0x5c] | r7 = var_5ch;
0x0007688e add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x00076892 adds r2, 1 | r2++;
0x00076894 str r2, [r6, 0x6c] | *((r6 + 0x6c)) = r2;
0x00076896 lsls r3, r3, 2 | r3 <<= 2;
0x00076898 str r2, [sp, 0x44] | var_44h = r2;
0x0007689a adds r2, r0, r3 | r2 = r0 + r3;
0x0007689c str r7, [r2, 4] | *((r2 + 4)) = r7;
0x0007689e ldr r7, [sp, 0x54] | r7 = var_54h;
0x000768a0 str.w lr, [r2, 0x10] | __asm ("str.w lr, [r2, 0x10]");
0x000768a4 strd r7, lr, [r2, 8] | __asm ("strd r7, lr, [r2, 8]");
0x000768a8 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_54:
0x000768ac ldr r3, [sp, 0x44] | r3 = var_44h;
0x000768ae cmp r1, r3 |
| if (r1 <= r3) {
0x000768b0 ble.w 0x76df2 | goto label_168;
| }
0x000768b4 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000768b6 movs r0, 0 | r0 = 0;
0x000768b8 ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x000768ba mov.w ip, 0xb |
0x000768be ldr r7, [sp, 0x24] | r7 = var_24h;
0x000768c0 add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x000768c4 adds r2, 1 | r2++;
0x000768c6 str r2, [r6, 0x6c] | *((r6 + 0x6c)) = r2;
0x000768c8 lsls r3, r3, 2 | r3 <<= 2;
0x000768ca adds r2, r1, r3 | r2 = r1 + r3;
0x000768cc str r7, [r2, 4] | *((r2 + 4)) = r7;
0x000768ce ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x000768d0 str r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
0x000768d2 strd r7, r0, [r2, 8] | __asm ("strd r7, r0, [r2, 8]");
0x000768d6 str.w ip, [r1, r3] | __asm ("str.w ip, [r1, r3]");
0x000768d8 stm r0!, {r0, r1} | *(r0!) = r0;
| *((r0! + 4)) = r1;
| label_53:
0x000768da ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000768dc mov r0, r6 | r0 = r6;
0x000768de bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x000768e2 ldrsh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x000768e6 ldrsh.w r0, [r4, 2] | r0 = *((r4 + 2));
0x000768ea bl 0xf9ec | fcn_0000f9ec (r0, r1);
0x000768ee strh r0, [r4, 2] | *((r4 + 2)) = r0;
0x000768f0 b.w 0x75f38 | goto label_22;
| label_165:
0x000768f4 mov r4, r6 | r4 = r6;
0x000768f6 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000768f8 ldr r6, [sp, 0x28] | r6 = var_28h;
| label_163:
0x000768fa ldr.w sl, [pc, 0x814] | sl = *(0x00077110);
0x000768fe str r6, [sp, 0x28] | var_28h = r6;
0x00076900 ldr r6, [sp, 0x20] | r6 = var_20h;
0x00076902 add sl, pc | sl += pc;
0x00076904 str r7, [sp, 0x18] | var_18h = r7;
0x00076906 str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x0007690a add.w sl, sl, 4 | sl += 4;
0x0007690e mov r7, r5 | r7 = r5;
0x00076910 mov fp, r4 |
| label_23:
0x00076912 add.w sb, fp, 0x10 | sb += arg_10h;
0x00076916 add.w r5, fp, 0x18 | r5 += arg_18h;
0x0007691a mov.w r4, -1 | r4 = -1;
| do {
0x0007691e ldr r1, [sb, 4]! | r1 = *((sb += 4));
0x00076922 cmp r1, 0 |
| if (r1 < 0) {
0x00076924 blt 0x76958 | goto label_169;
| }
0x00076926 ldr r3, [r7] | r3 = *(r7);
0x00076928 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0007692c cbnz r3, 0x76986 | goto label_170;
| }
0x0007692e ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x00076930 add.w r2, r1, r1, lsl 2 | r2 = r1 + (r1 << 2);
0x00076934 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
| label_24:
0x00076938 str r6, [r3, 8] | *((r3 + 8)) = r6;
0x0007693a mov r2, r8 | r2 = r8;
0x0007693c ldr.w r3, [r8] | r3 = *(r8);
0x00076940 mov r0, r7 | r0 = r7;
0x00076942 adds r3, 1 | r3++;
0x00076944 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x00076948 mvn r3, 7 | r3 = ~7;
0x0007694c bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
0x00076950 cmp r5, sb |
0x00076952 str.w r4, [sb] | __asm ("str.w r4, [sb]");
0x00076956 bne 0x7691e |
| } while (r5 != sb);
| label_169:
0x00076958 ldr.w fp, [fp, 0x34] | fp = *(arg_34h);
0x0007695c cmp.w fp, 0 |
| if (fp != 0) {
0x00076960 bne 0x76912 | goto label_23;
| }
0x00076962 ldr.w r3, [r8] | r3 = *(r8);
0x00076966 ldr r7, [sp, 0x18] | r7 = var_18h;
0x00076968 ldrd fp, r6, [sp, 0x24] | __asm ("ldrd fp, r6, [var_28h]");
0x0007696c subs r3, 1 | r3--;
0x0007696e str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x00076970 adds r0, 0 | r0 += 0;
0x00076972 cmp r3, 0 |
| if (r3 != 0) {
0x00076974 bne.w 0x75994 | goto label_0;
| }
0x00076978 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x0007697c mov r1, r8 | r1 = r8;
0x0007697e bl 0x16808 | fcn_00016808 (r0, r1);
0x00076982 b.w 0x75994 | goto label_0;
| label_170:
0x00076986 mov r3, sl | r3 = sl;
0x00076988 b 0x76938 | goto label_24;
| label_136:
0x0007698a ldr.w r3, [pc, 0x788] | r3 = *(0x00077114);
0x0007698e add r3, pc | r3 += pc;
0x00076990 adds r3, 4 | r3 += 4;
0x00076992 b 0x761a6 | goto label_25;
| label_116:
0x00076994 ldr.w r3, [pc, 0x780] |
0x00076998 add r3, pc | r3 = 0xedab4;
0x0007699a b.w 0x75dd6 | goto label_26;
| label_115:
0x0007699e ldr.w r3, [pc, 0x77c] | r3 = *(0x0007711c);
0x000769a2 add r3, pc | r3 += pc;
0x000769a4 b.w 0x75dd6 | goto label_26;
| label_103:
0x000769a8 ldr.w r3, [fp, 0xdc] | r3 = *(arg_dch);
0x000769ac ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x000769b0 cmp r3, 0 |
| if (r3 != 0) {
0x000769b2 beq 0x769d6 |
0x000769b4 ldr r1, [r2] | r1 = *(r2);
0x000769b6 it lt |
| if (r3 >= 0) {
0x000769b8 ldrlt r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
| }
0x000769ba ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x000769be it lt |
| if (r3 >= 0) {
0x000769c0 addlt r3, r3, -1 | r3 += -1;
| }
0x000769c4 cmp r1, 0 |
| if (r1 != 0) {
0x000769c6 bne.w 0x76dd0 | goto label_171;
| }
0x000769c8 strh r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000769ca ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x000769cc add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000769d0 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_50:
0x000769d4 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| }
0x000769d6 str.w r3, [fp, 0xdc] | __asm ("str.w r3, [arg_dch]");
0x000769da b.w 0x75c36 | goto label_27;
| label_90:
0x000769de ldr.w r2, [pc, 0x740] | r2 = *(0x00077120);
0x000769e2 mov r0, fp | r0 = fp;
0x000769e4 movs r1, 1 | r1 = 1;
0x000769e6 add r2, pc | r2 += pc;
0x000769e8 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x000769ec ldr.w r2, [pc, 0x734] |
0x000769f0 movs r1, 1 | r1 = 1;
0x000769f2 mov r0, fp | r0 = fp;
0x000769f4 add r2, pc | r2 = 0xedb1c;
0x000769f6 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x000769fa b.w 0x75a0a | goto label_28;
| label_148:
0x000769fe ldrd r2, r1, [r5, 0x6c] | __asm ("ldrd r2, r1, [r5, 0x6c]");
0x00076a02 ldr.w r6, [fp, 0x28] | r6 = *(arg_28h);
0x00076a06 cmp r2, r1 |
0x00076a08 add.w r0, r6, 1 | r0 = r6 + 1;
0x00076a0c str.w r0, [fp, 0x28] | __asm ("str.w r0, [arg_28h]");
| if (r2 >= r1) {
0x00076a10 bge.w 0x76ef0 | goto label_172;
| }
0x00076a14 add.w r1, r2, r2, lsl 2 | r1 = r2 + (r2 << 2);
0x00076a18 ldr r7, [r5, 0x68] | r7 = *((r5 + 0x68));
0x00076a1a adds r0, r2, 1 | r0 = r2 + 1;
0x00076a1c lsls r1, r1, 2 | r1 <<= 2;
0x00076a1e str r0, [r5, 0x6c] | *((r5 + 0x6c)) = r0;
0x00076a20 mov.w ip, 0x76 |
0x00076a24 adds r0, r7, r1 | r0 = r7 + r1;
0x00076a26 strd r6, r3, [r0, 4] | __asm ("strd r6, r3, [r0, 4]");
0x00076a2a strd r3, r3, [r0, 0xc] | __asm ("strd r3, r3, [r0, 0xc]");
0x00076a2e str.w ip, [r7, r1] | __asm ("str.w ip, [r7, r1]");
| label_60:
0x00076a32 mov r3, r4 | r3 = r4;
0x00076a34 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
| do {
0x00076a36 mov r2, r3 | r2 = r3;
0x00076a38 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x00076a3a cmp r3, 0 |
0x00076a3c bne 0x76a36 |
| } while (r3 != 0);
0x00076a3e ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00076a40 orr r3, r3, 0x20 | r3 |= 0x20;
0x00076a44 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x00076a46 b 0x7646a | goto label_29;
| label_87:
0x00076a48 ldr.w r0, [fp] | r0 = *(fp);
0x00076a4c movs r2, 1 | r2 = 1;
0x00076a4e ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00076a50 bl 0x1a4b8 | fcn_0001a4b8 (r0, r1, r2);
0x00076a54 b.w 0x759d2 | goto label_3;
| label_133:
0x00076a58 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00076a5a mov r1, r6 | r1 = r6;
0x00076a5c rsbs r2, r3, 0 | r2 = r3 - ;
0x00076a5e bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00076a62 b.w 0x7612e | goto label_30;
| label_132:
0x00076a66 mov r1, r6 | r1 = r6;
0x00076a68 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00076a6c b.w 0x760c0 | goto label_31;
| label_129:
0x00076a70 movs r1, 0 | r1 = 0;
0x00076a72 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00076a74 str r1, [sp] | *(sp) = r1;
0x00076a76 mov r0, r6 | r0 = r6;
0x00076a78 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00076a7a movs r1, 9 | r1 = 9;
0x00076a7c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076a80 b.w 0x76020 | goto label_32;
| label_114:
0x00076a84 ldr.w r3, [pc, 0x6a0] |
0x00076a88 add r3, pc | r3 = 0xedbb4;
0x00076a8a b.w 0x75dd6 | goto label_26;
| label_134:
0x00076a8e movs r1, 0 | r1 = 0;
0x00076a90 movs r0, 0xc | r0 = 0xc;
0x00076a92 bl 0x13558 | fcn_00013558 (r0);
0x00076a96 b.w 0x76146 | goto label_33;
| label_139:
0x00076a9a ldr.w r3, [pc, 0x690] |
0x00076a9e mov r0, fp | r0 = fp;
0x00076aa0 ldr.w r2, [pc, 0x68c] |
0x00076aa4 add r3, pc | r3 = 0xedbd6;
0x00076aa6 str r3, [sp] | *(sp) = r3;
0x00076aa8 add r2, pc | r2 = 0xedbdc;
0x00076aaa mov r3, sb | r3 = sb;
0x00076aac bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00076ab0 b.w 0x76238 | goto label_34;
| label_122:
0x00076ab4 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x00076ab8 mov r1, sb | r1 = sb;
0x00076aba bl 0x16808 | fcn_00016808 (r0, r1);
0x00076abe b.w 0x75f28 | goto label_35;
| label_104:
0x00076ac2 adds r2, r5, 1 | r2 = r5 + 1;
0x00076ac4 ldr r0, [sp, 0x28] | r0 = var_28h;
0x00076ac6 lsls r2, r2, 2 | r2 <<= 2;
0x00076ac8 movs r3, 0 | r3 = 0;
0x00076aca bl 0x21784 | fcn_00021784 (r0, r1);
0x00076ace str r0, [sp, 0x38] | var_38h = r0;
0x00076ad0 cmp r0, 0 |
| if (r0 == 0) {
0x00076ad2 beq.w 0x76ec6 | goto label_173;
| }
| label_66:
0x00076ad6 add r3, sp, 0x98 | r3 += var_98h;
0x00076ad8 str r3, [sp, 0x1c] | var_1ch = r3;
0x00076ada b.w 0x75ccc | goto label_36;
| label_112:
0x00076ade cmp.w r8, 0 |
| if (r8 == 0) {
0x00076ae2 beq.w 0x75d16 | goto label_18;
| }
0x00076ae6 ldr.w ip, [sp, 0x18] | ip = var_18h;
0x00076aea mov r3, r8 | r3 = r8;
0x00076aec mov r0, r4 | r0 = r4;
0x00076aee movs r1, 1 | r1 = 1;
0x00076af0 b 0x76afc |
| while (r2 == ip) {
0x00076af2 ldr r2, [r3, 0x34] | r2 = *((r3 + 0x34));
0x00076af4 adds r1, 1 | r1++;
0x00076af6 mov r0, r3 | r0 = r3;
| if (r2 == 0) {
0x00076af8 cbz r2, 0x76b02 | goto label_174;
| }
0x00076afa mov r3, r2 | r3 = r2;
0x00076afc ldrb r2, [r0] | r2 = *(r0);
0x00076afe cmp r2, ip |
0x00076b00 beq 0x76af2 |
| }
| label_174:
0x00076b02 cmp r1, 3 |
| if (r1 <= 3) {
0x00076b04 ble.w 0x75d16 | goto label_18;
| }
0x00076b08 movs r3, 2 | r3 = 2;
0x00076b0a mov r2, r8 | r2 = r8;
| do {
0x00076b0c adds r3, 2 | r3 += 2;
0x00076b0e mov r0, r2 | r0 = r2;
0x00076b10 cmp r3, r1 |
0x00076b12 ldr r2, [r2, 0x34] | r2 = *((r2 + 0x34));
0x00076b14 blt 0x76b0c |
| } while (r3 < r1);
0x00076b16 mov r8, r2 | r8 = r2;
0x00076b18 str r0, [sp, 0x34] | var_34h = r0;
0x00076b1a b.w 0x75d18 | goto label_37;
| label_93:
0x00076b1e movs r3, 0 | r3 = 0;
0x00076b20 mov r2, sb | r2 = sb;
0x00076b22 str r3, [sp] | *(sp) = r3;
0x00076b24 movs r1, 0x76 | r1 = 0x76;
0x00076b26 mov r0, r5 | r0 = r5;
0x00076b28 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00076b2c mov r3, r0 | r3 = r0;
0x00076b2e b.w 0x75a4e | goto label_38;
| label_151:
0x00076b32 ldr.w r3, [pc, 0x600] | r3 = *(0x00077134);
0x00076b36 add r3, pc | r3 += pc;
0x00076b38 b 0x764b2 | goto label_39;
| label_97:
0x00076b3a ldr.w r3, [pc, 0x5fc] | r3 = *(0x00077138);
0x00076b3e add r3, pc | r3 += pc;
0x00076b40 b.w 0x75ae0 | goto label_40;
| label_96:
0x00076b44 ldr.w r3, [pc, 0x5f4] |
0x00076b48 add r3, pc | r3 = 0xedc88;
0x00076b4a b.w 0x75ae0 | goto label_40;
| label_150:
0x00076b4e mov r2, r3 | r2 = r3;
0x00076b50 ldr.w r3, [pc, 0x5ec] |
0x00076b54 add r3, pc | r3 = 0xedc98;
0x00076b56 b 0x764b2 | goto label_39;
| label_95:
0x00076b58 ldr.w r3, [pc, 0x5e8] |
0x00076b5c add r3, pc | r3 = 0xedca4;
0x00076b5e b.w 0x75ae0 | goto label_40;
| label_121:
0x00076b62 str.w sb, [sp, 0x54] | __asm ("str.w sb, [var_54h]");
0x00076b66 b.w 0x75f28 | goto label_35;
| label_117:
0x00076b6a str r1, [sp] | *(sp) = r1;
0x00076b6c movs r3, 0 | r3 = 0;
0x00076b6e ldr r2, [sp, 0x20] | r2 = var_20h;
0x00076b70 movs r1, 0xa | r1 = 0xa;
0x00076b72 mov r0, r6 | r0 = r6;
0x00076b74 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00076b78 mov r7, r0 | r7 = r0;
0x00076b7a b.w 0x75e16 | goto label_41;
| label_119:
0x00076b7e str r1, [sp] | *(sp) = r1;
0x00076b80 movs r3, 0 | r3 = 0;
0x00076b82 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00076b84 movs r1, 0xa | r1 = 0xa;
0x00076b86 mov r0, r6 | r0 = r6;
0x00076b88 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00076b8c mov sl, r0 | sl = r0;
0x00076b8e b.w 0x75ea6 | goto label_42;
| label_130:
0x00076b92 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00076b94 mov r2, sb | r2 = sb;
0x00076b96 movs r1, 8 | r1 = 8;
0x00076b98 mov r0, r6 | r0 = r6;
0x00076b9a str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00076b9e bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00076ba2 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x00076ba4 b.w 0x76062 | goto label_43;
| label_126:
0x00076ba8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00076baa mov r2, sb | r2 = sb;
0x00076bac movs r1, 8 | r1 = 8;
0x00076bae mov r0, r6 | r0 = r6;
0x00076bb0 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00076bb4 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00076bb8 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x00076bba str r3, [sp, 0x2c] | var_2ch = r3;
0x00076bbc b.w 0x75fc4 | goto label_44;
| label_125:
0x00076bc0 movs r1, 0 | r1 = 0;
0x00076bc2 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00076bc4 str r1, [sp] | *(sp) = r1;
0x00076bc6 mov r0, r6 | r0 = r6;
0x00076bc8 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00076bca movs r1, 9 | r1 = 9;
0x00076bcc bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00076bd0 mov r4, r0 | r4 = r0;
0x00076bd2 b.w 0x75f84 | goto label_45;
| label_113:
0x00076bd6 ldr.w r1, [fp, 0x2c] | r1 = *(arg_2ch);
0x00076bda ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00076bdc adds r0, r1, 2 | r0 = r1 + 2;
0x00076bde add.w sl, r1, 1 | sl = r1 + 1;
0x00076be2 str r0, [sp, 0x48] | var_48h = r0;
0x00076be4 str.w r0, [fp, 0x2c] | __asm ("str.w r0, [arg_2ch]");
| if (r3 != 0) {
0x00076be8 cbz r3, 0x76bec |
0x00076bea adds r2, r3, 1 | r2 = r3 + 1;
| }
0x00076bec movs r7, 0 | r7 = 0;
0x00076bee mov r3, sl | r3 = sl;
0x00076bf0 movs r1, 0x50 | r1 = 0x50;
0x00076bf2 mov r0, r6 | r0 = r6;
0x00076bf4 str r7, [sp] | *(sp) = r7;
0x00076bf6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076bfa ldr r3, [sp, 0x48] | r3 = var_48h;
0x00076bfc mov r2, sl | r2 = sl;
0x00076bfe movs r1, 0x50 | r1 = 0x50;
0x00076c00 mov r0, r6 | r0 = r6;
0x00076c02 str r7, [sp] | *(sp) = r7;
0x00076c04 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076c08 b.w 0x75d74 | goto label_46;
| label_149:
0x00076c0c ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00076c0e movs r2, 2 | r2 = 2;
0x00076c10 str r3, [sp, 0x20] | var_20h = r3;
0x00076c12 ldr.w r3, [pc, 0x534] | r3 = *(0x00077148);
0x00076c16 add r3, pc | r3 += pc;
0x00076c18 b 0x764b2 | goto label_39;
| label_154:
0x00076c1a ldrd r3, r2, [r5, 0x6c] | __asm ("ldrd r3, r2, [r5, 0x6c]");
0x00076c1e cmp r3, r2 |
| if (r3 >= r2) {
0x00076c20 bge.w 0x76fa0 | goto label_175;
| }
0x00076c24 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x00076c28 ldr r0, [r5, 0x68] | r0 = *((r5 + 0x68));
0x00076c2a adds r1, r3, 1 | r1 = r3 + 1;
0x00076c2c lsls r2, r2, 2 | r2 <<= 2;
0x00076c2e str r1, [r5, 0x6c] | *((r5 + 0x6c)) = r1;
0x00076c30 mov.w ip, 0x10 |
0x00076c34 adds r1, r0, r2 | r1 = r0 + r2;
0x00076c36 str r6, [r1, 4] | *((r1 + 4)) = r6;
0x00076c38 mov r6, r3 | r6 = r3;
0x00076c3a vmov.32 r3, d7[1] | __asm ("vmov.32 r3, d7[1]");
0x00076c3e strd r7, r7, [r1, 8] | __asm ("strd r7, r7, [r1, 8]");
0x00076c42 str r7, [r1, 0x10] | *((r1 + 0x10)) = r7;
0x00076c44 str.w ip, [r0, r2] | __asm ("str.w ip, [r0, r2]");
| label_64:
0x00076c48 cmp r3, 0 |
| if (r3 != 0) {
0x00076c4a bne.w 0x76f82 | goto label_176;
| }
| label_62:
0x00076c4e ldr.w r2, [pc, 0x4fc] | r2 = *(0x0007714c);
0x00076c52 movs r1, 1 | r1 = 1;
0x00076c54 mov r0, fp | r0 = fp;
0x00076c56 add r2, pc | r2 += pc;
0x00076c58 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00076c5c mov r2, sl | r2 = sl;
0x00076c5e mov r1, r4 | r1 = r4;
0x00076c60 mov r0, fp | r0 = fp;
0x00076c62 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00076c66 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00076c68 mov r7, r0 | r7 = r0;
0x00076c6a ldrsh.w r1, [r8, 2] | r1 = *((r8 + 2));
0x00076c6e ldrsh.w r0, [r4, 2] | r0 = *((r4 + 2));
0x00076c72 str.w r8, [r4, 0x34] | __asm ("str.w r8, [r4, 0x34]");
0x00076c76 str r3, [sp, 0x1c] | var_1ch = r3;
0x00076c78 bl 0xf9ec | fcn_0000f9ec (r0, r1);
0x00076c7c ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00076c7e mov r8, r0 | r8 = r0;
0x00076c80 strh r0, [r4, 2] | *((r4 + 2)) = r0;
0x00076c82 cmp r3, 0 |
| if (r3 != 0) {
0x00076c84 bne.w 0x7663e | goto label_47;
| }
0x00076c88 b 0x76650 | goto label_48;
| label_146:
0x00076c8a ldr.w r2, [pc, 0x4c4] |
0x00076c8e mov r0, fp | r0 = fp;
0x00076c90 str r1, [r7, 0x38] | *((r7 + 0x38)) = r1;
0x00076c92 movs r1, 1 | r1 = 1;
0x00076c94 add r2, pc | r2 = 0xeddea;
0x00076c96 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00076c9a add r3, sp, 0x98 | r3 += var_98h;
0x00076c9c mov r1, r7 | r1 = r7;
0x00076c9e mov r2, r3 | r2 = r3;
0x00076ca0 mov r0, fp | r0 = fp;
0x00076ca2 str r3, [sp, 0x1c] | var_1ch = r3;
0x00076ca4 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00076ca8 str r4, [r7, 0x38] | *((r7 + 0x38)) = r4;
0x00076caa mov r3, r0 | r3 = r0;
0x00076cac cmp r0, 0 |
| if (r0 != 0) {
0x00076cae bne.w 0x76394 | goto label_49;
| }
0x00076cb2 ldr.w r2, [r8, 0x6c] | r2 = *((r8 + 0x6c));
0x00076cb6 mov r1, r2 | r1 = r2;
0x00076cb8 str r2, [sp, 0x3c] | var_3ch = r2;
0x00076cba ldr.w r2, [r8, 0x70] | r2 = *((r8 + 0x70));
0x00076cbe cmp r1, r2 |
| if (r1 >= r2) {
0x00076cc0 bge.w 0x770e2 | goto label_177;
| }
0x00076cc4 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x00076cc6 mov.w ip, 0x23 |
0x00076cca ldr.w r0, [r8, 0x68] | r0 = *((r8 + 0x68));
0x00076cce add.w r2, r1, r1, lsl 2 | r2 = r1 + (r1 << 2);
0x00076cd2 adds r1, 1 | r1++;
0x00076cd4 str.w r1, [r8, 0x6c] | __asm ("str.w r1, [r8, 0x6c]");
0x00076cd8 lsl.w lr, r2, 2 | lr = r2 << 2;
0x00076cdc ldr r2, [sp, 0x20] | r2 = var_20h;
0x00076cde add.w r1, r0, lr | r1 = r0 + lr;
0x00076ce2 str r2, [r1, 4] | *((r1 + 4)) = r2;
0x00076ce4 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00076ce6 str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
0x00076ce8 strd r2, r3, [r1, 8] | __asm ("strd r2, r3, [r1, 8]");
0x00076cec str.w ip, [r0, lr] | __asm ("str.w ip, [r0, lr]");
| label_77:
0x00076cf0 movs r3, 0 | r3 = 0;
0x00076cf2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00076cf4 movs r1, 0x88 | r1 = 0x88;
0x00076cf6 mov r0, r8 | r0 = r8;
0x00076cf8 str r3, [sp] | *(sp) = r3;
0x00076cfa bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076cfe cmp.w sb, 0 |
| if (sb == 0) {
0x00076d02 beq.w 0x7708a | goto label_178;
| }
0x00076d06 ldr.w r3, [sb] | r3 = *(sb);
0x00076d0a movs r1, 0x5e | r1 = 0x5e;
0x00076d0c ldr r2, [sp, 0x28] | r2 = var_28h;
0x00076d0e mov r0, r8 | r0 = r8;
0x00076d10 adds r3, 1 | r3++;
0x00076d12 str r2, [sp] | *(sp) = r2;
0x00076d14 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00076d16 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_74:
0x00076d1a movs r3, 0 | r3 = 0;
0x00076d1c ldr r2, [sp, 0x20] | r2 = var_20h;
0x00076d1e str r3, [sp] | *(sp) = r3;
0x00076d20 movs r1, 0x82 | r1 = 0x82;
0x00076d22 mov r0, r8 | r0 = r8;
0x00076d24 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076d28 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00076d2a ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x00076d2e cmp r2, 0 |
0x00076d30 str r3, [sp, 0x20] | var_20h = r3;
0x00076d32 add.w r3, r3, -1 | r3 += -1;
0x00076d36 str.w r3, [fp, 0x38] | __asm ("str.w r3, [arg_38h]");
| if (r2 > 0) {
0x00076d3a ble 0x76d4c |
0x00076d3c movs r1, 1 | r1 = 1;
0x00076d3e mov r0, r8 | r0 = r8;
0x00076d40 str r1, [sp] | *(sp) = r1;
0x00076d42 movs r1, 0x31 | r1 = 0x31;
0x00076d44 str r3, [sp, 0x28] | var_28h = r3;
0x00076d46 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076d4a ldr r3, [sp, 0x28] | r3 = var_28h;
| }
0x00076d4c strd sl, r3, [sp, 4] | __asm ("strd sl, r3, [var_4h]");
0x00076d50 mov.w sl, 0 | sl = 0;
0x00076d54 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00076d56 mov r1, r4 | r1 = r4;
0x00076d58 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00076d5a mov r0, fp | r0 = fp;
0x00076d5c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00076d60 str r3, [sp, 0xc] | var_ch = r3;
0x00076d62 mov r3, sl | r3 = sl;
0x00076d64 bl 0x6e488 | fcn_0006e488 (r0, r1, r2, r3, r4, r5, r6);
0x00076d68 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00076d6a cmp r3, 0 |
| if (r3 != 0) {
0x00076d6c bne.w 0x7706a | goto label_179;
| }
0x00076d70 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00076d74 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00076d78 cmn r2, r3 |
| if (r2 < r3) {
0x00076d7a bmi.w 0x7705e | goto label_180;
| }
0x00076d7e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00076d80 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00076d82 ldr.w r1, [r8, 0x6c] | r1 = *((r8 + 0x6c));
0x00076d86 lsls r3, r3, 2 | r3 <<= 2;
0x00076d88 rsbs r3, r3, 0 | r3 -= ;
0x00076d8a str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_73:
0x00076d8c ldr r2, [pc, 0x3c4] |
0x00076d8e movs r3, 0 | r3 = 0;
0x00076d90 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x00076d92 movs r1, 1 | r1 = 1;
0x00076d94 mov r0, fp | r0 = fp;
0x00076d96 add r2, pc | r2 = 0xedeee;
0x00076d98 bl 0x2f920 | fcn_0002f920 (r0, r1, r2, r3);
0x00076d9c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00076d9e mov r1, r4 | r1 = r4;
0x00076da0 mov r0, fp | r0 = fp;
0x00076da2 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00076da6 mov r0, r8 | r0 = r8;
0x00076da8 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x00076daa str r7, [r6, 0x34] | *((r6 + 0x34)) = r7;
0x00076dac bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x00076db0 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00076db4 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x00076db8 cmn r2, r3 |
| if (r2 < r3) {
0x00076dba bmi.w 0x7707c | goto label_181;
| }
0x00076dbe ldr r3, [sp, 0x30] | r3 = var_30h;
0x00076dc0 ldr.w r1, [r8, 0x6c] | r1 = *((r8 + 0x6c));
0x00076dc4 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x00076dc6 lsls r3, r3, 2 | r3 <<= 2;
0x00076dc8 rsbs r3, r3, 0 | r3 -= ;
0x00076dca str r1, [r2, r3] | *((r2 + r3)) = r1;
0x00076dcc b.w 0x76394 | goto label_49;
| label_171:
0x00076dd0 ldr r3, [pc, 0x384] |
0x00076dd2 add r3, pc | r3 = 0xedf2e;
0x00076dd4 adds r3, 4 | r3 += 4;
0x00076dd6 b 0x769d4 | goto label_50;
| label_142:
0x00076dd8 str r2, [sp, 0x24] | var_24h = r2;
0x00076dda b.w 0x762ee | goto label_51;
| label_156:
0x00076dde movs r3, 0 | r3 = 0;
0x00076de0 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00076de2 str r3, [sp] | *(sp) = r3;
0x00076de4 movs r1, 9 | r1 = 9;
0x00076de6 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00076de8 mov r0, r6 | r0 = r6;
0x00076dea bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00076dee str r0, [sp, 0x14] | var_14h = r0;
0x00076df0 b 0x766ba | goto label_52;
| label_168:
0x00076df2 movs r3, 0 | r3 = 0;
0x00076df4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00076df6 str r3, [sp] | *(sp) = r3;
0x00076df8 movs r1, 0xb | r1 = 0xb;
0x00076dfa ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00076dfc mov r0, r6 | r0 = r6;
0x00076dfe bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00076e02 str r0, [sp, 0x44] | var_44h = r0;
0x00076e04 b 0x768da | goto label_53;
| label_167:
0x00076e06 movs r3, 0 | r3 = 0;
0x00076e08 movs r1, 9 | r1 = 9;
0x00076e0a str r3, [sp] | *(sp) = r3;
0x00076e0c mov r0, r6 | r0 = r6;
0x00076e0e ldr r3, [sp, 0x54] | r3 = var_54h;
0x00076e10 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00076e12 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00076e16 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x00076e18 ldr r1, [r6, 0x70] | r1 = *((r6 + 0x70));
0x00076e1a str r0, [sp, 0x1c] | var_1ch = r0;
0x00076e1c str r3, [sp, 0x44] | var_44h = r3;
0x00076e1e b 0x768ac | goto label_54;
| label_162:
0x00076e20 movs r7, 7 | r7 = 7;
0x00076e22 b.w 0x75994 | goto label_0;
| label_145:
0x00076e26 ldrd r3, r2, [r8, 0x6c] | __asm ("ldrd r3, r2, [r8, 0x6c]");
0x00076e2a cmp r3, r2 |
| if (r3 >= r2) {
0x00076e2c bge.w 0x770d0 | goto label_182;
| }
0x00076e30 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x00076e34 ldr.w r6, [r8, 0x68] | r6 = *((r8 + 0x68));
0x00076e38 ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x00076e3a adds r1, r3, 1 | r1 = r3 + 1;
0x00076e3c lsls r2, r2, 2 | r2 <<= 2;
0x00076e3e str.w r1, [r8, 0x6c] | __asm ("str.w r1, [r8, 0x6c]");
0x00076e42 movs r0, 0 | r0 = 0;
0x00076e44 adds r1, r6, r2 | r1 = r6 + r2;
0x00076e46 mov.w ip, 0x76 |
0x00076e4a strd r7, r0, [r1, 4] | __asm ("strd r7, r0, [r1, 4]");
0x00076e4e strd r0, r0, [r1, 0xc] | __asm ("strd r0, r0, [r1, 0xc]");
0x00076e52 str.w ip, [r6, r2] | __asm ("str.w ip, [r6, r2]");
| label_76:
0x00076e56 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00076e58 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00076e5a orr r3, r3, 0x20 | r3 |= 0x20;
0x00076e5e str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00076e60 b.w 0x7636c | goto label_55;
| label_147:
0x00076e64 movs r7, 7 | r7 = 7;
0x00076e66 b.w 0x759d2 | goto label_3;
| label_143:
0x00076e6a cmp.w sb, 0 |
| if (sb != 0) {
0x00076e6e beq.w 0x76fb4 |
0x00076e72 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00076e74 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00076e76 str r3, [sp, 0x1c] | var_1ch = r3;
0x00076e78 adds r3, r1, 2 | r3 = r1 + 2;
0x00076e7a str r7, [sp] | *(sp) = r7;
0x00076e7c str.w r3, [fp, 0x28] | __asm ("str.w r3, [arg_28h]");
0x00076e80 movs r3, 0 | r3 = 0;
0x00076e82 str r3, [sp, 0xa0] | var_a0h = r3;
0x00076e84 str r3, [sp, 0xac] | var_ach = r3;
0x00076e86 strd r3, r3, [sp, 0xa4] | __asm ("strd r3, r3, [var_a4h]");
0x00076e8a movs r3, 6 | r3 = 6;
0x00076e8c str.w r2, [fp, 0x2c] | __asm ("str.w r2, [arg_2ch]");
0x00076e90 str r1, [sp, 0x9c] | var_9ch = r1;
0x00076e92 b.w 0x7632a | goto label_56;
| label_135:
0x00076e96 ldr.w r0, [fp] | r0 = *(fp);
0x00076e9a mov r1, r4 | r1 = r4;
0x00076e9c movs r2, 1 | r2 = 1;
0x00076e9e bl 0x1a4b8 | fcn_0001a4b8 (r0, r1, r2);
0x00076ea2 b.w 0x7615e | goto label_57;
| label_128:
0x00076eb0 movs r2, 0 | r2 = 0;
0x00076eb2 movs r1, 0xb | r1 = 0xb;
0x00076eb4 str r2, [sp] | *(sp) = r2;
0x00076eb6 mov r0, r6 | r0 = r6;
0x00076eb8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00076eba ldr r2, [sp, 0x20] | r2 = var_20h;
0x00076ebc bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00076ec0 mov r1, r0 | r1 = r0;
0x00076ec2 b.w 0x76008 | goto label_58;
| label_173:
0x00076ec6 ldr r2, [sp, 0x38] | r2 = var_38h;
0x00076ec8 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00076eca mov sb, r2 | sb = r2;
0x00076ecc str r2, [sp, 0x4c] | var_4ch = r2;
0x00076ece str r2, [sp, 0x44] | var_44h = r2;
0x00076ed0 movs r2, 1 | r2 = 1;
0x00076ed2 str r2, [sp, 0x40] | var_40h = r2;
0x00076ed4 add r2, sp, 0x98 | r2 += var_98h;
0x00076ed6 str r2, [sp, 0x1c] | var_1ch = r2;
0x00076ed8 b.w 0x75d0a | goto label_19;
| label_94:
0x00076edc mov r3, r6 | r3 = r6;
0x00076ede mov r2, r1 | r2 = r1;
0x00076ee0 mov r0, r5 | r0 = r5;
0x00076ee2 movs r1, 0x76 | r1 = 0x76;
0x00076ee4 str r6, [sp] | *(sp) = r6;
0x00076ee6 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00076eea mov r3, r0 | r3 = r0;
0x00076eec b.w 0x75ab8 | goto label_59;
| label_172:
0x00076ef0 mov r2, r6 | r2 = r6;
0x00076ef2 movs r1, 0x76 | r1 = 0x76;
0x00076ef4 mov r0, r5 | r0 = r5;
0x00076ef6 str r3, [sp] | *(sp) = r3;
0x00076ef8 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00076efc mov r2, r0 | r2 = r0;
0x00076efe b 0x76a32 | goto label_60;
| label_155:
0x00076f00 cmp r2, 7 |
0x00076f02 asr.w r0, r2, 0x1f | r0 = r2 >> 0x1f;
| if (r2 > 7) {
0x00076f06 bgt.w 0x7709c | goto label_183;
| }
0x00076f0a subs r3, r2, 1 | r3 = r2 - 1;
0x00076f0c orrs r3, r0 | r3 |= r0;
0x00076f0e it eq |
| if (r3 != r0) {
0x00076f10 moveq r3, 0 | r3 = 0;
| }
| if (r3 != r0) {
0x00076f12 beq 0x76f3e |
0x00076f14 adds r1, r2, r2 | r1 = r2 + r2;
0x00076f16 adcs r0, r0 | __asm ("adcs r0, r0");
0x00076f18 cmp r1, 8 |
0x00076f1a sbcs r0, r0, 0 | __asm ("sbcs r0, r0, 0");
| if (r1 >= 8) {
0x00076f1e bhs.w 0x770f8 | goto label_184;
| }
0x00076f22 lsls r1, r2, 2 | r1 = r2 << 2;
0x00076f24 movs r2, 0x14 | r2 = 0x14;
| label_75:
0x00076f26 sub.w r3, r2, 0xa | r3 = r2 - 0xa;
0x00076f2a ldr r2, [pc, 0x234] |
0x00076f2c and r1, r1, 7 | r1 &= 7;
0x00076f30 add r2, pc | r2 = 0xee096;
0x00076f32 add.w r2, r2, r1, lsl 1 | r2 += (r1 << 1);
0x00076f36 ldrh.w r2, [r2, 0x128] | r2 = *((r2 + 0x128));
0x00076f3a add r3, r2 | r3 += r2;
0x00076f3c sxth r3, r3 | __asm ("sxth r3, r3");
| }
0x00076f3e cmp r8, r3 |
0x00076f40 it gt |
| if (r8 > r3) {
0x00076f42 strhgt r3, [r4, 2] | __asm ("strhgt r3, [r4, 2]");
| }
0x00076f44 b.w 0x76650 | goto label_48;
| label_144:
0x00076f48 ldr r3, [sp, 0x28] | r3 = var_28h;
0x00076f4a movs r1, 8 | r1 = 8;
0x00076f4c ldr r6, [sp, 0x20] | r6 = var_20h;
0x00076f4e mov r0, r8 | r0 = r8;
0x00076f50 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00076f52 str.w r3, [fp, 0x2c] | __asm ("str.w r3, [arg_2ch]");
0x00076f56 strb.w r1, [sp, 0x98] | var_98h = r1;
0x00076f5a movs r1, 0x79 | r1 = 0x79;
0x00076f5c str r7, [sp] | *(sp) = r7;
0x00076f5e strd r6, sb, [sp, 0x9c] | __asm ("strd r6, sb, [var_a0h]");
0x00076f62 str.w sb, [sp, 0xac] | __asm ("str.w sb, [var_ach]");
0x00076f66 strd sb, sb, [sp, 0xa4] | __asm ("strd sb, sb, [var_a4h]");
0x00076f6a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076f6e mov r3, r7 | r3 = r7;
0x00076f70 mov r2, r6 | r2 = r6;
0x00076f72 movs r1, 0x76 | r1 = 0x76;
0x00076f74 mov r0, r8 | r0 = r8;
0x00076f76 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00076f7a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076f7e b.w 0x7636a | goto label_61;
| label_176:
0x00076f82 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00076f84 movs r1, 0xa0 | r1 = 0xa0;
0x00076f86 str r3, [sp] | *(sp) = r3;
0x00076f88 mov r0, r5 | r0 = r5;
0x00076f8a adds r3, 1 | r3++;
0x00076f8c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076f90 b 0x76c4e | goto label_62;
| label_98:
0x00076f92 ldr.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x00076f96 adds r6, r3, 1 | r6 = r3 + 1;
0x00076f98 str.w r6, [fp, 0x2c] | __asm ("str.w r6, [arg_2ch]");
0x00076f9c b.w 0x75b64 | goto label_63;
| label_175:
0x00076fa0 mov r3, r0 | r3 = r0;
0x00076fa2 mov r2, r6 | r2 = r6;
0x00076fa4 str r0, [sp] | *(sp) = r0;
0x00076fa6 movs r1, 0x10 | r1 = 0x10;
0x00076fa8 mov r0, r5 | r0 = r5;
0x00076faa bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00076fae ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00076fb0 mov r6, r0 | r6 = r0;
0x00076fb2 b 0x76c48 | goto label_64;
| }
0x00076fb4 ldr r6, [sp, 0x20] | r6 = var_20h;
0x00076fb6 movs r0, 5 | r0 = 5;
0x00076fb8 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00076fba movs r1, 0x79 | r1 = 0x79;
0x00076fbc str r3, [sp, 0x1c] | var_1ch = r3;
0x00076fbe adds r3, r6, 2 | r3 = r6 + 2;
0x00076fc0 strb.w r0, [sp, 0x98] | var_98h = r0;
0x00076fc4 str.w r2, [fp, 0x2c] | __asm ("str.w r2, [arg_2ch]");
0x00076fc8 mov r0, r8 | r0 = r8;
0x00076fca str r7, [sp] | *(sp) = r7;
0x00076fcc str.w r3, [fp, 0x28] | __asm ("str.w r3, [arg_28h]");
0x00076fd0 mov r3, r2 | r3 = r2;
0x00076fd2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00076fd4 strd r6, sb, [sp, 0x9c] | __asm ("strd r6, sb, [var_a0h]");
0x00076fd8 str.w sb, [sp, 0xac] | __asm ("str.w sb, [var_ach]");
0x00076fdc strd sb, sb, [sp, 0xa4] | __asm ("strd sb, sb, [var_a4h]");
0x00076fe0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076fe4 mov r3, r7 | r3 = r7;
0x00076fe6 mov r2, r6 | r2 = r6;
0x00076fe8 movs r1, 0x76 | r1 = 0x76;
0x00076fea mov r0, r8 | r0 = r8;
0x00076fec str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00076ff0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00076ff4 b.w 0x76362 | goto label_65;
| label_105:
0x00076ff8 adds r2, r5, 1 | r2 = r5 + 1;
0x00076ffa ldr r0, [sp, 0x28] | r0 = var_28h;
0x00076ffc lsls r2, r2, 2 | r2 <<= 2;
0x00076ffe movs r3, 0 | r3 = 0;
0x00077000 bl 0x21784 | fcn_00021784 (r0, r1);
0x00077004 str r0, [sp, 0x38] | var_38h = r0;
0x00077006 cmp r0, 0 |
| if (r0 != 0) {
0x00077008 bne.w 0x76ad6 | goto label_66;
| }
0x0007700c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0007700e str r3, [sp, 0x4c] | var_4ch = r3;
0x00077010 add r3, sp, 0x98 | r3 += var_98h;
0x00077012 str r3, [sp, 0x1c] | var_1ch = r3;
0x00077014 b.w 0x766dc | goto label_67;
| label_102:
0x00077018 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007701a mov r1, r5 | r1 = r5;
0x0007701c rsbs r2, r3, 0 | r2 = r3 - ;
0x0007701e bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00077022 b.w 0x75c10 | goto label_68;
| label_101:
0x00077026 mov r1, r5 | r1 = r5;
0x00077028 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0007702c b.w 0x75be8 | goto label_69;
| label_99:
0x00077030 movs r3, 0 | r3 = 0;
0x00077032 mov r2, sb | r2 = sb;
0x00077034 str r3, [sp] | *(sp) = r3;
0x00077036 movs r1, 0x86 | r1 = 0x86;
0x00077038 mov r3, r6 | r3 = r6;
0x0007703a mov r0, r5 | r0 = r5;
0x0007703c bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00077040 mov r8, r0 | r8 = r0;
0x00077042 b.w 0x75b90 | goto label_70;
| label_153:
0x00077046 rsb.w r2, r8, 0 | r2 = r8 - ;
0x0007704a mov r1, r5 | r1 = r5;
0x0007704c bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00077050 b.w 0x765ae | goto label_71;
| label_152:
0x00077054 mov r1, r5 | r1 = r5;
0x00077056 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0007705a b.w 0x76586 | goto label_72;
| label_180:
0x0007705e ldr r3, [sp, 0x20] | r3 = var_20h;
0x00077060 mov r1, r8 | r1 = r8;
0x00077062 rsbs r2, r3, 0 | r2 = r3 - ;
0x00077064 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00077068 b 0x76d8c | goto label_73;
| label_179:
0x0007706a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007706c movs r1, 0x3c | r1 = 0x3c;
0x0007706e ldr r2, [sp, 0x38] | r2 = var_38h;
0x00077070 mov r0, r8 | r0 = r8;
0x00077072 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00077076 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00077078 ldc2l p6, c14, [fp, 0x1e4]! | __asm ("ldc2l p6, c14, aav.0x000000ff!");
| label_181:
0x0007707c ldr r3, [sp, 0x30] | r3 = var_30h;
0x0007707e mov r1, r8 | r1 = r8;
0x00077080 rsbs r2, r3, 0 | r2 = r3 - ;
0x00077082 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00077086 b.w 0x76394 | goto label_49;
| label_178:
0x0007708a ldr r3, [sp, 0x28] | r3 = var_28h;
0x0007708c movs r1, 0x86 | r1 = 0x86;
0x0007708e ldr r2, [sp, 0x20] | r2 = var_20h;
0x00077090 mov r0, r8 | r0 = r8;
0x00077092 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00077096 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007709a b 0x76d1a | goto label_74;
| label_183:
0x0007709c clz r3, r0 | r3 &= r0;
| if (r0 == 0) {
0x000770a0 cbnz r0, 0x770a8 |
0x000770a2 clz r3, r2 | r3 &= r2;
0x000770a6 adds r3, 0x20 | r3 += 0x20;
| }
0x000770a8 rsb.w r3, r3, 0x3c | r3 = 0x3c - r3;
0x000770ac lsr.w r1, r2, r3 | r1 = r2 >> r3;
0x000770b0 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x000770b4 rsb.w ip, r3, 0x20 |
0x000770b8 lsls r2, r2, 1 | r2 <<= 1;
0x000770ba lsl.w ip, r0, ip |
0x000770be subs r3, 0x20 | r3 -= 0x20;
0x000770c0 lsr.w r3, r0, r3 | r3 = r0 >> r3;
0x000770c4 adds r2, 0x28 | r2 += 0x28;
0x000770c6 orr.w r1, r1, ip | r1 |= ip;
0x000770ca uxth r2, r2 | r2 = (int16_t) r2;
0x000770cc orrs r1, r3 | r1 |= r3;
0x000770ce b 0x76f26 | goto label_75;
| label_182:
0x000770d0 movs r3, 0 | r3 = 0;
0x000770d2 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000770d4 str r3, [sp] | *(sp) = r3;
0x000770d6 movs r1, 0x76 | r1 = 0x76;
0x000770d8 mov r0, r8 | r0 = r8;
0x000770da bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000770de mov r3, r0 | r3 = r0;
0x000770e0 b 0x76e56 | goto label_76;
| label_177:
0x000770e2 str r0, [sp] | *(sp) = r0;
0x000770e4 movs r1, 0x23 | r1 = 0x23;
0x000770e6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000770e8 mov r0, r8 | r0 = r8;
0x000770ea ldr r2, [sp, 0x20] | r2 = var_20h;
0x000770ec bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000770f0 str r0, [sp, 0x3c] | var_3ch = r0;
0x000770f2 b 0x76cf0 | goto label_77;
| label_88:
0x000770f4 blx 0x883c | fcn_0000883c ();
| label_184:
0x000770f8 movs r2, 0x1e | r2 = 0x1e;
0x000770fa b 0x76f26 | goto label_75;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x77164 */
| #include <stdint.h>
|
; (fcn) fcn.00077164 () | void fcn_00077164 (int16_t arg_70h, int16_t arg_74h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_34h_2;
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_3ch;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00077164 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00077168 mov r7, r2 | r7 = r2;
0x0007716a ldr r2, [pc, 0x22c] |
0x0007716c mov sb, r3 | sb = r3;
0x0007716e sub sp, 0x4c |
0x00077170 mov r5, r0 | r5 = r0;
0x00077172 ldr r3, [pc, 0x228] | r3 = *(0x7739e);
0x00077174 ldr r4, [sp, 0x70] | r4 = *(arg_70h);
0x00077176 add r2, pc | r2 = 0xee514;
0x00077178 ldr.w fp, [r0] | fp = *(r0);
0x0007717c ldr r6, [sp, 0x74] | r6 = *(arg_74h);
0x0007717e str r1, [sp, 0x20] | var_20h = r1;
0x00077180 mov r1, r4 | r1 = r4;
0x00077182 ldr r3, [r2, r3] |
0x00077184 mov r0, fp | r0 = fp;
0x00077186 movs r2, 0 | r2 = 0;
0x00077188 ldr.w r8, [r4, 0x18] | r8 = *((r4 + 0x18));
0x0007718c ldr r3, [r3] | r3 = *(0xee514);
0x0007718e str r3, [sp, 0x44] | var_44h = r3;
0x00077190 mov.w r3, 0 | r3 = 0;
0x00077194 str r6, [sp, 0x1c] | var_1ch = r6;
0x00077196 bl 0x32c4c | r0 = fcn_00032c4c (r0, r1, r2);
0x0007719a mov sl, r0 | sl = r0;
| if (r6 != 0) {
0x0007719c cbz r6, 0x771ac |
0x0007719e movs r3, 0 | r3 = 0;
0x000771a0 mov r1, r6 | r1 = r6;
0x000771a2 mov r2, r3 | r2 = r3;
0x000771a4 mov r0, fp | r0 = fp;
0x000771a6 bl 0x31eb4 | fcn_00031eb4 (r0, r1, r2, r3);
0x000771aa str r0, [sp, 0x1c] | var_1ch = r0;
| }
0x000771ac cmp.w sl, 0 |
| if (sl != 0) {
0x000771b0 beq 0x771d6 |
0x000771b2 ldrb.w r3, [sl, 0x2e] | r3 = *((sl + 0x2e));
0x000771b6 movs r1, 0 | r1 = 0;
0x000771b8 ldr.w r2, [sl, 0x18] | r2 = *((sl + 0x18));
0x000771bc orr r3, r3, 2 | r3 |= 2;
0x000771c0 strb.w r3, [sl, 0x2e] | *((sl + 0x2e)) = r3;
0x000771c4 mov.w r3, -1 | r3 = -1;
0x000771c8 str.w r3, [sl, 0x30] | __asm ("str.w r3, [sl, 0x30]");
0x000771cc ldr r3, [r2, 0x18] | r3 = *((r2 + 0x18));
0x000771ce subs r3, 1 | r3--;
0x000771d0 str r3, [r2, 0x18] | *((r2 + 0x18)) = r3;
0x000771d2 str.w r1, [sl, 0x18] | __asm ("str.w r1, [sl, 0x18]");
| }
0x000771d6 cmp r7, 0 |
| if (r7 == 0) {
0x000771d8 beq.w 0x77320 | goto label_2;
| }
0x000771dc ldrh r4, [r7, 0x32] | r4 = *((r7 + 0x32));
| if (r4 == 0) {
0x000771de cbz r4, 0x7721c | goto label_3;
| }
0x000771e0 movs r4, 0 | r4 = 0;
0x000771e2 str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x000771e6 mov r6, r4 | r6 = r4;
| do {
0x000771e8 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x000771ea movs r3, 0 | r3 = 0;
0x000771ec movs r1, 0x4b | r1 = 0x4b;
0x000771ee mov r0, r5 | r0 = r5;
0x000771f0 ldrsh.w fp, [r2, r6, lsl 1] | offset_0 = r6 << 1;
| fp = *((r2 + offset_0));
0x000771f4 mov r2, r3 | r2 = r3;
0x000771f6 bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x000771fa mov r2, r0 | r2 = r0;
| if (r0 != 0) {
0x000771fc cbz r0, 0x77206 |
0x000771fe add.w fp, fp, 1 |
0x00077202 strh.w fp, [r0, 0x20] | *((r0 + 0x20)) = fp;
| }
0x00077206 mov r1, r4 | r1 = r4;
0x00077208 mov r0, r5 | r0 = r5;
0x0007720a bl 0x301b0 | fcn_000301b0 (r0, r1, r2);
0x0007720e ldrh r3, [r7, 0x32] | r3 = *((r7 + 0x32));
0x00077210 adds r6, 1 | r6++;
0x00077212 mov r4, r0 | r4 = r0;
0x00077214 cmp r6, r3 |
0x00077216 blt 0x771e8 |
| } while (r6 < r3);
0x00077218 ldr.w fp, [sp, 0x24] | fp = var_24h;
| label_3:
0x0007721c ldrb.w r3, [r8, 0x2b] | r3 = *((r8 + 0x2b));
0x00077220 cmp r3, 1 |
0x00077222 ite ne |
| if (r3 == 1) {
0x00077224 movne r3, 0xf | r3 = 0xf;
| }
| if (r3 != 1) {
0x00077226 moveq r3, 0xe | r3 = 0xe;
| }
0x00077228 str r3, [sp, 0x24] | var_24h = r3;
| label_0:
0x0007722a cmp.w sb, 0 |
| if (sb == 0) {
0x0007722e beq 0x77268 | goto label_4;
| }
0x00077230 ldr.w r3, [sb] | r3 = *(sb);
0x00077234 cmp r3, 0 |
| if (r3 <= 0) {
0x00077236 ble 0x77268 | goto label_4;
| }
0x00077238 mov r8, sb | r8 = sb;
0x0007723a movs r6, 0 | r6 = 0;
| do {
0x0007723c ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
| if (r2 != 0) {
0x00077240 cbz r2, 0x77250 |
0x00077242 movs r3, 0 | r3 = 0;
0x00077244 mov r1, r2 | r1 = r2;
0x00077246 mov r0, fp | r0 = fp;
0x00077248 mov r2, r3 | r2 = r3;
0x0007724a bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0007724e mov r2, r0 | r2 = r0;
| }
0x00077250 mov r1, r4 | r1 = r4;
0x00077252 mov r0, r5 | r0 = r5;
0x00077254 bl 0x301b0 | fcn_000301b0 (r0, r1, r2);
0x00077258 ldr.w r3, [sb] | r3 = *(sb);
0x0007725c adds r6, 1 | r6++;
0x0007725e add.w r8, r8, 0x10 | r8 += 0x10;
0x00077262 mov r4, r0 | r4 = r0;
0x00077264 cmp r6, r3 |
0x00077266 blt 0x7723c |
| } while (r6 < r3);
| label_4:
0x00077268 movs r6, 0 | r6 = 0;
0x0007726a mov.w r0, 0x820000 | r0 = 0x820000;
0x0007726e mov r1, r4 | r1 = r4;
0x00077270 str r0, [sp, 0xc] | var_ch = r0;
0x00077272 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00077274 mov r2, sl | r2 = sl;
0x00077276 mov r0, r5 | r0 = r5;
0x00077278 str r6, [sp, 0x10] | var_10h = r6;
0x0007727a strd r6, r6, [sp, 4] | __asm ("strd r6, r6, [var_4h]");
0x0007727e str r6, [sp] | *(sp) = r6;
0x00077280 bl 0x23b94 | r0 = fcn_00023b94 (r0, r1, r2, r3, r4, r5, r6);
0x00077284 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00077286 cbz r0, 0x772de |
0x00077288 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007728a vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0007728e str r6, [sp, 0x3c] | var_3ch = r6;
0x00077290 strb.w r3, [sp, 0x28] | var_28h = r3;
0x00077294 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00077296 str r3, [sp, 0x2c] | var_2ch = r3;
0x00077298 add r3, sp, 0x34 | r3 += var_34h;
0x0007729a vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0007729e ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000772a0 orr r3, r3, 0x8000000 | r3 |= 0x8000000;
0x000772a4 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x000772a6 mov.w r3, -1 | r3 = -1;
| if (r7 != 0) {
0x000772aa cbz r7, 0x772ae |
0x000772ac ldrh r3, [r7, 0x32] | r3 = *((r7 + 0x32));
| }
0x000772ae add r2, sp, 0x28 | r2 += var_28h;
0x000772b0 mov r0, r5 | r0 = r5;
0x000772b2 mov r1, r4 | r1 = r4;
0x000772b4 str r3, [sp, 0x30] | var_30h = r3;
0x000772b6 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x000772ba ldr r2, [pc, 0xe4] |
0x000772bc ldr r3, [pc, 0xdc] | r3 = *(0x7739c);
0x000772be add r2, pc | r2 = 0xee664;
0x000772c0 ldr r3, [r2, r3] | r3 = *(0xee664);
0x000772c2 ldr r2, [r3] | r2 = *(0xee664);
0x000772c4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000772c6 eors r2, r3 | r2 ^= r3;
0x000772c8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000772cc bne 0x77394 | goto label_5;
| }
0x000772ce movs r2, 1 | r2 = 1;
0x000772d0 mov r1, r4 | r1 = r4;
0x000772d2 mov r0, fp | r0 = fp;
0x000772d4 add sp, 0x4c |
0x000772d6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000772da b.w 0x1a4b8 | void (*0x1a4b8)() ();
| }
0x000772de ldr r3, [sp, 0x24] | r3 = var_24h;
0x000772e0 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000772e4 str r0, [sp, 0x3c] | var_3ch = r0;
0x000772e6 strb.w r3, [sp, 0x28] | var_28h = r3;
0x000772ea ldr r3, [sp, 0x20] | r3 = var_20h;
0x000772ec str r3, [sp, 0x2c] | var_2ch = r3;
0x000772ee add r3, sp, 0x34 | r3 += var_34h;
0x000772f0 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000772f4 cmp r7, 0 |
| if (r7 == 0) {
0x000772f6 beq 0x77382 | goto label_6;
| }
0x000772f8 ldrh r3, [r7, 0x32] | r3 = *((r7 + 0x32));
0x000772fa add r2, sp, 0x28 | r2 += var_28h;
0x000772fc mov r1, r4 | r1 = r4;
0x000772fe mov r0, r5 | r0 = r5;
0x00077300 str r3, [sp, 0x30] | var_30h = r3;
0x00077302 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
| label_1:
0x00077306 ldr r2, [pc, 0x9c] |
0x00077308 ldr r3, [pc, 0x90] | r3 = *(0x7739c);
0x0007730a add r2, pc | r2 = 0xee6b4;
0x0007730c ldr r3, [r2, r3] | r3 = *(0xee6b4);
0x0007730e ldr r2, [r3] | r2 = *(0xee6b4);
0x00077310 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00077312 eors r2, r3 | r2 ^= r3;
0x00077314 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00077318 bne 0x77394 | goto label_5;
| }
0x0007731a add sp, 0x4c |
0x0007731c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x00077320 ldrb.w r3, [r8, 0x2b] | r3 = *((r8 + 0x2b));
0x00077324 cmp r3, 2 |
| if (r3 != 2) {
0x00077326 beq 0x7734a |
0x00077328 cmp r3, 1 |
0x0007732a mov r2, r7 | r2 = r7;
0x0007732c ite ne |
| if (r3 == 1) {
0x0007732e movne r4, 0xf | r4 = 0xf;
| }
| if (r3 != 1) {
0x00077330 moveq r4, 0xe | r4 = 0xe;
| }
0x00077332 mov r3, r7 | r3 = r7;
0x00077334 movs r1, 0x4b | r1 = 0x4b;
0x00077336 mov r0, r5 | r0 = r5;
0x00077338 str r4, [sp, 0x24] | var_24h = r4;
0x0007733a bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0007733e mov r1, r0 | r1 = r0;
0x00077340 ldr r0, [r5] | r0 = *(r5);
0x00077342 bl 0x21b94 | r0 = fcn_00021b94 (r0, r1);
0x00077346 mov r4, r0 | r4 = r0;
0x00077348 b 0x7722a | goto label_0;
| }
0x0007734a ldrsh.w r3, [r8, 0x22] | r3 = *((r8 + 0x22));
0x0007734e mov r4, r7 | r4 = r7;
0x00077350 cmp r3, 0 |
| if (r3 <= 0) {
0x00077352 ble 0x7737c | goto label_7;
| }
0x00077354 mov r6, r7 | r6 = r7;
| do {
0x00077356 movs r3, 0 | r3 = 0;
0x00077358 movs r1, 0x4b | r1 = 0x4b;
0x0007735a mov r2, r3 | r2 = r3;
0x0007735c mov r0, r5 | r0 = r5;
0x0007735e bl 0x24c54 | fcn_00024c54 (r0, r1, r2, r3);
0x00077362 adds r6, 1 | r6++;
0x00077364 mov r2, r0 | r2 = r0;
| if (r0 != 0) {
0x00077366 cbz r0, 0x7736a |
0x00077368 strh r6, [r0, 0x20] | *((r0 + 0x20)) = r6;
| }
0x0007736a mov r1, r4 | r1 = r4;
0x0007736c mov r0, r5 | r0 = r5;
0x0007736e bl 0x301b0 | fcn_000301b0 (r0, r1, r2);
0x00077372 ldrsh.w r3, [r8, 0x22] | r3 = *((r8 + 0x22));
0x00077376 mov r4, r0 | r4 = r0;
0x00077378 cmp r6, r3 |
0x0007737a blt 0x77356 |
| } while (r6 < r3);
| label_7:
0x0007737c movs r3, 0xe | r3 = 0xe;
0x0007737e str r3, [sp, 0x24] | var_24h = r3;
0x00077380 b 0x7722a | goto label_0;
| label_6:
0x00077382 mov.w r3, -1 | r3 = -1;
0x00077386 add r2, sp, 0x28 | r2 += var_28h;
0x00077388 mov r1, r7 | r1 = r7;
0x0007738a mov r0, r5 | r0 = r5;
0x0007738c str r3, [sp, 0x30] | var_30h = r3;
0x0007738e bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x00077392 b 0x77306 | goto label_1;
| label_5:
0x00077394 blx 0x883c | fcn_0000883c ();
0x00077398 subs r2, r4, r4 | r2 = r4 - r4;
0x0007739a movs r5, r0 | r5 = r0;
0x0007739c lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0007739e movs r0, r0 |
0x000773a0 adds r2, r3, r7 | r2 = r3 + r7;
0x000773a2 movs r5, r0 | r5 = r0;
0x000773a4 adds r6, r1, r6 | r6 = r1 + r6;
0x000773a6 movs r5, r0 | r5 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x773a8 */
| #include <stdint.h>
|
; (fcn) fcn.000773a8 () | void fcn_000773a8 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_14h;
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int32_t var_24h;
| int32_t var_24h_2;
| int16_t var_2ch;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| if (? >= ?) {
0x000773a8 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x000773ac mov r5, r2 | r5 = r2;
0x000773ae ldr r2, [pc, 0x104] |
0x000773b0 mov r8, r3 | r8 = r3;
0x000773b2 sub sp, 0x38 |
0x000773b4 mov sb, r1 | sb = r1;
0x000773b6 ldr r3, [pc, 0x100] | r3 = *(0x774ba);
0x000773b8 mov r6, r0 | r6 = r0;
0x000773ba add r2, pc | r2 = 0xee874;
0x000773bc ldr r7, [r0] | r7 = *(r0);
0x000773be ldr r3, [r2, r3] |
0x000773c0 ldr r2, [r1, 0x3c] | r2 = *((r1 + 0x3c));
0x000773c2 ldr r3, [r3] | r3 = *(0xee874);
0x000773c4 str r3, [sp, 0x34] | var_34h = r3;
0x000773c6 mov.w r3, 0 | r3 = 0;
0x000773ca cmp r2, 0 |
| if (r2 == 0) {
0x000773cc beq 0x774a4 | goto label_1;
| }
0x000773ce ldr r4, [r7, 0x10] | r4 = *((r7 + 0x10));
0x000773d0 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x000773d2 cmp r2, r3 |
| if (r2 == r3) {
0x000773d4 beq 0x774a0 | goto label_2;
| }
0x000773d6 mov ip, r4 |
0x000773d8 movs r4, 0 | r4 = 0;
| do {
0x000773da ldr.w r3, [ip, 0x1c] | r3 = *((ip + 0x1c));
0x000773de adds r4, 1 | r4++;
0x000773e0 add.w ip, ip, 0x10 |
0x000773e4 cmp r2, r3 |
0x000773e6 bne 0x773da |
| } while (r2 != r3);
| if (r5 != 0) {
| do {
| label_0:
0x000773e8 cbz r5, 0x773f8 |
0x000773ea movs r3, 0 | r3 = 0;
0x000773ec mov r1, r5 | r1 = r5;
0x000773ee mov r2, r3 | r2 = r3;
0x000773f0 mov r0, r7 | r0 = r7;
0x000773f2 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x000773f6 mov r5, r0 | r5 = r0;
| }
0x000773f8 movs r3, 0 | r3 = 0;
0x000773fa mov r0, r6 | r0 = r6;
0x000773fc mov r2, r3 | r2 = r3;
0x000773fe mov r1, r3 | r1 = r3;
0x00077400 bl 0x2d5f4 | r0 = fcn_0002d5f4 (r0, r1, r2, r3);
0x00077404 mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x00077406 cbz r0, 0x77426 |
0x00077408 ldr.w r1, [sb] | r1 = *(sb);
0x0007740c mov r0, r7 | r0 = r7;
0x0007740e bl 0x22990 | fcn_00022990 (r0, r1);
0x00077412 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x00077414 lsls r4, r4, 4 | r4 <<= 4;
0x00077416 str.w r0, [sl, 0x10] | __asm ("str.w r0, [sl, 0x10]");
0x0007741a mov r0, r7 | r0 = r7;
0x0007741c ldr r1, [r3, r4] | r1 = *((r3 + r4));
0x0007741e bl 0x22990 | fcn_00022990 (r0, r1);
0x00077422 str.w r0, [sl, 0xc] | __asm ("str.w r0, [sl, 0xc]");
| }
0x00077426 movs r4, 0 | r4 = 0;
0x00077428 mov.w r1, 0x20000 | r1 = 0x20000;
0x0007742c mov r3, r5 | r3 = r5;
0x0007742e mov r2, sl | r2 = sl;
0x00077430 str r1, [sp, 0xc] | var_ch = r1;
0x00077432 mov r0, r6 | r0 = r6;
0x00077434 mov r1, r4 | r1 = r4;
0x00077436 str r4, [sp, 0x10] | var_10h = r4;
0x00077438 strd r4, r4, [sp, 4] | __asm ("strd r4, r4, [var_4h]");
0x0007743c str r4, [sp] | *(sp) = r4;
0x0007743e bl 0x23b94 | r0 = fcn_00023b94 (r0, r1, r2, r3, r4, r5, r6);
0x00077442 mov r5, r0 | r5 = r0;
0x00077444 movs r3, 0xc | r3 = 0xc;
0x00077446 add r2, sp, 0x18 | r2 += var_18h;
0x00077448 mov r0, r6 | r0 = r6;
0x0007744a mov r1, r5 | r1 = r5;
0x0007744c str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x00077450 str r4, [sp, 0x20] | var_20h = r4;
0x00077452 str r4, [sp, 0x2c] | var_2ch = r4;
0x00077454 strd r4, r4, [sp, 0x24] | __asm ("strd r4, r4, [var_24h]");
0x00077458 strb.w r3, [sp, 0x18] | var_18h = r3;
0x0007745c bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
| if (r5 != 0) {
0x00077460 cbz r5, 0x77486 |
0x00077462 ldr r2, [pc, 0x58] |
0x00077464 ldr r3, [pc, 0x50] | r3 = *(0x774b8);
0x00077466 add r2, pc | r2 = 0xee928;
0x00077468 ldr r3, [r2, r3] | r3 = *(0xee928);
0x0007746a ldr r2, [r3] | r2 = *(0xee928);
0x0007746c ldr r3, [sp, 0x34] | r3 = var_34h;
0x0007746e eors r2, r3 | r2 ^= r3;
0x00077470 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00077474 bne 0x774ae | goto label_3;
| }
0x00077476 movs r2, 1 | r2 = 1;
0x00077478 mov r1, r5 | r1 = r5;
0x0007747a mov r0, r7 | r0 = r7;
0x0007747c add sp, 0x38 |
0x0007747e pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00077482 b.w 0x1a4b8 | void (*0x1a4b8)() ();
| }
0x00077486 ldr r2, [pc, 0x38] |
0x00077488 ldr r3, [pc, 0x2c] | r3 = *(0x774b8);
0x0007748a add r2, pc | r2 = 0xee950;
0x0007748c ldr r3, [r2, r3] | r3 = *(0xee950);
0x0007748e ldr r2, [r3] | r2 = *(0xee950);
0x00077490 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00077492 eors r2, r3 | r2 ^= r3;
0x00077494 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00077498 bne 0x774ae | goto label_3;
| }
0x0007749a add sp, 0x38 |
0x0007749c pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_2:
0x000774a0 movs r4, 0 | r4 = 0;
0x000774a2 b 0x773e8 |
| } while (1);
| label_1:
0x000774a4 mov.w r4, 0x8000 |
0x000774a8 movt r4, 0xffff | r4 = 0x-8000;
0x000774ac b 0x773e8 | goto label_0;
| label_3:
0x000774ae blx 0x883c | fcn_0000883c ();
0x000774b2 nop |
0x000774b4 adds r6, r3, r3 | r6 = r3 + r3;
0x000774b6 movs r5, r0 | r5 = r0;
0x000774b8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000774ba movs r0, r0 |
0x000774bc adds r2, r6, r0 | r2 = r6 + r0;
0x000774be movs r5, r0 | r5 = r0;
0x000774c0 adds r6, r1, r0 | r6 = r1 + r0;
0x000774c2 movs r5, r0 | r5 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x77944 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00077944 () | void fcn_00077944 (int16_t arg_a0h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| arithmetic var_24h;
| arithmetic x;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int32_t var_48h_2;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int32_t var_64h_2;
| int16_t var_6ch;
| int16_t var_74h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00077944 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00077948 sub sp, 0x7c |
0x0007794a str r0, [sp, 0x28] | x = r0;
0x0007794c mov r5, r0 | r5 = r0;
0x0007794e mov r4, r2 | r4 = r2;
0x00077950 ldr.w r0, [pc, 0xba8] | r0 = *(0x000784fc);
0x00077954 str r2, [sp, 0x34] | var_34h = r2;
0x00077956 ldr.w r2, [pc, 0xba8] |
0x0007795a add r0, pc | r0 += pc;
0x0007795c ldr.w fp, [sp, 0xa0] | fp = *(arg_a0h);
0x00077960 ldr.w sl, [r5] | sl = *(r5);
0x00077964 ldr r2, [r0, r2] | r2 = *((r0 + r2));
0x00077966 ldr r2, [r2] | r2 = *(0x78502);
0x00077968 str r2, [sp, 0x74] | var_74h = r2;
0x0007796a mov.w r2, 0 | r2 = 0;
0x0007796e strd r3, r1, [sp, 0x2c] | __asm ("strd r3, r1, [var_30h]");
0x00077972 mov r3, r4 | r3 = r4;
0x00077974 orrs.w r3, r3, fp | r3 |= fp;
| if (r3 != r3) {
0x00077978 beq.w 0x77a94 |
0x0007797c ldr.w r3, [r5, 0xec] | r3 = *((r5 + 0xec));
0x00077980 str r3, [sp, 0x24] | var_24h = r3;
0x00077982 cmp r3, 0 |
| if (r3 == 0) {
0x00077984 beq.w 0x77a94 | goto label_6;
| }
0x00077988 cmp.w fp, 0 |
| if (fp == 0) {
0x0007798c beq.w 0x782fc | goto label_42;
| }
0x00077990 ldrb.w r3, [sl, 0xb1] | r3 = *((sl + 0xb1));
0x00077994 cmp r3, 0 |
| if (r3 == 0) {
0x00077996 beq.w 0x77ac4 | goto label_9;
| }
| label_11:
0x0007799a ldr.w r2, [pc, 0xb68] | r2 = *(0x00078504);
0x0007799e ldr.w r3, [pc, 0xb60] | r3 = *(0x78502);
0x000779a2 add r2, pc | r2 += pc;
0x000779a4 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000779a6 ldr r2, [r3] | r2 = *(0x78502);
0x000779a8 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000779aa eors r2, r3 | r2 ^= r3;
0x000779ac mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000779b0 bne.w 0x78724 | goto label_43;
| }
0x000779b4 ldr.w r1, [pc, 0xb50] |
0x000779b8 add r1, pc | r1 = 0xefec4;
| label_18:
0x000779ba ldr r0, [sp, 0x28] | r0 = x;
0x000779bc add sp, 0x7c |
0x000779be pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000779c2 b.w 0x21598 | void (*0x21598)() ();
| label_5:
0x000779c6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000779c8 cmp r3, 0 |
| if (r3 == 0) {
0x000779ca beq.w 0x78658 | goto label_44;
| }
0x000779ce ldr r3, [sp, 0x28] | r3 = x;
0x000779d0 add.w r1, r3, 0xc4 | r1 = r3 + 0xc4;
| label_26:
0x000779d4 ldr r3, [r1] | r3 = *(r1);
0x000779d6 ldr r0, [sp, 0x28] | r0 = x;
0x000779d8 ldr.w ip, [r0, 0xbc] | ip = *((r0 + 0xbc));
0x000779dc ldrb r0, [r3] | r0 = *(r3);
0x000779de sub.w r3, r3, ip | r3 -= ip;
0x000779e2 cmp r0, 0x3b |
0x000779e4 mov r0, sl | r0 = sl;
0x000779e6 it ne |
| if (r0 == 0x3b) {
0x000779e8 ldrne r1, [r1, 4] | r1 = *((r1 + 4));
| }
0x000779ea str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x000779ee it ne |
| if (r0 == 0x3b) {
0x000779f0 addne r3, r3, r1 | r3 += r1;
| }
0x000779f2 ldr.w r1, [pc, 0xb18] | r1 = *(0x0007850c);
0x000779f6 add r1, pc | r1 += pc;
0x000779f8 bl 0x24ec8 | r0 = fcn_00024ec8 (r0);
0x000779fc mov sb, r0 | sb = r0;
| label_29:
0x000779fe ldr r1, [sp, 0x24] | r1 = var_24h;
0x00077a00 lsl.w r8, r7, 4 | r8 = r7 << 4;
0x00077a04 ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x00077a08 ldr r0, [sp, 0x28] | r0 = x;
0x00077a0a ldr r1, [r1] | r1 = *(r1);
0x00077a0c ldr.w r2, [r2, r8] | r2 = *((r2 + r8));
0x00077a10 str.w sb, [sp, 0xc] | __asm ("str.w sb, [var_ch]");
0x00077a14 strd r1, r1, [sp] | __asm ("strd r1, r1, [sp]");
0x00077a18 ldr r1, [r0, 0x58] | r1 = *((r0 + 0x58));
0x00077a1a ldr r3, [sp, 0x38] | r3 = var_38h;
0x00077a1c str r1, [sp, 0x10] | var_10h = r1;
0x00077a1e ldr r1, [r0, 0x5c] | r1 = *((r0 + 0x5c));
0x00077a20 str r1, [sp, 8] | var_8h = r1;
0x00077a22 ldr.w r1, [pc, 0xaec] | r1 = *(0x00078510);
0x00077a26 add r1, pc | r1 += pc;
0x00077a28 bl 0xa89e4 | fcn_000a89e4 (r0);
0x00077a2c cmp.w sb, 0 |
| if (sb != 0) {
0x00077a30 beq 0x77a3a |
0x00077a32 mov r1, sb | r1 = sb;
0x00077a34 mov r0, sl | r0 = sl;
0x00077a36 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x00077a3a ldr r4, [sp, 0x28] | r4 = x;
0x00077a3c mov r2, r7 | r2 = r7;
0x00077a3e ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00077a40 ldr r0, [r4] | r0 = *(r4);
0x00077a42 bl 0x2ea94 | fcn_0002ea94 (r0, r1, r2);
0x00077a46 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077a48 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00077a4a lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
| if (r1 < r3) {
0x00077a4c bpl 0x77a66 |
0x00077a4e ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
| if (r3 != 0) {
0x00077a52 cbnz r3, 0x77a66 | goto label_39;
| }
0x00077a54 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x00077a58 add.w r2, r3, r8 | r2 = r3 + r8;
0x00077a5c ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00077a5e ldr r2, [r2, 0x48] | r2 = *((r2 + 0x48));
0x00077a60 cmp r2, 0 |
| if (r2 == 0) {
0x00077a62 beq.w 0x786f2 | goto label_45;
| }
| }
| label_39:
0x00077a66 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077a68 mov r0, sl | r0 = sl;
0x00077a6a ldr.w r1, [pc, 0xaa8] |
0x00077a6e ldr r2, [r3] | r2 = *(r3);
0x00077a70 add r1, pc | r1 = 0xeff8a;
0x00077a72 bl 0x24ec8 | fcn_00024ec8 (r0);
0x00077a76 movs r3, 0 | r3 = 0;
0x00077a78 mov r2, r0 | r2 = r0;
0x00077a7a mov r1, r7 | r1 = r7;
0x00077a7c mov r0, r6 | r0 = r6;
0x00077a7e bl 0x2f21c | fcn_0002f21c (r0, r1, r2, r3);
0x00077a82 ldrb.w r3, [sl, 0xb1] | r3 = *((sl + 0xb1));
0x00077a86 cmp r3, 0 |
| if (r3 != 0) {
0x00077a88 bne.w 0x78378 | goto label_46;
| }
| label_14:
0x00077a8c cmp.w fp, 0 |
| if (fp == 0) {
0x00077a90 beq.w 0x78414 | goto label_47;
| }
| }
| label_6:
0x00077a94 ldr.w r2, [pc, 0xa80] |
0x00077a98 ldr.w r3, [pc, 0xa64] | r3 = *(0x78500);
0x00077a9c add r2, pc | r2 = 0xeffb8;
0x00077a9e ldr r3, [r2, r3] | r3 = *(0xeffb8);
0x00077aa0 ldr r2, [r3] | r2 = *(0xeffb8);
0x00077aa2 ldr r3, [sp, 0x74] | r3 = var_74h;
0x00077aa4 eors r2, r3 | r2 ^= r3;
0x00077aa6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00077aaa bne.w 0x78724 | goto label_43;
| }
0x00077aae add sp, 0x7c |
0x00077ab0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x00077ab4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00077ab6 cmp r3, 1 |
0x00077ab8 str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x00077aba ittt eq |
| if (r3 != 1) {
0x00077abc ldreq r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
| }
| if (r3 != 1) {
0x00077abe orreq r3, r3, 1 | r3 |= 1;
| }
| if (r3 == 1) {
0x00077ac2 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
| }
| label_9:
0x00077ac4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00077ac6 lsls r7, r3, 0xf | r7 = r3 << 0xf;
| if (r7 >= r3) {
0x00077ac8 bpl 0x77b6a | goto label_48;
| }
0x00077aca ldr r5, [sp, 0x24] | r5 = var_24h;
0x00077acc ldrsh.w r0, [r5, 0x22] | r0 = *((r5 + 0x22));
0x00077ad0 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00077ad2 cmp r0, 0 |
0x00077ad4 orr r3, r3, 0x10000 | r3 |= 0x10000;
0x00077ad8 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
| if (r0 <= 0) {
0x00077ada ble 0x77b6a | goto label_48;
| }
0x00077adc ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00077ade movs r2, 0 | r2 = 0;
0x00077ae0 movs r6, 0x41 | r6 = 0x41;
0x00077ae2 movs r7, 2 | r7 = 2;
0x00077ae4 b 0x77b16 |
| while (r1 > 0xf) {
0x00077ae6 cmp r4, 0x10 |
0x00077ae8 ldrh r4, [r3, 0xa] | r4 = *((r3 + 0xa));
0x00077aea it eq |
| if (r4 != 0x10) {
0x00077aec strbeq r6, [r3, 5] | *((r3 + 5)) = r6;
| }
0x00077aee lsls r4, r4, 0x1f | r4 <<= 0x1f;
| if (r4 < r4) {
0x00077af0 bpl 0x77b0e |
0x00077af2 ldrsh.w r4, [r5, 0x20] | r4 = *((r5 + 0x20));
0x00077af6 cmp r4, r2 |
| if (r4 == r2) {
0x00077af8 beq 0x77b0e | goto label_49;
| }
0x00077afa lsls r1, r1, 0x1c | r1 <<= 0x1c;
| if (r1 != r1) {
0x00077afc bne 0x77b0e | goto label_49;
| }
0x00077afe ldrb r1, [r3, 4] | r1 = *((r3 + 4));
0x00077b00 bfi r1, r7, 0, 4 | value_0 = BIT_MASK (0, 4);
| value_1 = r7 & value_0;
| value_0 = ~value_0;
| r1 &= value_0;
| r1 |= value_1;
0x00077b04 strb r1, [r3, 4] | *((r3 + 4)) = r1;
0x00077b06 ldr r1, [r5, 0x1c] | r1 = *((r5 + 0x1c));
0x00077b08 orr r1, r1, 0x800 | r1 |= 0x800;
0x00077b0c str r1, [r5, 0x1c] | *((r5 + 0x1c)) = r1;
| }
| label_49:
0x00077b0e adds r2, 1 | r2++;
0x00077b10 adds r3, 0xc | r3 += 0xc;
0x00077b12 cmp r0, r2 |
| if (r0 == r2) {
0x00077b14 beq 0x77b6a | goto label_48;
| }
0x00077b16 ldrb r1, [r3, 4] | r1 = *((r3 + 4));
0x00077b18 cmp r1, 0xf |
0x00077b1a and r4, r1, 0xf0 | r4 = r1 & 0xf0;
0x00077b1e bhi 0x77ae6 |
| }
0x00077b20 ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x00077b22 ldr r6, [r3] | r6 = *(r3);
0x00077b24 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077b26 lsls r5, r2, 0x1d | r5 = r2 << 0x1d;
0x00077b28 ldr r7, [r3] | r7 = *(r3);
| if (r5 >= r2) {
0x00077b2a bpl.w 0x783de | goto label_50;
| }
0x00077b2e mov r0, r6 | r0 = r6;
0x00077b30 blx 0x85b4 | fcn_000085b4 ();
0x00077b34 ldr.w r2, [pc, 0x9e4] |
0x00077b38 ldr.w r3, [pc, 0x9c4] | r3 = *(0x78500);
0x00077b3c add r2, pc | r2 = 0xf005c;
0x00077b3e ldr r3, [r2, r3] | r3 = *(0xf005c);
0x00077b40 ldr r2, [r3] | r2 = *(0xf005c);
0x00077b42 ldr r3, [sp, 0x74] | r3 = var_74h;
0x00077b44 eors r2, r3 | r2 ^= r3;
0x00077b46 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00077b4a bne.w 0x78724 | goto label_43;
| }
0x00077b4e ldr.w r1, [pc, 0x9d0] |
0x00077b52 adds r4, r0, 1 | r4 = r0 + 1;
0x00077b54 add r4, r6 | r4 += r6;
0x00077b56 ldr r0, [sp, 0x28] | r0 = x;
0x00077b58 mov r3, r6 | r3 = r6;
0x00077b5a mov r2, r7 | r2 = r7;
0x00077b5c add r1, pc | r1 = 0xf0082;
0x00077b5e str r4, [sp, 0xa0] | *(arg_a0h) = r4;
0x00077b60 add sp, 0x7c |
0x00077b62 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00077b66 b.w 0x21598 | void (*0x21598)() ();
| label_48:
0x00077b6a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00077b6c lsls r6, r3, 0x18 | r6 = r3 << 0x18;
| if (r6 >= r3) {
0x00077b6e bpl.w 0x77e4c | goto label_19;
| }
0x00077b72 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077b74 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00077b76 ands r5, r2, 8 | r5 = r2 & 8;
| if (r5 != r2) {
0x00077b7a bne.w 0x7858e | goto label_51;
| }
0x00077b7e lsls r4, r2, 0x1d | r4 = r2 << 0x1d;
| if (r4 >= r2) {
0x00077b80 bpl.w 0x78564 | goto label_52;
| }
0x00077b84 ldr r1, [sp, 0x28] | r1 = x;
0x00077b86 orr r3, r2, 0x280 | r3 = r2 | 0x280;
0x00077b8a ldr r6, [sp, 0x24] | r6 = var_24h;
0x00077b8c ldr r0, [r1] | r0 = *(r1);
0x00077b8e ldr r4, [r1, 8] | r4 = *((r1 + 8));
0x00077b90 str r3, [r6, 0x1c] | *((r6 + 0x1c)) = r3;
0x00077b92 ldrb.w r1, [r0, 0xb2] | r1 = *((r0 + 0xb2));
0x00077b96 str r0, [sp, 0x38] | var_38h = r0;
0x00077b98 ands r1, r1, 2 | r1 &= 2;
| if (r1 != r1) {
0x00077b9c bne 0x77bd4 | goto label_53;
| }
0x00077b9e ldrsh.w r6, [r6, 0x22] | r6 = *((r6 + 0x22));
0x00077ba2 cmp r6, 0 |
| if (r6 <= 0) {
0x00077ba4 ble 0x77bcc | goto label_54;
| }
0x00077ba6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077ba8 movs r0, 0xc | r0 = 0xc;
0x00077baa movs r7, 2 | r7 = 2;
0x00077bac ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00077bae smlabb r6, r6, r0, r3 | __asm ("smlabb r6, r6, r0, r3");
| do {
0x00077bb2 ldrh r0, [r3, 0xa] | r0 = *((r3 + 0xa));
0x00077bb4 lsls r0, r0, 0x1f | r0 <<= 0x1f;
| if (r0 < r0) {
0x00077bb6 bpl 0x77bc6 |
0x00077bb8 ldrb r0, [r3, 4] | r0 = *((r3 + 4));
0x00077bba tst.w r0, 0xf |
0x00077bbe itt eq |
| if ((r0 & 0xf) == 0) {
0x00077bc0 bfieq r0, r7, 0, 4 | __asm ("bfieq r0, r7, 0, 4");
| }
| if ((r0 & 0xf) != 0) {
0x00077bc4 strb r0, [r3, 4] | *((r3 + 4)) = r0;
| goto label_55;
| }
| }
| label_55:
0x00077bc6 adds r3, 0xc | r3 += 0xc;
0x00077bc8 cmp r6, r3 |
0x00077bca bne 0x77bb2 |
| } while (r6 != r3);
| label_54:
0x00077bcc ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077bce orr r2, r2, 0xa80 | r2 |= 0xa80;
0x00077bd2 str r2, [r3, 0x1c] | *((r3 + 0x1c)) = r2;
| label_53:
0x00077bd4 ldr r3, [sp, 0x28] | r3 = x;
0x00077bd6 ldr.w r3, [r3, 0x84] | r3 = *((r3 + 0x84));
0x00077bda cmp r3, 0 |
| if (r3 != 0) {
0x00077bdc bne.w 0x785ac | goto label_56;
| }
| label_23:
0x00077be0 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00077be2 ldrsh.w r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x00077be6 cmp r3, 0 |
| if (r3 >= 0) {
0x00077be8 bge 0x77c62 | goto label_57;
| }
0x00077bea ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077bec ldr.w sb, [r3, 8] | sb = *((r3 + 8));
0x00077bf0 mov r6, sb | r6 = sb;
0x00077bf2 cmp.w sb, 0 |
| if (sb != 0) {
0x00077bf6 bne 0x77c04 | goto label_58;
| }
0x00077bf8 b.w 0x7874a | goto label_59;
| do {
0x00077bfc ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x00077bfe cmp r6, 0 |
| if (r6 == 0) {
0x00077c00 beq.w 0x7874a | goto label_59;
| }
| label_58:
0x00077c04 ldrb.w r3, [r6, 0x37] | r3 = *((r6 + 0x37));
0x00077c08 and r3, r3, 3 | r3 &= 3;
0x00077c0c cmp r3, 2 |
0x00077c0e bne 0x77bfc |
| } while (r3 != 2);
0x00077c10 ldrh r2, [r6, 0x32] | r2 = *((r6 + 0x32));
0x00077c12 cmp r2, 1 |
| if (r2 < 1) {
0x00077c14 bls.w 0x786cc | goto label_60;
| }
0x00077c18 mov.w r8, 1 | r8 = 1;
0x00077c1c mov r7, r8 | r7 = r8;
0x00077c1e b 0x77c32 |
| while (r0 != 0) {
0x00077c20 ldrh r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x00077c22 subs r3, 1 | r3--;
0x00077c24 strh r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
| label_0:
0x00077c26 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x00077c28 add.w r8, r8, 1 | r8++;
0x00077c2c cmp r8, r3 |
| if (r8 >= r3) {
0x00077c2e bge.w 0x784e4 | goto label_61;
| }
0x00077c32 mov r3, r8 | r3 = r8;
0x00077c34 mov r2, r6 | r2 = r6;
0x00077c36 mov r1, r7 | r1 = r7;
0x00077c38 mov r0, r6 | r0 = r6;
0x00077c3a bl 0x18ec0 | r0 = fcn_00018ec0 (r0, r1, r2, r3, r4);
0x00077c3e cmp r0, 0 |
0x00077c40 bne 0x77c20 |
| }
0x00077c42 ldrd r1, r0, [r6, 0x1c] | __asm ("ldrd r1, r0, [r6, 0x1c]");
0x00077c46 ldr.w r2, [r0, r8, lsl 2] | offset_2 = r8 << 2;
| r2 = *((r0 + offset_2));
0x00077c4a str.w r2, [r0, r7, lsl 2] | __asm ("str.w r2, [r0, r7, lsl 2]");
0x00077c4e ldrb.w r2, [r1, r8] | r2 = *((r1 + r8));
0x00077c52 strb r2, [r1, r7] | *((r1 + r7)) = r2;
0x00077c54 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x00077c56 ldrsh.w r1, [r2, r8, lsl 1] | offset_3 = r8 << 1;
| r1 = *((r2 + offset_3));
0x00077c5a strh.w r1, [r2, r7, lsl 1] | offset_4 = r7 << 1;
| *((r2 + offset_4)) = r1;
0x00077c5e adds r7, 1 | r7++;
0x00077c60 b 0x77c26 | goto label_0;
| label_57:
0x00077c62 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00077c64 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00077c68 ldr.w r0, [r2, r3, lsl 2] | offset_5 = r3 << 2;
| r0 = *((r2 + offset_5));
0x00077c6c str r0, [sp, 0x58] | var_58h = r0;
| if (r0 != 0) {
0x00077c6e cbz r0, 0x77c78 |
0x00077c70 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00077c74 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| }
0x00077c78 movs r3, 0 | r3 = 0;
0x00077c7a movs r1, 0x3b | r1 = 0x3b;
0x00077c7c str r0, [sp, 0x5c] | var_5ch = r0;
0x00077c7e add r2, sp, 0x58 | r2 += var_58h;
0x00077c80 ldr r0, [sp, 0x38] | r0 = var_38h;
0x00077c82 bl 0x21bd8 | fcn_00021bd8 (r0, r1, r2, r3);
0x00077c86 ldr r3, [sp, 0x28] | r3 = x;
0x00077c88 mov r1, r0 | r1 = r0;
0x00077c8a ldr r0, [r3] | r0 = *(r3);
0x00077c8c bl 0x21b94 | r0 = fcn_00021b94 (r0, r1);
0x00077c90 cmp r0, 0 |
| if (r0 == 0) {
0x00077c92 beq.w 0x78616 | goto label_62;
| }
0x00077c96 ldr r2, [sp, 0x28] | r2 = x;
0x00077c98 ldrb.w r3, [r2, 0xd0] | r3 = *((r2 + 0xd0));
0x00077c9c cmp r3, 1 |
| if (r3 < 1) {
0x00077c9e bls 0x77cbc | goto label_63;
| }
0x00077ca0 ldr.w r3, [r2, 0x10c] | r3 = *((r2 + 0x10c));
0x00077ca4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00077ca6 add.w r1, r2, 0x20 | r1 = r2 + 0x20;
| if (r3 != 0) {
0x00077caa cbnz r3, 0x77cb2 | goto label_64;
| }
0x00077cac b 0x77cbc | goto label_63;
| do {
0x00077cae ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| if (r3 == 0) {
0x00077cb0 cbz r3, 0x77cbc | goto label_63;
| }
| label_64:
0x00077cb2 ldr r2, [r3] | r2 = *(r3);
0x00077cb4 cmp r1, r2 |
0x00077cb6 bne 0x77cae |
| } while (r1 != r2);
0x00077cb8 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x00077cba str r2, [r3] | *(r3) = r2;
| label_63:
0x00077cbc ldr r6, [sp, 0x28] | r6 = x;
0x00077cbe movw r2, 0xffff | r2 = 0xffff;
0x00077cc2 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00077cc4 ldrb.w r3, [r6, 0xce] | r3 = *((r6 + 0xce));
0x00077cc8 strb r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00077cca movs r3, 0 | r3 = 0;
0x00077ccc strh r2, [r1, 0x20] | *((r1 + 0x20)) = r2;
0x00077cce movs r2, 2 | r2 = 2;
0x00077cd0 strd r3, r3, [sp, 0x10] | __asm ("strd r3, r3, [var_10h]");
0x00077cd4 strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [var_ch]");
0x00077cd8 str r2, [sp, 0x18] | var_18h = r2;
0x00077cda ldrb.w r2, [r1, 0x2a] | r2 = *((r1 + 0x2a));
0x00077cde mov r1, r3 | r1 = r3;
0x00077ce0 strd r0, r2, [sp] | __asm ("strd r0, r2, [sp]");
0x00077ce4 mov r2, r3 | r2 = r3;
0x00077ce6 mov r0, r6 | r0 = r6;
0x00077ce8 bl 0xa97a0 | fcn_000a97a0 (r0, r1, r2, r3, r4, r5, r6);
0x00077cec ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x00077cee cmp r3, 0 |
| if (r3 != 0) {
0x00077cf0 bne.w 0x78616 | goto label_62;
| }
0x00077cf4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077cf6 ldr.w sb, [r3, 8] | sb = *((r3 + 8));
0x00077cfa mov r6, sb | r6 = sb;
0x00077cfc cmp.w sb, 0 |
| if (sb != 0) {
0x00077d00 bne 0x77d08 | goto label_65;
| }
0x00077d02 b 0x77d14 | goto label_66;
| do {
0x00077d04 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
| if (r6 == 0) {
0x00077d06 cbz r6, 0x77d14 | goto label_66;
| }
| label_65:
0x00077d08 ldrb.w r3, [r6, 0x37] | r3 = *((r6 + 0x37));
0x00077d0c and r3, r3, 3 | r3 &= 3;
0x00077d10 cmp r3, 2 |
0x00077d12 bne 0x77d04 |
| } while (r3 != 2);
| label_66:
0x00077d14 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00077d16 ldrh r0, [r6, 0x32] | r0 = *((r6 + 0x32));
0x00077d18 ldrb.w r1, [r3, 0xb2] | r1 = *((r3 + 0xb2));
0x00077d1c mov r7, r0 | r7 = r0;
0x00077d1e and r1, r1, 2 | r1 &= 2;
| label_22:
0x00077d22 ldrb.w r2, [r6, 0x37] | r2 = *((r6 + 0x37));
0x00077d26 orr r2, r2, 0x20 | r2 |= 0x20;
0x00077d2a strb.w r2, [r6, 0x37] | *((r6 + 0x37)) = r2;
| if (r1 == 0) {
0x00077d2e cbnz r1, 0x77d3a |
0x00077d30 uxtb r2, r2 | r2 = (int8_t) r2;
0x00077d32 orr r2, r2, 8 | r2 |= 8;
0x00077d36 strb.w r2, [r6, 0x37] | *((r6 + 0x37)) = r2;
| }
0x00077d3a strh r0, [r6, 0x34] | *((r6 + 0x34)) = r0;
| if (r4 != 0) {
0x00077d3c cbz r4, 0x77d46 |
0x00077d3e ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x00077d40 cmp r2, 0 |
| if (r2 != 0) {
0x00077d42 bne.w 0x78624 | goto label_67;
| }
| }
| label_24:
0x00077d46 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077d48 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x00077d4a str r2, [r6, 0x2c] | *((r6 + 0x2c)) = r2;
0x00077d4c cmp.w sb, 0 |
| if (sb == 0) {
0x00077d50 beq 0x77d9a | goto label_68;
| }
0x00077d52 str r5, [sp, 0x3c] | var_3ch = r5;
0x00077d54 mov r5, sb | r5 = sb;
| label_1:
0x00077d56 ldrb.w r3, [r5, 0x37] | r3 = *((r5 + 0x37));
0x00077d5a and r3, r3, 3 | r3 &= 3;
0x00077d5e cmp r3, 2 |
| if (r3 == 2) {
0x00077d60 beq 0x77d92 | goto label_20;
| }
0x00077d62 ldrh.w sb, [r5, 0x32] | sb = *((r5 + 0x32));
| if (r7 == 0) {
0x00077d66 cbz r7, 0x77d8e | goto label_69;
| }
0x00077d68 mov.w r8, 0 | r8 = 0;
0x00077d6c mov r4, r8 | r4 = r8;
| do {
0x00077d6e mov r3, r4 | r3 = r4;
0x00077d70 mov r2, r6 | r2 = r6;
0x00077d72 mov r1, sb | r1 = sb;
0x00077d74 mov r0, r5 | r0 = r5;
0x00077d76 bl 0x18ec0 | r0 = fcn_00018ec0 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x00077d7a cbnz r0, 0x77d80 |
0x00077d7c add.w r8, r8, 1 | r8++;
| }
0x00077d80 adds r4, 1 | r4++;
0x00077d82 cmp r4, r7 |
0x00077d84 bne 0x77d6e |
| } while (r4 != r7);
0x00077d86 cmp.w r8, 0 |
| if (r8 != 0) {
0x00077d8a bne.w 0x7846a | goto label_70;
| }
| label_69:
0x00077d8e strh.w sb, [r5, 0x34] | *((r5 + 0x34)) = sb;
| label_20:
0x00077d92 ldr r5, [r5, 0x14] | r5 = *((r5 + 0x14));
0x00077d94 cmp r5, 0 |
| if (r5 != 0) {
0x00077d96 bne 0x77d56 | goto label_1;
| }
0x00077d98 ldr r5, [sp, 0x3c] | r5 = var_3ch;
| label_68:
0x00077d9a ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077d9c ldrsh.w ip, [r3, 0x22] | ip = *((r3 + 0x22));
0x00077da0 cmp.w ip, 0 |
0x00077da4 it le |
| if (ip > 0) {
0x00077da6 movle r2, r7 | r2 = r7;
| }
| if (ip <= 0) {
0x00077da8 ble 0x77de4 | goto label_71;
| }
0x00077daa ldr.w lr, [r6, 4] |
0x00077dae movs r0, 0 | r0 = 0;
0x00077db0 ldr r4, [sp, 0x24] | r4 = var_24h;
0x00077db2 mov r8, r0 | r8 = r0;
0x00077db4 mov r2, r0 | r2 = r0;
0x00077db6 add.w r1, lr, r7, lsl 1 | r1 = lr + (r7 << 1);
| label_2:
0x00077dba mov r3, lr | r3 = lr;
0x00077dbc b 0x77dc6 |
| while (r3 != r1) {
0x00077dbe ldrsh sb, [r3], 2 | sb = *(r3);
| r3 += 2;
0x00077dc2 cmp sb, r2 |
| if (sb == r2) {
0x00077dc4 beq 0x77dd8 | goto label_72;
| }
0x00077dc6 cmp r3, r1 |
0x00077dc8 bne 0x77dbe |
| }
0x00077dca ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00077dcc add r3, r0 | r3 += r0;
0x00077dce ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x00077dd0 lsls r3, r3, 0x1a | r3 <<= 0x1a;
0x00077dd2 it pl |
| if (r3 < r3) {
0x00077dd4 addpl r8, r8, 1 | r8++;
| }
| label_72:
0x00077dd8 adds r2, 1 | r2++;
0x00077dda adds r0, 0xc | r0 += 0xc;
0x00077ddc cmp r2, ip |
| if (r2 != ip) {
0x00077dde bne 0x77dba | goto label_2;
| }
0x00077de0 add.w r2, r8, r7 | r2 = r8 + r7;
| label_71:
0x00077de4 ldr r0, [sp, 0x38] | r0 = var_38h;
0x00077de6 mov r1, r6 | r1 = r6;
0x00077de8 bl 0x239b4 | r0 = fcn_000239b4 (r0, r1, r2);
| if (r0 != 0) {
0x00077dec cbnz r0, 0x77e4c | goto label_19;
| }
0x00077dee ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077df0 ldrsh.w r1, [r3, 0x22] | r1 = *((r3 + 0x22));
0x00077df4 cmp r1, 0 |
| if (r1 <= 0) {
0x00077df6 ble 0x77e46 | goto label_73;
| }
0x00077df8 ldr.w r3, [pc, 0x728] |
0x00077dfc ldr.w ip, [r6, 4] | ip = *((r6 + 4));
0x00077e00 ldr.w lr, [sp, 0x24] | lr = var_24h;
0x00077e04 add r3, pc | r3 = 0xf032c;
0x00077e06 add.w r8, r3, 0x2dc | r8 = r3 + 0x2dc;
0x00077e0a mov r3, r8 | r3 = r8;
0x00077e0c mov r8, r1 | r8 = r1;
0x00077e0e mov r1, r3 | r1 = r3;
| label_3:
0x00077e10 add.w r4, ip, r7, lsl 1 | r4 = ip + (r7 << 1);
0x00077e14 mov r3, ip | r3 = ip;
0x00077e16 b 0x77e20 |
| while (r3 != r4) {
0x00077e18 ldrsh r2, [r3], 2 | r2 = *(r3);
| r3 += 2;
0x00077e1c cmp r2, r0 |
| if (r2 == r0) {
0x00077e1e beq 0x77e3e | goto label_74;
| }
0x00077e20 cmp r3, r4 |
0x00077e22 bne 0x77e18 |
| }
0x00077e24 ldr.w r2, [lr, 4] | r2 = *((lr + 4));
0x00077e28 add r2, r5 | r2 += r5;
0x00077e2a ldrh r2, [r2, 0xa] | r2 = *((r2 + 0xa));
0x00077e2c lsls r2, r2, 0x1a | r2 <<= 0x1a;
| if (r2 >= r2) {
0x00077e2e bmi 0x77e3e |
0x00077e30 strh r0, [r3] | *(r3) = r0;
0x00077e32 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x00077e34 ldrsh.w r8, [lr, 0x22] | r8 = *((lr + 0x22));
0x00077e38 str.w r1, [r3, r7, lsl 2] | __asm ("str.w r1, [r3, r7, lsl 2]");
0x00077e3c adds r7, 1 | r7++;
| }
| label_74:
0x00077e3e adds r0, 1 | r0++;
0x00077e40 adds r5, 0xc | r5 += 0xc;
0x00077e42 cmp r0, r8 |
| if (r0 < r8) {
0x00077e44 blt 0x77e10 | goto label_3;
| }
| label_73:
0x00077e46 mov r0, r6 | r0 = r6;
0x00077e48 bl 0xab14 | fcn_0000ab14 (r0);
| label_19:
0x00077e4c ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077e4e ldr r1, [r3, 0x3c] | r1 = *((r3 + 0x3c));
0x00077e50 cmp r1, 0 |
| if (r1 == 0) {
0x00077e52 beq.w 0x786d2 | goto label_75;
| }
0x00077e56 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x00077e5a movs r7, 0 | r7 = 0;
0x00077e5c ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00077e5e cmp r1, r2 |
| if (r1 == r2) {
0x00077e60 beq 0x77e6c | goto label_37;
| }
| do {
0x00077e62 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00077e64 adds r3, 0x10 | r3 += 0x10;
0x00077e66 adds r7, 1 | r7++;
0x00077e68 cmp r1, r2 |
0x00077e6a bne 0x77e62 |
| } while (r1 != r2);
| label_37:
0x00077e6c ldr r5, [sp, 0x24] | r5 = var_24h;
0x00077e6e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00077e70 mov r1, r5 | r1 = r5;
| if (r3 != 0) {
0x00077e72 cbz r3, 0x77e96 |
0x00077e74 ldr r4, [sp, 0x28] | r4 = x;
0x00077e76 movs r2, 4 | r2 = 4;
0x00077e78 str r3, [sp] | *(sp) = r3;
0x00077e7a movs r3, 0 | r3 = 0;
0x00077e7c mov r0, r4 | r0 = r4;
0x00077e7e bl 0x3139c | fcn_0003139c (r0, r1, r2, r3);
0x00077e82 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 == 0) {
0x00077e84 cbz r3, 0x77e96 | goto label_76;
| }
0x00077e86 ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
| if (r1 != 0) {
0x00077e88 cbz r1, 0x77e90 |
0x00077e8a mov r0, sl | r0 = sl;
0x00077e8c bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x00077e90 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00077e92 movs r3, 0 | r3 = 0;
0x00077e94 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| }
| label_76:
0x00077e96 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00077e98 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x00077e9a ldrsh.w r1, [r2, 0x22] | r1 = *((r2 + 0x22));
0x00077e9e tst.w r3, 0x60 |
| if ((r3 & 0x60) == 0) {
0x00077ea2 beq 0x77f24 | goto label_77;
| }
0x00077ea4 cmp r1, 0 |
| if (r1 <= 0) {
0x00077ea6 ble.w 0x7844c | goto label_78;
| }
0x00077eaa movs r6, 0 | r6 = 0;
0x00077eac ldr r4, [sp, 0x24] | r4 = var_24h;
0x00077eae mov sb, r6 | sb = r6;
0x00077eb0 mov r8, r6 | r8 = r6;
0x00077eb2 mov r5, r6 | r5 = r6;
0x00077eb4 b 0x77ec6 |
| while (r2 == 0) {
0x00077eb6 add.w r8, r8, 1 | r8++;
0x00077eba add.w sb, sb, 1 | sb++;
0x00077ebe cmp r1, r8 |
0x00077ec0 add.w r6, r6, 0xc | r6 += 0xc;
| if (r1 <= r8) {
0x00077ec4 ble 0x77f1c | goto label_79;
| }
| label_4:
0x00077ec6 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00077ec8 add r3, r6 | r3 += r6;
0x00077eca ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x00077ecc and r2, r2, 0x60 | r2 &= 0x60;
0x00077ed0 cmp r2, 0 |
0x00077ed2 beq 0x77eb6 |
| }
0x00077ed4 ldrh r2, [r3, 8] | r2 = *((r3 + 8));
0x00077ed6 cmp r2, 0 |
| if (r2 == 0) {
0x00077ed8 beq.w 0x78374 | goto label_80;
| }
0x00077edc ldrb.w r1, [r4, 0x2b] | r1 = *((r4 + 0x2b));
0x00077ee0 cmp r1, 0 |
| if (r1 != 0) {
0x00077ee2 bne.w 0x78374 | goto label_80;
| }
0x00077ee6 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
| if (r3 != 0) {
0x00077ee8 cbz r3, 0x77efc |
0x00077eea ldr r0, [r3] | r0 = *(r3);
0x00077eec cmp r0, r2 |
0x00077eee it lt |
| if (r0 >= r2) {
0x00077ef0 movlt r3, r1 | r3 = r1;
| }
| if (r0 < r2) {
0x00077ef2 blt 0x77efc | goto label_13;
| }
0x00077ef4 add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00077ef8 ldr r3, [r3, -0x8] | r3 = *((r3 - 0x8));
| }
| label_13:
0x00077efc ldr r0, [sp, 0x28] | r0 = x;
0x00077efe movs r2, 8 | r2 = 8;
0x00077f00 mov r1, r4 | r1 = r4;
0x00077f02 str r5, [sp] | *(sp) = r5;
0x00077f04 bl 0x3139c | r0 = fcn_0003139c (r0, r1, r2, r3);
0x00077f08 cmp r0, 0 |
| if (r0 != 0) {
0x00077f0a bne.w 0x78338 | goto label_81;
| }
| label_12:
0x00077f0e ldrsh.w r1, [r4, 0x22] | r1 = *((r4 + 0x22));
0x00077f12 add.w r8, r8, 1 | r8++;
0x00077f16 adds r6, 0xc | r6 += 0xc;
0x00077f18 cmp r1, r8 |
| if (r1 > r8) {
0x00077f1a bgt 0x77ec6 | goto label_4;
| }
| label_79:
0x00077f1c cmp.w sb, 0 |
| if (sb == 0) {
0x00077f20 beq.w 0x7844c | goto label_78;
| }
| label_77:
0x00077f24 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00077f26 cmp r1, 0 |
0x00077f28 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00077f2a ldrsh.w r0, [r2, 0x20] | r0 = *((r2 + 0x20));
| if (r1 <= 0) {
0x00077f2e ble.w 0x7843c | goto label_82;
| }
0x00077f32 add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x00077f36 movs r2, 0 | r2 = 0;
0x00077f38 add.w r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
| do {
0x00077f3c ldrb r4, [r3, 6] | r4 = *((r3 + 6));
0x00077f3e adds r3, 0xc | r3 += 0xc;
0x00077f40 cmp r3, r1 |
0x00077f42 add r2, r4 | r2 += r4;
0x00077f44 bne 0x77f3c |
| } while (r3 != r1);
0x00077f46 cmp r0, 0 |
0x00077f48 mov.w r3, 0 | r3 = 0;
0x00077f4c it lt |
| if (r0 >= 0) {
0x00077f4e addlt r2, 1 | r2++;
| }
0x00077f50 lsls r2, r2, 2 | r2 <<= 2;
0x00077f52 cmp r2, 7 |
| if (r2 < 7) {
0x00077f54 bls.w 0x783be | goto label_83;
| }
0x00077f58 clz r3, r2 | r3 &= r2;
0x00077f5c rsb.w r3, r3, 0x1c | r3 = 0x1c - r3;
0x00077f60 lsrs r2, r3 | r2 >>= r3;
0x00077f62 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00077f66 lsls r3, r3, 1 | r3 <<= 1;
0x00077f68 adds r3, 0x28 | r3 += 0x28;
0x00077f6a uxth r3, r3 | r3 = (int16_t) r3;
| label_16:
0x00077f6c ldr.w r1, [pc, 0x5b8] | r1 = *(0x00078528);
0x00077f70 and r2, r2, 7 | r2 &= 7;
0x00077f74 subs r3, 0xa | r3 -= 0xa;
0x00077f76 add r1, pc | r1 += pc;
0x00077f78 add.w r2, r1, r2, lsl 1 | r2 = r1 + (r2 << 1);
0x00077f7c ldrh.w r2, [r2, 0x128] | r2 = *((r2 + 0x128));
0x00077f80 add r3, r2 | r3 += r2;
0x00077f82 sxth r3, r3 | __asm ("sxth r3, r3");
| label_15:
0x00077f84 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00077f86 ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x00077f88 strh r3, [r2, 0x28] | *((r2 + 0x28)) = r3;
| if (r0 == 0) {
0x00077f8a cbz r0, 0x77f96 | goto label_84;
| }
| do {
0x00077f8c bl 0x19dd4 | fcn_00019dd4 (r0);
0x00077f90 ldr r0, [r0, 0x14] | r0 = *((r0 + 0x14));
0x00077f92 cmp r0, 0 |
0x00077f94 bne 0x77f8c |
| } while (r0 != 0);
| label_84:
0x00077f96 ldrb.w r3, [sl, 0xb1] | r3 = *((sl + 0xb1));
0x00077f9a cmp r3, 0 |
| if (r3 != 0) {
0x00077f9c bne.w 0x78378 | goto label_46;
| }
0x00077fa0 ldr r3, [sp, 0x28] | r3 = x;
0x00077fa2 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x00077fa4 cmp r6, 0 |
| if (r6 == 0) {
0x00077fa6 beq.w 0x784ca | goto label_85;
| }
| label_21:
0x00077faa movs r3, 0 | r3 = 0;
0x00077fac movs r1, 0x7a | r1 = 0x7a;
0x00077fae mov r2, r3 | r2 = r3;
0x00077fb0 str r3, [sp] | *(sp) = r3;
0x00077fb2 mov r0, r6 | r0 = r6;
0x00077fb4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00077fb8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00077fba ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x00077fbe cmp r3, 0 |
| if (r3 != 0) {
0x00077fc0 bne.w 0x78408 | goto label_86;
| }
0x00077fc4 ldr.w r2, [pc, 0x564] |
0x00077fc8 ldr.w r3, [pc, 0x564] | r3 = *(0x00078530);
0x00077fcc add r2, pc | r2 = 0xf04fc;
0x00077fce add r3, pc | r3 += pc;
0x00077fd0 str r3, [sp, 0x38] | var_38h = r3;
| label_17:
0x00077fd2 cmp.w fp, 0 |
| if (fp == 0) {
0x00077fd6 beq.w 0x779c6 | goto label_5;
| }
0x00077fda ldr r3, [sp, 0x28] | r3 = x;
0x00077fdc ldr r1, [sp, 0x28] | r1 = x;
0x00077fde ldrb.w r3, [r3, 0xd0] | r3 = *((r3 + 0xd0));
0x00077fe2 cmp r3, 0 |
| if (r3 != 0) {
0x00077fe4 bne.w 0x785d2 | goto label_87;
| }
0x00077fe8 ldr.w sb, [r1, 0x2c] | sb = *((r1 + 0x2c));
0x00077fec movs r2, 1 | r2 = 1;
0x00077fee ldr r3, [r1, 0x74] | r3 = *((r1 + 0x74));
0x00077ff0 mov r0, r6 | r0 = r6;
0x00077ff2 add.w r5, sb, 3 | r5 = sb + 3;
0x00077ff6 add.w r4, sb, 1 | r4 = sb + 1;
0x00077ffa cmp r3, 0 |
0x00077ffc it eq |
| if (r3 != 0) {
0x00077ffe moveq r3, r1 | r3 = r1;
| }
0x00078000 str r5, [r1, 0x2c] | *((r1 + 0x2c)) = r5;
0x00078002 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
0x00078004 str r7, [sp] | *(sp) = r7;
0x00078006 ldr r3, [r1, 0x5c] | r3 = *((r1 + 0x5c));
0x00078008 movs r1, 0x71 | r1 = 0x71;
0x0007800a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007800e ldr.w r8, [r6, 0x6c] | r8 = *((r6 + 0x6c));
0x00078012 cmp.w r8, 0 |
| if (r8 > 0) {
0x00078016 ble 0x78028 |
0x00078018 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x0007801a add.w r2, r8, r8, lsl 2 | r2 = r8 + (r8 << 2);
0x0007801e add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00078022 movs r2, 0x10 | r2 = 0x10;
0x00078024 strh r2, [r3, -0x12] | *((r3 - 0x12)) = r2;
| }
0x00078028 ldr r0, [sp, 0x28] | r0 = x;
0x0007802a movs r3, 2 | r3 = 2;
0x0007802c mov r2, r4 | r2 = r4;
0x0007802e movs r1, 0xa | r1 = 0xa;
0x00078030 str r3, [r0, 0x28] | *((r0 + 0x28)) = r3;
0x00078032 add.w r3, r8, 1 | r3 = r8 + 1;
0x00078036 str r3, [sp] | *(sp) = r3;
0x00078038 mov r0, r6 | r0 = r6;
0x0007803a movs r3, 0 | r3 = 0;
0x0007803c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00078040 ldr r0, [sp, 0x28] | r0 = x;
0x00078042 ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
0x00078044 str r3, [sp, 0x2c] | var_2ch = r3;
0x00078046 cmp r3, 0 |
| if (r3 != 0) {
0x00078048 bne.w 0x77a94 | goto label_6;
| }
0x0007804c mov r1, fp | r1 = fp;
0x0007804e movs r2, 0x41 | r2 = 0x41;
0x00078050 bl 0x6345c | r0 = fcn_0006345c (r0, r1, r2);
0x00078054 mov r1, r0 | r1 = r0;
0x00078056 cmp r0, 0 |
| if (r0 == 0) {
0x00078058 beq.w 0x77a94 | goto label_6;
| }
0x0007805c ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x0007805e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00078060 ldrsh.w r0, [r0, 0x22] | r0 = *((r0 + 0x22));
0x00078064 ldr.w ip, [sl, 0x210] | ip = *((sl + 0x210));
0x00078068 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0007806a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0007806c mov r2, r3 | r2 = r3;
0x0007806e bfi r2, r0, 0, 0x10 | value_6 = BIT_MASK (0, 0x10);
| value_7 = r0 & value_6;
| value_6 = ~value_6;
| r2 &= value_6;
| r2 |= value_7;
0x00078072 bfi r2, r0, 0x10, 0x10 | value_8 = BIT_MASK (0x10, 0x10);
| value_9 = r0 & value_8;
| value_8 = ~value_8;
| r2 &= value_8;
| r2 |= value_9;
0x00078076 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00078078 str.w r2, [r0, 0x22] | __asm ("str.w r2, [r0, 0x22]");
0x0007807c strh r3, [r1, 0x22] | *((r1 + 0x22)) = r3;
0x0007807e str r3, [r1, 4] | *((r1 + 4)) = r3;
0x00078080 cmp.w ip, 0 |
| if (ip == 0) {
0x00078084 beq.w 0x78696 | goto label_88;
| }
| label_30:
0x00078088 mov r0, sl | r0 = sl;
0x0007808a bl 0x1aa28 | fcn_0001aa28 (r0, r1);
| label_31:
0x0007808e movs r3, 0 | r3 = 0;
0x00078090 add r2, sp, 0x58 | r2 += var_58h;
0x00078092 str r3, [sp, 0x60] | var_60h = r3;
0x00078094 mov r1, fp | r1 = fp;
0x00078096 str r3, [sp, 0x6c] | var_6ch = r3;
0x00078098 strd r3, r3, [sp, 0x64] | __asm ("strd r3, r3, [var_64h]");
0x0007809c movs r3, 0xd | r3 = 0xd;
0x0007809e ldr r0, [sp, 0x28] | r0 = x;
0x000780a0 strb.w r3, [sp, 0x58] | var_58h = r3;
0x000780a4 str r4, [sp, 0x5c] | var_5ch = r4;
0x000780a6 str r2, [sp, 0x2c] | var_2ch = r2;
0x000780a8 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x000780ac ldr r3, [sp, 0x28] | r3 = x;
0x000780ae ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x000780b0 cmp r3, 0 |
| if (r3 != 0) {
0x000780b2 bne.w 0x77a94 | goto label_6;
| }
0x000780b6 mov r1, r4 | r1 = r4;
0x000780b8 mov r0, r6 | r0 = r6;
0x000780ba bl 0x2e8b0 | fcn_0002e8b0 (r0, r1, r2);
0x000780be ldr r3, [r6] | r3 = *(r6);
0x000780c0 cmp.w r8, 0 |
0x000780c4 ldr r4, [r6, 0x6c] | r4 = *((r6 + 0x6c));
0x000780c6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000780ca it lt |
| if (r8 >= 0) {
0x000780cc addlt r8, r4, -1 | r8 = r4 + -1;
| }
0x000780d0 cmp r3, 0 |
| if (r3 != 0) {
0x000780d2 bne.w 0x786aa | goto label_89;
| }
0x000780d6 ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x000780d8 add.w r8, r8, r8, lsl 2 | r8 += (r8 << 2);
0x000780dc add.w r3, r3, r8, lsl 2 | r3 += (r8 << 2);
| label_33:
0x000780e0 str r4, [r3, 8] | *((r3 + 8)) = r4;
0x000780e2 ldr r3, [r6, 0x70] | r3 = *((r6 + 0x70));
0x000780e4 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x000780e6 cmp r4, r3 |
| if (r4 >= r3) {
0x000780e8 bge.w 0x786e2 | goto label_90;
| }
0x000780ec add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x000780f0 ldr.w ip, [r6, 0x68] | ip = *((r6 + 0x68));
0x000780f4 adds r1, r4, 1 | r1 = r4 + 1;
0x000780f6 lsls r3, r3, 2 | r3 <<= 2;
0x000780f8 str r1, [r6, 0x6c] | *((r6 + 0x6c)) = r1;
0x000780fa movs r0, 0 | r0 = 0;
0x000780fc add.w r1, ip, r3 | r1 = ip + r3;
0x00078100 mov.w lr, 0xb | lr = 0xb;
0x00078104 strd r2, r0, [r1, 4] | __asm ("strd r2, r0, [r1, 4]");
0x00078108 strd r0, r0, [r1, 0xc] | __asm ("strd r0, r0, [r1, 0xc]");
0x0007810c str.w lr, [ip, r3] | __asm ("str.w lr, [ip, r3]");
| label_38:
0x00078110 add.w sb, sb, 2 | sb += 2;
0x00078114 ldrd r2, r3, [sp, 0x64] | __asm ("ldrd r2, r3, [var_64h]");
0x00078118 movs r1, 0x61 | r1 = 0x61;
0x0007811a mov r0, r6 | r0 = r6;
0x0007811c str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00078120 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00078124 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00078126 movs r2, 0 | r2 = 0;
0x00078128 mov r0, r6 | r0 = r6;
0x0007812a bl 0x36b24 | fcn_00036b24 (r0, r1, r2);
0x0007812e movs r3, 0 | r3 = 0;
0x00078130 movs r2, 1 | r2 = 1;
0x00078132 movs r1, 0x7f | r1 = 0x7f;
0x00078134 str r3, [sp] | *(sp) = r3;
0x00078136 mov r0, r6 | r0 = r6;
0x00078138 mov r3, r5 | r3 = r5;
0x0007813a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007813e mov r3, sb | r3 = sb;
0x00078140 movs r2, 1 | r2 = 1;
0x00078142 movs r1, 0x80 | r1 = 0x80;
0x00078144 mov r0, r6 | r0 = r6;
0x00078146 str r5, [sp] | *(sp) = r5;
0x00078148 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007814c mov r1, r4 | r1 = r4;
0x0007814e mov r0, r6 | r0 = r6;
0x00078150 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x00078154 ldr r3, [r6] | r3 = *(r6);
0x00078156 cmp r4, 0 |
0x00078158 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0007815a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0007815e it lt |
| if (r4 >= 0) {
0x00078160 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x00078164 cmp r3, 0 |
| if (r3 != 0) {
0x00078166 bne.w 0x786c4 | goto label_91;
| }
0x0007816a ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x0007816c add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x00078170 add.w r3, r1, r3, lsl 2 | r3 = r1 + (r3 << 2);
| label_35:
0x00078174 mov.w r8, 0 | r8 = 0;
0x00078178 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0007817a movs r1, 0x7a | r1 = 0x7a;
0x0007817c mov r3, r8 | r3 = r8;
0x0007817e movs r2, 1 | r2 = 1;
0x00078180 mov r0, r6 | r0 = r6;
0x00078182 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00078186 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0007818a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007818c ldrsh.w r1, [r3, 0x22] | r1 = *((r3 + 0x22));
0x00078190 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00078192 cmp r1, r8 |
| if (r1 <= r8) {
0x00078194 ble.w 0x78704 | goto label_92;
| }
0x00078198 add.w ip, r3, 0xc |
0x0007819c movs r3, 0xc | r3 = 0xc;
0x0007819e smlabb lr, r1, r3, ip | __asm ("smlabb lr, r1, r3, ip");
| label_7:
0x000781a2 ldr r0, [ip, -0xc] | r0 = *((ip - 0xc));
0x000781a6 ldrb r3, [r0] | r3 = *(r0);
0x000781a8 cmp r3, 0 |
| if (r3 == 0) {
0x000781aa beq.w 0x7866e | goto label_93;
| }
0x000781ae movs r4, 0 | r4 = 0;
| do {
0x000781b0 cmp r3, 0x22 |
0x000781b2 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x000781b6 ite eq |
| if (r3 != 0x22) {
0x000781b8 addeq r2, r4, 1 | r2 = r4 + 1;
| }
| if (r3 == 0x22) {
0x000781ba movne r2, r4 | r2 = r4;
| }
0x000781bc adds r4, r2, 1 | r4 = r2 + 1;
0x000781be cmp r3, 0 |
0x000781c0 bne 0x781b0 |
| } while (r3 != 0);
0x000781c2 adds r2, 8 | r2 += 8;
| label_28:
0x000781c4 add.w ip, ip, 0xc |
0x000781c8 add r8, r2 | r8 += r2;
0x000781ca cmp ip, lr |
| if (ip != lr) {
0x000781cc bne 0x781a2 | goto label_7;
| }
0x000781ce ldr r3, [sp, 0x24] | r3 = var_24h;
0x000781d0 ldr r0, [r3] | r0 = *(r3);
0x000781d2 ldrb r2, [r0] | r2 = *(r0);
0x000781d4 cmp r2, 0 |
| if (r2 == 0) {
0x000781d6 beq.w 0x78728 | goto label_94;
| }
0x000781d8 strh r7, [r4, 0x14] | *((r4 + 0x14)) = r7;
| label_40:
0x000781da movs r3, 0 | r3 = 0;
| do {
0x000781dc cmp r2, 0x22 |
0x000781de ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x000781e2 it eq |
| if (r2 != 0x22) {
0x000781e4 addeq r3, 1 | r3++;
| }
0x000781e6 adds r3, 1 | r3++;
0x000781e8 cmp r2, 0 |
0x000781ea bne 0x781dc |
| } while (r2 != 0);
| label_41:
0x000781ec adds r3, 2 | r3 += 2;
0x000781ee add.w r2, r3, r8 | r2 = r3 + r8;
0x000781f2 cmp r2, 0x31 |
| if (r2 <= 0x31) {
0x000781f4 ble.w 0x786b2 | goto label_95;
| }
0x000781f8 ldr r3, [pc, 0x338] |
0x000781fa add r3, pc | r3 = 0xf0732;
0x000781fc str r3, [sp, 0x44] | var_44h = r3;
0x000781fe ldr r3, [pc, 0x338] |
0x00078200 add r3, pc | r3 = 0xf073e;
0x00078202 str r3, [sp, 0x3c] | var_3ch = r3;
0x00078204 ldr r3, [pc, 0x334] |
0x00078206 add r3, pc | r3 = 0xf0746;
| label_34:
0x00078208 movs r0, 6 | r0 = 6;
0x0007820a str r3, [sp, 0x48] | var_48h = r3;
0x0007820c mla r2, r1, r0, r2 | __asm ("mla r2, r1, r0, r2");
0x00078210 add.w r3, r2, 0x23 | r3 = r2 + 0x23;
0x00078214 asrs r1, r3, 0x1f | r1 = r3 >> 0x1f;
0x00078216 mov r0, r3 | r0 = r3;
0x00078218 str r3, [sp, 0x40] | var_40h = r3;
0x0007821a bl 0x13558 | fcn_00013558 (r0);
0x0007821e ldr r3, [sp, 0x48] | r3 = var_48h;
0x00078220 mov sb, r0 | sb = r0;
0x00078222 cmp r0, 0 |
| if (r0 == 0) {
0x00078224 beq.w 0x7872c | goto label_96;
| }
0x00078228 ldr r2, [pc, 0x314] |
0x0007822a mov r1, r0 | r1 = r0;
0x0007822c ldr r0, [sp, 0x40] | r0 = var_40h;
0x0007822e str r3, [sp, 0x54] | var_54h = r3;
0x00078230 add r2, pc | r2 = 0xf0774;
0x00078232 blx 0x8968 | fcn_00008968 ();
0x00078236 mov r0, sb | r0 = sb;
0x00078238 blx 0x85b4 | fcn_000085b4 ();
0x0007823c ldr r4, [sp, 0x24] | r4 = var_24h;
0x0007823e bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
0x00078240 eors r0, r0 | r0 = 0;
0x00078242 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00078244 str r0, [sp, 0x58] | var_58h = r0;
0x00078246 mov r0, sb | r0 = sb;
0x00078248 ldr r2, [r4] | r2 = *(r4);
0x0007824a bl 0x11770 | fcn_00011770 (r0, r1, r2);
0x0007824e ldr r2, [sp, 0x58] | r2 = var_58h;
0x00078250 movs r1, 0x28 | r1 = 0x28;
0x00078252 mov r3, r4 | r3 = r4;
0x00078254 strb.w r1, [sb, r2] | *((sb + r2)) = r1;
0x00078258 add.w r8, r2, 1 | r8 = r2 + 1;
0x0007825c ldrsh.w r1, [r4, 0x22] | r1 = *((r4 + 0x22));
0x00078260 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00078262 str.w r8, [sp, 0x58] | __asm ("str.w r8, [var_58h]");
0x00078266 cmp r1, 0 |
| if (r1 <= 0) {
0x00078268 ble.w 0x7867e | goto label_97;
| }
0x0007826c ldr r1, [pc, 0x2d4] |
0x0007826e add.w r5, r2, 0xc | r5 = r2 + 0xc;
0x00078272 strd sl, r6, [sp, 0x48] | __asm ("strd sl, r6, [var_48h]");
0x00078276 mov r6, r3 | r6 = r3;
0x00078278 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0007827a movs r4, 0 | r4 = 0;
0x0007827c add r1, pc | r1 = 0xf07c4;
0x0007827e str r7, [sp, 0x50] | var_50h = r7;
0x00078280 str.w fp, [sp, 0x54] | __asm ("str.w fp, [var_54h]");
0x00078284 mov sl, r1 | sl = r1;
0x00078286 ldr r7, [sp, 0x40] | r7 = var_40h;
0x00078288 mov r2, r3 | r2 = r3;
0x0007828a mov fp, r8 |
0x0007828c b 0x782bc |
| while (fp != 0) {
0x0007828e mov r0, fp | r0 = fp;
0x00078290 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00078294 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x00078298 mov r3, r2 | r3 = r2;
| label_8:
0x0007829a ldr r0, [sp, 0x58] | r0 = var_58h;
0x0007829c mov r1, fp | r1 = fp;
0x0007829e adds r4, 1 | r4++;
0x000782a0 adds r5, 0xc | r5 += 0xc;
0x000782a2 add.w fp, r0, r3 |
0x000782a6 add r0, sb | r0 += sb;
0x000782a8 blx 0x8610 | fcn_00008610 ();
0x000782ac ldrsh.w r2, [r6, 0x22] | r2 = *((r6 + 0x22));
0x000782b0 str.w fp, [sp, 0x58] | __asm ("str.w fp, [var_58h]");
0x000782b4 cmp r4, r2 |
| if (r4 >= r2) {
0x000782b6 bge.w 0x78672 | goto label_98;
| }
0x000782ba ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x000782bc add.w r8, sb, fp | r8 = sb + fp;
0x000782c0 sub.w r0, r7, fp | r0 = r7 - fp;
0x000782c4 mov r1, r8 | r1 = r8;
0x000782c6 blx 0x8968 | fcn_00008968 ();
0x000782ca mov r0, r8 | r0 = r8;
0x000782cc blx 0x85b4 | r0 = fcn_000085b4 ();
0x000782d0 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000782d4 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000782d6 add r2, fp | r2 += fp;
0x000782d8 mov r0, sb | r0 = sb;
0x000782da str r2, [sp, 0x58] | var_58h = r2;
0x000782dc ldr r2, [r5, -0xc] | r2 = *((r5 - 0xc));
0x000782e0 bl 0x11770 | fcn_00011770 (r0, r1, r2);
0x000782e4 ldrb r3, [r5, -0x7] | r3 = *((r5 - 0x7));
0x000782e8 add.w r3, sl, r3, lsl 2 | r3 = sl + (r3 << 2);
0x000782ec ldr.w fp, [r3, 0xbd4] | fp = *((r3 + 0xbd4));
0x000782f0 cmp.w fp, 0 |
0x000782f4 bne 0x7828e |
| }
0x000782f6 mov r3, fp | r3 = fp;
0x000782f8 mov r2, fp | r2 = fp;
0x000782fa b 0x7829a | goto label_8;
| label_42:
0x000782fc ldr r4, [sp, 0x24] | r4 = var_24h;
0x000782fe mov r0, sl | r0 = sl;
0x00078300 ldr r1, [r4] | r1 = *(r4);
0x00078302 bl 0x3e564 | r0 = fcn_0003e564 (r0, r1);
| if (r0 != 0) {
0x00078306 cbz r0, 0x78310 |
0x00078308 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0007830a orr r3, r3, 0x1000 | r3 |= 0x1000;
0x0007830e str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
| }
0x00078310 ldrb.w r3, [sl, 0xb1] | r3 = *((sl + 0xb1));
0x00078314 cmp r3, 0 |
| if (r3 == 0) {
0x00078316 beq.w 0x77ac4 | goto label_9;
| }
0x0007831a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007831c ldrb.w r2, [r3, 0x2b] | r2 = *((r3 + 0x2b));
0x00078320 ldr.w r3, [sl, 0xac] | r3 = *((sl + 0xac));
0x00078324 cmp r2, 0 |
| if (r2 == 0) {
0x00078326 beq.w 0x77ab4 | goto label_10;
| }
0x0007832a cmp r3, 0 |
| if (r3 != 0) {
0x0007832c bne.w 0x7799a | goto label_11;
| }
0x00078330 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00078332 str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x00078334 b.w 0x77ac4 | goto label_9;
| label_81:
0x00078338 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0007833a mov r0, sl | r0 = sl;
0x0007833c movs r2, 0x34 | r2 = 0x34;
0x0007833e add r3, r6 | r3 += r6;
0x00078340 str r3, [sp, 0x38] | var_38h = r3;
0x00078342 movs r3, 0 | r3 = 0;
0x00078344 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x00078348 mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x0007834a cbz r0, 0x78368 |
0x0007834c movs r2, 0x33 | r2 = 0x33;
0x0007834e movs r1, 0 | r1 = 0;
0x00078350 adds r0, 1 | r0++;
0x00078352 str r3, [sp, 0x3c] | var_3ch = r3;
0x00078354 blx 0x839c | fcn_0000839c ();
0x00078358 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0007835a movs r2, 0x79 | r2 = 0x79;
0x0007835c strb r2, [r3] | *(r3) = r2;
0x0007835e movw r2, 0xffff | r2 = 0xffff;
0x00078362 strh r2, [r3, 0x22] | *((r3 + 0x22)) = r2;
0x00078364 movs r2, 1 | r2 = 1;
0x00078366 str r2, [r3, 0x18] | *((r3 + 0x18)) = r2;
| }
0x00078368 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0007836a mov r1, r4 | r1 = r4;
0x0007836c ldr r0, [sp, 0x28] | r0 = x;
0x0007836e bl 0x304ec | fcn_000304ec (r0, r1, r2, r3);
0x00078372 b 0x77f0e | goto label_12;
| label_80:
0x00078374 movs r3, 0 | r3 = 0;
0x00078376 b 0x77efc | goto label_13;
| label_46:
0x00078378 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007837a ldr r0, [r3, 0x3c] | r0 = *((r3 + 0x3c));
0x0007837c mov r2, r3 | r2 = r3;
0x0007837e ldr r1, [r3] | r1 = *(r3);
0x00078380 adds r0, 8 | r0 += 8;
0x00078382 bl 0x17978 | r0 = fcn_00017978 (r0, r1, r2, r3, r4);
0x00078386 cmp r0, 0 |
| if (r0 != 0) {
0x00078388 bne.w 0x785e0 | goto label_99;
| }
0x0007838c ldr r3, [sp, 0x28] | r3 = x;
0x0007838e ldr r1, [pc, 0x1b8] |
0x00078390 ldr r4, [sp, 0x24] | r4 = var_24h;
0x00078392 str.w r0, [r3, 0xec] | __asm ("str.w r0, [r3, 0xec]");
0x00078396 ldr.w r3, [sl, 0x18] | r3 = *((sl + 0x18));
0x0007839a add r1, pc | r1 = 0xf08e8;
0x0007839c ldr r0, [r4] | r0 = *(r4);
0x0007839e orr r3, r3, 1 | r3 |= 1;
0x000783a2 str.w r3, [sl, 0x18] | __asm ("str.w r3, [sl, 0x18]");
0x000783a6 blx 0x8ad0 | r0 = fcn_00008ad0 ();
0x000783aa cmp r0, 0 |
| if (r0 != 0) {
0x000783ac bne.w 0x77a8c | goto label_14;
| }
0x000783b0 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000783b2 str r4, [r3, 0x48] | *((r3 + 0x48)) = r4;
0x000783b4 cmp.w fp, 0 |
| if (fp != 0) {
0x000783b8 bne.w 0x77a94 | goto label_6;
| }
0x000783bc b 0x78414 | goto label_47;
| label_83:
0x000783be cmp r2, 2 |
0x000783c0 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 2) {
0x000783c4 blo.w 0x77f84 | goto label_15;
| }
0x000783c8 adds r2, r2, r2 | r2 += r2;
0x000783ca adc.w r1, r3, r3 | __asm ("adc.w r1, r3, r3");
0x000783ce cmp r2, 8 |
0x000783d0 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r2 >= 8) {
0x000783d4 bhs.w 0x786de | goto label_100;
| }
0x000783d8 mov r2, r3 | r2 = r3;
0x000783da movs r3, 0x14 | r3 = 0x14;
0x000783dc b 0x77f6c | goto label_16;
| label_50:
0x000783de ldr r2, [pc, 0x16c] |
0x000783e0 ldr r3, [pc, 0x11c] | r3 = *(0x78500);
0x000783e2 add r2, pc | r2 = 0xf0934;
0x000783e4 ldr r3, [r2, r3] | r3 = *(0xf0934);
0x000783e6 ldr r2, [r3] | r2 = *(0xf0934);
0x000783e8 ldr r3, [sp, 0x74] | r3 = var_74h;
0x000783ea eors r2, r3 | r2 ^= r3;
0x000783ec mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000783f0 bne.w 0x78724 | goto label_43;
| }
0x000783f4 ldr r1, [pc, 0x158] |
0x000783f6 mov r3, r6 | r3 = r6;
0x000783f8 ldr r0, [sp, 0x28] | r0 = x;
0x000783fa mov r2, r7 | r2 = r7;
0x000783fc add r1, pc | r1 = 0xf0950;
0x000783fe add sp, 0x7c |
0x00078400 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00078404 b.w 0x21598 | void (*0x21598)() ();
| label_86:
0x00078408 ldr r3, [pc, 0x148] |
0x0007840a ldr r2, [pc, 0x14c] |
0x0007840c add r3, pc | r3 = 0xf0964;
0x0007840e add r2, pc | r2 = 0xf096c;
0x00078410 str r3, [sp, 0x38] | var_38h = r3;
0x00078412 b 0x77fd2 | goto label_17;
| label_47:
0x00078414 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00078416 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0007841a cmp r3, 0 |
| if (r3 != 0) {
0x0007841c bne.w 0x77a94 | goto label_6;
| }
0x00078420 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00078422 ldr r3, [r3] | r3 = *(r3);
0x00078424 cmp r3, 0 |
| if (r3 == 0) {
0x00078426 beq.w 0x786a4 | goto label_101;
| }
| label_32:
0x0007842a ldr r2, [sp, 0x28] | r2 = x;
0x0007842c ldr.w r2, [r2, 0xbc] | r2 = *((r2 + 0xbc));
0x00078430 subs r3, r3, r2 | r3 -= r2;
0x00078432 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00078434 adds r3, 0xd | r3 += 0xd;
0x00078436 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x00078438 b.w 0x77a94 | goto label_6;
| label_82:
0x0007843c cmp r0, 0 |
0x0007843e it ge |
| if (r0 >= 0) {
0x00078440 movge r3, 0 | r3 = 0;
| goto label_102;
| }
| if (r0 >= 0) {
| label_102:
0x00078442 bge.w 0x77f84 | goto label_15;
| }
0x00078446 movs r3, 0x1e | r3 = 0x1e;
0x00078448 movs r2, 8 | r2 = 8;
0x0007844a b 0x77f6c | goto label_16;
| label_78:
0x0007844c ldr r2, [pc, 0x10c] |
0x0007844e ldr r3, [pc, 0xb0] | r3 = *(0x78502);
0x00078450 add r2, pc | r2 = 0xf09b0;
0x00078452 ldr r3, [r2, r3] | r3 = *(0xf09b0);
0x00078454 ldr r2, [r3] | r2 = *(0xf09b0);
0x00078456 ldr r3, [sp, 0x74] | r3 = var_74h;
0x00078458 eors r2, r3 | r2 ^= r3;
0x0007845a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007845e bne.w 0x78724 | goto label_43;
| }
0x00078462 ldr r1, [pc, 0xfc] |
0x00078464 add r1, pc | r1 = 0xf09ca;
0x00078466 b.w 0x779ba | goto label_18;
| label_70:
0x0007846a add.w r2, sb, r8 | r2 = sb + r8;
0x0007846e ldr r0, [sp, 0x38] | r0 = var_38h;
0x00078470 mov r1, r5 | r1 = r5;
0x00078472 bl 0x239b4 | r0 = fcn_000239b4 (r0, r1, r2);
0x00078476 mov r8, r0 | r8 = r0;
0x00078478 cmp r0, 0 |
| if (r0 != 0) {
0x0007847a bne.w 0x77e4c | goto label_19;
| }
0x0007847e ldrh r1, [r5, 0x32] | r1 = *((r5 + 0x32));
0x00078480 mov r4, r1 | r4 = r1;
0x00078482 b 0x78486 |
| while (r8 != r7) {
0x00078484 ldrh r1, [r5, 0x32] | r1 = *((r5 + 0x32));
0x00078486 mov r3, r8 | r3 = r8;
0x00078488 mov r2, r6 | r2 = r6;
0x0007848a mov r0, r5 | r0 = r5;
0x0007848c bl 0x18ec0 | r0 = fcn_00018ec0 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x00078490 cbnz r0, 0x784c0 |
0x00078492 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00078494 ldrsh.w r1, [r3, r8, lsl 1] | offset_10 = r8 << 1;
| r1 = *((r3 + offset_10));
0x00078498 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0007849a ldr.w r2, [r3, r8, lsl 2] | offset_11 = r8 << 2;
| r2 = *((r3 + offset_11));
0x0007849e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000784a0 strh.w r1, [r3, r4, lsl 1] | offset_12 = r4 << 1;
| *((r3 + offset_12)) = r1;
0x000784a4 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000784a6 str.w r2, [r3, r4, lsl 2] | __asm ("str.w r2, [r3, r4, lsl 2]");
0x000784aa ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000784ac ldrb.w r3, [r3, r8] | r3 = *((r3 + r8));
| if (r3 != 0) {
0x000784b0 cbz r3, 0x784be |
0x000784b2 ldrb.w r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x000784b6 orr r3, r3, 2 | r3 |= 2;
0x000784ba strb.w r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
| }
0x000784be adds r4, 1 | r4++;
| }
0x000784c0 add.w r8, r8, 1 | r8++;
0x000784c4 cmp r8, r7 |
0x000784c6 bne 0x78484 |
| }
0x000784c8 b 0x77d92 | goto label_20;
| label_85:
0x000784ca ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x000784cc cmp r3, 0 |
| if (r3 == 0) {
0x000784ce beq.w 0x78648 | goto label_103;
| }
| label_25:
0x000784d2 ldr r0, [sp, 0x28] | r0 = x;
0x000784d4 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000784d8 mov r6, r0 | r6 = r0;
0x000784da cmp r0, 0 |
| if (r0 != 0) {
0x000784dc bne.w 0x77faa | goto label_21;
| }
0x000784e0 b.w 0x77a94 | goto label_6;
| label_61:
0x000784e4 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000784e6 uxth r0, r7 | r0 = (int16_t) r7;
0x000784e8 mov r7, r0 | r7 = r0;
0x000784ea ldrb.w r1, [r3, 0xb2] | r1 = *((r3 + 0xb2));
0x000784ee ldr r3, [sp, 0x24] | r3 = var_24h;
0x000784f0 and r1, r1, 2 | r1 &= 2;
0x000784f4 ldr.w sb, [r3, 8] | sb = *((r3 + 8));
| label_36:
0x000784f8 strh r0, [r6, 0x32] | *((r6 + 0x32)) = r0;
0x000784fa b 0x77d22 | goto label_22;
| label_52:
0x00078564 ldr r2, [pc, 0x1e8] |
0x00078566 ldr r3, [pc, 0x1ec] | r3 = *(0x78756);
0x00078568 add r2, pc | r2 = 0xf0cbc;
0x0007856a ldr r3, [r2, r3] | r3 = *(0xf0cbc);
0x0007856c ldr r2, [r3] | r2 = *(0xf0cbc);
0x0007856e ldr r3, [sp, 0x74] | r3 = var_74h;
0x00078570 eors r2, r3 | r2 ^= r3;
0x00078572 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00078576 bne.w 0x78724 | goto label_43;
| }
0x0007857a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0007857c ldr r1, [pc, 0x1d8] |
0x0007857e ldr r0, [sp, 0x28] | r0 = x;
0x00078580 ldr r2, [r3] | r2 = *(r3);
0x00078582 add r1, pc | r1 = 0xf0cde;
0x00078584 add sp, 0x7c |
0x00078586 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007858a b.w 0x21598 | void (*0x21598)() ();
| label_51:
0x0007858e ldr r2, [pc, 0x1cc] |
0x00078590 ldr r3, [pc, 0x1c0] | r3 = *(0x78754);
0x00078592 add r2, pc | r2 = 0xf0cf4;
0x00078594 ldr r3, [r2, r3] | r3 = *(0xf0cf4);
0x00078596 ldr r2, [r3] | r2 = *(0xf0cf4);
0x00078598 ldr r3, [sp, 0x74] | r3 = var_74h;
0x0007859a eors r2, r3 | r2 ^= r3;
0x0007859c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000785a0 bne.w 0x78724 | goto label_43;
| }
0x000785a4 ldr r1, [pc, 0x1b8] |
0x000785a6 add r1, pc | r1 = 0xf0d0a;
0x000785a8 b.w 0x779ba | goto label_18;
| label_56:
0x000785ac ldr r2, [r4] | r2 = *(r4);
0x000785ae it lt |
| if (r2 >= r3) {
0x000785b0 ldrlt r3, [r4, 0x6c] | r3 = *((r4 + 0x6c));
| }
0x000785b2 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x000785b6 it lt |
| if (r2 >= r3) {
0x000785b8 addlt r3, r3, -1 | r3 += -1;
| }
0x000785bc cmp r2, 0 |
| if (r2 != 0) {
0x000785be bne 0x7865e | goto label_104;
| }
0x000785c0 ldr r2, [r4, 0x68] | r2 = *((r4 + 0x68));
0x000785c2 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000785c6 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_27:
0x000785ca movs r2, 2 | r2 = 2;
0x000785cc str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000785ce b.w 0x77be0 | goto label_23;
| label_87:
0x000785d2 ldr r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x000785d4 movs r2, 1 | r2 = 1;
0x000785d6 str r2, [r1, 0xc] | *((r1 + 0xc)) = r2;
0x000785d8 add r3, r2 | r3 += r2;
0x000785da str r3, [r1, 0x24] | *((r1 + 0x24)) = r3;
0x000785dc b.w 0x77a94 | goto label_6;
| label_99:
0x000785e0 ldrb.w r3, [sl, 0x57] | r3 = *((sl + 0x57));
0x000785e4 cmp r3, 0 |
| if (r3 != 0) {
0x000785e6 bne.w 0x77a94 | goto label_6;
| }
0x000785ea ldrb.w r3, [sl, 0x58] | r3 = *((sl + 0x58));
0x000785ee cmp r3, 0 |
| if (r3 != 0) {
0x000785f0 bne.w 0x77a94 | goto label_6;
| }
0x000785f4 ldr r2, [pc, 0x16c] |
0x000785f6 ldr r3, [pc, 0x15c] | r3 = *(0x78756);
0x000785f8 add r2, pc | r2 = 0xf0d60;
0x000785fa ldr r3, [r2, r3] | r3 = *(0xf0d60);
0x000785fc ldr r2, [r3] | r2 = *(0xf0d60);
0x000785fe ldr r3, [sp, 0x74] | r3 = var_74h;
0x00078600 eors r2, r3 | r2 ^= r3;
0x00078602 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00078606 bne.w 0x78724 | goto label_43;
| }
0x0007860a mov r0, sl | r0 = sl;
0x0007860c add sp, 0x7c |
0x0007860e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00078612 b.w 0x21644 | void (*0x21644)() ();
| label_62:
0x00078616 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00078618 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0007861a ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0007861c bic r3, r3, 0x80 | r3 = BIT_MASK (r3, 0x80);
0x00078620 str r3, [r2, 0x1c] | *((r2 + 0x1c)) = r3;
0x00078622 b 0x77e4c | goto label_19;
| label_67:
0x00078624 ldr r1, [r4] | r1 = *(r4);
0x00078626 it lt |
| if (r2 >= r3) {
0x00078628 ldrlt r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
| }
0x0007862a ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x0007862e it lt |
| if (r2 >= r3) {
0x00078630 addlt r2, r2, -1 | r2 += -1;
| }
| if (r1 != 0) {
0x00078634 cbnz r1, 0x78666 | goto label_105;
| }
0x00078636 ldr r1, [r4, 0x68] | r1 = *((r4 + 0x68));
0x00078638 add.w r2, r2, r2, lsl 2 | r2 += (r2 << 2);
0x0007863c add.w r2, r1, r2, lsl 2 | r2 = r1 + (r2 << 2);
| do {
0x00078640 movs r1, 8 | r1 = 8;
0x00078642 strb r1, [r2] | *(r2) = r1;
0x00078644 b.w 0x77d46 | goto label_24;
| label_103:
0x00078648 ldr r2, [sp, 0x28] | r2 = x;
0x0007864a ldr r3, [r2] | r3 = *(r2);
0x0007864c ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0007864e lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
0x00078650 itt pl |
| if (r0 < r3) {
0x00078652 movpl r3, 1 | r3 = 1;
| }
| if (r0 < r3) {
0x00078654 strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x00078656 b 0x784d2 | goto label_25;
| label_44:
0x00078658 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0007865a b.w 0x779d4 | goto label_26;
| label_104:
0x0007865e ldr r3, [pc, 0x108] |
0x00078660 add r3, pc | r3 = 0xf0dce;
0x00078662 adds r3, 4 | r3 += 4;
0x00078664 b 0x785ca | goto label_27;
| label_105:
0x00078666 ldr r2, [pc, 0x104] |
0x00078668 add r2, pc | r2 = 0xf0dda;
0x0007866a adds r2, 4 | r2 += 4;
0x0007866c b 0x78640 |
| } while (1);
| label_93:
0x0007866e movs r2, 7 | r2 = 7;
0x00078670 b 0x781c4 | goto label_28;
| label_98:
0x00078672 mov r8, fp | r8 = fp;
0x00078674 ldrd sl, r6, [sp, 0x48] | __asm ("ldrd sl, r6, [var_48h]");
0x00078678 ldr r7, [sp, 0x50] | r7 = var_50h;
0x0007867a ldr.w fp, [sp, 0x54] | fp = var_54h;
| label_97:
0x0007867e ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [var_44h]");
0x00078682 add.w r1, sb, r8 | r1 = sb + r8;
0x00078686 sub.w r0, r2, r8 | r0 = r2 - r8;
0x0007868a ldr r2, [pc, 0xe4] |
0x0007868c add r2, pc | r2 = 0xf0e02;
0x0007868e blx 0x8968 | fcn_00008968 ();
0x00078692 b.w 0x779fe | goto label_29;
| label_88:
0x00078696 ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x00078698 subs r3, 1 | r3--;
0x0007869a str r3, [r1, 0x18] | *((r1 + 0x18)) = r3;
0x0007869c cmp r3, 0 |
| if (r3 == 0) {
0x0007869e beq.w 0x78088 | goto label_30;
| }
0x000786a2 b 0x7808e | goto label_31;
| label_101:
0x000786a4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000786a6 ldr r3, [r3] | r3 = *(r3);
0x000786a8 b 0x7842a | goto label_32;
| label_89:
0x000786aa ldr r3, [pc, 0xc8] |
0x000786ac add r3, pc | r3 = 0xf0e26;
0x000786ae adds r3, 4 | r3 += 4;
0x000786b0 b 0x780e0 | goto label_33;
| label_95:
0x000786b2 ldr r3, [pc, 0xc4] |
0x000786b4 add r3, pc | r3 = 0xf0e32;
0x000786b6 str r3, [sp, 0x44] | var_44h = r3;
0x000786b8 ldr r3, [pc, 0xc0] |
0x000786ba add r3, pc | r3 = 0xf0e3a;
0x000786bc str r3, [sp, 0x3c] | var_3ch = r3;
0x000786be ldr r3, [pc, 0xc0] |
0x000786c0 add r3, pc | r3 = 0xf0e46;
0x000786c2 b 0x78208 | goto label_34;
| label_91:
0x000786c4 ldr r3, [pc, 0xbc] |
0x000786c6 add r3, pc | r3 = 0xf0e4e;
0x000786c8 adds r3, 4 | r3 += 4;
0x000786ca b 0x78174 | goto label_35;
| label_60:
0x000786cc movs r7, 1 | r7 = 1;
0x000786ce mov r0, r7 | r0 = r7;
0x000786d0 b 0x784f8 | goto label_36;
| label_75:
0x000786d2 mov.w r7, 0x8000 |
0x000786d6 movt r7, 0xffff | r7 = 0x-8000;
0x000786da b.w 0x77e6c | goto label_37;
| label_100:
0x000786de movs r3, 0x1e | r3 = 0x1e;
0x000786e0 b 0x77f6c | goto label_16;
| label_90:
0x000786e2 movs r3, 0 | r3 = 0;
0x000786e4 movs r1, 0xb | r1 = 0xb;
0x000786e6 mov r0, r6 | r0 = r6;
0x000786e8 str r3, [sp] | *(sp) = r3;
0x000786ea bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000786ee mov r4, r0 | r4 = r0;
0x000786f0 b 0x78110 | goto label_38;
| label_45:
0x000786f2 ldr r1, [pc, 0x94] |
0x000786f4 ldr.w r2, [r3, r8] | r2 = *((r3 + r8));
0x000786f8 ldr r0, [sp, 0x28] | r0 = x;
0x000786fa add r1, pc | r1 = 0xf0e88;
0x000786fc bl 0xa89e4 | fcn_000a89e4 (r0);
0x00078700 b.w 0x77a66 | goto label_39;
| label_92:
0x00078704 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00078706 ldr r0, [r3] | r0 = *(r3);
0x00078708 ldrb r2, [r0] | r2 = *(r0);
0x0007870a cmp r2, 0 |
| if (r2 != 0) {
0x0007870c bne.w 0x781da | goto label_40;
| }
0x00078710 ldr r3, [pc, 0x78] |
0x00078712 movs r2, 2 | r2 = 2;
0x00078714 add r3, pc | r3 = 0xf0ea4;
0x00078716 str r3, [sp, 0x44] | var_44h = r3;
0x00078718 ldr r3, [pc, 0x74] |
0x0007871a add r3, pc | r3 = 0xf0eae;
0x0007871c str r3, [sp, 0x3c] | var_3ch = r3;
0x0007871e ldr r3, [pc, 0x74] |
0x00078720 add r3, pc | r3 = 0xf0eba;
0x00078722 b 0x78208 | goto label_34;
| label_43:
0x00078724 blx 0x883c | fcn_0000883c ();
| label_94:
0x00078728 mov r3, r2 | r3 = r2;
0x0007872a b 0x781ec | goto label_41;
| label_96:
0x0007872c ldrb.w r3, [sl, 0x57] | r3 = *((sl + 0x57));
0x00078730 cmp r3, 0 |
| if (r3 != 0) {
0x00078732 bne.w 0x779fe | goto label_29;
| }
0x00078736 ldrb.w r3, [sl, 0x58] | r3 = *((sl + 0x58));
0x0007873a cmp r3, 0 |
| if (r3 != 0) {
0x0007873c bne.w 0x779fe | goto label_29;
| }
0x00078740 mov r0, sl | r0 = sl;
0x00078742 bl 0x21644 | fcn_00021644 (r0);
0x00078746 b.w 0x779fe | goto label_29;
| label_59:
0x0007874a movs r3, 0 | r3 = 0;
0x0007874c ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x0007874e udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x7b918 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.0007b918 () | void fcn_0007b918 (int16_t arg_150h, int16_t arg_154h, int16_t arg_158h, int16_t arg_210h, int16_t arg_370h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int32_t var_8h_2;
| int32_t var_ch_2;
| int8_t var_11h;
| int8_t var_18h_2;
| int8_t var_19h;
| int32_t var_7ch;
| int16_t var_cch;
| int16_t var_d8h;
| int16_t var_f8h;
| int32_t var_e8h;
| int16_t var_124h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007b918 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007b91c mov sb, r2 | sb = r2;
0x0007b91e ldr r2, [pc, 0x3f4] |
0x0007b920 mov sl, r3 | sl = r3;
0x0007b922 sub sp, 0x12c |
0x0007b924 mov r6, r0 | r6 = r0;
0x0007b926 ldr r3, [pc, 0x3f0] | r3 = *(0x7bd1a);
0x0007b928 add r0, sp, 0x18 | r0 += var_18h;
0x0007b92a add r2, pc | r2 = 0xf7644;
0x0007b92c str r1, [sp, 4] | var_4h = r1;
0x0007b92e movs r1, 0 | r1 = 0;
0x0007b930 ldr r5, [sp, 0x150] | r5 = *(arg_150h);
0x0007b932 ldr r3, [r2, r3] |
0x0007b934 movs r2, 0x94 | r2 = 0x94;
0x0007b936 ldr r4, [sp, 0x158] | r4 = *(arg_158h);
0x0007b938 add r7, sp, 0x14 | r7 += var_14h;
0x0007b93a ldr r3, [r3] | r3 = *(0xf7644);
0x0007b93c str r3, [sp, 0x124] | var_124h = r3;
0x0007b93e mov.w r3, 0 | r3 = 0;
0x0007b942 ldr r3, [sp, 0x154] | r3 = *(arg_154h);
0x0007b944 str r3, [sp, 8] | var_8h = r3;
0x0007b946 blx 0x839c | fcn_0000839c ();
0x0007b94a movs r2, 0x4c | r2 = 0x4c;
0x0007b94c movs r1, 0 | r1 = 0;
0x0007b94e add r0, sp, 0xd8 | r0 += var_d8h;
0x0007b950 blx 0x839c | fcn_0000839c ();
0x0007b954 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x0007b958 ldr.w r2, [r6, 0x108] | r2 = *((r6 + 0x108));
0x0007b95c str r5, [sp, 0xf8] | var_f8h = r5;
0x0007b95e str.w r7, [r6, 0x108] | __asm ("str.w r7, aav.0x000000ff");
0x0007b962 str r2, [sp, 0xcc] | var_cch = r2;
0x0007b964 str r6, [r7] | *(r7) = r6;
0x0007b966 cmp r3, 0 |
| if (r3 != 0) {
0x0007b968 bne.w 0x7bb20 | goto label_14;
| }
| label_4:
0x0007b96c tst.w sl, 1 |
| if ((sl & 1) != 0) {
0x0007b970 beq 0x7b988 |
0x0007b972 ldrb r3, [r7, 0x18] | r3 = var_18h_2;
0x0007b974 adds r3, 1 | r3++;
0x0007b976 strb r3, [r7, 0x18] | var_18h_2 = r3;
0x0007b978 ldr.w r3, [r6, 0x130] | r3 = *((r6 + 0x130));
0x0007b97c adds r3, 1 | r3++;
0x0007b97e str.w r3, [r6, 0x130] | __asm ("str.w r3, aav.0x000000ff");
0x0007b982 movs r3, 0 | r3 = 0;
0x0007b984 strh.w r3, [r6, 0x134] | *((r6 + 0x134)) = r3;
| }
0x0007b988 ldrb.w r5, [r6, 0x5f] | r5 = *((r6 + 0x5f));
0x0007b98c ubfx r3, sl, 2, 1 | r3 = (sl >> 2) & ((1 << 1) - 1);
0x0007b990 strb r3, [r7, 0x19] | var_19h = r3;
| if (r5 != 0) {
0x0007b992 cbnz r5, 0x7b9ec | goto label_15;
| }
0x0007b994 ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
0x0007b996 cmp r1, 0 |
| if (r1 <= 0) {
0x0007b998 ble 0x7b9ec | goto label_15;
| }
0x0007b99a mov fp, r5 |
0x0007b99c str r4, [sp, 0xc] | var_ch = r4;
| do {
0x0007b99e ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0007b9a0 lsl.w r8, fp, 4 | r8 = fp << 4;
0x0007b9a4 add r3, r8 | r3 += r8;
0x0007b9a6 ldr r5, [r3, 4] | r5 = *((r3 + 4));
| if (r5 != 0) {
0x0007b9a8 cbz r5, 0x7b9e2 |
0x0007b9aa ldrb r3, [r5, 9] | r3 = *((r5 + 9));
| if (r3 != 0) {
0x0007b9ac cbz r3, 0x7b9be |
0x0007b9ae ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0007b9b0 adds r3, 1 | r3++;
0x0007b9b2 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0007b9b4 ldrb r3, [r5, 0xa] | r3 = *((r5 + 0xa));
| if (r3 != 0) {
0x0007b9b6 cbnz r3, 0x7b9be | goto label_16;
| }
0x0007b9b8 mov r0, r5 | r0 = r5;
0x0007b9ba bl 0x12e84 | fcn_00012e84 (r0);
| }
| label_16:
0x0007b9be movs r2, 1 | r2 = 1;
0x0007b9c0 mov r0, r5 | r0 = r5;
0x0007b9c2 mov r1, r2 | r1 = r2;
0x0007b9c4 bl 0xa174 | fcn_0000a174 (r0, r1, r2);
0x0007b9c8 ldrb r2, [r5, 9] | r2 = *((r5 + 9));
0x0007b9ca mov r4, r0 | r4 = r0;
| if (r2 != 0) {
0x0007b9cc cbz r2, 0x7b9da |
0x0007b9ce ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0007b9d0 subs r2, 1 | r2--;
0x0007b9d2 str r2, [r5, 0xc] | *((r5 + 0xc)) = r2;
0x0007b9d4 cmp r2, 0 |
| if (r2 == 0) {
0x0007b9d6 beq.w 0x7bae4 | goto label_17;
| }
| }
0x0007b9da cmp r4, 0 |
| if (r4 != 0) {
0x0007b9dc bne.w 0x7baf0 | goto label_18;
| }
| label_0:
0x0007b9e0 ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
| }
0x0007b9e2 add.w fp, fp, 1 |
0x0007b9e6 cmp r1, fp |
0x0007b9e8 bgt 0x7b99e |
| } while (r1 > fp);
0x0007b9ea ldr r4, [sp, 0xc] | r4 = var_ch;
| label_15:
0x0007b9ec mov r0, r6 | r0 = r6;
0x0007b9ee bl 0x17278 | fcn_00017278 (r0);
0x0007b9f2 cmp.w sb, 0 |
| if (sb < 0) {
0x0007b9f6 blt.w 0x7bb16 | goto label_19;
| }
| if (sb != 0) {
0x0007b9fa bne.w 0x7bb08 | goto label_20;
| }
| label_2:
0x0007b9fe ldr r3, [r6, 0x7c] | r3 = *((r6 + 0x7c));
0x0007ba00 cmp sb, r3 |
| if (sb > r3) {
0x0007ba02 bgt.w 0x7bbc2 | goto label_21;
| }
0x0007ba06 ldr r3, [sp, 4] | r3 = var_4h;
0x0007ba08 cmp r3, 0 |
| if (r3 == 0) {
0x0007ba0a beq.w 0x7bbb8 | goto label_22;
| }
0x0007ba0e asr.w r3, sb, 0x1f | r3 = sb >> 0x1f;
0x0007ba12 adds.w r2, sb, 1 | r2 = sb + 1;
0x0007ba16 mov r0, r6 | r0 = r6;
0x0007ba18 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0007ba1c bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0007ba20 mov r5, r0 | r5 = r0;
0x0007ba22 cmp r0, 0 |
| if (r0 == 0) {
0x0007ba24 beq.w 0x7bbb8 | goto label_22;
| }
0x0007ba28 ldr.w r8, [sp, 4] | r8 = var_4h;
0x0007ba2c mov r2, sb | r2 = sb;
0x0007ba2e mov r1, r8 | r1 = r8;
0x0007ba30 blx 0x8610 | fcn_00008610 ();
0x0007ba34 movs r3, 0 | r3 = 0;
0x0007ba36 mov r1, r5 | r1 = r5;
0x0007ba38 strb.w r3, [r5, sb] | *((r5 + sb)) = r3;
0x0007ba3c mov r0, r7 | r0 = r7;
0x0007ba3e bl 0x7b3e0 | fcn_0007b3e0 (r0, r1, r2, r3, r4, r5, r6);
0x0007ba42 ldr.w r3, [r7, 0xe8] | r3 = var_e8h;
0x0007ba46 mov r1, r5 | r1 = r5;
0x0007ba48 mov r0, r6 | r0 = r6;
0x0007ba4a subs r3, r3, r5 | r3 -= r5;
0x0007ba4c add r3, r8 | r3 += r8;
0x0007ba4e str.w r3, [r7, 0xe8] | __asm ("str.w r3, [var_e8h]");
0x0007ba52 bl 0x16808 | fcn_00016808 (r0, r1);
| if (r4 != 0) {
| label_3:
0x0007ba56 cbz r4, 0x7ba5e |
0x0007ba58 ldr.w r3, [r7, 0xe8] | r3 = var_e8h;
0x0007ba5c str r3, [r4] | *(r4) = r3;
| }
0x0007ba5e ldrb.w r3, [r6, 0xb1] | r3 = *((r6 + 0xb1));
0x0007ba62 cmp r3, 0 |
| if (r3 == 0) {
0x0007ba64 beq 0x7bb60 | goto label_23;
| }
| label_6:
0x0007ba66 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x0007ba6a cmp r3, 0 |
| if (r3 == 0) {
0x0007ba6c beq 0x7bb2c | goto label_24;
| }
0x0007ba6e movs r2, 7 | r2 = 7;
0x0007ba70 movs r3, 0 | r3 = 0;
0x0007ba72 str r2, [r7, 0xc] | var_ch_2 = r2;
0x0007ba74 strb r3, [r7, 0x11] | var_11h = r3;
| label_8:
0x0007ba76 ldr r4, [r7, 8] | r4 = var_8h_2;
| if (r4 != 0) {
0x0007ba78 cbz r4, 0x7ba8a |
0x0007ba7a ldrb.w r3, [r4, 0x95] | r3 = *((r4 + 0x95));
0x0007ba7e cmp r3, 0 |
| if (r3 != 0) {
0x0007ba80 bne.w 0x7bbb0 | goto label_25;
| }
| label_7:
0x0007ba84 mov r0, r4 | r0 = r4;
0x0007ba86 bl 0x1c934 | fcn_0001c934 (r0);
| }
0x0007ba8a ldr r3, [r7, 4] | r3 = var_18h;
0x0007ba8c ldr.w r8, [r7, 0xc] | r8 = var_ch_2;
0x0007ba90 cmp r3, 0 |
| if (r3 == 0) {
0x0007ba92 beq.w 0x7bbda | goto label_26;
| }
0x0007ba96 ldr r2, [pc, 0x284] |
0x0007ba98 mov r1, r8 | r1 = r8;
0x0007ba9a mov r0, r6 | r0 = r6;
0x0007ba9c add r2, pc | r2 = 0xf77be;
0x0007ba9e bl 0x2b81c | fcn_0002b81c (r0, r1);
0x0007baa2 ldr r1, [r7, 4] | r1 = var_18h;
| if (r1 != 0) {
0x0007baa4 cbz r1, 0x7baac |
0x0007baa6 mov r0, r6 | r0 = r6;
0x0007baa8 bl 0x16808 | fcn_00016808 (r0, r1);
| }
| label_5:
0x0007baac ldr r1, [r7, 0x7c] | r1 = var_7ch;
| if (r1 == 0) {
0x0007baae cbz r1, 0x7bac0 | goto label_1;
| }
| do {
0x0007bab0 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0007bab2 mov r0, r6 | r0 = r6;
0x0007bab4 str r3, [r7, 0x7c] | var_7ch = r3;
0x0007bab6 bl 0x16808 | fcn_00016808 (r0, r1);
0x0007baba ldr r1, [r7, 0x7c] | r1 = var_7ch;
0x0007babc cmp r1, 0 |
0x0007babe bne 0x7bab0 |
| } while (r1 != 0);
| label_1:
0x0007bac0 mov r0, r7 | r0 = r7;
0x0007bac2 bl 0x1a6fc | fcn_0001a6fc (r0);
0x0007bac6 ldr r2, [pc, 0x258] |
0x0007bac8 ldr r3, [pc, 0x24c] | r3 = *(0x7bd18);
0x0007baca add r2, pc | r2 = 0xf77f0;
0x0007bacc ldr r3, [r2, r3] | r3 = *(0xf77f0);
0x0007bace ldr r2, [r3] | r2 = *(0xf77f0);
0x0007bad0 ldr r3, [sp, 0x124] | r3 = var_124h;
0x0007bad2 eors r2, r3 | r2 ^= r3;
0x0007bad4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007bad8 bne.w 0x7bd0e | goto label_27;
| }
0x0007badc mov r0, r8 | r0 = r8;
0x0007bade add sp, 0x12c |
0x0007bae0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_17:
0x0007bae4 mov r0, r5 | r0 = r5;
0x0007bae6 bl 0xa14c | fcn_0000a14c (r0);
0x0007baea cmp r4, 0 |
| if (r4 == 0) {
0x0007baec beq.w 0x7b9e0 | goto label_0;
| }
| label_18:
0x0007baf0 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x0007baf2 mov fp, r8 |
0x0007baf4 mov r0, r6 | r0 = r6;
0x0007baf6 mov r1, r4 | r1 = r4;
0x0007baf8 mov r8, r4 | r8 = r4;
0x0007bafa ldr.w r3, [r2, fp] | r3 = *((r2 + fp));
0x0007bafe ldr r2, [pc, 0x224] |
0x0007bb00 add r2, pc | r2 = 0xf782a;
0x0007bb02 bl 0x2b81c | fcn_0002b81c (r0, r1);
0x0007bb06 b 0x7bac0 | goto label_1;
| label_20:
0x0007bb08 ldr r3, [sp, 4] | r3 = var_4h;
0x0007bb0a add r3, sb | r3 += sb;
0x0007bb0c ldrb r3, [r3, -0x1] | r3 = *((r3 - 0x1));
0x0007bb10 cmp r3, 0 |
| if (r3 != 0) {
0x0007bb12 bne.w 0x7b9fe | goto label_2;
| }
| label_19:
0x0007bb16 ldr r1, [sp, 4] | r1 = var_4h;
0x0007bb18 mov r0, r7 | r0 = r7;
0x0007bb1a bl 0x7b3e0 | fcn_0007b3e0 (r0, r1, r2, r3, r4, r5, r6);
0x0007bb1e b 0x7ba56 | goto label_3;
| label_14:
0x0007bb20 ldr r1, [pc, 0x204] |
0x0007bb22 mov r0, r7 | r0 = r7;
0x0007bb24 add r1, pc | r1 = 0xf7850;
0x0007bb26 bl 0x21598 | fcn_00021598 (r0, r1);
0x0007bb2a b 0x7b96c | goto label_4;
| label_24:
0x0007bb2c ldr r3, [r7, 0xc] | r3 = var_ch_2;
0x0007bb2e cmp r3, 0 |
0x0007bb30 it ne |
| if (r3 != 0) {
0x0007bb32 cmpne r3, 0x65 | __asm ("cmpne r3, 0x65");
| }
| if (r3 != 0) {
0x0007bb34 bne 0x7bbf8 | goto label_28;
| }
0x0007bb36 ldr.w r0, [r6, 0x120] | r0 = *((r6 + 0x120));
0x0007bb3a ldr r3, [r7, 8] | r3 = var_8h_2;
0x0007bb3c ldr r2, [sp, 8] | r2 = var_8h;
0x0007bb3e vmov.i64 d16, 0xffffffff00000000 | __asm ("vmov.i64 d16, aav.0x000000ff");
0x0007bb42 str r3, [r2] | *(r2) = r3;
0x0007bb44 vstr d16, [r6, 0x40] | __asm ("vstr d16, [r6, 0x40]");
| if (r0 != 0) {
0x0007bb48 cbz r0, 0x7bb5a |
0x0007bb4a ldrh r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0007bb4c tst.w r3, 0x9000 |
0x0007bb50 itt eq |
| if ((r3 & 0x9000) != 0) {
0x0007bb52 moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x9000) == 0) {
0x0007bb54 strheq r3, [r0, 0x10] | __asm ("strheq r3, [r0, 0x10]");
| }
| if ((r3 & 0x9000) != 0) {
0x0007bb56 bne.w 0x7bd00 | goto label_29;
| }
| }
| label_12:
0x0007bb5a mov.w r8, 0 | r8 = 0;
0x0007bb5e b 0x7baac | goto label_5;
| label_23:
0x0007bb60 ldr r5, [r7, 8] | r5 = var_8h_2;
0x0007bb62 uxtb.w r2, sl | r2 = (int8_t) sl;
0x0007bb66 cmp r5, 0 |
| if (r5 == 0) {
0x0007bb68 beq.w 0x7ba66 | goto label_6;
| }
0x0007bb6c tst.w sl, 0x80 |
0x0007bb70 ldr.w r4, [r7, 0xe8] | r4 = var_e8h;
0x0007bb74 it eq |
| if ((sl & 0x80) != 0) {
0x0007bb76 streq r3, [r5, 0xd8] | *((r5 + 0xd8)) = r3;
| }
0x0007bb7a ldr r3, [sp, 4] | r3 = var_4h;
0x0007bb7c strb.w r2, [r5, 0x94] | *((r5 + 0x94)) = r2;
| if (r3 != 0) {
0x0007bb80 cbz r3, 0x7bba8 |
0x0007bb82 subs r4, r4, r3 | r4 -= r3;
0x0007bb84 ldr r0, [r5] | r0 = *(r5);
0x0007bb86 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0007bb88 adds r2, r4, 1 | r2 = r4 + 1;
0x0007bb8a adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0007bb8e bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0007bb92 mov r8, r0 | r8 = r0;
| if (r0 != 0) {
0x0007bb94 cbz r0, 0x7bba4 |
0x0007bb96 ldr r1, [sp, 4] | r1 = var_4h;
0x0007bb98 mov r2, r4 | r2 = r4;
0x0007bb9a blx 0x8610 | fcn_00008610 ();
0x0007bb9e movs r3, 0 | r3 = 0;
0x0007bba0 strb.w r3, [r8, r4] | *((r8 + r4)) = r3;
| }
0x0007bba4 str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h]");
| }
0x0007bba8 ldr r3, [sp, 4] | r3 = var_4h;
0x0007bbaa str.w r3, [r5, 0xc4] | __asm ("str.w r3, [r5, 0xc4]");
0x0007bbae b 0x7ba66 | goto label_6;
| label_25:
0x0007bbb0 mov r0, r4 | r0 = r4;
0x0007bbb2 bl 0x5e214 | fcn_0005e214 (r0);
0x0007bbb6 b 0x7ba84 | goto label_7;
| label_22:
0x0007bbb8 ldr r3, [sp, 4] | r3 = var_4h;
0x0007bbba add r3, sb | r3 += sb;
0x0007bbbc str.w r3, [r7, 0xe8] | __asm ("str.w r3, [var_e8h]");
0x0007bbc0 b 0x7ba56 | goto label_3;
| label_21:
0x0007bbc2 ldr r2, [pc, 0x168] |
0x0007bbc4 movs r1, 0x12 | r1 = 0x12;
0x0007bbc6 mov r0, r6 | r0 = r6;
0x0007bbc8 add r2, pc | r2 = 0xf78fa;
0x0007bbca bl 0x2b81c | fcn_0002b81c (r0, r1);
0x0007bbce movs r1, 0x12 | r1 = 0x12;
0x0007bbd0 mov r0, r6 | r0 = r6;
0x0007bbd2 bl 0x177a0 | r0 = fcn_000177a0 (r0, r1);
0x0007bbd6 mov r8, r0 | r8 = r0;
0x0007bbd8 b 0x7bac0 | goto label_1;
| label_26:
0x0007bbda str.w r8, [r6, 0x40] | __asm ("str.w r8, [r6, 0x40]");
0x0007bbde cmp.w r8, 0 |
| if (r8 == 0) {
0x0007bbe2 bne 0x7bbee |
0x0007bbe4 ldr.w r3, [r6, 0x120] | r3 = *((r6 + 0x120));
0x0007bbe8 cmp r3, 0 |
| if (r3 == 0) {
0x0007bbea beq.w 0x7bd06 | goto label_30;
| }
| }
0x0007bbee mov r1, r8 | r1 = r8;
0x0007bbf0 mov r0, r6 | r0 = r6;
0x0007bbf2 bl 0x1771c | fcn_0001771c (r0, r1);
0x0007bbf6 b 0x7baac | goto label_5;
| label_28:
0x0007bbf8 ldrb r3, [r7, 0x11] | r3 = var_11h;
0x0007bbfa cmp r3, 0 |
| if (r3 == 0) {
0x0007bbfc beq.w 0x7ba76 | goto label_8;
| }
0x0007bc00 ldrb.w r5, [r6, 0xb1] | r5 = *((r6 + 0xb1));
0x0007bc04 cmp r5, 0 |
| if (r5 != 0) {
0x0007bc06 bne.w 0x7ba76 | goto label_8;
| }
0x0007bc0a ldr.w r8, [r7] | r8 = *(r7);
0x0007bc0e ldr.w r2, [r8, 0x14] | r2 = *((r8 + 0x14));
0x0007bc12 cmp r2, 0 |
| if (r2 <= 0) {
0x0007bc14 ble.w 0x7ba76 | goto label_8;
| }
0x0007bc18 mov.w fp, 0x11 |
0x0007bc1c movw sl, 0xc0a | sl = 0xc0a;
0x0007bc20 strd r7, r6, [sp, 4] | __asm ("strd r7, r6, [var_4h]");
| do {
0x0007bc24 ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x0007bc28 lsls r7, r5, 4 | r7 = r5 << 4;
0x0007bc2a add r1, r7 | r1 += r7;
0x0007bc2c ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x0007bc2e cmp r4, 0 |
| if (r4 != 0) {
0x0007bc30 beq 0x7bc9c |
0x0007bc32 ldrb r2, [r4, 8] | r2 = *((r4 + 8));
0x0007bc34 cmp r2, 0 |
| if (r2 != 0) {
0x0007bc36 bne 0x7bca8 | goto label_31;
| }
0x0007bc38 mov r1, r2 | r1 = r2;
0x0007bc3a mov r0, r4 | r0 = r4;
0x0007bc3c bl 0x57c50 | r0 = fcn_00057c50 (r0, r1, r2, r3);
0x0007bc40 cmp r0, sl |
0x0007bc42 it ne |
| if (r0 != sl) {
0x0007bc44 cmpne r0, 7 | __asm ("cmpne r0, 7");
| }
| if (r0 == sl) {
0x0007bc46 beq 0x7bce4 | goto label_32;
| }
| if (r0 != 0) {
0x0007bc48 cbnz r0, 0x7bca2 | goto label_33;
| }
0x0007bc4a ldrb r2, [r4, 9] | r2 = *((r4 + 9));
0x0007bc4c movs r6, 1 | r6 = 1;
0x0007bc4e ldr.w sb, [r4, 4] | sb = *((r4 + 4));
| if (r2 == 0) {
0x0007bc52 cbz r2, 0x7bcb4 | goto label_34;
| }
| label_9:
0x0007bc54 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0007bc56 ldrb r0, [r4, 0xa] | r0 = *((r4 + 0xa));
0x0007bc58 adds r3, r2, 1 | r3 = r2 + 1;
0x0007bc5a str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| if (r0 != 0) {
0x0007bc5c cbnz r0, 0x7bcc0 | goto label_13;
| }
0x0007bc5e mov r0, r4 | r0 = r4;
0x0007bc60 bl 0x12e84 | fcn_00012e84 (r0);
0x0007bc64 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x0007bc68 ldr r2, [r2, 0x38] | r2 = *((r2 + 0x38));
0x0007bc6a ldr r1, [r2, 0x28] | r1 = *((r2 + 0x28));
0x0007bc6c ldrb r2, [r4, 9] | r2 = *((r4 + 9));
0x0007bc6e rev r1, r1 | r1 = SWAP32 (r1);
| if (r2 != 0) {
0x0007bc70 cbz r2, 0x7bc7a |
0x0007bc72 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0007bc74 subs r2, 1 | r2--;
0x0007bc76 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
| if (r2 == 0) {
0x0007bc78 cbz r2, 0x7bcd0 | goto label_35;
| }
| }
| label_10:
0x0007bc7a ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x0007bc7e add r2, r7 | r2 += r7;
0x0007bc80 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x0007bc82 ldr r3, [r3] | r3 = *(r3);
0x0007bc84 cmp r3, r1 |
| if (r3 != r1) {
0x0007bc86 beq 0x7bc96 |
0x0007bc88 mov r1, r5 | r1 = r5;
0x0007bc8a mov r0, r8 | r0 = r8;
0x0007bc8c bl 0x1ae30 | fcn_0001ae30 (r0, r1);
0x0007bc90 ldr r3, [sp, 4] | r3 = var_4h;
0x0007bc92 str.w fp, [r3, 0xc] | __asm ("str.w fp, [r3, 0xc]");
| }
| if (r6 != 0) {
0x0007bc96 cbnz r6, 0x7bcdc | goto label_36;
| }
| label_11:
0x0007bc98 ldr.w r2, [r8, 0x14] | r2 = *((r8 + 0x14));
| }
0x0007bc9c adds r5, 1 | r5++;
0x0007bc9e cmp r5, r2 |
0x0007bca0 blt 0x7bc24 |
| } while (r5 < r2);
| label_33:
0x0007bca2 ldrd r7, r6, [sp, 4] | __asm ("ldrd r7, r6, [var_4h]");
0x0007bca6 b 0x7ba76 | goto label_8;
| label_31:
0x0007bca8 ldrb r2, [r4, 9] | r2 = *((r4 + 9));
0x0007bcaa movs r6, 0 | r6 = 0;
0x0007bcac ldr.w sb, [r4, 4] | sb = *((r4 + 4));
0x0007bcb0 cmp r2, 0 |
| if (r2 != 0) {
0x0007bcb2 bne 0x7bc54 | goto label_9;
| }
| label_34:
0x0007bcb4 ldr.w r2, [sb, 0xc] | r2 = *((sb + 0xc));
0x0007bcb8 ldr r2, [r2, 0x38] | r2 = *((r2 + 0x38));
0x0007bcba ldr r1, [r2, 0x28] | r1 = *((r2 + 0x28));
0x0007bcbc rev r1, r1 | r1 = SWAP32 (r1);
0x0007bcbe b 0x7bc7a | goto label_10;
| label_13:
0x0007bcc0 ldr.w r1, [sb, 0xc] | r1 = *((sb + 0xc));
0x0007bcc4 ldr r1, [r1, 0x38] | r1 = *((r1 + 0x38));
0x0007bcc6 ldr r1, [r1, 0x28] | r1 = *((r1 + 0x28));
0x0007bcc8 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x0007bcca rev r1, r1 | r1 = SWAP32 (r1);
0x0007bccc cmp r2, 0 |
| if (r2 != 0) {
0x0007bcce bne 0x7bc7a | goto label_10;
| }
| label_35:
0x0007bcd0 mov r0, r4 | r0 = r4;
0x0007bcd2 str r1, [sp, 0xc] | var_ch = r1;
0x0007bcd4 bl 0xa14c | fcn_0000a14c (r0);
0x0007bcd8 ldr r1, [sp, 0xc] | r1 = var_ch;
0x0007bcda b 0x7bc7a | goto label_10;
| label_36:
0x0007bcdc mov r0, r4 | r0 = r4;
0x0007bcde bl 0x5ca84 | fcn_0005ca84 (r0, r1);
0x0007bce2 b 0x7bc98 | goto label_11;
| label_32:
0x0007bce4 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x0007bce8 ldrd r7, r6, [sp, 4] | __asm ("ldrd r7, r6, [var_4h]");
| if (r3 == 0) {
0x0007bcec cbnz r3, 0x7bcfa |
0x0007bcee ldrb.w r3, [r8, 0x58] | r3 = *((r8 + 0x58));
| if (r3 != 0) {
0x0007bcf2 cbnz r3, 0x7bcfa | goto label_37;
| }
0x0007bcf4 mov r0, r8 | r0 = r8;
0x0007bcf6 bl 0x21644 | fcn_00021644 (r0);
| }
| label_37:
0x0007bcfa movs r3, 7 | r3 = 7;
0x0007bcfc str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x0007bcfe b 0x7ba76 | goto label_8;
| label_29:
0x0007bd00 bl 0x16944 | fcn_00016944 (r0);
0x0007bd04 b 0x7bb5a | goto label_12;
| label_30:
0x0007bd06 mov.w r3, -1 | r3 = -1;
0x0007bd0a str r3, [r6, 0x44] | *((r6 + 0x44)) = r3;
0x0007bd0c b 0x7bb5a | goto label_12;
| label_27:
0x0007bd0e blx 0x883c | fcn_0000883c ();
0x0007bd12 nop |
| if (r3 <= 7) {
0x0007bd14 blo 0x7bdf4 | void (*0x7bdf4)() ();
| }
0x0007bd16 movs r4, r0 | r4 = r0;
0x0007bd18 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0007bd1a movs r0, r0 |
0x0007bd1c adr r0, 0x110 | r0 = 0x110;
0x0007bd1e movs r3, r0 | r3 = r0;
| if (r3 != r0) {
0x0007bd20 bne 0x7bcc0 | goto label_13;
| }
0x0007bd22 movs r4, r0 | r4 = r0;
0x0007bd24 ldr r6, [sp, 0x210] | r6 = *(arg_210h);
0x0007bd26 movs r3, r0 | r3 = r0;
0x0007bd28 strb r4, [r3, 3] | *((r3 + 3)) = r4;
0x0007bd2a movs r3, r0 | r3 = r0;
0x0007bd2c ldr r5, [sp, 0x370] | r5 = *(arg_370h);
0x0007bd2e movs r3, r0 | r3 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x7c710 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0007c710 () | void fcn_0007c710 (int16_t arg_140h, int16_t arg_158h, int16_t arg1, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_8h_2;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r2 = arg3;
0x0007c710 ldr r1, [pc, 0x1dc] |
0x0007c712 ldr r3, [pc, 0x1e0] | r3 = *(0x7c8f6);
0x0007c714 push.w {r4, r5, r6, r7, r8, lr} |
0x0007c718 sub sp, 0x18 |
0x0007c71a add r1, pc | r1 = 0xf900e;
0x0007c71c ldr r6, [r0] | r6 = *(r0);
0x0007c71e ldr r3, [r1, r3] |
0x0007c720 ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x0007c722 ldr r3, [r3] | r3 = *(0xf900e);
0x0007c724 str r3, [sp, 0x14] | var_14h = r3;
0x0007c726 mov.w r3, 0 | r3 = 0;
0x0007c72a ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0007c72c orr r3, r3, 0x40 | r3 |= 0x40;
0x0007c730 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
| if (r2 == 0) {
0x0007c732 cbz r2, 0x7c774 | goto label_0;
| }
0x0007c734 ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x0007c736 mov r4, r0 | r4 = r0;
0x0007c738 mov r5, r2 | r5 = r2;
0x0007c73a adds r3, 1 | r3++;
0x0007c73c str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x0007c73e ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x0007c742 cmp r3, 0 |
| if (r3 != 0) {
0x0007c744 bne 0x7c7e6 | goto label_8;
| }
0x0007c746 ldr.w r8, [r2, 0xc] | r8 = *((r2 + 0xc));
0x0007c74a cmp.w r8, 0 |
| if (r8 == 0) {
0x0007c74e beq 0x7c76a | goto label_9;
| }
0x0007c750 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
| if (r3 == 0) {
0x0007c752 cbz r3, 0x7c792 | goto label_10;
| }
0x0007c754 ldr r2, [pc, 0x1a0] |
0x0007c756 ldrb r0, [r3] | r0 = *(r3);
0x0007c758 add r2, pc | r2 = 0xf9054;
0x0007c75a adds r1, r2, r0 | r1 = r2 + r0;
0x0007c75c ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x0007c760 cmp r1, 0x63 |
| if (r1 == 0x63) {
0x0007c762 beq 0x7c7f2 | goto label_11;
| }
| label_2:
0x0007c764 ldr r1, [r5, 4] | r1 = *((r5 + 4));
| if (r1 == 0) {
0x0007c766 cbz r1, 0x7c76a | goto label_9;
| }
| if (r0 == 0) {
0x0007c768 cbz r0, 0x7c798 | goto label_12;
| }
| do {
| label_9:
0x0007c76a movs r2, 0 | r2 = 0;
0x0007c76c mov r1, r5 | r1 = r5;
0x0007c76e mov r0, r4 | r0 = r4;
0x0007c770 bl 0x27a4c | fcn_00027a4c (r0, r1, r2);
| label_0:
0x0007c774 movs r0, 0 | r0 = 0;
| label_1:
0x0007c776 ldr r2, [pc, 0x184] |
0x0007c778 ldr r3, [pc, 0x178] | r3 = *(0x7c8f4);
0x0007c77a add r2, pc | r2 = 0xf907c;
0x0007c77c ldr r3, [r2, r3] | r3 = *(0xf907c);
0x0007c77e ldr r2, [r3] | r2 = *(0xf907c);
0x0007c780 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0007c782 eors r2, r3 | r2 ^= r3;
0x0007c784 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007c788 bne.w 0x7c8ea | goto label_13;
| }
0x0007c78c add sp, 0x18 |
0x0007c78e pop.w {r4, r5, r6, r7, r8, pc} |
| label_10:
0x0007c792 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0007c794 cmp r1, 0 |
0x0007c796 beq 0x7c76a |
| } while (r1 == 0);
| label_12:
0x0007c798 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0007c79a lsls r7, r7, 4 | r7 <<= 4;
0x0007c79c mov r0, r6 | r0 = r6;
0x0007c79e ldr r2, [r3, r7] | r2 = *((r3 + r7));
0x0007c7a0 bl 0x1cadc | r0 = fcn_0001cadc (r0, r1, r2, r3);
0x0007c7a4 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x0007c7a6 cbz r0, 0x7c7d8 | goto label_14;
| }
0x0007c7a8 add.w r1, r0, 0x2c | r1 = r0 + 0x2c;
0x0007c7ac mov r0, r8 | r0 = r8;
0x0007c7ae bl 0x96cc | r0 = fcn_000096cc (r0, r1);
| if (r0 != 0) {
0x0007c7b2 cbz r0, 0x7c7c0 |
0x0007c7b4 ldr r1, [r6, 0x2c] | r1 = *((r6 + 0x2c));
0x0007c7b6 cmp r1, 1 |
| if (r1 < 1) {
0x0007c7b8 bls 0x7c7c0 | goto label_4;
| }
0x0007c7ba ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0007c7bc cmp r1, r3 |
| if (r1 < r3) {
0x0007c7be bls 0x7c890 | goto label_15;
| }
| }
| label_4:
0x0007c7c0 ldr r3, [pc, 0x13c] |
0x0007c7c2 add r3, pc | r3 = 0xf90c6;
0x0007c7c4 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x0007c7c6 cmp r3, 0 |
| if (r3 == 0) {
0x0007c7c8 beq 0x7c774 | goto label_0;
| }
0x0007c7ca ldr r2, [pc, 0x138] |
0x0007c7cc mov r1, r5 | r1 = r5;
0x0007c7ce mov r0, r4 | r0 = r4;
0x0007c7d0 add r2, pc | r2 = 0xf90da;
0x0007c7d2 bl 0x27a4c | fcn_00027a4c (r0, r1, r2);
0x0007c7d6 b 0x7c774 | goto label_0;
| label_14:
0x0007c7d8 ldr r2, [pc, 0x12c] |
0x0007c7da mov r1, r5 | r1 = r5;
0x0007c7dc mov r0, r4 | r0 = r4;
0x0007c7de add r2, pc | r2 = 0xf90ea;
0x0007c7e0 bl 0x27a4c | fcn_00027a4c (r0, r1, r2);
0x0007c7e4 b 0x7c774 | goto label_0;
| label_8:
0x0007c7e6 movs r2, 0 | r2 = 0;
0x0007c7e8 mov r1, r5 | r1 = r5;
0x0007c7ea bl 0x27a4c | fcn_00027a4c (r0, r1, r2);
0x0007c7ee movs r0, 1 | r0 = 1;
0x0007c7f0 b 0x7c776 | goto label_1;
| label_11:
0x0007c7f2 ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x0007c7f4 add r2, r3 | r2 += r3;
0x0007c7f6 ldrb.w r3, [r2, 0x140] | r3 = *((r2 + 0x140));
0x0007c7fa cmp r3, 0x72 |
| if (r3 != 0x72) {
0x0007c7fc bne 0x7c764 | goto label_2;
| }
0x0007c7fe mov r0, r8 | r0 = r8;
0x0007c800 add.w r1, r6, 0xac | r1 = r6 + 0xac;
0x0007c804 ldrb.w r8, [r6, 0xb0] | r8 = *((r6 + 0xb0));
0x0007c808 strb.w r7, [r6, 0xb0] | *((r6 + 0xb0)) = r7;
0x0007c80c bl 0x96cc | r0 = fcn_000096cc (r0, r1);
0x0007c810 cmp r0, 0 |
| if (r0 == 0) {
0x0007c812 beq 0x7c8ba | goto label_16;
| }
0x0007c814 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0007c816 ldr.w r2, [r6, 0xac] | r2 = *((r6 + 0xac));
0x0007c81a cmp r3, 0 |
0x0007c81c it ne |
| if (r3 != 0) {
0x0007c81e cmpne r2, r3 | __asm ("cmpne r2, r3");
| }
| if (r3 > 0) {
0x0007c820 bhi 0x7c8ba | goto label_16;
| }
| label_5:
0x0007c822 ldrb.w r3, [r6, 0xb2] | r3 = *((r6 + 0xb2));
0x0007c826 add r2, sp, 0x10 | r2 += var_10h;
0x0007c828 str.w r5, [r6, 0xb4] | __asm ("str.w r5, [r6, 0xb4]");
0x0007c82c mov r0, r6 | r0 = r6;
0x0007c82e bfc r3, 0, 1 | value_0 = BIT_MASK (1, );
| value_0 = ~value_0;
| r3 &= value_0;
0x0007c832 strb.w r3, [r6, 0xb2] | *((r6 + 0xb2)) = r3;
0x0007c836 movs r3, 0 | r3 = 0;
0x0007c838 str r3, [sp, 8] | var_8h_2 = r3;
0x0007c83a str r3, [sp] | *(sp) = r3;
0x0007c83c str r2, [sp, 4] | var_4h = r2;
0x0007c83e mov.w r2, -1 | r2 = -1;
| label_7:
0x0007c840 adds r2, 0xff | r2 += 0xff;
0x0007c842 ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x0007c844 str r3, [sp, 0x10] | var_10h = r3;
0x0007c846 bl 0x7b918 | fcn_0007b918 (r0, r1, r2, r3, r4, r5, r6);
0x0007c84a ldr r3, [r6, 0x40] | r3 = *((r6 + 0x40));
0x0007c84c strb.w r8, [r6, 0xb0] | *((r6 + 0xb0)) = r8;
| if (r3 != 0) {
0x0007c850 cbz r3, 0x7c880 |
0x0007c852 ldrb.w r2, [r6, 0xb2] | r2 = *((r6 + 0xb2));
0x0007c856 lsls r2, r2, 0x1f | r2 <<= 0x1f;
| if (r2 < r2) {
0x0007c858 bmi 0x7c880 | goto label_6;
| }
0x0007c85a ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0007c85c cmp r2, r3 |
0x0007c85e it lt |
| if (r2 >= r3) {
0x0007c860 strlt r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| }
0x0007c862 cmp r3, 7 |
| if (r3 == 7) {
0x0007c864 beq 0x7c8d2 | goto label_17;
| }
0x0007c866 cmp r3, 9 |
| if (r3 == 9) {
0x0007c868 beq 0x7c880 | goto label_6;
| }
0x0007c86a uxtb r3, r3 | r3 = (int8_t) r3;
0x0007c86c cmp r3, 6 |
| if (r3 == 6) {
0x0007c86e beq 0x7c880 | goto label_6;
| }
0x0007c870 mov r0, r6 | r0 = r6;
0x0007c872 blx 0x88a0 | fcn_000088a0 ();
0x0007c876 mov r1, r5 | r1 = r5;
0x0007c878 mov r2, r0 | r2 = r0;
0x0007c87a mov r0, r4 | r0 = r4;
0x0007c87c bl 0x27a4c | fcn_00027a4c (r0, r1, r2);
| }
| label_6:
0x0007c880 ldr r3, [pc, 0x88] |
0x0007c882 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0007c884 add r3, pc | r3 = 0xf9194;
0x0007c886 str.w r3, [r6, 0xb4] | __asm ("str.w r3, [r6, 0xb4]");
0x0007c88a blx 0x8580 | fcn_00008580 ();
0x0007c88e b 0x7c774 | goto label_0;
| label_15:
0x0007c890 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0007c892 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| if (r3 != 0) {
0x0007c894 cbnz r3, 0x7c8a0 | goto label_18;
| }
0x0007c896 b 0x7c774 | goto label_0;
| label_3:
0x0007c898 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0007c89a cmp r3, 0 |
| if (r3 == 0) {
0x0007c89c beq.w 0x7c774 | goto label_0;
| }
| label_18:
0x0007c8a0 ldr r2, [r3, 0x2c] | r2 = *((r3 + 0x2c));
0x0007c8a2 cmp r6, r3 |
0x0007c8a4 sub.w r2, r2, r1 | r2 -= r1;
0x0007c8a8 clz r2, r2 | r2 &= r2;
0x0007c8ac lsr.w r2, r2, 5 | r2 >>= 5;
0x0007c8b0 it eq |
| if (r6 != r3) {
0x0007c8b2 moveq r2, 0 | r2 = 0;
| }
0x0007c8b4 cmp r2, 0 |
| if (r2 == 0) {
0x0007c8b6 beq 0x7c898 | goto label_3;
| }
0x0007c8b8 b 0x7c7c0 | goto label_4;
| label_16:
0x0007c8ba ldr r3, [pc, 0x54] |
0x0007c8bc add r3, pc | r3 = 0xf91d2;
0x0007c8be ldrb r3, [r3, 9] | r3 = *((r3 + 9));
0x0007c8c0 cmp r3, 0 |
| if (r3 == 0) {
0x0007c8c2 beq 0x7c822 | goto label_5;
| }
0x0007c8c4 ldr r2, [pc, 0x4c] |
0x0007c8c6 mov r1, r5 | r1 = r5;
0x0007c8c8 mov r0, r4 | r0 = r4;
0x0007c8ca add r2, pc | r2 = 0xf91e2;
0x0007c8cc bl 0x27a4c | fcn_00027a4c (r0, r1, r2);
0x0007c8d0 b 0x7c822 | goto label_5;
| label_17:
0x0007c8d2 ldrb.w r3, [r6, 0x57] | r3 = *((r6 + 0x57));
0x0007c8d6 cmp r3, 0 |
| if (r3 != 0) {
0x0007c8d8 bne 0x7c880 | goto label_6;
| }
0x0007c8da ldrb.w r3, [r6, 0x58] | r3 = *((r6 + 0x58));
0x0007c8de cmp r3, 0 |
| if (r3 != 0) {
0x0007c8e0 bne 0x7c880 | goto label_6;
| }
0x0007c8e2 mov r0, r6 | r0 = r6;
0x0007c8e4 bl 0x21644 | fcn_00021644 (r0);
0x0007c8e8 b 0x7c880 | goto label_6;
| label_13:
0x0007c8ea blx 0x883c | fcn_0000883c ();
0x0007c8ee nop |
0x0007c8f0 stm r5!, {r1, r2, r3, r4, r5, r6} | *(r5!) = r1;
| *((r5! + 4)) = r2;
| *((r5! + 8)) = r3;
| *((r5! + 12)) = r4;
| *((r5! + 16)) = r5;
| *((r5! + 20)) = r6;
0x0007c8f2 movs r4, r0 | r4 = r0;
0x0007c8f4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0007c8f6 movs r0, r0 |
0x0007c8f8 add.w r0, ip, 0x830000 | r0 = ip + 0x830000;
0x0007c8fc stm r5!, {r1, r2, r3, r4} | *(r5!) = r1;
| *((r5! + 4)) = r2;
| *((r5! + 8)) = r3;
| *((r5! + 12)) = r4;
0x0007c8fe movs r4, r0 | r4 = r0;
0x0007c900 ldm r0!, {r1, r6} | r1 = *(r0!);
| r6 = *((r0! + 4));
0x0007c902 movs r4, r0 | r4 = r0;
0x0007c904 str r3, [sp, 0x140] | *(arg_140h) = r3;
0x0007c906 movs r3, r0 | r3 = r0;
0x0007c908 str r3, [sp, 0x158] | *(arg_158h) = r3;
0x0007c90a movs r3, r0 | r3 = r0;
| if (r3 > r0) {
0x0007c90c bgt 0x7c840 | goto label_7;
| }
0x0007c90e movs r4, r0 | r4 = r0;
0x0007c910 stm r7!, {r3, r6} | *(r7!) = r3;
| *((r7! + 4)) = r6;
0x0007c912 movs r4, r0 | r4 = r0;
0x0007c914 str r2, [sp, 0x158] | *(arg_158h) = r2;
0x0007c916 movs r3, r0 | r3 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x7c918 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0007c918 () | void fcn_0007c918 (int16_t arg_170h, int16_t arg_310h, int16_t arg_328h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h_2;
| int16_t var_14h_2;
| int16_t var_18h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_64h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0007c918 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0007c91c mov r4, r0 | r4 = r0;
0x0007c91e ldr r6, [r0, 0x18] | r6 = *(var_0hx18);
0x0007c920 mov r5, r1 | r5 = r1;
0x0007c922 mov r7, r2 | r7 = r2;
0x0007c924 sub sp, 0x6c |
0x0007c926 ldr.w r0, [pc, 0x45c] | r0 = *(0x0007cd84);
0x0007c92a ldr.w r1, [pc, 0x45c] |
0x0007c92e orn r6, r6, 0x40 | r6 |= 0x40;
| r6 = ~r6;
0x0007c932 ldr.w r2, [pc, 0x458] | r2 = *(0x0007cd8c);
0x0007c936 add r0, pc | r0 += pc;
0x0007c938 ldr r1, [r0, r1] | r1 = *((r0 + r1));
0x0007c93a add r2, pc | r2 += pc;
0x0007c93c ldr r1, [r1] | r1 = *(0x7cd8a);
0x0007c93e str r1, [sp, 0x64] | var_64h = r1;
0x0007c940 mov.w r1, 0 | r1 = 0;
0x0007c944 str r2, [sp, 0x48] | var_48h = r2;
0x0007c946 movs r2, 1 | r2 = 1;
0x0007c948 cmp r5, r2 |
0x0007c94a strb.w r2, [r4, 0xb1] | *((r4 + 0xb1)) = r2;
| if (r5 == r2) {
0x0007c94e beq.w 0x7caa6 | goto label_21;
| }
0x0007c952 ldr.w sl, [pc, 0x43c] | sl = *(0x0007cd90);
0x0007c956 add sl, pc | sl += pc;
| label_0:
0x0007c958 str r3, [sp, 0x28] | var_28h = r3;
0x0007c95a add r2, sp, 0x4c | r2 += var_4ch;
0x0007c95c ldr.w r3, [pc, 0x434] |
0x0007c960 movs r1, 5 | r1 = 5;
0x0007c962 vdup.32 d16, sl | __asm ("vdup.32 d16, sl");
0x0007c966 str r4, [sp, 0x18] | var_18h = r4;
0x0007c968 add r3, pc | r3 = 0xf9700;
0x0007c96a vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0007c96e str r3, [sp, 0x54] | var_54h = r3;
0x0007c970 add r2, sp, 0x18 | r2 += var_18h;
0x0007c972 ldr.w r3, [pc, 0x424] |
0x0007c976 mov r0, r2 | r0 = r2;
0x0007c978 str r2, [sp, 8] | var_8h = r2;
0x0007c97a add r2, sp, 0x48 | r2 += var_48h;
0x0007c97c strd r7, r5, [sp, 0x1c] | __asm ("strd r7, r5, [sp, 0x1c]");
0x0007c980 add r3, pc | r3 = 0xf971e;
0x0007c982 str r3, [sp, 0x58] | var_58h = r3;
0x0007c984 movs r3, 0 | r3 = 0;
0x0007c986 str r3, [sp, 0x5c] | var_5ch = r3;
0x0007c988 str r3, [sp, 0x24] | var_24h = r3;
0x0007c98a strd r3, r3, [sp, 0x2c] | __asm ("strd r3, r3, [sp, 0x2c]");
0x0007c98e bl 0x7c710 | fcn_0007c710 (r0, r1, r2, r3);
0x0007c992 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0007c994 ldr.w r8, [sp, 0x24] | r8 = var_24h;
0x0007c998 ands r3, r6 | r3 &= r6;
0x0007c99a str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0007c99c cmp.w r8, 0 |
| if (r8 != 0) {
0x0007c9a0 bne 0x7ca6a | goto label_1;
| }
0x0007c9a2 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0007c9a4 lsls r2, r5, 4 | r2 = r5 << 4;
0x0007c9a6 str r2, [sp, 0xc] | var_ch = r2;
0x0007c9a8 adds r6, r3, r2 | r6 = r3 + r2;
0x0007c9aa ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007c9ac cmp r0, 0 |
| if (r0 == 0) {
0x0007c9ae beq.w 0x7cc92 | goto label_22;
| }
0x0007c9b2 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
| if (r3 != 0) {
0x0007c9b4 cbz r3, 0x7c9c4 |
0x0007c9b6 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0007c9b8 adds r3, 1 | r3++;
0x0007c9ba str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0007c9bc ldrb r3, [r0, 0xa] | r3 = *((r0 + 0xa));
0x0007c9be cmp r3, 0 |
| if (r3 == 0) {
0x0007c9c0 beq.w 0x7cba8 | goto label_23;
| }
| }
| label_5:
0x0007c9c4 ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x0007c9c6 cmp r3, 0 |
| if (r3 != 0) {
0x0007c9c8 bne.w 0x7cba2 | goto label_24;
| }
| label_4:
0x0007c9cc movs r2, 0 | r2 = 0;
0x0007c9ce mov r1, r2 | r1 = r2;
0x0007c9d0 bl 0x57c50 | r0 = fcn_00057c50 (r0, r1, r2, r3);
0x0007c9d4 mov r3, r0 | r3 = r0;
0x0007c9d6 cmp r0, 0 |
| if (r0 != 0) {
0x0007c9d8 bne.w 0x7ccf2 | goto label_25;
| }
0x0007c9dc ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007c9de movs r3, 1 | r3 = 1;
0x0007c9e0 str r3, [sp, 0x10] | var_10h_2 = r3;
| label_3:
0x0007c9e2 add r2, sp, 0x34 | r2 += var_34h;
0x0007c9e4 str r4, [sp, 0x14] | var_14h_2 = r4;
0x0007c9e6 mov.w sb, 0 | sb = 0;
0x0007c9ea mov fp, r2 |
0x0007c9ec mov r4, r2 | r4 = r2;
0x0007c9ee b 0x7c9f2 |
| while (sb != 5) {
0x0007c9f0 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007c9f2 add.w sb, sb, 1 | sb++;
0x0007c9f6 mov r2, r4 | r2 = r4;
0x0007c9f8 mov r1, sb | r1 = sb;
0x0007c9fa adds r4, 4 | r4 += 4;
0x0007c9fc bl 0x19c74 | fcn_00019c74 (r0, r1, r2);
0x0007ca00 cmp.w sb, 5 |
0x0007ca04 bne 0x7c9f0 |
| }
0x0007ca06 ldr r4, [sp, 0x14] | r4 = var_14h_2;
0x0007ca08 movs r1, 0 | r1 = 0;
0x0007ca0a ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0007ca0c lsls r3, r3, 6 | r3 <<= 6;
| if (r3 < r3) {
0x0007ca0e bmi 0x7caae | goto label_26;
| }
0x0007ca10 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0007ca12 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0007ca14 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0007ca16 str r1, [r3] | *(r3) = r1;
0x0007ca18 cmp r2, 0 |
| if (r2 == 0) {
0x0007ca1a beq 0x7cabc | goto label_27;
| }
0x0007ca1c cmp r5, 0 |
| if (r5 == 0) {
0x0007ca1e beq.w 0x7cc0c | goto label_28;
| }
| label_9:
0x0007ca22 ldrb.w r1, [r4, 0x54] | r1 = *((r4 + 0x54));
0x0007ca26 and r2, r2, 3 | r2 &= 3;
0x0007ca2a cmp r2, r1 |
| if (r2 == r1) {
0x0007ca2c beq 0x7cac0 | goto label_10;
| }
0x0007ca2e ldr r1, [pc, 0x36c] |
0x0007ca30 add r1, pc | r1 = 0xf97d2;
| label_12:
0x0007ca32 mov r0, r4 | r0 = r4;
0x0007ca34 bl 0x22990 | fcn_00022990 (r0, r1);
0x0007ca38 ldr r1, [r7] | r1 = *(r7);
0x0007ca3a mov sb, r0 | sb = r0;
| if (r1 != 0) {
0x0007ca3c cbz r1, 0x7ca44 |
0x0007ca3e mov r0, r4 | r0 = r4;
0x0007ca40 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x0007ca44 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0007ca46 str.w sb, [r7] | __asm ("str.w sb, [r7]");
0x0007ca4a cmp r3, 0 |
| if (r3 != 0) {
0x0007ca4c bne.w 0x7cd46 | goto label_29;
| }
0x0007ca50 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007ca52 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
0x0007ca54 cmp r3, 0 |
| if (r3 == 0) {
0x0007ca56 beq.w 0x7cd5a | goto label_30;
| }
0x0007ca5a ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0007ca5c subs r3, 1 | r3--;
0x0007ca5e str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0007ca60 cmp r3, 0 |
| if (r3 == 0) {
0x0007ca62 beq.w 0x7cd76 | goto label_31;
| }
0x0007ca64 strh r0, [r1, 0xc] | *((r1 + 0xc)) = r0;
0x0007ca66 mov.w r8, 1 | r8 = 1;
| label_1:
0x0007ca6a movw r3, 0xc0a | r3 = 0xc0a;
0x0007ca6e cmp r8, r3 |
0x0007ca70 it ne |
| if (r8 != r3) {
0x0007ca72 cmpne r8, 7 | __asm ("cmpne r8, 7");
| }
| if (r8 == r3) {
0x0007ca76 beq.w 0x7cca2 | goto label_32;
| }
| label_15:
0x0007ca7a mov r1, r5 | r1 = r5;
0x0007ca7c mov r0, r4 | r0 = r4;
0x0007ca7e bl 0x1ae30 | fcn_0001ae30 (r0, r1);
| do {
| label_7:
0x0007ca82 movs r3, 0 | r3 = 0;
0x0007ca84 ldr r2, [pc, 0x318] |
0x0007ca86 strb.w r3, [r4, 0xb1] | *((r4 + 0xb1)) = r3;
0x0007ca8a ldr r3, [pc, 0x2fc] | r3 = *(0x7cd8a);
0x0007ca8c add r2, pc | r2 = 0xf9830;
0x0007ca8e ldr r3, [r2, r3] | r3 = *(0xf9830);
0x0007ca90 ldr r2, [r3] | r2 = *(0xf9830);
0x0007ca92 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0007ca94 eors r2, r3 | r2 ^= r3;
0x0007ca96 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0007ca9a bne.w 0x7cd80 | goto label_33;
| }
0x0007ca9e mov r0, r8 | r0 = r8;
0x0007caa0 add sp, 0x6c |
0x0007caa2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_21:
0x0007caa6 ldr.w sl, [pc, 0x2fc] | sl = *(0x0007cda4);
0x0007caaa add sl, pc | sl += pc;
0x0007caac b 0x7c958 | goto label_0;
| label_26:
0x0007caae ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0007cab0 str r1, [sp, 0x34] | var_34h = r1;
0x0007cab2 strd r1, r1, [fp, 4] | __asm ("strd r1, r1, [fp, 4]");
0x0007cab6 strd r1, r1, [fp, 0xc] | __asm ("strd r1, r1, [fp, 0xc]");
0x0007caba str r1, [r3] | *(r3) = r1;
| label_27:
0x0007cabc ldrb.w r1, [r4, 0x54] | r1 = *((r4 + 0x54));
| label_10:
0x0007cac0 ldr r2, [r3, 0x50] | r2 = *((r3 + 0x50));
0x0007cac2 strb.w r1, [r3, 0x4d] | *((r3 + 0x4d)) = r1;
| if (r2 == 0) {
0x0007cac6 cbnz r2, 0x7cae4 |
0x0007cac8 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0007caca cmp r1, 0 |
| if (r1 >= 0) {
0x0007cacc bge.w 0x7cc3c | goto label_34;
| }
0x0007cad0 cmp.w r1, -0x80000000 |
| if (r1 == -0x80000000) {
0x0007cad4 beq.w 0x7cd66 | goto label_35;
| }
0x0007cad8 rsbs r1, r1, 0 | r1 -= ;
| label_11:
0x0007cada str r1, [r3, 0x50] | *((r3 + 0x50)) = r1;
0x0007cadc ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007cade bl 0x19cc8 | fcn_00019cc8 (r0, r1);
0x0007cae2 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| }
0x0007cae4 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0007cae6 uxtb r2, r1 | r2 = (int8_t) r1;
0x0007cae8 strb.w r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
0x0007caec cmp r2, 0 |
| if (r2 == 0) {
0x0007caee beq 0x7cb9a | goto label_36;
| }
0x0007caf0 cmp r2, 4 |
| if (r2 > 4) {
0x0007caf2 bhi.w 0x7cc4a | goto label_37;
| }
| label_2:
0x0007caf6 clz r3, r5 | r3 &= r5;
0x0007cafa cmp r1, 3 |
0x0007cafc lsr.w r3, r3, 5 | r3 >>= 5;
0x0007cb00 it le |
| if (r1 > 3) {
0x0007cb02 movle r3, 0 | r3 = 0;
| }
0x0007cb04 cmp r3, 0 |
| if (r3 != 0) {
0x0007cb06 bne.w 0x7cce8 | goto label_38;
| }
| label_16:
0x0007cb0a ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0007cb0c mov r3, sl | r3 = sl;
0x0007cb0e ldr r1, [sp, 0xc] | r1 = var_ch;
0x0007cb10 mov r0, r4 | r0 = r4;
0x0007cb12 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0007cb14 ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x0007cb16 str r2, [sp, 0x30] | var_30h = r2;
0x0007cb18 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0007cb1a ldr r2, [r2, r1] | r2 = *((r2 + r1));
0x0007cb1c ldr r1, [pc, 0x288] |
0x0007cb1e add r1, pc | r1 = 0xf98ca;
0x0007cb20 bl 0x24ec8 | fcn_00024ec8 (r0);
0x0007cb24 movs r2, 0 | r2 = 0;
0x0007cb26 ldr r3, [sp, 8] | r3 = var_8h;
0x0007cb28 str r2, [sp] | *(sp) = r2;
0x0007cb2a mov r1, r0 | r1 = r0;
0x0007cb2c ldr.w sb, [r4, 0x168] | sb = *((r4 + 0x168));
0x0007cb30 mov r7, r0 | r7 = r0;
0x0007cb32 str.w r2, [r4, 0x168] | __asm ("str.w r2, aav.0x000000ff");
0x0007cb36 mov r0, r4 | r0 = r4;
0x0007cb38 ldr r2, [pc, 0x270] |
0x0007cb3a add r2, pc | r2 = 0xf98ea;
0x0007cb3c blx 0x835c | fcn_0000835c ();
0x0007cb40 str.w sb, [r4, 0x168] | __asm ("str.w sb, aav.0x000000ff");
0x0007cb44 mov r3, r0 | r3 = r0;
0x0007cb46 cmp r0, 0 |
| if (r0 == 0) {
0x0007cb48 beq 0x7cbb6 | goto label_39;
| }
| if (r7 != 0) {
0x0007cb4a cbz r7, 0x7cb58 |
0x0007cb4c str r0, [sp, 8] | var_8h = r0;
0x0007cb4e mov r1, r7 | r1 = r7;
0x0007cb50 mov r0, r4 | r0 = r4;
0x0007cb52 bl 0x16808 | fcn_00016808 (r0, r1);
0x0007cb56 ldr r3, [sp, 8] | r3 = var_8h;
| }
| label_6:
0x0007cb58 ldrb.w r2, [r4, 0x57] | r2 = *((r4 + 0x57));
0x0007cb5c cmp r2, 0 |
| if (r2 != 0) {
0x0007cb5e bne.w 0x7ccbe | goto label_40;
| }
0x0007cb60 strh r6, [r5, 4] | *((r5 + 4)) = r6;
0x0007cb62 ldr r1, [r4, 0x20] | r1 = *((r4 + 0x20));
0x0007cb64 lsls r1, r1, 4 | r1 <<= 4;
| if (r1 >= r1) {
0x0007cb66 bpl 0x7cc50 | goto label_41;
| }
0x0007cb68 cmp r3, 7 |
| if (r3 != 7) {
0x0007cb6a bne 0x7cbda | goto label_42;
| }
0x0007cb6c ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x0007cb6e cmp r1, 0 |
| if (r1 != 0) {
0x0007cb70 bne 0x7cc6c | goto label_19;
| }
0x0007cb72 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007cb74 ldrb r1, [r0, 9] | r1 = *((r0 + 9));
0x0007cb76 cmp r1, 0 |
| if (r1 == 0) {
0x0007cb78 beq.w 0x7cd40 | goto label_43;
| }
0x0007cb7c ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x0007cb7e subs r2, 1 | r2--;
0x0007cb80 str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x0007cb82 cmp r2, 0 |
| if (r2 != 0) {
0x0007cb84 bne.w 0x7cce2 | goto label_44;
| }
| label_8:
0x0007cb88 str r3, [sp, 8] | var_8h = r3;
0x0007cb8a bl 0xa14c | fcn_0000a14c (r0);
0x0007cb8c invalid |
| label_14:
0x0007cb90 cmp r3, 0 |
0x0007cb92 beq.w 0x7ca82 |
| } while (r3 == 0);
| label_13:
0x0007cb96 mov r8, r3 | r8 = r3;
0x0007cb98 b 0x7ca6a | goto label_1;
| label_36:
0x0007cb9a movs r2, 1 | r2 = 1;
0x0007cb9c strb.w r2, [r3, 0x4c] | *((r3 + 0x4c)) = r2;
0x0007cba0 b 0x7caf6 | goto label_2;
| label_24:
0x0007cba2 movs r3, 0 | r3 = 0;
0x0007cba4 str r3, [sp, 0x10] | var_10h_2 = r3;
0x0007cba6 b 0x7c9e2 | goto label_3;
| label_23:
0x0007cba8 bl 0x12e84 | fcn_00012e84 (r0);
0x0007cbac ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007cbae cmp r0, 0 |
| if (r0 == 0) {
0x0007cbb0 beq.w 0x7c9cc | goto label_4;
| }
0x0007cbb4 b 0x7c9c4 | goto label_5;
| label_39:
0x0007cbb6 ldr r3, [sp, 0x24] | r3 = var_24h;
| if (r7 != 0) {
0x0007cbb8 cbz r7, 0x7cbc6 |
0x0007cbba mov r1, r7 | r1 = r7;
0x0007cbbc mov r0, r4 | r0 = r4;
0x0007cbbe str r3, [sp, 8] | var_8h = r3;
0x0007cbc0 bl 0x16808 | fcn_00016808 (r0, r1);
0x0007cbc4 ldr r3, [sp, 8] | r3 = var_8h;
| }
0x0007cbc6 cmp r3, 0 |
| if (r3 != 0) {
0x0007cbc8 bne 0x7cb58 | goto label_6;
| }
0x0007cbca mov r1, r5 | r1 = r5;
0x0007cbcc mov r0, r4 | r0 = r4;
0x0007cbce bl 0x84ba8 | fcn_00084ba8 (r0, r1, r2);
0x0007cbd2 ldrb.w r3, [r4, 0x57] | r3 = *((r4 + 0x57));
0x0007cbd6 cmp r3, 0 |
| if (r3 != 0) {
0x0007cbd8 bne 0x7ccbe | goto label_40;
| }
| label_42:
0x0007cbda ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0007cbdc ldr r2, [sp, 0xc] | r2 = var_ch;
0x0007cbde add r3, r2 | r3 += r2;
0x0007cbe0 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0007cbe2 ldrh.w r3, [r2, 0x4e] | r3 = *((r2 + 0x4e));
0x0007cbe6 orr r3, r3, 1 | r3 |= 1;
0x0007cbea strh.w r3, [r2, 0x4e] | *((r2 + 0x4e)) = r3;
0x0007cbec adds r0, 0x4e | r0 += 0x4e;
0x0007cbee ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0007cbf0 cmp r3, 0 |
| if (r3 != 0) {
0x0007cbf2 bne 0x7cc6a | goto label_45;
| }
0x0007cbf4 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007cbf6 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
0x0007cbf8 cmp r3, 0 |
| if (r3 == 0) {
0x0007cbfa beq.w 0x7ca82 | goto label_7;
| }
0x0007cbfe ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0007cc00 subs r3, 1 | r3--;
0x0007cc02 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0007cc04 cmp r3, 0 |
| if (r3 != 0) {
0x0007cc06 bne.w 0x7ca82 | goto label_7;
| }
0x0007cc0a b 0x7cb88 | goto label_8;
| label_28:
0x0007cc0c ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x0007cc0e lsls r0, r1, 0x19 | r0 = r1 << 0x19;
| if (r0 < r1) {
0x0007cc10 bmi.w 0x7ca22 | goto label_9;
| }
0x0007cc14 and r1, r2, 3 | r1 = r2 & 3;
0x0007cc18 ldr r2, [pc, 0x194] |
0x0007cc1a cmp r1, 1 |
0x0007cc1c mov r3, r5 | r3 = r5;
0x0007cc1e it lo |
| if (r1 >= 1) {
0x0007cc20 movlo r1, 1 | r1 = 1;
| }
0x0007cc22 mov r0, r4 | r0 = r4;
0x0007cc24 add r2, pc |
0x0007cc26 strb.w r1, [r4, 0x54] | *((r4 + 0x54)) = r1;
0x0007cc2a add.w r2, r2, 0x2dc | r2 = 0xf9cb4;
0x0007cc2e bl 0x2402c | fcn_0002402c (r0, r1, r2, r3);
0x0007cc32 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0007cc34 ldrb.w r1, [r4, 0x54] | r1 = *((r4 + 0x54));
0x0007cc38 str r0, [r4, 8] | *((r4 + 8)) = r0;
0x0007cc3a b 0x7cac0 | goto label_10;
| if (r1 != 1) {
| label_34:
0x0007cc3c bne.w 0x7cada | goto label_11;
| }
0x0007cc40 movw r1, 0xf830 |
0x0007cc44 movt r1, 0xffff | r1 = 0xfffff830;
0x0007cc48 b 0x7cada | goto label_11;
| label_37:
0x0007cc4a ldr r1, [pc, 0x168] |
0x0007cc4c add r1, pc | r1 = 0xf9a06;
0x0007cc4e b 0x7ca32 | goto label_12;
| label_41:
0x0007cc50 ldr r2, [sp, 0x10] | r2 = var_10h_2;
| if (r2 != 0) {
0x0007cc52 cbnz r2, 0x7cc6c | goto label_19;
| }
0x0007cc54 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007cc56 ldrb r2, [r0, 9] | r2 = *((r0 + 9));
0x0007cc58 cmp r2, 0 |
| if (r2 == 0) {
0x0007cc5a beq 0x7cb96 | goto label_13;
| }
| label_17:
0x0007cc5c ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x0007cc5e subs r2, 1 | r2--;
0x0007cc60 str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x0007cc62 cmp r2, 0 |
| if (r2 == 0) {
0x0007cc64 beq 0x7cb88 | goto label_8;
| }
0x0007cc66 mov r8, r3 | r8 = r3;
0x0007cc68 b 0x7ca6a | goto label_1;
| label_45:
0x0007cc6a movs r3, 0 | r3 = 0;
| label_19:
0x0007cc6c ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007cc6e str r3, [sp, 8] | var_8h = r3;
0x0007cc70 bl 0x5ca84 | fcn_0005ca84 (r0, r1);
0x0007cc74 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007cc76 ldr r3, [sp, 8] | r3 = var_8h;
0x0007cc78 ldrb r2, [r0, 9] | r2 = *((r0 + 9));
0x0007cc7a cmp r2, 0 |
| if (r2 == 0) {
0x0007cc7c beq 0x7cb90 | goto label_14;
| }
0x0007cc7e ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x0007cc80 subs r2, 1 | r2--;
0x0007cc82 str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x0007cc84 cmp r2, 0 |
| if (r2 == 0) {
0x0007cc86 beq.w 0x7cb88 | goto label_8;
| }
0x0007cc8a cmp r3, 0 |
| if (r3 == 0) {
0x0007cc8c beq.w 0x7ca82 | goto label_7;
| }
0x0007cc90 b 0x7cb96 | goto label_13;
| label_22:
0x0007cc92 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0007cc94 ldrh.w r3, [r2, 0x4e] | r3 = *((r2 + 0x4e));
0x0007cc98 orr r3, r3, 1 | r3 |= 1;
0x0007cc9c strh.w r3, [r2, 0x4e] | *((r2 + 0x4e)) = r3;
0x0007cca0 b 0x7ca82 | goto label_7;
| label_32:
0x0007cca2 ldrb.w r2, [r4, 0x57] | r2 = *((r4 + 0x57));
| label_18:
0x0007cca6 cmp r2, 0 |
| if (r2 != 0) {
0x0007cca8 bne.w 0x7ca7a | goto label_15;
| }
0x0007ccac ldrb.w r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x0007ccb0 cmp r3, 0 |
| if (r3 != 0) {
0x0007ccb2 bne.w 0x7ca7a | goto label_15;
| }
0x0007ccb6 mov r0, r4 | r0 = r4;
0x0007ccb8 bl 0x21644 | fcn_00021644 (r0);
0x0007ccbc b 0x7ca7a | goto label_15;
| label_40:
0x0007ccbe mov r0, r4 | r0 = r4;
0x0007ccc0 bl 0x1ad8c | fcn_0001ad8c (r0);
0x0007ccc4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0007ccc6 ldr r6, [r4, 0x10] | r6 = *((r4 + 0x10));
0x0007ccc8 add r6, r3 | r6 += r3;
0x0007ccca ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0007cccc cmp r3, 0 |
| if (r3 != 0) {
0x0007ccce bne 0x7cd56 | goto label_46;
| }
0x0007ccd0 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007ccd2 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
0x0007ccd4 cmp r3, 0 |
| if (r3 == 0) {
0x0007ccd6 beq 0x7cd3c | goto label_47;
| }
0x0007ccd8 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0007ccda subs r3, 1 | r3--;
0x0007ccdc str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0007ccde cmp r3, 0 |
| if (r3 == 0) {
0x0007cce0 beq 0x7cd6c | goto label_48;
| }
| label_44:
0x0007cce2 mov.w r8, 7 | r8 = 7;
0x0007cce6 b 0x7ca6a | goto label_1;
| label_38:
0x0007cce8 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0007ccea bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x0007ccee str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x0007ccf0 b 0x7cb0a | goto label_16;
| label_25:
0x0007ccf2 cmp r0, 0x65 |
| if (r0 == 0x65) {
0x0007ccf4 beq 0x7cd60 | goto label_49;
| }
0x0007ccf6 cmp.w r0, 0x204 |
| if (r0 == 0x204) {
0x0007ccfa beq 0x7cd4a | goto label_50;
| }
0x0007ccfc cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0007ccfe beq 0x7cd50 | goto label_51;
| }
0x0007cd00 uxtb r2, r0 | r2 = (int8_t) r0;
0x0007cd02 cmp r2, 0x1c |
| if (r2 > 0x1c) {
0x0007cd04 bgt 0x7cd70 | goto label_52;
| }
0x0007cd06 ldr r1, [pc, 0xb0] |
0x0007cd08 add r1, pc | r1 = 0xf9ac6;
0x0007cd0a add.w r2, r1, r2, lsl 2 | r2 = r1 + (r2 << 2);
0x0007cd0e ldr.w r1, [r2, 0x230] | r1 = *((r2 + 0x230));
| if (r1 == 0) {
0x0007cd12 cbz r1, 0x7cd7a | goto label_53;
| }
| label_20:
0x0007cd14 mov r0, r4 | r0 = r4;
0x0007cd16 str r3, [sp, 8] | var_8h = r3;
0x0007cd18 bl 0x22990 | fcn_00022990 (r0, r1);
0x0007cd1c ldr r1, [r7] | r1 = *(r7);
0x0007cd1e mov sb, r0 | sb = r0;
0x0007cd20 ldr r3, [sp, 8] | r3 = var_8h;
| if (r1 != 0) {
0x0007cd22 cbz r1, 0x7cd2c |
0x0007cd24 mov r0, r4 | r0 = r4;
0x0007cd26 bl 0x16808 | fcn_00016808 (r0, r1);
0x0007cd2a ldr r3, [sp, 8] | r3 = var_8h;
| }
0x0007cd2c ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0007cd2e str.w sb, [r7] | __asm ("str.w sb, [r7]");
0x0007cd32 ldrb r2, [r0, 9] | r2 = *((r0 + 9));
0x0007cd34 cmp r2, 0 |
| if (r2 != 0) {
0x0007cd36 bne 0x7cc5c | goto label_17;
| }
0x0007cd38 mov r8, r3 | r8 = r3;
0x0007cd3a b 0x7ca6a | goto label_1;
| label_47:
0x0007cd3c ldrb.w r2, [r4, 0x57] | r2 = *((r4 + 0x57));
| label_43:
0x0007cd40 mov.w r8, 7 | r8 = 7;
0x0007cd44 b 0x7cca6 | goto label_18;
| label_29:
0x0007cd46 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0007cd48 b 0x7cc6c | goto label_19;
| label_50:
0x0007cd4a ldr r1, [pc, 0x70] |
0x0007cd4c add r1, pc | r1 = 0xf9b0e;
0x0007cd4e b 0x7cd14 | goto label_20;
| label_51:
0x0007cd50 ldr r1, [pc, 0x6c] |
0x0007cd52 add r1, pc | r1 = 0xf9b16;
0x0007cd54 b 0x7cd14 | goto label_20;
| label_46:
0x0007cd56 movs r3, 7 | r3 = 7;
0x0007cd58 b 0x7cc6c | goto label_19;
| label_30:
0x0007cd5a mov.w r8, 1 | r8 = 1;
0x0007cd5e b 0x7ca7a | goto label_15;
| label_49:
0x0007cd60 ldr r1, [pc, 0x60] |
0x0007cd62 add r1, pc | r1 = 0xf9b2a;
0x0007cd64 b 0x7cd14 | goto label_20;
| label_35:
0x0007cd66 mvn r1, 0x80000000 | r1 = ~0x80000000;
0x0007cd6a b 0x7cada | goto label_11;
| label_48:
0x0007cd6c movs r3, 7 | r3 = 7;
0x0007cd6e b 0x7cb88 | goto label_8;
| label_52:
0x0007cd70 ldr r1, [pc, 0x54] |
0x0007cd72 add r1, pc | r1 = 0xf9b3e;
0x0007cd74 b 0x7cd14 | goto label_20;
| label_31:
0x0007cd76 movs r3, 1 | r3 = 1;
0x0007cd78 b 0x7cb88 | goto label_8;
| label_53:
0x0007cd7a ldr r1, [pc, 0x50] |
0x0007cd7c add r1, pc | r1 = 0xf9b4e;
0x0007cd7e b 0x7cd14 | goto label_20;
| label_33:
0x0007cd80 blx 0x883c | fcn_0000883c ();
0x0007cd84 stm r3!, {r1, r5, r6} | *(r3!) = r1;
| *((r3! + 4)) = r5;
| *((r3! + 8)) = r6;
0x0007cd86 movs r4, r0 | r4 = r0;
0x0007cd88 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0007cd8a movs r0, r0 |
0x0007cd8c strb r2, [r4, 0x11] | *((r4 + 0x11)) = r2;
0x0007cd8e movs r3, r0 | r3 = r0;
0x0007cd90 ldrb r6, [r3, 1] | r6 = *((r3 + 1));
0x0007cd92 movs r3, r0 | r3 = r0;
0x0007cd94 vext.32 d0, d0, d3, 0 | __asm ("vext.32 d0, d0, d3, 0");
0x0007cd98 str r1, [sp, 0x310] | *(arg_310h) = r1;
0x0007cd9a movs r3, r0 | r3 = r0;
0x0007cd9c str r1, [sp, 0x170] | *(arg_170h) = r1;
0x0007cd9e movs r3, r0 | r3 = r0;
0x0007cda0 stm r2!, {r2, r3} | *(r2!) = r2;
| *((r2! + 4)) = r3;
0x0007cda2 movs r4, r0 | r4 = r0;
0x0007cda4 strb r6, [r6, 0x1b] | *((r6 + 0x1b)) = r6;
0x0007cda6 movs r3, r0 | r3 = r0;
0x0007cda8 str r0, [sp, 0x328] | *(arg_328h) = r0;
0x0007cdaa movs r3, r0 | r3 = r0;
0x0007cdac invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x84668 */
| #include <stdint.h>
|
; (fcn) fcn.00084668 () | void fcn_00084668 (int16_t arg1, int16_t arg3) {
| r0 = arg1;
| r2 = arg3;
| if (? >= ?) {
0x00084668 andlo lr, r2, 208, 18 | lr = r2 & (208 18);
| }
0x0008466c push {r4, r5, r6, lr} |
0x0008466e mov r4, r0 | r4 = r0;
0x00084670 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x00084672 adds r3, 1 | r3++;
0x00084674 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00084678 strd r3, r2, [r4, 8] | __asm ("strd r3, r2, [r4, 8]");
0x0008467c blx 0x8728 | r0 = fcn_00008728 ();
0x00084680 cmp r0, 0x64 |
0x00084682 it eq |
| if (r0 != 0x64) {
0x00084684 moveq r5, 0 | r5 = 0;
| }
| if (r0 != 0x64) {
0x00084686 beq 0x846ac |
0x00084688 movs r6, 0 | r6 = 0;
0x0008468a ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0008468c blx 0x8580 | fcn_00008580 ();
0x00084690 str r6, [r4, 4] | *((r4 + 4)) = r6;
0x00084692 mov r5, r0 | r5 = r0;
0x00084694 mov r0, r6 | r0 = r6;
0x00084696 blx 0x8580 | fcn_00008580 ();
0x0008469a ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x0008469c str r6, [r4, 4] | *((r4 + 4)) = r6;
0x0008469e blx 0x8404 | fcn_00008404 ();
0x000846a2 ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x000846a4 str r6, [r4, 0x10] | *((r4 + 0x10)) = r6;
0x000846a6 blx 0x8404 | fcn_00008404 ();
0x000846aa str r6, [r4, 0x14] | *((r4 + 0x14)) = r6;
| }
0x000846ac mov r0, r5 | r0 = r5;
0x000846ae pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x84cb4 */
| #include <stdint.h>
|
; (fcn) fcn.00084cb4 () | void fcn_00084cb4 (int16_t arg2, int16_t arg3, int16_t arg4, arithmetic x) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h_2;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_50h;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| r0 = x;
0x00084cb4 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00084cb8 mov sb, r0 | sb = r0;
0x00084cba ldr r0, [r0, 0x14] | r0 = *(var_0hx14);
0x00084cbc sub sp, 0x2c |
0x00084cbe cmp r0, 0 |
| if (var_0h <= ) {
0x00084cc0 ble.w 0x84e22 | goto label_5;
| }
0x00084cc4 sub.w r8, r1, 0xc | r8 = r1 - 0xc;
0x00084cc8 mov.w lr, 0 | lr = 0;
0x00084ccc clz r8, r8 | r8 &= r8;
0x00084cd0 mov r7, r1 | r7 = r1;
0x00084cd2 lsr.w r8, r8, 5 | r8 >>= 5;
0x00084cd6 mov fp, r3 |
0x00084cd8 mov r5, lr | r5 = lr;
0x00084cda strd r2, lr, [sp, 0x1c] | __asm ("strd r2, lr, [sp, 0x1c]");
0x00084cde b 0x84cf6 |
| while (r4 == 0) {
0x00084ce0 movs r4, 1 | r4 = 1;
0x00084ce2 mov.w sl, 0 | sl = 0;
| label_0:
0x00084ce6 adds r5, 1 | r5++;
0x00084ce8 cmp r0, r5 |
0x00084cea ite le |
| if (r0 > r5) {
0x00084cec movle r4, 0 | r4 = 0;
| }
| if (r0 <= r5) {
0x00084cee andgt r4, r4, 1 | r4 &= 1;
| }
0x00084cf2 cmp r4, 0 |
| if (r4 == 0) {
0x00084cf4 beq 0x84df4 | goto label_6;
| }
0x00084cf6 cmp r7, r5 |
0x00084cf8 ite ne |
| if (r7 == r5) {
0x00084cfa movne r4, r8 | r4 = r8;
| }
| if (r7 != r5) {
0x00084cfc orreq r4, r8, 1 | r4 = r8 | 1;
| }
0x00084d00 cmp r4, 0 |
0x00084d02 beq 0x84ce0 |
| }
0x00084d04 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x00084d08 add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x00084d0c ldr r6, [r3, 4] | r6 = *((r3 + 4));
| if (r6 == 0) {
0x00084d0e cbz r6, 0x84d64 | goto label_7;
| }
0x00084d10 ldrb r3, [r6, 9] | r3 = *((r6 + 9));
0x00084d12 ldr.w sl, [r6, 4] | sl = *((r6 + 4));
| if (r3 != 0) {
0x00084d16 cbz r3, 0x84d28 |
0x00084d18 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00084d1a ldrb r2, [r6, 0xa] | r2 = *((r6 + 0xa));
0x00084d1c adds r1, r3, 1 | r1 = r3 + 1;
0x00084d1e str r1, [r6, 0xc] | *((r6 + 0xc)) = r1;
| if (r2 != 0) {
0x00084d20 cbnz r2, 0x84d3e | goto label_8;
| }
0x00084d22 mov r0, r6 | r0 = r6;
0x00084d24 bl 0x12e84 | fcn_00012e84 (r0);
| }
0x00084d28 ldrb.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
| if (r3 == 0) {
0x00084d2c cbz r3, 0x84d44 | goto label_9;
| }
0x00084d2e ldrb r3, [r6, 9] | r3 = *((r6 + 9));
0x00084d30 cbnz r3, 0x84d70 |
| while (r3 != 0) {
| label_1:
0x00084d32 mov.w sl, 6 | sl = 6;
0x00084d36 mov r0, sl | r0 = sl;
0x00084d38 add sp, 0x2c |
0x00084d3a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00084d3e ldrb.w r2, [sl, 0x14] | r2 = *((sl + 0x14));
| if (r2 == 0) {
0x00084d42 cbnz r2, 0x84d74 |
| label_9:
0x00084d44 ldr.w sl, [sl] | sl = *(sl);
0x00084d48 ldr r3, [r6] | r3 = *(r6);
0x00084d4a ldr.w r0, [sl, 0xe8] | r0 = *((sl + 0xe8));
0x00084d4e str r3, [sp, 0x24] | var_24h = r3;
| if (r0 != 0) {
0x00084d50 cbnz r0, 0x84d9a | goto label_10;
| }
0x00084d52 ldrb.w r3, [sl, 5] | r3 = *((sl + 5));
0x00084d56 cmp r3, 5 |
| if (r3 == 5) {
0x00084d58 beq 0x84d82 | goto label_11;
| }
| label_2:
0x00084d5a ldrb r3, [r6, 9] | r3 = *((r6 + 9));
0x00084d5c cmp r3, 0 |
| if (r3 != 0) {
0x00084d5e bne 0x84e2e | goto label_12;
| }
0x00084d60 ldr.w r0, [sb, 0x14] | r0 = *((sb + 0x14));
| label_7:
0x00084d64 mov.w sl, 0 | sl = 0;
0x00084d68 mov fp, sl |
0x00084d6a str.w sl, [sp, 0x50] | __asm ("str.w sl, [var_50h]");
0x00084d6e b 0x84ce6 | goto label_0;
0x00084d70 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00084d72 subs r3, 1 | r3--;
| }
0x00084d74 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x00084d76 cmp r3, 0 |
0x00084d78 bne 0x84d32 |
| }
0x00084d7a mov r0, r6 | r0 = r6;
0x00084d7c bl 0xa14c | fcn_0000a14c (r0);
0x00084d80 b 0x84d32 | goto label_1;
| label_11:
0x00084d82 ldr r1, [pc, 0xd4] |
0x00084d84 mov r3, r0 | r3 = r0;
0x00084d86 mov r2, r0 | r2 = r0;
0x00084d88 str r0, [sp] | *(sp) = r0;
0x00084d8a ldr r0, [sp, 0x24] | r0 = var_24h;
0x00084d8c add r1, pc | r1 = 0x109bea;
0x00084d8e blx 0x835c | fcn_0000835c ();
0x00084d92 ldr.w r0, [sl, 0xe8] | r0 = *((sl + 0xe8));
0x00084d96 cmp r0, 0 |
| if (r0 == 0) {
0x00084d98 beq 0x84d5a | goto label_2;
| }
| label_10:
0x00084d9a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00084d9c cmp r3, 0 |
| if (r3 == 0) {
0x00084d9e beq 0x84e16 | goto label_13;
| }
0x00084da0 ldr.w r3, [sl, 0xc0] | r3 = *((sl + 0xc0));
| do {
0x00084da4 ldr r2, [sp, 0x50] | r2 = var_50h;
0x00084da6 str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h]");
0x00084daa ldr r1, [sp, 0x24] | r1 = var_24h;
0x00084dac str r2, [sp, 0x14] | var_14h_2 = r2;
0x00084dae ldr.w r2, [sl, 0xe0] | r2 = *((sl + 0xe0));
0x00084db2 str r2, [sp, 0xc] | var_ch = r2;
0x00084db4 ldr.w r2, [sl, 0xa8] | r2 = *((sl + 0xa8));
0x00084db8 str r2, [sp, 8] | var_8h = r2;
0x00084dba ldrb.w r2, [sl, 0xb] | r2 = *((sl + 0xb));
0x00084dbe str r2, [sp, 4] | var_4h = r2;
0x00084dc0 ldr.w r2, [sl, 0xc4] | r2 = *((sl + 0xc4));
0x00084dc4 str r2, [sp] | *(sp) = r2;
0x00084dc6 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00084dc8 bl 0x53004 | fcn_00053004 (r0, r1, r2, r3, r4, r5, r6);
0x00084dcc ldrb r3, [r6, 9] | r3 = *((r6 + 9));
0x00084dce mov sl, r0 | sl = r0;
| if (r3 != 0) {
0x00084dd0 cbz r3, 0x84dda |
0x00084dd2 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00084dd4 subs r3, 1 | r3--;
0x00084dd6 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
| if (r3 == 0) {
0x00084dd8 cbz r3, 0x84e1a | goto label_14;
| }
| }
| label_3:
0x00084dda cmp.w sl, 5 |
| if (sl != 5) {
0x00084dde bne 0x84e4e | goto label_15;
| }
0x00084de0 mov.w sl, 0 | sl = 0;
0x00084de4 movs r3, 1 | r3 = 1;
0x00084de6 ldr.w r0, [sb, 0x14] | r0 = *((sb + 0x14));
0x00084dea mov fp, sl |
0x00084dec str.w sl, [sp, 0x50] | __asm ("str.w sl, [var_50h]");
0x00084df0 str r3, [sp, 0x20] | var_20h = r3;
0x00084df2 b 0x84ce6 | goto label_0;
| label_6:
0x00084df4 ldr.w lr, [sp, 0x20] | lr = var_20h;
0x00084df8 eor r1, lr, 1 | r1 = lr ^ 1;
0x00084dfc cmp.w sl, 0 |
0x00084e00 it ne |
| if (sl == 0) {
0x00084e02 orrne r1, r1, 1 | r1 |= 1;
| }
0x00084e06 cmp r1, 0 |
0x00084e08 it eq |
| if (r1 != 0) {
0x00084e0a moveq sl, 5 | sl = 5;
| }
0x00084e0e mov r0, sl | r0 = sl;
0x00084e10 add sp, 0x2c |
0x00084e12 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x00084e16 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00084e18 b 0x84da4 |
| } while (1);
| label_14:
0x00084e1a mov r0, r6 | r0 = r6;
0x00084e1c bl 0xa14c | fcn_0000a14c (r0);
0x00084e20 b 0x84dda | goto label_3;
| label_5:
0x00084e22 mov.w sl, 0 | sl = 0;
0x00084e26 mov r0, sl | r0 = sl;
0x00084e28 add sp, 0x2c |
0x00084e2a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x00084e2e ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00084e30 subs r3, 1 | r3--;
0x00084e32 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x00084e34 cbz r3, 0x84e46 |
| while (1) {
0x00084e36 mov.w sl, 0 | sl = 0;
| label_4:
0x00084e3a movs r3, 0 | r3 = 0;
0x00084e3c ldr.w r0, [sb, 0x14] | r0 = *((sb + 0x14));
0x00084e40 mov fp, r3 |
0x00084e42 str r3, [sp, 0x50] | var_50h = r3;
0x00084e44 b 0x84ce6 | goto label_0;
0x00084e46 mov r0, r6 | r0 = r6;
0x00084e48 bl 0xa14c | fcn_0000a14c (r0);
0x00084e4c b 0x84e36 |
| }
| label_15:
0x00084e4e clz r4, sl | r4 &= sl;
0x00084e52 lsrs r4, r4, 5 | r4 >>= 5;
0x00084e54 b 0x84e3a | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x85fb4 */
| #include <stdint.h>
|
; (fcn) fcn.00085fb4 () | void fcn_00085fb4 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00085fb4 push {r4, r5, r6, lr} |
0x00085fb6 mov r4, r1 | r4 = r1;
0x00085fb8 ldrd r3, r1, [r1, 8] | __asm ("ldrd r3, r1, [r1, 8]");
0x00085fbc mov r5, r0 | r5 = r0;
0x00085fbe ldr r2, [r0, 0x3c] | r2 = *((r0 + 0x3c));
0x00085fc0 subs r3, 1 | r3--;
0x00085fc2 orrs r3, r1 | r3 |= r1;
0x00085fc4 ldr r1, [r4] | r1 = *(r4);
0x00085fc6 add.w r2, r2, -1 | r2 += -1;
0x00085fca it eq |
| if (r3 != r1) {
0x00085fcc moveq r3, -1 | r3 = -1;
| }
0x00085fd0 str r2, [r0, 0x3c] | *((r0 + 0x3c)) = r2;
0x00085fd2 it eq |
| if (r3 != r1) {
0x00085fd4 streq r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
| }
| if (r1 != 0) {
0x00085fd6 cbz r1, 0x85fe0 |
0x00085fd8 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x00085fda subs r3, 1 | r3--;
0x00085fdc str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 == 0) {
0x00085fde cbz r3, 0x86036 | goto label_3;
| }
| }
| label_1:
0x00085fe0 mov r1, r4 | r1 = r4;
0x00085fe2 mov r0, r5 | r0 = r5;
0x00085fe4 bl 0x85f18 | r0 = fcn_00085f18 (r0, r1);
0x00085fe8 mov r6, r0 | r6 = r0;
| label_0:
0x00085fea ldrd r3, r2, [r4, 8] | __asm ("ldrd r3, r2, [r4, 8]");
0x00085fee orrs r2, r3 | r2 |= r3;
| if (r2 == r3) {
0x00085ff0 beq 0x8602c | goto label_4;
| }
0x00085ff2 movw r2, 0x7eaf |
0x00085ff6 movt r2, 0x51d0 | r2 = 0x51d07eaf;
0x00085ffa umull r1, r2, r2, r3 | r1:r2 = r2 * r3;
0x00085ffe subs r1, r3, r2 | r1 = r3 - r2;
0x00086000 add.w r2, r2, r1, lsr 1 | r2 += (r1 >> 1);
0x00086004 lsrs r2, r2, 6 | r2 >>= 6;
0x00086006 add.w r1, r2, r2, lsl 1 | r1 = r2 + (r2 << 1);
0x0008600a add.w r2, r2, r1, lsl 5 | r2 += (r1 << 5);
0x0008600e subs r2, r3, r2 | r2 = r3 - r2;
0x00086010 add.w r3, r5, r2, lsl 2 | r3 = r5 + (r2 << 2);
0x00086014 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x00086016 cmp r4, r3 |
| if (r4 == r3) {
0x00086018 beq 0x86042 | goto label_5;
| }
| do {
0x0008601a mov r5, r3 | r5 = r3;
0x0008601c ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0008601e cmp r4, r3 |
0x00086020 bne 0x8601a |
| } while (r4 != r3);
0x00086022 adds r5, 0x1c | r5 += 0x1c;
| label_2:
0x00086024 ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00086026 movs r3, 0 | r3 = 0;
0x00086028 str r2, [r5] | *(r5) = r2;
0x0008602a str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
| label_4:
0x0008602c mov r0, r4 | r0 = r4;
0x0008602e blx 0x8404 | fcn_00008404 ();
0x00086032 mov r0, r6 | r0 = r6;
0x00086034 pop {r4, r5, r6, pc} |
| label_3:
0x00086036 bl 0x85fb4 | r0 = fcn_00085fb4 (r0, r1);
0x0008603a mov r6, r0 | r6 = r0;
0x0008603c cmp r0, 0 |
| if (r0 != 0) {
0x0008603e bne 0x85fea | goto label_0;
| }
0x00086040 b 0x85fe0 | goto label_1;
| label_5:
0x00086042 adds r2, 0x1d | r2 += 0x1d;
0x00086044 add.w r5, r5, r2, lsl 2 | r5 += (r2 << 2);
0x00086048 b 0x86024 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8604c */
| #include <stdint.h>
|
; (fcn) fcn.0008604c () | void fcn_0008604c (int16_t arg1) {
| r0 = arg1;
0x0008604c push {r3, r4, r5, r6, r7, lr} |
0x0008604e mov r6, r0 | r6 = r0;
0x00086050 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00086052 ldr r7, [r6] | r7 = *(r6);
| if (r0 == 0) {
0x00086054 cbz r0, 0x8608a | goto label_0;
| }
0x00086056 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x00086058 cmp r2, 0 |
| if (r2 <= 0) {
0x0008605a ble 0x86082 | goto label_1;
| }
0x0008605c movs r4, 0 | r4 = 0;
| do {
0x0008605e add.w r3, r4, r4, lsl 1 | r3 = r4 + (r4 << 1);
0x00086062 adds r4, 1 | r4++;
0x00086064 add.w r3, r0, r3, lsl 3 | r3 = r0 + (r3 << 3);
0x00086068 ldr r5, [r3, 0x10] | r5 = *((r3 + 0x10));
| if (r5 != 0) {
0x0008606a cbz r5, 0x8607e |
0x0008606c ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| if (r3 != 0) {
0x0008606e cbz r3, 0x86074 |
0x00086070 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00086072 blx r3 | uint32_t (*r3)(uint32_t) (r0);
| }
0x00086074 mov r0, r5 | r0 = r5;
0x00086076 blx 0x8404 | r0 = fcn_00008404 ();
0x0008607a ldrd r2, r0, [r6, 0xc] | __asm ("ldrd r2, r0, [r6, 0xc]");
| }
0x0008607e cmp r2, r4 |
0x00086080 bgt 0x8605e |
| } while (r2 > r4);
| label_1:
0x00086082 blx 0x8404 | fcn_00008404 ();
0x00086086 movs r3, 0 | r3 = 0;
0x00086088 str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
| label_0:
0x0008608a add.w r4, r6, 0x3c | r4 = r6 + 0x3c;
0x0008608e add.w r5, r6, 0x50 | r5 = r6 + 0x50;
| do {
0x00086092 ldr r1, [r4, 4]! | r1 = *((r4 += 4));
| if (r1 != 0) {
0x00086096 cbz r1, 0x860a6 |
0x00086098 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x0008609a mov r0, r7 | r0 = r7;
0x0008609c subs r3, 1 | r3--;
0x0008609e str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 != 0) {
0x000860a0 cbnz r3, 0x860a6 | goto label_2;
| }
0x000860a2 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
| }
| label_2:
0x000860a6 cmp r4, r5 |
0x000860a8 bne 0x86092 |
| } while (r4 != r5);
0x000860aa ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x000860ac blx 0x8404 | fcn_00008404 ();
0x000860b0 ldr r4, [r6, 0x24] | r4 = *((r6 + 0x24));
0x000860b2 movs r2, 0xf4 | r2 = 0xf4;
0x000860b4 movs r1, 0 | r1 = 0;
0x000860b6 adds r0, r6, 4 | r0 = r6 + 4;
0x000860b8 blx 0x839c | fcn_0000839c ();
0x000860bc str r7, [r6] | *(r6) = r7;
0x000860be str r4, [r6, 0x24] | *((r6 + 0x24)) = r4;
0x000860c0 pop {r3, r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x86100 */
| #include <stdint.h>
|
; (fcn) fcn.00086100 () | void fcn_00086100 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00086100 push {r0, r1, sb, fp, sp, lr} |
0x00086104 blx lr | lr (r0);
0x00086106 add.w lr, r1, r1, lsl 1 | lr = r1 + (r1 << 1);
0x0008610a mov r7, r2 | r7 = r2;
0x0008610c add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00086110 mov r5, r1 | r5 = r1;
0x00086112 add.w lr, r3, lr, lsl 3 | lr = r3 + (lr << 3);
0x00086116 add.w ip, r3, r2, lsl 3 |
0x0008611a mov sl, lr | sl = lr;
0x0008611c mov r6, r0 | r6 = r0;
0x0008611e ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00086122 sub sp, 0x18 |
0x00086124 mov r4, sp | r4 = sp;
0x00086126 mov r8, ip | r8 = ip;
0x00086128 mov sb, sp | sb = sp;
0x0008612a cmp r5, 3 |
0x0008612c stm r4!, {r0, r1, r2, r3} | *(r4!) = r0;
| *((r4! + 4)) = r1;
| *((r4! + 8)) = r2;
| *((r4! + 12)) = r3;
0x0008612e ldm.w lr, {r0, r1} | r0 = *(lr);
| r1 = *((lr + 4));
0x00086132 stm.w r4, {r0, r1} | *(r4) = r0;
| *((r4 + 4)) = r1;
0x00086136 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x0008613a stm.w sl!, {r0, r1, r2, r3} | *(sl!) = r0;
| *((sl! + 4)) = r1;
| *((sl! + 8)) = r2;
| *((sl! + 12)) = r3;
0x0008613e ldm.w ip, {r0, r1} | r0 = *(ip);
| r1 = *((ip + 4));
0x00086142 stm.w lr, {r0, r1} | *(lr) = r0;
| *((lr + 4)) = r1;
0x00086146 ldm.w sb!, {r0, r1, r2, r3} | r0 = *(sb!);
| r1 = *((sb! + 4));
| r2 = *((sb! + 8));
| r3 = *((sb! + 12));
0x0008614a stm.w r8!, {r0, r1, r2, r3} | *(r8!) = r0;
| *((r8! + 4)) = r1;
| *((r8! + 8)) = r2;
| *((r8! + 12)) = r3;
0x0008614e ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x00086152 stm.w ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
| if (r5 <= 3) {
0x00086156 bgt 0x8616c |
0x00086158 add.w r5, r6, r5, lsl 2 | r5 = r6 + (r5 << 2);
0x0008615c cmp r7, 3 |
0x0008615e ldr r1, [r5, 0x44] | r1 = *((r5 + 0x44));
| if (r7 > 3) {
0x00086160 bgt 0x86172 | goto label_0;
| }
0x00086162 add.w r6, r6, r7, lsl 2 | r6 += (r7 << 2);
0x00086166 ldr r3, [r6, 0x44] | r3 = *((r6 + 0x44));
0x00086168 str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x0008616a str r1, [r6, 0x44] | *((r6 + 0x44)) = r1;
| }
0x0008616c add sp, 0x18 |
0x0008616e pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x00086172 ldr r0, [r6] | r0 = *(r6);
| if (r1 != 0) {
0x00086174 cbz r1, 0x86182 |
0x00086176 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x00086178 subs r3, 1 | r3--;
0x0008617a str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 != 0) {
0x0008617c cbnz r3, 0x86182 | goto label_1;
| }
0x0008617e bl 0x85fb4 | fcn_00085fb4 (r0, r1);
| }
| label_1:
0x00086182 movs r3, 0 | r3 = 0;
0x00086184 str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x00086186 add sp, 0x18 |
0x00086188 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8618c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0008618c () | void fcn_0008618c (int16_t arg1, int16_t arg2, uint32_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0008618c push {r3, r4, r5, r6, r7, lr} |
0x0008618e mov r6, r0 | r6 = r0;
0x00086190 ldrd r3, r2, [r0, 0x14] | __asm ("ldrd r3, r2, [r0, 0x14]");
0x00086194 mov r4, r1 | r4 = r1;
0x00086196 vpush {d8} | __asm ("vpush {d8}");
0x0008619a cmp r2, r3 |
0x0008619c ldr r7, [r0, 0x20] | r7 = *((r0 + 0x20));
0x0008619e vmov.f64 d8, d0 | __asm ("vmov.f64 d8, d0");
| if (r2 >= r3) {
0x000861a2 bge 0x8620a | goto label_2;
| }
| label_1:
0x000861a4 adds r3, r2, 1 | r3 = r2 + 1;
0x000861a6 cmp r2, 0 |
0x000861a8 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x000861aa add.w r3, r2, r2, lsl 1 | r3 = r2 + (r2 << 1);
0x000861ae add.w r7, r7, r3, lsl 3 | r7 += (r3 << 3);
0x000861b2 vstr d8, [r7] | __asm ("vstr d8, [r7]");
0x000861b6 strb r4, [r7, 0x10] | *((r7 + 0x10)) = r4;
0x000861b8 ble 0x861e8 |
| while (1) {
0x000861ba subs r3, r2, 1 | r3 = r2 - 1;
0x000861bc ldr r4, [r6, 0x20] | r4 = *((r6 + 0x20));
0x000861be asrs r5, r3, 1 | r5 = r3 >> 1;
0x000861c0 bic r3, r3, 1 | r3 = BIT_MASK (r3, 1);
0x000861c4 mov r0, r6 | r0 = r6;
0x000861c6 add r3, r5 | r3 += r5;
0x000861c8 mov r1, r5 | r1 = r5;
0x000861ca add.w r4, r4, r3, lsl 3 | r4 += (r3 << 3);
0x000861ce vldr d16, [r4] | __asm ("vldr d16, [r4]");
0x000861d2 vcmpe.f64 d16, d8 | __asm ("vcmpe.f64 d16, d8");
0x000861d6 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r3 <= r2) {
0x000861da bgt 0x861f0 |
| if (r3 >= r2) {
0x000861dc bmi 0x861e8 |
0x000861de ldrb.w ip, [r7, 0x10] | ip = *((r7 + 0x10));
0x000861e2 ldrb r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000861e4 cmp ip, r3 |
| if (ip <= r3) {
0x000861e6 blo 0x861f0 | goto label_3;
| }
| }
| label_0:
0x000861e8 vpop {d8} | __asm ("vpop {d8}");
0x000861ec mov r0, r7 | r0 = r7;
0x000861ee pop {r3, r4, r5, r6, r7, pc} |
| }
| label_3:
0x000861f0 bl 0x86100 | fcn_00086100 (r0, r1, r2);
| if (r5 == 0) {
0x000861f4 cbz r5, 0x86200 | goto label_4;
| }
0x000861f6 vldr d8, [r4] | __asm ("vldr d8, [r4]");
0x000861fa mov r7, r4 | r7 = r4;
0x000861fc mov r2, r5 | r2 = r5;
0x000861fe b 0x861ba |
| }
| label_4:
0x00086200 vpop {d8} | __asm ("vpop {d8}");
0x00086204 mov r7, r4 | r7 = r4;
0x00086206 mov r0, r7 | r0 = r7;
0x00086208 pop {r3, r4, r5, r6, r7, pc} |
| label_2:
0x0008620a adds r3, 4 | r3 += 4;
0x0008620c mov r0, r7 | r0 = r7;
0x0008620e lsls r5, r3, 1 | r5 = r3 << 1;
0x00086210 add.w r3, r5, r3, lsl 2 | r3 = r5 + (r3 << 2);
0x00086214 lsls r2, r3, 3 | r2 = r3 << 3;
0x00086216 movs r3, 0 | r3 = 0;
0x00086218 blx 0x8500 | r0 = fcn_00008500 ();
0x0008621c mov r7, r0 | r7 = r0;
0x0008621e cmp r0, 0 |
| if (r0 == 0) {
0x00086220 beq 0x861e8 | goto label_0;
| }
0x00086222 ldr r2, [r6, 0x18] | r2 = *((r6 + 0x18));
0x00086224 str r0, [r6, 0x20] | *((r6 + 0x20)) = r0;
0x00086226 str r5, [r6, 0x14] | *((r6 + 0x14)) = r5;
0x00086228 b 0x861a4 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8622c */
| #include <stdint.h>
|
; (fcn) fcn.0008622c () | void fcn_0008622c (int16_t arg1) {
| r0 = arg1;
0x0008622c push.w {r4, r5, r6, r7, r8, lr} |
0x00086230 mov r5, r0 | r5 = r0;
0x00086232 ldrb.w ip, [r0, 5] | ip = *((r0 + 5));
0x00086236 rsb.w r4, ip, 1 | r4 = 1 - ip;
0x0008623a add.w r4, r0, r4, lsl 2 | r4 = r0 + (r4 << 2);
0x0008623e ldr r1, [r4, 0x40] | r1 = *((r4 + 0x40));
| if (r1 != 0) {
0x00086240 cbz r1, 0x86258 |
0x00086242 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x00086244 ldr r0, [r0] | r0 = *(r0);
0x00086246 subs r3, 1 | r3--;
0x00086248 str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 == 0) {
0x0008624a cbnz r3, 0x86254 |
0x0008624c bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x00086250 ldrb.w ip, [r5, 5] | ip = *((r5 + 5));
| }
0x00086254 movs r3, 0 | r3 = 0;
0x00086256 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| }
0x00086258 cmp.w ip, 0 |
| if (ip == 0) {
0x0008625c beq 0x86274 | goto label_5;
| }
0x0008625e ldrb.w r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x00086262 movs r1, 0 | r1 = 0;
0x00086264 add.w r3, r5, r3, lsl 2 | r3 = r5 + (r3 << 2);
0x00086268 ldr r2, [r3, 0x54] | r2 = *((r3 + 0x54));
0x0008626a subs r2, 1 | r2--;
0x0008626c str r2, [r3, 0x54] | *((r3 + 0x54)) = r2;
0x0008626e strb r1, [r5, 5] | *((r5 + 5)) = r1;
| do {
| label_0:
0x00086270 pop.w {r4, r5, r6, r7, r8, pc} |
| label_5:
0x00086274 ldr.w r8, [r5, 0x18] | r8 = *((r5 + 0x18));
0x00086278 cmp.w r8, 0 |
0x0008627c beq 0x86270 |
| } while (r8 == 0);
0x0008627e ldr r7, [r5, 0x20] | r7 = *((r5 + 0x20));
0x00086280 add.w r6, r8, -1 | r6 = r8 + -1;
0x00086284 add.w r4, r6, r6, lsl 1 | r4 = r6 + (r6 << 1);
0x00086288 cmp r6, 3 |
0x0008628a ldrb r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0008628c mov lr, r7 | lr = r7;
0x0008628e add.w r4, r7, r4, lsl 3 | r4 = r7 + (r4 << 3);
0x00086292 add.w r3, r5, r3, lsl 2 | r3 = r5 + (r3 << 2);
0x00086296 ldr r2, [r3, 0x54] | r2 = *((r3 + 0x54));
0x00086298 add.w r2, r2, -1 | r2 += -1;
0x0008629c str r2, [r3, 0x54] | *((r3 + 0x54)) = r2;
0x0008629e ldm r4!, {r0, r1, r2, r3} | r0 = *(r4!);
| r1 = *((r4! + 4));
| r2 = *((r4! + 8));
| r3 = *((r4! + 12));
0x000862a0 str r6, [r5, 0x18] | *((r5 + 0x18)) = r6;
0x000862a2 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x000862a6 ldm.w r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x000862aa stm.w lr, {r0, r1} | *(lr) = r0;
| *((lr + 4)) = r1;
| if (r6 <= 3) {
0x000862ae ble 0x86354 | goto label_6;
| }
| label_4:
0x000862b0 movs r1, 0 | r1 = 0;
0x000862b2 movs r4, 1 | r4 = 1;
0x000862b4 mov r3, r1 | r3 = r1;
0x000862b6 b 0x862fa | goto label_7;
| if (r4 >= 1) {
| label_2:
0x000862b8 bmi 0x862c6 |
0x000862ba ldrb.w r0, [ip, 0x10] | r0 = *((ip + 0x10));
0x000862be ldrb.w r2, [lr, 0x10] | r2 = *((lr + 0x10));
0x000862c2 cmp r0, r2 |
| if (r0 <= r2) {
0x000862c4 blo 0x86328 | goto label_8;
| }
| }
| label_1:
0x000862c6 add r3, r1 | r3 += r1;
0x000862c8 add.w r3, r7, r3, lsl 3 | r3 = r7 + (r3 << 3);
0x000862cc vldr d17, [r3] | __asm ("vldr d17, [r3]");
0x000862d0 vcmpe.f64 d16, d17 | __asm ("vcmpe.f64 d16, d17");
0x000862d4 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r0 < r2) {
0x000862d8 bmi 0x862e6 | goto label_9;
| }
| if (r0 > r2) {
0x000862da bgt 0x86270 | goto label_0;
| }
0x000862dc ldrb.w r2, [lr, 0x10] | r2 = *((lr + 0x10));
0x000862e0 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000862e2 cmp r2, r3 |
| if (r2 >= r3) {
0x000862e4 bhs 0x86270 | goto label_0;
| }
| label_9:
0x000862e6 mov r2, r4 | r2 = r4;
0x000862e8 mov r0, r5 | r0 = r5;
0x000862ea bl 0x86100 | fcn_00086100 (r0, r1, r2);
0x000862ee mov r1, r4 | r1 = r4;
| label_3:
0x000862f0 lsls r3, r1, 1 | r3 = r1 << 1;
0x000862f2 adds r4, r3, 1 | r4 = r3 + 1;
0x000862f4 cmp r6, r4 |
| if (r6 <= r4) {
0x000862f6 ble 0x86270 | goto label_0;
| }
0x000862f8 ldr r7, [r5, 0x20] | r7 = *((r5 + 0x20));
| label_7:
0x000862fa add.w ip, r1, 1 |
0x000862fe add.w lr, r4, r4, lsl 1 | lr = r4 + (r4 << 1);
0x00086302 lsl.w r8, ip, 1 | r8 = ip << 1;
0x00086306 add.w lr, r7, lr, lsl 3 | lr = r7 + (lr << 3);
0x0008630a cmp r6, r8 |
0x0008630c vldr d16, [lr] | __asm ("vldr d16, [lr]");
| if (r6 <= r8) {
0x00086310 ble 0x862c6 | goto label_1;
| }
0x00086312 add.w ip, r8, ip, lsl 2 |
0x00086316 add.w ip, r7, ip, lsl 3 |
0x0008631a vldr d17, [ip] | __asm ("vldr d17, [ip]");
0x0008631e vcmpe.f64 d16, d17 | __asm ("vcmpe.f64 d16, d17");
0x00086322 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r6 <= r8) {
0x00086326 ble 0x862b8 | goto label_2;
| }
| label_8:
0x00086328 add r3, r1 | r3 += r1;
0x0008632a add.w r3, r7, r3, lsl 3 | r3 = r7 + (r3 << 3);
0x0008632e vldr d16, [r3] | __asm ("vldr d16, [r3]");
0x00086332 vcmpe.f64 d17, d16 | __asm ("vcmpe.f64 d17, d16");
0x00086336 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r6 < r8) {
0x0008633a bmi 0x86348 | goto label_10;
| }
| if (r6 > r8) {
0x0008633c bgt 0x86270 | goto label_0;
| }
0x0008633e ldrb.w r2, [ip, 0x10] | r2 = *((ip + 0x10));
0x00086342 ldrb r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00086344 cmp r2, r3 |
| if (r2 >= r3) {
0x00086346 bhs 0x86270 | goto label_0;
| }
| label_10:
0x00086348 mov r2, r8 | r2 = r8;
0x0008634a mov r0, r5 | r0 = r5;
0x0008634c bl 0x86100 | fcn_00086100 (r0, r1, r2);
0x00086350 mov r1, r8 | r1 = r8;
0x00086352 b 0x862f0 | goto label_3;
| label_6:
0x00086354 add.w r8, r5, r8, lsl 2 | r8 = r5 + (r8 << 2);
0x00086358 cmp r6, 1 |
0x0008635a ldr.w r3, [r8, 0x40] | r3 = *((r8 + 0x40));
0x0008635e str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x00086360 str.w ip, [r8, 0x40] | __asm ("str.w ip, [r8, 0x40]");
| if (r6 > 1) {
0x00086364 bgt 0x862b0 | goto label_4;
| }
0x00086366 b 0x86270 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x86368 */
| #include <stdint.h>
|
; (fcn) fcn.00086368 () | void fcn_00086368 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00086368 add.w r2, r0, r1, lsl 2 | r2 = r0 + (r1 << 2);
0x0008636c push {r4, r5, r6, lr} |
0x0008636e mov r6, r1 | r6 = r1;
0x00086370 vpush {d8} | __asm ("vpush {d8}");
0x00086374 mov r4, r0 | r4 = r0;
0x00086376 ldrb r1, [r0, 5] | r1 = *((r0 + 5));
0x00086378 ldr r3, [r2, 0x54] | r3 = *((r2 + 0x54));
0x0008637a vmov.f64 d8, d0 | __asm ("vmov.f64 d8, d0");
0x0008637e adds r3, 1 | r3++;
| if (r1 == 0) {
0x00086380 cbz r1, 0x863f0 | goto label_5;
| }
0x00086382 str r3, [r2, 0x54] | *((r2 + 0x54)) = r3;
0x00086384 vldr d16, [r0, 0x28] | __asm ("vldr d16, [r0, 0x28]");
0x00086388 vcmpe.f64 d0, d16 | __asm ("vcmpe.f64 d0, d16");
0x0008638c vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r1 >= 0) {
0x00086390 bpl 0x86400 | goto label_6;
| }
| label_0:
0x00086392 mov r1, r6 | r1 = r6;
0x00086394 vmov.f64 d0, d8 | __asm ("vmov.f64 d0, d8");
0x00086398 mov r0, r4 | r0 = r4;
0x0008639a bl 0x8618c | r0 = fcn_0008618c (r0, r1, r2);
0x0008639e mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x000863a0 cbz r0, 0x863e8 | goto label_7;
| }
0x000863a2 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000863a4 movw r2, 0xaaab |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x000863a8 movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x000863ac subs r3, r0, r3 | r3 = r0 - r3;
0x000863ae asrs r3, r3, 3 | r3 >>= 3;
0x000863b0 mul r3, r2, r3 | r3 = r2 * r3;
0x000863b4 adds r2, r3, 1 | r2 = r3 + 1;
0x000863b6 cmp r2, 4 |
| if (r2 > 4) {
0x000863b8 bgt 0x8644c | goto label_8;
| }
0x000863ba ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x000863bc adds r3, 0x11 | r3 += 0x11;
0x000863be str.w r2, [r4, r3, lsl 2] | __asm ("str.w r2, [r4, r3, lsl 2]");
| label_4:
0x000863c2 add.w lr, r4, 0x28 | lr = r4 + 0x28;
0x000863c6 movs r3, 0 | r3 = 0;
0x000863c8 mov ip, lr |
0x000863ca str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
0x000863cc ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000863d0 stm r5!, {r0, r1, r2, r3} | *(r5!) = r0;
| *((r5! + 4)) = r1;
| *((r5! + 8)) = r2;
| *((r5! + 12)) = r3;
0x000863d2 ldm.w ip, {r0, r1} | r0 = *(ip);
| r1 = *((ip + 4));
0x000863d6 stm.w r5, {r0, r1} | *(r5) = r0;
| *((r5 + 4)) = r1;
| do {
| label_1:
0x000863da mov r5, lr | r5 = lr;
0x000863dc movs r3, 1 | r3 = 1;
0x000863de vstr d8, [r4, 0x28] | __asm ("vstr d8, [r4, 0x28]");
0x000863e2 strb.w r6, [r4, 0x38] | *((r4 + 0x38)) = r6;
0x000863e6 strb r3, [r4, 5] | *((r4 + 5)) = r3;
| label_7:
0x000863e8 vpop {d8} | __asm ("vpop {d8}");
0x000863ec mov r0, r5 | r0 = r5;
0x000863ee pop {r4, r5, r6, pc} |
| label_5:
0x000863f0 ldr r1, [r0, 0x18] | r1 = *((r0 + 0x18));
| if (r1 == 0) {
0x000863f2 cbz r1, 0x86424 | goto label_9;
| }
0x000863f4 ldr r1, [r0, 0x20] | r1 = *((r0 + 0x20));
0x000863f6 str r3, [r2, 0x54] | *((r2 + 0x54)) = r3;
| if (r1 != 0) {
0x000863f8 cbnz r1, 0x8642c | goto label_10;
| }
| label_2:
0x000863fa add.w lr, r4, 0x28 | lr = r4 + 0x28;
0x000863fe b 0x863da |
| } while (1);
| label_6:
0x00086400 vcmp.f64 d0, d16 | __asm ("vcmp.f64 d0, d16");
0x00086404 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r1 != 0) {
0x00086408 bne 0x86412 | goto label_3;
| }
0x0008640a ldrb.w r3, [r0, 0x38] | r3 = *((r0 + 0x38));
0x0008640e cmp r3, r6 |
| if (r3 > r6) {
0x00086410 bhi 0x86392 | goto label_0;
| }
| label_3:
0x00086412 vmov.f64 d0, d8 | __asm ("vmov.f64 d0, d8");
0x00086416 mov r1, r6 | r1 = r6;
0x00086418 vpop {d8} | __asm ("vpop {d8}");
0x0008641c mov r0, r4 | r0 = r4;
0x0008641e pop.w {r4, r5, r6, lr} |
0x00086422 b 0x8618c | void (*0x8618c)() ();
| label_9:
0x00086424 add.w lr, r0, 0x28 | lr = r0 + 0x28;
0x00086428 str r3, [r2, 0x54] | *((r2 + 0x54)) = r3;
0x0008642a b 0x863da | goto label_1;
| label_10:
0x0008642c vldr d16, [r1] | __asm ("vldr d16, [r1]");
0x00086430 vcmpe.f64 d0, d16 | __asm ("vcmpe.f64 d0, d16");
0x00086434 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r3 < r6) {
0x00086438 bmi 0x863fa | goto label_2;
| }
0x0008643a vcmp.f64 d8, d16 | __asm ("vcmp.f64 d8, d16");
0x0008643e vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r3 != r6) {
0x00086442 bne 0x86412 | goto label_3;
| }
0x00086444 ldrb r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x00086446 cmp r3, r6 |
| if (r3 > r6) {
0x00086448 bhi 0x863fa | goto label_2;
| }
0x0008644a b 0x86412 | goto label_3;
| label_8:
0x0008644c ldr r1, [r4, 0x40] | r1 = *((r4 + 0x40));
0x0008644e ldr r0, [r4] | r0 = *(r4);
0x00086450 cmp r1, 0 |
| if (r1 == 0) {
0x00086452 beq 0x863c2 | goto label_4;
| }
0x00086454 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x00086456 subs r3, 1 | r3--;
0x00086458 str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
0x0008645a cmp r3, 0 |
| if (r3 != 0) {
0x0008645c bne 0x863c2 | goto label_4;
| }
0x0008645e bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x00086462 b 0x863c2 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x86464 */
| #include <stdint.h>
|
; (fcn) fcn.00086464 () | void fcn_00086464 (int16_t arg_18h, int16_t arg1, uint32_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00086464 push {r4, r5, r6, lr} |
0x00086466 sub sp, 8 |
0x00086468 ldrd r6, r1, [sp, 0x18] | __asm ("ldrd r6, r1, [arg_18h]");
0x0008646c mov r5, r0 | r5 = r0;
0x0008646e cmp r1, 0 |
| if (r1 == 0) {
0x00086470 beq 0x864e4 | goto label_4;
| }
| if (r1 <= 0) {
0x00086472 ble 0x864fc | goto label_5;
| }
0x00086474 movw r1, 0x7eaf |
0x00086478 movt r1, 0x51d0 | r1 = 0x51d07eaf;
0x0008647c umull r0, r1, r1, r2 | r0:r1 = r1 * r2;
0x00086480 subs r0, r2, r1 | r0 = r2 - r1;
0x00086482 add.w r1, r1, r0, lsr 1 | r1 += (r0 >> 1);
0x00086486 lsrs r1, r1, 6 | r1 >>= 6;
0x00086488 add.w r0, r1, r1, lsl 1 | r0 = r1 + (r1 << 1);
0x0008648c add.w r1, r1, r0, lsl 5 | r1 += (r0 << 5);
0x00086490 subs r1, r2, r1 | r1 = r2 - r1;
0x00086492 add.w r1, r5, r1, lsl 2 | r1 = r5 + (r1 << 2);
0x00086496 ldr r4, [r1, 0x74] | r4 = *((r1 + 0x74));
| if (r4 != 0) {
0x00086498 cbnz r4, 0x864a2 | goto label_6;
| }
0x0008649a b 0x86510 | goto label_7;
| do {
0x0008649c ldr r4, [r4, 0x1c] | r4 = *((r4 + 0x1c));
0x0008649e cmp r4, 0 |
| if (r4 == 0) {
0x000864a0 beq 0x86510 | goto label_7;
| }
| label_6:
0x000864a2 ldrd r0, r1, [r4, 8] | __asm ("ldrd r0, r1, [r4, 8]");
0x000864a6 cmp r3, r1 |
0x000864a8 it eq |
| if (r3 == r1) {
0x000864aa cmpeq r2, r0 | __asm ("cmpeq r2, r0");
| }
0x000864ac bne 0x8649c |
| } while (r3 != r1);
0x000864ae cmp r6, 0 |
| if (r6 == 0) {
0x000864b0 beq 0x8651c | goto label_8;
| }
0x000864b2 cmp r6, r4 |
| if (r6 == r4) {
0x000864b4 beq 0x86508 | goto label_9;
| }
| label_0:
0x000864b6 mov r1, r6 | r1 = r6;
0x000864b8 b 0x864be |
| while (r1 != 0) {
0x000864ba cmp r1, r4 |
| if (r1 == r4) {
0x000864bc beq 0x86508 | goto label_9;
| }
0x000864be ldr r1, [r1] | r1 = *(r1);
0x000864c0 cmp r1, 0 |
0x000864c2 bne 0x864ba |
| }
| if (r4 == 0) {
0x000864c4 cbz r4, 0x86516 | goto label_10;
| }
0x000864c6 ldr r1, [r4] | r1 = *(r4);
| if (r1 != 0) {
0x000864c8 cbz r1, 0x864d2 |
0x000864ca ldr r0, [r1, 0x10] | r0 = *((r1 + 0x10));
0x000864cc subs r0, 1 | r0--;
0x000864ce str r0, [r1, 0x10] | *((r1 + 0x10)) = r0;
| if (r0 == 0) {
0x000864d0 cbz r0, 0x86528 | goto label_11;
| }
| }
| label_3:
0x000864d2 cmp r6, 0 |
| if (r6 == 0) {
0x000864d4 beq 0x86538 | goto label_12;
| }
0x000864d6 ldr r1, [r6, 0x10] | r1 = *((r6 + 0x10));
0x000864d8 adds r1, 1 | r1++;
0x000864da str r1, [r6, 0x10] | *((r6 + 0x10)) = r1;
0x000864dc ldr r1, [pc, 0x60] |
0x000864de str r6, [r4] | *(r4) = r6;
0x000864e0 add r1, pc | r1 = 0x10ca24;
0x000864e2 b 0x864ea | goto label_13;
| label_4:
0x000864e4 ldr r1, [pc, 0x5c] |
0x000864e6 add r1, pc | r1 = 0x10ca2e;
| if (r6 == 0) {
| label_2:
0x000864e8 cbz r6, 0x86504 | goto label_1;
| }
| do {
| label_13:
0x000864ea mov r0, r5 | r0 = r5;
0x000864ec ldrd r4, r5, [r6, 8] | __asm ("ldrd r4, r5, [r6, 8]");
0x000864f0 strd r4, r5, [sp, 0x18] | __asm ("strd r4, r5, [sp, 0x18]");
0x000864f4 add sp, 8 |
0x000864f6 pop.w {r4, r5, r6, lr} |
0x000864fa bx r1 | return uint32_t (*r1)() ();
| label_5:
0x000864fc ldr r1, [pc, 0x48] |
0x000864fe add r1, pc | r1 = 0x10ca4a;
0x00086500 cmp r6, 0 |
0x00086502 bne 0x864ea |
| } while (r6 != 0);
| label_1:
0x00086504 movs r0, 1 | r0 = 1;
0x00086506 b 0x8650c | goto label_14;
| label_9:
0x00086508 movw r0, 0x10b | r0 = 0x10b;
| label_14:
0x0008650c add sp, 8 |
0x0008650e pop {r4, r5, r6, pc} |
| label_7:
0x00086510 cmp r6, 0 |
| if (r6 != 0) {
0x00086512 bne 0x864b6 | goto label_0;
| }
0x00086514 b 0x86504 | goto label_1;
| label_10:
0x00086516 ldr r1, [pc, 0x34] |
0x00086518 add r1, pc | r1 = 0x10ca6a;
0x0008651a b 0x864e8 | goto label_2;
| label_8:
0x0008651c ldr r1, [r4] | r1 = *(r4);
| if (r1 != 0) {
0x0008651e cbz r1, 0x86538 |
0x00086520 ldr r0, [r1, 0x10] | r0 = *((r1 + 0x10));
0x00086522 subs r0, 1 | r0--;
0x00086524 str r0, [r1, 0x10] | *((r1 + 0x10)) = r0;
| if (r0 != 0) {
0x00086526 cbnz r0, 0x86538 | goto label_12;
| }
| label_11:
0x00086528 mov r0, r5 | r0 = r5;
0x0008652a strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x0008652e bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x00086532 ldrd r2, r3, [sp] | __asm ("ldrd r2, r3, [sp]");
0x00086536 b 0x864d2 | goto label_3;
| }
| label_12:
0x00086538 movs r3, 0 | r3 = 0;
0x0008653a str r3, [r4] | *(r4) = r3;
0x0008653c b 0x86504 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x86b3c */
| #include <stdint.h>
|
; (fcn) fcn.00086b3c () | void fcn_00086b3c (int16_t arg_0h, int16_t arg1) {
| int16_t var_3ch;
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
0x00086b3c ldr r1, [pc, 0x118] |
0x00086b3e ldr r2, [pc, 0x11c] | r2 = *(0x86c5e);
0x00086b40 ldr r3, [r0] | r3 = *(r0);
0x00086b42 add r1, pc | r1 = 0x10d79e;
0x00086b44 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00086b48 ldr r2, [r1, r2] |
0x00086b4a sub sp, 0x24 |
0x00086b4c movs r6, 0 | r6 = 0;
0x00086b4e mov sb, r0 | sb = r0;
0x00086b50 ldr.w sl, [r3, 0xc] | sl = *((r3 + 0xc));
0x00086b54 add r1, sp, 0x10 | r1 += var_10h;
0x00086b56 ldr r2, [r2] | r2 = imp.sinh;
0x00086b58 str r2, [sp, 0x1c] | var_1ch = r2;
0x00086b5a mov.w r2, 0 | r2 = 0;
0x00086b5e ldrd r2, r3, [r0, 0x10] | __asm ("ldrd r2, r3, [arg_0hx10]");
0x00086b62 add r0, sp, 0xc | r0 += var_ch;
0x00086b64 strd r6, r6, [sp, 0xc] | __asm ("strd r6, r6, [var_10h]");
0x00086b68 strd r6, r6, [r1, 4] | __asm ("strd r6, r6, [var_14h]");
0x00086b6c bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00086b70 cmp sl, r6 |
0x00086b72 ldr.w fp, [sp, 0x10] | fp = var_10h;
| if (sl > r6) {
0x00086b76 bgt 0x86bac | goto label_3;
| }
0x00086b78 b 0x86c08 | goto label_4;
| do {
| label_0:
0x00086b7a cmp r7, 0x80 |
0x00086b7c add.w r0, fp, r5 | r0 = fp + r5;
0x00086b80 sbcs r3, r8, 0 | __asm ("sbcs r3, r8, 0");
0x00086b84 itt lo |
| if (r7 >= 0x80) {
0x00086b86 movlo r3, 1 | r3 = 1;
| }
| if (r7 >= 0x80) {
0x00086b88 strblo r7, [fp, r5] | *((fp + r5)) = r7;
| }
| if (r7 > 0x80) {
0x00086b8c blo 0x86ba2 |
0x00086b8e cmp.w r7, 0x4000 |
0x00086b92 sbcs r3, r8, 0 | __asm ("sbcs r3, r8, 0");
| if (r7 <= 0x4000) {
0x00086b96 blo 0x86bf6 | goto label_5;
| }
0x00086b98 mov r3, r8 | r3 = r8;
0x00086b9a mov r2, r7 | r2 = r7;
0x00086b9c bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x00086ba0 mov r3, r0 | r3 = r0;
| }
| label_1:
0x00086ba2 add r5, r3 | r5 += r3;
0x00086ba4 str r5, [sp, 0x14] | var_14h = r5;
| label_2:
0x00086ba6 adds r6, 1 | r6++;
0x00086ba8 cmp sl, r6 |
| if (sl == r6) {
0x00086baa beq 0x86c08 | goto label_4;
| }
| label_3:
0x00086bac ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00086bb0 ldrd r5, r4, [sp, 0x14] | __asm ("ldrd r5, r4, [var_14h]");
0x00086bb4 ldr.w r7, [r3, r6, lsl 3] | offset_0 = r6 << 3;
| r7 = *((r3 + offset_0));
0x00086bb8 add.w r2, r5, 9 | r2 = r5 + 9;
0x00086bbc add.w r3, r3, r6, lsl 3 | r3 += (r6 << 3);
0x00086bc0 cmp r2, r4 |
0x00086bc2 ldr.w r8, [r3, 4] | r8 = *((r3 + 4));
0x00086bc6 bls 0x86b7a |
| } while (r2 < r4);
0x00086bc8 cmp r4, 0 |
0x00086bca it eq |
| if (r4 != 0) {
0x00086bcc moveq r4, 0x40 | r4 = 0x40;
| }
0x00086bce asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x00086bd0 cmp r4, r2 |
0x00086bd2 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r4 >= r2) {
0x00086bd6 bhs 0x86be4 | goto label_6;
| }
| do {
0x00086bd8 adds r4, r4, r4 | r4 += r4;
0x00086bda adcs r3, r3 | __asm ("adcs r3, r3");
0x00086bdc cmp r4, r2 |
0x00086bde sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x00086be2 blo 0x86bd8 |
| } while (r4 <= r2);
| label_6:
0x00086be4 mov r2, r4 | r2 = r4;
0x00086be6 mov r0, fp | r0 = fp;
0x00086be8 blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 == 0) {
0x00086bec cbz r0, 0x86c4e | goto label_7;
| }
0x00086bee mov fp, r0 |
0x00086bf0 str r4, [sp, 0x18] | var_18h = r4;
0x00086bf2 str r0, [sp, 0x10] | var_10h = r0;
0x00086bf4 b 0x86b7a | goto label_0;
| label_5:
0x00086bf6 lsrs r2, r7, 7 | r2 = r7 >> 7;
0x00086bf8 and r7, r7, 0x7f | r7 &= 0x7f;
0x00086bfc movs r3, 2 | r3 = 2;
0x00086bfe strb r7, [r0, 1] | *((r0 + 1)) = r7;
0x00086c00 orn r2, r2, 0x7f | r2 |= 0x7f;
| r2 = ~r2;
0x00086c04 strb r2, [r0] | *(r0) = r2;
0x00086c06 b 0x86ba2 | goto label_1;
| label_4:
0x00086c08 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00086c0a cbz r4, 0x86c2e |
| while (1) {
0x00086c0c mov r0, fp | r0 = fp;
0x00086c0e blx 0x8404 | fcn_00008404 ();
0x00086c12 ldr r2, [pc, 0x4c] |
0x00086c14 ldr r3, [pc, 0x44] | r3 = *(0x86c5c);
0x00086c16 add r2, pc | r2 = 0x10d87c;
0x00086c18 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00086c1a ldr r2, [r3] | r2 = imp.sinh;
0x00086c1c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00086c1e eors r2, r3 | r2 ^= r3;
0x00086c20 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00086c24 bne 0x86c54 | goto label_8;
| }
0x00086c26 mov r0, r4 | r0 = r4;
0x00086c28 add sp, 0x24 |
0x00086c2a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00086c2e ldr.w r5, [sb, 4] | r5 = *((sb + 4));
0x00086c32 ldr r4, [r5, 0x24] | r4 = *((r5 + 0x24));
| if (r4 == 0) {
0x00086c34 cbnz r4, 0x86c48 |
0x00086c36 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00086c38 movs r2, 1 | r2 = 1;
0x00086c3a movs r3, 0 | r3 = 0;
0x00086c3c mov r0, r5 | r0 = r5;
0x00086c3e strd fp, r1, [sp] | __asm ("strd fp, r1, [sp]");
0x00086c42 bl 0x86aa0 | fcn_00086aa0 (r0, r1, r2, r3);
0x00086c46 ldr r4, [r5, 0x24] | r4 = *((r5 + 0x24));
| }
0x00086c48 movs r3, 0 | r3 = 0;
0x00086c4a str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
0x00086c4c b 0x86c0c |
| }
| label_7:
0x00086c4e movs r3, 7 | r3 = 7;
0x00086c50 str r3, [sp, 0xc] | var_ch = r3;
0x00086c52 b 0x86ba6 | goto label_2;
| label_8:
0x00086c54 blx 0x883c | fcn_0000883c ();
0x00086c58 movs r1, 0x56 | r1 = 0x56;
0x00086c5a movs r4, r0 | r4 = r0;
0x00086c5c lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00086c5e movs r0, r0 |
0x00086c60 movs r0, 0x82 | r0 = 0x82;
0x00086c62 movs r4, r0 | r4 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x86c64 */
| #include <stdint.h>
|
; (fcn) fcn.00086c64 () | void fcn_00086c64 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int32_t var_18h_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_28h_2;
| int16_t var_30h;
| int32_t var_30h_2;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00086c64 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00086c68 mov fp, r2 |
0x00086c6a ldr r2, [pc, 0x210] |
0x00086c6c mov sb, r3 | sb = r3;
0x00086c6e sub sp, 0x44 |
0x00086c70 ldr r3, [pc, 0x20c] | r3 = *(0x86e80);
0x00086c72 add r2, pc | r2 = 0x10daf4;
0x00086c74 ldr r6, [r0, 0x24] | r6 = *((r0 + 0x24));
0x00086c76 ldr r3, [r2, r3] |
0x00086c78 ldr r3, [r3] | r3 = imp.sinh;
0x00086c7a str r3, [sp, 0x3c] | var_3ch = r3;
0x00086c7c mov.w r3, 0 | r3 = 0;
0x00086c80 cmp r6, 0 |
| if (r6 != 0) {
0x00086c82 bne.w 0x86da8 | goto label_5;
| }
0x00086c86 mov r7, r0 | r7 = r0;
0x00086c88 mov r8, r1 | r8 = r1;
0x00086c8a mov sl, fp | sl = fp;
0x00086c8c add.w r3, r0, 0x24 | r3 = r0 + 0x24;
0x00086c90 str r3, [sp, 0x20] | var_20h = r3;
0x00086c92 strd r6, r6, [sp, 0x10] | __asm ("strd r6, r6, [var_10h]");
0x00086c96 str.w sb, [sp, 0xc] | __asm ("str.w sb, [var_ch]");
| do {
0x00086c9a ldr.w r1, [r8, 0x48] | r1 = *((r8 + 0x48));
0x00086c9e lsls r5, r6, 5 | r5 = r6 << 5;
0x00086ca0 ldr r3, [r7] | r3 = *(r7);
0x00086ca2 adds r4, r1, r5 | r4 = r1 + r5;
0x00086ca4 ldr r2, [r3, 0x4c] | r2 = *((r3 + 0x4c));
0x00086ca6 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00086ca8 cmp r3, r2 |
| if (r3 < r2) {
0x00086caa blt 0x86d7e | goto label_6;
| }
0x00086cac ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00086cae movs r2, 1 | r2 = 1;
0x00086cb0 strb r2, [r3] | *(r3) = r2;
0x00086cb2 ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
| if (r2 == 0) {
0x00086cb4 cbnz r2, 0x86cde |
0x00086cb6 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00086cb8 ldr r0, [r1, r5] | r0 = *((r1 + r5));
0x00086cba ldr.w r1, [r8] | r1 = *(r8);
0x00086cbe adds r2, r2, r3 | r2 += r3;
0x00086cc0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00086cc2 adds r2, r2, r0 | r2 += r0;
0x00086cc4 add.w r3, r3, r1, lsl 5 | r3 += (r1 << 5);
0x00086cc8 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x00086cca add.w r3, r3, 0x10 | r3 += 0x10;
0x00086cce str r1, [sp, 4] | var_4h = r1;
0x00086cd0 adc.w r3, r3, r0, asr 31 | __asm ("adc.w r3, r3, r0, asr 31");
0x00086cd4 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x00086cd6 mov r0, r7 | r0 = r7;
0x00086cd8 str r1, [sp] | *(sp) = r1;
0x00086cda bl 0x86aa0 | fcn_00086aa0 (r0, r1, r2, r3);
| }
0x00086cde adds r2, r6, 2 | r2 = r6 + 2;
0x00086ce0 mov r1, r8 | r1 = r8;
0x00086ce2 mov r0, r7 | r0 = r7;
0x00086ce4 bl 0x4ae48 | fcn_0004ae48 (r0, r1, r2);
0x00086ce8 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x00086cea ldr.w sb, [r8, 0x48] | sb = *((r8 + 0x48));
0x00086cee add.w r4, sb, r5 | r4 = sb + r5;
| if (r3 == 0) {
0x00086cf2 cbnz r3, 0x86cfa |
0x00086cf4 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00086cf6 cmp r3, 0 |
| if (r3 == 0) {
0x00086cf8 beq 0x86dca | goto label_7;
| }
| }
| label_1:
0x00086cfa movs r3, 0 | r3 = 0;
0x00086cfc mov.w ip, 9 |
0x00086d00 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00086d02 movs r1, 1 | r1 = 1;
0x00086d04 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00086d06 ldr.w r3, [sb, r5] | r3 = *((sb + r5));
0x00086d0a adds r3, 1 | r3++;
0x00086d0c str.w r3, [sb, r5] | __asm ("str.w r3, [sb, r5]");
0x00086d10 mov.w sb, 0 | sb = 0;
0x00086d14 mov r3, sb | r3 = sb;
| label_4:
0x00086d16 cmp r6, 0 |
| if (r6 != 0) {
0x00086d18 bne 0x86dc2 | goto label_8;
| }
0x00086d1a ldr.w r2, [r8, 4] | r2 = *((r8 + 4));
0x00086d1e str r2, [sp, 0x18] | var_18h = r2;
| label_0:
0x00086d20 ldr r5, [sp, 0x18] | r5 = var_18h;
0x00086d22 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00086d24 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x00086d26 asrs r5, r5, 0x1f | r5 >>= 0x1f;
0x00086d28 cmp ip, r2 |
0x00086d2a str r5, [sp, 0x24] | var_24h = r5;
0x00086d2c add.w r5, r4, 0x10 | r5 = r4 + 0x10;
| if (ip > r2) {
0x00086d30 bhi 0x86e2c | goto label_9;
| }
| label_2:
0x00086d32 strb r1, [r0, r3] | *((r0 + r3)) = r1;
0x00086d34 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00086d36 adds r3, 1 | r3++;
0x00086d38 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
| label_3:
0x00086d3a ldr.w fp, [sp, 0x20] | fp = var_20h;
0x00086d3e mov r1, r5 | r1 = r5;
0x00086d40 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00086d42 adds r6, 1 | r6++;
0x00086d44 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00086d46 mov r0, fp | r0 = fp;
0x00086d48 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00086d4c ldr r3, [sp, 0xc] | r3 = var_ch;
0x00086d4e mov r2, sl | r2 = sl;
0x00086d50 mov r1, r5 | r1 = r5;
0x00086d52 mov r0, fp | r0 = fp;
0x00086d54 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00086d58 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00086d5a ldr r1, [sp, 0xc] | r1 = var_ch;
0x00086d5c adds.w r2, r3, -0x80000000 | r2 = r3 + -0x80000000;
0x00086d60 mov.w r3, 1 | r3 = 1;
0x00086d64 strd r3, sl, [r4, 4] | __asm ("strd r3, sl, [r4, 4]");
0x00086d68 str r2, [sp, 0x10] | var_10h = r2;
0x00086d6a ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x00086d6c ldr r2, [sp, 0x14] | r2 = var_14h;
0x00086d6e str r1, [r4, 0xc] | *((r4 + 0xc)) = r1;
0x00086d70 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00086d74 orrs.w r3, sb, r3 | r3 = sb | r3;
0x00086d78 str r2, [sp, 0x14] | var_14h = r2;
0x00086d7a beq 0x86c9a |
| } while (r3 == sb);
0x00086d7c b 0x86da8 | goto label_5;
| label_6:
0x00086d7e ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00086d80 cmp r1, 0 |
| if (r1 == 0) {
0x00086d82 beq 0x86e6c | goto label_10;
| }
0x00086d84 ldrd r2, r3, [r4, 8] | __asm ("ldrd r2, r3, [r4, 8]");
0x00086d88 add.w r1, r4, 0x10 | r1 = r4 + 0x10;
0x00086d8c ldr.w sb, [sp, 0xc] | sb = var_ch;
0x00086d90 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00086d92 subs.w r2, sl, r2 | r2 = sl - r2;
0x00086d96 sbc.w r3, sb, r3 | __asm ("sbc.w r3, sb, r3");
0x00086d9a bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00086d9e movs r3, 1 | r3 = 1;
0x00086da0 str.w sb, [r4, 0xc] | __asm ("str.w sb, [r4, 0xc]");
0x00086da4 strd r3, sl, [r4, 4] | __asm ("strd r3, sl, [r4, 4]");
| label_5:
0x00086da8 ldr r2, [pc, 0xd8] |
0x00086daa ldr r3, [pc, 0xd4] | r3 = *(0x86e82);
0x00086dac add r2, pc | r2 = 0x10dc34;
0x00086dae ldr r3, [r2, r3] | r3 = imp.sinh;
0x00086db0 ldr r2, [r3] | r2 = imp.sinh;
0x00086db2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00086db4 eors r2, r3 | r2 ^= r3;
0x00086db6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00086dba bne 0x86e76 | goto label_11;
| }
0x00086dbc add sp, 0x44 |
0x00086dbe pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00086dc2 ldr r2, [r4, -0x20] | r2 = *((r4 - 0x20));
0x00086dc6 str r2, [sp, 0x18] | var_18h = r2;
0x00086dc8 b 0x86d20 | goto label_0;
| label_7:
0x00086dca ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00086dcc add.w r2, r4, 0x30 | r2 = r4 + 0x30;
0x00086dd0 add r1, sp, 0x30 | r1 += var_30h;
0x00086dd2 str r2, [sp, 0x24] | var_24h = r2;
0x00086dd4 adds r0, r3, 1 | r0 = r3 + 1;
0x00086dd6 str r3, [sp, 0x18] | var_18h = r3;
0x00086dd8 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00086ddc ldr r3, [sp, 0x18] | r3 = var_18h;
0x00086dde adds r0, 1 | r0++;
0x00086de0 add r0, r3 | r0 += r3;
0x00086de2 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00086de6 ldr.w r3, [sb, r5] | r3 = *((sb + r5));
0x00086dea ldr r2, [sp, 0x24] | r2 = var_24h;
0x00086dec ldrd fp, ip, [sp, 0x30] | __asm ("ldrd fp, ip, [var_30h]");
0x00086df0 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00086df2 mov r1, r2 | r1 = r2;
0x00086df4 str r3, [r4, 0x20] | *((r4 + 0x20)) = r3;
0x00086df6 movs r2, 0 | r2 = 0;
0x00086df8 movs r3, 0 | r3 = 0;
0x00086dfa strd fp, ip, [sp, 0x18] | __asm ("strd fp, ip, [var_18h]");
0x00086dfe bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00086e02 ldr.w r2, [sb, r5] | r2 = *((sb + r5));
0x00086e06 ldrd fp, r1, [sp, 0x20] | __asm ("ldrd fp, r1, [var_20h]");
0x00086e0a asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00086e0c mov r0, fp | r0 = fp;
0x00086e0e bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00086e12 ldrd r2, r3, [sp, 0x18] | __asm ("ldrd r2, r3, [var_18h]");
0x00086e16 mov r0, fp | r0 = fp;
0x00086e18 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00086e1a bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00086e1e ldrd fp, ip, [sp, 0x18] | __asm ("ldrd fp, ip, [var_18h]");
0x00086e22 movs r3, 1 | r3 = 1;
0x00086e24 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00086e26 strd fp, ip, [r4, 0x28] | __asm ("strd fp, ip, [r4, 0x28]");
0x00086e2a b 0x86cfa | goto label_1;
| label_9:
0x00086e2c cmp r2, 0 |
0x00086e2e it eq |
| if (r2 != 0) {
0x00086e30 moveq r2, 0x40 | r2 = 0x40;
| }
0x00086e32 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00086e34 cmp r2, ip |
0x00086e36 sbcs lr, r3, 0 | __asm ("sbcs lr, r3, 0");
| if (r2 >= ip) {
0x00086e3a bhs 0x86e50 | goto label_12;
| }
0x00086e3c ldr.w fp, [sp, 0xc] | fp = var_ch;
| do {
0x00086e40 adds r2, r2, r2 | r2 += r2;
0x00086e42 adcs r3, r3 | __asm ("adcs r3, r3");
0x00086e44 cmp r2, ip |
0x00086e46 sbcs lr, r3, 0 | __asm ("sbcs lr, r3, 0");
0x00086e4a blo 0x86e40 |
| } while (r2 <= ip);
0x00086e4c str.w fp, [sp, 0xc] | __asm ("str.w fp, [var_ch]");
| label_12:
0x00086e50 strd r2, r1, [sp, 0x28] | __asm ("strd r2, r1, [var_28h]");
0x00086e54 blx 0x8500 | fcn_00008500 ();
0x00086e58 ldrd r2, r1, [sp, 0x28] | __asm ("ldrd r2, r1, [var_28h]");
| if (r0 != 0) {
0x00086e5c cbz r0, 0x86e66 |
0x00086e5e ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00086e60 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x00086e62 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x00086e64 b 0x86d32 | goto label_2;
| }
0x00086e66 movs r3, 7 | r3 = 7;
0x00086e68 str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x00086e6a b 0x86d3a | goto label_3;
| label_10:
0x00086e6c mov.w sb, 1 | sb = 1;
0x00086e70 add.w ip, r3, 9 |
0x00086e74 b 0x86d16 | goto label_4;
| label_11:
0x00086e76 blx 0x883c | fcn_0000883c ();
0x00086e7a nop |
0x00086e7c movs r0, 0x26 | r0 = 0x26;
0x00086e7e movs r4, r0 | r4 = r0;
0x00086e80 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00086e82 movs r0, r0 |
0x00086e84 subs r4, r5, 3 | r4 = r5 - 3;
0x00086e86 movs r4, r0 | r4 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x87018 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00087018 () | void fcn_00087018 (int16_t arg_24h, int16_t arg1, int16_t arg2) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x00087018 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0008701c mov fp, r0 |
0x0008701e ldr r3, [r0] | r3 = *(r0);
0x00087020 mov sl, r1 | sl = r1;
0x00087022 sub sp, 0x1c |
0x00087024 movs r2, 0 | r2 = 0;
0x00087026 ldr r0, [pc, 0x1c8] |
0x00087028 add r6, sp, 8 | r6 += var_8h;
0x0008702a ldr r1, [pc, 0x1c8] | r1 = *(0x871f6);
0x0008702c ldr r5, [r3, 0x48] | r5 = *((r3 + 0x48));
0x0008702e movs r3, 0 | r3 = 0;
0x00087030 add r0, pc | r0 = 0x10e226;
0x00087032 ldr r1, [r0, r1] |
0x00087034 mov r0, r2 | r0 = r2;
0x00087036 ldr r1, [r1] | r1 = imp.sinh;
0x00087038 str r1, [sp, 0x14] | var_14h = r1;
0x0008703a mov.w r1, 0 | r1 = 0;
0x0008703e strd r2, r2, [sp, 8] | __asm ("strd r2, r2, [var_8h]");
0x00087042 str r2, [sp, 0x10] | var_10h = r2;
0x00087044 movs r2, 0x40 | r2 = 0x40;
0x00087046 blx 0x8500 | r0 = fcn_00008500 ();
0x0008704a cmp r0, 0 |
| if (r0 == 0) {
0x0008704c beq.w 0x871dc | goto label_5;
| }
0x00087050 bic.w r5, r5, r5, asr 31 | r5 = BIT_MASK (r5, r5);
0x00087054 vldr d16, [pc, 0x190] | __asm ("vldr d16, aav.0x000000ff");
0x00087058 mov r4, r0 | r4 = r0;
0x0008705a str r0, [sp, 8] | var_8h = r0;
0x0008705c rev r3, r5 | r5 = SWAP32 (r3);
0x0008705e str r3, [r0] | *(r0) = r3;
0x00087060 add r3, sp, 0xc | r3 += var_ch;
0x00087062 ldr.w r2, [sl, 0x14] | r2 = *((sl + 0x14));
0x00087066 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0008706a cmp r2, 0x80 |
0x0008706c asr.w r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00087070 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x00087074 ittt lo |
| if (r2 >= 0x80) {
0x00087076 movlo r1, 5 | r1 = 5;
| }
| if (r2 >= 0x80) {
0x00087078 strblo r2, [r0, 4] | *((r0 + 4)) = r2;
| }
| if (r2 >= 0x80) {
0x0008707a movlo r7, r1 | r7 = r1;
| }
| if (r2 > 0x80) {
0x0008707c blo 0x87094 |
0x0008707e cmp.w r2, 0x4000 |
0x00087082 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x00087086 blo.w 0x871a4 | goto label_6;
| }
0x0008708a adds r0, 4 | r0 += 4;
0x0008708c bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
0x00087090 adds r7, r0, 4 | r7 = r0 + 4;
0x00087092 mov r1, r7 | r1 = r7;
| }
| label_1:
0x00087094 ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x00087098 adds r0, r4, r1 | r0 = r4 + r1;
0x0008709a str r7, [sp, 0xc] | var_ch = r7;
0x0008709c cmp r2, 0x80 |
0x0008709e asr.w r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000870a2 sbcs r5, r3, 0 | __asm ("sbcs r5, r3, 0");
0x000870a6 itt lo |
| if (r2 >= 0x80) {
0x000870a8 movlo r0, 1 | r0 = 1;
| }
| if (r2 >= 0x80) {
0x000870aa strblo r2, [r4, r1] | *((r4 + r1)) = r2;
| }
| if (r2 > 0x80) {
0x000870ac blo 0x870be |
0x000870ae cmp.w r2, 0x4000 |
0x000870b2 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x000870b6 blo.w 0x871ca | goto label_7;
| }
0x000870ba bl 0x9758 | fcn_00009758 (r0, r1, r2);
| }
| label_3:
0x000870be ldrd r2, r3, [sl, 8] | __asm ("ldrd r2, r3, [sl, 8]");
0x000870c2 adds r5, r0, r7 | r5 = r0 + r7;
0x000870c4 adds r0, r4, r5 | r0 = r4 + r5;
0x000870c6 str r5, [sp, 0xc] | var_ch = r5;
0x000870c8 cmp r2, 0x80 |
0x000870ca sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x000870ce itt lo |
| if (r2 >= 0x80) {
0x000870d0 movlo r0, 1 | r0 = 1;
| }
| if (r2 >= 0x80) {
0x000870d2 strblo r2, [r4, r5] | *((r4 + r5)) = r2;
| }
| if (r2 > 0x80) {
0x000870d4 blo 0x870e4 |
0x000870d6 cmp.w r2, 0x4000 |
0x000870da sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x000870de blo 0x871b8 | goto label_8;
| }
0x000870e0 bl 0x9758 | r0 = fcn_00009758 (r0, r1, r2);
| }
| label_2:
0x000870e4 add r5, r0 | r5 += r0;
0x000870e6 str r5, [sp, 0xc] | var_ch = r5;
| label_4:
0x000870e8 ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x000870ec cmp r3, 0 |
0x000870ee ittt gt |
| if (r3 <= 0) {
0x000870f0 addgt r7, fp, 0x24 | r7 += arg_24h;
| }
| if (r3 <= 0) {
0x000870f4 movgt r5, sl | r5 = sl;
| }
| if (r3 > 0) {
0x000870f6 mov.w sb, 0 | sb = 0;
| }
| if (r3 <= 0) {
0x000870fa ble 0x8716c | goto label_9;
| }
| label_0:
0x000870fc ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x000870fe mov r1, r6 | r1 = r6;
0x00087100 mov r0, r7 | r0 = r7;
0x00087102 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00087104 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00087108 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x0008710a mov r1, r6 | r1 = r6;
0x0008710c mov r0, r7 | r0 = r7;
0x0008710e asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00087110 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00087114 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00087116 cmp r3, 0 |
0x00087118 it gt |
| if (r3 <= 0) {
0x0008711a movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x0008711c ble 0x8715e | goto label_10;
| }
| do {
0x0008711e ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x00087120 add.w r3, r4, r4, lsl 1 | r3 = r4 + (r4 << 1);
0x00087124 mov r1, r6 | r1 = r6;
0x00087126 lsl.w r8, r3, 2 | r8 = r3 << 2;
0x0008712a mov r0, r7 | r0 = r7;
0x0008712c ldr.w r2, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r2 = *((r2 + offset_0));
0x00087130 adds r4, 1 | r4++;
0x00087132 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00087134 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00087138 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0008713a mov r1, r6 | r1 = r6;
0x0008713c mov r0, r7 | r0 = r7;
0x0008713e add r3, r8 | r3 += r8;
0x00087140 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00087142 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00087144 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00087148 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0008714a mov r1, r6 | r1 = r6;
0x0008714c mov r0, r7 | r0 = r7;
0x0008714e add r3, r8 | r3 += r8;
0x00087150 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x00087152 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00087154 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00087158 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0008715a cmp r4, r3 |
0x0008715c blt 0x8711e |
| } while (r4 < r3);
| label_10:
0x0008715e ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x00087162 add.w sb, sb, 1 | sb++;
0x00087166 adds r5, 0xc | r5 += 0xc;
0x00087168 cmp sb, r3 |
| if (sb < r3) {
0x0008716a blt 0x870fc | goto label_0;
| }
| label_9:
0x0008716c ldr.w r3, [fp, 0x24] | r3 = *(arg_24h);
0x00087170 ldr r4, [sp, 8] | r4 = var_8h;
| if (r3 == 0) {
0x00087172 cbnz r3, 0x87184 |
0x00087174 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00087176 movs r2, 0xa | r2 = 0xa;
0x00087178 movs r3, 0 | r3 = 0;
0x0008717a mov r0, fp | r0 = fp;
0x0008717c strd r4, r1, [sp] | __asm ("strd r4, r1, [sp]");
0x00087180 bl 0x86aa0 | fcn_00086aa0 (r0, r1, r2, r3);
| }
0x00087184 ldr r2, [pc, 0x70] |
0x00087186 ldr r3, [pc, 0x6c] | r3 = *(0x871f6);
0x00087188 add r2, pc | r2 = 0x10e384;
0x0008718a ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008718c ldr r2, [r3] | r2 = imp.sinh;
0x0008718e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00087190 eors r2, r3 | r2 ^= r3;
0x00087192 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00087196 bne 0x871e4 |
0x00087198 mov r0, r4 | r0 = r4;
0x0008719a add sp, 0x1c |
0x0008719c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000871a0 b.w 0x8400 | void (*0x8400)() ();
| label_6:
0x000871a4 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x000871a6 movs r1, 6 | r1 = 6;
0x000871a8 and r2, r2, 0x7f | r2 &= 0x7f;
0x000871ac orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x000871b0 mov r7, r1 | r7 = r1;
0x000871b2 strb r2, [r0, 5] | *((r0 + 5)) = r2;
0x000871b4 strb r3, [r0, 4] | *((r0 + 4)) = r3;
0x000871b6 b 0x87094 | goto label_1;
| label_8:
0x000871b8 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x000871ba and r2, r2, 0x7f | r2 &= 0x7f;
0x000871be orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x000871c2 strb r3, [r4, r5] | *((r4 + r5)) = r3;
0x000871c4 strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x000871c6 movs r0, 2 | r0 = 2;
0x000871c8 b 0x870e4 | goto label_2;
| label_7:
0x000871ca lsrs r3, r2, 7 | r3 = r2 >> 7;
0x000871cc and r2, r2, 0x7f | r2 &= 0x7f;
0x000871d0 strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x000871d2 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x000871d6 strb r3, [r0] | *(r0) = r3;
0x000871d8 movs r0, 2 | r0 = 2;
0x000871da b 0x870be | goto label_3;
| label_5:
0x000871dc movs r3, 7 | r3 = 7;
0x000871de str.w r3, [fp, 0x24] | __asm ("str.w r3, [arg_24h]");
0x000871e2 b 0x870e8 | goto label_4;
| }
0x000871e4 blx 0x883c | r0 = fcn_0000883c ();
0x000871e8 movs r4, r0 | r4 = r0;
0x000871ea movs r0, r0 |
0x000871ec lsls r0, r0, 1 | r0 <<= 1;
0x000871ee movs r0, r0 |
0x000871f0 adds r0, r5, 1 | r0 = r5 + 1;
0x000871f2 movs r4, r0 | r4 = r0;
0x000871f4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000871f6 movs r0, r0 |
0x000871f8 subs r0, r2, r4 | r0 = r2 - r4;
0x000871fa movs r4, r0 | r4 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x872b8 */
| #include <stdint.h>
|
; (fcn) fcn.000872b8 () | void fcn_000872b8 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x000872b8 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x000872bc mov sl, r0 | sl = r0;
0x000872be ldr r5, [r1, 0x48] | r5 = *((r1 + 0x48));
0x000872c0 sub sp, 0xc |
0x000872c2 mov r8, r1 | r8 = r1;
0x000872c4 ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x000872c6 cmp r0, 0 |
0x000872c8 it le |
| if (r0 > 0) {
0x000872ca movle fp, 0 |
| }
| if (r0 > 0) {
0x000872ce ble 0x872de |
0x000872d0 ldr r3, [r1, 0x40] | r3 = *((r1 + 0x40));
0x000872d2 cmp r3, 3 |
0x000872d4 ite le |
| if (r3 > 3) {
0x000872d6 movle fp, 0 |
| }
| if (r3 <= 3) {
0x000872da mov.w fp, 1 | goto label_0;
| }
| }
| label_0:
0x000872de ldr.w r3, [r8, 0x44] | r3 = *((r8 + 0x44));
0x000872e2 ldr.w r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x000872e6 cmp r3, 0 |
| if (r3 <= 0) {
0x000872e8 ble 0x8734e | goto label_1;
| }
0x000872ea movs r4, 0 | r4 = 0;
0x000872ec mov sb, r4 | sb = r4;
0x000872ee mov r7, r4 | r7 = r4;
0x000872f0 mov r1, r4 | r1 = r4;
0x000872f2 b 0x87344 |
| while (r0 != 0) {
0x000872f4 cmp.w fp, 0 |
| if (fp != 0) {
0x000872f8 beq 0x8732c |
| if (r2 != 0) {
0x000872fa cbnz r2, 0x8732c | goto label_2;
| }
0x000872fc ldr.w r3, [r8] | r3 = *(r8);
0x00087300 adds r2, r2, r4 | r2 += r4;
0x00087302 ldr.w ip, [r5] | ip = *(r5);
0x00087306 str r0, [sp, 4] | var_4h = r0;
0x00087308 ldr r0, [r5, 0x10] | r0 = *((r5 + 0x10));
0x0008730a add.w r3, sb, r3, lsl 5 | r3 = sb + (r3 << 5);
0x0008730e adds.w r2, r2, ip | r2 += ip;
0x00087312 add.w r3, r3, 0x10 | r3 += 0x10;
0x00087316 str r0, [sp] | *(sp) = r0;
0x00087318 adc.w r3, r3, ip, asr 31 | __asm ("adc.w r3, r3, ip, asr 31");
0x0008731c mov r0, sl | r0 = sl;
0x0008731e bl 0x86aa0 | fcn_00086aa0 (r0, r1, r2, r3);
0x00087322 ldr.w r3, [r8, 0x44] | r3 = *((r8 + 0x44));
0x00087326 movs r1, 0 | r1 = 0;
0x00087328 ldr.w r2, [sl, 0x24] | r2 = *((sl + 0x24));
| }
| label_2:
0x0008732c adds.w r4, r4, -0x80000000 | r4 += -0x80000000;
0x00087330 str r1, [r5, 0x14] | *((r5 + 0x14)) = r1;
0x00087332 adc sb, sb, 0 | __asm ("adc sb, sb, 0");
0x00087336 cmp r7, r3 |
0x00087338 str r1, [r5, 4] | *((r5 + 4)) = r1;
| if (r7 >= r3) {
0x0008733a bge 0x8734e | goto label_1;
| }
0x0008733c ldr.w r5, [r8, 0x48] | r5 = *((r8 + 0x48));
0x00087340 add r6, r5 | r6 += r5;
0x00087342 ldr r0, [r6, 0x34] | r0 = *((r6 + 0x34));
0x00087344 lsls r6, r7, 5 | r6 = r7 << 5;
0x00087346 adds r7, 1 | r7++;
0x00087348 add r5, r6 | r5 += r6;
0x0008734a cmp r0, 0 |
0x0008734c bne 0x872f4 |
| }
| label_1:
0x0008734e movs r3, 0 | r3 = 0;
0x00087350 str.w r3, [r8, 0x40] | __asm ("str.w r3, [r8, 0x40]");
| if (r2 != 0) {
0x00087354 cbnz r2, 0x873ac | goto label_3;
| }
0x00087356 ldr.w r3, [r8, 0x50] | r3 = *((r8 + 0x50));
0x0008735a cmp r3, 0 |
| if (r3 <= 0) {
0x0008735c ble 0x873b8 | goto label_4;
| }
0x0008735e ldr.w r2, [r8, 0x4c] | r2 = *((r8 + 0x4c));
| do {
0x00087362 movs r1, 0 | r1 = 0;
0x00087364 str r1, [sp] | *(sp) = r1;
0x00087366 movs r1, 2 | r1 = 2;
0x00087368 ldr.w r0, [sl, 0x34] | r0 = *((sl + 0x34));
0x0008736c blx 0x8a94 | fcn_00008a94 ();
0x00087370 ldr.w r2, [r8, 0x58] | r2 = *((r8 + 0x58));
0x00087374 movs r1, 3 | r1 = 3;
0x00087376 ldr.w r0, [sl, 0x34] | r0 = *((sl + 0x34));
0x0008737a asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0008737c adds r2, r2, r2 | r2 += r2;
0x0008737e adcs r3, r3 | __asm ("adcs r3, r3");
0x00087380 adds.w r2, r2, fp | r2 += fp;
0x00087384 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x00087388 blx 0x84e8 | fcn_000084e8 ();
0x0008738c ldr.w r0, [sl, 0x34] | r0 = *((sl + 0x34));
0x00087390 blx 0x8728 | fcn_00008728 ();
0x00087394 ldr.w r0, [sl, 0x34] | r0 = *((sl + 0x34));
0x00087398 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0008739c mov r3, r0 | r3 = r0;
0x0008739e movs r1, 2 | r1 = 2;
0x000873a0 ldr.w r0, [sl, 0x34] | r0 = *((sl + 0x34));
0x000873a4 str.w r3, [sl, 0x24] | __asm ("str.w r3, [sl, 0x24]");
0x000873a8 blx 0x8304 | fcn_00008304 ();
| label_3:
0x000873ac movs r3, 0 | r3 = 0;
0x000873ae str.w r3, [r8, 0x58] | __asm ("str.w r3, [r8, 0x58]");
0x000873b2 add sp, 0xc |
0x000873b4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x000873b8 ldr r2, [pc, 4] | r2 = *(0x000873c0);
0x000873ba add r2, pc | r2 += pc;
0x000873bc b 0x87362 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x873c4 */
| #include <stdint.h>
|
; (fcn) fcn.000873c4 () | void fcn_000873c4 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000873c4 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000873c8 mov r8, r3 | r8 = r3;
0x000873ca ldr r3, [r0] | r3 = *(r0);
0x000873cc mov r5, r2 | r5 = r2;
0x000873ce mov r7, r0 | r7 = r0;
0x000873d0 mov r4, r1 | r4 = r1;
0x000873d2 ldr r2, [r1, 0x10] | r2 = *((r1 + 0x10));
0x000873d4 ldr.w lr, [r3, 0x4c] |
0x000873d8 ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x000873da ldr.w ip, [r1, 0x1c] | ip = *((r1 + 0x1c));
0x000873de cmp r3, r5 |
0x000873e0 it ge |
| if (r3 < r5) {
0x000873e2 movge r3, r5 | r3 = r5;
| }
0x000873e4 mov r6, r3 | r6 = r3;
0x000873e6 add.w r3, r2, ip | r3 = r2 + ip;
0x000873ea add r3, r5 | r3 += r5;
0x000873ec adds r3, 2 | r3 += 2;
0x000873ee cmp r3, lr |
| if (r3 >= lr) {
0x000873f0 blt 0x8740a |
0x000873f2 cmp r2, 4 |
| if (r2 > 4) {
0x000873f4 bgt.w 0x8754a | goto label_9;
| }
0x000873f8 ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x000873fa add.w r1, r5, 0x14 | r1 = r5 + 0x14;
0x000873fe add r1, r2 | r1 += r2;
0x00087400 cmp r1, r0 |
| if (r1 > r0) {
0x00087402 bhi.w 0x87564 | goto label_10;
| }
| label_4:
0x00087406 ldr.w ip, [r4, 0x1c] | ip = *((r4 + 0x1c));
| }
| label_5:
0x0008740a ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0008740c ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x0008740e subs r2, r2, r3 | r2 -= r3;
0x00087410 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00087412 cmp r2, 0x80 |
0x00087414 add.w r0, r1, ip | r0 = r1 + ip;
0x00087418 sbcs lr, r3, 0 | __asm ("sbcs lr, r3, 0");
0x0008741c itt lo |
| if (r2 >= 0x80) {
0x0008741e movlo r0, 1 | r0 = 1;
| }
| if (r2 >= 0x80) {
0x00087420 strblo r2, [r1, ip] | *((r1 + ip)) = r2;
| }
| if (r2 > 0x80) {
0x00087424 blo 0x87434 |
0x00087426 cmp.w r2, 0x4000 |
0x0008742a sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x0008742e blo 0x8752a | goto label_11;
| }
0x00087430 bl 0x9758 | fcn_00009758 (r0, r1, r2);
| }
| label_2:
0x00087434 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00087436 ldrb.w r2, [r4, 0x3a] | r2 = *((r4 + 0x3a));
0x0008743a add r3, r0 | r3 += r0;
0x0008743c str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x0008743e ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00087440 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00087442 cmp r2, 0 |
| if (r2 != 0) {
0x00087444 bne 0x874c2 | goto label_12;
| }
0x00087446 cmp r6, 0 |
0x00087448 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r6 <= 0) {
0x0008744a ble.w 0x875be | goto label_13;
| }
0x0008744e subs r3, 1 | r3--;
0x00087450 mov ip, r2 |
0x00087452 mov r1, r8 | r1 = r8;
0x00087454 b 0x8745e |
| while (r0 == r2) {
0x00087456 add.w ip, ip, 1 |
0x0008745a cmp r6, ip |
| if (r6 == ip) {
0x0008745c beq 0x8753c | goto label_14;
| }
0x0008745e ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x00087462 mov sb, r1 | sb = r1;
0x00087464 ldrb r2, [r1], 1 | r2 = *(r1);
| r1++;
0x00087468 cmp r0, r2 |
0x0008746a beq 0x87456 |
| }
0x0008746c mov r2, ip | r2 = ip;
0x0008746e sub.w sl, r5, ip | sl = r5 - ip;
0x00087472 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
| label_3:
0x00087474 add.w r6, r7, 0x24 | r6 = r7 + 0x24;
0x00087478 add.w r7, r4, 0xc | r7 = r4 + 0xc;
0x0008747c mov r0, r6 | r0 = r6;
0x0008747e mov r1, r7 | r1 = r7;
0x00087480 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
| label_1:
0x00087484 mov r1, r7 | r1 = r7;
0x00087486 asr.w r3, sl, 0x1f | r3 = sl >> 0x1f;
0x0008748a mov r2, sl | r2 = sl;
0x0008748c mov r0, r6 | r0 = r6;
0x0008748e bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00087490 invalid |
0x00087494 mov r3, sb | r3 = sb;
0x00087496 mov r2, sl | r2 = sl;
0x00087498 mov r0, r6 | r0 = r6;
0x0008749a movs r7, 0 | r7 = 0;
0x0008749c bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x000874a0 mov r3, r8 | r3 = r8;
0x000874a2 mov r2, r5 | r2 = r5;
0x000874a4 add.w r1, r4, 0x24 | r1 = r4 + 0x24;
0x000874a8 mov r0, r6 | r0 = r6;
0x000874aa str r7, [r4, 0x28] | *((r4 + 0x28)) = r7;
0x000874ac bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x000874b0 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x000874b2 movs r1, 1 | r1 = 1;
0x000874b4 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x000874b6 strb.w r7, [r4, 0x3a] | *((r4 + 0x3a)) = r7;
0x000874ba strh r1, [r4, 0x38] | *((r4 + 0x38)) = r1;
0x000874bc str r2, [r3] | *(r3) = r2;
| label_0:
0x000874be pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_12:
0x000874c2 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000874c4 cmp r3, 1 |
| if (r3 == 1) {
0x000874c6 beq 0x875b2 | goto label_15;
| }
0x000874c8 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x000874ca mov sb, r5 | sb = r5;
| if (r3 == 0) {
0x000874cc cbz r3, 0x874f6 | goto label_8;
| }
0x000874ce cmp r6, 0 |
0x000874d0 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r6 <= 0) {
0x000874d2 ble 0x875d2 | goto label_16;
| }
0x000874d4 subs r3, 1 | r3--;
0x000874d6 add.w r2, r8, -1 | r2 = r8 + -1;
0x000874da mov.w sb, 0 | sb = 0;
0x000874de b 0x874e4 |
| while (r0 == r1) {
0x000874e0 cmp r6, sb |
| if (r6 == sb) {
0x000874e2 beq 0x875b8 | goto label_17;
| }
0x000874e4 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x000874e8 mov ip, sb |
0x000874ea ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x000874ee add.w sb, sb, 1 | sb++;
0x000874f2 cmp r0, r1 |
0x000874f4 beq 0x874e0 |
| }
| label_8:
0x000874f6 ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x000874f8 cmp r3, 0 |
| if (r3 != 0) {
0x000874fa bne 0x875a2 | goto label_18;
| }
0x000874fc ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x000874fe cmp r3, 0 |
| if (r3 != 0) {
0x00087500 bne 0x874be | goto label_0;
| }
| label_6:
0x00087502 add.w r6, r7, 0x24 | r6 = r7 + 0x24;
0x00087506 mov r2, sb | r2 = sb;
0x00087508 str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x0008750a add.w r1, r4, 0x4c | r1 = r4 + 0x4c;
0x0008750e mov r3, r8 | r3 = r8;
0x00087510 mov r0, r6 | r0 = r6;
0x00087512 bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x00087514 invalid |
0x00087518 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0008751a str r2, [r4, 0x58] | *((r4 + 0x58)) = r2;
0x0008751c cmp r3, 0 |
| if (r3 != 0) {
0x0008751e bne 0x874be | goto label_0;
| }
| label_7:
0x00087520 add.w r7, r4, 0xc | r7 = r4 + 0xc;
0x00087524 mov sb, r8 | sb = r8;
0x00087526 mov sl, r5 | sl = r5;
0x00087528 b 0x87484 | goto label_1;
| label_11:
0x0008752a lsrs r3, r2, 7 | r3 = r2 >> 7;
0x0008752c and r2, r2, 0x7f | r2 &= 0x7f;
0x00087530 strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x00087532 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x00087536 strb r3, [r0] | *(r0) = r3;
0x00087538 movs r0, 2 | r0 = 2;
0x0008753a b 0x87434 | goto label_2;
| label_14:
0x0008753c asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x0008753e mov r2, r6 | r2 = r6;
0x00087540 sub.w sl, r5, r6 | sl = r5 - r6;
0x00087544 add.w sb, r8, r6 | sb = r8 + r6;
0x00087548 b 0x87474 | goto label_3;
| label_9:
0x0008754a bl 0x86e88 | fcn_00086e88 (r0, r1, r2);
0x0008754e ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x00087550 cmp r3, 0 |
| if (r3 != 0) {
0x00087552 bne 0x874be | goto label_0;
| }
0x00087554 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00087556 add.w r1, r5, 0x14 | r1 = r5 + 0x14;
0x0008755a ldr r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x0008755c add r1, r2 | r1 += r2;
0x0008755e cmp r1, r0 |
| if (r1 < r0) {
0x00087560 bls.w 0x87406 | goto label_4;
| }
| label_10:
0x00087564 cmp r0, r1 |
| if (r0 >= r1) {
0x00087566 bhs.w 0x87406 | goto label_4;
| }
0x0008756a cmp r0, 0 |
0x0008756c it eq |
| if (r0 != 0) {
0x0008756e moveq r0, 0x40 | r0 = 0x40;
| }
0x00087570 asrs r3, r0, 0x1f | r3 = r0 >> 0x1f;
0x00087572 cmp r0, r1 |
0x00087574 mov sb, r0 | sb = r0;
0x00087576 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
| if (r0 >= r1) {
0x0008757a bhs 0x8758a | goto label_19;
| }
| do {
0x0008757c adds.w sb, sb, sb | sb += sb;
0x00087580 adcs r3, r3 | __asm ("adcs r3, r3");
0x00087582 cmp sb, r1 |
0x00087584 sbcs r2, r3, 0 | __asm ("sbcs r2, r3, 0");
0x00087588 blo 0x8757c |
| } while (sb <= r1);
| label_19:
0x0008758a ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0008758c mov r2, sb | r2 = sb;
0x0008758e blx 0x8500 | r0 = fcn_00008500 ();
| if (r0 == 0) {
0x00087592 cbz r0, 0x875c6 | goto label_20;
| }
0x00087594 ldr.w ip, [r4, 0x1c] | ip = *((r4 + 0x1c));
0x00087598 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0008759a str.w sb, [r4, 0x14] | __asm ("str.w sb, [r4, 0x14]");
0x0008759e str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x000875a0 b 0x8740a | goto label_5;
| label_18:
0x000875a2 mov r1, r4 | r1 = r4;
0x000875a4 mov r0, r7 | r0 = r7;
0x000875a6 bl 0x872b8 | fcn_000872b8 (r0, r1);
0x000875aa ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x000875ac cmp r3, 0 |
| if (r3 != 0) {
0x000875ae bne 0x874be | goto label_0;
| }
0x000875b0 b 0x87502 | goto label_6;
| label_15:
0x000875b2 add.w r6, r7, 0x24 | r6 = r7 + 0x24;
0x000875b6 b 0x87520 | goto label_7;
| label_17:
0x000875b8 add.w sb, ip, 2 | sb = ip + 2;
0x000875bc b 0x874f6 | goto label_8;
| label_13:
0x000875be mov sb, r8 | sb = r8;
0x000875c0 mov sl, r5 | sl = r5;
0x000875c2 mov r3, r2 | r3 = r2;
0x000875c4 b 0x87474 | goto label_3;
| label_20:
0x000875c6 movs r3, 7 | r3 = 7;
0x000875c8 str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x000875ca ldr.w ip, [r4, 0x1c] | ip = *((r4 + 0x1c));
0x000875ce ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x000875d0 b 0x8740a | goto label_5;
| label_16:
0x000875d2 mov.w sb, 1 | sb = 1;
0x000875d6 b 0x874f6 | goto label_8;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x87708 */
| #include <stdint.h>
|
; (fcn) fcn.00087708 () | void fcn_00087708 (int16_t arg_28h, int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00087708 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0008770c mov sb, r2 | sb = r2;
0x0008770e ldr r2, [pc, 0xd0] |
0x00087710 mov r8, r3 | r8 = r3;
0x00087712 sub sp, 8 |
0x00087714 movs r4, 0 | r4 = 0;
0x00087716 ldr r3, [pc, 0xcc] | r3 = *(0x877e6);
0x00087718 add r2, pc | r2 = 0x10eefe;
0x0008771a ldr r1, [r0] | r1 = *(r0);
0x0008771c ldr r6, [sp, 0x28] | r6 = *(arg_28h);
0x0008771e ldr r3, [r2, r3] |
0x00087720 mov r2, sp | r2 = sp;
0x00087722 ldr r7, [r1, 0xc] | r7 = *((r1 + 0xc));
0x00087724 movs r1, 8 | r1 = 8;
0x00087726 ldr r3, [r3] | r3 = imp.sinh;
0x00087728 str r3, [sp, 4] | var_4h = r3;
0x0008772a mov.w r3, 0 | r3 = 0;
0x0008772e mov r3, r4 | r3 = r4;
0x00087730 str r4, [sp] | *(sp) = r4;
0x00087732 bl 0x7bff8 | fcn_0007bff8 (r0, r1, r2, r3, r4, r5, r6);
0x00087736 ldr r5, [sp] | r5 = *(sp);
| if (r5 == 0) {
0x00087738 cbz r5, 0x87760 | goto label_2;
| }
0x0008773a mov r2, sb | r2 = sb;
0x0008773c mov r3, r8 | r3 = r8;
0x0008773e movs r1, 1 | r1 = 1;
0x00087740 mov r0, r5 | r0 = r5;
0x00087742 blx 0x84e8 | fcn_000084e8 ();
0x00087746 mov r0, r5 | r0 = r5;
0x00087748 blx 0x8728 | r0 = fcn_00008728 ();
0x0008774c cmp r0, 0x64 |
0x0008774e beq 0x8777a |
| while (r0 <= r4) {
| label_0:
0x00087750 mov r0, r5 | r0 = r5;
0x00087752 blx 0x81f8 | fcn_000081f8 ();
0x00087756 movw r3, 0x10b | r3 = 0x10b;
0x0008775a cmp r0, 0 |
0x0008775c it eq |
| if (r0 != 0) {
0x0008775e moveq r0, r3 | r0 = r3;
| }
| label_2:
0x00087760 ldr r2, [pc, 0x84] |
0x00087762 ldr r3, [pc, 0x80] | r3 = *(0x877e6);
0x00087764 add r2, pc | r2 = 0x10ef50;
0x00087766 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00087768 ldr r2, [r3] | r2 = imp.sinh;
0x0008776a ldr r3, [sp, 4] | r3 = var_4h;
0x0008776c eors r2, r3 | r2 ^= r3;
0x0008776e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00087772 bne 0x877da | goto label_3;
| }
0x00087774 add sp, 8 |
0x00087776 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x0008777a mov r1, r4 | r1 = r4;
0x0008777c mov r0, r5 | r0 = r5;
0x0008777e blx 0x8924 | fcn_00008924 ();
0x00087782 mov r1, r4 | r1 = r4;
0x00087784 mov sb, r0 | sb = r0;
0x00087786 mov r0, r5 | r0 = r5;
0x00087788 blx 0x82f4 | fcn_000082f4 ();
0x0008778c cmp r7, r4 |
0x0008778e mov r8, r0 | r8 = r0;
| if (r7 <= r4) {
0x00087790 ble 0x877b6 | goto label_4;
| }
0x00087792 cmp r0, r4 |
0x00087794 ble 0x87750 |
| }
0x00087796 mov sl, r4 | sl = r4;
0x00087798 b 0x877a2 | goto label_5;
| label_1:
0x0008779a cmp r8, r4 |
0x0008779c add.w r6, r6, 4 | r6 += 4;
| if (r8 <= r4) {
0x000877a0 ble 0x87750 | goto label_0;
| }
| label_5:
0x000877a2 add.w r0, sb, r4 | r0 = sb + r4;
0x000877a6 add.w sl, sl, 1 | sl++;
0x000877aa mov r1, r6 | r1 = r6;
0x000877ac bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x000877b0 cmp r7, sl |
0x000877b2 add r4, r0 | r4 += r0;
| if (r7 != sl) {
0x000877b4 bne 0x8779a | goto label_1;
| }
| label_4:
0x000877b6 cmp r8, r4 |
| if (r8 != r4) {
0x000877b8 bne 0x87750 | goto label_0;
| }
0x000877ba ldr r2, [pc, 0x30] |
0x000877bc ldr r3, [pc, 0x24] | r3 = *(0x877e4);
0x000877be add r2, pc | r2 = 0x10efb0;
0x000877c0 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000877c2 ldr r2, [r3] | r2 = imp.sinh;
0x000877c4 ldr r3, [sp, 4] | r3 = var_4h;
0x000877c6 eors r2, r3 | r2 ^= r3;
0x000877c8 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000877cc bne 0x877da |
0x000877ce mov r0, r5 | r0 = r5;
0x000877d0 add sp, 8 |
0x000877d2 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000877d6 b.w 0x81f4 | void (*0x81f4)() ();
| }
| label_3:
0x000877da blx 0x883c | fcn_0000883c ();
0x000877de nop |
0x000877e0 asrs r0, r0, 0x16 | r0 >>= 0x16;
0x000877e2 movs r4, r0 | r4 = r0;
0x000877e4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000877e6 movs r0, r0 |
0x000877e8 asrs r4, r6, 0x14 | r4 = r6 >> 0x14;
0x000877ea movs r4, r0 | r4 = r0;
0x000877ec asrs r2, r3, 0x13 | r2 = r3 >> 0x13;
0x000877ee movs r4, r0 | r4 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x87908 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00087908 () | void fcn_00087908 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int32_t var_38h;
| int32_t var_38h_2;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00087908 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0008790c mov r4, r0 | r4 = r0;
0x0008790e ldr r6, [pc, 0x270] |
0x00087910 mov fp, r3 |
0x00087912 sub sp, 0x4c |
0x00087914 mov sl, r2 | sl = r2;
0x00087916 ldr r5, [pc, 0x26c] | r5 = *(0x87b86);
0x00087918 add r6, pc | r6 = 0x10f49e;
0x0008791a ldr r0, [r0] | r0 = *(r0);
0x0008791c ldr r5, [r6, r5] |
0x0008791e ldrd r6, r3, [r4, 0x38] | __asm ("ldrd r6, r3, [r4, 0x38]");
0x00087922 ldr r7, [r0, 0xc] | r7 = *(arg_0hxc);
0x00087924 ldr r5, [r5] | r5 = imp.sinh;
0x00087926 str r5, [sp, 0x44] | var_44h = r5;
0x00087928 mov.w r5, 0 | r5 = 0;
0x0008792c mov r5, r1 | r5 = r1;
0x0008792e ands sb, r3, 0x40 | sb = r3 & 0x40;
| if (sb == r3) {
0x00087932 beq 0x87988 | goto label_14;
| }
0x00087934 ldr.w sb, [r7, 0x30] | sb = *((r7 + 0x30));
0x00087938 cmp.w sb, 0 |
| if (sb != 0) {
0x0008793c bne 0x879ca | goto label_15;
| }
0x0008793e bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x00087942 str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x00087944 cmp r6, 0 |
| if (r6 == 0) {
0x00087946 beq 0x87a48 | goto label_16;
| }
| do {
0x00087948 mov r2, r5 | r2 = r5;
0x0008794a mov r1, r5 | r1 = r5;
| if (r5 != 0) {
0x0008794c cbz r5, 0x87956 |
0x0008794e adds r3, r5, 5 | r3 = r5 + 5;
0x00087950 ldr.w r2, [r6, r3, lsl 2] | offset_0 = r3 << 2;
| r2 = *((r6 + offset_0));
0x00087954 mov r1, r2 | r1 = r2;
| }
0x00087956 adds r5, 6 | r5 += 6;
0x00087958 ldr.w r3, [r6, r5, lsl 2] | offset_1 = r5 << 2;
| r3 = *((r6 + offset_1));
0x0008795c subs r3, r3, r2 | r3 -= r2;
0x0008795e str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x00087962 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00087964 add r3, r1 | r3 += r1;
0x00087966 str.w r3, [sl] | __asm ("str.w r3, [sl]");
| label_0:
0x0008796a ldr r2, [pc, 0x21c] | r2 = *(0x87b8a);
| label_14:
0x00087988 cmp r6, 0 |
| if (r6 == 0) {
0x0008798a beq 0x87a48 | goto label_16;
| }
| label_4:
0x0008798c ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x0008798e cmp r3, 0 |
0x00087990 beq 0x87948 |
| } while (r3 == 0);
| label_3:
0x00087992 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00087994 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x00087996 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00087998 ldr.w r1, [r2, r5, lsl 2] | offset_2 = r5 << 2;
| r1 = *((r2 + offset_2));
0x0008799c ldr r2, [r1] | r2 = *(r1);
0x0008799e ldr r3, [r2, 4] | r3 = *((r2 + 4));
| if (r3 == 0) {
0x000879a0 cbz r3, 0x879b0 | goto label_17;
| }
0x000879a2 movs r2, 0 | r2 = 0;
0x000879a4 mov r3, r2 | r3 = r2;
| do {
| label_1:
0x000879a6 str.w r2, [sl] | __asm ("str.w r2, [sl]");
0x000879aa str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x000879ae b 0x8796a | goto label_0;
| label_17:
0x000879b0 ldrd r6, r4, [r2, 0x10] | __asm ("ldrd r6, r4, [r2, 0x10]");
0x000879b4 ldrd r5, r2, [r0, 0x10] | __asm ("ldrd r5, r2, [r0, 0x10]");
0x000879b8 cmp r4, r2 |
0x000879ba it eq |
| if (r4 == r2) {
0x000879bc cmpeq r6, r5 | __asm ("cmpeq r6, r5");
| }
0x000879be it eq |
| if (r4 == r2) {
0x000879c0 ldrdeq r2, r3, [r1, 4] | __asm ("ldrdeq r2, r3, [r1, 4]");
| }
0x000879c4 beq 0x879a6 |
| } while (r4 == r2);
0x000879c6 mov r2, r3 | r2 = r3;
0x000879c8 b 0x879a6 | goto label_1;
| label_15:
0x000879ca ldr.w r8, [r4, 0x34] | r8 = *((r4 + 0x34));
0x000879ce movs r1, 0 | r1 = 0;
0x000879d0 mov.w sb, 7 | sb = 7;
0x000879d4 ldr.w r0, [r8, 0x10] | r0 = *((r8 + 0x10));
0x000879d8 lsls r0, r0, 4 | r0 <<= 4;
0x000879da blx 0x8240 | fcn_00008240 ();
0x000879de str r0, [sp, 0x14] | var_14h = r0;
0x000879e0 cmp r0, 0 |
| if (r0 == 0) {
0x000879e2 beq 0x87a8c | goto label_10;
| }
0x000879e4 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x000879e8 movs r1, 0 | r1 = 0;
0x000879ea lsls r2, r2, 4 | r2 <<= 4;
0x000879ec blx 0x839c | fcn_0000839c ();
0x000879f0 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x000879f4 cmp r2, 0 |
| if (r2 <= 0) {
0x000879f6 ble 0x87a56 | goto label_18;
| }
0x000879f8 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x000879fc movs r1, 0 | r1 = 0;
0x000879fe ldr.w ip, [sp, 0x14] | ip = var_14h;
0x00087a02 movs r0, 1 | r0 = 1;
0x00087a04 str r5, [sp, 0x18] | var_18h = r5;
0x00087a06 strd r7, r4, [sp, 0xc] | __asm ("strd r7, r4, [var_ch]");
0x00087a0a add.w lr, r3, r2, lsl 2 | lr = r3 + (r2 << 2);
0x00087a0e str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch]");
0x00087a12 b 0x87a3a |
| while (r6 == 0) {
0x00087a14 ldr r5, [r2, 8] | r5 = *((r2 + 8));
| if (r5 != 0) {
0x00087a16 cbz r5, 0x87a2e |
0x00087a18 ldr.w sb, [r8, 8] | sb = *((r8 + 8));
0x00087a1c ldrd r5, r7, [r4, 0x10] | __asm ("ldrd r5, r7, [r4, 0x10]");
0x00087a20 ldrd sl, sb, [sb, 0x10] | __asm ("ldrd sl, sb, [sb, 0x10]");
0x00087a24 cmp r7, sb |
0x00087a26 it eq |
| if (r7 == sb) {
0x00087a28 cmpeq r5, sl | __asm ("cmpeq r5, sl");
| }
| if (r7 == sb) {
0x00087a2a beq.w 0x87b72 | goto label_19;
| }
| }
| label_13:
0x00087a2e str.w r0, [ip, 0xc] | __asm ("str.w r0, [ip, 0xc]");
| label_2:
0x00087a32 cmp r3, lr |
0x00087a34 add.w ip, ip, 0x10 |
| if (r3 == lr) {
0x00087a38 beq 0x87a4e | goto label_20;
| }
0x00087a3a ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x00087a3e ldr r4, [r2] | r4 = *(r2);
0x00087a40 cmp r6, 0 |
0x00087a42 beq 0x87a14 |
| }
| label_12:
0x00087a44 str r1, [r2, 8] | *((r2 + 8)) = r1;
0x00087a46 b 0x87a32 | goto label_2;
| label_16:
0x00087a48 mov.w sb, 0 | sb = 0;
0x00087a4c b 0x87992 | goto label_3;
| label_20:
0x00087a4e ldrd r7, r4, [sp, 0xc] | __asm ("ldrd r7, r4, [var_ch]");
0x00087a52 ldrd r5, sl, [sp, 0x18] | __asm ("ldrd r5, sl, [var_18h]");
| label_18:
0x00087a56 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00087a58 cmp r3, 0 |
0x00087a5a it le |
| if (r3 > 0) {
0x00087a5c movle sb, 0 | sb = 0;
| }
| if (r3 > 0) {
0x00087a60 ble 0x87a8c |
0x00087a62 ldr r3, [pc, 0x128] |
0x00087a64 add r2, sp, 0x28 | r2 += var_28h;
0x00087a66 mov.w r8, 0 | r8 = 0;
0x00087a6a str r2, [sp, 0xc] | var_ch = r2;
0x00087a6c add r2, sp, 0x2c | r2 += var_2ch;
0x00087a6e add r3, pc | r3 = 0x10f600;
0x00087a70 str r2, [sp, 0x10] | var_10h = r2;
0x00087a72 str r3, [sp, 0x24] | var_24h = r3;
0x00087a74 mov.w r3, -1 | r3 = -1;
0x00087a78 mov sb, r3 | sb = r3;
| label_9:
0x00087a7a mov r1, r8 | r1 = r8;
0x00087a7c ldrd r3, r2, [sp, 0xc] | __asm ("ldrd r3, r2, [var_ch]");
0x00087a80 mov r0, r4 | r0 = r4;
0x00087a82 bl 0x878bc | r0 = fcn_000878bc (r0, r1, r2, r3);
0x00087a86 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x00087a88 cbz r0, 0x87aae | goto label_21;
| }
0x00087a8a mov sb, r1 | sb = r1;
| }
| label_10:
0x00087a8c ldr r0, [sp, 0x14] | r0 = var_14h;
0x00087a8e blx 0x8404 | fcn_00008404 ();
0x00087a92 ldr r6, [r4, 0x38] | r6 = *((r4 + 0x38));
0x00087a94 cmp r6, 0 |
| if (r6 == 0) {
0x00087a96 beq 0x87b68 | goto label_22;
| }
0x00087a98 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00087a9a ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00087a9c ldrd r2, r3, [r6, 8] | __asm ("ldrd r2, r3, [r6, 8]");
0x00087aa0 bl 0x165dc | fcn_000165dc (r0, r1, r2, r3);
0x00087aa4 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00087aa6 bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x00087aaa str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x00087aac b 0x8798c | goto label_4;
| label_21:
0x00087aae ldr r3, [sp, 0x14] | r3 = var_14h;
0x00087ab0 ldrd r2, lr, [sp, 0x28] | __asm ("ldrd r2, lr, [var_28h]");
0x00087ab4 str r3, [sp, 0x34] | var_34h = r3;
0x00087ab6 mov.w r3, -1 | r3 = -1;
0x00087aba strd r3, sb, [sp, 0x38] | __asm ("strd r3, sb, [var_38h]");
0x00087abe ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x00087ac0 ldr r6, [r3, 0x10] | r6 = *((r3 + 0x10));
0x00087ac2 str r3, [sp, 0x30] | var_30h = r3;
0x00087ac4 cmp r6, 0 |
| if (r6 <= 0) {
0x00087ac6 ble 0x87b26 | goto label_23;
| }
0x00087ac8 ldr r0, [r3, 0x14] | r0 = *((r3 + 0x14));
0x00087aca strd lr, r2, [sp, 0x18] | __asm ("strd lr, r2, [var_18h]");
0x00087ace str r7, [sp, 0x20] | var_20h = r7;
0x00087ad0 add.w ip, r0, r6, lsl 2 |
0x00087ad4 ldr r6, [sp, 0x14] | r6 = var_14h;
0x00087ad6 b 0x87aea |
| while (r2 == 0) {
| label_6:
0x00087ad8 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00087ada clz r3, r3 | r3 &= r3;
0x00087ade lsrs r3, r3, 5 | r3 >>= 5;
| label_5:
0x00087ae0 cmp r0, ip |
0x00087ae2 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00087ae4 add.w r6, r6, 0x10 | r6 += 0x10;
| if (r0 == ip) {
0x00087ae8 beq 0x87b20 | goto label_24;
| }
| label_8:
0x00087aea ldr r3, [r0], 4 | r3 = *(r0);
| r0 += 4;
0x00087aee ldr r3, [r3] | r3 = *(r3);
0x00087af0 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00087af2 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00087af4 cmp r2, 0 |
0x00087af6 beq 0x87ad8 |
| }
0x00087af8 ldr.w lr, [r2] |
0x00087afc movs r3, 0 | r3 = 0;
0x00087afe cmp.w lr, 0 |
| if (lr <= 0) {
0x00087b02 ble 0x87ae0 | goto label_5;
| }
| label_7:
0x00087b04 ldr r7, [r2, 4]! | r7 = *((r2 += 4));
0x00087b08 cmp r7, r8 |
| if (r7 == r8) {
0x00087b0a beq 0x87ad8 | goto label_6;
| }
0x00087b0c adds r3, 1 | r3++;
0x00087b0e cmp r3, lr |
| if (r3 != lr) {
0x00087b10 bne 0x87b04 | goto label_7;
| }
0x00087b12 cmp r0, ip |
0x00087b14 mov.w r3, 0 | r3 = 0;
0x00087b18 str r3, [r6, 8] | *((r6 + 8)) = r3;
0x00087b1a add.w r6, r6, 0x10 | r6 += 0x10;
| if (r0 != ip) {
0x00087b1e bne 0x87aea | goto label_8;
| }
| label_24:
0x00087b20 ldrd lr, r2, [sp, 0x18] | __asm ("ldrd lr, r2, [var_18h]");
0x00087b24 ldr r7, [sp, 0x20] | r7 = var_20h;
| label_23:
0x00087b26 cmp.w lr, 0 |
| if (lr == 0) {
0x00087b2a beq 0x87b64 | goto label_25;
| }
0x00087b2c ldrd r0, r1, [r7, 0x38] | __asm ("ldrd r0, r1, [r7, 0x38]");
0x00087b30 mov r3, lr | r3 = lr;
0x00087b32 str r2, [sp] | *(sp) = r2;
0x00087b34 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00087b36 str r2, [sp, 4] | var_4h = r2;
0x00087b38 movs r2, 4 | r2 = 4;
0x00087b3a ldr r6, [r1, 8] | r6 = *((r1 + 8));
0x00087b3c add r1, sp, 0x30 | r1 += var_30h;
0x00087b3e blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00087b40 clz r3, r0 | r3 &= r0;
0x00087b44 mov r1, r0 | r1 = r0;
0x00087b46 lsrs r3, r3, 5 | r3 >>= 5;
| label_11:
0x00087b48 ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x00087b4a add.w r8, r8, 1 | r8++;
0x00087b4e add.w sb, sb, 1 | sb++;
0x00087b52 cmp r2, r8 |
0x00087b54 ite le |
| if (r2 > r8) {
0x00087b56 movle r3, 0 | r3 = 0;
| }
| if (r2 <= r8) {
0x00087b58 andgt r3, r3, 1 | r3 &= 1;
| }
0x00087b5c cmp r3, 0 |
| if (r3 != 0) {
0x00087b5e bne 0x87a7a | goto label_9;
| }
0x00087b60 mov sb, r1 | sb = r1;
0x00087b62 b 0x87a8c | goto label_10;
| label_25:
0x00087b64 movs r3, 1 | r3 = 1;
0x00087b66 b 0x87b48 | goto label_11;
| label_22:
0x00087b68 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x00087b6a bic r3, r3, 0x40 | r3 = BIT_MASK (r3, 0x40);
0x00087b6e str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x00087b70 b 0x87992 | goto label_3;
| label_19:
0x00087b72 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00087b74 cmp r4, 0 |
| if (r4 == 0) {
0x00087b76 beq.w 0x87a44 | goto label_12;
| }
0x00087b7a b 0x87a2e | goto label_13;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x87ce8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00087ce8 () | void fcn_00087ce8 (int16_t arg1) {
| int16_t var_18h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
0x00087ce8 ldr r2, [pc, 0x1c0] |
0x00087cea ldr r3, [pc, 0x1c4] | r3 = *(0x87eb2);
0x00087cec push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00087cf0 sub sp, 0x1c |
0x00087cf2 add r2, pc |
0x00087cf4 mov r5, r0 | r5 = r0;
0x00087cf6 ldr r3, [r2, r3] |
0x00087cf8 ldr r2, [r0] | r2 = *(r0);
0x00087cfa ldr r3, [r3] | r3 = imp.sinh;
0x00087cfc str r3, [sp, 0x14] | var_14h = r3;
0x00087cfe mov.w r3, 0 | r3 = 0;
0x00087d02 ldr r3, [r0, 0x34] | r3 = *((r0 + 0x34));
0x00087d04 ldr r2, [r2, 0xc] | r2 = imp.sinh;
0x00087d06 ldr.w fp, [r2, 0xc] | fp = imp.sinh;
0x00087d0a cmp r3, 0 |
| if (r3 == 0) {
0x00087d0c beq.w 0x87e58 | goto label_4;
| }
0x00087d10 ldr r6, [r0, 0x68] | r6 = *((r0 + 0x68));
0x00087d12 ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
0x00087d14 cmp r6, 0 |
| if (r6 == 0) {
0x00087d16 beq.w 0x87e5c | goto label_5;
| }
0x00087d18 strh r1, [r4, 4] | *((r4 + 4)) = r1;
| label_1:
0x00087d1a cmp r4, 0 |
| if (r4 <= 0) {
0x00087d1c ble.w 0x87e7a | goto label_6;
| }
0x00087d20 add.w r7, r6, 8 | r7 = r6 + 8;
0x00087d24 mov.w r8, 0 | r8 = 0;
0x00087d28 add.w sl, sp, 0x10 | sl += var_10h;
0x00087d2c add.w sb, sp, 0xc | sb += var_ch;
| do {
0x00087d30 mov r3, sl | r3 = sl;
0x00087d32 mov r2, sb | r2 = sb;
0x00087d34 mov r1, r8 | r1 = r8;
0x00087d36 mov r0, r5 | r0 = r5;
0x00087d38 bl 0x87908 | r0 = fcn_00087908 (r0, r1, r2, r3, r4);
| if (r0 != 0) {
0x00087d3c cbz r0, 0x87d6a |
0x00087d3e mov.w sl, 0 | sl = 0;
| label_2:
0x00087d42 ldr r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
0x00087d44 str.w sl, [r5, 0x70] | __asm ("str.w sl, [r5, 0x70]");
0x00087d48 bic r3, r3, 8 | r3 = BIT_MASK (r3, 8);
0x00087d4c str r3, [r5, 0x3c] | *((r5 + 0x3c)) = r3;
| label_3:
0x00087d4e ldr r2, [pc, 0x164] |
0x00087d50 ldr r3, [pc, 0x15c] | r3 = *(0x87eb0);
0x00087d52 add r2, pc | r2 = 0x10fc0c;
0x00087d54 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00087d56 ldr r2, [r3] | r2 = imp.sinh;
0x00087d58 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00087d5a eors r2, r3 | r2 ^= r3;
0x00087d5c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00087d60 bne.w 0x87ea6 | goto label_7;
| }
0x00087d64 add sp, 0x1c |
0x00087d66 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00087d6a ldr r1, [sp, 0x10] | r1 = var_10h;
0x00087d6c add.w r3, r7, 8 | r3 = r7 + 8;
0x00087d70 str r0, [r7] | *(r7) = r0;
0x00087d72 mov r2, r7 | r2 = r7;
0x00087d74 str r0, [r7, 4] | *((r7 + 4)) = r0;
0x00087d76 str r0, [r7, 8] | *((r7 + 8)) = r0;
0x00087d78 str r0, [r7, 0xc] | *((r7 + 0xc)) = r0;
0x00087d7a ldr r0, [sp, 0xc] | r0 = var_ch;
0x00087d7c str r1, [r7, -0x4] | *((r7 - 0x4)) = r1;
0x00087d80 str r0, [r7, -0x8] | *((r7 - 0x8)) = r0;
0x00087d84 bl 0xcd58 | r0 = fcn_0000cd58 (r0, r1, r2, r3);
| if (r0 != 0) {
0x00087d88 cbz r0, 0x87d90 |
0x00087d8a mov.w r3, 1 | r3 = 1;
0x00087d8e strb r3, [r7, 5] | *((r7 + 5)) = r3;
| }
0x00087d90 add.w r8, r8, 1 | r8++;
0x00087d94 adds r7, 0x18 | r7 += 0x18;
0x00087d96 cmp r4, r8 |
0x00087d98 bgt 0x87d30 |
| } while (r4 > r8);
0x00087d9a cmp r4, 0 |
0x00087d9c ittt gt |
| if (r4 <= 0) {
0x00087d9e movgt r8, 0 | r8 = 0;
| }
| if (r4 <= 0) {
0x00087da2 strgt r5, [sp] | *(sp) = r5;
| }
| if (r4 > 0) {
0x00087da4 mov sb, r8 | sb = r8;
| }
| if (r4 <= 0) {
0x00087da6 ble 0x87e7a | goto label_6;
| }
| label_0:
0x00087da8 mov r3, r6 | r3 = r6;
0x00087daa mov.w r7, -1 | r7 = -1;
0x00087dae movs r0, 0 | r0 = 0;
| do {
0x00087db0 ldrb r2, [r3, 0xd] | r2 = *((r3 + 0xd));
| if (r2 == 0) {
0x00087db2 cbnz r2, 0x87dd2 |
0x00087db4 cmp r7, 0 |
| if (r7 >= 0) {
0x00087db6 blt 0x87dd0 |
0x00087db8 add.w ip, r7, r7, lsl 1 |
0x00087dbc ldr r5, [r3, 0x10] | r5 = *((r3 + 0x10));
0x00087dbe add.w ip, r6, ip, lsl 3 |
0x00087dc2 ldrd r1, r2, [ip, 0x10] | __asm ("ldrd r1, r2, [ip, 0x10]");
0x00087dc6 cmp r5, r1 |
0x00087dc8 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x00087dca sbcs.w ip, r1, r2 | __asm ("sbcs.w ip, r1, r2");
| if (r5 >= r1) {
0x00087dce bge 0x87dd2 | goto label_8;
| }
| }
0x00087dd0 mov r7, r0 | r7 = r0;
| }
| label_8:
0x00087dd2 adds r0, 1 | r0++;
0x00087dd4 adds r3, 0x18 | r3 += 0x18;
0x00087dd6 cmp r4, r0 |
0x00087dd8 bne 0x87db0 |
| } while (r4 != r0);
0x00087dda cmp r7, 0 |
| if (r7 >= 0) {
0x00087ddc blt 0x87e98 |
0x00087dde ldr r2, [sp] | r2 = *(sp);
0x00087de0 add.w sl, sb, 1 | sl = sb + 1;
0x00087de4 ldr r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
0x00087de6 ldr r0, [r2, 0x74] | r0 = *((r2 + 0x74));
0x00087de8 cmp r3, sl |
| if (r3 <= sl) {
0x00087dea bgt 0x87e10 |
0x00087dec mov.w r2, 0x180 | r2 = 0x180;
0x00087df0 movs r1, 0x20 | r1 = 0x20;
| if (r3 != 0) {
0x00087df2 cbz r3, 0x87dfc |
0x00087df4 lsls r1, r3, 1 | r1 = r3 << 1;
0x00087df6 add.w r3, r1, r3, lsl 2 | r3 = r1 + (r3 << 2);
0x00087dfa lsls r2, r3, 2 | r2 = r3 << 2;
| }
0x00087dfc movs r3, 0 | r3 = 0;
0x00087dfe str r1, [sp, 4] | var_4h = r1;
0x00087e00 blx 0x8500 | r0 = fcn_00008500 ();
0x00087e04 cmp r0, 0 |
| if (r0 == 0) {
0x00087e06 beq 0x87e88 | goto label_9;
| }
0x00087e08 ldr r3, [sp] | r3 = *(sp);
0x00087e0a ldr r1, [sp, 4] | r1 = var_4h;
0x00087e0c str r0, [r3, 0x74] | *((r3 + 0x74)) = r0;
0x00087e0e str r1, [r3, 0x6c] | *((r3 + 0x6c)) = r1;
| }
0x00087e10 add.w ip, r7, r7, lsl 1 |
0x00087e14 str.w r7, [r0, r8] | __asm ("str.w r7, [r0, r8]");
0x00087e18 add.w r1, r0, r8 | r1 = r0 + r8;
0x00087e1c add.w r7, r6, ip, lsl 3 | r7 = r6 + (ip << 3);
0x00087e20 ldrd r3, r2, [r7, 0x10] | __asm ("ldrd r3, r2, [r7, 0x10]");
0x00087e24 bic r3, r3, 0x80000000 | r3 = BIT_MASK (r3, 0x80000000);
0x00087e28 strd r2, r3, [r1, 4] | __asm ("strd r2, r3, [r1, 4]");
0x00087e2c lsrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00087e2e cmp r2, fp |
0x00087e30 it ge |
| if (r2 < fp) {
0x00087e32 orrge r3, r3, 1 | r3 |= 1;
| }
| if (r3 == 0) {
0x00087e36 cbnz r3, 0x87e80 |
0x00087e38 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x00087e3a add.w r3, r7, 0x10 | r3 = r7 + 0x10;
0x00087e3e ldr.w r0, [r6, ip, lsl 3] | offset_0 = ip << 3;
| r0 = *((r6 + offset_0));
0x00087e42 add.w r2, r7, 8 | r2 = r7 + 8;
0x00087e46 bl 0xcd58 | r0 = fcn_0000cd58 (r0, r1, r2, r3);
| if (r0 != 0) {
0x00087e4a cbz r0, 0x87e50 |
0x00087e4c movs r3, 1 | r3 = 1;
0x00087e4e strb r3, [r7, 0xd] | *((r7 + 0xd)) = r3;
| }
0x00087e50 add.w r8, r8, 0xc | r8 += 0xc;
0x00087e54 mov sb, sl | sb = sl;
0x00087e56 b 0x87da8 | goto label_0;
| label_4:
0x00087e58 ldr r4, [r0, 0x68] | r4 = *((r0 + 0x68));
| if (r4 == 0) {
0x00087e5a cbnz r4, 0x87e7a |
| label_5:
0x00087e5c add.w r7, r4, r4, lsl 1 | r7 = r4 + (r4 << 1);
0x00087e60 movs r1, 0 | r1 = 0;
0x00087e62 lsls r7, r7, 3 | r7 <<= 3;
0x00087e64 mov r0, r7 | r0 = r7;
0x00087e66 blx 0x8240 | r0 = fcn_00008240 ();
0x00087e6a mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x00087e6c cbz r0, 0x87e90 | goto label_10;
| }
0x00087e6e mov r2, r7 | r2 = r7;
0x00087e70 movs r1, 0 | r1 = 0;
0x00087e72 blx 0x839c | fcn_0000839c ();
0x00087e76 str r6, [r5, 0x68] | *((r5 + 0x68)) = r6;
0x00087e78 b 0x87d1a | goto label_1;
| }
| label_6:
0x00087e7a movs r0, 0 | r0 = 0;
0x00087e7c mov sl, r0 | sl = r0;
0x00087e7e b 0x87d42 | goto label_2;
| }
0x00087e80 ldr r5, [sp] | r5 = *(sp);
0x00087e82 movw r0, 0x10b | r0 = 0x10b;
0x00087e86 b 0x87d42 | goto label_2;
| label_9:
0x00087e88 ldr r5, [sp] | r5 = *(sp);
0x00087e8a mov sl, sb | sl = sb;
0x00087e8c movs r0, 7 | r0 = 7;
0x00087e8e b 0x87d42 | goto label_2;
| if (r7 == 0) {
| label_10:
0x00087e90 cbz r7, 0x87ea0 | goto label_11;
| }
0x00087e92 movs r0, 7 | r0 = 7;
0x00087e94 str r6, [r5, 0x68] | *((r5 + 0x68)) = r6;
0x00087e96 b 0x87d4e | goto label_3;
| }
0x00087e98 ldr r5, [sp] | r5 = *(sp);
0x00087e9a mov sl, sb | sl = sb;
0x00087e9c movs r0, 0 | r0 = 0;
0x00087e9e b 0x87d42 | goto label_2;
| label_11:
0x00087ea0 mov r0, r7 | r0 = r7;
0x00087ea2 str r7, [r5, 0x68] | *((r5 + 0x68)) = r7;
0x00087ea4 b 0x87d4e | goto label_3;
| label_7:
0x00087ea6 blx 0x883c | fcn_0000883c ();
0x00087eaa nop |
0x00087eac lsrs r6, r4, 0x1e | r6 = r4 >> 0x1e;
0x00087eae movs r4, r0 | r4 = r0;
0x00087eb0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00087eb2 movs r0, r0 |
0x00087eb4 lsrs r6, r0, 0x1d | r6 = r0 >> 0x1d;
0x00087eb6 movs r4, r0 | r4 = r0;
0x00087eb8 push {r3, r4, r5, r6, r7, lr} |
0x00087eba mov r4, r1 | r4 = r1;
0x00087ebc ldr r1, [r0, 0x3c] | r1 = *((r0 + 0x3c));
0x00087ebe mov r7, r3 | r7 = r3;
0x00087ec0 mov r5, r0 | r5 = r0;
0x00087ec2 mov r6, r2 | r6 = r2;
0x00087ec4 lsls r3, r1, 0x1c | r3 = r1 << 0x1c;
0x00087ec6 bmi 0x87ef2 |
| while (r0 == 0) {
0x00087ec8 cmp r4, 0 |
| if (r4 >= 0) {
0x00087eca blt 0x87eee |
0x00087ecc ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x00087ece cmp r3, r4 |
| if (r3 <= r4) {
0x00087ed0 ble 0x87eee | goto label_12;
| }
0x00087ed2 add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x00087ed6 ldr r1, [r5, 0x74] | r1 = *((r5 + 0x74));
0x00087ed8 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00087eda movs r0, 0 | r0 = 0;
0x00087edc lsls r4, r4, 2 | r4 <<= 2;
0x00087ede ldr r3, [r1, r4] | r3 = *((r1 + r4));
0x00087ee0 add r1, r4 | r1 += r4;
0x00087ee2 str r3, [r6] | *(r6) = r3;
0x00087ee4 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00087ee6 str r3, [r7] | *(r7) = r3;
0x00087ee8 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x00087eea str r3, [r2] | *(r2) = r3;
0x00087eec pop {r3, r4, r5, r6, r7, pc} |
| }
| label_12:
0x00087eee movs r0, 0x19 | r0 = 0x19;
0x00087ef0 pop {r3, r4, r5, r6, r7, pc} |
0x00087ef2 bl 0x87ce8 | r0 = fcn_00087ce8 (r0);
0x00087ef6 cmp r0, 0 |
0x00087ef8 beq 0x87ec8 |
| }
0x00087efa pop {r3, r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x885b4 */
| #include <stdint.h>
|
; (fcn) fcn.000885b4 () | void fcn_000885b4 (int16_t arg_4h, int16_t arg1) {
| int16_t var_34h;
| int16_t var_8h_3;
| int16_t var_ch;
| r0 = arg1;
0x000885b4 ldr r2, [pc, 0xc4] |
0x000885b6 ldr r3, [pc, 0xc8] | r3 = *(0x88682);
0x000885b8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000885bc mov r4, r0 | r4 = r0;
0x000885be add r2, pc | r2 = 0x110c3e;
0x000885c0 ldr r5, [r0, 0x38] | r5 = *((r0 + 0x38));
0x000885c2 sub sp, 0x14 |
0x000885c4 ldr r3, [r2, r3] |
0x000885c6 ldr r0, [r5] | r0 = *(r5);
0x000885c8 ldr r3, [r3] | r3 = imp.sinh;
0x000885ca str r3, [sp, 0xc] | var_ch = r3;
0x000885cc mov.w r3, 0 | r3 = 0;
0x000885d0 blx 0x8728 | r0 = fcn_00008728 ();
0x000885d4 cmp r0, 0x65 |
| if (r0 == 0x65) {
0x000885d6 beq 0x885f6 | goto label_1;
| }
0x000885d8 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000885da beq 0x88602 | goto label_2;
| }
| do {
0x000885dc ldr r2, [pc, 0xa4] |
0x000885de ldr r3, [pc, 0xa0] | r3 = *(0x88682);
0x000885e0 add r2, pc | r2 = 0x110c68;
0x000885e2 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000885e4 ldr r2, [r3] | r2 = imp.sinh;
0x000885e6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000885e8 eors r2, r3 | r2 ^= r3;
0x000885ea mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000885ee bne 0x88676 | goto label_3;
| }
0x000885f0 add sp, 0x14 |
0x000885f2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x000885f6 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x000885f8 orr r3, r3, 3 | r3 |= 3;
| label_0:
0x000885fc movs r0, 0 | r0 = 0;
0x000885fe str r3, [r4, 0x3c] | *((r4 + 0x3c)) = r3;
0x00088600 b 0x885dc |
| } while (1);
| label_2:
0x00088602 ldr r0, [r5] | r0 = *(r5);
0x00088604 movs r1, 0 | r1 = 0;
0x00088606 blx 0x84d8 | fcn_000084d8 ();
0x0008860a strd r0, r1, [r5, 8] | __asm ("strd r0, r1, [r5, 8]");
0x0008860e movs r1, 1 | r1 = 1;
0x00088610 ldr r0, [r5] | r0 = *(r5);
0x00088612 blx 0x82f4 | fcn_000082f4 ();
0x00088616 movs r1, 1 | r1 = 1;
0x00088618 mov r7, r0 | r7 = r0;
0x0008861a ldr r0, [r5] | r0 = *(r5);
0x0008861c blx 0x8924 | fcn_00008924 ();
0x00088620 cmp r7, 0 |
0x00088622 mov r6, r0 | r6 = r0;
| if (r7 <= 0) {
0x00088624 ble 0x88668 | goto label_4;
| }
0x00088626 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00088628 adds r2, r0, r7 | r2 = r0 + r7;
0x0008862a str r2, [sp, 4] | var_34h = r2;
0x0008862c cmp r3, 1 |
0x0008862e add.w sb, r3, -1 | sb = r3 + -1;
| if (r3 <= 1) {
0x00088632 ble 0x88670 | goto label_5;
| }
0x00088634 movs r7, 0 | r7 = 0;
0x00088636 add.w fp, r5, 0x14 |
0x0008863a mov r8, r7 | r8 = r7;
0x0008863c add.w sl, sp, 8 | sl += var_8h_3;
| do {
0x00088640 mov r0, r6 | r0 = r6;
0x00088642 mov r1, sl | r1 = sl;
0x00088644 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x00088648 ldr r2, [sp, 8] | r2 = var_8h_3;
0x0008864a add.w r8, r8, 1 | r8++;
0x0008864e cmp r8, sb |
0x00088650 add r6, r0 | r6 += r0;
0x00088652 add r7, r2 | r7 += r2;
0x00088654 str r7, [fp, 4]! | *(arg_4h) = r7;
0x00088658 bne 0x88640 |
| } while (r8 != sb);
0x0008865a ldr r3, [sp, 4] | r3 = var_34h;
0x0008865c subs r7, r3, r6 | r7 = r3 - r6;
| do {
0x0008865e add.w sb, sb, 6 | sb += 6;
0x00088662 str.w r7, [r5, sb, lsl 2] | __asm ("str.w r7, [r5, sb, lsl 2]");
0x00088666 str r6, [r5, 0x10] | *((r5 + 0x10)) = r6;
| label_4:
0x00088668 ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0008866a orr r3, r3, 0x4e | r3 |= 0x4e;
0x0008866e b 0x885fc | goto label_0;
| label_5:
0x00088670 mov.w sb, 0 | sb = 0;
0x00088674 b 0x8865e |
| } while (1);
| label_3:
0x00088676 blx 0x883c | fcn_0000883c ();
0x0008867a nop |
0x0008867c lsls r2, r3, 0x1b | r2 = r3 << 0x1b;
0x0008867e movs r4, r0 | r4 = r0;
0x00088680 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00088682 movs r0, r0 |
0x00088684 lsls r0, r7, 0x1a | r0 = r7 << 0x1a;
0x00088686 movs r4, r0 | r4 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8891c */
| #include <stdint.h>
|
; (fcn) fcn.0008891c () | void fcn_0008891c (int16_t arg_58h, int16_t arg_5ch, int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| int16_t var_24h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x0008891c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00088920 mov r8, r2 | r8 = r2;
0x00088922 ldr r2, [pc, 0x1f8] |
0x00088924 mov sb, r3 | sb = r3;
0x00088926 movs r1, 0x25 | r1 = 0x25;
0x00088928 ldr r3, [pc, 0x1f4] | r3 = *(0x88b20);
0x0008892a vpush {d8} | __asm ("vpush {d8}");
0x0008892e add r2, pc | r2 = 0x111450;
0x00088930 sub sp, 0x2c |
0x00088932 str r0, [sp, 4] | var_4h = r0;
0x00088934 ldr r3, [r2, r3] |
0x00088936 add r2, sp, 0xc | r2 += var_ch;
0x00088938 ldr r4, [sp, 0x58] | r4 = *(arg_58h);
0x0008893a ldr r6, [sp, 0x5c] | r6 = *(arg_5ch);
0x0008893c ldr r3, [r3] | r3 = imp.sinh;
0x0008893e str r3, [sp, 0x24] | var_24h = r3;
0x00088940 mov.w r3, 0 | r3 = 0;
0x00088944 movs r3, 0 | r3 = 0;
0x00088946 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0008894a mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x0008894c cbz r0, 0x88970 |
| label_0:
0x0008894e ldr r2, [pc, 0x1d4] |
0x00088950 ldr r3, [pc, 0x1cc] | r3 = *(0x88b20);
0x00088952 add r2, pc | r2 = 0x11147c;
0x00088954 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00088956 ldr r2, [r3] | r2 = imp.sinh;
0x00088958 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008895a eors r2, r3 | r2 ^= r3;
0x0008895c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00088960 bne.w 0x88b0e | goto label_3;
| }
0x00088964 mov r0, r5 | r0 = r5;
0x00088966 add sp, 0x2c |
0x00088968 vpop {d8} | __asm ("vpop {d8}");
0x0008896c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00088970 adds r3, r4, r4 | r3 = r4 + r4;
0x00088972 mov.w r1, 1 | r1 = 1;
0x00088976 adc.w r2, r6, r6 | __asm ("adc.w r2, r6, r6");
0x0008897a adds r3, r3, r4 | r3 += r4;
0x0008897c adc.w r6, r6, r2 | __asm ("adc.w r6, r6, r2");
0x00088980 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00088982 lsrs r7, r6, 0x1f | r7 = r6 >> 0x1f;
0x00088984 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x00088988 add.w fp, sp, 0x10 |
0x0008898c adds r7, r7, r3 | r7 += r3;
0x0008898e mov r0, r4 | r0 = r4;
0x00088990 adc r6, r6, 0 | __asm ("adc r6, var_ch");
0x00088994 adds.w r2, r8, 1 | r2 = r8 + 1;
0x00088998 adc r3, sb, 0 | __asm ("adc r3, sb, 0");
0x0008899c lsrs r7, r7, 1 | r7 >>= 1;
0x0008899e add.w sl, sp, 0x18 | sl += var_18h;
0x000889a2 blx 0x84e8 | fcn_000084e8 ();
0x000889a6 asr.w r2, sb, 0x1f | r2 = sb >> 0x1f;
0x000889aa movs r1, 2 | r1 = 2;
0x000889ac mov r0, r4 | r0 = r4;
0x000889ae orr.w r7, r7, r6, lsl 31 | r7 |= (r6 << 31);
0x000889b2 ubfx r2, r2, 0, 0xa | r2 = (r2 >> 0) & ((1 << 0xa) - 1);
0x000889b6 asrs r6, r6, 1 | r6 >>= var_ch;
0x000889b8 adds.w r2, r2, r8 | r2 += r8;
0x000889bc lsr.w r2, r2, 0xa | r2 >>= 0xa;
0x000889c0 adc r3, sb, 0 | __asm ("adc r3, sb, 0");
0x000889c4 orr.w r2, r2, r3, lsl 22 | r2 |= (r3 << 22);
0x000889c8 asrs r3, r3, 0xa | r3 >>= 0xa;
0x000889ca adds r2, 1 | r2++;
0x000889cc adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000889d0 lsls r3, r3, 0xa | r3 <<= 0xa;
0x000889d2 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x000889d6 lsls r2, r2, 0xa | r2 <<= 0xa;
0x000889d8 subs r2, 1 | r2--;
0x000889da sbc r3, r3, 0 | __asm ("sbc r3, r3, 0");
0x000889de blx 0x84e8 | fcn_000084e8 ();
0x000889e2 b 0x889e6 |
| while (r3 == 0) {
0x000889e4 movs r5, 1 | r5 = 1;
0x000889e6 mov r0, r4 | r0 = r4;
0x000889e8 blx 0x8728 | r0 = fcn_00008728 ();
0x000889ec cmp r0, 0x64 |
| if (r0 != 0x64) {
0x000889ee bne 0x88a44 | goto label_4;
| }
0x000889f0 mov r3, fp | r3 = fp;
0x000889f2 mov r2, sl | r2 = sl;
0x000889f4 movs r1, 2 | r1 = 2;
0x000889f6 mov r0, r4 | r0 = r4;
0x000889f8 vstr d8, [sp, 0x10] | __asm ("vstr d8, [sp, 0x10]");
0x000889fc bl 0x1fccc | fcn_0001fccc (r0, r1);
0x00088a00 ldrd r1, r2, [sp, 0x10] | __asm ("ldrd r1, r2, [var_10h]");
0x00088a04 cmp r7, r1 |
0x00088a06 sbcs.w r3, r6, r2 | __asm ("sbcs.w r3, r6, r2");
0x00088a0a ite lt |
| if (r7 >= r1) {
0x00088a0c movlt r3, 1 | r3 = 1;
| }
| if (r7 < r1) {
0x00088a0e movge r3, 0 | r3 = 0;
| }
0x00088a10 cmp r1, 1 |
0x00088a12 sbcs r2, r2, 0 | __asm ("sbcs r2, r2, 0");
0x00088a16 it lt |
| if (r1 >= 1) {
0x00088a18 orrlt r3, r3, 1 | r3 |= 1;
| }
0x00088a1c cmp r3, 0 |
0x00088a1e beq 0x889e4 |
| }
0x00088a20 ldr r2, [pc, 0x104] |
0x00088a22 ldr r3, [pc, 0xfc] | r3 = *(0x88b22);
0x00088a24 add r2, pc | r2 = 0x111550;
0x00088a26 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00088a28 ldr r2, [r3] | r2 = imp.sinh;
0x00088a2a ldr r3, [sp, 0x24] | r3 = var_24h;
0x00088a2c eors r2, r3 | r2 ^= r3;
0x00088a2e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00088a32 bne 0x88b0e | goto label_3;
| }
| label_2:
0x00088a34 mov r0, r4 | r0 = r4;
0x00088a36 add sp, 0x2c |
0x00088a38 vpop {d8} | __asm ("vpop {d8}");
0x00088a3c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00088a40 b.w 0x81f4 | void (*0x81f4)() ();
| label_4:
0x00088a44 mov r0, r4 | r0 = r4;
0x00088a46 blx 0x81f8 | r0 = fcn_000081f8 ();
0x00088a4a mov r6, r0 | r6 = r0;
| if (r5 == 0) {
0x00088a4c cbz r5, 0x88a56 | goto label_1;
| }
0x00088a4e movs r3, 0 | r3 = 0;
0x00088a50 str r3, [sp, 0x10] | var_10h = r3;
0x00088a52 str r3, [sp, 0x18] | var_18h = r3;
0x00088a54 cbz r0, 0x88a5a |
| while (r0 != 0) {
| label_1:
0x00088a56 mov r5, r6 | r5 = r6;
0x00088a58 b 0x8894e | goto label_0;
0x00088a5a mov r3, r0 | r3 = r0;
0x00088a5c add r2, sp, 0x10 | r2 += var_10h;
0x00088a5e ldr r0, [sp, 4] | r0 = var_4h;
0x00088a60 movs r1, 0x26 | r1 = 0x26;
0x00088a62 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x00088a66 mov r6, r0 | r6 = r0;
0x00088a68 cmp r0, 0 |
0x00088a6a bne 0x88a56 |
| }
0x00088a6c mov r3, r0 | r3 = r0;
0x00088a6e add r2, sp, 0x18 | r2 += var_18h;
0x00088a70 ldr r0, [sp, 4] | r0 = var_4h;
0x00088a72 movs r1, 0x27 | r1 = 0x27;
0x00088a74 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x00088a78 mov r6, r0 | r6 = r0;
0x00088a7a cmp r0, 0 |
| if (r0 != 0) {
0x00088a7c bne 0x88a56 | goto label_1;
| }
0x00088a7e mov r2, r8 | r2 = r8;
0x00088a80 mov r3, sb | r3 = sb;
0x00088a82 movs r1, 1 | r1 = 1;
0x00088a84 mov r0, r4 | r0 = r4;
0x00088a86 blx 0x84e8 | fcn_000084e8 ();
0x00088a8a b 0x88ad0 |
| while (r0 == 0x64) {
0x00088a8c ldr r5, [sp, 0x10] | r5 = var_10h;
0x00088a8e mov r2, r6 | r2 = r6;
0x00088a90 movs r1, 1 | r1 = 1;
0x00088a92 adds r7, r6, 1 | r7 = r6 + 1;
0x00088a94 mov r0, r5 | r0 = r5;
0x00088a96 blx 0x8250 | fcn_00008250 ();
0x00088a9a movs r1, 0 | r1 = 0;
0x00088a9c mov r0, r4 | r0 = r4;
0x00088a9e blx 0x81b4 | fcn_000081b4 ();
0x00088aa2 movs r1, 2 | r1 = 2;
0x00088aa4 mov r2, r0 | r2 = r0;
0x00088aa6 mov r0, r5 | r0 = r5;
0x00088aa8 blx 0x8250 | fcn_00008250 ();
0x00088aac movs r1, 1 | r1 = 1;
0x00088aae mov r0, r4 | r0 = r4;
0x00088ab0 blx 0x81b4 | fcn_000081b4 ();
0x00088ab4 movs r1, 3 | r1 = 3;
0x00088ab6 mov r2, r0 | r2 = r0;
0x00088ab8 mov r0, r5 | r0 = r5;
0x00088aba blx 0x8250 | fcn_00008250 ();
0x00088abe mov r0, r5 | r0 = r5;
0x00088ac0 blx 0x8728 | fcn_00008728 ();
0x00088ac4 mov r0, r5 | r0 = r5;
0x00088ac6 blx 0x81f8 | r0 = fcn_000081f8 ();
0x00088aca mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00088acc cbnz r0, 0x88b12 | goto label_5;
| }
0x00088ace mov r6, r7 | r6 = r7;
0x00088ad0 mov r0, r4 | r0 = r4;
0x00088ad2 blx 0x8728 | r0 = fcn_00008728 ();
0x00088ad6 cmp r0, 0x64 |
0x00088ad8 beq 0x88a8c |
| }
0x00088ada mov r0, r4 | r0 = r4;
0x00088adc blx 0x81f8 | r0 = fcn_000081f8 ();
0x00088ae0 mov r6, r0 | r6 = r0;
0x00088ae2 cmp r0, 0 |
| if (r0 != 0) {
0x00088ae4 bne 0x88a56 | goto label_1;
| }
0x00088ae6 ldr r4, [sp, 0x18] | r4 = var_18h;
0x00088ae8 mov r2, r8 | r2 = r8;
0x00088aea mov r3, sb | r3 = sb;
0x00088aec movs r1, 1 | r1 = 1;
0x00088aee mov r0, r4 | r0 = r4;
0x00088af0 blx 0x84e8 | fcn_000084e8 ();
0x00088af4 mov r0, r4 | r0 = r4;
0x00088af6 blx 0x8728 | fcn_00008728 ();
0x00088afa ldr r2, [pc, 0x30] |
0x00088afc ldr r3, [pc, 0x20] | r3 = *(0x88b20);
0x00088afe add r2, pc | r2 = 0x111630;
0x00088b00 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00088b02 ldr r2, [r3] | r2 = imp.sinh;
0x00088b04 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00088b06 eors r2, r3 | r2 ^= r3;
0x00088b08 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00088b0c beq 0x88a34 | goto label_2;
| }
| label_3:
0x00088b0e blx 0x883c | fcn_0000883c ();
| label_5:
0x00088b12 mov r0, r4 | r0 = r4;
0x00088b14 mov r5, r6 | r5 = r6;
0x00088b16 blx 0x81f8 | fcn_000081f8 ();
0x00088b1a b 0x8894e | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x88cd0 */
| #include <stdint.h>
|
; (fcn) fcn.00088cd0 () | void fcn_00088cd0 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00088cd0 push {r3, r4, r5, r6, r7, lr} |
0x00088cd2 ldrb r3, [r1, 7] | r3 = *((r1 + 7));
| if (r3 != 0) {
0x00088cd4 cbnz r3, 0x88cdc | goto label_4;
| }
| label_1:
0x00088cd6 movs r5, 0 | r5 = 0;
| do {
| label_3:
0x00088cd8 mov r0, r5 | r0 = r5;
0x00088cda pop {r3, r4, r5, r6, r7, pc} |
| label_4:
0x00088cdc mov r6, r0 | r6 = r0;
0x00088cde mov r0, r1 | r0 = r1;
0x00088ce0 mov r4, r1 | r4 = r1;
0x00088ce2 bl 0x7c30c | r0 = fcn_0007c30c (r0);
0x00088ce6 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x00088ce8 cbz r0, 0x88cfa | goto label_5;
| }
| label_0:
0x00088cea cmp r6, 0 |
0x00088cec beq 0x88cd8 |
| } while (r6 == 0);
| label_2:
0x00088cee mov r0, r6 | r0 = r6;
0x00088cf0 mov r1, r5 | r1 = r5;
0x00088cf2 blx 0x86c0 | fcn_000086c0 ();
0x00088cf6 mov r0, r5 | r0 = r5;
0x00088cf8 pop {r3, r4, r5, r6, r7, pc} |
| label_5:
0x00088cfa ldr r7, [r4] | r7 = *(r4);
0x00088cfc movs r1, 1 | r1 = 1;
0x00088cfe ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00088d00 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00088d02 adds r3, 1 | r3++;
0x00088d04 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x00088d06 ldrd r2, r3, [r4, 0x20] | __asm ("ldrd r2, r3, [r4, 0x20]");
0x00088d0a blx 0x84e8 | fcn_000084e8 ();
0x00088d0e ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00088d10 strb r5, [r4, 7] | *((r4 + 7)) = r5;
0x00088d12 blx 0x8728 | r0 = fcn_00008728 ();
0x00088d16 cmp r0, 0x64 |
0x00088d18 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
| if (r0 == 0x64) {
0x00088d1a beq 0x88d42 | goto label_6;
| }
0x00088d1c subs r3, 1 | r3--;
0x00088d1e ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00088d20 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x00088d22 blx 0x81f8 | r0 = fcn_000081f8 ();
0x00088d26 mov r5, r0 | r5 = r0;
0x00088d28 cmp r0, 0 |
| if (r0 != 0) {
0x00088d2a bne 0x88cea | goto label_0;
| }
0x00088d2c ldr r3, [r4] | r3 = *(r4);
0x00088d2e ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00088d30 cmp r3, 0 |
| if (r3 != 0) {
0x00088d32 bne 0x88cd6 | goto label_1;
| }
0x00088d34 movs r3, 1 | r3 = 1;
0x00088d36 movw r5, 0x10b | r5 = 0x10b;
0x00088d3a strb r3, [r4, 6] | *((r4 + 6)) = r3;
0x00088d3c cmp r6, 0 |
| if (r6 != 0) {
0x00088d3e bne 0x88cee | goto label_2;
| }
0x00088d40 b 0x88cd8 | goto label_3;
| label_6:
0x00088d42 subs r3, 1 | r3--;
0x00088d44 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x00088d46 b 0x88cd6 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x88d48 */
| #include <stdint.h>
|
; (fcn) fcn.00088d48 () | void fcn_00088d48 (int16_t arg_0h, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int32_t var_2ch_2;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_4ch;
| arithmetic x;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = arg2;
0x00088d48 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00088d4c mov r5, r1 | r5 = r1;
0x00088d4e mov r8, r0 | r8 = r0;
0x00088d50 ldr r0, [r1] | r0 = *(r1);
0x00088d52 sub sp, 0x74 |
0x00088d54 ldr r1, [pc, 0x22c] |
0x00088d56 ldr r2, [pc, 0x230] | r2 = *(0x88f8a);
0x00088d58 add r1, pc | r1 = 0x111ce0;
0x00088d5a ldr r2, [r1, r2] |
0x00088d5c ldr r2, [r2] | r2 = imp.sinh;
0x00088d5e str r2, [sp, 0x6c] | var_6ch = r2;
0x00088d60 mov.w r2, 0 | r2 = 0;
0x00088d64 str r0, [sp, 0x4c] | var_4ch = r0;
| if (r0 != 0) {
0x00088d66 cbnz r0, 0x88dc6 | goto label_10;
| }
0x00088d68 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
| if (r2 != 0) {
0x00088d6c cbz r2, 0x88d7a |
0x00088d6e mov r1, r8 | r1 = r8;
0x00088d70 bl 0x88cd0 | r0 = fcn_00088cd0 (r0, r1);
0x00088d74 mov r6, r0 | r6 = r0;
0x00088d76 str r0, [sp, 0x4c] | var_4ch = r0;
| if (r0 == 0) {
0x00088d78 cbz r0, 0x88dca | goto label_11;
| }
| }
| label_0:
0x00088d7a ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x00088d7e add r2, sp, 0x4c | r2 += var_4ch;
0x00088d80 mov r0, r8 | r0 = r8;
0x00088d82 bl 0x42754 | fcn_00042754 (r0, r1, r2);
0x00088d86 ldr.w r4, [r8, 0x1c] | r4 = *((r8 + 0x1c));
0x00088d8a mov r7, r0 | r7 = r0;
| if (r4 == 0) {
0x00088d8c cbz r4, 0x88d9e | goto label_12;
| }
0x00088d8e movs r6, 0 | r6 = 0;
| do {
0x00088d90 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00088d92 blx 0x8404 | fcn_00008404 ();
0x00088d96 str r6, [r4, 0xc] | *((r4 + 0xc)) = r6;
0x00088d98 ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x00088d9a cmp r4, 0 |
0x00088d9c bne 0x88d90 |
| } while (r4 != 0);
| label_12:
0x00088d9e ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x00088da0 orrs r7, r3 | r7 |= r3;
0x00088da2 str r3, [r5] | *(r5) = r3;
0x00088da4 ite eq |
| if (r7 != r3) {
0x00088da6 moveq r0, 1 | r0 = 1;
| }
0x00088da8 movne r0, 0 | r0 = 0;
| while (1) {
0x00088daa ldr r2, [pc, 0x1e0] |
0x00088dac ldr r3, [pc, 0x1d8] | r3 = *(0x88f88);
0x00088dae add r2, pc | r2 = 0x111d40;
0x00088db0 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00088db2 ldr r2, [r3] | r2 = imp.sinh;
0x00088db4 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00088db6 eors r2, r3 | r2 ^= r3;
0x00088db8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00088dbc bne.w 0x88f7e | goto label_13;
| }
0x00088dc0 add sp, 0x74 |
0x00088dc2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x00088dc6 movs r0, 0 | r0 = 0;
0x00088dc8 b 0x88daa |
| }
| label_11:
0x00088dca ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00088dce str r0, [sp, 0x50] | x = r0;
0x00088dd0 cmp r2, 0 |
| if (r2 == 0) {
0x00088dd2 beq 0x88e44 | goto label_14;
| }
0x00088dd4 ldr.w r4, [r8] | r4 = *(r8);
0x00088dd8 mov r1, r6 | r1 = r6;
0x00088dda ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00088dde ldr.w fp, [r4, 0x24] | fp = *((r4 + 0x24));
0x00088de2 ldr.w sb, [fp] | sb = *(fp);
0x00088de6 blx 0x84d8 | fcn_000084d8 ();
0x00088dea strd r0, r1, [sp, 0x2c] | __asm ("strd r0, r1, [var_2ch]");
0x00088dee ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00088df0 cmp r1, 0 |
| if (r1 <= 0) {
0x00088df2 ble 0x88e20 | goto label_6;
| }
0x00088df4 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x00088df6 add r3, sp, 0x54 | r3 += var_54h;
0x00088df8 str.w fp, [sp, 0x3c] | __asm ("str.w fp, [var_3ch]");
0x00088dfc mov sl, r6 | sl = r6;
0x00088dfe mov r7, r6 | r7 = r6;
0x00088e00 mov fp, r6 |
0x00088e02 str r3, [sp, 0x38] | var_38h = r3;
0x00088e04 add r3, sp, 0x50 | r3 += x;
0x00088e06 str r3, [sp, 0x34] | var_34h = r3;
0x00088e08 str r5, [sp, 0x44] | var_44h = r5;
| do {
| label_4:
0x00088e0a ldrb.w r6, [r0, sl] | r6 = *((r0 + sl));
| if (r6 == 0) {
0x00088e0e cbz r6, 0x88e48 | goto label_15;
| }
0x00088e10 adds.w sl, sl, 1 | sl++;
0x00088e14 adc fp, fp, 0 | __asm ("adc fp, fp, 0");
0x00088e18 cmp r1, sl |
0x00088e1a bgt 0x88e0a |
| } while (r1 > sl);
| label_5:
0x00088e1c ldr r5, [sp, 0x44] | r5 = var_44h;
0x00088e1e mov r6, r7 | r6 = r7;
| label_6:
0x00088e20 ldr.w r4, [r8, 0x1c] | r4 = *((r8 + 0x1c));
0x00088e24 mov r0, r6 | r0 = r6;
| if (r4 == 0) {
0x00088e26 cbz r4, 0x88e44 | goto label_14;
| }
| if (r0 != 0) {
| do {
0x00088e28 cbnz r0, 0x88e42 | goto label_16;
| }
0x00088e2a ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 != 0) {
0x00088e2c cbz r3, 0x88e3c |
0x00088e2e movs r2, 0 | r2 = 0;
0x00088e30 movs r3, 0 | r3 = 0;
0x00088e32 add.w r0, r4, 0xc | r0 = r4 + 0xc;
0x00088e36 bl 0x43b40 | fcn_00043b40 (r0, r1, r2);
0x00088e3a str r0, [sp, 0x50] | x = r0;
| }
0x00088e3c ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x00088e3e cmp r4, 0 |
0x00088e40 bne 0x88e28 |
| } while (r4 != 0);
| label_16:
0x00088e42 mov r6, r0 | r6 = r0;
| label_14:
0x00088e44 str r6, [sp, 0x4c] | var_4ch = r6;
0x00088e46 b 0x88d7a | goto label_0;
| label_15:
0x00088e48 add.w r1, sl, 1 | r1 = sl + 1;
0x00088e4c ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00088e50 blx 0x8148 | fcn_00008148 ();
0x00088e54 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00088e56 mov r2, r0 | r2 = r0;
0x00088e58 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00088e5a str r6, [sp, 0x54] | var_54h = r6;
0x00088e5c str r3, [sp] | *(sp) = r3;
0x00088e5e mov.w r3, -1 | r3 = -1;
0x00088e62 ldr.w r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x00088e66 bl 0xba70 | r0 = fcn_0000ba70 (r0, r1, r2, r3, r4);
0x00088e6a mov r3, r0 | r3 = r0;
0x00088e6c str r0, [sp, 0x50] | x = r0;
0x00088e6e cmp r0, 0 |
| if (r0 != 0) {
0x00088e70 bne.w 0x88f7a | goto label_17;
| }
0x00088e74 ldr r1, [sp, 0x54] | r1 = var_54h;
0x00088e76 add r3, sp, 0x60 | r3 += var_60h;
0x00088e78 add r5, sp, 0x64 | r5 += var_64h;
0x00088e7a str r3, [sp, 0x20] | var_20h = r3;
0x00088e7c add r3, sp, 0x5c | r3 += var_5ch;
0x00088e7e str r7, [sp, 0x40] | var_40h = r7;
0x00088e80 str r3, [sp, 0x1c] | var_1ch = r3;
0x00088e82 mov r7, sl | r7 = sl;
0x00088e84 add r3, sp, 0x58 | r3 += var_58h;
0x00088e86 str.w fp, [sp, 0x28] | __asm ("str.w fp, [var_28h]");
0x00088e8a mov r6, r0 | r6 = r0;
0x00088e8c mov sl, r1 | sl = r1;
0x00088e8e mov fp, r5 |
0x00088e90 str r3, [sp, 0x18] | var_18h = r3;
0x00088e92 add r3, sp, 0x68 | r3 += var_68h;
0x00088e94 str r3, [sp, 0x24] | var_24h = r3;
| label_3:
0x00088e96 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00088e98 mov r0, sl | r0 = sl;
0x00088e9a ldr r1, [sp, 0x18] | r1 = var_18h;
0x00088e9c strd r6, r6, [sp, 0x5c] | __asm ("strd r6, r6, [var_60h]");
0x00088ea0 strd fp, r3, [sp] | __asm ("strd fp, r3, [sp]");
0x00088ea4 strd r6, r6, [sp, 0x64] | __asm ("strd r6, r6, [var_64h]");
0x00088ea8 ldrd r2, r3, [sp, 0x1c] | __asm ("ldrd r2, r3, [var_20h]");
0x00088eac ldr.w r5, [sb, 0x14] | r5 = *((sb + 0x14));
0x00088eb0 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00088eb2 ldr.w r5, [r8, 0x1c] | r5 = *((r8 + 0x1c));
0x00088eb6 clz r3, r0 | r3 &= r0;
0x00088eba lsrs r3, r3, 5 | r3 >>= 5;
0x00088ebc str r0, [sp, 0x50] | x = r0;
0x00088ebe cmp r5, 0 |
0x00088ec0 it eq |
| if (r5 != 0) {
0x00088ec2 moveq r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x00088ec4 cbnz r3, 0x88ee4 | goto label_18;
| }
0x00088ec6 b 0x88f30 | goto label_19;
| label_2:
0x00088ec8 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00088eca cmp r0, 0 |
0x00088ecc it ne |
| if (r0 != 0) {
0x00088ece cmpne r2, r1 | __asm ("cmpne r2, r1");
| }
| if (r0 < 0) {
0x00088ed0 blt 0x88f04 | goto label_20;
| }
| do {
| label_1:
0x00088ed2 ldr r5, [r5, 8] | r5 = *((r5 + 8));
0x00088ed4 ldr r0, [sp, 0x50] | r0 = x;
0x00088ed6 subs r3, r5, 0 | r3 = r5 - 0;
0x00088ed8 it ne |
| if (r3 == r5) {
0x00088eda movne r3, 1 | r3 = 1;
| }
0x00088edc cmp r0, 0 |
0x00088ede it ne |
| if (r0 == 0) {
0x00088ee0 movne r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x00088ee2 cbz r3, 0x88f30 | goto label_19;
| }
| label_18:
0x00088ee4 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00088ee6 ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00088ee8 cmp r3, r7 |
0x00088eea it ne |
| if (r3 != r7) {
0x00088eec cmpne r3, r2 | __asm ("cmpne r3, r2");
| }
0x00088eee blt 0x88ed2 |
| } while (r3 < r7);
0x00088ef0 ldr r3, [r5] | r3 = *(r5);
0x00088ef2 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
| if (r2 == 0) {
0x00088ef4 cbz r2, 0x88efc | goto label_21;
| }
0x00088ef6 ldr r2, [sp, 0x68] | r2 = var_68h;
0x00088ef8 cmp r2, 0 |
| if (r2 != 0) {
0x00088efa bne 0x88ed2 | goto label_1;
| }
| label_21:
0x00088efc ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00088efe ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x00088f00 cmp r2, r1 |
| if (r2 != r1) {
0x00088f02 bne 0x88ec8 | goto label_2;
| }
| label_20:
0x00088f04 ldr r1, [r3] | r1 = *(r3);
0x00088f06 ldr r0, [sp, 0x58] | r0 = var_58h;
0x00088f08 blx 0x8214 | r0 = sysconf ();
0x00088f0c cmp r0, 0 |
| if (r0 != 0) {
0x00088f0e bne 0x88ed2 | goto label_1;
| }
0x00088f10 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00088f12 add.w r0, r5, 0xc | r0 = r5 + 0xc;
0x00088f16 str r7, [sp] | *(sp) = r7;
0x00088f18 str r3, [sp, 0x10] | var_10h = r3;
0x00088f1a ldr r3, [sp, 0x28] | r3 = var_28h;
0x00088f1c str r3, [sp, 4] | var_4h = r3;
0x00088f1e ldr r3, [sp, 0x68] | r3 = var_68h;
0x00088f20 str r3, [sp, 8] | var_8h = r3;
0x00088f22 asrs r3, r3, 0x1f | r3 >>= 0x1f;
0x00088f24 str r3, [sp, 0xc] | var_ch = r3;
0x00088f26 ldrd r2, r3, [sp, 0x2c] | __asm ("ldrd r2, r3, [var_2ch]");
0x00088f2a bl 0x43bdc | fcn_00043bdc (r0, r1, r2, r3, r4, r5);
0x00088f2e b 0x88ed2 | goto label_1;
| label_19:
0x00088f30 cmp r0, 0 |
| if (r0 == 0) {
0x00088f32 beq 0x88e96 | goto label_3;
| }
0x00088f34 mov r1, sl | r1 = sl;
0x00088f36 ldr.w fp, [sp, 0x28] | fp = var_28h;
0x00088f3a mov sl, r7 | sl = r7;
0x00088f3c ldr r7, [sp, 0x40] | r7 = var_40h;
0x00088f3e mov r3, r0 | r3 = r0;
| if (r1 != 0) {
| label_7:
0x00088f40 cbz r1, 0x88f4e |
0x00088f42 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x00088f46 mov r0, r1 | r0 = r1;
0x00088f48 str r3, [sp, 0x18] | var_18h = r3;
0x00088f4a blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00088f4c ldr r3, [sp, 0x18] | r3 = var_18h;
| }
0x00088f4e adds.w sl, sl, 1 | sl++;
0x00088f52 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x00088f54 adc fp, fp, 0 | __asm ("adc fp, fp, 0");
0x00088f58 cmp r3, 0x65 |
| if (r3 == 0x65) {
0x00088f5a beq 0x88f68 | goto label_22;
| }
0x00088f5c cmp r1, sl |
0x00088f5e ldr r2, [sp, 0x50] | r2 = x;
| if (r1 <= sl) {
0x00088f60 ble 0x88f74 | goto label_23;
| }
| if (r2 != 0) {
0x00088f62 cbnz r2, 0x88f74 | goto label_23;
| }
| do {
0x00088f64 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x00088f66 b 0x88e0a | goto label_4;
| label_22:
0x00088f68 cmp r1, sl |
0x00088f6a mov.w r3, 0 | r3 = 0;
0x00088f6e str r3, [sp, 0x50] | x = r3;
0x00088f70 bgt 0x88f64 |
| } while (r1 > sl);
0x00088f72 b 0x88e1c | goto label_5;
| label_23:
0x00088f74 ldr r5, [sp, 0x44] | r5 = var_44h;
0x00088f76 mov r6, r2 | r6 = r2;
0x00088f78 b 0x88e20 | goto label_6;
| label_17:
0x00088f7a ldr r1, [sp, 0x54] | r1 = var_54h;
0x00088f7c b 0x88f40 | goto label_7;
| label_13:
0x00088f7e blx 0x883c | fcn_0000883c ();
0x00088f82 nop |
0x00088f84 vhadd.u8 d16, d0, d3 | __asm ("vhadd.u8 d16, d0, d3");
0x00088f88 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00088f8a movs r0, r0 |
0x00088f8c cdp2 p0, 0xe, c0, c10, c3, 0 | __asm ("cdp2 p0, 0xe, c0, c10, c3, 0");
0x00088f90 push {r3, r4, r5, r6, r7, lr} |
0x00088f92 mov r5, r2 | r5 = r2;
0x00088f94 ldr r2, [r0] | r2 = *(r0);
0x00088f96 mov r4, r0 | r4 = r0;
0x00088f98 mov r7, r1 | r7 = r1;
0x00088f9a ldr r6, [r2, 0x18] | r6 = *((r2 + 0x18));
0x00088f9c subs r3, r5, r6 | r3 = r5 - r6;
0x00088f9e cmp r3, 1 |
| if (r3 == 1) {
0x00088fa0 beq 0x88fd4 | goto label_24;
| }
0x00088fa2 cmp r3, 2 |
| if (r3 == 2) {
0x00088fa4 beq 0x88fc4 | goto label_25;
| }
| if (r3 != 0) {
0x00088fa6 cbz r3, 0x88fb4 |
| label_8:
0x00088fa8 mov r1, r4 | r1 = r4;
0x00088faa movs r0, 0 | r0 = 0;
0x00088fac bl 0x88cd0 | r0 = fcn_00088cd0 (r0, r1);
| if (r0 == 0) {
0x00088fb0 cbz r0, 0x88ff0 | goto label_26;
| }
0x00088fb2 pop {r3, r4, r5, r6, r7, pc} |
| }
0x00088fb4 ldr r2, [pc, 0x58] |
0x00088fb6 mov r1, r0 | r1 = r0;
0x00088fb8 mov r0, r7 | r0 = r7;
0x00088fba add r2, pc | r2 = 0x111fce;
0x00088fbc blx 0x8a70 | fcn_00008a70 ();
| do {
| label_9:
0x00088fc0 movs r0, 0 | r0 = 0;
0x00088fc2 pop {r3, r4, r5, r6, r7, pc} |
| label_25:
0x00088fc4 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
| if (r3 == 0) {
0x00088fc6 cbz r3, 0x88fe0 | goto label_27;
| }
0x00088fc8 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x00088fca mov r0, r1 | r0 = r1;
0x00088fcc asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00088fce blx 0x8698 | fcn_00008698 ();
0x00088fd0 sbc.w r7, r4, r5, ror 27 | __asm ("sbc.w r7, r4, r5, ror 27");
| label_24:
0x00088fd4 ldrd r2, r3, [r0, 0x20] | __asm ("ldrd r2, r3, [r0, 0x20]");
0x00088fd8 mov r0, r1 | r0 = r1;
0x00088fda blx 0x8698 | fcn_00008698 ();
0x00088fde b 0x88fc0 |
| } while (1);
| label_27:
0x00088fe0 ldr r1, [r2, 0x2c] | r1 = *((r2 + 0x2c));
0x00088fe2 mov r5, r6 | r5 = r6;
0x00088fe4 cmp r1, 0 |
| if (r1 != 0) {
0x00088fe6 bne 0x88fa8 | goto label_8;
| }
0x00088fe8 mov r0, r7 | r0 = r7;
0x00088fea blx 0x83ac | fcn_000083ac ();
0x00088fee b 0x88fc0 | goto label_9;
| label_26:
0x00088ff0 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00088ff2 blx 0x850c | fcn_0000850c ();
0x00088ff6 subs r0, 1 | r0--;
0x00088ff8 cmp r0, r5 |
| if (r0 <= r5) {
0x00088ffa ble 0x88fc0 | goto label_9;
| }
0x00088ffc adds r1, r5, 1 | r1 = r5 + 1;
0x00088ffe ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00089000 blx 0x890c | r0 = fcn_0000890c ();
0x00089004 mov r1, r0 | r1 = r0;
0x00089006 mov r0, r7 | r0 = r7;
0x00089008 blx 0x8344 | fcn_00008344 ();
0x0008900c b 0x88fc0 | goto label_9;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x89228 */
| #include <stdint.h>
|
; (fcn) fcn.00089228 () | void fcn_00089228 (int16_t arg_68h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| arithmetic x;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00089228 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008922c mov sb, r2 | sb = r2;
0x0008922e ldr r2, [pc, 0x254] |
0x00089230 mov r8, r3 | r8 = r3;
0x00089232 sub sp, 0x44 |
0x00089234 ldr r3, [pc, 0x250] | r3 = *(0x89488);
0x00089236 add r2, pc | r2 = 0x1126c0;
0x00089238 ldr r5, [r0] | r5 = *(r0);
0x0008923a ldr.w fp, [sp, 0x68] | fp = *(arg_68h);
0x0008923e ldr r3, [r2, r3] |
0x00089240 ldr r3, [r3] | r3 = imp.sinh;
0x00089242 str r3, [sp, 0x3c] | var_3ch = r3;
0x00089244 mov.w r3, 0 | r3 = 0;
0x00089248 ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
| if (r5 != 0) {
0x0008924a cbz r5, 0x89268 |
| label_4:
0x0008924c ldr r2, [pc, 0x23c] |
0x0008924e ldr r3, [pc, 0x238] | r3 = *(0x8948a);
0x00089250 add r2, pc | r2 = 0x1126e0;
0x00089252 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00089254 ldr r2, [r3] | r2 = imp.sinh;
0x00089256 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00089258 eors r2, r3 | r2 ^= r3;
0x0008925a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008925e bne.w 0x89480 | goto label_6;
| }
0x00089262 add sp, 0x44 |
0x00089264 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00089268 add.w sl, r3, 2 | sl = r3 + 2;
0x0008926c mov r4, r1 | r4 = r1;
0x0008926e movs r1, 0xe | r1 = 0xe;
0x00089270 mov r6, r0 | r6 = r0;
0x00089272 smull r0, r1, sl, r1 | r0:r1 = sl * r1;
0x00089276 blx 0x8240 | r0 = fcn_00008240 ();
0x0008927a mov r7, r0 | r7 = r0;
0x0008927c cmp r0, 0 |
| if (r0 == 0) {
0x0008927e beq.w 0x8946c | goto label_7;
| }
0x00089282 mov r3, r5 | r3 = r5;
0x00089284 add r2, sp, 0x2c | r2 += var_2ch;
0x00089286 movs r1, 0x16 | r1 = 0x16;
0x00089288 mov r0, r4 | r0 = r4;
0x0008928a str r2, [sp, 0x14] | var_14h = r2;
0x0008928c bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x00089290 mov r5, r0 | r5 = r0;
0x00089292 cmp r0, 0 |
| if (r0 != 0) {
0x00089294 bne.w 0x89462 | goto label_8;
| }
0x00089298 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008929a mov r2, r0 | r2 = r0;
0x0008929c lsl.w r0, sl, 2 | r0 = sl << 2;
0x000892a0 movs r1, 1 | r1 = 1;
0x000892a2 strd r3, r0, [sp, 0xc] | __asm ("strd r3, r0, [var_ch]");
0x000892a6 mov r0, r3 | r0 = r3;
0x000892a8 blx 0x8250 | fcn_00008250 ();
0x000892ac ldr r0, [sp, 0xc] | r0 = var_ch;
0x000892ae blx 0x8728 | r0 = fcn_00008728 ();
0x000892b2 cmp r0, 0x64 |
0x000892b4 mov r1, r5 | r1 = r5;
| if (r0 == 0x64) {
0x000892b6 beq.w 0x893c6 | goto label_9;
| }
0x000892ba ldr r2, [sp, 0x10] | r2 = var_10h;
0x000892bc mov r0, r7 | r0 = r7;
0x000892be blx 0x839c | fcn_0000839c ();
| label_1:
0x000892c2 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000892c4 blx 0x81f8 | r0 = fcn_000081f8 ();
0x000892c8 mov r5, r0 | r5 = r0;
0x000892ca cmp r0, 0 |
| if (r0 != 0) {
0x000892cc bne.w 0x89462 | goto label_8;
| }
0x000892d0 cmp.w fp, 0 |
0x000892d4 ldr r3, [r7] | r3 = *(r7);
| if (fp < 0) {
0x000892d6 blt.w 0x89452 | goto label_10;
| }
| label_3:
0x000892da add r3, fp | r3 += fp;
| label_2:
0x000892dc str r3, [r7] | *(r7) = r3;
0x000892de ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000892e0 cmp r3, 0 |
0x000892e2 itttt ge |
| if (r3 < 0) {
0x000892e4 subge sb, sb, 4 | sb -= 4;
| }
| if (r3 < 0) {
0x000892e8 subge r8, r8, 4 | r8 -= 4;
| }
| if (r3 >= 0) {
0x000892ec mov r1, r7 | r1 = r7;
| }
| if (r3 >= 0) {
0x000892ee movs r2, 0 | r2 = 0;
| }
| if (r2 < 0) {
0x000892f0 blt 0x89312 | goto label_11;
| }
| do {
0x000892f2 ldr r0, [r1, 4]! | r0 = *((r1 += 4));
0x000892f6 adds r2, 1 | r2++;
0x000892f8 ldr r3, [sb, 4]! | r3 = *((sb += 4));
0x000892fc add r3, r0 | r3 += r0;
0x000892fe ldr r0, [r8, 4]! | r0 = *((r8 += 4));
0x00089302 cmp r0, r3 |
0x00089304 ite ls |
| if (r0 > r3) {
0x00089306 subls r3, r3, r0 | r3 -= r0;
| }
| if (r0 <= r3) {
0x00089308 movhi r3, 0 | r3 = 0;
| }
0x0008930a str r3, [r1] | *(r1) = r3;
0x0008930c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0008930e cmp r3, r2 |
0x00089310 bge 0x892f2 |
| } while (r3 >= r2);
| label_11:
0x00089312 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00089314 cmp.w sl, 0 |
0x00089318 add.w r8, r7, r3 | r8 = r7 + r3;
| if (sl <= 0) {
0x0008931c ble 0x89360 | goto label_12;
| }
0x0008931e ldr r3, [sp, 0x10] | r3 = var_10h;
0x00089320 subs r0, r7, 4 | r0 = r7 - 4;
0x00089322 sub.w sl, r3, 4 | sl = r3 - 4;
0x00089326 add sl, r7 | sl += r7;
| label_0:
0x00089328 ldr r3, [r0, 4]! | r3 = *((r0 += 4));
0x0008932c add.w lr, r8, r5 | lr = r8 + r5;
0x00089330 movs r2, 0 | r2 = 0;
0x00089332 mov r1, lr | r1 = lr;
| do {
0x00089334 lsr.w fp, r3, 7 |
0x00089338 orn ip, r3, 0x7f | ip = r3 | 0x7f;
| ip = ~ip;
0x0008933c uxtb.w sb, r3 | sb = (int8_t) r3;
0x00089340 orr.w r3, fp, r2, lsl 25 | r3 = fp | (r2 << 25);
0x00089344 lsrs r2, r2, 7 | r2 >>= 7;
0x00089346 mov fp, r1 |
0x00089348 strb ip, [r1], 1 | *(r1) = ip;
| r1++;
0x0008934c orrs.w ip, r3, r2 |
0x00089350 bne 0x89334 |
| } while (ip != r3);
0x00089352 cmp sl, r0 |
0x00089354 sub.w r1, r1, lr | r1 -= lr;
0x00089358 add r5, r1 | r5 += r1;
0x0008935a strb.w sb, [fp] | *(fp) = sb;
| if (sl != r0) {
0x0008935e bne 0x89328 | goto label_0;
| }
| label_12:
0x00089360 mov r0, r4 | r0 = r4;
0x00089362 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00089364 movs r3, 0 | r3 = 0;
0x00089366 movs r1, 0x17 | r1 = 0x17;
0x00089368 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0008936c mov r4, r0 | r4 = r0;
0x0008936e cmp r0, 0 |
| if (r0 != 0) {
0x00089370 bne 0x89472 | goto label_13;
| }
0x00089372 ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x00089376 mov r2, r0 | r2 = r0;
0x00089378 movs r1, 1 | r1 = 1;
0x0008937a mov r0, sb | r0 = sb;
0x0008937c blx 0x8250 | fcn_00008250 ();
0x00089380 mov r2, r8 | r2 = r8;
0x00089382 mov r3, r5 | r3 = r5;
0x00089384 movs r1, 2 | r1 = 2;
0x00089386 mov r0, sb | r0 = sb;
0x00089388 str r4, [sp] | *(sp) = r4;
0x0008938a blx 0x8a94 | fcn_00008a94 ();
0x0008938e mov r0, sb | r0 = sb;
0x00089390 blx 0x8728 | fcn_00008728 ();
0x00089394 mov r0, sb | r0 = sb;
0x00089396 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0008939a mov r3, r0 | r3 = r0;
0x0008939c movs r1, 2 | r1 = 2;
0x0008939e str r3, [r6] | *(r6) = r3;
0x000893a0 mov r0, sb | r0 = sb;
0x000893a2 blx 0x8304 | fcn_00008304 ();
0x000893a6 ldr r2, [pc, 0xe8] |
0x000893a8 ldr r3, [pc, 0xdc] | r3 = *(0x89488);
0x000893aa add r2, pc | r2 = 0x112840;
0x000893ac ldr r3, [r2, r3] | r3 = imp.sinh;
0x000893ae ldr r2, [r3] | r2 = imp.sinh;
0x000893b0 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000893b2 eors r2, r3 | r2 ^= r3;
0x000893b4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000893b8 bne 0x89480 | goto label_6;
| }
0x000893ba mov r0, r7 | r0 = r7;
0x000893bc add sp, 0x44 |
0x000893be pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000893c2 b.w 0x8400 | void (*0x8400)() ();
| label_9:
0x000893c6 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000893c8 blx 0x8924 | fcn_00008924 ();
0x000893cc mov r1, r5 | r1 = r5;
0x000893ce str r0, [sp, 0x18] | x = r0;
0x000893d0 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000893d2 blx 0x82f4 | r0 = fcn_000082f4 ();
0x000893d6 mov ip, r0 |
| if (r0 == 0) {
0x000893d8 cbz r0, 0x8943a | goto label_5;
| }
0x000893da ldr r0, [sp, 0x18] | r0 = x;
0x000893dc add.w r3, r0, ip | r3 = r0 + ip;
0x000893e0 ldrsb r3, [r3, -0x1] | r3 = *((r3 - 0x1));
0x000893e4 cmp r3, 0 |
0x000893e6 it lt |
| if (r3 >= 0) {
0x000893e8 movlt ip, r5 |
| }
| if (r3 < 0) {
0x000893ea blt 0x8943a | goto label_5;
| }
0x000893ec cmp.w sl, 0 |
0x000893f0 it gt |
| if (sl > 0) {
0x000893f2 cmpgt ip, 0 | __asm ("cmpgt ip, 0");
| }
0x000893f6 ite gt |
| if (sl <= 0) {
0x000893f8 movgt r3, 1 | r3 = 1;
| }
| if (sl > 0) {
0x000893fa movle r3, 0 | r3 = 0;
| }
| if (sl <= 0) {
0x000893fc ble 0x8947c | goto label_14;
| }
0x000893fe subs r3, r7, 4 | r3 = r7 - 4;
0x00089400 str r7, [sp, 0x18] | x = r7;
0x00089402 str r6, [sp, 0x1c] | var_1ch = r6;
0x00089404 add r1, sp, 0x30 | r1 += var_30h;
0x00089406 str r4, [sp, 0x20] | var_20h = r4;
0x00089408 mov r7, ip | r7 = ip;
0x0008940a str.w r8, [sp, 0x24] | __asm ("str.w r8, [var_24h]");
0x0008940e mov r6, r0 | r6 = r0;
0x00089410 mov r4, r5 | r4 = r5;
0x00089412 mov r8, r3 | r8 = r3;
| do {
0x00089414 adds r0, r6, r5 | r0 = r6 + r5;
0x00089416 adds r4, 1 | r4++;
0x00089418 bl 0xb604 | r0 = fcn_0000b604 (r0, r1);
0x0008941c add r5, r0 | r5 += r0;
0x0008941e ldr r0, [sp, 0x30] | r0 = var_30h;
0x00089420 cmp sl, r4 |
0x00089422 it gt |
| if (sl > r4) {
0x00089424 cmpgt r7, r5 | __asm ("cmpgt r7, r5");
| }
0x00089426 str r0, [r8, 4]! | *((r8 += 4)) = r0;
0x0008942a bgt 0x89414 |
| } while (sl > r4);
0x0008942c mov r2, r4 | r2 = r4;
0x0008942e ldr r7, [sp, 0x18] | r7 = x;
0x00089430 ldrd r6, r4, [sp, 0x1c] | __asm ("ldrd r6, r4, [var_1ch]");
0x00089434 mov ip, r2 |
0x00089436 ldr.w r8, [sp, 0x24] | r8 = var_24h;
| label_5:
0x0008943a cmp sl, ip |
| if (sl <= ip) {
0x0008943c ble.w 0x892c2 | goto label_1;
| }
0x00089440 sub.w r2, sl, ip | r2 = sl - ip;
0x00089444 add.w r0, r7, ip, lsl 2 | r0 = r7 + (ip << 2);
0x00089448 lsls r2, r2, 2 | r2 <<= 2;
0x0008944a movs r1, 0 | r1 = 0;
0x0008944c blx 0x839c | fcn_0000839c ();
0x00089450 b 0x892c2 | goto label_1;
| label_10:
0x00089452 rsb.w r2, fp, 0 | r2 = fp - ;
0x00089456 cmp r2, r3 |
0x00089458 it hi |
| if (r2 > r3) {
0x0008945a movhi r3, r0 | r3 = r0;
| goto label_15;
| }
| if (r2 > r3) {
| label_15:
0x0008945c bhi.w 0x892dc | goto label_2;
| }
0x00089460 b 0x892da | goto label_3;
| label_8:
0x00089462 mov r0, r7 | r0 = r7;
0x00089464 blx 0x8404 | fcn_00008404 ();
0x00089468 str r5, [r6] | *(r6) = r5;
0x0008946a b 0x8924c | goto label_4;
| label_7:
0x0008946c movs r3, 7 | r3 = 7;
0x0008946e str r3, [r6] | *(r6) = r3;
0x00089470 b 0x8924c | goto label_4;
| label_13:
0x00089472 mov r0, r7 | r0 = r7;
0x00089474 blx 0x8404 | fcn_00008404 ();
0x00089478 str r4, [r6] | *(r6) = r4;
0x0008947a b 0x8924c | goto label_4;
| label_14:
0x0008947c mov ip, r3 |
0x0008947e b 0x8943a | goto label_5;
| label_6:
0x00089480 blx 0x883c | fcn_0000883c ();
0x00089484 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8958c */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define SWAP64(val) ((uint64_t) (((val & 0x00000000000000ffull) << 56) | \
| ((val & 0x000000000000ff00ull) << 40) | \
| ((val & 0x0000000000ff0000ull) << 24) | \
| ((val & 0x00000000ff000000ull) << 8) | \
| ((val & 0x000000ff00000000ull) >> 8) | \
| ((val & 0x0000ff0000000000ull) >> 24) | \
| ((val & 0x00ff000000000000ull) >> 40) | \
| ((val & 0xff00000000000000ull) >> 56)))
|
; (fcn) fcn.0008958c () | void fcn_0008958c (int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int32_t var_24h_2;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0008958c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00089590 sub sp, 0x34 |
0x00089592 ldr r3, [r0, 0x28] | r3 = *(arg_58hx28);
0x00089594 mov sb, r2 | sb = r2;
0x00089596 str r1, [sp, 0x18] | var_18h = r1;
0x00089598 ldrd r1, r2, [sp, 0x58] | __asm ("ldrd r1, r2, [arg_58h]");
0x0008959c strd r1, r2, [sp, 8] | __asm ("strd r1, r2, [var_8h]");
0x000895a0 cbz r3, 0x895a8 |
| while (r3 != 0) {
| label_0:
0x000895a2 add sp, 0x34 |
0x000895a4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000895a8 ldr r3, [r0, 0x14] | r3 = *(arg_58hx14);
0x000895aa mov r5, r0 | r5 = r0;
0x000895ac cmp r3, 0 |
| if (r3 == 0) {
0x000895ae beq.w 0x8978e | goto label_11;
| }
| label_3:
0x000895b2 mov r0, r3 | r0 = r3;
0x000895b4 movs r1, 1 | r1 = 1;
0x000895b6 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x000895ba blx 0x84e8 | fcn_000084e8 ();
0x000895be ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x000895c0 blx 0x8728 | r0 = fcn_00008728 ();
0x000895c4 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000895c6 beq 0x895ee | goto label_12;
| }
| label_9:
0x000895c8 ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x000895ca blx 0x81f8 | fcn_000081f8 ();
0x000895ce ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x000895d0 cmp r3, 0 |
0x000895d2 bne 0x895a2 |
| }
0x000895d4 str r0, [r5, 0x28] | *((r5 + 0x28)) = r0;
0x000895d6 cmp r0, 0 |
| if (r0 != 0) {
0x000895d8 bne 0x895a2 | goto label_0;
| }
0x000895da ldr r1, [pc, 0x264] |
0x000895dc mov r0, r5 | r0 = r5;
0x000895de ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x000895e2 add r1, pc | r1 = 0x112e28;
0x000895e4 add sp, 0x34 |
0x000895e6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000895ea b.w 0x50a50 | void (*0x50a50)() ();
| label_12:
0x000895ee movs r1, 0 | r1 = 0;
0x000895f0 ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x000895f2 blx 0x82f4 | fcn_000082f4 ();
0x000895f6 movs r1, 0 | r1 = 0;
0x000895f8 mov r7, r0 | r7 = r0;
0x000895fa ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x000895fc blx 0x8924 | fcn_00008924 ();
0x00089600 asrs r1, r7, 0x1f | r1 = r7 >> 0x1f;
0x00089602 mov r8, r0 | r8 = r0;
0x00089604 mov r0, r7 | r0 = r7;
0x00089606 blx 0x8240 | r0 = fcn_00008240 ();
0x0008960a mov r4, r0 | r4 = r0;
0x0008960c cmp r0, 0 |
| if (r0 == 0) {
0x0008960e beq.w 0x89834 | goto label_13;
| }
0x00089612 mov r1, r8 | r1 = r8;
0x00089614 mov r2, r7 | r2 = r7;
0x00089616 blx 0x8610 | fcn_00008610 ();
0x0008961a ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x0008961c blx 0x81f8 | fcn_000081f8 ();
0x00089620 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x00089622 cmp r3, 0 |
| if (r3 == 0) {
0x00089624 beq.w 0x8983a | goto label_14;
| }
| label_10:
0x00089628 cmp r7, 3 |
| if (r7 <= 3) {
0x0008962a ble.w 0x897be | goto label_15;
| }
0x0008962e cmp.w sb, 0 |
| if (sb == 0) {
0x00089632 beq.w 0x89818 | goto label_16;
| }
| label_7:
0x00089636 ldrh r1, [r4, 2] | r1 = *((r4 + 2));
0x00089638 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x0008963a rev16 r1, r1 | __asm ("rev16 r1, r1");
0x0008963c uxth r1, r1 | r1 = (int16_t) r1;
0x0008963e adds r3, r2, 1 | r3 = r2 + 1;
0x00089640 mla r0, r2, r1, r1 | __asm ("mla r0, r2, r1, r1");
0x00089644 lsls r0, r0, 3 | r0 <<= 3;
0x00089646 adds r0, 3 | r0 += 3;
0x00089648 cmp r0, r7 |
| if (r0 >= r7) {
0x0008964a bge.w 0x897fa | goto label_17;
| }
0x0008964e cmp r1, 0 |
| if (r1 == 0) {
0x00089650 beq.w 0x897ce | goto label_8;
| }
0x00089654 ldr r0, [pc, 0x1ec] |
0x00089656 mov.w fp, 0 |
0x0008965a str r1, [sp, 0x2c] | var_2ch = r1;
0x0008965c mov r1, sb | r1 = sb;
0x0008965e mov sb, r5 | sb = r5;
0x00089660 mov r5, r1 | r5 = r1;
0x00089662 add r0, pc | r0 = 0x112eaa;
0x00089664 str r0, [sp, 0x14] | var_14h = r0;
0x00089666 ldr r0, [pc, 0x1e0] |
0x00089668 add r0, pc | r0 = 0x112eb6;
0x0008966a str r0, [sp, 0x10] | var_10h = r0;
| label_1:
0x0008966c mul r3, fp, r3 | r3 = fp * r3;
0x00089670 cmp r2, 0 |
0x00089672 lsl.w r3, r3, 3 | r3 <<= 3;
0x00089676 add.w r3, r3, 4 | r3 += 4;
0x0008967a add.w r1, r4, r3 | r1 = r4 + r3;
0x0008967e ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00089680 str r1, [sp, 0x1c] | var_1ch = r1;
0x00089682 rev r3, r3 | r3 = SWAP32 (r3);
0x00089684 str r3, [sp, 0x20] | var_20h = r3;
0x00089686 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00089688 rev r6, r3 | r3 = SWAP32 (r6);
| if (r2 <= 0) {
0x0008968a ble 0x8971c | goto label_18;
| }
0x0008968c ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x0008968e mov.w sl, 0 | sl = 0;
0x00089692 add.w r8, r5, 4 | r8 = r5 + 4;
0x00089696 strd r4, r6, [sp, 0x24] | __asm ("strd r4, r6, [var_24h]");
0x0008969a mov r6, sl | r6 = sl;
0x0008969c mov r4, r8 | r4 = r8;
0x0008969e mov sl, r7 | sl = r7;
| do {
0x000896a0 ldr.w r3, [sb, 0xc] | r3 = *((sb + 0xc));
0x000896a4 ldr.w r7, [sl, 8] | r7 = *((sl + 8));
0x000896a8 ldr.w r1, [sl, 0xc] | r1 = *((sl + 0xc));
0x000896ac rev r7, r7 | r7 = SWAP32 (r7);
0x000896ae rev.w r8, r1 | r1 = SWAP32 (r8);
0x000896b2 cmp r3, 0 |
| if (r3 == 0) {
0x000896b4 beq 0x89766 | goto label_19;
| }
0x000896b6 cmp r7, r8 |
| if (r7 > r8) {
0x000896b8 bgt 0x89778 | goto label_20;
| }
| if (r5 != 0) {
| label_2:
0x000896ba cbz r5, 0x8970a |
0x000896bc ldr.w r1, [sb, 0xc] | r1 = *((sb + 0xc));
0x000896c0 ldr.w r3, [r5, r6, lsl 3] | offset_0 = r6 << 3;
| r3 = *((r5 + offset_0));
0x000896c4 ldr.w r2, [r4, r6, lsl 3] | offset_1 = r6 << 3;
| r2 = *((r4 + offset_1));
0x000896c8 rev r3, r3 | r3 = SWAP32 (r3);
0x000896ca rev.w ip, r2 | r2 = SWAPundefined (ip);
0x000896ce cmp r1, 0 |
| if (r1 != 0) {
0x000896d0 bne 0x897a8 | goto label_21;
| }
0x000896d2 vmov s15, r7 | __asm ("vmov s15, r7");
0x000896d6 vmov s14, r3 | __asm ("vmov s14, r3");
0x000896da vcmpe.f32 s15, s14 | __asm ("vcmpe.f32 s15, s14");
0x000896dc ldrb r7, [r0, 0xb] | r7 = *((r0 + 0xb));
0x000896de vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r1 >= 0) {
0x000896e2 bmi 0x896f6 |
0x000896e4 vmov s15, r8 | __asm ("vmov s15, r8");
0x000896e8 vmov s14, ip | __asm ("vmov s14, ip");
0x000896ec vcmpe.f32 s15, s14 | __asm ("vcmpe.f32 s15, s14");
0x000896f0 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r1 <= 0) {
0x000896f4 ble 0x8970a | goto label_5;
| }
| }
| label_4:
0x000896f6 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x000896fa mov r0, sb | r0 = sb;
0x000896fc ldr r1, [sp, 0x10] | r1 = var_10h;
0x000896fe strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x00089702 mov r3, fp | r3 = fp;
0x00089704 mov r2, r6 | r2 = r6;
0x00089706 bl 0x50a50 | fcn_00050a50 (r0);
| }
| label_5:
0x0008970a ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x0008970e adds r6, 1 | r6++;
0x00089710 add.w sl, sl, 8 | sl += 8;
0x00089714 cmp r6, r3 |
0x00089716 blt 0x896a0 |
| } while (r6 < r3);
0x00089718 ldrd r4, r6, [sp, 0x24] | __asm ("ldrd r4, r6, [var_24h]");
| label_18:
0x0008971c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008971e cmp r3, 0 |
| if (r3 == 0) {
0x00089720 beq 0x897da | goto label_22;
| }
0x00089722 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x00089726 movs r1, 0 | r1 = 0;
0x00089728 ldr r7, [sp, 0x20] | r7 = var_20h;
0x0008972a mov r0, sb | r0 = sb;
0x0008972c strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x00089730 mov r2, r6 | r2 = r6;
0x00089732 mov r3, r7 | r3 = r7;
0x00089734 bl 0x8672c | fcn_0008672c (r0, r1, r2, r3);
0x00089738 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008973a mov r0, sb | r0 = sb;
0x0008973c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008973e str r6, [sp] | *(sp) = r6;
0x00089740 subs r1, r3, 1 | r1 = r3 - 1;
0x00089742 str r7, [sp, 4] | var_4h = r7;
0x00089744 adds r2, 8 | r2 += 8;
0x00089746 bl 0x8958c | fcn_0008958c (r0, r1, r2, r3);
0x0008974a ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x0008974e adds r3, 1 | r3++;
0x00089750 str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
| label_6:
0x00089754 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00089756 add.w fp, fp, 1 |
0x0008975a cmp fp, r3 |
| if (fp == r3) {
0x0008975c beq 0x897ce | goto label_8;
| }
0x0008975e ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x00089762 adds r3, r2, 1 | r3 = r2 + 1;
0x00089764 b 0x8966c | goto label_1;
| label_19:
0x00089766 vmov s15, r7 | __asm ("vmov s15, r7");
0x0008976a vmov s14, r8 | __asm ("vmov s14, r8");
0x0008976e vcmpe.f32 s15, s14 | __asm ("vcmpe.f32 s15, s14");
0x00089772 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r3 <= r2) {
0x00089776 ble 0x896ba | goto label_2;
| }
| label_20:
0x00089778 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x0008977c mov r0, sb | r0 = sb;
0x0008977e ldr r1, [sp, 0x14] | r1 = var_14h;
0x00089780 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x00089784 mov r3, fp | r3 = fp;
0x00089786 mov r2, r6 | r2 = r6;
0x00089788 bl 0x50a50 | fcn_00050a50 (r0);
0x0008978c b 0x896ba | goto label_2;
| label_11:
0x0008978e ldr r1, [pc, 0xbc] |
0x00089790 ldrd r2, r3, [r0, 4] | __asm ("ldrd r2, r3, [r0, 4]");
0x00089794 add r1, pc | r1 = 0x112fe6;
0x00089796 bl 0x7bf58 | fcn_0007bf58 (r0);
0x0008979a ldr r2, [r5, 0x28] | r2 = *((r5 + 0x28));
0x0008979c mov r3, r0 | r3 = r0;
0x0008979e str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
0x000897a0 cmp r2, 0 |
| if (r2 == 0) {
0x000897a2 beq.w 0x895b2 | goto label_3;
| }
0x000897a6 b 0x895a2 | goto label_0;
| label_21:
0x000897a8 cmp r7, r3 |
0x000897aa ite ge |
| if (r7 < r3) {
0x000897ac movge r7, 0 | r7 = 0;
| }
| if (r7 >= r3) {
0x000897ae movlt r7, 1 | r7 = 1;
| }
0x000897b0 cmp r8, ip |
0x000897b2 it gt |
| if (r8 <= ip) {
0x000897b4 orrgt r7, r7, 1 | r7 |= 1;
| }
0x000897b8 cmp r7, 0 |
| if (r7 != 0) {
0x000897ba bne 0x896f6 | goto label_4;
| }
0x000897bc b 0x8970a | goto label_5;
| label_15:
0x000897be ldr r1, [pc, 0x90] |
0x000897c0 mov r0, r5 | r0 = r5;
0x000897c2 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x000897c6 str r7, [sp] | *(sp) = r7;
0x000897c8 add r1, pc | r1 = 0x11301e;
0x000897ca bl 0x50a50 | fcn_00050a50 (r0);
| label_8:
0x000897ce mov r0, r4 | r0 = r4;
0x000897d0 add sp, 0x34 |
0x000897d2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000897d6 b.w 0x8400 | void (*0x8400)() ();
| label_22:
0x000897da ldrd r0, r1, [sp, 8] | __asm ("ldrd r0, r1, [var_8h]");
0x000897de mov r2, r6 | r2 = r6;
0x000897e0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000897e2 strd r0, r1, [sp] | __asm ("strd r0, r1, [sp]");
0x000897e6 movs r1, 1 | r1 = 1;
0x000897e8 mov r0, sb | r0 = sb;
0x000897ea bl 0x8672c | fcn_0008672c (r0, r1, r2, r3);
0x000897ee ldr.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x000897f2 adds r3, 1 | r3++;
0x000897f4 str.w r3, [sb, 0x20] | __asm ("str.w r3, [sb, 0x20]");
0x000897f8 b 0x89754 | goto label_6;
| label_17:
0x000897fa str r1, [sp] | *(sp) = r1;
0x000897fc mov r0, r5 | r0 = r5;
0x000897fe ldr r1, [pc, 0x54] |
0x00089800 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x00089804 str r7, [sp, 4] | var_4h = r7;
0x00089806 add r1, pc | r1 = 0x113060;
0x00089808 bl 0x50a50 | fcn_00050a50 (r0);
0x0008980c mov r0, r4 | r0 = r4;
0x0008980e add sp, 0x34 |
0x00089810 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00089814 b.w 0x8400 | void (*0x8400)() ();
| label_16:
0x00089818 ldrh r3, [r4] | r3 = *(r4);
0x0008981a rev16 r3, r3 | __asm ("rev16 r3, r3");
0x0008981c uxth r3, r3 | r3 = (int16_t) r3;
0x0008981e cmp r3, 0x28 |
0x00089820 str r3, [sp, 0x18] | var_18h = r3;
| if (r3 <= 0x28) {
0x00089822 ble.w 0x89636 | goto label_7;
| }
0x00089826 ldr r1, [pc, 0x30] |
0x00089828 mov r2, r3 | r2 = r3;
0x0008982a mov r0, r5 | r0 = r5;
0x0008982c add r1, pc | r1 = 0x11308a;
0x0008982e bl 0x50a50 | fcn_00050a50 (r0);
0x00089832 b 0x897ce | goto label_8;
| label_13:
0x00089834 movs r3, 7 | r3 = 7;
0x00089836 str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
0x00089838 b 0x895c8 | goto label_9;
| label_14:
0x0008983a str r0, [r5, 0x28] | *((r5 + 0x28)) = r0;
0x0008983c b 0x89628 | goto label_10;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x89f38 */
| #include <stdint.h>
|
; (fcn) fcn.00089f38 () | void fcn_00089f38 (arithmetic arg1) {
| r0 = arg1;
0x00089f38 push {r3, r4, r5, lr} |
0x00089f3a ldr r5, [r0] | r5 = *(r0);
0x00089f3c ldrb.w r3, [r5, 0xb1] | r3 = *((r5 + 0xb1));
0x00089f40 cbz r3, 0x89f46 |
| while (r3 == 0) {
| label_0:
0x00089f42 movs r0, 0 | r0 = 0;
0x00089f44 pop {r3, r4, r5, pc} |
0x00089f46 mov r4, r0 | r4 = r0;
0x00089f48 adds r1, r0, 4 | r1 = r0 + 4;
0x00089f4a mov r0, r5 | r0 = r5;
0x00089f4c bl 0x89ecc | r0 = fcn_00089ecc (r0, r1);
| if (r0 != 0) {
0x00089f50 cbnz r0, 0x89f64 | goto label_1;
| }
0x00089f52 ldrb.w r3, [r5, 0x5f] | r3 = *((r5 + 0x5f));
0x00089f56 cmp r3, 0 |
0x00089f58 beq 0x89f42 |
| }
0x00089f5a ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00089f5c orr r3, r3, 0x10 | r3 |= 0x10;
0x00089f60 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x00089f62 b 0x89f42 | goto label_0;
| label_1:
0x00089f64 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00089f66 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x00089f68 adds r3, 1 | r3++;
0x00089f6a str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00089f6c pop {r3, r4, r5, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x89f70 */
| #include <stdint.h>
|
; (fcn) fcn.00089f70 () | void fcn_00089f70 (int16_t arg_50h, int16_t arg_54h, int16_t arg_210h, int16_t arg_348h, int16_t arg_3b0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00089f70 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00089f74 mov r8, r2 | r8 = r2;
0x00089f76 ldr.w r2, [pc, 0x534] | r2 = *(0x0008a4ac);
0x00089f7a mov sb, r3 | sb = r3;
0x00089f7c sub sp, 0x2c |
0x00089f7e mov r4, r0 | r4 = r0;
0x00089f80 ldr.w r3, [pc, 0x52c] |
0x00089f84 mov r5, r1 | r5 = r1;
0x00089f86 add r2, pc | r2 += pc;
0x00089f88 ldr r6, [r0] | r6 = *(r0);
0x00089f8a ldr.w fp, [sp, 0x50] | fp = *(arg_50h);
0x00089f8e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00089f90 ldr r3, [r3] | r3 = *(0x8a4b0);
0x00089f92 str r3, [sp, 0x24] | var_24h = r3;
0x00089f94 mov.w r3, 0 | r3 = 0;
0x00089f98 ldrd sl, r3, [sp, 0x54] | __asm ("ldrd sl, r3, [arg_54h]");
0x00089f9c str r3, [sp, 0x10] | var_10h = r3;
0x00089f9e ldrb.w r3, [r6, 0xb1] | r3 = *((r6 + 0xb1));
| if (r3 != 0) {
0x00089fa2 cbz r3, 0x89fae |
0x00089fa4 ldr.w r3, [r6, 0xac] | r3 = *((r6 + 0xac));
0x00089fa8 cmp r3, 1 |
| if (r3 == 1) {
0x00089faa beq.w 0x8a2be | goto label_18;
| }
| }
0x00089fae mov r1, r5 | r1 = r5;
0x00089fb0 add r3, sp, 0x20 | r3 += var_20h;
0x00089fb2 mov r2, r8 | r2 = r8;
0x00089fb4 mov r0, r4 | r0 = r4;
0x00089fb6 bl 0x241a8 | r0 = fcn_000241a8 (r0, r1, r2, r3);
0x00089fba subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 < r0) {
0x00089fbc blt.w 0x8a2e8 | goto label_7;
| }
0x00089fc0 cmp.w sb, 0 |
| if (sb != 0) {
0x00089fc4 beq 0x89fd8 |
0x00089fc6 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00089fca cmp r3, 0 |
0x00089fcc it ne |
| if (r3 != 0) {
0x00089fce cmpne r7, 1 | __asm ("cmpne r7, 1");
| }
0x00089fd0 it eq |
| if (r3 != 0) {
0x00089fd2 moveq r7, 1 | r7 = 1;
| }
| if (r3 != 0) {
0x00089fd4 bne.w 0x8a37c | goto label_19;
| }
| }
0x00089fd8 ldr r5, [sp, 0x20] | r5 = var_20h;
0x00089fda mov r0, r6 | r0 = r6;
0x00089fdc mov r1, r5 | r1 = r5;
0x00089fde bl 0x22a34 | fcn_00022a34 (r0, r1);
0x00089fe2 ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
0x00089fe6 mov r8, r0 | r8 = r0;
0x00089fe8 cmp r3, 3 |
0x00089fea it ne |
| if (r3 != 3) {
0x00089fec cmpne r3, 1 | __asm ("cmpne r3, 1");
| }
| if (r3 > 3) {
0x00089fee bhi.w 0x8a304 | goto label_20;
| }
| label_1:
0x00089ff2 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x00089ff6 add.w r3, r4, 0xbc | r3 = r4 + 0xbc;
0x00089ffa stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x00089ffe cmp.w r8, 0 |
| if (r8 == 0) {
0x0008a002 beq.w 0x8a2e8 | goto label_7;
| }
| label_0:
0x0008a006 cmp.w fp, 0 |
| if (fp != 0) {
0x0008a00a bne.w 0x8a282 | goto label_21;
| }
0x0008a00e ldr.w r2, [pc, 0x4a4] |
0x0008a012 mov r3, r8 | r3 = r8;
0x0008a014 mov r1, r8 | r1 = r8;
0x0008a016 mov r0, r4 | r0 = r4;
0x0008a018 add r2, pc | r2 = 0x1144d2;
0x0008a01a bl 0x3e5a4 | r0 = fcn_0003e5a4 (r0, r1, r2, r3);
0x0008a01e cmp r0, 0 |
| if (r0 != 0) {
0x0008a020 bne.w 0x8a296 | goto label_2;
| }
| do {
0x0008a024 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x0008a026 lsls r1, r7, 4 | r1 = r7 << 4;
0x0008a028 ldrb.w r3, [r6, 0xb0] | r3 = *((r6 + 0xb0));
0x0008a02c str r1, [sp, 0x18] | var_18h = r1;
0x0008a02e ldr r2, [r2, r1] | r2 = *((r2 + r1));
0x0008a030 cmp r3, 1 |
0x0008a032 str r2, [sp, 0x14] | var_14h = r2;
| if (r3 == 1) {
0x0008a034 beq.w 0x8a3a2 | goto label_22;
| }
0x0008a038 ldr.w r2, [pc, 0x47c] |
0x0008a03c cmp.w sb, 1 |
0x0008a040 add r2, pc | r2 = 0x1144fc;
| if (sb != 1) {
0x0008a042 beq 0x8a04a |
0x0008a044 ldr.w r2, [pc, 0x474] |
0x0008a048 add r2, pc | r2 = 0x114508;
| }
| label_5:
0x0008a04a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008a04c movs r1, 0x12 | r1 = 0x12;
0x0008a04e mov r0, r4 | r0 = r4;
0x0008a050 str r3, [sp] | *(sp) = r3;
0x0008a052 movs r3, 0 | r3 = 0;
0x0008a054 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x0008a058 cmp r0, 0 |
| if (r0 != 0) {
0x0008a05a bne.w 0x8a296 | goto label_2;
| }
0x0008a05e cmp.w sl, 0 |
| if (sl == 0) {
0x0008a062 beq.w 0x8a352 | goto label_23;
| }
| label_3:
0x0008a066 ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
0x0008a06a cmp r3, 0 |
| if (r3 == 0) {
0x0008a06c beq.w 0x8a310 | goto label_24;
| }
| label_8:
0x0008a070 mov r0, r6 | r0 = r6;
0x0008a072 movs r2, 0x40 | r2 = 0x40;
0x0008a074 movs r3, 0 | r3 = 0;
0x0008a076 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0008a07a mov r5, r0 | r5 = r0;
0x0008a07c cmp r0, 0 |
| if (r0 == 0) {
0x0008a07e beq.w 0x8a3aa | goto label_25;
| }
0x0008a082 movs r2, 0x3c | r2 = 0x3c;
0x0008a084 movs r1, 0 | r1 = 0;
0x0008a086 adds r0, 4 | r0 += 4;
0x0008a088 blx 0x839c | fcn_0000839c ();
0x0008a08c ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0008a08e ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008a090 str.w r8, [r5] | __asm ("str.w r8, [r5]");
0x0008a094 add r3, r2 | r3 += r2;
0x0008a096 movs r2, 0xc8 | r2 = 0xc8;
0x0008a098 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0008a09a strh r2, [r5, 0x26] | *((r5 + 0x26)) = r2;
0x0008a09c str r3, [r5, 0x3c] | *((r5 + 0x3c)) = r3;
0x0008a09e movw r3, 0xffff | r3 = 0xffff;
0x0008a0a2 strh r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
0x0008a0a4 movs r3, 1 | r3 = 1;
0x0008a0a6 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0008a0a8 str.w r5, [r4, 0xec] | __asm ("str.w r5, [r4, 0xec]");
0x0008a0ac ldrb.w r2, [r6, 0xb1] | r2 = *((r6 + 0xb1));
0x0008a0b0 cmp r2, 0 |
| if (r2 != 0) {
0x0008a0b2 bne.w 0x8a2e8 | goto label_7;
| }
0x0008a0b6 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x0008a0b8 str r2, [sp, 0x10] | var_10h = r2;
0x0008a0ba cmp r2, 0 |
| if (r2 == 0) {
0x0008a0bc beq.w 0x8a3b6 | goto label_26;
| }
| label_6:
0x0008a0c0 mov r2, r7 | r2 = r7;
0x0008a0c2 movs r1, 1 | r1 = 1;
0x0008a0c4 mov r0, r4 | r0 = r4;
0x0008a0c6 bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x0008a0ca cmp.w sl, 0 |
| if (sl != 0) {
0x0008a0ce bne.w 0x8a454 | goto label_27;
| }
| label_12:
0x0008a0d2 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0008a0d4 movs r2, 2 | r2 = 2;
0x0008a0d6 ldr.w r8, [sp, 0x10] | r8 = var_10h;
0x0008a0da movs r1, 0x63 | r1 = 0x63;
0x0008a0dc str r2, [sp] | *(sp) = r2;
0x0008a0de mov r2, r7 | r2 = r7;
0x0008a0e0 add.w sb, r3, 3 | sb = r3 + 3;
0x0008a0e4 adds r5, r3, 1 | r5 = r3 + 1;
0x0008a0e6 adds r3, 2 | r3 += 2;
0x0008a0e8 mov r0, r8 | r0 = r8;
0x0008a0ea str r3, [sp, 0x1c] | var_1ch = r3;
0x0008a0ec strd r5, r3, [r4, 0x58] | __asm ("strd r5, r3, [r4, 0x58]");
0x0008a0f0 mov r3, sb | r3 = sb;
0x0008a0f2 str.w sb, [r4, 0x2c] | __asm ("str.w sb, [r4, 0x2c]");
0x0008a0f6 str r5, [sp, 0x14] | var_14h = r5;
0x0008a0f8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008a0fc ldr.w r2, [r8, 0x98] | r2 = *((r8 + 0x98));
0x0008a100 movs r3, 1 | r3 = 1;
0x0008a102 lsls r3, r7 | r3 <<= r7;
0x0008a104 cmp r7, 1 |
0x0008a106 orr.w r2, r2, r3 | r2 |= r3;
0x0008a10a str.w r2, [r8, 0x98] | __asm ("str.w r2, [r8, 0x98]");
| if (r7 != 1) {
0x0008a10e beq 0x8a12a |
0x0008a110 ldr.w r2, [r8] | r2 = *(r8);
0x0008a114 ldr r1, [sp, 0x18] | r1 = var_18h;
0x0008a116 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x0008a118 add r2, r1 | r2 += r1;
0x0008a11a ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0008a11c ldrb r2, [r2, 9] | r2 = *((r2 + 9));
| if (r2 == 0) {
0x0008a11e cbz r2, 0x8a12a | goto label_28;
| }
0x0008a120 ldr.w r2, [r8, 0x9c] | r2 = *((r8 + 0x9c));
0x0008a124 orrs r2, r3 | r2 |= r3;
0x0008a126 str.w r2, [r8, 0x9c] | __asm ("str.w r2, [r8, 0x9c]");
| }
| label_28:
0x0008a12a ldr r3, [sp, 0x10] | r3 = var_10h;
0x0008a12c ldrd r8, r3, [r3, 0x6c] | __asm ("ldrd r8, r3, [r3, 0x6c]");
0x0008a130 cmp r8, r3 |
| if (r8 >= r3) {
0x0008a132 bge.w 0x8a45e | goto label_29;
| }
0x0008a136 ldr r5, [sp, 0x10] | r5 = var_10h;
0x0008a138 add.w r3, r8, r8, lsl 2 | r3 = r8 + (r8 << 2);
0x0008a13c add.w r2, r8, 1 | r2 = r8 + 1;
0x0008a140 lsls r3, r3, 2 | r3 <<= 2;
0x0008a142 movs r1, 0 | r1 = 0;
0x0008a144 ldr r0, [r5, 0x68] | r0 = *((r5 + 0x68));
0x0008a146 mov.w ip, 0xf |
0x0008a14a str r2, [r5, 0x6c] | *((r5 + 0x6c)) = r2;
0x0008a14c adds r2, r0, r3 | r2 = r0 + r3;
0x0008a14e strd sb, r1, [r2, 4] | __asm ("strd sb, r1, [r2, 4]");
0x0008a152 strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x0008a156 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_13:
0x0008a15a ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x0008a15c movs r1, 0x64 | r1 = 0x64;
0x0008a15e ldr r5, [sp, 0x10] | r5 = var_10h;
0x0008a160 lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
0x0008a162 mov r2, r7 | r2 = r7;
0x0008a164 ite mi |
| if (r2 >= r3) {
0x0008a166 movmi r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x0008a168 movpl r3, 4 | r3 = 4;
| }
0x0008a16a str r3, [sp] | *(sp) = r3;
0x0008a16c mov r0, r5 | r0 = r5;
0x0008a16e movs r3, 2 | r3 = 2;
0x0008a170 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008a174 ldrb.w r3, [r6, 0x54] | r3 = *((r6 + 0x54));
0x0008a178 mov r2, r7 | r2 = r7;
0x0008a17a movs r1, 0x64 | r1 = 0x64;
0x0008a17c mov r0, r5 | r0 = r5;
0x0008a17e str r3, [sp] | *(sp) = r3;
0x0008a180 movs r3, 5 | r3 = 5;
0x0008a182 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008a186 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0008a188 cmp.w r8, 0 |
0x0008a18c ldr r0, [r5, 0x6c] | r0 = *((r5 + 0x6c));
0x0008a18e ldr r3, [r2] | r3 = *(r2);
0x0008a190 it lt |
| if (r8 >= 0) {
0x0008a192 addlt r8, r0, -1 | r8 = r0 + -1;
| }
0x0008a196 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008a19a cmp r3, 0 |
| if (r3 != 0) {
0x0008a19c bne.w 0x8a41a | goto label_30;
| }
0x0008a1a0 ldr r3, [r2, 0x68] | r3 = *((r2 + 0x68));
0x0008a1a2 add.w r8, r8, r8, lsl 2 | r8 += (r8 << 2);
0x0008a1a6 add.w r3, r3, r8, lsl 2 | r3 += (r8 << 2);
| label_10:
0x0008a1aa orrs.w r1, fp, sl | r1 = fp | sl;
0x0008a1ae str r0, [r3, 8] | *((r3 + 8)) = r0;
| if (r1 == fp) {
0x0008a1b0 beq.w 0x8a3ea | goto label_31;
| }
0x0008a1b4 movs r2, 0 | r2 = 0;
0x0008a1b6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008a1b8 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0008a1ba movs r1, 0x47 | r1 = 0x47;
0x0008a1bc str r2, [sp] | *(sp) = r2;
0x0008a1be bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_9:
0x0008a1c2 ldr r6, [r4, 8] | r6 = *((r4 + 8));
0x0008a1c4 cmp r6, 0 |
| if (r6 == 0) {
0x0008a1c6 beq.w 0x8a422 | goto label_32;
| }
| label_11:
0x0008a1ca cmp r7, 1 |
| if (r7 != 1) {
0x0008a1cc beq 0x8a1ee |
0x0008a1ce ldr r3, [r4] | r3 = *(r4);
0x0008a1d0 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008a1d2 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0008a1d4 add r3, r2 | r3 += r2;
0x0008a1d6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0008a1d8 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x0008a1da cbz r3, 0x8a1ee | goto label_33;
| }
0x0008a1dc ldr r3, [pc, 0x2e0] |
0x0008a1de mov r1, r7 | r1 = r7;
0x0008a1e0 mov r0, r4 | r0 = r4;
0x0008a1e2 add r3, pc | r3 = 0x1146a6;
0x0008a1e4 str r3, [sp] | *(sp) = r3;
0x0008a1e6 movs r3, 1 | r3 = 1;
0x0008a1e8 mov r2, r3 | r2 = r3;
0x0008a1ea bl 0x2fbbc | fcn_0002fbbc (r0, r1, r2, r3, r4);
| }
| label_33:
0x0008a1ee movs r3, 5 | r3 = 5;
0x0008a1f0 mov r0, r6 | r0 = r6;
0x0008a1f2 str r3, [sp, 4] | var_4h = r3;
0x0008a1f4 movs r2, 0 | r2 = 0;
0x0008a1f6 movs r3, 1 | r3 = 1;
0x0008a1f8 movs r1, 0x71 | r1 = 0x71;
0x0008a1fa str r7, [sp] | *(sp) = r7;
0x0008a1fc bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0008a200 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
| if (r3 == 0) {
0x0008a202 cbnz r3, 0x8a208 |
0x0008a204 movs r3, 1 | r3 = 1;
0x0008a206 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| }
0x0008a208 ldr r6, [sp, 0x10] | r6 = var_10h;
0x0008a20a movs r4, 0 | r4 = 0;
0x0008a20c ldr r5, [sp, 0x14] | r5 = var_14h;
0x0008a20e mov r2, r4 | r2 = r4;
0x0008a210 movs r1, 0x7f | r1 = 0x7f;
0x0008a212 str r4, [sp] | *(sp) = r4;
0x0008a214 mov r0, r6 | r0 = r6;
0x0008a216 mov r3, r5 | r3 = r5;
0x0008a218 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008a21c mov.w r3, -1 | r3 = -1;
0x0008a220 movs r2, 6 | r2 = 6;
0x0008a222 str r3, [sp, 8] | var_8h = r3;
0x0008a224 movs r1, 0x4d | r1 = 0x4d;
0x0008a226 ldr r3, [pc, 0x29c] |
0x0008a228 mov r0, r6 | r0 = r6;
0x0008a22a str r4, [sp] | *(sp) = r4;
0x0008a22c add r3, pc |
0x0008a22e add.w r3, r3, 0xc50 | r3 = 0x115346;
0x0008a232 str r3, [sp, 4] | var_4h = r3;
0x0008a234 mov r3, sb | r3 = sb;
0x0008a236 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0008a23a mov r3, sb | r3 = sb;
0x0008a23c mov r2, r4 | r2 = r4;
0x0008a23e movs r1, 0x80 | r1 = 0x80;
0x0008a240 mov r0, r6 | r0 = r6;
0x0008a242 str r5, [sp] | *(sp) = r5;
0x0008a244 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008a248 ldr r3, [r6, 0x6c] | r3 = *((r6 + 0x6c));
0x0008a24a cmp r3, 0 |
| if (r3 > 0) {
0x0008a24c ble 0x8a25e |
0x0008a24e ldr r2, [r6, 0x68] | r2 = *((r6 + 0x68));
0x0008a250 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0008a254 movs r1, 8 | r1 = 8;
0x0008a256 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0008a25a strh r1, [r2, -0x12] | *((r2 - 0x12)) = r1;
| }
0x0008a25e ldr r2, [pc, 0x268] |
0x0008a260 ldr r3, [pc, 0x24c] | r3 = *(0x8a4b0);
0x0008a262 add r2, pc | r2 = 0x114730;
0x0008a264 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008a266 ldr r2, [r3] | r2 = imp.sinh;
0x0008a268 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008a26a eors r2, r3 | r2 ^= r3;
0x0008a26c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008a270 bne.w 0x8a4a8 | goto label_34;
| }
0x0008a274 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0008a276 movs r1, 0x7a | r1 = 0x7a;
0x0008a278 add sp, 0x2c |
0x0008a27a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008a27e b.w 0x2e448 | void (*0x2e448)() ();
| label_21:
0x0008a282 ldr r2, [pc, 0x248] |
0x0008a284 mov r3, r8 | r3 = r8;
0x0008a286 mov r1, r8 | r1 = r8;
0x0008a288 mov r0, r4 | r0 = r4;
0x0008a28a add r2, pc | r2 = 0x11475c;
0x0008a28c bl 0x3e5a4 | r0 = fcn_0003e5a4 (r0, r1, r2, r3);
0x0008a290 cmp r0, 0 |
0x0008a292 beq.w 0x8a024 |
| } while (r0 == 0);
| label_2:
0x0008a296 movs r3, 1 | r3 = 1;
0x0008a298 ldr r2, [pc, 0x234] |
0x0008a29a strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x0008a29c ldr r3, [pc, 0x210] | r3 = *(0x8a4b0);
0x0008a29e add r2, pc | r2 = 0x114772;
0x0008a2a0 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008a2a2 ldr r2, [r3] | r2 = imp.sinh;
0x0008a2a4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008a2a6 eors r2, r3 | r2 ^= r3;
0x0008a2a8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008a2ac bne.w 0x8a4a8 | goto label_34;
| }
0x0008a2b0 mov r1, r8 | r1 = r8;
0x0008a2b2 mov r0, r6 | r0 = r6;
0x0008a2b4 add sp, 0x2c |
0x0008a2b6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008a2ba b.w 0x16808 | void (*0x16808)() ();
| label_18:
0x0008a2be ldrb.w r7, [r6, 0xb0] | r7 = *((r6 + 0xb0));
0x0008a2c2 cmp r7, 1 |
| if (r7 == 1) {
0x0008a2c4 beq 0x8a376 | goto label_35;
| }
0x0008a2c6 ldr r1, [pc, 0x20c] |
0x0008a2c8 add r1, pc | r1 = 0x1147a2;
| label_4:
0x0008a2ca mov r0, r6 | r0 = r6;
0x0008a2cc bl 0x22990 | r0 = fcn_00022990 (r0, r1);
0x0008a2d0 mov r8, r0 | r8 = r0;
0x0008a2d2 ldm.w r5, {r0, r1} | r0 = *(r5);
| r1 = *((r5 + 4));
0x0008a2d6 add.w r3, r4, 0xbc | r3 = r4 + 0xbc;
0x0008a2da str r5, [sp, 0x20] | var_20h = r5;
0x0008a2dc stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x0008a2e0 cmp.w r8, 0 |
| if (r8 != 0) {
0x0008a2e4 bne.w 0x8a006 | goto label_0;
| }
| label_7:
0x0008a2e8 ldr r2, [pc, 0x1ec] |
0x0008a2ea ldr r3, [pc, 0x1c4] | r3 = *(0x8a4b2);
0x0008a2ec add r2, pc | r2 = 0x1147c8;
0x0008a2ee ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008a2f0 ldr r2, [r3] | r2 = imp.sinh;
0x0008a2f2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008a2f4 eors r2, r3 | r2 ^= r3;
0x0008a2f6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008a2fa bne.w 0x8a4a8 | goto label_34;
| }
0x0008a2fe add sp, 0x2c |
0x0008a300 invalid |
| label_20:
0x0008a304 mov r1, r0 | r1 = r0;
0x0008a306 mov r2, r5 | r2 = r5;
0x0008a308 mov r0, r4 | r0 = r4;
0x0008a30a bl 0x22ec4 | fcn_00022ec4 (r0, r1, r2);
0x0008a30e b 0x89ff2 | goto label_1;
| label_24:
0x0008a310 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0008a312 mov r0, r4 | r0 = r4;
0x0008a314 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0008a316 ldr.w sb, [r3, r2] | sb = *((r3 + r2));
0x0008a31a bl 0x89f38 | r0 = fcn_00089f38 (r0);
0x0008a31e cmp r0, 0 |
| if (r0 != 0) {
0x0008a320 bne 0x8a296 | goto label_2;
| }
0x0008a322 mov r2, sb | r2 = sb;
0x0008a324 mov r1, r8 | r1 = r8;
0x0008a326 mov r0, r6 | r0 = r6;
0x0008a328 bl 0x3e27c | r0 = fcn_0003e27c (r0, r1, r2, r3);
0x0008a32c cmp r0, 0 |
| if (r0 == 0) {
0x0008a32e beq 0x8a3cc | goto label_36;
| }
0x0008a330 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0008a332 cmp r3, 0 |
| if (r3 != 0) {
0x0008a334 bne 0x8a430 | goto label_37;
| }
0x0008a336 ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
0x0008a33a cmp r3, 2 |
| if (r3 == 2) {
0x0008a33c beq.w 0x8a47c | goto label_38;
| }
0x0008a340 ldr r2, [pc, 0x198] |
0x0008a342 add r2, pc | r2 = 0x114822;
| label_15:
0x0008a344 ldr r1, [pc, 0x198] |
0x0008a346 mov r3, r5 | r3 = r5;
0x0008a348 mov r0, r4 | r0 = r4;
0x0008a34a add r1, pc | r1 = 0x11482e;
0x0008a34c bl 0x21598 | fcn_00021598 (r0, r1);
0x0008a350 b 0x8a296 | goto label_2;
| label_23:
0x0008a352 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0008a354 mov r2, r8 | r2 = r8;
0x0008a356 mov r0, r4 | r0 = r4;
0x0008a358 str r3, [sp] | *(sp) = r3;
0x0008a35a ldr r3, [pc, 0x188] |
0x0008a35c add r3, pc | r3 = 0x114846;
0x0008a35e add.w r3, r3, fp, lsl 1 | r3 += (fp << 1);
0x0008a362 add r3, sb | r3 += sb;
0x0008a364 ldrb.w r1, [r3, 0xc4c] | r1 = *((r3 + 0xc4c));
0x0008a368 mov r3, sl | r3 = sl;
0x0008a36a bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x0008a36e cmp r0, 0 |
| if (r0 == 0) {
0x0008a370 beq.w 0x8a066 | goto label_3;
| }
0x0008a374 b 0x8a296 | goto label_2;
| label_35:
0x0008a376 ldr r1, [pc, 0x170] |
0x0008a378 add r1, pc | r1 = 0x114866;
0x0008a37a b 0x8a2ca | goto label_4;
| label_19:
0x0008a37c ldr r2, [pc, 0x16c] |
0x0008a37e ldr r3, [pc, 0x130] | r3 = *(0x8a4b2);
0x0008a380 add r2, pc | r2 = 0x114870;
0x0008a382 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008a384 ldr r2, [r3] | r2 = imp.sinh;
0x0008a386 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008a388 eors r2, r3 | r2 ^= r3;
0x0008a38a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008a38e bne.w 0x8a4a8 | goto label_34;
| }
0x0008a392 ldr r1, [pc, 0x15c] |
0x0008a394 mov r0, r4 | r0 = r4;
0x0008a396 add r1, pc | r1 = 0x11488c;
0x0008a398 add sp, 0x2c |
0x0008a39a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008a39e b.w 0x21598 | void (*0x21598)() ();
| label_22:
0x0008a3a2 ldr r2, [pc, 0x150] |
0x0008a3a4 mov sb, r3 | sb = r3;
0x0008a3a6 add r2, pc | r2 = 0x1148a0;
0x0008a3a8 b 0x8a04a | goto label_5;
| label_25:
0x0008a3aa ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0008a3ac movs r2, 7 | r2 = 7;
0x0008a3ae str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x0008a3b0 adds r3, 1 | r3++;
0x0008a3b2 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0008a3b4 b 0x8a296 | goto label_2;
| label_26:
0x0008a3b6 ldr r2, [r4, 0x74] | r2 = *((r4 + 0x74));
0x0008a3b8 cmp r2, 0 |
| if (r2 == 0) {
0x0008a3ba beq 0x8a470 | goto label_39;
| }
| label_14:
0x0008a3bc mov r0, r4 | r0 = r4;
0x0008a3be bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x0008a3c2 str r0, [sp, 0x10] | var_10h = r0;
0x0008a3c4 cmp r0, 0 |
| if (r0 != 0) {
0x0008a3c6 bne.w 0x8a0c0 | goto label_6;
| }
0x0008a3ca b 0x8a2e8 | goto label_7;
| label_36:
0x0008a3cc mov r2, sb | r2 = sb;
0x0008a3ce mov r1, r8 | r1 = r8;
0x0008a3d0 mov r0, r6 | r0 = r6;
0x0008a3d2 bl 0x1cadc | r0 = fcn_0001cadc (r0, r1, r2, r3);
0x0008a3d6 cmp r0, 0 |
| if (r0 == 0) {
0x0008a3d8 beq.w 0x8a070 | goto label_8;
| }
0x0008a3dc ldr r1, [pc, 0x118] |
0x0008a3de mov r2, r8 | r2 = r8;
0x0008a3e0 mov r0, r4 | r0 = r4;
0x0008a3e2 add r1, pc | r1 = 0x1148de;
0x0008a3e4 bl 0x21598 | fcn_00021598 (r0, r1);
0x0008a3e8 b 0x8a296 | goto label_2;
| label_31:
0x0008a3ea ldr r3, [sp, 0x10] | r3 = var_10h;
0x0008a3ec ldr r3, [r3, 0x70] | r3 = *((r3 + 0x70));
0x0008a3ee cmp r0, r3 |
| if (r0 >= r3) {
0x0008a3f0 bge 0x8a490 | goto label_40;
| }
0x0008a3f2 ldr r5, [sp, 0x10] | r5 = var_10h;
0x0008a3f4 add.w r3, r0, r0, lsl 2 | r3 = r0 + (r0 << 2);
0x0008a3f8 adds r2, r0, 1 | r2 = r0 + 1;
0x0008a3fa lsls r3, r3, 2 | r3 <<= 2;
0x0008a3fc mov.w ip, 1 |
0x0008a400 ldr r6, [r5, 0x68] | r6 = *((r5 + 0x68));
0x0008a402 str r2, [r5, 0x6c] | *((r5 + 0x6c)) = r2;
0x0008a404 ldr r5, [sp, 0x1c] | r5 = var_1ch;
0x0008a406 adds r2, r6, r3 | r2 = r6 + r3;
0x0008a408 str r1, [r2, 0x10] | *((r2 + 0x10)) = r1;
0x0008a40a strd r5, ip, [r2, 8] | __asm ("strd r5, ip, [r2, 8]");
0x0008a40e str r7, [r2, 4] | *((r2 + 4)) = r7;
0x0008a410 movs r2, 0x93 | r2 = 0x93;
0x0008a412 str r2, [r6, r3] | *((r6 + r3)) = r2;
| label_16:
0x0008a414 str.w r0, [r4, 0x84] | __asm ("str.w r0, [r4, 0x84]");
0x0008a418 b 0x8a1c2 | goto label_9;
| label_30:
0x0008a41a ldr r3, [pc, 0xe0] |
0x0008a41c add r3, pc | r3 = 0x11491e;
0x0008a41e adds r3, 4 | r3 += 4;
0x0008a420 b 0x8a1aa | goto label_10;
| label_32:
0x0008a422 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x0008a424 cbz r3, 0x8a482 |
| while (1) {
0x0008a426 mov r0, r4 | r0 = r4;
0x0008a428 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x0008a42c mov r6, r0 | r6 = r0;
0x0008a42e b 0x8a1ca | goto label_11;
| label_37:
0x0008a430 ldr r0, [r4, 0x74] | r0 = *((r4 + 0x74));
0x0008a432 movs r3, 1 | r3 = 1;
0x0008a434 lsls r3, r7 | r3 <<= r7;
0x0008a436 cmp r0, 0 |
0x0008a438 it eq |
| if (r0 != 0) {
0x0008a43a moveq r0, r4 | r0 = r4;
| }
0x0008a43c ldr r2, [r0, 0x54] | r2 = *((r0 + 0x54));
0x0008a43e tst r2, r3 |
| if ((r2 & r3) == 0) {
0x0008a440 bne 0x8a44c |
0x0008a442 cmp r7, 1 |
0x0008a444 orr.w r2, r2, r3 | r2 |= r3;
0x0008a448 str r2, [r0, 0x54] | *((r0 + 0x54)) = r2;
| if (r7 == 1) {
0x0008a44a beq 0x8a4a2 | goto label_41;
| }
| }
| label_17:
0x0008a44c mov r0, r4 | r0 = r4;
0x0008a44e bl 0x2f3d8 | fcn_0002f3d8 (r0, r1);
0x0008a452 b 0x8a296 | goto label_2;
| label_27:
0x0008a454 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0008a456 movs r1, 0xaa | r1 = 0xaa;
0x0008a458 bl 0x2e448 | fcn_0002e448 (r0, r1);
0x0008a45c b 0x8a0d2 | goto label_12;
| label_29:
0x0008a45e movs r3, 0 | r3 = 0;
0x0008a460 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0008a462 mov r2, sb | r2 = sb;
0x0008a464 movs r1, 0xf | r1 = 0xf;
0x0008a466 str r3, [sp] | *(sp) = r3;
0x0008a468 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008a46c mov r8, r0 | r8 = r0;
0x0008a46e b 0x8a15a | goto label_13;
| label_39:
0x0008a470 ldr r2, [r4] | r2 = *(r4);
0x0008a472 ldr r2, [r2, 0x50] | r2 = *((r2 + 0x50));
0x0008a474 lsls r1, r2, 0x1c | r1 = r2 << 0x1c;
0x0008a476 it pl |
| if (r1 < r2) {
0x0008a478 strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x0008a47a b 0x8a3bc | goto label_14;
| label_38:
0x0008a47c ldr r2, [pc, 0x80] |
0x0008a47e add r2, pc | r2 = 0x114982;
0x0008a480 b 0x8a344 | goto label_15;
0x0008a482 ldr r3, [r4] | r3 = *(r4);
0x0008a484 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0008a486 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0008a488 itt pl |
| if (r3 < r3) {
0x0008a48a movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0008a48c strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x0008a48e b 0x8a426 |
| }
| label_40:
0x0008a490 movs r2, 1 | r2 = 1;
0x0008a492 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008a494 str r2, [sp] | *(sp) = r2;
0x0008a496 movs r1, 0x93 | r1 = 0x93;
0x0008a498 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0008a49a mov r2, r7 | r2 = r7;
0x0008a49c bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0008a4a0 b 0x8a414 | goto label_16;
| label_41:
0x0008a4a2 bl 0x570d0 | fcn_000570d0 (r0);
0x0008a4a6 b 0x8a44c | goto label_17;
| label_34:
0x0008a4a8 blx 0x883c | fcn_0000883c ();
0x0008a4ac ldc p0, c0, [r2, -0xc] | __asm ("ldc p0, c0, [r2, -0xc]");
0x0008a4b0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0008a4b2 movs r0, r0 |
0x0008a4b4 ldr r5, [sp, 0x210] | r5 = *(arg_210h);
0x0008a4b6 movs r2, r0 | r2 = r0;
0x0008a4b8 adr r1, 0x180 | r1 = case.0x1af2e.5;
0x0008a4ba movs r2, r0 | r2 = r0;
0x0008a4bc adr r1, 0x1b0 | r1 = 0x1b0;
0x0008a4be movs r2, r0 | r2 = r0;
0x0008a4c0 ldr r7, [sp, 0x348] | r7 = *(arg_348h);
0x0008a4c2 movs r2, r0 | r2 = r0;
0x0008a4c4 ldrsh r0, [r3, r0] | r0 = *((r3 + r0));
0x0008a4c6 movs r3, r0 | r3 = r0;
0x0008a4c8 bics.w r0, r6, r3 | __asm ("bics.w r0, r6, r3");
0x0008a4cc ldm r2!, {r1, r3, r4, r6, r7} | r1 = *(r2!);
| r3 = *((r2! + 4));
| r4 = *((r2! + 8));
| r6 = *((r2! + 12));
| r7 = *((r2! + 16));
0x0008a4ce movs r2, r0 | r2 = r0;
0x0008a4d0 ldrd r0, r0, [sl, 0xc]! | __asm ("ldrd r0, r0, [sl, 0xc]!");
0x0008a4d4 ldr r6, [sp, 0x3b0] | r6 = *(arg_3b0h);
0x0008a4d6 movs r2, r0 | r2 = r0;
0x0008a4d8 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8a504 */
| #include <stdint.h>
|
; (fcn) fcn.0008a504 () | void fcn_0008a504 (int16_t arg_88h, int16_t arg_90h, int16_t arg_94h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008a504 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0008a508 mov fp, r2 |
0x0008a50a ldr r6, [pc, 0x220] |
0x0008a50c mov r2, r3 | r2 = r3;
0x0008a50e movs r3, 0 | r3 = 0;
0x0008a510 sub sp, 0x64 |
0x0008a512 ldr r5, [pc, 0x21c] | r5 = *(0x8a732);
0x0008a514 mov r4, r0 | r4 = r0;
0x0008a516 add r6, pc | r6 = 0x114c48;
0x0008a518 ldr.w r8, [r0] | r8 = *(r0);
0x0008a51c ldr r5, [r6, r5] |
0x0008a51e mov r6, r1 | r6 = r1;
0x0008a520 ldrsh.w r1, [r0, 0xcc] | r1 = *((r0 + 0xcc));
0x0008a524 ldr r5, [r5] | r5 = imp.sinh;
0x0008a526 str r5, [sp, 0x5c] | var_5ch = r5;
0x0008a528 mov.w r5, 0 | r5 = 0;
0x0008a52c ldrd r7, r5, [sp, 0x88] | __asm ("ldrd r7, r5, [arg_88h]");
0x0008a530 cmp r1, r3 |
0x0008a532 str r3, [sp, 0x1c] | var_1ch = r3;
| if (r1 > r3) {
0x0008a534 bgt.w 0x8a6dc | goto label_6;
| }
0x0008a538 str r3, [sp, 4] | var_4h = r3;
0x0008a53a mov r1, fp | r1 = fp;
0x0008a53c ldr r3, [sp, 0x94] | r3 = *(arg_94h);
0x0008a53e str r2, [sp, 0x14] | var_14h = r2;
0x0008a540 str r3, [sp, 8] | var_8h = r3;
0x0008a542 movs r3, 1 | r3 = 1;
0x0008a544 str r3, [sp] | *(sp) = r3;
0x0008a546 ldr r3, [sp, 0x90] | r3 = *(arg_90h);
0x0008a548 bl 0x89f70 | fcn_00089f70 (r0, r1, r2, r3, r4, r5, r6);
0x0008a54c ldr.w sb, [r4, 0xec] | sb = *((r4 + 0xec));
0x0008a550 cmp.w sb, 0 |
| if (sb == 0) {
0x0008a554 beq.w 0x8a69c | goto label_7;
| }
0x0008a558 ldr.w sl, [r4, 0x24] | sl = *((r4 + 0x24));
0x0008a55c cmp.w sl, 0 |
| if (sl != 0) {
0x0008a560 bne.w 0x8a69c | goto label_7;
| }
0x0008a564 ldr.w r3, [sb, 0x1c] | r3 = *((sb + 0x1c));
0x0008a568 mov r1, fp | r1 = fp;
0x0008a56a ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008a56c mov r0, r4 | r0 = r4;
0x0008a56e orr r3, r3, 0x200 | r3 |= 0x200;
0x0008a572 str.w r3, [sb, 0x1c] | __asm ("str.w r3, [sb, 0x1c]");
0x0008a576 add r3, sp, 0x1c | r3 += var_1ch;
0x0008a578 bl 0x241a8 | fcn_000241a8 (r0, r1, r2, r3);
0x0008a57c ldr.w r1, [sb, 0x3c] | r1 = *((sb + 0x3c));
0x0008a580 cmp r1, 0 |
| if (r1 == 0) {
0x0008a582 beq.w 0x8a71e | goto label_8;
| }
0x0008a586 ldr.w r0, [r8, 0x10] | r0 = *((r8 + 0x10));
0x0008a58a ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0008a58c cmp r1, r3 |
| if (r1 == r3) {
0x0008a58e beq.w 0x8a718 | goto label_9;
| }
0x0008a592 subs r0, 4 | r0 -= 4;
0x0008a594 movs r3, 0x10 | r3 = 0x10;
0x0008a596 mov ip, r4 |
| do {
0x0008a598 mov r2, r3 | r2 = r3;
0x0008a59a adds r3, 0x10 | r3 += 0x10;
0x0008a59c ldr r4, [r0, r3] | r4 = *((r0 + r3));
0x0008a59e add.w sl, sl, 1 | sl++;
0x0008a5a2 cmp r1, r4 |
0x0008a5a4 bne 0x8a598 |
| } while (r1 != r4);
0x0008a5a6 sub.w r3, sl, 1 | r3 = sl - 1;
0x0008a5aa mov r4, ip | r4 = ip;
0x0008a5ac clz r3, r3 | r3 &= r3;
0x0008a5b0 lsrs r3, r3, 5 | r3 >>= 5;
| label_4:
0x0008a5b2 ldr r1, [r4] | r1 = *(r4);
0x0008a5b4 ldr.w lr, [pc, 0x17c] |
0x0008a5b8 ldr r0, [pc, 0x17c] |
0x0008a5ba ldr.w fp, [r1, 0x10] | fp = *((r1 + 0x10));
0x0008a5be ldr r1, [pc, 0x17c] |
0x0008a5c0 add lr, pc | lr += pc;
0x0008a5c2 ldr.w ip, [pc, 0x17c] | ip = *(0x0008a740);
0x0008a5c6 add r0, pc | r0 = 0x114d02;
0x0008a5c8 add.w sl, fp, r2 | sl = fp + r2;
0x0008a5cc ldr.w r2, [fp, r2] | r2 = *((fp + r2));
0x0008a5d0 str.w lr, [sp, 0x30] | __asm ("str.w lr, [var_30h]");
0x0008a5d4 add r1, pc | r1 = 0x114d16;
0x0008a5d6 ldr.w lr, [sl, 0xc] |
0x0008a5da add ip, pc |
0x0008a5dc str r2, [sp, 0x50] | var_50h = r2;
0x0008a5de ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0008a5e0 vdup.32 d16, r4 | __asm ("vdup.32 d16, r4");
0x0008a5e4 strb.w r3, [sp, 0x4c] | var_4ch = r3;
0x0008a5e8 movs r3, 0 | r3 = 0;
0x0008a5ea str r0, [sp, 0x34] | var_34h = r0;
0x0008a5ec add r0, sp, 0x2c | r0 += var_2ch;
0x0008a5ee str r1, [sp, 0x38] | var_38h = r1;
0x0008a5f0 mov r1, r5 | r1 = r5;
0x0008a5f2 str r3, [sp, 0x3c] | var_3ch = r3;
0x0008a5f4 strh.w r3, [sp, 0x40] | var_40h = r3;
0x0008a5f8 add r3, sp, 0x28 | r3 += var_28h;
0x0008a5fa str.w ip, [sp, 0x54] | __asm ("str.w ip, [var_54h]");
0x0008a5fc stm r0!, {r2, r4, r6} | *(r0!) = r2;
| *((r0! + 4)) = r4;
| *((r0! + 8)) = r6;
0x0008a5fe str r2, [sp, 0x58] | var_58h = r2;
0x0008a600 str.w lr, [sp, 0x48] | __asm ("str.w lr, [var_48h]");
0x0008a604 vstr d16, [sp, 0x28] | __asm ("vstr d16, [sp, 0x28]");
0x0008a608 str r3, [sp, 0x44] | var_44h = r3;
0x0008a60a bl 0x31b70 | r0 = fcn_00031b70 (r0, r1, r2, r3, r4, r5);
0x0008a60e cmp r0, 0 |
| if (r0 != 0) {
0x0008a610 bne 0x8a69c | goto label_7;
| }
0x0008a612 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0008a614 orr r3, r3, 0x200000 | r3 |= 0x200000;
0x0008a618 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x0008a61a ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
0x0008a61e cmp r3, 1 |
| if (r3 < 1) {
0x0008a620 bls 0x8a6ec | goto label_10;
| }
0x0008a622 str.w r5, [sb, 0x2c] | __asm ("str.w r5, [sb, 0x2c]");
0x0008a626 movs r2, 1 | r2 = 1;
0x0008a628 mov r1, r7 | r1 = r7;
0x0008a62a mov r0, r8 | r0 = r8;
0x0008a62c bl 0x321b0 | fcn_000321b0 (r0, r1, r2, r3, r4);
0x0008a630 movs r3, 2 | r3 = 2;
0x0008a632 str.w r0, [sb, 0x10] | __asm ("str.w r0, [sb, 0x10]");
| label_5:
0x0008a634 movs r0, r2 | r0 = r2;
0x0008a636 strb.w r3, [sb, 0x2b] | *((sb + 0x2b)) = r3;
0x0008a63a ldrb.w r5, [r8, 0x57] | r5 = *((r8 + 0x57));
| if (r5 != 0) {
0x0008a63e cbnz r5, 0x8a6a8 | goto label_11;
| }
| label_2:
0x0008a640 add.w r3, r4, 0xc4 | r3 = r4 + 0xc4;
0x0008a644 add r2, sp, 0x20 | r2 += var_20h;
0x0008a646 ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x0008a64a stm.w r2, {r0, r1} | *(r2) = r0;
| *((r2 + 4)) = r1;
0x0008a64e mov r3, r0 | r3 = r0;
0x0008a650 ldrb r1, [r0] | r1 = *(r0);
0x0008a652 cmp r1, 0x3b |
0x0008a654 itt ne |
| if (r1 == 0x3b) {
0x0008a656 ldrne r1, [sp, 0x24] | r1 = var_24h;
| }
| if (r1 == 0x3b) {
0x0008a658 addne r3, r3, r1 | r3 += r1;
| }
0x0008a65a ldr r1, [r6] | r1 = *(r6);
0x0008a65c ldr r6, [pc, 0xe4] |
0x0008a65e subs r3, r3, r1 | r3 -= r1;
0x0008a660 subs r0, r3, 1 | r0 = r3 - 1;
0x0008a662 add r6, pc | r6 = 0x114daa;
0x0008a664 ldrb.w ip, [r1, r0] | ip = *((r1 + r0));
0x0008a668 add r0, r1 | r0 += r1;
0x0008a66a add ip, r6 |
0x0008a66c ldrb.w ip, [ip, 0x40] | ip = *((ip + 0x40));
0x0008a670 tst.w ip, 1 |
| if ((ip & 1) == 0) {
0x0008a674 beq 0x8a68a | goto label_12;
| }
0x0008a676 subs r3, 2 | r3 -= 2;
0x0008a678 add r1, r3 | r1 += r3;
| do {
0x0008a67a mov r0, r1 | r0 = r1;
0x0008a67c subs r1, 1 | r1--;
0x0008a67e ldrb r3, [r0] | r3 = *(r0);
0x0008a680 add r3, r6 | r3 += r6;
0x0008a682 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x0008a686 lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x0008a688 bmi 0x8a67a |
| } while (r3 < r3);
| label_12:
0x0008a68a movs r3, 0 | r3 = 0;
0x0008a68c movs r1, 1 | r1 = 1;
0x0008a68e str r0, [sp, 0x20] | var_20h = r0;
0x0008a690 mov r0, r4 | r0 = r4;
0x0008a692 str r1, [sp, 0x24] | var_24h = r1;
0x0008a694 mov r1, r3 | r1 = r3;
0x0008a696 str r3, [sp] | *(sp) = r3;
0x0008a698 bl 0x77944 | fcn_00077944 (r0, r1, r2, r3, r4);
| if (r5 != 0) {
| do {
| label_7:
0x0008a69c cbz r5, 0x8a6a8 |
| label_3:
0x0008a69e movs r2, 1 | r2 = 1;
0x0008a6a0 mov r1, r5 | r1 = r5;
0x0008a6a2 mov r0, r8 | r0 = r8;
0x0008a6a4 bl 0x1a4b8 | fcn_0001a4b8 (r0, r1, r2);
| }
| label_11:
0x0008a6a8 ldrb.w r3, [r4, 0xd0] | r3 = *((r4 + 0xd0));
0x0008a6ac cmp r3, 1 |
| if (r3 < 1) {
0x0008a6ae bls 0x8a6e6 | goto label_13;
| }
| if (r7 != 0) {
0x0008a6b0 cbz r7, 0x8a6c2 |
0x0008a6b2 mov r1, r7 | r1 = r7;
0x0008a6b4 mov r0, r4 | r0 = r4;
0x0008a6b6 bl 0x31aa4 | fcn_00031aa4 (r0, r1);
| label_1:
0x0008a6ba mov r1, r7 | r1 = r7;
0x0008a6bc mov r0, r8 | r0 = r8;
0x0008a6be bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
| label_0:
0x0008a6c2 ldr r2, [pc, 0x84] |
0x0008a6c4 ldr r3, [pc, 0x68] | r3 = *(0x8a730);
0x0008a6c6 add r2, pc | r2 = 0x114e14;
0x0008a6c8 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008a6ca ldr r2, [r3] | r2 = imp.sinh;
0x0008a6cc ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0008a6ce eors r2, r3 | r2 ^= r3;
0x0008a6d0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008a6d4 bne 0x8a728 | goto label_14;
| }
0x0008a6d6 add sp, 0x64 |
0x0008a6d8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x0008a6dc ldr r1, [pc, 0x6c] |
0x0008a6de add r1, pc | r1 = 0x114e2e;
0x0008a6e0 bl 0x21598 | fcn_00021598 (r0, r1);
0x0008a6e4 b 0x8a69c |
| } while (1);
| label_13:
0x0008a6e6 cmp r7, 0 |
| if (r7 == 0) {
0x0008a6e8 beq 0x8a6c2 | goto label_0;
| }
0x0008a6ea b 0x8a6ba | goto label_1;
| label_10:
0x0008a6ec movs r2, 1 | r2 = 1;
0x0008a6ee mov r1, r5 | r1 = r5;
0x0008a6f0 mov r0, r8 | r0 = r8;
0x0008a6f2 bl 0x31d00 | fcn_00031d00 (r0, r1, r2);
0x0008a6f6 movs r2, 1 | r2 = 1;
0x0008a6f8 str.w r0, [sb, 0x2c] | __asm ("str.w r0, [sb, 0x2c]");
0x0008a6fc mov r1, r7 | r1 = r7;
0x0008a6fe mov r0, r8 | r0 = r8;
0x0008a700 bl 0x321b0 | fcn_000321b0 (r0, r1, r2, r3, r4);
0x0008a704 movs r3, 2 | r3 = 2;
0x0008a706 str.w r0, [sb, 0x10] | __asm ("str.w r0, [sb, 0x10]");
0x0008a70a strb.w r3, [sb, 0x2b] | *((sb + 0x2b)) = r3;
0x0008a70e ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x0008a712 cmp r3, 0 |
| if (r3 == 0) {
0x0008a714 beq 0x8a640 | goto label_2;
| }
0x0008a716 b 0x8a69e | goto label_3;
| label_9:
0x0008a718 mov r3, sl | r3 = sl;
0x0008a71a mov r2, sl | r2 = sl;
0x0008a71c b 0x8a5b2 | goto label_4;
| label_8:
0x0008a71e movs r2, 0 | r2 = 0;
0x0008a720 mov r3, r1 | r3 = r1;
0x0008a722 movt r2, 0xfff8 | r2 = (r2 & 0xFFFF) | 0xfff80000;
0x0008a726 b 0x8a5b2 | goto label_4;
| label_14:
0x0008a728 blx 0x883c | fcn_0000883c ();
0x0008a72c b 0x8a634 | goto label_5;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8a9ec */
| #include <stdint.h>
|
; (fcn) fcn.0008a9ec () | void fcn_0008a9ec (arithmetic arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0008a9ec push {r3, r4, r5, r6, r7, lr} |
0x0008a9ee add.w r7, r1, 8 | r7 = r1 + 8;
0x0008a9f2 mov r5, r1 | r5 = r1;
0x0008a9f4 mov r2, r7 | r2 = r7;
0x0008a9f6 movs r1, 0 | r1 = 0;
0x0008a9f8 mov r6, r0 | r6 = r0;
0x0008a9fa bl 0x8a9bc | fcn_0008a9bc (r0, r1, r2);
0x0008a9fe ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x0008aa00 mov r4, r0 | r4 = r0;
0x0008aa02 ldr r3, [r6] | r3 = *(r6);
| if (r1 == 0) {
0x0008aa04 cbz r1, 0x8aa14 | goto label_1;
| }
| if (r3 == 0) {
0x0008aa06 cbz r3, 0x8aa2a | goto label_2;
| }
0x0008aa08 ldr.w r2, [r3, 0x210] | r2 = *((r3 + 0x210));
0x0008aa0c cbz r2, 0x8aa2a |
| while (r2 == 0) {
0x0008aa0e mov r0, r3 | r0 = r3;
0x0008aa10 bl 0x1aa28 | fcn_0001aa28 (r0, r1);
| label_1:
0x0008aa14 str r4, [r5, 0x18] | *((r5 + 0x18)) = r4;
| if (r4 == 0) {
0x0008aa16 cbz r4, 0x8aa3a | goto label_3;
| }
| label_0:
0x0008aa18 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0008aa1a ldrb.w r2, [r5, 0x2d] | r2 = *((r5 + 0x2d));
0x0008aa1e adds r3, 1 | r3++;
0x0008aa20 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0008aa22 lsls r3, r2, 0x1e | r3 = r2 << 0x1e;
| if (r3 < r2) {
0x0008aa24 bmi 0x8aa40 | goto label_4;
| }
0x0008aa26 mov r0, r4 | r0 = r4;
0x0008aa28 pop {r3, r4, r5, r6, r7, pc} |
| label_2:
0x0008aa2a ldr r2, [r1, 0x18] | r2 = *((r1 + 0x18));
0x0008aa2c subs r2, 1 | r2--;
0x0008aa2e str r2, [r1, 0x18] | *((r1 + 0x18)) = r2;
0x0008aa30 cmp r2, 0 |
0x0008aa32 beq 0x8aa0e |
| }
0x0008aa34 str r4, [r5, 0x18] | *((r5 + 0x18)) = r4;
0x0008aa36 cmp r4, 0 |
| if (r4 != 0) {
0x0008aa38 bne 0x8aa18 | goto label_0;
| }
| do {
| label_3:
0x0008aa3a movs r4, 0 | r4 = 0;
0x0008aa3c mov r0, r4 | r0 = r4;
0x0008aa3e pop {r3, r4, r5, r6, r7, pc} |
| label_4:
0x0008aa40 mov r1, r7 | r1 = r7;
0x0008aa42 mov r0, r6 | r0 = r6;
0x0008aa44 bl 0x24214 | r0 = fcn_00024214 (r0, r1);
0x0008aa48 cmp r0, 0 |
0x0008aa4a bne 0x8aa3a |
| } while (r0 != 0);
0x0008aa4c mov r0, r4 | r0 = r4;
0x0008aa4e pop {r3, r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8af1c */
| #include <stdint.h>
|
; (fcn) fcn.0008af1c () | void fcn_0008af1c (int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x0008af1c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008af20 mov r4, r1 | r4 = r1;
0x0008af22 ldr r5, [r0] | r5 = *(r0);
0x0008af24 sub sp, 0xc |
0x0008af26 ldrb.w r1, [r5, 0x57] | r1 = *((r5 + 0x57));
0x0008af2a cbz r1, 0x8af3a |
| while (r0 == 0) {
| label_0:
0x0008af2c mov r1, r4 | r1 = r4;
0x0008af2e mov r0, r5 | r0 = r5;
0x0008af30 add sp, 0xc |
0x0008af32 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008af36 b.w 0x1a3c8 | void (*0x1a3c8)() ();
0x0008af3a add.w r2, r4, 8 | r2 = r4 + 8;
0x0008af3e mov sl, r0 | sl = r0;
0x0008af40 bl 0x8a9bc | r0 = fcn_0008a9bc (r0, r1, r2);
0x0008af44 mov r6, r0 | r6 = r0;
0x0008af46 cmp r0, 0 |
0x0008af48 beq 0x8af2c |
| }
0x0008af4a ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
0x0008af4e cmp r3, 1 |
| if (r3 == 1) {
0x0008af50 beq.w 0x8b0b4 | goto label_4;
| }
0x0008af54 cmp r3, 2 |
| if (r3 == 2) {
0x0008af56 beq.w 0x8b0a4 | goto label_5;
| }
0x0008af5a mov r1, r0 | r1 = r0;
0x0008af5c mov r0, sl | r0 = sl;
0x0008af5e bl 0x2476c | r0 = fcn_0002476c (r0, r1);
0x0008af62 mov sb, r0 | sb = r0;
0x0008af64 cmp r0, 0 |
| if (r0 != 0) {
0x0008af66 bne 0x8af2c | goto label_0;
| }
0x0008af68 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x0008af6c movs r2, 1 | r2 = 1;
0x0008af6e cmp r3, 0 |
0x0008af70 it eq |
| if (r3 != 0) {
0x0008af72 moveq r3, sl | r3 = sl;
| }
0x0008af74 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
0x0008af76 ldr r1, [r6, 0x3c] | r1 = *((r6 + 0x3c));
0x0008af78 cmp r1, 0 |
| if (r1 == 0) {
0x0008af7a beq.w 0x8b0c0 | goto label_6;
| }
0x0008af7e ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0008af80 mov r7, r0 | r7 = r0;
0x0008af82 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0008af84 cmp r1, r2 |
| if (r1 == r2) {
0x0008af86 beq 0x8af92 | goto label_3;
| }
| do {
0x0008af88 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0008af8a adds r3, 0x10 | r3 += 0x10;
0x0008af8c adds r7, 1 | r7++;
0x0008af8e cmp r1, r2 |
0x0008af90 bne 0x8af88 |
| } while (r1 != r2);
| label_3:
0x0008af92 mov r0, r5 | r0 = r5;
0x0008af94 movs r2, 0x40 | r2 = 0x40;
0x0008af96 movs r3, 0 | r3 = 0;
0x0008af98 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0008af9c mov r8, r0 | r8 = r0;
0x0008af9e cmp r0, 0 |
| if (r0 == 0) {
0x0008afa0 beq 0x8af2c | goto label_0;
| }
0x0008afa2 movs r2, 0x40 | r2 = 0x40;
0x0008afa4 movs r1, 0 | r1 = 0;
0x0008afa6 blx 0x839c | fcn_0000839c ();
0x0008afaa ldrsh.w r2, [r6, 0x22] | r2 = *((r6 + 0x22));
0x0008afae mov r0, r5 | r0 = r5;
0x0008afb0 str.w r8, [sl, 0xec] | __asm ("str.w r8, [sl, 0xec]");
0x0008afb4 adds r3, r2, 6 | r3 = r2 + 6;
0x0008afb6 strh.w r2, [r8, 0x22] | *((r8 + 0x22)) = r2;
0x0008afba subs r2, 1 | r2--;
0x0008afbc it pl |
| if (r2 < 1) {
0x0008afbe movpl r3, r2 | r3 = r2;
| }
0x0008afc0 movs r2, 1 | r2 = 1;
0x0008afc2 asrs r3, r3, 3 | r3 >>= 3;
0x0008afc4 str.w r2, [r8, 0x18] | __asm ("str.w r2, [r8, 0x18]");
0x0008afc8 adds r3, 1 | r3++;
0x0008afca lsl.w sl, r3, 4 | sl = r3 << 4;
0x0008afce add.w sl, sl, r3, lsl 3 | sl += (r3 << 3);
0x0008afd2 movs r3, 0 | r3 = 0;
0x0008afd4 lsl.w sl, sl, 2 | sl <<= 2;
0x0008afd8 mov r2, sl | r2 = sl;
0x0008afda bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0008afde mov fp, r0 |
| if (r0 != 0) {
0x0008afe0 cbz r0, 0x8afea |
0x0008afe2 mov r2, sl | r2 = sl;
0x0008afe4 movs r1, 0 | r1 = 0;
0x0008afe6 blx 0x839c | fcn_0000839c ();
| }
0x0008afea ldr r1, [pc, 0xe0] |
0x0008afec mov r0, r5 | r0 = r5;
0x0008afee str.w fp, [r8, 4] | __asm ("str.w fp, [r8, 4]");
0x0008aff2 ldr r2, [r6] | r2 = *(r6);
0x0008aff4 add r1, pc | r1 = 0x1160c6;
0x0008aff6 bl 0x24ec8 | r0 = fcn_00024ec8 (r0);
0x0008affa mov r3, r0 | r3 = r0;
0x0008affc str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x0008b000 ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x0008b004 cmp r3, 0 |
0x0008b006 it ne |
| if (r3 != 0) {
0x0008b008 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x0008b00a ite eq |
| if (r3 != 0) {
0x0008b00c moveq fp, 1 |
| }
| if (r3 == 0) {
0x0008b010 mov.w fp, 0 | goto label_7;
| }
| if (r3 == 0) {
| label_7:
0x0008b014 beq 0x8af2c | goto label_0;
| }
0x0008b016 ldrsh.w r2, [r8, 0x22] | r2 = *((r8 + 0x22));
0x0008b01a ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x0008b01c add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0008b020 lsls r2, r2, 2 | r2 <<= 2;
0x0008b022 blx 0x8610 | fcn_00008610 ();
0x0008b026 ldrsh.w r3, [r8, 0x22] | r3 = *((r8 + 0x22));
0x0008b02a cmp r3, 0 |
| if (r3 <= 0) {
0x0008b02c ble 0x8b07c | goto label_8;
| }
0x0008b02e ldr.w sl, [pc, 0xa0] | sl = *(0x0008b0d0);
0x0008b032 add sl, pc | sl += pc;
| label_1:
0x0008b034 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x0008b038 mov r0, r5 | r0 = r5;
0x0008b03a ldr.w r1, [r3, fp] | r1 = *((r3 + fp));
0x0008b03e str r3, [sp, 4] | var_4h = r3;
0x0008b040 bl 0x22990 | fcn_00022990 (r0, r1);
0x0008b044 ldr r3, [sp, 4] | r3 = var_4h;
0x0008b046 mov r2, r0 | r2 = r0;
0x0008b048 add.w r1, r3, fp | r1 = r3 + fp;
0x0008b04c str.w r0, [r3, fp] | __asm ("str.w r0, [r3, fp]");
| if (r0 == 0) {
0x0008b050 cbz r0, 0x8b06a | goto label_2;
| }
0x0008b052 ldrb r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x0008b054 cbz r3, 0x8b0b0 | goto label_9;
| }
0x0008b056 movs r2, 0 | r2 = 0;
| do {
0x0008b058 add r3, sl | r3 += sl;
0x0008b05a ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0008b05e add r2, r3 | r2 += r3;
0x0008b060 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0008b064 uxtb r2, r2 | r2 = (int8_t) r2;
0x0008b066 cmp r3, 0 |
0x0008b068 bne 0x8b058 |
| } while (r3 != 0);
| label_2:
0x0008b06a strb r2, [r1, 7] | *((r1 + 7)) = r2;
0x0008b06c add.w sb, sb, 1 | sb++;
0x0008b070 ldrsh.w r3, [r8, 0x22] | r3 = *((r8 + 0x22));
0x0008b074 add.w fp, fp, 0xc |
0x0008b078 cmp r3, sb |
| if (r3 > sb) {
0x0008b07a bgt 0x8b034 | goto label_1;
| }
| label_8:
0x0008b07c movs r2, 0 | r2 = 0;
0x0008b07e ldr r1, [r6, 0x34] | r1 = *((r6 + 0x34));
0x0008b080 mov r0, r5 | r0 = r5;
0x0008b082 bl 0x321b0 | fcn_000321b0 (r0, r1, r2, r3, r4);
0x0008b086 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0008b088 ldr r2, [r6, 0x2c] | r2 = *((r6 + 0x2c));
0x0008b08a str.w r0, [r8, 0x34] | __asm ("str.w r0, [r8, 0x34]");
0x0008b08e add.w r3, r3, r7, lsl 4 | r3 += (r7 << 4);
0x0008b092 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0008b094 str.w r2, [r8, 0x2c] | __asm ("str.w r2, [r8, 0x2c]");
0x0008b098 movs r2, 1 | r2 = 1;
0x0008b09a str.w r2, [r8, 0x18] | __asm ("str.w r2, [r8, 0x18]");
0x0008b09e str.w r3, [r8, 0x3c] | __asm ("str.w r3, [r8, 0x3c]");
0x0008b0a2 b 0x8af2c | goto label_0;
| label_5:
0x0008b0a4 ldr r1, [pc, 0x2c] |
0x0008b0a6 mov r0, sl | r0 = sl;
0x0008b0a8 add r1, pc | r1 = 0x116180;
0x0008b0aa bl 0x21598 | fcn_00021598 (r0, r1);
0x0008b0ae b 0x8af2c | goto label_0;
| label_9:
0x0008b0b0 mov r2, r3 | r2 = r3;
0x0008b0b2 b 0x8b06a | goto label_2;
| label_4:
0x0008b0b4 ldr r1, [pc, 0x20] |
0x0008b0b6 mov r0, sl | r0 = sl;
0x0008b0b8 add r1, pc | r1 = 0x116194;
0x0008b0ba bl 0x21598 | fcn_00021598 (r0, r1);
0x0008b0be b 0x8af2c | goto label_0;
| label_6:
0x0008b0c0 mov.w r7, 0x8000 |
0x0008b0c4 movt r7, 0xffff | r7 = 0x-8000;
0x0008b0c8 b 0x8af92 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8b5c8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0008b5c8 () | void fcn_0008b5c8 (int16_t arg_1h, int16_t arg_20h, int16_t arg_22h, int16_t arg_148h, int16_t arg_14ch, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| arithmetic var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| arithmetic var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| arithmetic x;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| int16_t var_dch;
| int32_t var_8h_2;
| int32_t var_8h_3;
| int32_t var_10h_2;
| int16_t var_ech;
| int16_t var_f0h;
| int16_t var_f4h;
| int16_t var_f8h;
| int16_t var_fch;
| int32_t var_100h;
| int32_t var_100h_2;
| int16_t var_108h;
| int16_t var_10ch;
| int16_t var_110h;
| int16_t var_114h;
| int16_t var_118h;
| int16_t var_11ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008b5c8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008b5cc sub sp, 0x124 |
0x0008b5ce str r2, [sp, 0x34] | var_34h = r2;
0x0008b5d0 ldr.w r2, [pc, 0xae4] | r2 = *(0x0008c0b8);
0x0008b5d4 str r3, [sp, 0x4c] | var_4ch = r3;
0x0008b5d6 ldr.w r3, [pc, 0xae4] |
0x0008b5da add r2, pc | r2 += pc;
0x0008b5dc str r0, [sp, 0x2c] | var_2ch = r0;
0x0008b5de ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0008b5e0 ldr r2, [r0, 0x24] | r2 = *(arg_148hx24);
0x0008b5e2 ldr r3, [r3] | r3 = *(0x8c0be);
0x0008b5e4 str r3, [sp, 0x11c] | var_11ch = r3;
0x0008b5e6 mov.w r3, 0 | r3 = 0;
0x0008b5ea movs r3, 0 | r3 = 0;
0x0008b5ec str r3, [sp, 0xd4] | var_d4h = r3;
0x0008b5ee strd r3, r3, [sp, 0xcc] | __asm ("strd r3, r3, [var_cch]");
0x0008b5f2 ldr r3, [sp, 0x14c] | r3 = *(arg_14ch);
0x0008b5f4 str r2, [sp, 0x44] | var_44h = r2;
0x0008b5f6 str r1, [sp, 0x38] | var_38h = r1;
0x0008b5f8 str r3, [sp, 0x5c] | var_5ch = r3;
0x0008b5fa ldr r3, [r0] | r3 = *(r0);
0x0008b5fc str r3, [sp, 0x30] | var_30h = r3;
0x0008b5fe cmp r2, 0 |
| if (r2 == 0) {
0x0008b600 beq.w 0x8b764 | goto label_103;
| }
| label_0:
0x0008b604 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0008b606 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0008b608 bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x0008b60c ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008b60e cmp r3, 0 |
0x0008b610 bne.w 0x8b75a |
| while (1) {
0x0008b614 ldr r3, [sp, 0x4c] | r3 = var_4ch;
| if (r3 != 0) {
0x0008b616 cbz r3, 0x8b620 |
0x0008b618 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0008b61a mov r1, r3 | r1 = r3;
0x0008b61c bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x0008b620 ldr.w r2, [pc, 0xa9c] |
0x0008b624 ldr.w r3, [pc, 0xa94] | r3 = *(0x8c0bc);
0x0008b628 add r2, pc | r2 = 0x1176ec;
0x0008b62a ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008b62c ldr r2, [r3] | r2 = imp.sinh;
0x0008b62e ldr r3, [sp, 0x11c] | r3 = var_11ch;
0x0008b630 eors r2, r3 | r2 ^= r3;
0x0008b632 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008b636 bne.w 0x8c9a8 | goto label_104;
| }
0x0008b63a add sp, 0x124 |
0x0008b63c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_72:
0x0008b640 ldr.w r0, [r8] | r0 = *(r8);
0x0008b644 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0008b648 str r3, [sp, 0x58] | var_58h = r3;
| if (r3 == 0) {
0x0008b64a cbnz r3, 0x8b66a |
0x0008b64c movs r4, 0x14 | r4 = 0x14;
0x0008b64e ldr.w r7, [r8, 0x68] | r7 = *((r8 + 0x68));
0x0008b652 mul r4, r4, sb | r4 *= sb;
0x0008b656 adds r5, r7, r4 | r5 = r7 + r4;
0x0008b658 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x0008b65a ldrsb.w r1, [r5, 1] | r1 = *((r5 + 1));
0x0008b65e bl 0x1c888 | fcn_0001c888 (r0);
0x0008b662 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008b664 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0008b666 movs r3, 0xb8 | r3 = 0xb8;
0x0008b668 strh r3, [r7, r4] | *((r7 + r4)) = r3;
| }
0x0008b66a movs r3, 0 | r3 = 0;
0x0008b66c ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008b66e movs r1, 0x7a | r1 = 0x7a;
0x0008b670 mov r0, r8 | r0 = r8;
0x0008b672 str r3, [sp] | *(sp) = r3;
0x0008b674 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_69:
0x0008b678 mov r1, sl | r1 = sl;
0x0008b67a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008b67c bl 0x23ec0 | fcn_00023ec0 (r0, r1);
0x0008b680 ldrd r1, r3, [r8, 0x6c] | __asm ("ldrd r1, r3, [r8, 0x6c]");
0x0008b684 cmp r1, r3 |
| if (r1 >= r3) {
0x0008b686 bge.w 0x8ce0c | goto label_105;
| }
0x0008b68a add.w r2, r1, r1, lsl 2 | r2 = r1 + (r1 << 2);
0x0008b68e ldr.w r4, [r8, 0x68] | r4 = *((r8 + 0x68));
0x0008b692 ldr r7, [sp, 0x40] | r7 = var_40h;
0x0008b694 adds r3, r1, 1 | r3 = r1 + 1;
0x0008b696 lsls r2, r2, 2 | r2 <<= 2;
0x0008b698 str.w r3, [r8, 0x6c] | __asm ("str.w r3, [r8, 0x6c]");
0x0008b69c movs r0, 0 | r0 = 0;
0x0008b69e adds r3, r4, r2 | r3 = r4 + r2;
0x0008b6a0 movs r5, 7 | r5 = 7;
0x0008b6a2 str r7, [r3, 8] | *((r3 + 8)) = r7;
0x0008b6a4 ldr r7, [sp, 0x44] | r7 = var_44h;
0x0008b6a6 strd r7, r0, [r3, 0xc] | __asm ("strd r7, r0, [r3, 0xc]");
0x0008b6aa str r5, [r4, r2] | *((r4 + r2)) = r5;
0x0008b6ac str r0, [r3, 4] | *((r3 + 4)) = r0;
| label_78:
0x0008b6ae mvn r3, 0xa | r3 = ~0xa;
0x0008b6b2 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008b6b4 mov r0, r8 | r0 = r8;
0x0008b6b6 bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
0x0008b6ba ldr r3, [sp, 0x148] | r3 = *(arg_148h);
0x0008b6bc cmp r3, 0xb |
0x0008b6be it eq |
| if (r3 != 0xb) {
0x0008b6c0 moveq r3, 2 | r3 = 2;
| }
0x0008b6c2 str r3, [sp, 0x148] | *(arg_148h) = r3;
0x0008b6c4 ldr.w r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
0x0008b6c8 cmp r3, 0 |
| if (r3 > 0) {
0x0008b6ca ble 0x8b6de |
0x0008b6cc ldr.w r2, [r8, 0x68] | r2 = *((r8 + 0x68));
0x0008b6d0 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0008b6d4 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0008b6d8 ldr r3, [sp, 0x148] | r3 = *(arg_148h);
0x0008b6da strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
0x0008b6de ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008b6e0 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0008b6e2 cmp r3, 0 |
0x0008b6e4 it ne |
| if (r3 == 0) {
0x0008b6e6 movne r2, r3 | r2 = r3;
| }
0x0008b6e8 movs r3, 1 | r3 = 1;
0x0008b6ea strb r3, [r2, 0x15] | *((r2 + 0x15)) = r3;
0x0008b6ec ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008b6ee cmp r3, 0 |
| if (r3 != 0) {
0x0008b6f0 bne.w 0x8ce2c | goto label_106;
| }
0x0008b6f4 mov r2, fp | r2 = fp;
0x0008b6f6 str r3, [sp] | *(sp) = r3;
0x0008b6f8 movs r1, 0x26 | r1 = 0x26;
0x0008b6fa add.w r3, sb, 1 | r3 = sb + 1;
0x0008b6fe mov r0, r8 | r0 = r8;
0x0008b700 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008b704 ldr.w r3, [r8] | r3 = *(r8);
0x0008b708 cmp.w sb, 0 |
0x0008b70c ldr.w r2, [r8, 0x6c] | r2 = *((r8 + 0x6c));
0x0008b710 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008b714 it lt |
| if (sb >= 0) {
0x0008b716 addlt sb, r2, -1 | sb = r2 + -1;
| }
0x0008b71a cmp r3, 0 |
| if (r3 != 0) {
0x0008b71c bne.w 0x8ce22 | goto label_107;
| }
0x0008b720 ldr.w r3, [r8, 0x68] | r3 = *((r8 + 0x68));
0x0008b724 movs r1, 0x14 | r1 = 0x14;
0x0008b726 mla r3, r1, sb, r3 | __asm ("mla r3, r1, sb, r3");
| label_79:
0x0008b72a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008b72c movs r3, 0 | r3 = 0;
0x0008b72e mov r2, fp | r2 = fp;
0x0008b730 mov r0, r8 | r0 = r8;
0x0008b732 movs r1, 0x7a | r1 = 0x7a;
0x0008b734 str r3, [sp] | *(sp) = r3;
0x0008b736 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_4:
0x0008b73a ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008b73c ldr r1, [sp, 0x3c] | r1 = var_3ch;
| if (r3 != 0) {
0x0008b73e cbz r3, 0x8b74a |
| label_20:
0x0008b740 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0008b742 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0008b744 movs r0, 0xf8 | r0 = 0xf8;
0x0008b746 movs r3, 0 | r3 = 0;
0x0008b748 str r3, [sp, 0xd4] | var_d4h = r3;
| }
| label_21:
0x0008b74a ldr r4, [sp, 0x30] | r4 = var_30h;
0x0008b74c mov r0, r4 | r0 = r4;
0x0008b74e bl 0x16808 | fcn_00016808 (r0, r1);
0x0008b752 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0008b754 mov r0, r4 | r0 = r4;
0x0008b756 bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x0008b75a ldrd r0, r1, [sp, 0x30] | __asm ("ldrd r0, r1, [var_34h]");
0x0008b75e bl 0x1a608 | fcn_0001a608 (r0, r1);
0x0008b762 b 0x8b614 |
| }
| label_103:
0x0008b764 mov r4, r0 | r4 = r0;
0x0008b766 mov r5, r2 | r5 = r2;
0x0008b768 bl 0x8a9ec | r0 = fcn_0008a9ec (r0, r1);
0x0008b76c mov sl, r0 | sl = r0;
0x0008b76e cmp r0, 0 |
| if (r0 == 0) {
0x0008b770 beq.w 0x8bd64 | goto label_108;
| }
0x0008b774 ldr r1, [r0, 0x3c] | r1 = *((r0 + 0x3c));
0x0008b776 ldr r0, [r4] | r0 = *(r4);
0x0008b778 cmp r1, 0 |
| if (r1 == 0) {
0x0008b77a beq.w 0x8c1a6 | goto label_109;
| }
0x0008b77e ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0008b780 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0008b782 cmp r1, r2 |
| if (r1 == r2) {
0x0008b784 beq.w 0x8be7c | goto label_110;
| }
0x0008b788 mov r8, r5 | r8 = r5;
| do {
0x0008b78a ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x0008b78c adds r3, 0x10 | r3 += 0x10;
0x0008b78e add.w r8, r8, 1 | r8++;
0x0008b792 cmp r1, r2 |
0x0008b794 bne 0x8b78a |
| } while (r1 != r2);
| label_19:
0x0008b796 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x0008b79a cmp r3, 0 |
| if (r3 == 0) {
0x0008b79c beq.w 0x8bd4a | goto label_111;
| }
| label_10:
0x0008b7a0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008b7a2 ldrb.w r3, [r3, 0x97] | r3 = *((r3 + 0x97));
0x0008b7a6 cmp r3, 0 |
| if (r3 != 0) {
0x0008b7a8 bne.w 0x8bd58 | goto label_112;
| }
0x0008b7ac add r3, sp, 0xc8 | r3 += var_c8h;
0x0008b7ae ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008b7b0 str r3, [sp] | *(sp) = r3;
0x0008b7b2 movs r2, 0x81 | r2 = 0x81;
0x0008b7b4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008b7b6 mov r1, sl | r1 = sl;
0x0008b7b8 bl 0x24470 | fcn_00024470 (r0, r1, r2, r3, r4);
0x0008b7bc str r0, [sp, 0x7c] | var_7ch = r0;
| label_11:
0x0008b7be ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008b7c0 mov r1, sl | r1 = sl;
0x0008b7c2 ldrb.w r2, [sl, 0x2b] | r2 = *((sl + 0x2b));
0x0008b7c6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008b7c8 ldr r3, [r3] | r3 = *(r3);
0x0008b7ca str r2, [sp, 0x68] | var_68h = r2;
0x0008b7cc cmp r3, 1 |
0x0008b7ce ittt gt |
| if (r3 <= 1) {
0x0008b7d0 ldrgt r3, [sp, 0x34] | r3 = var_34h;
| }
| if (r3 <= 1) {
0x0008b7d2 ldrgt r3, [r3] | r3 = *(r3);
| }
| if (r3 <= 1) {
0x0008b7d4 strgt r3, [sp, 0x44] | var_44h = r3;
| }
0x0008b7d6 bl 0x774c4 | r0 = fcn_000774c4 (r0, r1);
0x0008b7da mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0008b7dc cbz r0, 0x8b7f2 | goto label_113;
| }
0x0008b7de ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008b7e0 cmp r3, 0 |
| if (r3 == 0) {
0x0008b7e2 beq.w 0x8b604 | goto label_0;
| }
0x0008b7e6 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0008b7e8 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0008b7ec movs r3, 0 | r3 = 0;
0x0008b7ee str r3, [sp, 0xd4] | var_d4h = r3;
0x0008b7f0 b 0x8b604 | goto label_0;
| label_113:
0x0008b7f2 ldr r2, [sp, 0xc8] | r2 = var_c8h;
0x0008b7f4 mov r1, sl | r1 = sl;
0x0008b7f6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008b7f8 bl 0x24578 | fcn_00024578 (r0, r1, r2);
0x0008b7fc str r0, [sp, 0xac] | var_ach = r0;
0x0008b7fe cmp r0, 0 |
| if (r0 != 0) {
0x0008b800 bne.w 0x8bd76 | goto label_114;
| }
0x0008b804 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008b806 ldr.w r5, [sl, 0x1c] | r5 = *((sl + 0x1c));
0x0008b80a ldr r3, [r2, 0x28] | r3 = *((r2 + 0x28));
0x0008b80c ands r5, r5, 0x80 | r5 &= 0x80;
0x0008b810 mov r1, r3 | r1 = r3;
0x0008b812 str r3, [sp, 0x6c] | var_6ch = r3;
0x0008b814 add.w r1, r1, 1 | r1++;
0x0008b818 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0008b81c str r1, [sp, 0x78] | var_78h = r1;
0x0008b81e str r1, [r2, 0x28] | *((r2 + 0x28)) = r1;
| if (r5 == r5) {
0x0008b820 beq.w 0x8bd88 | goto label_115;
| }
0x0008b824 mov r1, r3 | r1 = r3;
| if (r3 != 0) {
0x0008b826 cbnz r3, 0x8b830 | goto label_116;
| }
0x0008b828 b.w 0x8c1d2 | goto label_117;
| do {
0x0008b82c ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
| if (r1 == 0) {
0x0008b82e cbz r1, 0x8b83c | goto label_118;
| }
| label_116:
0x0008b830 ldrb.w r2, [r1, 0x37] | r2 = *((r1 + 0x37));
0x0008b834 and r2, r2, 3 | r2 &= 3;
0x0008b838 cmp r2, 2 |
0x0008b83a bne 0x8b82c |
| } while (r2 != 2);
| label_118:
0x0008b83c str r1, [sp, 0x54] | var_54h = r1;
| label_13:
0x0008b83e ldr r2, [sp, 0x78] | r2 = var_78h;
0x0008b840 ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x0008b842 ldr r0, [sp, 0x54] | r0 = var_54h;
| do {
0x0008b844 cmp r3, r0 |
0x0008b846 it eq |
| if (r3 != r0) {
0x0008b848 moveq r1, r2 | r1 = r2;
| }
0x0008b84a ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008b84c adds r2, 1 | r2++;
0x0008b84e cmp r3, 0 |
0x0008b850 bne 0x8b844 |
| } while (r3 != 0);
0x0008b852 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008b854 str r1, [sp, 0x50] | var_50h = r1;
0x0008b856 str r2, [r3, 0x28] | *((r3 + 0x28)) = r2;
0x0008b858 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0008b85a subs r3, r2, r3 | r3 = r2 - r3;
0x0008b85c subs r5, r3, 1 | r5 = r3 - 1;
0x0008b85e adds r3, 1 | r3++;
0x0008b860 str r5, [sp, 0xa4] | var_a4h = r5;
| label_26:
0x0008b862 ldr r2, [sp, 0x5c] | r2 = var_5ch;
| if (r2 != 0) {
0x0008b864 cbz r2, 0x8b874 |
0x0008b866 ldr r1, [r2, 0x28] | r1 = *((r2 + 0x28));
0x0008b868 ldr r2, [r2, 0x2c] | r2 = *((r2 + 0x2c));
0x0008b86a str r1, [sp, 0x50] | var_50h = r1;
0x0008b86c str r2, [sp, 0x78] | var_78h = r2;
0x0008b86e ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x0008b870 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008b872 str r1, [r2, 0x28] | *((r2 + 0x28)) = r1;
| }
0x0008b874 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0008b876 movs r4, 0 | r4 = 0;
0x0008b878 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0008b87a ldr r0, [sp, 0x30] | r0 = var_30h;
0x0008b87c str r1, [r2, 0x30] | *((r2 + 0x30)) = r1;
0x0008b87e ldrsh.w r2, [sl, 0x22] | r2 = *((sl + 0x22));
0x0008b882 ldr r1, [sp, 0xa4] | r1 = var_a4h;
0x0008b884 add r2, r1 | r2 += r1;
0x0008b886 adds r2, 1 | r2++;
0x0008b888 add.w r2, r3, r2, lsl 2 | r2 = r3 + (r2 << 2);
0x0008b88c mov r3, r4 | r3 = r4;
0x0008b88e bl 0x21784 | fcn_00021784 (r0, r1);
0x0008b892 str r0, [sp, 0x3c] | var_3ch = r0;
0x0008b894 cmp r0, 0 |
| if (r0 == 0) {
0x0008b896 beq.w 0x8be82 | goto label_119;
| }
0x0008b89a ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008b89c adds r5, 1 | r5++;
0x0008b89e ldrsh.w r3, [sl, 0x22] | r3 = *((sl + 0x22));
0x0008b8a2 movs r1, 1 | r1 = 1;
0x0008b8a4 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
0x0008b8a8 mov r2, r5 | r2 = r5;
0x0008b8aa str r3, [sp, 0x88] | var_88h = r3;
0x0008b8ac add.w r3, r3, r5, lsl 2 | r3 += (r5 << 2);
0x0008b8b0 mov r6, r3 | r6 = r3;
0x0008b8b2 mov r0, r3 | r0 = r3;
0x0008b8b4 str r3, [sp, 0x94] | var_94h = r3;
0x0008b8b6 blx 0x839c | fcn_0000839c ();
0x0008b8ba strb r4, [r6, r5] | *((r6 + r5)) = r4;
0x0008b8bc ldrsh.w r2, [sl, 0x22] | r2 = *((sl + 0x22));
0x0008b8c0 cmp r2, 0 |
| if (r2 > 0) {
0x0008b8c2 ble 0x8b8ce |
0x0008b8c4 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0008b8c6 lsls r2, r2, 2 | r2 <<= 2;
0x0008b8c8 movs r1, 0xff | r1 = 0xff;
0x0008b8ca blx 0x839c | fcn_0000839c ();
| }
0x0008b8ce ldr r2, [sp, 0x38] | r2 = var_38h;
0x0008b8d0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008b8d2 str r2, [sp, 0xf8] | var_f8h = r2;
0x0008b8d4 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008b8d6 str r3, [sp, 0xf4] | var_f4h = r3;
0x0008b8d8 str r2, [sp, 0xfc] | var_fch = r2;
0x0008b8da ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0008b8dc movs r3, 0 | r3 = 0;
0x0008b8de strd r3, r3, [sp, 0x100] | __asm ("strd r3, r3, [var_100h]");
0x0008b8e2 str r3, [sp, 0x108] | var_108h = r3;
0x0008b8e4 str r3, [sp, 0x110] | var_110h = r3;
0x0008b8e6 mov.w r3, 0x200 | r3 = 0x200;
0x0008b8ea str r2, [sp, 0x40] | var_40h = r2;
0x0008b8ec str r3, [sp, 0x10c] | var_10ch = r3;
0x0008b8ee cmp r2, 0 |
| if (r2 == 0) {
0x0008b8f0 beq.w 0x8bda6 | goto label_120;
| }
| label_15:
0x0008b8f4 ldr r6, [sp, 0x34] | r6 = var_34h;
0x0008b8f6 ldr r3, [r6] | r3 = *(r6);
0x0008b8f8 cmp r3, 0 |
| if (r3 <= 0) {
0x0008b8fa ble.w 0x8c9d0 | goto label_121;
| }
0x0008b8fe ldr.w r4, [pc, 0x7c4] | r4 = *(0x0008c0c4);
0x0008b902 mov.w fp, 0 |
0x0008b906 lsl.w r3, r8, 4 | r3 = r8 << 4;
0x0008b90a str.w fp, [sp, 0x60] | __asm ("str.w fp, [var_60h]");
0x0008b90e str.w fp, [sp, 0x58] | __asm ("str.w fp, [var_58h]");
0x0008b912 str.w fp, [sp, 0xa8] | __asm ("str.w fp, [var_a8h]");
0x0008b916 add r4, pc | r4 += pc;
0x0008b918 str r5, [sp, 0x70] | var_70h = r5;
0x0008b91a mov r5, fp | r5 = fp;
0x0008b91c mov fp, sl |
0x0008b91e str r3, [sp, 0x64] | var_64h = r3;
0x0008b920 mov.w r3, -1 | r3 = -1;
0x0008b924 str.w r8, [sp, 0x80] | __asm ("str.w r8, [var_80h]");
0x0008b928 str r3, [sp, 0x74] | var_74h = r3;
| label_5:
0x0008b92a ldr.w sb, [r6, 0xc] | sb = *((r6 + 0xc));
0x0008b92e mov r2, sb | r2 = sb;
0x0008b930 mov r8, sb | r8 = sb;
0x0008b932 cmp.w sb, 0 |
| if (sb == 0) {
0x0008b936 beq 0x8b960 | goto label_12;
| }
0x0008b938 ldrb.w r3, [sb] | r3 = *(sb);
0x0008b93c cmp r3, 0 |
| if (r3 == 0) {
0x0008b93e beq.w 0x8bd60 | goto label_122;
| }
0x0008b942 ldr.w r1, [pc, 0x784] | r1 = *(0x0008c0c8);
0x0008b946 mov.w r8, 0 | r8 = 0;
0x0008b94a add r1, pc | r1 += pc;
| do {
0x0008b94c add r3, r1 | r3 += r1;
0x0008b94e ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0008b952 add r8, r3 | r8 += r3;
0x0008b954 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0008b958 uxtb.w r8, r8 | r8 = (int8_t) r8;
0x0008b95c cmp r3, 0 |
0x0008b95e bne 0x8b94c |
| } while (r3 != 0);
| label_12:
0x0008b960 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008b962 cmp r3, 0 |
| if (r3 == 0) {
0x0008b964 beq.w 0x8bd36 | goto label_123;
| }
| label_9:
0x0008b968 ldrsh.w lr, [fp, 0x22] |
0x0008b96c cmp.w lr, 0 |
| if (lr <= 0) {
0x0008b970 ble.w 0x8bd0a | goto label_124;
| }
0x0008b974 ldr.w r1, [fp, 4] | r1 = *(arg_14ch);
0x0008b978 movs r7, 0 | r7 = 0;
0x0008b97a mov ip, r1 |
0x0008b97c mov r2, r1 | r2 = r1;
0x0008b97e b 0x8b98c |
| while (r3 != r8) {
| label_1:
0x0008b980 adds r7, 1 | r7++;
0x0008b982 add.w ip, ip, 0xc |
0x0008b986 cmp r7, lr |
| if (r7 == lr) {
0x0008b988 beq.w 0x8bd0a | goto label_124;
| }
0x0008b98c ldrb.w r3, [ip, 7] | r3 = *((ip + 7));
0x0008b990 cmp r3, r8 |
0x0008b992 bne 0x8b980 |
| }
0x0008b994 ldr.w r3, [ip] | r3 = *(ip);
0x0008b998 add.w sl, sb, -1 | sl = sb + -1;
0x0008b99c subs r0, r3, 1 | r0 = r3 - 1;
0x0008b99e str r3, [sp, 0x48] | var_48h = r3;
| label_3:
0x0008b9a0 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0008b9a4 ldrb r1, [sl, 1]! | r1 = *((sl += 1));
0x0008b9a8 cmp r3, r1 |
| if (r3 == r1) {
0x0008b9aa beq 0x8b9c8 | goto label_125;
| }
| label_2:
0x0008b9ac add r3, r4 | r3 += r4;
0x0008b9ae add r1, r4 | r1 += r4;
0x0008b9b0 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0008b9b4 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x0008b9b8 cmp r3, r1 |
| if (r3 != r1) {
0x0008b9ba bne 0x8b980 | goto label_1;
| }
0x0008b9bc ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0008b9c0 ldrb r1, [sl, 1]! | r1 = *((sl += 1));
0x0008b9c4 cmp r3, r1 |
| if (r3 != r1) {
0x0008b9c6 bne 0x8b9ac | goto label_2;
| }
| label_125:
0x0008b9c8 cmp r3, 0 |
| if (r3 != 0) {
0x0008b9ca bne 0x8b9a0 | goto label_3;
| }
0x0008b9cc mov r1, r2 | r1 = r2;
0x0008b9ce ldrsh.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x0008b9d2 cmp r2, r7 |
| if (r2 == r7) {
0x0008b9d4 beq.w 0x8bd94 | goto label_126;
| }
0x0008b9d8 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008b9da ldrh.w r2, [ip, 0xa] | r2 = *((ip + 0xa));
| if (r3 != 0) {
0x0008b9de cbz r3, 0x8b9e6 |
0x0008b9e0 lsls r3, r2, 0x1f | r3 = r2 << 0x1f;
| if (r3 < r2) {
0x0008b9e2 bmi.w 0x8bda0 | goto label_127;
| }
| }
0x0008b9e6 tst.w r2, 0x60 |
| if ((r2 & 0x60) != 0) {
0x0008b9ea bne.w 0x8c9b4 | goto label_128;
| }
| label_14:
0x0008b9ee ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008b9f0 cmp lr, r7 |
0x0008b9f2 str.w r5, [r3, r7, lsl 2] | __asm ("str.w r5, [r3, r7, lsl 2]");
| if (lr <= r7) {
0x0008b9f6 ble.w 0x8bd0a | goto label_124;
| }
0x0008b9fa add.w r3, r7, r7, lsl 1 | r3 = r7 + (r7 << 1);
0x0008b9fe ldr.w r2, [fp] | r2 = *(fp);
0x0008ba02 ldr.w r3, [r1, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r1 + offset_0));
| label_8:
0x0008ba06 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0008ba08 ldr r0, [sp, 0x64] | r0 = var_64h;
0x0008ba0a ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x0008ba0c ldr r1, [r1, r0] | r1 = *((r1 + r0));
0x0008ba0e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008ba10 str r1, [sp] | *(sp) = r1;
0x0008ba12 movs r1, 0x17 | r1 = 0x17;
0x0008ba14 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x0008ba18 cmp r0, 1 |
| if (r0 == 1) {
0x0008ba1a beq.w 0x8b73a | goto label_4;
| }
0x0008ba1e cmp r0, 2 |
0x0008ba20 add.w r5, r5, 1 | r5++;
0x0008ba24 itt eq |
| if (r0 != 2) {
0x0008ba26 ldreq r2, [sp, 0x3c] | r2 = var_3ch;
| }
| if (r0 != 2) {
0x0008ba28 moveq r3, -1 | r3 = -1;
| }
0x0008ba2c add.w r6, r6, 0x10 | r6 += 0x10;
0x0008ba30 it eq |
| if (r0 != 2) {
0x0008ba32 streq r3, [r2, r7, lsl 2] | offset_1 = r7 << 2;
| *((r2 + offset_1)) = r3;
| }
0x0008ba36 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008ba38 ldr r3, [r3] | r3 = *(r3);
0x0008ba3a cmp r5, r3 |
| if (r5 < r3) {
0x0008ba3c blt.w 0x8b92a | goto label_5;
| }
0x0008ba40 ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x0008ba42 mov sl, fp | sl = fp;
0x0008ba44 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0008ba46 ldr r5, [sp, 0x70] | r5 = var_70h;
0x0008ba48 ldr.w r8, [sp, 0x80] | r8 = var_80h;
0x0008ba4c add r3, r2 | r3 += r2;
0x0008ba4e str r3, [sp, 0x98] | var_98h = r3;
0x0008ba50 str r3, [sp, 0xb0] | var_b0h = r3;
| label_62:
0x0008ba52 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008ba56 tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x0008ba5a bne.w 0x8c0dc | goto label_129;
| }
0x0008ba5e ldrb.w r2, [sl, 0x2b] | r2 = *((sl + 0x2b));
| label_28:
0x0008ba62 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008ba64 cmp r2, 1 |
0x0008ba66 mov.w r0, -1 | r0 = -1;
0x0008ba6a ldr r4, [sp, 0x38] | r4 = var_38h;
0x0008ba6c it ne |
| if (r2 == 1) {
0x0008ba6e movne r0, 0 | r0 = 0;
| }
0x0008ba70 ldr r3, [r3] | r3 = *(r3);
0x0008ba72 ldr r1, [r3, 0x20] | r1 = *((r3 + 0x20));
0x0008ba74 clz r3, r2 | r3 &= r2;
0x0008ba78 lsrs r3, r3, 5 | r3 >>= 5;
0x0008ba7a str r0, [r4, 0x38] | *((r4 + 0x38)) = r0;
0x0008ba7c str r0, [r4, 0x3c] | *((r4 + 0x3c)) = r0;
0x0008ba7e ands.w r3, r3, r1, lsr 14 | r3 &= (r1 >> 14);
| if (r3 != r3) {
0x0008ba82 bne.w 0x8c1e2 | goto label_130;
| }
| label_33:
0x0008ba86 movs r3, 0 | r3 = 0;
0x0008ba88 str r3, [sp, 0x70] | var_70h = r3;
| label_32:
0x0008ba8a ldr r3, [sp, 0x148] | r3 = *(arg_148h);
0x0008ba8c ldr.w r4, [sl, 8] | r4 = *((sl + 8));
0x0008ba90 cmp r3, 5 |
0x0008ba92 itt eq |
| if (r3 != 5) {
0x0008ba94 moveq r3, 1 | r3 = 1;
| }
| if (r3 != 5) {
0x0008ba96 streq r3, [sp, 0xcc] | var_cch = r3;
| }
0x0008ba98 cmp r4, 0 |
| if (r4 == 0) {
0x0008ba9a beq.w 0x8c9ac | goto label_131;
| }
0x0008ba9e ldr.w r3, [pc, 0x62c] | r3 = *(0x0008c0cc);
0x0008baa2 mov.w sb, 0 | sb = 0;
0x0008baa4 lsrs r0, r0, 4 | r0 >>= 4;
0x0008baa6 ldr r2, [sp, 0x70] | r2 = var_70h;
0x0008baa8 strd sl, r5, [sp, 0x80] | __asm ("strd sl, r5, [var_80h]");
0x0008baac add r3, pc | r3 += pc;
0x0008baae ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0008bab0 str r3, [sp, 0x48] | var_48h = r3;
0x0008bab2 ldr.w r3, [pc, 0x61c] | r3 = *(0x0008c0d0);
0x0008bab6 add r3, pc | r3 += pc;
0x0008bab8 str r3, [sp, 0x64] | var_64h = r3;
0x0008baba ldr r3, [sp, 0x98] | r3 = var_98h;
0x0008babc cmp r2, 1 |
0x0008babe it le |
| if (r2 <= 1) {
0x0008bac0 cmple r3, 0 | __asm ("cmple r3, 0");
| }
0x0008bac2 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0008bac4 ite ne |
| if (r2 == 1) {
0x0008bac6 movne r7, 1 | r7 = 1;
| }
| if (r2 != 1) {
0x0008bac8 moveq r7, 0 | r7 = 0;
| }
0x0008baca sub.w fp, r3, 4 |
0x0008bacc lsrs r4, r0, 0xc | r4 = r0 >> 0xc;
| do {
0x0008bace ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008bad0 cmp r3, r4 |
0x0008bad2 ite ne |
| if (r3 == r4) {
0x0008bad4 movne r3, r7 | r3 = r7;
| }
| if (r3 != r4) {
0x0008bad6 orreq r3, r7, 1 | r3 = r7 | 1;
| }
0x0008bada cmp r3, 0 |
| if (r3 == 0) {
0x0008badc beq.w 0x8bdd6 | goto label_132;
| }
| label_16:
0x0008bae0 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0008bae2 ldrh r1, [r4, 0x34] | r1 = *((r4 + 0x34));
0x0008bae4 adds r3, 1 | r3++;
0x0008bae6 add r1, r3 | r1 += r3;
0x0008bae8 str r1, [r5, 0x2c] | *((r5 + 0x2c)) = r1;
| label_30:
0x0008baea cmp r3, 0 |
| if (r3 == 0) {
0x0008baec beq.w 0x8be30 | goto label_133;
| }
| label_17:
0x0008baf0 ldr r4, [r4, 0x14] | r4 = *((r4 + 0x14));
0x0008baf2 add.w sb, sb, 1 | sb++;
0x0008baf6 str r3, [fp, 4]! | *(arg_14ch) = r3;
0x0008bafa cmp r4, 0 |
0x0008bafc bne 0x8bace |
| } while (r4 != 0);
0x0008bafe ldr r3, [sp, 0x88] | r3 = var_88h;
0x0008bb00 ldrd sl, r5, [sp, 0x80] | __asm ("ldrd sl, r5, [var_80h]");
0x0008bb04 add.w r3, r3, sb, lsl 2 | r3 += (sb << 2);
0x0008bb08 str r3, [sp, 0xbc] | var_bch = r3;
| label_61:
0x0008bb0a ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008bb0c ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x0008bb0e adds r3, 1 | r3++;
0x0008bb10 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x0008bb12 ldr r2, [sp, 0xbc] | r2 = var_bch;
0x0008bb14 str r3, [r2] | *(r2) = r3;
0x0008bb16 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x0008bb18 cmp r3, 0 |
| if (r3 != 0) {
0x0008bb1a bne.w 0x8c40c | goto label_134;
| }
| label_41:
0x0008bb1e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008bb20 ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
| if (r3 == 0) {
0x0008bb22 cbnz r3, 0x8bb32 |
0x0008bb24 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008bb26 ldrb.w r3, [r2, 0x96] | r3 = *((r2 + 0x96));
0x0008bb2a orr r3, r3, 0x10 | r3 |= 0x10;
0x0008bb2e strb.w r3, [r2, 0x96] | *((r2 + 0x96)) = r3;
| }
0x0008bb32 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0008bb34 ldr r2, [sp, 0x70] | r2 = var_70h;
0x0008bb36 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0008bb38 orrs r3, r2 | r3 |= r2;
0x0008bb3a mov r2, r8 | r2 = r8;
0x0008bb3c ite ne |
| if (r3 == r2) {
0x0008bb3e movne r3, 1 | r3 = 1;
| }
| if (r3 != r2) {
0x0008bb40 moveq r3, 0 | r3 = 0;
| }
0x0008bb42 mov r1, r3 | r1 = r3;
0x0008bb44 mov r0, r4 | r0 = r4;
0x0008bb46 mov r5, r3 | r5 = r3;
0x0008bb48 str r3, [sp, 0xc4] | x = r3;
0x0008bb4a bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x0008bb4e ldrb.w r1, [sl, 0x2b] | r1 = *((sl + 0x2b));
0x0008bb52 cmp r1, 1 |
| if (r1 == 1) {
0x0008bb54 beq.w 0x8c3fe | goto label_135;
| }
0x0008bb58 mov r0, r5 | r0 = r5;
0x0008bb5a ldr r5, [sp, 0xa8] | r5 = var_a8h;
0x0008bb5c ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0008bb5e ldr r2, [sp, 0xbc] | r2 = var_bch;
0x0008bb60 orrs r0, r5 | r0 |= r5;
0x0008bb62 add.w fp, r3, 1 |
0x0008bb66 ldr r4, [r2] | r4 = *(r2);
0x0008bb68 ldrsh.w r2, [sl, 0x22] | r2 = *((sl + 0x22));
| if (r0 == r5) {
0x0008bb6c beq.w 0x8c3ea | goto label_136;
| }
0x0008bb70 adds r3, 2 | r3 += 2;
0x0008bb72 ldr r0, [sp, 0xc4] | r0 = x;
0x0008bb74 str r3, [sp, 0xb4] | var_b4h = r3;
0x0008bb76 ldr r3, [sp, 0x98] | r3 = var_98h;
0x0008bb78 cmp r3, 0 |
0x0008bb7a it ne |
| if (r3 == 0) {
0x0008bb7c orrne r0, r0, 1 | r0 |= 1;
| }
0x0008bb80 add.w r3, fp, r2 | r3 = fp + r2;
0x0008bb84 cmp r0, 0 |
| if (r0 == 0) {
0x0008bb86 beq.w 0x8c84c | goto label_137;
| }
| label_93:
0x0008bb8a adds r3, 1 | r3++;
0x0008bb8c str r3, [sp, 0x64] | var_64h = r3;
| label_39:
0x0008bb8e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008bb90 add r2, r3 | r2 += r3;
0x0008bb92 adds r3, 1 | r3++;
0x0008bb94 str r3, [sp, 0x9c] | var_9ch = r3;
0x0008bb96 str r2, [r0, 0x2c] | *((r0 + 0x2c)) = r2;
| label_40:
0x0008bb98 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0008bb9a cmp r3, 2 |
| if (r3 == 2) {
0x0008bb9c beq.w 0x8c3b0 | goto label_138;
| }
0x0008bba0 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008bba2 cmp r3, 0 |
| if (r3 == 0) {
0x0008bba4 beq.w 0x8c3d4 | goto label_139;
| }
| label_38:
0x0008bba8 cmp r1, 1 |
| if (r1 == 1) {
0x0008bbaa beq.w 0x8cab6 | goto label_140;
| }
0x0008bbae ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008bbb0 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008bbb2 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x0008bbb4 ldr r1, [r2, 0x38] | r1 = *((r2 + 0x38));
0x0008bbb6 ands r3, r3, 1 | r3 &= 1;
0x0008bbba add.w sb, r1, -1 | sb = r1 + -1;
0x0008bbbe str r1, [sp, 0xc0] | var_c0h = r1;
0x0008bbc0 str.w sb, [r2, 0x38] | __asm ("str.w sb, [r2, 0x38]");
| if (r3 == r3) {
0x0008bbc4 beq.w 0x8c094 | goto label_64;
| }
0x0008bbc8 ldr r3, [r2, 0x78] | r3 = *((r2 + 0x78));
0x0008bbca cmp r3, 0 |
| if (r3 == 0) {
0x0008bbcc beq.w 0x8c9f8 | goto label_141;
| }
0x0008bbd0 movs r3, 0 | r3 = 0;
0x0008bbd2 str r3, [sp, 0x8c] | var_8ch = r3;
| label_24:
0x0008bbd4 ldr r3, [sp, 0x44] | r3 = var_44h;
| if (r3 == 0) {
0x0008bbd6 cbnz r3, 0x8bbe2 |
0x0008bbd8 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008bbdc lsls r5, r3, 0x18 | r5 = r3 << 0x18;
| if (r5 >= r3) {
0x0008bbde bpl.w 0x8c41a | goto label_142;
| }
| }
0x0008bbe2 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008bbe4 cmp r3, 0 |
| if (r3 == 0) {
0x0008bbe6 beq.w 0x8c744 | goto label_143;
| }
0x0008bbea ldrsh.w r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x0008bbee strd r3, r3, [sp, 0x80] | __asm ("strd r3, r3, [var_80h]");
| label_48:
0x0008bbf2 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008bbf4 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0008bbf6 ldr r2, [r1, 0x2c] | r2 = *((r1 + 0x2c));
0x0008bbf8 adds r3, r2, r3 | r3 = r2 + r3;
0x0008bbfa adds r2, 1 | r2++;
0x0008bbfc str r2, [sp, 0x90] | var_90h = r2;
0x0008bbfe ldr r2, [sp, 0x44] | r2 = var_44h;
0x0008bc00 add r3, r2 | r3 += r2;
0x0008bc02 add.w r8, r3, 1 | r8 = r3 + 1;
0x0008bc06 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0008bc08 str.w r8, [r1, 0x2c] | __asm ("str.w r8, [r1, 0x2c]");
0x0008bc0c cmp r3, 0 |
| if (r3 == 0) {
0x0008bc0e beq.w 0x8c4f0 | goto label_144;
| }
0x0008bc12 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008bc14 cmp r3, 0 |
| if (r3 == 0) {
0x0008bc16 beq.w 0x8d086 | goto label_145;
| }
0x0008bc1a movs r6, 0 | r6 = 0;
| label_99:
0x0008bc1c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008bc1e ldr.w r8, [sp, 0x90] | r8 = var_90h;
0x0008bc22 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0008bc24 cmp r3, 0 |
0x0008bc26 it eq |
| if (r3 != 0) {
0x0008bc28 moveq r3, r2 | r3 = r2;
| }
0x0008bc2a movs r2, 1 | r2 = 1;
0x0008bc2c strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0008bc2e movs r3, 0 | r3 = 0;
0x0008bc30 str r2, [sp, 0xb8] | var_b8h = r2;
0x0008bc32 str r3, [sp, 0x48] | var_48h = r3;
0x0008bc34 str r3, [sp, 0xa0] | var_a0h = r3;
| label_42:
0x0008bc36 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0008bc38 cmp r3, 0 |
| if (r3 == 0) {
0x0008bc3a beq.w 0x8c648 | goto label_146;
| }
| label_57:
0x0008bc3e ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008bc40 cmp r3, 0 |
| if (r3 == 0) {
0x0008bc42 beq.w 0x8c4e8 | goto label_147;
| }
0x0008bc46 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008bc48 cmp r3, 0 |
| if (r3 != 0) {
0x0008bc4a bne.w 0x8d07e | goto label_148;
| }
0x0008bc4e str r3, [sp, 0x6c] | var_6ch = r3;
| label_56:
0x0008bc50 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008bc52 ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 != 0) {
0x0008bc54 cbz r3, 0x8bc5e |
0x0008bc56 ldrd r1, r2, [sp, 0x60] | __asm ("ldrd r1, r2, [var_64h]");
0x0008bc5a bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
| }
| label_47:
0x0008bc5e movs r3, 0 | r3 = 0;
0x0008bc60 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0008bc62 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008bc64 movs r1, 0xc | r1 = 0xc;
0x0008bc66 str r3, [sp] | *(sp) = r3;
0x0008bc68 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_44:
0x0008bc6c ldr r3, [sp, 0xc4] | r3 = x;
0x0008bc6e ldr r2, [sp, 0xa8] | r2 = var_a8h;
0x0008bc70 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x0008bc72 beq.w 0x8bee6 | goto label_149;
| }
0x0008bc76 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0008bc78 cmp r3, 0 |
| if (r3 != 0) {
0x0008bc7a bne.w 0x8c292 | goto label_150;
| }
| label_35:
0x0008bc7e movs r4, 0 | r4 = 0;
| label_34:
0x0008bc80 ldr r3, [sp, 0x148] | r3 = *(arg_148h);
0x0008bc82 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0008bc84 ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x0008bc86 strd sl, r3, [sp, 4] | __asm ("strd sl, r3, [var_8h]");
0x0008bc88 adr r3, 4 | r3 = 4;
0x0008bc8a movs r3, 3 | r3 = 3;
0x0008bc8c str r3, [sp] | *(sp) = r3;
0x0008bc8e movs r3, 0 | r3 = 0;
0x0008bc90 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008bc92 bl 0x8d928 | fcn_0008d928 (r0, r1, r2, r3, r4, r5, r6);
0x0008bc96 ldrsh.w r3, [sl, 0x22] | r3 = *((sl + 0x22));
0x0008bc9a orr.w r7, r0, r4 | r7 = r0 | r4;
0x0008bc9e cmp r3, 0 |
0x0008bca0 itt gt |
| if (r3 <= 0) {
0x0008bca2 movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x0008bca4 movgt r5, r4 | r5 = r4;
| }
| if (r3 > 0) {
0x0008bca6 bgt 0x8bcc6 | goto label_151;
| }
0x0008bca8 b 0x8bec2 | goto label_152;
| do {
| label_6:
0x0008bcaa str r3, [sp] | *(sp) = r3;
0x0008bcac mov r1, sl | r1 = sl;
0x0008bcae ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008bcb0 mov r3, r4 | r3 = r4;
0x0008bcb2 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008bcb4 bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
| label_7:
0x0008bcb8 ldrsh.w r3, [sl, 0x22] | r3 = *((sl + 0x22));
0x0008bcbc adds r4, 1 | r4++;
0x0008bcbe adds r5, 0xc | r5 += 0xc;
0x0008bcc0 cmp r4, r3 |
| if (r4 >= r3) {
0x0008bcc2 bge.w 0x8bec2 | goto label_152;
| }
| label_151:
0x0008bcc6 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0008bcca sxth r1, r4 | __asm ("sxth r1, r4");
0x0008bccc add r3, r5 | r3 += r5;
0x0008bcce ldrh r2, [r3, 0xa] | r2 = *((r3 + 0xa));
0x0008bcd0 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008bcd4 lsls r0, r3, 0x1a | r0 = r3 << 0x1a;
| if (r0 < r3) {
0x0008bcd6 bpl 0x8bce4 |
0x0008bcd8 mov r0, sl | r0 = sl;
0x0008bcda str r2, [sp, 0x60] | var_60h = r2;
0x0008bcdc bl 0xfdbc | fcn_0000fdbc (r0, r1);
0x0008bce0 ldr r2, [sp, 0x60] | r2 = var_60h;
0x0008bce2 mov r1, r0 | r1 = r0;
| }
0x0008bce4 ldr r3, [sp, 0xb4] | r3 = var_b4h;
0x0008bce6 adds r3, r1, r3 | r3 = r1 + r3;
0x0008bce8 adds r1, r7, 1 | r1 = r7 + 1;
0x0008bcea beq 0x8bcaa |
| } while (r1 == r7);
0x0008bcec cmp r4, 0x1f |
| if (r4 > 0x1f) {
0x0008bcee bgt 0x8bcf8 | goto label_153;
| }
0x0008bcf0 movs r1, 1 | r1 = 1;
0x0008bcf2 lsls r1, r4 | r1 <<= r4;
0x0008bcf4 tst r1, r7 |
| if ((r1 & r7) != 0) {
0x0008bcf6 bne 0x8bcaa | goto label_6;
| }
| label_153:
0x0008bcf8 ands r2, r2, 1 | r2 &= 1;
| if (r2 != r2) {
0x0008bcfc bne 0x8bcaa | goto label_6;
| }
0x0008bcfe ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008bd00 movs r1, 0x4b | r1 = 0x4b;
0x0008bd02 str r2, [sp] | *(sp) = r2;
0x0008bd04 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008bd08 b 0x8bcb8 | goto label_7;
| label_124:
0x0008bd0a ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008bd0c cmp r3, 0 |
| if (r3 != 0) {
0x0008bd0e bne.w 0x8be96 | goto label_154;
| }
0x0008bd12 mov r0, sb | r0 = sb;
0x0008bd14 bl 0x1e510 | r0 = fcn_0001e510 (r0);
0x0008bd18 cmp r0, 0 |
| if (r0 == 0) {
0x0008bd1a beq.w 0x8be96 | goto label_154;
| }
0x0008bd1e ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0008bd20 movs r1, 1 | r1 = 1;
0x0008bd22 ldr.w r2, [fp] | r2 = *(fp);
0x0008bd26 mov.w r7, -1 | r7 = -1;
0x0008bd2a str r5, [sp, 0x74] | var_74h = r5;
0x0008bd2c str r3, [sp, 0x60] | var_60h = r3;
0x0008bd2e ldr r3, [pc, 0x3a4] |
0x0008bd30 str r1, [sp, 0x58] | var_58h = r1;
0x0008bd32 add r3, pc | r3 = 0x117e0c;
0x0008bd34 b 0x8ba06 | goto label_8;
| label_123:
0x0008bd36 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0008bd38 add r0, sp, 0xf4 | r0 += var_f4h;
0x0008bd3a bl 0x3119c | r0 = fcn_0003119c (r0, r1);
0x0008bd3e cmp r0, 0 |
| if (r0 != 0) {
0x0008bd40 bne.w 0x8b73a | goto label_4;
| }
0x0008bd44 ldr.w sb, [r6, 0xc] | sb = *((r6 + 0xc));
0x0008bd48 b 0x8b968 | goto label_9;
| label_111:
0x0008bd4a ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x0008bd4c ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| if (r3 == 0) {
0x0008bd4e cbz r3, 0x8bd58 | goto label_112;
| }
0x0008bd50 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0008bd52 cmp r3, 0 |
| if (r3 != 0) {
0x0008bd54 bne.w 0x8b7a0 | goto label_10;
| }
| label_112:
0x0008bd58 movs r3, 0 | r3 = 0;
0x0008bd5a str r3, [sp, 0xc8] | var_c8h = r3;
0x0008bd5c str r3, [sp, 0x7c] | var_7ch = r3;
0x0008bd5e b 0x8b7be | goto label_11;
| label_122:
0x0008bd60 mov r8, r3 | r8 = r3;
0x0008bd62 b 0x8b960 | goto label_12;
| label_108:
0x0008bd64 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008bd66 cmp r3, 0 |
| if (r3 == 0) {
0x0008bd68 beq.w 0x8b604 | goto label_0;
| }
0x0008bd6c ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0008bd6e str r0, [sp, 0xd4] | var_d4h = r0;
0x0008bd70 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0008bd74 b 0x8b604 | goto label_0;
| label_114:
0x0008bd76 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008bd78 cmp r3, 0 |
| if (r3 == 0) {
0x0008bd7a beq.w 0x8b604 | goto label_0;
| }
0x0008bd7e ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0008bd80 str r4, [sp, 0xd4] | var_d4h = r4;
0x0008bd82 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0008bd84 movs r0, 0xf8 | r0 = 0xf8;
0x0008bd86 b 0x8b604 | goto label_0;
| label_115:
0x0008bd88 cmp r3, 0 |
| if (r3 == 0) {
0x0008bd8a beq.w 0x8c0a8 | goto label_155;
| }
0x0008bd8e ldr r2, [sp, 0xac] | r2 = var_ach;
0x0008bd90 str r2, [sp, 0x54] | var_54h = r2;
0x0008bd92 b 0x8b83e | goto label_13;
| label_126:
0x0008bd94 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0008bd96 str r5, [sp, 0x74] | var_74h = r5;
0x0008bd98 str r3, [sp, 0x60] | var_60h = r3;
0x0008bd9a movs r3, 1 | r3 = 1;
0x0008bd9c str r3, [sp, 0x58] | var_58h = r3;
0x0008bd9e b 0x8b9ee | goto label_14;
| label_127:
0x0008bda0 movs r3, 1 | r3 = 1;
0x0008bda2 str r3, [sp, 0xa8] | var_a8h = r3;
0x0008bda4 b 0x8b9ee | goto label_14;
| label_120:
0x0008bda6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008bda8 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x0008bdaa cmp r3, 0 |
| if (r3 == 0) {
0x0008bdac beq.w 0x8c098 | goto label_156;
| }
| label_25:
0x0008bdb0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008bdb2 bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x0008bdb6 str r0, [sp, 0x40] | var_40h = r0;
0x0008bdb8 cmp r0, 0 |
| if (r0 != 0) {
0x0008bdba bne.w 0x8b8f4 | goto label_15;
| }
0x0008bdbe ldr r3, [sp, 0xd4] | r3 = var_d4h;
| if (r3 != 0) {
0x0008bdc0 cbz r3, 0x8bdcc |
0x0008bdc2 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008bdc4 str r2, [sp, 0xd4] | var_d4h = r2;
0x0008bdc6 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0008bdc8 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
| }
0x0008bdcc ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008bdce ldr r0, [sp, 0x30] | r0 = var_30h;
0x0008bdd0 bl 0x16808 | fcn_00016808 (r0, r1);
0x0008bdd4 b 0x8b604 | goto label_0;
| label_132:
0x0008bdd6 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
| if (r1 == 0) {
0x0008bdd8 cbz r1, 0x8be02 | goto label_157;
| }
0x0008bdda ldr r2, [sp, 0x64] | r2 = var_64h;
0x0008bddc add r0, sp, 0xd8 | r0 += var_d8h;
0x0008bdde str r3, [sp, 0xd8] | var_d8h = r3;
0x0008bde0 strd r3, r3, [sp, 0xe0] | __asm ("strd r3, r3, [var_8h_2]");
0x0008bde4 str r2, [sp, 0xdc] | var_dch = r2;
0x0008bde6 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008bde8 strd r3, r3, [sp, 0xe8] | __asm ("strd r3, r3, [var_ech]");
0x0008bdec str r2, [sp, 0xf0] | var_f0h = r2;
0x0008bdee bl 0x30f3c | fcn_00030f3c (r0, r1);
0x0008bdf2 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008bdf4 cmp r3, 0 |
| if (r3 == 0) {
0x0008bdf6 beq 0x8beb4 | goto label_158;
| }
0x0008bdf8 ldrh.w r3, [sp, 0xec] | r3 = var_ech;
| label_22:
0x0008bdfc cmp r3, 0 |
| if (r3 != 0) {
0x0008bdfe bne.w 0x8bae0 | goto label_16;
| }
| label_157:
0x0008be02 ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
| if (r3 == 0) {
0x0008be04 cbz r3, 0x8be30 | goto label_133;
| }
0x0008be06 movs r6, 0 | r6 = 0;
0x0008be08 add.w sl, sp, 0xd8 | sl += var_d8h;
0x0008be0c mov r3, r6 | r3 = r6;
| do {
0x0008be0e ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0008be10 ldrsh.w r2, [r2, r6, lsl 1] | offset_2 = r6 << 1;
| r2 = *((r2 + offset_2));
0x0008be14 cmp r2, 0 |
| if (r2 < 0) {
0x0008be16 blt 0x8be3c | goto label_159;
| }
0x0008be18 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008be1a ldr.w r2, [r1, r2, lsl 2] | offset_3 = r2 << 2;
| r2 = *((r1 + offset_3));
0x0008be1e mvns r2, r2 | r2 = ~r2;
0x0008be20 lsrs r2, r2, 0x1f | r2 >>= 0x1f;
| label_18:
0x0008be22 cmp r2, 0 |
| if (r2 != 0) {
0x0008be24 bne.w 0x8c1b2 | goto label_160;
| }
0x0008be28 ldrh r2, [r4, 0x32] | r2 = *((r4 + 0x32));
0x0008be2a adds r6, 1 | r6++;
0x0008be2c cmp r6, r2 |
0x0008be2e blt 0x8be0e |
| } while (r6 < r2);
| label_133:
0x0008be30 ldr r2, [sp, 0x94] | r2 = var_94h;
0x0008be32 movs r3, 0 | r3 = 0;
0x0008be34 adds r1, r2, 1 | r1 = r2 + 1;
0x0008be36 strb.w r3, [r1, sb] | *((r1 + sb)) = r3;
0x0008be3a b 0x8baf0 | goto label_17;
| label_159:
0x0008be3c ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x0008be3e add.w r2, r2, r6, lsl 4 | r2 += (r6 << 4);
0x0008be42 ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x0008be44 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008be46 str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x0008be4a strd r3, r3, [sl, 8] | __asm ("strd r3, r3, [var_8h_2]");
0x0008be4e strd r3, r3, [sl, 0x10] | __asm ("strd r3, r3, [var_ech]");
0x0008be52 str r2, [sp, 0xdc] | var_dch = r2;
0x0008be54 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008be56 str r2, [sp, 0xf0] | var_f0h = r2;
0x0008be58 mov r2, r1 | r2 = r1;
| if (r1 != 0) {
0x0008be5a cbz r1, 0x8be68 |
0x0008be5c mov r0, sl | r0 = sl;
0x0008be5e bl 0x30f3c | fcn_00030f3c (r0, r1);
0x0008be62 ldrh.w r2, [sp, 0xec] | r2 = var_ech;
0x0008be66 movs r3, 0 | r3 = 0;
| }
0x0008be68 ldr r1, [sp, 0x58] | r1 = var_58h;
| if (r1 == 0) {
0x0008be6a cbnz r1, 0x8be74 |
0x0008be6c bic r2, r2, 2 | r2 = BIT_MASK (r2, 2);
0x0008be70 lsls r2, r2, 0x10 | r2 <<= 0x10;
0x0008be72 lsrs r2, r2, 0x10 | r2 >>= 0x10;
| }
0x0008be74 subs r2, 0 |
0x0008be76 it ne |
| if (r2 == 0) {
0x0008be78 movne r2, 1 | r2 = 1;
| }
0x0008be7a b 0x8be22 | goto label_18;
| label_110:
0x0008be7c ldr.w r8, [sp, 0x44] | r8 = var_44h;
0x0008be80 b 0x8b796 | goto label_19;
| label_119:
0x0008be82 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008be84 cmp r3, 0 |
| if (r3 == 0) {
0x0008be86 beq.w 0x8b604 | goto label_0;
| }
0x0008be8a ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0008be8c str r0, [sp, 0xd4] | var_d4h = r0;
0x0008be8e str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0008be92 b.w 0x8b604 | goto label_0;
| label_154:
0x0008be96 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0008be98 mov r2, sb | r2 = sb;
0x0008be9a ldr r1, [pc, 0x23c] |
0x0008be9c mov r0, r4 | r0 = r4;
0x0008be9e add r1, pc | r1 = 0x117f7c;
0x0008bea0 bl 0x21598 | fcn_00021598 (r0, r1);
0x0008bea4 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008bea6 movs r2, 1 | r2 = 1;
0x0008bea8 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008beaa strb r2, [r4, 0x11] | *((r4 + 0x11)) = r2;
0x0008beac cmp r3, 0 |
| if (r3 != 0) {
0x0008beae bne.w 0x8b740 | goto label_20;
| }
0x0008beb0 add r4, sp, 0x11c | r4 = sp + 0x11c;
0x0008beb2 b 0x8b74a | goto label_21;
| label_158:
0x0008beb4 ldrh.w r3, [sp, 0xec] | r3 = var_ech;
0x0008beb8 bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x0008bebc lsls r3, r3, 0x10 | r3 <<= 0x10;
0x0008bebe lsrs r3, r3, 0x10 | r3 >>= 0x10;
0x0008bec0 b 0x8bdfc | goto label_22;
| label_152:
0x0008bec2 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008bec4 ldr r2, [sp, 0x54] | r2 = var_54h;
0x0008bec6 eor r3, r3, 1 | r3 ^= 1;
0x0008beca cmp r2, 0 |
0x0008becc ite ne |
| if (r2 == 0) {
0x0008bece movne r3, 0 | r3 = 0;
| }
| if (r2 != 0) {
0x0008bed0 andeq r3, r3, 1 | r3 &= 1;
| }
| if (r3 != 0) {
0x0008bed4 cbz r3, 0x8bee6 |
0x0008bed6 movs r3, 0 | r3 = 0;
0x0008bed8 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008beda str r3, [sp] | *(sp) = r3;
0x0008bedc mov r2, fp | r2 = fp;
0x0008bede ldr r3, [sp, 0x64] | r3 = var_64h;
0x0008bee0 movs r1, 0x50 | r1 = 0x50;
0x0008bee2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
| label_149:
0x0008bee6 ldr r3, [sp, 0x148] | r3 = *(arg_148h);
0x0008bee8 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0008beea ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x0008beec strd sl, r3, [sp, 4] | __asm ("strd sl, r3, [var_8h]");
0x0008bef0 movs r3, 1 | r3 = 1;
0x0008bef2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008bef4 str r3, [sp] | *(sp) = r3;
0x0008bef6 bl 0x8d928 | fcn_0008d928 (r0, r1, r2, r3, r4, r5, r6);
0x0008befa str r0, [sp, 0x58] | var_58h = r0;
0x0008befc ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008bf00 cmp r0, 0 |
| if (r0 <= 0) {
0x0008bf02 ble 0x8bfce | goto label_161;
| }
0x0008bf04 ldr r4, [sp, 0x9c] | r4 = var_9ch;
0x0008bf06 movs r5, 0 | r5 = 0;
0x0008bf08 b 0x8bf16 |
| while ((r3 & 0x60) != 0) {
0x0008bf0a lsls r7, r3, 0x1a | r7 = r3 << 0x1a;
0x0008bf0c it pl |
| if (r7 < r3) {
0x0008bf0e addpl r4, 1 | r4++;
| }
| label_23:
0x0008bf10 adds r5, 1 | r5++;
0x0008bf12 cmp r5, r0 |
| if (r5 >= r0) {
0x0008bf14 bge 0x8bfce | goto label_161;
| }
0x0008bf16 ldrsh.w r3, [sl, 0x20] | r3 = *((sl + 0x20));
0x0008bf1a cmp r3, r5 |
| if (r3 == r5) {
0x0008bf1c beq 0x8bf64 | goto label_162;
| }
0x0008bf1e ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0008bf22 add.w r2, r5, r5, lsl 1 | r2 = r5 + (r5 << 1);
0x0008bf26 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0008bf2a ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x0008bf2c tst.w r3, 0x60 |
0x0008bf30 bne 0x8bf0a |
| }
0x0008bf32 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008bf34 adds r7, r4, 1 | r7 = r4 + 1;
0x0008bf36 ldr.w r3, [r3, r5, lsl 2] | offset_4 = r5 << 2;
| r3 = *((r3 + offset_4));
0x0008bf3a cmp r3, 0 |
| if (r3 >= 0) {
0x0008bf3c blt 0x8bf7c |
0x0008bf3e ldr r2, [sp, 0x44] | r2 = var_44h;
0x0008bf40 cmp r2, 0 |
| if (r2 == 0) {
0x0008bf42 beq 0x8bfac | goto label_163;
| }
0x0008bf44 ldr r2, [sp, 0x84] | r2 = var_84h;
0x0008bf46 ldr r1, [sp, 0x68] | r1 = var_68h;
0x0008bf48 str r4, [sp] | *(sp) = r4;
0x0008bf4a mov r4, r7 | r4 = r7;
0x0008bf4c cmp r1, 2 |
0x0008bf4e it ne |
| if (r1 == 2) {
0x0008bf50 movne r0, r2 | r0 = r2;
| }
0x0008bf52 mov r2, r6 | r2 = r6;
0x0008bf54 add r3, r0 | r3 += r0;
0x0008bf56 movs r1, 0x5e | r1 = 0x5e;
0x0008bf58 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008bf5a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008bf5e ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008bf60 movs r2, r4 | r2 = r4;
0x0008bf62 b 0x8bf10 | goto label_23;
| label_162:
0x0008bf64 movs r3, 0 | r3 = 0;
0x0008bf66 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008bf68 str r3, [sp] | *(sp) = r3;
0x0008bf6a movs r2, 0 | r2 = 0;
0x0008bf6c mov r3, r4 | r3 = r4;
0x0008bf6e movs r1, 0x4b | r1 = 0x4b;
0x0008bf70 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008bf74 adds r4, 1 | r4++;
0x0008bf76 ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008bf7a b 0x8bf10 | goto label_23;
| }
0x0008bf7c ldr r3, [sp, 0xc8] | r3 = var_c8h;
0x0008bf7e mvns r3, r3 | r3 = ~r3;
0x0008bf80 and r3, r3, 1 | r3 &= 1;
0x0008bf84 cmp r5, 0x1f |
0x0008bf86 it gt |
| if (r5 <= 0x1f) {
0x0008bf88 orrgt r3, r3, 1 | r3 |= 1;
| }
0x0008bf8c cmp r3, 0 |
| if (r3 == 0) {
0x0008bf8e beq.w 0x8c75a | goto label_164;
| }
| label_50:
0x0008bf92 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008bf94 mov r3, r5 | r3 = r5;
0x0008bf96 str r4, [sp] | *(sp) = r4;
0x0008bf98 mov r1, sl | r1 = sl;
0x0008bf9a ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008bf9c mov r4, r7 | r4 = r7;
0x0008bf9e bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
0x0008bfa2 movs r3, 0 | r3 = 0;
0x0008bfa4 ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008bfa8 str r3, [sp, 0xb8] | var_b8h = r3;
0x0008bfaa b 0x8bf10 | goto label_23;
| label_163:
0x0008bfac ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008bfae ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0008bfb0 cmp r2, 0 |
| if (r2 == 0) {
0x0008bfb2 beq.w 0x8c778 | goto label_165;
| }
0x0008bfb6 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0008bfb8 mov r2, r4 | r2 = r4;
0x0008bfba ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008bfbc mov r4, r7 | r4 = r7;
0x0008bfbe add.w r3, r1, r3, lsl 4 | r3 = r1 + (r3 << 4);
0x0008bfc0 asrs r3, r0, 0xc | r3 = r0 >> 0xc;
0x0008bfc2 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0008bfc4 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x0008bfc8 ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008bfcc b 0x8bf10 | goto label_23;
| label_161:
0x0008bfce ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008bfd2 tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x0008bfd6 bne.w 0x8c74e | goto label_166;
| }
| label_49:
0x0008bfda ldr r3, [sp, 0xc8] | r3 = var_c8h;
0x0008bfdc lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 < r3) {
0x0008bfde bmi.w 0x8c77e | goto label_167;
| }
0x0008bfe2 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0008bfe4 cmp r3, 2 |
| if (r3 != 2) {
0x0008bfe6 bne.w 0x8c2e2 | goto label_168;
| }
| label_37:
0x0008bfea ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0008bfec cmp r3, 0 |
| if (r3 != 0) {
0x0008bfee bne.w 0x8c4d6 | goto label_169;
| }
| label_43:
0x0008bff2 ldr r3, [sp, 0x148] | r3 = *(arg_148h);
0x0008bff4 movs r2, 0x81 | r2 = 0x81;
0x0008bff6 ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x0008bff8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008bffa str r3, [sp, 0xc] | var_ch = r3;
0x0008bffc movs r3, 2 | r3 = 2;
0x0008bffe str r3, [sp] | *(sp) = r3;
0x0008c000 strd sl, fp, [sp, 4] | __asm ("strd sl, fp, [var_8h]");
0x0008c004 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008c006 str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x0008c00a bl 0x8da60 | fcn_0008da60 (r0, r1, r2, r3, r4, r5, r6);
0x0008c00e ldr r4, [sp, 0x48] | r4 = var_48h;
0x0008c010 cmp r4, 1 |
| if (r4 != 1) {
0x0008c012 beq 0x8c048 |
0x0008c014 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008c016 cmp r4, 2 |
0x0008c018 mvn.w r2, sb | r2 = ~sb;
0x0008c01c ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0008c01e ldrd r1, r3, [r0, 0x38] | __asm ("ldrd r1, r3, [r0, 0x38]");
0x0008c022 add r3, r1 | r3 += r1;
| if (r4 == 2) {
0x0008c024 beq.w 0x8c2b6 | goto label_170;
| }
0x0008c028 cmp r3, 0 |
| if (r3 < 0) {
0x0008c02a blt.w 0x8c97a | goto label_171;
| }
0x0008c02c strh r6, [r4, 0x24] | *((r4 + 0x24)) = r6;
0x0008c02e ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008c030 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008c032 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x0008c034 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_59:
0x0008c038 movs r1, 0 | r1 = 0;
0x0008c03a ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0008c03c str r1, [sp] | *(sp) = r1;
0x0008c03e mov r2, r6 | r2 = r6;
0x0008c040 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c042 movs r1, 0x26 | r1 = 0x26;
0x0008c044 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
| label_36:
0x0008c048 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008c04a ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0008c04c ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008c050 cmn r2, r3 |
| if (r2 < r3) {
0x0008c052 bmi.w 0x8c820 | goto label_172;
| }
0x0008c056 ldr r3, [sp, 0xc0] | r3 = var_c0h;
0x0008c058 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008c05a ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008c05c ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x0008c05e lsls r3, r3, 2 | r3 <<= 2;
0x0008c060 rsbs r3, r3, 0 | r3 -= ;
0x0008c062 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_54:
0x0008c064 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008c066 ldrb r3, [r2, 0x12] | r3 = *((r2 + 0x12));
| if (r3 == 0) {
0x0008c068 cbnz r3, 0x8c074 |
0x0008c06a ldr r3, [r2, 0x78] | r3 = *((r2 + 0x78));
0x0008c06c ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008c06e orrs r2, r3 | r2 |= r3;
| if (r2 == r3) {
0x0008c070 beq.w 0x8d0a8 | goto label_173;
| }
| }
| label_96:
0x0008c074 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0008c076 cmp r3, 0 |
| if (r3 != 0) {
0x0008c078 bne.w 0x8c832 | goto label_174;
| }
0x0008c07c ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008c07e cmp r3, 0 |
| if (r3 == 0) {
0x0008c080 beq.w 0x8c82c | goto label_74;
| }
0x0008c084 ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x0008c086 str r2, [sp, 0xd4] | var_d4h = r2;
| label_75:
0x0008c088 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x0008c08a ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008c08c str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x0008c090 b.w 0x8b74a | goto label_21;
| label_64:
0x0008c094 str r3, [sp, 0x8c] | var_8ch = r3;
0x0008c096 b 0x8bbd4 | goto label_24;
| label_156:
0x0008c098 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008c09a ldr r3, [r2] | r3 = *(r2);
0x0008c09c ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0008c09e lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x0008c0a0 itt pl |
| if (r1 < r3) {
0x0008c0a2 movpl r3, 1 | r3 = 1;
| }
| if (r1 < r3) {
0x0008c0a4 strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x0008c0a6 b 0x8bdb0 | goto label_25;
| label_155:
0x0008c0a8 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0008c0aa str r5, [sp, 0x54] | var_54h = r5;
0x0008c0ac str r5, [sp, 0xa4] | var_a4h = r5;
0x0008c0ae str r3, [sp, 0x50] | var_50h = r3;
0x0008c0b0 movs r3, 2 | r3 = 2;
0x0008c0b2 b.w 0x8b862 | goto label_26;
| label_129:
0x0008c0dc ldr.w fp, [pc, 0xb14] | fp = *(0x0008cbf4);
0x0008c0e0 movw sb, 0x869f |
0x0008c0e4 ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008c0e8 movt sb, 1 | sb = 0x1869f;
0x0008c0ec ldrb.w r2, [sl, 0x2b] | r2 = *((sl + 0x2b));
0x0008c0f0 add fp, pc |
0x0008c0f2 str r5, [sp, 0x64] | var_64h = r5;
0x0008c0f4 str.w r8, [sp, 0x70] | __asm ("str.w r8, [var_70h]");
| label_27:
0x0008c0f8 cmp r0, 0 |
| if (r0 <= 0) {
0x0008c0fa ble 0x8c18c | goto label_175;
| }
0x0008c0fc ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008c0fe mov.w r8, 0 | r8 = 0;
0x0008c102 mov r4, r8 | r4 = r8;
0x0008c104 mov r5, r8 | r5 = r8;
0x0008c106 mov r1, r2 | r1 = r2;
0x0008c108 add r7, sp, 0xd8 | r7 += var_d8h;
0x0008c10a subs r6, r3, 4 | r6 = r3 - 4;
0x0008c10c str r7, [sp, 0x48] | var_48h = r7;
| do {
0x0008c10e ldr r3, [r6, 4]! | r3 = *((r6 += 4));
0x0008c112 cmp r3, 0 |
| if (r3 < 0) {
0x0008c114 bge 0x8c17c |
0x0008c116 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0008c11a add.w ip, r3, r5 |
0x0008c11e ldrh.w r3, [ip, 0xa] | r3 = *((ip + 0xa));
0x0008c122 and r3, r3, 0x60 | r3 &= 0x60;
| if (r3 == 0) {
0x0008c126 cbz r3, 0x8c17c | goto label_29;
| }
0x0008c128 ldrh.w r2, [ip, 8] | r2 = *((ip + 8));
| if (r2 == 0) {
0x0008c12c cbz r2, 0x8c17c | goto label_29;
| }
| if (r1 != 0) {
0x0008c12e cbnz r1, 0x8c17c | goto label_29;
| }
0x0008c130 ldr.w r3, [sl, 0x34] | r3 = *((sl + 0x34));
| if (r3 == 0) {
0x0008c134 cbz r3, 0x8c17c | goto label_29;
| }
0x0008c136 ldr r7, [r3] | r7 = *(r3);
0x0008c138 cmp r7, r2 |
| if (r7 < r2) {
0x0008c13a blt 0x8c17c | goto label_29;
| }
0x0008c13c add.w ip, r3, r2, lsl 4 |
0x0008c140 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008c142 ldr r3, [ip, -0x8] | r3 = *((ip - 0x8));
0x0008c146 str r1, [r2] | *(r2) = r1;
0x0008c148 strd r1, r1, [r2, 8] | __asm ("strd r1, r1, [r2, 8]");
0x0008c14c strd r1, r1, [r2, 0x10] | __asm ("strd r1, r1, [r2, 0x10]");
0x0008c150 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008c152 str.w fp, [sp, 0xdc] | __asm ("str.w fp, [var_dch]");
0x0008c154 sub sp, 0x170 |
0x0008c156 str r2, [sp, 0xf0] | var_f0h = r2;
| if (r3 != 0) {
0x0008c158 cbz r3, 0x8c174 |
0x0008c15a mov r1, r3 | r1 = r3;
0x0008c15c ldr r0, [sp, 0x48] | r0 = var_48h;
0x0008c15e bl 0x30f3c | fcn_00030f3c (r0, r1);
0x0008c162 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0008c164 ldrh.w r3, [sp, 0xec] | r3 = var_ech;
| if (r2 == 0) {
0x0008c168 cbnz r2, 0x8c172 |
0x0008c16a bic r3, r3, 2 | r3 = BIT_MASK (r3, 2);
0x0008c16e lsls r3, r3, 0x10 | r3 <<= 0x10;
0x0008c170 lsrs r3, r3, 0x10 | r3 >>= 0x10;
| }
| if (r3 != 0) {
0x0008c172 cbnz r3, 0x8c194 | goto label_176;
| }
| }
0x0008c174 ldrb.w r1, [sl, 0x2b] | r1 = *((sl + 0x2b));
0x0008c178 ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
| }
| label_29:
0x0008c17c adds r4, 1 | r4++;
0x0008c17e adds r5, 0xc | r5 += 0xc;
0x0008c180 cmp r4, r0 |
0x0008c182 blt 0x8c10e |
| } while (r4 < r0);
0x0008c184 mov r2, r1 | r2 = r1;
0x0008c186 cmp.w r8, 0 |
| if (r8 != 0) {
0x0008c18a bne 0x8c0f8 | goto label_27;
| }
| label_175:
0x0008c18c ldr r5, [sp, 0x64] | r5 = var_64h;
0x0008c18e ldr.w r8, [sp, 0x70] | r8 = var_70h;
0x0008c192 b 0x8ba62 | goto label_28;
| label_176:
0x0008c194 str.w sb, [r6] | __asm ("str.w sb, [r6]");
0x0008c198 mov.w r8, 1 | r8 = 1;
0x0008c19c ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008c1a0 ldrb.w r1, [sl, 0x2b] | r1 = *((sl + 0x2b));
0x0008c1a4 b 0x8c17c | goto label_29;
| label_109:
0x0008c1a6 mov.w r8, 0x8000 |
0x0008c1aa movt r8, 0xffff | r8 = 0x-8000;
0x0008c1ae b.w 0x8b796 | goto label_19;
| label_160:
0x0008c1b2 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0008c1b4 ldr r2, [sp, 0x148] | r2 = *(arg_148h);
0x0008c1b6 ldrh r1, [r4, 0x34] | r1 = *((r4 + 0x34));
0x0008c1b8 adds r3, 1 | r3++;
0x0008c1ba cmp r2, 0xb |
0x0008c1bc add r1, r3 | r1 += r3;
0x0008c1be str r1, [r5, 0x2c] | *((r5 + 0x2c)) = r1;
| if (r2 != 0xb) {
0x0008c1c0 bne.w 0x8baea | goto label_30;
| }
0x0008c1c4 ldrb.w r1, [r4, 0x36] | r1 = *((r4 + 0x36));
0x0008c1c8 cmp r1, 5 |
0x0008c1ca itt eq |
| if (r1 != 5) {
0x0008c1cc moveq r1, 1 | r1 = 1;
| }
| if (r1 != 5) {
0x0008c1ce streq r1, [sp, 0xcc] | var_cch = r1;
| }
0x0008c1d0 b 0x8baea | goto label_30;
| label_117:
0x0008c1d2 ldr r5, [sp, 0xac] | r5 = var_ach;
0x0008c1d4 movs r3, 2 | r3 = 2;
0x0008c1d6 ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x0008c1d8 str r5, [sp, 0x54] | var_54h = r5;
0x0008c1da str r2, [sp, 0x50] | var_50h = r2;
0x0008c1dc str r5, [sp, 0xa4] | var_a4h = r5;
0x0008c1de b.w 0x8b862 | goto label_26;
| label_130:
0x0008c1e2 ldr.w r6, [sl, 0x30] | r6 = *((sl + 0x30));
0x0008c1e6 ldr.w r1, [sl] | r1 = *(sl);
0x0008c1ea cmp r6, 0 |
| if (r6 == 0) {
0x0008c1ec beq.w 0x8c984 | goto label_177;
| }
0x0008c1f0 ldr r7, [sp, 0x3c] | r7 = var_3ch;
0x0008c1f2 movs r3, 1 | r3 = 1;
0x0008c1f4 ldr.w sb, [sp, 0x98] | sb = var_98h;
0x0008c1f8 movs r4, 0 | r4 = 0;
0x0008c1fa mov fp, r3 |
| label_31:
0x0008c1fc ldr r1, [r6, 0x14] | r1 = *((r6 + 0x14));
0x0008c1fe cmp r1, 0 |
0x0008c200 itt gt |
| if (r1 <= 0) {
0x0008c202 movgt r3, 0 | r3 = 0;
| }
| if (r1 <= 0) {
0x0008c204 addgt r0, r6, 0x24 | r0 = r6 + 0x24;
| }
| if (r1 > 0) {
0x0008c208 bgt 0x8c22c | goto label_178;
| }
0x0008c20a b 0x8c24c | goto label_179;
| do {
0x0008c20c ldrsh.w r2, [sl, 0x20] | r2 = *((sl + 0x20));
0x0008c210 cmp.w sb, 0 |
0x0008c214 sub.w r2, r2, ip | r2 -= ip;
0x0008c218 clz r2, r2 | r2 &= r2;
0x0008c21c lsr.w r2, r2, 5 | r2 >>= 5;
0x0008c220 it eq |
| if (sb != 0) {
0x0008c222 moveq r2, 0 | r2 = 0;
| }
| if (r2 != 0) {
0x0008c224 cbnz r2, 0x8c238 | goto label_180;
| }
0x0008c226 adds r3, 1 | r3++;
0x0008c228 cmp r3, r1 |
| if (r3 == r1) {
0x0008c22a beq 0x8c24c | goto label_179;
| }
| label_178:
0x0008c22c ldr.w ip, [r0, r3, lsl 3] | offset_5 = r3 << 3;
| ip = *((r0 + offset_5));
0x0008c230 ldr.w r2, [r7, ip, lsl 2] | offset_6 = ip << 2;
| r2 = *((r7 + offset_6));
0x0008c234 cmp r2, 0 |
0x0008c236 blt 0x8c20c |
| } while (r2 < 0);
| label_180:
0x0008c238 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0008c23a movs r4, 1 | r4 = 1;
0x0008c23c ldr.w r0, [sl] | r0 = *(sl);
0x0008c240 blx 0x8540 | r0 = fcn_00008540 ();
0x0008c244 cmp r0, 0 |
0x0008c246 it eq |
| if (r0 != 0) {
0x0008c248 moveq fp, 2 |
| }
| label_179:
0x0008c24c ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x0008c24e cmp r6, 0 |
| if (r6 != 0) {
0x0008c250 bne 0x8c1fc | goto label_31;
| }
0x0008c252 ldr.w r0, [sl, 0x3c] | r0 = *((sl + 0x3c));
0x0008c256 mov r2, r6 | r2 = r6;
0x0008c258 ldr.w r1, [sl] | r1 = *(sl);
0x0008c25c str.w fp, [sp, 0x70] | __asm ("str.w fp, [var_70h]");
0x0008c260 adds r0, 0x38 | r0 += 0x38;
0x0008c262 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x0008c266 ldr r7, [r0, 8] | r7 = *((r0 + 8));
| if (r7 == 0) {
0x0008c268 cbz r7, 0x8c288 | goto label_181;
| }
| do {
| label_60:
0x0008c26a ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x0008c26c mov r1, r7 | r1 = r7;
0x0008c26e ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008c270 mov r0, sl | r0 = sl;
0x0008c272 bl 0x1739c | r0 = fcn_0001739c (r0, r1, r2, r3, r4);
| if (r0 != 0) {
0x0008c276 cbz r0, 0x8c282 |
0x0008c278 ldrb r3, [r7, 0x1a] | r3 = *((r7 + 0x1a));
0x0008c27a cmp r3, 0 |
| if (r3 != 0) {
0x0008c27c bne.w 0x8c9a0 | goto label_182;
| }
0x0008c280 movs r4, 1 | r4 = 1;
| }
0x0008c282 ldr r7, [r7, 0xc] | r7 = *((r7 + 0xc));
0x0008c284 cmp r7, 0 |
0x0008c286 bne 0x8c26a |
| } while (r7 != 0);
| label_181:
0x0008c288 cmp r4, 0 |
| if (r4 != 0) {
0x0008c28a bne.w 0x8ba8a | goto label_32;
| }
0x0008c28e b.w 0x8ba86 | goto label_33;
| label_150:
0x0008c292 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c294 ldr r3, [r0] | r3 = *(r0);
0x0008c296 ldr r4, [r3, 0x20] | r4 = *((r3 + 0x20));
0x0008c298 and r4, r4, 0x4000 | r4 &= 0x4000;
0x0008c29c cmp r4, 0 |
| if (r4 == 0) {
0x0008c29e beq.w 0x8bc80 | goto label_34;
| }
0x0008c2a2 ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x0008c2a6 cmp r3, 0 |
| if (r3 != 0) {
0x0008c2a8 bne.w 0x8bc7e | goto label_35;
| }
0x0008c2ac mov r1, sl | r1 = sl;
0x0008c2ae bl 0x24a84 | r0 = fcn_00024a84 (r0, r1);
0x0008c2b2 mov r4, r0 | r4 = r0;
0x0008c2b4 b 0x8bc80 | goto label_34;
| label_170:
0x0008c2b6 cmp r3, 0 |
| if (r3 < 0) {
0x0008c2b8 blt.w 0x8caae | goto label_183;
| }
0x0008c2bc ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008c2be ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008c2c0 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x0008c2c2 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_67:
0x0008c2c6 ldr r0, [sp, 0xa0] | r0 = var_a0h;
0x0008c2c8 bl 0x73e14 | fcn_00073e14 (r0, r1);
0x0008c2cc b 0x8c048 | goto label_36;
| label_51:
0x0008c2ce ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008c2d2 tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x0008c2d6 beq 0x8c2e2 |
0x0008c2d8 ldr r1, [sp, 0x9c] | r1 = var_9ch;
0x0008c2da mov r2, sl | r2 = sl;
0x0008c2dc ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c2de bl 0x69c20 | fcn_00069c20 (r0, r1, r2, r3);
| }
| label_168:
0x0008c2e2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008c2e4 mov r1, sl | r1 = sl;
0x0008c2e6 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0008c2e8 ldr r5, [sp, 0x50] | r5 = var_50h;
0x0008c2ea str r3, [sp, 0x1c] | var_1ch = r3;
0x0008c2ec ldr r3, [sp, 0x98] | r3 = var_98h;
0x0008c2ee str r2, [sp, 4] | var_4h = r2;
0x0008c2f0 ldr r2, [sp, 0x78] | r2 = var_78h;
0x0008c2f2 subs r4, r3, 0 | r4 = r3 - 0;
0x0008c2f4 strd fp, r3, [sp, 8] | __asm ("strd fp, r3, [var_8h]");
0x0008c2f8 ldr r3, [sp, 0x148] | r3 = *(arg_148h);
0x0008c2fa it ne |
| if (r4 == r3) {
0x0008c2fc movne r4, 1 | r4 = 1;
| }
0x0008c2fe str r2, [sp] | *(sp) = r2;
0x0008c300 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c302 ldr r2, [sp, 0x88] | r2 = var_88h;
0x0008c304 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008c306 str.w sb, [sp, 0x14] | __asm ("str.w sb, [var_14h]");
0x0008c30a str r3, [sp, 0x10] | var_10h = r3;
0x0008c30c movs r3, 0 | r3 = 0;
0x0008c30e str r3, [sp, 0x20] | var_20h = r3;
0x0008c310 add r3, sp, 0xcc | r3 += var_cch;
0x0008c312 str r3, [sp, 0x18] | var_18h = r3;
0x0008c314 mov r3, r5 | r3 = r5;
0x0008c316 bl 0x8e150 | fcn_0008e150 (r0, r1, r2, r3, r4, r5, r6);
0x0008c31a ldr r2, [sp, 0xcc] | r2 = var_cch;
0x0008c31c cmp r2, 0 |
0x0008c31e ite eq |
| if (r2 != 0) {
0x0008c320 moveq r3, r4 | r3 = r4;
| }
| if (r2 == 0) {
0x0008c322 orrne r3, r4, 1 | r3 = r4 | 1;
| }
0x0008c324 lsls r1, r0, 0xc | r1 = r0 << 0xc;
| if (r3 != 0) {
0x0008c326 cbz r3, 0x8c342 |
0x0008c328 ldr r1, [sp, 0x54] | r1 = var_54h;
0x0008c32a cmp r1, 0 |
| if (r1 == 0) {
0x0008c32c beq.w 0x8d062 | goto label_184;
| }
0x0008c330 ldr r1, [sp, 0x80] | r1 = var_80h;
0x0008c332 mov r3, sb | r3 = sb;
0x0008c334 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c336 mov r2, r5 | r2 = r5;
0x0008c338 strd r8, r1, [sp] | __asm ("strd r8, r1, [sp]");
0x0008c33c movs r1, 0x1b | r1 = 0x1b;
0x0008c33e bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
| }
| label_92:
0x0008c342 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0008c344 cmp r3, 0 |
| if (r3 != 0) {
0x0008c346 bne.w 0x8cf24 | goto label_185;
| }
| label_83:
0x0008c34a ldr r3, [sp, 0x88] | r3 = var_88h;
0x0008c34c ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x0008c350 ldr.w r1, [sl, 8] | r1 = *((sl + 8));
0x0008c354 str r3, [sp, 4] | var_4h = r3;
0x0008c356 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0008c358 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c35a str r3, [sp] | *(sp) = r3;
0x0008c35c mov.w r3, -1 | r3 = -1;
0x0008c360 str r3, [sp, 8] | var_8h = r3;
0x0008c362 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0008c364 bl 0x757c8 | fcn_000757c8 (r0, r1, r2, r3, r4, r5, r6);
0x0008c368 ldr r3, [sp, 0xb8] | r3 = var_b8h;
0x0008c36a cmp r3, 0 |
| if (r3 != 0) {
0x0008c36c bne.w 0x8cf12 | goto label_186;
| }
| label_82:
0x0008c370 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0008c372 cmp r3, 1 |
0x0008c374 it gt |
| if (r3 <= 1) {
0x0008c376 orrgt r4, r4, 1 | r4 |= 1;
| }
0x0008c37a cmp r4, 0 |
| if (r4 != 0) {
0x0008c37c bne.w 0x8cf00 | goto label_187;
| }
| label_81:
0x0008c380 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0008c382 cmp r3, 0 |
| if (r3 != 0) {
0x0008c384 bne.w 0x8ce46 | goto label_188;
| }
0x0008c388 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008c38a cmp r3, 2 |
| if (r3 == 2) {
0x0008c38c beq.w 0x8cbd0 | goto label_189;
| }
0x0008c390 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0008c392 ldr r1, [sp, 0x70] | r1 = var_70h;
0x0008c394 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c396 str r3, [sp, 4] | var_4h = r3;
0x0008c398 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0008c39a strd r1, r1, [sp, 0xc] | __asm ("strd r1, r1, [var_ch]");
0x0008c39e movs r1, 4 | r1 = 4;
0x0008c3a0 str r1, [sp, 8] | var_8h = r1;
0x0008c3a2 mov r1, sl | r1 = sl;
0x0008c3a4 str r3, [sp] | *(sp) = r3;
0x0008c3a6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c3a8 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0008c3aa bl 0x2e09c | fcn_0002e09c (r0, r1, r2, r3, r4, r5, r6);
0x0008c3ae b 0x8bfea | goto label_37;
| label_138:
0x0008c3b0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c3b2 ldr.w r2, [sl] | r2 = *(sl);
0x0008c3b6 ldr.w r3, [r0, 0xf8] | r3 = *((r0 + 0xf8));
0x0008c3ba str r0, [sp, 0xd4] | var_d4h = r0;
0x0008c3bc str.w r2, [r0, 0xf8] | __asm ("str.w r2, [r0, 0xf8]");
0x0008c3c0 str r3, [sp, 0xd0] | var_d0h = r3;
0x0008c3c2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008c3c4 cmp r3, 0 |
| if (r3 != 0) {
0x0008c3c6 bne.w 0x8bba8 | goto label_38;
| }
0x0008c3ca ldrd r2, r3, [sp, 0x4c] | __asm ("ldrd r2, r3, [var_4ch]");
0x0008c3ce mov r1, sl | r1 = sl;
0x0008c3d0 bl 0x773a8 | fcn_000773a8 (r0, r1, r2, r3);
| label_139:
0x0008c3d4 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0008c3d6 add r0, sp, 0xf4 | r0 += var_f4h;
0x0008c3d8 bl 0x3119c | r0 = fcn_0003119c (r0, r1);
0x0008c3dc cmp r0, 0 |
| if (r0 != 0) {
0x0008c3de bne.w 0x8b73a | goto label_4;
| }
0x0008c3e2 ldrb.w r1, [sl, 0x2b] | r1 = *((sl + 0x2b));
0x0008c3e6 b.w 0x8bba8 | goto label_38;
| label_136:
0x0008c3ea ldr r5, [sp, 0x98] | r5 = var_98h;
0x0008c3ec cmp r5, 0 |
| if (r5 != 0) {
0x0008c3ee bne.w 0x8d076 | goto label_190;
| }
0x0008c3f2 mov r3, fp | r3 = fp;
0x0008c3f4 str r5, [sp, 0xb4] | var_b4h = r5;
0x0008c3f6 str.w fp, [sp, 0x64] | __asm ("str.w fp, [var_64h]");
0x0008c3fa b.w 0x8bb8e | goto label_39;
| label_135:
0x0008c3fe movs r4, 0 | r4 = 0;
0x0008c400 mov fp, r4 |
0x0008c402 str r4, [sp, 0xb4] | var_b4h = r4;
0x0008c404 str r4, [sp, 0x9c] | var_9ch = r4;
0x0008c406 str r4, [sp, 0x64] | var_64h = r4;
0x0008c408 b.w 0x8bb98 | goto label_40;
| label_134:
0x0008c40c ldr r0, [sp, 0x94] | r0 = var_94h;
0x0008c40e mov r2, r5 | r2 = r5;
0x0008c410 movs r1, 1 | r1 = 1;
0x0008c412 blx 0x839c | fcn_0000839c ();
0x0008c416 b.w 0x8bb1e | goto label_41;
| label_142:
0x0008c41a ldr r5, [sp, 0x40] | r5 = var_40h;
0x0008c41c mov r3, r4 | r3 = r4;
0x0008c41e ldr r2, [sp, 0x44] | r2 = var_44h;
0x0008c420 movs r1, 0x4b | r1 = 0x4b;
0x0008c422 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008c426 mov r0, r5 | r0 = r5;
0x0008c428 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c42c ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008c42e ldrd r5, r3, [r5, 0x6c] | __asm ("ldrd r5, r3, [r5, 0x6c]");
0x0008c432 ldr r6, [r1, 0x28] | r6 = *((r1 + 0x28));
0x0008c434 cmp r5, r3 |
0x0008c436 add.w r2, r6, 1 | r2 = r6 + 1;
0x0008c43a str r2, [r1, 0x28] | *((r1 + 0x28)) = r2;
| if (r5 >= r3) {
0x0008c43c bge.w 0x8d04e | goto label_191;
| }
0x0008c440 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c442 add.w r3, r5, r5, lsl 2 | r3 = r5 + (r5 << 2);
0x0008c446 ldr r7, [sp, 0x44] | r7 = var_44h;
0x0008c448 adds r2, r5, 1 | r2 = r5 + 1;
0x0008c44a lsls r3, r3, 2 | r3 <<= 2;
0x0008c44c ldr r1, [r0, 0x68] | r1 = *((r0 + 0x68));
0x0008c44e str r2, [r0, 0x6c] | *((r0 + 0x6c)) = r2;
0x0008c450 movs r0, 0x76 | r0 = 0x76;
0x0008c452 adds r2, r1, r3 | r2 = r1 + r3;
0x0008c454 str r6, [r2, 4] | *((r2 + 4)) = r6;
0x0008c456 strd r7, r4, [r2, 8] | __asm ("strd r7, r4, [r2, 8]");
0x0008c45a str r7, [r2, 0x10] | *((r2 + 0x10)) = r7;
0x0008c45c str r0, [r1, r3] | *((r1 + r3)) = r0;
| label_91:
0x0008c45e ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0008c460 cmp r3, 0 |
| if (r3 == 0) {
0x0008c462 beq.w 0x8d042 | goto label_192;
| }
0x0008c466 mov.w r8, 0 | r8 = 0;
0x0008c46a str.w r8, [sp, 0x90] | __asm ("str.w r8, [var_90h]");
0x0008c46e str.w r8, [sp, 0x84] | __asm ("str.w r8, [var_84h]");
| label_95:
0x0008c472 movs r3, 0x10 | r3 = 0x10;
0x0008c474 mov r2, sb | r2 = sb;
0x0008c476 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0008c478 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c47a bl 0x67af8 | fcn_00067af8 (r0, r1, r2, r3);
0x0008c47e movs r3, 0 | r3 = 0;
0x0008c480 movs r2, 1 | r2 = 1;
0x0008c482 str r3, [sp, 0xb8] | var_b8h = r3;
0x0008c484 str r2, [sp, 0x48] | var_48h = r2;
0x0008c486 str r3, [sp, 0xa0] | var_a0h = r3;
| label_45:
0x0008c488 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008c48c ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x0008c490 beq.w 0x8d08e | goto label_193;
| }
| label_46:
0x0008c494 ldr r3, [sp, 0x84] | r3 = var_84h;
0x0008c496 cmp r3, 0 |
0x0008c498 str r3, [sp, 0x80] | var_80h = r3;
0x0008c49a itt gt |
| if (r3 <= 0) {
0x0008c49c ldrgt r7, [sp, 0x54] | r7 = var_54h;
| }
| if (r3 <= 0) {
0x0008c49e movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x0008c4a0 ble 0x8c4c0 | goto label_194;
| }
| do {
0x0008c4a2 ldr r2, [sp, 0x90] | r2 = var_90h;
0x0008c4a4 mov r1, sl | r1 = sl;
0x0008c4a6 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0008c4a8 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c4aa add r2, r4 | r2 += r4;
0x0008c4ac ldrsh.w r3, [r3, r4, lsl 1] | offset_7 = r4 << 1;
| r3 = *((r3 + offset_7));
0x0008c4b0 adds r4, 1 | r4++;
0x0008c4b2 str r2, [sp] | *(sp) = r2;
0x0008c4b4 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c4b6 bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
0x0008c4ba ldr r3, [sp, 0x84] | r3 = var_84h;
0x0008c4bc cmp r4, r3 |
0x0008c4be bne 0x8c4a2 |
| } while (r4 != r3);
| label_194:
0x0008c4c0 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008c4c2 cmp r3, 0 |
| if (r3 == 0) {
0x0008c4c4 beq.w 0x8ca60 | goto label_195;
| }
0x0008c4c8 cmp r5, 0 |
| if (r5 != 0) {
0x0008c4ca bne.w 0x8ca30 | goto label_196;
| }
| label_65:
0x0008c4ce ldr.w r8, [sp, 0x90] | r8 = var_90h;
0x0008c4d2 b.w 0x8bc36 | goto label_42;
| label_169:
0x0008c4d6 movs r3, 0 | r3 = 0;
0x0008c4d8 ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x0008c4da str r3, [sp] | *(sp) = r3;
0x0008c4dc movs r1, 0x56 | r1 = 0x56;
0x0008c4de ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c4e0 movs r3, 1 | r3 = 1;
0x0008c4e2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c4e6 b 0x8bff2 | goto label_43;
| label_147:
0x0008c4e8 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008c4ea str r3, [sp, 0x6c] | var_6ch = r3;
0x0008c4ec b.w 0x8bc6c | goto label_44;
| label_144:
0x0008c4f0 mov r3, r2 | r3 = r2;
0x0008c4f2 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0008c4f4 adds r7, r3, r2 | r7 = r3 + r2;
0x0008c4f6 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0008c4f8 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008c4fa cmp r3, 2 |
0x0008c4fc it eq |
| if (r3 == 2) {
0x0008c4fe ldrsheq r3, [sl, 0x22] | __asm ("ldrsheq r3, [sl, 0x22]");
| }
0x0008c502 ldr r6, [r2, 0x28] | r6 = *((r2 + 0x28));
0x0008c504 it eq |
| if (r3 != 2) {
0x0008c506 addeq r7, r7, r3 | r7 += r3;
| }
0x0008c508 adds r3, r6, 1 | r3 = r6 + 1;
0x0008c50a str r3, [r2, 0x28] | *((r2 + 0x28)) = r3;
0x0008c50c ldr r3, [sp, 0x54] | r3 = var_54h;
| if (r3 != 0) {
0x0008c50e cbz r3, 0x8c526 |
0x0008c510 ldr r2, [sp, 0x90] | r2 = var_90h;
0x0008c512 movs r1, 0x4b | r1 = 0x4b;
0x0008c514 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0008c516 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c518 adds r3, r2, r3 | r3 = r2 + r3;
0x0008c51a subs r3, 1 | r3--;
0x0008c51c str r3, [sp] | *(sp) = r3;
0x0008c51e mov r3, r2 | r3 = r2;
0x0008c520 movs r2, 0 | r2 = 0;
0x0008c522 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x0008c526 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008c528 ldrd r5, r3, [r3, 0x6c] | __asm ("ldrd r5, r3, [r3, 0x6c]");
0x0008c52c cmp r5, r3 |
| if (r5 >= r3) {
0x0008c52e bge.w 0x8ca9a | goto label_197;
| }
0x0008c532 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c534 add.w r3, r5, r5, lsl 2 | r3 = r5 + (r5 << 2);
0x0008c538 adds r2, r5, 1 | r2 = r5 + 1;
0x0008c53a lsls r3, r3, 2 | r3 <<= 2;
0x0008c53c mov.w lr, 0 | lr = 0;
0x0008c540 ldr r1, [r0, 0x68] | r1 = *((r0 + 0x68));
0x0008c542 mov.w ip, 0x76 |
0x0008c546 str r2, [r0, 0x6c] | *((r0 + 0x6c)) = r2;
0x0008c548 adds r2, r1, r3 | r2 = r1 + r3;
0x0008c54a strd r6, r7, [r2, 4] | __asm ("strd r6, r7, [r2, 4]");
0x0008c54e strd lr, lr, [r2, 0xc] | __asm ("strd lr, lr, [r2, 0xc]");
0x0008c552 str.w ip, [r1, r3] | __asm ("str.w ip, [r1, r3]");
0x0008c554 stm r0!, {r0, r1} | *(r0!) = r0;
| *((r0! + 4)) = r1;
| label_66:
0x0008c556 ldr r3, [sp, 0x54] | r3 = var_54h;
| if (r3 != 0) {
0x0008c558 cbz r3, 0x8c58c |
0x0008c55a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c55c mov r1, r3 | r1 = r3;
0x0008c55e bl 0x2bec8 | r0 = fcn_0002bec8 (r0, r1);
0x0008c562 mov r2, r0 | r2 = r0;
| if (r0 == 0) {
0x0008c564 cbz r0, 0x8c58c | goto label_100;
| }
0x0008c566 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008c568 strh r7, [r0, 8] | *((r0 + 8)) = r7;
0x0008c56a ldr r0, [r3] | r0 = *(r3);
0x0008c56c ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0008c570 cmp r3, 0 |
| if (r3 != 0) {
0x0008c572 bne.w 0x8d11a | goto label_198;
| }
0x0008c576 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c578 movs r1, 0x14 | r1 = 0x14;
0x0008c57a ldr r3, [r0, 0x6c] | r3 = *((r0 + 0x6c));
0x0008c57c mul r3, r1, r3 | r3 = r1 * r3;
0x0008c580 ldr r1, [r0, 0x68] | r1 = *((r0 + 0x68));
0x0008c582 subs r3, 0x14 | r3 -= 0x14;
0x0008c584 add r3, r1 | r3 += r1;
0x0008c586 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x0008c588 movs r2, 0xf8 | r2 = 0xf8;
0x0008c58a strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
| label_100:
0x0008c58c ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008c58e cmp r3, 0 |
| if (r3 != 0) {
0x0008c590 bne.w 0x8d0f6 | goto label_199;
| }
| label_90:
0x0008c594 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008c596 ldr r2, [sp, 0x98] | r2 = var_98h;
0x0008c598 ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
0x0008c59a orrs r3, r2 | r3 |= r2;
0x0008c59c uxtb r3, r3 | r3 = (int8_t) r3;
0x0008c59e cmp r3, 0 |
| if (r3 != 0) {
0x0008c5a0 bne.w 0x8d0f0 | goto label_200;
| }
0x0008c5a4 ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0008c5a6 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x0008c5a8 orrs r3, r2 | r3 |= r2;
0x0008c5aa ldr r2, [sp, 0x70] | r2 = var_70h;
0x0008c5ac orrs r3, r2 | r3 |= r2;
0x0008c5ae ite ne |
| if (r3 == r2) {
0x0008c5b0 movne r3, 4 | r3 = 4;
| }
| if (r3 != r2) {
0x0008c5b2 moveq r3, 0xc | r3 = 0xc;
| }
| label_98:
0x0008c5b4 str r3, [sp, 8] | var_8h = r3;
0x0008c5b6 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0008c5b8 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0008c5ba ldr r1, [sp, 0x38] | r1 = var_38h;
0x0008c5bc str r3, [sp, 0xc] | var_ch = r3;
0x0008c5be movs r3, 0 | r3 = 0;
0x0008c5c0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c5c2 strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x0008c5c6 bl 0x707d8 | fcn_000707d8 (r0, r1, r2, r3, r4, r5, r6);
0x0008c5ca str r0, [sp, 0xa0] | var_a0h = r0;
0x0008c5cc cmp r0, 0 |
| if (r0 == 0) {
0x0008c5ce beq.w 0x8d0e0 | goto label_201;
| }
0x0008c5d2 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0008c5d4 add r3, sp, 0x114 | r3 += var_114h;
0x0008c5d6 ldr r1, [r2, 0x1c] | r1 = *((r2 + 0x1c));
0x0008c5d8 ldr r0, [r2, 0x18] | r0 = *((r2 + 0x18));
0x0008c5da stm r3!, {r0, r1} | *(r3!) = r0;
| *((r3! + 4)) = r1;
0x0008c5dc ldrb.w r1, [r2, 0x32] | r1 = *((r2 + 0x32));
0x0008c5e0 ldrb.w r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x0008c5e4 cmp r1, 1 |
0x0008c5e6 str r1, [sp, 0x48] | var_48h = r1;
0x0008c5e8 and r3, r3, 1 | r3 &= 1;
0x0008c5ec str r3, [sp, 0xb8] | var_b8h = r3;
| if (r1 == 1) {
0x0008c5ee beq.w 0x8c488 | goto label_45;
| }
0x0008c5f2 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008c5f4 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0008c5f6 cmp r3, 0 |
0x0008c5f8 it eq |
| if (r3 != 0) {
0x0008c5fa moveq r3, r2 | r3 = r2;
| }
0x0008c5fc cmp r1, 2 |
0x0008c5fe mov.w r2, 1 | r2 = 1;
0x0008c602 strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
| if (r1 == 2) {
0x0008c604 beq.w 0x8d0ba | goto label_202;
| }
| label_97:
0x0008c608 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008c60c ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 != r3) {
0x0008c610 bne.w 0x8c494 | goto label_46;
| }
0x0008c614 str r3, [sp] | *(sp) = r3;
0x0008c616 movs r1, 0x87 | r1 = 0x87;
0x0008c618 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c61a mov r3, fp | r3 = fp;
0x0008c61c ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c61e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c622 ldr r7, [sp, 0x48] | r7 = var_48h;
0x0008c624 cmp r7, 0 |
| if (r7 != 0) {
0x0008c626 bne.w 0x8d09c | goto label_203;
| }
0x0008c62a ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008c62c mov r3, r4 | r3 = r4;
0x0008c62e ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c630 ldr r2, [r1, 0x2c] | r2 = *((r1 + 0x2c));
0x0008c632 adds r2, 1 | r2++;
0x0008c634 str r2, [r1, 0x2c] | *((r1 + 0x2c)) = r2;
0x0008c636 ldr r1, [sp, 0xbc] | r1 = var_bch;
0x0008c638 str r2, [r1] | *(r1) = r2;
0x0008c63a mov r2, r6 | r2 = r6;
0x0008c63c movs r1, 0x80 | r1 = 0x80;
0x0008c63e str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008c642 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c646 str r7, [sp, 0x80] | var_80h = r7;
| label_146:
0x0008c648 ldrd r2, r3, [sp, 0x44] | __asm ("ldrd r2, r3, [var_44h]");
0x0008c64c subs r3, 2 | r3 -= 2;
0x0008c64e it ne |
| if (r3 == 2) {
0x0008c650 movne r3, 1 | r3 = 1;
| }
0x0008c652 cmp r2, 0 |
0x0008c654 it ne |
| if (r2 == 0) {
0x0008c656 movne r3, 0 | r3 = 0;
| }
0x0008c658 cmp r3, 0 |
| if (r3 != 0) {
0x0008c65a bne.w 0x8d126 | goto label_204;
| }
| label_101:
0x0008c65e ldr r3, [sp, 0x68] | r3 = var_68h;
0x0008c660 cmp r3, 2 |
| if (r3 != 2) {
0x0008c662 beq 0x8c6a8 |
0x0008c664 ldr r3, [sp, 0x48] | r3 = var_48h;
| if (r3 != 0) {
0x0008c666 cbz r3, 0x8c690 |
0x0008c668 ldr r3, [sp, 0x114] | r3 = var_114h;
0x0008c66a cmp r3, 0 |
| if (r3 >= 0) {
0x0008c66c blt 0x8c678 |
0x0008c66e ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x0008c670 ldr r1, [sp, 0x94] | r1 = var_94h;
0x0008c672 subs r3, r3, r2 | r3 -= r2;
0x0008c674 movs r2, 0 | r2 = 0;
0x0008c676 strb r2, [r1, r3] | *((r1 + r3)) = r2;
| }
0x0008c678 ldr r3, [sp, 0x118] | r3 = var_118h;
0x0008c67a cmp r3, 0 |
| if (r3 >= 0) {
0x0008c67c blt 0x8c688 |
0x0008c67e ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x0008c680 ldr r1, [sp, 0x94] | r1 = var_94h;
0x0008c682 subs r3, r3, r2 | r3 -= r2;
0x0008c684 movs r2, 0 | r2 = 0;
0x0008c686 strb r2, [r1, r3] | *((r1 + r3)) = r2;
| }
0x0008c688 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008c68a cmp r3, 2 |
| if (r3 == 2) {
0x0008c68c beq.w 0x8cfaa | goto label_205;
| }
| }
| label_86:
0x0008c690 ldr r3, [sp, 0x94] | r3 = var_94h;
0x0008c692 movs r2, 0x71 | r2 = 0x71;
0x0008c694 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c696 mov r1, sl | r1 = sl;
0x0008c698 str r3, [sp, 4] | var_4h = r3;
0x0008c69a ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0008c69c str r3, [sp] | *(sp) = r3;
0x0008c69e movs r3, 0 | r3 = 0;
0x0008c6a0 strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [var_8h]");
0x0008c6a4 bl 0x2fe28 | fcn_0002fe28 (r0, r1, r2, r3, r4, r5, r6);
| }
0x0008c6a8 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008c6aa cmp r3, 0 |
| if (r3 != 0) {
0x0008c6ac bne.w 0x8c914 | goto label_206;
| }
0x0008c6b0 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008c6b2 ldr r4, [sp, 0x44] | r4 = var_44h;
0x0008c6b4 orrs r3, r4 | r3 |= r4;
0x0008c6b6 mov r3, sb | r3 = sb;
| if (r3 == r4) {
0x0008c6b8 beq.w 0x8c8b2 | goto label_207;
| }
0x0008c6bc ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008c6be ldr r7, [sp, 0x40] | r7 = var_40h;
0x0008c6c0 ldr r2, [r1, 0x38] | r2 = *((r1 + 0x38));
0x0008c6c2 mov r0, r7 | r0 = r7;
0x0008c6c4 subs r5, r2, 1 | r5 = r2 - 1;
0x0008c6c6 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008c6c8 str r5, [r1, 0x38] | *((r1 + 0x38)) = r5;
0x0008c6ca movs r1, 0x23 | r1 = 0x23;
0x0008c6cc str r2, [sp] | *(sp) = r2;
0x0008c6ce mov r2, r6 | r2 = r6;
0x0008c6d0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c6d4 ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x0008c6d6 str r3, [sp, 0x6c] | var_6ch = r3;
0x0008c6d8 cmp r4, 0 |
| if (r4 == 0) {
0x0008c6da beq.w 0x8c884 | goto label_208;
| }
0x0008c6de ldr r3, [sp, 0x68] | r3 = var_68h;
0x0008c6e0 cmp r3, 2 |
| if (r3 == 2) {
0x0008c6e2 beq.w 0x8c876 | goto label_209;
| }
0x0008c6e6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008c6e8 cmp r3, 0 |
| if (r3 == 0) {
0x0008c6ea beq.w 0x8c854 | goto label_210;
| }
0x0008c6ee ldr r3, [sp, 0x84] | r3 = var_84h;
0x0008c6f0 cmp r3, 0 |
0x0008c6f2 it gt |
| if (r3 <= 0) {
0x0008c6f4 ldrgt r4, [sp, 0x48] | r4 = var_48h;
| }
| if (r3 <= 0) {
0x0008c6f6 ble 0x8c712 | goto label_211;
| }
| do {
0x0008c6f8 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0008c6fa mov r2, r6 | r2 = r6;
0x0008c6fc ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c6fe movs r1, 0x5e | r1 = 0x5e;
0x0008c700 add r3, r4 | r3 += r4;
0x0008c702 str r3, [sp] | *(sp) = r3;
0x0008c704 mov r3, r4 | r3 = r4;
0x0008c706 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c70a ldr r3, [sp, 0x84] | r3 = var_84h;
0x0008c70c adds r4, 1 | r4++;
0x0008c70e cmp r4, r3 |
0x0008c710 bne 0x8c6f8 |
| } while (r4 != r3);
| label_211:
0x0008c712 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0008c714 movs r1, 0x1b | r1 = 0x1b;
0x0008c716 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c718 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c71a str r3, [sp] | *(sp) = r3;
0x0008c71c ldr r3, [sp, 0x84] | r3 = var_84h;
0x0008c71e str r3, [sp, 4] | var_4h = r3;
0x0008c720 mov r3, r5 | r3 = r5;
0x0008c722 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0008c726 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008c728 cmp r3, 0 |
| if (r3 == 0) {
0x0008c72a beq.w 0x8c87e | goto label_212;
| }
| label_55:
0x0008c72e mov sb, r5 | sb = r5;
| label_94:
0x0008c730 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0008c732 movs r1, 0x5e | r1 = 0x5e;
0x0008c734 ldr r3, [sp, 0x74] | r3 = var_74h;
0x0008c736 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c738 str r2, [sp] | *(sp) = r2;
0x0008c73a mov r2, r6 | r2 = r6;
0x0008c73c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c740 b.w 0x8bc5e | goto label_47;
| label_143:
0x0008c744 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008c746 strd r3, r3, [sp, 0x80] | __asm ("strd r3, r3, [var_80h]");
0x0008c74a b.w 0x8bbf2 | goto label_48;
| label_166:
0x0008c74e ldr r1, [sp, 0x9c] | r1 = var_9ch;
0x0008c750 mov r2, sl | r2 = sl;
0x0008c752 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c754 bl 0x69c20 | fcn_00069c20 (r0, r1, r2, r3);
0x0008c758 b 0x8bfda | goto label_49;
| label_164:
0x0008c75a ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008c75c lsr.w r2, r3, r5 | r2 = r3 >> r5;
0x0008c760 ands r2, r2, 1 | r2 &= 1;
| if (r2 != r2) {
0x0008c764 bne.w 0x8bf92 | goto label_50;
| }
0x0008c768 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c76a mov r3, r4 | r3 = r4;
0x0008c76c movs r1, 0x4b | r1 = 0x4b;
0x0008c76e str r2, [sp] | *(sp) = r2;
0x0008c770 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c774 ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
| label_165:
0x0008c778 mov r4, r7 | r4 = r7;
0x0008c77a b.w 0x8bf10 | goto label_23;
| label_167:
0x0008c77e ldr r4, [sp, 0x40] | r4 = var_40h;
0x0008c780 mov r1, sl | r1 = sl;
0x0008c782 ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x0008c784 mov r0, r4 | r0 = r4;
0x0008c786 bl 0x36b24 | fcn_00036b24 (r0, r1, r2);
0x0008c78a ldr r3, [sp, 0x148] | r3 = *(arg_148h);
0x0008c78c movs r2, 0x81 | r2 = 0x81;
0x0008c78e ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x0008c790 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c792 strd fp, r3, [sp, 8] | __asm ("strd fp, r3, [var_8h]");
0x0008c796 movs r3, 1 | r3 = 1;
0x0008c798 str r3, [sp] | *(sp) = r3;
0x0008c79a str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x0008c79e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008c7a0 str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h]");
0x0008c7a4 bl 0x8da60 | fcn_0008da60 (r0, r1, r2, r3, r4, r5, r6);
0x0008c7a8 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0008c7aa cmp r3, 2 |
| if (r3 == 2) {
0x0008c7ac beq.w 0x8bfea | goto label_37;
| }
0x0008c7b0 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008c7b2 cmp r3, 0 |
| if (r3 == 0) {
0x0008c7b4 beq.w 0x8c9e6 | goto label_213;
| }
0x0008c7b8 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0008c7ba movs r1, 0x1b | r1 = 0x1b;
0x0008c7bc ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c7be mov r0, r4 | r0 = r4;
0x0008c7c0 strd r8, r3, [sp] | __asm ("strd r8, r3, [sp]");
0x0008c7c4 mov r3, sb | r3 = sb;
0x0008c7c6 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
| label_63:
0x0008c7ca ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008c7ce cmp r0, 0 |
| if (r0 <= 0) {
0x0008c7d0 ble.w 0x8c2ce | goto label_51;
| }
0x0008c7d4 ldr r4, [sp, 0x9c] | r4 = var_9ch;
0x0008c7d6 movs r5, 0 | r5 = 0;
0x0008c7d8 ldr r7, [sp, 0xac] | r7 = var_ach;
0x0008c7da b 0x8c7ec | goto label_214;
| label_52:
0x0008c7dc lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 >= r3) {
0x0008c7de bmi 0x8c7e2 |
| label_53:
0x0008c7e0 adds r4, 1 | r4++;
| }
0x0008c7e2 adds r7, 1 | r7++;
0x0008c7e4 adds r5, 0xc | r5 += 0xc;
0x0008c7e6 cmp r7, r0 |
| if (r7 >= r0) {
0x0008c7e8 bge.w 0x8c2ce | goto label_51;
| }
| label_214:
0x0008c7ec ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0008c7f0 add r3, r5 | r3 += r5;
0x0008c7f2 ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x0008c7f4 tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x0008c7f8 bne 0x8c7dc | goto label_52;
| }
0x0008c7fa ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008c7fc ldr.w r3, [r3, r7, lsl 2] | offset_8 = r7 << 2;
| r3 = *((r3 + offset_8));
0x0008c800 cmp r3, 0 |
| if (r3 >= 0) {
0x0008c802 bge 0x8c7e0 | goto label_53;
| }
0x0008c804 ldrsh.w r3, [sl, 0x20] | r3 = *((sl + 0x20));
0x0008c808 cmp r3, r7 |
| if (r3 == r7) {
0x0008c80a beq 0x8c7e0 | goto label_53;
| }
0x0008c80c ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c80e mov r3, r7 | r3 = r7;
0x0008c810 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c812 mov r1, sl | r1 = sl;
0x0008c814 str r4, [sp] | *(sp) = r4;
0x0008c816 bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
0x0008c81a ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008c81e b 0x8c7e0 | goto label_53;
| label_172:
0x0008c820 ldr r3, [sp, 0xc0] | r3 = var_c0h;
0x0008c822 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008c824 rsbs r2, r3, 0 | r2 = r3 - ;
0x0008c826 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0008c82a b 0x8c064 | goto label_54;
| label_74:
0x0008c82c ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008c82e b.w 0x8b74a | goto label_21;
| label_174:
0x0008c832 ldr r2, [pc, 0x3c4] |
0x0008c834 ldr r1, [sp, 0x8c] | r1 = var_8ch;
0x0008c836 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c838 add r2, pc | r2 = 0x119436;
0x0008c83a bl 0x2ebd8 | fcn_0002ebd8 (r0, r1, r2);
0x0008c83e ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008c840 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008c842 cmp r3, 0 |
| if (r3 != 0) {
0x0008c844 bne.w 0x8b740 | goto label_20;
| }
0x0008c848 b.w 0x8b74a | goto label_21;
| label_137:
0x0008c84c str.w fp, [sp, 0x64] | __asm ("str.w fp, [var_64h]");
0x0008c850 b.w 0x8bb8e | goto label_39;
| label_210:
0x0008c854 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008c856 mov r2, r6 | r2 = r6;
0x0008c858 ldr r4, [sp, 0x40] | r4 = var_40h;
0x0008c85a movs r1, 0x87 | r1 = 0x87;
0x0008c85c str r3, [sp] | *(sp) = r3;
0x0008c85e mov r3, fp | r3 = fp;
0x0008c860 mov r0, r4 | r0 = r4;
0x0008c862 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c866 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c868 mov r3, r5 | r3 = r5;
0x0008c86a movs r1, 0x1e | r1 = 0x1e;
0x0008c86c mov r0, r4 | r0 = r4;
0x0008c86e str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008c872 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_209:
0x0008c876 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008c878 cmp r3, 0 |
| if (r3 != 0) {
0x0008c87a bne.w 0x8c72e | goto label_55;
| }
| do {
| label_212:
0x0008c87e mov sb, r5 | sb = r5;
0x0008c880 b.w 0x8bc6c | goto label_44;
| label_208:
0x0008c884 ldr r4, [sp, 0x44] | r4 = var_44h;
0x0008c886 mov r3, r8 | r3 = r8;
0x0008c888 ldr r7, [sp, 0x40] | r7 = var_40h;
0x0008c88a mov r2, r6 | r2 = r6;
0x0008c88c movs r1, 0x86 | r1 = 0x86;
0x0008c88e str r4, [sp] | *(sp) = r4;
0x0008c890 mov r0, r7 | r0 = r7;
0x0008c892 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c896 mov r3, r5 | r3 = r5;
0x0008c898 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c89a movs r1, 0x1b | r1 = 0x1b;
0x0008c89c mov r0, r7 | r0 = r7;
0x0008c89e strd r8, r4, [sp] | __asm ("strd r8, r4, [sp]");
0x0008c8a2 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0008c8a6 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008c8a8 cmp r3, 0 |
0x0008c8aa beq 0x8c87e |
| } while (r3 == 0);
0x0008c8ac mov sb, r5 | sb = r5;
0x0008c8ae b.w 0x8bc50 | goto label_56;
| if (r7 == 0) {
0x0008c8b0 cbnz r7, 0x8c8e6 |
| label_207:
0x0008c8b2 ldr r4, [sp, 0x40] | r4 = var_40h;
0x0008c8b4 movs r1, 0x23 | r1 = 0x23;
0x0008c8b6 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008c8b8 mov r0, r4 | r0 = r4;
0x0008c8ba str r2, [sp] | *(sp) = r2;
0x0008c8bc mov r2, r6 | r2 = r6;
0x0008c8be bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c8c2 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008c8c4 ldr r3, [r2, 0x38] | r3 = *((r2 + 0x38));
0x0008c8c6 add.w sb, r3, -1 | sb = r3 + -1;
0x0008c8ca ldr r3, [r4, 0x70] | r3 = *((r4 + 0x70));
0x0008c8cc str.w sb, [r2, 0x38] | __asm ("str.w sb, [r2, 0x38]");
0x0008c8d0 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0008c8d2 cmp r2, r3 |
0x0008c8d4 str r2, [sp, 0x6c] | var_6ch = r2;
| if (r2 >= r3) {
0x0008c8d6 bge 0x8c966 | goto label_215;
| }
0x0008c8d8 ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x0008c8da movs r3, 0x14 | r3 = 0x14;
0x0008c8dc ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c8de ldr r4, [sp, 0x48] | r4 = var_48h;
0x0008c8e0 mul r3, r2, r3 | r3 = r2 * r3;
0x0008c8e4 ldr r1, [r0, 0x68] | r1 = *((r0 + 0x68));
| }
0x0008c8e6 adds r2, 1 | r2++;
0x0008c8e8 str r2, [r0, 0x6c] | *((r0 + 0x6c)) = r2;
0x0008c8ea movs r0, 0x87 | r0 = 0x87;
0x0008c8ec adds r2, r1, r3 | r2 = r1 + r3;
0x0008c8ee strd r6, fp, [r2, 4] | __asm ("strd r6, fp, [r2, 4]");
0x0008c8f2 strd r4, r4, [r2, 0xc] | __asm ("strd r4, r4, [r2, 0xc]");
0x0008c8f6 str r0, [r1, r3] | *((r1 + r3)) = r0;
| label_58:
0x0008c8f8 mov r3, sb | r3 = sb;
0x0008c8fa ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c8fc ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c8fe movs r1, 0x1e | r1 = 0x1e;
0x0008c900 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008c904 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c908 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008c90a cmp r3, 0 |
| if (r3 != 0) {
0x0008c90c bne.w 0x8bc50 | goto label_56;
| }
0x0008c910 b.w 0x8bc6c | goto label_44;
| label_206:
0x0008c914 ldr r3, [sp, 0x114] | r3 = var_114h;
0x0008c916 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c918 cmp r3, r2 |
| if (r3 != r2) {
0x0008c91a beq 0x8c936 |
0x0008c91c ldr r3, [sp, 0x118] | r3 = var_118h;
0x0008c91e ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c920 cmp r3, r2 |
| if (r3 == r2) {
0x0008c922 beq 0x8c936 | goto label_216;
| }
| label_88:
0x0008c924 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0008c926 movs r1, 0x1b | r1 = 0x1b;
0x0008c928 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c92a ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c92c strd r8, r3, [sp] | __asm ("strd r8, r3, [sp]");
0x0008c930 mov r3, sb | r3 = sb;
0x0008c932 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
| }
| label_216:
0x0008c936 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008c938 cmp r3, 1 |
0x0008c93a it eq |
| if (r3 != 1) {
0x0008c93c moveq r2, sb | r2 = sb;
| }
| if (r3 != 1) {
0x0008c93e beq 0x8c948 |
| label_87:
0x0008c940 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008c942 ldr r2, [r3, 0x38] | r2 = *((r3 + 0x38));
0x0008c944 subs r2, 1 | r2--;
0x0008c946 str r2, [r3, 0x38] | *((r3 + 0x38)) = r2;
| }
0x0008c948 mov r3, sb | r3 = sb;
0x0008c94a mov sb, r2 | sb = r2;
0x0008c94c movs r2, 0 | r2 = 0;
0x0008c94e ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c950 str r2, [sp] | *(sp) = r2;
0x0008c952 movs r1, 0x32 | r1 = 0x32;
0x0008c954 ldr r2, [sp, 0x54] | r2 = var_54h;
0x0008c956 cmp r2, 0 |
0x0008c958 ite ne |
| if (r2 == 0) {
0x0008c95a movne r2, r8 | r2 = r8;
| }
| if (r2 != 0) {
0x0008c95c moveq r2, fp | r2 = fp;
| }
0x0008c95e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c962 b.w 0x8bc3e | goto label_57;
| label_215:
0x0008c966 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008c968 mov r2, r6 | r2 = r6;
0x0008c96a ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c96c movs r1, 0x87 | r1 = 0x87;
0x0008c96e str r3, [sp] | *(sp) = r3;
0x0008c970 mov r3, fp | r3 = fp;
0x0008c972 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0008c976 str r0, [sp, 0x6c] | var_6ch = r0;
0x0008c978 b 0x8c8f8 | goto label_58;
| label_171:
0x0008c97a ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008c97c bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0008c980 b.w 0x8c038 | goto label_59;
| label_177:
0x0008c984 ldr.w r0, [sl, 0x3c] | r0 = *((sl + 0x3c));
0x0008c988 mov r2, r6 | r2 = r6;
0x0008c98a adds r0, 0x38 | r0 += 0x38;
0x0008c98c bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x0008c990 ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x0008c992 cmp r7, 0 |
| if (r7 == 0) {
0x0008c994 beq.w 0x8ba86 | goto label_33;
| }
0x0008c998 movs r3, 1 | r3 = 1;
0x0008c99a mov r4, r6 | r4 = r6;
0x0008c99c str r3, [sp, 0x70] | var_70h = r3;
0x0008c99e b 0x8c26a | goto label_60;
| label_182:
0x0008c9a0 movs r3, 2 | r3 = 2;
0x0008c9a2 str r3, [sp, 0x70] | var_70h = r3;
0x0008c9a4 b.w 0x8ba8a | goto label_32;
| label_104:
0x0008c9a8 blx 0x883c | fcn_0000883c ();
| label_131:
0x0008c9ac ldr r3, [sp, 0x88] | r3 = var_88h;
0x0008c9ae str r3, [sp, 0xbc] | var_bch = r3;
0x0008c9b0 b.w 0x8bb0a | goto label_61;
| label_128:
0x0008c9b4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008c9b6 ldr r1, [pc, 0x244] |
0x0008c9b8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008c9ba mov r2, r3 | r2 = r3;
0x0008c9bc add r1, pc | r1 = 0x1195be;
0x0008c9be bl 0x21598 | fcn_00021598 (r0, r1);
0x0008c9c2 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008c9c4 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008c9c6 cmp r3, 0 |
| if (r3 != 0) {
0x0008c9c8 bne.w 0x8b740 | goto label_20;
| }
0x0008c9cc b.w 0x8b74a | goto label_21;
| label_121:
0x0008c9d0 movs r3, 0 | r3 = 0;
0x0008c9d2 mov.w r2, -1 | r2 = -1;
0x0008c9d6 str r3, [sp, 0xb0] | var_b0h = r3;
0x0008c9d8 str r2, [sp, 0x74] | var_74h = r2;
0x0008c9da str r3, [sp, 0x98] | var_98h = r3;
0x0008c9dc str r3, [sp, 0x60] | var_60h = r3;
0x0008c9de str r3, [sp, 0x58] | var_58h = r3;
0x0008c9e0 str r3, [sp, 0xa8] | var_a8h = r3;
0x0008c9e2 b.w 0x8ba52 | goto label_62;
| label_213:
0x0008c9e6 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008c9e8 mov r3, sb | r3 = sb;
0x0008c9ea ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008c9ec movs r1, 0x1e | r1 = 0x1e;
0x0008c9ee str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008c9f2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008c9f6 b 0x8c7ca | goto label_63;
| label_141:
0x0008c9f8 mov r1, r2 | r1 = r2;
0x0008c9fa ldrb r2, [r2, 0x12] | r2 = *((r2 + 0x12));
0x0008c9fc cmp r2, 0 |
| if (r2 != 0) {
0x0008c9fe bne.w 0x8c094 | goto label_64;
| }
0x0008ca02 ldrb.w r3, [r1, 0x95] | r3 = *((r1 + 0x95));
0x0008ca06 ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x0008ca08 cmp r3, 0 |
0x0008ca0a it eq |
| if (r3 == 0) {
0x0008ca0c cmpeq r1, 0 | __asm ("cmpeq r1, 0");
| }
0x0008ca0e ite eq |
| if (r3 != 0) {
0x0008ca10 moveq r3, 1 | r3 = 1;
| }
| if (r3 != 0) {
0x0008ca12 movne r3, 0 | r3 = 0;
| goto label_217;
| }
| if (r3 != 0) {
| label_217:
0x0008ca14 bne.w 0x8c094 | goto label_64;
| }
0x0008ca18 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008ca1a ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008ca1c ldr r3, [r1, 0x2c] | r3 = *((r1 + 0x2c));
0x0008ca1e adds r3, 1 | r3++;
0x0008ca20 str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x0008ca22 movs r1, 0x47 | r1 = 0x47;
0x0008ca24 str r2, [sp] | *(sp) = r2;
0x0008ca26 str r3, [sp, 0x8c] | var_8ch = r3;
0x0008ca28 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ca2c b.w 0x8bbd4 | goto label_24;
| label_196:
0x0008ca30 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008ca32 ldr r0, [r3] | r0 = *(r3);
0x0008ca34 ldrb.w r8, [r0, 0x57] | r8 = *((r0 + 0x57));
0x0008ca38 cmp.w r8, 0 |
| if (r8 != 0) {
0x0008ca3c bne.w 0x8c4ce | goto label_65;
| }
0x0008ca40 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008ca42 movs r4, 0x14 | r4 = 0x14;
0x0008ca44 mul r4, r5, r4 | r4 = r5 * r4;
0x0008ca48 ldr r7, [r3, 0x68] | r7 = *((r3 + 0x68));
0x0008ca4a adds r5, r7, r4 | r5 = r7 + r4;
0x0008ca4c ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x0008ca4e ldrsb.w r1, [r5, 1] | r1 = *((r5 + 1));
0x0008ca50 asrs r1, r0, 0x20 | r1 = r0 >> 0x20;
0x0008ca52 bl 0x1c888 | fcn_0001c888 (r0);
0x0008ca56 movs r3, 0xb8 | r3 = 0xb8;
0x0008ca58 str.w r8, [r5, 0x10] | __asm ("str.w r8, [r5, 0x10]");
0x0008ca5c strh r3, [r7, r4] | *((r7 + r4)) = r3;
0x0008ca5e b 0x8c4ce | goto label_65;
| label_195:
0x0008ca60 ldr r1, [sp, 0x54] | r1 = var_54h;
0x0008ca62 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0008ca64 bl 0x35b10 | fcn_00035b10 (r0, r1);
0x0008ca68 ldr r7, [sp, 0x84] | r7 = var_84h;
0x0008ca6a movs r1, 0x61 | r1 = 0x61;
0x0008ca6c ldr r5, [sp, 0x90] | r5 = var_90h;
0x0008ca6e ldr r4, [sp, 0x40] | r4 = var_40h;
0x0008ca70 mov r3, r7 | r3 = r7;
0x0008ca72 str r0, [sp, 4] | var_4h = r0;
0x0008ca74 mov r2, r5 | r2 = r5;
0x0008ca76 str r7, [sp, 8] | var_8h = r7;
0x0008ca78 mov r0, r4 | r0 = r4;
0x0008ca7a str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008ca7e bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0008ca82 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008ca84 mov r2, r6 | r2 = r6;
0x0008ca86 movs r1, 0x8a | r1 = 0x8a;
0x0008ca88 mov r0, r4 | r0 = r4;
0x0008ca8a str r7, [sp, 4] | var_4h = r7;
0x0008ca8c str r3, [sp, 0x80] | var_80h = r3;
0x0008ca8e mov r3, r8 | r3 = r8;
0x0008ca90 str r5, [sp] | *(sp) = r5;
0x0008ca92 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0008ca96 b.w 0x8bc36 | goto label_42;
| label_197:
0x0008ca9a movs r3, 0 | r3 = 0;
0x0008ca9c ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008ca9e str r3, [sp] | *(sp) = r3;
0x0008caa0 mov r2, r6 | r2 = r6;
0x0008caa2 mov r3, r7 | r3 = r7;
0x0008caa4 movs r1, 0x76 | r1 = 0x76;
0x0008caa6 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008caaa mov r5, r0 | r5 = r0;
0x0008caac b 0x8c556 | goto label_66;
| label_183:
0x0008caae ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008cab0 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0008cab4 b 0x8c2c6 | goto label_67;
| label_140:
0x0008cab6 ldr.w r3, [sl, 0x34] | r3 = *((sl + 0x34));
0x0008caba ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008cabc str r3, [sp, 0x50] | var_50h = r3;
0x0008cabe ldr.w r8, [r2, 8] | r8 = *((r2 + 8));
0x0008cac2 ldr r5, [r2] | r5 = *(r2);
| if (r3 == 0) {
0x0008cac4 cbz r3, 0x8cad6 | goto label_218;
| }
0x0008cac6 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0008cac8 b 0x8cace |
| while (r5 != r2) {
0x0008caca ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
| if (r3 == 0) {
0x0008cacc cbz r3, 0x8cad4 | goto label_219;
| }
0x0008cace ldr r2, [r3] | r2 = *(r3);
0x0008cad0 cmp r5, r2 |
0x0008cad2 bne 0x8caca |
| }
| label_219:
0x0008cad4 str r3, [sp, 0x50] | var_50h = r3;
| label_218:
0x0008cad6 ldrsh.w r3, [sl, 0x22] | r3 = *((sl + 0x22));
0x0008cada ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008cadc ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008cade adds r3, 2 | r3 += 2;
0x0008cae0 str r3, [sp, 0x40] | var_40h = r3;
0x0008cae2 ldrd sb, r3, [r8, 0x6c] | __asm ("ldrd sb, r3, [r8, 0x6c]");
0x0008cae6 ldr.w fp, [r1, 0x28] | fp = *((r1 + 0x28));
0x0008caea ldr r0, [r0, 0x30] | r0 = *((r0 + 0x30));
0x0008caec cmp sb, r3 |
0x0008caee add.w r2, fp, 1 | r2 += arg_1h;
0x0008caf2 str r0, [sp, 0x48] | var_48h = r0;
0x0008caf4 str r2, [r1, 0x28] | *((r1 + 0x28)) = r2;
| if (sb >= r3) {
0x0008caf6 bge.w 0x8cdd4 | goto label_220;
| }
0x0008cafa add.w r3, sb, sb, lsl 2 | r3 = sb + (sb << 2);
0x0008cafe ldr.w r1, [r8, 0x68] | r1 = *((r8 + 0x68));
0x0008cb02 ldr r6, [sp, 0x40] | r6 = var_40h;
0x0008cb04 add.w r2, sb, 1 | r2 = sb + 1;
0x0008cb08 lsls r3, r3, 2 | r3 <<= 2;
0x0008cb0a str.w r2, [r8, 0x6c] | __asm ("str.w r2, [r8, 0x6c]");
0x0008cb0e movs r0, 0 | r0 = 0;
0x0008cb10 adds r2, r1, r3 | r2 = r1 + r3;
0x0008cb12 movs r4, 0x76 | r4 = 0x76;
0x0008cb14 str.w fp, [r2, 4] | __asm ("str.w fp, [r2, 4]");
0x0008cb18 strd r6, r0, [r2, 8] | __asm ("strd r6, r0, [r2, 8]");
0x0008cb1c str r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
0x0008cb1e str r4, [r1, r3] | *((r1 + r3)) = r4;
| label_76:
0x0008cb20 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008cb22 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008cb24 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008cb26 ldr r4, [r2, 0x2c] | r4 = *((r2 + 0x2c));
0x0008cb28 ldr r3, [r3] | r3 = *(r3);
0x0008cb2a add r1, r4 | r1 += r4;
0x0008cb2c cmp r3, 1 |
0x0008cb2e str r1, [r2, 0x2c] | *((r2 + 0x2c)) = r1;
0x0008cb30 add.w r2, r4, 1 | r2 = r4 + 1;
0x0008cb34 str r1, [sp, 0x58] | var_58h = r1;
0x0008cb36 str r2, [sp, 0x44] | var_44h = r2;
| if (r3 <= 1) {
0x0008cb38 ble.w 0x8cc90 | goto label_221;
| }
0x0008cb3c ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008cb40 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 != r3) {
0x0008cb44 bne.w 0x8cf3c | goto label_222;
| }
0x0008cb48 ldr r2, [sp, 0x60] | r2 = var_60h;
0x0008cb4a cmp r2, 0 |
| if (r2 == 0) {
0x0008cb4c beq.w 0x8cc80 | goto label_223;
| }
0x0008cb50 mov r1, r2 | r1 = r2;
0x0008cb52 mov r0, r5 | r0 = r5;
0x0008cb54 mov r2, r3 | r2 = r3;
0x0008cb56 str r3, [sp, 0x60] | var_60h = r3;
0x0008cb58 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0008cb5c mov r1, r0 | r1 = r0;
| label_70:
0x0008cb5e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008cb60 ldr r0, [r3] | r0 = *(r3);
0x0008cb62 bl 0x21b94 | fcn_00021b94 (r0, r1);
0x0008cb66 ldrsh.w r3, [sl, 0x22] | r3 = *((sl + 0x22));
0x0008cb6a mov r4, r0 | r4 = r0;
0x0008cb6c cmp r3, 0 |
| if (r3 <= 0) {
0x0008cb6e ble 0x8cc00 | goto label_224;
| }
0x0008cb70 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008cb72 movs r6, 0 | r6 = 0;
0x0008cb74 ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x0008cb78 subs r7, r2, 4 | r7 = r2 - 4;
0x0008cb7a b 0x8cba8 |
| while (r3 >= 0) {
0x0008cb7c ldr r2, [sp, 0x34] | r2 = var_34h;
0x0008cb7e add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x0008cb82 ldr r2, [r3, 8] | r2 = *((r3 + 8));
| if (r2 != 0) {
0x0008cb84 cbz r2, 0x8cb94 |
0x0008cb86 movs r3, 0 | r3 = 0;
0x0008cb88 mov r1, r2 | r1 = r2;
0x0008cb8a mov r0, r5 | r0 = r5;
0x0008cb8c mov r2, r3 | r2 = r3;
0x0008cb8e bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0008cb92 mov r2, r0 | r2 = r0;
| }
0x0008cb94 mov r1, r4 | r1 = r4;
0x0008cb96 mov r0, sb | r0 = sb;
0x0008cb98 bl 0x301b0 | fcn_000301b0 (r0, r1, r2);
0x0008cb9c adds r6, 1 | r6++;
0x0008cb9e mov r4, r0 | r4 = r0;
| label_68:
0x0008cba0 ldrsh.w r3, [sl, 0x22] | r3 = *((sl + 0x22));
0x0008cba4 cmp r6, r3 |
| if (r6 >= r3) {
0x0008cba6 bge 0x8cc00 | goto label_224;
| }
0x0008cba8 ldr r3, [r7, 4]! | r3 = *((r7 += 4));
0x0008cbac cmp r3, 0 |
0x0008cbae bge 0x8cb7c |
| }
0x0008cbb0 movs r3, 0 | r3 = 0;
0x0008cbb2 movs r1, 0x4b | r1 = 0x4b;
0x0008cbb4 mov r2, r3 | r2 = r3;
0x0008cbb6 mov r0, sb | r0 = sb;
0x0008cbb8 bl 0x24c54 | fcn_00024c54 (r0, r1, r2, r3);
0x0008cbbc adds r6, 1 | r6++;
0x0008cbbe mov r2, r0 | r2 = r0;
| if (r0 != 0) {
0x0008cbc0 cbz r0, 0x8cbc4 |
0x0008cbc2 strh r6, [r0, 0x20] | *((r0 + 0x20)) = r6;
| }
0x0008cbc4 mov r1, r4 | r1 = r4;
0x0008cbc6 mov r0, sb | r0 = sb;
0x0008cbc8 bl 0x301b0 | r0 = fcn_000301b0 (r0, r1, r2);
0x0008cbcc mov r4, r0 | r4 = r0;
0x0008cbce b 0x8cba0 | goto label_68;
| label_189:
0x0008cbd0 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0008cbd2 ldr r1, [sp, 0x70] | r1 = var_70h;
0x0008cbd4 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008cbd6 str r3, [sp, 4] | var_4h = r3;
0x0008cbd8 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0008cbda strd r1, r1, [sp, 0xc] | __asm ("strd r1, r1, [var_ch]");
0x0008cbde movs r1, 6 | r1 = 6;
0x0008cbe0 str r1, [sp, 8] | var_8h = r1;
0x0008cbe2 mov r1, sl | r1 = sl;
0x0008cbe4 str r3, [sp] | *(sp) = r3;
0x0008cbe6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008cbe8 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0008cbea bl 0x2e09c | fcn_0002e09c (r0, r1, r2, r3, r4, r5, r6);
0x0008cbee b.w 0x8bfea | goto label_37;
| label_224:
0x0008cc00 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008cc02 mov r1, fp | r1 = fp;
0x0008cc04 ldr r2, [sp, 0x60] | r2 = var_60h;
0x0008cc06 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008cc08 str r3, [sp, 4] | var_4h = r3;
0x0008cc0a ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008cc0c str r3, [sp] | *(sp) = r3;
0x0008cc0e mov r3, r4 | r3 = r4;
0x0008cc10 bl 0x77164 | fcn_00077164 (r0, r1, r2, r3, r4, r5);
| if (r4 != 0) {
0x0008cc14 cbz r4, 0x8cc1e |
0x0008cc16 mov r1, r4 | r1 = r4;
0x0008cc18 mov r0, r5 | r0 = r5;
0x0008cc1a bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x0008cc1e movs r6, 0 | r6 = 0;
| label_73:
0x0008cc20 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008cc22 ldr r3, [r3] | r3 = *(r3);
0x0008cc24 cmp r3, 1 |
| if (r3 == 1) {
0x0008cc26 beq.w 0x8cfa2 | goto label_225;
| }
| label_85:
0x0008cc2a ldrd sb, r3, [r8, 0x6c] | __asm ("ldrd sb, r3, [r8, 0x6c]");
0x0008cc2e cmp sb, r3 |
| if (sb >= r3) {
0x0008cc30 bge.w 0x8cf90 | goto label_226;
| }
0x0008cc34 add.w r3, sb, sb, lsl 2 | r3 = sb + (sb << 2);
0x0008cc38 ldr.w r0, [r8, 0x68] | r0 = *((r8 + 0x68));
0x0008cc3c add.w r2, sb, 1 | r2 = sb + 1;
0x0008cc40 lsls r3, r3, 2 | r3 <<= 2;
0x0008cc42 str.w r2, [r8, 0x6c] | __asm ("str.w r2, [r8, 0x6c]");
0x0008cc46 movs r1, 0 | r1 = 0;
0x0008cc48 adds r2, r0, r3 | r2 = r0 + r3;
0x0008cc4a movs r4, 0x23 | r4 = 0x23;
0x0008cc4c strd fp, r1, [r2, 4] | __asm ("strd fp, r1, [r2, 4]");
0x0008cc50 strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x0008cc54 str r4, [r0, r3] | *((r0 + r3)) = r4;
| label_84:
0x0008cc56 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008cc58 cmp r3, 0 |
| if (r3 <= 0) {
0x0008cc5a ble 0x8cc78 | goto label_227;
| }
0x0008cc5c movs r4, 0 | r4 = 0;
| do {
0x0008cc5e ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008cc60 mov r2, fp | r2 = fp;
0x0008cc62 movs r1, 0x5e | r1 = 0x5e;
0x0008cc64 mov r0, r8 | r0 = r8;
0x0008cc66 add r3, r4 | r3 += r4;
0x0008cc68 str r3, [sp] | *(sp) = r3;
0x0008cc6a mov r3, r4 | r3 = r4;
0x0008cc6c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cc70 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008cc72 adds r4, 1 | r4++;
0x0008cc74 cmp r3, r4 |
0x0008cc76 bgt 0x8cc5e |
| } while (r3 > r4);
| label_227:
0x0008cc78 movs r3, 0 | r3 = 0;
0x0008cc7a str r3, [sp, 0x54] | var_54h = r3;
0x0008cc7c b.w 0x8b678 | goto label_69;
| label_223:
0x0008cc80 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0008cc82 movs r1, 0x4b | r1 = 0x4b;
0x0008cc84 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008cc86 mov r2, r3 | r2 = r3;
0x0008cc88 bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0008cc8c mov r1, r0 | r1 = r0;
0x0008cc8e b 0x8cb5e | goto label_70;
| label_221:
0x0008cc90 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0008cc92 movs r3, 0 | r3 = 0;
0x0008cc94 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008cc96 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0008cc98 adds r7, r2, 2 | r7 = r2 + 2;
0x0008cc9a movs r2, 4 | r2 = 4;
0x0008cc9c str r7, [r0, 0x2c] | *((r0 + 0x2c)) = r7;
0x0008cc9e str r2, [sp, 8] | var_8h = r2;
0x0008cca0 str r3, [sp, 0xc] | var_ch = r3;
0x0008cca2 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0008cca4 strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x0008cca8 bl 0x707d8 | r0 = fcn_000707d8 (r0, r1, r2, r3, r4, r5, r6);
0x0008ccac mov r6, r0 | r6 = r0;
0x0008ccae cmp r0, 0 |
| if (r0 == 0) {
0x0008ccb0 beq.w 0x8cdc6 | goto label_228;
| }
0x0008ccb4 ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008ccb8 cmp r0, 0 |
| if (r0 <= 0) {
0x0008ccba ble 0x8cd24 | goto label_229;
| }
0x0008ccbc ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008ccbe mov r5, r4 | r5 = r4;
0x0008ccc0 subs r3, 4 | r3 -= 4;
0x0008ccc2 str r3, [sp, 0x54] | var_54h = r3;
0x0008ccc4 b 0x8cce6 |
| while (r3 >= 0) {
0x0008ccc6 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0008ccc8 add.w r3, r1, r3, lsl 4 | r3 = r1 + (r3 << 4);
0x0008cccc ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0008ccce ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008ccd0 ldr r3, [r3, 8] | r3 = *((r3 + 8));
| if (r3 != 0) {
0x0008ccd2 cbz r3, 0x8ccde |
0x0008ccd4 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008ccd6 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x0008ccda ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
| }
| label_71:
0x0008ccde adds r5, 1 | r5++;
0x0008cce0 subs r3, r5, r4 | r3 = r5 - r4;
0x0008cce2 cmp r0, r3 |
| if (r0 <= r3) {
0x0008cce4 ble 0x8cd24 | goto label_229;
| }
0x0008cce6 ldr r2, [sp, 0x54] | r2 = var_54h;
0x0008cce8 ldr r3, [r2, 4]! | r3 = *((r2 += 4));
0x0008ccec cmp r3, 0 |
0x0008ccee str r2, [sp, 0x54] | var_54h = r2;
0x0008ccf0 add.w r2, r5, 3 | r2 = r5 + 3;
0x0008ccf4 bge 0x8ccc6 |
| }
0x0008ccf6 subs r3, r5, r4 | r3 = r5 - r4;
0x0008ccf8 movs r1, 0xaf | r1 = 0xaf;
0x0008ccfa str r2, [sp] | *(sp) = r2;
0x0008ccfc mov r0, r8 | r0 = r8;
0x0008ccfe ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008cd00 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cd04 ldr.w r2, [r8, 0x6c] | r2 = *((r8 + 0x6c));
0x0008cd08 ldrsh.w r0, [sl, 0x22] | r0 = *((sl + 0x22));
0x0008cd0c cmp r2, 0 |
0x0008cd0e itttt gt |
| if (r2 <= 0) {
0x0008cd10 ldrgt r3, [r8, 0x68] | r3 = *((r8 + 0x68));
| }
| if (r2 <= 0) {
0x0008cd14 movgt r1, 0x14 | r1 = 0x14;
| }
| if (r2 > 0) {
0x0008cd16 mlagt r3, r1, r2, r3 | __asm ("mlagt r3, r1, r2, r3");
| }
| if (r2 > 0) {
0x0008cd1a movs r2, 1 | r2 = 1;
| }
0x0008cd1c it gt |
| if (r2 > 1) {
0x0008cd1e strhgt r2, [r3, -0x12] | __asm ("strhgt r2, [r3, -0x12]");
| }
0x0008cd22 b 0x8ccde | goto label_71;
| label_229:
0x0008cd24 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008cd28 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x0008cd2c beq 0x8cde8 | goto label_230;
| }
0x0008cd2e ldr.w r3, [sl, 8] | r3 = *((sl + 8));
| if (r3 != 0) {
0x0008cd32 cbnz r3, 0x8cd3e | goto label_231;
| }
0x0008cd34 b 0x8d154 | goto label_232;
| do {
0x0008cd36 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008cd38 cmp r3, 0 |
| if (r3 == 0) {
0x0008cd3a beq.w 0x8d154 | goto label_232;
| }
| label_231:
0x0008cd3e ldrb.w r2, [r3, 0x37] | r2 = *((r3 + 0x37));
0x0008cd42 and r2, r2, 3 | r2 &= 3;
0x0008cd46 cmp r2, 2 |
0x0008cd48 bne 0x8cd36 |
| } while (r2 != 2);
0x0008cd4a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0008cd4c movs r1, 0xaf | r1 = 0xaf;
0x0008cd4e ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008cd50 mov r0, r8 | r0 = r8;
0x0008cd52 ldrsh.w r5, [r3] | r5 = *(r3);
0x0008cd56 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008cd58 str r3, [sp] | *(sp) = r3;
0x0008cd5a mov r3, r5 | r3 = r5;
0x0008cd5c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cd60 movs r1, 0 | r1 = 0;
0x0008cd62 adds r2, r4, 3 | r2 = r4 + 3;
0x0008cd64 str r1, [sp] | *(sp) = r1;
0x0008cd66 add r2, r5 | r2 += r5;
0x0008cd68 adds r3, r4, 2 | r3 = r4 + 2;
0x0008cd6a movs r1, 0x51 | r1 = 0x51;
0x0008cd6c mov r0, r8 | r0 = r8;
0x0008cd6e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_77:
0x0008cd72 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x0008cd74 add r3, sp, 0x114 | r3 += var_114h;
0x0008cd76 ldr r1, [r6, 0x1c] | r1 = *((r6 + 0x1c));
0x0008cd78 stm r3!, {r0, r1} | *(r3!) = r0;
| *((r3! + 4)) = r1;
0x0008cd7a ldrb.w r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x0008cd7e str r3, [sp, 0x54] | var_54h = r3;
0x0008cd80 cmp r3, 0 |
| if (r3 != 0) {
0x0008cd82 bne.w 0x8b640 | goto label_72;
| }
0x0008cd86 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008cd88 movs r1, 0x61 | r1 = 0x61;
0x0008cd8a ldr r4, [sp, 0x58] | r4 = var_58h;
0x0008cd8c mov r0, r8 | r0 = r8;
0x0008cd8e ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0008cd90 adds r4, 1 | r4++;
0x0008cd92 cmp r3, 0 |
0x0008cd94 it eq |
| if (r3 != 0) {
0x0008cd96 moveq r3, r2 | r3 = r2;
| }
0x0008cd98 movs r2, 1 | r2 = 1;
0x0008cd9a strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0008cd9c ldrd r3, r2, [sp, 0x40] | __asm ("ldrd r3, r2, [var_44h]");
0x0008cda0 str r4, [sp] | *(sp) = r4;
0x0008cda2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cda6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008cda8 mov r2, fp | r2 = fp;
0x0008cdaa movs r1, 0x7f | r1 = 0x7f;
0x0008cdac mov r0, r8 | r0 = r8;
0x0008cdae str r3, [sp] | *(sp) = r3;
0x0008cdb0 mov r3, r7 | r3 = r7;
0x0008cdb2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cdb6 mov r3, r4 | r3 = r4;
0x0008cdb8 mov r2, fp | r2 = fp;
0x0008cdba movs r1, 0x80 | r1 = 0x80;
0x0008cdbc mov r0, r8 | r0 = r8;
0x0008cdbe str r7, [sp] | *(sp) = r7;
0x0008cdc0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cdc4 b 0x8cc20 | goto label_73;
| label_228:
0x0008cdc6 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008cdc8 cmp r3, 0 |
| if (r3 == 0) {
0x0008cdca beq.w 0x8c82c | goto label_74;
| }
0x0008cdce str r0, [sp, 0xd4] | var_d4h = r0;
0x0008cdd0 b.w 0x8c088 | goto label_75;
| label_220:
0x0008cdd4 movs r3, 0 | r3 = 0;
0x0008cdd6 mov r2, fp | r2 = fp;
0x0008cdd8 str r3, [sp] | *(sp) = r3;
0x0008cdda movs r1, 0x76 | r1 = 0x76;
0x0008cddc ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008cdde mov r0, r8 | r0 = r8;
0x0008cde0 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008cde4 mov sb, r0 | sb = r0;
0x0008cde6 b 0x8cb20 | goto label_76;
| label_230:
0x0008cde8 movs r1, 0x87 | r1 = 0x87;
0x0008cdea str r3, [sp] | *(sp) = r3;
0x0008cdec mov r0, r8 | r0 = r8;
0x0008cdee ldrd r3, r2, [sp, 0x44] | __asm ("ldrd r3, r2, [var_44h]");
0x0008cdf2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cdf6 ldr r1, [sp, 0x60] | r1 = var_60h;
0x0008cdf8 adds r3, r4, 2 | r3 = r4 + 2;
| if (r1 == 0) {
0x0008cdfa cbz r1, 0x8ce36 | goto label_233;
| }
0x0008cdfc ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008cdfe ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x0008ce00 cmp r2, 0 |
| if (r2 == 0) {
0x0008ce02 beq 0x8cd72 | goto label_77;
| }
0x0008ce04 mov r2, r3 | r2 = r3;
0x0008ce06 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x0008ce0a b 0x8cd72 | goto label_77;
| label_105:
0x0008ce0c ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008ce0e movs r1, 7 | r1 = 7;
0x0008ce10 movs r2, 0 | r2 = 0;
0x0008ce12 mov r0, r8 | r0 = r8;
0x0008ce14 str r3, [sp] | *(sp) = r3;
0x0008ce16 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008ce18 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008ce1c mov r1, r0 | r1 = r0;
0x0008ce1e b.w 0x8b6ae | goto label_78;
0x0008ce20 pop {r1, r2, r6} |
| label_107:
0x0008ce22 ldr r3, [pc, 0x338] |
0x0008ce24 add r3, pc | r3 = 0x119f86;
0x0008ce26 adds r3, 4 | r3 += 4;
0x0008ce28 b.w 0x8b72a | goto label_79;
| label_106:
0x0008ce2c mov r0, r6 | r0 = r6;
0x0008ce2e bl 0x73e14 | fcn_00073e14 (r0, r1);
0x0008ce32 b.w 0x8b73a | goto label_4;
| label_233:
0x0008ce36 ldr r2, [sp, 0x60] | r2 = var_60h;
0x0008ce38 movs r1, 0x87 | r1 = 0x87;
0x0008ce3a mov r0, r8 | r0 = r8;
0x0008ce3c str r2, [sp] | *(sp) = r2;
0x0008ce3e ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008ce40 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ce44 b 0x8cd72 | goto label_77;
| label_188:
0x0008ce46 ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x0008ce48 movs r2, 0 | r2 = 0;
0x0008ce4a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008ce4c mov r1, sl | r1 = sl;
0x0008ce4e str r3, [sp, 4] | var_4h = r3;
0x0008ce50 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008ce52 str r3, [sp] | *(sp) = r3;
0x0008ce54 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0008ce56 bl 0x8b0dc | fcn_0008b0dc (r0, r1, r2, r3, r4, r5, r6);
0x0008ce5a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008ce5c cmp r3, 2 |
| if (r3 == 2) {
0x0008ce5e beq 0x8cee0 | goto label_234;
| }
0x0008ce60 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0008ce62 movs r1, 0 | r1 = 0;
0x0008ce64 strd r1, r1, [sp, 0xc] | __asm ("strd r1, r1, [var_ch]");
0x0008ce68 movs r1, 4 | r1 = 4;
0x0008ce6a str r1, [sp, 8] | var_8h = r1;
0x0008ce6c mov r1, sl | r1 = sl;
0x0008ce6e str r3, [sp, 4] | var_4h = r3;
0x0008ce70 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0008ce72 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008ce74 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008ce76 str r3, [sp] | *(sp) = r3;
0x0008ce78 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0008ce7a bl 0x2e09c | fcn_0002e09c (r0, r1, r2, r3, r4, r5, r6);
| label_80:
0x0008ce7e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008ce80 ldr r3, [r3] | r3 = *(r3);
0x0008ce82 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008ce84 lsls r3, r3, 0x11 | r3 <<= 0x11;
| if (r3 >= r3) {
0x0008ce86 bpl.w 0x8bfea | goto label_37;
| }
0x0008ce8a ldr.w r0, [sl, 0x3c] | r0 = *((sl + 0x3c));
0x0008ce8e movs r2, 0 | r2 = 0;
0x0008ce90 ldr.w r1, [sl] | r1 = *(sl);
0x0008ce94 adds r0, 0x38 | r0 += 0x38;
0x0008ce96 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x0008ce9a ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x0008ce9c cmp r4, 0 |
| if (r4 == 0) {
0x0008ce9e beq.w 0x8bfea | goto label_37;
| }
0x0008cea2 movs r5, 0 | r5 = 0;
0x0008cea4 movs r7, 2 | r7 = 2;
| do {
0x0008cea6 ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x0008cea8 mov r1, r4 | r1 = r4;
0x0008ceaa ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008ceac mov r0, sl | r0 = sl;
0x0008ceae bl 0x1739c | r0 = fcn_0001739c (r0, r1, r2, r3, r4);
| if (r0 != 0) {
0x0008ceb2 cbz r0, 0x8ced6 |
0x0008ceb4 ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x0008ceb8 mov r1, sl | r1 = sl;
0x0008ceba ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008cebc mov r2, r4 | r2 = r4;
0x0008cebe mov r0, r8 | r0 = r8;
0x0008cec0 bl 0x33138 | r0 = fcn_00033138 (r0, r1, r2, r3, r4);
0x0008cec4 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x0008cec6 cbz r0, 0x8ced6 | goto label_235;
| }
0x0008cec8 mov r3, fp | r3 = fp;
0x0008ceca mov r2, sl | r2 = sl;
0x0008cecc mov r0, r8 | r0 = r8;
0x0008cece strd r7, r5, [sp] | __asm ("strd r7, r5, [sp]");
0x0008ced2 bl 0x8d99c | fcn_0008d99c (r0, r1, r2, r3, r4, r5);
| }
| label_235:
0x0008ced6 ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
0x0008ced8 cmp r4, 0 |
0x0008ceda bne 0x8cea6 |
| } while (r4 != 0);
0x0008cedc b.w 0x8bfea | goto label_37;
| label_234:
0x0008cee0 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0008cee2 movs r1, 0 | r1 = 0;
0x0008cee4 strd r1, r1, [sp, 0xc] | __asm ("strd r1, r1, [var_ch]");
0x0008cee8 movs r1, 6 | r1 = 6;
0x0008ceea str r1, [sp, 8] | var_8h = r1;
0x0008ceec mov r1, sl | r1 = sl;
0x0008ceee str r3, [sp, 4] | var_4h = r3;
0x0008cef0 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0008cef2 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008cef4 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008cef6 str r3, [sp] | *(sp) = r3;
0x0008cef8 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0008cefa bl 0x2e09c | fcn_0002e09c (r0, r1, r2, r3, r4, r5, r6);
0x0008cefe b 0x8ce7e | goto label_80;
| label_187:
0x0008cf00 movs r3, 0 | r3 = 0;
0x0008cf02 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008cf04 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008cf06 movs r1, 0x82 | r1 = 0x82;
0x0008cf08 str r3, [sp] | *(sp) = r3;
0x0008cf0a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cf0e b.w 0x8c380 | goto label_81;
| label_186:
0x0008cf12 movs r3, 0 | r3 = 0;
0x0008cf14 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008cf16 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008cf18 movs r1, 0x8f | r1 = 0x8f;
0x0008cf1a str r3, [sp] | *(sp) = r3;
0x0008cf1c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cf20 b.w 0x8c370 | goto label_82;
| label_185:
0x0008cf24 ldr r3, [sp, 0xb0] | r3 = var_b0h;
0x0008cf26 mov r2, fp | r2 = fp;
0x0008cf28 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008cf2a mov r1, sl | r1 = sl;
0x0008cf2c str r3, [sp, 4] | var_4h = r3;
0x0008cf2e ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008cf30 str r3, [sp] | *(sp) = r3;
0x0008cf32 movs r3, 0 | r3 = 0;
0x0008cf34 bl 0x8b0dc | fcn_0008b0dc (r0, r1, r2, r3, r4, r5, r6);
0x0008cf38 b.w 0x8c34a | goto label_83;
| label_222:
0x0008cf3c ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0008cf40 str r3, [sp, 0x60] | var_60h = r3;
0x0008cf42 cmp r3, 0 |
| if (r3 == 0) {
0x0008cf44 beq.w 0x8d154 | goto label_232;
| }
0x0008cf48 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0008cf4a b 0x8cf54 |
| while (r2 != 2) {
0x0008cf4c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008cf4e cmp r3, 0 |
| if (r3 == 0) {
0x0008cf50 beq.w 0x8d154 | goto label_232;
| }
0x0008cf54 ldrb.w r2, [r3, 0x37] | r2 = *((r3 + 0x37));
0x0008cf58 and r2, r2, 3 | r2 &= 3;
0x0008cf5c cmp r2, 2 |
0x0008cf5e bne 0x8cf4c |
| }
0x0008cf60 str r3, [sp, 0x60] | var_60h = r3;
0x0008cf62 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0008cf64 ldrsh.w r4, [r3] | r4 = *(r3);
0x0008cf68 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008cf6a ldr.w r3, [r3, r4, lsl 2] | offset_9 = r4 << 2;
| r3 = *((r3 + offset_9));
0x0008cf6e cmp r3, 0 |
| if (r3 < 0) {
0x0008cf70 blt.w 0x8d130 | goto label_236;
| }
0x0008cf74 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0008cf76 add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x0008cf78 asrs r3, r0, 0xc | r3 = r0 >> 0xc;
0x0008cf7a ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0008cf7c cmp r1, 0 |
| if (r1 == 0) {
0x0008cf7e beq.w 0x8cb5e | goto label_70;
| }
0x0008cf82 movs r3, 0 | r3 = 0;
0x0008cf84 mov r0, r5 | r0 = r5;
0x0008cf86 mov r2, r3 | r2 = r3;
0x0008cf88 bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0008cf8c mov r1, r0 | r1 = r0;
0x0008cf8e b 0x8cb5e | goto label_70;
| label_226:
0x0008cf90 movs r3, 0 | r3 = 0;
0x0008cf92 mov r2, fp | r2 = fp;
0x0008cf94 movs r1, 0x23 | r1 = 0x23;
0x0008cf96 mov r0, r8 | r0 = r8;
0x0008cf98 str r3, [sp] | *(sp) = r3;
0x0008cf9a bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008cf9e mov sb, r0 | sb = r0;
0x0008cfa0 b 0x8cc56 | goto label_84;
| label_225:
0x0008cfa2 mov r0, r6 | r0 = r6;
0x0008cfa4 bl 0x73e14 | fcn_00073e14 (r0, r1);
0x0008cfa8 b 0x8cc2a | goto label_85;
| label_205:
0x0008cfaa ldr r3, [sp, 0x118] | r3 = var_118h;
0x0008cfac ldr r2, [sp, 0xa4] | r2 = var_a4h;
0x0008cfae mvns r3, r3 | r3 = ~r3;
0x0008cfb0 lsrs r3, r3, 0x1f | r3 >>= 0x1f;
0x0008cfb2 cmp r2, r3 |
| if (r2 <= r3) {
0x0008cfb4 ble.w 0x8c690 | goto label_86;
| }
0x0008cfb8 movs r5, 0 | r5 = 0;
0x0008cfba movs r1, 0xe | r1 = 0xe;
0x0008cfbc mov r3, r5 | r3 = r5;
0x0008cfbe mov r2, r5 | r2 = r5;
0x0008cfc0 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008cfc2 str r5, [sp] | *(sp) = r5;
0x0008cfc4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008cfc8 ldr r3, [sp, 0x94] | r3 = var_94h;
0x0008cfca mov r4, r0 | r4 = r0;
0x0008cfcc movs r2, 0x71 | r2 = 0x71;
0x0008cfce ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008cfd0 mov r1, sl | r1 = sl;
0x0008cfd2 strd r5, r5, [sp, 8] | __asm ("strd r5, r5, [var_8h]");
0x0008cfd6 str r3, [sp, 4] | var_4h = r3;
0x0008cfd8 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0008cfda str r3, [sp] | *(sp) = r3;
0x0008cfdc mov r3, r5 | r3 = r5;
0x0008cfde bl 0x2fe28 | fcn_0002fe28 (r0, r1, r2, r3, r4, r5, r6);
| if (r4 == 0) {
0x0008cfe2 cbz r4, 0x8d024 | goto label_237;
| }
0x0008cfe4 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008cfe6 ldr r2, [r1, 0x6c] | r2 = *((r1 + 0x6c));
0x0008cfe8 subs r3, r2, 1 | r3 = r2 - 1;
0x0008cfea cmp r4, r3 |
0x0008cfec it eq |
| if (r4 != r3) {
0x0008cfee streq r4, [r1, 0x6c] | *((r1 + 0x6c)) = r4;
| }
| if (r4 != r3) {
0x0008cff0 beq 0x8d00e |
0x0008cff2 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008cff4 bics.w r4, r4, r4, asr 32 | __asm ("bics.w r4, r4, r4, asr 32");
0x0008cff8 it hs |
| if (r4 < r3) {
0x0008cffa movhs r4, r3 | r4 = r3;
| }
0x0008cffc ldr r3, [r1] | r3 = *(r1);
0x0008cffe ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x0008d002 cbnz r3, 0x8d03a | goto label_238;
| }
0x0008d004 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x0008d006 movs r1, 0x14 | r1 = 0x14;
0x0008d008 mla r3, r1, r4, r3 | __asm ("mla r3, r1, r4, r3");
| label_89:
0x0008d00c str r2, [r3, 8] | *((r3 + 8)) = r2;
| }
0x0008d00e ldr r3, [sp, 0x114] | r3 = var_114h;
0x0008d010 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008d012 cmp r3, r2 |
| if (r3 == r2) {
0x0008d014 beq.w 0x8c940 | goto label_87;
| }
0x0008d018 ldr r3, [sp, 0x118] | r3 = var_118h;
0x0008d01a ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008d01c cmp r3, r2 |
| if (r3 == r2) {
0x0008d01e beq.w 0x8c940 | goto label_87;
| }
0x0008d022 b 0x8c924 | goto label_88;
| label_237:
0x0008d024 ldr r3, [sp, 0x114] | r3 = var_114h;
0x0008d026 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008d028 cmp r3, r2 |
| if (r3 == r2) {
0x0008d02a beq.w 0x8c940 | goto label_87;
| }
0x0008d02e ldr r3, [sp, 0x118] | r3 = var_118h;
0x0008d030 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008d032 cmp r2, r3 |
| if (r2 == r3) {
0x0008d034 beq.w 0x8c940 | goto label_87;
| }
0x0008d038 b 0x8c924 | goto label_88;
| label_238:
0x0008d03a ldr r3, [pc, 0x124] |
0x0008d03c add r3, pc | r3 = 0x11a1a2;
0x0008d03e adds r3, 4 | r3 += 4;
0x0008d040 b 0x8d00c | goto label_89;
| label_192:
0x0008d042 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0008d044 mov r8, r3 | r8 = r3;
0x0008d046 str r3, [sp, 0x90] | var_90h = r3;
0x0008d048 str r3, [sp, 0x84] | var_84h = r3;
0x0008d04a b.w 0x8c594 | goto label_90;
| label_191:
0x0008d04e ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008d050 mov r2, r6 | r2 = r6;
0x0008d052 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008d054 movs r1, 0x76 | r1 = 0x76;
0x0008d056 str r4, [sp] | *(sp) = r4;
0x0008d058 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008d05c mov r5, r0 | r5 = r0;
0x0008d05e b.w 0x8c45e | goto label_91;
| label_184:
0x0008d062 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008d064 mov r3, sb | r3 = sb;
0x0008d066 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008d068 movs r1, 0x1e | r1 = 0x1e;
0x0008d06a str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008d06e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008d072 b.w 0x8c342 | goto label_92;
| label_190:
0x0008d076 mov r3, fp | r3 = fp;
0x0008d078 str r0, [sp, 0xb4] | var_b4h = r0;
0x0008d07a b.w 0x8bb8a | goto label_93;
| label_148:
0x0008d07e movs r3, 0 | r3 = 0;
0x0008d080 str r3, [sp, 0x6c] | var_6ch = r3;
0x0008d082 b.w 0x8c730 | goto label_94;
| label_145:
0x0008d086 ldr r6, [sp, 0x44] | r6 = var_44h;
0x0008d088 mov r5, r6 | r5 = r6;
0x0008d08a b.w 0x8c472 | goto label_95;
| label_193:
0x0008d08e str r3, [sp] | *(sp) = r3;
0x0008d090 movs r1, 0x87 | r1 = 0x87;
0x0008d092 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008d094 mov r3, fp | r3 = fp;
0x0008d096 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008d098 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_203:
0x0008d09c cmp r5, 0 |
| if (r5 != 0) {
0x0008d09e bne 0x8d14a | goto label_239;
| }
| label_102:
0x0008d0a0 movs r3, 0 | r3 = 0;
0x0008d0a2 str r3, [sp, 0x80] | var_80h = r3;
0x0008d0a4 b.w 0x8bc36 | goto label_42;
| label_173:
0x0008d0a8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008d0aa ldr r3, [r0, 0x70] | r3 = *((r0 + 0x70));
0x0008d0ac cmp r3, 0 |
| if (r3 == 0) {
0x0008d0ae beq.w 0x8c074 | goto label_96;
| }
0x0008d0b2 bl 0x2fd68 | fcn_0002fd68 (r0, r1);
0x0008d0b6 b.w 0x8c074 | goto label_96;
| label_202:
0x0008d0ba ldr r3, [sp, 0x118] | r3 = var_118h;
0x0008d0bc cmp r3, 0 |
| if (r3 < 0) {
0x0008d0be blt.w 0x8c488 | goto label_45;
| }
0x0008d0c2 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008d0c4 cmp r2, r3 |
| if (r2 == r3) {
0x0008d0c6 beq.w 0x8c488 | goto label_45;
| }
0x0008d0ca ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x0008d0cc subs r3, r3, r2 | r3 -= r2;
0x0008d0ce ldr r2, [sp, 0x94] | r2 = var_94h;
0x0008d0d0 ldrb r3, [r2, r3] | r3 = *((r2 + r3));
0x0008d0d2 clz r3, r3 | r3 &= r3;
0x0008d0d6 lsrs r3, r3, 5 | r3 >>= 5;
0x0008d0d8 lsls r3, r3, 1 | r3 <<= 1;
0x0008d0da str r3, [sp, 0x48] | var_48h = r3;
0x0008d0dc b.w 0x8c608 | goto label_97;
| label_201:
0x0008d0e0 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x0008d0e2 cmp r3, 0 |
| if (r3 == 0) {
0x0008d0e4 beq.w 0x8c82c | goto label_74;
| }
0x0008d0e8 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0008d0ea str r2, [sp, 0xd4] | var_d4h = r2;
0x0008d0ec b.w 0x8c088 | goto label_75;
| label_200:
0x0008d0f0 movs r3, 4 | r3 = 4;
0x0008d0f2 b.w 0x8c5b4 | goto label_98;
| label_199:
0x0008d0f6 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008d0f8 mov r1, r6 | r1 = r6;
0x0008d0fa ldr r2, [sp, 0x68] | r2 = var_68h;
0x0008d0fc ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008d0fe str r3, [sp, 4] | var_4h = r3;
0x0008d100 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008d102 str r3, [sp] | *(sp) = r3;
0x0008d104 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0008d106 cmp r2, 2 |
0x0008d108 it eq |
| if (r2 != 2) {
0x0008d10a moveq r3, r6 | r3 = r6;
| }
0x0008d10c ldr r2, [sp, 0x54] | r2 = var_54h;
0x0008d10e str r3, [sp, 0x50] | var_50h = r3;
0x0008d110 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008d112 bl 0x77164 | fcn_00077164 (r0, r1, r2, r3, r4, r5);
0x0008d116 b.w 0x8bc1c | goto label_99;
| label_198:
0x0008d11a mvn r1, 7 | r1 = ~7;
0x0008d11e bl 0x1c888 | fcn_0001c888 (r0);
0x0008d122 b.w 0x8c58c | goto label_100;
| label_204:
0x0008d126 ldr r0, [sp, 0xa0] | r0 = var_a0h;
0x0008d128 bl 0x73e14 | fcn_00073e14 (r0, r1);
0x0008d12c b.w 0x8c65e | goto label_101;
| label_236:
0x0008d130 movs r3, 0 | r3 = 0;
0x0008d132 movs r1, 0x4b | r1 = 0x4b;
0x0008d134 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008d136 mov r2, r3 | r2 = r3;
0x0008d138 bl 0x24c54 | r0 = fcn_00024c54 (r0, r1, r2, r3);
0x0008d13c mov r1, r0 | r1 = r0;
0x0008d13e cmp r0, 0 |
| if (r0 == 0) {
0x0008d140 beq.w 0x8cb5e | goto label_70;
| }
0x0008d144 adds r4, 1 | r4++;
0x0008d146 strh r4, [r0, 0x20] | *((r0 + 0x20)) = r4;
0x0008d148 b 0x8cb5e | goto label_70;
| label_239:
0x0008d14a ldr r0, [sp, 0x40] | r0 = var_40h;
0x0008d14c mov r1, r5 | r1 = r5;
0x0008d14e bl 0x1cab0 | fcn_0001cab0 (r0, r1);
0x0008d152 b 0x8d0a0 | goto label_102;
| label_232:
0x0008d154 movs r3, 0 | r3 = 0;
0x0008d156 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0008d158 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8d164 */
| #include <stdint.h>
|
; (fcn) fcn.0008d164 () | void fcn_0008d164 (int16_t arg_4h, int16_t arg_50h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int32_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008d164 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008d168 mov sl, r3 | sl = r3;
0x0008d16a ldr r3, [r0] | r3 = *(r0);
0x0008d16c sub sp, 0x2c |
0x0008d16e mov r7, r0 | r7 = r0;
0x0008d170 mov r8, r1 | r8 = r1;
0x0008d172 ldr.w sb, [r0, 8] | sb = *((r0 + 8));
0x0008d176 mov r6, r2 | r6 = r2;
0x0008d178 str r3, [sp, 0x10] | var_10h = r3;
0x0008d17a mov r4, r1 | r4 = r1;
0x0008d17c ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x0008d17e str r3, [sp, 0x14] | var_14h = r3;
0x0008d180 b 0x8d18c |
| while (r3 != 0) {
0x0008d182 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0008d184 cmp sl, r3 |
| if (sl == r3) {
0x0008d186 beq 0x8d192 | goto label_6;
| }
0x0008d188 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
| if (r4 == 0) {
0x0008d18a cbz r4, 0x8d192 | goto label_6;
| }
0x0008d18c ldr r3, [r4] | r3 = *(r4);
0x0008d18e cmp r3, 0 |
0x0008d190 bne 0x8d182 |
| }
| label_6:
0x0008d192 ldr r3, [sp, 0x50] | r3 = *(arg_50h);
0x0008d194 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008d196 cmp.w sl, 0 |
0x0008d19a it ne |
| if (sl != 0) {
0x0008d19c cmpne r3, r2 | __asm ("cmpne r3, r2");
| }
| if (sl == 0) {
0x0008d19e beq.w 0x8d2a4 | goto label_2;
| }
0x0008d1a2 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x0008d1a4 lsls r1, r3, 0x18 | r1 = r3 << 0x18;
| if (r1 >= r3) {
0x0008d1a6 bpl.w 0x8d32a | goto label_7;
| }
0x0008d1aa ldr.w fp, [r6, 8] | fp = *((r6 + 8));
0x0008d1ae mov r2, fp | r2 = fp;
0x0008d1b0 cmp.w fp, 0 |
| if (fp != 0) {
0x0008d1b4 bne 0x8d1c0 | goto label_8;
| }
0x0008d1b6 b 0x8d388 | goto label_9;
| do {
0x0008d1b8 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x0008d1ba cmp r2, 0 |
| if (r2 == 0) {
0x0008d1bc beq.w 0x8d388 | goto label_9;
| }
| label_8:
0x0008d1c0 ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x0008d1c4 and r3, r3, 3 | r3 &= 3;
0x0008d1c8 cmp r3, 2 |
0x0008d1ca bne 0x8d1b8 |
| } while (r3 != 2);
0x0008d1cc ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x0008d1ce mov fp, r2 |
0x0008d1d0 ldrh.w lr, [r2, 0x32] |
0x0008d1d4 add.w r2, r3, lr | r2 = r3 + lr;
0x0008d1d8 adds r3, 1 | r3++;
0x0008d1da str r2, [r7, 0x2c] | *((r7 + 0x2c)) = r2;
0x0008d1dc str r3, [sp, 0x18] | var_18h = r3;
0x0008d1de cmp.w lr, 0 |
| if (lr == 0) {
0x0008d1e2 beq 0x8d242 | goto label_10;
| }
0x0008d1e4 strd r7, r8, [sp, 0x20] | __asm ("strd r7, r8, [var_24h]");
0x0008d1e8 movs r5, 0 | r5 = 0;
0x0008d1ea ldr r7, [sp, 0x50] | r7 = *(arg_50h);
0x0008d1ec ldr.w r8, [sp, 0x18] | r8 = var_18h;
0x0008d1f0 str r4, [sp, 0x1c] | var_1ch = r4;
0x0008d1f2 mov r4, lr | r4 = lr;
| label_0:
0x0008d1f4 ldrh.w r0, [sl, 0x34] | r0 = *((sl + 0x34));
0x0008d1f8 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x0008d1fc ldrsh.w ip, [r3, r5, lsl 1] | offset_0 = r5 << 1;
| ip = *((r3 + offset_0));
0x0008d200 cmp r0, 0 |
| if (r0 == 0) {
0x0008d202 beq.w 0x8d37a | goto label_11;
| }
0x0008d206 ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x0008d20a movs r3, 0 | r3 = 0;
0x0008d20c subs r2, 2 | r2 -= 2;
0x0008d20e b 0x8d218 |
| while (r1 != ip) {
0x0008d210 adds r3, 1 | r3++;
0x0008d212 cmp r3, r0 |
| if (r3 == r0) {
0x0008d214 beq.w 0x8d37a | goto label_11;
| }
0x0008d218 ldrsh r1, [r2, 2]! | r1 = *((r2 += 2));
0x0008d21c cmp r1, ip |
0x0008d21e bne 0x8d210 |
| }
0x0008d220 sxth r3, r3 | __asm ("sxth r3, r3");
| label_4:
0x0008d222 add.w r2, r8, r5 | r2 = r8 + r5;
0x0008d226 str r2, [sp] | *(sp) = r2;
0x0008d228 adds r5, 1 | r5++;
0x0008d22a mov r2, r7 | r2 = r7;
0x0008d22c movs r1, 0x5e | r1 = 0x5e;
0x0008d22e mov r0, sb | r0 = sb;
0x0008d230 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008d234 cmp r4, r5 |
| if (r4 != r5) {
0x0008d236 bne 0x8d1f4 | goto label_0;
| }
0x0008d238 mov lr, r4 | lr = r4;
0x0008d23a ldr.w r8, [sp, 0x24] | r8 = var_24h;
0x0008d23e ldrd r4, r7, [sp, 0x1c] | __asm ("ldrd r4, r7, [var_1ch]");
| label_10:
0x0008d242 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008d244 movs r1, 0x1c | r1 = 0x1c;
0x0008d246 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008d248 mov r0, sb | r0 = sb;
0x0008d24a str.w lr, [sp, 4] | __asm ("str.w lr, [var_4h]");
0x0008d24e str r3, [sp] | *(sp) = r3;
0x0008d250 movs r3, 0 | r3 = 0;
0x0008d252 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0008d256 ldr r3, [pc, 0x138] |
0x0008d258 mov r5, r0 | r5 = r0;
0x0008d25a movs r2, 0xb | r2 = 0xb;
0x0008d25c movs r1, 0x46 | r1 = 0x46;
0x0008d25e mov r0, sb | r0 = sb;
0x0008d260 add r3, pc | r3 = 0x11a5f6;
0x0008d262 str r3, [sp, 4] | var_4h = r3;
0x0008d264 mov.w r3, -1 | r3 = -1;
0x0008d268 str r3, [sp, 8] | var_8h = r3;
0x0008d26a movs r3, 0 | r3 = 0;
0x0008d26c str r3, [sp] | *(sp) = r3;
0x0008d26e movs r3, 2 | r3 = 2;
0x0008d270 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0008d274 ldr r3, [r7, 0x74] | r3 = *((r7 + 0x74));
0x0008d276 movs r2, 1 | r2 = 1;
0x0008d278 cmp r3, 0 |
0x0008d27a it eq |
| if (r3 != 0) {
0x0008d27c moveq r3, r7 | r3 = r7;
| }
0x0008d27e cmp r5, 0 |
0x0008d280 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
0x0008d282 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
| if (r5 < 0) {
0x0008d286 bge 0x8d28a |
0x0008d288 subs r5, r2, 1 | r5 = r2 - 1;
| }
0x0008d28a ldr.w r3, [sb] | r3 = *(sb);
0x0008d28e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008d292 cmp r3, 0 |
| if (r3 != 0) {
0x0008d294 bne 0x8d380 | goto label_12;
| }
0x0008d296 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008d29a add.w r5, r5, r5, lsl 2 | r5 += (r5 << 2);
0x0008d29e add.w r3, r3, r5, lsl 2 | r3 += (r5 << 2);
| label_5:
0x0008d2a2 str r2, [r3, 8] | *((r3 + 8)) = r2;
| label_2:
0x0008d2a4 ldr.w r1, [r8, 0x20] | r1 = *((r8 + 0x20));
0x0008d2a8 movs r2, 0 | r2 = 0;
0x0008d2aa ldr r0, [sp, 0x10] | r0 = var_10h;
0x0008d2ac bl 0x32c4c | fcn_00032c4c (r0, r1, r2);
0x0008d2b0 ldrsh.w r1, [r6, 0x22] | r1 = *((r6 + 0x22));
0x0008d2b4 mov sl, r0 | sl = r0;
0x0008d2b6 cmp r1, 0 |
0x0008d2b8 itt gt |
| if (r1 <= 0) {
0x0008d2ba movgt r5, 0 | r5 = 0;
| }
| if (r1 <= 0) {
0x0008d2bc movgt fp, r5 |
| }
| if (r1 > 0) {
0x0008d2be bgt 0x8d2c8 | goto label_1;
| }
0x0008d2c0 b 0x8d2f6 | goto label_13;
| do {
0x0008d2c2 adds r5, 1 | r5++;
0x0008d2c4 cmp r1, r5 |
| if (r1 <= r5) {
0x0008d2c6 ble 0x8d2f6 | goto label_13;
| }
| label_1:
0x0008d2c8 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0008d2ca add.w r2, r5, r5, lsl 1 | r2 = r5 + (r5 << 1);
0x0008d2ce add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0008d2d2 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x0008d2d4 cmp r3, 0x45 |
0x0008d2d6 bne 0x8d2c2 |
| } while (r3 != 0x45);
0x0008d2d8 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0008d2dc movs r1, 0x57 | r1 = 0x57;
0x0008d2de ldr.w r2, [r8, 0x24] | r2 = *((r8 + 0x24));
0x0008d2e2 movs r3, 0 | r3 = 0;
0x0008d2e4 mov r0, sb | r0 = sb;
0x0008d2e6 add r2, r5 | r2 += r5;
0x0008d2e8 adds r5, 1 | r5++;
0x0008d2ea bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008d2ee ldrsh.w r1, [r6, 0x22] | r1 = *((r6 + 0x22));
0x0008d2f2 cmp r1, r5 |
| if (r1 > r5) {
0x0008d2f4 bgt 0x8d2c8 | goto label_1;
| }
| label_13:
0x0008d2f6 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x0008d2f8 movs r2, 0 | r2 = 0;
0x0008d2fa ldr r0, [sp, 0x10] | r0 = var_10h;
0x0008d2fc bl 0x321b0 | fcn_000321b0 (r0, r1, r2, r3, r4);
0x0008d300 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0008d302 mov r5, r0 | r5 = r0;
| if (r3 != 0) {
0x0008d304 cbz r3, 0x8d314 |
0x0008d306 mov r1, r3 | r1 = r3;
0x0008d308 movs r3, 0 | r3 = 0;
0x0008d30a mov r2, r3 | r2 = r3;
0x0008d30c ldr r0, [sp, 0x10] | r0 = var_10h;
0x0008d30e bl 0x31eb4 | r0 = fcn_00031eb4 (r0, r1, r2, r3);
0x0008d312 mov r3, r0 | r3 = r0;
| }
0x0008d314 str r4, [sp, 4] | var_4h = r4;
0x0008d316 movs r4, 2 | r4 = 2;
0x0008d318 mov r2, r5 | r2 = r5;
0x0008d31a mov r1, sl | r1 = sl;
0x0008d31c mov r0, r7 | r0 = r7;
0x0008d31e str r4, [sp] | *(sp) = r4;
0x0008d320 bl 0x8b5c8 | fcn_0008b5c8 (r0, r1, r2, r3, r4, r5, r6);
0x0008d324 add sp, 0x2c |
0x0008d326 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0008d32a ldrb r3, [r7, 0x13] | r3 = *((r7 + 0x13));
| if (r3 == 0) {
0x0008d32c cbz r3, 0x8d372 | goto label_14;
| }
0x0008d32e subs r3, 1 | r3--;
0x0008d330 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008d332 strb r3, [r7, 0x13] | *((r7 + 0x13)) = r3;
0x0008d334 adds r3, 0x26 | r3 += 0x26;
0x0008d336 ldr.w r5, [r7, r3, lsl 2] | offset_1 = r3 << 2;
| r5 = *((r7 + offset_1));
| label_3:
0x0008d33a mov.w sl, 0 | sl = 0;
0x0008d33e ldr r2, [sp, 0x50] | r2 = *(arg_50h);
0x0008d340 mov r3, r5 | r3 = r5;
0x0008d342 movs r1, 0x8e | r1 = 0x8e;
0x0008d344 mov r0, sb | r0 = sb;
0x0008d346 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0008d34a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008d34e ldr r2, [sp, 0x14] | r2 = var_14h;
0x0008d350 mov r3, sl | r3 = sl;
0x0008d352 movs r1, 0x1d | r1 = 0x1d;
0x0008d354 mov r0, sb | r0 = sb;
0x0008d356 str r5, [sp] | *(sp) = r5;
0x0008d358 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008d35c cmp r5, 0 |
| if (r5 == 0) {
0x0008d35e beq 0x8d2a4 | goto label_2;
| }
0x0008d360 ldrb r3, [r7, 0x13] | r3 = *((r7 + 0x13));
0x0008d362 cmp r3, 7 |
| if (r3 > 7) {
0x0008d364 bhi 0x8d2a4 | goto label_2;
| }
0x0008d366 adds r2, r3, 1 | r2 = r3 + 1;
0x0008d368 adds r3, 0x26 | r3 += 0x26;
0x0008d36a strb r2, [r7, 0x13] | *((r7 + 0x13)) = r2;
0x0008d36c str.w r5, [r7, r3, lsl 2] | __asm ("str.w r5, [r7, r3, lsl 2]");
0x0008d370 b 0x8d2a4 | goto label_2;
| label_14:
0x0008d372 ldr r5, [r7, 0x2c] | r5 = *((r7 + 0x2c));
0x0008d374 adds r5, 1 | r5++;
0x0008d376 str r5, [r7, 0x2c] | *((r7 + 0x2c)) = r5;
0x0008d378 b 0x8d33a | goto label_3;
| label_11:
0x0008d37a mov.w r3, -1 | r3 = -1;
0x0008d37e b 0x8d222 | goto label_4;
| label_12:
0x0008d380 ldr r3, [pc, 0x10] |
0x0008d382 add r3, pc | r3 = 0x11a71a;
0x0008d384 adds r3, 4 | r3 += 4;
0x0008d386 b 0x8d2a2 | goto label_5;
| label_9:
0x0008d388 movs r3, 0 | r3 = 0;
0x0008d38a ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x0008d38c udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8d99c */
| #include <stdint.h>
|
; (fcn) fcn.0008d99c () | void fcn_0008d99c (int16_t arg_20h, int16_t arg_24h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008d99c push.w {r4, r5, r6, r7, r8, lr} |
0x0008d9a0 mov r4, r0 | r4 = r0;
0x0008d9a2 ldr r5, [r0, 8] | r5 = *((r0 + 8));
0x0008d9a4 sub sp, 8 |
0x0008d9a6 mov r6, r1 | r6 = r1;
0x0008d9a8 mov r7, r2 | r7 = r2;
0x0008d9aa mov r8, r3 | r8 = r3;
0x0008d9ac cmp r5, 0 |
0x0008d9ae beq 0x8da32 |
| while (1) {
0x0008d9b0 ldr r3, [sp, 0x20] | r3 = *(arg_20h);
0x0008d9b2 mov r2, r7 | r2 = r7;
0x0008d9b4 mov r1, r6 | r1 = r6;
0x0008d9b6 mov r0, r4 | r0 = r4;
0x0008d9b8 bl 0x8d8f4 | r0 = fcn_0008d8f4 (r0, r1, r2, r3);
0x0008d9bc cmp r0, 0 |
| if (r0 != 0) {
0x0008d9be beq 0x8da2c |
0x0008d9c0 ldr r6, [r6] | r6 = *(r6);
| if (r6 != 0) {
0x0008d9c2 cbz r6, 0x8d9d8 |
0x0008d9c4 ldr r2, [r4] | r2 = *(r4);
0x0008d9c6 ldrd r3, r2, [r2, 0x20] | __asm ("ldrd r3, r2, [r2, 0x20]");
0x0008d9ca lsrs r3, r3, 0xd | r3 >>= 0xd;
0x0008d9cc orr.w r3, r3, r2, lsl 19 | r3 |= (r2 << 19);
0x0008d9d0 eor r3, r3, 1 | r3 ^= 1;
0x0008d9d4 and r6, r3, 1 | r6 = r3 & 1;
| }
0x0008d9d8 ldrd r1, r2, [r5, 0x6c] | __asm ("ldrd r1, r2, [r5, 0x6c]");
0x0008d9dc ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0008d9de ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x0008d9e0 cmp r1, r2 |
0x0008d9e2 add.w r3, r3, 1 | r3++;
0x0008d9e6 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
| if (r1 >= r2) {
0x0008d9e8 bge 0x8da40 | goto label_2;
| }
0x0008d9ea add.w r2, r1, r1, lsl 2 | r2 = r1 + (r1 << 2);
0x0008d9ee ldr r4, [r5, 0x68] | r4 = *((r5 + 0x68));
0x0008d9f0 adds r0, r1, 1 | r0 = r1 + 1;
0x0008d9f2 lsls r2, r2, 2 | r2 <<= 2;
0x0008d9f4 str r0, [r5, 0x6c] | *((r5 + 0x6c)) = r0;
0x0008d9f6 mov.w ip, 0 |
0x0008d9fa adds r0, r4, r2 | r0 = r4 + r2;
0x0008d9fc strd r3, ip, [r0, 0xc] | __asm ("strd r3, ip, [r0, 0xc]");
0x0008da00 ldr r3, [sp, 0x24] | r3 = *(arg_24h);
0x0008da02 str.w r8, [r0, 4] | __asm ("str.w r8, [r0, 4]");
0x0008da06 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x0008da08 movs r3, 0x2f | r3 = 0x2f;
0x0008da0a str r3, [r4, r2] | *((r4 + r2)) = r3;
| label_0:
0x0008da0c mov r2, r7 | r2 = r7;
0x0008da0e mvn r3, 3 | r3 = ~3;
0x0008da12 mov r0, r5 | r0 = r5;
0x0008da14 bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
0x0008da18 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x0008da1a cmp r3, 0 |
0x0008da1c itttt gt |
| if (r3 <= 0) {
0x0008da1e ldrgt r2, [r5, 0x68] | r2 = *((r5 + 0x68));
| }
| if (r3 <= 0) {
0x0008da20 addgt r3, r3, r3, lsl 2 | r3 += (r3 << 2);
| }
| if (r3 <= 0) {
0x0008da24 addgt r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| }
| if (r3 <= 0) {
0x0008da28 strh r6, [r3, -0x12] | *((r3 - 0x12)) = r6;
| goto label_3;
| }
| }
| label_3:
0x0008da2c add sp, 8 |
0x0008da2e pop.w {r4, r5, r6, r7, r8, pc} |
0x0008da32 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
| if (r3 == 0) {
0x0008da34 cbz r3, 0x8da52 | goto label_4;
| }
| label_1:
0x0008da36 mov r0, r4 | r0 = r4;
0x0008da38 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x0008da3c mov r5, r0 | r5 = r0;
0x0008da3e b 0x8d9b0 |
| }
| label_2:
0x0008da40 movs r1, 0x2f | r1 = 0x2f;
0x0008da42 str r3, [sp] | *(sp) = r3;
0x0008da44 mov r2, r8 | r2 = r8;
0x0008da46 ldr r3, [sp, 0x24] | r3 = *(arg_24h);
0x0008da48 mov r0, r5 | r0 = r5;
0x0008da4a bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008da4e mov r1, r0 | r1 = r0;
0x0008da50 b 0x8da0c | goto label_0;
| label_4:
0x0008da52 ldr r3, [r0] | r3 = *(r0);
0x0008da54 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0008da56 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x0008da58 itt pl |
| if (r3 < r3) {
0x0008da5a movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0008da5c strbpl r3, [r0, 0x17] | *((r0 + 0x17)) = r3;
| }
0x0008da5e b 0x8da36 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8de04 */
| #include <stdint.h>
|
; (fcn) fcn.0008de04 () | void fcn_0008de04 (int16_t arg_70h, int16_t arg_74h, int16_t arg_78h, int16_t arg_7ch, int16_t arg_80h, int16_t arg_84h, int16_t arg_88h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008de04 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008de08 sub sp, 0x4c |
0x0008de0a str r2, [sp, 0x1c] | var_1ch = r2;
0x0008de0c mov r5, r1 | r5 = r1;
0x0008de0e mov fp, r3 |
0x0008de10 mov r6, r0 | r6 = r0;
0x0008de12 ldr r2, [r0, 0x38] | r2 = *((r0 + 0x38));
0x0008de14 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0008de16 ldr r1, [sp, 0x70] | r1 = *(arg_70h);
0x0008de18 str r2, [sp, 0x30] | var_30h = r2;
0x0008de1a subs r2, 1 | r2--;
0x0008de1c str r2, [sp, 0x24] | var_24h = r2;
0x0008de1e tst.w r3, 0x80 |
0x0008de22 str r2, [r0, 0x38] | *((r0 + 0x38)) = r2;
0x0008de24 ldr r2, [sp, 0x74] | r2 = *(arg_74h);
0x0008de26 ldrb.w r3, [sp, 0x84] | r3 = *(arg_84h);
0x0008de2a ldr.w r8, [r0, 8] | r8 = *((r0 + 8));
0x0008de2e str r2, [sp, 0x2c] | var_2ch = r2;
0x0008de30 ldrsh.w r2, [sp, 0x78] | r2 = *(arg_78h);
0x0008de34 str r1, [sp, 0x40] | var_40h = r1;
0x0008de36 str r3, [sp, 0x34] | var_34h = r3;
0x0008de38 str r2, [sp, 0x3c] | var_3ch = r2;
0x0008de3a ldrb.w r2, [sp, 0x7c] | r2 = *(arg_7ch);
0x0008de3e str r2, [sp, 0x44] | var_44h = r2;
0x0008de40 ldrb.w r2, [sp, 0x80] | r2 = *(arg_80h);
0x0008de44 str r2, [sp, 0x20] | var_20h = r2;
0x0008de46 ldr r2, [sp, 0x88] | r2 = *(arg_88h);
0x0008de48 str r2, [sp, 0x28] | var_28h = r2;
0x0008de4a ite ne |
| if ((r3 & 0x80) == 0) {
0x0008de4c movne r2, 0x1b | r2 = 0x1b;
| }
| if ((r3 & 0x80) != 0) {
0x0008de4e moveq r2, 0x1e | r2 = 0x1e;
| }
0x0008de50 str r2, [sp, 0x38] | var_38h = r2;
0x0008de52 cmp r3, 0 |
| if (r3 == 0) {
0x0008de54 beq.w 0x8e0b2 | goto label_11;
| }
| label_7:
0x0008de58 ldr r3, [r6] | r3 = *(r6);
0x0008de5a ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008de5c lsls r0, r3, 0x11 | r0 = r3 << 0x11;
| if (r0 >= r3) {
0x0008de5e bpl.w 0x8df74 | goto label_12;
| }
0x0008de62 ldrb.w r2, [r5, 0x2b] | r2 = *((r5 + 0x2b));
0x0008de66 cmp r2, 0 |
| if (r2 != 0) {
0x0008de68 bne.w 0x8df74 | goto label_12;
| }
0x0008de6c ldr r0, [r5, 0x3c] | r0 = *((r5 + 0x3c));
0x0008de6e ldr r1, [r5] | r1 = *(r5);
0x0008de70 adds r0, 0x38 | r0 += 0x38;
0x0008de72 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x0008de76 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0008de78 cmp r3, 0 |
| if (r3 == 0) {
0x0008de7a beq.w 0x8dfc8 | goto label_13;
| }
| label_0:
0x0008de7e ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008de80 movs r2, 3 | r2 = 3;
0x0008de82 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0008de84 mov r0, r6 | r0 = r6;
0x0008de86 str r2, [sp] | *(sp) = r2;
0x0008de88 strd r5, r3, [sp, 4] | __asm ("strd r5, r3, [var_4h]");
0x0008de8c movs r3, 0 | r3 = 0;
0x0008de8e mov r2, r3 | r2 = r3;
0x0008de90 bl 0x8d928 | fcn_0008d928 (r0, r1, r2, r3, r4, r5, r6);
0x0008de94 ldr r3, [r6] | r3 = *(r6);
0x0008de96 mov sb, r0 | sb = r0;
0x0008de98 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008de9a lsls r1, r3, 0x11 | r1 = r3 << 0x11;
| if (r1 < r3) {
0x0008de9c bmi.w 0x8dfb0 | goto label_14;
| }
| label_4:
0x0008dea0 ldrsh.w r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x0008dea4 movs r4, 0 | r4 = 0;
0x0008dea6 ldr r7, [r6, 0x2c] | r7 = *((r6 + 0x2c));
0x0008dea8 movs r1, 0x50 | r1 = 0x50;
0x0008deaa ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008deac mov r0, r8 | r0 = r8;
0x0008deae adds r3, 1 | r3++;
0x0008deb0 add r3, r7 | r3 += r7;
0x0008deb2 adds r7, 1 | r7++;
0x0008deb4 str r3, [r6, 0x2c] | *((r6 + 0x2c)) = r3;
0x0008deb6 mov r3, r7 | r3 = r7;
0x0008deb8 str r4, [sp] | *(sp) = r4;
0x0008deba bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008debe ldrsh.w r2, [r5, 0x22] | r2 = *((r5 + 0x22));
0x0008dec0 movs r0, 0x22 | r0 = 0x22;
0x0008dec2 cmp r2, r4 |
0x0008dec4 itt gt |
| if (r2 <= r4) {
0x0008dec6 movgt sl, r4 | sl = r4;
| }
| if (r2 <= r4) {
0x0008dec8 movgt r4, 1 | r4 = 1;
| }
| if (r2 <= r4) {
0x0008deca ble 0x8deea | goto label_3;
| }
| label_2:
0x0008decc cmp.w sb, -1 |
| if (sb == -1) {
0x0008ded0 beq 0x8df7e | goto label_15;
| }
| do {
0x0008ded2 cmp.w sl, 0x1f |
0x0008ded6 lsl.w r3, r4, sl | r3 = r4 << sl;
| if (sl > 0x1f) {
0x0008deda bgt 0x8dfa6 | goto label_16;
| }
0x0008dedc tst.w r3, sb |
| if ((r3 & sb) != 0) {
0x0008dee0 bne 0x8df7e | goto label_15;
| }
0x0008dee2 add.w sl, sl, 1 | sl++;
0x0008dee6 cmp sl, r2 |
0x0008dee8 blt 0x8ded2 |
| } while (sl < r2);
| label_3:
0x0008deea movs r3, 1 | r3 = 1;
0x0008deec ldr.w r4, [r8, 0x6c] | r4 = *((r8 + 0x6c));
0x0008def0 str r3, [sp] | *(sp) = r3;
0x0008def2 movs r2, 0x80 | r2 = 0x80;
0x0008def4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008def6 mov r0, r6 | r0 = r6;
0x0008def8 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0008defa str r5, [sp, 4] | var_4h = r5;
0x0008defc str r3, [sp, 0x10] | var_10h = r3;
0x0008defe ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008df00 strd r7, r3, [sp, 8] | __asm ("strd r7, r3, [var_8h]");
0x0008df04 movs r3, 0 | r3 = 0;
0x0008df06 bl 0x8da60 | fcn_0008da60 (r0, r1, r2, r3, r4, r5, r6);
0x0008df0a ldr.w r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
0x0008df0e cmp r3, r4 |
| if (r3 > r4) {
0x0008df10 bgt.w 0x8e0c8 | goto label_17;
| }
| label_8:
0x0008df14 movs r3, 0 | r3 = 0;
0x0008df16 mov r2, r7 | r2 = r7;
0x0008df18 mov r1, r5 | r1 = r5;
0x0008df1a mov r0, r6 | r0 = r6;
0x0008df1c strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x0008df20 bl 0x8b0dc | fcn_0008b0dc (r0, r1, r2, r3, r4, r5, r6);
| label_1:
0x0008df24 ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x0008df28 cmp r3, 2 |
| if (r3 != 2) {
0x0008df2a bne 0x8dfda | goto label_18;
| }
| label_5:
0x0008df2c ldr r3, [r6] | r3 = *(r6);
0x0008df2e ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008df30 lsls r3, r3, 0x11 | r3 <<= 0x11;
| if (r3 < r3) {
0x0008df32 bmi.w 0x8e070 | goto label_19;
| }
| label_6:
0x0008df36 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008df38 mov r0, r6 | r0 = r6;
0x0008df3a movs r2, 0x80 | r2 = 0x80;
0x0008df3c ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0008df3e str r5, [sp, 4] | var_4h = r5;
0x0008df40 str r3, [sp, 0x10] | var_10h = r3;
0x0008df42 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0008df44 strd r7, r3, [sp, 8] | __asm ("strd r7, r3, [var_8h]");
0x0008df48 movs r3, 2 | r3 = 2;
0x0008df4a str r3, [sp] | *(sp) = r3;
0x0008df4c movs r3, 0 | r3 = 0;
0x0008df4e bl 0x8da60 | fcn_0008da60 (r0, r1, r2, r3, r4, r5, r6);
0x0008df52 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x0008df56 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008df5a cmn r2, r3 |
| if (r2 < r3) {
0x0008df5c bmi.w 0x8e0e4 | goto label_20;
| }
0x0008df60 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008df62 ldr.w r1, [r8, 0x6c] | r1 = *((r8 + 0x6c));
0x0008df66 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008df68 lsls r3, r3, 2 | r3 <<= 2;
0x0008df6a rsbs r3, r3, 0 | r3 -= ;
0x0008df6c str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0008df6e add sp, 0x4c |
0x0008df70 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x0008df74 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008df76 mov r7, r3 | r7 = r3;
0x0008df78 cmp r3, 0 |
| if (r3 != 0) {
0x0008df7a bne 0x8de7e | goto label_0;
| }
0x0008df7c b 0x8df24 | goto label_1;
| label_15:
0x0008df7e ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0008df80 sxth.w r1, sl | __asm ("sxth.w r1, sl");
0x0008df84 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 < r3) {
0x0008df86 bpl 0x8df90 |
0x0008df88 mov r0, r5 | r0 = r5;
0x0008df8a bl 0xfdbc | r0 = fcn_0000fdbc (r0, r1);
0x0008df8e mov r1, r0 | r1 = r0;
| }
0x0008df90 add r1, r7 | r1 += r7;
0x0008df92 mov r2, fp | r2 = fp;
0x0008df94 adds r1, 1 | r1++;
0x0008df96 mov r3, sl | r3 = sl;
0x0008df98 str r1, [sp] | *(sp) = r1;
0x0008df9a mov r0, r8 | r0 = r8;
0x0008df9c mov r1, r5 | r1 = r5;
0x0008df9e bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
0x0008dfa2 ldrsh.w r2, [r5, 0x22] | r2 = *((r5 + 0x22));
| label_16:
0x0008dfa6 add.w sl, sl, 1 | sl++;
0x0008dfaa cmp r2, sl |
| if (r2 > sl) {
0x0008dfac bgt 0x8decc | goto label_2;
| }
0x0008dfae b 0x8deea | goto label_3;
| label_14:
0x0008dfb0 ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x0008dfb4 cmp r3, 0 |
| if (r3 != 0) {
0x0008dfb6 bne.w 0x8dea0 | goto label_4;
| }
0x0008dfba mov r1, r5 | r1 = r5;
0x0008dfbc mov r0, r6 | r0 = r6;
0x0008dfbe bl 0x24a84 | r0 = fcn_00024a84 (r0, r1);
0x0008dfc2 orr.w sb, sb, r0 | sb |= r0;
0x0008dfc6 b 0x8dea0 | goto label_4;
| label_13:
0x0008dfc8 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0008dfca cmp r3, 0 |
| if (r3 != 0) {
0x0008dfcc bne.w 0x8de7e | goto label_0;
| }
0x0008dfd0 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0008dfd2 mov r7, r3 | r7 = r3;
0x0008dfd4 cmp r3, 0 |
| if (r3 != 0) {
0x0008dfd6 bne.w 0x8de7e | goto label_0;
| }
| label_18:
0x0008dfda ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008dfdc movs r4, 0 | r4 = 0;
0x0008dfde str r4, [sp, 4] | var_4h = r4;
0x0008dfe0 mov r0, r6 | r0 = r6;
0x0008dfe2 str r3, [sp] | *(sp) = r3;
0x0008dfe4 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008dfe6 str r3, [sp, 8] | var_8h = r3;
0x0008dfe8 mov r3, fp | r3 = fp;
0x0008dfea ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x0008dfec ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0008dfee bl 0x757c8 | fcn_000757c8 (r0, r1, r2, r3, r4, r5, r6);
0x0008dff2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008dff4 mov r2, fp | r2 = fp;
0x0008dff6 movs r1, 0x82 | r1 = 0x82;
0x0008dff8 mov r0, r8 | r0 = r8;
0x0008dffa str r4, [sp] | *(sp) = r4;
0x0008dffc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008e000 ldrb r3, [r6, 0x12] | r3 = *((r6 + 0x12));
| if (r3 != 0) {
0x0008e002 cbz r3, 0x8e010 |
0x0008e004 ldr r1, [pc, 0x144] |
0x0008e006 ldr r0, [r5] | r0 = *(r5);
0x0008e008 add r1, pc | r1 = 0x11c158;
0x0008e00a blx 0x8540 | r0 = fcn_00008540 ();
| if (r0 != 0) {
0x0008e00e cbnz r0, 0x8e032 | goto label_21;
| }
| }
0x0008e010 ldr.w r3, [r8] | r3 = *(r8);
0x0008e014 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x0008e018 cbnz r3, 0x8e032 |
0x0008e01a ldr.w r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
0x0008e01e ldr.w r2, [r8, 0x68] | r2 = *((r8 + 0x68));
0x0008e022 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0008e026 lsls r3, r3, 2 | r3 <<= 2;
0x0008e028 subs r3, 0x14 | r3 -= 0x14;
0x0008e02a add r3, r2 | r3 += r2;
0x0008e02c movs r2, 0xfb | r2 = 0xfb;
0x0008e02e str r5, [r3, 0x10] | *((r3 + 0x10)) = r5;
0x0008e030 strb r2, [r3, 1] | *((r3 + 1)) = r2;
| }
| label_21:
0x0008e032 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008e034 mvns r0, r3 | r0 = ~r3;
0x0008e036 cmp r3, fp |
0x0008e038 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008e03a lsr.w r0, r0, 0x1f | r0 >>= 0x1f;
0x0008e03e it eq |
| if (r3 != fp) {
0x0008e040 moveq r0, 0 | r0 = 0;
| }
0x0008e042 cmp r3, 0 |
| if (r3 != 0) {
0x0008e044 bne 0x8e0f4 | goto label_22;
| }
0x0008e046 cmp r0, 0 |
| if (r0 != 0) {
0x0008e048 bne 0x8e128 | goto label_23;
| }
0x0008e04a ldr r0, [sp, 0x34] | r0 = var_34h;
0x0008e04c ldr.w r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
| label_10:
0x0008e050 cmp r3, 0 |
| if (r3 <= 0) {
0x0008e052 ble.w 0x8df2c | goto label_5;
| }
0x0008e056 ldr.w r2, [r8, 0x68] | r2 = *((r8 + 0x68));
0x0008e05a lsls r1, r3, 2 | r1 = r3 << 2;
| label_9:
0x0008e05c add r1, r3 | r1 += r3;
0x0008e05e ldr r3, [r6] | r3 = *(r6);
0x0008e060 add.w r2, r2, r1, lsl 2 | r2 += (r1 << 2);
0x0008e064 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008e066 strh r0, [r2, -0x12] | *((r2 - 0x12)) = r0;
0x0008e06a lsls r3, r3, 0x11 | r3 <<= 0x11;
| if (r3 >= r3) {
0x0008e06c bpl.w 0x8df36 | goto label_6;
| }
| label_19:
0x0008e070 ldr r0, [r5, 0x3c] | r0 = *((r5 + 0x3c));
0x0008e072 movs r2, 0 | r2 = 0;
0x0008e074 ldr r1, [r5] | r1 = *(r5);
0x0008e076 adds r0, 0x38 | r0 += 0x38;
0x0008e078 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x0008e07c ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x0008e07e cmp r4, 0 |
| if (r4 == 0) {
0x0008e080 beq.w 0x8df36 | goto label_6;
| }
0x0008e084 mov.w fp, 0 |
0x0008e088 mov.w sb, 2 | sb = 2;
| do {
0x0008e08c mov r2, r4 | r2 = r4;
0x0008e08e movs r3, 0 | r3 = 0;
0x0008e090 mov r1, r5 | r1 = r5;
0x0008e092 mov r0, r6 | r0 = r6;
0x0008e094 bl 0x33138 | r0 = fcn_00033138 (r0, r1, r2, r3, r4);
0x0008e098 mov r1, r0 | r1 = r0;
0x0008e09a mov r3, r7 | r3 = r7;
0x0008e09c mov r2, r5 | r2 = r5;
0x0008e09e mov r0, r6 | r0 = r6;
| if (r1 != 0) {
0x0008e0a0 cbz r1, 0x8e0aa |
0x0008e0a2 strd sb, fp, [sp] | __asm ("strd sb, fp, [sp]");
0x0008e0a6 bl 0x8d99c | fcn_0008d99c (r0, r1, r2, r3, r4, r5);
| }
0x0008e0aa ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
0x0008e0ac cmp r4, 0 |
0x0008e0ae bne 0x8e08c |
| } while (r4 != 0);
0x0008e0b0 b 0x8df36 | goto label_6;
| label_11:
0x0008e0b2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008e0b4 mov r2, fp | r2 = fp;
0x0008e0b6 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0008e0b8 mov r0, r8 | r0 = r8;
0x0008e0ba str r3, [sp, 4] | var_4h = r3;
0x0008e0bc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008e0be str r3, [sp] | *(sp) = r3;
0x0008e0c0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008e0c2 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0008e0c6 b 0x8de58 | goto label_7;
| label_17:
0x0008e0c8 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008e0ca mov r2, fp | r2 = fp;
0x0008e0cc ldr r1, [sp, 0x38] | r1 = var_38h;
0x0008e0ce mov r0, r8 | r0 = r8;
0x0008e0d0 str r3, [sp, 4] | var_4h = r3;
0x0008e0d2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008e0d4 str r3, [sp] | *(sp) = r3;
0x0008e0d6 mov.w r3, -1 | r3 = -1;
0x0008e0da str r3, [sp, 0x28] | var_28h = r3;
0x0008e0dc ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008e0de bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0008e0e2 b 0x8df14 | goto label_8;
| label_20:
0x0008e0e4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008e0e6 mov r1, r8 | r1 = r8;
0x0008e0e8 rsbs r2, r3, 0 | r2 = r3 - ;
0x0008e0ea add sp, 0x4c |
0x0008e0ec pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008e0f0 b.w 0x3008c | void (*0x3008c)() ();
| label_22:
0x0008e0f4 ldr.w r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
0x0008e0f8 cmp r3, 0 |
| if (r3 > 0) {
0x0008e0fa ble 0x8e122 |
0x0008e0fc ldr.w r2, [r8, 0x68] | r2 = *((r8 + 0x68));
0x0008e100 lsls r1, r3, 2 | r1 = r3 << 2;
0x0008e102 mov.w ip, 4 |
0x0008e106 adds r4, r1, r3 | r4 = r1 + r3;
0x0008e108 add.w r4, r2, r4, lsl 2 | r4 = r2 + (r4 << 2);
0x0008e10c strh ip, [r4, -0x12] | *((r4 - 0x12)) = ip;
| if (r0 != 0) {
0x0008e110 cbnz r0, 0x8e128 | goto label_23;
| }
0x0008e112 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0008e114 sub.w r0, r0, 2 | r0 -= 2;
0x0008e118 clz r0, r0 | r0 &= r0;
0x0008e11c lsrs r0, r0, 5 | r0 >>= 5;
0x0008e11e lsls r0, r0, 1 | r0 <<= 1;
0x0008e120 b 0x8e05c | goto label_9;
| }
0x0008e122 cmp r0, 0 |
| if (r0 == 0) {
0x0008e124 beq.w 0x8df2c | goto label_5;
| }
| label_23:
0x0008e128 movs r3, 0 | r3 = 0;
0x0008e12a ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008e12c str r3, [sp] | *(sp) = r3;
0x0008e12e movs r1, 0x82 | r1 = 0x82;
0x0008e130 mov r0, r8 | r0 = r8;
0x0008e132 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008e136 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008e138 sub.w r0, r3, 2 | r0 = r3 - 2;
0x0008e13c ldr.w r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
0x0008e140 clz r0, r0 | r0 &= r0;
0x0008e144 lsrs r0, r0, 5 | r0 >>= 5;
0x0008e146 lsls r0, r0, 1 | r0 <<= 1;
0x0008e148 b 0x8e050 | goto label_10;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8e150 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0008e150 () | void fcn_0008e150 (int16_t arg_30h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_108h, int16_t arg_10ch, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg_11ch, int16_t arg_120h, int16_t arg_124h, int16_t arg_128h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| arithmetic var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| arithmetic var_24h;
| arithmetic var_28h;
| int16_t var_2ch;
| arithmetic var_30h;
| int16_t var_34h;
| int16_t var_38h;
| arithmetic var_3ch;
| int16_t var_40h;
| arithmetic var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| arithmetic var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| arithmetic var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| arithmetic var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int32_t var_94h_2;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int32_t var_b0h_2;
| int16_t var_b8h;
| int32_t var_b8h_2;
| arithmetic x;
| int16_t var_c4h;
| int32_t var_c8h;
| int32_t var_c8h_2;
| int32_t var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| int16_t var_dch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008e150 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008e154 sub sp, 0xe4 |
0x0008e156 mov r4, r0 | r4 = r0;
0x0008e158 str r0, [sp, 0x28] | var_28h = r0;
0x0008e15a mov sl, r1 | sl = r1;
0x0008e15c ldr.w r0, [pc, 0xaf0] |
0x0008e160 ldr.w r1, [pc, 0xaf0] | r1 = *(0x8ec54);
0x0008e164 ldr.w sb, [r4, 8] | sb = *((r4 + 8));
0x0008e168 add r0, pc | r0 = 0x11cdbc;
0x0008e16a ldrsh.w r8, [sl, 0x22] | r8 = *((sl + 0x22));
0x0008e16e ldr r1, [r0, r1] |
0x0008e170 ldr r1, [r1] | r1 = imp.sinh;
0x0008e172 str r1, [sp, 0xdc] | var_dch = r1;
0x0008e174 mov.w r1, 0 | r1 = 0;
0x0008e178 ldrb.w r1, [sp, 0x114] | r1 = *(arg_114h);
0x0008e17c str r3, [sp, 0x90] | var_90h = r3;
0x0008e17e ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008e180 str r1, [sp, 0x64] | var_64h = r1;
0x0008e182 ldrb.w r1, [sp, 0x118] | r1 = *(arg_118h);
0x0008e186 str r2, [sp, 0x34] | var_34h = r2;
0x0008e188 subs r3, 0 |
0x0008e18a ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x0008e18e it ne |
| if (r3 == 0) {
0x0008e190 movne r3, 1 | r3 = 1;
| }
0x0008e192 str r1, [sp, 0x38] | var_38h = r1;
0x0008e194 ldr r1, [sp, 0x120] | r1 = *(arg_120h);
0x0008e196 str r3, [sp, 0x58] | var_58h = r3;
0x0008e198 ands r3, r2, 0x80 | r3 = r2 & 0x80;
0x0008e19c str r1, [sp, 0xa4] | var_a4h = r1;
0x0008e19e ldr r1, [sp, 0x124] | r1 = *(arg_124h);
0x0008e1a0 str r1, [sp, 0x50] | var_50h = r1;
0x0008e1a2 ldr r1, [sp, 0x128] | r1 = *(arg_128h);
0x0008e1a4 str r1, [sp, 0x40] | var_40h = r1;
0x0008e1a6 ldr r1, [r4] | r1 = *(r4);
0x0008e1a8 str r1, [sp, 0x3c] | var_3ch = r1;
| if (r3 == r2) {
0x0008e1aa beq.w 0x8e36e | goto label_86;
| }
0x0008e1ae ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0008e1b2 str r3, [sp, 0x48] | var_48h = r3;
0x0008e1b4 ldr r1, [sp, 0x48] | r1 = var_48h;
| if (r3 != 0) {
0x0008e1b6 cbnz r3, 0x8e1c4 | goto label_87;
| }
0x0008e1b8 b.w 0x8f650 | goto label_88;
| do {
0x0008e1bc ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x0008e1be cmp r1, 0 |
| if (r1 == 0) {
0x0008e1c0 beq.w 0x8f650 | goto label_88;
| }
| label_87:
0x0008e1c4 ldrb.w r3, [r1, 0x37] | r3 = *((r1 + 0x37));
0x0008e1c8 and r3, r3, 3 | r3 &= 3;
0x0008e1cc cmp r3, 2 |
0x0008e1ce bne 0x8e1bc |
| } while (r3 != 2);
0x0008e1d0 ldrh r3, [r1, 0x32] | r3 = *((r1 + 0x32));
0x0008e1d2 lsls r4, r2, 0x14 | r4 = r2 << 0x14;
0x0008e1d4 str r1, [sp, 0x48] | var_48h = r1;
0x0008e1d6 str r3, [sp, 0x6c] | var_6ch = r3;
| if (r4 < r2) {
0x0008e1d8 bmi.w 0x8e37c | goto label_89;
| }
| label_0:
0x0008e1dc ldr.w fp, [sl, 0x10] | fp = *((sl + 0x10));
0x0008e1e0 cmp.w fp, 0 |
| if (fp == 0) {
0x0008e1e4 beq.w 0x8efea | goto label_90;
| }
0x0008e1e8 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008e1ea ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008e1ec and r3, r3, 0x200 | r3 &= 0x200;
0x0008e1f0 cmp r3, 0 |
| if (r3 != 0) {
0x0008e1f2 bne.w 0x8e60a | goto label_91;
| }
0x0008e1f6 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0008e1f8 ldr.w r0, [fp] | r0 = *(fp);
0x0008e1fc ldr r2, [sp, 0x10c] | r2 = *(arg_10ch);
0x0008e1fe cmp r1, 0xb |
0x0008e200 ldr r7, [sp, 0x28] | r7 = var_28h;
0x0008e202 ite ne |
| if (r1 == 0xb) {
0x0008e204 movne r8, r1 | r8 = r1;
| }
| if (r1 != 0xb) {
0x0008e206 moveq r8, 2 | r8 = 2;
| }
0x0008e20a cmp r0, 0 |
0x0008e20c mvn.w r2, r2 | r2 = ~r2;
0x0008e210 str r2, [r7, 0x34] | *((r7 + 0x34)) = r2;
| if (r0 <= 0) {
0x0008e212 ble.w 0x8f57e | goto label_92;
| }
0x0008e216 ldr.w r2, [pc, 0xa40] | r2 = *(0x0008ec58);
0x0008e21a mov r4, r3 | r4 = r3;
0x0008e21c mov r5, fp | r5 = fp;
0x0008e21e mov r6, r3 | r6 = r3;
0x0008e220 str.w sl, [sp, 0x30] | __asm ("str.w sl, [var_30h]");
0x0008e224 add r2, pc | r2 += pc;
0x0008e226 str r2, [sp, 0x24] | var_24h = r2;
| do {
0x0008e228 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008e22a ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0008e22c cmp r2, 0 |
| if (r2 == 0) {
0x0008e22e beq.w 0x8e836 | goto label_93;
| }
0x0008e232 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008e234 add r0, sp, 0xc0 | r0 += x;
0x0008e236 str r2, [sp, 0xc4] | var_c4h = r2;
0x0008e238 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008e23a str r2, [sp, 0xd8] | var_d8h = r2;
0x0008e23c movs r2, 0 | r2 = 0;
0x0008e23e str r2, [sp, 0xc0] | x = r2;
0x0008e240 strd r2, r2, [sp, 0xc8] | __asm ("strd r2, r2, [var_c8h]");
0x0008e244 strd r2, r2, [sp, 0xd0] | __asm ("strd r2, r2, [var_d4h]");
0x0008e248 cmp r3, 0 |
| if (r3 != 0) {
0x0008e24a beq 0x8e2e2 |
0x0008e24c mov r1, r3 | r1 = r3;
0x0008e24e str r3, [sp, 0x2c] | var_2ch = r3;
0x0008e250 bl 0x30f3c | fcn_00030f3c (r0, r1);
0x0008e254 ldr r1, [sp, 0x64] | r1 = var_64h;
0x0008e256 ldrh.w r2, [sp, 0xd4] | r2 = var_d4h;
0x0008e25a ldr r3, [sp, 0x2c] | r3 = var_2ch;
| if (r1 == 0) {
0x0008e25c cbnz r1, 0x8e266 |
0x0008e25e bic r2, r2, 2 | r2 = BIT_MASK (r2, 2);
0x0008e262 lsls r2, r2, 0x10 | r2 <<= 0x10;
0x0008e264 lsrs r2, r2, 0x10 | r2 >>= 0x10;
| }
0x0008e266 cmp r2, 0 |
| if (r2 == 0) {
0x0008e268 beq 0x8e2e2 | goto label_94;
| }
0x0008e26a cmp r4, 0 |
| if (r4 == 0) {
0x0008e26c beq.w 0x8e888 | goto label_95;
| }
0x0008e270 ldr r4, [r7, 0x38] | r4 = *((r7 + 0x38));
0x0008e272 add.w sl, r4, -1 | sl = r4 + -1;
0x0008e276 str.w sl, [r7, 0x38] | __asm ("str.w sl, [r7, 0x38]");
| label_15:
0x0008e27a mov r1, r3 | r1 = r3;
0x0008e27c movs r3, 0 | r3 = 0;
0x0008e27e mov r2, r3 | r2 = r3;
0x0008e280 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0008e282 bl 0x31eb4 | fcn_00031eb4 (r0, r1, r2, r3);
0x0008e286 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008e288 mov r1, r0 | r1 = r0;
0x0008e28a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008e28e cmp r3, 0 |
| if (r3 == 0) {
0x0008e290 beq.w 0x8e826 | goto label_96;
| }
| if (r1 != 0) {
| label_14:
0x0008e294 cbz r1, 0x8e29c |
0x0008e296 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0008e298 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
| label_16:
0x0008e29c cmp.w r8, 4 |
| if (r8 == 4) {
0x0008e2a0 beq.w 0x8e868 | goto label_97;
| }
| label_17:
0x0008e2a4 cmp.w r8, 5 |
0x0008e2a8 mov.w r2, 0 | r2 = 0;
0x0008e2ac it eq |
| if (r8 != 5) {
0x0008e2ae moveq r8, 2 | r8 = 2;
| }
0x0008e2b2 movs r1, 3 | r1 = 3;
0x0008e2b4 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0008e2b6 mov r0, r7 | r0 = r7;
0x0008e2b8 strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x0008e2bc mov r2, r8 | r2 = r8;
0x0008e2be movw r1, 0x113 | r1 = 0x113;
0x0008e2c2 bl 0x2eda0 | fcn_0002eda0 (r0, r1, r2, r3, r4, r5);
0x0008e2c6 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008e2ca ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008e2ce cmn r2, r3 |
| if (r2 < r3) {
0x0008e2d0 bmi.w 0x8e87e | goto label_98;
| }
| label_18:
0x0008e2d4 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008e2d6 lsls r4, r4, 2 | r4 <<= 2;
0x0008e2d8 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0008e2dc rsbs r4, r4, 0 | r4 -= ;
0x0008e2de str r2, [r3, r4] | *((r3 + r4)) = r2;
| label_19:
0x0008e2e0 movs r4, 1 | r4 = 1;
| }
| label_94:
0x0008e2e2 ldr.w r3, [fp] | r3 = *(fp);
0x0008e2e6 adds r6, 1 | r6++;
0x0008e2e8 adds r5, 0x10 | r5 += 0x10;
0x0008e2ea cmp r3, r6 |
0x0008e2ec bgt 0x8e228 |
| } while (r3 > r6);
0x0008e2ee ldr.w sl, [sp, 0x30] | sl = var_30h;
0x0008e2f2 str r4, [sp, 0x2c] | var_2ch = r4;
| label_79:
0x0008e2f4 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008e2f6 movs r3, 0 | r3 = 0;
0x0008e2f8 str r3, [r2, 0x34] | *((r2 + 0x34)) = r3;
0x0008e2fa ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008e2fc ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0008e300 str r3, [sp, 0x24] | var_24h = r3;
0x0008e302 cmp r2, 0 |
| if (r2 != 0) {
0x0008e304 bne.w 0x8e61c | goto label_99;
| }
| label_11:
0x0008e308 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008e30a str r3, [sp, 0x60] | var_60h = r3;
0x0008e30c str r3, [sp, 0x44] | var_44h = r3;
| label_56:
0x0008e30e ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008e310 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008e312 tst.w r3, 0x6000 |
| if ((r3 & 0x6000) == 0) {
0x0008e316 beq.w 0x8e6fe | goto label_54;
| }
| label_13:
0x0008e31a and r3, r3, 0x2000 | r3 &= 0x2000;
0x0008e31e cmp r3, 0 |
| if (r3 == 0) {
0x0008e320 beq.w 0x8f024 | goto label_100;
| }
0x0008e324 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x0008e328 cmp r3, 0 |
| if (r3 == 0) {
0x0008e32a beq.w 0x8f140 | goto label_101;
| }
| label_63:
0x0008e32e ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008e330 ldrb.w r3, [r3, 0x97] | r3 = *((r3 + 0x97));
0x0008e334 cmp r3, 0 |
| if (r3 != 0) {
0x0008e336 bne.w 0x8f154 | goto label_102;
| }
0x0008e33a ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008e33c movs r2, 0x80 | r2 = 0x80;
0x0008e33e mov r1, sl | r1 = sl;
0x0008e340 str r3, [sp] | *(sp) = r3;
0x0008e342 bl 0x24470 | fcn_00024470 (r0, r1, r2, r3, r4);
0x0008e346 str r0, [sp, 0xa0] | var_a0h = r0;
0x0008e348 cmp r0, 0 |
| if (r0 == 0) {
0x0008e34a beq.w 0x8f154 | goto label_102;
| }
| label_55:
0x0008e34e ldr r4, [sp, 0x28] | r4 = var_28h;
0x0008e350 movs r2, 0 | r2 = 0;
0x0008e352 movs r1, 0x47 | r1 = 0x47;
0x0008e354 mov r0, sb | r0 = sb;
0x0008e356 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0008e358 adds r3, 1 | r3++;
0x0008e35a str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0008e35c str r2, [sp] | *(sp) = r2;
0x0008e35e str r3, [sp, 0x80] | var_80h = r3;
0x0008e360 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008e364 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0008e366 subs r3, 1 | r3--;
0x0008e368 str r3, [sp, 0x9c] | var_9ch = r3;
0x0008e36a str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
0x0008e36c b 0x8e706 | goto label_103;
| label_86:
0x0008e36e lsls r4, r2, 0x14 | r4 = r2 << 0x14;
0x0008e370 str r3, [sp, 0x48] | var_48h = r3;
0x0008e372 mov.w r3, 1 | r3 = 1;
0x0008e376 str r3, [sp, 0x6c] | var_6ch = r3;
| if (r4 >= r2) {
0x0008e378 bpl.w 0x8e1dc | goto label_0;
| }
| label_89:
0x0008e37c ldr.w r2, [pc, 0x8dc] | r2 = *(0x0008ec5c);
0x0008e380 movs r3, 0 | r3 = 0;
0x0008e382 ldr.w fp, [sp, 0x50] | fp = var_50h;
0x0008e386 mov lr, r3 | lr = r3;
0x0008e388 str r3, [sp, 0x2c] | var_2ch = r3;
0x0008e38a add r2, pc | r2 += pc;
0x0008e38c str r3, [sp, 0x44] | var_44h = r3;
0x0008e38e str r2, [sp, 0x54] | var_54h = r2;
0x0008e390 ldr.w r2, [pc, 0x8cc] |
0x0008e394 add r2, pc | r2 = 0x11cff8;
0x0008e396 str r2, [sp, 0x68] | var_68h = r2;
| label_1:
0x0008e398 cmp.w r8, 0 |
0x0008e39c itt le |
| if (r8 > 0) {
0x0008e39e andle r3, lr, 1 | r3 = lr & 1;
| }
| if (r8 <= 0) {
0x0008e3a2 str r3, [sp, 0x30] | var_30h = r3;
| }
| if (r8 <= 0) {
0x0008e3a4 ble.w 0x8e4e4 | goto label_104;
| }
0x0008e3a8 and r3, lr, 1 | r3 = lr & 1;
0x0008e3ac movs r4, 0 | r4 = 0;
0x0008e3ae str r3, [sp, 0x30] | var_30h = r3;
0x0008e3b0 eor r3, lr, 1 | r3 = lr ^ 1;
0x0008e3b4 str r3, [sp, 0x24] | var_24h = r3;
0x0008e3b6 str.w lr, [sp, 0x4c] | __asm ("str.w lr, [var_4ch]");
| do {
0x0008e3ba ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0008e3be add.w r2, r4, r4, lsl 1 | r2 = r4 + (r4 << 1);
0x0008e3c2 add.w r6, r3, r2, lsl 2 | r6 = r3 + (r2 << 2);
0x0008e3c6 ldrb r5, [r6, 4] | r5 = *((r6 + 4));
0x0008e3c8 ands r5, r5, 0xf | r5 &= 0xf;
| if (r5 != r5) {
0x0008e3cc beq.w 0x8e4dc |
0x0008e3d0 ldrsh.w r1, [sl, 0x20] | r1 = *((sl + 0x20));
0x0008e3d4 cmp r1, r4 |
| if (r1 == r4) {
0x0008e3d6 beq.w 0x8e4dc | goto label_3;
| }
0x0008e3da ldrh r1, [r6, 0xa] | r1 = *((r6 + 0xa));
0x0008e3dc ldr r0, [sp, 0x24] | r0 = var_24h;
0x0008e3de ands r1, r1, 0x60 | r1 &= 0x60;
0x0008e3e2 and r0, r0, 1 | r0 &= 1;
0x0008e3e6 it eq |
| if (r1 != r1) {
0x0008e3e8 moveq r0, 0 | r0 = 0;
| }
0x0008e3ea cmp r0, 0 |
| if (r0 != 0) {
0x0008e3ec bne.w 0x8e5ca | goto label_105;
| }
0x0008e3f0 cmp.w fp, 0 |
| if (fp != 0) {
0x0008e3f4 beq 0x8e406 |
0x0008e3f6 ldr.w r0, [fp, r4, lsl 2] | offset_0 = r4 << 2;
| r0 = *((fp + offset_0));
0x0008e3fa clz r7, r1 | r7 &= r1;
0x0008e3fe lsrs r7, r7, 5 | r7 >>= 5;
0x0008e400 ands.w r7, r7, r0, lsr 31 | r7 &= (r0 >> 31);
| if (r7 != r7) {
0x0008e404 bne 0x8e4dc | goto label_3;
| }
| }
0x0008e406 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008e408 cmp r0, 0xb |
0x0008e40a it ne |
| if (r0 == 0xb) {
0x0008e40c movne r5, r0 | r5 = r0;
| }
| if (r0 == 0xb) {
0x0008e40e beq.w 0x8e5d2 | goto label_106;
| }
| label_4:
0x0008e412 cmp r5, 5 |
| if (r5 == 5) {
0x0008e414 beq 0x8e50a | goto label_107;
| }
| label_5:
0x0008e416 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0008e418 cmp r1, 0 |
0x0008e41a ite ne |
| if (r1 == 0) {
0x0008e41c movne r0, 0 | r0 = 0;
| }
| if (r1 != 0) {
0x0008e41e andeq r0, r0, 1 | r0 &= 1;
| }
0x0008e422 cmp r0, 0 |
| if (r0 != 0) {
0x0008e424 bne 0x8e4dc | goto label_3;
| }
0x0008e426 ldr.w r0, [sl, 0x1c] | r0 = *((sl + 0x1c));
0x0008e42a sxth r1, r4 | __asm ("sxth r1, r4");
0x0008e42c lsls r0, r0, 0x1a | r0 <<= 0x1a;
| if (r0 < r0) {
0x0008e42e bpl 0x8e440 |
0x0008e430 mov r0, sl | r0 = sl;
0x0008e432 strd r2, r3, [sp, 0x5c] | __asm ("strd r2, r3, [var_60h]");
0x0008e436 bl 0xfdbc | fcn_0000fdbc (r0, r1);
0x0008e43a ldrd r2, r3, [sp, 0x5c] | __asm ("ldrd r2, r3, [var_60h]");
0x0008e43e mov r1, r0 | r1 = r0;
| }
0x0008e440 ldr r0, [sp, 0x10c] | r0 = *(arg_10ch);
0x0008e442 add r1, r0 | r1 += r0;
0x0008e444 adds r7, r1, 1 | r7 = r1 + 1;
0x0008e446 subs r1, r5, 1 | r1 = r5 - 1;
0x0008e448 cmp r1, 4 |
| if (r1 > 4) {
0x0008e44a bhi.w 0x8e5b8 | goto label_108;
| }
| /* switch table (5 cases) at 0x8e452 */
0x0008e44e tbb [pc, r1] | __asm ("tbb aav.0x000000ff");
| label_2:
0x0008e458 cmp r0, 0 |
| if (r0 == 0) {
0x0008e45a beq.w 0x8e5f0 | goto label_109;
| }
0x0008e45e mov r0, sl | r0 = sl;
0x0008e460 strd r2, r3, [sp, 0x5c] | __asm ("strd r2, r3, [var_60h]");
0x0008e464 bl 0xfdbc | fcn_0000fdbc (r0, r1);
0x0008e468 ldr r3, [sp, 0x10c] | r3 = *(arg_10ch);
0x0008e46a adds r7, r0, r3 | r7 = r0 + r3;
0x0008e46c ldrd r2, r3, [sp, 0x5c] | __asm ("ldrd r2, r3, [var_60h]");
0x0008e470 adds r7, 1 | r7++;
| label_8:
0x0008e472 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008e474 movs r5, 2 | r5 = 2;
0x0008e476 ldr r1, [r0, 0x74] | r1 = *((r0 + 0x74));
0x0008e478 cmp r1, 0 |
0x0008e47a it eq |
| if (r1 != 0) {
0x0008e47c moveq r1, r0 | r1 = r0;
| }
0x0008e47e movs r0, 1 | r0 = 1;
0x0008e480 strb r0, [r1, 0x15] | *((r1 + 0x15)) = r0;
0x0008e482 ldr.w r3, [r3, r2, lsl 2] | offset_1 = r2 << 2;
| r3 = *((r3 + offset_1));
0x0008e486 ldr r1, [sp, 0x54] | r1 = var_54h;
0x0008e488 ldr.w r2, [sl] | r2 = *(sl);
0x0008e48c ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0008e48e bl 0x24ec8 | fcn_00024ec8 (r0);
0x0008e492 mov r3, r5 | r3 = r5;
0x0008e494 movw r2, 0x513 | r2 = 0x513;
0x0008e498 mov r5, r0 | r5 = r0;
0x0008e49a movs r1, 0x45 | r1 = 0x45;
0x0008e49c mov r0, sb | r0 = sb;
0x0008e49e str r7, [sp] | *(sp) = r7;
0x0008e4a0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008e4a4 ldr.w r0, [sb] | r0 = *(sb);
0x0008e4a8 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0008e4ac cmp r3, 0 |
| if (r3 != 0) {
0x0008e4ae bne.w 0x8e5dc | goto label_110;
| }
0x0008e4b2 ldrd r1, r3, [sb, 0x68] | __asm ("ldrd r1, r3, [sb, 0x68]");
0x0008e4b6 movs r0, 0xfa | r0 = 0xfa;
0x0008e4b8 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x0008e4bc lsls r2, r2, 2 | r2 <<= 2;
0x0008e4be subs r2, 0x14 | r2 -= 0x14;
0x0008e4c0 add r1, r2 | r1 += r2;
0x0008e4c2 strb r0, [r1, 1] | *((r1 + 1)) = r0;
0x0008e4c4 str r5, [r1, 0x10] | *((r1 + 0x10)) = r5;
| label_6:
0x0008e4c6 cmp r3, 0 |
| if (r3 <= 0) {
0x0008e4c8 ble 0x8e4dc | goto label_3;
| }
0x0008e4ca ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0008e4ce add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0008e4d2 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0008e4d6 movs r3, 1 | r3 = 1;
0x0008e4d8 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
| label_3:
0x0008e4dc adds r4, 1 | r4++;
0x0008e4de cmp r8, r4 |
0x0008e4e0 bne.w 0x8e3ba |
| } while (r8 != r4);
| label_104:
0x0008e4e4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008e4e6 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0008e4e8 orrs r3, r2 | r3 |= r2;
0x0008e4ea ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008e4ec it eq |
| if (r3 != r2) {
0x0008e4ee orreq r3, r3, 1 | r3 |= 1;
| }
0x0008e4f2 cmp r3, 0 |
| if (r3 != 0) {
0x0008e4f4 bne.w 0x8e1dc | goto label_0;
| }
| if (r2 != 0) {
0x0008e4f8 cbz r2, 0x8e504 |
0x0008e4fa ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008e4fe tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x0008e502 bne 0x8e5f8 | goto label_111;
| }
| }
| label_9:
0x0008e504 mov.w lr, 1 | lr = 1;
0x0008e508 b 0x8e398 | goto label_1;
| label_107:
0x0008e50a ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x0008e50c ldr.w r1, [sl, 0x1c] | r1 = *((sl + 0x1c));
0x0008e510 and r0, r1, 0x20 | r0 = r1 & 0x20;
0x0008e514 sxth r1, r4 | __asm ("sxth r1, r4");
0x0008e516 cmp r5, 0 |
| if (r5 != 0) {
0x0008e518 bne 0x8e458 | goto label_2;
| }
0x0008e51a ldrh r5, [r6, 8] | r5 = *((r6 + 8));
0x0008e51c cmp r5, 0 |
| if (r5 == 0) {
0x0008e51e beq 0x8e458 | goto label_2;
| }
0x0008e520 cmp r0, 0 |
| if (r0 == 0) {
0x0008e522 beq.w 0x8e8ac | goto label_112;
| }
0x0008e526 mov r0, sl | r0 = sl;
0x0008e528 bl 0xfdbc | fcn_0000fdbc (r0, r1);
0x0008e52c ldr r3, [sp, 0x10c] | r3 = *(arg_10ch);
0x0008e52e adds r7, r0, r3 | r7 = r0 + r3;
0x0008e530 adds r7, 1 | r7++;
| label_22:
0x0008e532 ldrd r5, r3, [sb, 0x6c] | __asm ("ldrd r5, r3, [sb, 0x6c]");
0x0008e536 cmp r5, r3 |
| if (r5 >= r3) {
0x0008e538 bge.w 0x8e89a | goto label_113;
| }
0x0008e53c ldr.w r1, [sb, 0x68] | r1 = *((sb + 0x68));
0x0008e540 add.w r3, r5, r5, lsl 2 | r3 = r5 + (r5 << 2);
0x0008e544 adds r0, r5, 1 | r0 = r5 + 1;
0x0008e546 str.w r0, [sb, 0x6c] | __asm ("str.w r0, [sb, 0x6c]");
0x0008e54a movs r2, 0 | r2 = 0;
0x0008e54c movs r0, 0x33 | r0 = 0x33;
0x0008e54e add.w ip, r1, r3, lsl 2 |
0x0008e552 strd r7, r2, [ip, 4] | __asm ("strd r7, r2, [ip, 4]");
0x0008e556 strd r2, r2, [ip, 0xc] | __asm ("strd r2, r2, [ip, 0xc]");
0x0008e55a str.w r0, [r1, r3, lsl 2] | __asm ("str.w r0, [r1, r3, lsl 2]");
| label_21:
0x0008e55e ldr r2, [sp, 0x44] | r2 = var_44h;
0x0008e560 ldrh r3, [r6, 8] | r3 = *((r6 + 8));
0x0008e562 adds r2, 1 | r2++;
0x0008e564 str r2, [sp, 0x44] | var_44h = r2;
0x0008e566 cmp r3, 0 |
| if (r3 == 0) {
0x0008e568 beq 0x8e606 | goto label_114;
| }
0x0008e56a ldrb.w r0, [sl, 0x2b] | r0 = *((sl + 0x2b));
0x0008e56e cmp r0, 0 |
| if (r0 != 0) {
0x0008e570 bne 0x8e606 | goto label_114;
| }
0x0008e572 ldr.w r1, [sl, 0x34] | r1 = *((sl + 0x34));
| if (r1 != 0) {
0x0008e576 cbz r1, 0x8e58a |
0x0008e578 ldr r2, [r1] | r2 = *(r1);
0x0008e57a cmp r2, r3 |
0x0008e57c it lt |
| if (r2 >= r3) {
0x0008e57e movlt r1, r0 | r1 = r0;
| }
| if (r2 < r3) {
0x0008e580 blt 0x8e58a | goto label_10;
| }
0x0008e582 add.w r1, r1, r3, lsl 4 | r1 += (r3 << 4);
0x0008e586 ldr r1, [r1, -0x8] | r1 = *((r1 - 0x8));
| }
| label_10:
0x0008e58a mov r2, r7 | r2 = r7;
0x0008e58c ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008e58e bl 0x69808 | fcn_00069808 (r0, r1, r2);
0x0008e592 ldr.w r3, [sb] | r3 = *(sb);
0x0008e596 cmp r5, 0 |
0x0008e598 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0008e59c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008e5a0 it lt |
| if (r5 >= 0) {
0x0008e5a2 addlt r5, r2, -1 | r5 = r2 + -1;
| }
| if (r3 != 0) {
0x0008e5a6 cbnz r3, 0x8e5ea | goto label_115;
| }
0x0008e5a8 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008e5ac add.w r5, r5, r5, lsl 2 | r5 += (r5 << 2);
0x0008e5b0 add.w r3, r3, r5, lsl 2 | r3 += (r5 << 2);
| label_7:
0x0008e5b4 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008e5b6 b 0x8e4dc | goto label_3;
| label_108:
0x0008e5b8 movs r3, 0 | r3 = 0;
0x0008e5ba mov r2, r7 | r2 = r7;
0x0008e5bc str r3, [sp] | *(sp) = r3;
0x0008e5be movs r1, 0x32 | r1 = 0x32;
0x0008e5c0 ldr r3, [sp, 0x11c] | r3 = *(arg_11ch);
0x0008e5c2 mov r0, sb | r0 = sb;
0x0008e5c4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008e5c8 b 0x8e4dc | goto label_3;
| label_105:
0x0008e5ca ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008e5cc adds r3, 1 | r3++;
0x0008e5ce str r3, [sp, 0x2c] | var_2ch = r3;
0x0008e5d0 b 0x8e4dc | goto label_3;
| label_106:
0x0008e5d2 cmp r5, 0xb |
| if (r5 != 0xb) {
0x0008e5d4 bne.w 0x8e412 | goto label_4;
| }
0x0008e5d8 movs r5, 2 | r5 = 2;
0x0008e5da b 0x8e416 | goto label_5;
| if (r5 != 0) {
| label_110:
0x0008e5dc cbz r5, 0x8e5e4 |
0x0008e5de mov r1, r5 | r1 = r5;
0x0008e5e0 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x0008e5e4 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008e5e8 b 0x8e4c6 | goto label_6;
| label_115:
0x0008e5ea ldr r3, [sp, 0x68] | r3 = var_68h;
0x0008e5ec adds r3, 4 | r3 += 4;
0x0008e5ee b 0x8e5b4 | goto label_7;
| label_109:
0x0008e5f0 ldr r1, [sp, 0x10c] | r1 = *(arg_10ch);
0x0008e5f2 adds r7, r1, r4 | r7 = r1 + r4;
0x0008e5f4 adds r7, 1 | r7++;
0x0008e5f6 b 0x8e472 | goto label_8;
| label_111:
0x0008e5f8 ldr r3, [sp, 0x10c] | r3 = *(arg_10ch);
0x0008e5fa mov r2, sl | r2 = sl;
0x0008e5fc ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008e5fe adds r1, r3, 1 | r1 = r3 + 1;
0x0008e600 bl 0x69c20 | fcn_00069c20 (r0, r1, r2, r3);
0x0008e604 b 0x8e504 | goto label_9;
| label_114:
0x0008e606 movs r1, 0 | r1 = 0;
0x0008e608 b 0x8e58a | goto label_10;
| label_91:
0x0008e60a movs r3, 0 | r3 = 0;
0x0008e60c str r3, [sp, 0x2c] | var_2ch = r3;
| label_51:
0x0008e60e ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008e610 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0008e614 str r3, [sp, 0x24] | var_24h = r3;
0x0008e616 cmp r2, 0 |
| if (r2 == 0) {
0x0008e618 beq.w 0x8e308 | goto label_11;
| }
| label_99:
0x0008e61c ldr r2, [r2] | r2 = *(r2);
0x0008e61e str r2, [sp, 0x60] | var_60h = r2;
0x0008e620 cmp r2, 0 |
| if (r2 == 0) {
0x0008e622 beq.w 0x8f05c | goto label_116;
| }
0x0008e626 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0008e628 cmp r2, 0 |
| if (r2 == 0) {
0x0008e62a beq.w 0x8f36a | goto label_117;
| }
0x0008e62e movs r2, 0 | r2 = 0;
| do {
0x0008e630 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008e632 adds r2, 1 | r2++;
0x0008e634 cmp r3, 0 |
0x0008e636 bne 0x8e630 |
| } while (r3 != 0);
0x0008e638 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0008e63a add.w r4, r2, r2, lsl 2 | r4 = r2 + (r2 << 2);
0x0008e63e str r2, [sp, 0x24] | var_24h = r2;
0x0008e640 lsls r4, r4, 1 | r4 <<= 1;
0x0008e642 cmp r0, 0 |
| if (r0 == 0) {
0x0008e644 beq.w 0x8f07c | goto label_118;
| }
0x0008e648 mov r2, r4 | r2 = r4;
0x0008e64a bl 0x21784 | fcn_00021784 (r0, r1);
0x0008e64e str r0, [sp, 0x60] | var_60h = r0;
| label_58:
0x0008e650 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0008e652 cmp r3, 0 |
| if (r3 == 0) {
0x0008e654 beq.w 0x8e952 | goto label_119;
| }
0x0008e658 mov r2, r4 | r2 = r4;
0x0008e65a movs r1, 0 | r1 = 0;
0x0008e65c mov r0, r3 | r0 = r3;
0x0008e65e mov r4, r3 | r4 = r3;
0x0008e660 blx 0x839c | fcn_0000839c ();
0x0008e664 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0008e666 mov r3, r4 | r3 = r4;
0x0008e668 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008e66a movs r7, 1 | r7 = 1;
0x0008e66c ldr.w r1, [sl, 8] | r1 = *((sl + 8));
0x0008e670 mov ip, r3 |
0x0008e672 add.w r6, r4, r0, lsl 3 | r6 = r4 + (r0 << 3);
0x0008e676 str r4, [r2, 0x18] | *((r2 + 0x18)) = r4;
0x0008e678 mov r0, r2 | r0 = r2;
0x0008e67a movs r4, 0 | r4 = 0;
0x0008e67c mov lr, r6 | lr = r6;
| label_12:
0x0008e67e ldr r3, [r0] | r3 = *(r0);
| if (r3 == 0) {
0x0008e680 cbz r3, 0x8e6c4 | goto label_120;
| }
0x0008e682 ldr r5, [r0, 0x1c] | r5 = *((r0 + 0x1c));
| if (r5 == 0) {
0x0008e684 cbz r5, 0x8e6be | goto label_121;
| }
0x0008e686 cmp r1, 0 |
| if (r1 == 0) {
0x0008e688 beq.w 0x8f2f6 | goto label_122;
| }
0x0008e68c cmp r5, r1 |
| if (r5 == r1) {
0x0008e68e beq.w 0x8f2f6 | goto label_122;
| }
0x0008e692 mov r3, r1 | r3 = r1;
0x0008e694 movs r2, 0 | r2 = 0;
0x0008e696 b 0x8e69c |
| while (r3 != 0) {
0x0008e698 cmp r5, r3 |
| if (r5 == r3) {
0x0008e69a beq 0x8e6a4 | goto label_123;
| }
0x0008e69c ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008e69e adds r2, 1 | r2++;
0x0008e6a0 cmp r3, 0 |
0x0008e6a2 bne 0x8e698 |
| }
| label_123:
0x0008e6a4 add.w r5, lr, r2 | r5 = lr + r2;
| label_71:
0x0008e6a8 ldrb r6, [r5] | r6 = *(r5);
| if (r6 == 0) {
0x0008e6aa cbnz r6, 0x8e6be |
0x0008e6ac strb r7, [r5] | *(r5) = r7;
0x0008e6ae str.w r3, [ip, r4, lsl 3] | __asm ("str.w r3, [ip, r4, lsl 3]");
0x0008e6b2 add.w r3, ip, r4, lsl 3 | r3 = ip + (r4 << 3);
0x0008e6b6 adds r4, 1 | r4++;
0x0008e6b8 ldr.w r1, [sl, 8] | r1 = *((sl + 8));
0x0008e6bc str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
| label_121:
0x0008e6be ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x0008e6c0 cmp r0, 0 |
| if (r0 != 0) {
0x0008e6c2 bne 0x8e67e | goto label_12;
| }
| label_120:
0x0008e6c4 mov r6, lr | r6 = lr;
| if (r1 == 0) {
0x0008e6c6 cbz r1, 0x8e6ee | goto label_124;
| }
0x0008e6c8 ldr r5, [sp, 0x60] | r5 = var_60h;
0x0008e6ca add.w r3, lr, -1 | r3 = lr + -1;
0x0008e6ce rsb.w r6, lr, 1 | r6 = 1 - lr;
| do {
0x0008e6d2 mov r2, r3 | r2 = r3;
0x0008e6d4 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
| if (r0 == 0) {
0x0008e6d8 cbnz r0, 0x8e6e8 |
0x0008e6da add.w r0, r5, r4, lsl 3 | r0 = r5 + (r4 << 3);
0x0008e6de str.w r1, [r5, r4, lsl 3] | __asm ("str.w r1, [r5, r4, lsl 3]");
0x0008e6e2 adds r4, 1 | r4++;
0x0008e6e4 add r2, r6 | r2 += r6;
0x0008e6e6 str r2, [r0, 4] | *((r0 + 4)) = r2;
| }
0x0008e6e8 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x0008e6ea cmp r1, 0 |
0x0008e6ec bne 0x8e6d2 |
| } while (r1 != 0);
| label_124:
0x0008e6ee movs r3, 1 | r3 = 1;
0x0008e6f0 str r3, [sp, 0x44] | var_44h = r3;
0x0008e6f2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008e6f4 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008e6f6 tst.w r3, 0x6000 |
0x0008e6f8 ldr r7, [pc, 0x300] | r7 = *(0x8e9fc);
| if ((r3 & 0x6000) != 0) {
0x0008e6fa bne.w 0x8e31a | goto label_13;
| }
| label_54:
0x0008e6fe movs r3, 0 | r3 = 0;
0x0008e700 strd r3, r3, [sp, 0x9c] | __asm ("strd r3, r3, [var_9ch]");
0x0008e704 str r3, [sp, 0x80] | var_80h = r3;
| label_103:
0x0008e706 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0008e708 ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008e70a subs r3, 0 |
0x0008e70c it ne |
| if (r3 == 0) {
0x0008e70e movne r3, 1 | r3 = 1;
| }
0x0008e710 cmp r2, 0 |
0x0008e712 it ne |
| if (r2 == 0) {
0x0008e714 movne r3, 0 | r3 = 0;
| }
0x0008e716 cmp r3, 0 |
| if (r3 == 0) {
0x0008e718 beq.w 0x8e8b4 | goto label_125;
| }
0x0008e71c ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008e71e ldr r4, [sp, 0x38] | r4 = var_38h;
0x0008e720 ldr r7, [r3, 0x38] | r7 = *((r3 + 0x38));
0x0008e722 cmp r4, 0xb |
0x0008e724 add.w r5, r7, -1 | r5 = r7 + -1;
0x0008e728 str r5, [r3, 0x38] | *((r3 + 0x38)) = r5;
0x0008e72a ldrb.w r3, [sl, 0x2a] | r3 = *((sl + 0x2a));
| if (r4 == 0xb) {
0x0008e72e beq.w 0x8f1f4 | goto label_126;
| }
| label_66:
0x0008e732 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008e734 cmp r3, 0 |
| if (r3 == 0) {
0x0008e736 beq.w 0x8f374 | goto label_127;
| }
| label_67:
0x0008e73a ldr.w fp, [sp, 0x40] | fp = var_40h;
0x0008e73e mov r3, fp | r3 = fp;
0x0008e740 b 0x8e74e |
| while (r2 != 0) {
0x0008e742 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
| if (r2 == 0) {
0x0008e744 cbz r2, 0x8e754 | goto label_128;
| }
0x0008e746 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0008e748 cmp r3, 0 |
| if (r3 == 0) {
0x0008e74a beq.w 0x8f37e | goto label_129;
| }
0x0008e74e ldr r2, [r3] | r2 = *(r3);
0x0008e750 cmp r2, 0 |
0x0008e752 bne 0x8e742 |
| }
| label_128:
0x0008e754 mov fp, r3 |
0x0008e756 ldrb r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008e758 cmp r3, 0 |
| if (r3 == 0) {
0x0008e75a beq.w 0x8f0b8 | goto label_130;
| }
0x0008e75e ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008e760 cmp r3, fp |
0x0008e762 it ne |
| if (r3 == fp) {
0x0008e764 movne r4, 6 | r4 = 6;
| }
| if (r3 == fp) {
0x0008e766 beq.w 0x8f2c6 | goto label_131;
| }
| label_61:
0x0008e76a ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008e76e mov r2, r3 | r2 = r3;
0x0008e770 str r3, [sp, 0x7c] | var_7ch = r3;
0x0008e772 ldr.w r3, [sb, 0x70] | r3 = *((sb + 0x70));
0x0008e776 cmp r2, r3 |
| if (r2 >= r3) {
0x0008e778 bge.w 0x8f584 | goto label_132;
| }
0x0008e77c ldr r0, [sp, 0x7c] | r0 = var_7ch;
0x0008e77e movs r1, 0 | r1 = 0;
0x0008e780 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008e784 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008e788 add.w r2, r0, r0, lsl 2 | r2 = r0 + (r0 << 2);
0x0008e78c adds r0, 1 | r0++;
0x0008e78e str.w r0, [sb, 0x6c] | __asm ("str.w r0, [sb, 0x6c]");
0x0008e792 movs r0, 8 | r0 = 8;
0x0008e794 lsls r2, r2, 2 | r2 <<= 2;
0x0008e796 str r0, [r3, r2] | *((r3 + r2)) = r0;
0x0008e798 add r3, r2 | r3 += r2;
0x0008e79a adds r2, r3, 4 | r2 = r3 + 4;
0x0008e79c vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0008e7a0 strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_73:
0x0008e7a4 cmp r4, 5 |
| if (r4 != 5) {
0x0008e7a6 bne.w 0x8f1ae | goto label_133;
| }
0x0008e7aa ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008e7ac cmp r3, 5 |
0x0008e7ae it eq |
| if (r3 != 5) {
0x0008e7b0 moveq r6, 0 | r6 = 0;
| }
| if (r3 != 5) {
0x0008e7b2 beq 0x8e7ce |
0x0008e7b4 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x0008e7b8 ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0008e7ba subs r3, 0 |
0x0008e7bc it ne |
| if (r3 == 0) {
0x0008e7be movne r3, 1 | r3 = 1;
| }
0x0008e7c0 cmp r2, 0 |
0x0008e7c2 it ne |
| if (r2 == 0) {
0x0008e7c4 movne r3, 0 | r3 = 0;
| }
0x0008e7c6 mov r6, r3 | r6 = r3;
0x0008e7c8 cmp r3, 0 |
| if (r3 != 0) {
0x0008e7ca bne.w 0x8f5c8 | goto label_134;
| }
| }
| label_81:
0x0008e7ce ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008e7d0 cmp r3, 0 |
| if (r3 != 0) {
0x0008e7d2 bne.w 0x8f33c | goto label_77;
| }
0x0008e7d6 ldr r2, [sp, 0x10c] | r2 = *(arg_10ch);
0x0008e7d8 mov r3, r5 | r3 = r5;
0x0008e7da movs r1, 0x1e | r1 = 0x1e;
0x0008e7dc mov r0, sb | r0 = sb;
0x0008e7de str r2, [sp] | *(sp) = r2;
0x0008e7e0 ldr r2, [sp, 0x90] | r2 = var_90h;
0x0008e7e2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008e7e4 invalid |
0x0008e7e8 cmp r3, 0 |
| if (r3 != 0) {
0x0008e7ea bne.w 0x8f4ec | goto label_135;
| }
0x0008e7ee ldr.w r1, [sl, 8] | r1 = *((sl + 8));
| if (r1 != 0) {
0x0008e7f2 cbz r1, 0x8e81a |
0x0008e7f4 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008e7f6 movs r2, 1 | r2 = 1;
0x0008e7f8 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0008e7fa cmp r3, 0 |
0x0008e7fc it eq |
| if (r3 != 0) {
0x0008e7fe moveq r3, r0 | r3 = r0;
| }
0x0008e800 strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
0x0008e802 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0008e804 str r3, [sp, 4] | var_4h = r3;
0x0008e806 ldr r3, [sp, 0x108] | r3 = *(arg_108h);
0x0008e808 str r3, [sp] | *(sp) = r3;
0x0008e80a mov.w r3, -1 | r3 = -1;
0x0008e80e str r3, [sp, 8] | var_8h = r3;
0x0008e810 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0008e812 ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x0008e816 bl 0x757c8 | fcn_000757c8 (r0, r1, r2, r3, r4, r5, r6);
| }
0x0008e81a movs r3, 0 | r3 = 0;
0x0008e81c str r3, [sp, 0x8c] | var_8ch = r3;
0x0008e81e movs r3, 1 | r3 = 1;
0x0008e820 str r3, [sp, 0x84] | var_84h = r3;
0x0008e822 b.w 0x8f238 | goto label_75;
| label_96:
0x0008e826 str r0, [sp, 0x2c] | var_2ch = r0;
0x0008e828 mov r2, sl | r2 = sl;
0x0008e82a movs r3, 0x10 | r3 = 0x10;
0x0008e82c mov r0, r7 | r0 = r7;
0x0008e82e bl 0x677a0 | fcn_000677a0 (r0, r1, r2, r3, r4);
0x0008e832 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008e834 b 0x8e294 | goto label_14;
| if (r4 == 0) {
| label_93:
0x0008e836 cbz r4, 0x8e888 | goto label_95;
| }
| label_20:
0x0008e838 ldr r4, [r7, 0x38] | r4 = *((r7 + 0x38));
0x0008e83a add.w sl, r4, -1 | sl = r4 + -1;
0x0008e83e str.w sl, [r7, 0x38] | __asm ("str.w sl, [r7, 0x38]");
0x0008e842 cmp r3, 0 |
| if (r3 != 0) {
0x0008e844 bne.w 0x8e27a | goto label_15;
| }
0x0008e848 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008e84a ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0008e84e cmp r2, 0 |
| if (r2 != 0) {
0x0008e850 bne.w 0x8e29c | goto label_16;
| }
0x0008e854 mov r1, r3 | r1 = r3;
0x0008e856 mov r2, sl | r2 = sl;
0x0008e858 movs r3, 0x10 | r3 = 0x10;
0x0008e85a mov r0, r7 | r0 = r7;
0x0008e85c bl 0x677a0 | fcn_000677a0 (r0, r1, r2, r3, r4);
0x0008e860 cmp.w r8, 4 |
| if (r8 != 4) {
0x0008e864 bne.w 0x8e2a4 | goto label_17;
| }
| label_97:
0x0008e868 mov r0, sb | r0 = sb;
0x0008e86a ldr r1, [sp, 0x11c] | r1 = *(arg_11ch);
0x0008e86c bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x0008e870 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008e874 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008e878 cmn r2, r3 |
| if (r2 >= r3) {
0x0008e87a bpl.w 0x8e2d4 | goto label_18;
| }
| label_98:
0x0008e87e rsbs r2, r4, 0 | r2 = r4 - ;
0x0008e880 mov r1, sb | r1 = sb;
0x0008e882 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0008e886 b 0x8e2e0 | goto label_19;
| label_95:
0x0008e888 str r3, [sp, 0x2c] | var_2ch = r3;
0x0008e88a mov r0, sb | r0 = sb;
0x0008e88c ldr r3, [sp, 0x10c] | r3 = *(arg_10ch);
0x0008e88e ldr r1, [sp, 0x30] | r1 = var_30h;
0x0008e890 adds r2, r3, 1 | r2 = r3 + 1;
0x0008e892 bl 0x36b24 | fcn_00036b24 (r0, r1, r2);
0x0008e896 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008e898 b 0x8e838 | goto label_20;
| label_113:
0x0008e89a movs r3, 0 | r3 = 0;
0x0008e89c mov r2, r7 | r2 = r7;
0x0008e89e movs r1, 0x33 | r1 = 0x33;
0x0008e8a0 mov r0, sb | r0 = sb;
0x0008e8a2 str r3, [sp] | *(sp) = r3;
0x0008e8a4 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008e8a8 mov r5, r0 | r5 = r0;
0x0008e8aa b 0x8e55e | goto label_21;
| label_112:
0x0008e8ac ldr r3, [sp, 0x10c] | r3 = *(arg_10ch);
0x0008e8ae adds r7, r3, r4 | r7 = r3 + r4;
0x0008e8b0 adds r7, 1 | r7++;
0x0008e8b2 b 0x8e532 | goto label_22;
| label_125:
0x0008e8b4 mov r4, r3 | r4 = r3;
0x0008e8b6 mov r6, r3 | r6 = r3;
0x0008e8b8 mov ip, r3 |
0x0008e8ba mov fp, r3 |
0x0008e8bc str r3, [sp, 0x8c] | var_8ch = r3;
0x0008e8be str r3, [sp, 0x7c] | var_7ch = r3;
0x0008e8c0 str r3, [sp, 0x84] | var_84h = r3;
| label_69:
0x0008e8c2 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008e8c4 cmp r3, 0 |
| if (r3 == 0) {
0x0008e8c6 beq.w 0x8eeee | goto label_136;
| }
0x0008e8ca ldr r3, [sp, 0x60] | r3 = var_60h;
0x0008e8cc ldrd r3, r8, [r3] | __asm ("ldrd r3, r8, [r3]");
0x0008e8d0 cmp r3, 0 |
| if (r3 == 0) {
0x0008e8d2 beq.w 0x8eefa | goto label_137;
| }
| label_44:
0x0008e8d6 movs r2, 0 | r2 = 0;
0x0008e8d8 mov r5, fp | r5 = fp;
0x0008e8da str r2, [sp, 0x30] | var_30h = r2;
0x0008e8dc mov fp, sl |
0x0008e8de ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x0008e8e0 mov sl, r8 | sl = r8;
0x0008e8e2 strd r4, r6, [sp, 0x94] | __asm ("strd r4, r6, [var_94h]");
0x0008e8e6 mov r4, r3 | r4 = r3;
0x0008e8e8 str.w ip, [sp, 0x70] | __asm ("str.w ip, [var_70h]");
0x0008e8ec str r2, [sp, 0xac] | var_ach = r2;
0x0008e8ee ldr r2, [sp, 0x2c] | r2 = var_2ch;
| do {
| label_25:
0x0008e8f0 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008e8f2 lsl.w r8, sl, 2 | r8 = sl << 2;
0x0008e8f6 ldr.w r3, [r3, sl, lsl 2] | offset_2 = sl << 2;
| r3 = *((r3 + offset_2));
0x0008e8fa cmp r3, 0 |
| if (r3 != 0) {
0x0008e8fc bne 0x8e96e | goto label_138;
| }
| label_46:
0x0008e8fe ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008e900 cmp r3, 0 |
| if (r3 == 0) {
0x0008e902 beq.w 0x8eb74 | goto label_139;
| }
| label_24:
0x0008e906 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0008e908 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008e90a adds r1, 1 | r1++;
0x0008e90c cmp r3, r1 |
0x0008e90e str r1, [sp, 0x30] | var_30h = r1;
| if (r3 <= r1) {
0x0008e910 ble.w 0x8ec68 | goto label_140;
| }
0x0008e914 ldr r0, [sp, 0x60] | r0 = var_60h;
0x0008e916 ldr.w r4, [r0, r1, lsl 3] | offset_3 = r1 << 3;
| r4 = *((r0 + offset_3));
0x0008e91a add.w r3, r0, r1, lsl 3 | r3 = r0 + (r1 << 3);
0x0008e91e ldr.w sl, [r3, 4] | sl = *((r3 + 4));
0x0008e922 cmp r4, 0 |
0x0008e924 bne 0x8e8f0 |
| } while (r4 != 0);
| label_26:
0x0008e926 ldrd r4, r6, [sp, 0x94] | __asm ("ldrd r4, r6, [var_94h]");
0x0008e92a mov r8, sl | r8 = sl;
0x0008e92c mov sl, fp | sl = fp;
0x0008e92e str r2, [sp, 0x2c] | var_2ch = r2;
0x0008e930 str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
| label_45:
0x0008e934 cmp r6, 0 |
| if (r6 != 0) {
0x0008e936 bne.w 0x8ec76 | goto label_141;
| }
| label_34:
0x0008e93a ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0008e93c cmp r3, 0 |
| if (r3 != 0) {
0x0008e93e bne.w 0x8ecae | goto label_142;
| }
| label_35:
0x0008e942 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008e946 lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 >= r3) {
0x0008e948 bpl.w 0x8ecf4 | goto label_143;
| }
| label_36:
0x0008e94c ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x0008e94e ldr r2, [sp, 0x84] | r2 = var_84h;
0x0008e950 str r2, [r3] | *(r3) = r2;
| label_119:
0x0008e952 ldr r2, [pc, 0x310] |
0x0008e954 ldr r3, [pc, 0x2fc] | r3 = *(0x8ec54);
0x0008e956 add r2, pc | r2 = 0x11d5c0;
0x0008e958 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008e95a ldr r2, [r3] | r2 = imp.sinh;
0x0008e95c ldr r3, [sp, 0xdc] | r3 = var_dch;
0x0008e95e eors r2, r3 | r2 ^= r3;
0x0008e960 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008e964 bne.w 0x8f648 | goto label_144;
| }
0x0008e968 add sp, 0xe4 |
0x0008e96a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_138:
0x0008e96e ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008e970 cmp r3, 0 |
| if (r3 != 0) {
0x0008e972 bne.w 0x8ebf4 | goto label_145;
| }
| label_32:
0x0008e976 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008e978 ldr r1, [r3, 0x38] | r1 = *((r3 + 0x38));
0x0008e97a str r1, [sp, 0x50] | var_50h = r1;
0x0008e97c subs r1, 1 | r1--;
0x0008e97e str r1, [sp, 0x4c] | var_4ch = r1;
0x0008e980 str r1, [r3, 0x38] | *((r3 + 0x38)) = r1;
0x0008e982 cmp r2, 0 |
| if (r2 == 0) {
0x0008e984 beq.w 0x8ee3e | goto label_146;
| }
| label_39:
0x0008e988 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 != 0) {
0x0008e98a cbz r3, 0x8e9b6 |
0x0008e98c movs r3, 0 | r3 = 0;
0x0008e98e movs r2, 0 | r2 = 0;
0x0008e990 str r3, [sp] | *(sp) = r3;
0x0008e992 movs r1, 0x4b | r1 = 0x4b;
0x0008e994 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0008e996 mov r0, sb | r0 = sb;
0x0008e998 ldr.w r3, [r3, r8] | r3 = *((r3 + r8));
0x0008e99c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008e9a0 ldr r3, [sp, 0x10c] | r3 = *(arg_10ch);
0x0008e9a2 ldr r6, [sp, 0x28] | r6 = var_28h;
0x0008e9a4 ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x0008e9a6 mvns r3, r3 | r3 = ~r3;
0x0008e9a8 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0008e9aa str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x0008e9ac mov r0, r6 | r0 = r6;
0x0008e9ae bl 0x6f838 | fcn_0006f838 (r0, r1, r2);
0x0008e9b2 movs r3, 0 | r3 = 0;
0x0008e9b4 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
| }
0x0008e9b6 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0008e9b8 ldrh r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0008e9ba ldr.w r2, [r2, r8] | r2 = *((r2 + r8));
0x0008e9be str r2, [sp, 0x78] | var_78h = r2;
0x0008e9c0 adds r2, 1 | r2++;
0x0008e9c2 str r2, [sp, 0x2c] | var_2ch = r2;
0x0008e9c4 cmp r3, 0 |
| if (r3 == 0) {
0x0008e9c6 beq.w 0x8efe6 | goto label_147;
| }
0x0008e9ca str r5, [sp, 0x5c] | var_5ch = r5;
0x0008e9cc movs r7, 0 | r7 = 0;
0x0008e9ce str.w r8, [sp, 0x68] | __asm ("str.w r8, [var_68h]");
0x0008e9d2 mov r5, r2 | r5 = r2;
0x0008e9d4 ldr r6, [sp, 0x10c] | r6 = *(arg_10ch);
0x0008e9d6 ldr.w r8, [sp, 0x28] | r8 = var_28h;
0x0008e9da b 0x8ea14 |
| while (r2 != r1) {
0x0008e9dc ldr.w r2, [fp, 0x1c] | r2 = *(arg_124h);
0x0008e9e0 ubfx r0, r1, 0xf, 1 | r0 = (r1 >> 0xf) & ((1 << 1) - 1);
0x0008e9e4 eor r2, r2, 0x20 | r2 ^= 0x20;
0x0008e9e8 ubfx r2, r2, 5, 1 | r2 = (r2 >> 5) & ((1 << 1) - 1);
0x0008e9ec orrs r0, r2 | r0 |= r2;
| if (r0 == r2) {
0x0008e9ee bne 0x8e9fc |
0x0008e9f0 mov r0, fp | r0 = fp;
0x0008e9f2 str r3, [sp, 0x54] | var_54h = r3;
0x0008e9f4 bl 0xfdbc | fcn_0000fdbc (r0, r1);
0x0008e9f8 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008e9fa mov r1, r0 | r1 = r0;
| }
0x0008e9fc adds r2, r6, r1 | r2 = r6 + r1;
0x0008e9fe movs r1, 0 | r1 = 0;
0x0008ea00 str r1, [sp] | *(sp) = r1;
0x0008ea02 adds r2, 1 | r2++;
0x0008ea04 movs r1, 0x51 | r1 = 0x51;
0x0008ea06 mov r0, sb | r0 = sb;
0x0008ea08 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_27:
0x0008ea0c ldrh r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0008ea0e adds r7, 1 | r7++;
0x0008ea10 cmp r3, r7 |
| if (r3 <= r7) {
0x0008ea12 ble 0x8ea44 | goto label_148;
| }
| label_23:
0x0008ea14 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0008ea16 ldrsh.w r1, [r3, r7, lsl 1] | offset_4 = r7 << 1;
| r1 = *((r3 + offset_4));
0x0008ea1a adds r3, r5, r7 | r3 = r5 + r7;
0x0008ea1c adds r2, r1, 2 | r2 = r1 + 2;
| if (r2 == r1) {
0x0008ea1e beq.w 0x8eb88 | goto label_149;
| }
0x0008ea22 adds r0, r1, 1 | r0 = r1 + 1;
| if (r0 == r1) {
0x0008ea24 beq 0x8ea2e | goto label_150;
| }
0x0008ea26 ldrsh.w r2, [fp, 0x20] | r2 = *(arg_128h);
0x0008ea2a cmp r2, r1 |
0x0008ea2c bne 0x8e9dc |
| }
| label_150:
0x0008ea2e movs r2, 0 | r2 = 0;
0x0008ea30 movs r1, 0x52 | r1 = 0x52;
0x0008ea32 str r2, [sp] | *(sp) = r2;
0x0008ea34 mov r0, sb | r0 = sb;
0x0008ea36 mov r2, r6 | r2 = r6;
0x0008ea38 adds r7, 1 | r7++;
0x0008ea3a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ea3e ldrh r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0008ea40 cmp r3, r7 |
| if (r3 > r7) {
0x0008ea42 bgt 0x8ea14 | goto label_23;
| }
| label_148:
0x0008ea44 ldr.w r8, [sp, 0x68] | r8 = var_68h;
0x0008ea48 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0008ea4a ldr r5, [sp, 0x5c] | r5 = var_5ch;
0x0008ea4c ldr.w r2, [r2, r8] | r2 = *((r2 + r8));
| label_50:
0x0008ea50 movs r1, 0x61 | r1 = 0x61;
0x0008ea52 str r2, [sp] | *(sp) = r2;
0x0008ea54 mov r0, sb | r0 = sb;
0x0008ea56 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008ea58 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ea5c ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008ea5e ldr r2, [sp, 0x58] | r2 = var_58h;
0x0008ea60 ldr r1, [sp, 0x64] | r1 = var_64h;
0x0008ea62 subs r3, r3, r4 | r3 -= r4;
0x0008ea64 clz r3, r3 | r3 &= r3;
0x0008ea68 cmp r1, 0 |
0x0008ea6a ite ne |
| if (r1 == 0) {
0x0008ea6c movne r2, 0 | r2 = 0;
| }
| if (r1 != 0) {
0x0008ea6e andeq r2, r2, 1 | r2 &= 1;
| }
0x0008ea72 lsrs r3, r3, 5 | r3 >>= 5;
0x0008ea74 mov r8, r2 | r8 = r2;
0x0008ea76 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008ea78 ands.w r8, r3, r8 | r8 = r3 & r8;
0x0008ea7c str r3, [sp, 0x68] | var_68h = r3;
0x0008ea7e rsb.w r2, r2, 0 | r2 -= ;
0x0008ea82 str r2, [sp, 0x74] | var_74h = r2;
| if (r8 != r3) {
0x0008ea84 bne.w 0x8ee62 | goto label_151;
| }
0x0008ea88 ldrb.w r7, [r4, 0x36] | r7 = *((r4 + 0x36));
0x0008ea8c cmp r7, 0 |
| if (r7 == 0) {
0x0008ea8e beq.w 0x8ee62 | goto label_151;
| }
0x0008ea92 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008ea94 cmp r3, 0xb |
0x0008ea96 it ne |
| if (r3 == 0xb) {
0x0008ea98 movne r7, r3 | r7 = r3;
| }
| if (r3 == 0xb) {
0x0008ea9a beq.w 0x8eba6 | goto label_152;
| }
0x0008ea9e cmp r5, 0 |
| if (r5 == 0) {
0x0008eaa0 beq.w 0x8ebb2 | goto label_153;
| }
| label_28:
0x0008eaa4 ldrb r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x0008eaa6 cmp r3, 0 |
0x0008eaa8 ite ne |
| if (r3 == 0) {
0x0008eaaa movne r7, 6 | r7 = 6;
| }
| if (r3 != 0) {
0x0008eaac moveq r7, 4 | r7 = 4;
| }
| label_29:
0x0008eaae ldr r3, [sp, 0x108] | r3 = *(arg_108h);
0x0008eab0 add r3, sl | r3 += sl;
0x0008eab2 str r3, [sp, 0x5c] | var_5ch = r3;
0x0008eab4 cmp.w sl, 0 |
| if (sl == 0) {
0x0008eab8 bne 0x8eac2 |
0x0008eaba ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0008eabc cmp r3, 0 |
| if (r3 == 0) {
0x0008eabe beq.w 0x8ed22 | goto label_154;
| }
| }
| label_37:
0x0008eac2 ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x0008eac4 movs r1, 0x1a | r1 = 0x1a;
0x0008eac6 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008eac8 mov r0, sb | r0 = sb;
0x0008eaca str r3, [sp, 4] | var_4h = r3;
0x0008eacc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008eace str r3, [sp] | *(sp) = r3;
0x0008ead0 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008ead2 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0008ead6 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008ead8 str r0, [sp, 0x88] | var_88h = r0;
0x0008eada cmp r3, r4 |
| if (r3 == r4) {
0x0008eadc beq.w 0x8ee80 | goto label_155;
| }
0x0008eae0 ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x0008eae2 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008eae4 bl 0xfd2c | fcn_0000fd2c (r0, r1);
0x0008eae8 str r0, [sp, 0x54] | var_54h = r0;
| label_42:
0x0008eaea ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008eaec orrs.w r8, r3, r8 | r8 = r3 | r8;
| if (r8 != r3) {
0x0008eaf0 bne.w 0x8ed5e | goto label_156;
| }
| label_38:
0x0008eaf4 cmp r7, 4 |
| if (r7 == 4) {
0x0008eaf6 beq 0x8ebd6 | goto label_157;
| }
| if (r7 > 4) {
0x0008eaf8 bgt 0x8ebc0 | goto label_158;
| }
0x0008eafa subs r3, r7, 1 | r3 = r7 - 1;
0x0008eafc cmp r3, 2 |
| if (r3 > 2) {
0x0008eafe bhi.w 0x8ee86 | goto label_159;
| }
0x0008eb02 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008eb04 mov r2, r4 | r2 = r4;
0x0008eb06 mov r1, r7 | r1 = r7;
0x0008eb08 bl 0x2ee48 | fcn_0002ee48 (r0, r1, r2, r3, r4, r5, r6);
0x0008eb0a invalid |
| label_43:
0x0008eb0c ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008eb10 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008eb14 cmn r2, r3 |
| if (r2 < r3) {
0x0008eb16 bmi 0x8ebea | goto label_160;
| }
| label_30:
0x0008eb18 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0008eb1a ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008eb1c ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0008eb20 lsls r3, r3, 2 | r3 <<= 2;
0x0008eb22 rsbs r3, r3, 0 | r3 -= ;
0x0008eb24 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_31:
0x0008eb26 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008eb28 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008eb2a cmp r3, r2 |
| if (r3 != r2) {
0x0008eb2c beq 0x8eb48 |
0x0008eb2e ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0008eb30 cmp r3, 1 |
| if (r3 == 1) {
0x0008eb32 beq.w 0x8effc | goto label_161;
| }
0x0008eb36 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008eb38 ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x0008eb3a ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x0008eb3c cmp r1, r3 |
0x0008eb3e ittt gt |
| if (r1 <= r3) {
0x0008eb40 movgt r3, r2 | r3 = r2;
| }
| if (r1 <= r3) {
0x0008eb42 ldrgt r2, [sp, 0x54] | r2 = var_54h;
| }
| if (r1 <= r3) {
0x0008eb44 strdgt r1, r2, [r3, 0x1c] | __asm ("strdgt r1, r2, [r3, 0x1c]");
| goto label_53;
| }
| }
| label_53:
0x0008eb48 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0008eb4a cmp r5, 0 |
0x0008eb4c it ne |
| if (r5 != 0) {
0x0008eb4e cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r5 != 0) {
0x0008eb50 beq 0x8eb6a |
0x0008eb52 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0008eb54 cmp r3, 0 |
| if (r3 == 0) {
0x0008eb56 beq.w 0x8ef48 | goto label_162;
| }
0x0008eb5a ldr r2, [r3] | r2 = *(r3);
0x0008eb5c cmp r2, 0 |
| if (r2 == 0) {
0x0008eb5e beq.w 0x8ef48 | goto label_162;
| }
0x0008eb62 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0008eb64 cmp r3, 0 |
| if (r3 == 0) {
0x0008eb66 beq.w 0x8ef48 | goto label_162;
| }
| }
| label_41:
0x0008eb6a ldr r3, [sp, 0x44] | r3 = var_44h;
0x0008eb6c movs r2, 1 | r2 = 1;
0x0008eb6e cmp r3, 0 |
| if (r3 != 0) {
0x0008eb70 bne.w 0x8e906 | goto label_24;
| }
| label_139:
0x0008eb74 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008eb76 add.w sl, sl, 1 | sl++;
0x0008eb7a ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008eb7c mov r4, r3 | r4 = r3;
0x0008eb7e str r3, [sp, 0x24] | var_24h = r3;
0x0008eb80 cmp r4, 0 |
| if (r4 != 0) {
0x0008eb82 bne.w 0x8e8f0 | goto label_25;
| }
0x0008eb86 b 0x8e926 | goto label_26;
| label_149:
0x0008eb88 mov r2, r3 | r2 = r3;
0x0008eb8a ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x0008eb8c mov r0, r8 | r0 = r8;
0x0008eb8e add.w r3, r3, r7, lsl 4 | r3 += (r7 << 4);
0x0008eb92 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x0008eb94 mvns r3, r6 | r3 = ~r6;
0x0008eb96 str.w r3, [r8, 0x34] | __asm ("str.w r3, [r8, 0x34]");
0x0008eb9a bl 0x69808 | fcn_00069808 (r0, r1, r2);
0x0008eb9e movs r3, 0 | r3 = 0;
0x0008eba0 str.w r3, [r8, 0x34] | __asm ("str.w r3, [r8, 0x34]");
0x0008eba4 b 0x8ea0c | goto label_27;
| label_152:
0x0008eba6 cmp r7, 0xb |
0x0008eba8 it eq |
| if (r7 != 0xb) {
0x0008ebaa moveq r7, 2 | r7 = 2;
| }
0x0008ebac cmp r5, 0 |
| if (r5 != 0) {
0x0008ebae bne.w 0x8eaa4 | goto label_28;
| }
| label_153:
0x0008ebb2 sub.w r8, r7, 5 | r8 = r7 - 5;
0x0008ebb6 clz r8, r8 | r8 &= r8;
0x0008ebba lsr.w r8, r8, 5 | r8 >>= 5;
0x0008ebbe b 0x8eaae | goto label_29;
| label_158:
0x0008ebc0 cmp r7, 6 |
| if (r7 != 6) {
0x0008ebc2 bne.w 0x8ee86 | goto label_159;
| }
0x0008ebc6 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0008ebc8 mov r2, fp | r2 = fp;
0x0008ebca ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008ebcc ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008ebce str r3, [sp] | *(sp) = r3;
0x0008ebd0 mov r3, r4 | r3 = r4;
0x0008ebd2 bl 0x8d164 | fcn_0008d164 (r0, r1, r2, r3, r4, r5);
| label_157:
0x0008ebd6 mov r0, sb | r0 = sb;
0x0008ebd8 ldr r1, [sp, 0x11c] | r1 = *(arg_11ch);
0x0008ebda bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x0008ebde ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008ebe2 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008ebe6 cmn r2, r3 |
| if (r2 >= r3) {
0x0008ebe8 bpl 0x8eb18 | goto label_30;
| }
| label_160:
0x0008ebea ldr r2, [sp, 0x74] | r2 = var_74h;
0x0008ebec mov r1, sb | r1 = sb;
0x0008ebee bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0008ebf2 b 0x8eb26 | goto label_31;
| label_145:
0x0008ebf4 ldr r5, [sp, 0x40] | r5 = var_40h;
0x0008ebf6 b 0x8ec06 | goto label_163;
| label_33:
0x0008ebf8 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0008ebfa cmp r3, r4 |
| if (r3 == r4) {
0x0008ebfc beq 0x8ec0c | goto label_164;
| }
0x0008ebfe ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x0008ec00 cmp r5, 0 |
| if (r5 == 0) {
0x0008ec02 beq.w 0x8e976 | goto label_32;
| }
| label_163:
0x0008ec06 ldr r3, [r5] | r3 = *(r5);
0x0008ec08 cmp r3, 0 |
| if (r3 != 0) {
0x0008ec0a bne 0x8ebf8 | goto label_33;
| }
| label_164:
0x0008ec0c ldr r0, [sp, 0x7c] | r0 = var_7ch;
0x0008ec0e ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008ec10 subs r3, r0, 0 | r3 = r0 - 0;
0x0008ec12 it ne |
| if (r3 == r0) {
0x0008ec14 movne r3, 1 | r3 = 1;
| }
0x0008ec16 cmp r1, r5 |
0x0008ec18 it ne |
| if (r1 == r5) {
0x0008ec1a movne r3, 0 | r3 = 0;
| }
0x0008ec1c cmp r3, 0 |
| if (r3 == 0) {
0x0008ec1e beq.w 0x8e976 | goto label_32;
| }
0x0008ec22 cmp r0, 0 |
0x0008ec24 ldr.w r0, [sb] | r0 = *(sb);
0x0008ec28 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0008ec2c it ge |
| if (r0 < 0) {
0x0008ec2e ldrge r3, [sp, 0x7c] | r3 = var_7ch;
| }
0x0008ec30 ldrb.w r0, [r0, 0x57] | r0 = *((r0 + 0x57));
0x0008ec34 it lt |
| if (r0 >= 0) {
0x0008ec36 addlt r3, r1, -1 | r3 = r1 + -1;
| }
0x0008ec3a cmp r0, 0 |
| if (r0 != 0) {
0x0008ec3c bne.w 0x8eff2 | goto label_165;
| }
0x0008ec40 add.w r0, r3, r3, lsl 2 | r0 = r3 + (r3 << 2);
0x0008ec44 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008ec48 add.w r3, r3, r0, lsl 2 | r3 += (r0 << 2);
| label_52:
0x0008ec4c str r1, [r3, 8] | *((r3 + 8)) = r1;
0x0008ec4e b 0x8e976 | goto label_32;
| label_140:
0x0008ec68 ldrd r4, r6, [sp, 0x94] | __asm ("ldrd r4, r6, [var_94h]");
0x0008ec6c mov sl, fp | sl = fp;
0x0008ec6e str r2, [sp, 0x2c] | var_2ch = r2;
0x0008ec70 cmp r6, 0 |
| if (r6 == 0) {
0x0008ec72 beq.w 0x8e93a | goto label_34;
| }
| label_141:
0x0008ec76 mov r1, r6 | r1 = r6;
0x0008ec78 mov r0, sb | r0 = sb;
0x0008ec7a bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x0008ec7e ldr.w r3, [sb] | r3 = *(sb);
0x0008ec82 cmp r4, 0 |
0x0008ec84 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0008ec88 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008ec8c it lt |
| if (r4 >= 0) {
0x0008ec8e addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0008ec92 cmp r3, 0 |
| if (r3 != 0) {
0x0008ec94 bne.w 0x8f08a | goto label_166;
| }
0x0008ec98 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008ec9c add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x0008eca0 add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_59:
0x0008eca4 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008eca6 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0008eca8 cmp r3, 0 |
| if (r3 == 0) {
0x0008ecaa beq.w 0x8e942 | goto label_35;
| }
| label_142:
0x0008ecae movs r3, 0 | r3 = 0;
0x0008ecb0 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0008ecb2 str r3, [sp] | *(sp) = r3;
0x0008ecb4 movs r1, 0x10 | r1 = 0x10;
0x0008ecb6 ldr r3, [sp, 0xac] | r3 = var_ach;
0x0008ecb8 mov r0, sb | r0 = sb;
0x0008ecba bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ecbe ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008ecc0 cmp r3, 0 |
| if (r3 == 0) {
0x0008ecc2 beq.w 0x8f094 | goto label_167;
| }
0x0008ecc6 ldr r1, [sp, 0x9c] | r1 = var_9ch;
0x0008ecc8 mov r0, sb | r0 = sb;
0x0008ecca bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
| label_60:
0x0008ecce ldr r3, [sp, 0xac] | r3 = var_ach;
0x0008ecd0 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008ecd4 mvns r2, r3 | r2 = ~r3;
0x0008ecd6 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0008ecda cmn r1, r3 |
| if (r1 < r3) {
0x0008ecdc bmi.w 0x8f4da | goto label_168;
| }
0x0008ece0 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008ece2 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0008ece6 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x0008ecea ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0008ecee lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 < r3) {
0x0008ecf0 bmi.w 0x8e94c | goto label_36;
| }
| label_143:
0x0008ecf4 ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [var_34h]");
0x0008ecf8 movs r1, 0x61 | r1 = 0x61;
0x0008ecfa mov r0, sb | r0 = sb;
0x0008ecfc ldr.w r3, [r3, r2, lsl 2] | offset_5 = r2 << 2;
| r3 = *((r3 + offset_5));
0x0008ed00 str r3, [sp] | *(sp) = r3;
0x0008ed02 ldr r3, [sp, 0x10c] | r3 = *(arg_10ch);
0x0008ed04 adds r2, r3, 1 | r2 = r3 + 1;
0x0008ed06 ldrsh.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0008ed0a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ed0e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008ed10 cmp r3, 0 |
| if (r3 != 0) {
0x0008ed12 bne.w 0x8e94c | goto label_36;
| }
0x0008ed16 mov r2, r3 | r2 = r3;
0x0008ed18 mov r1, sl | r1 = sl;
0x0008ed1a mov r0, sb | r0 = sb;
0x0008ed1c bl 0x36b24 | fcn_00036b24 (r0, r1, r2);
0x0008ed20 b 0x8e94c | goto label_36;
| label_154:
0x0008ed22 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0008ed24 tst.w r3, r8 |
| if ((r3 & r8) == 0) {
0x0008ed28 beq.w 0x8eac2 | goto label_37;
| }
0x0008ed2c ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008ed2e ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x0008ed30 lsls r1, r2, 0x12 | r1 = r2 << 0x12;
| if (r1 < r2) {
0x0008ed32 bmi.w 0x8f114 | goto label_169;
| }
| label_62:
0x0008ed36 lsls r2, r2, 0x11 | r2 <<= 0x11;
| if (r2 >= r2) {
0x0008ed38 bpl.w 0x8ee62 | goto label_151;
| }
0x0008ed3c ldr.w r2, [fp, 0x30] | r2 = *(arg_30h);
0x0008ed40 cmp r2, 0 |
| if (r2 == 0) {
0x0008ed42 beq.w 0x8ee4c | goto label_170;
| }
| label_40:
0x0008ed46 ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x0008ed48 movs r1, 0x1a | r1 = 0x1a;
0x0008ed4a ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x0008ed4c mov r0, sb | r0 = sb;
0x0008ed4e ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008ed50 str r3, [sp, 4] | var_4h = r3;
0x0008ed52 str r6, [sp] | *(sp) = r6;
0x0008ed54 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008ed56 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x0008ed5a str r6, [sp, 0x54] | var_54h = r6;
0x0008ed5c str r0, [sp, 0x88] | var_88h = r0;
| label_156:
0x0008ed5e ldr.w r3, [fp, 0x1c] | r3 = *(arg_124h);
0x0008ed62 ands r3, r3, 0x80 | r3 &= 0x80;
| if (r3 == r3) {
0x0008ed66 beq.w 0x8ef04 | goto label_171;
| }
0x0008ed6a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008ed6c cmp r3, r4 |
| if (r3 != r4) {
0x0008ed6e bne.w 0x8ef88 | goto label_172;
| }
| label_47:
0x0008ed72 ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008ed74 cmp r3, 0 |
| if (r3 == 0) {
0x0008ed76 beq.w 0x8eaf4 | goto label_38;
| }
0x0008ed7a ldr r1, [sp, 0x48] | r1 = var_48h;
0x0008ed7c ldrb.w r3, [r4, 0x37] | r3 = *((r4 + 0x37));
0x0008ed80 ldr r0, [sp, 0x54] | r0 = var_54h;
0x0008ed82 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x0008ed84 and r3, r3, 3 | r3 &= 3;
0x0008ed88 ldrh r2, [r1, 0x32] | r2 = *((r1 + 0x32));
0x0008ed8a cmp r3, 2 |
0x0008ed8c it eq |
| if (r3 != 2) {
0x0008ed8e moveq r0, r6 | r0 = r6;
| }
0x0008ed90 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008ed94 str r0, [sp, 0xa8] | var_a8h = r0;
0x0008ed96 adds r3, r2, r3 | r3 = r2 + r3;
0x0008ed98 cmp r2, 0 |
| if (r2 == 0) {
0x0008ed9a beq.w 0x8eaf4 | goto label_38;
| }
0x0008ed9e ldr r2, [sp, 0x110] | r2 = *(arg_110h);
0x0008eda0 movs r6, 0x34 | r6 = 0x34;
0x0008eda2 strd sl, r4, [sp, 0xb8] | __asm ("strd sl, r4, [var_b8h]");
0x0008eda6 mov.w r8, 0 | r8 = 0;
0x0008edaa strd r7, r5, [sp, 0xb0] | __asm ("strd r7, r5, [var_b0h]");
0x0008edae mov r4, r1 | r4 = r1;
0x0008edb0 adds r2, 1 | r2++;
0x0008edb2 mov r5, r3 | r5 = r3;
0x0008edb4 mov sl, r2 | sl = r2;
| do {
0x0008edb6 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0008edb8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008edba ldr.w r1, [r3, r8, lsl 2] | offset_6 = r8 << 2;
| r1 = *((r3 + offset_6));
0x0008edbe bl 0x2be8c | fcn_0002be8c (r0, r1);
0x0008edc2 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0008edc4 mov r7, r0 | r7 = r0;
0x0008edc6 ldrsh.w r1, [r3, r8, lsl 1] | offset_7 = r8 << 1;
| r1 = *((r3 + offset_7));
0x0008edca ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x0008edcc subs r3, 1 | r3--;
0x0008edce cmp r3, r8 |
0x0008edd0 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008edd2 itt eq |
| if (r3 != r8) {
0x0008edd4 moveq r6, 0x35 | r6 = 0x35;
| }
| if (r3 != r8) {
0x0008edd6 moveq r5, r3 | r5 = r3;
| }
0x0008edd8 ldr.w r3, [fp, 0x1c] | r3 = *(arg_124h);
0x0008eddc eor r3, r3, 0x20 | r3 ^= 0x20;
0x0008ede0 ubfx r3, r3, 5, 1 | r3 = (r3 >> 5) & ((1 << 1) - 1);
0x0008ede4 orrs.w r3, r3, r1, lsr 31 | r3 |= (r1 >> 31);
| if (r3 == r3) {
0x0008ede8 bne 0x8edf2 |
0x0008edea mov r0, fp | r0 = fp;
0x0008edec bl 0xfdbc | r0 = fcn_0000fdbc (r0, r1);
0x0008edf0 mov r1, r0 | r1 = r0;
| }
0x0008edf2 mvn r3, 1 | r3 = ~1;
0x0008edf6 add.w r2, r1, sl | r2 = r1 + sl;
0x0008edfa str r3, [sp, 8] | var_8h = r3;
0x0008edfc mov r1, r6 | r1 = r6;
0x0008edfe ldr r3, [sp, 0xa8] | r3 = var_a8h;
0x0008ee00 mov r0, sb | r0 = sb;
0x0008ee02 str r7, [sp, 4] | var_4h = r7;
0x0008ee04 add r3, r8 | r3 += r8;
0x0008ee06 str r3, [sp] | *(sp) = r3;
0x0008ee08 mov r3, r5 | r3 = r5;
0x0008ee0a bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0008ee0e ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008ee12 cmp r3, 0 |
| if (r3 > 0) {
0x0008ee14 ble 0x8ee2a |
0x0008ee16 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0008ee1a add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0008ee1e add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0008ee22 mov.w r3, 0x90 | r3 = 0x90;
0x0008ee26 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
0x0008ee2a ldrh r3, [r4, 0x32] | r3 = *((r4 + 0x32));
0x0008ee2c add.w r8, r8, 1 | r8++;
0x0008ee30 cmp r3, r8 |
0x0008ee32 bgt 0x8edb6 |
| } while (r3 > r8);
0x0008ee34 ldrd r7, r5, [sp, 0xb0] | __asm ("ldrd r7, r5, [var_b0h]");
0x0008ee38 ldrd sl, r4, [sp, 0xb8] | __asm ("ldrd sl, r4, [var_b8h]");
0x0008ee3c b 0x8eaf4 | goto label_38;
| label_146:
0x0008ee3e ldr r3, [sp, 0x10c] | r3 = *(arg_10ch);
0x0008ee40 mov r1, fp | r1 = fp;
0x0008ee42 mov r0, sb | r0 = sb;
0x0008ee44 adds r2, r3, 1 | r2 = r3 + 1;
0x0008ee46 bl 0x36b24 | fcn_00036b24 (r0, r1, r2);
0x0008ee4a b 0x8e988 | goto label_39;
| label_170:
0x0008ee4c ldr.w r0, [fp, 0x3c] | r0 = *(arg_3ch);
0x0008ee50 ldr.w r1, [fp] | r1 = *(fp);
0x0008ee54 adds r0, 0x38 | r0 += 0x38;
0x0008ee56 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x0008ee5a ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0008ee5c cmp r3, 0 |
| if (r3 != 0) {
0x0008ee5e bne.w 0x8ed46 | goto label_40;
| }
| label_151:
0x0008ee62 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008ee66 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008ee6a cmn r2, r3 |
| if (r2 < r3) {
0x0008ee6c bmi.w 0x8f01a | goto label_173;
| }
0x0008ee70 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0008ee72 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008ee74 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0008ee78 lsls r3, r3, 2 | r3 <<= 2;
0x0008ee7a rsbs r3, r3, 0 | r3 -= ;
0x0008ee7c str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0008ee7e b 0x8eb6a | goto label_41;
| label_155:
0x0008ee80 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008ee82 str r3, [sp, 0x54] | var_54h = r3;
0x0008ee84 b 0x8eaea | goto label_42;
| label_159:
0x0008ee86 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008ee8a str r3, [sp, 0x4c] | var_4ch = r3;
0x0008ee8c ldr r3, [sp, 0x80] | r3 = var_80h;
| if (r3 != 0) {
0x0008ee8e cbz r3, 0x8eea4 |
0x0008ee90 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0008ee92 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008ee94 adds r3, 1 | r3++;
0x0008ee96 str r3, [sp, 0x8c] | var_8ch = r3;
0x0008ee98 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0008ee9a cmp r3, 0 |
0x0008ee9c it eq |
| if (r3 != 0) {
0x0008ee9e moveq r3, r2 | r3 = r2;
| }
0x0008eea0 movs r2, 1 | r2 = 1;
0x0008eea2 strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
| }
0x0008eea4 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008eea6 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0008eea8 ldrsh.w r7, [sp, 0x6c] | r7 = var_6ch;
0x0008eeac cmp r2, 0 |
0x0008eeae ite eq |
| if (r2 != 0) {
0x0008eeb0 moveq r3, 0 | r3 = 0;
| }
| if (r2 == 0) {
0x0008eeb2 andne r3, r3, 1 | r3 &= 1;
| }
0x0008eeb6 cmp r3, 0 |
| if (r3 != 0) {
0x0008eeb8 bne.w 0x8f162 | goto label_174;
| }
0x0008eebc strd r7, r3, [sp, 8] | __asm ("strd r7, r3, [var_8h]");
0x0008eec0 mov r1, fp | r1 = fp;
0x0008eec2 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008eec4 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008eec6 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008eec8 str r3, [sp, 4] | var_4h = r3;
0x0008eeca ldr r3, [sp, 0x108] | r3 = *(arg_108h);
0x0008eecc str r2, [sp, 0x18] | var_18h = r2;
0x0008eece ldr r2, [sp, 0x68] | r2 = var_68h;
0x0008eed0 str r3, [sp] | *(sp) = r3;
0x0008eed2 movs r3, 5 | r3 = 5;
0x0008eed4 str r3, [sp, 0x10] | var_10h = r3;
0x0008eed6 str r2, [sp, 0x14] | var_14h = r2;
0x0008eed8 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0008eeda ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0008eedc bl 0x8de04 | fcn_0008de04 (r0, r1, r2, r3, r4, r5, r6);
| label_65:
0x0008eee0 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0008eee2 cmp r3, 0 |
| if (r3 != 0) {
0x0008eee4 bne.w 0x8f384 | goto label_175;
| }
0x0008eee8 movs r3, 1 | r3 = 1;
0x0008eeea str r3, [sp, 0x84] | var_84h = r3;
0x0008eeec b 0x8eb0c | goto label_43;
| label_136:
0x0008eeee ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008eef0 ldr.w r8, [sp, 0x44] | r8 = var_44h;
0x0008eef4 cmp r3, 0 |
| if (r3 != 0) {
0x0008eef6 bne.w 0x8e8d6 | goto label_44;
| }
| label_137:
0x0008eefa ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x0008eefc str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x0008ef00 str r3, [sp, 0xac] | var_ach = r3;
0x0008ef02 b 0x8e934 | goto label_45;
| label_171:
0x0008ef04 str r3, [sp] | *(sp) = r3;
0x0008ef06 movs r1, 0x8e | r1 = 0x8e;
0x0008ef08 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008ef0a mov r0, sb | r0 = sb;
0x0008ef0c ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008ef0e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ef12 ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008ef14 cmp r3, 0 |
| if (r3 == 0) {
0x0008ef16 beq.w 0x8eaf4 | goto label_38;
| }
0x0008ef1a ldr r2, [sp, 0x110] | r2 = *(arg_110h);
0x0008ef1c movs r1, 0x35 | r1 = 0x35;
0x0008ef1e ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008ef20 mov r0, sb | r0 = sb;
0x0008ef22 str r2, [sp] | *(sp) = r2;
0x0008ef24 ldr r2, [sp, 0x54] | r2 = var_54h;
0x0008ef26 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ef2a ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008ef2e cmp r3, 0 |
| if (r3 <= 0) {
0x0008ef30 ble.w 0x8eaf4 | goto label_38;
| }
0x0008ef34 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0008ef38 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0008ef3c add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0008ef40 movs r3, 0x90 | r3 = 0x90;
0x0008ef42 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
0x0008ef46 b 0x8eaf4 | goto label_38;
| label_162:
0x0008ef48 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0008ef4a mov r0, sb | r0 = sb;
0x0008ef4c adds r1, r3, 1 | r1 = r3 + 1;
0x0008ef4e bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x0008ef52 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0008ef54 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0008ef58 cmp r3, 0 |
0x0008ef5a itt lt |
| if (r3 >= 0) {
0x0008ef5c addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r3 < 0) {
0x0008ef60 str r3, [sp, 0x70] | var_70h = r3;
| }
0x0008ef62 ldr.w r3, [sb] | r3 = *(sb);
0x0008ef66 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008ef6a cmp r3, 0 |
| if (r3 != 0) {
0x0008ef6c bne.w 0x8f072 | goto label_176;
| }
0x0008ef70 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0008ef72 add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x0008ef76 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008ef7a add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| label_57:
0x0008ef7e str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008ef80 movs r3, 0 | r3 = 0;
0x0008ef82 movs r2, 1 | r2 = 1;
0x0008ef84 str r3, [sp, 0x70] | var_70h = r3;
0x0008ef86 b 0x8e8fe | goto label_46;
| label_172:
0x0008ef88 ldr r6, [sp, 0x48] | r6 = var_48h;
0x0008ef8a ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x0008ef8c cmp r3, 0 |
| if (r3 == 0) {
0x0008ef8e beq.w 0x8ed72 | goto label_47;
| }
0x0008ef92 str r7, [sp, 0xa8] | var_a8h = r7;
0x0008ef94 mov.w r8, 0 | r8 = 0;
0x0008ef98 str r5, [sp, 0xb0] | var_b0h = r5;
0x0008ef9a ldr r7, [sp, 0x54] | r7 = var_54h;
0x0008ef9c ldr r5, [sp, 0x5c] | r5 = var_5ch;
| label_48:
0x0008ef9e ldrh r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x0008efa0 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0008efa2 ldrsh.w ip, [r3, r8, lsl 1] | offset_8 = r8 << 1;
| ip = *((r3 + offset_8));
| if (r0 == 0) {
0x0008efa6 cbz r0, 0x8efe0 | goto label_177;
| }
0x0008efa8 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x0008efaa movs r3, 0 | r3 = 0;
0x0008efac subs r2, 2 | r2 -= 2;
0x0008efae b 0x8efb6 |
| while (r1 != ip) {
0x0008efb0 adds r3, 1 | r3++;
0x0008efb2 cmp r3, r0 |
| if (r3 == r0) {
0x0008efb4 beq 0x8efe0 | goto label_177;
| }
0x0008efb6 ldrsh r1, [r2, 2]! | r1 = *((r2 += 2));
0x0008efba cmp r1, ip |
0x0008efbc bne 0x8efb0 |
| }
0x0008efbe sxth r3, r3 | __asm ("sxth r3, r3");
| label_49:
0x0008efc0 add.w r2, r7, r8 | r2 = r7 + r8;
0x0008efc4 str r2, [sp] | *(sp) = r2;
0x0008efc6 movs r1, 0x5e | r1 = 0x5e;
0x0008efc8 mov r2, r5 | r2 = r5;
0x0008efca mov r0, sb | r0 = sb;
0x0008efcc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008efd0 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x0008efd2 add.w r8, r8, 1 | r8++;
0x0008efd6 cmp r3, r8 |
| if (r3 > r8) {
0x0008efd8 bgt 0x8ef9e | goto label_48;
| }
0x0008efda ldr r7, [sp, 0xa8] | r7 = var_a8h;
0x0008efdc ldr r5, [sp, 0xb0] | r5 = var_b0h;
0x0008efde b 0x8ed72 | goto label_47;
| label_177:
0x0008efe0 mov.w r3, -1 | r3 = -1;
0x0008efe4 b 0x8efc0 | goto label_49;
| label_147:
0x0008efe6 ldr r2, [sp, 0x78] | r2 = var_78h;
0x0008efe8 b 0x8ea50 | goto label_50;
| label_90:
0x0008efea str.w fp, [sp, 0x2c] | __asm ("str.w fp, [var_2ch]");
0x0008efee b.w 0x8e60e | goto label_51;
| label_165:
0x0008eff2 ldr.w r3, [pc, 0x664] | r3 = *(0x0008f658);
0x0008eff6 add r3, pc | r3 += pc;
0x0008eff8 adds r3, 4 | r3 += 4;
0x0008effa b 0x8ec4c | goto label_52;
| label_161:
0x0008effc ldr r1, [sp, 0x54] | r1 = var_54h;
0x0008effe cmp r1, 0 |
| if (r1 == 0) {
0x0008f000 beq.w 0x8eb48 | goto label_53;
| }
0x0008f004 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008f006 ldrb r3, [r0, 0x13] | r3 = *((r0 + 0x13));
0x0008f008 cmp r3, 7 |
| if (r3 > 7) {
0x0008f00a bhi.w 0x8eb48 | goto label_53;
| }
0x0008f00e adds r2, r3, 1 | r2 = r3 + 1;
0x0008f010 adds r3, 0x26 | r3 += 0x26;
0x0008f012 strb r2, [r0, 0x13] | *((r0 + 0x13)) = r2;
0x0008f014 str.w r1, [r0, r3, lsl 2] | __asm ("str.w r1, [r0, r3, lsl 2]");
0x0008f018 b 0x8eb48 | goto label_53;
| label_173:
0x0008f01a ldr r2, [sp, 0x74] | r2 = var_74h;
0x0008f01c mov r1, sb | r1 = sb;
0x0008f01e bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0008f022 b 0x8eb6a | goto label_41;
| label_100:
0x0008f024 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008f026 ldr r2, [r2] | r2 = *(r2);
0x0008f028 ldr r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x0008f02a and r2, r2, 0x4000 | r2 &= 0x4000;
0x0008f02e orrs r2, r3 | r2 |= r3;
| if (r2 == r3) {
0x0008f030 beq.w 0x8e6fe | goto label_54;
| }
| label_64:
0x0008f034 ldrb.w r2, [sl, 0x2b] | r2 = *((sl + 0x2b));
0x0008f038 cmp r2, 0 |
| if (r2 != 0) {
0x0008f03a bne.w 0x8e6fe | goto label_54;
| }
0x0008f03e ldr.w r0, [sl, 0x3c] | r0 = *((sl + 0x3c));
0x0008f042 ldr.w r1, [sl] | r1 = *(sl);
0x0008f046 adds r0, 0x38 | r0 += 0x38;
0x0008f048 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x0008f04c ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0008f04e cmp r3, 0 |
| if (r3 == 0) {
0x0008f050 beq.w 0x8f53a | goto label_178;
| }
| label_76:
0x0008f054 movs r3, 0 | r3 = 0;
0x0008f056 str r3, [sp, 0xa0] | var_a0h = r3;
0x0008f058 b.w 0x8e34e | goto label_55;
| label_116:
0x0008f05c ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008f05e ldrb r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0008f060 cmp r3, 0 |
| if (r3 != 0) {
0x0008f062 bne 0x8f108 | goto label_179;
| }
0x0008f064 mov r3, r2 | r3 = r2;
0x0008f066 str r2, [sp, 0x40] | var_40h = r2;
0x0008f068 movs r2, 4 | r2 = 4;
0x0008f06a str r3, [sp, 0x44] | var_44h = r3;
0x0008f06c str r2, [sp, 0x38] | var_38h = r2;
0x0008f06e b.w 0x8e30e | goto label_56;
| label_176:
0x0008f072 ldr.w r3, [pc, 0x5e8] | r3 = *(0x0008f65c);
0x0008f076 add r3, pc | r3 += pc;
0x0008f078 adds r3, 4 | r3 += 4;
0x0008f07a b 0x8ef7e | goto label_57;
| label_118:
0x0008f07c ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008f07e mov r0, r4 | r0 = r4;
0x0008f080 bl 0x13558 | fcn_00013558 (r0);
0x0008f084 str r0, [sp, 0x60] | var_60h = r0;
0x0008f086 b.w 0x8e650 | goto label_58;
| label_166:
0x0008f08a ldr.w r3, [pc, 0x5d4] | r3 = *(0x0008f660);
0x0008f08e add r3, pc | r3 += pc;
0x0008f090 adds r3, 4 | r3 += 4;
0x0008f092 b 0x8eca4 | goto label_59;
| label_167:
0x0008f094 ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008f096 cmp r3, 0 |
| if (r3 != 0) {
0x0008f098 bne.w 0x8f552 | goto label_180;
| }
| label_78:
0x0008f09c ldr r1, [sp, 0x10c] | r1 = *(arg_10ch);
0x0008f09e mov r0, sb | r0 = sb;
0x0008f0a0 ldr r2, [sp, 0x90] | r2 = var_90h;
0x0008f0a2 ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x0008f0a4 str r1, [sp] | *(sp) = r1;
0x0008f0a6 movs r1, 0x1e | r1 = 0x1e;
0x0008f0a8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f0ac ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008f0ae mov r2, sl | r2 = sl;
0x0008f0b0 movs r1, 2 | r1 = 2;
0x0008f0b2 bl 0x2ef70 | fcn_0002ef70 (r0, r1, r2);
0x0008f0b6 b 0x8ecce | goto label_60;
| label_130:
0x0008f0b8 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008f0ba cmp r2, fp |
0x0008f0bc it ne |
| if (r2 != fp) {
0x0008f0be movne r4, 4 | r4 = 4;
| goto label_181;
| }
| if (r2 != fp) {
| label_181:
0x0008f0c0 bne.w 0x8e76a | goto label_61;
| }
0x0008f0c4 ldr r2, [sp, 0x110] | r2 = *(arg_110h);
0x0008f0c6 cmp r2, 0 |
| if (r2 != 0) {
0x0008f0c8 bne.w 0x8f336 | goto label_182;
| }
0x0008f0cc ldr r2, [sp, 0x10c] | r2 = *(arg_10ch);
0x0008f0ce mov r3, r5 | r3 = r5;
0x0008f0d0 movs r1, 0x1e | r1 = 0x1e;
0x0008f0d2 mov r0, sb | r0 = sb;
0x0008f0d4 str r2, [sp] | *(sp) = r2;
0x0008f0d6 ldr r2, [sp, 0x90] | r2 = var_90h;
0x0008f0d8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f0dc ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008f0de mov r6, r3 | r6 = r3;
0x0008f0e0 str r3, [sp, 0x7c] | var_7ch = r3;
| label_70:
0x0008f0e2 movs r3, 0 | r3 = 0;
0x0008f0e4 mov r0, sb | r0 = sb;
0x0008f0e6 ldr r1, [sp, 0x11c] | r1 = *(arg_11ch);
0x0008f0e8 str r3, [sp, 0x8c] | var_8ch = r3;
0x0008f0ea str r3, [sp, 0x84] | var_84h = r3;
0x0008f0ec bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x0008f0f0 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008f0f4 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008f0f8 cmn r2, r3 |
| if (r2 >= r3) {
0x0008f0fa bpl.w 0x8f246 | goto label_183;
| }
| label_68:
0x0008f0fe rsbs r2, r7, 0 | r2 = r7 - ;
0x0008f100 mov r1, sb | r1 = sb;
0x0008f102 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0008f104 vaddl.u8 q15, d19, d20 | __asm ("vaddl.u8 q15, d19, d20");
| label_179:
0x0008f108 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0008f10a str r3, [sp, 0x44] | var_44h = r3;
0x0008f10c movs r3, 6 | r3 = 6;
0x0008f10e str r3, [sp, 0x38] | var_38h = r3;
0x0008f110 b.w 0x8e30e | goto label_56;
| label_169:
0x0008f114 ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x0008f118 cmp r3, 0 |
| if (r3 == 0) {
0x0008f11a beq.w 0x8f5ae | goto label_184;
| }
| label_80:
0x0008f11e ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008f120 ldrb.w r3, [r0, 0x97] | r3 = *((r0 + 0x97));
0x0008f124 cmp r3, 0 |
| if (r3 != 0) {
0x0008f126 bne.w 0x8ed36 | goto label_62;
| }
0x0008f12a movs r2, 0x80 | r2 = 0x80;
0x0008f12c mov r1, fp | r1 = fp;
0x0008f12e str r3, [sp] | *(sp) = r3;
0x0008f130 bl 0x24470 | r0 = fcn_00024470 (r0, r1, r2, r3, r4);
0x0008f134 cmp r0, 0 |
| if (r0 != 0) {
0x0008f136 bne.w 0x8ed46 | goto label_40;
| }
0x0008f13a ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008f13c ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x0008f13e b 0x8ed36 | goto label_62;
| label_101:
0x0008f140 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008f142 ldr r3, [r3] | r3 = *(r3);
0x0008f144 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0008f146 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
| if (r2 == 0) {
0x0008f148 cbz r2, 0x8f158 | goto label_185;
| }
0x0008f14a ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x0008f14c cmp r2, 0 |
| if (r2 != 0) {
0x0008f14e bne.w 0x8e32e | goto label_63;
| }
0x0008f152 b 0x8f158 | goto label_185;
| label_102:
0x0008f154 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008f156 ldr r3, [r3] | r3 = *(r3);
| label_185:
0x0008f158 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0008f15a lsls r3, r3, 0x11 | r3 <<= 0x11;
| if (r3 >= r3) {
0x0008f15c bpl.w 0x8e6fe | goto label_54;
| }
0x0008f160 b 0x8f034 | goto label_64;
| label_174:
0x0008f162 ldr r6, [sp, 0x90] | r6 = var_90h;
0x0008f164 mov.w r8, 0 | r8 = 0;
0x0008f168 mov r3, r8 | r3 = r8;
0x0008f16a movs r1, 0xa7 | r1 = 0xa7;
0x0008f16c mov r0, sb | r0 = sb;
0x0008f16e str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008f172 mov r2, r6 | r2 = r6;
0x0008f174 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f178 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0008f17a mov r1, fp | r1 = fp;
0x0008f17c ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0008f17e ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008f180 str r3, [sp, 0x18] | var_18h = r3;
0x0008f182 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0008f184 strd r7, r8, [sp, 8] | __asm ("strd r7, r8, [var_8h]");
0x0008f188 str r3, [sp, 0x14] | var_14h = r3;
0x0008f18a ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008f18c str r3, [sp, 4] | var_4h = r3;
0x0008f18e ldr r3, [sp, 0x108] | r3 = *(arg_108h);
0x0008f190 str r3, [sp] | *(sp) = r3;
0x0008f192 movs r3, 5 | r3 = 5;
0x0008f194 str r3, [sp, 0x10] | var_10h = r3;
0x0008f196 mov r3, r6 | r3 = r6;
0x0008f198 bl 0x8de04 | fcn_0008de04 (r0, r1, r2, r3, r4, r5, r6);
0x0008f19c mov r3, r8 | r3 = r8;
0x0008f19e mov r2, r6 | r2 = r6;
0x0008f1a0 movs r1, 0xa8 | r1 = 0xa8;
0x0008f1a2 mov r0, sb | r0 = sb;
0x0008f1a4 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0008f1a8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f1ac b 0x8eee0 | goto label_65;
| label_133:
0x0008f1ae ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008f1b0 movs r6, 0 | r6 = 0;
0x0008f1b2 cmp r3, 0 |
| if (r3 != 0) {
0x0008f1b4 bne.w 0x8f33c | goto label_77;
| }
0x0008f1b8 ldr r6, [sp, 0x110] | r6 = *(arg_110h);
| label_72:
0x0008f1ba ldr r2, [sp, 0x10c] | r2 = *(arg_10ch);
0x0008f1bc mov r3, r5 | r3 = r5;
0x0008f1be movs r1, 0x1e | r1 = 0x1e;
0x0008f1c0 mov r0, sb | r0 = sb;
0x0008f1c2 str r2, [sp] | *(sp) = r2;
0x0008f1c4 ldr r2, [sp, 0x90] | r2 = var_90h;
0x0008f1c6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f1ca subs r3, r4, 1 | r3 = r4 - 1;
0x0008f1cc cmp r3, 5 |
| if (r3 > 5) {
0x0008f1ce bhi.w 0x8f64c | goto label_186;
| }
0x0008f1d2 adr r2, 8 | r2 = 8;
0x0008f1d4 ldr.w r3, [r2, r3, lsl 2] | offset_9 = r3 << 2;
| r3 = *((r2 + offset_9));
0x0008f1d8 add r2, r3 | r2 += r3;
0x0008f1da bx r2 | return uint32_t (*r2)() ();
| label_126:
0x0008f1f4 cmp r3, 0xb |
0x0008f1f6 mov r4, r3 | r4 = r3;
| if (r3 != 0xb) {
0x0008f1f8 bne.w 0x8e732 | goto label_66;
| }
0x0008f1fc ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008f1fe movs r4, 2 | r4 = 2;
0x0008f200 cmp r3, 0 |
| if (r3 != 0) {
0x0008f202 bne.w 0x8e73a | goto label_67;
| }
0x0008f206 ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008f208 cmp r3, 0 |
| if (r3 != 0) {
0x0008f20a bne.w 0x8f62c | goto label_187;
| }
0x0008f20e ldr r2, [sp, 0x10c] | r2 = *(arg_10ch);
0x0008f210 mov r3, r5 | r3 = r5;
0x0008f212 movs r1, 0x1e | r1 = 0x1e;
0x0008f214 mov r0, sb | r0 = sb;
0x0008f216 movs r4, 2 | r4 = 2;
0x0008f218 str r2, [sp] | *(sp) = r2;
0x0008f21a ldr r2, [sp, 0x90] | r2 = var_90h;
0x0008f21c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f220 ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008f222 mov r6, r3 | r6 = r3;
0x0008f224 mov fp, r3 |
0x0008f226 str r3, [sp, 0x7c] | var_7ch = r3;
| label_85:
0x0008f228 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008f22a mov r1, r4 | r1 = r4;
0x0008f22c mov r2, sl | r2 = sl;
0x0008f22e bl 0x2ef70 | fcn_0002ef70 (r0, r1, r2);
0x0008f232 movs r3, 0 | r3 = 0;
0x0008f234 str r3, [sp, 0x8c] | var_8ch = r3;
0x0008f236 str r3, [sp, 0x84] | var_84h = r3;
| label_75:
0x0008f238 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008f23c ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x0008f240 cmn r2, r3 |
| if (r2 < r3) {
0x0008f242 bmi.w 0x8f0fe | goto label_68;
| }
| label_183:
0x0008f246 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x0008f248 lsls r3, r7, 2 | r3 = r7 << 2;
0x0008f24a ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0008f24e rsbs r3, r3, 0 | r3 -= ;
0x0008f250 str r1, [r2, r3] | *((r2 + r3)) = r1;
0x0008f252 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008f254 cmp r3, 0 |
0x0008f256 it ne |
| if (r3 != 0) {
0x0008f258 cmpne r3, fp | __asm ("cmpne r3, fp");
| }
0x0008f25a ite ne |
| if (r3 == 0) {
0x0008f25c movne r3, 1 | r3 = 1;
| }
| if (r3 != 0) {
0x0008f25e moveq r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x0008f260 bne 0x8f300 | goto label_188;
| }
0x0008f262 mov r4, r6 | r4 = r6;
0x0008f264 mov ip, r6 |
0x0008f266 cmp r6, 0 |
| if (r6 == 0) {
0x0008f268 beq.w 0x8e8c2 | goto label_69;
| }
0x0008f26c ldrd r4, r2, [sb, 0x6c] | __asm ("ldrd r4, r2, [sb, 0x6c]");
0x0008f270 cmp r4, r2 |
| if (r4 >= r2) {
0x0008f272 bge.w 0x8f606 | goto label_189;
| }
0x0008f276 add.w r0, r4, r4, lsl 2 | r0 = r4 + (r4 << 2);
0x0008f27a ldr.w r1, [sb, 0x68] | r1 = *((sb + 0x68));
0x0008f27e adds r2, r4, 1 | r2 = r4 + 1;
0x0008f280 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008f284 lsls r0, r0, 2 | r0 <<= 2;
0x0008f286 movs r5, 8 | r5 = 8;
0x0008f288 str.w r2, [sb, 0x6c] | __asm ("str.w r2, [sb, 0x6c]");
0x0008f28c str r5, [r1, r0] | *((r1 + r0)) = r5;
0x0008f28e add r1, r0 | r1 += r0;
0x0008f290 adds r0, r1, 4 | r0 = r1 + 4;
0x0008f292 vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
0x0008f296 strd r3, r3, [r1, 0xc] | __asm ("strd r3, r3, [r1, 0xc]");
| label_83:
0x0008f29a ldr.w r1, [sb] | r1 = *(sb);
0x0008f29e subs r3, r6, 1 | r3 = r6 - 1;
0x0008f2a0 it mi |
| if (r3 >= r6) {
0x0008f2a2 addmi r3, r2, -1 | r3 = r2 + -1;
| }
0x0008f2a6 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
0x0008f2aa cmp r1, 0 |
| if (r1 != 0) {
0x0008f2ac bne.w 0x8f4e4 | goto label_190;
| }
0x0008f2b0 add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x0008f2b4 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008f2b8 add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| label_74:
0x0008f2bc mov.w ip, 0 |
0x0008f2c0 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008f2c2 b.w 0x8e8c2 | goto label_69;
| label_131:
0x0008f2c6 ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008f2c8 cmp r3, 0 |
| if (r3 != 0) {
0x0008f2ca bne.w 0x8f548 | goto label_191;
| }
0x0008f2ce ldr r2, [sp, 0x10c] | r2 = *(arg_10ch);
0x0008f2d0 mov r3, r5 | r3 = r5;
0x0008f2d2 movs r1, 0x1e | r1 = 0x1e;
0x0008f2d4 mov r0, sb | r0 = sb;
0x0008f2d6 str r2, [sp] | *(sp) = r2;
0x0008f2d8 ldr r2, [sp, 0x90] | r2 = var_90h;
0x0008f2da bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f2de ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008f2e0 mov r6, r3 | r6 = r3;
0x0008f2e2 str r3, [sp, 0x7c] | var_7ch = r3;
0x0008f2e4 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0008f2e6 mov r2, sl | r2 = sl;
0x0008f2e8 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008f2ea ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008f2ec str r3, [sp] | *(sp) = r3;
0x0008f2ee movs r3, 0 | r3 = 0;
0x0008f2f0 bl 0x8d164 | fcn_0008d164 (r0, r1, r2, r3, r4, r5);
0x0008f2f4 b 0x8f0e2 | goto label_70;
| label_122:
0x0008f2f6 mov r5, lr | r5 = lr;
0x0008f2f8 mov r3, r1 | r3 = r1;
0x0008f2fa movs r2, 0 | r2 = 0;
0x0008f2fc b.w 0x8e6a8 | goto label_71;
| label_188:
0x0008f300 ldrd ip, r3, [sb, 0x6c] | __asm ("ldrd ip, r3, [sb, 0x6c]");
0x0008f304 cmp ip, r3 |
| if (ip >= r3) {
0x0008f306 bge.w 0x8f598 | goto label_192;
| }
0x0008f30a add.w r2, ip, ip, lsl 2 | r2 = ip + (ip << 2);
0x0008f30e ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008f310 adds r0, 0x68 | r0 += 0x68;
0x0008f312 add.w r0, ip, 1 | r0 = ip + 1;
0x0008f316 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008f31a lsls r2, r2, 2 | r2 <<= 2;
0x0008f31c str.w r0, [sb, 0x6c] | __asm ("str.w r0, [sb, 0x6c]");
0x0008f320 movs r0, 8 | r0 = 8;
0x0008f322 str r0, [r3, r2] | *((r3 + r2)) = r0;
0x0008f324 add r3, r2 | r3 += r2;
0x0008f326 adds r2, r3, 4 | r2 = r3 + 4;
0x0008f328 movs r4, 0 | r4 = 0;
0x0008f32a vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0008f32e strd r4, r4, [r3, 0xc] | __asm ("strd r4, r4, [r3, 0xc]");
0x0008f332 b.w 0x8e8c2 | goto label_69;
| label_182:
0x0008f336 movs r4, 4 | r4 = 4;
0x0008f338 mov r6, r3 | r6 = r3;
0x0008f33a str r3, [sp, 0x7c] | var_7ch = r3;
| label_77:
0x0008f33c ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x0008f33e movs r1, 0x35 | r1 = 0x35;
0x0008f340 ldr r2, [sp, 0x10c] | r2 = *(arg_10ch);
0x0008f342 mov r0, sb | r0 = sb;
0x0008f344 str r3, [sp] | *(sp) = r3;
0x0008f346 mov r3, r5 | r3 = r5;
0x0008f348 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f34c ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008f350 cmp r3, 0 |
| if (r3 <= 0) {
0x0008f352 ble.w 0x8f1ba | goto label_72;
| }
0x0008f356 ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0008f35a add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0008f35e add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0008f362 movs r3, 0x90 | r3 = 0x90;
0x0008f364 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
0x0008f368 b 0x8f1ba | goto label_72;
| label_117:
0x0008f36a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0008f36c str r3, [sp, 0x60] | var_60h = r3;
0x0008f36e str r3, [sp, 0x44] | var_44h = r3;
0x0008f370 b.w 0x8e30e | goto label_56;
| label_127:
0x0008f374 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008f376 mov fp, r3 |
0x0008f378 str r3, [sp, 0x7c] | var_7ch = r3;
0x0008f37a b.w 0x8e7a4 | goto label_73;
| label_129:
0x0008f37e mov fp, r3 |
0x0008f380 b.w 0x8e76a | goto label_61;
| label_175:
0x0008f384 movs r6, 0 | r6 = 0;
0x0008f386 movs r3, 1 | r3 = 1;
0x0008f388 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0008f38a movs r1, 0x56 | r1 = 0x56;
0x0008f38c mov r0, sb | r0 = sb;
0x0008f38e str r6, [sp] | *(sp) = r6;
0x0008f390 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f394 ldrd r7, r3, [sb, 0x6c] | __asm ("ldrd r7, r3, [sb, 0x6c]");
0x0008f398 cmp r7, r3 |
| if (r7 >= r3) {
0x0008f39a bge.w 0x8f61a | goto label_193;
| }
0x0008f39e ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008f3a2 add.w r2, r7, r7, lsl 2 | r2 = r7 + (r7 << 2);
0x0008f3a6 adds r1, r7, 1 | r1 = r7 + 1;
0x0008f3a8 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008f3ac str.w r1, [sb, 0x6c] | __asm ("str.w r1, [sb, 0x6c]");
0x0008f3b0 movs r1, 8 | r1 = 8;
0x0008f3b2 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x0008f3b6 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0008f3ba adds r2, r3, 4 | r2 = r3 + 4;
0x0008f3bc vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0008f3c0 strd r6, r6, [r3, 0xc] | __asm ("strd r6, r6, [r3, 0xc]");
| label_84:
0x0008f3c4 ldr r3, [sp, 0xac] | r3 = var_ach;
0x0008f3c6 ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x0008f3ca mvns r2, r3 | r2 = ~r3;
0x0008f3cc ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x0008f3d0 cmn r1, r3 |
| if (r1 < r3) {
0x0008f3d2 bmi.w 0x8f5fe | goto label_194;
| }
0x0008f3d6 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x0008f3d8 ldr.w r1, [sb, 0x6c] | r1 = *((sb + 0x6c));
0x0008f3dc str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_82:
0x0008f3e0 ldr r2, [sp, 0x28] | r2 = var_28h;
0x0008f3e2 ldr r3, [r2, 0x38] | r3 = *((r2 + 0x38));
0x0008f3e4 subs r1, r3, 1 | r1 = r3 - 1;
0x0008f3e6 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0008f3e8 str r1, [sp, 0xac] | var_ach = r1;
0x0008f3ea str r1, [r2, 0x38] | *((r2 + 0x38)) = r1;
| if (r3 != 0) {
0x0008f3ec cbz r3, 0x8f3fe |
0x0008f3ee movs r3, 0 | r3 = 0;
0x0008f3f0 ldr r2, [sp, 0x78] | r2 = var_78h;
0x0008f3f2 str r3, [sp] | *(sp) = r3;
0x0008f3f4 mov r0, sb | r0 = sb;
0x0008f3f6 mov r3, r1 | r3 = r1;
0x0008f3f8 movs r1, 0x32 | r1 = 0x32;
0x0008f3fa bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x0008f3fe ldr r6, [sp, 0x4c] | r6 = var_4ch;
0x0008f400 ldr r2, [sp, 0x88] | r2 = var_88h;
0x0008f402 cmp r6, r2 |
| if (r6 <= r2) {
0x0008f404 ble 0x8f4a4 | goto label_195;
| }
0x0008f406 ldr r3, [pc, 0x25c] |
0x0008f408 ldr.w r8, [pc, 0x25c] | r8 = *(0x0008f668);
0x0008f40c str r7, [sp, 0x68] | var_68h = r7;
0x0008f40e add r3, pc | r3 = 0x11ea78;
0x0008f410 ldr r7, [sp, 0xac] | r7 = var_ach;
0x0008f412 adds r3, 4 | r3 += 4;
0x0008f414 str.w sl, [sp, 0x5c] | __asm ("str.w sl, [var_5ch]");
0x0008f418 str r4, [sp, 0x78] | var_78h = r4;
0x0008f41a add r8, pc | r8 += pc;
0x0008f41c mov r4, r2 | r4 = r2;
0x0008f41e mov sl, r3 | sl = r3;
0x0008f420 str r5, [sp, 0x4c] | var_4ch = r5;
| do {
0x0008f422 ldr.w r2, [sb] | r2 = *(sb);
0x0008f426 cmp r4, 0 |
0x0008f428 ite lt |
| if (r4 >= 0) {
0x0008f42a ldrlt r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
| }
| if (r4 >= 0) {
0x0008f42e mov r3, r4 | r3 = r4;
| }
0x0008f430 mov r0, sl | r0 = sl;
0x0008f432 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0008f436 it lt |
| if (r4 >= 0) {
0x0008f438 addlt r3, r3, -1 | r3 += -1;
| }
| if (r2 == 0) {
0x0008f43c cbnz r2, 0x8f44a |
0x0008f43e ldr.w r0, [sb, 0x68] | r0 = *((sb + 0x68));
0x0008f442 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0008f446 add.w r0, r0, r3, lsl 2 | r0 += (r3 << 2);
| }
0x0008f44a ldrb r1, [r0] | r1 = *(r0);
0x0008f44c ldrsb.w lr, [r0, 1] |
0x0008f450 ldrh r5, [r0, 2] | r5 = *((r0 + 2));
0x0008f452 cmp r1, 0x8e |
0x0008f454 ldrd r2, r3, [r0, 4] | __asm ("ldrd r2, r3, [r0, 4]");
0x0008f458 ldrd ip, r0, [r0, 0xc] | __asm ("ldrd ip, r0, [r0, 0xc]");
| if (r1 != 0x8e) {
0x0008f45c beq 0x8f494 |
0x0008f45e strd r0, lr, [sp, 4] | __asm ("strd r0, lr, [var_4h]");
0x0008f462 add.w r0, r8, r1 | r0 = r8 + r1;
0x0008f466 ldrb.w r0, [r0, 0x380] | r0 = *((r0 + 0x380));
0x0008f46a str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x0008f46e tst.w r0, 1 |
0x0008f472 mov r0, sb | r0 = sb;
0x0008f474 it ne |
| if ((r0 & 1) == 0) {
0x0008f476 movne r3, r7 | r3 = r7;
| }
0x0008f478 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x0008f47c ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008f480 cmp r3, 0 |
0x0008f482 itttt gt |
| if (r3 <= 0) {
0x0008f484 ldrgt r2, [sb, 0x68] | r2 = *((sb + 0x68));
| }
| if (r3 <= 0) {
0x0008f488 addgt r3, r3, r3, lsl 2 | r3 += (r3 << 2);
| }
| if (r3 > 0) {
0x0008f48c add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
| }
| if (r3 <= 0) {
0x0008f490 strh r5, [r2, -0x12] | *((r2 - 0x12)) = r5;
| goto label_196;
| }
| }
| label_196:
0x0008f494 adds r4, 1 | r4++;
0x0008f496 cmp r4, r6 |
0x0008f498 bne 0x8f422 |
| } while (r4 != r6);
0x0008f49a ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x0008f49c ldr.w sl, [sp, 0x5c] | sl = var_5ch;
0x0008f4a0 ldr r7, [sp, 0x68] | r7 = var_68h;
0x0008f4a2 ldr r4, [sp, 0x78] | r4 = var_78h;
| label_195:
0x0008f4a4 mov r2, r4 | r2 = r4;
0x0008f4a6 ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008f4a8 movs r1, 2 | r1 = 2;
0x0008f4aa bl 0x2ee48 | fcn_0002ee48 (r0, r1, r2, r3, r4, r5, r6);
0x0008f4ae cmp r7, 0 |
0x0008f4b0 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
| if (r7 < 0) {
0x0008f4b4 bge 0x8f4b8 |
0x0008f4b6 subs r7, r2, 1 | r7 = r2 - 1;
| }
0x0008f4b8 ldr.w r3, [sb] | r3 = *(sb);
0x0008f4bc ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008f4c0 cmp r3, 0 |
| if (r3 != 0) {
0x0008f4c2 bne 0x8f532 | goto label_197;
| }
0x0008f4c4 ldr.w r1, [sb, 0x68] | r1 = *((sb + 0x68));
0x0008f4c8 add.w r3, r7, r7, lsl 2 | r3 = r7 + (r7 << 2);
0x0008f4cc add.w r3, r1, r3, lsl 2 | r3 = r1 + (r3 << 2);
| do {
0x0008f4d0 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0008f4d2 movs r3, 1 | r3 = 1;
0x0008f4d4 str r3, [sp, 0x84] | var_84h = r3;
0x0008f4d6 b.w 0x8eb0c | goto label_43;
| label_168:
0x0008f4da mov r1, sb | r1 = sb;
0x0008f4dc bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0008f4e0 b.w 0x8e942 | goto label_35;
| label_190:
0x0008f4e4 ldr r3, [pc, 0x184] |
0x0008f4e6 add r3, pc | r3 = 0x11eb56;
0x0008f4e8 adds r3, 4 | r3 += 4;
0x0008f4ea b 0x8f2bc | goto label_74;
| label_135:
0x0008f4ec ldr r0, [sp, 0x28] | r0 = var_28h;
0x0008f4ee movs r4, 1 | r4 = 1;
0x0008f4f0 ldr r1, [sp, 0x10c] | r1 = *(arg_10ch);
0x0008f4f2 movs r5, 0 | r5 = 0;
0x0008f4f4 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x0008f4f6 ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
0x0008f4f8 cmp r3, 0 |
0x0008f4fa it eq |
| if (r3 != 0) {
0x0008f4fc moveq r3, r0 | r3 = r0;
| }
0x0008f4fe strb r4, [r3, 0x14] | *((r3 + 0x14)) = r4;
0x0008f500 mov.w r3, -1 | r3 = -1;
0x0008f504 str r1, [sp, 4] | var_4h = r1;
0x0008f506 ldr r1, [sp, 0x108] | r1 = *(arg_108h);
0x0008f508 str r3, [sp, 0x18] | var_18h = r3;
0x0008f50a movs r3, 5 | r3 = 5;
0x0008f50c str r3, [sp, 0x10] | var_10h = r3;
0x0008f50e str r1, [sp] | *(sp) = r1;
0x0008f510 mov r1, sl | r1 = sl;
0x0008f512 ldr r3, [sp, 0x90] | r3 = var_90h;
0x0008f514 str r4, [sp, 0x14] | var_14h = r4;
0x0008f516 str r4, [sp, 8] | var_8h = r4;
0x0008f518 str r5, [sp, 0xc] | var_ch = r5;
0x0008f51a bl 0x8de04 | fcn_0008de04 (r0, r1, r2, r3, r4, r5, r6);
0x0008f51e ldr r2, [sp, 0x80] | r2 = var_80h;
0x0008f520 mov r3, r4 | r3 = r4;
0x0008f522 movs r1, 0x56 | r1 = 0x56;
0x0008f524 mov r0, sb | r0 = sb;
0x0008f526 str r5, [sp] | *(sp) = r5;
0x0008f528 str r4, [sp, 0x8c] | var_8ch = r4;
0x0008f52a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f52e str r4, [sp, 0x84] | var_84h = r4;
0x0008f530 b 0x8f238 | goto label_75;
| label_197:
0x0008f532 ldr r3, [pc, 0x13c] |
0x0008f534 add r3, pc | r3 = 0x11ebaa;
0x0008f536 adds r3, 4 | r3 += 4;
0x0008f538 b 0x8f4d0 |
| } while (1);
| label_178:
0x0008f53a ldr.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x0008f53e cmp r3, 0 |
| if (r3 != 0) {
0x0008f540 bne.w 0x8f054 | goto label_76;
| }
0x0008f544 b.w 0x8e6fe | goto label_54;
| label_191:
0x0008f548 movs r3, 0 | r3 = 0;
0x0008f54a movs r4, 6 | r4 = 6;
0x0008f54c mov r6, r3 | r6 = r3;
0x0008f54e str r3, [sp, 0x7c] | var_7ch = r3;
0x0008f550 b 0x8f33c | goto label_77;
| label_180:
0x0008f552 str r3, [sp] | *(sp) = r3;
0x0008f554 movs r1, 0x35 | r1 = 0x35;
0x0008f556 ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x0008f558 mov r0, sb | r0 = sb;
0x0008f55a ldr r2, [sp, 0x10c] | r2 = *(arg_10ch);
0x0008f55c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f560 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x0008f564 cmp r3, 0 |
| if (r3 <= 0) {
0x0008f566 ble.w 0x8f09c | goto label_78;
| }
0x0008f56a ldr.w r2, [sb, 0x68] | r2 = *((sb + 0x68));
0x0008f56e add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0008f572 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0008f576 movs r3, 0x90 | r3 = 0x90;
0x0008f578 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
0x0008f57c b 0x8f09c | goto label_78;
| label_92:
0x0008f57e str r3, [sp, 0x2c] | var_2ch = r3;
0x0008f580 b.w 0x8e2f4 | goto label_79;
| label_132:
0x0008f584 movs r3, 0 | r3 = 0;
0x0008f586 movs r1, 8 | r1 = 8;
0x0008f588 mov r2, r3 | r2 = r3;
0x0008f58a mov r0, sb | r0 = sb;
0x0008f58c str r3, [sp] | *(sp) = r3;
0x0008f58e bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0008f592 str r0, [sp, 0x7c] | var_7ch = r0;
0x0008f594 b.w 0x8e7a4 | goto label_73;
| label_192:
0x0008f598 movs r3, 0 | r3 = 0;
0x0008f59a movs r1, 8 | r1 = 8;
0x0008f59c mov r2, r3 | r2 = r3;
0x0008f59e mov r0, sb | r0 = sb;
0x0008f5a0 str r3, [sp] | *(sp) = r3;
0x0008f5a2 mov r4, r3 | r4 = r3;
0x0008f5a4 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008f5a8 mov ip, r0 |
0x0008f5aa b.w 0x8e8c2 | goto label_69;
| label_184:
0x0008f5ae ldr r3, [sp, 0x28] | r3 = var_28h;
0x0008f5b0 ldr r3, [r3] | r3 = *(r3);
0x0008f5b2 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0008f5b4 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0008f5b6 cmp r3, 0 |
| if (r3 == 0) {
0x0008f5b8 beq.w 0x8ed36 | goto label_62;
| }
0x0008f5bc ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0008f5be cmp r3, 0 |
| if (r3 != 0) {
0x0008f5c0 bne.w 0x8f11e | goto label_80;
| }
0x0008f5c4 b.w 0x8ed36 | goto label_62;
| label_134:
0x0008f5c8 ldrd r6, r2, [sb, 0x6c] | __asm ("ldrd r6, r2, [sb, 0x6c]");
0x0008f5cc cmp r6, r2 |
| if (r6 >= r2) {
0x0008f5ce bge 0x8f636 | goto label_198;
| }
0x0008f5d0 add.w r2, r6, r6, lsl 2 | r2 = r6 + (r6 << 2);
0x0008f5d4 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x0008f5d8 adds r6, 1 | r6++;
0x0008f5da vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0008f5de lsls r2, r2, 2 | r2 <<= 2;
0x0008f5e0 movs r0, 8 | r0 = 8;
0x0008f5e2 str.w r6, [sb, 0x6c] | __asm ("str.w r6, [sb, 0x6c]");
0x0008f5e6 movs r1, 0 | r1 = 0;
0x0008f5e8 str r0, [r3, r2] | *((r3 + r2)) = r0;
0x0008f5ea add r3, r2 | r3 += r2;
0x0008f5ec adds r2, r3, 4 | r2 = r3 + 4;
0x0008f5ee vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0008f5f2 strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| do {
0x0008f5f6 movs r3, 0 | r3 = 0;
0x0008f5f8 str r3, [sp, 0x7c] | var_7ch = r3;
0x0008f5fa b.w 0x8e7ce | goto label_81;
| label_194:
0x0008f5fe mov r1, sb | r1 = sb;
0x0008f600 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x0008f604 b 0x8f3e0 | goto label_82;
| label_189:
0x0008f606 mov r2, r3 | r2 = r3;
0x0008f608 movs r1, 8 | r1 = 8;
0x0008f60a mov r0, sb | r0 = sb;
0x0008f60c str r3, [sp] | *(sp) = r3;
0x0008f60e bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x0008f612 ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
0x0008f616 mov r4, r0 | r4 = r0;
0x0008f618 b 0x8f29a | goto label_83;
| label_193:
0x0008f61a mov r3, r6 | r3 = r6;
0x0008f61c mov r2, r6 | r2 = r6;
0x0008f61e movs r1, 8 | r1 = 8;
0x0008f620 mov r0, sb | r0 = sb;
0x0008f622 str r6, [sp] | *(sp) = r6;
0x0008f624 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008f628 mov r7, r0 | r7 = r0;
0x0008f62a b 0x8f3c4 | goto label_84;
| label_187:
0x0008f62c ldr r6, [sp, 0x40] | r6 = var_40h;
0x0008f62e movs r4, 2 | r4 = 2;
0x0008f630 mov fp, r6 |
0x0008f632 str r6, [sp, 0x7c] | var_7ch = r6;
0x0008f634 b 0x8f33c | goto label_77;
| label_198:
0x0008f636 movs r3, 0 | r3 = 0;
0x0008f638 movs r1, 8 | r1 = 8;
0x0008f63a mov r2, r3 | r2 = r3;
0x0008f63c mov r0, sb | r0 = sb;
0x0008f63e str r3, [sp] | *(sp) = r3;
0x0008f640 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x0008f644 adds r6, r0, 1 | r6 = r0 + 1;
0x0008f646 b 0x8f5f6 |
| } while (1);
| label_144:
0x0008f648 blx 0x883c | fcn_0000883c ();
| label_186:
0x0008f64c movs r4, 2 | r4 = 2;
0x0008f64e b 0x8f228 | goto label_85;
| label_88:
0x0008f650 movs r3, 0 | r3 = 0;
0x0008f652 ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x0008f654 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x8f674 */
| #include <stdint.h>
|
; (fcn) fcn.0008f674 () | void fcn_0008f674 (int16_t arg_1h, int16_t arg_ch, int16_t arg_14h, int16_t arg_2ch, int16_t arg_37h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_70h, int16_t arg_96h, int16_t arg_dch, arithmetic arg_1a0h, arithmetic x, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| arithmetic var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| arithmetic var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int32_t var_98h_2;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int32_t var_a8h_2;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| arithmetic var_dch;
| int16_t var_e0h;
| int32_t var_e4h;
| int32_t var_e4h_2;
| int32_t var_ech;
| int32_t var_ech_2;
| int32_t var_f4h;
| int32_t var_f4h_2;
| int16_t var_fch;
| int16_t var_104h;
| int16_t var_108h;
| int16_t var_130h;
| int16_t var_14ch;
| int16_t var_150h;
| int16_t var_164h;
| int16_t var_174h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0008f674 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008f678 sub sp, 0x17c |
0x0008f67a str r2, [sp, 0x3c] | var_3ch = r2;
0x0008f67c movs r4, 0 | r4 = 0;
0x0008f67e ldr.w r2, [pc, 0xae8] |
0x0008f682 str r3, [sp, 0x48] | var_48h = r3;
0x0008f684 ldr.w r3, [pc, 0xae4] | r3 = *(0x9016c);
0x0008f688 add r2, pc | r2 = 0x11f7f6;
0x0008f68a str r0, [sp, 0x2c] | var_2ch = r0;
0x0008f68c str r1, [sp, 0x44] | var_44h = r1;
0x0008f68e ldr r3, [r2, r3] |
0x0008f690 ldr r2, [r0, 0x24] | r2 = *((r0 + 0x24));
0x0008f692 ldr r3, [r3] | r3 = imp.sinh;
0x0008f694 str r3, [sp, 0x174] | var_174h = r3;
0x0008f696 mov.w r3, 0 | r3 = 0;
0x0008f69a mov r3, r0 | r3 = r0;
0x0008f69c ldr r0, [sp, 0x1a0] | r0 = *(arg_1a0h);
0x0008f69e ldr r3, [r3] | r3 = *(r3);
0x0008f6a0 str r2, [sp, 0x40] | var_40h = r2;
0x0008f6a2 str r0, [sp, 0x64] | var_64h = r0;
0x0008f6a4 ldr r0, [sp, 0x1a4] | r0 = *(x);
0x0008f6a6 strd r4, r4, [sp, 0xb4] | __asm ("strd r4, r4, [var_b4h]");
0x0008f6aa str r3, [sp, 0x38] | var_38h = r3;
0x0008f6ac str r0, [sp, 0x4c] | var_4ch = r0;
0x0008f6ae cmp r2, 0 |
| if (r2 != 0) {
0x0008f6b0 bne.w 0x8fae8 | goto label_105;
| }
0x0008f6b4 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008f6b6 ldr r3, [sp, 0x40] | r3 = var_40h;
0x0008f6b8 str r3, [sp, 0xc4] | var_c4h = r3;
| if (r2 != 0) {
0x0008f6ba cbz r2, 0x8f6ca |
0x0008f6bc ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0008f6be lsls r6, r3, 0x16 | r6 = r3 << 0x16;
| if (r6 >= r3) {
0x0008f6c0 bpl 0x8f6ca | goto label_106;
| }
0x0008f6c2 ldr r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x0008f6c4 cmp r3, 0 |
| if (r3 == 0) {
0x0008f6c6 beq.w 0x8fbbc | goto label_107;
| }
| }
| label_106:
0x0008f6ca ldr r1, [sp, 0x44] | r1 = var_44h;
0x0008f6cc ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008f6ce bl 0x8a9ec | fcn_0008a9ec (r0, r1);
0x0008f6d2 str r0, [sp, 0x30] | var_30h = r0;
0x0008f6d4 cmp r0, 0 |
| if (r0 == 0) {
0x0008f6d6 beq.w 0x8fb6a | goto label_108;
| }
0x0008f6da movs r3, 0 | r3 = 0;
0x0008f6dc str r3, [sp, 0x58] | var_58h = r3;
| label_10:
0x0008f6de ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008f6e0 ldr r0, [r3, 0x3c] | r0 = *((r3 + 0x3c));
0x0008f6e2 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008f6e4 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x0008f6e6 cmp r0, 0 |
| if (r0 == 0) {
0x0008f6e8 beq.w 0x907ba | goto label_109;
| }
0x0008f6ec ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x0008f6ee cmp r0, r3 |
| if (r0 == r3) {
0x0008f6f0 beq 0x8f706 | goto label_48;
| }
0x0008f6f2 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008f6f4 add.w r3, r2, 0x10 | r3 = r2 + 0x10;
| do {
0x0008f6f8 mov r2, r3 | r2 = r3;
0x0008f6fa adds r1, 1 | r1++;
0x0008f6fc ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x0008f6fe adds r3, 0x10 | r3 += 0x10;
0x0008f700 cmp r0, r4 |
0x0008f702 bne 0x8f6f8 |
| } while (r0 != r4);
0x0008f704 str r1, [sp, 0x40] | var_40h = r1;
| label_48:
0x0008f706 ldr r3, [r2] | r3 = *(r2);
0x0008f708 movs r1, 0x12 | r1 = 0x12;
0x0008f70a ldr r4, [sp, 0x30] | r4 = var_30h;
0x0008f70c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008f70e ldr r2, [r4] | r2 = *(r4);
0x0008f710 str r3, [sp] | *(sp) = r3;
0x0008f712 movs r3, 0 | r3 = 0;
0x0008f714 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x0008f718 cmp r0, 0 |
0x0008f71a beq 0x8f78c |
| while (r0 != 0) {
| label_0:
0x0008f71c movs r3, 0 | r3 = 0;
0x0008f71e str r3, [sp, 0x30] | var_30h = r3;
| label_18:
0x0008f720 ldr r4, [sp, 0x38] | r4 = var_38h;
0x0008f722 ldr r1, [sp, 0x44] | r1 = var_44h;
0x0008f724 mov r0, r4 | r0 = r4;
0x0008f726 bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x0008f72a ldr r3, [sp, 0x58] | r3 = var_58h;
| if (r3 != 0) {
0x0008f72c cbz r3, 0x8f736 |
0x0008f72e mov r1, r3 | r1 = r3;
0x0008f730 mov r0, r4 | r0 = r4;
0x0008f732 bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
| label_6:
0x0008f736 ldr r3, [sp, 0x4c] | r3 = var_4ch;
| if (r3 != 0) {
0x0008f738 cbz r3, 0x8f742 |
| label_3:
0x0008f73a ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x0008f73c ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008f73e bl 0x1a898 | fcn_0001a898 (r0, r1);
| }
0x0008f742 ldr r3, [sp, 0x3c] | r3 = var_3ch;
| if (r3 != 0) {
0x0008f744 cbz r3, 0x8f750 |
0x0008f746 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008f748 movs r2, 1 | r2 = 1;
0x0008f74a mov r1, r3 | r1 = r3;
0x0008f74c bl 0x1a4b8 | fcn_0001a4b8 (r0, r1, r2);
| }
0x0008f750 ldr r3, [sp, 0x48] | r3 = var_48h;
| if (r3 != 0) {
0x0008f752 cbz r3, 0x8f75c |
0x0008f754 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008f756 mov r1, r3 | r1 = r3;
0x0008f758 bl 0x189b0 | fcn_000189b0 (r0, r1);
| }
0x0008f75c ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008f75e cmp r3, 0 |
| if (r3 == 0) {
0x0008f760 beq.w 0x8fb4c | goto label_98;
| }
0x0008f764 ldr.w r2, [pc, 0xa08] |
0x0008f768 ldr.w r3, [pc, 0xa00] | r3 = *(0x9016c);
0x0008f76c add r2, pc | r2 = 0x11f8e0;
0x0008f76e ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008f770 ldr r2, [r3] | r2 = imp.sinh;
0x0008f772 ldr r3, [sp, 0x174] | r3 = var_174h;
0x0008f774 eors r2, r3 | r2 ^= r3;
0x0008f776 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008f77a bne.w 0x8fb92 | goto label_99;
| }
0x0008f77e ldr r1, [sp, 0x30] | r1 = var_30h;
0x0008f780 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008f782 add sp, 0x17c |
0x0008f784 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008f788 b.w 0x16808 | void (*0x16808)() ();
0x0008f78c ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0008f78e ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x0008f790 str r2, [sp, 0x74] | var_74h = r2;
0x0008f792 cmp r3, 0 |
| if (r3 == 0) {
0x0008f794 beq.w 0x8fb32 | goto label_110;
| }
| label_4:
0x0008f798 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008f79a ldrb.w r3, [r3, 0x97] | r3 = *((r3 + 0x97));
0x0008f79e cmp r3, 0 |
| if (r3 != 0) {
0x0008f7a0 bne.w 0x8fb44 | goto label_111;
| }
0x0008f7a4 add r2, sp, 0xbc | r2 += var_bch;
0x0008f7a6 ldrd r0, r1, [sp, 0x2c] | __asm ("ldrd r0, r1, [var_2ch]");
0x0008f7aa str r2, [sp] | *(sp) = r2;
0x0008f7ac movs r2, 0x7f | r2 = 0x7f;
0x0008f7ae bl 0x24470 | fcn_00024470 (r0, r1, r2, r3, r4);
0x0008f7b2 str r0, [sp, 0x84] | var_84h = r0;
| label_5:
0x0008f7b4 ldr r4, [sp, 0x30] | r4 = var_30h;
0x0008f7b6 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0008f7b8 ldrb.w r3, [r4, 0x2b] | r3 = *((r4 + 0x2b));
0x0008f7bc mov r1, r4 | r1 = r4;
0x0008f7be mov r0, r5 | r0 = r5;
0x0008f7c0 str r3, [sp, 0x94] | var_94h = r3;
0x0008f7c2 bl 0x774c4 | r0 = fcn_000774c4 (r0, r1);
0x0008f7c6 cmp r0, 0 |
0x0008f7c8 bne 0x8f71c |
| }
0x0008f7ca ldr r3, [sp, 0xbc] | r3 = var_bch;
0x0008f7cc mov r1, r4 | r1 = r4;
0x0008f7ce mov r0, r5 | r0 = r5;
0x0008f7d0 mov r2, r3 | r2 = r3;
0x0008f7d2 str r3, [sp, 0xa4] | var_a4h = r3;
0x0008f7d4 bl 0x24578 | r0 = fcn_00024578 (r0, r1, r2);
0x0008f7d8 cmp r0, 0 |
| if (r0 != 0) {
0x0008f7da bne 0x8f71c | goto label_0;
| }
0x0008f7dc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008f7de ldr.w fp, [r3, 8] | fp = *((r3 + 8));
0x0008f7e2 cmp.w fp, 0 |
| if (fp == 0) {
0x0008f7e6 beq.w 0x8fba4 | goto label_112;
| }
| label_9:
0x0008f7ea ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008f7ec ldrb r3, [r3, 0x12] | r3 = *((r3 + 0x12));
0x0008f7ee cmp r3, 0 |
| if (r3 == 0) {
0x0008f7f0 beq.w 0x8fb96 | goto label_113;
| }
| label_8:
0x0008f7f4 ldr r5, [sp, 0x84] | r5 = var_84h;
0x0008f7f6 ldr r4, [sp, 0x3c] | r4 = var_3ch;
0x0008f7f8 ldr r2, [sp, 0x40] | r2 = var_40h;
0x0008f7fa ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008f7fc orrs.w r3, r5, r4 | r3 = r5 | r4;
0x0008f800 ite ne |
| if (r3 == r5) {
0x0008f802 movne r1, 1 | r1 = 1;
| }
| if (r3 != r5) {
0x0008f804 moveq r1, 0 | r1 = 0;
| }
0x0008f806 bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x0008f80a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008f80c orr.w r2, r3, r5 | r2 = r3 | r5;
0x0008f810 subs r3, r4, 0 | r3 = r4 - 0;
0x0008f812 it ne |
| if (r3 == r4) {
0x0008f814 movne r3, 1 | r3 = 1;
| }
0x0008f816 cmp r2, 0 |
0x0008f818 it ne |
| if (r2 == 0) {
0x0008f81a movne r3, 0 | r3 = 0;
| }
0x0008f81c cmp r3, 0 |
| if (r3 != 0) {
0x0008f81e bne.w 0x90198 | goto label_114;
| }
| label_22:
0x0008f822 ldr r5, [sp, 0x30] | r5 = var_30h;
0x0008f824 ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x0008f826 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0008f828 mov r2, r5 | r2 = r5;
0x0008f82a mov r0, r4 | r0 = r4;
0x0008f82c bl 0x23cc8 | fcn_00023cc8 (r0, r1, r2);
0x0008f830 ldrsh.w r6, [r5, 0x22] | r6 = *((r5 + 0x22));
0x0008f834 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0008f836 str r0, [sp, 0x8c] | var_8ch = r0;
0x0008f838 adds r3, r6, 1 | r3 = r6 + 1;
0x0008f83a add r3, r2 | r3 += r2;
0x0008f83c adds r0, r2, 1 | r0 = r2 + 1;
0x0008f83e str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x0008f840 ldrb.w r1, [r5, 0x2b] | r1 = *((r5 + 0x2b));
0x0008f844 str r0, [sp, 0x78] | var_78h = r0;
0x0008f846 cmp r1, 1 |
0x0008f848 ittet eq |
| if (r1 != 1) {
0x0008f84a ldreq r1, [sp, 0x2c] | r1 = var_2ch;
| }
| if (r1 != 1) {
0x0008f84c addeq r3, 1 | r3++;
| }
| if (r1 == 1) {
0x0008f84e ldrne r3, [sp, 0x78] | r3 = var_78h;
| }
| if (r1 != 1) {
0x0008f850 streq r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
| }
0x0008f852 it eq |
| if (r1 != 1) {
0x0008f854 addeq r3, r2, 2 | r3 = r2 + 2;
| }
0x0008f856 str r3, [sp, 0x54] | var_54h = r3;
0x0008f858 ldr r3, [sp, 0x74] | r3 = var_74h;
0x0008f85a ldr r2, [sp, 0x48] | r2 = var_48h;
0x0008f85c and r3, r3, 0x80 | r3 &= 0x80;
0x0008f860 str r3, [sp, 0x90] | var_90h = r3;
0x0008f862 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008f864 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0008f866 tst.w r3, 0x440 |
0x0008f86a ite eq |
| if ((r3 & 0x440) != 0) {
0x0008f86c moveq r3, 1 | r3 = 1;
| }
| if ((r3 & 0x440) == 0) {
0x0008f86e movne r3, 0 | r3 = 0;
| }
0x0008f870 str r3, [sp, 0x5c] | var_5ch = r3;
0x0008f872 cmp r2, 0 |
| if (r2 == 0) {
0x0008f874 beq.w 0x8fc1c | goto label_115;
| }
0x0008f878 ldr r0, [r2] | r0 = *(r2);
0x0008f87a movs r3, 1 | r3 = 1;
0x0008f87c strb r3, [r2, 4] | *((r2 + 4)) = r3;
0x0008f87e cmp r0, 0 |
0x0008f880 str r0, [sp, 0x60] | var_60h = r0;
| if (r0 <= 0) {
0x0008f882 ble.w 0x8fc1c | goto label_115;
| }
0x0008f886 add.w r1, r2, 0xc | r1 = r2 + 0xc;
0x0008f88a movs r3, 0 | r3 = 0;
0x0008f88c mov.w r2, -1 | r2 = -1;
| do {
0x0008f890 str.w r2, [r1, r3, lsl 3] | __asm ("str.w r2, [r1, r3, lsl 3]");
0x0008f894 adds r3, 1 | r3++;
0x0008f896 cmp r3, r0 |
0x0008f898 bne 0x8f890 |
| } while (r3 != r0);
0x0008f89a ldr.w r4, [pc, 0x8d8] | r4 = *(0x00090174);
0x0008f89e mov r5, fp | r5 = fp;
0x0008f8a0 ldr r7, [sp, 0x48] | r7 = var_48h;
0x0008f8a2 mov.w r8, 0 | r8 = 0;
0x0008f8a6 ldr.w fp, [sp, 0x30] | fp = var_30h;
0x0008f8aa mov.w r3, -1 | r3 = -1;
0x0008f8ae add r4, pc | r4 += pc;
0x0008f8b0 str r3, [sp, 0x50] | var_50h = r3;
| label_2:
0x0008f8b2 cmp r6, 0 |
0x0008f8b4 ldr.w sb, [r7, 8] | sb = *((r7 + 8));
| if (r6 <= 0) {
0x0008f8b8 ble 0x8f8fc | goto label_13;
| }
0x0008f8ba ldr.w lr, [fp, 4] |
0x0008f8be movs r1, 0 | r1 = 0;
0x0008f8c0 add.w sl, sb, -1 | sl = sb + -1;
0x0008f8c4 mov r2, fp | r2 = fp;
| label_1:
0x0008f8c6 ldr.w r3, [lr] | r3 = *(lr);
0x0008f8ca mov fp, sl |
0x0008f8cc add.w ip, r3, -1 |
0x0008f8d0 str r3, [sp, 0x34] | var_34h = r3;
| do {
| label_11:
0x0008f8d2 ldrb r3, [fp, 1]! | r3 = *(arg_1h);
0x0008f8d6 ldrb r0, [ip, 1]! | r0 = *((ip += 1));
0x0008f8d8 lsrs r1, r0, 0x1c | r1 = r0 >> 0x1c;
0x0008f8da cmp r3, r0 |
| if (r3 == r0) {
0x0008f8dc beq.w 0x8fbe4 | goto label_116;
| }
0x0008f8e0 add r3, r4 | r3 += r4;
0x0008f8e2 add r0, r4 | r0 += r4;
0x0008f8e4 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x0008f8e8 ldrb.w r0, [r0, 0x140] | r0 = *((r0 + 0x140));
0x0008f8ec cmp r3, r0 |
0x0008f8ee beq 0x8f8d2 |
| } while (r3 == r0);
0x0008f8f0 adds r1, 1 | r1++;
0x0008f8f2 add.w lr, lr, 0xc | lr += 0xc;
0x0008f8f6 cmp r6, r1 |
| if (r6 != r1) {
0x0008f8f8 bne 0x8f8c6 | goto label_1;
| }
0x0008f8fa mov fp, r2 |
| label_13:
0x0008f8fc mov r0, sb | r0 = sb;
0x0008f8fe bl 0x1e510 | fcn_0001e510 (r0);
0x0008f902 ldr r2, [sp, 0x90] | r2 = var_90h;
0x0008f904 cmp r0, 0 |
0x0008f906 clz r2, r2 | r2 &= r2;
0x0008f90a lsr.w r2, r2, 5 | r2 >>= 5;
0x0008f90e it eq |
| if (r0 != 0) {
0x0008f910 moveq r2, 0 | r2 = 0;
| }
0x0008f912 cmp r2, 0 |
| if (r2 == 0) {
0x0008f914 beq.w 0x9014e | goto label_117;
| }
0x0008f918 movs r3, 0 | r3 = 0;
0x0008f91a str.w r8, [sp, 0x50] | __asm ("str.w r8, [var_50h]");
0x0008f91e str r3, [sp, 0x5c] | var_5ch = r3;
| label_12:
0x0008f920 ldr r3, [sp, 0x60] | r3 = var_60h;
0x0008f922 add.w r8, r8, 1 | r8++;
0x0008f926 adds r7, 8 | r7 += 8;
0x0008f928 cmp r8, r3 |
| if (r8 != r3) {
0x0008f92a bne 0x8f8b2 | goto label_2;
| }
0x0008f92c mov fp, r5 |
| label_14:
0x0008f92e ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008f930 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008f932 adds r3, 1 | r3++;
0x0008f934 str r3, [sp, 0x7c] | var_7ch = r3;
0x0008f936 cmp r2, 0 |
| if (r2 == 0) {
0x0008f938 beq.w 0x8fc24 | goto label_118;
| }
0x0008f93c ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x0008f93e movs r1, 0xa | r1 = 0xa;
0x0008f940 ldr.w r4, [fp, 0x6c] | r4 = *(arg_6ch);
0x0008f944 mov r0, fp | r0 = fp;
0x0008f946 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x0008f948 adds r5, r4, 1 | r5 = r4 + 1;
0x0008f94a adds r6, r3, 1 | r6 = r3 + 1;
0x0008f94c movs r3, 0 | r3 = 0;
0x0008f94e mov r2, r6 | r2 = r6;
0x0008f950 str r6, [r7, 0x2c] | *((r7 + 0x2c)) = r6;
0x0008f952 str r5, [sp] | *(sp) = r5;
0x0008f954 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008f958 ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x0008f95a add r2, sp, 0xc0 | r2 += var_c0h;
0x0008f95c ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0008f95e str r6, [sp, 0xc4] | var_c4h = r6;
0x0008f960 cmp r0, 0 |
0x0008f962 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0008f964 ldrsh.w r3, [r0, 0x22] | r3 = *((r0 + 0x22));
0x0008f968 mov r0, r7 | r0 = r7;
0x0008f96a str r3, [sp, 0xd0] | var_d0h = r3;
0x0008f96c mov.w r3, 0 | r3 = 0;
0x0008f970 str r3, [sp, 0xc8] | var_c8h = r3;
0x0008f972 str r3, [sp, 0xd4] | var_d4h = r3;
0x0008f974 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0008f976 it eq |
| if (r0 != 0) {
0x0008f978 moveq r3, 0 | r3 = 0;
| }
0x0008f97a str r3, [sp, 0xcc] | var_cch = r3;
0x0008f97c movs r3, 0xd | r3 = 0xd;
0x0008f97e strb.w r3, [sp, 0xc0] | var_c0h = r3;
0x0008f982 bl 0x63500 | fcn_00063500 (r0, r1, r2, r3, r4, r5, r6);
0x0008f986 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x0008f988 str r3, [sp, 0x80] | var_80h = r3;
0x0008f98a cmp r0, 0 |
| if (r0 != 0) {
0x0008f98c bne.w 0x8f71c | goto label_0;
| }
0x0008f990 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008f992 ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x0008f994 str r3, [sp, 0x60] | var_60h = r3;
0x0008f996 cmp r3, 0 |
| if (r3 != 0) {
0x0008f998 bne.w 0x8f71c | goto label_0;
| }
0x0008f99c mov r1, r6 | r1 = r6;
0x0008f99e mov r0, fp | r0 = fp;
0x0008f9a0 bl 0x2e8b0 | fcn_0002e8b0 (r0, r1, r2);
0x0008f9a4 ldr.w r2, [fp] | r2 = *(fp);
0x0008f9a8 cmp r4, 0 |
0x0008f9aa ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x0008f9ae ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0008f9b0 movs r0, 0x57 | r0 = 0x57;
0x0008f9b2 it lt |
| if (r0 >= 0x57) {
0x0008f9b4 addlt r4, r3, -1 | r4 = r3 + -1;
| }
0x0008f9b8 cmp r2, 0 |
| if (r2 != 0) {
0x0008f9ba bne.w 0x90bce | goto label_119;
| }
0x0008f9be ldr.w r2, [fp, 0x68] | r2 = *(arg_68h);
0x0008f9c2 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x0008f9c6 add.w r2, r2, r4, lsl 2 | r2 += (r4 << 2);
| label_65:
0x0008f9ca str r3, [r2, 8] | *((r2 + 8)) = r3;
0x0008f9cc ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008f9ce ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0008f9d0 ldr r3, [r3] | r3 = *(r3);
0x0008f9d2 str r3, [sp, 0x5c] | var_5ch = r3;
0x0008f9d4 ldr r3, [sp, 0x84] | r3 = var_84h;
0x0008f9d6 cmp r3, 0 |
| if (r3 == 0) {
0x0008f9d8 beq.w 0x90b26 | goto label_120;
| }
| label_59:
0x0008f9dc ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008f9de ldr r2, [r1, 0x28] | r2 = *((r1 + 0x28));
0x0008f9e0 ldrb r3, [r1, 0x13] | r3 = *((r1 + 0x13));
0x0008f9e2 str r2, [sp, 0x60] | var_60h = r2;
0x0008f9e4 adds r2, 1 | r2++;
0x0008f9e6 str r2, [r1, 0x28] | *((r1 + 0x28)) = r2;
0x0008f9e8 cmp r3, 0 |
| if (r3 == 0) {
0x0008f9ea beq.w 0x90c04 | goto label_121;
| }
0x0008f9ee subs r2, r3, 1 | r2 = r3 - 1;
0x0008f9f0 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008f9f2 uxtb r2, r2 | r2 = (int8_t) r2;
0x0008f9f4 add.w r1, r2, 0x26 | r1 = r2 + 0x26;
0x0008f9f8 strb r2, [r0, 0x13] | *((r0 + 0x13)) = r2;
0x0008f9fa ldr.w r7, [r0, r1, lsl 2] | offset_0 = r1 << 2;
| r7 = *((r0 + offset_0));
0x0008f9fe cmp r2, 0 |
| if (r2 == 0) {
0x0008fa00 beq.w 0x90bf4 | goto label_122;
| }
0x0008fa04 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008fa06 subs r3, 2 | r3 -= 2;
0x0008fa08 uxtb r3, r3 | r3 = (int8_t) r3;
0x0008fa0a strb r3, [r2, 0x13] | *((r2 + 0x13)) = r3;
0x0008fa0c adds r3, 0x26 | r3 += 0x26;
0x0008fa0e ldr.w sl, [r2, r3, lsl 2] | offset_1 = r3 << 2;
| sl = *((r2 + offset_1));
| label_68:
0x0008fa12 movs r6, 0 | r6 = 0;
0x0008fa14 ldrd r3, r2, [sp, 0x5c] | __asm ("ldrd r3, r2, [var_5ch]");
0x0008fa18 movs r1, 0x76 | r1 = 0x76;
0x0008fa1a mov r0, fp | r0 = fp;
0x0008fa1c str r6, [sp] | *(sp) = r6;
0x0008fa1e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008fa22 ldrd r4, r3, [fp, 0x6c] | __asm ("ldrd r4, r3, [arg_6ch]");
0x0008fa26 ldr r2, [sp, 0xc4] | r2 = var_c4h;
0x0008fa28 cmp r4, r3 |
| if (r4 >= r3) {
0x0008fa2a bge.w 0x90be2 | goto label_123;
| }
0x0008fa2e add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x0008fa32 ldr.w r0, [fp, 0x68] | r0 = *(arg_68h);
0x0008fa36 adds r1, r4, 1 | r1 = r4 + 1;
0x0008fa38 lsls r3, r3, 2 | r3 <<= 2;
0x0008fa3a str.w r1, [fp, 0x6c] | __asm ("str.w r1, [arg_6ch]");
0x0008fa3e mov.w ip, 0xb |
0x0008fa42 adds r1, r0, r3 | r1 = r0 + r3;
0x0008fa44 strd r2, r6, [r1, 4] | __asm ("strd r2, r6, [r1, 4]");
0x0008fa48 strd r6, r6, [r1, 0xc] | __asm ("strd r6, r6, [r1, 0xc]");
0x0008fa4c str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_67:
0x0008fa50 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0008fa52 movs r1, 0x61 | r1 = 0x61;
0x0008fa54 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0008fa56 mov r0, fp | r0 = fp;
0x0008fa58 str r7, [sp] | *(sp) = r7;
0x0008fa5a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008fa5e ldr r5, [sp, 0x60] | r5 = var_60h;
0x0008fa60 movs r3, 0 | r3 = 0;
0x0008fa62 movs r1, 0x7f | r1 = 0x7f;
0x0008fa64 str r3, [sp] | *(sp) = r3;
0x0008fa66 mov r0, fp | r0 = fp;
0x0008fa68 mov r3, sl | r3 = sl;
0x0008fa6a mov r2, r5 | r2 = r5;
0x0008fa6c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008fa70 mov r3, r7 | r3 = r7;
0x0008fa72 mov r2, r5 | r2 = r5;
0x0008fa74 movs r1, 0x80 | r1 = 0x80;
0x0008fa76 mov r0, fp | r0 = fp;
0x0008fa78 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0008fa7c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008fa80 mov r1, r4 | r1 = r4;
0x0008fa82 mov r0, fp | r0 = fp;
0x0008fa84 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x0008fa88 ldr.w r2, [fp] | r2 = *(fp);
0x0008fa8c cmp r4, 0 |
0x0008fa8e ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x0008fa92 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x0008fa96 it lt |
| if (r4 >= 0) {
0x0008fa98 addlt r4, r3, -1 | r4 = r3 + -1;
| }
0x0008fa9c cmp r2, 0 |
| if (r2 != 0) {
0x0008fa9e bne.w 0x90bd8 | goto label_124;
| }
0x0008faa2 ldr.w r2, [fp, 0x68] | r2 = *(arg_68h);
0x0008faa6 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x0008faaa add.w r2, r2, r4, lsl 2 | r2 += (r4 << 2);
| label_66:
0x0008faae str r3, [r2, 8] | *((r2 + 8)) = r3;
| if (r7 != 0) {
0x0008fab0 cbz r7, 0x8fac6 |
0x0008fab2 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008fab4 ldrb r3, [r1, 0x13] | r3 = *((r1 + 0x13));
0x0008fab6 cmp r3, 7 |
| if (r3 > 7) {
0x0008fab8 bhi.w 0x90382 | goto label_125;
| }
0x0008fabc adds r2, r3, 1 | r2 = r3 + 1;
0x0008fabe adds r3, 0x26 | r3 += 0x26;
0x0008fac0 strb r2, [r1, 0x13] | *((r1 + 0x13)) = r2;
0x0008fac2 str.w r7, [r1, r3, lsl 2] | __asm ("str.w r7, [r1, r3, lsl 2]");
| }
0x0008fac6 cmp.w sl, 0 |
| if (sl == 0) {
0x0008faca beq.w 0x90382 | goto label_125;
| }
0x0008face ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008fad0 ldrb r3, [r3, 0x13] | r3 = *((r3 + 0x13));
0x0008fad2 cmp r3, 7 |
| if (r3 > 7) {
0x0008fad4 bhi.w 0x90382 | goto label_125;
| }
0x0008fad8 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0008fada adds r2, r3, 1 | r2 = r3 + 1;
0x0008fadc adds r3, 0x26 | r3 += 0x26;
0x0008fade movs r7, 1 | r7 = 1;
0x0008fae0 strb r2, [r1, 0x13] | *((r1 + 0x13)) = r2;
0x0008fae2 str.w sl, [r1, r3, lsl 2] | __asm ("str.w sl, [r1, r3, lsl 2]");
0x0008fae6 b 0x8fc5c | goto label_25;
| label_105:
0x0008fae8 mov r0, r3 | r0 = r3;
0x0008faea mov r5, r3 | r5 = r3;
0x0008faec bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x0008faf0 ldr r3, [sp, 0x4c] | r3 = var_4ch;
| if (r3 != 0) {
0x0008faf2 cbz r3, 0x8faf8 |
0x0008faf4 str r4, [sp, 0x30] | var_30h = r4;
0x0008faf6 b 0x8f73a | goto label_3;
| }
0x0008faf8 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008fafa cmp r3, 0 |
| if (r3 == 0) {
0x0008fafc beq 0x8fb74 | goto label_97;
| }
0x0008fafe mov r1, r3 | r1 = r3;
0x0008fb00 movs r2, 1 | r2 = 1;
0x0008fb02 mov r0, r5 | r0 = r5;
0x0008fb04 bl 0x1a4b8 | fcn_0001a4b8 (r0, r1, r2);
0x0008fb08 ldr r3, [sp, 0x48] | r3 = var_48h;
| if (r3 == 0) {
0x0008fb0a cbz r3, 0x8fb4c | goto label_98;
| }
0x0008fb0c ldr.w r2, [pc, 0x668] |
0x0008fb10 ldr.w r3, [pc, 0x658] | r3 = *(0x9016c);
0x0008fb14 add r2, pc | r2 = 0x11fc90;
0x0008fb16 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008fb18 ldr r2, [r3] | r2 = imp.sinh;
0x0008fb1a ldr r3, [sp, 0x174] | r3 = var_174h;
0x0008fb1c eors r2, r3 | r2 ^= r3;
0x0008fb1e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008fb22 bne 0x8fb92 | goto label_99;
| }
| label_7:
0x0008fb24 ldr r1, [sp, 0x48] | r1 = var_48h;
0x0008fb26 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008fb28 add sp, 0x17c |
0x0008fb2a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0008fb2e b.w 0x189b0 | void (*0x189b0)() ();
| label_110:
0x0008fb32 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008fb34 ldr r3, [r3] | r3 = *(r3);
0x0008fb36 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0008fb38 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
| if (r3 == 0) {
0x0008fb3a cbz r3, 0x8fb44 | goto label_111;
| }
0x0008fb3c ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0008fb3e cmp r3, 0 |
| if (r3 != 0) {
0x0008fb40 bne.w 0x8f798 | goto label_4;
| }
| label_111:
0x0008fb44 movs r3, 0 | r3 = 0;
0x0008fb46 str r3, [sp, 0xbc] | var_bch = r3;
0x0008fb48 str r3, [sp, 0x84] | var_84h = r3;
0x0008fb4a b 0x8f7b4 | goto label_5;
| do {
| label_98:
0x0008fb4c ldr.w r2, [pc, 0x62c] |
0x0008fb50 ldr.w r3, [pc, 0x618] | r3 = *(0x9016c);
0x0008fb54 add r2, pc | r2 = 0x11fcd4;
0x0008fb56 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0008fb58 ldr r2, [r3] | r2 = imp.sinh;
0x0008fb5a ldr r3, [sp, 0x174] | r3 = var_174h;
0x0008fb5c eors r2, r3 | r2 ^= r3;
0x0008fb5e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0008fb62 bne 0x8fb92 | goto label_99;
| }
0x0008fb64 add sp, 0x17c |
0x0008fb66 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_108:
0x0008fb6a ldr r1, [sp, 0x44] | r1 = var_44h;
0x0008fb6c ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008fb6e bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x0008fb72 b 0x8f736 | goto label_6;
| label_97:
0x0008fb74 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008fb76 cmp r3, 0 |
0x0008fb78 beq 0x8fb4c |
| } while (r3 == 0);
0x0008fb7a ldr.w r2, [pc, 0x604] | r2 = *(0x00090180);
0x0008fb7e ldr.w r3, [pc, 0x5ec] | r3 = *(0x9016e);
0x0008fb82 add r2, pc | r2 += pc;
0x0008fb84 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0008fb86 ldr r2, [r3] | r2 = *(0x9016e);
0x0008fb88 ldr r3, [sp, 0x174] | r3 = var_174h;
0x0008fb8a eors r2, r3 | r2 ^= r3;
0x0008fb8c mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x0008fb90 beq 0x8fb24 | goto label_7;
| }
| label_99:
0x0008fb92 blx 0x883c | fcn_0000883c ();
| label_113:
0x0008fb96 ldrb.w r3, [fp, 0x96] | r3 = *(arg_96h);
0x0008fb9a orr r3, r3, 0x10 | r3 |= 0x10;
0x0008fb9e strb.w r3, [fp, 0x96] | *(arg_96h) = r3;
0x0008fba2 b 0x8f7f4 | goto label_8;
| label_112:
0x0008fba4 ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x0008fba6 cmp r3, 0 |
| if (r3 == 0) {
0x0008fba8 beq.w 0x90356 | goto label_126;
| }
| label_24:
0x0008fbac ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008fbae bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x0008fbb2 mov fp, r0 |
0x0008fbb4 cmp r0, 0 |
| if (r0 != 0) {
0x0008fbb6 bne.w 0x8f7ea | goto label_9;
| }
0x0008fbba b 0x8f71c | goto label_0;
| label_107:
0x0008fbbc mov r3, r2 | r3 = r2;
0x0008fbbe ldr r4, [sp, 0x40] | r4 = var_40h;
0x0008fbc0 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0008fbc2 mov r1, r3 | r1 = r3;
0x0008fbc4 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008fbc6 str r4, [r3, 0x1c] | *((r3 + 0x1c)) = r4;
0x0008fbc8 str r2, [sp, 0x58] | var_58h = r2;
0x0008fbca movs r2, 1 | r2 = 1;
0x0008fbcc bl 0x1a4b8 | fcn_0001a4b8 (r0, r1, r2);
0x0008fbd0 ldr r1, [sp, 0x44] | r1 = var_44h;
0x0008fbd2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008fbd4 bl 0x8a9ec | fcn_0008a9ec (r0, r1);
0x0008fbd8 str r0, [sp, 0x30] | var_30h = r0;
0x0008fbda cmp r0, 0 |
| if (r0 == 0) {
0x0008fbdc beq.w 0x90366 | goto label_127;
| }
0x0008fbe0 str r4, [sp, 0x3c] | var_3ch = r4;
0x0008fbe2 b 0x8f6de | goto label_10;
| label_116:
0x0008fbe4 cmp r3, 0 |
| if (r3 != 0) {
0x0008fbe6 bne.w 0x8f8d2 | goto label_11;
| }
0x0008fbea ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0008fbec mov fp, r2 |
0x0008fbee ldrh.w r0, [lr, 0xa] | r0 = *((lr + 0xa));
0x0008fbf2 ldrsh.w lr, [r2, 0x20] |
0x0008fbf6 cmp r8, r1 |
0x0008fbf8 it ne |
| if (r8 == r1) {
0x0008fbfa movne r3, 0 | r3 = 0;
| }
0x0008fbfc str r1, [r7, 0xc] | *((r7 + 0xc)) = r1;
0x0008fbfe str r3, [sp, 0x5c] | var_5ch = r3;
0x0008fc00 and r0, r0, 0x60 | r0 &= 0x60;
0x0008fc04 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0008fc06 cmp lr, r1 |
0x0008fc08 it eq |
| if (lr != r1) {
0x0008fc0a moveq r3, r8 | r3 = r8;
| }
0x0008fc0c str r3, [sp, 0x50] | var_50h = r3;
0x0008fc0e cmp r0, 0 |
| if (r0 != 0) {
0x0008fc10 bne.w 0x9036e | goto label_128;
| }
0x0008fc14 cmp r6, r1 |
| if (r6 > r1) {
0x0008fc16 bgt.w 0x8f920 | goto label_12;
| }
0x0008fc1a b 0x8f8fc | goto label_13;
| label_115:
0x0008fc1c mov.w r3, -1 | r3 = -1;
0x0008fc20 str r3, [sp, 0x50] | var_50h = r3;
0x0008fc22 b 0x8f92e | goto label_14;
| label_118:
0x0008fc24 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008fc26 add r0, sp, 0xdc | r0 += var_dch;
0x0008fc28 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008fc2a str r3, [sp, 0xe0] | var_e0h = r3;
0x0008fc2c strd r3, r3, [sp, 0xe4] | __asm ("strd r3, r3, [var_e4h]");
0x0008fc30 strd r3, r3, [sp, 0xec] | __asm ("strd r3, r3, [var_ech]");
0x0008fc34 strd r3, r3, [sp, 0xf4] | __asm ("strd r3, r3, [var_f4h]");
0x0008fc38 ldr r3, [sp, 0x58] | r3 = var_58h;
0x0008fc3a str r2, [sp, 0xdc] | var_dch = r2;
0x0008fc3c cmp r3, 0 |
| if (r3 == 0) {
0x0008fc3e beq.w 0x8fdd6 | goto label_129;
| }
0x0008fc42 mov r1, r3 | r1 = r3;
0x0008fc44 ldr r3, [r3] | r3 = *(r3);
0x0008fc46 str r3, [sp, 0x5c] | var_5ch = r3;
0x0008fc48 bl 0x31284 | fcn_00031284 (r0, r1);
0x0008fc4c str r0, [sp, 0x80] | var_80h = r0;
0x0008fc4e cmp r0, 0 |
| if (r0 != 0) {
0x0008fc50 bne.w 0x910e6 | goto label_130;
| }
0x0008fc54 ldr r7, [sp, 0x3c] | r7 = var_3ch;
0x0008fc56 mov.w r3, -1 | r3 = -1;
0x0008fc5a str r3, [sp, 0x60] | var_60h = r3;
| label_25:
0x0008fc5c ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008fc5e ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008fc60 clz r3, r3 | r3 &= r3;
0x0008fc64 lsrs r3, r3, 5 | r3 >>= 5;
0x0008fc66 cmp r2, 0 |
0x0008fc68 it le |
| if (r2 > 0) {
0x0008fc6a movle r3, 0 | r3 = 0;
| }
0x0008fc6c cmp r3, 0 |
| if (r3 == 0) {
0x0008fc6e beq.w 0x8fde2 | goto label_131;
| }
0x0008fc72 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008fc74 ldrsh.w r4, [r3, 0x20] | r4 = *((r3 + 0x20));
0x0008fc78 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x0008fc7a cmp r4, 0 |
0x0008fc7c str r4, [sp, 0x50] | var_50h = r4;
| if (r4 < 0) {
0x0008fc7e blt 0x8fca6 | goto label_132;
| }
0x0008fc80 tst.w r1, 0x60 |
| if ((r1 & 0x60) == 0) {
0x0008fc84 beq 0x8fca6 | goto label_132;
| }
| if (r4 == 0) {
0x0008fc86 cbz r4, 0x8fca6 | goto label_132;
| }
0x0008fc88 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0008fc8a add.w r3, r4, r4, lsl 1 | r3 = r4 + (r4 << 1);
0x0008fc8e add.w r3, r0, r3, lsl 2 | r3 = r0 + (r3 << 2);
| do {
0x0008fc92 ldrh r2, [r3, -0x2] | r2 = *((r3 - 0x2));
0x0008fc96 and r2, r2, 0x60 | r2 &= 0x60;
| if (r2 != 0) {
0x0008fc9a cbz r2, 0x8fc9e |
0x0008fc9c subs r4, 1 | r4--;
| }
0x0008fc9e subs r3, 0xc | r3 -= 0xc;
0x0008fca0 cmp r3, r0 |
0x0008fca2 bne 0x8fc92 |
| } while (r3 != r0);
0x0008fca4 str r4, [sp, 0x50] | var_50h = r4;
| label_132:
0x0008fca6 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0008fca8 tst.w r1, 0x62 |
0x0008fcac ldrsh.w r3, [r2, 0x22] | r3 = *((r2 + 0x22));
| if ((r1 & 0x62) == 0) {
0x0008fcb0 beq 0x8fcd4 | goto label_133;
| }
0x0008fcb2 cmp r3, 0 |
| if (r3 <= 0) {
0x0008fcb4 ble.w 0x910d0 | goto label_134;
| }
0x0008fcb8 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0008fcba movs r0, 0xc | r0 = 0xc;
0x0008fcbc movs r1, 0 | r1 = 0;
0x0008fcbe smlabb r0, r3, r0, r2 | __asm ("smlabb r0, r3, r0, r2");
| do {
0x0008fcc2 ldrh r4, [r2, 0xa] | r4 = *((r2 + 0xa));
0x0008fcc4 and r4, r4, 0x62 | r4 &= 0x62;
| if (r4 != 0) {
0x0008fcc8 cbz r4, 0x8fccc |
0x0008fcca adds r1, 1 | r1++;
| }
0x0008fccc adds r2, 0xc | r2 += 0xc;
0x0008fcce cmp r2, r0 |
0x0008fcd0 bne 0x8fcc2 |
| } while (r2 != r0);
0x0008fcd2 subs r3, r3, r1 | r3 -= r1;
| label_133:
0x0008fcd4 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008fcd6 cmp r2, r3 |
| if (r2 != r3) {
0x0008fcd8 bne.w 0x910d0 | goto label_134;
| }
| label_15:
0x0008fcdc ldr r3, [sp, 0x38] | r3 = var_38h;
0x0008fcde ldr r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x0008fce0 ands r3, r3, 1 | r3 &= 1;
| if (r3 == r3) {
0x0008fce4 beq.w 0x8fe00 | goto label_84;
| }
0x0008fce8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008fcea ldrb r2, [r3, 0x12] | r2 = *((r3 + 0x12));
0x0008fcec cmp r2, 0 |
| if (r2 != 0) {
0x0008fcee bne.w 0x91128 | goto label_135;
| }
0x0008fcf2 ldr r3, [r3, 0x78] | r3 = *((r3 + 0x78));
0x0008fcf4 cmp r3, 0 |
| if (r3 == 0) {
0x0008fcf6 beq.w 0x90e76 | goto label_136;
| }
0x0008fcfa str r2, [sp, 0x70] | var_70h = r2;
| label_16:
0x0008fcfc ldr r3, [sp, 0x94] | r3 = var_94h;
0x0008fcfe cmp r3, 2 |
0x0008fd00 itt eq |
| if (r3 != 2) {
0x0008fd02 moveq r3, 0 | r3 = 0;
| }
| if (r3 != 2) {
0x0008fd04 streq r3, [sp, 0x74] | var_74h = r3;
| }
| if (r3 == 2) {
0x0008fd06 beq 0x8fd78 | goto label_137;
| }
0x0008fd08 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x0008fd0c add r3, sp, 0xb8 | r3 += var_b8h;
0x0008fd0e ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x0008fd12 movs r4, 0 | r4 = 0;
0x0008fd14 str r3, [sp, 0xc] | var_ch = r3;
0x0008fd16 add r3, sp, 0xb4 | r3 += var_b4h;
0x0008fd18 str r3, [sp, 8] | var_8h = r3;
0x0008fd1a mov.w r3, -1 | r3 = -1;
0x0008fd1e movs r2, 0x71 | r2 = 0x71;
0x0008fd20 mov r1, sb | r1 = sb;
0x0008fd22 str r3, [sp] | *(sp) = r3;
0x0008fd24 mov r0, r8 | r0 = r8;
0x0008fd26 mov r3, r4 | r3 = r4;
0x0008fd28 str r4, [sp, 4] | var_4h = r4;
0x0008fd2a bl 0x2fe28 | r0 = fcn_0002fe28 (r0, r1, r2, r3, r4, r5, r6);
0x0008fd2e adds r2, r0, 2 | r2 = r0 + 2;
0x0008fd30 mov r6, r0 | r6 = r0;
0x0008fd32 lsl.w sl, r2, 2 | sl = r2 << 2;
0x0008fd36 ldr r0, [sp, 0x38] | r0 = var_38h;
0x0008fd38 mov r3, r4 | r3 = r4;
0x0008fd3a mov r2, sl | r2 = sl;
0x0008fd3c bl 0x21784 | fcn_00021784 (r0, r1);
0x0008fd40 str r0, [sp, 0x74] | var_74h = r0;
0x0008fd42 cmp r0, 0 |
| if (r0 == 0) {
0x0008fd44 beq.w 0x8f71c | goto label_0;
| }
0x0008fd48 cmp r6, r4 |
0x0008fd4a ldr.w r1, [sb, 8] | r1 = *((sb + 8));
0x0008fd4e ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0008fd50 adds r0, 0x2c | r0 += 0x2c;
| if (r0 <= 0x2c) {
0x0008fd52 ble.w 0x911bc | goto label_138;
| }
0x0008fd56 sub.w r2, sl, 8 | r2 = sl - 8;
0x0008fd5a add r2, r0 | r2 += r0;
| do {
0x0008fd5c ldrh r4, [r1, 0x34] | r4 = *((r1 + 0x34));
0x0008fd5e adds r3, 1 | r3++;
0x0008fd60 str r3, [r0], 4 | *(r0) = r3;
| r0 += 4;
0x0008fd64 cmp r2, r0 |
0x0008fd66 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x0008fd68 add r3, r4 | r3 += r4;
0x0008fd6a bne 0x8fd5c |
| } while (r2 != r0);
| label_103:
0x0008fd6c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0008fd6e adds r3, 1 | r3++;
0x0008fd70 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x0008fd72 ldr r2, [sp, 0x74] | r2 = var_74h;
0x0008fd74 str.w r3, [r2, r6, lsl 2] | __asm ("str.w r3, [r2, r6, lsl 2]");
| label_137:
0x0008fd78 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008fd7a cmp r3, 0 |
| if (r3 == 0) {
0x0008fd7c beq 0x8fe08 | goto label_139;
| }
0x0008fd7e ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008fd80 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0008fd84 cmp r3, 1 |
| if (r3 == 1) {
0x0008fd86 beq.w 0x90e9a | goto label_140;
| }
0x0008fd8a cmp r3, 2 |
| if (r3 == 2) {
0x0008fd8c beq.w 0x910c4 | goto label_141;
| }
0x0008fd90 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0008fd92 ldr r1, [r3] | r1 = *(r3);
0x0008fd94 cmp r1, 0 |
| if (r1 == 0) {
0x0008fd96 beq.w 0x90ef0 | goto label_142;
| }
0x0008fd9a ldr r0, [r1] | r0 = *(r1);
0x0008fd9c cmp r0, 0 |
| if (r0 <= 0) {
0x0008fd9e ble.w 0x90ef0 | goto label_142;
| }
0x0008fda2 movs r3, 0 | r3 = 0;
0x0008fda4 b 0x8fdac |
| while (r4 >= r4) {
0x0008fda6 cmp r3, r0 |
| if (r3 == r0) {
0x0008fda8 beq.w 0x90ef0 | goto label_142;
| }
0x0008fdac adds r3, 1 | r3++;
0x0008fdae lsls r2, r3, 4 | r2 = r3 << 4;
0x0008fdb0 adds r4, r1, r2 | r4 = r1 + r2;
0x0008fdb2 ldrb r4, [r4, 1] | r4 = *((r4 + 1));
0x0008fdb4 lsls r4, r4, 0x1a | r4 <<= 0x1a;
0x0008fdb6 bpl 0x8fda6 |
| }
0x0008fdb8 ldrb r3, [r1, r2] | r3 = *((r1 + r2));
0x0008fdba cmp r3, 3 |
0x0008fdbc it ne |
| if (r3 != 3) {
0x0008fdbe cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 != 3) {
0x0008fdc0 bne.w 0x911c2 | goto label_143;
| }
0x0008fdc4 ldr r2, [pc, 0x3bc] |
0x0008fdc6 add r2, pc | r2 = 0x11ff4e;
| label_104:
0x0008fdc8 ldr r1, [pc, 0x3bc] |
0x0008fdca ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008fdcc add r1, pc | r1 = 0x11ff58;
0x0008fdce bl 0x21598 | fcn_00021598 (r0, r1);
0x0008fdd2 b.w 0x90ea8 | goto label_96;
| label_129:
0x0008fdd6 ldr r7, [sp, 0x58] | r7 = var_58h;
0x0008fdd8 mov.w r3, -1 | r3 = -1;
0x0008fddc str r3, [sp, 0x60] | var_60h = r3;
0x0008fdde str r7, [sp, 0x80] | var_80h = r7;
0x0008fde0 str r7, [sp, 0x5c] | var_5ch = r7;
| label_131:
0x0008fde2 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008fde4 cmp r3, 0 |
| if (r3 == 0) {
0x0008fde6 beq.w 0x8fcdc | goto label_15;
| }
0x0008fdea ldr r3, [r3] | r3 = *(r3);
0x0008fdec ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0008fdee cmp r3, r2 |
| if (r3 == r2) {
0x0008fdf0 beq.w 0x8fcdc | goto label_15;
| }
0x0008fdf4 ldr r1, [pc, 0x394] |
0x0008fdf6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0008fdf8 add r1, pc | r1 = 0x11ff88;
0x0008fdfa bl 0x21598 | fcn_00021598 (r0, r1);
0x0008fdfe b 0x8f71c | goto label_0;
| label_84:
0x0008fe00 str r3, [sp, 0x70] | var_70h = r3;
0x0008fe02 b 0x8fcfc | goto label_16;
| label_88:
0x0008fe04 ldrd fp, r7, [sp, 0xa8] | __asm ("ldrd fp, r7, [var_a8h]");
| label_139:
0x0008fe08 cmp r7, 0 |
| if (r7 != 0) {
0x0008fe0a bne.w 0x91136 | goto label_144;
| }
0x0008fe0e ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008fe10 cmp r3, 0 |
| if (r3 == 0) {
0x0008fe12 beq.w 0x91130 | goto label_145;
| }
0x0008fe16 ldrd r6, r3, [fp, 0x6c] | __asm ("ldrd r6, r3, [arg_6ch]");
0x0008fe1a ldr r2, [sp, 0xc4] | r2 = var_c4h;
0x0008fe1c cmp r6, r3 |
| if (r6 >= r3) {
0x0008fe1e bge.w 0x90b02 | goto label_146;
| }
0x0008fe22 add.w r3, r6, r6, lsl 2 | r3 = r6 + (r6 << 2);
0x0008fe26 ldr.w r0, [fp, 0x68] | r0 = *(arg_68h);
0x0008fe2a adds r1, r6, 1 | r1 = r6 + 1;
0x0008fe2c lsls r3, r3, 2 | r3 <<= 2;
0x0008fe2e str.w r1, [fp, 0x6c] | __asm ("str.w r1, [arg_6ch]");
0x0008fe32 movs r4, 0xb | r4 = 0xb;
0x0008fe34 adds r1, r0, r3 | r1 = r0 + r3;
0x0008fe36 strd r2, r7, [r1, 4] | __asm ("strd r2, r7, [r1, 4]");
0x0008fe3a strd r7, r7, [r1, 0xc] | __asm ("strd r7, r7, [r1, 0xc]");
0x0008fe3e str r4, [r0, r3] | *((r0 + r3)) = r4;
| label_57:
0x0008fe40 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0008fe42 cmp r2, 0 |
| if (r2 >= 0) {
0x0008fe44 blt 0x8fe58 |
0x0008fe46 ldr r1, [sp, 0x80] | r1 = var_80h;
0x0008fe48 movs r3, 0 | r3 = 0;
0x0008fe4a str r3, [sp] | *(sp) = r3;
0x0008fe4c mov r0, fp | r0 = fp;
0x0008fe4e ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008fe50 add r2, r1 | r2 += r1;
0x0008fe52 movs r1, 0x50 | r1 = 0x50;
0x0008fe54 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
| label_100:
0x0008fe58 str r6, [sp, 0x34] | var_34h = r6;
| label_101:
0x0008fe5a ldr r5, [sp, 0x30] | r5 = var_30h;
0x0008fe5c ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x0008fe5e ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0008fe62 and r8, r3, 1 | r8 = r3 & 1;
0x0008fe66 cmp r1, 0 |
| if (r1 <= 0) {
0x0008fe68 ble 0x8ff18 | goto label_147;
| }
0x0008fe6a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0008fe6c mov.w ip, 0 |
0x0008fe70 ldr r4, [sp, 0x7c] | r4 = var_7ch;
0x0008fe72 mov sl, ip | sl = ip;
0x0008fe74 str r6, [sp, 0x68] | var_68h = r6;
0x0008fe76 mov r6, ip | r6 = ip;
0x0008fe78 str.w r8, [sp, 0x40] | __asm ("str.w r8, [var_40h]");
0x0008fe7c add.w sb, r3, 0xc | sb = r3 + 0xc;
0x0008fe80 mov r8, r3 | r8 = r3;
| label_17:
0x0008fe82 ldrsh.w r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0008fe86 cmp r3, sl |
| if (r3 == sl) {
0x0008fe88 beq.w 0x90484 | goto label_148;
| }
0x0008fe8c ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0008fe8e add.w r3, sl, sl, lsl 1 | r3 = sl + (sl << 1);
0x0008fe92 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x0008fe96 ldrh r0, [r2, 0xa] | r0 = *((r2 + 0xa));
0x0008fe98 tst.w r0, 0x62 |
| if ((r0 & 0x62) == 0) {
0x0008fe9c beq.w 0x90126 | goto label_149;
| }
0x0008fea0 ands r3, r0, 0x20 | r3 = r0 & 0x20;
0x0008fea4 add.w r6, r6, 1 | r6++;
| if (r3 != r0) {
0x0008fea8 bne 0x8ff0a | goto label_31;
| }
0x0008feaa lsls r0, r0, 0x19 | r0 <<= 0x19;
| if (r0 < r0) {
0x0008feac bmi.w 0x90ae6 | goto label_150;
| }
0x0008feb0 cmp.w r8, 0 |
| if (r8 == 0) {
0x0008feb4 beq.w 0x90456 | goto label_151;
| }
| label_19:
0x0008feb8 ldr.w r0, [r8] | r0 = *(r8);
0x0008febc cmp r0, 0 |
0x0008febe itt gt |
| if (r0 <= 0) {
0x0008fec0 movgt r3, 0 | r3 = 0;
| }
| if (r0 <= 0) {
0x0008fec2 movgt ip, r1 |
| }
| if (r0 > 0) {
0x0008fec4 bgt 0x8fed0 | goto label_152;
| }
0x0008fec6 b 0x90426 | goto label_153;
| do {
0x0008fec8 adds r3, 1 | r3++;
0x0008feca cmp r3, r0 |
| if (r3 == r0) {
0x0008fecc beq.w 0x90426 | goto label_153;
| }
| label_152:
0x0008fed0 ldr.w r1, [sb, r3, lsl 3] | offset_2 = r3 << 3;
| r1 = *((sb + offset_2));
0x0008fed4 cmp r1, sl |
0x0008fed6 bne 0x8fec8 |
| } while (r1 != sl);
0x0008fed8 cmp r0, r3 |
0x0008feda mov r1, ip | r1 = ip;
| if (r0 <= r3) {
0x0008fedc ble.w 0x90426 | goto label_153;
| }
| label_20:
0x0008fee0 cmp r7, 0 |
| if (r7 != 0) {
0x0008fee2 bne.w 0x9013c | goto label_154;
| }
0x0008fee6 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0008fee8 cmp r2, 0 |
| if (r2 == 0) {
0x0008feea beq.w 0x903fa | goto label_155;
| }
0x0008feee ldrd r0, r2, [sp, 0x7c] | __asm ("ldrd r0, r2, [var_7ch]");
0x0008fef2 cmp r0, r2 |
| if (r0 != r2) {
0x0008fef4 beq 0x8ff08 |
0x0008fef6 adds r2, r3, r2 | r2 = r3 + r2;
0x0008fef8 movs r1, 0x51 | r1 = 0x51;
0x0008fefa mov r3, r4 | r3 = r4;
0x0008fefc mov r0, fp | r0 = fp;
0x0008fefe str r7, [sp] | *(sp) = r7;
0x0008ff00 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ff04 ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
| }
| label_21:
0x0008ff08 adds r4, 1 | r4++;
| label_31:
0x0008ff0a add.w sl, sl, 1 | sl++;
0x0008ff0e cmp r1, sl |
| if (r1 > sl) {
0x0008ff10 bgt 0x8fe82 | goto label_17;
| }
0x0008ff12 ldr r6, [sp, 0x68] | r6 = var_68h;
0x0008ff14 ldr.w r8, [sp, 0x40] | r8 = var_40h;
| label_147:
0x0008ff18 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008ff1a ldr r2, [r3, 0x38] | r2 = *((r3 + 0x38));
0x0008ff1c str r2, [sp, 0x5c] | var_5ch = r2;
0x0008ff1e subs r2, 1 | r2--;
0x0008ff20 mov sl, r2 | sl = r2;
0x0008ff22 str r2, [r3, 0x38] | *((r3 + 0x38)) = r2;
0x0008ff24 cmp.w r8, 0 |
| if (r8 != 0) {
0x0008ff28 bne.w 0x905ea | goto label_156;
| }
| label_40:
0x0008ff2c ldr r3, [sp, 0x94] | r3 = var_94h;
0x0008ff2e cmp r3, 2 |
| if (r3 == 2) {
0x0008ff30 beq.w 0x90078 | goto label_32;
| }
0x0008ff34 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008ff36 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x0008ff3a cmp r3, 1 |
| if (r3 == 1) {
0x0008ff3c beq.w 0x905da | goto label_157;
| }
| label_39:
0x0008ff40 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0008ff42 cmp r3, 0 |
| if (r3 < 0) {
0x0008ff44 blt.w 0x905b0 | goto label_158;
| }
0x0008ff48 cmp r7, 0 |
| if (r7 != 0) {
0x0008ff4a bne.w 0x9054e | goto label_159;
| }
0x0008ff4e ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0008ff50 cmp r3, 0 |
| if (r3 == 0) {
0x0008ff52 beq.w 0x9052a | goto label_160;
| }
| label_34:
0x0008ff56 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008ff58 ldr.w r4, [fp, 0x6c] | r4 = *(arg_6ch);
0x0008ff5c ldrb.w r2, [r3, 0x2b] | r2 = *((r3 + 0x2b));
0x0008ff60 mov r3, r4 | r3 = r4;
0x0008ff62 cmp r2, 1 |
| if (r2 == 1) {
0x0008ff64 beq.w 0x90576 | goto label_161;
| }
0x0008ff68 ldr.w r3, [fp, 0x70] | r3 = *(arg_70h);
0x0008ff6c cmp r3, r4 |
| if (r3 <= r4) {
0x0008ff6e ble.w 0x9059e | goto label_162;
| }
0x0008ff72 add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x0008ff76 ldr.w r0, [fp, 0x68] | r0 = *(arg_68h);
0x0008ff7a ldr r5, [sp, 0x54] | r5 = var_54h;
0x0008ff7c adds r2, r4, 1 | r2 = r4 + 1;
0x0008ff7e lsls r3, r3, 2 | r3 <<= 2;
0x0008ff80 str.w r2, [fp, 0x6c] | __asm ("str.w r2, [arg_6ch]");
0x0008ff84 movs r1, 0 | r1 = 0;
0x0008ff86 adds r2, r0, r3 | r2 = r0 + r3;
0x0008ff88 mov.w ip, 0x33 |
0x0008ff8c strd r5, r1, [r2, 4] | __asm ("strd r5, r1, [r2, 4]");
0x0008ff90 strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x0008ff94 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_37:
0x0008ff98 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0008ff9a movs r1, 0x7f | r1 = 0x7f;
0x0008ff9c ldr r2, [sp, 0xb4] | r2 = var_b4h;
0x0008ff9e mov r0, fp | r0 = fp;
0x0008ffa0 str r3, [sp] | *(sp) = r3;
0x0008ffa2 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008ffa4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0008ffa8 ldr.w r3, [fp] | r3 = *(fp);
0x0008ffac cmp r4, 0 |
0x0008ffae ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x0008ffb2 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0008ffb6 it lt |
| if (r4 >= 0) {
0x0008ffb8 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0008ffbc cmp r3, 0 |
| if (r3 != 0) {
0x0008ffbe bne.w 0x903f0 | goto label_163;
| }
0x0008ffc2 ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x0008ffc6 movs r1, 0x14 | r1 = 0x14;
0x0008ffc8 mla r3, r1, r4, r3 | __asm ("mla r3, r1, r4, r3");
| label_29:
0x0008ffcc str r2, [r3, 8] | *((r3 + 8)) = r2;
| label_35:
0x0008ffce movs r3, 0 | r3 = 0;
0x0008ffd0 ldr r2, [sp, 0x54] | r2 = var_54h;
0x0008ffd2 movs r1, 0xc | r1 = 0xc;
0x0008ffd4 mov r0, fp | r0 = fp;
0x0008ffd6 str r3, [sp] | *(sp) = r3;
0x0008ffd8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_38:
0x0008ffdc movs r3, 0 | r3 = 0;
0x0008ffde str r3, [sp, 0x40] | var_40h = r3;
| label_36:
0x0008ffe0 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0008ffe2 cmp r3, 0 |
| if (r3 > 0) {
0x0008ffe4 ble 0x8fff8 |
0x0008ffe6 mov r2, r3 | r2 = r3;
0x0008ffe8 movs r3, 0 | r3 = 0;
0x0008ffea str r3, [sp] | *(sp) = r3;
0x0008ffec movs r1, 0x9f | r1 = 0x9f;
0x0008ffee ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0008fff0 ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x0008fff2 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0008fff4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x0008fff8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0008fffa ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x0008fffc tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x00090000 bne.w 0x9051a | goto label_164;
| }
| label_33:
0x00090004 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00090006 ldrb.w r3, [r2, 0x2b] | r3 = *((r2 + 0x2b));
0x00090008 adds r0, 0x2b | r0 += 0x2b;
0x0009000a cmp r3, 1 |
| if (r3 != 1) {
0x0009000c bne.w 0x9049a | goto label_165;
| }
0x00090010 ldr r4, [r2, 0x34] | r4 = *((r2 + 0x34));
| if (r4 != 0) {
0x00090012 cbnz r4, 0x9001a | goto label_166;
| }
0x00090014 b 0x90022 | goto label_167;
| do {
0x00090016 ldr r4, [r4, 0x18] | r4 = *((r4 + 0x18));
| if (r4 == 0) {
0x00090018 cbz r4, 0x90022 | goto label_167;
| }
| label_166:
0x0009001a ldr r3, [r4] | r3 = *(r4);
0x0009001c ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009001e cmp r2, r3 |
0x00090020 bne 0x90016 |
| } while (r2 != r3);
| label_167:
0x00090022 ldr r5, [sp, 0x30] | r5 = var_30h;
0x00090024 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090026 mov r1, r5 | r1 = r5;
0x00090028 bl 0x23ec0 | fcn_00023ec0 (r0, r1);
0x0009002c ldr r2, [sp, 0x78] | r2 = var_78h;
0x0009002e movs r1, 7 | r1 = 7;
0x00090030 ldrsh.w r3, [r5, 0x22] | r3 = *((r5 + 0x22));
0x00090034 mov r0, fp | r0 = fp;
0x00090036 str r4, [sp, 4] | var_4h = r4;
0x00090038 str r2, [sp] | *(sp) = r2;
0x0009003a mvn r2, 0xa | r2 = ~0xa;
0x0009003e adds r3, 2 | r3 += 2;
0x00090040 str r2, [sp, 8] | var_8h = r2;
0x00090042 movs r2, 1 | r2 = 1;
0x00090044 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x00090048 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0009004a ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x0009004e cmp r2, 0xb |
0x00090050 ite ne |
| if (r2 == 0xb) {
0x00090052 movne r1, r2 | r1 = r2;
| }
| if (r2 != 0xb) {
0x00090054 moveq r1, 2 | r1 = 2;
| }
0x00090056 cmp r3, 0 |
0x00090058 itttt gt |
| if (r3 <= 0) {
0x0009005a ldrgt r2, [fp, 0x68] | r2 = *(arg_68h);
| }
| if (r3 <= 0) {
0x0009005e addgt r3, r3, r3, lsl 2 | r3 += (r3 << 2);
| }
| if (r3 > 0) {
0x00090062 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
| }
| if (r3 > 0) {
0x00090066 strh r1, [r2, -0x12] | *((r2 - 0x12)) = r1;
| }
0x0009006a ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009006c ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x0009006e cmp r3, 0 |
0x00090070 it eq |
| if (r3 != 0) {
0x00090072 moveq r3, r2 | r3 = r2;
| }
0x00090074 movs r2, 1 | r2 = 1;
0x00090076 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
| label_32:
0x00090078 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0009007a cmp r3, 0 |
| if (r3 != 0) {
0x0009007c bne.w 0x903de | goto label_168;
| }
| label_28:
0x00090080 ldr r1, [sp, 0x84] | r1 = var_84h;
| if (r1 != 0) {
0x00090082 cbz r1, 0x900aa |
0x00090084 ldr r3, [sp, 0x64] | r3 = var_64h;
0x00090086 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00090088 str.w sl, [sp, 0x10] | __asm ("str.w sl, [var_10h]");
0x0009008c str r3, [sp, 0xc] | var_ch = r3;
0x0009008e ldr r3, [sp, 0x54] | r3 = var_54h;
0x00090090 ldrsh.w r2, [r0, 0x22] | r2 = *((r0 + 0x22));
0x00090094 str r0, [sp, 4] | var_4h = r0;
0x00090096 subs r3, 1 | r3--;
0x00090098 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009009a subs r3, r3, r2 | r3 -= r2;
0x0009009c movs r2, 0x7f | r2 = 0x7f;
0x0009009e str r3, [sp, 8] | var_8h = r3;
0x000900a0 movs r3, 2 | r3 = 2;
0x000900a2 str r3, [sp] | *(sp) = r3;
0x000900a4 movs r3, 0 | r3 = 0;
0x000900a6 bl 0x8da60 | fcn_0008da60 (r0, r1, r2, r3, r4, r5, r6);
| }
0x000900aa ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
0x000900ae ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x000900b2 cmn r2, r3 |
| if (r2 < r3) {
0x000900b4 bmi.w 0x9041a | goto label_169;
| }
0x000900b8 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000900ba ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x000900bc ldr.w r1, [fp, 0x6c] | r1 = *(arg_6ch);
0x000900c0 lsls r3, r3, 2 | r3 <<= 2;
0x000900c2 rsbs r3, r3, 0 | r3 -= ;
0x000900c4 str r1, [r2, r3] | *((r2 + r3)) = r1;
| label_30:
0x000900c6 cmp r7, 0 |
| if (r7 != 0) {
0x000900c8 bne.w 0x90386 | goto label_170;
| }
0x000900cc ldr r3, [sp, 0x3c] | r3 = var_3ch;
| if (r3 != 0) {
0x000900ce cbz r3, 0x90100 |
0x000900d0 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000900d2 mov r0, fp | r0 = fp;
0x000900d4 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x000900d8 ldr.w r3, [fp] | r3 = *(fp);
0x000900dc cmp r6, 0 |
0x000900de ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x000900e2 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000900e6 it lt |
| if (r6 >= 0) {
0x000900e8 addlt r6, r2, -1 | r6 = r2 + -1;
| }
0x000900ec cmp r3, 0 |
| if (r3 != 0) {
0x000900ee bne.w 0x903ca | goto label_171;
| }
0x000900f2 ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x000900f6 add.w r1, r6, r6, lsl 2 | r1 = r6 + (r6 << 2);
0x000900fa add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| label_27:
0x000900fe str r2, [r3, 8] | *((r3 + 8)) = r2;
| }
| label_26:
0x00090100 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00090102 ldrb r3, [r2, 0x12] | r3 = *((r2 + 0x12));
| if (r3 == 0) {
0x00090104 cbnz r3, 0x9010e |
0x00090106 ldr r3, [r2, 0x78] | r3 = *((r2 + 0x78));
0x00090108 cmp r3, 0 |
| if (r3 == 0) {
0x0009010a beq.w 0x90b14 | goto label_172;
| }
| }
| label_58:
0x0009010e ldr r3, [sp, 0x70] | r3 = var_70h;
| if (r3 != 0) {
0x00090110 cbz r3, 0x9011e |
0x00090112 ldr r2, [pc, 0x7c] |
0x00090114 mov r1, r3 | r1 = r3;
0x00090116 mov r0, fp | r0 = fp;
0x00090118 add r2, pc | r2 = 0x1202ae;
0x0009011a bl 0x2ebd8 | fcn_0002ebd8 (r0, r1, r2);
| }
| label_85:
0x0009011e ldr r3, [sp, 0x74] | r3 = var_74h;
0x00090120 str r3, [sp, 0x30] | var_30h = r3;
0x00090122 b.w 0x8f720 | goto label_18;
| label_149:
0x00090126 cmp.w r8, 0 |
| if (r8 != 0) {
0x0009012a bne.w 0x8feb8 | goto label_19;
| }
0x0009012e ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00090130 cmp r3, 0 |
| if (r3 == 0) {
0x00090132 beq.w 0x90760 | goto label_173;
| }
0x00090136 sub.w r3, sl, r6 | r3 = sl - r6;
0x0009013a b 0x8fee0 | goto label_20;
| label_154:
0x0009013c movs r1, 0x5e | r1 = 0x5e;
0x0009013e ldr r2, [sp, 0x60] | r2 = var_60h;
0x00090140 mov r0, fp | r0 = fp;
0x00090142 str r4, [sp] | *(sp) = r4;
0x00090144 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090148 ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009014c b 0x8ff08 | goto label_21;
| label_117:
0x0009014e ldr r4, [sp, 0x2c] | r4 = var_2ch;
0x00090150 mov r3, sb | r3 = sb;
0x00090152 ldr r2, [sp, 0x44] | r2 = var_44h;
0x00090154 ldr r1, [pc, 0x3c] |
0x00090156 mov r0, r4 | r0 = r4;
0x00090158 adds r2, 8 | r2 += 8;
0x0009015a add r1, pc | r1 = 0x1202f2;
0x0009015c bl 0x21598 | fcn_00021598 (r0, r1);
0x00090160 movs r3, 1 | r3 = 1;
0x00090162 strb r3, [r4, 0x11] | *((r4 + 0x11)) = r3;
0x00090164 b.w 0x8f71c | goto label_0;
| label_114:
0x00090198 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009019a ldr.w r3, [r2, 0x108] | r3 = *((r2 + 0x108));
0x0009019e ldr.w sb, [r2] | sb = *(r2);
0x000901a2 cmp r3, 0 |
| if (r3 != 0) {
0x000901a4 bne.w 0x8f822 | goto label_22;
| }
0x000901a8 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000901aa ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000901ac cmp r3, 0 |
| if (r3 != 0) {
0x000901ae bne.w 0x8f822 | goto label_22;
| }
0x000901b2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000901b4 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x000901b8 cmp r3, 1 |
| if (r3 == 1) {
0x000901ba beq.w 0x8f822 | goto label_22;
| }
0x000901be ldr r3, [sp, 0x64] | r3 = var_64h;
0x000901c0 cmp r3, 0xb |
0x000901c2 itt ne |
| if (r3 == 0xb) {
0x000901c4 ldrne r3, [sp, 0x64] | r3 = var_64h;
| }
| if (r3 == 0xb) {
0x000901c6 strne r3, [sp, 0x60] | var_60h = r3;
| }
| if (r3 == 0xb) {
0x000901c8 beq.w 0x907cc | goto label_174;
| }
| label_49:
0x000901cc ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000901ce ldr r2, [r1, 0x20] | r2 = *((r1 + 0x20));
0x000901d0 ldr r3, [r2] | r3 = *(r2);
0x000901d2 cmp r3, 1 |
| if (r3 != 1) {
0x000901d4 bne.w 0x8f822 | goto label_22;
| }
0x000901d8 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x000901da cmp r3, 0 |
| if (r3 != 0) {
0x000901dc bne.w 0x8f822 | goto label_22;
| }
0x000901e0 ldr r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x000901e2 cmp r3, 0 |
| if (r3 != 0) {
0x000901e4 bne.w 0x8f822 | goto label_22;
| }
0x000901e8 ldr r3, [r1, 0x30] | r3 = *((r1 + 0x30));
0x000901ea cmp r3, 0 |
| if (r3 != 0) {
0x000901ec bne.w 0x8f822 | goto label_22;
| }
0x000901f0 ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x000901f2 cmp r3, 0 |
| if (r3 != 0) {
0x000901f4 bne.w 0x8f822 | goto label_22;
| }
0x000901f8 ldr r3, [r1, 0x3c] | r3 = *((r1 + 0x3c));
0x000901fa cmp r3, 0 |
| if (r3 != 0) {
0x000901fc bne.w 0x8f822 | goto label_22;
| }
0x00090200 ldr r3, [r1, 0x34] | r3 = *((r1 + 0x34));
0x00090202 cmp r3, 0 |
| if (r3 != 0) {
0x00090204 bne.w 0x8f822 | goto label_22;
| }
0x00090208 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0009020a lsls r4, r3, 0x1f | r4 = r3 << 0x1f;
| if (r4 < r3) {
0x0009020c bmi.w 0x8f822 | goto label_22;
| }
0x00090210 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x00090212 ldr r1, [r3] | r1 = *(r3);
0x00090214 cmp r1, 1 |
| if (r1 != 1) {
0x00090216 bne.w 0x8f822 | goto label_22;
| }
0x0009021a ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0009021c ldrb r3, [r3] | r3 = *(r3);
0x0009021e cmp r3, 0xb4 |
| if (r3 != 0xb4) {
0x00090220 bne.w 0x8f822 | goto label_22;
| }
0x00090224 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090226 adds r2, 8 | r2 += 8;
0x00090228 movs r1, 0 | r1 = 0;
0x0009022a bl 0x8a9bc | r0 = fcn_0008a9bc (r0, r1, r2);
0x0009022e mov sl, r0 | sl = r0;
0x00090230 cmp r0, 0 |
| if (r0 == 0) {
0x00090232 beq.w 0x8f822 | goto label_22;
| }
0x00090236 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00090238 ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0009023a ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009023c cmp r2, r3 |
| if (r2 == r3) {
0x0009023e beq.w 0x90834 | goto label_175;
| }
| label_52:
0x00090242 ldr r5, [sp, 0x30] | r5 = var_30h;
0x00090244 ldr.w r0, [sl, 0x1c] | r0 = *((sl + 0x1c));
0x00090248 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0009024a eor r2, r0, 0x80 | r2 = r0 ^ 0x80;
0x0009024e ubfx r2, r2, 7, 1 | r2 = (r2 >> 7) & ((1 << 1) - 1);
0x00090252 eor r1, r3, 0x80 | r1 = r3 ^ 0x80;
0x00090256 ubfx r1, r1, 7, 1 | r1 = (r1 >> 7) & ((1 << 1) - 1);
0x0009025a cmp r1, r2 |
| if (r1 != r2) {
0x0009025c bne.w 0x8f822 | goto label_22;
| }
0x00090260 ldrb.w r2, [sl, 0x2b] | r2 = *((sl + 0x2b));
0x00090264 cmp r2, 0 |
| if (r2 != 0) {
0x00090266 bne.w 0x8f822 | goto label_22;
| }
0x0009026a ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009026e ldrsh.w r4, [sl, 0x22] | r4 = *((sl + 0x22));
0x00090272 cmp r1, r4 |
| if (r1 != r4) {
0x00090274 bne.w 0x8f822 | goto label_22;
| }
0x00090278 ldrsh.w r6, [r5, 0x20] | r6 = *((r5 + 0x20));
0x0009027c ldrsh.w r4, [sl, 0x20] | r4 = *((sl + 0x20));
0x00090280 cmp r6, r4 |
| if (r6 != r4) {
0x00090282 bne.w 0x8f822 | goto label_22;
| }
0x00090286 ands r3, r3, 0x10000 | r3 &= 0x10000;
| if (r3 != r3) {
0x0009028a bne.w 0x9082a | goto label_176;
| }
0x0009028e mov ip, r3 |
| label_51:
0x00090290 mov r6, ip | r6 = ip;
0x00090292 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x00090296 b 0x902ea | goto label_177;
| label_23:
0x00090298 ldrb r2, [r4, 5] | r2 = *((r4 + 5));
0x0009029a ldrb r3, [r5, 5] | r3 = *((r5 + 5));
0x0009029c cmp r2, r3 |
| if (r2 != r3) {
0x0009029e bne.w 0x8f822 | goto label_22;
| }
0x000902a2 ldrh r1, [r4, 0xa] | r1 = *((r4 + 0xa));
0x000902a4 ldr.w r0, [r8, r7] | r0 = *((r8 + r7));
0x000902a8 bl 0x124cc | fcn_000124cc (r0, r1);
0x000902ac ldrh r1, [r5, 0xa] | r1 = *((r5 + 0xa));
0x000902ae mov r2, r0 | r2 = r0;
0x000902b0 ldr.w r0, [sb, r7] | r0 = *((sb + r7));
0x000902b4 bl 0x124cc | r0 = fcn_000124cc (r0, r1);
0x000902b8 mov r1, r0 | r1 = r0;
0x000902ba mov r0, r2 | r0 = r2;
0x000902bc blx 0x8540 | r0 = fcn_00008540 ();
0x000902c0 cmp r0, 0 |
| if (r0 != 0) {
0x000902c2 bne.w 0x8f822 | goto label_22;
| }
0x000902c6 ldrb r3, [r4, 4] | r3 = *((r4 + 4));
0x000902c8 lsls r3, r3, 0x1c | r3 <<= 0x1c;
| if (r3 == r3) {
0x000902ca beq 0x902d4 | goto label_178;
| }
0x000902cc ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x000902ce lsls r7, r3, 0x1c | r7 = r3 << 0x1c;
| if (r7 == r3) {
0x000902d0 beq.w 0x8f822 | goto label_22;
| }
| label_178:
0x000902d4 ldrh r3, [r4, 0xa] | r3 = *((r4 + 0xa));
0x000902d6 and r3, r3, 0x60 | r3 &= 0x60;
| if (r3 == 0) {
0x000902da cbnz r3, 0x902e2 |
0x000902dc cmp r6, 0 |
| if (r6 != 0) {
0x000902de bne.w 0x9077e | goto label_179;
| }
| }
| label_47:
0x000902e2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000902e4 adds r6, 1 | r6++;
0x000902e6 ldrsh.w r1, [r3, 0x22] | r1 = *((r3 + 0x22));
| label_177:
0x000902ea cmp r6, r1 |
| if (r6 >= r1) {
0x000902ec bge.w 0x907ea | goto label_180;
| }
0x000902f0 movs r3, 0xc | r3 = 0xc;
0x000902f2 ldr.w sb, [sl, 4] | sb = *((sl + 4));
0x000902f6 mul r7, r3, r6 | r7 = r3 * r6;
0x000902fa ldr r3, [sp, 0x30] | r3 = var_30h;
0x000902fc ldr.w r8, [r3, 4] | r8 = *((r3 + 4));
0x00090300 add.w r5, sb, r7 | r5 = sb + r7;
0x00090304 ldrh r3, [r5, 0xa] | r3 = *((r5 + 0xa));
0x00090306 add.w r4, r8, r7 | r4 = r8 + r7;
0x0009030a ldrh r2, [r4, 0xa] | r2 = *((r4 + 0xa));
0x0009030c eors r3, r2 | r3 ^= r2;
0x0009030e tst.w r3, 0x60 |
| if ((r3 & 0x60) != 0) {
0x00090312 bne.w 0x8f822 | goto label_22;
| }
0x00090316 tst.w r2, 0x60 |
| if ((r2 & 0x60) == 0) {
0x0009031a beq 0x90298 | goto label_23;
| }
0x0009031c ldrh r1, [r5, 8] | r1 = *((r5 + 8));
0x0009031e mov r0, sl | r0 = sl;
0x00090320 bl 0x124f4 | fcn_000124f4 (r0, r1);
0x00090324 ldrh r1, [r4, 8] | r1 = *((r4 + 8));
0x00090326 str r0, [sp, 0x50] | var_50h = r0;
0x00090328 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009032a bl 0x124f4 | fcn_000124f4 (r0, r1);
0x0009032e ldr r3, [sp, 0x50] | r3 = var_50h;
0x00090330 mov r2, r0 | r2 = r0;
0x00090332 cmp r3, 0 |
| if (r3 == 0) {
0x00090334 beq.w 0x90822 | goto label_181;
| }
0x00090338 clz r0, r0 | r0 &= r0;
0x0009033c lsrs r0, r0, 5 | r0 >>= 5;
0x0009033e cmp r2, 0 |
| if (r2 == 0) {
0x00090340 beq.w 0x90822 | goto label_181;
| }
0x00090344 mov r1, r3 | r1 = r3;
0x00090346 mov.w r3, -1 | r3 = -1;
0x0009034a bl 0x38abc | r0 = fcn_00038abc (r0, r1, r2, r3);
0x0009034e cmp r0, 0 |
| if (r0 == 0) {
0x00090350 beq 0x90298 | goto label_23;
| }
0x00090352 b.w 0x8f822 | goto label_22;
| label_126:
0x00090356 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00090358 ldr r3, [r2] | r3 = *(r2);
0x0009035a ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x0009035c lsls r5, r3, 0x1c | r5 = r3 << 0x1c;
0x0009035e itt pl |
| if (r5 < r3) {
0x00090360 movpl r3, 1 | r3 = 1;
| }
| if (r5 < r3) {
0x00090362 strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x00090364 b 0x8fbac | goto label_24;
| label_127:
0x00090366 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00090368 str r3, [sp, 0x3c] | var_3ch = r3;
0x0009036a b.w 0x8f720 | goto label_18;
| label_128:
0x0009036e ldr r1, [sp, 0x34] | r1 = var_34h;
0x00090370 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090372 mov r2, r1 | r2 = r1;
0x00090374 ldr.w r1, [pc, 0xb4c] |
0x00090378 add r1, pc | r1 = 0x121240;
0x0009037a bl 0x21598 | fcn_00021598 (r0, r1);
0x0009037e b.w 0x8f71c | goto label_0;
| label_125:
0x00090382 movs r7, 1 | r7 = 1;
0x00090384 b 0x8fc5c | goto label_25;
| label_170:
0x00090386 movs r2, 0 | r2 = 0;
0x00090388 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009038a str r2, [sp] | *(sp) = r2;
0x0009038c movs r1, 0x26 | r1 = 0x26;
0x0009038e ldr r2, [sp, 0x60] | r2 = var_60h;
0x00090390 mov r0, fp | r0 = fp;
0x00090392 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090396 ldr.w r3, [fp] | r3 = *(fp);
0x0009039a cmp r6, 0 |
0x0009039c ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x000903a0 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000903a4 it lt |
| if (r6 >= 0) {
0x000903a6 addlt r6, r2, -1 | r6 = r2 + -1;
| }
| if (r3 != 0) {
0x000903aa cbnz r3, 0x903d4 | goto label_182;
| }
0x000903ac ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x000903b0 add.w r1, r6, r6, lsl 2 | r1 = r6 + (r6 << 2);
0x000903b4 add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| do {
0x000903b8 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000903ba movs r3, 0 | r3 = 0;
0x000903bc ldr r2, [sp, 0x60] | r2 = var_60h;
0x000903be movs r1, 0x7a | r1 = 0x7a;
0x000903c0 mov r0, fp | r0 = fp;
0x000903c2 str r3, [sp] | *(sp) = r3;
0x000903c4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000903c8 b 0x90100 | goto label_26;
| label_171:
0x000903ca ldr.w r3, [pc, 0xafc] | r3 = *(0x00090ec8);
0x000903ce add r3, pc | r3 += pc;
0x000903d0 adds r3, 4 | r3 += 4;
0x000903d2 b 0x900fe | goto label_27;
| label_182:
0x000903d4 ldr.w r3, [pc, 0xaf4] |
0x000903d8 add r3, pc | r3 = 0x1212a8;
0x000903da adds r3, 4 | r3 += 4;
0x000903dc b 0x903b8 |
| } while (1);
| label_168:
0x000903de movs r3, 0 | r3 = 0;
0x000903e0 ldr r2, [sp, 0x70] | r2 = var_70h;
0x000903e2 str r3, [sp] | *(sp) = r3;
0x000903e4 movs r1, 0x56 | r1 = 0x56;
0x000903e6 movs r3, 1 | r3 = 1;
0x000903e8 mov r0, fp | r0 = fp;
0x000903ea bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000903ee b 0x90080 | goto label_28;
| label_163:
0x000903f0 ldr.w r3, [pc, 0xadc] |
0x000903f4 add r3, pc | r3 = 0x1212c8;
0x000903f6 adds r3, 4 | r3 += 4;
0x000903f8 b 0x8ffcc | goto label_29;
| label_155:
0x000903fa ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000903fc ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000903fe cmp r2, 0 |
| if (r2 == 0) {
0x00090400 beq.w 0x8ff08 | goto label_21;
| }
0x00090404 ldr r2, [sp, 0x58] | r2 = var_58h;
0x00090406 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090408 add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x0009040c mov r2, r4 | r2 = r4;
0x0009040e ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00090410 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x00090414 ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x00090418 b 0x8ff08 | goto label_21;
| label_169:
0x0009041a ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009041c mov r1, fp | r1 = fp;
0x0009041e rsbs r2, r3, 0 | r2 = r3 - ;
0x00090420 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00090424 b 0x900c6 | goto label_30;
| label_153:
0x00090426 ldrh r3, [r2, 8] | r3 = *((r2 + 8));
| if (r3 == 0) {
0x00090428 cbz r3, 0x90452 | goto label_183;
| }
0x0009042a ldrb.w r2, [r5, 0x2b] | r2 = *((r5 + 0x2b));
| if (r2 != 0) {
0x0009042e cbnz r2, 0x90452 | goto label_183;
| }
0x00090430 ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
| if (r1 == 0) {
0x00090432 cbz r1, 0x90442 | goto label_45;
| }
0x00090434 ldr r0, [r1] | r0 = *(r1);
0x00090436 cmp r0, r3 |
| if (r0 < r3) {
0x00090438 blt 0x90452 | goto label_183;
| }
| label_46:
0x0009043a add.w r1, r1, r3, lsl 4 | r1 += (r3 << 4);
0x0009043e ldr r1, [r1, -0x8] | r1 = *((r1 - 0x8));
| do {
| label_45:
0x00090442 mov r2, r4 | r2 = r4;
0x00090444 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090446 bl 0x69f84 | fcn_00069f84 (r0, r1, r2);
0x0009044a adds r4, 1 | r4++;
0x0009044c ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x00090450 b 0x8ff0a | goto label_31;
| label_183:
0x00090452 movs r1, 0 | r1 = 0;
0x00090454 b 0x90442 |
| } while (1);
| label_151:
0x00090456 ldrh r3, [r2, 8] | r3 = *((r2 + 8));
| if (r3 == 0) {
0x00090458 cbz r3, 0x90480 | goto label_184;
| }
0x0009045a ldrb.w r2, [r5, 0x2b] | r2 = *((r5 + 0x2b));
| if (r2 != 0) {
0x0009045e cbnz r2, 0x90480 | goto label_184;
| }
0x00090460 ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
| if (r1 == 0) {
0x00090462 cbz r1, 0x90472 | goto label_185;
| }
0x00090464 ldr r2, [r1] | r2 = *(r1);
0x00090466 cmp r2, r3 |
| if (r2 < r3) {
0x00090468 blt 0x90480 | goto label_184;
| }
0x0009046a add.w r1, r1, r3, lsl 4 | r1 += (r3 << 4);
0x0009046e ldr r1, [r1, -0x8] | r1 = *((r1 - 0x8));
| do {
| label_185:
0x00090472 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090474 mov r2, r4 | r2 = r4;
0x00090476 bl 0x69f84 | fcn_00069f84 (r0, r1, r2);
0x0009047a ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x0009047e b 0x8ff08 | goto label_21;
| label_184:
0x00090480 mov r1, r8 | r1 = r8;
0x00090482 b 0x90472 |
| } while (1);
| label_148:
0x00090484 movs r3, 0 | r3 = 0;
0x00090486 mov r2, r4 | r2 = r4;
0x00090488 movs r1, 0x4c | r1 = 0x4c;
0x0009048a mov r0, fp | r0 = fp;
0x0009048c str r3, [sp] | *(sp) = r3;
0x0009048e adds r4, 1 | r4++;
0x00090490 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090494 ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x00090498 b 0x8ff0a | goto label_31;
| label_165:
0x0009049a ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009049c movs r4, 0 | r4 = 0;
0x0009049e ldr r2, [sp, 0xb4] | r2 = var_b4h;
0x000904a0 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x000904a4 mvns r3, r3 | r3 = ~r3;
0x000904a6 ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x000904aa lsrs r3, r3, 0x1f | r3 >>= 0x1f;
0x000904ac ldr r5, [sp, 0xb8] | r5 = var_b8h;
0x000904ae mov r1, sb | r1 = sb;
0x000904b0 str r2, [sp, 0x50] | var_50h = r2;
0x000904b2 str r3, [sp, 0xc] | var_ch = r3;
0x000904b4 mov r0, r8 | r0 = r8;
0x000904b6 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000904b8 str.w sl, [sp, 0x14] | __asm ("str.w sl, [var_14h]");
0x000904bc str r5, [sp] | *(sp) = r5;
0x000904be str r3, [sp, 0x20] | var_20h = r3;
0x000904c0 ldr r3, [sp, 0x78] | r3 = var_78h;
0x000904c2 str r4, [sp, 0x1c] | var_1ch = r4;
0x000904c4 str r4, [sp, 8] | var_8h = r4;
0x000904c6 str r3, [sp, 4] | var_4h = r3;
0x000904c8 ldrb.w r3, [sp, 0x64] | r3 = var_64h;
0x000904cc str r4, [sp, 0xdc] | var_dch = r4;
0x000904ce str r3, [sp, 0x10] | var_10h = r3;
0x000904d0 add r3, sp, 0xdc | r3 += var_dch;
0x000904d2 str r3, [sp, 0x18] | var_18h = r3;
0x000904d4 mov r3, r2 | r3 = r2;
0x000904d6 ldr r2, [sp, 0x74] | r2 = var_74h;
0x000904d8 bl 0x8e150 | fcn_0008e150 (r0, r1, r2, r3, r4, r5, r6);
0x000904dc ldr r3, [sp, 0x78] | r3 = var_78h;
0x000904de mov r2, r4 | r2 = r4;
0x000904e0 mov r1, sb | r1 = sb;
0x000904e2 mov r0, r8 | r0 = r8;
0x000904e4 strd r4, r4, [sp] | __asm ("strd r4, r4, [sp]");
0x000904e8 bl 0x8b0dc | fcn_0008b0dc (r0, r1, r2, r3, r4, r5, r6);
0x000904ec ldr r3, [sp, 0xdc] | r3 = var_dch;
| if (r3 == 0) {
0x000904ee cbz r3, 0x90526 | goto label_186;
| }
0x000904f0 ldr.w r3, [fp, 0xdc] | r3 = *(arg_dch);
0x000904f4 clz r3, r3 | r3 &= r3;
0x000904f8 lsrs r3, r3, 5 | r3 >>= 5;
| do {
0x000904fa str r3, [sp, 0x10] | var_10h = r3;
0x000904fc ldr r3, [sp, 0x40] | r3 = var_40h;
0x000904fe ldr r1, [sp, 0x74] | r1 = var_74h;
0x00090500 ldr r2, [sp, 0x50] | r2 = var_50h;
0x00090502 str r3, [sp, 0xc] | var_ch = r3;
0x00090504 ldr r3, [sp, 0x78] | r3 = var_78h;
0x00090506 str r1, [sp, 4] | var_4h = r1;
0x00090508 movs r1, 0 | r1 = 0;
0x0009050a str r1, [sp, 8] | var_8h = r1;
0x0009050c str r3, [sp] | *(sp) = r3;
0x0009050e mov r3, r5 | r3 = r5;
0x00090510 ldrd r0, r1, [sp, 0x2c] | __asm ("ldrd r0, r1, [var_2ch]");
0x00090514 bl 0x2e09c | fcn_0002e09c (r0, r1, r2, r3, r4, r5, r6);
0x00090518 b 0x90078 | goto label_32;
| label_164:
0x0009051a ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x0009051c ldrd r0, r2, [sp, 0x2c] | __asm ("ldrd r0, r2, [var_2ch]");
0x00090520 bl 0x69c20 | fcn_00069c20 (r0, r1, r2, r3);
0x00090524 b 0x90004 | goto label_33;
| label_186:
0x00090526 movs r3, 1 | r3 = 1;
0x00090528 b 0x904fa |
| } while (1);
| label_160:
0x0009052a ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009052c ldr r2, [sp, 0x50] | r2 = var_50h;
0x0009052e add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00090532 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00090534 ldrb r3, [r1] | r3 = *(r1);
0x00090536 cmp r3, 0x79 |
| if (r3 == 0x79) {
0x00090538 beq 0x90560 | goto label_187;
| }
0x0009053a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009053c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0009053e cmp r3, 0 |
| if (r3 == 0) {
0x00090540 beq.w 0x8ff56 | goto label_34;
| }
| do {
0x00090544 ldr r2, [sp, 0x54] | r2 = var_54h;
0x00090546 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090548 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
0x0009054c b 0x8ff56 | goto label_34;
| label_159:
0x0009054e ldr r3, [sp, 0x54] | r3 = var_54h;
0x00090550 movs r1, 0x5e | r1 = 0x5e;
0x00090552 ldr r2, [sp, 0x60] | r2 = var_60h;
0x00090554 mov r0, fp | r0 = fp;
0x00090556 str r3, [sp] | *(sp) = r3;
0x00090558 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009055a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0009055e b 0x8ff56 | goto label_34;
| label_187:
0x00090560 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00090562 ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x00090566 cmp r3, 1 |
| if (r3 != 1) {
0x00090568 bne 0x90588 | goto label_188;
| }
0x0009056a ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009056c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0009056e cmp r3, 0 |
0x00090570 bne 0x90544 |
| } while (r3 != 0);
0x00090572 ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
| label_161:
0x00090576 movs r2, 0 | r2 = 0;
0x00090578 adds r3, 2 | r3 += 2;
0x0009057a str r2, [sp] | *(sp) = r2;
0x0009057c movs r1, 0x32 | r1 = 0x32;
0x0009057e ldr r2, [sp, 0x54] | r2 = var_54h;
0x00090580 mov r0, fp | r0 = fp;
0x00090582 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090586 b 0x8ffce | goto label_35;
| do {
| label_188:
0x00090588 ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0009058a movs r1, 0x7f | r1 = 0x7f;
0x0009058c ldr r2, [sp, 0xb4] | r2 = var_b4h;
0x0009058e mov r0, fp | r0 = fp;
0x00090590 str r3, [sp] | *(sp) = r3;
0x00090592 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00090594 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090598 movs r3, 1 | r3 = 1;
0x0009059a str r3, [sp, 0x40] | var_40h = r3;
0x0009059c b 0x8ffe0 | goto label_36;
| label_162:
0x0009059e movs r3, 0 | r3 = 0;
0x000905a0 ldr r2, [sp, 0x54] | r2 = var_54h;
0x000905a2 movs r1, 0x33 | r1 = 0x33;
0x000905a4 mov r0, fp | r0 = fp;
0x000905a6 str r3, [sp] | *(sp) = r3;
0x000905a8 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000905ac mov r4, r0 | r4 = r0;
0x000905ae b 0x8ff98 | goto label_37;
| label_158:
0x000905b0 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000905b2 ldr r3, [sp, 0x90] | r3 = var_90h;
0x000905b4 ldrb.w r2, [r2, 0x2b] | r2 = *((r2 + 0x2b));
0x000905b8 subs r3, 0 |
0x000905ba it ne |
| if (r3 == 0) {
0x000905bc movne r3, 1 | r3 = 1;
| }
0x000905be cmp r2, 1 |
0x000905c0 it eq |
| if (r2 != 1) {
0x000905c2 orreq r3, r3, 1 | r3 |= 1;
| }
0x000905c6 cmp r3, 0 |
0x000905c8 beq 0x90588 |
| } while (r3 == 0);
0x000905ca movs r2, 0 | r2 = 0;
0x000905cc ldr r3, [sp, 0x54] | r3 = var_54h;
0x000905ce movs r1, 0x4b | r1 = 0x4b;
0x000905d0 mov r0, fp | r0 = fp;
0x000905d2 str r2, [sp] | *(sp) = r2;
0x000905d4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000905d8 b 0x8ffdc | goto label_38;
| label_157:
0x000905da movs r2, 0 | r2 = 0;
0x000905dc ldr r3, [sp, 0x78] | r3 = var_78h;
0x000905de movs r1, 0x4b | r1 = 0x4b;
0x000905e0 mov r0, fp | r0 = fp;
0x000905e2 str r2, [sp] | *(sp) = r2;
0x000905e4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000905e8 b 0x8ff40 | goto label_39;
| label_156:
0x000905ea mov r0, r3 | r0 = r3;
0x000905ec adds r1, 1 | r1++;
0x000905ee bl 0xfd2c | fcn_0000fd2c (r0, r1);
0x000905f2 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000905f4 mov r5, r0 | r5 = r0;
0x000905f6 cmp r3, 0 |
| if (r3 < 0) {
0x000905f8 blt.w 0x9074c | goto label_189;
| }
0x000905fc cmp r7, 0 |
| if (r7 != 0) {
0x000905fe bne.w 0x9073c | goto label_190;
| }
0x00090602 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090604 ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 != 0) {
0x00090606 cbz r3, 0x90618 |
0x00090608 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0009060a ldr r3, [sp, 0x58] | r3 = var_58h;
0x0009060c add.w r3, r3, r2, lsl 4 | r3 += (r2 << 4);
0x00090610 mov r2, r5 | r2 = r5;
0x00090612 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00090614 bl 0x692d8 | fcn_000692d8 (r0, r1, r2);
| }
| label_43:
0x00090618 ldrd r4, r3, [fp, 0x6c] | __asm ("ldrd r4, r3, [arg_6ch]");
0x0009061c cmp r4, r3 |
| if (r4 >= r3) {
0x0009061e bge.w 0x9072a | goto label_191;
| }
0x00090622 add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x00090626 ldr.w r0, [fp, 0x68] | r0 = *(arg_68h);
0x0009062a adds r2, r4, 1 | r2 = r4 + 1;
0x0009062c lsls r3, r3, 2 | r3 <<= 2;
0x0009062e str.w r2, [fp, 0x6c] | __asm ("str.w r2, [arg_6ch]");
0x00090632 movs r1, 0 | r1 = 0;
0x00090634 adds r2, r0, r3 | r2 = r0 + r3;
0x00090636 mov.w ip, 0x33 |
0x0009063a strd r5, r1, [r2, 4] | __asm ("strd r5, r1, [r2, 4]");
0x0009063e strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x00090642 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_42:
0x00090646 movs r3, 0 | r3 = 0;
0x00090648 mov.w r2, -1 | r2 = -1;
0x0009064c str r3, [sp] | *(sp) = r3;
0x0009064e movs r1, 0x47 | r1 = 0x47;
0x00090650 mov r3, r5 | r3 = r5;
0x00090652 mov r0, fp | r0 = fp;
0x00090654 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090658 ldr.w r3, [fp] | r3 = *(fp);
0x0009065c cmp r4, 0 |
0x0009065e ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
0x00090662 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00090666 it lt |
| if (r4 >= 0) {
0x00090668 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x0009066c cmp r3, 0 |
| if (r3 != 0) {
0x0009066e bne 0x90704 | goto label_192;
| }
0x00090670 ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x00090674 movs r1, 0x14 | r1 = 0x14;
0x00090676 mla r3, r1, r4, r3 | __asm ("mla r3, r1, r4, r3");
| label_41:
0x0009067a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x0009067c movs r3, 0 | r3 = 0;
0x0009067e mov r2, r5 | r2 = r5;
0x00090680 movs r1, 0xc | r1 = 0xc;
0x00090682 mov r0, fp | r0 = fp;
0x00090684 str r3, [sp] | *(sp) = r3;
0x00090686 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_44:
0x0009068a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009068c adds r4, r5, 1 | r4 = r5 + 1;
0x0009068e ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x00090690 movs r1, 0x50 | r1 = 0x50;
0x00090692 mov r0, fp | r0 = fp;
0x00090694 ldrsh.w r3, [r3, 0x24] | r3 = *((r3 + 0x24));
0x00090698 subs r3, 1 | r3--;
0x0009069a str r3, [sp] | *(sp) = r3;
0x0009069c mov r3, r4 | r3 = r4;
0x0009069e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000906a2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000906a4 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000906a6 tst.w r3, 0x60 |
0x000906aa bne 0x906f8 |
| while (1) {
0x000906ac ldr r3, [sp, 0x94] | r3 = var_94h;
0x000906ae cmp r3, 2 |
| if (r3 != 2) {
0x000906b0 beq 0x906bc |
0x000906b2 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000906b4 mov r2, r4 | r2 = r4;
0x000906b6 mov r0, fp | r0 = fp;
0x000906b8 bl 0x36b24 | fcn_00036b24 (r0, r1, r2);
| }
0x000906bc ldr r4, [sp, 0x30] | r4 = var_30h;
0x000906be movs r2, 0x7f | r2 = 0x7f;
0x000906c0 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000906c2 str.w sl, [sp, 0x10] | __asm ("str.w sl, [var_10h]");
0x000906c6 ldr r1, [sp, 0x84] | r1 = var_84h;
0x000906c8 str r3, [sp, 0xc] | var_ch = r3;
0x000906ca ldrsh.w r3, [r4, 0x22] | r3 = *((r4 + 0x22));
0x000906ce ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000906d0 str r4, [sp, 4] | var_4h = r4;
0x000906d2 subs r3, r5, r3 | r3 = r5 - r3;
0x000906d4 subs r3, 1 | r3--;
0x000906d6 str r3, [sp, 8] | var_8h = r3;
0x000906d8 movs r3, 1 | r3 = 1;
0x000906da str r3, [sp] | *(sp) = r3;
0x000906dc movs r3, 0 | r3 = 0;
0x000906de bl 0x8da60 | fcn_0008da60 (r0, r1, r2, r3, r4, r5, r6);
0x000906e2 ldrsh.w r2, [r4, 0x22] | r2 = *((r4 + 0x22));
0x000906e6 adds r3, r2, 1 | r3 = r2 + 1;
| if (r2 == 0) {
0x000906e8 cbz r2, 0x9070e | goto label_193;
| }
0x000906ea ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000906ec ldr r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x000906ee cmp r3, r2 |
0x000906f0 it gt |
| if (r3 > r2) {
0x000906f2 strdgt r3, r5, [r1, 0x1c] | __asm ("strdgt r3, r5, [r1, 0x1c]");
| }
0x000906f6 b 0x8ff2c | goto label_40;
0x000906f8 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000906fa mov r1, r4 | r1 = r4;
0x000906fc ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000906fe bl 0x69c20 | fcn_00069c20 (r0, r1, r2, r3);
0x00090702 b 0x906ac |
| }
| label_192:
0x00090704 ldr.w r3, [pc, 0x7cc] |
0x00090708 add r3, pc | r3 = 0x1215e0;
0x0009070a adds r3, 4 | r3 += 4;
0x0009070c b 0x9067a | goto label_41;
| label_193:
0x0009070e cmp r5, 0 |
| if (r5 == 0) {
0x00090710 beq.w 0x8ff2c | goto label_40;
| }
0x00090714 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00090716 ldrb r3, [r1, 0x13] | r3 = *((r1 + 0x13));
0x00090718 cmp r3, 7 |
| if (r3 > 7) {
0x0009071a bhi.w 0x8ff2c | goto label_40;
| }
0x0009071e adds r2, r3, 1 | r2 = r3 + 1;
0x00090720 adds r3, 0x26 | r3 += 0x26;
0x00090722 strb r2, [r1, 0x13] | *((r1 + 0x13)) = r2;
0x00090724 str.w r5, [r1, r3, lsl 2] | __asm ("str.w r5, [r1, r3, lsl 2]");
0x00090728 b 0x8ff2c | goto label_40;
| label_191:
0x0009072a movs r3, 0 | r3 = 0;
0x0009072c mov r2, r5 | r2 = r5;
0x0009072e movs r1, 0x33 | r1 = 0x33;
0x00090730 mov r0, fp | r0 = fp;
0x00090732 str r3, [sp] | *(sp) = r3;
0x00090734 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00090738 mov r4, r0 | r4 = r0;
0x0009073a b 0x90646 | goto label_42;
| label_190:
0x0009073c str r0, [sp] | *(sp) = r0;
0x0009073e movs r1, 0x5e | r1 = 0x5e;
0x00090740 ldr r3, [sp, 0x50] | r3 = var_50h;
0x00090742 mov r0, fp | r0 = fp;
0x00090744 ldr r2, [sp, 0x60] | r2 = var_60h;
0x00090746 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0009074a b 0x90618 | goto label_43;
| label_189:
0x0009074c movs r3, 0 | r3 = 0;
0x0009074e mov.w r2, -1 | r2 = -1;
0x00090752 str r3, [sp] | *(sp) = r3;
0x00090754 movs r1, 0x47 | r1 = 0x47;
0x00090756 mov r3, r0 | r3 = r0;
0x00090758 mov r0, fp | r0 = fp;
0x0009075a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0009075e b 0x9068a | goto label_44;
| label_173:
0x00090760 ldrh r3, [r2, 8] | r3 = *((r2 + 8));
| if (r3 == 0) {
0x00090762 cbz r3, 0x9077a | goto label_194;
| }
0x00090764 ldrb.w r2, [r5, 0x2b] | r2 = *((r5 + 0x2b));
| if (r2 != 0) {
0x00090768 cbnz r2, 0x9077a | goto label_194;
| }
0x0009076a ldr r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x0009076c cmp r1, 0 |
| if (r1 == 0) {
0x0009076e beq.w 0x90442 | goto label_45;
| }
0x00090772 ldr r2, [r1] | r2 = *(r1);
0x00090774 cmp r2, r3 |
| if (r2 >= r3) {
0x00090776 bge.w 0x9043a | goto label_46;
| }
| label_194:
0x0009077a ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x0009077c b 0x90442 | goto label_45;
| label_179:
0x0009077e ldrh r1, [r4, 8] | r1 = *((r4 + 8));
0x00090780 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00090782 bl 0x124f4 | fcn_000124f4 (r0, r1);
0x00090786 ldrh r1, [r5, 8] | r1 = *((r5 + 8));
0x00090788 mov r4, r0 | r4 = r0;
0x0009078a mov r0, sl | r0 = sl;
0x0009078c bl 0x124f4 | fcn_000124f4 (r0, r1);
0x00090790 clz r2, r4 | r2 &= r4;
0x00090794 clz r3, r0 | r3 &= r0;
0x00090798 lsrs r2, r2, 5 | r2 >>= 5;
0x0009079a lsrs r3, r3, 5 | r3 >>= 5;
0x0009079c cmp r2, r3 |
| if (r2 != r3) {
0x0009079e bne.w 0x8f822 | goto label_22;
| }
0x000907a2 cmp r4, 0 |
| if (r4 == 0) {
0x000907a4 beq.w 0x902e2 | goto label_47;
| }
0x000907a8 ldr r1, [r0, 8] | r1 = *((r0 + 8));
0x000907aa ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000907ac blx 0x8ad0 | r0 = fcn_00008ad0 ();
0x000907b0 cmp r0, 0 |
| if (r0 == 0) {
0x000907b2 beq.w 0x902e2 | goto label_47;
| }
0x000907b6 b.w 0x8f822 | goto label_22;
| label_109:
0x000907ba mov.w r3, 0x8000 | r3 = 0x8000;
0x000907be sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x000907c2 movt r3, 0xffff | r3 = (r3 & 0xFFFF) | 0xffff0000;
0x000907c6 str r3, [sp, 0x40] | var_40h = r3;
0x000907c8 b.w 0x8f706 | goto label_48;
| label_174:
0x000907cc ldr r2, [sp, 0x30] | r2 = var_30h;
0x000907ce ldrsh.w r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x000907d2 cmp r3, 0 |
| if (r3 >= 0) {
0x000907d4 blt 0x907e4 |
0x000907d6 ldrb.w r3, [r2, 0x2a] | r3 = *((r2 + 0x2a));
0x000907da cmp r3, 0xb |
0x000907dc it eq |
| if (r3 != 0xb) {
0x000907de moveq r3, 2 | r3 = 2;
| }
0x000907e0 str r3, [sp, 0x60] | var_60h = r3;
0x000907e2 b 0x901cc | goto label_49;
| }
0x000907e4 movs r3, 2 | r3 = 2;
0x000907e6 str r3, [sp, 0x60] | var_60h = r3;
0x000907e8 b 0x901cc | goto label_49;
| label_180:
0x000907ea ldrd r3, sb, [sp, 0x30] | __asm ("ldrd r3, sb, [var_30h]");
0x000907ee movs r7, 0 | r7 = 0;
0x000907f0 ldr.w r4, [pc, 0x6e4] |
0x000907f4 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x000907f6 mov r8, r3 | r8 = r3;
0x000907f8 add r4, pc | r4 = 0x1216d4;
| if (r6 == 0) {
| label_79:
0x000907fa cbz r6, 0x90844 | goto label_195;
| }
0x000907fc ldrb.w r3, [r6, 0x36] | r3 = *((r6 + 0x36));
0x00090800 ldr.w r5, [sl, 8] | r5 = *((sl + 8));
0x00090804 cmp r3, 0 |
0x00090806 it ne |
| if (r3 == 0) {
0x00090808 movne r7, 1 | r7 = 1;
| }
| label_50:
0x0009080a cmp r5, 0 |
| if (r5 == 0) {
0x0009080c beq.w 0x8f822 | goto label_22;
| }
0x00090810 mov r1, r5 | r1 = r5;
0x00090812 mov r0, r6 | r0 = r6;
0x00090814 bl 0x3bbf8 | r0 = fcn_0003bbf8 (r0, r1);
0x00090818 cmp r0, 0 |
| if (r0 != 0) {
0x0009081a bne.w 0x90e10 | goto label_196;
| }
0x0009081e ldr r5, [r5, 0x14] | r5 = *((r5 + 0x14));
0x00090820 b 0x9080a | goto label_50;
| label_181:
0x00090822 cmp r3, r2 |
| if (r3 != r2) {
0x00090824 bne.w 0x8f822 | goto label_22;
| }
0x00090828 b 0x90298 | goto label_23;
| label_176:
0x0009082a lsls r0, r0, 0xf | r0 <<= 0xf;
| if (r0 >= r0) {
0x0009082c bpl.w 0x8f822 | goto label_22;
| }
0x00090830 mov ip, r2 |
0x00090832 b 0x90290 | goto label_51;
| label_175:
0x00090834 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00090836 ldr r2, [r0, 0x3c] | r2 = *((r0 + 0x3c));
0x00090838 ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x0009083a cmp r2, r3 |
| if (r2 != r3) {
0x0009083c bne.w 0x90242 | goto label_52;
| }
0x00090840 b.w 0x8f822 | goto label_22;
| label_195:
0x00090844 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00090846 str r7, [sp, 0x5c] | var_5ch = r7;
0x00090848 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
| if (r1 == 0) {
0x0009084a cbz r1, 0x9085e | goto label_197;
| }
0x0009084c ldr.w r0, [sl, 0x10] | r0 = *((sl + 0x10));
0x00090850 mov.w r2, -1 | r2 = -1;
0x00090854 bl 0x39af4 | r0 = fcn_00039af4 (r0, r1, r2);
0x00090858 cmp r0, 0 |
| if (r0 != 0) {
0x0009085a bne.w 0x8f822 | goto label_22;
| }
| label_197:
0x0009085e ldrd r2, r3, [sb, 0x20] | __asm ("ldrd r2, r3, [sb, 0x20]");
0x00090862 lsls r5, r2, 0x11 | r5 = r2 << 0x11;
| if (r5 >= r2) {
0x00090864 bpl 0x90870 | goto label_198;
| }
0x00090866 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00090868 ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x0009086a cmp r2, 0 |
| if (r2 != 0) {
0x0009086c bne.w 0x8f822 | goto label_22;
| }
| label_198:
0x00090870 lsls r4, r3, 0x1f | r4 = r3 << 0x1f;
| if (r4 < r3) {
0x00090872 bmi.w 0x8f822 | goto label_22;
| }
0x00090876 ldr.w r1, [sl, 0x3c] | r1 = *((sl + 0x3c));
0x0009087a cmp r1, 0 |
| if (r1 == 0) {
0x0009087c beq.w 0x90e04 | goto label_199;
| }
0x00090880 mov r0, sb | r0 = sb;
0x00090882 bl 0xfdfc | fcn_0000fdfc (r0, r1);
0x00090886 str r0, [sp, 0x50] | var_50h = r0;
| label_78:
0x00090888 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009088a ldr r4, [r0, 8] | r4 = *((r0 + 8));
| if (r4 == 0) {
0x0009088c cbnz r4, 0x90894 |
0x0009088e bl 0x2dd00 | r0 = fcn_0002dd00 (r0, r1);
0x00090892 mov r4, r0 | r4 = r0;
| }
0x00090894 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x00090896 ldr r1, [sp, 0x50] | r1 = var_50h;
0x00090898 ldr r0, [r6, 0x74] | r0 = *((r6 + 0x74));
0x0009089a cmp r0, 0 |
0x0009089c it eq |
| if (r0 != 0) {
0x0009089e moveq r0, r6 | r0 = r6;
| }
0x000908a0 bl 0x572e0 | fcn_000572e0 (r0, r1);
0x000908a4 ldr r5, [r6, 0x28] | r5 = *((r6 + 0x28));
0x000908a6 mov r0, r6 | r0 = r6;
0x000908a8 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000908aa ldr r1, [sp, 0x40] | r1 = var_40h;
0x000908ac adds r3, r5, 2 | r3 = r5 + 2;
0x000908ae str r5, [sp, 0x54] | var_54h = r5;
0x000908b0 str r3, [r6, 0x28] | *((r6 + 0x28)) = r3;
0x000908b2 add.w r8, r5, 1 | r8 = r5 + 1;
0x000908b6 bl 0x23cc8 | fcn_00023cc8 (r0, r1, r2);
0x000908ba ldrb r3, [r6, 0x13] | r3 = *((r6 + 0x13));
0x000908bc str r0, [sp, 0x68] | var_68h = r0;
0x000908be cmp r3, 0 |
| if (r3 == 0) {
0x000908c0 beq.w 0x90c0e | goto label_200;
| }
0x000908c4 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000908c6 subs r3, 1 | r3--;
0x000908c8 uxtb r3, r3 | r3 = (int8_t) r3;
0x000908ca strb r3, [r2, 0x13] | *((r2 + 0x13)) = r3;
0x000908cc adds r3, 0x26 | r3 += 0x26;
0x000908ce ldr.w r3, [r2, r3, lsl 2] | offset_3 = r3 << 2;
| r3 = *((r2 + offset_3));
0x000908d2 str r3, [sp, 0x34] | var_34h = r3;
| label_69:
0x000908d4 movs r2, 0 | r2 = 0;
0x000908d6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000908d8 movs r1, 0x4b | r1 = 0x4b;
0x000908da mov r0, r4 | r0 = r4;
0x000908dc str r2, [sp] | *(sp) = r2;
0x000908de bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000908e2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000908e4 ldrb r3, [r3, 0x13] | r3 = *((r3 + 0x13));
0x000908e6 cmp r3, 0 |
| if (r3 == 0) {
0x000908e8 beq.w 0x90dfa | goto label_201;
| }
0x000908ec ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000908ee subs r3, 1 | r3--;
0x000908f0 uxtb r3, r3 | r3 = (int8_t) r3;
0x000908f2 strb r3, [r2, 0x13] | *((r2 + 0x13)) = r3;
0x000908f4 adds r3, 0x26 | r3 += 0x26;
0x000908f6 ldr.w r7, [r2, r3, lsl 2] | offset_4 = r3 << 2;
| r7 = *((r2 + offset_4));
| label_77:
0x000908fa ldr r5, [sp, 0x30] | r5 = var_30h;
0x000908fc movs r3, 0x71 | r3 = 0x71;
0x000908fe ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090900 mov r1, r8 | r1 = r8;
0x00090902 str r3, [sp] | *(sp) = r3;
0x00090904 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00090906 mov r3, r5 | r3 = r5;
0x00090908 bl 0x2fc88 | fcn_0002fc88 (r0, r1, r2, r3, r4);
0x0009090c ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00090910 lsls r0, r3, 0x1d | r0 = r3 << 0x1d;
| if (r0 < r3) {
0x00090912 bmi.w 0x90df4 | goto label_202;
| }
0x00090916 ldrsh.w r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x0009091a cmp r3, 0 |
| if (r3 < 0) {
0x0009091c blt.w 0x90c46 | goto label_203;
| }
| label_72:
0x00090920 ldr r3, [sp, 0x5c] | r3 = var_5ch;
| if (r3 == 0) {
0x00090922 cbnz r3, 0x9092c |
0x00090924 ldr r3, [sp, 0x60] | r3 = var_60h;
0x00090926 subs r3, 1 | r3--;
0x00090928 cmp r3, 1 |
| if (r3 < 1) {
0x0009092a bls 0x90956 | goto label_76;
| }
| }
| label_71:
0x0009092c movs r3, 0 | r3 = 0;
0x0009092e mov r2, r8 | r2 = r8;
0x00090930 movs r1, 0x23 | r1 = 0x23;
0x00090932 str r3, [sp] | *(sp) = r3;
0x00090934 mov r0, r4 | r0 = r4;
0x00090936 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0009093a movs r3, 0 | r3 = 0;
0x0009093c mov r6, r0 | r6 = r0;
0x0009093e mov r2, r3 | r2 = r3;
0x00090940 movs r1, 8 | r1 = 8;
0x00090942 mov r0, r4 | r0 = r4;
0x00090944 str r3, [sp] | *(sp) = r3;
0x00090946 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0009094a ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x0009094c mov r1, r6 | r1 = r6;
0x0009094e str r0, [sp, 0x5c] | var_5ch = r0;
0x00090950 mov r0, r4 | r0 = r4;
0x00090952 bl 0xa514 | fcn_0000a514 (r0, r1, r2);
| label_76:
0x00090956 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x0009095a ands r6, r3, 0x80 | r6 = r3 & 0x80;
| if (r6 != r3) {
0x0009095e bne.w 0x90c1a | goto label_204;
| }
0x00090962 ldrd r2, r5, [sp, 0x50] | __asm ("ldrd r2, r5, [var_54h]");
0x00090966 movs r3, 0x70 | r3 = 0x70;
0x00090968 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009096a str r3, [sp] | *(sp) = r3;
0x0009096c mov r3, sl | r3 = sl;
0x0009096e mov r1, r5 | r1 = r5;
0x00090970 bl 0x2fc88 | fcn_0002fc88 (r0, r1, r2, r3, r4);
0x00090974 mov r3, r6 | r3 = r6;
0x00090976 mov r2, r5 | r2 = r5;
0x00090978 movs r1, 0x23 | r1 = 0x23;
0x0009097a mov r0, r4 | r0 = r4;
0x0009097c str r6, [sp] | *(sp) = r6;
0x0009097e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090982 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00090984 str r0, [sp, 0x70] | var_70h = r0;
0x00090986 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x0009098a cmp r3, 0 |
| if (r3 >= 0) {
0x0009098c bge.w 0x90a96 | goto label_205;
| }
0x00090990 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00090992 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00090994 cmp r3, 0 |
| if (r3 == 0) {
0x00090996 beq 0x90a7a | goto label_206;
| }
| label_54:
0x00090998 movs r3, 0 | r3 = 0;
0x0009099a ldr r2, [sp, 0x54] | r2 = var_54h;
0x0009099c str r3, [sp] | *(sp) = r3;
0x0009099e movs r1, 0x87 | r1 = 0x87;
0x000909a0 mov r3, r7 | r3 = r7;
0x000909a2 mov r0, r4 | r0 = r4;
0x000909a4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000909a8 str r0, [sp, 0x6c] | var_6ch = r0;
| label_55:
0x000909aa ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x000909ae lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
| if (r1 < r3) {
0x000909b0 bmi 0x90a68 | goto label_56;
| }
0x000909b2 movs r6, 0xa9 | r6 = 0xa9;
| label_53:
0x000909b4 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000909b6 mov r2, r8 | r2 = r8;
0x000909b8 movs r1, 0x81 | r1 = 0x81;
0x000909ba mov r0, r4 | r0 = r4;
0x000909bc str r7, [sp] | *(sp) = r7;
0x000909be bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000909c2 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000909c4 mov r2, r8 | r2 = r8;
0x000909c6 movs r1, 0x80 | r1 = 0x80;
0x000909c8 mov r0, r4 | r0 = r4;
0x000909ca str r7, [sp] | *(sp) = r7;
0x000909cc bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000909d0 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x000909d4 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
| if (r2 >= r3) {
0x000909d6 bmi 0x909e8 |
0x000909d8 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000909da mvn r3, 4 | r3 = ~4;
0x000909de mov.w r1, -1 | r1 = -1;
0x000909e2 mov r0, r4 | r0 = r4;
0x000909e4 bl 0x22cb8 | fcn_00022cb8 (r0, r1, r2);
| }
0x000909e8 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x000909ea mov r0, r4 | r0 = r4;
0x000909ec ldr r5, [sp, 0x54] | r5 = var_54h;
0x000909ee cmp r2, 0 |
0x000909f0 ittt gt |
| if (r2 <= 0) {
0x000909f2 ldrgt r3, [r4, 0x68] | r3 = *((r4 + 0x68));
| }
| if (r2 <= 0) {
0x000909f4 movgt r1, 0x14 | r1 = 0x14;
| }
| if (r2 > 0) {
0x000909f6 mlagt r3, r1, r2, r3 | __asm ("mlagt r3, r1, r2, r3");
| }
0x000909fa mov r2, r5 | r2 = r5;
0x000909fc mov.w r1, 0x26 | r1 = 0x26;
0x00090a00 it gt |
| if (r2 > 0) {
0x00090a02 strhgt r6, [r3, -0x12] | __asm ("strhgt r6, [r3, -0x12]");
| }
0x00090a06 movs r6, 0 | r6 = 0;
0x00090a08 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00090a0a str r6, [sp] | *(sp) = r6;
0x00090a0c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090a10 mov r3, r6 | r3 = r6;
0x00090a12 mov r2, r5 | r2 = r5;
0x00090a14 movs r1, 0x7a | r1 = 0x7a;
0x00090a16 mov r0, r4 | r0 = r4;
0x00090a18 str r6, [sp] | *(sp) = r6;
0x00090a1a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090a1e mov r3, r6 | r3 = r6;
0x00090a20 mov r2, r8 | r2 = r8;
0x00090a22 movs r1, 0x7a | r1 = 0x7a;
0x00090a24 mov r0, r4 | r0 = r4;
0x00090a26 str r6, [sp] | *(sp) = r6;
0x00090a28 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_70:
0x00090a2c ldr.w r3, [pc, 0x4ac] | r3 = *(0x00090edc);
0x00090a30 strd fp, r7, [sp, 0x68] | __asm ("strd fp, r7, [var_68h]");
0x00090a34 ldr r7, [sp, 0x54] | r7 = var_54h;
0x00090a36 add r3, pc | r3 += pc;
0x00090a38 add.w r3, r3, 0x2dc | r3 += 0x2dc;
0x00090a3c str r3, [sp, 0x60] | var_60h = r3;
0x00090a3e ldr r3, [sp, 0x30] | r3 = var_30h;
0x00090a40 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00090a42 mov fp, r3 |
| label_73:
0x00090a44 cmp.w fp, 0 |
| if (fp == 0) {
0x00090a48 beq.w 0x90c50 | goto label_207;
| }
0x00090a4c ldr.w r6, [sl, 8] | r6 = *((sl + 8));
| do {
0x00090a50 cmp r6, 0 |
| if (r6 == 0) {
0x00090a52 beq.w 0x911ca | goto label_208;
| }
0x00090a56 mov r1, r6 | r1 = r6;
0x00090a58 mov r0, fp | r0 = fp;
0x00090a5a bl 0x3bbf8 | r0 = fcn_0003bbf8 (r0, r1);
0x00090a5e cmp r0, 0 |
| if (r0 != 0) {
0x00090a60 bne.w 0x90cae | goto label_209;
| }
0x00090a64 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x00090a66 b 0x90a50 |
| } while (1);
| label_56:
0x00090a68 movs r3, 0 | r3 = 0;
0x00090a6a mov r2, r8 | r2 = r8;
0x00090a6c movs r1, 0x89 | r1 = 0x89;
0x00090a6e mov r0, r4 | r0 = r4;
0x00090a70 str r3, [sp] | *(sp) = r3;
0x00090a72 movs r6, 0x98 | r6 = 0x98;
0x00090a74 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090a78 b 0x909b4 | goto label_53;
| label_206:
0x00090a7a ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00090a7e ands r3, r3, 8 | r3 &= 8;
| if (r3 != r3) {
0x00090a82 bne 0x90998 | goto label_54;
| }
0x00090a84 str r3, [sp] | *(sp) = r3;
0x00090a86 mov r2, r8 | r2 = r8;
0x00090a88 mov r3, r7 | r3 = r7;
0x00090a8a movs r1, 0x7f | r1 = 0x7f;
0x00090a8c mov r0, r4 | r0 = r4;
0x00090a8e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090a92 str r0, [sp, 0x6c] | var_6ch = r0;
0x00090a94 b 0x909aa | goto label_55;
| label_205:
0x00090a96 mov r3, r7 | r3 = r7;
0x00090a98 mov r2, r5 | r2 = r5;
0x00090a9a movs r1, 0x87 | r1 = 0x87;
0x00090a9c mov r0, r4 | r0 = r4;
0x00090a9e str r6, [sp] | *(sp) = r6;
0x00090aa0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090aa4 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00090aa8 str r0, [sp, 0x6c] | var_6ch = r0;
0x00090aaa ands r3, r3, 4 | r3 &= 4;
| if (r3 == r3) {
0x00090aae beq.w 0x91176 | goto label_210;
| }
0x00090ab2 ldr r3, [sp, 0x68] | r3 = var_68h;
0x00090ab4 cmp r3, 0 |
| if (r3 <= 0) {
0x00090ab6 ble 0x90a68 | goto label_56;
| }
| label_102:
0x00090ab8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00090aba ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00090abc ldrd r3, r2, [r0, 0x6c] | __asm ("ldrd r3, r2, [r0, 0x6c]");
0x00090ac0 cmp r3, r2 |
| if (r3 >= r2) {
0x00090ac2 bge.w 0x91166 | goto label_211;
| }
0x00090ac6 movs r2, 0x14 | r2 = 0x14;
0x00090ac8 ldr r1, [r0, 0x68] | r1 = *((r0 + 0x68));
0x00090aca mul r2, r3, r2 | r2 = r3 * r2;
0x00090ace ldr r5, [sp, 0x68] | r5 = var_68h;
0x00090ad0 adds r3, 1 | r3++;
0x00090ad2 movs r6, 0x9f | r6 = 0x9f;
0x00090ad4 str r3, [r0, 0x6c] | *((r0 + 0x6c)) = r3;
0x00090ad6 movs r0, 0 | r0 = 0;
0x00090ad8 adds r3, r1, r2 | r3 = r1 + r2;
0x00090ada strd r5, r7, [r3, 4] | __asm ("strd r5, r7, [r3, 4]");
0x00090ade strd r0, r0, [r3, 0xc] | __asm ("strd r0, r0, [r3, 0xc]");
0x00090ae2 str r6, [r1, r2] | *((r1 + r2)) = r6;
0x00090ae4 b 0x909aa | goto label_55;
| label_150:
0x00090ae6 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00090ae8 cmp r2, 0 |
| if (r2 == 0) {
0x00090aea beq.w 0x8ff08 | goto label_21;
| }
0x00090aee movs r1, 0x4c | r1 = 0x4c;
0x00090af0 mov r2, r4 | r2 = r4;
0x00090af2 mov r0, fp | r0 = fp;
0x00090af4 str r3, [sp] | *(sp) = r3;
0x00090af6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090afa ldrsh.w r1, [r5, 0x22] | r1 = *((r5 + 0x22));
0x00090afe b.w 0x8ff08 | goto label_21;
| label_146:
0x00090b02 mov r3, r7 | r3 = r7;
0x00090b04 movs r1, 0xb | r1 = 0xb;
0x00090b06 mov r0, fp | r0 = fp;
0x00090b08 str r7, [sp] | *(sp) = r7;
0x00090b0a bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00090b0e mov r6, r0 | r6 = r0;
0x00090b10 b.w 0x8fe40 | goto label_57;
| label_172:
0x00090b14 ldr r3, [r2, 0x70] | r3 = *((r2 + 0x70));
0x00090b16 mov r0, r2 | r0 = r2;
0x00090b18 cmp r3, 0 |
| if (r3 == 0) {
0x00090b1a beq.w 0x9010e | goto label_58;
| }
0x00090b1e bl 0x2fd68 | fcn_0002fd68 (r0, r1);
0x00090b22 b.w 0x9010e | goto label_58;
| label_120:
0x00090b26 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090b28 ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 == 0) {
0x00090b2a cbnz r3, 0x90b32 |
0x00090b2c bl 0x2dd00 | r0 = fcn_0002dd00 (r0, r1);
0x00090b30 mov r3, r0 | r3 = r0;
| }
0x00090b32 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00090b34 ldr.w ip, [r3, 0x6c] | ip = *((r3 + 0x6c));
0x00090b38 ldrb.w r2, [r2, 0x2b] | r2 = *((r2 + 0x2b));
0x00090b3c cmp r2, 1 |
0x00090b3e it ne |
| if (r2 == 1) {
0x00090b40 movne r2, 0 | r2 = 0;
| }
| if (r2 == 1) {
0x00090b42 beq 0x90bb4 | goto label_212;
| }
| label_63:
0x00090b44 cmp.w ip, 1 |
| if (ip <= 1) {
0x00090b48 ble 0x90bae | goto label_213;
| }
0x00090b4a ldr r1, [r3] | r1 = *(r3);
0x00090b4c movs r0, 0x14 | r0 = 0x14;
0x00090b4e ldr r4, [sp, 0x30] | r4 = var_30h;
0x00090b50 movs r7, 1 | r7 = 1;
0x00090b52 mov lr, r3 | lr = r3;
0x00090b54 ldrb.w r5, [r1, 0x57] | r5 = *((r1 + 0x57));
0x00090b58 ldr r1, [pc, 0x384] |
0x00090b5a add r1, pc | r1 = 0x121a3e;
0x00090b5c add.w sl, r1, 4 | sl = r1 + 4;
0x00090b60 b 0x90b76 | goto label_214;
| label_60:
0x00090b62 cmp r6, 0xad |
| if (r6 != 0xad) {
0x00090b64 bne 0x90b6e | goto label_61;
| }
0x00090b66 ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x00090b68 cmp r1, r2 |
| if (r1 == r2) {
0x00090b6a beq.w 0x8f9dc | goto label_59;
| }
| label_61:
0x00090b6e adds r7, 1 | r7++;
0x00090b70 adds r0, 0x14 | r0 += 0x14;
0x00090b72 cmp ip, r7 |
| if (ip == r7) {
0x00090b74 beq 0x90bae | goto label_213;
| }
| label_214:
0x00090b76 mov r1, sl | r1 = sl;
| if (r5 == 0) {
0x00090b78 cbnz r5, 0x90b80 |
0x00090b7a ldr.w r1, [lr, 0x68] | r1 = *((lr + 0x68));
0x00090b7e add r1, r0 | r1 += r0;
| }
0x00090b80 ldrb r6, [r1] | r6 = *(r1);
0x00090b82 cmp r6, 0x70 |
| if (r6 != 0x70) {
0x00090b84 bne 0x90b62 | goto label_60;
| }
0x00090b86 ldr r6, [r1, 0xc] | r6 = *((r1 + 0xc));
0x00090b88 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00090b8a cmp r3, r6 |
| if (r3 != r6) {
0x00090b8c bne 0x90b6e | goto label_61;
| }
0x00090b8e ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x00090b90 ldr r6, [r4, 0x14] | r6 = *((r4 + 0x14));
0x00090b92 cmp r1, r6 |
| if (r1 == r6) {
0x00090b94 beq.w 0x8f9dc | goto label_59;
| }
0x00090b98 ldr r6, [r4, 8] | r6 = *((r4 + 8));
| if (r6 != 0) {
0x00090b9a cbnz r6, 0x90ba4 | goto label_215;
| }
0x00090b9c b 0x90b6e | goto label_61;
| label_62:
0x00090b9e ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x00090ba0 cmp r6, 0 |
| if (r6 == 0) {
0x00090ba2 beq 0x90b6e | goto label_61;
| }
| label_215:
0x00090ba4 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x00090ba6 cmp r1, r3 |
| if (r1 != r3) {
0x00090ba8 bne 0x90b9e | goto label_62;
| }
0x00090baa b.w 0x8f9dc | goto label_59;
| label_213:
0x00090bae movs r7, 0 | r7 = 0;
0x00090bb0 b.w 0x8fc5c | goto label_25;
| label_212:
0x00090bb4 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00090bb6 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00090bb8 ldr r2, [r2, 0x34] | r2 = *((r2 + 0x34));
0x00090bba ldr r0, [r1] | r0 = *(r1);
| if (r2 != 0) {
0x00090bbc cbnz r2, 0x90bc6 | goto label_216;
| }
0x00090bbe b 0x90b44 | goto label_63;
| label_64:
0x00090bc0 ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x00090bc2 cmp r2, 0 |
| if (r2 == 0) {
0x00090bc4 beq 0x90b44 | goto label_63;
| }
| label_216:
0x00090bc6 ldr r1, [r2] | r1 = *(r2);
0x00090bc8 cmp r0, r1 |
| if (r0 != r1) {
0x00090bca bne 0x90bc0 | goto label_64;
| }
0x00090bcc b 0x90b44 | goto label_63;
| label_119:
0x00090bce ldr r2, [pc, 0x314] |
0x00090bd0 add r2, pc | r2 = 0x121aba;
0x00090bd2 adds r2, 4 | r2 += 4;
0x00090bd4 b.w 0x8f9ca | goto label_65;
| label_124:
0x00090bd8 ldr r2, [pc, 0x30c] |
0x00090bda add r2, pc | r2 = 0x121ac6;
0x00090bdc adds r2, 4 | r2 += 4;
0x00090bde b.w 0x8faae | goto label_66;
| label_123:
0x00090be2 mov r3, r6 | r3 = r6;
0x00090be4 movs r1, 0xb | r1 = 0xb;
0x00090be6 mov r0, fp | r0 = fp;
0x00090be8 str r6, [sp] | *(sp) = r6;
0x00090bea bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00090bee mov r4, r0 | r4 = r0;
0x00090bf0 b.w 0x8fa50 | goto label_67;
| label_122:
0x00090bf4 ldr r3, [r0, 0x2c] | r3 = *((r0 + 0x2c));
| do {
0x00090bf6 add.w sl, r3, 1 | sl = r3 + 1;
0x00090bfa ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00090bfc str.w sl, [r3, 0x2c] | __asm ("str.w sl, [r3, 0x2c]");
0x00090c00 b.w 0x8fa12 | goto label_68;
| label_121:
0x00090c04 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00090c06 ldr r3, [r3, 0x2c] | r3 = *((r3 + 0x2c));
0x00090c08 adds r7, r3, 1 | r7 = r3 + 1;
0x00090c0a mov r3, r7 | r3 = r7;
0x00090c0c b 0x90bf6 |
| } while (1);
| label_200:
0x00090c0e ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00090c10 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x00090c12 adds r3, 1 | r3++;
0x00090c14 str r3, [sp, 0x34] | var_34h = r3;
0x00090c16 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x00090c18 b 0x908d4 | goto label_69;
| label_204:
0x00090c1a ldr r2, [sp, 0x30] | r2 = var_30h;
0x00090c1c ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x00090c1e ldr r1, [sp, 0x40] | r1 = var_40h;
0x00090c20 ldr r3, [r2] | r3 = *(r2);
0x00090c22 mov r0, r5 | r0 = r5;
0x00090c24 str r3, [sp] | *(sp) = r3;
0x00090c26 movs r3, 1 | r3 = 1;
0x00090c28 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x00090c2a bl 0x2fc68 | fcn_0002fc68 (r0, r1, r2, r3);
0x00090c2e ldr.w r3, [sl] | r3 = *(sl);
0x00090c32 mov r0, r5 | r0 = r5;
0x00090c34 ldr r1, [sp, 0x50] | r1 = var_50h;
0x00090c36 str r3, [sp] | *(sp) = r3;
0x00090c38 movs r3, 0 | r3 = 0;
0x00090c3a ldr.w r2, [sl, 0x14] | r2 = *((sl + 0x14));
0x00090c3e str r3, [sp, 0x70] | var_70h = r3;
0x00090c40 bl 0x2fc68 | fcn_0002fc68 (r0, r1, r2, r3);
0x00090c44 b 0x90a2c | goto label_70;
| label_203:
0x00090c46 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00090c48 cmp r3, 0 |
| if (r3 != 0) {
0x00090c4a bne.w 0x9092c | goto label_71;
| }
0x00090c4e b 0x90920 | goto label_72;
| label_207:
0x00090c50 ldr r3, [sp, 0x70] | r3 = var_70h;
0x00090c52 ldrd fp, r7, [sp, 0x68] | __asm ("ldrd fp, r7, [var_68h]");
0x00090c56 cmp r3, 0 |
| if (r3 != 0) {
0x00090c58 bne.w 0x90dc6 | goto label_217;
| }
| if (r7 != 0) {
| label_74:
0x00090c5c cbz r7, 0x90c66 |
0x00090c5e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090c60 mov r1, r7 | r1 = r7;
0x00090c62 bl 0xfd18 | fcn_0000fd18 (r0, r1);
| }
0x00090c66 ldr r3, [sp, 0x34] | r3 = var_34h;
| if (r3 != 0) {
0x00090c68 cbz r3, 0x90c72 |
0x00090c6a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090c6c mov r1, r3 | r1 = r3;
0x00090c6e bl 0xfd18 | fcn_0000fd18 (r0, r1);
| }
0x00090c72 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00090c74 cmp r3, 0 |
| if (r3 != 0) {
0x00090c76 beq.w 0x90da2 |
0x00090c7a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090c7c ldr r3, [r0, 0x70] | r3 = *((r0 + 0x70));
| if (r3 != 0) {
0x00090c7e cbz r3, 0x90c84 |
0x00090c80 bl 0x2fd68 | fcn_0002fd68 (r0, r1);
| }
0x00090c84 movs r6, 0 | r6 = 0;
0x00090c86 movs r1, 0x46 | r1 = 0x46;
0x00090c88 mov r3, r6 | r3 = r6;
0x00090c8a mov r2, r6 | r2 = r6;
0x00090c8c mov r0, r4 | r0 = r4;
0x00090c8e str r6, [sp] | *(sp) = r6;
0x00090c90 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090c94 ldr r1, [sp, 0x5c] | r1 = var_5ch;
0x00090c96 mov r0, r4 | r0 = r4;
0x00090c98 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00090c9a bl 0xa514 | fcn_0000a514 (r0, r1, r2);
0x00090c9e mov r2, r8 | r2 = r8;
0x00090ca0 mov r3, r6 | r3 = r6;
0x00090ca2 movs r1, 0x7a | r1 = 0x7a;
0x00090ca4 str r6, [sp] | *(sp) = r6;
0x00090ca6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090caa b.w 0x8f822 | goto label_22;
| label_209:
0x00090cae ldr r3, [sp, 0x50] | r3 = var_50h;
0x00090cb0 mov r2, r7 | r2 = r7;
0x00090cb2 movs r1, 0x70 | r1 = 0x70;
0x00090cb4 mov r0, r4 | r0 = r4;
0x00090cb6 str r3, [sp] | *(sp) = r3;
0x00090cb8 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x00090cba bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090cbe ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x00090cc0 mov r1, r6 | r1 = r6;
0x00090cc2 mov r0, r5 | r0 = r5;
0x00090cc4 bl 0x2bf78 | fcn_0002bf78 (r0, r1);
0x00090cc8 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00090cca mov r2, r8 | r2 = r8;
0x00090ccc movs r1, 0x71 | r1 = 0x71;
0x00090cce mov r0, r4 | r0 = r4;
0x00090cd0 str r3, [sp] | *(sp) = r3;
0x00090cd2 ldr.w r3, [fp, 0x2c] | r3 = *(arg_2ch);
0x00090cd6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090cda mov r1, fp | r1 = fp;
0x00090cdc mov r0, r5 | r0 = r5;
0x00090cde bl 0x2bf78 | fcn_0002bf78 (r0, r1);
0x00090ce2 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00090ce4 cmp r2, 0 |
| if (r2 > 0) {
0x00090ce6 ble 0x90cf6 |
0x00090ce8 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x00090cea movs r1, 0x14 | r1 = 0x14;
0x00090cec mla r3, r1, r2, r3 | __asm ("mla r3, r1, r2, r3");
0x00090cf0 movs r2, 1 | r2 = 1;
0x00090cf2 strh r2, [r3, -0x12] | *((r3 - 0x12)) = r2;
| }
0x00090cf6 movs r3, 0 | r3 = 0;
0x00090cf8 mov r2, r7 | r2 = r7;
0x00090cfa str r3, [sp] | *(sp) = r3;
0x00090cfc movs r1, 0x23 | r1 = 0x23;
0x00090cfe mov r0, r4 | r0 = r4;
0x00090d00 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090d04 ldr.w r2, [sb, 0x18] | r2 = *((sb + 0x18));
0x00090d08 mov r5, r0 | r5 = r0;
0x00090d0a movs r3, 0 | r3 = 0;
0x00090d0c tst.w r2, 4 |
| if ((r2 & 4) != 0) {
0x00090d10 bne 0x90dd6 | goto label_218;
| }
0x00090d12 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x00090d16 lsls r3, r3, 0x18 | r3 <<= 0x18;
| if (r3 >= r3) {
0x00090d18 bpl 0x90dd2 | goto label_80;
| }
0x00090d1a ldrb.w r6, [fp, 0x37] | r6 = *(arg_37h);
0x00090d1e and r6, r6, 3 | r6 &= 3;
0x00090d22 sub.w ip, r6, 2 |
0x00090d26 rsbs.w r6, ip, 0 | r6 = ip - ;
0x00090d2a adc.w r6, r6, ip | __asm ("adc.w r6, r6, ip");
| label_75:
0x00090d2e movs r3, 1 | r3 = 1;
0x00090d30 mov r2, r7 | r2 = r7;
0x00090d32 str r3, [sp] | *(sp) = r3;
0x00090d34 movs r1, 0x86 | r1 = 0x86;
0x00090d36 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00090d38 mov r0, r4 | r0 = r4;
0x00090d3a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_81:
0x00090d3e movs r3, 0 | r3 = 0;
0x00090d40 movs r1, 0x8a | r1 = 0x8a;
0x00090d42 mov r2, r8 | r2 = r8;
0x00090d44 str r3, [sp] | *(sp) = r3;
0x00090d46 mov r0, r4 | r0 = r4;
0x00090d48 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00090d4a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090d4e ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00090d50 orr r6, r6, 8 | r6 |= 8;
0x00090d54 mov r0, r4 | r0 = r4;
0x00090d56 cmp r2, 0 |
0x00090d58 ittt gt |
| if (r2 <= 0) {
0x00090d5a ldrgt r3, [r4, 0x68] | r3 = *((r4 + 0x68));
| }
| if (r2 <= 0) {
0x00090d5c movgt r1, 0x14 | r1 = 0x14;
| }
| if (r2 > 0) {
0x00090d5e mlagt r3, r1, r2, r3 | __asm ("mlagt r3, r1, r2, r3");
| }
0x00090d62 mov r2, r7 | r2 = r7;
0x00090d64 mov.w r1, 0x26 | r1 = 0x26;
0x00090d68 it gt |
| if (r2 > 0) {
0x00090d6a strhgt r6, [r3, -0x12] | __asm ("strhgt r6, [r3, -0x12]");
| }
0x00090d6e movs r6, 0 | r6 = 0;
0x00090d70 adds r3, r5, 1 | r3 = r5 + 1;
0x00090d72 str r6, [sp] | *(sp) = r6;
0x00090d74 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090d78 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00090d7a mov r1, r5 | r1 = r5;
0x00090d7c mov r0, r4 | r0 = r4;
0x00090d7e bl 0xa514 | fcn_0000a514 (r0, r1, r2);
0x00090d82 mov r3, r6 | r3 = r6;
0x00090d84 mov r2, r7 | r2 = r7;
0x00090d86 movs r1, 0x7a | r1 = 0x7a;
0x00090d88 str r6, [sp] | *(sp) = r6;
0x00090d8a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090d8e mov r3, r6 | r3 = r6;
0x00090d90 mov r2, r8 | r2 = r8;
0x00090d92 movs r1, 0x7a | r1 = 0x7a;
0x00090d94 mov r0, r4 | r0 = r4;
0x00090d96 str r6, [sp] | *(sp) = r6;
0x00090d98 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090d9c ldr.w fp, [fp, 0x14] | fp = *(arg_14h);
0x00090da0 b 0x90a44 | goto label_73;
| }
0x00090da2 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00090da4 ldrb r3, [r2, 0x12] | r3 = *((r2 + 0x12));
0x00090da6 cmp r3, 0 |
| if (r3 != 0) {
0x00090da8 bne.w 0x8f71c | goto label_0;
| }
0x00090dac ldr r3, [r2, 0x78] | r3 = *((r2 + 0x78));
0x00090dae cmp r3, 0 |
| if (r3 != 0) {
0x00090db0 bne.w 0x8f71c | goto label_0;
| }
0x00090db4 ldr r3, [r2, 0x70] | r3 = *((r2 + 0x70));
0x00090db6 mov r0, r2 | r0 = r2;
0x00090db8 cmp r3, 0 |
| if (r3 == 0) {
0x00090dba beq.w 0x8f71c | goto label_0;
| }
0x00090dbe bl 0x2fd68 | fcn_0002fd68 (r0, r1);
0x00090dc2 b.w 0x8f71c | goto label_0;
| label_217:
0x00090dc6 ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00090dc8 mov r1, r3 | r1 = r3;
0x00090dca mov r0, r4 | r0 = r4;
0x00090dcc bl 0xa514 | fcn_0000a514 (r0, r1, r2);
0x00090dd0 b 0x90c5c | goto label_74;
| label_80:
0x00090dd2 movs r6, 0 | r6 = 0;
0x00090dd4 b 0x90d2e | goto label_75;
| label_218:
0x00090dd6 mov r5, r4 | r5 = r4;
0x00090dd8 mov r4, r3 | r4 = r3;
0x00090dda str r0, [sp, 0x54] | var_54h = r0;
| do {
0x00090ddc ldrh r2, [r6, 0x34] | r2 = *((r6 + 0x34));
0x00090dde cmp r4, r2 |
| if (r4 >= r2) {
0x00090de0 bge 0x90e4a | goto label_219;
| }
0x00090de2 ldr r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x00090de4 ldr r0, [sp, 0x60] | r0 = var_60h;
0x00090de6 ldr.w r1, [r2, r4, lsl 2] | offset_5 = r4 << 2;
| r1 = *((r2 + offset_5));
0x00090dea blx 0x8540 | r0 = fcn_00008540 ();
| if (r0 != 0) {
0x00090dee cbnz r0, 0x90e1c | goto label_220;
| }
0x00090df0 adds r4, 1 | r4++;
0x00090df2 b 0x90ddc |
| } while (1);
| label_202:
0x00090df4 movs r3, 0 | r3 = 0;
0x00090df6 str r3, [sp, 0x5c] | var_5ch = r3;
0x00090df8 b 0x90956 | goto label_76;
| label_201:
0x00090dfa ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00090dfc ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x00090dfe adds r7, r3, 1 | r7 = r3 + 1;
0x00090e00 str r7, [r2, 0x2c] | *((r2 + 0x2c)) = r7;
0x00090e02 b 0x908fa | goto label_77;
| label_199:
0x00090e04 mov.w r3, 0x8000 |
0x00090e08 movt r3, 0xffff | r3 = 0x-8000;
0x00090e0c str r3, [sp, 0x50] | var_50h = r3;
0x00090e0e b 0x90888 | goto label_78;
| label_196:
0x00090e10 ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x00090e12 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x00090e14 cmp r2, r3 |
| if (r2 == r3) {
0x00090e16 beq 0x90e52 | goto label_221;
| }
| label_83:
0x00090e18 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x00090e1a b 0x907fa | goto label_79;
| label_220:
0x00090e1c mov r3, r4 | r3 = r4;
0x00090e1e ldrh r2, [r6, 0x34] | r2 = *((r6 + 0x34));
0x00090e20 mov r4, r5 | r4 = r5;
0x00090e22 ldr r5, [sp, 0x54] | r5 = var_54h;
| label_82:
0x00090e24 cmp r3, r2 |
| if (r3 != r2) {
0x00090e26 bne 0x90dd2 | goto label_80;
| }
0x00090e28 movs r6, 0 | r6 = 0;
0x00090e2a mov r2, r8 | r2 = r8;
0x00090e2c mov r3, r6 | r3 = r6;
0x00090e2e movs r1, 0x89 | r1 = 0x89;
0x00090e30 str r6, [sp] | *(sp) = r6;
0x00090e32 mov r0, r4 | r0 = r4;
0x00090e34 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090e38 str r6, [sp] | *(sp) = r6;
0x00090e3a mov r3, r7 | r3 = r7;
0x00090e3c mov r2, r8 | r2 = r8;
0x00090e3e movs r1, 0x81 | r1 = 0x81;
0x00090e40 mov r0, r4 | r0 = r4;
0x00090e42 movs r6, 0x90 | r6 = 0x90;
0x00090e44 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090e48 b 0x90d3e | goto label_81;
| label_219:
0x00090e4a mov r3, r4 | r3 = r4;
0x00090e4c mov r4, r5 | r4 = r5;
0x00090e4e ldr r5, [sp, 0x54] | r5 = var_54h;
0x00090e50 b 0x90e24 | goto label_82;
| label_221:
0x00090e52 ldr.w r2, [sl, 0x3c] | r2 = *((sl + 0x3c));
0x00090e56 ldr.w r3, [r8, 0x3c] | r3 = *((r8 + 0x3c));
0x00090e5a cmp r2, r3 |
| if (r2 != r3) {
0x00090e5c bne 0x90e18 | goto label_83;
| }
0x00090e5e ldr.w r3, [r4, 0x100] | r3 = *((r4 + 0x100));
0x00090e62 cmp r3, 0 |
| if (r3 == 0) {
0x00090e64 beq.w 0x8f822 | goto label_22;
| }
0x00090e68 movw r0, 0x19b | r0 = 0x19b;
0x00090e6c blx r3 | r0 = uint32_t (*r3)(uint32_t) (r0);
0x00090e6e cmp r0, 0 |
| if (r0 != 0) {
0x00090e70 bne 0x90e18 | goto label_83;
| }
0x00090e72 b.w 0x8f822 | goto label_22;
| label_136:
0x00090e76 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00090e78 ldrb.w r2, [r2, 0x95] | r2 = *((r2 + 0x95));
0x00090e7c cmp r2, 0 |
| if (r2 != 0) {
0x00090e7e bne.w 0x8fe00 | goto label_84;
| }
0x00090e82 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00090e84 mov r0, fp | r0 = fp;
0x00090e86 str r2, [sp] | *(sp) = r2;
0x00090e88 ldr r3, [r1, 0x2c] | r3 = *((r1 + 0x2c));
0x00090e8a adds r3, 1 | r3++;
0x00090e8c str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x00090e8e movs r1, 0x47 | r1 = 0x47;
0x00090e90 str r3, [sp, 0x70] | var_70h = r3;
0x00090e92 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00090e96 b.w 0x8fcfc | goto label_16;
| label_140:
0x00090e9a ldr r3, [sp, 0x30] | r3 = var_30h;
0x00090e9c ldr r1, [pc, 0x4c] |
0x00090e9e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00090ea0 ldr r2, [r3] | r2 = *(r3);
0x00090ea2 add r1, pc | r1 = 0x121d92;
0x00090ea4 bl 0x21598 | fcn_00021598 (r0, r1);
| label_96:
0x00090ea8 ldr r1, [sp, 0x44] | r1 = var_44h;
0x00090eaa ldr r0, [sp, 0x38] | r0 = var_38h;
0x00090eac bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x00090eb0 ldr r3, [sp, 0x58] | r3 = var_58h;
| if (r3 != 0) {
0x00090eb2 cbz r3, 0x90ebc |
0x00090eb4 ldr r1, [sp, 0x58] | r1 = var_58h;
0x00090eb6 ldr r0, [sp, 0x38] | r0 = var_38h;
0x00090eb8 bl 0x1a608 | fcn_0001a608 (r0, r1);
| }
0x00090ebc ldr r3, [sp, 0x74] | r3 = var_74h;
0x00090ebe str r3, [sp, 0x30] | var_30h = r3;
0x00090ec0 b.w 0x8f73a | goto label_3;
| label_142:
0x00090ef0 ldrd r2, r5, [sp, 0xb4] | __asm ("ldrd r2, r5, [var_b4h]");
0x00090ef4 ldr r4, [sp, 0x4c] | r4 = var_4ch;
0x00090ef6 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00090ef8 ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x00090efc mov sb, r2 | sb = r2;
0x00090efe mov r6, r4 | r6 = r4;
0x00090f00 mov sl, r5 | sl = r5;
0x00090f02 str r2, [r3, 0x30] | *((r3 + 0x30)) = r2;
0x00090f04 add r3, sp, 0xfc | r3 += var_fch;
0x00090f06 str r3, [sp, 0x40] | var_40h = r3;
0x00090f08 strd fp, r7, [sp, 0xa8] | __asm ("strd fp, r7, [var_a8h]");
| label_89:
0x00090f0c ldr r3, [sp, 0x44] | r3 = var_44h;
0x00090f0e ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x00090f10 str.w sl, [r6, 0x2c] | __asm ("str.w sl, [r6, 0x2c]");
0x00090f14 str r3, [r6, 0x20] | *((r6 + 0x20)) = r3;
0x00090f16 strd r2, sb, [r6, 0x24] | __asm ("strd r2, sb, [r6, 0x24]");
0x00090f1a cmp r1, 0 |
| if (r1 == 0) {
0x00090f1c beq.w 0x91056 | goto label_222;
| }
0x00090f20 movs r5, 0 | r5 = 0;
0x00090f22 strd r8, r3, [sp, 0xdc] | __asm ("strd r8, r3, [var_dch]");
0x00090f26 mov fp, r5 |
0x00090f28 strd r5, r5, [sp, 0xe4] | __asm ("strd r5, r5, [var_e4h]");
0x00090f2c strd r5, r5, [sp, 0xec] | __asm ("strd r5, r5, [var_ech]");
0x00090f30 strd r5, r5, [sp, 0xf4] | __asm ("strd r5, r5, [var_f4h]");
0x00090f34 mov r5, r6 | r5 = r6;
0x00090f36 strd sb, r6, [sp, 0x98] | __asm ("strd sb, r6, [var_98h]");
0x00090f3a str.w sl, [sp, 0xa0] | __asm ("str.w sl, [var_a0h]");
| label_87:
0x00090f3e ldr r1, [r5] | r1 = *(r5);
0x00090f40 cmp r1, 0 |
| if (r1 == 0) {
0x00090f42 beq.w 0x9104e | goto label_223;
| }
0x00090f46 add r4, sp, 0xdc | r4 += var_dch;
0x00090f48 mov r0, r4 | r0 = r4;
0x00090f4a bl 0x31284 | r0 = fcn_00031284 (r0, r1);
0x00090f4e cmp r0, 0 |
| if (r0 != 0) {
0x00090f50 bne.w 0x9011e | goto label_85;
| }
0x00090f54 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00090f56 mov r0, r4 | r0 = r4;
0x00090f58 bl 0x3119c | r0 = fcn_0003119c (r0, r1);
0x00090f5c cmp r0, 0 |
| if (r0 != 0) {
0x00090f5e bne.w 0x9011e | goto label_85;
| }
0x00090f62 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00090f64 ldr r2, [r5] | r2 = *(r5);
0x00090f66 ldr r4, [r3, 0x18] | r4 = *((r3 + 0x18));
0x00090f68 ldr r7, [r3, 0x30] | r7 = *((r3 + 0x30));
0x00090f6a str r2, [sp, 0x34] | var_34h = r2;
0x00090f6c ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00090f6e lsls r6, r3, 0x18 | r6 = r3 << 0x18;
| if (r6 >= r3) {
0x00090f70 bmi 0x90f88 |
0x00090f72 ldr r3, [r2] | r3 = *(r2);
0x00090f74 cmp r3, 1 |
| if (r3 != 1) {
0x00090f76 bne 0x90f88 | goto label_224;
| }
0x00090f78 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x00090f7a ldrb r2, [r3] | r2 = *(r3);
0x00090f7c cmp r2, 0xa7 |
| if (r2 != 0xa7) {
0x00090f7e bne 0x90f88 | goto label_224;
| }
0x00090f80 ldrsh.w r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x00090f84 adds r3, 1 | r3++;
| if (r3 == 1) {
0x00090f86 beq 0x91042 | goto label_95;
| }
| }
| label_224:
0x00090f88 ldr r0, [sp, 0x40] | r0 = var_40h;
0x00090f8a movs r2, 0x68 | r2 = 0x68;
0x00090f8c movs r1, 0 | r1 = 0;
0x00090f8e blx 0x839c | fcn_0000839c ();
0x00090f92 movs r3, 0xa7 | r3 = 0xa7;
0x00090f94 str r7, [sp, 0x14c] | var_14ch = r7;
0x00090f96 strb.w r3, [sp, 0x130] | var_130h = r3;
0x00090f9a movs r3, 0x71 | r3 = 0x71;
0x00090f9c ldr r6, [r4, 8] | r6 = *((r4 + 8));
0x00090f9e strb.w r3, [sp, 0xfc] | var_fch = r3;
0x00090fa2 add r3, sp, 0x130 | r3 += var_130h;
0x00090fa4 str r3, [sp, 0x68] | var_68h = r3;
0x00090fa6 str r3, [sp, 0x108] | var_108h = r3;
0x00090fa8 cmp r6, 0 |
| if (r6 == 0) {
0x00090faa beq 0x91090 | goto label_225;
| }
0x00090fac str r5, [sp, 0x6c] | var_6ch = r5;
0x00090fae str.w fp, [sp, 0x88] | __asm ("str.w fp, [var_88h]");
0x00090fb2 b 0x90fba |
| while (r3 == 0) {
| label_86:
0x00090fb4 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x00090fb6 cmp r6, 0 |
| if (r6 == 0) {
0x00090fb8 beq 0x9108a | goto label_226;
| }
0x00090fba ldrb.w r3, [r6, 0x36] | r3 = *((r6 + 0x36));
0x00090fbe cmp r3, 0 |
0x00090fc0 beq 0x90fb4 |
| }
0x00090fc2 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00090fc4 ldrh.w sl, [r6, 0x32] | sl = *((r6 + 0x32));
0x00090fc8 ldr r2, [r3] | r2 = *(r3);
0x00090fca cmp r2, sl |
| if (r2 != sl) {
0x00090fcc bne 0x90fb4 | goto label_86;
| }
0x00090fce ldr r2, [r6, 0x24] | r2 = *((r6 + 0x24));
| if (r2 == 0) {
0x00090fd0 cbz r2, 0x90fea | goto label_227;
| }
0x00090fd2 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00090fd4 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00090fd6 cmp r1, 0 |
| if (r1 == 0) {
0x00090fd8 beq 0x90fb4 | goto label_86;
| }
0x00090fda mov r3, r7 | r3 = r7;
0x00090fdc mov r0, r8 | r0 = r8;
0x00090fde bl 0x38abc | r0 = fcn_00038abc (r0, r1, r2, r3);
0x00090fe2 cmp r0, 0 |
| if (r0 != 0) {
0x00090fe4 bne 0x90fb4 | goto label_86;
| }
0x00090fe6 ldrh.w sl, [r6, 0x32] | sl = *((r6 + 0x32));
| label_227:
0x00090fea cmp.w sl, 0 |
| if (sl == 0) {
0x00090fee beq 0x9103a | goto label_92;
| }
0x00090ff0 mov r5, sl | r5 = sl;
0x00090ff2 mov.w fp, 0 |
0x00090ff6 mov sl, r7 | sl = r7;
| label_91:
0x00090ff8 ldr r2, [r6, 0x20] | r2 = *((r6 + 0x20));
0x00090ffa ldr.w r2, [r2, fp, lsl 2] | offset_6 = fp << 2;
| r2 = *((r2 + offset_6));
0x00090ffe str r2, [sp, 0x104] | var_104h = r2;
0x00091000 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x00091002 ldrsh.w r2, [r2, fp, lsl 1] | offset_7 = fp << 1;
| r2 = *((r2 + offset_7));
0x00091006 adds r4, r2, 2 | r4 = r2 + 2;
| if (r4 == r2) {
0x00091008 beq 0x91070 | goto label_228;
| }
0x0009100a ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009100c strh.w r2, [sp, 0x150] | var_150h = r2;
0x00091010 str r3, [sp, 0x108] | var_108h = r3;
| label_93:
0x00091012 ldr.w sb, [sp, 0x40] | sb = var_40h;
| label_94:
0x00091016 ldr r7, [sp, 0x34] | r7 = var_34h;
0x00091018 movs r4, 0 | r4 = 0;
| do {
0x0009101a ldr r1, [r7, 8] | r1 = *((r7 + 8));
| if (r1 != 0) {
0x0009101c cbz r1, 0x9102c |
0x0009101e mov r3, sl | r3 = sl;
0x00091020 mov r2, sb | r2 = sb;
0x00091022 mov r0, r8 | r0 = r8;
0x00091024 bl 0x38abc | r0 = fcn_00038abc (r0, r1, r2, r3);
0x00091028 cmp r0, 1 |
| if (r0 <= 1) {
0x0009102a ble 0x91062 | goto label_229;
| }
| }
0x0009102c adds r4, 1 | r4++;
0x0009102e adds r7, 0x10 | r7 += 0x10;
0x00091030 cmp r4, r5 |
0x00091032 bne 0x9101a |
| } while (r4 != r5);
| label_90:
0x00091034 cmp r5, fp |
0x00091036 mov r7, sl | r7 = sl;
| if (r5 > fp) {
0x00091038 bgt 0x90fb4 | goto label_86;
| }
| label_92:
0x0009103a ldr.w fp, [sp, 0x88] | fp = var_88h;
0x0009103e ldr r5, [sp, 0x6c] | r5 = var_6ch;
0x00091040 str r6, [r5, 0x1c] | *((r5 + 0x1c)) = r6;
| label_95:
0x00091042 ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x00091044 add.w fp, fp, 1 |
0x00091048 cmp r5, 0 |
| if (r5 != 0) {
0x0009104a bne.w 0x90f3e | goto label_87;
| }
| label_223:
0x0009104e ldrd sb, r6, [sp, 0x98] | __asm ("ldrd sb, r6, [var_98h]");
0x00091052 ldr.w sl, [sp, 0xa0] | sl = var_a0h;
| label_222:
0x00091056 ldr r6, [r6, 0x10] | r6 = *((r6 + 0x10));
0x00091058 cmp r6, 0 |
| if (r6 == 0) {
0x0009105a beq.w 0x8fe04 | goto label_88;
| }
0x0009105e ldr r1, [r6] | r1 = *(r6);
0x00091060 b 0x90f0c | goto label_89;
| label_229:
0x00091062 cmp r5, r4 |
| if (r5 <= r4) {
0x00091064 ble 0x91034 | goto label_90;
| }
0x00091066 add.w fp, fp, 1 |
0x0009106a cmp fp, r5 |
| if (fp != r5) {
0x0009106c bne 0x90ff8 | goto label_91;
| }
0x0009106e b 0x9103a | goto label_92;
| label_228:
0x00091070 ldr r2, [r6, 0x28] | r2 = *((r6 + 0x28));
0x00091072 add.w r2, r2, fp, lsl 4 | r2 += (fp << 4);
0x00091076 ldr.w sb, [r2, 8] | sb = *((r2 + 8));
0x0009107a ldrb.w r1, [sb] | r1 = *(sb);
0x0009107e cmp r1, 0x71 |
0x00091080 it ne |
| if (r1 != 0x71) {
0x00091082 strne sb, [sp, 0x108] | var_108h = sb;
| goto label_230;
| }
| if (r1 != 0x71) {
| label_230:
0x00091086 bne 0x91012 | goto label_93;
| }
0x00091088 b 0x91016 | goto label_94;
| label_226:
0x0009108a ldr r5, [sp, 0x6c] | r5 = var_6ch;
0x0009108c ldr.w fp, [sp, 0x88] | fp = var_88h;
| label_225:
0x00091090 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00091092 cmp r3, 0 |
| if (r3 != 0) {
0x00091094 bne 0x91042 | goto label_95;
| }
0x00091096 mov r3, fp | r3 = fp;
| if (r3 == 0) {
0x00091098 cbnz r3, 0x9109e |
0x0009109a ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
| if (r2 == 0) {
0x0009109c cbz r2, 0x910bc | goto label_231;
| }
| }
0x0009109e ldr r2, [pc, 0x130] |
0x000910a0 add r4, sp, 0x164 | r4 += var_164h;
0x000910a2 adds r3, 1 | r3++;
0x000910a4 mov r1, r4 | r1 = r4;
0x000910a6 movs r0, 0x10 | r0 = 0x10;
0x000910a8 add r2, pc | r2 = 0x12227e;
0x000910aa blx 0x8968 | fcn_00008968 ();
| do {
0x000910ae ldr r1, [pc, 0x124] |
0x000910b0 mov r2, r4 | r2 = r4;
0x000910b2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000910b4 add r1, pc | r1 = 0x12228e;
0x000910b6 bl 0x21598 | fcn_00021598 (r0, r1);
0x000910ba b 0x90ea8 | goto label_96;
| label_231:
0x000910bc add r4, sp, 0x164 | r4 += var_164h;
0x000910be strb.w fp, [sp, 0x164] | var_164h = fp;
0x000910c2 b 0x910ae |
| } while (1);
| label_141:
0x000910c4 ldr r1, [pc, 0x110] |
0x000910c6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000910c8 add r1, pc | r1 = 0x1222a4;
0x000910ca bl 0x21598 | fcn_00021598 (r0, r1);
0x000910ce b 0x90ea8 | goto label_96;
| label_134:
0x000910d0 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x000910d2 ldr r1, [pc, 0x108] |
0x000910d4 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000910d6 str r2, [sp] | *(sp) = r2;
0x000910d8 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000910da add r1, pc | r1 = 0x1222bc;
0x000910dc adds r2, 8 | r2 += 8;
0x000910de bl 0x21598 | fcn_00021598 (r0, r1);
0x000910e2 b.w 0x8f71c | goto label_0;
| label_130:
0x000910e6 ldr r4, [sp, 0x38] | r4 = var_38h;
0x000910e8 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000910ea mov r0, r4 | r0 = r4;
0x000910ec bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x000910f0 ldr r1, [sp, 0x58] | r1 = var_58h;
0x000910f2 mov r0, r4 | r0 = r4;
0x000910f4 bl 0x1a608 | fcn_0001a608 (r0, r1);
0x000910f8 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000910fa cmp r1, 0 |
| if (r1 == 0) {
0x000910fc beq.w 0x8fb74 | goto label_97;
| }
0x00091100 mov r0, r4 | r0 = r4;
0x00091102 bl 0x1a898 | fcn_0001a898 (r0, r1);
0x00091106 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00091108 cmp r3, 0 |
| if (r3 == 0) {
0x0009110a beq.w 0x8fb4c | goto label_98;
| }
0x0009110e ldr r2, [pc, 0xd0] |
0x00091110 ldr r3, [pc, 0xd0] | r3 = *(0x911e4);
0x00091112 add r2, pc | r2 = 0x1222f8;
0x00091114 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00091116 ldr r2, [r3] | r2 = imp.sinh;
0x00091118 ldr r3, [sp, 0x174] | r3 = var_174h;
0x0009111a eors r2, r3 | r2 ^= r3;
0x0009111c mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00091120 beq.w 0x8fb24 | goto label_7;
| }
0x00091124 b.w 0x8fb92 | goto label_99;
| label_135:
0x00091128 movs r3, 0 | r3 = 0;
0x0009112a str r3, [sp, 0x70] | var_70h = r3;
0x0009112c b.w 0x8fcfc | goto label_16;
| label_145:
0x00091130 ldr r6, [sp, 0x3c] | r6 = var_3ch;
0x00091132 b.w 0x8fe58 | goto label_100;
| label_144:
0x00091136 ldrd r6, r3, [fp, 0x6c] | __asm ("ldrd r6, r3, [arg_6ch]");
0x0009113a cmp r6, r3 |
| if (r6 >= r3) {
0x0009113c bge 0x911a2 | goto label_232;
| }
0x0009113e add.w r3, r6, r6, lsl 2 | r3 = r6 + (r6 << 2);
0x00091142 ldr.w r0, [fp, 0x68] | r0 = *(arg_68h);
0x00091146 ldr r5, [sp, 0x60] | r5 = var_60h;
0x00091148 adds r2, r6, 1 | r2 = r6 + 1;
0x0009114a lsls r3, r3, 2 | r3 <<= 2;
0x0009114c str.w r2, [fp, 0x6c] | __asm ("str.w r2, [arg_6ch]");
0x00091150 movs r1, 0 | r1 = 0;
0x00091152 str r2, [sp, 0x34] | var_34h = r2;
0x00091154 movs r4, 0x23 | r4 = 0x23;
0x00091156 adds r2, r0, r3 | r2 = r0 + r3;
0x00091158 strd r5, r1, [r2, 4] | __asm ("strd r5, r1, [r2, 4]");
0x0009115c strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x00091160 str r4, [r0, r3] | *((r0 + r3)) = r4;
0x00091162 b.w 0x8fe5a | goto label_101;
| label_211:
0x00091166 movs r3, 0 | r3 = 0;
0x00091168 ldr r2, [sp, 0x68] | r2 = var_68h;
0x0009116a str r3, [sp] | *(sp) = r3;
0x0009116c movs r1, 0x9f | r1 = 0x9f;
0x0009116e mov r3, r7 | r3 = r7;
0x00091170 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00091174 b 0x909aa | goto label_55;
| label_210:
0x00091176 mov r2, r8 | r2 = r8;
0x00091178 movs r1, 0x1e | r1 = 0x1e;
0x0009117a mov r0, r4 | r0 = r4;
0x0009117c str r7, [sp] | *(sp) = r7;
0x0009117e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00091182 ldr r1, [sp, 0x60] | r1 = var_60h;
0x00091184 mov r6, r0 | r6 = r0;
0x00091186 ldrd r0, r2, [sp, 0x2c] | __asm ("ldrd r0, r2, [var_2ch]");
0x0009118a bl 0x2ef70 | fcn_0002ef70 (r0, r1, r2);
0x0009118e ldr r2, [r4, 0x6c] | r2 = *((r4 + 0x6c));
0x00091190 mov r1, r6 | r1 = r6;
0x00091192 mov r0, r4 | r0 = r4;
0x00091194 bl 0xa514 | fcn_0000a514 (r0, r1, r2);
0x00091198 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009119a cmp r3, 0 |
| if (r3 <= 0) {
0x0009119c ble.w 0x909aa | goto label_55;
| }
0x000911a0 b 0x90ab8 | goto label_102;
| label_232:
0x000911a2 movs r3, 0 | r3 = 0;
0x000911a4 ldr r2, [sp, 0x60] | r2 = var_60h;
0x000911a6 str r3, [sp] | *(sp) = r3;
0x000911a8 movs r1, 0x23 | r1 = 0x23;
0x000911aa mov r0, fp | r0 = fp;
0x000911ac bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000911b0 ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x000911b4 mov r6, r0 | r6 = r0;
0x000911b6 str r3, [sp, 0x34] | var_34h = r3;
0x000911b8 b.w 0x8fe5a | goto label_101;
| label_138:
0x000911bc mov r6, r4 | r6 = r4;
0x000911be b.w 0x8fd6c | goto label_103;
| label_143:
0x000911c2 ldr r2, [pc, 0x24] |
0x000911c4 add r2, pc | r2 = 0x1223b2;
0x000911c6 b.w 0x8fdc8 | goto label_104;
| label_208:
0x000911ca ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x000911cc udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x911ec */
| #include <stdint.h>
|
; (fcn) fcn.000911ec () | void fcn_000911ec (int16_t arg_30h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_24h;
| int16_t var_28h;
| arithmetic var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| arithmetic x;
| int32_t var_7ch_2;
| int32_t var_84h;
| int32_t var_84h_2;
| int32_t var_8ch;
| int32_t var_8ch_2;
| int16_t var_94h;
| int32_t var_94h_2;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000911ec push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000911f0 mov r6, r2 | r6 = r2;
0x000911f2 ldr.w r2, [pc, 0xa68] |
0x000911f6 sub sp, 0xac |
0x000911f8 ldr.w r3, [pc, 0xa64] | r3 = *(0x91c60);
0x000911fc add r2, pc | r2 = 0x122e5e;
0x000911fe ldr.w sl, [r0, 0x24] | sl = *((r0 + 0x24));
0x00091202 ldr r7, [r0] | r7 = *(r0);
0x00091204 ldr r3, [r2, r3] |
0x00091206 ldr r3, [r3] | r3 = imp.sinh;
0x00091208 str r3, [sp, 0xa4] | var_a4h = r3;
0x0009120a mov.w r3, 0 | r3 = 0;
0x0009120e movs r3, 0 | r3 = 0;
0x00091210 str r3, [sp, 0x78] | var_78h = r3;
0x00091212 strd r3, r3, [sp, 0x6c] | __asm ("strd r3, r3, [var_6ch]");
0x00091216 str r3, [sp, 0x74] | var_74h = r3;
0x00091218 cmp.w sl, 0 |
| if (sl == 0) {
0x0009121c beq 0x9124e | goto label_38;
| }
0x0009121e mov r0, r7 | r0 = r7;
0x00091220 bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
| if (r6 == 0) {
0x00091224 cbz r6, 0x9122e | goto label_0;
| }
0x00091226 mov r1, r6 | r1 = r6;
0x00091228 mov r0, r7 | r0 = r7;
0x0009122a bl 0x1a57c | fcn_0001a57c (r0, r1);
| do {
| label_0:
0x0009122e ldr.w r2, [pc, 0xa34] | r2 = *(0x00091c64);
0x00091232 ldr.w r3, [pc, 0xa2c] | r3 = *(0x91c62);
0x00091236 add r2, pc | r2 += pc;
0x00091238 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0009123a ldr r2, [r3] | r2 = *(0x91c62);
0x0009123c ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x0009123e eors r2, r3 | r2 ^= r3;
0x00091240 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00091244 bne.w 0x91c52 | goto label_39;
| }
0x00091248 add sp, 0xac |
0x0009124a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_38:
0x0009124e mov r4, r0 | r4 = r0;
0x00091250 mov fp, r1 |
0x00091252 bl 0x8a9ec | r0 = fcn_0008a9ec (r0, r1);
0x00091256 mov r5, r0 | r5 = r0;
0x00091258 cmp r0, 0 |
| if (r0 == 0) {
0x0009125a beq.w 0x917ae | goto label_40;
| }
0x0009125e ldr r3, [r0, 0x38] | r3 = *((r0 + 0x38));
0x00091260 cmp r3, 0 |
| if (r3 == 0) {
0x00091262 beq.w 0x917b2 | goto label_41;
| }
| label_4:
0x00091266 ldrb.w r3, [r4, 0x97] | r3 = *((r4 + 0x97));
0x0009126a cmp r3, 0 |
| if (r3 != 0) {
0x0009126c bne.w 0x917ca | goto label_42;
| }
0x00091270 str r3, [sp] | *(sp) = r3;
0x00091272 movs r2, 0x80 | r2 = 0x80;
0x00091274 mov r1, r5 | r1 = r5;
0x00091276 mov r0, r4 | r0 = r4;
0x00091278 bl 0x24470 | fcn_00024470 (r0, r1, r2, r3, r4);
0x0009127c ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x00091280 str r0, [sp, 0x28] | var_28h = r0;
0x00091282 str r3, [sp, 0x24] | var_24h = r3;
0x00091284 cmp r0, 0 |
| if (r0 == 0) {
0x00091286 beq.w 0x91bf6 | goto label_43;
| }
0x0009128a mov.w sl, 1 | sl = 1;
| label_5:
0x0009128e mov r1, r5 | r1 = r5;
0x00091290 mov r0, r4 | r0 = r4;
0x00091292 bl 0x774c4 | r0 = fcn_000774c4 (r0, r1);
| if (r0 == 0) {
0x00091296 cbz r0, 0x912c8 | goto label_44;
| }
| label_1:
0x00091298 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0009129a movs r5, 0 | r5 = 0;
| if (r3 != 0) {
| label_3:
0x0009129c cbz r3, 0x912a8 |
0x0009129e ldr r2, [sp, 0x74] | r2 = var_74h;
0x000912a0 str.w r2, [r3, 0xf8] | __asm ("str.w r2, [r3, 0xf8]");
0x000912a4 movs r3, 0 | r3 = 0;
0x000912a6 str r3, [sp, 0x78] | var_78h = r3;
| }
0x000912a8 mov r1, fp | r1 = fp;
0x000912aa mov r0, r7 | r0 = r7;
0x000912ac bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
| if (r6 != 0) {
0x000912b0 cbz r6, 0x912ba |
0x000912b2 mov r1, r6 | r1 = r6;
0x000912b4 mov r0, r7 | r0 = r7;
0x000912b6 bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x000912ba cmp r5, 0 |
0x000912bc beq 0x9122e |
| } while (r5 == 0);
0x000912be mov r1, r5 | r1 = r5;
0x000912c0 mov r0, r7 | r0 = r7;
0x000912c2 bl 0x16808 | fcn_00016808 (r0, r1);
0x000912c6 b 0x9122e | goto label_0;
| label_44:
0x000912c8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000912ca mov r1, r5 | r1 = r5;
0x000912cc mov r0, r4 | r0 = r4;
0x000912ce subs r2, r3, 0 | r2 = r3 - 0;
0x000912d0 it ne |
| if (r2 == r3) {
0x000912d2 movne r2, 1 | r2 = 1;
| }
0x000912d4 bl 0x24578 | r0 = fcn_00024578 (r0, r1, r2);
0x000912d8 mov sb, r0 | sb = r0;
0x000912da cmp r0, 0 |
| if (r0 != 0) {
0x000912dc bne 0x91298 | goto label_1;
| }
0x000912de ldr r0, [r5, 0x3c] | r0 = *((r5 + 0x3c));
0x000912e0 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x000912e2 cmp r0, 0 |
| if (r0 == 0) {
0x000912e4 beq.w 0x91c28 | goto label_45;
| }
0x000912e8 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000912ea cmp r0, r3 |
| if (r0 == r3) {
0x000912ec beq.w 0x91878 | goto label_46;
| }
0x000912f0 add.w r3, r2, 0x10 | r3 = r2 + 0x10;
0x000912f4 mov r8, sb | r8 = sb;
| do {
0x000912f6 mov r2, r3 | r2 = r3;
0x000912f8 add.w r8, r8, 1 | r8++;
0x000912fc ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x000912fe adds r3, 0x10 | r3 += 0x10;
0x00091300 cmp r0, r1 |
0x00091302 bne 0x912f6 |
| } while (r0 != r1);
0x00091304 lsl.w r3, r8, 4 | r3 = r8 << 4;
0x00091308 str r3, [sp, 0x40] | var_40h = r3;
| label_13:
0x0009130a ldr r3, [r2] | r3 = *(r2);
0x0009130c movs r1, 9 | r1 = 9;
0x0009130e ldr r2, [r5] | r2 = *(r5);
0x00091310 mov r0, r4 | r0 = r4;
0x00091312 str r3, [sp] | *(sp) = r3;
0x00091314 movs r3, 0 | r3 = 0;
0x00091316 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x0009131a cmp r0, 1 |
0x0009131c str r0, [sp, 0x38] | var_38h = r0;
| if (r0 == 1) {
0x0009131e beq 0x91298 | goto label_1;
| }
0x00091320 ldr r2, [r4, 0x28] | r2 = *((r4 + 0x28));
0x00091322 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00091324 adds r1, r2, 1 | r1 = r2 + 1;
0x00091326 str r2, [sp, 0x30] | var_30h = r2;
0x00091328 str r1, [r4, 0x28] | *((r4 + 0x28)) = r1;
0x0009132a str r1, [sp, 0x3c] | var_3ch = r1;
0x0009132c str.w r2, [fp, 0x30] | __asm ("str.w r2, [arg_30h]");
| if (r3 == 0) {
0x00091330 cbz r3, 0x91346 | goto label_47;
| }
| do {
0x00091332 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00091334 mov r2, sb | r2 = sb;
0x00091336 add.w sb, sb, 1 | sb++;
0x0009133a cmp r3, 0 |
0x0009133c bne 0x91332 |
| } while (r3 != 0);
0x0009133e ldr r3, [sp, 0x30] | r3 = var_30h;
0x00091340 adds r3, 2 | r3 += 2;
0x00091342 add r3, r2 | r3 += r2;
0x00091344 str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| label_47:
0x00091346 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00091348 cmp r3, 2 |
| if (r3 == 2) {
0x0009134a bne 0x9135a |
0x0009134c ldr r2, [r5] | r2 = *(r5);
0x0009134e ldr.w r3, [r4, 0xf8] | r3 = *((r4 + 0xf8));
0x00091352 str r4, [sp, 0x78] | var_78h = r4;
0x00091354 str.w r2, [r4, 0xf8] | __asm ("str.w r2, [r4, 0xf8]");
0x00091358 str r3, [sp, 0x74] | var_74h = r3;
| }
0x0009135a ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0009135c str r3, [sp, 0x2c] | var_2ch = r3;
0x0009135e cmp r3, 0 |
| if (r3 == 0) {
0x00091360 beq.w 0x917f6 | goto label_48;
| }
| label_7:
0x00091364 ldrb r3, [r4, 0x12] | r3 = *((r4 + 0x12));
0x00091366 cmp r3, 0 |
| if (r3 == 0) {
0x00091368 beq.w 0x917e6 | goto label_49;
| }
| label_6:
0x0009136c mov r2, r8 | r2 = r8;
0x0009136e mov r1, sl | r1 = sl;
0x00091370 mov r0, r4 | r0 = r4;
0x00091372 bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x00091376 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00091378 cmp r3, 2 |
| if (r3 == 2) {
0x0009137a beq.w 0x9183e | goto label_50;
| }
| label_10:
0x0009137e movs r2, 0 | r2 = 0;
0x00091380 mov r1, r6 | r1 = r6;
0x00091382 add r0, sp, 0x7c | r0 += x;
0x00091384 strd r4, fp, [sp, 0x7c] | __asm ("strd r4, fp, [var_0hx7c]");
0x00091388 strd r2, r2, [sp, 0x84] | __asm ("strd r2, r2, [var_84h]");
0x0009138c strd r2, r2, [sp, 0x8c] | __asm ("strd r2, r2, [var_8ch]");
0x00091390 strd r2, r2, [sp, 0x94] | __asm ("strd r2, r2, [var_94h]");
0x00091394 bl 0x3119c | fcn_0003119c (r0, r1);
0x00091398 str r0, [sp, 0x34] | var_34h = r0;
0x0009139a cmp r0, 0 |
| if (r0 != 0) {
0x0009139c bne.w 0x91298 | goto label_1;
| }
0x000913a0 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x000913a2 lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 < r3) {
0x000913a4 bpl 0x913ca |
0x000913a6 ldrb r3, [r4, 0x12] | r3 = *((r4 + 0x12));
| if (r3 == 0) {
0x000913a8 cbnz r3, 0x913ca |
0x000913aa ldr r3, [r4, 0x78] | r3 = *((r4 + 0x78));
| if (r3 != 0) {
0x000913ac cbnz r3, 0x913ca | goto label_51;
| }
0x000913ae ldrb.w r3, [r4, 0x95] | r3 = *((r4 + 0x95));
| if (r3 != 0) {
0x000913b2 cbnz r3, 0x913ca | goto label_51;
| }
0x000913b4 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000913b6 movs r1, 0x47 | r1 = 0x47;
0x000913b8 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000913ba str r2, [sp] | *(sp) = r2;
0x000913bc ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000913be adds r3, 1 | r3++;
0x000913c0 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000913c2 str r3, [sp, 0x44] | var_44h = r3;
0x000913c4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000913c8 b 0x913ce |
| }
| } else {
| label_51:
0x000913ca ldr r3, [sp, 0x34] | r3 = var_34h;
0x000913cc str r3, [sp, 0x44] | var_44h = r3;
| }
0x000913ce ldr r3, [sp, 0x38] | r3 = var_38h;
0x000913d0 orrs r3, r6 | r3 |= r6;
| if (r3 != r6) {
0x000913d2 bne 0x914aa | goto label_52;
| }
0x000913d4 cmp.w sl, 0 |
| if (sl != 0) {
0x000913d8 bne.w 0x91872 | goto label_53;
| }
0x000913dc ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000913e0 cmp r3, 1 |
| if (r3 == 1) {
0x000913e2 beq.w 0x919f2 | goto label_54;
| }
0x000913e6 cmp.w r8, 1 |
| if (r8 != 1) {
0x000913ea beq 0x9140a |
0x000913ec ldr r3, [r4] | r3 = *(r4);
0x000913ee ldr r2, [sp, 0x40] | r2 = var_40h;
0x000913f0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000913f2 add r3, r2 | r3 += r2;
0x000913f4 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000913f6 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x000913f8 cbz r3, 0x9140a | goto label_55;
| }
0x000913fa ldr r3, [r5] | r3 = *(r5);
0x000913fc mov r1, r8 | r1 = r8;
0x000913fe ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00091400 mov r0, r4 | r0 = r4;
0x00091402 str r3, [sp] | *(sp) = r3;
0x00091404 movs r3, 1 | r3 = 1;
0x00091406 bl 0x2fbbc | fcn_0002fbbc (r0, r1, r2, r3, r4);
| }
| label_55:
0x0009140a ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x0009140c lsls r1, r3, 0x18 | r1 = r3 << 0x18;
| if (r1 >= r3) {
0x0009140e bmi 0x91434 |
0x00091410 ldr r1, [sp, 0x44] | r1 = var_44h;
0x00091412 mov.w r3, -1 | r3 = -1;
0x00091416 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x00091418 str r3, [sp, 8] | var_8h = r3;
0x0009141a ldr r3, [r5] | r3 = *(r5);
0x0009141c cmp r1, 0 |
0x0009141e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091420 str r3, [sp, 4] | var_4h = r3;
0x00091422 ite ne |
| if (r1 == 0) {
0x00091424 movne r3, r1 | r3 = r1;
| }
| if (r1 != 0) {
0x00091426 moveq r3, -1 | r3 = -1;
| }
0x0009142a movs r1, 0x91 | r1 = 0x91;
0x0009142c str r3, [sp] | *(sp) = r3;
0x0009142e mov r3, r8 | r3 = r8;
0x00091430 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
| }
0x00091434 ldr.w sb, [r5, 8] | sb = *((r5 + 8));
0x00091438 cmp.w sb, 0 |
| if (sb == 0) {
0x0009143c beq.w 0x91a06 | goto label_56;
| }
0x00091440 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00091442 mov.w sl, 0 | sl = 0;
0x00091446 cmp r3, 0 |
0x00091448 it eq |
| if (r3 != 0) {
0x0009144a moveq r3, -1 | r3 = -1;
| }
0x0009144e strd r3, r7, [sp, 0x24] | __asm ("strd r3, r7, [var_24h]");
0x00091452 mov r7, sb | r7 = sb;
0x00091454 ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x00091458 b 0x91462 |
| while (r3 != 2) {
| label_2:
0x0009145a ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
0x0009145c cmp r7, 0 |
| if (r7 == 0) {
0x0009145e beq.w 0x91a04 | goto label_57;
| }
0x00091462 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x00091464 mov r3, r8 | r3 = r8;
0x00091466 movs r1, 0x91 | r1 = 0x91;
0x00091468 mov r0, sb | r0 = sb;
0x0009146a str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0009146e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00091472 ldrb.w r3, [r7, 0x37] | r3 = *((r7 + 0x37));
0x00091476 and r3, r3, 3 | r3 &= 3;
0x0009147a cmp r3, 2 |
0x0009147c bne 0x9145a |
| }
0x0009147e ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00091480 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 >= r3) {
0x00091482 bpl 0x9145a | goto label_2;
| }
0x00091484 ldr.w r3, [sb] | r3 = *(sb);
0x00091488 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x0009148c ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x00091490 cmp r2, 0 |
| if (r2 != 0) {
0x00091492 bne.w 0x91ace | goto label_58;
| }
0x00091496 subs r3, 1 | r3--;
0x00091498 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x0009149c ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x000914a0 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
| label_29:
0x000914a4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000914a6 str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000914a8 b 0x9145a | goto label_2;
| label_52:
0x000914aa ldr r3, [sp, 0x94] | r3 = var_94h;
0x000914ac and r3, r3, 0x40 | r3 &= 0x40;
0x000914b0 orrs.w r3, r3, sl | r3 |= sl;
0x000914b4 ite eq |
| if (r3 != r3) {
0x000914b6 moveq r3, 1 | r3 = 1;
| }
| if (r3 == r3) {
0x000914b8 movne r3, 0 | r3 = 0;
| }
0x000914ba lsls r3, r3, 3 | r3 <<= 3;
0x000914bc orr sl, r3, 0x14 | sl = r3 | 0x14;
| label_12:
0x000914c0 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000914c2 ands r2, r2, 0x80 | r2 &= 0x80;
| if (r2 == r2) {
0x000914c6 beq.w 0x91852 | goto label_59;
| }
0x000914ca ldr.w r8, [r5, 8] | r8 = *((r5 + 8));
0x000914ce mov r2, r8 | r2 = r8;
0x000914d0 cmp.w r8, 0 |
| if (r8 != 0) {
0x000914d4 bne 0x914e0 | goto label_60;
| }
0x000914d6 b 0x91c56 | goto label_61;
| do {
0x000914d8 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000914da cmp r2, 0 |
| if (r2 == 0) {
0x000914dc beq.w 0x91c56 | goto label_61;
| }
| label_60:
0x000914e0 ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x000914e4 and r3, r3, 3 | r3 &= 3;
0x000914e8 cmp r3, 2 |
0x000914ea bne 0x914d8 |
| } while (r3 != 2);
0x000914ec ldrsh.w r1, [r2, 0x32] | r1 = *((r2 + 0x32));
0x000914f0 mov r8, r2 | r8 = r2;
0x000914f2 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000914f4 ldrd r0, ip, [r4, 0x28] | __asm ("ldrd r0, ip, [r4, 0x28]");
0x000914f8 str r1, [sp, 0x38] | var_38h = r1;
0x000914fa ldr r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
0x000914fc ldr r2, [r2, 0x70] | r2 = *((r2 + 0x70));
0x000914fe add r1, ip | r1 += ip;
0x00091500 str r1, [r4, 0x2c] | *((r4 + 0x2c)) = r1;
0x00091502 add.w r1, ip, 1 | r1 = ip + 1;
0x00091506 str r3, [sp, 0x50] | var_50h = r3;
0x00091508 adds r3, r0, 1 | r3 = r0 + 1;
0x0009150a str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x0009150c ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009150e str r0, [sp, 0x48] | var_48h = r0;
0x00091510 str r1, [sp, 0x4c] | var_4ch = r1;
0x00091512 cmp r3, r2 |
| if (r3 >= r2) {
0x00091514 bge.w 0x91a0a | goto label_62;
| }
0x00091518 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0009151a movs r0, 0 | r0 = 0;
0x0009151c ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009151e mov.w ip, 0x76 |
0x00091522 add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x00091526 ldr.w lr, [r1, 0x68] |
0x0009152a adds r2, 1 | r2++;
0x0009152c str r2, [r1, 0x6c] | *((r1 + 0x6c)) = r2;
0x0009152e lsls r3, r3, 2 | r3 <<= 2;
0x00091530 ldr r1, [sp, 0x48] | r1 = var_48h;
0x00091532 add.w r2, lr, r3 | r2 = lr + r3;
0x00091536 str r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
0x00091538 str r1, [r2, 4] | *((r2 + 4)) = r1;
0x0009153a ldr r1, [sp, 0x38] | r1 = var_38h;
0x0009153c strd r1, r0, [r2, 8] | __asm ("strd r1, r0, [r2, 8]");
0x00091540 str.w ip, [lr, r3] | __asm ("str.w ip, [lr, r3]");
| label_22:
0x00091544 movs r3, 0 | r3 = 0;
0x00091546 mov r1, r8 | r1 = r8;
0x00091548 mov r0, r4 | r0 = r4;
0x0009154a str r3, [sp, 0x58] | var_58h = r3;
0x0009154c bl 0x2bf78 | fcn_0002bf78 (r0, r1);
| label_11:
0x00091550 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00091552 mov r2, r6 | r2 = r6;
0x00091554 mov r1, fp | r1 = fp;
0x00091556 mov r0, r4 | r0 = r4;
0x00091558 strd sl, r3, [sp, 8] | __asm ("strd sl, r3, [var_8h]");
0x0009155c movs r3, 0 | r3 = 0;
0x0009155e strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x00091562 bl 0x707d8 | fcn_000707d8 (r0, r1, r2, r3, r4, r5, r6);
0x00091566 str r0, [sp, 0x40] | var_40h = r0;
0x00091568 cmp r0, 0 |
| if (r0 == 0) {
0x0009156a beq.w 0x91298 | goto label_1;
| }
0x0009156e ldr r3, [sp, 0x40] | r3 = var_40h;
0x00091570 ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x00091572 ldr r1, [r3, 0x1c] | r1 = *((r3 + 0x1c));
0x00091574 ldrb.w r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x00091578 mov r2, r3 | r2 = r3;
0x0009157a str r3, [sp, 0x3c] | var_3ch = r3;
0x0009157c cmp r2, 1 |
0x0009157e add r3, sp, 0x9c | r3 += var_9ch;
0x00091580 stm r3!, {r0, r1} | *(r3!) = r0;
| *((r3! + 4)) = r1;
| if (r2 != 1) {
0x00091582 beq 0x91590 |
0x00091584 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x00091586 movs r2, 1 | r2 = 1;
0x00091588 cmp r3, 0 |
0x0009158a it eq |
| if (r3 != 0) {
0x0009158c moveq r3, r4 | r3 = r4;
| }
0x0009158e strb r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
| }
0x00091590 ldr r3, [sp, 0x40] | r3 = var_40h;
0x00091592 ldrb.w r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x00091596 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 < r3) {
0x00091598 bmi.w 0x9188e | goto label_63;
| }
| label_15:
0x0009159c ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009159e cmp r3, 0 |
| if (r3 != 0) {
0x000915a0 bne.w 0x9182c | goto label_64;
| }
| label_9:
0x000915a4 cmp.w r8, 0 |
| if (r8 == 0) {
0x000915a8 beq.w 0x91a4e | goto label_65;
| }
0x000915ac ldr r3, [sp, 0x38] | r3 = var_38h;
0x000915ae cmp r3, 0 |
| if (r3 <= 0) {
0x000915b0 ble 0x915f0 | goto label_66;
| }
0x000915b2 str r7, [sp, 0x54] | var_54h = r7;
0x000915b4 mov.w sl, 0 | sl = 0;
0x000915b8 str r4, [sp, 0x60] | var_60h = r4;
0x000915ba str r6, [sp, 0x64] | var_64h = r6;
0x000915bc ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x000915be ldr r4, [sp, 0x30] | r4 = var_30h;
0x000915c0 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x000915c2 str.w sb, [sp, 0x5c] | __asm ("str.w sb, [var_5ch]");
0x000915c6 mov sb, r3 | sb = r3;
| do {
0x000915c8 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x000915cc add.w r2, r7, sl | r2 = r7 + sl;
0x000915d0 mov r1, r5 | r1 = r5;
0x000915d2 mov r0, r6 | r0 = r6;
0x000915d4 ldrsh.w r3, [r3, sl, lsl 1] | offset_0 = sl << 1;
| r3 = *((r3 + offset_0));
0x000915d8 add.w sl, sl, 1 | sl++;
0x000915dc str r2, [sp] | *(sp) = r2;
0x000915de mov r2, r4 | r2 = r4;
0x000915e0 bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
0x000915e4 cmp sl, sb |
0x000915e6 bne 0x915c8 |
| } while (sl != sb);
0x000915e8 ldr r7, [sp, 0x54] | r7 = var_54h;
0x000915ea ldrd sb, r4, [sp, 0x5c] | __asm ("ldrd sb, r4, [var_5ch]");
0x000915ee ldr r6, [sp, 0x64] | r6 = var_64h;
| label_66:
0x000915f0 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000915f2 cmp r3, 0 |
| if (r3 != 0) {
0x000915f4 bne.w 0x918a2 | goto label_67;
| }
0x000915f8 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000915fa mov r1, r8 | r1 = r8;
0x000915fc ldr r0, [r4] | r0 = *(r4);
0x000915fe add.w sl, r3, 1 | sl = r3 + 1;
0x00091602 str.w sl, [r4, 0x2c] | __asm ("str.w sl, [r4, 0x2c]");
0x00091606 bl 0x35b10 | fcn_00035b10 (r0, r1);
0x0009160a ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009160c movs r1, 0x61 | r1 = 0x61;
0x0009160e ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x00091612 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00091614 str r0, [sp, 4] | var_4h = r0;
0x00091616 str r3, [sp, 8] | var_8h = r3;
0x00091618 mov r0, sb | r0 = sb;
0x0009161a str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0009161e bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x00091622 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00091624 movs r1, 0x8a | r1 = 0x8a;
0x00091626 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00091628 mov r0, sb | r0 = sb;
0x0009162a str r3, [sp, 4] | var_4h = r3;
0x0009162c ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009162e str r3, [sp] | *(sp) = r3;
0x00091630 mov r3, sl | r3 = sl;
0x00091632 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x00091636 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00091638 str r3, [sp, 0x38] | var_38h = r3;
| label_25:
0x0009163a ldr r0, [sp, 0x40] | r0 = var_40h;
0x0009163c bl 0x73e14 | fcn_00073e14 (r0, r1);
0x00091640 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00091642 cmp r3, 2 |
0x00091644 itt eq |
| if (r3 != 2) {
0x00091646 moveq r3, 0 | r3 = 0;
| }
| if (r3 != 2) {
0x00091648 streq r3, [sp, 0x54] | var_54h = r3;
| }
| if (r3 != 2) {
0x0009164a beq 0x91672 |
0x0009164c ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009164e movs r2, 0x71 | r2 = 0x71;
0x00091650 mov r1, r5 | r1 = r5;
0x00091652 mov r0, r4 | r0 = r4;
0x00091654 str r3, [sp] | *(sp) = r3;
0x00091656 movs r3, 0 | r3 = 0;
0x00091658 mov sb, r3 | sb = r3;
0x0009165a str r3, [sp, 4] | var_4h = r3;
0x0009165c add r3, sp, 0x70 | r3 += var_70h;
0x0009165e str r3, [sp, 0xc] | var_ch = r3;
0x00091660 add r3, sp, 0x6c | r3 += var_6ch;
0x00091662 str r3, [sp, 8] | var_8h = r3;
0x00091664 movs r3, 8 | r3 = 8;
0x00091666 bl 0x2fe28 | fcn_0002fe28 (r0, r1, r2, r3, r4, r5, r6);
0x0009166a str.w sb, [sp, 0x54] | __asm ("str.w sb, [var_54h]");
| label_16:
0x0009166e str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
| }
0x00091672 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00091674 ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x00091676 ldr r3, [r3, 0x70] | r3 = *((r3 + 0x70));
0x00091678 str r2, [sp, 0x24] | var_24h = r2;
0x0009167a cmp.w r8, 0 |
| if (r8 == 0) {
0x0009167e beq.w 0x91aa0 | goto label_68;
| }
0x00091682 cmp r2, r3 |
| if (r2 >= r3) {
0x00091684 bge.w 0x91bc6 | goto label_69;
| }
0x00091688 ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009168a mov.w lr, 0 | lr = 0;
0x0009168e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00091690 mov.w ip, 0x23 |
0x00091694 add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x00091698 ldr r0, [r1, 0x68] | r0 = *((r1 + 0x68));
0x0009169a adds r2, 1 | r2++;
0x0009169c str r2, [r1, 0x6c] | *((r1 + 0x6c)) = r2;
0x0009169e lsls r3, r3, 2 | r3 <<= 2;
0x000916a0 ldr r1, [sp, 0x48] | r1 = var_48h;
0x000916a2 adds r2, r0, r3 | r2 = r0 + r3;
0x000916a4 strd lr, lr, [r2, 0xc] | __asm ("strd lr, lr, [r2, 0xc]");
0x000916a8 strd r1, lr, [r2, 4] | __asm ("strd r1, lr, [r2, 4]");
0x000916ac str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_33:
0x000916b0 ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000916b4 cmp r3, 1 |
| if (r3 == 1) {
0x000916b6 beq.w 0x91b54 | goto label_70;
| }
0x000916ba movs r3, 0 | r3 = 0;
0x000916bc ldr r2, [sp, 0x48] | r2 = var_48h;
0x000916be str r3, [sp] | *(sp) = r3;
0x000916c0 movs r1, 0x86 | r1 = 0x86;
0x000916c2 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000916c4 mov r3, sl | r3 = sl;
0x000916c6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_28:
0x000916ca ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000916ce cmp r3, 1 |
| if (r3 != 1) {
0x000916d0 bne.w 0x919e6 | goto label_71;
| }
| label_27:
0x000916d4 ldr.w sb, [r5, 0x34] | sb = *((r5 + 0x34));
0x000916d8 mov r3, sb | r3 = sb;
0x000916da cmp.w sb, 0 |
| if (sb != 0) {
0x000916de bne 0x916e6 | goto label_72;
| }
0x000916e0 b 0x916ee | goto label_73;
| do {
0x000916e2 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
| if (r3 == 0) {
0x000916e4 cbz r3, 0x916ec | goto label_74;
| }
| label_72:
0x000916e6 ldr r2, [r3] | r2 = *(r3);
0x000916e8 cmp r7, r2 |
0x000916ea bne 0x916e2 |
| } while (r7 != r2);
| label_74:
0x000916ec mov sb, r3 | sb = r3;
| label_73:
0x000916ee mov r1, r5 | r1 = r5;
0x000916f0 mov r0, r4 | r0 = r4;
0x000916f2 bl 0x23ec0 | fcn_00023ec0 (r0, r1);
0x000916f6 ldr r2, [r4, 0x74] | r2 = *((r4 + 0x74));
0x000916f8 movs r3, 1 | r3 = 1;
0x000916fa cmp r2, 0 |
0x000916fc it eq |
| if (r2 != 0) {
0x000916fe moveq r2, r4 | r2 = r4;
| }
0x00091700 strb r3, [r2, 0x15] | *((r2 + 0x15)) = r3;
0x00091702 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x00091704 cmp r2, r3 |
| if (r2 == r3) {
0x00091706 beq.w 0x91986 | goto label_75;
| }
0x0009170a ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0009170c mvn r2, 0xa | r2 = ~0xa;
0x00091710 str r2, [sp, 8] | var_8h = r2;
0x00091712 movs r1, 7 | r1 = 7;
0x00091714 movs r2, 0 | r2 = 0;
0x00091716 strd sl, sb, [sp] | __asm ("strd sl, sb, [sp]");
0x0009171a mov r0, r5 | r0 = r5;
0x0009171c bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x00091720 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x00091722 cmp r3, 0 |
| if (r3 > 0) {
0x00091724 ble 0x91738 |
| label_19:
0x00091726 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00091728 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x0009172c ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x0009172e add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x00091732 movs r3, 2 | r3 = 2;
0x00091734 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
0x00091738 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009173a ldr.w sb, [sp, 0x34] | sb = var_34h;
0x0009173e str r3, [sp, 0x34] | var_34h = r3;
| label_17:
0x00091740 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00091742 cmp r3, 0 |
| if (r3 != 0) {
0x00091744 bne.w 0x919c0 | goto label_76;
| }
0x00091748 cmp.w r8, 0 |
| if (r8 == 0) {
0x0009174c beq.w 0x91a1e | goto label_77;
| }
0x00091750 ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x00091754 movs r1, 0x26 | r1 = 0x26;
0x00091756 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00091758 ldr r5, [sp, 0x34] | r5 = var_34h;
0x0009175a ldr r2, [sp, 0x48] | r2 = var_48h;
0x0009175c mov r0, r8 | r0 = r8;
0x0009175e str r3, [sp] | *(sp) = r3;
0x00091760 adds r3, r5, 1 | r3 = r5 + 1;
0x00091762 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00091766 ldr.w r2, [r8, 0x6c] | r2 = *((r8 + 0x6c));
0x0009176a cmp r5, 0 |
0x0009176c ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009176e mov r3, r8 | r3 = r8;
0x00091770 itt lt |
| if (r5 >= 0) {
0x00091772 addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r5 < 0) {
0x00091776 str r3, [sp, 0x34] | var_34h = r3;
| }
0x00091778 ldr r3, [r0] | r3 = *(r0);
0x0009177a ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x0009177e cmp r3, 0 |
| if (r3 == 0) {
0x00091780 beq.w 0x91978 | goto label_23;
| }
0x00091784 ldr.w r3, [pc, 0x4e0] |
0x00091788 add r3, pc | r3 = 0x1233f4;
0x0009178a adds r3, 4 | r3 += 4;
| label_18:
0x0009178c ldr r5, [sp, 0x54] | r5 = var_54h;
0x0009178e str r2, [r3, 8] | *((r3 + 8)) = r2;
| label_20:
0x00091790 ldrb r3, [r4, 0x12] | r3 = *((r4 + 0x12));
| if (r3 == 0) {
0x00091792 cbnz r3, 0x9179c |
0x00091794 ldr r3, [r4, 0x78] | r3 = *((r4 + 0x78));
0x00091796 cmp r3, 0 |
| if (r3 == 0) {
0x00091798 beq.w 0x91a86 | goto label_78;
| }
| }
| label_26:
0x0009179c ldr r3, [sp, 0x44] | r3 = var_44h;
| if (r3 != 0) {
0x0009179e cbz r3, 0x917ae |
0x000917a0 ldr.w r2, [pc, 0x4c8] |
0x000917a4 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000917a6 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000917a8 add r2, pc | r2 = 0x123418;
0x000917aa bl 0x2ebd8 | fcn_0002ebd8 (r0, r1, r2);
| }
| label_40:
0x000917ae ldr r3, [sp, 0x78] | r3 = var_78h;
0x000917b0 b 0x9129c | goto label_3;
| label_41:
0x000917b2 ldr r3, [r4] | r3 = *(r4);
0x000917b4 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x000917b6 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
| if (r2 == 0) {
0x000917b8 cbz r2, 0x917c2 | goto label_79;
| }
0x000917ba ldr r2, [r2, 0x30] | r2 = *((r2 + 0x30));
0x000917bc cmp r2, 0 |
| if (r2 != 0) {
0x000917be bne.w 0x91266 | goto label_4;
| }
| label_79:
0x000917c2 ldrb.w r2, [r5, 0x2b] | r2 = *((r5 + 0x2b));
0x000917c6 str r2, [sp, 0x24] | var_24h = r2;
0x000917c8 b 0x917d2 | goto label_35;
| label_42:
0x000917ca ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x000917ce str r3, [sp, 0x24] | var_24h = r3;
0x000917d0 ldr r3, [r4] | r3 = *(r4);
| label_35:
0x000917d2 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x000917d4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000917d6 clz r3, r3 | r3 &= r3;
0x000917da lsrs r3, r3, 5 | r3 >>= 5;
0x000917dc ands.w r3, r3, r2, lsr 14 | r3 &= (r2 >> 14);
| if (r3 != r3) {
0x000917e0 bne 0x9180c | goto label_80;
| }
| label_8:
0x000917e2 str r3, [sp, 0x28] | var_28h = r3;
0x000917e4 b 0x9128e | goto label_5;
| label_49:
0x000917e6 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000917e8 ldrb.w r3, [r2, 0x96] | r3 = *((r2 + 0x96));
0x000917ec orr r3, r3, 0x10 | r3 |= 0x10;
0x000917f0 strb.w r3, [r2, 0x96] | *((r2 + 0x96)) = r3;
0x000917f4 b 0x9136c | goto label_6;
| label_48:
0x000917f6 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x000917f8 cmp r3, 0 |
| if (r3 == 0) {
0x000917fa beq 0x91880 | goto label_81;
| }
| label_14:
0x000917fc mov r0, r4 | r0 = r4;
0x000917fe bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x00091802 str r0, [sp, 0x2c] | var_2ch = r0;
0x00091804 cmp r0, 0 |
| if (r0 != 0) {
0x00091806 bne.w 0x91364 | goto label_7;
| }
0x0009180a b 0x91298 | goto label_1;
| label_80:
0x0009180c ldr r0, [r5, 0x3c] | r0 = *((r5 + 0x3c));
0x0009180e movs r2, 0 | r2 = 0;
0x00091810 ldr r1, [r5] | r1 = *(r5);
0x00091812 adds r0, 0x38 | r0 += 0x38;
0x00091814 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x00091818 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0009181a str r3, [sp, 0x28] | var_28h = r3;
0x0009181c cmp r3, 0 |
| if (r3 == 0) {
0x0009181e beq.w 0x91ad6 | goto label_82;
| }
0x00091822 movs r3, 0 | r3 = 0;
0x00091824 mov.w sl, 1 | sl = 1;
0x00091828 str r3, [sp, 0x24] | var_24h = r3;
0x0009182a b 0x917e2 | goto label_8;
| label_64:
0x0009182c movs r3, 0 | r3 = 0;
0x0009182e ldr r2, [sp, 0x44] | r2 = var_44h;
0x00091830 str r3, [sp] | *(sp) = r3;
0x00091832 movs r1, 0x56 | r1 = 0x56;
0x00091834 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091836 movs r3, 1 | r3 = 1;
0x00091838 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0009183c b 0x915a4 | goto label_9;
| label_50:
0x0009183e ldr r3, [sp, 0x30] | r3 = var_30h;
0x00091840 mov r2, r6 | r2 = r6;
0x00091842 mov r1, r5 | r1 = r5;
0x00091844 mov r0, r4 | r0 = r4;
0x00091846 bl 0x773a8 | fcn_000773a8 (r0, r1, r2, r3);
0x0009184a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009184c strd r3, r3, [sp, 0x6c] | __asm ("strd r3, r3, [var_6ch]");
0x00091850 b 0x9137e | goto label_10;
| label_59:
0x00091852 str r2, [sp] | *(sp) = r2;
0x00091854 movs r1, 0x4b | r1 = 0x4b;
0x00091856 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00091858 mov r8, r2 | r8 = r2;
0x0009185a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x0009185c str r2, [sp, 0x50] | var_50h = r2;
0x0009185e adds r3, 1 | r3++;
0x00091860 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x00091862 str r3, [sp, 0x58] | var_58h = r3;
0x00091864 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00091868 movs r2, 1 | r2 = 1;
0x0009186a strd r8, r8, [sp, 0x48] | __asm ("strd r8, r8, [var_4ch]");
0x0009186e str r2, [sp, 0x38] | var_38h = r2;
0x00091870 b 0x91550 | goto label_11;
| label_53:
0x00091872 mov.w sl, 0x14 | sl = 0x14;
0x00091876 b 0x914c0 | goto label_12;
| label_46:
0x00091878 mov r8, sb | r8 = sb;
0x0009187a str.w sb, [sp, 0x40] | __asm ("str.w sb, [var_40h]");
0x0009187e b 0x9130a | goto label_13;
| label_81:
0x00091880 ldr r3, [r4] | r3 = *(r4);
0x00091882 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x00091884 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x00091886 itt pl |
| if (r3 < r3) {
0x00091888 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x0009188a strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x0009188c b 0x917fc | goto label_14;
| label_63:
0x0009188e movs r3, 0 | r3 = 0;
0x00091890 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00091892 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091894 movs r1, 0x8f | r1 = 0x8f;
0x00091896 str r3, [sp] | *(sp) = r3;
0x00091898 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x0009189c b 0x9159c | goto label_15;
| label_24:
0x0009189e str.w sl, [sp, 0x4c] | __asm ("str.w sl, [var_4ch]");
| label_67:
0x000918a2 add.w r2, sb, 2 | r2 = sb + 2;
0x000918a6 mov r0, r7 | r0 = r7;
0x000918a8 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000918aa bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x000918ae mov r3, r0 | r3 = r0;
0x000918b0 str r0, [sp, 0x54] | var_54h = r0;
0x000918b2 cmp r0, 0 |
| if (r0 == 0) {
0x000918b4 beq.w 0x91bfa | goto label_83;
| }
0x000918b8 add.w r2, sb, 1 | r2 = sb + 1;
0x000918bc movs r1, 1 | r1 = 1;
0x000918be blx 0x839c | fcn_0000839c ();
0x000918c2 ldr r1, [sp, 0x54] | r1 = var_54h;
0x000918c4 movs r2, 0 | r2 = 0;
0x000918c6 add sb, r1 | sb += r1;
0x000918c8 strb.w r2, [sb, 1] | *((sb + 1)) = r2;
0x000918cc ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x000918ce cmp r3, r2 |
0x000918d0 ittt ge |
| if (r3 < r2) {
0x000918d2 ldrge r0, [sp, 0x30] | r0 = var_30h;
| }
| if (r3 < r2) {
0x000918d4 subge r3, r3, r0 | r3 -= r0;
| }
| if (r3 < r2) {
0x000918d6 strbge r2, [r1, r3] | *((r1 + r3)) = r2;
| }
0x000918d8 ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x000918da cmp r3, 0 |
| if (r3 >= 0) {
0x000918dc blt 0x918e8 |
0x000918de ldr r2, [sp, 0x30] | r2 = var_30h;
0x000918e0 ldr r1, [sp, 0x54] | r1 = var_54h;
0x000918e2 subs r3, r3, r2 | r3 -= r2;
0x000918e4 movs r2, 0 | r2 = 0;
0x000918e6 strb r2, [r1, r3] | *((r1 + r3)) = r2;
| }
0x000918e8 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000918ea cmp r3, 0 |
| if (r3 != 0) {
0x000918ec bne.w 0x91b84 | goto label_84;
| }
| label_31:
0x000918f0 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000918f2 add.w sb, r3, -1 | sb = r3 + -1;
0x000918f6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000918f8 str.w sb, [r4, 0x38] | __asm ("str.w sb, [r4, 0x38]");
0x000918fc cmp r3, 2 |
| if (r3 == 2) {
0x000918fe beq.w 0x91b4e | goto label_34;
| }
0x00091902 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00091904 cmp r3, 2 |
| if (r3 == 2) {
0x00091906 beq.w 0x91aea | goto label_85;
| }
0x0009190a ldr r3, [sp, 0x54] | r3 = var_54h;
0x0009190c movs r2, 0x71 | r2 = 0x71;
0x0009190e mov r1, r5 | r1 = r5;
0x00091910 mov r0, r4 | r0 = r4;
0x00091912 str r3, [sp, 4] | var_4h = r3;
0x00091914 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00091916 str r3, [sp] | *(sp) = r3;
0x00091918 add r3, sp, 0x70 | r3 += var_70h;
0x0009191a str r3, [sp, 0xc] | var_ch = r3;
0x0009191c add r3, sp, 0x6c | r3 += var_6ch;
0x0009191e str r3, [sp, 8] | var_8h = r3;
0x00091920 movs r3, 8 | r3 = 8;
0x00091922 bl 0x2fe28 | fcn_0002fe28 (r0, r1, r2, r3, r4, r5, r6);
0x00091926 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00091928 ldr.w sl, [sp, 0x4c] | sl = var_4ch;
0x0009192c cmp r3, 0 |
| if (r3 == 0) {
0x0009192e beq.w 0x9166e | goto label_16;
| }
| label_30:
0x00091932 ldrb.w r3, [r5, 0x2b] | r3 = *((r5 + 0x2b));
0x00091936 cmp r3, 1 |
| if (r3 == 1) {
0x00091938 beq.w 0x91a96 | goto label_86;
| }
0x0009193c ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009193e ldr r2, [sp, 0x30] | r2 = var_30h;
0x00091940 ldr r1, [sp, 0x54] | r1 = var_54h;
0x00091942 subs r2, r3, r2 | r2 = r3 - r2;
0x00091944 ldrb r2, [r1, r2] | r2 = *((r1 + r2));
0x00091946 cmp r2, 0 |
| if (r2 != 0) {
0x00091948 bne.w 0x91b66 | goto label_87;
| }
| label_21:
0x0009194c ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009194e mov r1, r5 | r1 = r5;
0x00091950 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x00091952 strd sl, r2, [sp, 4] | __asm ("strd sl, r2, [var_8h]");
0x00091956 str r0, [sp, 0x14] | var_14h = r0;
0x00091958 ldrb r0, [r4, 0x12] | r0 = *((r4 + 0x12));
0x0009195a ldr r2, [sp, 0x28] | r2 = var_28h;
0x0009195c clz r0, r0 | r0 &= r0;
0x00091960 lsrs r0, r0, 5 | r0 >>= 5;
0x00091962 str r0, [sp, 0xc] | var_ch = r0;
0x00091964 ldr r0, [sp, 0xa0] | r0 = var_a0h;
0x00091966 str r0, [sp, 0x18] | var_18h = r0;
0x00091968 ldr r0, [sp, 0x70] | r0 = var_70h;
0x0009196a str r0, [sp] | *(sp) = r0;
0x0009196c movs r0, 0xb | r0 = 0xb;
0x0009196e str r0, [sp, 0x10] | var_10h = r0;
0x00091970 mov r0, r4 | r0 = r4;
0x00091972 bl 0x8de04 | fcn_0008de04 (r0, r1, r2, r3, r4, r5, r6);
0x00091976 b 0x91740 | goto label_17;
| label_23:
0x00091978 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009197a add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x0009197e ldr r3, [r0, 0x68] | r3 = *((r0 + 0x68));
0x00091980 add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
0x00091984 b 0x9178c | goto label_18;
| label_75:
0x00091986 movs r3, 0 | r3 = 0;
0x00091988 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009198a str r3, [sp] | *(sp) = r3;
0x0009198c movs r1, 0x7a | r1 = 0x7a;
0x0009198e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091990 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00091994 ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x00091996 cmp r3, 0 |
| if (r3 == 0) {
0x00091998 beq.w 0x91c10 | goto label_88;
| }
| label_36:
0x0009199c ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x0009199e mvn r3, 0xa | r3 = ~0xa;
0x000919a2 str r3, [sp, 8] | var_8h = r3;
0x000919a4 movs r2, 0 | r2 = 0;
0x000919a6 movs r3, 1 | r3 = 1;
0x000919a8 movs r1, 7 | r1 = 7;
0x000919aa mov r0, r5 | r0 = r5;
0x000919ac strd sl, sb, [sp] | __asm ("strd sl, sb, [sp]");
0x000919b0 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000919b4 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x000919b6 cmp r3, 0 |
| if (r3 > 0) {
0x000919b8 bgt.w 0x91726 | goto label_19;
| }
0x000919bc ldr.w sb, [sp, 0x34] | sb = var_34h;
| label_76:
0x000919c0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000919c2 mvn.w r2, sb | r2 = ~sb;
0x000919c6 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000919c8 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000919cc cmn r1, r3 |
| if (r1 < r3) {
0x000919ce bmi.w 0x91bbe | goto label_89;
| }
0x000919d2 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000919d4 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000919d6 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x000919d8 str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
| label_32:
0x000919dc ldr r0, [sp, 0x40] | r0 = var_40h;
0x000919de bl 0x73e14 | fcn_00073e14 (r0, r1);
0x000919e2 ldr r5, [sp, 0x54] | r5 = var_54h;
0x000919e4 b 0x91790 | goto label_20;
| label_71:
0x000919e6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000919e8 ldr.w sb, [sp, 0x34] | sb = var_34h;
0x000919ec str r3, [sp, 0x34] | var_34h = r3;
0x000919ee ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000919f0 b 0x9194c | goto label_21;
| label_54:
0x000919f2 ldr r3, [sp, 0x94] | r3 = var_94h;
0x000919f4 eor r3, r3, 0x40 | r3 ^= 0x40;
0x000919f8 ubfx r3, r3, 6, 1 | r3 = (r3 >> 6) & ((1 << 1) - 1);
0x000919fc lsls r3, r3, 3 | r3 <<= 3;
0x000919fe orr sl, r3, 0x14 | sl = r3 | 0x14;
0x00091a02 b 0x914c0 | goto label_12;
| label_57:
0x00091a04 ldr r7, [sp, 0x28] | r7 = var_28h;
| label_56:
0x00091a06 movs r5, 0 | r5 = 0;
0x00091a08 b 0x91790 | goto label_20;
| label_62:
0x00091a0a movs r3, 0 | r3 = 0;
0x00091a0c mov r2, r0 | r2 = r0;
0x00091a0e str r3, [sp] | *(sp) = r3;
0x00091a10 movs r1, 0x76 | r1 = 0x76;
0x00091a12 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00091a14 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091a16 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00091a1a str r0, [sp, 0x50] | var_50h = r0;
0x00091a1c b 0x91544 | goto label_22;
| label_77:
0x00091a1e ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x00091a22 ldr r5, [sp, 0x2c] | r5 = var_2ch;
0x00091a24 mov r1, r8 | r1 = r8;
0x00091a26 mov r0, r5 | r0 = r5;
0x00091a28 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x00091a2c ldr r2, [r5, 0x6c] | r2 = *((r5 + 0x6c));
0x00091a2e mov r3, r8 | r3 = r8;
0x00091a30 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091a32 cmp r3, 0 |
0x00091a34 itt lt |
| if (r3 >= 0) {
0x00091a36 addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r3 < 0) {
0x00091a3a str r3, [sp, 0x34] | var_34h = r3;
| }
0x00091a3c ldr r3, [r0] | r3 = *(r0);
0x00091a3e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x00091a42 cmp r3, 0 |
| if (r3 == 0) {
0x00091a44 beq 0x91978 | goto label_23;
| }
0x00091a46 ldr r3, [pc, 0x228] |
0x00091a48 add r3, pc | r3 = 0x1236be;
0x00091a4a adds r3, 4 | r3 += 4;
0x00091a4c b 0x9178c | goto label_18;
| label_65:
0x00091a4e str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00091a52 movs r1, 0x87 | r1 = 0x87;
0x00091a54 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x00091a56 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00091a58 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091a5a add.w sl, r3, 1 | sl = r3 + 1;
0x00091a5e mov r3, sl | r3 = sl;
0x00091a60 str.w sl, [r4, 0x2c] | __asm ("str.w sl, [r4, 0x2c]");
0x00091a64 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00091a68 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00091a6a cmp r3, 0 |
| if (r3 != 0) {
0x00091a6c bne.w 0x9189e | goto label_24;
| }
0x00091a70 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00091a72 movs r1, 0x9c | r1 = 0x9c;
0x00091a74 ldr r2, [sp, 0x58] | r2 = var_58h;
0x00091a76 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091a78 str r3, [sp] | *(sp) = r3;
0x00091a7a mov r3, sl | r3 = sl;
0x00091a7c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00091a80 movs r3, 1 | r3 = 1;
0x00091a82 str r3, [sp, 0x38] | var_38h = r3;
0x00091a84 b 0x9163a | goto label_25;
| label_78:
0x00091a86 ldr r3, [r4, 0x70] | r3 = *((r4 + 0x70));
0x00091a88 cmp r3, 0 |
| if (r3 == 0) {
0x00091a8a beq.w 0x9179c | goto label_26;
| }
0x00091a8e mov r0, r4 | r0 = r4;
0x00091a90 bl 0x2fd68 | fcn_0002fd68 (r0, r1);
0x00091a94 b 0x9179c | goto label_26;
| label_86:
0x00091a96 movs r3, 0 | r3 = 0;
0x00091a98 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x00091a9c str r3, [sp, 0x24] | var_24h = r3;
0x00091a9e b 0x916d4 | goto label_27;
| label_68:
0x00091aa0 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00091aa2 cmp r2, r3 |
| if (r2 >= r3) {
0x00091aa4 bge.w 0x91c14 | goto label_90;
| }
0x00091aa8 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00091aaa mov.w ip, 0x2d |
0x00091aae ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091ab0 add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x00091ab4 ldr r1, [r0, 0x68] | r1 = *((r0 + 0x68));
0x00091ab6 adds r2, 1 | r2++;
0x00091ab8 str r2, [r0, 0x6c] | *((r0 + 0x6c)) = r2;
0x00091aba lsls r3, r3, 2 | r3 <<= 2;
0x00091abc ldr r0, [sp, 0x58] | r0 = var_58h;
0x00091abe adds r2, r1, r3 | r2 = r1 + r3;
0x00091ac0 strd sl, r8, [r2, 0xc] | __asm ("strd sl, r8, [r2, 0xc]");
0x00091ac4 strd r0, r8, [r2, 4] | __asm ("strd r0, r8, [r2, 4]");
0x00091ac8 str.w ip, [r1, r3] | __asm ("str.w ip, [r1, r3]");
0x00091acc b 0x916ca | goto label_28;
| label_58:
0x00091ace ldr r3, [pc, 0x1a4] |
0x00091ad0 add r3, pc | r3 = 0x12374a;
0x00091ad2 adds r3, 4 | r3 += 4;
0x00091ad4 b 0x914a4 | goto label_29;
| label_82:
0x00091ad6 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x00091ad8 subs.w sl, r3, 0 | sl = r3 - 0;
0x00091adc ldr r3, [sp, 0x28] | r3 = var_28h;
0x00091ade it ne |
| if (sl == r3) {
0x00091ae0 movne sl, 1 | sl = 1;
| }
0x00091ae4 str r3, [sp, 0x24] | var_24h = r3;
0x00091ae6 b.w 0x9128e | goto label_5;
| label_85:
0x00091aea ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00091aec ldrd sl, r3, [r3, 0x6c] | __asm ("ldrd sl, r3, [r3, 0x6c]");
0x00091af0 cmp sl, r3 |
| if (sl >= r3) {
0x00091af2 bge.w 0x91c40 | goto label_91;
| }
0x00091af6 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00091af8 add.w r2, sl, sl, lsl 2 | r2 = sl + (sl << 2);
0x00091afc add.w r0, sl, 1 | r0 = sl + 1;
0x00091b00 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00091b04 lsls r2, r2, 2 | r2 <<= 2;
0x00091b06 movs r1, 0 | r1 = 0;
0x00091b08 ldr.w ip, [r3, 0x68] | ip = *((r3 + 0x68));
0x00091b0c str r0, [r3, 0x6c] | *((r3 + 0x6c)) = r0;
0x00091b0e movs r0, 0xe | r0 = 0xe;
0x00091b10 add.w r3, ip, r2 | r3 = ip + r2;
0x00091b14 str.w r0, [ip, r2] | __asm ("str.w r0, [ip, r2]");
0x00091b18 adds r2, r3, 4 | r2 = r3 + 4;
0x00091b1a vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00091b1e strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_37:
0x00091b22 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00091b24 movs r2, 0x71 | r2 = 0x71;
0x00091b26 mov r1, r5 | r1 = r5;
0x00091b28 mov r0, r4 | r0 = r4;
0x00091b2a str r3, [sp, 4] | var_4h = r3;
0x00091b2c ldr r3, [sp, 0x30] | r3 = var_30h;
0x00091b2e str r3, [sp] | *(sp) = r3;
0x00091b30 add r3, sp, 0x70 | r3 += var_70h;
0x00091b32 str r3, [sp, 0xc] | var_ch = r3;
0x00091b34 add r3, sp, 0x6c | r3 += var_6ch;
0x00091b36 str r3, [sp, 8] | var_8h = r3;
0x00091b38 movs r3, 8 | r3 = 8;
0x00091b3a bl 0x2fe28 | fcn_0002fe28 (r0, r1, r2, r3, r4, r5, r6);
0x00091b3e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00091b40 ldr r3, [r3, 0x6c] | r3 = *((r3 + 0x6c));
0x00091b42 subs r2, r3, 1 | r2 = r3 - 1;
0x00091b44 cmp sl, r2 |
| if (sl != r2) {
0x00091b46 bne 0x91bd8 | goto label_92;
| }
0x00091b48 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00091b4a str.w sl, [r3, 0x6c] | __asm ("str.w sl, [r3, 0x6c]");
| label_34:
0x00091b4e ldr.w sl, [sp, 0x4c] | sl = var_4ch;
0x00091b52 b 0x91932 | goto label_30;
| label_70:
0x00091b54 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00091b56 movs r3, 0 | r3 = 0;
0x00091b58 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091b5a movs r1, 0x5e | r1 = 0x5e;
0x00091b5c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00091b60 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x00091b64 b 0x916ca | goto label_28;
| label_87:
0x00091b66 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x00091b68 movs r1, 0x1b | r1 = 0x1b;
0x00091b6a ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091b6c str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x00091b70 str r2, [sp] | *(sp) = r2;
0x00091b72 mov r2, r3 | r2 = r3;
0x00091b74 ldr r3, [sp, 0x38] | r3 = var_38h;
0x00091b76 str r3, [sp, 4] | var_4h = r3;
0x00091b78 mov r3, sb | r3 = sb;
0x00091b7a bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x00091b7e movs r3, 0 | r3 = 0;
0x00091b80 str r3, [sp, 0x24] | var_24h = r3;
0x00091b82 b 0x916ca | goto label_28;
| label_84:
0x00091b84 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00091b86 ldr r0, [r2] | r0 = *(r2);
0x00091b88 ldrb.w sl, [r0, 0x57] | sl = *((r0 + 0x57));
0x00091b8c cmp.w sl, 0 |
| if (sl != 0) {
0x00091b90 bne.w 0x918f0 | goto label_31;
| }
0x00091b94 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00091b98 ldr r1, [r2, 0x68] | r1 = *((r2 + 0x68));
0x00091b9a lsls r3, r3, 2 | r3 <<= 2;
0x00091b9c str r1, [sp, 0x50] | var_50h = r1;
0x00091b9e add.w sb, r1, r3 | sb = r1 + r3;
0x00091ba2 str r3, [sp, 0x5c] | var_5ch = r3;
0x00091ba4 ldr.w r2, [sb, 0x10] | r2 = *((sb + 0x10));
0x00091ba8 ldrsb.w r1, [sb, 1] | r1 = *((sb + 1));
0x00091bac bl 0x1c888 | fcn_0001c888 (r0);
0x00091bb0 ldr r1, [sp, 0x50] | r1 = var_50h;
0x00091bb2 movs r2, 0xb8 | r2 = 0xb8;
0x00091bb4 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00091bb6 str.w sl, [sb, 0x10] | __asm ("str.w sl, [sb, 0x10]");
0x00091bba strh r2, [r1, r3] | *((r1 + r3)) = r2;
0x00091bbc b 0x918f0 | goto label_31;
| label_89:
0x00091bbe ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00091bc0 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x00091bc4 b 0x919dc | goto label_32;
| label_69:
0x00091bc6 movs r3, 0 | r3 = 0;
0x00091bc8 ldr r2, [sp, 0x48] | r2 = var_48h;
0x00091bca ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091bcc movs r1, 0x23 | r1 = 0x23;
0x00091bce str r3, [sp] | *(sp) = r3;
0x00091bd0 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00091bd4 str r0, [sp, 0x24] | var_24h = r0;
0x00091bd6 b 0x916b0 | goto label_33;
| label_92:
0x00091bd8 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00091bda bics.w sl, sl, sl, asr 32 | __asm ("bics.w sl, sl, sl, asr 32");
0x00091bde it hs |
| if (r1 < 0x23) {
0x00091be0 movhs sl, r2 | sl = r2;
| }
0x00091be2 ldr r2, [r1] | r2 = *(r1);
0x00091be4 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
| if (r2 != 0) {
0x00091be8 cbnz r2, 0x91c08 | goto label_93;
| }
0x00091bea ldr r2, [r1, 0x68] | r2 = *((r1 + 0x68));
0x00091bec movs r1, 0x14 | r1 = 0x14;
0x00091bee mla r2, r1, sl, r2 | __asm ("mla r2, r1, sl, r2");
| do {
0x00091bf2 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x00091bf4 b 0x91b4e | goto label_34;
| label_43:
0x00091bf6 ldr r3, [r4] | r3 = *(r4);
0x00091bf8 b 0x917d2 | goto label_35;
| label_83:
0x00091bfa ldr r0, [sp, 0x40] | r0 = var_40h;
0x00091bfc mov r5, r3 | r5 = r3;
0x00091bfe bl 0x73e14 | fcn_00073e14 (r0, r1);
0x00091c02 ldr r3, [sp, 0x78] | r3 = var_78h;
0x00091c04 b.w 0x9129c | goto label_3;
| label_93:
0x00091c08 ldr r2, [pc, 0x6c] |
0x00091c0a add r2, pc | r2 = 0x123886;
0x00091c0c adds r2, 4 | r2 += 4;
0x00091c0e b 0x91bf2 |
| } while (1);
| label_88:
0x00091c10 strb r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x00091c12 b 0x9199c | goto label_36;
| label_90:
0x00091c14 ldr r2, [sp, 0x58] | r2 = var_58h;
0x00091c16 mov r3, r8 | r3 = r8;
0x00091c18 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091c1a movs r1, 0x2d | r1 = 0x2d;
0x00091c1c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00091c20 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00091c24 str r0, [sp, 0x24] | var_24h = r0;
0x00091c26 b 0x916ca | goto label_28;
| label_45:
0x00091c28 movs r3, 0 | r3 = 0;
0x00091c2a mov.w r8, 0x8000 | r8 = 0x8000;
0x00091c2e movt r3, 0xfff8 | r3 = (r3 & 0xFFFF) | 0xfff80000;
0x00091c32 sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x00091c36 movt r8, 0xffff | r8 = (r8 & 0xFFFF) | 0xffff0000;
0x00091c3a str r3, [sp, 0x40] | var_40h = r3;
0x00091c3c b.w 0x9130a | goto label_13;
| label_91:
0x00091c40 movs r3, 0 | r3 = 0;
0x00091c42 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00091c44 mov r2, r3 | r2 = r3;
0x00091c46 movs r1, 0xe | r1 = 0xe;
0x00091c48 str r3, [sp] | *(sp) = r3;
0x00091c4a bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x00091c4e mov sl, r0 | sl = r0;
0x00091c50 b 0x91b22 | goto label_37;
| label_39:
0x00091c52 blx 0x883c | fcn_0000883c ();
| label_61:
0x00091c56 movs r3, 0 | r3 = 0;
0x00091c58 ldrh r3, [r3, 0x32] | r3 = *((r3 + 0x32));
0x00091c5a udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x92204 */
| #include <stdint.h>
|
; (fcn) fcn.00092204 () | void fcn_00092204 (int16_t arg_30h, int16_t arg_34h, int16_t arg1, int16_t arg3, int16_t arg4) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00092204 invalid |
0x00092208 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0009220c movt r1, 0x51d0 | r1 = (r1 & 0xFFFF) | 0x51d00000;
0x00092210 mov r4, r2 | r4 = r2;
0x00092212 umull r2, r1, r1, r4 | r2:r1 = r1 * r4;
0x00092216 mov r5, r3 | r5 = r3;
0x00092218 sub sp, 0x10 |
0x0009221a mov r6, r0 | r6 = r0;
0x0009221c ldr r7, [sp, 0x30] | r7 = *(arg_30h);
0x0009221e subs r3, r4, r1 | r3 = r4 - r1;
0x00092220 add.w r1, r1, r3, lsr 1 | r1 += (r3 >> 1);
0x00092224 lsrs r1, r1, 6 | r1 >>= 6;
0x00092226 add.w r3, r1, r1, lsl 1 | r3 = r1 + (r1 << 1);
0x0009222a add.w r1, r1, r3, lsl 5 | r1 += (r3 << 5);
0x0009222e subs r1, r4, r1 | r1 = r4 - r1;
0x00092230 add.w r1, r0, r1, lsl 2 | r1 = r0 + (r1 << 2);
0x00092234 ldr r1, [r1, 0x74] | r1 = *((r1 + 0x74));
| if (r1 != 0) {
0x00092236 cbnz r1, 0x9223e | goto label_7;
| }
0x00092238 b 0x92276 | goto label_8;
| do {
0x0009223a ldr r1, [r1, 0x1c] | r1 = *((r1 + 0x1c));
| if (r1 == 0) {
0x0009223c cbz r1, 0x92276 | goto label_8;
| }
| label_7:
0x0009223e ldrd r2, r3, [r1, 8] | __asm ("ldrd r2, r3, [r1, 8]");
0x00092242 cmp r5, r3 |
0x00092244 it eq |
| if (r5 == r3) {
0x00092246 cmpeq r4, r2 | __asm ("cmpeq r4, r2");
| }
0x00092248 bne 0x9223a |
| } while (r5 != r3);
| if (r7 != 0) {
0x0009224a cbz r7, 0x92260 |
0x0009224c ldr r3, [r1] | r3 = *(r1);
0x0009224e cmp r3, r7 |
0x00092250 it ne |
| if (r3 != r7) {
0x00092252 movwne r8, 0x10b | __asm ("movwne r8, aav.0x000000ff");
| }
| if (r3 == r7) {
0x00092256 beq 0x92260 | goto label_9;
| }
| label_2:
0x00092258 mov r0, r8 | r0 = r8;
0x0009225a add sp, 0x10 |
0x0009225c pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| }
| label_9:
0x00092260 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x00092262 mov.w r8, 0 | r8 = 0;
0x00092266 mov r0, r8 | r0 = r8;
0x00092268 adds r3, 1 | r3++;
0x0009226a str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
0x0009226c ldr r3, [sp, 0x34] | r3 = *(arg_34h);
0x0009226e str r1, [r3] | *(r3) = r1;
0x00092270 add sp, 0x10 |
0x00092272 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_8:
0x00092276 ldr.w sb, [r6, 0x4c] | sb = *((r6 + 0x4c));
0x0009227a cmp.w sb, 0 |
| if (sb == 0) {
0x0009227e beq 0x922d0 | goto label_10;
| }
0x00092280 movs r3, 0 | r3 = 0;
0x00092282 mov r2, r4 | r2 = r4;
0x00092284 str r3, [r6, 0x4c] | *((r6 + 0x4c)) = r3;
0x00092286 mov r0, sb | r0 = sb;
0x00092288 mov r3, r5 | r3 = r5;
0x0009228a blx 0x8688 | fcn_00008688 ();
0x0009228e str.w sb, [r6, 0x4c] | __asm ("str.w sb, [r6, 0x4c]");
0x00092292 mov r8, r0 | r8 = r0;
0x00092294 cmp r0, 0 |
| if (r0 != 0) {
0x00092296 bne 0x92332 | goto label_11;
| }
| do {
0x00092298 ldr.w r8, [r6, 0x10] | r8 = *((r6 + 0x10));
0x0009229c mov r0, sb | r0 = sb;
0x0009229e blx 0x85dc | r0 = fcn_000085dc ();
0x000922a2 cmp r8, r0 |
0x000922a4 itt ne |
| if (r8 == r0) {
0x000922a6 movne sb, 0 | sb = 0;
| }
| if (r8 != r0) {
0x000922aa movw r8, 0x10b | r8 = 0x10b;
| }
| if (r8 == r0) {
0x000922ae beq 0x9234c | goto label_12;
| }
| label_4:
0x000922b0 ldr r3, [sp, 0x34] | r3 = *(arg_34h);
0x000922b2 mov r0, r8 | r0 = r8;
0x000922b4 str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x000922b8 add sp, 0x10 |
0x000922ba pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x000922be mov r0, sb | r0 = sb;
0x000922c0 str r3, [r6, 0x4c] | *((r6 + 0x4c)) = r3;
0x000922c2 blx 0x8b04 | fcn_00008b04 ();
0x000922c6 cmp.w r8, 7 |
| if (r8 == 7) {
0x000922ca beq 0x92346 | goto label_13;
| }
0x000922cc ldr r0, [r6, 0x4c] | r0 = *((r6 + 0x4c));
| if (r0 == 0) {
0x000922ce cbnz r0, 0x9230e |
| label_10:
0x000922d0 ldr r0, [pc, 0x148] |
0x000922d2 ldr r1, [r6, 0x24] | r1 = *((r6 + 0x24));
0x000922d4 add r0, pc | r0 = 0x1246f4;
0x000922d6 blx 0x8644 | r0 = fcn_00008644 ();
0x000922da mov sb, r0 | sb = r0;
0x000922dc cmp r0, 0 |
| if (r0 == 0) {
0x000922de beq 0x92346 | goto label_13;
| }
0x000922e0 add.w r3, r6, 0x4c | r3 = r6 + 0x4c;
0x000922e4 strd r4, r5, [sp] | __asm ("strd r4, r5, [sp]");
0x000922e8 str r3, [sp, 0xc] | var_ch = r3;
0x000922ea movs r3, 0 | r3 = 0;
0x000922ec str r3, [sp, 8] | var_8h = r3;
0x000922ee mov r2, sb | r2 = sb;
0x000922f0 ldr r3, [pc, 0x12c] |
0x000922f2 ldr r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x000922f4 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000922f6 add r3, pc | r3 = 0x12471a;
0x000922f8 blx 0x8b78 | r0 = fcn_00008b78 ();
0x000922fc mov r8, r0 | r8 = r0;
0x000922fe mov r0, sb | r0 = sb;
0x00092300 blx 0x8404 | fcn_00008404 ();
0x00092304 cmp.w r8, 0 |
| if (r8 == 0) {
0x00092308 beq 0x9232c | goto label_14;
| }
0x0009230a ldr r0, [r6, 0x4c] | r0 = *((r6 + 0x4c));
| if (r0 == 0) {
0x0009230c cbz r0, 0x92318 | goto label_6;
| }
| }
0x0009230e ldrb r3, [r6, 0x18] | r3 = *((r6 + 0x18));
| if (r3 == 0) {
| label_1:
0x00092310 cbnz r3, 0x92318 |
0x00092312 ldr r2, [r6, 0x38] | r2 = *((r6 + 0x38));
0x00092314 cmp r2, 0 |
| if (r2 == 0) {
0x00092316 beq 0x92408 | goto label_15;
| }
| }
| label_6:
0x00092318 cmp.w r8, 1 |
| if (r8 == 1) {
0x0009231c beq 0x92416 | goto label_16;
| }
| label_3:
0x0009231e ldr r2, [sp, 0x34] | r2 = *(arg_34h);
0x00092320 movs r3, 0 | r3 = 0;
0x00092322 mov r0, r8 | r0 = r8;
0x00092324 str r3, [r2] | *(r2) = r3;
0x00092326 add sp, 0x10 |
0x00092328 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_14:
0x0009232c ldr.w sb, [r6, 0x4c] | sb = *((r6 + 0x4c));
0x00092330 b 0x92298 |
| } while (1);
| label_11:
0x00092332 ldrb r3, [r6, 0x18] | r3 = *((r6 + 0x18));
| if (r3 != 0) {
0x00092334 cbnz r3, 0x9233c | goto label_17;
| }
0x00092336 ldr r2, [r6, 0x38] | r2 = *((r6 + 0x38));
0x00092338 cmp r2, 0 |
| if (r2 == 0) {
0x0009233a beq 0x922be | goto label_0;
| }
| label_17:
0x0009233c cmp.w r8, 7 |
0x00092340 it ne |
| if (r8 != 7) {
0x00092342 ldrne r0, [r6, 0x4c] | r0 = *((r6 + 0x4c));
| goto label_18;
| }
| if (r8 != 7) {
| label_18:
0x00092344 bne 0x92310 | goto label_1;
| }
| label_13:
0x00092346 mov.w r8, 7 | r8 = 7;
0x0009234a b 0x92258 | goto label_2;
| label_12:
0x0009234c ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x0009234e mov.w r8, 0 | r8 = 0;
0x00092352 mov r1, r8 | r1 = r8;
0x00092354 adds r0, 0x20 | r0 += 0x20;
0x00092356 blx 0x8240 | r0 = fcn_00008240 ();
0x0009235a mov sb, r0 | sb = r0;
0x0009235c cmp r0, 0 |
| if (r0 == 0) {
0x0009235e beq 0x92410 | goto label_19;
| }
0x00092360 ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x00092362 mov r1, r0 | r1 = r0;
0x00092364 movs r2, 1 | r2 = 1;
0x00092366 str r7, [r1], 0x20 | *(r1) = r7;
| r1 += 0x20;
0x0009236a str r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
0x0009236c adds r3, 1 | r3++;
0x0009236e str r1, [r0, 0x18] | *((r0 + 0x18)) = r1;
0x00092370 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x00092372 str r3, [r6, 0x3c] | *((r6 + 0x3c)) = r3;
0x00092374 mov r3, r8 | r3 = r8;
0x00092376 str.w r8, [r0, 0x14] | __asm ("str.w r8, [r0, 0x14]");
0x0009237a str.w r8, [r0, 0x1c] | __asm ("str.w r8, [r0, 0x1c]");
0x0009237e strd r4, r5, [r0, 8] | __asm ("strd r4, r5, [r0, 8]");
0x00092382 ldr r0, [r6, 0x4c] | r0 = *((r6 + 0x4c));
0x00092384 blx 0x84cc | r0 = memcpy_chk ();
0x00092388 mov r8, r0 | r8 = r0;
| if (r0 != 0) {
0x0009238a cbnz r0, 0x923b0 | goto label_20;
| }
0x0009238c subs r4, 1 | r4--;
0x0009238e ldr.w sl, [sb, 0x18] | sl = *((sb + 0x18));
0x00092392 orrs r4, r5 | r4 |= r5;
| if (r4 == r5) {
0x00092394 beq 0x923f8 | goto label_21;
| }
| label_5:
0x00092396 ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x00092398 ldrb r1, [r6, 0x17] | r1 = *((r6 + 0x17));
0x0009239a subs r0, 4 | r0 -= 4;
0x0009239c bl 0xb1ea8 | fcn_000b1ea8 (r0, r1);
0x000923a0 ldrh.w r3, [sl, 2] | r3 = *((sl + 2));
0x000923a4 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x000923a6 uxth r3, r3 | r3 = (int16_t) r3;
0x000923a8 cmp r0, r3 |
0x000923aa bge 0x923be |
| while (r3 > 0x28) {
0x000923ac movw r8, 0x10b | r8 = 0x10b;
| label_20:
0x000923b0 ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x000923b2 mov r0, sb | r0 = sb;
0x000923b4 subs r3, 1 | r3--;
0x000923b6 str r3, [r6, 0x3c] | *((r6 + 0x3c)) = r3;
0x000923b8 blx 0x8404 | fcn_00008404 ();
0x000923bc b 0x9231e | goto label_3;
| if (r7 != 0) {
0x000923be cbz r7, 0x923c6 |
0x000923c0 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000923c2 adds r3, 1 | r3++;
0x000923c4 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
| }
0x000923c6 ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x000923ca movw r3, 0x7eaf |
0x000923ce movt r3, 0x51d0 | r3 = 0x51d07eaf;
0x000923d2 umull r1, r3, r3, r2 | r1:r3 = r3 * r2;
0x000923d6 subs r1, r2, r3 | r1 = r2 - r3;
0x000923d8 add.w r3, r3, r1, lsr 1 | r3 += (r1 >> 1);
0x000923dc lsrs r3, r3, 6 | r3 >>= 6;
0x000923de add.w r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
0x000923e2 add.w r3, r3, r1, lsl 5 | r3 += (r1 << 5);
0x000923e6 subs r3, r2, r3 | r3 = r2 - r3;
0x000923e8 add.w r3, r6, r3, lsl 2 | r3 = r6 + (r3 << 2);
0x000923ec ldr r2, [r3, 0x74] | r2 = *((r3 + 0x74));
0x000923ee str.w r2, [sb, 0x1c] | __asm ("str.w r2, [sb, 0x1c]");
0x000923f2 str.w sb, [r3, 0x74] | __asm ("str.w sb, [r3, 0x74]");
0x000923f6 b 0x922b0 | goto label_4;
| label_21:
0x000923f8 ldrh.w r3, [sl] | r3 = *(sl);
0x000923fc rev16 r3, r3 | __asm ("rev16 r3, r3");
0x000923fe uxth r3, r3 | r3 = (int16_t) r3;
0x00092400 cmp r3, 0x28 |
0x00092402 str r3, [r6, 0x1c] | *((r6 + 0x1c)) = r3;
0x00092404 bgt 0x923ac |
| }
0x00092406 b 0x92396 | goto label_5;
| label_15:
0x00092408 str r3, [r6, 0x4c] | *((r6 + 0x4c)) = r3;
0x0009240a blx 0x8b04 | fcn_00008b04 ();
0x0009240e b 0x92318 | goto label_6;
| label_19:
0x00092410 mov.w r8, 7 | r8 = 7;
0x00092414 b 0x9231e | goto label_3;
| label_16:
0x00092416 movw r8, 0x10b | r8 = 0x10b;
0x0009241a b 0x9231e | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9258c */
| #include <stdint.h>
|
| #define SWAP64(val) ((uint64_t) (((val & 0x00000000000000ffull) << 56) | \
| ((val & 0x000000000000ff00ull) << 40) | \
| ((val & 0x0000000000ff0000ull) << 24) | \
| ((val & 0x00000000ff000000ull) << 8) | \
| ((val & 0x000000ff00000000ull) >> 8) | \
| ((val & 0x0000ff0000000000ull) >> 24) | \
| ((val & 0x00ff000000000000ull) >> 40) | \
| ((val & 0xff00000000000000ull) >> 56)))
|
; (fcn) fcn.0009258c () | void fcn_0009258c (int16_t arg1, int16_t arg3, arithmetic x) {
| r0 = arg1;
| r2 = arg3;
| r1 = x;
0x0009258c push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x00092590 mov r4, r1 | r4 = r1;
0x00092592 ldr r7, [r1] | r7 = *(r1);
0x00092594 mov r5, r0 | r5 = r0;
0x00092596 mov r6, r2 | r6 = r2;
0x00092598 cmp r7, 0 |
| if (r7 == 0) {
0x0009259a beq.w 0x926a6 | goto label_3;
| }
0x0009259e ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x000925a0 ldr r0, [r1, 8] | r0 = *((r1 + 8));
0x000925a2 ldr.w r8, [r1, 0xc] | r8 = *((r1 + 0xc));
0x000925a6 ldrh r1, [r3, 2] | r1 = *((r3 + 2));
0x000925a8 rev16 r1, r1 | __asm ("rev16 r1, r1");
0x000925aa uxth r1, r1 | r1 = (int16_t) r1;
0x000925ac cmp r1, 0 |
| if (r1 == 0) {
0x000925ae beq 0x92698 | goto label_4;
| }
0x000925b0 ldrb.w sb, [r5, 0x17] | sb = *((r5 + 0x17));
0x000925b4 adds r3, 4 | r3 += 4;
0x000925b6 movs r2, 0 | r2 = 0;
0x000925b8 b 0x925c0 |
| while (r8 != ip) {
0x000925ba adds r2, 1 | r2++;
0x000925bc cmp r1, r2 |
| if (r1 == r2) {
0x000925be beq 0x92698 | goto label_4;
| }
0x000925c0 ldr.w ip, [r3] | ip = *(r3);
0x000925c4 ldr.w lr, [r3, 4] |
0x000925c8 add r3, sb | r3 += sb;
0x000925ca rev.w ip, ip | ip = SWAPundefined (ip);
0x000925ce rev.w lr, lr | lr = SWAPundefined (lr);
0x000925d2 cmp r8, ip |
0x000925d4 it eq |
| if (r8 == ip) {
0x000925d6 cmpeq r0, lr | __asm ("cmpeq r0, lr");
| }
0x000925d8 bne 0x925ba |
| }
0x000925da movs r3, 0 | r3 = 0;
0x000925dc mov r1, r7 | r1 = r7;
0x000925de str r3, [r4] | *(r4) = r3;
0x000925e0 mov r0, r5 | r0 = r5;
0x000925e2 adds r3, r6, 1 | r3 = r6 + 1;
0x000925e4 bl 0x9247c | fcn_0009247c (r0, r1, r2, r3);
0x000925e8 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000925ea mov r8, r0 | r8 = r0;
0x000925ec subs r3, 1 | r3--;
0x000925ee str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
| if (r3 != 0) {
0x000925f0 cbnz r3, 0x92606 | goto label_5;
| }
0x000925f2 mov r1, r7 | r1 = r7;
0x000925f4 mov r0, r5 | r0 = r5;
0x000925f6 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x000925fa cmp.w r8, 0 |
| if (r8 != 0) {
0x000925fe bne 0x926a0 | goto label_6;
| }
0x00092600 cbz r0, 0x9260c |
| while (r0 != 0) {
| label_0:
0x00092602 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_5:
0x00092606 cmp.w r8, 0 |
| if (r8 != 0) {
0x0009260a bne 0x926a0 | goto label_6;
| }
| label_1:
0x0009260c ldrd r2, r3, [r4, 8] | __asm ("ldrd r2, r3, [r4, 8]");
0x00092610 movs r1, 1 | r1 = 1;
0x00092612 ldr r0, [r5, 0x54] | r0 = *((r5 + 0x54));
0x00092614 blx 0x84e8 | fcn_000084e8 ();
0x00092618 ldr r0, [r5, 0x54] | r0 = *((r5 + 0x54));
0x0009261a blx 0x8728 | fcn_00008728 ();
0x0009261e ldr r0, [r5, 0x54] | r0 = *((r5 + 0x54));
0x00092620 blx 0x81f8 | r0 = fcn_000081f8 ();
0x00092624 cmp r0, 0 |
0x00092626 bne 0x92602 |
| }
0x00092628 ldrd r2, r3, [r4, 8] | __asm ("ldrd r2, r3, [r4, 8]");
0x0009262c movs r1, 1 | r1 = 1;
0x0009262e ldr r0, [r5, 0x6c] | r0 = *((r5 + 0x6c));
0x00092630 blx 0x84e8 | fcn_000084e8 ();
0x00092634 ldr r0, [r5, 0x6c] | r0 = *((r5 + 0x6c));
0x00092636 blx 0x8728 | fcn_00008728 ();
0x0009263a ldr r0, [r5, 0x6c] | r0 = *((r5 + 0x6c));
0x0009263c blx 0x81f8 | r0 = fcn_000081f8 ();
0x00092640 cmp r0, 0 |
| if (r0 != 0) {
0x00092642 bne 0x92602 | goto label_0;
| }
0x00092644 ldrd r1, r3, [r4, 8] | __asm ("ldrd r1, r3, [r4, 8]");
0x00092648 orrs r3, r1 | r3 |= r1;
| if (r3 == r1) {
0x0009264a beq 0x92682 | goto label_7;
| }
0x0009264c movw r3, 0x7eaf |
0x00092650 movt r3, 0x51d0 | r3 = 0x51d07eaf;
0x00092654 umull r2, r3, r3, r1 | r2:r3 = r3 * r1;
0x00092658 subs r2, r1, r3 | r2 = r1 - r3;
0x0009265a add.w r3, r3, r2, lsr 1 | r3 += (r2 >> 1);
0x0009265e lsrs r2, r3, 6 | r2 = r3 >> 6;
0x00092660 add.w r3, r2, r2, lsl 1 | r3 = r2 + (r2 << 1);
0x00092664 add.w r2, r2, r3, lsl 5 | r2 += (r3 << 5);
0x00092668 subs r2, r1, r2 | r2 = r1 - r2;
0x0009266a add.w r3, r5, r2, lsl 2 | r3 = r5 + (r2 << 2);
0x0009266e ldr r3, [r3, 0x74] | r3 = *((r3 + 0x74));
0x00092670 cmp r4, r3 |
| if (r4 == r3) {
0x00092672 beq 0x926b8 | goto label_8;
| }
| do {
0x00092674 mov r2, r3 | r2 = r3;
0x00092676 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00092678 cmp r4, r3 |
0x0009267a bne 0x92674 |
| } while (r4 != r3);
0x0009267c adds r2, 0x1c | r2 += 0x1c;
| label_2:
0x0009267e ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00092680 str r3, [r2] | *(r2) = r3;
| label_7:
0x00092682 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00092684 asrs r2, r6, 0x1f | r2 = r6 >> 0x1f;
0x00092686 ldr r1, [r5, 0x44] | r1 = *((r5 + 0x44));
0x00092688 str r6, [r4, 8] | *((r4 + 8)) = r6;
0x0009268a adds r3, 1 | r3++;
0x0009268c str r1, [r4, 0x1c] | *((r4 + 0x1c)) = r1;
0x0009268e strd r2, r3, [r4, 0xc] | __asm ("strd r2, r3, [r4, 0xc]");
0x00092692 str r4, [r5, 0x44] | *((r5 + 0x44)) = r4;
0x00092694 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_4:
0x00092698 movw r0, 0x10b | r0 = 0x10b;
0x0009269c pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_6:
0x000926a0 mov r0, r8 | r0 = r8;
0x000926a2 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_3:
0x000926a6 adds r3, r2, 1 | r3 = r2 + 1;
0x000926a8 mov r1, r7 | r1 = r7;
0x000926aa mov.w r2, -1 | r2 = -1;
0x000926ae bl 0x9247c | r0 = fcn_0009247c (r0, r1, r2, r3);
0x000926b2 cmp r0, 0 |
| if (r0 == 0) {
0x000926b4 beq 0x9260c | goto label_1;
| }
0x000926b6 b 0x92602 | goto label_0;
| label_8:
0x000926b8 adds r2, 0x1d | r2 += 0x1d;
0x000926ba add.w r2, r5, r2, lsl 2 | r2 = r5 + (r2 << 2);
0x000926be b 0x9267e | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x92870 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define SWAP64(val) ((uint64_t) (((val & 0x00000000000000ffull) << 56) | \
| ((val & 0x000000000000ff00ull) << 40) | \
| ((val & 0x0000000000ff0000ull) << 24) | \
| ((val & 0x00000000ff000000ull) << 8) | \
| ((val & 0x000000ff00000000ull) >> 8) | \
| ((val & 0x0000ff0000000000ull) >> 24) | \
| ((val & 0x00ff000000000000ull) >> 40) | \
| ((val & 0xff00000000000000ull) >> 56)))
|
; (fcn) fcn.00092870 () | void fcn_00092870 (int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_2h;
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h_2;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h_2;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_48h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_bch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00092870 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00092874 cmp r3, 0 |
0x00092876 ldr.w r5, [pc, 0xbd8] | r5 = *(0x00093450);
0x0009287a ldr.w r4, [pc, 0xbd8] |
0x0009287e add r5, pc | r5 += pc;
0x00092880 vpush {d8, d9, d10, d11, d12, d13, d14, d15} | __asm ("vpush {d8, d9, d10, d11, d12, d13, d14, d15}");
0x00092884 sub sp, 0xc4 |
0x00092886 ldr r4, [r5, r4] | r4 = *((r5 + r4));
0x00092888 mov r5, r1 | r5 = r1;
0x0009288a ldr r4, [r4] | r4 = *(0x93456);
0x0009288c str r4, [sp, 0xbc] | var_bch = r4;
0x0009288e mov.w r4, 0 | r4 = 0;
0x00092892 mov r4, r0 | r4 = r0;
0x00092894 str r2, [sp, 0x28] | var_28h_2 = r2;
0x00092896 str r3, [sp, 0x24] | var_24h = r3;
| if (r3 <= 0) {
0x00092898 ble 0x928f2 | goto label_31;
| }
0x0009289a ldr r1, [r2] | r1 = *(r2);
0x0009289c movw r3, 0x7eaf |
0x000928a0 movt r3, 0x51d0 | r3 = 0x51d07eaf;
0x000928a4 mov r0, r2 | r0 = r2;
0x000928a6 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x000928a8 umull r2, r3, r3, r1 | r2:r3 = r3 * r1;
0x000928ac subs r2, r1, r3 | r2 = r1 - r3;
0x000928ae add.w r3, r3, r2, lsr 1 | r3 += (r2 >> 1);
0x000928b2 lsrs r3, r3, 6 | r3 >>= 6;
0x000928b4 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x000928b8 add.w r3, r3, r2, lsl 5 | r3 += (r2 << 5);
0x000928bc subs r3, r1, r3 | r3 = r1 - r3;
0x000928be add.w r3, r4, r3, lsl 2 | r3 = r4 + (r3 << 2);
0x000928c2 ldr r6, [r3, 0x74] | r6 = *((r3 + 0x74));
| if (r6 != 0) {
0x000928c4 cbnz r6, 0x928cc | goto label_32;
| }
0x000928c6 b 0x928f2 | goto label_31;
| do {
0x000928c8 ldr r6, [r6, 0x1c] | r6 = *((r6 + 0x1c));
| if (r6 == 0) {
0x000928ca cbz r6, 0x928f2 | goto label_31;
| }
| label_32:
0x000928cc ldrd r2, r3, [r6, 8] | __asm ("ldrd r2, r3, [r6, 8]");
0x000928d0 cmp r0, r3 |
0x000928d2 it eq |
| if (r0 == r3) {
0x000928d4 cmpeq r1, r2 | __asm ("cmpeq r1, r2");
| }
0x000928d6 bne 0x928c8 |
| } while (r0 != r3);
0x000928d8 ldr r1, [r6] | r1 = *(r6);
| if (r1 != 0) {
0x000928da cbz r1, 0x928e8 |
0x000928dc ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000928de subs r3, 1 | r3--;
0x000928e0 str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
0x000928e2 cmp r3, 0 |
| if (r3 == 0) {
0x000928e4 beq.w 0x92e84 | goto label_33;
| }
| }
| if (r5 != 0) {
| label_5:
0x000928e8 cbz r5, 0x928f0 |
0x000928ea ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000928ec adds r3, 1 | r3++;
0x000928ee str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
| }
0x000928f0 str r5, [r6] | *(r6) = r5;
| label_31:
0x000928f2 ldr r2, [sp, 0x28] | r2 = var_28h_2;
0x000928f4 mov r1, r5 | r1 = r5;
0x000928f6 mov r0, r4 | r0 = r4;
0x000928f8 bl 0x12104 | r0 = fcn_00012104 (r0, r1, r2);
0x000928fc cmp r0, 0 |
| if (r0 == 0) {
0x000928fe beq.w 0x92dc8 | goto label_34;
| }
0x00092902 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00092904 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00092906 cmp r3, r2 |
| if (r3 >= r2) {
0x00092908 bge.w 0x92a84 | goto label_35;
| }
0x0009290c ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0009290e ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x00092910 subs r3, 1 | r3--;
0x00092912 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x00092914 beq.w 0x92a84 | goto label_35;
| }
0x00092918 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009291a add.w fp, sp, 0x88 |
0x0009291e movs r2, 0x28 | r2 = 0x28;
0x00092920 movs r1, 0 | r1 = 0;
0x00092922 mov r0, fp | r0 = fp;
0x00092924 str r3, [r4, 0x48] | *((r4 + 0x48)) = r3;
0x00092926 blx 0x839c | fcn_0000839c ();
0x0009292a ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0009292c movs r1, 0 | r1 = 0;
0x0009292e ldrh r3, [r3, 2] | r3 = *((r3 + 2));
0x00092930 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x00092932 uxth.w sl, r3 | sl = (int16_t) r3;
0x00092936 add.w r6, sl, 2 | r6 = sl + 2;
0x0009293a add.w r3, sl, 1 | r3 = sl + 1;
0x0009293e bic r6, r6, 1 | r6 = BIT_MASK (r6, 1);
0x00092942 str r3, [sp, 8] | var_8h = r3;
0x00092944 lsls r0, r6, 6 | r0 = r6 << 6;
0x00092946 blx 0x8240 | r0 = fcn_00008240 ();
0x0009294a mov sb, r0 | sb = r0;
0x0009294c cmp r0, 0 |
| if (r0 == 0) {
0x0009294e beq.w 0x932ae | goto label_36;
| }
0x00092952 add.w r2, r6, r6, lsl 1 | r2 = r6 + (r6 << 1);
0x00092956 ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x00092958 lsls r3, r6, 2 | r3 = r6 << 2;
0x0009295a movs r7, 0 | r7 = 0;
0x0009295c add.w r2, r0, r2, lsl 4 | r2 = r0 + (r2 << 4);
0x00092960 mov r6, r0 | r6 = r0;
0x00092962 adds r1, 0x30 | r1 += 0x30;
0x00092964 str r1, [sp, 0x1c] | var_1ch_2 = r1;
0x00092966 adds r1, r2, r3 | r1 = r2 + r3;
0x00092968 add.w r8, r1, r3 | r8 = r1 + r3;
0x0009296c subs r3, r2, 4 | r3 = r2 - 4;
0x0009296e str r2, [sp, 0xc] | var_ch = r2;
0x00092970 str r1, [sp, 0x18] | var_18h = r1;
0x00092972 strd r3, r3, [sp, 0x10] | __asm ("strd r3, r3, [sp, 0x10]");
| label_1:
0x00092976 cmp sl, r7 |
| if (sl == r7) {
0x00092978 beq.w 0x93132 | goto label_37;
| }
0x0009297c str r6, [sp] | *(sp) = r6;
0x0009297e mov r3, r7 | r3 = r7;
0x00092980 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x00092982 ldrb r1, [r4, 0x17] | r1 = *((r4 + 0x17));
0x00092984 ldrb r0, [r4, 0x15] | r0 = *((r4 + 0x15));
0x00092986 bl 0x1206c | fcn_0001206c (r0, r1, r2, r3);
| label_14:
0x0009298a ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0009298c str r7, [r3, 4]! | *((r3 += 4)) = r7;
0x00092990 ldrb.w ip, [r4, 0x14] | ip = *((r4 + 0x14));
0x00092994 str r3, [sp, 0x10] | var_10h_2 = r3;
0x00092996 cmp.w ip, 0 |
| if (ip == 0) {
0x0009299a beq 0x929ee | goto label_38;
| }
0x0009299c movs r3, 8 | r3 = 8;
0x0009299e ldrb r1, [r4, 0x16] | r1 = *((r4 + 0x16));
0x000929a0 smlabb r0, r3, ip, r6 | __asm ("smlabb r0, r3, ip, r6");
0x000929a4 mov r2, fp | r2 = fp;
0x000929a6 mov r3, r6 | r3 = r6;
0x000929a8 b 0x929c4 |
| while (r1 == 0) {
0x000929aa vcvt.f64.f32 d18, s15 | __asm ("vcvt.f64.f32 d18, s15");
0x000929ae adds r3, 8 | r3 += 8;
0x000929b0 vcvt.f64.f32 d16, s14 | __asm ("vcvt.f64.f32 d16, s14");
0x000929b4 cmp r0, r3 |
0x000929b6 vadd.f64 d17, d18, d17 | __asm ("vadd.f64 d17, d18, d17");
0x000929ba vadd.f64 d16, d16, d17 | __asm ("vadd.f64 d16, d16, d17");
0x000929be vstr d16, [r2, -8] | __asm ("vstr d16, [r2, -8]");
| if (r0 == r3) {
0x000929c2 beq 0x929ee | goto label_38;
| }
| label_0:
0x000929c4 vldmia r2!, {d17} | __asm ("vldmia r2!, {d17}");
0x000929c8 vldr s15, [r3, 8] | __asm ("vldr s15, [r3, 8]");
0x000929cc vldr s14, [r3, 0xc] | __asm ("vldr s14, [r3, 0xc]");
0x000929d0 cmp r1, 0 |
0x000929d2 beq 0x929aa |
| }
0x000929d4 vcvt.f64.s32 d18, s15 | __asm ("vcvt.f64.s32 d18, s15");
0x000929d8 adds r3, 8 | r3 += 8;
0x000929da vcvt.f64.s32 d16, s14 | __asm ("vcvt.f64.s32 d16, s14");
0x000929de cmp r0, r3 |
0x000929e0 vadd.f64 d17, d18, d17 | __asm ("vadd.f64 d17, d18, d17");
0x000929e4 vadd.f64 d16, d16, d17 | __asm ("vadd.f64 d16, d16, d17");
0x000929e8 vstr d16, [r2, -8] | __asm ("vstr d16, [r2, -8]");
| if (r0 != r3) {
0x000929ec bne 0x929c4 | goto label_0;
| }
| label_38:
0x000929ee ldr r3, [sp, 8] | r3 = var_8h;
0x000929f0 adds r7, 1 | r7++;
0x000929f2 adds r6, 0x30 | r6 += 0x30;
0x000929f4 cmp r7, r3 |
| if (r7 != r3) {
0x000929f6 bne 0x92976 | goto label_1;
| }
0x000929f8 mov r1, ip | r1 = ip;
| if (r1 == 0) {
0x000929fa cbz r1, 0x92a22 | goto label_39;
| }
0x000929fc vldr s15, [sp, 8] | __asm ("vldr s15, [sp, 8]");
0x00092a00 sxth.w ip, ip | __asm ("sxth.w ip, ip");
0x00092a04 add.w r2, fp, r1, lsl 3 | r2 = fp + (r1 << 3);
0x00092a08 mov r3, fp | r3 = fp;
0x00092a0a vcvt.f64.s32 d16, s15 | __asm ("vcvt.f64.s32 d16, s15");
0x00092a0e vadd.f64 d16, d16, d16 | __asm ("vadd.f64 d16, d16, d16");
| do {
0x00092a12 vldr d18, [r3] | __asm ("vldr d18, [r3]");
0x00092a16 vdiv.f64 d17, d18, d16 | __asm ("vdiv.f64 d17, d18, d16");
0x00092a1a vstmia r3!, {d17} | __asm ("vstmia r3!, {d17}");
0x00092a1e cmp r2, r3 |
0x00092a20 bne 0x92a12 |
| } while (r2 != r3);
| label_39:
0x00092a22 ldr r3, [sp, 8] | r3 = var_8h;
0x00092a24 lsl.w ip, ip, 3 |
0x00092a28 vmov.i64 d20, 0 | __asm ("vmov.i64 d20, 0");
0x00092a2c mov r7, r8 | r7 = r8;
0x00092a2e add.w r0, sb, ip | r0 = sb + ip;
0x00092a32 add.w lr, r8, r3, lsl 3 | lr = r8 + (r3 << 3);
| label_11:
0x00092a36 vstmia r7!, {d20} | __asm ("vstmia r7!, {d20}");
0x00092a3a cmp r1, 0 |
| if (r1 == 0) {
0x00092a3c beq.w 0x93070 | goto label_40;
| }
0x00092a40 ldrb r6, [r4, 0x16] | r6 = *((r4 + 0x16));
0x00092a42 sub.w r3, r0, ip | r3 = r0 - ip;
0x00092a46 vmov.i64 d18, 0 | __asm ("vmov.i64 d18, 0");
0x00092a4a mov r2, fp | r2 = fp;
0x00092a4c b 0x92a6e |
| while (r6 == 0) {
0x00092a4e vcvt.f64.f32 d16, s15 | __asm ("vcvt.f64.f32 d16, s15");
0x00092a52 vcvt.f64.f32 d7, s14 | __asm ("vcvt.f64.f32 d7, s14");
| label_2:
0x00092a56 vldmia r2!, {d19} | __asm ("vldmia r2!, {d19}");
0x00092a5a adds r3, 8 | r3 += 8;
0x00092a5c vsub.f64 d16, d16, d7 | __asm ("vsub.f64 d16, d16, d7");
0x00092a60 cmp r0, r3 |
0x00092a62 vsub.f64 d16, d16, d19 | __asm ("vsub.f64 d16, d16, d19");
0x00092a66 vmla.f64 d18, d16, d16 | __asm ("vmla.f64 d18, d16, d16");
| if (r0 == r3) {
0x00092a6a beq.w 0x9306c | goto label_41;
| }
0x00092a6e vldr s15, [r3, 0xc] | __asm ("vldr s15, [r3, 0xc]");
0x00092a72 vldr s14, [r3, 8] | __asm ("vldr s14, [r3, 8]");
0x00092a76 cmp r6, 0 |
0x00092a78 beq 0x92a4e |
| }
0x00092a7a vcvt.f64.s32 d16, s15 | __asm ("vcvt.f64.s32 d16, s15");
0x00092a7e vcvt.f64.s32 d7, s14 | __asm ("vcvt.f64.s32 d7, s14");
0x00092a82 b 0x92a56 | goto label_2;
| label_35:
0x00092a84 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x00092a86 movs r0, 0x34 | r0 = 0x34;
0x00092a88 movs r1, 0 | r1 = 0;
0x00092a8a ldrh r7, [r3, 2] | r7 = *((r3 + 2));
0x00092a8c rev16 r7, r7 | __asm ("rev16 r7, r7");
0x00092a8e uxth r7, r7 | r7 = (int16_t) r7;
0x00092a90 mla r0, r7, r0, r0 | __asm ("mla r0, r7, r0, r0");
0x00092a94 blx 0x8240 | fcn_00008240 ();
0x00092a98 adds r3, r7, 1 | r3 = r7 + 1;
0x00092a9a mov r6, r0 | r6 = r0;
0x00092a9c str r3, [sp, 0x34] | var_34h = r3;
0x00092a9e cmp r0, 0 |
| if (r0 == 0) {
0x00092aa0 beq.w 0x93298 | goto label_42;
| }
0x00092aa4 add.w r8, r3, r3, lsl 1 | r8 = r3 + (r3 << 1);
0x00092aa8 lsls r3, r3, 2 | r3 <<= 2;
0x00092aaa lsl.w r8, r8, 4 | r8 <<= 4;
0x00092aae movs r1, 0 | r1 = 0;
0x00092ab0 mov r2, r3 | r2 = r3;
0x00092ab2 str r3, [sp, 8] | var_8h = r3;
0x00092ab4 add r0, r8 | r0 += r8;
0x00092ab6 blx 0x839c | fcn_0000839c ();
0x00092aba ldr.w fp, [r5, 0x18] | fp = *((r5 + 0x18));
| if (r7 == 0) {
0x00092abe cbz r7, 0x92ae2 | goto label_43;
| }
0x00092ac0 mov sl, r6 | sl = r6;
0x00092ac2 mov.w sb, 0 | sb = 0;
| do {
0x00092ac6 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00092aca mov r3, sb | r3 = sb;
0x00092acc ldrb r1, [r4, 0x17] | r1 = *((r4 + 0x17));
0x00092ace add.w sb, sb, 1 | sb++;
0x00092ad2 ldrb r0, [r4, 0x15] | r0 = *((r4 + 0x15));
0x00092ad4 mov r2, fp | r2 = fp;
0x00092ad6 bl 0x1206c | fcn_0001206c (r0, r1, r2, r3);
0x00092ada cmp r7, sb |
0x00092adc add.w sl, sl, 0x30 | sl += 0x30;
0x00092ae0 bne 0x92ac6 |
| } while (r7 != sb);
| label_43:
0x00092ae2 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00092ae4 movs r1, 0 | r1 = 0;
0x00092ae6 add.w r0, fp, 2 | r0 += var_2h;
0x00092aea subs r2, 2 | r2 -= 2;
0x00092aec blx 0x839c | fcn_0000839c ();
0x00092af0 ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x00092af2 sub.w r3, r8, 0x30 | r3 = r8 - 0x30;
0x00092af6 add r3, r6 | r3 += r6;
0x00092af8 movs r0, 1 | r0 = 1;
0x00092afa str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
0x00092afc mov r2, r1 | r2 = r1;
0x00092afe adds r1, 0x30 | r1 += 0x30;
| do {
0x00092b00 ldr.w r8, [r2] | r8 = *(r2);
0x00092b04 adds r2, 0x10 | r2 += 0x10;
0x00092b06 ldr lr, [r2, -0xc] |
0x00092b0a adds r3, 0x10 | r3 += 0x10;
0x00092b0c ldr ip, [r2, -0x8] | ip = *((r2 - 0x8));
0x00092b10 ldr r0, [r2, -0x4] | r0 = *((r2 - 0x4));
0x00092b14 cmp r2, r1 |
0x00092b16 str r8, [r3, -0x10] | *((r3 - 0x10)) = r8;
0x00092b1a str lr, [r3, -0xc] |
0x00092b1e str ip, [r3, -0x8] | *((r3 - 0x8)) = ip;
0x00092b22 str r0, [r3, -0x4] | *((r3 - 0x4)) = r0;
0x00092b26 bne 0x92b00 |
| } while (r2 != r1);
0x00092b28 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00092b2a ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x00092b2c subs r3, 1 | r3--;
0x00092b2e orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x00092b30 beq.w 0x93270 | goto label_44;
| }
0x00092b34 ldr r1, [r5] | r1 = *(r5);
0x00092b36 mov r0, r4 | r0 = r4;
0x00092b38 bl 0x40e08 | fcn_00040e08 (r0, r1);
0x00092b3c ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00092b3e mov sb, r5 | sb = r5;
0x00092b40 str r0, [sp, 0x10] | var_10h_2 = r0;
0x00092b42 adds r3, 1 | r3++;
0x00092b44 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
| label_22:
0x00092b46 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00092b48 cmp r3, 0 |
0x00092b4a it ne |
| if (r3 != 0) {
0x00092b4c cmpne sb, 0 | __asm ("cmpne sb, 0");
| }
0x00092b50 ite eq |
| if (r3 != 0) {
0x00092b52 moveq sl, 1 | sl = 1;
| }
| if (r3 != 0) {
0x00092b56 mov.w sl, 0 | sl = 0;
| }
| if (r3 == 0) {
0x00092b5a beq.w 0x93250 | goto label_45;
| }
0x00092b5e ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00092b60 mov r1, sl | r1 = sl;
0x00092b62 ldr.w r0, [sb, 0x18] | r0 = *((sb + 0x18));
0x00092b66 add.w fp, r7, 2 |
0x00092b6a blx 0x839c | fcn_0000839c ();
0x00092b6e ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00092b70 mov r1, sl | r1 = sl;
0x00092b72 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00092b74 ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x00092b76 blx 0x839c | fcn_0000839c ();
0x00092b7a ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00092b7c mov r1, sl | r1 = sl;
0x00092b7e mla fp, r3, fp, fp | __asm ("mla fp, r3, fp, fp");
0x00092b82 lsl.w fp, fp, 2 |
0x00092b86 mov r0, fp | r0 = fp;
0x00092b88 blx 0x8240 | fcn_00008240 ();
0x00092b8c str r0, [sp, 0x2c] | var_2ch = r0;
0x00092b8e cmp r0, 0 |
| if (r0 == 0) {
0x00092b90 beq.w 0x932b2 | goto label_46;
| }
0x00092b94 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00092b96 mov r2, fp | r2 = fp;
0x00092b98 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00092b9a mla r3, r1, r3, r3 | __asm ("mla r3, r1, r3, r3");
0x00092b9e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00092ba0 add.w r8, r1, r3, lsl 2 | r8 = r1 + (r3 << 2);
0x00092ba4 mov r1, sl | r1 = sl;
0x00092ba6 blx 0x839c | fcn_0000839c ();
0x00092baa ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00092bac cmp r3, 0 |
| if (r3 == 0) {
0x00092bae beq.w 0x9329c | goto label_47;
| }
0x00092bb2 mov r0, r4 | r0 = r4;
0x00092bb4 ldr r4, [sp, 0x34] | r4 = var_34h;
0x00092bb6 mov fp, sl |
| label_3:
0x00092bb8 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00092bba add r3, sl | r3 += sl;
0x00092bbc add.w r1, r2, r3, lsl 2 | r1 = r2 + (r3 << 2);
0x00092bc0 movs r3, 0 | r3 = 0;
0x00092bc2 str.w r1, [r2, fp, lsl 2] | __asm ("str.w r1, [r2, fp, lsl 2]");
0x00092bc6 subs r2, r1, 4 | r2 = r1 - 4;
| do {
0x00092bc8 str r3, [r2, 4]! | *((r2 += 4)) = r3;
0x00092bcc adds r3, 1 | r3++;
0x00092bce cmp r3, r4 |
0x00092bd0 bne 0x92bc8 |
| } while (r3 != r4);
0x00092bd2 mov r3, fp | r3 = fp;
0x00092bd4 mov r2, r4 | r2 = r4;
0x00092bd6 strd r6, r8, [sp] | __asm ("strd r6, r8, [sp]");
0x00092bda add.w fp, fp, 1 |
0x00092bde str r0, [sp, 0xc] | var_ch = r0;
0x00092be0 add sl, r4 | sl += r4;
0x00092be2 bl 0xdc10 | fcn_0000dc10 (r0, r1, r2, r3, r4, r5);
0x00092be6 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00092be8 ldrb r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x00092bea cmp fp, r2 |
0x00092bec mov r3, r2 | r3 = r2;
| if (fp < r2) {
0x00092bee blt 0x92bb8 | goto label_3;
| }
0x00092bf0 mov r4, r0 | r4 = r0;
0x00092bf2 cmp r2, 0 |
| if (r2 == 0) {
0x00092bf4 beq.w 0x9329c | goto label_47;
| }
0x00092bf8 ldr r3, [sp, 8] | r3 = var_8h;
0x00092bfa add.w r8, sp, 0x58 | r8 += var_58h;
0x00092bfe ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x00092c00 add.w fp, sp, 0x88 |
0x00092c04 ldrb r1, [r4, 0x17] | r1 = *((r4 + 0x17));
0x00092c06 subs r3, 4 | r3 -= 4;
0x00092c08 str r2, [sp, 0xc] | var_ch = r2;
0x00092c0a subs r0, 4 | r0 -= 4;
0x00092c0c str r3, [sp, 0x38] | var_38h = r3;
0x00092c0e bl 0xb1ea8 | fcn_000b1ea8 (r0, r1);
0x00092c12 movw r1, 0x5556 |
0x00092c16 mov r3, r0 | r3 = r0;
| /* if there is a right shift of 0, then it's a division by 1/3 */
0x00092c18 movt r1, 0x5555 | r1 = 0x55555556;
0x00092c1c movs r2, 0 | r2 = 0;
0x00092c1e smull r0, r1, r1, r3 | r0:r1 = r1 * r3;
0x00092c22 mov sl, r2 | sl = r2;
0x00092c24 str r2, [sp, 0x30] | var_30h = r2;
0x00092c26 vmov.i64 d13, 0 | __asm ("vmov.i64 d13, 0");
0x00092c2a str r5, [sp, 0x3c] | var_3ch = r5;
0x00092c2c sub.w r3, r1, r3, asr 31 | r3 = r1 - (r3 >> 31);
0x00092c30 mov r1, r2 | r1 = r2;
0x00092c32 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00092c34 vmov.f64 d12, d13 | __asm ("vmov.f64 d12, d13");
0x00092c38 mov r0, r3 | r0 = r3;
0x00092c3a vmov.f64 d11, d13 | __asm ("vmov.f64 d11, d13");
0x00092c3e subs r2, r2, r3 | r2 -= r3;
0x00092c40 str r2, [sp, 0x14] | var_14h = r2;
0x00092c42 ldr r2, [sp, 0xc] | r2 = var_ch;
| label_8:
0x00092c44 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00092c46 cmp r0, r3 |
| if (r0 > r3) {
0x00092c48 bgt.w 0x93182 | goto label_48;
| }
0x00092c4c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00092c4e movs r5, 0 | r5 = 0;
0x00092c50 str r5, [sp, 0x20] | var_20h = r5;
0x00092c52 ldr r5, [sp, 0x38] | r5 = var_38h;
0x00092c54 ldr.w r3, [r3, sl, lsl 2] | offset_0 = sl << 2;
| r3 = *((r3 + offset_0));
0x00092c58 vmov.f64 d10, d12 | __asm ("vmov.f64 d10, d12");
0x00092c5c vmov.f64 d9, d11 | __asm ("vmov.f64 d9, d11");
0x00092c60 str r3, [sp, 0xc] | var_ch = r3;
0x00092c62 add r3, r5 | r3 += r5;
0x00092c64 vmov.f64 d8, d11 | __asm ("vmov.f64 d8, d11");
0x00092c68 mov r5, r0 | r5 = r0;
0x00092c6a str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x00092c6c strd sb, r2, [sp, 0x40] | __asm ("strd sb, r2, [sp, 0x40]");
0x00092c70 strd sl, r1, [sp, 0x48] | __asm ("strd sl, r1, [sp, 0x48]");
0x00092c74 str r0, [sp, 0x18] | var_18h = r0;
| label_7:
0x00092c76 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00092c78 mov lr, r8 | lr = r8;
0x00092c7a ldr r3, [r3] | r3 = *(r3);
0x00092c7c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00092c80 add.w sb, r6, r3, lsl 4 | sb = r6 + (r3 << 4);
0x00092c84 add.w sl, sb, 0x30 | sl = sb + 0x30;
| do {
0x00092c88 ldr.w r0, [sb] | r0 = *(sb);
0x00092c8c add.w sb, sb, 0x10 | sb += 0x10;
0x00092c90 ldr r1, [sb, -0xc] | r1 = *((sb - 0xc));
0x00092c94 mov ip, lr |
0x00092c96 ldr r2, [sb, -0x8] | r2 = *((sb - 0x8));
0x00092c9a ldr r3, [sb, -0x4] | r3 = *((sb - 0x4));
0x00092c9e cmp sb, sl |
0x00092ca0 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00092ca4 mov lr, ip | lr = ip;
0x00092ca6 bne 0x92c88 |
| } while (sb != sl);
0x00092ca8 mov lr, fp | lr = fp;
0x00092caa ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x00092cac ldr r3, [r3] | r3 = *(r3);
0x00092cae add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00092cb2 add.w sb, r6, r3, lsl 4 | sb = r6 + (r3 << 4);
0x00092cb6 add.w sl, sb, 0x30 | sl = sb + 0x30;
| do {
0x00092cba ldr.w r0, [sb] | r0 = *(sb);
0x00092cbe add.w sb, sb, 0x10 | sb += 0x10;
0x00092cc2 ldr r1, [sb, -0xc] | r1 = *((sb - 0xc));
0x00092cc6 mov ip, lr |
0x00092cc8 ldr r2, [sb, -0x8] | r2 = *((sb - 0x8));
0x00092ccc ldr r3, [sb, -0x4] | r3 = *((sb - 0x4));
0x00092cd0 cmp sb, sl |
0x00092cd2 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00092cd6 mov lr, ip | lr = ip;
0x00092cd8 bne 0x92cba |
| } while (sb != sl);
0x00092cda cmp r7, 1 |
0x00092cdc itt gt |
| if (r7 <= 1) {
0x00092cde ldrgt sb, [sp, 0xc] | sb = var_ch;
| }
| if (r7 > 1) {
0x00092ce2 mov.w sl, 1 | sl = 1;
| }
| if (r7 <= 1) {
0x00092ce6 ble 0x92d0a | goto label_49;
| }
| do {
0x00092ce8 ldr r2, [sb, 4]! | r2 = *((sb += 4));
0x00092cec cmp r5, sl |
0x00092cee ite gt |
| if (r5 <= sl) {
0x00092cf0 movgt r1, r8 | r1 = r8;
| }
| if (r5 > sl) {
0x00092cf2 movle r1, fp | r1 = fp;
| }
0x00092cf4 mov r0, r4 | r0 = r4;
0x00092cf6 add.w sl, sl, 1 | sl++;
0x00092cfa add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00092cfe add.w r2, r6, r2, lsl 4 | r2 = r6 + (r2 << 4);
0x00092d02 bl 0x11bb8 | fcn_00011bb8 (r0, r1, r2);
0x00092d06 cmp r7, sl |
0x00092d08 bne 0x92ce8 |
| } while (r7 != sl);
| label_49:
0x00092d0a ldrb.w sb, [r4, 0x15] | sb = *((r4 + 0x15));
0x00092d0e mov r2, r8 | r2 = r8;
0x00092d10 ldrb.w sl, [r4, 0x16] | sl = *((r4 + 0x16));
0x00092d14 vmov.f64 d15, 1.000000e+00 | __asm ("vmov.f64 d15, 1");
0x00092d18 mov r0, sb | r0 = sb;
0x00092d1a mov r1, sl | r1 = sl;
0x00092d1c bl 0x11ed4 | fcn_00011ed4 (r0, r1);
0x00092d20 vadd.f64 d8, d0, d8 | __asm ("vadd.f64 d8, d0, d8");
0x00092d24 mov r2, fp | r2 = fp;
0x00092d26 mov r0, sb | r0 = sb;
0x00092d28 bl 0x11ed4 | fcn_00011ed4 (r0, r1);
0x00092d2c vadd.f64 d8, d8, d0 | __asm ("vadd.f64 d8, d8, d0");
0x00092d30 cmp.w sb, 0 |
| if (sb == 0) {
0x00092d34 beq.w 0x92ea4 | goto label_10;
| }
0x00092d38 mov ip, r4 |
0x00092d3a mov r1, fp | r1 = fp;
0x00092d3c mov r2, r8 | r2 = r8;
0x00092d3e mov.w lr, 0 | lr = 0;
0x00092d42 mov r4, sl | r4 = sl;
0x00092d44 b 0x92da2 |
| while (r4 == 0) {
0x00092d46 vmov s15, r0 | __asm ("vmov s15, r0");
0x00092d4a vmov s14, r3 | __asm ("vmov s14, r3");
0x00092d4e vcmpe.f32 s15, s14 | __asm ("vcmpe.f32 s15, s14");
0x00092d52 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sb <= 0) {
0x00092d56 ble.w 0x92e96 | goto label_50;
| }
0x00092d5a vcvt.f64.f32 d7, s15 | __asm ("vcvt.f64.f32 d7, s15");
| label_6:
0x00092d5e vldr s12, [r2, 0xc] | __asm ("vldr s12, [r2, 0xc]");
0x00092d62 vldr s13, [r1, 0xc] | __asm ("vldr s13, [r1, 0xc]");
0x00092d66 vcvt.f64.f32 d16, s12 | __asm ("vcvt.f64.f32 d16, s12");
0x00092d6a vcvt.f64.f32 d18, s13 | __asm ("vcvt.f64.f32 d18, s13");
| label_4:
0x00092d6e vcmpe.f64 d18, d16 | __asm ("vcmpe.f64 d18, d16");
0x00092d72 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x00092d76 it le |
| if (sb <= 0) {
0x00092d78 vmovle d16, d18 | __asm ("vmovle d16, d18");
| }
0x00092d7c vcmpe.f64 d16, d7 | __asm ("vcmpe.f64 d16, d7");
0x00092d80 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sb < 0) {
0x00092d84 bmi.w 0x92e9c | goto label_51;
| }
0x00092d88 vsub.f64 d16, d16, d7 | __asm ("vsub.f64 d16, d16, d7");
0x00092d8c add.w lr, lr, 2 | lr += 2;
0x00092d90 cmp lr, sb |
0x00092d92 add.w r1, r1, 8 | r1 += 8;
0x00092d96 add.w r2, r2, 8 | r2 += 8;
0x00092d9a vmul.f64 d15, d15, d16 | __asm ("vmul.f64 d15, d15, d16");
| if (lr >= sb) {
0x00092d9e bge.w 0x93062 | goto label_52;
| }
0x00092da2 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x00092da4 ldr r0, [r2, 8] | r0 = *((r2 + 8));
0x00092da6 cmp r4, 0 |
0x00092da8 beq 0x92d46 |
| }
0x00092daa cmp r3, r0 |
| if (r3 >= r0) {
0x00092dac bge 0x92e8c | goto label_53;
| }
0x00092dae vmov s15, r0 | __asm ("vmov s15, r0");
0x00092db2 vcvt.f64.s32 d7, s15 | __asm ("vcvt.f64.s32 d7, s15");
| do {
0x00092db6 vldr s13, [r2, 0xc] | __asm ("vldr s13, [r2, 0xc]");
0x00092dba vcvt.f64.s32 d16, s13 | __asm ("vcvt.f64.s32 d16, s13");
0x00092dbe vldr s13, [r1, 0xc] | __asm ("vldr s13, [r1, 0xc]");
0x00092dc2 vcvt.f64.s32 d18, s13 | __asm ("vcvt.f64.s32 d18, s13");
0x00092dc6 b 0x92d6e | goto label_4;
| label_34:
0x00092dc8 ldr r6, [sp, 0x28] | r6 = var_28h_2;
0x00092dca mov r1, r5 | r1 = r5;
0x00092dcc mov r0, r4 | r0 = r4;
0x00092dce mov r2, r6 | r2 = r6;
0x00092dd0 bl 0x147c0 | r0 = fcn_000147c0 (r0, r1, r2);
0x00092dd4 mov r7, r0 | r7 = r0;
0x00092dd6 cmp r0, 0 |
| if (r0 == 0) {
0x00092dd8 bne 0x92e5e |
0x00092dda ldr r1, [sp, 0x24] | r1 = var_24h;
0x00092ddc ldrd r2, r3, [r6] | __asm ("ldrd r2, r3, [r6]");
0x00092de0 ldrd r6, r7, [r5, 8] | __asm ("ldrd r6, r7, [r5, 8]");
0x00092de4 cmp r1, 0 |
| if (r1 != 0) {
0x00092de6 bne.w 0x9318c | goto label_54;
| }
0x00092dea movs r1, 1 | r1 = 1;
0x00092dec ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x00092dee blx 0x84e8 | fcn_000084e8 ();
0x00092df2 mov r2, r6 | r2 = r6;
0x00092df4 mov r3, r7 | r3 = r7;
0x00092df6 movs r1, 2 | r1 = 2;
0x00092df8 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x00092dfa blx 0x84e8 | fcn_000084e8 ();
0x00092dfe ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x00092e00 blx 0x8728 | fcn_00008728 ();
0x00092e04 ldr.w r2, [pc, 0x650] |
0x00092e08 ldr.w r3, [pc, 0x648] | r3 = *(0x93454);
0x00092e0c add r2, pc | r2 = 0x126268;
0x00092e0e ldr r3, [r2, r3] | r3 = imp.sinh;
0x00092e10 ldr r2, [r3] | r2 = imp.sinh;
0x00092e12 ldr r3, [sp, 0xbc] | r3 = var_bch;
0x00092e14 eors r2, r3 | r2 ^= r3;
0x00092e16 mov.w r3, 0 | r3 = 0;
0x00092e1a it eq |
| if (r2 != r3) {
0x00092e1c ldreq r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
| }
| if (r2 != r3) {
0x00092e1e bne.w 0x931c0 | goto label_55;
| }
| label_17:
0x00092e22 add sp, 0xc4 |
0x00092e24 vpop {d8, d9, d10, d11, d12, d13, d14, d15} | __asm ("vpop {d8, d9, d10, d11, d12, d13, d14, d15}");
0x00092e28 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00092e2c b.w 0x81f4 | void (*0x81f4)() ();
| label_9:
0x00092e30 mov r7, r0 | r7 = r0;
| label_24:
0x00092e32 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00092e34 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00092e36 subs r3, 1 | r3--;
0x00092e38 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| if (r3 == 0) {
0x00092e3a cbnz r3, 0x92e44 |
0x00092e3c ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x00092e3e mov r0, r4 | r0 = r4;
0x00092e40 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
| }
| label_21:
0x00092e44 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x00092e48 subs r3, 1 | r3--;
0x00092e4a str.w r3, [sb, 0x10] | __asm ("str.w r3, [sb, 0x10]");
| if (r3 == 0) {
0x00092e4e cbnz r3, 0x92e58 |
0x00092e50 mov r1, sb | r1 = sb;
0x00092e52 mov r0, r4 | r0 = r4;
0x00092e54 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
| }
| label_20:
0x00092e58 mov r0, r6 | r0 = r6;
0x00092e5a blx 0x8404 | fcn_00008404 ();
| }
| label_13:
0x00092e5e ldr.w r2, [pc, 0x5fc] | r2 = *(0x0009345c);
0x00092e62 ldr.w r3, [pc, 0x5f0] | r3 = *(0x93456);
0x00092e66 add r2, pc | r2 += pc;
0x00092e68 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00092e6a ldr r2, [r3] | r2 = *(0x93456);
0x00092e6c ldr r3, [sp, 0xbc] | r3 = var_bch;
0x00092e6e eors r2, r3 | r2 ^= r3;
0x00092e70 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00092e74 bne.w 0x931c0 | goto label_55;
| }
0x00092e78 mov r0, r7 | r0 = r7;
0x00092e7a add sp, 0xc4 |
0x00092e7c vpop {d8, d9, d10, d11, d12, d13, d14, d15} | __asm ("vpop {d8, d9, d10, d11, d12, d13, d14, d15}");
0x00092e80 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_33:
0x00092e84 mov r0, r4 | r0 = r4;
0x00092e86 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x00092e8a b 0x928e8 | goto label_5;
| label_53:
0x00092e8c vmov s15, r3 | __asm ("vmov s15, r3");
0x00092e90 vcvt.f64.s32 d7, s15 | __asm ("vcvt.f64.s32 d7, s15");
0x00092e94 b 0x92db6 |
| } while (1);
| label_50:
0x00092e96 vcvt.f64.f32 d7, s14 | __asm ("vcvt.f64.f32 d7, s14");
0x00092e9a b 0x92d5e | goto label_6;
| label_51:
0x00092e9c mov sl, r4 | sl = r4;
0x00092e9e vmov.f64 d15, d11 | __asm ("vmov.f64 d15, d11");
0x00092ea2 mov r4, ip | r4 = ip;
| label_10:
0x00092ea4 ldrb r0, [r4, 0x14] | r0 = *((r4 + 0x14));
0x00092ea6 mov r2, r8 | r2 = r8;
0x00092ea8 mov r1, sl | r1 = sl;
0x00092eaa str r0, [sp, 8] | var_8h = r0;
0x00092eac bl 0x11f28 | fcn_00011f28 (r0, r1);
0x00092eb0 ldr r0, [sp, 8] | r0 = var_8h;
0x00092eb2 mov r1, sl | r1 = sl;
0x00092eb4 mov r2, fp | r2 = fp;
0x00092eb6 vmov.f64 d14, d0 | __asm ("vmov.f64 d14, d0");
0x00092eba bl 0x11f28 | fcn_00011f28 (r0, r1);
0x00092ebe ldr r3, [sp, 0x18] | r3 = var_18h;
0x00092ec0 vadd.f64 d16, d14, d0 | __asm ("vadd.f64 d16, d14, d0");
0x00092ec4 cmp r5, r3 |
| if (r5 != r3) {
0x00092ec6 beq 0x92ee6 |
0x00092ec8 vcmpe.f64 d9, d15 | __asm ("vcmpe.f64 d9, d15");
0x00092ecc vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r5 > r3) {
0x00092ed0 bgt 0x92ee6 | goto label_56;
| }
0x00092ed2 vcmp.f64 d9, d15 | __asm ("vcmp.f64 d9, d15");
0x00092ed6 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r5 != r3) {
0x00092eda bne 0x92ef0 | goto label_57;
| }
0x00092edc vcmpe.f64 d16, d10 | __asm ("vcmpe.f64 d16, d10");
0x00092ee0 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r5 >= r3) {
0x00092ee4 bpl 0x92ef0 | goto label_57;
| }
| }
| label_56:
0x00092ee6 vmov.f64 d10, d16 | __asm ("vmov.f64 d10, d16");
0x00092eea vmov.f64 d9, d15 | __asm ("vmov.f64 d9, d15");
0x00092eee str r5, [sp, 0x20] | var_20h = r5;
| label_57:
0x00092ef0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00092ef2 adds r5, 1 | r5++;
0x00092ef4 cmp r5, r3 |
| if (r5 <= r3) {
0x00092ef6 ble.w 0x92c76 | goto label_7;
| }
0x00092efa ldrd sb, r2, [sp, 0x40] | __asm ("ldrd sb, r2, [var_40h]");
0x00092efe ldrd sl, r1, [sp, 0x48] | __asm ("ldrd sl, r1, [var_48h]");
0x00092f02 ldr r0, [sp, 0x18] | r0 = var_18h;
| label_16:
0x00092f04 cmp.w sl, 0 |
| if (sl != 0) {
0x00092f08 beq 0x92f14 |
0x00092f0a vcmpe.f64 d8, d13 | __asm ("vcmpe.f64 d8, d13");
0x00092f0e vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sl >= 0) {
0x00092f12 bpl 0x92f1e | goto label_58;
| }
| }
0x00092f14 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00092f16 mov r1, sl | r1 = sl;
0x00092f18 vmov.f64 d13, d8 | __asm ("vmov.f64 d13, d8");
0x00092f1c str r3, [sp, 0x30] | var_30h = r3;
| label_58:
0x00092f1e add.w sl, sl, 1 | sl++;
0x00092f22 cmp r2, sl |
| if (r2 != sl) {
0x00092f24 bne.w 0x92c44 | goto label_8;
| }
0x00092f28 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00092f2a ldr r5, [sp, 0x3c] | r5 = var_3ch;
0x00092f2c add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
0x00092f30 str r3, [sp, 8] | var_8h = r3;
0x00092f32 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00092f34 lsls r2, r3, 2 | r2 = r3 << 2;
| label_23:
0x00092f36 ldr r3, [sp, 8] | r3 = var_8h;
0x00092f38 mov ip, r8 |
0x00092f3a mov r7, r2 | r7 = r2;
0x00092f3c str r6, [sp, 0xc] | var_ch = r6;
0x00092f3e ldr r3, [r3] | r3 = *(r3);
0x00092f40 ldr r3, [r3] | r3 = *(r3);
0x00092f42 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00092f46 add.w sl, r6, r3, lsl 4 | sl = r6 + (r3 << 4);
0x00092f4a add.w lr, sl, 0x30 | lr = sl + 0x30;
| do {
0x00092f4e ldr.w r0, [sl] | r0 = *(sl);
0x00092f52 add.w sl, sl, 0x10 | sl += 0x10;
0x00092f56 ldr r1, [sl, -0xc] | r1 = *((sl - 0xc));
0x00092f5a mov r6, ip | r6 = ip;
0x00092f5c ldr r2, [sl, -0x8] | r2 = *((sl - 0x8));
0x00092f60 ldr r3, [sl, -0x4] | r3 = *((sl - 0x4));
0x00092f64 cmp sl, lr |
0x00092f66 stm r6!, {r0, r1, r2, r3} | *(r6!) = r0;
| *((r6! + 4)) = r1;
| *((r6! + 8)) = r2;
| *((r6! + 12)) = r3;
0x00092f68 mov ip, r6 |
0x00092f6a bne 0x92f4e |
| } while (sl != lr);
0x00092f6c mov ip, fp |
0x00092f6e ldr r3, [sp, 8] | r3 = var_8h;
0x00092f70 ldr r6, [sp, 0xc] | r6 = var_ch;
0x00092f72 ldr r3, [r3] | r3 = *(r3);
0x00092f74 ldr r3, [r3, r7] | r3 = *((r3 + r7));
0x00092f76 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00092f7a add.w sl, r6, r3, lsl 4 | sl = r6 + (r3 << 4);
0x00092f7e add.w lr, sl, 0x30 | lr = sl + 0x30;
| do {
0x00092f82 ldr.w r0, [sl] | r0 = *(sl);
0x00092f86 add.w sl, sl, 0x10 | sl += 0x10;
0x00092f8a ldr r1, [sl, -0xc] | r1 = *((sl - 0xc));
0x00092f8e mov r7, ip | r7 = ip;
0x00092f90 ldr r2, [sl, -0x8] | r2 = *((sl - 0x8));
0x00092f94 ldr r3, [sl, -0x4] | r3 = *((sl - 0x4));
0x00092f98 cmp sl, lr |
0x00092f9a stm r7!, {r0, r1, r2, r3} | *(r7!) = r0;
| *((r7! + 4)) = r1;
| *((r7! + 8)) = r2;
| *((r7! + 12)) = r3;
0x00092f9c mov ip, r7 |
0x00092f9e bne 0x92f82 |
| } while (sl != lr);
0x00092fa0 movs r7, 0 | r7 = 0;
| do {
0x00092fa2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00092fa4 mov r0, r4 | r0 = r4;
0x00092fa6 cmp r7, r3 |
0x00092fa8 ldr r3, [sp, 8] | r3 = var_8h;
0x00092faa iteet ge |
| if (r7 < r3) {
0x00092fac ldrge r1, [sp, 0x10] | r1 = var_10h_2;
| }
| if (r7 >= r3) {
0x00092fae movlt r1, sb | r1 = sb;
| }
| if (r7 >= r3) {
0x00092fb0 movlt sl, r8 | sl = r8;
| }
| if (r7 < r3) {
0x00092fb2 movge sl, fp | sl = fp;
| }
0x00092fb4 ldr r3, [r3] | r3 = *(r3);
0x00092fb6 ldr.w r2, [r3, r7, lsl 2] | offset_1 = r7 << 2;
| r2 = *((r3 + offset_1));
0x00092fba adds r7, 1 | r7++;
0x00092fbc add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00092fc0 add.w r2, r6, r2, lsl 4 | r2 = r6 + (r2 << 4);
0x00092fc4 str r2, [sp, 0xc] | var_ch = r2;
0x00092fc6 bl 0x12104 | fcn_00012104 (r0, r1, r2);
0x00092fca ldr r2, [sp, 0xc] | r2 = var_ch;
0x00092fcc mov r1, sl | r1 = sl;
0x00092fce mov r0, r4 | r0 = r4;
0x00092fd0 bl 0x11bb8 | fcn_00011bb8 (r0, r1, r2);
0x00092fd4 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00092fd6 cmp r7, r3 |
0x00092fd8 bne 0x92fa2 |
| } while (r7 != r3);
0x00092fda ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00092fdc blx 0x8404 | fcn_00008404 ();
0x00092fe0 ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x00092fe2 mov r0, r4 | r0 = r4;
0x00092fe4 bl 0x85f18 | r0 = fcn_00085f18 (r0, r1);
0x00092fe8 mov sl, r0 | sl = r0;
0x00092fea cmp r0, 0 |
| if (r0 != 0) {
0x00092fec bne.w 0x92e30 | goto label_9;
| }
0x00092ff0 ldrd r2, r0, [sb, 8] | __asm ("ldrd r2, r0, [sb, 8]");
0x00092ff4 orrs.w r3, r2, r0 | r3 = r2 | r0;
| if (r3 == r2) {
0x00092ff8 beq.w 0x93362 | goto label_59;
| }
| label_26:
0x00092ffc ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00092ffe ldr r7, [r5, 8] | r7 = *((r5 + 8));
0x00093000 ldr.w r1, [sb] | r1 = *(sb);
0x00093004 str r3, [sp, 8] | var_8h = r3;
0x00093006 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00093008 subs r7, 1 | r7--;
0x0009300a vldr d16, [r3, 8] | __asm ("vldr d16, [r3, 8]");
0x0009300e ldr r3, [sp, 8] | r3 = var_8h;
0x00093010 strd r2, r0, [sp, 0x58] | __asm ("strd r2, r0, [sp, 0x58]");
0x00093014 vstr d16, [sp, 0x88] | __asm ("vstr d16, [sp, 0x88]");
0x00093018 orrs r7, r3 | r7 |= r3;
| if (r7 == r3) {
0x0009301a beq.w 0x932c8 | goto label_60;
| }
0x0009301e cmp r1, 0 |
| if (r1 == 0) {
0x00093020 beq.w 0x9337e | goto label_61;
| }
0x00093024 ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x00093026 ldrh r7, [r3, 2] | r7 = *((r3 + 2));
0x00093028 rev16 r7, r7 | __asm ("rev16 r7, r7");
0x0009302a uxth.w lr, r7 | lr = (int16_t) r7;
0x0009302e cmp.w lr, 0 |
| if (lr == 0) {
0x00093032 beq.w 0x93378 | goto label_62;
| }
0x00093036 ldrb r7, [r4, 0x17] | r7 = *((r4 + 0x17));
0x00093038 adds r3, 4 | r3 += 4;
0x0009303a str r7, [sp, 8] | var_8h = r7;
0x0009303c b 0x9304c |
| while (r7 != r0) {
0x0009303e ldr r7, [sp, 8] | r7 = var_8h;
0x00093040 add.w sl, sl, 1 | sl++;
0x00093044 cmp lr, sl |
0x00093046 add r3, r7 | r3 += r7;
| if (lr == sl) {
0x00093048 beq.w 0x93378 | goto label_62;
| }
0x0009304c ldr r7, [r3] | r7 = *(r3);
0x0009304e ldr.w ip, [r3, 4] | ip = *((r3 + 4));
0x00093052 rev r7, r7 | r7 = SWAP32 (r7);
0x00093054 rev.w ip, ip | ip = SWAPundefined (ip);
0x00093058 cmp r7, r0 |
0x0009305a it eq |
| if (r7 == r0) {
0x0009305c cmpeq ip, r2 | __asm ("cmpeq ip, r2");
| }
0x0009305e bne 0x9303e |
| }
0x00093060 b 0x93382 | goto label_63;
| label_52:
0x00093062 mov sl, r4 | sl = r4;
0x00093064 vadd.f64 d15, d15, d12 | __asm ("vadd.f64 d15, d15, d12");
0x00093068 mov r4, ip | r4 = ip;
0x0009306a b 0x92ea4 | goto label_10;
| label_41:
0x0009306c vstr d18, [r7, -8] | __asm ("vstr d18, [r7, -8]");
| label_40:
0x00093070 cmp lr, r7 |
0x00093072 add.w r0, r0, 0x30 | r0 += 0x30;
| if (lr != r7) {
0x00093076 bne.w 0x92a36 | goto label_11;
| }
0x0009307a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0009307c mov r2, r8 | r2 = r8;
0x0009307e ldrd r1, r0, [sp, 8] | __asm ("ldrd r1, r0, [var_8h]");
0x00093082 mov.w r8, 0 | r8 = 0;
0x00093086 bl 0xdb70 | fcn_0000db70 (r0, r1, r2, r3);
0x0009308a ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0009308c movs r1, 0 | r1 = 0;
0x0009308e ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00093090 subs r2, 2 | r2 -= 2;
0x00093092 adds r0, 2 | r0 += 2;
0x00093094 blx 0x839c | fcn_0000839c ();
0x00093098 movw r1, 0x5556 |
0x0009309c movs r3, 1 | r3 = 1;
| /* if there is a right shift of 0, then it's a division by 1/3 */
0x0009309e movt r1, 0x5555 | r1 = 0x55555556;
0x000930a2 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x000930a4 mov fp, r1 |
| do {
| label_12:
0x000930a6 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x000930a8 ldrb r1, [r4, 0x17] | r1 = *((r4 + 0x17));
0x000930aa subs r0, 4 | r0 -= 4;
0x000930ac bl 0xb1ea8 | fcn_000b1ea8 (r0, r1);
0x000930b0 smull r1, r3, fp, r0 | r1:r3 = fp * r0;
0x000930b4 sub.w r3, r3, r0, asr 31 | r3 -= (r0 >> 31);
0x000930b8 sub.w r3, sl, r3 | r3 = sl - r3;
0x000930bc cmp r3, r8 |
| if (r3 <= r8) {
0x000930be ble.w 0x931c4 | goto label_64;
| }
0x000930c2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000930c4 mov r1, r5 | r1 = r5;
0x000930c6 mov r0, r4 | r0 = r4;
0x000930c8 ldr r6, [r3, 4]! | r6 = *((r3 += 4));
0x000930cc str r3, [sp, 0x14] | var_14h = r3;
0x000930ce add.w r6, r6, r6, lsl 1 | r6 += (r6 << 1);
0x000930d2 lsls r6, r6, 4 | r6 <<= 4;
0x000930d4 add.w r7, sb, r6 | r7 = sb + r6;
0x000930d8 mov r2, r7 | r2 = r7;
0x000930da bl 0x12104 | fcn_00012104 (r0, r1, r2);
0x000930de ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x000930e0 ldr.w r2, [sb, r6] | r2 = *((sb + r6));
0x000930e4 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000930e6 ldrd r0, r1, [r1] | __asm ("ldrd r0, r1, [r1]");
0x000930ea cmp r3, r1 |
0x000930ec it eq |
| if (r3 == r1) {
0x000930ee cmpeq r2, r0 | __asm ("cmpeq r2, r0");
| }
0x000930f0 it ne |
| if (r3 == r1) {
0x000930f2 addne r8, r8, 1 | r8++;
| }
0x000930f6 bne 0x930a6 |
| } while (r3 != r1);
0x000930f8 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000930fa ldrd r6, r7, [r5, 8] | __asm ("ldrd r6, r7, [r5, 8]");
| if (r1 != 0) {
0x000930fe cbnz r1, 0x93160 | goto label_65;
| }
0x00093100 movs r1, 1 | r1 = 1;
0x00093102 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x00093104 blx 0x84e8 | fcn_000084e8 ();
0x00093108 mov r2, r6 | r2 = r6;
0x0009310a mov r3, r7 | r3 = r7;
0x0009310c movs r1, 2 | r1 = 2;
0x0009310e ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x00093110 blx 0x84e8 | fcn_000084e8 ();
0x00093114 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x00093116 blx 0x8728 | fcn_00008728 ();
0x0009311a ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x0009311c blx 0x81f8 | fcn_000081f8 ();
| label_15:
0x00093120 add.w r8, r8, 1 | r8++;
0x00093124 cmp r0, 0 |
| if (r0 == 0) {
0x00093126 beq 0x930a6 | goto label_12;
| }
0x00093128 mov r7, r0 | r7 = r0;
| label_18:
0x0009312a mov r0, sb | r0 = sb;
0x0009312c blx 0x8404 | fcn_00008404 ();
0x00093130 b 0x92e5e | goto label_13;
| label_37:
0x00093132 ldr r2, [sp, 0x28] | r2 = var_28h_2;
0x00093134 mov r3, r6 | r3 = r6;
| do {
0x00093136 ldr r1, [r2, 0xc] | r1 = *((r2 + 0xc));
0x00093138 adds r2, 0x10 | r2 += 0x10;
0x0009313a ldr lr, [r2, -0x10] |
0x0009313e adds r3, 0x10 | r3 += 0x10;
0x00093140 ldr ip, [r2, -0xc] | ip = *((r2 - 0xc));
0x00093144 ldr r0, [r2, -0x8] | r0 = *((r2 - 0x8));
0x00093148 str lr, [r3, -0x10] |
0x0009314c str ip, [r3, -0xc] | *((r3 - 0xc)) = ip;
0x00093150 str r0, [r3, -0x8] | *((r3 - 0x8)) = r0;
0x00093154 str r1, [r3, -0x4] | *((r3 - 0x4)) = r1;
0x00093158 ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x0009315a cmp r2, r1 |
0x0009315c bne 0x93136 |
| } while (r2 != r1);
0x0009315e b 0x9298a | goto label_14;
| label_65:
0x00093160 ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x00093162 movs r1, 1 | r1 = 1;
0x00093164 blx 0x84e8 | fcn_000084e8 ();
0x00093168 mov r2, r6 | r2 = r6;
0x0009316a mov r3, r7 | r3 = r7;
0x0009316c movs r1, 2 | r1 = 2;
0x0009316e ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x00093170 blx 0x84e8 | fcn_000084e8 ();
0x00093174 ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x00093176 blx 0x8728 | fcn_00008728 ();
0x0009317a ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x0009317c blx 0x81f8 | fcn_000081f8 ();
0x00093180 b 0x93120 | goto label_15;
| label_48:
0x00093182 movs r3, 0 | r3 = 0;
0x00093184 vmov.f64 d8, d12 | __asm ("vmov.f64 d8, d12");
0x00093188 str r3, [sp, 0x20] | var_20h = r3;
0x0009318a b 0x92f04 | goto label_16;
| label_54:
0x0009318c movs r1, 1 | r1 = 1;
0x0009318e ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x00093190 blx 0x84e8 | fcn_000084e8 ();
0x00093194 mov r2, r6 | r2 = r6;
0x00093196 mov r3, r7 | r3 = r7;
0x00093198 movs r1, 2 | r1 = 2;
0x0009319a ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x0009319c blx 0x84e8 | fcn_000084e8 ();
0x000931a0 ldr r0, [r4, 0x68] | r0 = *((r4 + 0x68));
0x000931a2 blx 0x8728 | fcn_00008728 ();
0x000931a6 ldr r2, [pc, 0x2b8] |
0x000931a8 ldr r3, [pc, 0x2a8] | r3 = *(0x93454);
0x000931aa add r2, pc | r2 = 0x126610;
0x000931ac ldr r3, [r2, r3] | r3 = imp.sinh;
0x000931ae ldr r2, [r3] | r2 = imp.sinh;
0x000931b0 ldr r3, [sp, 0xbc] | r3 = var_bch;
0x000931b2 eors r2, r3 | r2 ^= r3;
0x000931b4 mov.w r3, 0 | r3 = 0;
0x000931b8 it eq |
| if (r2 == r3) {
0x000931ba ldreq r0, [r4, 0x68] | r0 = *((r4 + 0x68));
| goto label_66;
| }
| if (r2 == r3) {
| label_66:
0x000931bc beq.w 0x92e22 | goto label_17;
| }
| label_55:
0x000931c0 blx 0x883c | fcn_0000883c ();
| label_64:
0x000931c4 mov r1, r5 | r1 = r5;
0x000931c6 mov r0, r4 | r0 = r4;
0x000931c8 bl 0x148e4 | fcn_000148e4 (r0, r1, r2, r3);
0x000931cc ldr r3, [sp, 8] | r3 = var_8h;
0x000931ce mov r7, r0 | r7 = r0;
0x000931d0 cmp r3, r8 |
0x000931d2 ite le |
| if (r3 > r8) {
0x000931d4 movle r3, 0 | r3 = 0;
| }
| if (r3 <= r8) {
0x000931d6 movgt r3, 1 | r3 = 1;
| }
0x000931d8 cmp r0, 0 |
0x000931da it ne |
| if (r0 == 0) {
0x000931dc movne r3, 0 | r3 = 0;
| }
0x000931de cmp r3, 0 |
| if (r3 == 0) {
0x000931e0 beq 0x9312a | goto label_18;
| }
0x000931e2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000931e4 add.w fp, sp, 0x54 |
0x000931e8 add.w r6, r3, r8, lsl 2 | r6 = r3 + (r8 << 2);
| label_19:
0x000931ec ldr r5, [r6], 4 | r5 = *(r6);
| r6 += 4;
0x000931f0 mov r3, fp | r3 = fp;
0x000931f2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000931f4 mov r0, r4 | r0 = r4;
0x000931f6 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x000931fa add.w r5, sb, r5, lsl 4 | r5 = sb + (r5 << 4);
0x000931fe mov r1, r5 | r1 = r5;
0x00093200 bl 0x926c0 | r0 = fcn_000926c0 (r0, r1, r2, r3);
0x00093204 mov r7, r0 | r7 = r0;
0x00093206 cmp r0, 0 |
| if (r0 != 0) {
0x00093208 bne 0x9312a | goto label_18;
| }
0x0009320a mov r2, r5 | r2 = r5;
0x0009320c ldr r5, [sp, 0x54] | r5 = var_54h;
0x0009320e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00093210 mov r0, r4 | r0 = r4;
0x00093212 mov r1, r5 | r1 = r5;
0x00093214 bl 0x92870 | r0 = fcn_00092870 (r0, r1, r2, r3);
0x00093218 mov r2, r0 | r2 = r0;
| if (r5 != 0) {
0x0009321a cbz r5, 0x93232 |
0x0009321c ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x0009321e subs r3, 1 | r3--;
0x00093220 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
| if (r3 != 0) {
0x00093222 cbnz r3, 0x93232 | goto label_67;
| }
0x00093224 str r0, [sp, 8] | var_8h = r0;
0x00093226 mov r1, r5 | r1 = r5;
0x00093228 mov r0, r4 | r0 = r4;
0x0009322a bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x0009322e ldr r2, [sp, 8] | r2 = var_8h;
0x00093230 mov r7, r0 | r7 = r0;
| }
| if (r2 != 0) {
| label_67:
0x00093232 cbz r2, 0x93238 |
0x00093234 mov r7, r2 | r7 = r2;
0x00093236 b 0x9312a | goto label_18;
| }
0x00093238 clz r3, r7 | r3 &= r7;
0x0009323c cmp sl, r8 |
0x0009323e lsr.w r3, r3, 5 | r3 >>= 5;
0x00093242 it le |
| if (sl > r8) {
0x00093244 movle r3, 0 | r3 = 0;
| }
0x00093246 add.w r8, r8, 1 | r8++;
0x0009324a cmp r3, 0 |
| if (r3 != 0) {
0x0009324c bne 0x931ec | goto label_19;
| }
0x0009324e b 0x9312a | goto label_18;
| label_45:
0x00093250 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00093252 movs r7, 7 | r7 = 7;
| if (r2 != 0) {
0x00093254 cbz r2, 0x93266 |
0x00093256 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00093258 subs r3, 1 | r3--;
0x0009325a str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| if (r3 != 0) {
0x0009325c cbnz r3, 0x93266 | goto label_68;
| }
| label_25:
0x0009325e ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x00093260 mov r0, r4 | r0 = r4;
0x00093262 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
| }
| label_68:
0x00093266 cmp.w sb, 0 |
| if (sb == 0) {
0x0009326a beq.w 0x92e58 | goto label_20;
| }
0x0009326e b 0x92e44 | goto label_21;
| label_44:
0x00093270 mov r1, r5 | r1 = r5;
0x00093272 mov r0, r4 | r0 = r4;
0x00093274 bl 0x40e08 | fcn_00040e08 (r0, r1);
0x00093278 mov r1, r5 | r1 = r5;
0x0009327a str r0, [sp, 0x10] | var_10h_2 = r0;
0x0009327c mov r0, r4 | r0 = r4;
0x0009327e bl 0x40e08 | fcn_00040e08 (r0, r1);
0x00093282 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00093284 mov sb, r0 | sb = r0;
0x00093286 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x00093288 movs r0, 1 | r0 = 1;
0x0009328a adds r3, 1 | r3++;
0x0009328c asrs r1, r3, 8 | r1 = r3 >> 8;
0x0009328e str r3, [r4, 0x1c] | *((r4 + 0x1c)) = r3;
0x00093290 str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
0x00093292 strb r1, [r2] | *(r2) = r1;
0x00093294 strb r3, [r2, 1] | *((r2 + 1)) = r3;
0x00093296 b 0x92b46 | goto label_22;
| label_42:
0x00093298 movs r7, 7 | r7 = 7;
0x0009329a b 0x92e58 | goto label_20;
| label_47:
0x0009329c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009329e movs r2, 0 | r2 = 0;
0x000932a0 add.w r8, sp, 0x58 | r8 += var_58h;
0x000932a4 add.w fp, sp, 0x88 |
0x000932a8 str r2, [sp, 0x30] | var_30h = r2;
0x000932aa str r3, [sp, 8] | var_8h = r3;
0x000932ac b 0x92f36 | goto label_23;
| label_36:
0x000932ae movs r7, 7 | r7 = 7;
0x000932b0 b 0x92e5e | goto label_13;
| label_46:
0x000932b2 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x000932b4 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000932b6 subs r3, 1 | r3--;
0x000932b8 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| if (r3 == 0) {
0x000932ba cbnz r3, 0x932c4 |
0x000932bc ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x000932be mov r0, r4 | r0 = r4;
0x000932c0 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
| }
0x000932c4 movs r7, 7 | r7 = 7;
0x000932c6 b 0x92e44 | goto label_21;
| label_60:
0x000932c8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000932ca mov r2, r8 | r2 = r8;
0x000932cc mov r0, r4 | r0 = r4;
0x000932ce add.w sl, r3, 1 | sl = r3 + 1;
0x000932d2 mov r3, sl | r3 = sl;
0x000932d4 bl 0x92870 | r0 = fcn_00092870 (r0, r1, r2, r3);
0x000932d8 mov r7, r0 | r7 = r0;
0x000932da cmp r0, 0 |
| if (r0 != 0) {
0x000932dc bne.w 0x92e32 | goto label_24;
| }
| label_27:
0x000932e0 ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x000932e2 mov r3, sl | r3 = sl;
0x000932e4 mov r2, fp | r2 = fp;
0x000932e6 mov r0, r4 | r0 = r4;
0x000932e8 ldr r1, [r1] | r1 = *(r1);
0x000932ea bl 0x92870 | r0 = fcn_00092870 (r0, r1, r2, r3);
0x000932ee mov r7, r0 | r7 = r0;
0x000932f0 cmp r0, 0 |
| if (r0 != 0) {
0x000932f2 bne.w 0x92e32 | goto label_24;
| }
0x000932f6 ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x000932f8 ldr r1, [r1, 0x18] | r1 = *((r1 + 0x18));
0x000932fa ldrh r3, [r1, 2] | r3 = *((r1 + 2));
0x000932fc cmp r3, 0 |
| if (r3 == 0) {
0x000932fe beq 0x933ea | goto label_69;
| }
0x00093300 mov sl, r0 | sl = r0;
0x00093302 mov fp, r0 |
0x00093304 b 0x93318 |
| while (r0 == 0) {
0x00093306 ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x00093308 add.w fp, fp, 1 |
0x0009330c ldr r1, [r1, 0x18] | r1 = *((r1 + 0x18));
0x0009330e ldrh r0, [r1, 2] | r0 = *((r1 + 2));
0x00093310 rev16 r0, r0 | __asm ("rev16 r0, r0");
0x00093312 uxth r0, r0 | r0 = (int16_t) r0;
0x00093314 cmp fp, r0 |
| if (fp >= r0) {
0x00093316 bge 0x933a2 | goto label_70;
| }
0x00093318 ldrb r3, [r4, 0x17] | r3 = *((r4 + 0x17));
0x0009331a mov r0, r4 | r0 = r4;
0x0009331c mla r3, fp, r3, r1 | __asm ("mla r3, fp, r3, r1");
0x00093320 ldr r7, [r3, 4] | r7 = *((r3 + 4));
0x00093322 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00093324 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00093326 rev r7, r7 | r7 = SWAP32 (r7);
0x00093328 rev.w r8, r1 | r1 = SWAP32 (r8);
0x0009332c str r3, [sp, 4] | var_4h_2 = r3;
0x0009332e mov r2, r8 | r2 = r8;
0x00093330 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00093332 str r3, [sp] | *(sp) = r3;
0x00093334 mov r3, r7 | r3 = r7;
0x00093336 bl 0x86464 | fcn_00086464 (r0, r1, r2, r3, r4);
0x0009333a ldr r3, [sp, 0x28] | r3 = var_28h_2;
0x0009333c ldrd r2, r3, [r3] | __asm ("ldrd r2, r3, [r3]");
0x00093340 cmp r7, r3 |
0x00093342 it eq |
| if (r7 == r3) {
0x00093344 cmpeq r8, r2 | __asm ("cmpeq r8, r2");
| }
0x00093346 it eq |
| if (r7 != r3) {
0x00093348 moveq sl, 1 | sl = 1;
| }
0x0009334c cmp r0, 0 |
0x0009334e beq 0x93306 |
| }
| label_30:
0x00093350 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x00093352 mov r7, r0 | r7 = r0;
0x00093354 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00093356 subs r3, 1 | r3--;
0x00093358 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x0009335a cmp r3, 0 |
| if (r3 == 0) {
0x0009335c beq.w 0x9325e | goto label_25;
| }
0x00093360 b 0x92e44 | goto label_21;
| label_59:
0x00093362 mov r1, sb | r1 = sb;
0x00093364 mov r0, r4 | r0 = r4;
0x00093366 bl 0x85f18 | r0 = fcn_00085f18 (r0, r1);
0x0009336a mov r7, r0 | r7 = r0;
0x0009336c cmp r0, 0 |
| if (r0 != 0) {
0x0009336e bne.w 0x92e32 | goto label_24;
| }
0x00093372 ldrd r2, r0, [sb, 8] | __asm ("ldrd r2, r0, [sb, 8]");
0x00093376 b 0x92ffc | goto label_26;
| label_62:
0x00093378 movw r7, 0x10b | r7 = 0x10b;
0x0009337c b 0x92e32 | goto label_24;
| label_61:
0x0009337e mov.w sl, -1 | sl = -1;
| label_63:
0x00093382 mov r3, sl | r3 = sl;
0x00093384 mov r0, r4 | r0 = r4;
0x00093386 mov r2, r8 | r2 = r8;
0x00093388 bl 0x120b4 | fcn_000120b4 (r0, r1, r2);
0x0009338c mov r2, r8 | r2 = r8;
0x0009338e bl 0x147c0 | r0 = fcn_000147c0 (r0, r1, r2);
0x00093392 mov r7, r0 | r7 = r0;
0x00093394 cmp r0, 0 |
| if (r0 != 0) {
0x00093396 bne.w 0x92e32 | goto label_24;
| }
0x0009339a ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009339c add.w sl, r3, 1 | sl = r3 + 1;
0x000933a0 b 0x932e0 | goto label_27;
| label_70:
0x000933a2 ldrd r1, r0, [r5, 8] | __asm ("ldrd r1, r0, [r5, 8]");
0x000933a6 subs r1, 1 | r1--;
0x000933a8 orrs r1, r0 | r1 |= r0;
| if (r1 == r0) {
0x000933aa beq 0x93412 | goto label_71;
| }
0x000933ac cmp.w sl, 0 |
| if (sl == 0) {
0x000933b0 beq 0x933fc | goto label_72;
| }
| label_28:
0x000933b2 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x000933b4 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000933b6 subs r3, 1 | r3--;
0x000933b8 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| if (r3 != 0) {
0x000933ba cbnz r3, 0x933cc | goto label_73;
| }
0x000933bc ldr r1, [sp, 0x10] | r1 = var_10h_2;
0x000933be mov r0, r4 | r0 = r4;
0x000933c0 bl 0x85fb4 | r0 = fcn_00085fb4 (r0, r1);
0x000933c4 mov r7, r0 | r7 = r0;
0x000933c6 cmp r0, 0 |
| if (r0 != 0) {
0x000933c8 bne.w 0x92e44 | goto label_21;
| }
| label_73:
0x000933cc ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000933d0 movs r7, 0 | r7 = 0;
0x000933d2 subs r3, 1 | r3--;
0x000933d4 str.w r3, [sb, 0x10] | __asm ("str.w r3, [sb, 0x10]");
0x000933d8 cmp r3, 0 |
| if (r3 != 0) {
0x000933da bne.w 0x92e58 | goto label_20;
| }
0x000933de mov r1, sb | r1 = sb;
0x000933e0 mov r0, r4 | r0 = r4;
0x000933e2 bl 0x85fb4 | r0 = fcn_00085fb4 (r0, r1);
0x000933e6 mov r7, r0 | r7 = r0;
0x000933e8 b 0x92e58 | goto label_20;
| label_69:
0x000933ea ldrd r3, r2, [r5, 8] | __asm ("ldrd r3, r2, [r5, 8]");
0x000933ee subs r3, 1 | r3--;
0x000933f0 orrs r3, r2 | r3 |= r2;
0x000933f2 itt ne |
| if (r3 == r2) {
0x000933f4 ldrne r3, [sp, 0x28] | r3 = var_28h_2;
| }
| if (r3 != r2) {
0x000933f6 ldrdne r2, r3, [r3] | __asm ("ldrdne r2, r3, [r3]");
| }
| if (r3 == r2) {
0x000933fa beq 0x93412 | goto label_71;
| }
| label_72:
0x000933fc ldr r1, [sp, 0x24] | r1 = var_24h;
0x000933fe mov r0, r4 | r0 = r4;
0x00093400 strd sb, r1, [sp] | __asm ("strd sb, r1, [sp]");
0x00093404 bl 0x86464 | r0 = fcn_00086464 (r0, r1, r2, r3, r4);
0x00093408 mov r7, r0 | r7 = r0;
0x0009340a cmp r0, 0 |
| if (r0 != 0) {
0x0009340c bne.w 0x92e32 | goto label_24;
| }
0x00093410 b 0x933b2 | goto label_28;
| label_71:
0x00093412 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00093416 movs r5, 0 | r5 = 0;
0x00093418 ldrh r2, [r3, 2] | r2 = *((r3 + 2));
| if (r2 != 0) {
0x0009341a cbnz r2, 0x9342e | goto label_74;
| }
0x0009341c b 0x933b2 | goto label_28;
| label_29:
0x0009341e ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00093422 adds r5, 1 | r5++;
0x00093424 ldrh r2, [r3, 2] | r2 = *((r3 + 2));
0x00093426 rev16 r2, r2 | __asm ("rev16 r2, r2");
0x00093428 uxth r2, r2 | r2 = (int16_t) r2;
0x0009342a cmp r5, r2 |
| if (r5 >= r2) {
0x0009342c bge 0x933b2 | goto label_28;
| }
| label_74:
0x0009342e ldrb r2, [r4, 0x17] | r2 = *((r4 + 0x17));
0x00093430 mov r0, r4 | r0 = r4;
0x00093432 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00093434 mla r2, r5, r2, r3 | __asm ("mla r2, r5, r2, r3");
0x00093438 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0009343a ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0009343c strd sb, r1, [sp] | __asm ("strd sb, r1, [sp]");
0x00093440 rev r3, r3 | r3 = SWAP32 (r3);
0x00093442 rev r2, r2 | r2 = SWAP32 (r2);
0x00093444 bl 0x86464 | r0 = fcn_00086464 (r0, r1, r2, r3, r4);
0x00093448 cmp r0, 0 |
| if (r0 == 0) {
0x0009344a beq 0x9341e | goto label_29;
| }
0x0009344c b 0x93350 | goto label_30;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x93464 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00093464 () | void fcn_00093464 (int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_4h_2;
| int16_t var_8h;
| int32_t var_8h_3;
| int16_t var_8h_4;
| int32_t var_ch_2;
| int16_t var_3ch;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_54h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00093464 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00093468 mov r5, r2 | r5 = r2;
0x0009346a ldr r2, [pc, 0x300] |
0x0009346c mov r7, r3 | r7 = r3;
0x0009346e sub sp, 0x5c |
0x00093470 movs r4, 0 | r4 = 0;
0x00093472 ldr r3, [pc, 0x2fc] | r3 = *(0x93772);
0x00093474 add r1, sp, 0x18 | r1 += var_18h;
0x00093476 add r2, pc | r2 = 0x126be8;
0x00093478 strd r4, r1, [sp] | __asm ("strd r4, r1, [sp]");
0x0009347c str r4, [sp, 0x18] | var_18h = r4;
0x0009347e mov r6, r0 | r6 = r0;
0x00093480 ldr r3, [r2, r3] |
0x00093482 movs r2, 1 | r2 = 1;
0x00093484 ldr r3, [r3] | r3 = imp.sinh;
0x00093486 str r3, [sp, 0x54] | var_54h = r3;
0x00093488 mov.w r3, 0 | r3 = 0;
0x0009348c movs r3, 0 | r3 = 0;
0x0009348e bl 0x92204 | r0 = fcn_00092204 (r0, r1, r2, r3, r4);
0x00093492 mov r4, r0 | r4 = r0;
0x00093494 cmp r0, 0 |
| if (r0 == 0) {
0x00093496 beq 0x93588 | goto label_17;
| }
0x00093498 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x0009349a ldr.w sl, [sp, 0x18] | sl = var_18h;
0x0009349e str r5, [sp, 0x14] | var_14h = r5;
0x000934a0 cmp r5, 0 |
| if (r5 == 0) {
0x000934a2 beq.w 0x935aa | goto label_4;
| }
| label_2:
0x000934a6 add.w sb, sp, 0x1c | sb += var_1ch;
0x000934aa add r7, sp, 0x20 | r7 += var_20h;
0x000934ac mov fp, sl |
| if (r4 == 0) {
| do {
0x000934ae cbz r4, 0x93508 | goto label_18;
| }
| label_0:
0x000934b0 ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x000934b2 mov r0, r5 | r0 = r5;
0x000934b4 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000934b6 subs r3, 1 | r3--;
0x000934b8 str r2, [r6, 0x44] | *((r6 + 0x44)) = r2;
0x000934ba str r3, [r6, 0x3c] | *((r6 + 0x3c)) = r3;
0x000934bc blx 0x8404 | fcn_00008404 ();
0x000934c0 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x000934c2 str r5, [sp, 0x14] | var_14h = r5;
0x000934c4 cmp r5, 0 |
0x000934c6 bne 0x934ae |
| } while (r5 != 0);
0x000934c8 mov sl, fp | sl = fp;
0x000934ca cmp r4, 0 |
| if (r4 != 0) {
0x000934cc bne 0x935aa | goto label_4;
| }
| label_7:
0x000934ce cmp.w sl, 0 |
| if (sl == 0) {
0x000934d2 beq.w 0x935da | goto label_19;
| }
| label_6:
0x000934d6 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000934da subs r3, 1 | r3--;
0x000934dc str.w r3, [sl, 0x10] | __asm ("str.w r3, [sl, 0x10]");
0x000934e0 cmp r3, 0 |
| if (r3 != 0) {
0x000934e2 bne 0x935da | goto label_19;
| }
0x000934e4 ldr r2, [pc, 0x28c] |
0x000934e6 ldr r3, [pc, 0x288] | r3 = *(0x93772);
0x000934e8 add r2, pc | r2 = 0x126c60;
0x000934ea ldr r3, [r2, r3] | r3 = imp.sinh;
0x000934ec ldr r2, [r3] | r2 = imp.sinh;
0x000934ee ldr r3, [sp, 0x54] | r3 = var_54h;
0x000934f0 eors r2, r3 | r2 ^= r3;
0x000934f2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000934f6 bne.w 0x93768 | goto label_20;
| }
0x000934fa mov r1, sl | r1 = sl;
0x000934fc mov r0, r6 | r0 = r6;
0x000934fe add sp, 0x5c |
0x00093500 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00093504 b.w 0x85fb4 | void (*0x85fb4)() ();
| label_18:
0x00093508 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x0009350a ldrh r1, [r2, 2] | r1 = *((r2 + 2));
0x0009350c rev16 r1, r1 | __asm ("rev16 r1, r1");
0x0009350e uxth r1, r1 | r1 = (int16_t) r1;
0x00093510 cmp r1, 0 |
| if (r1 == 0) {
0x00093512 beq 0x934b0 | goto label_0;
| }
0x00093514 mov r8, r4 | r8 = r4;
0x00093516 str r1, [sp, 8] | var_8h_2 = r1;
| label_1:
0x00093518 ldrb r1, [r6, 0x17] | r1 = *((r6 + 0x17));
0x0009351a mov r3, r8 | r3 = r8;
0x0009351c ldrb r0, [r6, 0x15] | r0 = *((r6 + 0x15));
0x0009351e str r7, [sp] | *(sp) = r7;
0x00093520 bl 0x1206c | fcn_0001206c (r0, r1, r2, r3);
0x00093524 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00093526 mov r3, sb | r3 = sb;
0x00093528 mov r1, r7 | r1 = r7;
0x0009352a mov r0, r6 | r0 = r6;
0x0009352c bl 0x926c0 | r0 = fcn_000926c0 (r0, r1, r2, r3);
0x00093530 mov r4, r0 | r4 = r0;
0x00093532 cmp r0, 0 |
| if (r0 != 0) {
0x00093534 bne 0x934b0 | goto label_0;
| }
0x00093536 ldr.w sl, [sp, 0x1c] | sl = var_1ch;
0x0009353a mov r2, r7 | r2 = r7;
0x0009353c ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0009353e mov r0, r6 | r0 = r6;
0x00093540 mov r1, sl | r1 = sl;
0x00093542 bl 0x92870 | r0 = fcn_00092870 (r0, r1, r2, r3);
0x00093546 mov r3, r0 | r3 = r0;
0x00093548 cmp.w sl, 0 |
| if (sl != 0) {
0x0009354c beq 0x93568 |
0x0009354e ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x00093552 subs r2, 1 | r2--;
0x00093554 str.w r2, [sl, 0x10] | __asm ("str.w r2, [sl, 0x10]");
| if (r2 != 0) {
0x00093558 cbnz r2, 0x93568 | goto label_21;
| }
0x0009355a str r0, [sp, 0xc] | var_ch = r0;
0x0009355c mov r1, sl | r1 = sl;
0x0009355e mov r0, r6 | r0 = r6;
0x00093560 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x00093564 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00093566 mov r4, r0 | r4 = r0;
| }
| if (r3 != 0) {
| label_21:
0x00093568 cbz r3, 0x9356e |
0x0009356a mov r4, r3 | r4 = r3;
0x0009356c b 0x934b0 | goto label_0;
| }
0x0009356e ldr r2, [sp, 8] | r2 = var_8h_2;
0x00093570 add.w r8, r8, 1 | r8++;
0x00093574 clz r3, r4 | r3 &= r4;
0x00093578 lsrs r3, r3, 5 | r3 >>= 5;
0x0009357a cmp r2, r8 |
0x0009357c it le |
| if (r2 > r8) {
0x0009357e movle r3, 0 | r3 = 0;
| }
0x00093580 cmp r3, 0 |
| if (r3 == 0) {
0x00093582 beq 0x934b0 | goto label_0;
| }
0x00093584 ldr r2, [r5, 0x18] | r2 = *((r5 + 0x18));
0x00093586 b 0x93518 | goto label_1;
| label_17:
0x00093588 add r3, sp, 0x14 | r3 += var_14h;
0x0009358a str r0, [sp, 4] | var_4h = r0;
0x0009358c str r3, [sp] | *(sp) = r3;
0x0009358e mov r2, r5 | r2 = r5;
0x00093590 mov r3, r7 | r3 = r7;
0x00093592 mov r0, r6 | r0 = r6;
0x00093594 bl 0x92424 | fcn_00092424 (r0, r1, r2);
0x00093598 ldr.w sl, [sp, 0x18] | sl = var_18h;
0x0009359c mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0009359e cbz r0, 0x935e8 | goto label_22;
| }
| label_5:
0x000935a0 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x000935a2 str r5, [sp, 0x14] | var_14h = r5;
0x000935a4 cmp r5, 0 |
| if (r5 != 0) {
0x000935a6 bne.w 0x934a6 | goto label_2;
| }
| label_4:
0x000935aa cmp.w sl, 0 |
| if (sl == 0) {
0x000935ae beq 0x935bc | goto label_3;
| }
| label_8:
0x000935b0 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000935b4 subs r3, 1 | r3--;
0x000935b6 str.w r3, [sl, 0x10] | __asm ("str.w r3, [sl, 0x10]");
| if (r3 == 0) {
0x000935ba cbz r3, 0x935de | goto label_23;
| }
| do {
| label_3:
0x000935bc ldr r2, [pc, 0x1b8] |
0x000935be ldr r3, [pc, 0x1b0] | r3 = *(0x93772);
0x000935c0 add r2, pc | r2 = 0x126d3c;
0x000935c2 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000935c4 ldr r2, [r3] | r2 = imp.sinh;
0x000935c6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000935c8 eors r2, r3 | r2 ^= r3;
0x000935ca mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000935ce bne.w 0x93768 | goto label_20;
| }
0x000935d2 mov r0, r4 | r0 = r4;
0x000935d4 add sp, 0x5c |
0x000935d6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x000935da movs r4, 0 | r4 = 0;
0x000935dc b 0x935bc |
| } while (1);
| label_23:
0x000935de mov r1, sl | r1 = sl;
0x000935e0 mov r0, r6 | r0 = r6;
0x000935e2 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x000935e6 b 0x935bc | goto label_3;
| label_22:
0x000935e8 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000935ea cmp r1, 0 |
| if (r1 == 0) {
0x000935ec beq 0x93662 | goto label_24;
| }
0x000935ee ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x000935f0 ldrh.w ip, [r3, 2] | ip = *((r3 + 2));
0x000935f4 rev16.w ip, ip | __asm ("rev16.w ip, ip");
0x000935f8 uxth.w ip, ip | ip = (int16_t) ip;
0x000935fc cmp.w ip, 0 |
| if (ip == 0) {
0x00093600 beq 0x9369e | goto label_25;
| }
0x00093602 ldrb.w lr, [r6, 0x17] |
0x00093606 adds r3, 4 | r3 += 4;
0x00093608 b 0x93612 |
| while (r7 != r2) {
0x0009360a adds r4, 1 | r4++;
0x0009360c add r3, lr | r3 += lr;
0x0009360e cmp ip, r4 |
| if (ip == r4) {
0x00093610 beq 0x9369e | goto label_25;
| }
0x00093612 ldr r2, [r3] | r2 = *(r3);
0x00093614 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00093616 rev r2, r2 | r2 = SWAP32 (r2);
0x00093618 rev r0, r0 | r0 = SWAP32 (r0);
0x0009361a cmp r7, r2 |
0x0009361c it eq |
| if (r7 == r2) {
0x0009361e cmpeq r5, r0 | __asm ("cmpeq r5, r0");
| }
0x00093620 bne 0x9360a |
| }
0x00093622 movs r3, 0 | r3 = 0;
0x00093624 mov r2, r4 | r2 = r4;
0x00093626 mov r0, r6 | r0 = r6;
0x00093628 str r1, [sp, 8] | var_8h_2 = r1;
0x0009362a bl 0x9247c | fcn_0009247c (r0, r1, r2, r3);
0x0009362e ldr r1, [sp, 8] | r1 = var_8h_2;
0x00093630 mov r8, r0 | r8 = r0;
0x00093632 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x00093634 subs r3, 1 | r3--;
0x00093636 str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 == 0) {
0x00093638 cbz r3, 0x9364e | goto label_26;
| }
0x0009363a cmp.w r8, 0 |
| if (r8 == 0) {
0x0009363e beq 0x93662 | goto label_24;
| }
0x00093640 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x00093642 mov r4, r8 | r4 = r8;
0x00093644 str r5, [sp, 0x14] | var_14h = r5;
0x00093646 cmp r5, 0 |
| if (r5 != 0) {
0x00093648 bne.w 0x934a6 | goto label_2;
| }
0x0009364c b 0x935aa | goto label_4;
| label_26:
0x0009364e mov r0, r6 | r0 = r6;
0x00093650 bl 0x85fb4 | r0 = fcn_00085fb4 (r0, r1);
0x00093654 mov r4, r0 | r4 = r0;
0x00093656 cmp.w r8, 0 |
| if (r8 != 0) {
0x0009365a bne.w 0x93764 | goto label_27;
| }
0x0009365e cmp r0, 0 |
| if (r0 != 0) {
0x00093660 bne 0x935a0 | goto label_5;
| }
| label_24:
0x00093662 mov r2, r5 | r2 = r5;
0x00093664 mov r3, r7 | r3 = r7;
0x00093666 movs r1, 1 | r1 = 1;
0x00093668 ldr r0, [r6, 0x60] | r0 = *((r6 + 0x60));
0x0009366a blx 0x84e8 | fcn_000084e8 ();
0x0009366e ldr r0, [r6, 0x60] | r0 = *((r6 + 0x60));
0x00093670 blx 0x8728 | fcn_00008728 ();
0x00093674 ldr r0, [r6, 0x60] | r0 = *((r6 + 0x60));
0x00093676 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009367a mov r4, r0 | r4 = r0;
0x0009367c cmp r0, 0 |
| if (r0 != 0) {
0x0009367e bne 0x935a0 | goto label_5;
| }
0x00093680 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x00093682 cmp r3, 0 |
| if (r3 <= 0) {
0x00093684 ble 0x936b6 | goto label_28;
| }
0x00093686 ldr.w r2, [sl, 0x18] | r2 = *((sl + 0x18));
0x0009368a ldrh r3, [r2, 2] | r3 = *((r2 + 2));
0x0009368c cmp.w r3, 0x100 |
| if (r3 == 0x100) {
0x00093690 beq 0x936c2 | goto label_29;
| }
0x00093692 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x00093694 str r5, [sp, 0x14] | var_14h = r5;
0x00093696 cmp r5, 0 |
| if (r5 != 0) {
0x00093698 bne.w 0x934a6 | goto label_2;
| }
0x0009369c b 0x934d6 | goto label_6;
| label_25:
0x0009369e ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000936a0 subs r3, 1 | r3--;
0x000936a2 str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 == 0) {
0x000936a4 cbz r3, 0x936fc | goto label_30;
| }
0x000936a6 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x000936a8 movw r4, 0x10b | r4 = 0x10b;
0x000936ac str r5, [sp, 0x14] | var_14h = r5;
0x000936ae cmp r5, 0 |
| if (r5 != 0) {
0x000936b0 bne.w 0x934a6 | goto label_2;
| }
0x000936b4 b 0x935aa | goto label_4;
| label_28:
0x000936b6 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x000936b8 str r5, [sp, 0x14] | var_14h = r5;
0x000936ba cmp r5, 0 |
| if (r5 != 0) {
0x000936bc bne.w 0x934a6 | goto label_2;
| }
0x000936c0 b 0x934ce | goto label_7;
| label_29:
0x000936c2 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000936c4 add r1, sp, 0x1c | r1 += var_1ch;
0x000936c6 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000936c8 str r0, [sp, 0x1c] | var_1ch = r0;
0x000936ca mov r0, r6 | r0 = r6;
0x000936cc rev r3, r3 | r3 = SWAP32 (r3);
0x000936ce str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000936d2 rev r2, r2 | r2 = SWAP32 (r2);
0x000936d4 str r1, [sp, 4] | var_4h = r1;
0x000936d6 bl 0x92204 | r0 = fcn_00092204 (r0, r1, r2, r3, r4);
0x000936da mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000936dc cbz r0, 0x93708 | goto label_31;
| }
0x000936de ldr r1, [sp, 0x1c] | r1 = var_1ch;
| if (r1 != 0) {
0x000936e0 cbz r1, 0x936f0 |
0x000936e2 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000936e4 subs r3, 1 | r3--;
0x000936e6 str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
| if (r3 != 0) {
0x000936e8 cbnz r3, 0x936f0 | goto label_9;
| }
0x000936ea mov r0, r6 | r0 = r6;
0x000936ec bl 0x85fb4 | fcn_00085fb4 (r0, r1);
| }
| label_9:
0x000936f0 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x000936f2 str r5, [sp, 0x14] | var_14h = r5;
0x000936f4 cmp r5, 0 |
| if (r5 != 0) {
0x000936f6 bne.w 0x934a6 | goto label_2;
| }
0x000936fa b 0x935b0 | goto label_8;
| label_30:
0x000936fc mov r0, r6 | r0 = r6;
0x000936fe movw r4, 0x10b | r4 = 0x10b;
0x00093702 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x00093706 b 0x935a0 | goto label_5;
| label_31:
0x00093708 ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x0009370a mov r0, r6 | r0 = r6;
0x0009370c ldr r2, [r6, 0x1c] | r2 = *((r6 + 0x1c));
0x0009370e mov r1, r7 | r1 = r7;
0x00093710 subs r2, 1 | r2--;
0x00093712 bl 0x9258c | r0 = fcn_0009258c (r0, r1, r2);
0x00093716 mov r5, r0 | r5 = r0;
| if (r7 == 0) {
0x00093718 cbz r7, 0x9373c | goto label_32;
| }
0x0009371a ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0009371c subs r3, 1 | r3--;
0x0009371e str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
| if (r3 != 0) {
0x00093720 cbnz r3, 0x9373c | goto label_32;
| }
0x00093722 mov r1, r7 | r1 = r7;
0x00093724 mov r0, r6 | r0 = r6;
0x00093726 bl 0x85fb4 | fcn_00085fb4 (r0, r1);
| if (r5 != 0) {
0x0009372a cbnz r5, 0x93760 | goto label_33;
| }
| if (r0 == 0) {
0x0009372c cbz r0, 0x9373e | goto label_34;
| }
0x0009372e ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x00093730 mov r4, r0 | r4 = r0;
0x00093732 str r5, [sp, 0x14] | var_14h = r5;
0x00093734 cmp r5, 0 |
| if (r5 != 0) {
0x00093736 bne.w 0x934a6 | goto label_2;
| }
0x0009373a b 0x935b0 | goto label_8;
| if (r5 != 0) {
| label_32:
0x0009373c cbnz r5, 0x93760 | goto label_33;
| }
| label_34:
0x0009373e ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x00093740 ldr.w r2, [sl, 0x18] | r2 = *((sl + 0x18));
0x00093744 subs r3, 1 | r3--;
0x00093746 str r3, [r6, 0x1c] | *((r6 + 0x1c)) = r3;
0x00093748 strb r3, [r2, 1] | *((r2 + 1)) = r3;
0x0009374a asrs r3, r3, 8 | r3 >>= 8;
0x0009374c strb r3, [r2] | *(r2) = r3;
0x0009374e movs r3, 1 | r3 = 1;
0x00093750 ldr r5, [r6, 0x44] | r5 = *((r6 + 0x44));
0x00093752 str.w r3, [sl, 0x14] | __asm ("str.w r3, [sl, 0x14]");
0x00093756 str r5, [sp, 0x14] | var_14h = r5;
0x00093758 cmp r5, 0 |
| if (r5 != 0) {
0x0009375a bne.w 0x934a6 | goto label_2;
| }
0x0009375e b 0x934d6 | goto label_6;
| label_33:
0x00093760 mov r4, r5 | r4 = r5;
0x00093762 b 0x936f0 | goto label_9;
| label_27:
0x00093764 mov r4, r8 | r4 = r8;
0x00093766 b 0x935a0 | goto label_5;
| label_20:
0x00093768 blx 0x883c | fcn_0000883c ();
0x0009376c ldr r2, [r4, r0] | r2 = *((r4 + r0));
0x0009376e movs r3, r0 | r3 = r0;
0x00093770 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00093772 movs r0, r0 |
0x00093774 ldrsb r0, [r6, r6] | r0 = *((r6 + r6));
0x00093776 movs r3, r0 | r3 = r0;
0x00093778 ldrsb r0, [r3, r3] | r0 = *((r3 + r3));
0x0009377a movs r3, r0 | r3 = r0;
0x0009377c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00093780 mov r7, r2 | r7 = r2;
0x00093782 ldr r2, [pc, 0x344] |
0x00093784 mov r8, r3 | r8 = r3;
0x00093786 ldr r3, [pc, 0x344] | r3 = *(0x93ace);
0x00093788 add r2, pc | r2 = 0x127256;
0x0009378a ldr r4, [r0, 0x3c] | r4 = *((r0 + 0x3c));
0x0009378c vpush {d8, d9} | __asm ("vpush {d8, d9}");
0x00093790 sub sp, 0x40 |
0x00093792 ldr r3, [r2, r3] |
0x00093794 ldr r3, [r3] | r3 = imp.sinh;
0x00093796 str r3, [sp, 0x3c] | var_3ch = r3;
0x00093798 mov.w r3, 0 | r3 = 0;
0x0009379c cmp r4, 0 |
| if (r4 != 0) {
0x0009379e bne.w 0x9396a | goto label_35;
| }
0x000937a2 ldr r3, [r0, 0x28] | r3 = *((r0 + 0x28));
0x000937a4 cmp r1, 1 |
0x000937a6 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000937aa mov r5, r0 | r5 = r0;
0x000937ac add.w r3, r3, 1 | r3++;
0x000937b0 vstr d16, [sp, 8] | __asm ("vstr d16, [sp, 8]");
0x000937b4 str r3, [r0, 0x28] | *((r0 + 0x28)) = r3;
| if (r1 <= 1) {
0x000937b6 ble 0x9383e | goto label_36;
| }
0x000937b8 ldrb r6, [r0, 0x15] | r6 = *((r0 + 0x15));
0x000937ba subs r1, 4 | r1 -= 4;
0x000937bc ldrb r3, [r0, 0x16] | r3 = *((r0 + 0x16));
0x000937be cmp r6, r1 |
0x000937c0 it ge |
| if (r6 < r1) {
0x000937c2 movge r6, r1 | r6 = r1;
| }
0x000937c4 cmp r3, 0 |
| if (r3 == 0) {
0x000937c6 beq 0x938b4 | goto label_37;
| }
0x000937c8 cmp r6, 0 |
| if (r6 <= 0) {
0x000937ca ble 0x9386c | goto label_12;
| }
0x000937cc subs r6, 1 | r6--;
0x000937ce mov sb, r7 | sb = r7;
0x000937d0 bic r6, r6, 1 | r6 = BIT_MASK (r6, 1);
0x000937d4 add r4, sp, 8 | r4 += var_8h;
0x000937d6 adds r6, 3 | r6 += 3;
0x000937d8 mov.w sl, 1 | sl = 1;
0x000937dc b 0x937ee |
| while (r0 >= r3) {
0x000937de add.w sl, sl, 2 | sl += 2;
0x000937e2 add.w sb, sb, 8 | sb += 8;
0x000937e6 cmp r6, sl |
0x000937e8 add.w r4, r4, 8 | r4 += var_8h_4;
| if (r6 == sl) {
0x000937ec beq 0x9386c | goto label_12;
| }
0x000937ee ldr.w r0, [sb, 0xc] | r0 = *((sb + 0xc));
0x000937f2 blx 0x828c | r0 = loc_imp_gmon_start_ ();
0x000937f6 mov r3, r0 | r3 = r0;
0x000937f8 ldr.w r0, [sb, 0x10] | r0 = *((sb + 0x10));
0x000937fc str r3, [r4, 8] | var_8h_4 = r3;
0x000937fe blx 0x828c | loc_imp_gmon_start_ ();
0x00093802 ldr r3, [r4, 8] | r3 = var_8h_4;
0x00093804 str r0, [r4, 0xc] | var_ch_2 = r0;
0x00093806 cmp r0, r3 |
0x00093808 bge 0x937de |
| }
0x0009380a mov r1, sl | r1 = sl;
0x0009380c mov r0, r5 | r0 = r5;
0x0009380e bl 0x7be7c | r0 = fcn_0007be7c (r0, r1, r2, r3, r4);
0x00093812 mov r4, r0 | r4 = r0;
| do {
| label_11:
0x00093814 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x00093816 subs r3, 1 | r3--;
0x00093818 str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
| if (r3 == 0) {
0x0009381a cbz r3, 0x93864 | goto label_38;
| }
| label_10:
0x0009381c ldr r2, [pc, 0x2b0] |
0x0009381e ldr r3, [pc, 0x2ac] | r3 = *(0x93ace);
0x00093820 add r2, pc | r2 = 0x1272f4;
0x00093822 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00093824 ldr r2, [r3] | r2 = imp.sinh;
0x00093826 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00093828 eors r2, r3 | r2 ^= r3;
0x0009382a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009382e bne.w 0x93ab0 | goto label_39;
| }
0x00093832 mov r0, r4 | r0 = r4;
0x00093834 add sp, 0x40 |
0x00093836 vpop {d8, d9} | __asm ("vpop {d8, d9}");
0x0009383a pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_36:
0x0009383e ldr r0, [r7] | r0 = *(r7);
0x00093840 blx 0x8944 | r0 = fcn_00008944 ();
0x00093844 cmp r0, 5 |
0x00093846 beq 0x93814 |
| } while (r0 == 5);
0x00093848 ldr r0, [r7] | r0 = *(r7);
0x0009384a blx 0x89d4 | r0 = fcn_000089d4 ();
0x0009384e mov r2, r0 | r2 = r0;
0x00093850 mov r3, r1 | r3 = r1;
0x00093852 mov r0, r5 | r0 = r5;
0x00093854 bl 0x93464 | fcn_00093464 (r0, r1, r2);
| label_14:
0x00093858 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0009385a mov r4, r0 | r4 = r0;
0x0009385c subs r3, 1 | r3--;
0x0009385e str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
0x00093860 cmp r3, 0 |
| if (r3 != 0) {
0x00093862 bne 0x9381c | goto label_10;
| }
| label_38:
0x00093864 mov r0, r5 | r0 = r5;
0x00093866 bl 0x610f8 | fcn_000610f8 (r0);
0x0009386a b 0x9381c | goto label_10;
| label_12:
0x0009386c ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x0009386e blx 0x8944 | r0 = fcn_00008944 ();
0x00093872 cmp r0, 5 |
| if (r0 != 5) {
0x00093874 bne 0x93970 | goto label_40;
| }
0x00093876 ldr r0, [r7] | r0 = *(r7);
0x00093878 blx 0x8944 | r0 = fcn_00008944 ();
0x0009387c cmp r0, 5 |
| if (r0 == 5) {
0x0009387e beq 0x93896 | goto label_41;
| }
0x00093880 ldr r0, [r7] | r0 = *(r7);
0x00093882 blx 0x89d4 | r0 = fcn_000089d4 ();
0x00093886 mov r2, r0 | r2 = r0;
0x00093888 mov r3, r1 | r3 = r1;
0x0009388a mov r0, r5 | r0 = r5;
0x0009388c bl 0x93464 | r0 = fcn_00093464 (r0, r1, r2);
0x00093890 mov r4, r0 | r4 = r0;
0x00093892 cmp r0, 0 |
| if (r0 != 0) {
0x00093894 bne 0x93814 | goto label_11;
| }
| label_41:
0x00093896 add r6, sp, 8 | r6 += var_8h;
0x00093898 movs r3, 0 | r3 = 0;
0x0009389a mov r1, r6 | r1 = r6;
0x0009389c mov r0, r5 | r0 = r5;
0x0009389e str r3, [sp, 4] | var_4h_2 = r3;
0x000938a0 bl 0x85ee4 | fcn_00085ee4 (r0, r1);
0x000938a4 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x000938a8 mov r4, r0 | r4 = r0;
0x000938aa strd r2, r3, [r8] | __asm ("strd r2, r3, [r8]");
0x000938ae cmp r0, 0 |
| if (r0 != 0) {
0x000938b0 bne 0x93814 | goto label_11;
| }
0x000938b2 b 0x939f6 | goto label_42;
| label_37:
0x000938b4 cmp r6, 0 |
| if (r6 <= 0) {
0x000938b6 ble 0x9386c | goto label_12;
| }
0x000938b8 add.w sb, r6, -1 | sb = r6 + -1;
0x000938bc vldr d9, [pc, 0x1f8] | __asm ("vldr d9, aav.0x000000ff");
0x000938c0 bic sb, sb, 1 | sb = BIT_MASK (sb, 1);
0x000938c4 vldr d8, [pc, 0x1f8] | __asm ("vldr d8, aav.0x000000ff");
0x000938c8 mov r6, r7 | r6 = r7;
0x000938ca add.w sb, sb, 3 | sb += 3;
0x000938ce add r4, sp, 8 | r4 += var_8h;
0x000938d0 mov.w sl, 1 | sl = 1;
0x000938d4 b 0x938e4 | goto label_43;
| label_13:
0x000938d6 add.w sl, sl, 2 | sl += 2;
0x000938da adds r6, 8 | r6 += 8;
0x000938dc cmp sb, sl |
0x000938de add.w r4, r4, 8 | r4 += var_8h_4;
| if (sb == sl) {
0x000938e2 beq 0x9386c | goto label_12;
| }
| label_43:
0x000938e4 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000938e6 blx 0x83dc | floor (r0);
0x000938ea vcvt.f32.f64 s15, d0 | __asm ("vcvt.f32.f64 s15, d0");
0x000938ee vcvt.f64.f32 d16, s15 | __asm ("vcvt.f64.f32 d16, s15");
0x000938f2 vcmpe.f64 d0, d16 | __asm ("vcmpe.f64 d0, d16");
0x000938f6 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sb < sl) {
0x000938fa bpl 0x93916 |
0x000938fc vcmpe.f64 d0, 0 | __asm ("vcmpe.f64 d0, 0");
0x00093900 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x00093904 ite pl |
| if (sb >= sl) {
0x00093906 vmovpl d16, d8 | __asm ("vmovpl d16, d8");
| }
| if (sb < sl) {
0x0009390a vmov.f64 d16, d9 | __asm ("vmov.f64 d16, d9");
| }
0x0009390e vmul.f64 d0, d0, d16 | __asm ("vmul.f64 d0, d0, d16");
0x00093912 vcvt.f32.f64 s15, d0 | __asm ("vcvt.f32.f64 s15, d0");
| }
0x00093916 vstr s15, [r4, 8] | __asm ("vstr s15, [r4, 8]");
0x0009391a ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x0009391c blx 0x83dc | floor (r0);
0x00093920 vcvt.f32.f64 s15, d0 | __asm ("vcvt.f32.f64 s15, d0");
0x00093924 vcvt.f64.f32 d16, s15 | __asm ("vcvt.f64.f32 d16, s15");
0x00093928 vcmpe.f64 d0, d16 | __asm ("vcmpe.f64 d0, d16");
0x0009392c vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sb > sl) {
0x00093930 ble 0x9394c |
0x00093932 vcmpe.f64 d0, 0 | __asm ("vcmpe.f64 d0, 0");
0x00093936 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x0009393a ite pl |
| if (sb >= sl) {
0x0009393c vmovpl d16, d9 | __asm ("vmovpl d16, d9");
| }
| if (sb < sl) {
0x00093940 vmov.f64 d16, d8 | __asm ("vmov.f64 d16, d8");
| }
0x00093944 vmul.f64 d0, d0, d16 | __asm ("vmul.f64 d0, d0, d16");
0x00093948 vcvt.f32.f64 s15, d0 | __asm ("vcvt.f32.f64 s15, d0");
| }
0x0009394c vldr s14, [r4, 8] | __asm ("vldr s14, [r4, 8]");
0x00093950 vstr s15, [r4, 0xc] | __asm ("vstr s15, [r4, 0xc]");
0x00093954 vcmpe.f32 s14, s15 | __asm ("vcmpe.f32 s14, s15");
0x00093958 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sb <= sl) {
0x0009395c ble 0x938d6 | goto label_13;
| }
0x0009395e mov r1, sl | r1 = sl;
0x00093960 mov r0, r5 | r0 = r5;
0x00093962 bl 0x7be7c | r0 = fcn_0007be7c (r0, r1, r2, r3, r4);
0x00093966 mov r4, r0 | r4 = r0;
0x00093968 b 0x93814 | goto label_11;
| label_35:
0x0009396a movw r4, 0x206 | r4 = 0x206;
0x0009396e b 0x9381c | goto label_10;
| label_40:
0x00093970 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x00093972 blx 0x89d4 | fcn_000089d4 ();
0x00093976 strd r0, r1, [sp, 8] | __asm ("strd r0, r1, [var_8h]");
0x0009397a ldr r0, [r7] | r0 = *(r7);
0x0009397c blx 0x8944 | r0 = fcn_00008944 ();
0x00093980 cmp r0, 5 |
0x00093982 it eq |
| if (r0 == 5) {
0x00093984 ldrdeq r2, r3, [sp, 8] | __asm ("ldrdeq r2, r3, [var_8h]");
| }
| if (r0 != 5) {
0x00093988 beq 0x9399c |
0x0009398a ldr r0, [r7] | r0 = *(r7);
0x0009398c blx 0x89d4 | fcn_000089d4 ();
0x00093990 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x00093994 cmp r1, r3 |
0x00093996 it eq |
| if (r1 == r3) {
0x00093998 cmpeq r0, r2 | __asm ("cmpeq r0, r2");
| }
| if (r1 == r3) {
0x0009399a beq 0x939c6 | goto label_44;
| }
| }
0x0009399c movs r1, 1 | r1 = 1;
0x0009399e ldr r0, [r5, 0x58] | r0 = *((r5 + 0x58));
0x000939a0 blx 0x84e8 | fcn_000084e8 ();
0x000939a4 ldr r0, [r5, 0x58] | r0 = *((r5 + 0x58));
0x000939a6 blx 0x8728 | r0 = fcn_00008728 ();
0x000939aa mov r6, r0 | r6 = r0;
0x000939ac ldr r0, [r5, 0x58] | r0 = *((r5 + 0x58));
0x000939ae blx 0x81f8 | fcn_000081f8 ();
0x000939b2 cmp r6, 0x64 |
0x000939b4 mov r4, r0 | r4 = r0;
| if (r6 == 0x64) {
0x000939b6 beq 0x93a8c | goto label_45;
| }
| label_16:
0x000939b8 ldr r0, [r7] | r0 = *(r7);
0x000939ba blx 0x8944 | r0 = fcn_00008944 ();
0x000939be cmp r0, 5 |
| if (r0 == 5) {
0x000939c0 bne 0x939d0 |
| if (r4 == 0) {
0x000939c2 cbz r4, 0x939e8 | goto label_46;
| }
0x000939c4 b 0x93814 | goto label_11;
| label_44:
0x000939c6 ldr r0, [r7] | r0 = *(r7);
0x000939c8 blx 0x8944 | r0 = fcn_00008944 ();
0x000939cc cmp r0, 5 |
| if (r0 == 5) {
0x000939ce beq 0x939e8 | goto label_46;
| }
| }
0x000939d0 ldr r0, [r7] | r0 = *(r7);
0x000939d2 blx 0x89d4 | r0 = fcn_000089d4 ();
0x000939d6 mov r2, r0 | r2 = r0;
0x000939d8 mov r3, r1 | r3 = r1;
0x000939da mov r0, r5 | r0 = r5;
0x000939dc bl 0x93464 | r0 = fcn_00093464 (r0, r1, r2);
0x000939e0 mov r4, r0 | r4 = r0;
0x000939e2 cmp r0, 0 |
| if (r0 != 0) {
0x000939e4 bne.w 0x93814 | goto label_11;
| }
| label_46:
0x000939e8 movs r3, 0 | r3 = 0;
0x000939ea add r6, sp, 8 | r6 += var_8h;
0x000939ec str r3, [sp, 4] | var_4h_2 = r3;
0x000939ee ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x000939f2 strd r2, r3, [r8] | __asm ("strd r2, r3, [r8]");
| label_42:
0x000939f6 add r3, sp, 4 | r3 += var_4h_2;
0x000939f8 movs r2, 0 | r2 = 0;
0x000939fa mov r1, r6 | r1 = r6;
0x000939fc mov r0, r5 | r0 = r5;
0x000939fe bl 0x926c0 | r0 = fcn_000926c0 (r0, r1, r2, r3);
0x00093a02 mov r4, r0 | r4 = r0;
0x00093a04 cmp r0, 0 |
| if (r0 != 0) {
0x00093a06 bne.w 0x93814 | goto label_11;
| }
0x00093a0a mov r2, r6 | r2 = r6;
0x00093a0c ldr r6, [sp, 4] | r6 = var_4h_2;
0x00093a0e mov.w r3, -1 | r3 = -1;
0x00093a12 str r3, [r5, 0x48] | *((r5 + 0x48)) = r3;
0x00093a14 mov r3, r0 | r3 = r0;
0x00093a16 mov r1, r6 | r1 = r6;
0x00093a18 mov r0, r5 | r0 = r5;
0x00093a1a bl 0x92870 | r0 = fcn_00092870 (r0, r1, r2, r3);
0x00093a1e mov sb, r0 | sb = r0;
| if (r6 == 0) {
0x00093a20 cbz r6, 0x93a82 | goto label_47;
| }
0x00093a22 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00093a24 subs r3, 1 | r3--;
0x00093a26 str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
| if (r3 != 0) {
0x00093a28 cbnz r3, 0x93a82 | goto label_47;
| }
0x00093a2a mov r1, r6 | r1 = r6;
0x00093a2c mov r0, r5 | r0 = r5;
0x00093a2e bl 0x85fb4 | fcn_00085fb4 (r0, r1);
0x00093a32 cmp.w sb, 0 |
| if (sb != 0) {
0x00093a36 bne 0x93a88 | goto label_48;
| }
0x00093a38 cmp r0, 0 |
| if (r0 != 0) {
0x00093a3a bne.w 0x93858 | goto label_14;
| }
0x00093a3c add r7, sp, 0x34 | r7 = sp + 0x34;
| label_15:
0x00093a3e ldrb r3, [r5, 0x19] | r3 = *((r5 + 0x19));
0x00093a40 cmp r3, 0 |
| if (r3 == 0) {
0x00093a42 beq.w 0x93814 | goto label_11;
| }
0x00093a46 ldr r6, [r5, 0x70] | r6 = *((r5 + 0x70));
0x00093a48 movs r1, 1 | r1 = 1;
0x00093a4a ldrd r2, r3, [r8] | __asm ("ldrd r2, r3, [r8]");
0x00093a4e mov r0, r6 | r0 = r6;
0x00093a50 blx 0x84e8 | fcn_000084e8 ();
0x00093a54 ldrb r3, [r5, 0x19] | r3 = *((r5 + 0x19));
| if (r3 == 0) {
0x00093a56 cbz r3, 0x93a72 | goto label_49;
| }
| do {
0x00093a58 ldrb r3, [r5, 0x15] | r3 = *((r5 + 0x15));
0x00093a5a adds r1, r4, 2 | r1 = r4 + 2;
0x00093a5c mov r0, r6 | r0 = r6;
0x00093a5e add r3, r4 | r3 += r4;
0x00093a60 adds r4, 1 | r4++;
0x00093a62 adds r3, 3 | r3 += 3;
0x00093a64 ldr.w r2, [r7, r3, lsl 2] | offset_0 = r3 << 2;
| r2 = *((r7 + offset_0));
0x00093a68 blx 0x8af8 | fcn_00008af8 ();
0x00093a6c ldrb r3, [r5, 0x19] | r3 = *((r5 + 0x19));
0x00093a6e cmp r3, r4 |
0x00093a70 bgt 0x93a58 |
| } while (r3 > r4);
| label_49:
0x00093a72 mov r0, r6 | r0 = r6;
0x00093a74 blx 0x8728 | fcn_00008728 ();
0x00093a78 mov r0, r6 | r0 = r6;
0x00093a7a blx 0x81f8 | r0 = fcn_000081f8 ();
0x00093a7e mov r4, r0 | r4 = r0;
0x00093a80 b 0x93814 | goto label_11;
| label_47:
0x00093a82 cmp.w sb, 0 |
| if (sb == 0) {
0x00093a86 beq 0x93a3e | goto label_15;
| }
| label_48:
0x00093a88 mov r4, sb | r4 = sb;
0x00093a8a b 0x93814 | goto label_11;
| label_45:
0x00093a8c ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00093a8e blx 0x8600 | r0 = fcn_00008600 ();
0x00093a92 cmp r0, 5 |
| if (r0 == 5) {
0x00093a94 bne 0x93aa4 |
0x00093a96 ldrd r2, r3, [sp, 8] | __asm ("ldrd r2, r3, [var_8h]");
0x00093a9a mov r0, r5 | r0 = r5;
0x00093a9c bl 0x93464 | r0 = fcn_00093464 (r0, r1, r2);
0x00093aa0 mov r4, r0 | r4 = r0;
0x00093aa2 b 0x939b8 | goto label_16;
| }
0x00093aa4 movs r1, 0 | r1 = 0;
0x00093aa6 mov r0, r5 | r0 = r5;
0x00093aa8 bl 0x7be7c | r0 = fcn_0007be7c (r0, r1, r2, r3, r4);
0x00093aac mov r4, r0 | r4 = r0;
0x00093aae b 0x93814 | goto label_11;
| label_39:
0x00093ab0 blx 0x883c | fcn_0000883c ();
0x00093ab4 nop.w |
0x00093ab8 movs r0, r0 |
0x00093aba movs r0, 0 | r0 = 0;
0x00093abc movs r0, r0 |
0x00093abe subs r7, 0xf0 | r7 -= 0xf0;
0x00093ac0 movs r0, r0 |
0x00093ac2 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x94d50 */
| #include <stdint.h>
|
; (fcn) fcn.00094d50 () | void fcn_00094d50 (int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00094d50 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, aav.0x000000ff");
0x00094d54 movs r7, 0 | r7 = 0;
0x00094d56 ldr r6, [r0, 0x24] | r6 = *((r0 + 0x24));
0x00094d58 sub sp, 0x14 |
0x00094d5a cmp r6, 0 |
| if (r6 != 0) {
0x00094d5c bne 0x94dc4 | goto label_4;
| }
0x00094d5e ldr r7, [r0, 0x28] | r7 = *((r0 + 0x28));
0x00094d60 mov r4, r0 | r4 = r0;
0x00094d62 mov sb, r2 | sb = r2;
0x00094d64 mov r8, r3 | r8 = r3;
0x00094d66 cmp r7, 0 |
| if (r7 == 0) {
0x00094d68 beq 0x94dd0 | goto label_5;
| }
0x00094d6a str r6, [r0, 0x28] | *((r0 + 0x28)) = r6;
0x00094d6c mov r0, r7 | r0 = r7;
0x00094d6e blx 0x8688 | r0 = fcn_00008688 ();
0x00094d72 mov r5, r0 | r5 = r0;
0x00094d74 cmp r0, 0 |
| if (r0 != 0) {
0x00094d76 bne 0x94e00 | goto label_6;
| }
0x00094d78 str r7, [r4, 0x28] | *((r4 + 0x28)) = r7;
| do {
| label_1:
0x00094d7a mov r0, r7 | r0 = r7;
0x00094d7c blx 0x85dc | fcn_000085dc ();
0x00094d80 movs r1, 0 | r1 = 0;
0x00094d82 mov r6, r0 | r6 = r0;
0x00094d84 adds r0, 0x20 | r0 += 0x20;
0x00094d86 blx 0x8240 | r0 = fcn_00008240 ();
0x00094d8a mov r7, r0 | r7 = r0;
0x00094d8c cmp r0, 0 |
| if (r0 == 0) {
0x00094d8e beq 0x94e26 | goto label_7;
| }
0x00094d90 add.w r1, r0, 0xc | r1 = r0 + 0xc;
0x00094d94 movs r3, 0 | r3 = 0;
0x00094d96 strd r1, r6, [r0] | __asm ("strd r1, r6, [r0]");
0x00094d9a mov r2, r6 | r2 = r6;
0x00094d9c ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x00094d9e blx 0x84cc | r0 = memcpy_chk ();
0x00094da2 mov r5, r0 | r5 = r0;
0x00094da4 cmp r0, 0 |
| if (r0 != 0) {
0x00094da6 bne 0x94e28 | goto label_8;
| }
0x00094da8 ldr r3, [r7] | r3 = *(r7);
0x00094daa strb r0, [r3, r6] | *((r3 + r6)) = r0;
0x00094dac ldr r3, [r7] | r3 = *(r7);
0x00094dae add r3, r6 | r3 += r6;
0x00094db0 strb r0, [r3, 1] | *((r3 + 1)) = r0;
0x00094db2 ldr r3, [r7] | r3 = *(r7);
0x00094db4 ldrh r3, [r3, 2] | r3 = *((r3 + 2));
0x00094db6 rev16 r3, r3 | __asm ("rev16 r3, r3");
0x00094db8 uxth r3, r3 | r3 = (int16_t) r3;
0x00094dba str r3, [r7, 8] | *((r7 + 8)) = r3;
| label_0:
0x00094dbc ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00094dbe str r5, [r4, 0x24] | *((r4 + 0x24)) = r5;
0x00094dc0 adds r3, 1 | r3++;
0x00094dc2 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
| label_4:
0x00094dc4 mov r0, r7 | r0 = r7;
0x00094dc6 add sp, 0x14 |
0x00094dc8 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_2:
0x00094dcc cmp r7, 0 |
0x00094dce bne 0x94d7a |
| } while (r7 != 0);
| label_5:
0x00094dd0 ldr r3, [r4] | r3 = *(r4);
0x00094dd2 add.w r2, r4, 0x28 | r2 = r4 + 0x28;
0x00094dd6 movs r7, 0 | r7 = 0;
0x00094dd8 ldrd r0, r1, [r3] | __asm ("ldrd r0, r1, [r3]");
0x00094ddc ldr r3, [pc, 0x5c] |
0x00094dde str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00094de2 str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h]");
0x00094de6 str r2, [sp, 0xc] | var_ch = r2;
0x00094de8 add r3, pc | r3 = 0x129c28;
0x00094dea str r7, [sp, 8] | var_8h = r7;
0x00094dec ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00094dee blx 0x8b78 | r0 = fcn_00008b78 ();
0x00094df2 cmp r0, 1 |
0x00094df4 mov r5, r0 | r5 = r0;
| if (r0 == 1) {
0x00094df6 beq 0x94e18 | goto label_3;
| }
0x00094df8 cmp r0, 0 |
| if (r0 != 0) {
0x00094dfa bne 0x94dbc | goto label_0;
| }
0x00094dfc ldr r7, [r4, 0x28] | r7 = *((r4 + 0x28));
0x00094dfe b 0x94d7a | goto label_1;
| label_6:
0x00094e00 mov r0, r7 | r0 = r7;
0x00094e02 str r6, [r4, 0x28] | *((r4 + 0x28)) = r6;
0x00094e04 blx 0x8b04 | fcn_00008b04 ();
0x00094e08 cmp r5, 4 |
0x00094e0a ldr r7, [r4, 0x28] | r7 = *((r4 + 0x28));
| if (r5 == 4) {
0x00094e0c beq 0x94dcc | goto label_2;
| }
| if (r7 == 0) {
0x00094e0e cbz r7, 0x94e20 | goto label_9;
| }
0x00094e10 cmp r5, 1 |
0x00094e12 it ne |
| if (r5 != 1) {
0x00094e14 movne r7, r6 | r7 = r6;
| goto label_10;
| }
| if (r5 != 1) {
| label_10:
0x00094e16 bne 0x94dbc | goto label_0;
| }
| label_3:
0x00094e18 movw r5, 0x10b | r5 = 0x10b;
0x00094e1c movs r7, 0 | r7 = 0;
0x00094e1e b 0x94dbc | goto label_0;
| label_9:
0x00094e20 cmp r5, 1 |
| if (r5 != 1) {
0x00094e22 bne 0x94dbc | goto label_0;
| }
0x00094e24 b 0x94e18 | goto label_3;
| label_7:
0x00094e26 movs r5, 7 | r5 = 7;
| label_8:
0x00094e28 mov r0, r7 | r0 = r7;
0x00094e2a movs r7, 0 | r7 = 0;
0x00094e2c blx 0x8404 | fcn_00008404 ();
0x00094e30 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x00094e32 str r5, [r4, 0x24] | *((r4 + 0x24)) = r5;
0x00094e34 adds r3, 1 | r3++;
0x00094e36 str r3, [r4, 0x40] | *((r4 + 0x40)) = r3;
0x00094e38 b 0x94dc4 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x94e40 */
| #include <stdint.h>
|
; (fcn) fcn.00094e40 () | void fcn_00094e40 (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00094e40 push {r4, r5, r6, lr} |
0x00094e42 mov r4, r1 | r4 = r1;
0x00094e44 mov r5, r0 | r5 = r0;
0x00094e46 ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x00094e48 ldr r6, [r1] | r6 = *(r1);
0x00094e4a blx 0x8404 | fcn_00008404 ();
0x00094e4e ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x00094e50 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x00094e52 adds r1, 1 | r1++;
0x00094e54 str r1, [r4, 8] | *((r4 + 8)) = r1;
| if (r2 != 0) {
0x00094e56 cbz r2, 0x94e80 |
0x00094e58 movs r3, 0 | r3 = 0;
0x00094e5a strd r2, r3, [r4, 0xc] | __asm ("strd r2, r3, [r4, 0xc]");
| label_0:
0x00094e5e ldrd r3, r5, [r2, 4] | __asm ("ldrd r3, r5, [r2, 4]");
0x00094e62 cmp r5, r3 |
0x00094e64 str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
| if (r5 >= r3) {
0x00094e66 blt 0x94e6e |
0x00094e68 adds r3, 1 | r3++;
0x00094e6a str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x00094e6c pop {r4, r5, r6, pc} |
| }
0x00094e6e ldr r0, [r2] | r0 = *(r2);
0x00094e70 add.w r1, r4, 0x30 | r1 = r4 + 0x30;
0x00094e74 add r0, r5 | r0 += r5;
0x00094e76 bl 0xccc4 | r0 = fcn_0000ccc4 (r0, r1);
0x00094e7a add r5, r0 | r5 += r0;
0x00094e7c str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
0x00094e7e pop {r4, r5, r6, pc} |
| }
0x00094e80 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00094e82 cmp r1, r3 |
0x00094e84 ble 0x94e8a |
| while (r0 == 0) {
0x00094e86 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x00094e88 pop {r4, r5, r6, pc} |
0x00094e8a ldr r3, [r6] | r3 = *(r6);
0x00094e8c adds r2, r2, r1 | r2 += r1;
0x00094e8e asrs r1, r1, 0x1f | r1 >>= 0x1f;
0x00094e90 mov r0, r5 | r0 = r5;
0x00094e92 add.w r3, r1, r3, lsl 5 | r3 = r1 + (r3 << 5);
0x00094e96 bl 0x94d50 | r0 = fcn_00094d50 (r0, r1, r2);
0x00094e9a mov r2, r0 | r2 = r0;
0x00094e9c cmp r0, 0 |
0x00094e9e beq 0x94e86 |
| }
0x00094ea0 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00094ea2 cmp r3, 3 |
| if (r3 <= 3) {
0x00094ea4 ble 0x94eb0 | goto label_1;
| }
0x00094ea6 ldr r1, [r0, 8] | r1 = *((r0 + 8));
0x00094ea8 cmp r3, r1 |
0x00094eaa it ge |
| if (r3 >= r1) {
0x00094eac strge r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
| goto label_2;
| }
| if (r3 >= r1) {
| label_2:
0x00094eae bge 0x94e5e | goto label_0;
| }
| label_1:
0x00094eb0 movw r3, 0x10b | r3 = 0x10b;
0x00094eb4 mov r0, r2 | r0 = r2;
0x00094eb6 str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
0x00094eb8 blx 0x8404 | fcn_00008404 ();
0x00094ebc movs r3, 0 | r3 = 0;
0x00094ebe str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x00094ec0 pop {r4, r5, r6, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x94f20 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00094f20 () | void fcn_00094f20 (int16_t arg_10h, int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_4h;
| int16_t var_8h_2;
| int16_t var_ch_3;
| int16_t var_14h;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h_2;
| int16_t var_1ch;
| int16_t var_0h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| if (? >= ?) {
0x00094f20 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00094f24 mov r4, r1 | r4 = r1;
0x00094f26 ldr.w sl, [r1, 0xc] | sl = *((r1 + 0xc));
0x00094f2a mov sb, r2 | sb = r2;
0x00094f2c sub sp, 0x10 |
0x00094f2e mov r7, r0 | r7 = r0;
0x00094f30 ldr r1, [pc, 0x118] |
0x00094f32 ldr.w r8, [sl] | r8 = *(sl);
0x00094f36 ldrd r6, r5, [r4, 0x18] | __asm ("ldrd r6, r5, [r4, 0x18]");
0x00094f3a ldr r3, [pc, 0x114] | r3 = *(0x95052);
0x00094f3c add r1, pc | r1 = 0x129f8c;
0x00094f3e ldrb.w r2, [r8, r6] | r2 = *((r8 + r6));
0x00094f42 add.w r0, r8, r6 | r0 = r8 + r6;
0x00094f46 ldr r3, [r1, r3] |
0x00094f48 ldr r3, [r3] | r3 = imp.sinh;
0x00094f4a str r3, [sp, 0xc] | var_ch = r3;
0x00094f4c mov.w r3, 0 | r3 = 0;
0x00094f50 lsls r3, r2, 0x18 | r3 = r2 << 0x18;
0x00094f52 it pl |
| if (r3 < r2) {
0x00094f54 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r2) {
0x00094f56 bpl 0x94f82 |
0x00094f58 ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x00094f5a lsls r1, r3, 0x18 | r1 = r3 << 0x18;
0x00094f5c ittt pl |
| if (r1 < r3) {
0x00094f5e andpl r2, r2, 0x7f | r2 &= 0x7f;
| }
| if (r1 < r3) {
0x00094f62 orrpl r2, r3, r2, lsl 7 | r2 = r3 | (r2 << 7);
| }
| if (r1 >= r3) {
0x00094f66 movs r3, 2 | r3 = 2;
| }
| if (r3 >= 2) {
0x00094f68 bpl 0x94f82 | goto label_0;
| }
0x00094f6a ldrb r1, [r0, 2] | r1 = *((r0 + 2));
0x00094f6c orr.w r2, r1, r2, lsl 14 | r2 = r1 | (r2 << 14);
0x00094f70 lsls r1, r1, 0x18 | r1 <<= 0x18;
| if (r1 >= r1) {
0x00094f72 bpl 0x95030 | goto label_11;
| }
0x00094f74 mov r1, sp | r1 = sp;
0x00094f76 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00094f7a ldr r2, [sp] | r2 = *(sp);
0x00094f7c mov r3, r0 | r3 = r0;
0x00094f7e bic r2, r2, 0x80000000 | r2 = BIT_MASK (r2, 0x80000000);
| }
| label_0:
0x00094f82 ldr.w r0, [sl, 8] | r0 = *((sl + 8));
0x00094f86 adds r3, r6, r3 | r3 = r6 + r3;
0x00094f88 adc r5, r5, 0 | __asm ("adc r5, r5, 0");
0x00094f8c adds r6, r2, r3 | r6 = r2 + r3;
0x00094f8e adc r5, r5, 0 | __asm ("adc r5, r5, 0");
0x00094f92 cmp r0, r6 |
0x00094f94 asr.w r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x00094f98 sbcs r1, r5 | __asm ("sbcs r1, r5");
| if (r0 >= r6) {
0x00094f9a blt 0x94fae |
0x00094f9c ldr r1, [r4, 0x48] | r1 = *((r4 + 0x48));
0x00094f9e clz r0, r2 | r0 &= r2;
0x00094fa2 lsrs r0, r0, 5 | r0 >>= 5;
0x00094fa4 cmp r1, sb |
0x00094fa6 it lt |
| if (r1 >= sb) {
0x00094fa8 orrlt r0, r0, 1 | r0 |= 1;
| }
| if (r0 == 0) {
0x00094fac cbz r0, 0x94fce | goto label_12;
| }
| }
0x00094fae movw r3, 0x10b | r3 = 0x10b;
0x00094fb2 ldr r2, [pc, 0xa0] |
0x00094fb4 str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x00094fb6 ldr r3, [pc, 0x98] | r3 = *(0x95052);
0x00094fb8 add r2, pc | r2 = 0x12a012;
0x00094fba ldr r3, [r2, r3] | r3 = imp.sinh;
0x00094fbc ldr r2, [r3] | r2 = imp.sinh;
0x00094fbe ldr r3, [sp, 0xc] | r3 = var_ch;
0x00094fc0 eors r2, r3 | r2 ^= r3;
0x00094fc2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00094fc6 bne 0x95046 | goto label_13;
| }
0x00094fc8 add sp, 0x10 |
0x00094fca pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_12:
0x00094fce add r3, r8 | r3 += r8;
0x00094fd0 add.w r1, r4, 0x44 | r1 = r4 + 0x44;
0x00094fd4 add.w r0, r7, 0x24 | r0 = r7 + 0x24;
0x00094fd8 str.w sb, [r4, 0x48] | __asm ("str.w sb, [r4, 0x48]");
0x00094fdc bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x00094fe0 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00094fe2 str r5, [r4, 0x1c] | *((r4 + 0x1c)) = r5;
0x00094fe4 ldr r5, [r4, 0x2c] | r5 = *((r4 + 0x2c));
0x00094fe6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00094fe8 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x00094fea str r6, [r4, 0x28] | *((r4 + 0x28)) = r6;
0x00094fec cmp r5, r3 |
0x00094fee str r6, [r4, 0x18] | *((r4 + 0x18)) = r6;
0x00094ff0 str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
| if (r5 < r3) {
0x00094ff2 blt 0x95018 | goto label_14;
| }
0x00094ff4 adds r3, 1 | r3++;
0x00094ff6 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
| do {
0x00094ff8 ldr r2, [pc, 0x5c] |
0x00094ffa ldr r3, [pc, 0x54] | r3 = *(0x95052);
0x00094ffc add r2, pc | r2 = 0x12a058;
0x00094ffe ldr r3, [r2, r3] | r3 = imp.sinh;
0x00095000 ldr r2, [r3] | r2 = imp.sinh;
0x00095002 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00095004 eors r2, r3 | r2 ^= r3;
0x00095006 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009500a bne 0x95046 | goto label_13;
| }
0x0009500c mov r1, r4 | r1 = r4;
0x0009500e mov r0, r7 | r0 = r7;
0x00095010 add sp, 0x10 |
0x00095012 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00095016 b 0x94ec4 | void (*0x94ec4)() ();
| label_14:
0x00095018 add.w r0, r8, r5 | r0 = r8 + r5;
0x0009501c mov r1, sp | r1 = sp;
0x0009501e bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x00095022 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x00095024 add r5, r0 | r5 += r0;
0x00095026 ldr r2, [sp] | r2 = *(sp);
0x00095028 str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
0x0009502a add r3, r2 | r3 += r2;
0x0009502c str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
0x0009502e b 0x94ff8 |
| } while (1);
| label_11:
0x00095030 movw r1, 0xc07f |
0x00095034 and r3, r3, 0x7f | r3 &= 0x7f;
0x00095038 movt r1, 0x1f | r1 = 0x1fc07f;
0x0009503c ands r1, r2 | r1 &= r2;
0x0009503e orr.w r2, r1, r3, lsl 7 | r2 = r1 | (r3 << 7);
0x00095042 movs r3, 3 | r3 = 3;
0x00095044 b 0x94f82 | goto label_0;
| label_13:
0x00095046 blx 0x883c | fcn_0000883c ();
0x0009504a nop |
0x0009504c subs r5, 0x5c | r5 -= 0x5c;
0x0009504e movs r3, r0 | r3 = r0;
0x00095050 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00095052 movs r0, r0 |
0x00095054 subs r4, 0xe0 | r4 -= 0xe0;
0x00095056 movs r3, r0 | r3 = r0;
0x00095058 subs r4, 0x9c | r4 -= 0x9c;
0x0009505a movs r3, r0 | r3 = r0;
0x0009505c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00095060 mov r5, r1 | r5 = r1;
0x00095062 ldr r4, [pc, 0x260] |
0x00095064 sub sp, 0x24 |
0x00095066 mov r7, r0 | r7 = r0;
0x00095068 mov sb, r2 | sb = r2;
0x0009506a ldr r3, [pc, 0x25c] | r3 = *(0x952ca);
0x0009506c add r4, pc | r4 = 0x12a336;
0x0009506e ldr r6, [r1, 0xc] | r6 = *((r1 + 0xc));
0x00095070 movs r1, 0 | r1 = 0;
0x00095072 ldr r3, [r4, r3] |
0x00095074 ldr r4, [r5, 0x18] | r4 = *((r5 + 0x18));
0x00095076 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x00095078 ldr r3, [r3] | r3 = imp.sinh;
0x0009507a str r3, [sp, 0x1c] | var_1ch = r3;
0x0009507c mov.w r3, 0 | r3 = 0;
0x00095080 ldr r3, [r5, 0x58] | r3 = *((r5 + 0x58));
0x00095082 ldr.w sl, [r6] | sl = *(r6);
0x00095086 str r1, [sp, 0xc] | var_ch_2 = r1;
0x00095088 add r4, r3 | r4 += r3;
0x0009508a cmp r4, r0 |
0x0009508c str r4, [sp, 8] | var_8h = r4;
| if (r4 >= r0) {
0x0009508e bge 0x950fe | goto label_15;
| }
0x00095090 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x00095092 cmp r4, r3 |
| if (r4 >= r3) {
0x00095094 bge.w 0x951b4 | goto label_16;
| }
0x00095098 add.w r0, sl, r4 | r0 = sl + r4;
0x0009509c add r1, sp, 0x10 | r1 += var_10h;
0x0009509e bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x000950a2 ldr r3, [r5, 0x50] | r3 = *((r5 + 0x50));
0x000950a4 add r4, r0 | r4 += r0;
0x000950a6 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000950a8 asrs r6, r4, 0x1f | r6 = r4 >> 0x1f;
0x000950aa str r4, [sp, 8] | var_8h = r4;
0x000950ac adds r3, r3, r2 | r3 += r2;
0x000950ae ldr r2, [sp, 0x14] | r2 = var_14h_2;
0x000950b0 str r3, [r5, 0x50] | *((r5 + 0x50)) = r3;
0x000950b2 ldr r3, [r5, 0x54] | r3 = *((r5 + 0x54));
0x000950b4 adc.w r3, r3, r2 | __asm ("adc.w r3, r3, r2");
0x000950b8 str r3, [r5, 0x54] | *((r5 + 0x54)) = r3;
| label_7:
0x000950ba adds r3, r4, 1 | r3 = r4 + 1;
0x000950bc add.w r0, sl, r4 | r0 = sl + r4;
0x000950c0 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x000950c2 adc r3, r6, 0 | __asm ("adc r3, r6, 0");
0x000950c6 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x000950c8 ldrb.w r3, [sl, r4] | r3 = *((sl + r4));
0x000950cc lsls r1, r3, 0x18 | r1 = r3 << 0x18;
0x000950ce mov r2, r3 | r2 = r3;
0x000950d0 str r3, [sp, 0x10] | var_10h = r3;
| if (r1 < r3) {
0x000950d2 bmi.w 0x95214 | goto label_17;
| }
| label_6:
0x000950d6 asrs r2, r2, 1 | r2 >>= 1;
0x000950d8 and r3, r3, 1 | r3 &= 1;
0x000950dc strb.w r3, [r5, 0x5c] | *((r5 + 0x5c)) = r3;
0x000950e0 str r2, [r5, 0x58] | *((r5 + 0x58)) = r2;
| do {
| label_3:
0x000950e2 ldr r2, [pc, 0x1e8] |
0x000950e4 ldr r3, [pc, 0x1e0] | r3 = *(0x952c8);
0x000950e6 add r2, pc | r2 = 0x12a3b8;
0x000950e8 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000950ea ldr r2, [r3] | r2 = imp.sinh;
0x000950ec ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000950ee eors r2, r3 | r2 ^= r3;
0x000950f0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000950f4 bne.w 0x952c0 | goto label_18;
| }
0x000950f8 add sp, 0x24 |
0x000950fa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x000950fe ldr r3, [r5] | r3 = *(r5);
0x00095100 mov r8, r1 | r8 = r1;
0x00095102 add.w sl, sp, 8 | sl += var_8h;
0x00095106 cmp r3, 0 |
| if (r3 == 0) {
0x00095108 beq 0x951ea | goto label_19;
| }
| label_1:
0x0009510a mov r1, r5 | r1 = r5;
0x0009510c mov r0, r7 | r0 = r7;
0x0009510e bl 0x94e40 | fcn_00094e40 (r0, r1);
0x00095112 ldr r6, [r5, 0xc] | r6 = *((r5 + 0xc));
0x00095114 cmp r6, 0 |
0x00095116 beq 0x950e2 |
| } while (r6 == 0);
0x00095118 ldr r3, [r6] | r3 = *(r6);
0x0009511a ldr.w fp, [r6, 8] | fp = *((r6 + 8));
0x0009511e ldrh r4, [r3] | r4 = *(r3);
0x00095120 rev16 r4, r4 | __asm ("rev16 r4, r4");
0x00095122 uxth r4, r4 | r4 = (int16_t) r4;
0x00095124 mov r2, r4 | r2 = r4;
0x00095126 str r4, [sp, 8] | var_8h = r4;
| if (r4 != 0) {
0x00095128 cbz r4, 0x9512e |
0x0009512a cmp r4, fp |
| if (r4 < fp) {
0x0009512c blt 0x9515c | goto label_20;
| }
| }
0x0009512e ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x00095130 cmp r1, fp |
| if (r1 > fp) {
0x00095132 bgt 0x9513e | goto label_21;
| }
| label_2:
0x00095134 cmp r2, fp |
| if (r2 > fp) {
0x00095136 bgt 0x951e2 | goto label_22;
| }
0x00095138 cmp r2, 0 |
| if (r2 == 0) {
0x0009513a beq 0x9510a | goto label_1;
| }
0x0009513c b 0x9517e | goto label_5;
| label_21:
0x0009513e add.w r0, r3, fp | r0 = r3 + fp;
0x00095142 mov r1, sl | r1 = sl;
0x00095144 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x00095148 ldr r2, [sp, 8] | r2 = var_8h;
0x0009514a add r0, fp | r0 += fp;
0x0009514c mov.w r8, 1 | r8 = 1;
0x00095150 str r0, [r5, 0x2c] | *((r5 + 0x2c)) = r0;
0x00095152 str r2, [r5, 0x18] | *((r5 + 0x18)) = r2;
0x00095154 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00095156 str r2, [r5, 0x30] | *((r5 + 0x30)) = r2;
0x00095158 str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x0009515a b 0x95134 | goto label_2;
| label_20:
0x0009515c adds r0, r3, r4 | r0 = r3 + r4;
0x0009515e add.w r1, r5, 0x50 | r1 = r5 + 0x50;
0x00095162 str r3, [sp, 4] | var_4h_2 = r3;
0x00095164 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00095168 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0009516a add r4, r0 | r4 += r0;
0x0009516c asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x0009516e ldr r3, [sp, 4] | r3 = var_4h_2;
0x00095170 str r4, [sp, 8] | var_8h = r4;
0x00095172 cmp r2, fp |
0x00095174 str r4, [r5, 0x18] | *((r5 + 0x18)) = r4;
0x00095176 str r1, [r5, 0x1c] | *((r5 + 0x1c)) = r1;
| if (r2 > fp) {
0x00095178 bgt 0x951cc | goto label_23;
| }
0x0009517a cmp r4, fp |
| if (r4 > fp) {
0x0009517c bgt 0x951e2 | goto label_22;
| }
| label_5:
0x0009517e ldr r6, [r5, 0xc] | r6 = *((r5 + 0xc));
0x00095180 cmp r6, 0 |
| if (r6 == 0) {
0x00095182 beq 0x950e2 | goto label_3;
| }
0x00095184 cmp.w r8, 0 |
| if (r8 == 0) {
0x00095188 beq 0x9522e | goto label_24;
| }
| label_4:
0x0009518a ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0009518c lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
| if (r0 < r3) {
0x0009518e bmi 0x951f2 | goto label_25;
| }
0x00095190 ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x00095192 mov r1, r5 | r1 = r5;
0x00095194 mov r0, r7 | r0 = r7;
0x00095196 bl 0x94f20 | fcn_00094f20 (r0, r1, r2, r3, r4);
0x0009519a ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
| if (r3 == 0) {
0x0009519c cbnz r3, 0x951a6 |
0x0009519e ldr r0, [r7] | r0 = *(r7);
0x000951a0 mov r1, r5 | r1 = r5;
0x000951a2 bl 0x11ab8 | fcn_00011ab8 (r0, r1);
| }
0x000951a6 cmp.w sb, 0 |
| if (sb == 0) {
0x000951aa beq 0x950e2 | goto label_3;
| }
0x000951ac movs r3, 1 | r3 = 1;
0x000951ae str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x000951b2 b 0x950e2 | goto label_3;
| label_16:
0x000951b4 add r0, sl | r0 += sl;
0x000951b6 add r1, sp, 0x10 | r1 += var_10h;
0x000951b8 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x000951bc ldr r3, [sp, 0x10] | r3 = var_10h;
0x000951be cmp r4, r3 |
0x000951c0 it eq |
| if (r4 == r3) {
0x000951c2 asreq r3, r4, 0x1f | __asm ("asreq r3, r4, 0x1f");
| }
| if (r4 != r3) {
0x000951c4 bne 0x951fe | goto label_26;
| }
0x000951c6 strd r4, r3, [r5, 0x18] | __asm ("strd r4, r3, [r5, 0x18]");
0x000951ca b 0x9518a | goto label_4;
| label_23:
0x000951cc add.w r0, r3, fp | r0 = r3 + fp;
0x000951d0 add.w r1, r5, 0x30 | r1 = r5 + 0x30;
0x000951d4 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x000951d8 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000951da add r0, fp | r0 += fp;
0x000951dc str r0, [r5, 0x2c] | *((r5 + 0x2c)) = r0;
0x000951de cmp r4, r3 |
| if (r4 <= r3) {
0x000951e0 ble 0x9517e | goto label_5;
| }
| label_22:
0x000951e2 movw r3, 0x10b | r3 = 0x10b;
0x000951e6 str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x000951e8 b 0x950e2 | goto label_3;
| label_19:
0x000951ea ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000951ec ands r8, r3, 1 | r8 = r3 & 1;
0x000951f0 beq 0x95238 |
| while (fp == 0) {
| label_25:
0x000951f2 mov r0, r6 | r0 = r6;
0x000951f4 blx 0x8404 | fcn_00008404 ();
0x000951f8 movs r3, 0 | r3 = 0;
0x000951fa str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x000951fc b 0x950e2 | goto label_3;
| label_26:
0x000951fe add.w r0, sl, r4 | r0 = sl + r4;
0x00095202 add r1, sp, 0xc | r1 += var_ch_2;
0x00095204 bl 0xccc4 | r0 = fcn_0000ccc4 (r0, r1);
0x00095208 add r4, r0 | r4 += r0;
0x0009520a asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0009520c str r4, [sp, 8] | var_8h = r4;
0x0009520e strd r4, r3, [r5, 0x18] | __asm ("strd r4, r3, [r5, 0x18]");
0x00095212 b 0x9518a | goto label_4;
| label_17:
0x00095214 strd r4, r6, [r5, 0x18] | __asm ("strd r4, r6, [r5, 0x18]");
0x00095218 add r1, sp, 0x10 | r1 += var_10h;
0x0009521a bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x0009521e ldr r2, [sp, 0x10] | r2 = var_10h;
0x00095220 adds r4, r0, r4 | r4 = r0 + r4;
0x00095222 adc.w r6, r6, r0, asr 31 | __asm ("adc.w r6, r6, r0, asr 31");
0x00095226 str r4, [r5, 0x18] | *((r5 + 0x18)) = r4;
0x00095228 str r6, [r5, 0x1c] | *((r5 + 0x1c)) = r6;
0x0009522a uxtb r3, r2 | r3 = (int8_t) r2;
0x0009522c b 0x950d6 | goto label_6;
| label_24:
0x0009522e ldr.w sl, [r6] | sl = *(r6);
0x00095232 ldrd r4, r6, [r5, 0x18] | __asm ("ldrd r4, r6, [r5, 0x18]");
0x00095236 b 0x950ba | goto label_7;
0x00095238 ldr r4, [r7, 0xc] | r4 = *((r7 + 0xc));
0x0009523a ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0009523c ldr.w fp, [r3, 4] | fp = *((r3 + 4));
0x00095240 str.w fp, [r4, 0x10] | __asm ("str.w fp, [r4, 0x10]");
0x00095244 cmp.w fp, 0 |
0x00095248 beq 0x951f2 |
| }
0x0009524a add.w sl, fp, 0x28 | sl += arg_28h;
0x0009524e mov r6, r8 | r6 = r8;
0x00095250 mov r0, sl | r0 = sl;
0x00095252 blx 0x85b4 | fcn_000085b4 ();
0x00095254 invalid |
0x00095258 mov r3, r0 | r3 = r0;
0x0009525a mov r1, fp | r1 = fp;
0x0009525c mov r0, r4 | r0 = r4;
0x0009525e mov r4, r3 | r4 = r3;
0x00095260 bl 0x1dba0 | fcn_0001dba0 (r0, r1, r2);
0x00095264 ldr.w r1, [fp, 0x10] | r1 = *(arg_10h);
0x00095268 mov r0, sl | r0 = sl;
0x0009526a ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0009526c subs r1, 0x29 | r1 -= 0x29;
0x0009526e subs r1, r1, r4 | r1 -= r4;
0x00095270 adds r4, 1 | r4++;
0x00095272 add r4, sl | r4 += sl;
0x00095274 vdup.32 d16, r1 | __asm ("vdup.32 d16, r1");
0x00095278 adds r1, 1 | r1++;
0x0009527a str r4, [r3], 4 | *(r3) = r4;
| r3 += 4;
0x0009527e vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x00095282 str r1, [r5, 0x30] | *((r5 + 0x30)) = r1;
0x00095284 blx 0x85b4 | fcn_000085b4 ();
0x00095288 mov r3, sl | r3 = sl;
0x0009528a mov r2, r0 | r2 = r0;
0x0009528c add.w r1, r5, 0x44 | r1 = r5 + 0x44;
0x00095290 add.w r0, r7, 0x24 | r0 = r7 + 0x24;
0x00095294 str.w r8, [r5, 0x48] | __asm ("str.w r8, [r5, 0x48]");
0x00095298 bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x0009529c mov r0, r4 | r0 = r4;
0x0009529e add.w r1, r5, 0x50 | r1 = r5 + 0x50;
0x000952a2 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x000952a6 movs r3, 1 | r3 = 1;
0x000952a8 strd r0, r8, [r5, 0x18] | __asm ("strd r0, r8, [r5, 0x18]");
0x000952ac str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x000952b0 mov r4, r0 | r4 = r0;
0x000952b2 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000952b4 cmp r3, 0 |
| if (r3 == 0) {
0x000952b6 beq.w 0x950e2 | goto label_3;
| }
0x000952ba ldr.w sl, [r3] | sl = *(r3);
0x000952be b 0x950ba | goto label_7;
| label_18:
0x000952c0 blx 0x883c | fcn_0000883c ();
0x000952c4 subs r4, 0x2c | r4 -= 0x2c;
0x000952c6 movs r3, r0 | r3 = r0;
0x000952c8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000952ca movs r0, r0 |
0x000952cc subs r3, 0xb2 | r3 -= 0xb2;
0x000952ce movs r3, r0 | r3 = r0;
0x000952d0 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000952d4 mov r7, r2 | r7 = r2;
0x000952d6 ldr r2, [pc, 0x180] |
0x000952d8 sub sp, 0x18 |
0x000952da mov r4, r1 | r4 = r1;
0x000952dc mov r5, r0 | r5 = r0;
0x000952de ldr r3, [pc, 0x17c] | r3 = *(0x9545e);
0x000952e0 add r2, pc | r2 = 0x12a73e;
0x000952e2 ldr r6, [r1, 0x18] | r6 = *((r1 + 0x18));
0x000952e4 ldr r3, [r2, r3] |
0x000952e6 ldr r3, [r3] | r3 = imp.sinh;
0x000952e8 str r3, [sp, 0x14] | var_14h = r3;
0x000952ea mov.w r3, 0 | r3 = 0;
0x000952ee ldr r3, [r1] | r3 = *(r1);
| if (r3 != 0) {
0x000952f0 cbz r3, 0x952fa |
0x000952f2 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x000952f4 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000952f6 cmp r3, r6 |
| if (r3 <= r6) {
0x000952f8 ble 0x9536a | goto label_27;
| }
| }
0x000952fa ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x000952fc cmp r3, r6 |
| if (r3 > r6) {
0x000952fe bgt 0x95386 | goto label_28;
| }
| do {
0x00095300 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00095302 ands r8, r2, 1 | r8 = r2 & 1;
| if (r8 != r2) {
0x00095306 bne 0x953ae | goto label_29;
| }
0x00095308 ldr.w sb, [r4] | sb = *(r4);
0x0009530c cmp.w sb, 0 |
| if (sb == 0) {
0x00095310 beq 0x953e4 | goto label_30;
| }
0x00095312 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00095314 add r1, sp, 8 | r1 += var_8h_2;
0x00095316 str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h]");
0x0009531a ldr.w sb, [r3] | sb = *(r3);
0x0009531e ldr r0, [r3, 8] | r0 = *((r3 + 8));
0x00095320 add r0, sb | r0 += sb;
0x00095322 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x00095326 ldr r0, [sp, 8] | r0 = var_8h_2;
0x00095328 cmp r6, r0 |
| if (r6 != r0) {
0x0009532a bne 0x953d2 | goto label_31;
| }
| label_9:
0x0009532c str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x0009532e asrs r0, r0, 0x1f | r0 >>= 0x1f;
0x00095330 mov r2, r8 | r2 = r8;
0x00095332 str r0, [r4, 0x1c] | *((r4 + 0x1c)) = r0;
0x00095334 mov r1, r4 | r1 = r4;
0x00095336 mov r0, r5 | r0 = r5;
0x00095338 bl 0x94f20 | fcn_00094f20 (r0, r1, r2, r3, r4);
| if (r7 != 0) {
| label_10:
0x0009533c cbz r7, 0x95342 |
0x0009533e movs r3, 1 | r3 = 1;
0x00095340 str r3, [r7] | *(r7) = r3;
| }
| label_8:
0x00095342 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00095344 cmp r3, 0 |
| if (r3 != 0) {
0x00095346 bne 0x953b8 | goto label_32;
| }
0x00095348 ldr r2, [pc, 0x114] |
0x0009534a ldr r3, [pc, 0x110] | r3 = *(0x9545e);
0x0009534c add r2, pc | r2 = 0x12a7b0;
0x0009534e ldr r3, [r2, r3] | r3 = imp.sinh;
0x00095350 ldr r2, [r3] | r2 = imp.sinh;
0x00095352 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00095354 eors r2, r3 | r2 ^= r3;
0x00095356 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009535a bne 0x95454 | goto label_33;
| }
0x0009535c ldr r0, [r5] | r0 = *(r5);
0x0009535e mov r1, r4 | r1 = r4;
0x00095360 add sp, 0x18 |
0x00095362 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00095366 b.w 0x11ab8 | void (*0x11ab8)() ();
| label_27:
0x0009536a bl 0x94e40 | fcn_00094e40 (r0, r1);
0x0009536e ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| if (r3 != 0) {
0x00095370 cbnz r3, 0x953b8 | goto label_32;
| }
0x00095372 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
| if (r3 == 0) {
0x00095374 cbz r3, 0x953b8 | goto label_32;
| }
0x00095376 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x00095378 movs r6, 4 | r6 = 4;
0x0009537a vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0009537e cmp r3, r6 |
0x00095380 vstr d16, [r4, 0x50] | __asm ("vstr d16, [r4, 0x50]");
0x00095384 ble 0x95300 |
| } while (r3 <= r6);
| label_28:
0x00095386 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00095388 add r1, sp, 8 | r1 += var_8h_2;
0x0009538a ldr r0, [r3] | r0 = *(r3);
0x0009538c add r0, r6 | r0 += r6;
0x0009538e bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00095392 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x00095394 add r0, r6 | r0 += r6;
0x00095396 ldr r2, [sp, 8] | r2 = var_8h_2;
0x00095398 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x0009539a str r0, [r4, 0x18] | *((r4 + 0x18)) = r0;
0x0009539c str r1, [r4, 0x1c] | *((r4 + 0x1c)) = r1;
0x0009539e adds r3, r3, r2 | r3 += r2;
0x000953a0 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x000953a2 str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x000953a4 ldr r3, [sp, 0xc] | r3 = var_ch_3;
0x000953a6 adc.w r2, r2, r3 | __asm ("adc.w r2, r2, r3");
0x000953aa str r2, [r4, 0x54] | *((r4 + 0x54)) = r2;
0x000953ac b 0x95342 | goto label_8;
| do {
| label_29:
0x000953ae ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000953b0 blx 0x8404 | fcn_00008404 ();
0x000953b4 movs r3, 0 | r3 = 0;
0x000953b6 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| label_32:
0x000953b8 ldr r2, [pc, 0xa8] |
0x000953ba ldr r3, [pc, 0xa0] | r3 = *(0x9545e);
0x000953bc add r2, pc | r2 = 0x12a824;
0x000953be ldr r3, [r2, r3] | r3 = imp.sinh;
0x000953c0 ldr r2, [r3] | r2 = imp.sinh;
0x000953c2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000953c4 eors r2, r3 | r2 ^= r3;
0x000953c6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000953ca bne 0x95454 | goto label_33;
| }
0x000953cc add sp, 0x18 |
0x000953ce pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_31:
0x000953d2 add.w r0, sb, r6 | r0 = sb + r6;
0x000953d6 add r1, sp, 4 | r1 += var_4h;
0x000953d8 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x000953dc ldr.w r8, [sp, 4] | r8 = var_4h;
0x000953e0 add r0, r6 | r0 += r6;
0x000953e2 b 0x9532c | goto label_9;
| label_30:
0x000953e4 ldr r6, [r5, 0xc] | r6 = *((r5 + 0xc));
0x000953e6 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000953e8 ldr.w r8, [r3, 4] | r8 = *((r3 + 4));
0x000953ec str.w r8, [r6, 0x10] | __asm ("str.w r8, [r6, 0x10]");
0x000953f0 cmp.w r8, 0 |
0x000953f4 beq 0x953ae |
| } while (r8 == 0);
0x000953f6 add.w sl, r8, 0x28 | sl = r8 + 0x28;
0x000953fa mov r0, sl | r0 = sl;
0x000953fc blx 0x85b4 | fcn_000085b4 ();
0x00095400 mov r1, r8 | r1 = r8;
0x00095402 mov r3, r0 | r3 = r0;
0x00095404 mov r2, sb | r2 = sb;
0x00095406 mov r0, r6 | r0 = r6;
0x00095408 mov r6, r3 | r6 = r3;
0x0009540a bl 0x1dba0 | fcn_0001dba0 (r0, r1, r2);
0x0009540e ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x00095412 mov r0, sl | r0 = sl;
0x00095414 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00095416 subs r2, 0x29 | r2 -= 0x29;
0x00095418 subs r2, r2, r6 | r2 -= r6;
0x0009541a adds r6, 1 | r6++;
0x0009541c add r6, sl | r6 += sl;
0x0009541e vdup.32 d16, r2 | __asm ("vdup.32 d16, r2");
0x00095422 str r6, [r3], 4 | *(r3) = r6;
| r3 += 4;
0x00095426 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0009542a str r2, [r4, 0x30] | *((r4 + 0x30)) = r2;
0x0009542c blx 0x85b4 | fcn_000085b4 ();
0x00095430 mov r3, sl | r3 = sl;
0x00095432 mov r2, r0 | r2 = r0;
0x00095434 add.w r1, r4, 0x44 | r1 = r4 + 0x44;
0x00095438 add.w r0, r5, 0x24 | r0 = r5 + 0x24;
0x0009543c str.w sb, [r4, 0x48] | __asm ("str.w sb, [r4, 0x48]");
0x00095440 bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x00095444 mov r0, r6 | r0 = r6;
0x00095446 add.w r1, r4, 0x50 | r1 = r4 + 0x50;
0x0009544a bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x0009544e strd r0, sb, [r4, 0x18] | __asm ("strd r0, sb, [r4, 0x18]");
0x00095452 b 0x9533c | goto label_10;
| label_33:
0x00095454 blx 0x883c | fcn_0000883c ();
0x00095458 subs r1, 0xb8 | r1 -= 0xb8;
0x0009545a movs r3, r0 | r3 = r0;
0x0009545c lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0009545e movs r0, r0 |
0x00095460 subs r1, 0x4c | r1 -= 0x4c;
0x00095462 movs r3, r0 | r3 = r0;
0x00095464 subs r0, 0xdc | r0 -= 0xdc;
0x00095466 movs r3, r0 | r3 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x95644 */
| #include <stdint.h>
|
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) fcn.00095644 () | void fcn_00095644 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| r0 = arg1;
| if (? < ?) {
0x00095644 ldrhs pc, [r0], 0x8df | pc = *(r0);
| r0 += 0x8df;
| }
0x00095648 ldr.w r3, [pc, 0x490] |
0x0009564c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00095650 sub sp, 0x5c |
0x00095652 add r2, pc | r2 += pc;
0x00095654 mov r4, r0 | r4 = r0;
0x00095656 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00095658 ldr r3, [r3] | r3 = *(0x95adc);
0x0009565a str r3, [sp, 0x54] | var_54h = r3;
0x0009565c mov.w r3, 0 | r3 = 0;
0x00095660 ldr r3, [r0, 0x50] | r3 = *((r0 + 0x50));
| if (r3 == 0) {
0x00095662 cbz r3, 0x95690 | goto label_19;
| }
0x00095664 ldr r3, [r0, 0x24] | r3 = *((r0 + 0x24));
| if (r3 != 0) {
| label_1:
0x00095666 cbnz r3, 0x9569c | goto label_0;
| }
| label_6:
0x00095668 ldr r0, [r4, 0x50] | r0 = *((r4 + 0x50));
0x0009566a ldr r3, [r0] | r3 = *(r0);
0x0009566c adds r3, 1 | r3++;
0x0009566e str r3, [r0] | *(r0) = r3;
| do {
0x00095670 ldr.w r2, [pc, 0x46c] |
0x00095674 ldr.w r3, [pc, 0x464] | r3 = *(0x95adc);
0x00095678 add r2, pc | r2 = 0x12b15c;
0x0009567a ldr r3, [r2, r3] | r3 = imp.sinh;
0x0009567c ldr r2, [r3] | r2 = imp.sinh;
0x0009567e ldr r3, [sp, 0x54] | r3 = var_54h;
0x00095680 eors r2, r3 | r2 ^= r3;
0x00095682 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00095686 bne.w 0x95a5a | goto label_20;
| }
0x0009568a add sp, 0x5c |
0x0009568c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x00095690 bl 0x868c8 | fcn_000868c8 (r0);
0x00095694 ldr r5, [r4, 0x24] | r5 = *((r4 + 0x24));
0x00095696 strd r0, r1, [r4, 0x48] | __asm ("strd r0, r1, [r4, 0x48]");
| if (r5 == 0) {
0x0009569a cbz r5, 0x956a0 | goto label_21;
| }
| label_0:
0x0009569c movs r0, 0 | r0 = 0;
0x0009569e b 0x95670 |
| } while (1);
| label_21:
0x000956a0 ldr r1, [r4] | r1 = *(r4);
0x000956a2 movs r3, 0 | r3 = 0;
0x000956a4 movs r2, 0xa | r2 = 0xa;
0x000956a6 mov r0, r4 | r0 = r4;
0x000956a8 str r1, [sp, 0x10] | var_10h = r1;
0x000956aa bl 0x94d50 | fcn_00094d50 (r0, r1, r2);
0x000956ae ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000956b0 mov sb, r0 | sb = r0;
0x000956b2 str r3, [sp, 0xc] | var_ch = r3;
| if (r3 != 0) {
0x000956b4 cbz r3, 0x956ba |
0x000956b6 str r5, [r4, 0x50] | *((r4 + 0x50)) = r5;
0x000956b8 b 0x9569c | goto label_0;
| }
0x000956ba ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000956bc add r6, sp, 0x4c | r6 += var_4ch;
0x000956be ldr r3, [r0] | r3 = *(r0);
0x000956c0 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000956c2 str r6, [sp, 0x28] | var_28h = r6;
0x000956c4 str r1, [r3, r2] | *((r3 + r2)) = r1;
0x000956c6 add r3, r2 | r3 += r2;
0x000956c8 str r1, [r3, 4] | *((r3 + 4)) = r1;
0x000956ca str r1, [r3, 8] | *((r3 + 8)) = r1;
0x000956cc str r1, [r3, 0xc] | *((r3 + 0xc)) = r1;
0x000956ce str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x000956d0 add r3, sp, 0x48 | r3 += var_48h;
0x000956d2 ldrd r7, fp, [r0] | __asm ("ldrd r7, fp, [r0]");
0x000956d6 str r1, [sp, 0x4c] | var_4ch = r1;
0x000956d8 str r1, [sp, 0x48] | var_48h = r1;
0x000956da mov r1, r3 | r1 = r3;
0x000956dc mov r0, r7 | r0 = r7;
0x000956de str r3, [sp, 0x30] | var_30h = r3;
0x000956e0 ldr r3, [r0], 4 | r3 = *(r0);
| r0 += 4;
0x000956e4 str r3, [sp, 0x24] | var_24h = r3;
0x000956e6 bl 0xccc4 | r0 = fcn_0000ccc4 (r0, r1);
0x000956ea adds r5, r0, 4 | r5 = r0 + 4;
0x000956ec mov r1, r6 | r1 = r6;
0x000956ee adds r0, r7, r5 | r0 = r7 + r5;
0x000956f0 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x000956f4 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000956f6 mov sl, r0 | sl = r0;
0x000956f8 cmp.w r3, 0x7d0 |
0x000956fc str r3, [sp, 0x18] | var_18h = r3;
| if (r3 > 0x7d0) {
0x000956fe bhi 0x957da | goto label_22;
| }
0x00095700 ldr r6, [sp, 0x4c] | r6 = var_4ch;
0x00095702 cmp.w r6, 0x7d0 |
| if (r6 > 0x7d0) {
0x00095706 bgt 0x957da | goto label_22;
| }
0x00095708 cmp r6, 0 |
| if (r6 < 0) {
0x0009570a blt 0x957da | goto label_22;
| }
0x0009570c subs r3, 1 | r3--;
0x0009570e ldr r1, [sp, 0xc] | r1 = var_ch;
0x00095710 lsls r2, r3, 1 | r2 = r3 << 1;
0x00095712 str r3, [sp, 0x2c] | var_2ch = r3;
0x00095714 adds r3, r2, r3 | r3 = r2 + r3;
0x00095716 str r2, [sp, 0x44] | var_44h = r2;
0x00095718 lsls r3, r3, 2 | r3 <<= 2;
0x0009571a add.w r8, r3, 0x28 | r8 = r3 + 0x28;
0x0009571e mov r0, r8 | r0 = r8;
0x00095720 blx 0x8240 | fcn_00008240 ();
0x00095724 str r0, [sp, 0x1c] | var_1ch = r0;
0x00095726 cmp r0, 0 |
| if (r0 == 0) {
0x00095728 beq.w 0x95a10 | goto label_23;
| }
0x0009572c mov r2, r8 | r2 = r8;
0x0009572e ldr.w r8, [sp, 0xc] | r8 = var_ch;
0x00095732 add r5, sl | r5 += sl;
0x00095734 mov r1, r8 | r1 = r8;
0x00095736 blx 0x839c | fcn_0000839c ();
0x0009573a ldrd r3, r2, [sp, 0x18] | __asm ("ldrd r3, r2, [var_18h]");
0x0009573e adds r0, r7, r5 | r0 = r7 + r5;
0x00095740 strd r6, r3, [r2, 0x10] | __asm ("strd r6, r3, [r2, 0x10]");
0x00095744 movs r3, 1 | r3 = 1;
0x00095746 str r3, [r2] | *(r2) = r3;
0x00095748 add.w r1, r2, 8 | r1 = r2 + 8;
0x0009574c bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00095750 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00095752 add r5, r0 | r5 += r0;
0x00095754 cmp r3, 0 |
| if (r3 == 0) {
0x00095756 beq.w 0x95a90 | goto label_24;
| }
0x0009575a add r3, sp, 0x50 | r3 += var_50h;
0x0009575c str.w r8, [sp, 0x14] | __asm ("str.w r8, [var_14h]");
0x00095760 str r3, [sp, 0x38] | var_38h = r3;
0x00095762 str r4, [sp, 0x20] | var_20h = r4;
| label_4:
0x00095764 cmp fp, r5 |
0x00095766 mov.w r3, 0 | r3 = 0;
0x0009576a str r3, [sp, 0x50] | var_50h = r3;
| if (fp > r5) {
0x0009576c bgt 0x95792 | goto label_25;
| }
| label_3:
0x0009576e ldr r4, [sp, 0x20] | r4 = var_20h;
| do {
| label_5:
0x00095770 movw r5, 0x10b | r5 = 0x10b;
| label_13:
0x00095774 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00095776 ldr r3, [r2] | r3 = *(r2);
0x00095778 subs r3, 1 | r3--;
0x0009577a cmp r3, 0 |
0x0009577c str r3, [r2] | *(r2) = r3;
| if (r3 <= 0) {
0x0009577e ble.w 0x95a5e | goto label_26;
| }
0x00095782 mov r0, sb | r0 = sb;
0x00095784 str r5, [r4, 0x24] | *((r4 + 0x24)) = r5;
0x00095786 blx 0x8404 | fcn_00008404 ();
0x0009578a ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| label_2:
0x0009578c movs r2, 0 | r2 = 0;
0x0009578e str r2, [r4, 0x50] | *((r4 + 0x50)) = r2;
0x00095790 b 0x95666 | goto label_1;
| label_25:
0x00095792 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00095794 adds r0, r7, r5 | r0 = r7 + r5;
0x00095796 lsl.w r8, r3, 1 | r8 = r3 << 1;
0x0009579a add.w r4, r8, r3 | r4 = r8 + r3;
0x0009579e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000957a0 lsls r4, r4, 2 | r4 <<= 2;
0x000957a2 add.w r2, r4, 0x18 | r2 = r4 + 0x18;
0x000957a6 add r4, r3 | r4 += r3;
0x000957a8 add r3, r2 | r3 += r2;
0x000957aa mov r1, r3 | r1 = r3;
0x000957ac str r3, [sp, 0x3c] | var_3ch = r3;
0x000957ae bl 0xccc4 | r0 = fcn_0000ccc4 (r0, r1);
0x000957b2 add r5, r0 | r5 += r0;
0x000957b4 ldr r1, [sp, 0x38] | r1 = var_38h;
0x000957b6 adds r0, r7, r5 | r0 = r7 + r5;
0x000957b8 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x000957bc ldr.w sl, [sp, 0x50] | sl = var_50h;
0x000957c0 add r5, r0 | r5 += r0;
0x000957c2 ldr r1, [r4, 0x18] | r1 = *((r4 + 0x18));
0x000957c4 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000957c6 cmp r1, sl |
| if (r1 <= sl) {
0x000957c8 ble 0x957ea | goto label_27;
| }
0x000957ca mov r3, r4 | r3 = r4;
0x000957cc movs r1, 0 | r1 = 0;
0x000957ce sub.w r2, r2, sl | r2 -= sl;
0x000957d2 ldr r4, [sp, 0x20] | r4 = var_20h;
0x000957d4 str r1, [r3, 0x20] | *((r3 + 0x20)) = r1;
0x000957d6 str r2, [sp, 0x4c] | var_4ch = r2;
0x000957d8 b 0x95770 |
| } while (1);
| label_22:
0x000957da movw r3, 0x10b | r3 = 0x10b;
0x000957de mov r0, sb | r0 = sb;
0x000957e0 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x000957e2 blx 0x8404 | fcn_00008404 ();
0x000957e6 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000957e8 b 0x9578c | goto label_2;
| label_27:
0x000957ea sub.w r3, r2, sl | r3 = r2 - sl;
0x000957ee add.w r2, sl, sl, lsl 1 | r2 = sl + (sl << 1);
0x000957f2 movs r1, 0 | r1 = 0;
0x000957f4 str r3, [sp, 0x34] | var_34h = r3;
0x000957f6 lsls r2, r2, 2 | r2 <<= 2;
0x000957f8 mov r0, r2 | r0 = r2;
0x000957fa str r2, [sp, 0x40] | var_40h = r2;
0x000957fc blx 0x8240 | fcn_00008240 ();
0x00095800 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00095802 mov r6, r0 | r6 = r0;
0x00095804 cmp r0, 0 |
| if (r0 == 0) {
0x00095806 beq.w 0x959fc | goto label_28;
| }
0x0009580a movs r1, 0 | r1 = 0;
0x0009580c blx 0x839c | fcn_0000839c ();
| label_12:
0x00095810 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00095812 cmp.w sl, 0 |
0x00095816 add r8, r3 | r8 += r3;
0x00095818 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009581a str r3, [sp, 0x4c] | var_4ch = r3;
0x0009581c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0009581e add.w r8, r3, r8, lsl 2 | r8 = r3 + (r8 << 2);
0x00095822 strd sl, r6, [r8, 0x1c] | __asm ("strd sl, r6, [r8, 0x1c]");
| if (sl <= 0) {
0x00095826 ble.w 0x95a22 | goto label_29;
| }
0x0009582a cmp fp, r5 |
| if (fp <= r5) {
0x0009582c ble.w 0x95a1e | goto label_30;
| }
0x00095830 movs r4, 0 | r4 = 0;
0x00095832 b 0x9584c |
| while (r1 >= r2) {
0x00095834 adds r4, 1 | r4++;
0x00095836 cmp sl, r4 |
| if (sl == r4) {
0x00095838 beq.w 0x9598a | goto label_31;
| }
0x0009583c ldr.w r6, [r8, 0x20] | r6 = *((r8 + 0x20));
0x00095840 add.w r2, r4, r4, lsl 1 | r2 = r4 + (r4 << 1);
0x00095844 cmp fp, r5 |
0x00095846 add.w r6, r6, r2, lsl 2 | r6 += (r2 << 2);
| if (fp <= r5) {
0x0009584a ble 0x95874 | goto label_32;
| }
0x0009584c mov r1, r6 | r1 = r6;
0x0009584e adds r0, r7, r5 | r0 = r7 + r5;
0x00095850 bl 0xccc4 | r0 = fcn_0000ccc4 (r0, r1);
0x00095854 add r5, r0 | r5 += r0;
0x00095856 adds r1, r6, 4 | r1 = r6 + 4;
0x00095858 adds r0, r7, r5 | r0 = r7 + r5;
0x0009585a bl 0xccc4 | r0 = fcn_0000ccc4 (r0, r1);
0x0009585e add r5, r0 | r5 += r0;
0x00095860 add.w r1, r6, 8 | r1 = r6 + 8;
0x00095864 adds r0, r7, r5 | r0 = r7 + r5;
0x00095866 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x0009586a ldrd r2, r1, [r6, 4] | __asm ("ldrd r2, r1, [r6, 4]");
0x0009586e add r5, r0 | r5 += r0;
0x00095870 cmp r1, r2 |
0x00095872 bge 0x95834 |
| }
| label_32:
0x00095874 movw r2, 0x10b | r2 = 0x10b;
| label_9:
0x00095878 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0009587a ldr r1, [sp, 0x14] | r1 = var_14h;
0x0009587c cmp r3, r1 |
| if (r3 == r1) {
0x0009587e beq.w 0x9598e | goto label_33;
| }
| label_10:
0x00095882 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00095884 adds r3, 1 | r3++;
0x00095886 str r3, [sp, 0x14] | var_14h = r3;
0x00095888 cmp r2, 0 |
| if (r2 != 0) {
0x0009588a bne.w 0x9576e | goto label_3;
| }
| label_14:
0x0009588e ldrd r2, r3, [sp, 0x14] | __asm ("ldrd r2, r3, [var_18h]");
0x00095892 cmp r3, r2 |
| if (r3 > r2) {
0x00095894 bgt.w 0x95764 | goto label_4;
| }
0x00095898 ldr r4, [sp, 0x20] | r4 = var_20h;
| label_17:
0x0009589a ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009589c cmp r3, 0 |
| if (r3 != 0) {
0x0009589e bne.w 0x95770 | goto label_5;
| }
| label_15:
0x000958a2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000958a4 movs r2, 0 | r2 = 0;
0x000958a6 rev r6, r3 | r3 = SWAP32 (r6);
0x000958a8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000958aa ldr r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x000958ac str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
| if (r3 != 0) {
0x000958ae cbz r3, 0x958b8 |
0x000958b0 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000958b2 ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x000958b4 cmp r3, r6 |
| if (r3 == r6) {
0x000958b6 beq 0x95968 | goto label_34;
| }
| }
0x000958b8 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000958ba movs r5, 0 | r5 = 0;
0x000958bc vldr d16, [pc, 0x208] | __asm ("vldr d16, aav.0x000000ff");
0x000958c0 vldr d17, [pc, 0x20c] | __asm ("vldr d17, aav.0x000000ff");
0x000958c4 ldr r1, [pc, 0x21c] |
0x000958c6 add.w r3, r2, 0x4c | r3 = r2 + 0x4c;
0x000958ca str r5, [sp, 0x48] | var_48h = r5;
0x000958cc ldr r0, [sp, 0x28] | r0 = var_28h;
0x000958ce vst1.32 {d16, d17}, [r3] | __asm ("vst1.32 {d16, d17}, [r3]");
0x000958d2 mov.w r3, 0x100000 | r3 = 0x100000;
0x000958d6 str r3, [r2, 0x5c] | *((r2 + 0x5c)) = r3;
0x000958d8 add r1, pc | r1 = 0x12b3c0;
0x000958da ldrd r2, r3, [r2, 4] | __asm ("ldrd r2, r3, [r2, 4]");
0x000958de str r5, [sp, 0x4c] | var_4ch = r5;
0x000958e0 bl 0x4bed4 | r0 = fcn_0004bed4 (r0);
0x000958e4 mov r8, r0 | r8 = r0;
0x000958e6 cmp r0, 0 |
| if (r0 == 0) {
0x000958e8 beq 0x95986 | goto label_35;
| }
0x000958ea ldr r2, [sp, 0x10] | r2 = var_10h;
0x000958ec mov r1, r8 | r1 = r8;
0x000958ee ldr r3, [sp, 0x30] | r3 = var_30h;
0x000958f0 ldr r0, [r2] | r0 = *(r2);
0x000958f2 mov.w r2, -1 | r2 = -1;
0x000958f6 str r5, [sp] | *(sp) = r5;
0x000958f8 blx 0x89e0 | r0 = fcn_000089e0 ();
0x000958fc mov r7, r0 | r7 = r0;
0x000958fe mov r0, r8 | r0 = r8;
0x00095900 str r7, [sp, 0x4c] | var_4ch = r7;
0x00095902 blx 0x8404 | fcn_00008404 ();
| if (r7 != 0) {
| label_8:
0x00095906 cbnz r7, 0x95966 | goto label_11;
| }
0x00095908 ldr.w sl, [pc, 0x1dc] |
0x0009590c add sl, pc | sl = 0x12b3f8;
| label_7:
0x0009590e ldr r0, [sp, 0x48] | r0 = var_48h;
0x00095910 blx 0x8728 | r0 = fcn_00008728 ();
0x00095914 cmp r0, 0x64 |
| if (r0 != 0x64) {
0x00095916 bne 0x95948 | goto label_36;
| }
| do {
0x00095918 movs r1, 0 | r1 = 0;
0x0009591a ldr r0, [sp, 0x48] | r0 = var_48h;
0x0009591c blx 0x8148 | fcn_00008148 ();
0x00095920 movs r1, 1 | r1 = 1;
0x00095922 mov r5, r0 | r5 = r0;
0x00095924 ldr r0, [sp, 0x48] | r0 = var_48h;
0x00095926 blx 0x890c | fcn_0000890c ();
0x0009592a mov r1, sl | r1 = sl;
0x0009592c mov r8, r0 | r8 = r0;
0x0009592e mov r0, r5 | r0 = r5;
0x00095930 blx 0x8540 | r0 = fcn_00008540 ();
| if (r0 != 0) {
0x00095934 cbnz r0, 0x95978 | goto label_37;
| }
0x00095936 mov r0, r8 | r0 = r8;
0x00095938 blx 0x828c | r0 = loc_imp_gmon_start_ ();
0x0009593c mov r7, r0 | r7 = r0;
0x0009593e ldr r0, [sp, 0x48] | r0 = var_48h;
0x00095940 blx 0x8728 | r0 = fcn_00008728 ();
0x00095944 cmp r0, 0x64 |
0x00095946 beq 0x95918 |
| } while (r0 == 0x64);
| label_36:
0x00095948 ldr r0, [sp, 0x48] | r0 = var_48h;
0x0009594a blx 0x8580 | r0 = fcn_00008580 ();
0x0009594e clz r3, r0 | r3 &= r0;
0x00095952 cmp r7, 4 |
0x00095954 lsr.w r3, r3, 5 | r3 >>= 5;
0x00095958 it eq |
| if (r7 != 4) {
0x0009595a moveq r3, 0 | r3 = 0;
| }
| if (r3 != 0) {
0x0009595c cbnz r3, 0x959a4 | goto label_38;
| }
| if (r0 == 0) {
0x0009595e cbnz r0, 0x95964 |
0x00095960 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00095962 str r6, [r3, 0x48] | *((r3 + 0x48)) = r6;
| }
0x00095964 mov r7, r0 | r7 = r0;
| label_11:
0x00095966 str r7, [r4, 0x24] | *((r4 + 0x24)) = r7;
| label_34:
0x00095968 mov r0, sb | r0 = sb;
0x0009596a blx 0x8404 | fcn_00008404 ();
0x0009596e ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 != 0) {
0x00095970 cbnz r3, 0x959c0 | goto label_39;
| }
0x00095972 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00095974 str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
0x00095976 b 0x95668 | goto label_6;
| label_37:
0x00095978 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0009597a mov r2, r8 | r2 = r8;
0x0009597c mov r1, r5 | r1 = r5;
0x0009597e add r3, sp, 0x50 | r3 += var_50h;
0x00095980 bl 0x433f4 | fcn_000433f4 (r0, r1, r2, r3);
0x00095984 b 0x9590e | goto label_7;
| label_35:
0x00095986 ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x00095988 b 0x95906 | goto label_8;
| label_31:
0x0009598a movs r2, 0 | r2 = 0;
0x0009598c b 0x95878 | goto label_9;
| label_33:
0x0009598e ldr r3, [sp, 0x44] | r3 = var_44h;
0x00095990 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00095992 adds r1, r3, r1 | r1 = r3 + r1;
0x00095994 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00095996 add.w r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
0x0009599a ldr r1, [r1, 0x18] | r1 = *((r1 + 0x18));
0x0009599c cmp r1, 0 |
| if (r1 == 0) {
0x0009599e beq.w 0x95882 | goto label_10;
| }
0x000959a2 b 0x9576e | goto label_3;
| label_38:
0x000959a4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000959a6 ldr r5, [r3, 0x68] | r5 = *((r3 + 0x68));
0x000959a8 movs r3, 1 | r3 = 1;
0x000959aa str r3, [sp, 0x4c] | var_4ch = r3;
| if (r5 != 0) {
0x000959ac cbz r5, 0x959bc |
0x000959ae ldr r0, [pc, 0x13c] |
0x000959b0 mov r1, r7 | r1 = r7;
0x000959b2 movs r2, 4 | r2 = 4;
0x000959b4 add r0, pc | r0 = 0x12b4a6;
0x000959b6 blx 0x8644 | fcn_00008644 ();
0x000959ba str r0, [r5] | *(r5) = r0;
| }
0x000959bc movs r7, 1 | r7 = 1;
0x000959be b 0x95966 | goto label_11;
| label_39:
0x000959c0 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000959c2 ldr r3, [r2] | r3 = *(r2);
0x000959c4 subs r3, 1 | r3--;
0x000959c6 cmp r3, 0 |
0x000959c8 str r3, [r2] | *(r2) = r3;
0x000959ca itt gt |
| if (r3 <= 0) {
0x000959cc movgt r3, 0 | r3 = 0;
| }
| if (r3 > 0) {
0x000959ce strgt r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
| goto label_40;
| }
| if (r3 > 0) {
| label_40:
0x000959d0 bgt.w 0x9569c | goto label_0;
| }
0x000959d4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000959d6 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000959d8 cmp r3, 0 |
| if (r3 <= 0) {
0x000959da ble 0x959f2 | goto label_41;
| }
0x000959dc ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x000959de ldr r6, [sp, 0xc] | r6 = var_ch;
0x000959e0 mov r5, r7 | r5 = r7;
| do {
0x000959e2 ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x000959e4 adds r6, 1 | r6++;
0x000959e6 blx 0x8404 | fcn_00008404 ();
0x000959ea ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000959ec adds r5, 0xc | r5 += 0xc;
0x000959ee cmp r6, r3 |
0x000959f0 blt 0x959e2 |
| } while (r6 < r3);
| label_41:
0x000959f2 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000959f4 blx 0x8404 | fcn_00008404 ();
0x000959f8 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000959fa b 0x9578c | goto label_2;
| label_28:
0x000959fc cmp r2, 0 |
| if (r2 == 0) {
0x000959fe beq.w 0x95810 | goto label_12;
| }
0x00095a02 mov r3, r4 | r3 = r4;
0x00095a04 movs r5, 7 | r5 = 7;
0x00095a06 str r0, [r3, 0x20] | *((r3 + 0x20)) = r0;
0x00095a08 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00095a0a ldr r4, [sp, 0x20] | r4 = var_20h;
0x00095a0c str r3, [sp, 0x4c] | var_4ch = r3;
0x00095a0e b 0x95774 | goto label_13;
| label_23:
0x00095a10 movs r3, 7 | r3 = 7;
0x00095a12 mov r0, sb | r0 = sb;
0x00095a14 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00095a16 blx 0x8404 | fcn_00008404 ();
0x00095a1a ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00095a1c b 0x9578c | goto label_2;
| label_30:
0x00095a1e ldr r4, [sp, 0x20] | r4 = var_20h;
0x00095a20 b 0x95770 | goto label_5;
| label_29:
0x00095a22 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 == 0) {
0x00095a24 cbnz r3, 0x95a32 |
0x00095a26 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00095a28 cmp r3, 0 |
| if (r3 == 0) {
0x00095a2a beq 0x95aa2 | goto label_42;
| }
0x00095a2c movs r3, 1 | r3 = 1;
0x00095a2e str r3, [sp, 0x14] | var_14h = r3;
0x00095a30 b 0x95764 | goto label_4;
| }
0x00095a32 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00095a34 ldr r2, [r3, -0xc] | r2 = *((r3 - 0xc));
0x00095a38 subs r2, 0 |
0x00095a3a it ne |
| if (r2 == 0) {
0x00095a3c movne r2, 1 | r2 = 1;
| }
0x00095a3e cmp.w sl, 0 |
0x00095a42 it ne |
| if (sl == 0) {
0x00095a44 movne r2, 0 | r2 = 0;
| }
0x00095a46 cmp r2, 0 |
| if (r2 != 0) {
0x00095a48 bne.w 0x9576e | goto label_3;
| }
0x00095a4c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00095a4e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00095a50 cmp r2, r3 |
| if (r2 == r3) {
0x00095a52 beq 0x95ab0 | goto label_43;
| }
| label_18:
0x00095a54 adds r3, 1 | r3++;
0x00095a56 str r3, [sp, 0x14] | var_14h = r3;
0x00095a58 b 0x9588e | goto label_14;
| label_20:
0x00095a5a blx 0x883c | fcn_0000883c ();
| label_26:
0x00095a5e ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x00095a60 cmp r3, 0 |
| if (r3 <= 0) {
0x00095a62 ble 0x95a7e | goto label_16;
| }
0x00095a64 ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x00095a68 ldr r7, [sp, 0xc] | r7 = var_ch;
0x00095a6a mov r6, r8 | r6 = r8;
| do {
0x00095a6c ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x00095a6e adds r7, 1 | r7++;
0x00095a70 blx 0x8404 | fcn_00008404 ();
0x00095a74 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x00095a78 adds r6, 0xc | r6 += 0xc;
0x00095a7a cmp r7, r3 |
0x00095a7c blt 0x95a6c |
| } while (r7 < r3);
| label_16:
0x00095a7e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00095a80 blx 0x8404 | fcn_00008404 ();
0x00095a84 mov r0, sb | r0 = sb;
0x00095a86 str r5, [r4, 0x24] | *((r4 + 0x24)) = r5;
0x00095a88 blx 0x8404 | fcn_00008404 ();
0x00095a8c ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00095a8e b 0x9578c | goto label_2;
| label_24:
0x00095a90 cmp r6, 0 |
| if (r6 == 0) {
0x00095a92 beq.w 0x958a2 | goto label_15;
| }
0x00095a96 ldrd r2, r3, [sp, 0x18] | __asm ("ldrd r2, r3, [var_18h]");
0x00095a9a movw r5, 0x10b | r5 = 0x10b;
0x00095a9e str r2, [r3] | *(r3) = r2;
0x00095aa0 b 0x95a7e | goto label_16;
| label_42:
0x00095aa2 ldrd r3, r4, [sp, 0x1c] | __asm ("ldrd r3, r4, [var_1ch]");
0x00095aa6 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00095aa8 cmp r3, 0 |
| if (r3 == 0) {
0x00095aaa beq.w 0x9589a | goto label_17;
| }
0x00095aae b 0x95770 | goto label_5;
| label_43:
0x00095ab0 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00095ab2 movs r2, 0xc | r2 = 0xc;
0x00095ab4 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00095ab6 mla r2, r2, r3, r1 | __asm ("mla r2, r2, r3, r1");
0x00095aba ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x00095abc cmp r2, 0 |
| if (r2 == 0) {
0x00095abe beq 0x95a54 | goto label_18;
| }
0x00095ac0 b 0x9576e | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x95af0 */
| #include <stdint.h>
|
; (fcn) fcn.00095af0 () | void fcn_00095af0 (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00095af0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00095af4 sub sp, 0xc |
0x00095af6 ldr.w sl, [r0, 0x24] | sl = *(arg_0hx24);
0x00095afa cmp.w sl, 0 |
| if (sl != 0) {
0x00095afe bne 0x95ba6 | goto label_4;
| }
0x00095b00 asr.w r8, r3, 0x1f | r8 = r3 >> 0x1f;
0x00095b04 mov sb, r0 | sb = r0;
0x00095b06 adds.w r5, sl, r3 | r5 = sl + r3;
0x00095b0a strd r1, r2, [sp] | __asm ("strd r1, r2, [sp]");
0x00095b0e add.w r8, r8, 0x10 | r8 += 0x10;
0x00095b12 mov r7, sl | r7 = sl;
0x00095b14 add.w r8, r8, r2, lsl 5 | r8 += (r2 << 5);
0x00095b18 movs r6, 0x28 | r6 = 0x28;
0x00095b1a mov r4, sl | r4 = sl;
0x00095b1c b 0x95b58 |
| while (r4 != 0) {
0x00095b1e blx 0x839c | fcn_0000839c ();
0x00095b22 mov r2, r5 | r2 = r5;
0x00095b24 mov r3, r8 | r3 = r8;
0x00095b26 mov r0, sb | r0 = sb;
0x00095b28 bl 0x94d50 | fcn_00094d50 (r0, r1, r2);
0x00095b2c lsls r3, r7, 5 | r3 = r7 << 5;
0x00095b2e adds r2, r4, r3 | r2 = r4 + r3;
0x00095b30 str r0, [r2, 8] | *((r2 + 8)) = r0;
| if (r0 != 0) {
0x00095b32 cbz r0, 0x95b40 |
0x00095b34 ldr r2, [r0] | r2 = *(r0);
0x00095b36 ldrb r0, [r2] | r0 = *(r2);
0x00095b38 and r0, r0, 1 | r0 &= 1;
0x00095b3c rsb.w r0, r0, 1 | r0 = 1 - r0;
| }
0x00095b40 ldr.w r1, [sb, 0x24] | r1 = *((sb + 0x24));
0x00095b44 adds.w r5, r5, -0x80000000 | r5 += -0x80000000;
0x00095b48 adc r8, r8, 0 | __asm ("adc r8, r8, 0");
0x00095b4c adds r2, r7, 1 | r2 = r7 + 1;
0x00095b4e adds r6, 0x20 | r6 += 0x20;
0x00095b50 str r2, [r4] | *(r4) = r2;
0x00095b52 orrs r0, r1 | r0 |= r1;
| if (r0 != r1) {
0x00095b54 bne 0x95bb0 | goto label_5;
| }
0x00095b56 mov r7, r2 | r7 = r2;
0x00095b58 mov r2, r6 | r2 = r6;
0x00095b5a movs r3, 0 | r3 = 0;
0x00095b5c mov r0, r4 | r0 = r4;
0x00095b5e mov fp, r4 |
0x00095b60 blx 0x8500 | r0 = fcn_00008500 ();
0x00095b64 mov r4, r0 | r4 = r0;
0x00095b66 sub.w r3, r6, 0x20 | r3 = r6 - 0x20;
0x00095b6a movs r1, 0 | r1 = 0;
0x00095b6c movs r2, 0x20 | r2 = 0x20;
0x00095b6e add r0, r3 | r0 += r3;
0x00095b70 cmp r4, 0 |
0x00095b72 bne 0x95b1e |
| }
0x00095b74 movs r3, 7 | r3 = 7;
0x00095b76 str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x00095b7a cmp.w fp, 0 |
| if (fp == 0) {
0x00095b7e beq 0x95ba6 | goto label_4;
| }
| label_1:
0x00095b80 ldr.w r3, [fp] | r3 = *(fp);
0x00095b84 cmp r3, 0 |
0x00095b86 it gt |
| if (r3 <= 0) {
0x00095b88 movgt r4, fp | r4 = fp;
| }
| if (r3 <= 0) {
0x00095b8a ble 0x95ba0 | goto label_6;
| }
| do {
0x00095b8c ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00095b8e add.w sl, sl, 1 | sl++;
0x00095b92 blx 0x8404 | fcn_00008404 ();
0x00095b96 ldr.w r3, [fp] | r3 = *(fp);
0x00095b9a adds r4, 0x20 | r4 += 0x20;
0x00095b9c cmp sl, r3 |
0x00095b9e blt 0x95b8c |
| } while (sl < r3);
| label_6:
0x00095ba0 mov r0, fp | r0 = fp;
0x00095ba2 blx 0x8404 | fcn_00008404 ();
| label_4:
0x00095ba6 movs r4, 0 | r4 = 0;
| label_0:
0x00095ba8 mov r0, r4 | r0 = r4;
0x00095baa add sp, 0xc |
0x00095bac pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00095bb0 mov fp, r1 |
0x00095bb2 ldrd r1, r2, [sp] | __asm ("ldrd r1, r2, [sp]");
0x00095bb6 cmp.w fp, 0 |
| if (fp != 0) {
0x00095bba bne 0x95bde | goto label_2;
| }
0x00095bbc str r2, [r4, 4] | *((r4 + 4)) = r2;
| if (r1 != 0) {
0x00095bbe cbnz r1, 0x95be2 | goto label_7;
| }
0x00095bc0 add.w r5, r4, 8 | r5 = r4 + 8;
0x00095bc4 mov r6, r1 | r6 = r1;
| do {
0x00095bc6 mov r0, r5 | r0 = r5;
0x00095bc8 adds r5, 0x20 | r5 += 0x20;
0x00095bca bl 0xced4 | fcn_0000ced4 (r0);
0x00095bce cmp r7, r6 |
0x00095bd0 add.w r6, r6, 1 | r6++;
0x00095bd4 bne 0x95bc6 |
| } while (r7 != r6);
0x00095bd6 ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x00095bda cmp r3, 0 |
| if (r3 == 0) {
0x00095bdc beq 0x95ba8 | goto label_0;
| }
| label_2:
0x00095bde mov fp, r4 |
0x00095be0 b 0x95b80 | goto label_1;
| label_7:
0x00095be2 subs r6, r7, 1 | r6 = r7 - 1;
0x00095be4 adds r3, 8 | r3 += 8;
0x00095be6 and r1, r6, 0x80000000 | r1 = r6 & 0x80000000;
0x00095bea str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00095bee orr.w r1, r1, r6, lsr 1 | r1 |= (r6 >> 1);
0x00095bf2 lsls r6, r6, 0x1f | r6 <<= 0x1f;
0x00095bf4 mov sl, fp | sl = fp;
0x00095bf6 adds r5, r4, r3 | r5 = r4 + r3;
0x00095bf8 mov fp, r1 |
| label_3:
0x00095bfa mov r8, r5 | r8 = r5;
| do {
0x00095bfc mov r0, r5 | r0 = r5;
0x00095bfe bl 0xced4 | r0 = fcn_0000ced4 (r0);
0x00095c02 cmp r0, 0 |
0x00095c04 beq 0x95bfc |
| } while (r0 == 0);
0x00095c06 str.w sl, [r5, 8] | __asm ("str.w sl, [r5, 8]");
| if (r7 != 0) {
0x00095c0a cbnz r7, 0x95c1a | goto label_8;
| }
0x00095c0c ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x00095c10 ldr.w sl, [sp] | sl = *(sp);
0x00095c14 cmp r3, 0 |
| if (r3 == 0) {
0x00095c16 beq 0x95ba8 | goto label_0;
| }
0x00095c18 b 0x95bde | goto label_2;
| label_8:
0x00095c1a ldr r0, [r8, -0x20] | r0 = *((r8 - 0x20));
0x00095c1e subs r5, 0x20 | r5 -= 0x20;
0x00095c20 blx 0x8404 | fcn_00008404 ();
0x00095c24 movs r2, 0x20 | r2 = 0x20;
0x00095c26 movs r1, 0 | r1 = 0;
0x00095c28 mov r0, r5 | r0 = r5;
0x00095c2a subs r7, 1 | r7--;
0x00095c2c blx 0x839c | fcn_0000839c ();
0x00095c30 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00095c32 movs r2, 0 | r2 = 0;
0x00095c34 ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x00095c38 adds r2, r2, r6 | r2 += r6;
0x00095c3a mov r0, sb | r0 = sb;
0x00095c3c add.w r3, fp, r3, lsl 5 | r3 = fp + (r3 << 5);
0x00095c40 adds r2, r2, r1 | r2 += r1;
0x00095c42 add.w r3, r3, 0x10 | r3 += 0x10;
0x00095c46 adc.w r3, r3, r1, asr 31 | __asm ("adc.w r3, r3, r1, asr 31");
0x00095c4a bl 0x94d50 | fcn_00094d50 (r0, r1, r2);
0x00095c4e ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x00095c52 adds.w r6, r6, -0x80000000 | r6 += -0x80000000;
0x00095c56 sbc fp, fp, 0 | __asm ("sbc fp, arg_0h");
0x00095c5a str r0, [r8, -0x20] | *((r8 - 0x20)) = r0;
0x00095c5e cmp r3, 0 |
| if (r3 == 0) {
0x00095c60 beq 0x95bfa | goto label_3;
| }
0x00095c62 ldr.w sl, [sp] | sl = *(sp);
0x00095c66 mov fp, r4 |
0x00095c68 b 0x95b80 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x95da0 */
| #include <stdint.h>
|
; (fcn) fcn.00095da0 () | void fcn_00095da0 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00095da0 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00095da4 lsls r6, r2, 5 | r6 = r2 << 5;
0x00095da6 mov r8, r2 | r8 = r2;
0x00095da8 ldr r2, [pc, 0x180] |
0x00095daa sub sp, 0x10 |
0x00095dac mov r5, r1 | r5 = r1;
0x00095dae ldr r3, [pc, 0x180] | r3 = *(0x95f32);
0x00095db0 mov r7, r0 | r7 = r0;
0x00095db2 add r2, pc | r2 = 0x12bce2;
0x00095db4 ldr r3, [r2, r3] |
0x00095db6 adds r2, r1, r6 | r2 = r1 + r6;
0x00095db8 ldr.w sb, [r2, 0x14] | sb = imp.sinh;
0x00095dbc ldr r3, [r3] | r3 = imp.sinh;
0x00095dbe str r3, [sp, 0xc] | var_ch = r3;
0x00095dc0 mov.w r3, 0 | r3 = 0;
0x00095dc4 ldr r3, [r2, 0xc] | r3 = imp.sinh;
0x00095dc6 cmp r3, sb |
0x00095dc8 itt le |
| if (r3 > sb) {
0x00095dca movle r3, 1 | r3 = 1;
| }
| if (r3 > sb) {
0x00095dcc strle r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| }
| if (r3 <= sb) {
0x00095dce ble 0x95e88 | goto label_5;
| }
0x00095dd0 cmp r3, 9 |
0x00095dd2 mov r0, r3 | r0 = r3;
0x00095dd4 it lt |
| if (r3 >= 9) {
0x00095dd6 movlt r0, 9 | r0 = 9;
| }
0x00095dd8 subs r3, 1 | r3--;
0x00095dda subs r0, 9 | r0 -= 9;
0x00095ddc ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00095dde cmp r0, r3 |
0x00095de0 it ge |
| if (r0 < r3) {
0x00095de2 movge r0, r3 | r0 = r3;
| }
0x00095de4 ldr.w sl, [r2] | sl = *(r2);
0x00095de8 it ge |
| if (r0 < r3) {
0x00095dea movge r4, r0 | r4 = r0;
| }
| if (r0 >= r3) {
0x00095dec bge 0x95e08 | goto label_1;
| }
0x00095dee add.w r2, sl, r3 | r2 = sl + r3;
0x00095df2 b 0x95dfa |
| while (r1 < 0) {
0x00095df4 cmp r0, r3 |
| if (r0 == r3) {
0x00095df6 beq.w 0x95f00 | goto label_6;
| }
0x00095dfa ldrsb r1, [r2, -0x1]! | r1 = *((r2 -= 0x1));
0x00095dfe mov r4, r3 | r4 = r3;
0x00095e00 subs r3, 1 | r3--;
0x00095e02 cmp r1, 0 |
0x00095e04 blt 0x95df4 |
| }
0x00095e06 mov r0, r4 | r0 = r4;
| label_1:
0x00095e08 mov r1, sp | r1 = sp;
0x00095e0a add r0, sl | r0 += sl;
0x00095e0c bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00095e10 adds r1, r5, r6 | r1 = r5 + r6;
0x00095e12 ldr r2, [sp] | r2 = *(sp);
0x00095e14 ldr r3, [r1, 0x20] | r3 = *((r1 + 0x20));
0x00095e16 ldr r0, [r1, 0x18] | r0 = *((r1 + 0x18));
0x00095e18 subs r3, r3, r2 | r3 -= r2;
0x00095e1a ldr r2, [sp, 4] | r2 = var_4h;
0x00095e1c str r3, [r1, 0x20] | *((r1 + 0x20)) = r3;
0x00095e1e add.w ip, r0, -1 |
0x00095e22 ldr r3, [r1, 0x24] | r3 = *((r1 + 0x24));
0x00095e24 str.w ip, [r1, 0x18] | __asm ("str.w ip, [r1, 0x18]");
0x00095e28 sbc.w r3, r3, r2 | __asm ("sbc.w r3, r3, r2");
0x00095e2c str r3, [r1, 0x24] | *((r1 + 0x24)) = r3;
0x00095e2e subs r3, r4, 1 | r3 = r4 - 1;
0x00095e30 cmp sb, r3 |
| if (sb > r3) {
0x00095e32 bgt 0x95e62 | goto label_2;
| }
0x00095e34 add.w r1, sl, r4 | r1 = sl + r4;
0x00095e38 movs r2, 0 | r2 = 0;
0x00095e3a b 0x95e44 |
| while (lr == 0) {
0x00095e3c subs r3, 1 | r3--;
0x00095e3e adds r2, 1 | r2++;
0x00095e40 cmp sb, r3 |
| if (sb > r3) {
0x00095e42 bgt 0x95e5c | goto label_4;
| }
0x00095e44 ldrb lr, [r1, -0x1]! |
0x00095e48 cmp.w lr, 0 |
0x00095e4c beq 0x95e3c |
| }
0x00095e4e cmp sb, r3 |
| if (sb <= r3) {
0x00095e50 bgt 0x95e5c |
0x00095e52 ldrsb.w r1, [sl, r3] | r1 = *((sl + r3));
0x00095e56 add sl, r3 | sl += r3;
0x00095e58 cmp r1, 0 |
| if (r1 < 0) {
0x00095e5a blt 0x95f04 | goto label_7;
| }
| }
| label_4:
0x00095e5c sub.w ip, ip, r2 |
0x00095e60 subs r4, r4, r2 | r4 -= r2;
| label_2:
0x00095e62 adds r3, r5, r6 | r3 = r5 + r6;
0x00095e64 str.w ip, [r3, 0x18] | __asm ("str.w ip, [r3, 0x18]");
0x00095e68 str r4, [r3, 0xc] | *((r3 + 0xc)) = r4;
0x00095e6a ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00095e6c cbnz r3, 0x95e88 |
| while (r2 >= r3) {
| label_0:
0x00095e6e ldr r2, [pc, 0xc4] |
0x00095e70 ldr r3, [pc, 0xbc] | r3 = *(0x95f30);
0x00095e72 add r2, pc | r2 = 0x12bdac;
0x00095e74 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00095e76 ldr r2, [r3] | r2 = imp.sinh;
0x00095e78 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00095e7a eors r2, r3 | r2 ^= r3;
0x00095e7c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00095e80 bne 0x95f28 | goto label_8;
| }
0x00095e82 add sp, 0x10 |
0x00095e84 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_5:
0x00095e88 ldr r3, [r5] | r3 = *(r5);
0x00095e8a add.w r2, r8, 1 | r2 = r8 + 1;
0x00095e8c lsls r1, r0, 8 | r1 = r0 << 8;
0x00095e8e cmp r2, r3 |
0x00095e90 bge 0x95e6e |
| }
0x00095e92 add.w r4, r6, 8 | r4 = r6 + 8;
0x00095e96 mov r1, r5 | r1 = r5;
0x00095e98 add r4, r5 | r4 += r5;
0x00095e9a mov r0, r7 | r0 = r7;
0x00095e9c bl 0x95da0 | fcn_00095da0 (r0, r1, r2);
0x00095ea0 ldr.w sb, [r4, 0x28] | sb = *((r4 + 0x28));
0x00095ea4 cmp.w sb, 0 |
| if (sb != 0) {
0x00095ea8 bne 0x95e6e | goto label_0;
| }
0x00095eaa add.w sl, r5, r6 | sl = r5 + r6;
0x00095eae ldr.w r0, [sl, 8] | r0 = *((sl + 8));
0x00095eb2 blx 0x8404 | fcn_00008404 ();
0x00095eb6 mov r1, sb | r1 = sb;
0x00095eb8 movs r2, 0x20 | r2 = 0x20;
0x00095eba mov r0, r4 | r0 = r4;
0x00095ebc add.w sb, sb, r8, lsl 31 | sb += (r8 << 31);
0x00095ec0 blx 0x839c | fcn_0000839c ();
0x00095ec4 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00095ec6 mov r0, r7 | r0 = r7;
0x00095ec8 and r7, r8, 0x80000000 | r7 = r8 & 0x80000000;
0x00095ecc orr.w r7, r7, r8, lsr 1 | r7 |= (r8 >> 1);
0x00095ed0 lsls r3, r3, 5 | r3 <<= 5;
0x00095ed2 add.w r1, r3, 0x10 | r1 = r3 + 0x10;
0x00095ed6 ldr r3, [r4, 0x30] | r3 = *((r4 + 0x30));
0x00095ed8 add r1, r7 | r1 += r7;
0x00095eda adds.w r2, sb, r3 | r2 = sb + r3;
0x00095ede adc.w r3, r1, r3, asr 31 | __asm ("adc.w r3, r1, r3, asr 31");
0x00095ee2 bl 0x94d50 | fcn_00094d50 (r0, r1, r2);
0x00095ee6 str.w r0, [sl, 8] | __asm ("str.w r0, [sl, 8]");
0x00095eea cmp r0, 0 |
| if (r0 == 0) {
0x00095eec beq 0x95e6e | goto label_0;
| }
| do {
0x00095eee mov r0, r4 | r0 = r4;
0x00095ef0 bl 0xced4 | r0 = fcn_0000ced4 (r0);
0x00095ef4 cmp r0, 0 |
0x00095ef6 beq 0x95eee |
| } while (r0 == 0);
0x00095ef8 add r5, r6 | r5 += r6;
0x00095efa movs r3, 0 | r3 = 0;
0x00095efc str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x00095efe b 0x95e6e | goto label_0;
| label_6:
0x00095f00 mov r4, r0 | r4 = r0;
0x00095f02 b 0x95e08 | goto label_1;
| label_7:
0x00095f04 subs r3, 7 | r3 -= 7;
0x00095f06 cmp sb, r3 |
0x00095f08 it lt |
| if (sb >= r3) {
0x00095f0a movlt r3, 1 | r3 = 1;
| }
0x00095f0c blt 0x95f18 |
| while (r1 >= 0) {
0x00095f0e sub.w ip, r0, r2 |
0x00095f12 subs r2, 1 | r2--;
0x00095f14 subs r4, r4, r2 | r4 -= r2;
0x00095f16 b 0x95e62 | goto label_2;
| label_3:
0x00095f18 ldrsb r1, [sl, -0x1]! | r1 = *((sl -= 0x1));
0x00095f1c cmp r1, 0 |
0x00095f1e bge 0x95f0e |
| }
0x00095f20 adds r3, 1 | r3++;
0x00095f22 cmp r3, 9 |
| if (r3 != 9) {
0x00095f24 bne 0x95f18 | goto label_3;
| }
0x00095f26 b 0x95e5c | goto label_4;
| label_8:
0x00095f28 blx 0x883c | fcn_0000883c ();
0x00095f2c cmp r6, 0xe6 |
0x00095f2e movs r3, r0 | r3 = r0;
0x00095f30 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00095f32 movs r0, r0 |
0x00095f34 cmp r6, 0x26 |
0x00095f36 movs r3, r0 | r3 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x95f38 */
| #include <stdint.h>
|
; (fcn) fcn.00095f38 () | void fcn_00095f38 (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00095f38 invalid |
0x00095f3c lsl.w r8, r2, 5 | r8 = r2 << 5;
0x00095f40 mov r6, r0 | r6 = r0;
0x00095f42 add.w r5, r8, 8 | r5 = r8 + 8;
0x00095f46 mov r7, r2 | r7 = r2;
0x00095f48 add r5, r1 | r5 += r1;
0x00095f4a mov r4, r1 | r4 = r1;
0x00095f4c mov r0, r5 | r0 = r5;
0x00095f4e bl 0xced4 | r0 = fcn_0000ced4 (r0);
| if (r0 == 0) {
0x00095f52 cbz r0, 0x95f5c | goto label_0;
| }
0x00095f54 ldr r3, [r4] | r3 = *(r4);
0x00095f56 adds r2, r7, 1 | r2 = r7 + 1;
0x00095f58 cmp r2, r3 |
0x00095f5a blt 0x95f60 |
| while (sb != 0) {
| label_0:
0x00095f5c pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
0x00095f60 mov r1, r4 | r1 = r4;
0x00095f62 mov r0, r6 | r0 = r6;
0x00095f64 bl 0x95f38 | fcn_00095f38 (r0, r1, r2);
0x00095f68 ldr.w sb, [r5, 0x28] | sb = *((r5 + 0x28));
0x00095f6c cmp.w sb, 0 |
0x00095f70 bne 0x95f5c |
| }
0x00095f72 add r8, r4 | r8 += r4;
0x00095f74 ldr.w r0, [r8, 8] | r0 = *((r8 + 8));
0x00095f78 blx 0x8404 | fcn_00008404 ();
0x00095f7c mov r1, sb | r1 = sb;
0x00095f7e movs r2, 0x20 | r2 = 0x20;
0x00095f80 mov r0, r5 | r0 = r5;
0x00095f82 add.w sb, sb, r7, lsl 31 | sb += (r7 << 31);
0x00095f86 blx 0x839c | fcn_0000839c ();
0x00095f8a ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00095f8c and r4, r7, 0x80000000 | r4 = r7 & 0x80000000;
0x00095f90 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x00095f92 orr.w r4, r4, r7, lsr 1 | r4 |= (r7 >> 1);
0x00095f96 mov r0, r6 | r0 = r6;
0x00095f98 lsls r1, r1, 5 | r1 <<= 5;
0x00095f9a adds.w r2, sb, r3 | r2 = sb + r3;
0x00095f9e add.w r1, r1, 0x10 | r1 += 0x10;
0x00095fa2 add r1, r4 | r1 += r4;
0x00095fa4 adc.w r3, r1, r3, asr 31 | __asm ("adc.w r3, r1, r3, asr 31");
0x00095fa8 bl 0x94d50 | fcn_00094d50 (r0, r1, r2);
0x00095fac str.w r0, [r8, 8] | __asm ("str.w r0, [r8, 8]");
0x00095fb0 cmp r0, 0 |
| if (r0 == 0) {
0x00095fb2 beq 0x95f5c | goto label_0;
| }
0x00095fb4 mov r0, r5 | r0 = r5;
0x00095fb6 pop.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x00095fba b.w 0xced4 | return void (*0xced4)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x95fc0 */
| #include <stdint.h>
|
; (fcn) fcn.00095fc0 () | void fcn_00095fc0 (int16_t arg_50h, int16_t arg1, int16_t arg2, uint32_t arg3) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00095fc0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00095fc4 mov r4, r1 | r4 = r1;
0x00095fc6 ldr r1, [pc, 0x2d4] |
0x00095fc8 sub sp, 0x2c |
0x00095fca ldr r3, [pc, 0x2d4] | r3 = *(0x962a2);
0x00095fcc add r1, pc | r1 = 0x12c26e;
0x00095fce ldrd fp, sb, [sp, 0x50] | __asm ("ldrd fp, sb, [arg_50h]");
0x00095fd2 ldr r3, [r1, r3] |
0x00095fd4 ldr r1, [r0, 0x24] | r1 = *(arg_50hx24);
0x00095fd6 ldr r3, [r3] | r3 = imp.sinh;
0x00095fd8 str r3, [sp, 0x24] | var_24h = r3;
0x00095fda mov.w r3, 0 | r3 = 0;
0x00095fde cmp r1, 0 |
| if (r1 != 0) {
0x00095fe0 bne.w 0x960f8 | goto label_4;
| }
0x00095fe4 mov sl, r0 | sl = r0;
0x00095fe6 add r3, sp, 0x20 | r3 += var_20h;
0x00095fe8 str r3, [sp, 8] | var_8h = r3;
| label_1:
0x00095fea ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x00095fec movs r0, 0 | r0 = 0;
0x00095fee str r0, [sp, 0x1c] | var_1ch = r0;
0x00095ff0 ldrh r6, [r3, 4] | r6 = *((r3 + 4));
0x00095ff2 lsls r5, r6, 1 | r5 = r6 << 1;
0x00095ff4 adds r3, r5, r6 | r3 = r5 + r6;
0x00095ff6 lsls r3, r3, 5 | r3 <<= 5;
0x00095ff8 add.w r7, r3, 0x50 | r7 = r3 + 0x50;
0x00095ffc add r7, r4 | r7 += r4;
0x00095ffe str r7, [sp, 0x20] | var_20h = r7;
0x00096000 cmp r2, 0 |
| if (r2 == 0) {
0x00096002 beq.w 0x96114 | goto label_11;
| }
0x00096006 adds r0, r4, r3 | r0 = r4 + r3;
0x00096008 ldr.w r2, [r0, 0x90] | r2 = *((r0 + 0x90));
0x0009600c cmp r2, 0 |
| if (r2 == 0) {
0x0009600e beq.w 0x96114 | goto label_11;
| }
0x00096012 ldrd r8, r0, [r0, 0x54] | __asm ("ldrd r8, r0, [r0, 0x54]");
0x00096016 ands r8, r8, 2 | r8 &= 2;
0x0009601a str r0, [sp, 4] | var_4h = r0;
0x0009601c itt ne |
| if (r8 == r8) {
0x0009601e movne r3, r7 | r3 = r7;
| }
| if (r8 == r8) {
0x00096020 movne r7, r2 | r7 = r2;
| }
| if (r8 == r8) {
0x00096022 beq.w 0x96150 | goto label_12;
| }
| do {
0x00096026 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
| if (r2 != 0) {
0x00096028 cbnz r2, 0x9604e | goto label_13;
| }
0x0009602a ldr r0, [r7, 0x24] | r0 = *((r7 + 0x24));
0x0009602c str r0, [sp, 4] | var_4h = r0;
0x0009602e ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x00096030 cmp fp, r0 |
0x00096032 ldr r0, [sp, 4] | r0 = var_4h;
0x00096034 sbcs.w r0, sb, r0 | __asm ("sbcs.w r0, sb, r0");
| if (fp >= r0) {
0x00096038 bge 0x9604e | goto label_13;
| }
0x0009603a mov r1, r7 | r1 = r7;
0x0009603c mov r0, sl | r0 = sl;
0x0009603e str r3, [sp, 4] | var_4h = r3;
0x00096040 bl 0x95da0 | fcn_00095da0 (r0, r1, r2);
0x00096044 ldr.w r1, [sl, 0x24] | r1 = *((sl + 0x24));
0x00096048 ldr r3, [sp, 4] | r3 = var_4h;
0x0009604a cmp r1, 0 |
0x0009604c beq 0x96026 |
| } while (r1 == 0);
| label_13:
0x0009604e mov r2, r7 | r2 = r7;
0x00096050 mov r7, r3 | r7 = r3;
0x00096052 adds r3, r5, r6 | r3 = r5 + r6;
0x00096054 add.w r3, r4, r3, lsl 5 | r3 = r4 + (r3 << 5);
0x00096058 ldr r3, [r3, 0x58] | r3 = *((r3 + 0x58));
0x0009605a str r3, [sp, 4] | var_4h = r3;
0x0009605c ldr r3, [r2, 0x18] | r3 = *((r2 + 0x18));
0x0009605e ldr r2, [sp, 4] | r2 = var_4h;
0x00096060 cmp r3, r2 |
| if (r3 < r2) {
0x00096062 blt.w 0x961be | goto label_14;
| }
| if (r1 != 0) {
| label_5:
0x00096066 cbnz r1, 0x96088 | goto label_15;
| }
0x00096068 b 0x96078 |
| while (r8 == 0) {
| label_6:
0x0009606a cmp r2, fp |
0x0009606c sbcs.w r3, r3, sb | __asm ("sbcs.w r3, r3, sb");
| if (r2 >= fp) {
0x00096070 bge 0x960a4 | goto label_16;
| }
| label_0:
0x00096072 ldr.w r1, [sl, 0x24] | r1 = *((sl + 0x24));
| if (r1 != 0) {
0x00096076 cbnz r1, 0x960a4 | goto label_16;
| }
0x00096078 adds r3, r5, r6 | r3 = r5 + r6;
0x0009607a movs r2, 0 | r2 = 0;
0x0009607c add.w r3, r4, r3, lsl 5 | r3 = r4 + (r3 << 5);
0x00096080 mov r1, r7 | r1 = r7;
0x00096082 mov r0, sl | r0 = sl;
0x00096084 ldr r3, [r3, 0x70] | r3 = *((r3 + 0x70));
0x00096086 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_15:
0x00096088 adds r3, r5, r6 | r3 = r5 + r6;
0x0009608a add.w r3, r4, r3, lsl 5 | r3 = r4 + (r3 << 5);
0x0009608e ldr r2, [r3, 0x5c] | r2 = *((r3 + 0x5c));
| if (r2 == 0) {
0x00096090 cbz r2, 0x960aa | goto label_2;
| }
0x00096092 ldrd r2, r3, [r3, 0xa0] | __asm ("ldrd r2, r3, [r3, 0xa0]");
0x00096096 cmp.w r8, 0 |
0x0009609a beq 0x9606a |
| }
| label_7:
0x0009609c cmp fp, r2 |
0x0009609e sbcs.w r3, sb, r3 | __asm ("sbcs.w r3, sb, r3");
| if (fp < r2) {
0x000960a2 blt 0x96072 | goto label_0;
| }
| label_16:
0x000960a4 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000960a6 cmp r3, 0 |
| if (r3 == 0) {
0x000960a8 beq 0x96130 | goto label_17;
| }
| label_2:
0x000960aa movs r3, 1 | r3 = 1;
0x000960ac mov r2, r6 | r2 = r6;
0x000960ae mov r1, r4 | r1 = r4;
0x000960b0 mov r0, sl | r0 = sl;
0x000960b2 bl 0x11e74 | fcn_00011e74 (r0, r1, r2, r3);
0x000960b6 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x000960b8 ldrh r1, [r3, 4] | r1 = *((r3 + 4));
0x000960ba add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x000960be lsls r1, r1, 5 | r1 <<= 5;
0x000960c0 adds r3, r4, r1 | r3 = r4 + r1;
0x000960c2 adds r1, 0x50 | r1 += 0x50;
0x000960c4 ldr r2, [r3, 0x5c] | r2 = *((r3 + 0x5c));
0x000960c6 add r1, r4 | r1 += r4;
0x000960c8 str r1, [sp, 0x20] | var_20h = r1;
0x000960ca cmp r2, 0 |
0x000960cc ite eq |
| if (r2 != 0) {
0x000960ce moveq r2, 1 | r2 = 1;
| }
| if (r2 == 0) {
0x000960d0 movne r2, 0 | r2 = 0;
| }
0x000960d2 strb r2, [r4, 0x10] | *((r4 + 0x10)) = r2;
0x000960d4 ldrd r2, r3, [r3, 0xa0] | __asm ("ldrd r2, r3, [r3, 0xa0]");
0x000960d8 strd r2, r3, [r4, 0x40] | __asm ("strd r2, r3, [r4, 0x40]");
| if (r2 == 0) {
0x000960dc beq 0x960f8 | goto label_4;
| }
0x000960de ldrb.w r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x000960e2 cmp r3, 0 |
| if (r3 == 0) {
0x000960e4 beq 0x96148 | goto label_18;
| }
| label_3:
0x000960e6 ldr r3, [r1, 0x58] | r3 = *((r1 + 0x58));
0x000960e8 cmp r3, 0 |
| if (r3 != 0) {
0x000960ea bne 0x96148 | goto label_18;
| }
0x000960ec ldr.w r1, [sl, 0x24] | r1 = *((sl + 0x24));
0x000960f0 mov r2, r1 | r2 = r1;
0x000960f2 cmp r1, 0 |
| if (r1 == 0) {
0x000960f4 beq.w 0x95fea | goto label_1;
| }
| label_4:
0x000960f8 ldr r2, [pc, 0x1a8] |
0x000960fa ldr r3, [pc, 0x1a4] | r3 = *(0x962a2);
0x000960fc add r2, pc | r2 = 0x12c3a4;
0x000960fe ldr r3, [r2, r3] | r3 = imp.sinh;
0x00096100 ldr r2, [r3] | r2 = imp.sinh;
0x00096102 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00096104 eors r2, r3 | r2 ^= r3;
0x00096106 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009610a bne.w 0x96298 | goto label_19;
| }
0x0009610e add sp, 0x2c |
0x00096110 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x00096114 add r5, r6 | r5 += r6;
0x00096116 add r2, sp, 0x1c | r2 += var_1ch;
0x00096118 add.w r5, r4, r5, lsl 5 | r5 = r4 + (r5 << 5);
0x0009611c mov r1, r7 | r1 = r7;
0x0009611e mov r0, sl | r0 = sl;
0x00096120 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
0x00096122 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00096124 ldr r3, [r5, 0x5c] | r3 = *((r5 + 0x5c));
0x00096126 cmp r3, 0 |
| if (r3 == 0) {
0x00096128 beq 0x960aa | goto label_2;
| }
0x0009612a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0009612c cmp r3, 0 |
| if (r3 != 0) {
0x0009612e bne 0x960aa | goto label_2;
| }
| label_17:
0x00096130 ldr r2, [sp, 8] | r2 = var_8h;
0x00096132 mov r1, r6 | r1 = r6;
0x00096134 mov r0, r4 | r0 = r4;
0x00096136 bl 0xc844 | r0 = fcn_0000c844 (r0, r1, r2);
0x0009613a cmp r0, 0 |
| if (r0 != 0) {
0x0009613c bne 0x960aa | goto label_2;
| }
0x0009613e ldrb.w r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00096142 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00096144 cmp r3, 0 |
| if (r3 != 0) {
0x00096146 bne 0x960e6 | goto label_3;
| }
| label_18:
0x00096148 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0009614a mov r0, r4 | r0 = r4;
0x0009614c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0009614e b 0x960f8 | goto label_4;
| label_12:
0x00096150 str r3, [sp, 0xc] | var_ch = r3;
0x00096152 mov r3, r7 | r3 = r7;
0x00096154 mov r7, r2 | r7 = r2;
| do {
0x00096156 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
| if (r2 != 0) {
0x00096158 cbnz r2, 0x96182 | goto label_20;
| }
0x0009615a ldr r0, [r7, 0x24] | r0 = *((r7 + 0x24));
0x0009615c str r0, [sp, 0x10] | var_10h = r0;
0x0009615e ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x00096160 cmp r0, fp |
0x00096162 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00096164 sbcs.w r0, r0, sb | __asm ("sbcs.w r0, r0, sb");
| if (r0 >= fp) {
0x00096168 bge 0x96182 | goto label_20;
| }
0x0009616a str r3, [sp, 0x10] | var_10h = r3;
0x0009616c mov r1, r7 | r1 = r7;
0x0009616e ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x00096170 mov r0, sl | r0 = sl;
0x00096172 str r3, [sp, 4] | var_4h = r3;
0x00096174 bl 0x95f38 | fcn_00095f38 (r0, r1, r2);
0x00096178 ldr.w r1, [sl, 0x24] | r1 = *((sl + 0x24));
0x0009617c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0009617e cmp r1, 0 |
0x00096180 beq 0x96156 |
| } while (r1 == 0);
| label_20:
0x00096182 adds r2, r5, r6 | r2 = r5 + r6;
0x00096184 mov r7, r3 | r7 = r3;
0x00096186 add.w lr, r4, r2, lsl 5 | lr = r4 + (r2 << 5);
0x0009618a ldr r2, [sp, 4] | r2 = var_4h;
0x0009618c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0009618e ldr.w r0, [lr, 0x58] | r0 = *((lr + 0x58));
0x00096192 cmp r0, r2 |
| if (r0 >= r2) {
0x00096194 bge.w 0x96066 | goto label_5;
| }
0x00096198 ldr.w r1, [lr, 0x50] | r1 = *((lr + 0x50));
0x0009619c ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0009619e cmp r1, r2 |
| if (r1 >= r2) {
0x000961a0 bge 0x961e8 | goto label_21;
| }
| label_10:
0x000961a2 adds r3, r5, r6 | r3 = r5 + r6;
0x000961a4 movw r2, 0x10b | r2 = 0x10b;
0x000961a8 add.w r3, r4, r3, lsl 5 | r3 = r4 + (r3 << 5);
0x000961ac str.w r2, [sl, 0x24] | __asm ("str.w r2, [sl, 0x24]");
0x000961b0 ldr r2, [r3, 0x5c] | r2 = *((r3 + 0x5c));
0x000961b2 cmp r2, 0 |
| if (r2 == 0) {
0x000961b4 beq.w 0x960aa | goto label_2;
| }
| label_8:
0x000961b8 ldrd r2, r3, [r3, 0xa0] | __asm ("ldrd r2, r3, [r3, 0xa0]");
0x000961bc b 0x9606a | goto label_6;
| label_14:
0x000961be adds r2, r5, r6 | r2 = r5 + r6;
0x000961c0 adds r3, 1 | r3++;
0x000961c2 add.w r2, r4, r2, lsl 5 | r2 = r4 + (r2 << 5);
0x000961c6 mov r1, r7 | r1 = r7;
0x000961c8 mov r0, sl | r0 = sl;
0x000961ca str r3, [r2, 0x58] | *((r2 + 0x58)) = r3;
0x000961cc str r2, [sp, 4] | var_4h = r2;
0x000961ce bl 0x954dc | fcn_000954dc (r0, r1);
0x000961d2 ldr r2, [sp, 4] | r2 = var_4h;
0x000961d4 ldr r3, [r2, 0x5c] | r3 = *((r2 + 0x5c));
0x000961d6 cmp r3, 0 |
| if (r3 == 0) {
0x000961d8 beq.w 0x960aa | goto label_2;
| }
0x000961dc movs r3, 0x60 | r3 = 0x60;
0x000961de mla r3, r3, r6, r4 | __asm ("mla r3, r3, r6, r4");
0x000961e2 ldrd r2, r3, [r3, 0xa0] | __asm ("ldrd r2, r3, [r3, 0xa0]");
0x000961e6 b 0x9609c | goto label_7;
| label_21:
0x000961e8 adds r2, r4, r3 | r2 = r4 + r3;
0x000961ea str.w lr, [sp, 0x10] | __asm ("str.w lr, [var_10h]");
0x000961ee ldr r0, [r2, 0x60] | r0 = *((r2 + 0x60));
0x000961f0 str r3, [sp, 0x14] | var_14h = r3;
0x000961f2 str r2, [sp, 0xc] | var_ch = r2;
0x000961f4 blx 0x8404 | fcn_00008404 ();
0x000961f8 ldr r3, [sp, 4] | r3 = var_4h;
0x000961fa movs r0, 0 | r0 = 0;
0x000961fc ldr.w lr, [sp, 0x10] | lr = var_10h;
0x00096200 ldr r2, [sp, 0xc] | r2 = var_ch;
0x00096202 subs r1, r3, 1 | r1 = r3 - 1;
0x00096204 str.w lr, [sp, 4] | __asm ("str.w lr, [var_4h]");
0x00096208 str r0, [r2, 0x60] | *((r2 + 0x60)) = r0;
0x0009620a mov r0, sl | r0 = sl;
0x0009620c str.w r1, [lr, 0x58] | __asm ("str.w r1, [lr, 0x58]");
0x00096210 mov r1, r7 | r1 = r7;
0x00096212 bl 0x94e40 | fcn_00094e40 (r0, r1);
0x00096216 ldr.w r1, [sl, 0x24] | r1 = *((sl + 0x24));
| if (r1 == 0) {
0x0009621a cbz r1, 0x9622a | goto label_22;
| }
| label_9:
0x0009621c movs r3, 0x60 | r3 = 0x60;
0x0009621e mla r3, r3, r6, r4 | __asm ("mla r3, r3, r6, r4");
0x00096222 ldr r2, [r3, 0x5c] | r2 = *((r3 + 0x5c));
0x00096224 cmp r2, 0 |
| if (r2 != 0) {
0x00096226 bne 0x961b8 | goto label_8;
| }
0x00096228 b 0x960aa | goto label_2;
| label_22:
0x0009622a ldr.w lr, [sp, 4] | lr = var_4h;
0x0009622e ldr.w r1, [lr, 0x5c] | r1 = *((lr + 0x5c));
0x00096232 cmp r1, 0 |
| if (r1 == 0) {
0x00096234 beq 0x9621c | goto label_9;
| }
0x00096236 ldr r0, [r1] | r0 = *(r1);
0x00096238 ldr r1, [r1, 8] | r1 = *((r1 + 8));
0x0009623a ldrh.w ip, [r0] | ip = *(r0);
0x0009623e rev16.w ip, ip | __asm ("rev16.w ip, ip");
0x00096242 uxth.w r3, ip | r3 = (int16_t) ip;
0x00096246 cmp r3, 3 |
0x00096248 it gt |
| if (r3 > 3) {
0x0009624a cmpgt r1, r3 | __asm ("cmpgt r1, r3");
| }
0x0009624c str r3, [sp, 4] | var_4h = r3;
0x0009624e ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 <= 3) {
0x00096250 ble 0x961a2 | goto label_10;
| }
0x00096252 ldr r2, [sp, 4] | r2 = var_4h;
0x00096254 adds r3, 0xa0 | r3 += 0xa0;
0x00096256 adds r1, r4, r3 | r1 = r4 + r3;
0x00096258 str.w lr, [sp, 0xc] | __asm ("str.w lr, [var_ch]");
0x0009625c add r0, r2 | r0 += r2;
0x0009625e bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00096262 ldr r2, [sp, 4] | r2 = var_4h;
0x00096264 mov r1, r7 | r1 = r7;
0x00096266 ldr.w lr, [sp, 0xc] | lr = var_ch;
0x0009626a adds r3, r0, r2 | r3 = r0 + r2;
0x0009626c ldr.w r0, [sl] | r0 = *(sl);
0x00096270 str.w r3, [lr, 0x68] | __asm ("str.w r3, [lr, 0x68]");
0x00096274 asrs r3, r3, 0x1f | r3 >>= 0x1f;
0x00096276 str.w lr, [sp, 4] | __asm ("str.w lr, [var_4h]");
0x0009627a str.w r3, [lr, 0x6c] | __asm ("str.w r3, [lr, 0x6c]");
0x0009627e bl 0x11ab8 | fcn_00011ab8 (r0, r1);
0x00096282 ldr.w lr, [sp, 4] | lr = var_4h;
0x00096286 ldr.w r3, [lr, 0x5c] | r3 = *((lr + 0x5c));
0x0009628a cmp r3, 0 |
| if (r3 == 0) {
0x0009628c beq.w 0x960aa | goto label_2;
| }
0x00096290 movs r3, 0x60 | r3 = 0x60;
0x00096292 mla r3, r3, r6, r4 | __asm ("mla r3, r3, r6, r4");
0x00096296 b 0x961b8 | goto label_8;
| label_19:
0x00096298 blx 0x883c | fcn_0000883c ();
0x0009629c cmp r4, 0xcc |
0x0009629e movs r3, r0 | r3 = r0;
0x000962a0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000962a2 movs r0, r0 |
0x000962a4 cmp r3, 0x9c |
0x000962a6 movs r3, r0 | r3 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x97204 */
| #include <stdint.h>
|
; (fcn) fcn.00097204 () | void fcn_00097204 (int16_t arg_24h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00097204 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00097208 sub sp, 0xc |
0x0009720a str r2, [sp] | *(sp) = r2;
0x0009720c mov fp, r0 |
0x0009720e mov sl, r3 | sl = r3;
0x00097210 mov r8, r1 | r8 = r1;
0x00097212 ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x00097214 ldrd r3, r0, [r1, 0x18] | __asm ("ldrd r3, r0, [r1, 0x18]");
0x00097218 ldr r6, [r1, 0x58] | r6 = *((r1 + 0x58));
0x0009721a ldr r4, [r2, 8] | r4 = *((r2 + 8));
0x0009721c ldr r2, [r2] | r2 = *(r2);
0x0009721e asrs r5, r6, 0x1f | r5 = r6 >> 0x1f;
0x00097220 add r2, r3 | r2 += r3;
0x00097222 subs r3, r4, r3 | r3 = r4 - r3;
0x00097224 asr.w r4, r4, 0x1f | r4 >>= 0x1f;
0x00097228 sbc.w r4, r4, r0 | __asm ("sbc.w r4, r4, r0");
0x0009722c ldrd r0, sb, [r1, 4] | __asm ("ldrd r0, sb, [r1, 4]");
0x00097230 cmp r6, r3 |
0x00097232 sbcs.w r4, r5, r4 | __asm ("sbcs.w r4, r5, r4");
0x00097236 mov.w r4, 0 | r4 = 0;
0x0009723a it lt |
| if (r6 >= r3) {
0x0009723c movlt r3, r6 | r3 = r6;
| }
0x0009723e lsls r1, r0, 0x1e | r1 = r0 << 0x1e;
0x00097240 asr.w r7, sb, 0x1f | r7 = sb >> 0x1f;
0x00097244 ite pl |
| if (r1 < r0) {
0x00097246 addpl r1, sb, 1 | r1 = sb + 1;
| }
| if (r1 < r0) {
0x0009724a movs r1, 0 | r1 = 0;
| }
0x0009724c adds.w r5, sb, 1 | r5 = sb + 1;
0x00097250 str r1, [sp, 4] | var_4h = r1;
0x00097252 adc r7, r7, 0 | __asm ("adc r7, r7, 0");
0x00097256 b 0x97276 |
| while (r2 >= r3) {
0x00097258 ldr r1, [sp, 4] | r1 = var_4h;
0x0009725a cmp r3, r6 |
0x0009725c ldr r2, [r0] | r2 = *(r0);
0x0009725e it ge |
| if (r3 < r6) {
0x00097260 movge r3, r6 | r3 = r6;
| }
0x00097262 cmp sb, r1 |
0x00097264 itt eq |
| if (sb != r1) {
0x00097266 moveq r4, 0 | r4 = 0;
| }
| if (sb != r1) {
0x00097268 streq r0, [r8, 0x10] | *((r8 + 0x10)) = r0;
| }
0x0009726c adds r5, 1 | r5++;
0x0009726e add.w r2, r2, 4 | r2 += 4;
0x00097272 adc r7, r7, 0 | __asm ("adc r7, r7, 0");
0x00097276 ldr r1, [sp] | r1 = *(sp);
0x00097278 mov r0, fp | r0 = fp;
0x0009727a subs r6, r6, r3 | r6 -= r3;
0x0009727c add.w sb, sb, 1 | sb++;
0x00097280 blx sl | sl (r0, r1, r2, r3);
0x00097282 mov r0, r4 | r0 = r4;
0x00097284 blx 0x8404 | fcn_00008404 ();
0x00097288 cmp r6, 0 |
0x0009728a mov r0, fp | r0 = fp;
| if (r6 <= 0) {
0x0009728c ble 0x972d2 | goto label_0;
| }
0x0009728e ldr.w r3, [r8] | r3 = *(r8);
| if (r3 == 0) {
0x00097292 cbz r3, 0x972ca | goto label_1;
| }
0x00097294 ldr r3, [r3] | r3 = *(r3);
0x00097296 movs r2, 0 | r2 = 0;
0x00097298 adds r2, r2, r5 | r2 += r5;
0x0009729a add.w r3, r7, r3, lsl 5 | r3 = r7 + (r3 << 5);
0x0009729e bl 0x94d50 | r0 = fcn_00094d50 (r0, r1, r2);
0x000972a2 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000972a4 cbz r0, 0x972d2 | goto label_0;
| }
0x000972a6 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000972a8 cmp r2, 3 |
| if (r2 <= 3) {
0x000972aa ble 0x972b6 | goto label_2;
| }
0x000972ac ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000972ae cmp r2, r3 |
0x000972b0 sub.w r3, r3, 4 | r3 -= 4;
0x000972b4 bge 0x97258 |
| }
| label_2:
0x000972b6 movw r3, 0x10b | r3 = 0x10b;
0x000972ba mov r0, r4 | r0 = r4;
0x000972bc str.w r3, [fp, 0x24] | __asm ("str.w r3, [arg_24h]");
0x000972c0 add sp, 0xc |
0x000972c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000972c6 b.w 0x8400 | void (*0x8400)() ();
| label_1:
0x000972ca movw r3, 0x10b | r3 = 0x10b;
0x000972ce str.w r3, [fp, 0x24] | __asm ("str.w r3, [arg_24h]");
| label_0:
0x000972d2 add sp, 0xc |
0x000972d4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x972d8 */
| #include <stdint.h>
|
; (fcn) fcn.000972d8 () | void fcn_000972d8 (int16_t arg_384h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int32_t var_ch_2;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000972d8 push.w {r4, r5, r6, r7, r8, lr} |
0x000972dc mov r8, r1 | r8 = r1;
0x000972de ldr r4, [pc, 0x104] |
0x000972e0 sub sp, 0x18 |
0x000972e2 mov r6, r3 | r6 = r3;
0x000972e4 mov r5, r2 | r5 = r2;
0x000972e6 ldr r1, [pc, 0x100] | r1 = *(0x973ea);
0x000972e8 mov r7, r0 | r7 = r0;
0x000972ea add r4, pc | r4 = 0x12e6d4;
0x000972ec ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000972ee ldr r0, [r6] | r0 = *(r6);
0x000972f0 ldr r1, [r4, r1] |
0x000972f2 ldr r4, [r6, 8] | r4 = *((r6 + 8));
0x000972f4 ldr r1, [r1] | r1 = imp.sinh;
0x000972f6 str r1, [sp, 0x14] | var_14h = r1;
0x000972f8 mov.w r1, 0 | r1 = 0;
0x000972fc ldr.w r1, [r8, 0x58] | r1 = *((r8 + 0x58));
0x00097300 add.w r2, r1, 8 | r2 = r1 + 8;
0x00097304 add r2, r3 | r2 += r3;
0x00097306 cmp r2, r4 |
| if (r2 < r4) {
0x00097308 bls 0x9733e | goto label_0;
| }
0x0009730a cmp r4, r2 |
| if (r4 >= r2) {
0x0009730c bhs 0x9733e | goto label_0;
| }
0x0009730e cmp r4, 0 |
0x00097310 it eq |
| if (r4 != 0) {
0x00097312 moveq r4, 0x40 | r4 = 0x40;
| }
0x00097314 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x00097316 cmp r4, r2 |
0x00097318 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r4 >= r2) {
0x0009731c bhs 0x9732a | goto label_1;
| }
| do {
0x0009731e adds r4, r4, r4 | r4 += r4;
0x00097320 adcs r3, r3 | __asm ("adcs r3, r3");
0x00097322 cmp r4, r2 |
0x00097324 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x00097328 blo 0x9731e |
| } while (r4 <= r2);
| label_1:
0x0009732a mov r2, r4 | r2 = r4;
0x0009732c blx 0x8500 | r0 = fcn_00008500 ();
0x00097330 cmp r0, 0 |
| if (r0 == 0) {
0x00097332 beq 0x973d8 | goto label_2;
| }
0x00097334 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00097336 ldr.w r1, [r8, 0x58] | r1 = *((r8 + 0x58));
0x0009733a str r4, [r6, 8] | *((r6 + 8)) = r4;
0x0009733c str r0, [r6] | *(r6) = r0;
| label_0:
0x0009733e add r3, r1 | r3 += r1;
0x00097340 movs r2, 0 | r2 = 0;
0x00097342 str r2, [r0, r3] | *((r0 + r3)) = r2;
0x00097344 add r0, r3 | r0 += r3;
0x00097346 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x00097348 cmp r5, 0 |
| if (r5 == 0) {
0x0009734a beq 0x973b2 | goto label_3;
| }
0x0009734c ldr r3, [r7] | r3 = *(r7);
0x0009734e ldr r4, [r3, 0x30] | r4 = *((r3 + 0x30));
0x00097350 str r6, [sp, 4] | var_4h = r6;
| if (r4 != 0) {
0x00097352 cbnz r4, 0x97384 | goto label_4;
| }
0x00097354 ldr r0, [r5] | r0 = *(r5);
0x00097356 str r5, [sp, 8] | var_8h = r5;
0x00097358 cmp r0, 0 |
| if (r0 <= 0) {
0x0009735a ble 0x97372 | goto label_5;
| }
0x0009735c mov r2, r5 | r2 = r5;
0x0009735e mov r3, r4 | r3 = r4;
0x00097360 b 0x97368 |
| while (r1 != 0) {
0x00097362 adds r3, 1 | r3++;
0x00097364 cmp r3, r0 |
| if (r3 == r0) {
0x00097366 beq 0x97372 | goto label_5;
| }
0x00097368 ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x0009736c cmp r1, 0 |
0x0009736e bne 0x97362 |
| }
0x00097370 movs r4, 1 | r4 = 1;
| label_5:
0x00097372 ldr r3, [pc, 0x78] |
0x00097374 add r2, sp, 4 | r2 += var_4h;
0x00097376 mov r1, r8 | r1 = r8;
0x00097378 mov r0, r7 | r0 = r7;
0x0009737a str r4, [sp, 0xc] | var_ch = r4;
0x0009737c add r3, pc | r3 = 0x12e76e;
0x0009737e bl 0x97204 | fcn_00097204 (r0, r1, r2, r3, r4);
0x00097382 b 0x97398 | goto label_6;
| label_4:
0x00097384 ldr r3, [pc, 0x68] |
0x00097386 mov r1, r8 | r1 = r8;
0x00097388 strd r2, r2, [sp, 0xc] | __asm ("strd r2, r2, [var_ch]");
0x0009738c mov r0, r7 | r0 = r7;
0x0009738e add r2, sp, 4 | r2 += var_4h;
0x00097390 str r5, [sp, 8] | var_8h = r5;
0x00097392 add r3, pc | r3 = 0x12e786;
0x00097394 bl 0x97204 | fcn_00097204 (r0, r1, r2, r3, r4);
| do {
| label_6:
0x00097398 ldr r2, [pc, 0x58] |
0x0009739a ldr r3, [pc, 0x4c] | r3 = *(0x973ea);
0x0009739c add r2, pc | r2 = 0x12e794;
0x0009739e ldr r3, [r2, r3] | r3 = imp.sinh;
0x000973a0 ldr r2, [r3] | r2 = imp.sinh;
0x000973a2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000973a4 eors r2, r3 | r2 ^= r3;
0x000973a6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000973aa bne 0x973de | goto label_7;
| }
0x000973ac add sp, 0x18 |
0x000973ae pop.w {r4, r5, r6, r7, r8, pc} |
| label_3:
0x000973b2 ldr r2, [pc, 0x44] |
0x000973b4 ldr r3, [pc, 0x30] | r3 = *(0x973e8);
0x000973b6 add r2, pc | r2 = 0x12e7b4;
0x000973b8 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000973ba ldr r2, [r3] | r2 = imp.sinh;
0x000973bc ldr r3, [sp, 0x14] | r3 = var_14h;
0x000973be eors r2, r3 | r2 ^= r3;
0x000973c0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000973c4 bne 0x973de | goto label_7;
| }
0x000973c6 ldr r3, [pc, 0x34] |
0x000973c8 mov r2, r6 | r2 = r6;
0x000973ca mov r1, r8 | r1 = r8;
0x000973cc mov r0, r7 | r0 = r7;
0x000973ce add r3, pc | r3 = 0x12e7d0;
0x000973d0 add sp, 0x18 |
0x000973d2 pop.w {r4, r5, r6, r7, r8, lr} |
0x000973d6 b 0x97204 | void (*0x97204)() ();
| label_2:
0x000973d8 movs r3, 7 | r3 = 7;
0x000973da str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x000973dc b 0x97398 |
| } while (1);
| label_7:
0x000973de blx 0x883c | fcn_0000883c ();
0x000973e2 nop |
0x000973e4 adds r6, r5, r6 | r6 = r5 + r6;
0x000973e6 movs r3, r0 | r3 = r0;
0x000973e8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000973ea movs r0, r0 |
0x000973ec str r5, [sp, 0x384] | *(arg_384h) = r5;
0x000973ee vtbx.8 d16, {d23, d24, d25}, d27 | __asm ("vtbx.8 d16, {d23, d24, d25}, d27");
0x000973f2 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x98110 */
| #include <stdint.h>
|
; (fcn) fcn.00098110 () | void fcn_00098110 (arithmetic x, int16_t arg_1ch, int16_t arg_30h, int16_t arg_48h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_8h;
| int32_t var_8h_2;
| int16_t var_10h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_7ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_99h;
| int16_t var_9ch;
| int16_t var_b8h;
| int16_t var_c0h;
| int16_t var_c4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00098110 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00098114 mov r8, r1 | r8 = r1;
0x00098116 ldr.w sl, [r1] | sl = *(r1);
0x0009811a mov r6, r2 | r6 = r2;
0x0009811c lsl.w fp, r6, 1 |
0x00098120 sub sp, 0xcc |
0x00098122 ldr.w r1, [pc, 0x6c8] |
0x00098126 mov r4, r0 | r4 = r0;
0x00098128 ldr.w r2, [pc, 0x6c4] | r2 = *(0x987f0);
0x0009812c add.w sb, fp, r6 | sb = fp + r6;
0x00098130 lsl.w sb, sb, 2 | sb <<= 2;
0x00098134 add r1, pc | r1 = 0x130926;
0x00098136 ldr r2, [r1, r2] |
0x00098138 add.w r5, sb, 0x18 | r5 = sb + 0x18;
0x0009813c ldr r2, [r2] | r2 = imp.sinh;
0x0009813e str r2, [sp, 0xc4] | var_c4h = r2;
0x00098140 mov.w r2, 0 | r2 = 0;
0x00098144 movs r2, 0 | r2 = 0;
0x00098146 str r2, [sp, 0x44] | var_44h = r2;
0x00098148 str r3, [sp, 0x20] | var_20h = r3;
0x0009814a cmp r3, 0 |
| if (r3 == 0) {
0x0009814c beq.w 0x98656 | goto label_22;
| }
0x00098150 ldr r3, [r3] | r3 = *(r3);
0x00098152 str r3, [sp, 0x30] | var_30h = r3;
| label_8:
0x00098154 ldr r3, [r4] | r3 = *(r4);
0x00098156 movs r2, 0x60 | r2 = 0x60;
0x00098158 movs r1, 0 | r1 = 0;
0x0009815a ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x0009815c str r3, [sp, 0x2c] | var_2ch = r3;
0x0009815e add r3, sp, 0x60 | r3 += var_60h;
0x00098160 mov r0, r3 | r0 = r3;
0x00098162 str r3, [sp, 0x1c] | var_1ch = r3;
0x00098164 blx 0x839c | fcn_0000839c ();
0x00098168 add.w r3, fp, r6 | r3 = fp + r6;
0x0009816c add r2, sp, 0x48 | r2 += var_48h;
0x0009816e add.w r3, sl, r3, lsl 2 | r3 = sl + (r3 << 2);
0x00098172 str r2, [sp, 0x28] | var_28h = r2;
0x00098174 adds r2, r6, 1 | r2 = r6 + 1;
0x00098176 ldr r7, [r3, 0x18] | r7 = *((r3 + 0x18));
0x00098178 movs r3, 0 | r3 = 0;
0x0009817a strd r3, r3, [sp, 0x48] | __asm ("strd r3, r3, [var_48h]");
0x0009817e str r3, [sp, 0x50] | var_50h = r3;
0x00098180 cmp r7, 0 |
| if (r7 == 0) {
0x00098182 beq.w 0x98444 | goto label_23;
| }
0x00098186 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0009818a add.w r1, sl, r5 | r1 = sl + r5;
0x0009818e str r1, [sp, 0x18] | var_18h = r1;
0x00098190 mov r0, r4 | r0 = r4;
0x00098192 add.w r8, sl, r2, lsl 2 | r8 = sl + (r2 << 2);
0x00098196 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00098198 add.w sb, sb, 0x24 | sb += 0x24;
0x0009819c ldrd r2, ip, [r8, 0x1c] | __asm ("ldrd r2, ip, [r8, 0x1c]");
0x000981a0 add sb, sl | sb += sl;
0x000981a2 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000981a6 lsls r2, r2, 2 | r2 <<= 2;
0x000981a8 subs r2, 0xc | r2 -= 0xc;
0x000981aa add.w r3, ip, r2 | r3 = ip + r2;
0x000981ae ldr.w r2, [ip, r2] | r2 = *((ip + r2));
0x000981b2 mov r5, r3 | r5 = r3;
0x000981b4 str r3, [sp, 0x24] | var_24h = r3;
0x000981b6 bl 0x7c420 | fcn_0007c420 (r0, r1, r2);
0x000981ba ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x000981bc movs r3, 0 | r3 = 0;
0x000981be str r3, [sp, 0xb8] | var_b8h = r3;
0x000981c0 adds r2, 1 | r2++;
0x000981c2 str r2, [sp, 0x64] | var_64h = r2;
| label_3:
0x000981c4 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x000981c8 mov r1, sl | r1 = sl;
0x000981ca mov r0, r4 | r0 = r4;
0x000981cc cmp r3, 1 |
0x000981ce itte eq |
| if (r3 != 1) {
0x000981d0 ldreq r2, [sl, 0x14] | r2 = *((sl + 0x14));
| }
| if (r3 == 1) {
0x000981d4 addne r3, r6, 2 | r3 = r6 + 2;
| }
| if (r3 != 1) {
0x000981d6 movs r3, 0 | r3 = 0;
| }
0x000981d8 strd r6, r7, [sp, 8] | __asm ("strd r6, r7, [var_8h]");
0x000981dc mov.w r6, 0 | r6 = 0;
0x000981e0 it eq |
| if (r3 != 0) {
0x000981e2 subeq r3, r2, r3 | r3 = r2 - r3;
| }
0x000981e4 strd r6, r6, [sp] | __asm ("strd r6, r6, [sp]");
0x000981e8 it eq |
| if (r3 == 0) {
0x000981ea clzeq r3, r3 | __asm ("clzeq r3, r3");
| }
0x000981ee mov.w r2, 0x20 | r2 = 0x20;
0x000981f2 it eq |
| if (r3 != 0) {
0x000981f4 lsreq r3, r3, 5 | r3 >>= 5;
| }
0x000981f6 mov r5, r6 | r5 = r6;
0x000981f8 str r3, [sp, 0x34] | var_34h = r3;
0x000981fa add r3, sp, 0x44 | r3 += var_44h;
0x000981fc str r3, [sp, 0x10] | var_10h = r3;
0x000981fe mov r3, r6 | r3 = r6;
0x00098200 bl 0x976a0 | fcn_000976a0 (r0, r1, r2, r3, r4, r5, r6);
0x00098204 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00098206 ldr.w fp, [sp, 0x44] | fp = var_44h;
0x0009820a cmp r3, 0 |
| if (r3 != 0) {
0x0009820c bne 0x9830c | goto label_24;
| }
0x0009820e str r3, [sp, 0x38] | var_38h = r3;
| do {
0x00098210 ldrb.w r3, [fp, 0x10] | r3 = *(x);
0x00098214 cmp r3, 0 |
| if (r3 != 0) {
0x00098216 bne 0x9830a | goto label_25;
| }
0x00098218 ldr.w r3, [fp, 0x48] | r3 = *(arg_48h);
0x0009821c ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009821e ldrh r5, [r3, 4] | r5 = *((r3 + 4));
0x00098220 lsls r6, r5, 1 | r6 = r5 << 1;
0x00098222 adds r3, r6, r5 | r3 = r6 + r5;
0x00098224 add.w r3, fp, r3, lsl 5 | r3 = fp + (r3 << 5);
0x00098228 ldrd r3, r8, [r3, 0x94] | __asm ("ldrd r3, r8, [r3, 0x94]");
0x0009822c cmp r2, r8 |
| if (r2 == r8) {
0x0009822e beq.w 0x98678 | goto label_26;
| }
| label_11:
0x00098232 ldr r2, [sp, 0x20] | r2 = var_20h;
| if (r2 != 0) {
0x00098234 cbz r2, 0x9823e |
0x00098236 ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x00098238 ldr r1, [sp, 0x30] | r1 = var_30h;
0x0009823a cmp r2, r1 |
| if (r2 > r1) {
0x0009823c bgt 0x9830a | goto label_25;
| }
| }
0x0009823e movs r2, 0 | r2 = 0;
0x00098240 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00098242 strd r2, r3, [sp, 0x38] | __asm ("strd r2, r3, [var_38h]");
0x00098246 add.w r0, r4, 0x24 | r0 = r4 + 0x24;
0x0009824a str r2, [sp, 0x4c] | var_4ch = r2;
0x0009824c mov r2, r8 | r2 = r8;
0x0009824e bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x00098252 ldr r3, [sp, 0x3c] | r3 = var_3ch;
| label_10:
0x00098254 adds r2, r6, r5 | r2 = r6 + r5;
0x00098256 add.w r2, fp, r2, lsl 5 | r2 = fp + (r2 << 5);
0x0009825a ldr.w r1, [r2, 0xa8] | r1 = *((r2 + 0xa8));
| if (r1 == 0) {
0x0009825e cbnz r1, 0x9826e |
0x00098260 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00098262 cmp r1, 0 |
| if (r1 != 0) {
0x00098264 bne 0x982f2 | goto label_16;
| }
0x00098266 ldrb.w r2, [r2, 0xac] | r2 = *((r2 + 0xac));
0x0009826a cmp r2, 0 |
| if (r2 == 0) {
0x0009826c beq 0x982f2 | goto label_16;
| }
| }
0x0009826e ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x00098270 ldr r1, [sp, 0x38] | r1 = var_38h;
0x00098272 orrs r1, r2 | r1 |= r2;
| if (r1 == r2) {
0x00098274 beq.w 0x986a4 | goto label_27;
| }
| if (r2 == 0) {
| label_13:
0x00098278 cbnz r2, 0x982d8 |
0x0009827a ldr.w r3, [fp, 0x48] | r3 = *(arg_48h);
0x0009827e ldr r2, [r4] | r2 = *(r4);
0x00098280 ldr r0, [sp, 0x7c] | r0 = var_7ch;
0x00098282 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x00098284 ldr r1, [r2, 0x4c] | r1 = *((r2 + 0x4c));
0x00098286 ldr r2, [sp, 0x70] | r2 = var_70h;
0x00098288 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009828c add r2, r0 | r2 += r0;
0x0009828e add.w r3, fp, r3, lsl 5 | r3 = fp + (r3 << 5);
0x00098292 cmp r2, r1 |
0x00098294 ldrd r8, r3, [r3, 0xa0] | __asm ("ldrd r8, r3, [r3, 0xa0]");
0x00098298 str r3, [sp, 0x3c] | var_3ch = r3;
| if (r2 >= r1) {
0x0009829a bge.w 0x987d6 | goto label_28;
| }
| label_21:
0x0009829e ldrb.w r3, [sp, 0x99] | r3 = var_99h;
0x000982a2 cmp r3, 0 |
| if (r3 != 0) {
0x000982a4 bne.w 0x987bc | goto label_29;
| }
| label_20:
0x000982a8 ldrh.w r3, [sp, 0x98] | r3 = var_98h;
0x000982ac add.w r0, r4, 0x24 | r0 = r4 + 0x24;
0x000982b0 cmp r3, 0 |
| if (r3 != 0) {
0x000982b2 bne.w 0x9874c | goto label_30;
| }
0x000982b6 ldr r3, [sp, 0x90] | r3 = var_90h;
0x000982b8 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000982ba subs.w r2, r8, r3 | r2 = r8 - r3;
0x000982be ldr r3, [sp, 0x94] | r3 = var_94h;
0x000982c0 sbc.w r3, r1, r3 | __asm ("sbc.w r3, r1, r3");
0x000982c4 add r1, sp, 0x6c | r1 += var_6ch;
0x000982c6 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
| label_18:
0x000982ca ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000982cc str.w r8, [sp, 0x90] | __asm ("str.w r8, [var_90h]");
0x000982d0 str r3, [sp, 0x94] | var_94h = r3;
0x000982d2 movs r3, 0 | r3 = 0;
0x000982d4 strh.w r3, [sp, 0x98] | var_98h = r3;
| }
0x000982d8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000982da add r5, r6 | r5 += r6;
0x000982dc lsls r5, r5, 5 | r5 <<= 5;
0x000982de cmp r3, 1 |
0x000982e0 add.w r6, fp, r5 | r6 = fp + r5;
0x000982e4 ldrb.w r2, [r6, 0xac] | r2 = *((r6 + 0xac));
| if (r3 != 1) {
0x000982e8 bne.w 0x986de | goto label_31;
| }
0x000982ec cmp r2, 0 |
| if (r2 != 0) {
0x000982ee bne.w 0x98758 | goto label_32;
| }
| label_16:
0x000982f2 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000982f6 movs r2, 0 | r2 = 0;
0x000982f8 mov r1, fp | r1 = fp;
0x000982fa mov r0, r4 | r0 = r4;
0x000982fc vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00098300 bl 0x95fc0 | fcn_00095fc0 (r0, r1, r2, r3);
0x00098304 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00098306 cmp r3, 0 |
0x00098308 beq 0x98210 |
| } while (r3 == 0);
| label_25:
0x0009830a ldr r5, [sp, 0x48] | r5 = var_48h;
| label_24:
0x0009830c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009830e mov r0, r4 | r0 = r4;
0x00098310 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00098312 add.w r2, r3, 8 | r2 = r3 + 8;
0x00098316 bl 0x875d8 | fcn_000875d8 (r0, r1, r2);
0x0009831a ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x0009831c cmp r2, 0 |
| if (r2 == 0) {
0x0009831e beq.w 0x984f2 | goto label_33;
| }
| label_4:
0x00098322 cmp r7, 0 |
| if (r7 <= 0) {
0x00098324 ble 0x983d2 | goto label_34;
| }
0x00098326 ldr.w r3, [pc, 0x4cc] |
0x0009832a movs r6, 0 | r6 = 0;
0x0009832c strd sl, sb, [sp, 0x28] | __asm ("strd sl, sb, [var_2ch]");
0x00098330 mov r8, r6 | r8 = r6;
0x00098332 ldr.w sb, [sp, 0x18] | sb = var_18h;
0x00098336 mov sl, r5 | sl = r5;
0x00098338 add r3, pc | r3 = 0x130b32;
0x0009833a str r3, [sp, 0x1c] | var_1ch = r3;
0x0009833c b 0x9837c |
| while (r2 == 0) {
0x0009833e lsls r3, r5, 5 | r3 = r5 << 5;
0x00098340 mov r0, r4 | r0 = r4;
0x00098342 adds r3, 0x1f | r3 += 0x1f;
0x00098344 str r3, [sp, 4] | var_4h = r3;
0x00098346 subs r3, r2, 1 | r3 = r2 - 1;
0x00098348 str r3, [sp] | *(sp) = r3;
0x0009834a lsls r3, r5, 5 | r3 = r5 << 5;
0x0009834c bl 0x87688 | fcn_00087688 (r0, r1, r2, r3);
0x00098350 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
| if (r3 == 0) {
0x00098352 cbz r3, 0x9838c | goto label_35;
| }
| label_1:
0x00098354 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 == 0) {
0x00098356 cbnz r3, 0x98370 |
0x00098358 mov r2, r5 | r2 = r5;
0x0009835a movs r1, 1 | r1 = 1;
0x0009835c ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x0009835e blx 0x8250 | fcn_00008250 ();
0x00098362 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x00098364 blx 0x8728 | fcn_00008728 ();
0x00098368 ldr r0, [r4, 0x38] | r0 = *((r4 + 0x38));
0x0009836a blx 0x81f8 | fcn_000081f8 ();
0x0009836e str r0, [r4, 0x24] | *((r4 + 0x24)) = r0;
| }
| label_0:
0x00098370 add.w r8, r8, 1 | r8++;
0x00098374 adds r6, 0xc | r6 += 0xc;
0x00098376 cmp r7, r8 |
| if (r7 == r8) {
0x00098378 beq 0x983c8 | goto label_36;
| }
0x0009837a ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x0009837c ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x00098380 ldr r5, [r3, r6] | r5 = *((r3 + r6));
0x00098382 cmp r2, 0 |
0x00098384 beq 0x9833e |
| }
0x00098386 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x00098388 cmp r3, 0 |
| if (r3 != 0) {
0x0009838a bne 0x98370 | goto label_0;
| }
| label_35:
0x0009838c ldr r3, [r4] | r3 = *(r4);
0x0009838e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00098390 ldrd r1, r2, [r3, 4] | __asm ("ldrd r1, r2, [r3, 4]");
0x00098394 blx 0x8644 | fcn_00008644 ();
0x00098398 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x0009839a mov r1, r0 | r1 = r0;
| if (r2 == 0) {
0x0009839c cbnz r2, 0x983c0 |
0x0009839e cmp r0, 0 |
| if (r0 == 0) {
0x000983a0 beq.w 0x986d8 | goto label_37;
| }
0x000983a4 mov ip, r4 |
0x000983a6 movs r3, 5 | r3 = 5;
0x000983a8 ldr r0, [ip], 0x38 | r0 = *(ip);
| ip += 0x38;
0x000983ac str r1, [sp, 0x30] | var_30h = r1;
0x000983ae ldr r0, [r0] | r0 = *(r0);
0x000983b0 strd ip, r2, [sp] | __asm ("strd ip, r2, [sp]");
0x000983b4 mov.w r2, -1 | r2 = -1;
0x000983b8 blx 0x8280 | fcn_00008280 ();
0x000983bc ldr r1, [sp, 0x30] | r1 = var_30h;
0x000983be str r0, [r4, 0x24] | *((r4 + 0x24)) = r0;
| }
| label_15:
0x000983c0 mov r0, r1 | r0 = r1;
0x000983c2 blx 0x8404 | fcn_00008404 ();
0x000983c6 b 0x98354 | goto label_1;
| label_36:
0x000983c8 mov r5, sl | r5 = sl;
0x000983ca ldr.w sb, [sp, 0x2c] | sb = var_2ch;
0x000983ce ldr.w sl, [sp, 0x28] | sl = var_28h;
| label_34:
0x000983d2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000983d4 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000983d6 cmp r3, r7 |
0x000983d8 it eq |
| if (r3 != r7) {
0x000983da moveq r2, r7 | r2 = r7;
| }
| if (r3 != r7) {
0x000983dc bne.w 0x9863a | goto label_38;
| }
| label_7:
0x000983e0 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000983e2 subs r2, r2, r7 | r2 -= r7;
0x000983e4 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000983e6 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x000983e8 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000983ec subs r3, r3, r7 | r3 -= r7;
0x000983ee str.w r3, [sl, 0x10] | __asm ("str.w r3, [sl, 0x10]");
0x000983f2 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x000983f4 movs r2, 0 | r2 = 0;
0x000983f6 str r2, [r0] | *(r0) = r2;
| if (r1 == 0) {
0x000983f8 cbnz r1, 0x9840a |
0x000983fa ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x000983fe subs r3, 1 | r3--;
0x00098400 subs r2, 1 | r2--;
0x00098402 str.w r2, [sb, 4] | __asm ("str.w r2, [sb, 4]");
0x00098406 str.w r3, [sl, 0x10] | __asm ("str.w r3, [sl, 0x10]");
| }
0x0009840a cmp.w fp, 0 |
| if (fp != 0) {
0x0009840e beq 0x98416 |
| label_14:
0x00098410 mov r0, fp | r0 = fp;
0x00098412 bl 0x17d50 | fcn_00017d50 (r0);
| }
0x00098416 mov r0, r5 | r0 = r5;
0x00098418 blx 0x8404 | fcn_00008404 ();
0x0009841c ldr r1, [sp, 0x20] | r1 = var_20h;
| if (r1 == 0) {
0x0009841e cbz r1, 0x98428 | goto label_2;
| }
0x00098420 ldr r3, [r1] | r3 = *(r1);
0x00098422 ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x00098424 subs r3, r3, r2 | r3 -= r2;
0x00098426 str r3, [r1] | *(r1) = r3;
| do {
| label_2:
0x00098428 ldr r2, [pc, 0x3cc] |
0x0009842a ldr r3, [pc, 0x3c4] | r3 = *(0x987f2);
0x0009842c add r2, pc | r2 = 0x130c28;
0x0009842e ldr r3, [r2, r3] | r3 = imp.sinh;
0x00098430 ldr r2, [r3] | r2 = imp.sinh;
0x00098432 ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x00098434 eors r2, r3 | r2 ^= r3;
0x00098436 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009843a bne.w 0x987e6 | goto label_39;
| }
0x0009843e add sp, 0xcc |
0x00098440 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_23:
0x00098444 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 == 0) {
0x00098446 cbnz r3, 0x98458 |
0x00098448 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x0009844c cmp.w r3, 0x7d0 |
| if (r3 < 0x7d0) {
0x00098450 blt.w 0x98696 | goto label_40;
| }
0x00098454 movs r3, 0xd | r3 = 0xd;
0x00098456 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
| }
| label_12:
0x00098458 ldr.w r3, [sl, 0x14] | r3 = *((sl + 0x14));
0x0009845c subs r3, 1 | r3--;
0x0009845e cmp r3, r6 |
| if (r3 == r6) {
0x00098460 beq.w 0x9865c | goto label_41;
| }
0x00098464 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00098466 cmp r3, 0 |
0x00098468 bne 0x98428 |
| } while (r3 != 0);
| label_9:
0x0009846a add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0009846e str r3, [sp, 0x18] | var_18h = r3;
0x00098470 add.w r8, sl, r2, lsl 2 | r8 = sl + (r2 << 2);
0x00098474 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00098478 ldr.w r0, [r8, 0x20] | r0 = *((r8 + 0x20));
0x0009847c adds r2, 1 | r2++;
0x0009847e add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00098482 lsls r2, r2, 2 | r2 <<= 2;
0x00098484 blx 0x8500 | r0 = fcn_00008500 ();
0x00098488 cmp r0, 0 |
| if (r0 == 0) {
0x0009848a beq.w 0x98784 | goto label_42;
| }
0x0009848e ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x00098492 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00098494 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x00098498 lsls r2, r2, 2 | r2 <<= 2;
0x0009849a str r3, [r0, r2] | *((r0 + r2)) = r3;
0x0009849c add r2, r0 | r2 += r0;
0x0009849e str r3, [r2, 4] | *((r2 + 4)) = r3;
0x000984a0 str r3, [r2, 8] | *((r2 + 8)) = r3;
0x000984a2 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000984a4 str.w r0, [r8, 0x20] | __asm ("str.w r0, [r8, 0x20]");
0x000984a8 cmp r3, 0 |
| if (r3 != 0) {
0x000984aa bne 0x98428 | goto label_2;
| }
0x000984ac add.w r3, sl, r5 | r3 = sl + r5;
0x000984b0 mov r2, r7 | r2 = r7;
0x000984b2 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000984b4 mov r0, r4 | r0 = r4;
0x000984b6 str r3, [sp, 0x18] | var_18h = r3;
0x000984b8 add fp, r6 |
0x000984ba bl 0x7c420 | fcn_0007c420 (r0, r1, r2);
0x000984be ldrd r3, r1, [r8, 0x1c] | __asm ("ldrd r3, r1, [r8, 0x1c]");
0x000984c2 movs r0, 1 | r0 = 1;
0x000984c4 add.w fp, sl, fp, lsl 2 |
0x000984c8 add.w sb, sb, 0x24 | sb += 0x24;
0x000984cc add sb, sl | sb += sl;
0x000984ce adds r2, r3, r0 | r2 = r3 + r0;
0x000984d0 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000984d4 str.w r2, [r8, 0x1c] | __asm ("str.w r2, [r8, 0x1c]");
0x000984d8 ldr.w r2, [sl, 0x10] | r2 = *((sl + 0x10));
0x000984dc lsls r3, r3, 2 | r3 <<= 2;
0x000984de add r2, r0 | r2 += r0;
0x000984e0 adds r5, r1, r3 | r5 = r1 + r3;
0x000984e2 str r0, [r5, 4] | *((r5 + 4)) = r0;
0x000984e4 str r5, [sp, 0x24] | var_24h = r5;
0x000984e6 str r7, [r1, r3] | *((r1 + r3)) = r7;
0x000984e8 str.w r2, [sl, 0x10] | __asm ("str.w r2, [sl, 0x10]");
0x000984ec ldr.w r7, [fp, 0x1c] | r7 = *(arg_1ch);
0x000984f0 b 0x981c4 | goto label_3;
| label_33:
0x000984f2 ldrb.w r0, [fp, 0x10] | r0 = *(x);
0x000984f6 cmp r0, 0 |
| if (r0 != 0) {
0x000984f8 bne.w 0x98322 | goto label_4;
| }
0x000984fc ldr.w r1, [fp, 0x30] | r1 = *(arg_30h);
0x00098500 add r3, sp, 0x54 | r3 += var_54h;
0x00098502 strd r2, r2, [sp, 0x54] | __asm ("strd r2, r2, [var_54h]");
0x00098506 str r2, [sp, 0x5c] | var_5ch = r2;
0x00098508 cmp r1, 0 |
0x0009850a str r3, [sp, 0x1c] | var_1ch = r3;
| if (r1 <= 0) {
0x0009850c ble.w 0x986ce | goto label_43;
| }
0x00098510 add.w r3, r4, 0x24 | r3 = r4 + 0x24;
0x00098514 strd r7, r5, [sp, 0x30] | __asm ("strd r7, r5, [var_30h]");
0x00098518 mov r6, fp | r6 = fp;
0x0009851a mov r8, r2 | r8 = r2;
0x0009851c mov r5, r2 | r5 = r2;
0x0009851e str r3, [sp, 0x24] | var_24h = r3;
0x00098520 b 0x9861c | goto label_44;
| label_5:
0x00098522 ldr r3, [r3] | r3 = *(r3);
0x00098524 mov r0, r4 | r0 = r4;
0x00098526 ldr.w sl, [r6, 0x78] | sl = *((r6 + 0x78));
0x0009852a str.w r8, [sp, 0xc0] | __asm ("str.w r8, [var_c0h]");
0x0009852e lsl.w sb, r3, 5 | sb = r3 << 5;
0x00098532 ldr r3, [r6, 0x74] | r3 = *((r6 + 0x74));
0x00098534 adds.w r2, r3, r8 | r2 = r3 + r8;
0x00098538 add.w r3, sb, r3, asr 31 | r3 = sb + (r3 >> 31);
0x0009853c str r2, [sp, 0x28] | var_28h = r2;
0x0009853e str r3, [sp, 0x2c] | var_2ch = r3;
0x00098540 bl 0x94d50 | r0 = fcn_00094d50 (r0, r1, r2);
0x00098544 mov r7, r0 | r7 = r0;
0x00098546 cmp r0, 0 |
| if (r0 != 0) {
0x00098548 beq 0x9860a |
0x0009854a ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x0009854c cmp r1, 3 |
| if (r1 <= 3) {
0x0009854e ble.w 0x986b6 | goto label_45;
| }
0x00098552 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00098554 cmp r1, r3 |
| if (r1 < r3) {
0x00098556 blt.w 0x986b6 | goto label_45;
| }
0x0009855a cmp sl, r3 |
0x0009855c itt gt |
| if (sl > r3) {
0x0009855e movwgt r3, 0x10b | __asm ("movwgt r3, aav.0x000000ff");
| }
| if (sl > r3) {
0x00098562 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
| }
| if (sl <= r3) {
0x00098564 bgt 0x98604 |
0x00098566 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x00098568 str.w r8, [sp, 0x58] | __asm ("str.w r8, [var_58h]");
0x0009856c cmp r1, r2 |
| if (r1 > r2) {
0x0009856e bhi.w 0x9878a | goto label_46;
| }
| label_19:
0x00098572 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00098574 add r3, sp, 0xc0 | r3 += var_c0h;
0x00098576 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00098578 movs r2, 4 | r2 = 4;
0x0009857a bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x0009857e ldr.w r2, [r6, 0x98] | r2 = *((r6 + 0x98));
0x00098582 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00098584 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00098586 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00098588 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x0009858c ldrd r3, r2, [r6, 0x94] | __asm ("ldrd r3, r2, [r6, 0x94]");
0x00098590 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00098592 ldr r0, [sp, 0x24] | r0 = var_24h;
0x00098594 bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x00098598 ldr r3, [r7] | r3 = *(r7);
0x0009859a ldr r2, [r7, 8] | r2 = *((r7 + 8));
0x0009859c ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0009859e add r3, sl | r3 += sl;
0x000985a0 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000985a2 sub.w r2, r2, sl | r2 -= sl;
0x000985a6 bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x000985aa ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
| if (r3 == 0) {
0x000985ac cbnz r3, 0x985ba |
0x000985ae ldrd r2, r3, [sp, 0x54] | __asm ("ldrd r2, r3, [var_54h]");
0x000985b2 strb r3, [r2, 3] | *((r2 + 3)) = r3;
0x000985b4 ubfx r3, r3, 8, 8 | r3 = (r3 >> 8) & ((1 << 8) - 1);
0x000985b8 strb r3, [r2, 2] | *((r2 + 2)) = r3;
| }
0x000985ba movs r2, 4 | r2 = 4;
0x000985bc movs r3, 0 | r3 = 0;
0x000985be ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000985c0 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000985c2 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x000985c6 ldr r3, [r6, 0x74] | r3 = *((r6 + 0x74));
0x000985c8 ldr r2, [r6, 0x58] | r2 = *((r6 + 0x58));
0x000985ca cmp r2, r3 |
| if (r2 == r3) {
0x000985cc beq.w 0x98706 | goto label_47;
| }
| label_17:
0x000985d0 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x000985d2 ldr r1, [r6, 0x50] | r1 = *((r6 + 0x50));
0x000985d4 str r3, [r1, 4] | *((r1 + 4)) = r3;
| if (r2 != 0) {
0x000985d6 cbnz r2, 0x98604 | goto label_48;
| }
0x000985d8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000985da adds.w r2, r8, 1 | r2 = r8 + 1;
0x000985de ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000985e0 mov r0, r4 | r0 = r4;
0x000985e2 str r3, [sp] | *(sp) = r3;
0x000985e4 adc r3, sb, 0 | __asm ("adc r3, sb, 0");
0x000985e8 str r1, [sp, 4] | var_4h = r1;
0x000985ea bl 0x87688 | fcn_00087688 (r0, r1, r2, r3);
0x000985ee ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x000985f0 ldrd r3, r2, [sp, 0x54] | __asm ("ldrd r3, r2, [var_54h]");
| if (r1 != 0) {
0x000985f4 cbnz r1, 0x98604 | goto label_48;
| }
0x000985f6 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x000985fa mov r0, r4 | r0 = r4;
0x000985fc ldrd r2, r3, [sp, 0x28] | __asm ("ldrd r2, r3, [var_2ch]");
0x00098600 bl 0x86aa0 | fcn_00086aa0 (r0, r1, r2, r3);
| }
| label_48:
0x00098604 mov r0, r7 | r0 = r7;
0x00098606 blx 0x8404 | fcn_00008404 ();
| }
0x0009860a ldr.w r1, [fp, 0x30] | r1 = *(arg_30h);
| do {
| label_6:
0x0009860e adds r5, 1 | r5++;
0x00098610 adds r6, 0x60 | r6 += 0x60;
0x00098612 cmp r5, r1 |
| if (r5 >= r1) {
0x00098614 bge 0x986c8 | goto label_49;
| }
0x00098616 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x00098618 cmp r3, 0 |
| if (r3 != 0) {
0x0009861a bne 0x986c8 | goto label_49;
| }
| label_44:
0x0009861c ldr r3, [r6, 0x50] | r3 = *((r6 + 0x50));
0x0009861e cmp r3, 0 |
0x00098620 beq 0x9860e |
| } while (r3 == 0);
0x00098622 ldr r2, [r6, 0x5c] | r2 = *((r6 + 0x5c));
0x00098624 cmp r2, 0 |
| if (r2 != 0) {
0x00098626 bne.w 0x98522 | goto label_5;
| }
0x0009862a vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0009862e adds r3, 4 | r3 += 4;
0x00098630 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x00098634 ldr.w r1, [fp, 0x30] | r1 = *(arg_30h);
0x00098638 b 0x9860e | goto label_6;
| label_38:
0x0009863a ldr r4, [sp, 0x18] | r4 = var_18h;
0x0009863c subs r3, r3, r7 | r3 -= r7;
0x0009863e add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00098642 add.w r1, r7, r7, lsl 1 | r1 = r7 + (r7 << 1);
0x00098646 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00098648 lsls r2, r3, 2 | r2 = r3 << 2;
0x0009864a add.w r1, r0, r1, lsl 2 | r1 = r0 + (r1 << 2);
0x0009864e blx 0x88c4 | fcn_000088c4 ();
0x00098652 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00098654 b 0x983e0 | goto label_7;
| label_22:
0x00098656 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00098658 str r3, [sp, 0x30] | var_30h = r3;
0x0009865a b 0x98154 | goto label_8;
| label_41:
0x0009865c mov r1, r8 | r1 = r8;
0x0009865e add.w r0, r4, 0x24 | r0 = r4 + 0x24;
0x00098662 str r2, [sp, 0x18] | var_18h = r2;
0x00098664 bl 0x49d48 | fcn_00049d48 (r0, r1);
0x00098668 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0009866a ldr.w sl, [r8] | sl = *(r8);
0x0009866e ldr r2, [sp, 0x18] | r2 = var_18h;
0x00098670 cmp r3, 0 |
| if (r3 != 0) {
0x00098672 bne.w 0x98428 | goto label_2;
| }
0x00098676 b 0x9846a | goto label_9;
| label_26:
0x00098678 cmp.w r8, 0 |
| if (r8 <= 0) {
0x0009867c ble.w 0x98254 | goto label_10;
| }
0x00098680 mov r0, r3 | r0 = r3;
0x00098682 ldr r1, [sp, 0x48] | r1 = var_48h;
0x00098684 mov r2, r8 | r2 = r8;
0x00098686 str r3, [sp, 0x3c] | var_3ch = r3;
0x00098688 blx 0x8214 | sysconf ();
0x0009868c ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009868e cmp r0, 0 |
| if (r0 == 0) {
0x00098690 beq.w 0x98254 | goto label_10;
| }
0x00098694 b 0x98232 | goto label_11;
| label_40:
0x00098696 mov r0, sl | r0 = sl;
0x00098698 str r2, [sp, 0x18] | var_18h = r2;
0x0009869a bl 0x102f8 | fcn_000102f8 (r0);
0x0009869e ldr r2, [sp, 0x18] | r2 = var_18h;
0x000986a0 mov r7, r0 | r7 = r0;
0x000986a2 b 0x98458 | goto label_12;
| label_27:
0x000986a4 mov r2, r8 | r2 = r8;
0x000986a6 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000986a8 mov r0, r4 | r0 = r4;
0x000986aa bl 0x873c4 | fcn_000873c4 (r0, r1, r2, r3);
0x000986ae movs r3, 1 | r3 = 1;
0x000986b0 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x000986b2 str r3, [sp, 0x38] | var_38h = r3;
0x000986b4 b 0x98278 | goto label_13;
| label_45:
0x000986b6 movw r3, 0x10b | r3 = 0x10b;
0x000986ba mov r0, r7 | r0 = r7;
0x000986bc str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x000986be blx 0x8404 | fcn_00008404 ();
0x000986c2 ldr.w r1, [fp, 0x30] | r1 = *(arg_30h);
0x000986c6 b 0x9860e | goto label_6;
| label_49:
0x000986c8 ldrd r7, r5, [sp, 0x30] | __asm ("ldrd r7, r5, [var_30h]");
0x000986cc ldr r0, [sp, 0x54] | r0 = var_54h;
| label_43:
0x000986ce blx 0x8404 | fcn_00008404 ();
0x000986d2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000986d4 str r7, [r3] | *(r3) = r7;
0x000986d6 b 0x98410 | goto label_14;
| label_37:
0x000986d8 movs r3, 7 | r3 = 7;
0x000986da str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x000986dc b 0x983c0 | goto label_15;
| label_31:
0x000986de ldr.w r3, [r6, 0xa8] | r3 = *((r6 + 0xa8));
0x000986e2 add r1, sp, 0x6c | r1 += var_6ch;
0x000986e4 add.w r0, r4, 0x24 | r0 = r4 + 0x24;
0x000986e8 add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x000986ec asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000986ee bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x000986f2 ldr r3, [pc, 0x108] |
0x000986f4 add.w r1, r5, 0x50 | r1 = r5 + 0x50;
0x000986f8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000986fa add r1, fp | r1 += fp;
0x000986fc mov r0, r4 | r0 = r4;
0x000986fe add r3, pc | r3 = 0x130f00;
0x00098700 bl 0x97204 | fcn_00097204 (r0, r1, r2, r3, r4);
0x00098704 b 0x982f2 | goto label_16;
| label_47:
0x00098706 ldr.w r1, [r6, 0x80] | r1 = *((r6 + 0x80));
0x0009870a ldr.w ip, [r7, 8] | ip = *((r7 + 8));
0x0009870e cmp r1, ip |
| if (r1 >= ip) {
0x00098710 bge.w 0x985d0 | goto label_17;
| }
0x00098714 ldr r0, [r6, 0x7c] | r0 = *((r6 + 0x7c));
0x00098716 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x00098718 cmp r0, r2 |
| if (r0 > r2) {
0x0009871a bgt.w 0x985d0 | goto label_17;
| }
0x0009871e ldr r3, [sp, 0x58] | r3 = var_58h;
0x00098720 sub.w r2, ip, r1 | r2 = ip - r1;
0x00098724 ldr.w sl, [sp, 0x24] | sl = var_24h;
0x00098728 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x0009872a subs r3, r3, r2 | r3 -= r2;
0x0009872c subs r2, r3, 5 | r2 = r3 - 5;
0x0009872e mov r0, sl | r0 = sl;
0x00098730 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00098732 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00098736 ldr r2, [r6, 0x7c] | r2 = *((r6 + 0x7c));
0x00098738 mov r0, sl | r0 = sl;
0x0009873a ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x0009873c ldr r3, [r7] | r3 = *(r7);
0x0009873e add r3, r2 | r3 += r2;
0x00098740 subs r2, r1, r2 | r2 = r1 - r2;
0x00098742 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00098744 bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x00098748 ldr r3, [r6, 0x74] | r3 = *((r6 + 0x74));
0x0009874a b 0x985d0 | goto label_17;
| label_30:
0x0009874c ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009874e mov r2, r8 | r2 = r8;
0x00098750 add r1, sp, 0x6c | r1 += var_6ch;
0x00098752 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00098756 b 0x982ca | goto label_18;
| label_32:
0x00098758 add.w r5, r4, 0x24 | r5 = r4 + 0x24;
0x0009875c add.w r8, sp, 0x6c | r8 += var_6ch;
0x00098760 movs r3, 0 | r3 = 0;
0x00098762 mov r1, r8 | r1 = r8;
0x00098764 mov r0, r5 | r0 = r5;
0x00098766 movs r2, 0 | r2 = 0;
0x00098768 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x0009876c ldr.w r3, [r6, 0xa8] | r3 = *((r6 + 0xa8));
0x00098770 cmp r3, 0 |
| if (r3 <= 0) {
0x00098772 ble.w 0x982f2 | goto label_16;
| }
0x00098776 mov r1, r8 | r1 = r8;
0x00098778 mov r0, r5 | r0 = r5;
0x0009877a movs r2, 0 | r2 = 0;
0x0009877c movs r3, 0 | r3 = 0;
0x0009877e bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00098782 b 0x982f2 | goto label_16;
| label_42:
0x00098784 movs r3, 7 | r3 = 7;
0x00098786 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x00098788 b 0x98428 | goto label_2;
| label_46:
0x0009878a cmp r2, 0 |
0x0009878c asr.w r0, r1, 0x1f | r0 = r1 >> 0x1f;
0x00098790 it eq |
| if (r2 != 0) {
0x00098792 moveq r2, 0x40 | r2 = 0x40;
| }
0x00098794 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00098796 cmp r2, r1 |
0x00098798 sbcs.w ip, r3, r0 | __asm ("sbcs.w ip, r3, r0");
| if (r2 >= r1) {
0x0009879c bhs 0x987aa | goto label_50;
| }
| do {
0x0009879e adds r2, r2, r2 | r2 += r2;
0x000987a0 adcs r3, r3 | __asm ("adcs r3, r3");
0x000987a2 cmp r2, r1 |
0x000987a4 sbcs.w ip, r3, r0 | __asm ("sbcs.w ip, r3, r0");
0x000987a8 blo 0x9879e |
| } while (r2 <= r1);
| label_50:
0x000987aa ldr r0, [sp, 0x54] | r0 = var_54h;
0x000987ac str r2, [sp, 0x38] | var_38h = r2;
0x000987ae blx 0x8500 | fcn_00008500 ();
0x000987b2 ldr r2, [sp, 0x38] | r2 = var_38h;
| if (r0 != 0) {
0x000987b4 cbz r0, 0x987e0 |
0x000987b6 str r2, [sp, 0x5c] | var_5ch = r2;
0x000987b8 str r0, [sp, 0x54] | var_54h = r0;
0x000987ba b 0x98572 | goto label_19;
| label_29:
0x000987bc ldrd r2, r3, [sp, 0x6c] | __asm ("ldrd r2, r3, [var_6ch]");
0x000987c0 mov r0, r4 | r0 = r4;
0x000987c2 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000987c4 strb r3, [r2, 1] | *((r2 + 1)) = r3;
0x000987c6 ubfx r3, r3, 8, 8 | r3 = (r3 >> 8) & ((1 << 8) - 1);
0x000987ca strb r3, [r2] | *(r2) = r3;
0x000987cc mov r2, r8 | r2 = r8;
0x000987ce ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000987d0 bl 0x86c64 | fcn_00086c64 (r0, r1, r2, r3);
0x000987d4 b 0x982a8 | goto label_20;
| label_28:
0x000987d6 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000987d8 mov r0, r4 | r0 = r4;
0x000987da bl 0x86e88 | fcn_00086e88 (r0, r1, r2);
0x000987de b 0x9829e | goto label_21;
| }
0x000987e0 movs r3, 7 | r3 = 7;
0x000987e2 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x000987e4 b 0x98572 | goto label_19;
| label_39:
0x000987e6 blx 0x883c | fcn_0000883c ();
0x000987ea nop |
0x000987ec lsrs r4, r4, 0xd | r4 >>= 0xd;
0x000987ee movs r3, r0 | r3 = r0;
0x000987f0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000987f2 movs r0, r0 |
0x000987f4 mcrr p0, 0, r0, r8, c1 | __asm ("mcrr p0, 0, r0, r8, c1");
0x000987f8 lsrs r4, r5, 1 | r4 = r5 >> 1;
0x000987fa movs r3, r0 | r3 = r0;
0x000987fc invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x988e8 */
| #include <stdint.h>
|
; (fcn) fcn.000988e8 () | void fcn_000988e8 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_74h;
| int16_t var_91h;
| int16_t var_bch;
| r0 = arg1;
0x000988e8 invalid |
0x000988ec ldr.w r3, [pc, 0x624] |
0x000988f0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000988f4 mov sb, r0 | sb = r0;
0x000988f6 add r2, pc | r2 += pc;
0x000988f8 sub sp, 0xc4 |
0x000988fa movs r5, 0 | r5 = 0;
0x000988fc ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000988fe ldr.w r8, [r0, 0xc] | r8 = *(var_0hxc);
0x00098902 ldr r3, [r3] | r3 = *(0x98f14);
0x00098904 str r3, [sp, 0xbc] | var_bch = r3;
0x00098906 mov.w r3, 0 | r3 = 0;
0x0009890a str r5, [sp, 0x48] | var_48h = r5;
0x0009890c bl 0x95644 | fcn_00095644 (r0);
0x00098910 ldr.w sl, [sb, 0x24] | sl = *((sb + 0x24));
0x00098914 mov r7, r0 | r7 = r0;
0x00098916 str r0, [sp, 0x44] | var_44h = r0;
0x00098918 cmp.w sl, 0 |
| if (sl == 0) {
0x0009891c beq.w 0x98b22 | goto label_24;
| }
0x00098920 ldr.w r4, [sb, 0x50] | r4 = *((sb + 0x50));
0x00098924 cmp r4, 0 |
| if (r4 == 0) {
0x00098926 beq.w 0x98aaa | goto label_25;
| }
0x0009892a ldr r3, [r4] | r3 = *(r4);
0x0009892c subs r3, 1 | r3--;
0x0009892e cmp r3, r5 |
0x00098930 str r3, [r4] | *(r4) = r3;
0x00098932 it gt |
| if (r3 <= r5) {
0x00098934 strgt r5, [sb, 0x50] | *((sb + 0x50)) = r5;
| }
| if (r3 > r5) {
0x00098938 bgt.w 0x98aaa | goto label_25;
| }
0x0009893c ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0009893e cmp r3, r5 |
0x00098940 it gt |
| if (r3 <= r5) {
0x00098942 movgt sl, r5 | sl = r5;
| }
| if (r3 <= r5) {
0x00098944 ble.w 0x98c78 | goto label_26;
| }
| label_1:
0x00098948 mov r6, r4 | r6 = r4;
0x0009894a movs r5, 0 | r5 = 0;
| do {
0x0009894c ldr r0, [r6, 0x20] | r0 = *((r6 + 0x20));
0x0009894e adds r5, 1 | r5++;
0x00098950 blx 0x8404 | fcn_00008404 ();
0x00098954 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00098956 adds r6, 0xc | r6 += 0xc;
0x00098958 cmp r5, r3 |
0x0009895a blt 0x9894c |
| } while (r5 < r3);
| label_6:
0x0009895c mov r0, r4 | r0 = r4;
0x0009895e blx 0x8404 | fcn_00008404 ();
| label_5:
0x00098962 movs r3, 0 | r3 = 0;
0x00098964 str.w r3, [sb, 0x50] | __asm ("str.w r3, [sb, 0x50]");
0x00098968 cmp.w sl, 0 |
| if (sl == 0) {
0x0009896c beq.w 0x98b5a | goto label_13;
| }
| label_10:
0x00098970 ldr.w r3, [sb] | r3 = *(sb);
0x00098974 add r2, sp, 0x58 | r2 += var_58h;
0x00098976 mov r1, r2 | r1 = r2;
0x00098978 str r2, [sp, 0x10] | var_10h = r2;
0x0009897a mov r0, sb | r0 = sb;
0x0009897c mov r2, sl | r2 = sl;
0x0009897e ldr r4, [r3, 0x4c] | r4 = *((r3 + 0x4c));
0x00098980 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x00098982 str r4, [sp, 0x14] | var_14h = r4;
0x00098984 str r3, [sp, 0x24] | var_24h = r3;
0x00098986 bl 0x7c420 | fcn_0007c420 (r0, r1, r2);
0x0009898a ldr.w r2, [sb, 0x24] | r2 = *((sb + 0x24));
0x0009898e cmp r2, 0 |
| if (r2 == 0) {
0x00098990 beq.w 0x98bae | goto label_27;
| }
| label_9:
0x00098994 mov r0, r8 | r0 = r8;
0x00098996 bl 0xf360 | fcn_0000f360 (r0);
0x0009899a ldr r1, [sp, 0x10] | r1 = var_10h;
0x0009899c add r2, sp, 0x48 | r2 += var_48h;
0x0009899e mov r0, sb | r0 = sb;
0x000989a0 bl 0x875d8 | fcn_000875d8 (r0, r1, r2);
0x000989a4 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000989a6 cmp r3, 0 |
| if (r3 == 0) {
0x000989a8 beq.w 0x98ba0 | goto label_28;
| }
| label_8:
0x000989ac ldr.w r4, [sb, 0x24] | r4 = *((sb + 0x24));
0x000989b0 cmp r4, 0 |
| if (r4 == 0) {
0x000989b2 bne 0x98aaa |
0x000989b4 ldr r2, [r7, 0x1c] | r2 = *((r7 + 0x1c));
0x000989b6 mov r3, r4 | r3 = r4;
0x000989b8 ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x000989ba adds r2, 1 | r2++;
0x000989bc add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000989c0 lsls r2, r2, 2 | r2 <<= 2;
0x000989c2 blx 0x8500 | r0 = fcn_00008500 ();
0x000989c6 cmp r0, 0 |
| if (r0 == 0) {
0x000989c8 beq.w 0x98c70 | goto label_29;
| }
0x000989cc ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x000989ce add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000989d2 lsls r3, r3, 2 | r3 <<= 2;
0x000989d4 str r4, [r0, r3] | *((r0 + r3)) = r4;
0x000989d6 add r3, r0 | r3 += r0;
0x000989d8 str r4, [r3, 4] | *((r3 + 4)) = r4;
0x000989da str r4, [r3, 8] | *((r3 + 8)) = r4;
0x000989dc ldr.w r1, [sb, 0x24] | r1 = *((sb + 0x24));
0x000989e0 ldr r4, [sp, 0x48] | r4 = var_48h;
0x000989e2 str r0, [r7, 0x20] | *((r7 + 0x20)) = r0;
0x000989e4 cmp r1, 0 |
| if (r1 != 0) {
0x000989e6 bne 0x98ad6 | goto label_0;
| }
0x000989e8 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x000989ea ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x000989ec adds r5, r2, 1 | r5 = r2 + 1;
0x000989ee add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x000989f2 adds r3, 1 | r3++;
0x000989f4 str r3, [r7, 0x1c] | *((r7 + 0x1c)) = r3;
0x000989f6 lsls r3, r2, 2 | r3 = r2 << 2;
0x000989f8 mov r2, r7 | r2 = r7;
0x000989fa str.w sl, [r0, r3] | __asm ("str.w sl, [r0, r3]");
0x000989fe add r0, r3 | r0 += r3;
0x00098a00 movs r3, 1 | r3 = 1;
0x00098a02 str r4, [r0, 8] | *((r0 + 8)) = r4;
0x00098a04 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x00098a06 mov r0, sb | r0 = sb;
0x00098a08 str r5, [r7, 0x10] | *((r7 + 0x10)) = r5;
0x00098a0a bl 0x4acec | fcn_0004acec (r0, r1, r2);
0x00098a0e ldr.w r2, [sb, 0x24] | r2 = *((sb + 0x24));
| label_2:
0x00098a12 cmp r2, 0 |
| if (r2 != 0) {
0x00098a14 bne 0x98aaa | goto label_25;
| }
0x00098a16 ldr.w r3, [sb] | r3 = *(sb);
0x00098a1a ldr r5, [r3, 0x50] | r5 = *((r3 + 0x50));
0x00098a1c cmp r5, 0 |
| if (r5 > 0) {
0x00098a1e ble 0x98a78 |
0x00098a20 cmp r7, 0 |
| if (r7 == 0) {
0x00098a22 beq.w 0x98b9a | goto label_30;
| }
| label_11:
0x00098a26 ldr.w r6, [sb, 8] | r6 = *((sb + 8));
0x00098a2a ldr.w r8, [r7, 8] | r8 = *((r7 + 8));
0x00098a2e ldr.w fp, [r7, 0xc] | fp = *((r7 + 0xc));
0x00098a32 mov r2, r6 | r2 = r6;
0x00098a34 adds.w r0, r4, r8 | r0 = r4 + r8;
0x00098a38 asr.w sl, r6, 0x1f | sl = r6 >> 0x1f;
0x00098a3c str r0, [r7, 8] | *((r7 + 8)) = r0;
0x00098a3e adc.w r1, fp, r4, asr 31 | __asm ("adc.w r1, fp, r4, asr 31");
0x00098a42 mov r3, sl | r3 = sl;
0x00098a44 str r1, [r7, 0xc] | *((r7 + 0xc)) = r1;
0x00098a46 bl 0xb278c | fcn_000b278c (r0, r1, r2, r3);
0x00098a48 mcr2 p6, 5, r4, c1, c3, 2 | __asm ("mcr2 p6, 5, r4, c1, c3, 2");
0x00098a4c mov r4, r0 | r4 = r0;
0x00098a4e mov r2, r6 | r2 = r6;
0x00098a50 mov r0, r8 | r0 = r8;
0x00098a52 mov r1, fp | r1 = fp;
0x00098a54 bl 0xb278c | r0 = fcn_000b278c (r0, r1, r2, r3);
0x00098a58 subs r2, r4, r0 | r2 = r4 - r0;
0x00098a5a ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x00098a5c mul r2, r6, r2 | r2 = r6 * r2;
0x00098a60 mov r3, r5 | r3 = r5;
0x00098a62 mov r0, sb | r0 = sb;
0x00098a64 mul r2, r1, r2 | r2 = r1 * r2;
0x00098a68 add r1, sp, 0x44 | r1 += var_44h;
0x00098a6a bl 0x98800 | fcn_00098800 (r0, r1, r2);
0x00098a6e ldr.w r3, [sb] | r3 = *(sb);
0x00098a72 ldr r7, [sp, 0x44] | r7 = var_44h;
| label_12:
0x00098a74 ldr.w r2, [sb, 0x24] | r2 = *((sb + 0x24));
| }
0x00098a78 ldr r5, [r3, 0x54] | r5 = *((r3 + 0x54));
0x00098a7a str r7, [sp, 0x58] | var_58h = r7;
| if (r2 != 0) {
0x00098a7c cbnz r2, 0x98aaa | goto label_25;
| }
| label_7:
0x00098a7e movs r4, 0 | r4 = 0;
0x00098a80 add r6, sp, 0x58 | r6 += var_58h;
| label_3:
0x00098a82 add.w r3, r4, r4, lsl 1 | r3 = r4 + (r4 << 1);
0x00098a86 add.w r3, r7, r3, lsl 2 | r3 = r7 + (r3 << 2);
0x00098a8a ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x00098a8c cmp r3, r5 |
| if (r3 < r5) {
0x00098a8e blt 0x98acc | goto label_31;
| }
0x00098a90 mov r2, r4 | r2 = r4;
0x00098a92 movs r3, 0 | r3 = 0;
0x00098a94 mov r1, r6 | r1 = r6;
0x00098a96 mov r0, sb | r0 = sb;
0x00098a98 bl 0x98110 | fcn_00098110 (r0, r1, r2, r3, r4, r5, r6);
0x00098a9c ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x00098aa0 adds r4, 1 | r4++;
0x00098aa2 ldr r7, [sp, 0x58] | r7 = var_58h;
0x00098aa4 cmp r3, 0 |
| if (r3 == 0) {
0x00098aa6 beq 0x98b62 | goto label_32;
| }
| label_4:
0x00098aa8 str r7, [sp, 0x44] | var_44h = r7;
| }
| label_25:
0x00098aaa cbnz r7, 0x98ad6 |
| while (r3 > 0) {
0x00098aac ldr.w r2, [pc, 0x468] |
0x00098ab0 ldr.w r3, [pc, 0x460] | r3 = *(0x98f14);
0x00098ab4 add r2, pc | r2 = 0x1319d0;
0x00098ab6 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00098ab8 ldr r2, [r3] | r2 = imp.sinh;
0x00098aba ldr r3, [sp, 0xbc] | r3 = var_bch;
0x00098abc eors r2, r3 | r2 ^= r3;
0x00098abe mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00098ac2 bne.w 0x98c84 | goto label_33;
| }
0x00098ac6 add sp, 0xc4 |
0x00098ac8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_31:
0x00098acc mov r1, r7 | r1 = r7;
0x00098ace mov r0, sb | r0 = sb;
0x00098ad0 str r7, [sp, 0x44] | var_44h = r7;
0x00098ad2 bl 0x87018 | fcn_00087018 (r0, r1, r2);
0x00098ad4 invalid |
| label_0:
0x00098ad6 ldr r3, [r7] | r3 = *(r7);
0x00098ad8 subs r3, 1 | r3--;
0x00098ada cmp r3, 0 |
0x00098adc str r3, [r7] | *(r7) = r3;
0x00098ade bgt 0x98aac |
| }
0x00098ae0 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00098ae2 cmp r3, 0 |
0x00098ae4 itt gt |
| if (r3 <= 0) {
0x00098ae6 movgt r5, r7 | r5 = r7;
| }
| if (r3 <= 0) {
0x00098ae8 movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x00098aea ble 0x98afc | goto label_34;
| }
| do {
0x00098aec ldr r0, [r5, 0x20] | r0 = *((r5 + 0x20));
0x00098aee adds r4, 1 | r4++;
0x00098af0 blx 0x8404 | fcn_00008404 ();
0x00098af4 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00098af6 adds r5, 0xc | r5 += 0xc;
0x00098af8 cmp r4, r3 |
0x00098afa blt 0x98aec |
| } while (r4 < r3);
| label_34:
0x00098afc ldr.w r2, [pc, 0x41c] |
0x00098b00 ldr.w r3, [pc, 0x410] | r3 = *(0x98f14);
0x00098b04 add r2, pc | r2 = 0x131a24;
0x00098b06 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00098b08 ldr r2, [r3] | r2 = imp.sinh;
0x00098b0a ldr r3, [sp, 0xbc] | r3 = var_bch;
0x00098b0c eors r2, r3 | r2 ^= r3;
0x00098b0e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00098b12 bne.w 0x98c84 | goto label_33;
| }
0x00098b16 mov r0, r7 | r0 = r7;
0x00098b18 add sp, 0xc4 |
0x00098b1a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00098b1e b.w 0x8400 | void (*0x8400)() ();
| label_24:
0x00098b22 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00098b24 cmp.w r3, 0x7d0 |
| if (r3 < 0x7d0) {
0x00098b28 blt 0x98b76 | goto label_35;
| }
0x00098b2a ldr.w r4, [sb, 0x50] | r4 = *((sb + 0x50));
0x00098b2e movs r3, 0xd | r3 = 0xd;
0x00098b30 str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x00098b34 cmp r4, 0 |
| if (r4 == 0) {
0x00098b36 beq 0x98ad6 | goto label_0;
| }
0x00098b38 ldr r3, [r4] | r3 = *(r4);
0x00098b3a subs r3, 1 | r3--;
0x00098b3c cmp r3, 0 |
0x00098b3e str r3, [r4] | *(r4) = r3;
0x00098b40 it gt |
| if (r3 > 0) {
0x00098b42 strgt sl, [sb, 0x50] | *((sb + 0x50)) = sl;
| goto label_36;
| }
| if (r3 > 0) {
| label_36:
0x00098b46 bgt 0x98ad6 | goto label_0;
| }
0x00098b48 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00098b4a cmp r3, 0 |
| if (r3 > 0) {
0x00098b4c bgt.w 0x98948 | goto label_1;
| }
0x00098b50 mov r0, r4 | r0 = r4;
0x00098b52 blx 0x8404 | fcn_00008404 ();
0x00098b56 str.w sl, [sb, 0x50] | __asm ("str.w sl, [sb, 0x50]");
| label_13:
0x00098b5a ldr.w r2, [sb, 0x24] | r2 = *((sb + 0x24));
0x00098b5e movs r4, 0 | r4 = 0;
0x00098b60 b 0x98a12 | goto label_2;
| label_32:
0x00098b62 mov r2, r7 | r2 = r7;
0x00098b64 mov r1, r4 | r1 = r4;
0x00098b66 mov r0, sb | r0 = sb;
0x00098b68 bl 0x4acec | fcn_0004acec (r0, r1, r2);
0x00098b6c ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x00098b70 cmp r3, 0 |
| if (r3 == 0) {
0x00098b72 beq 0x98a82 | goto label_3;
| }
0x00098b74 b 0x98aa8 | goto label_4;
| label_35:
0x00098b76 bl 0x102f8 | fcn_000102f8 (r0);
0x00098b7a ldr.w r4, [sb, 0x50] | r4 = *((sb + 0x50));
0x00098b7e mov sl, r0 | sl = r0;
0x00098b80 cmp r4, 0 |
| if (r4 == 0) {
0x00098b82 beq 0x98c58 | goto label_37;
| }
0x00098b84 ldr r3, [r4] | r3 = *(r4);
0x00098b86 subs r3, 1 | r3--;
0x00098b88 cmp r3, 0 |
0x00098b8a str r3, [r4] | *(r4) = r3;
| if (r3 > 0) {
0x00098b8c bgt.w 0x98962 | goto label_5;
| }
0x00098b90 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00098b92 cmp r3, 0 |
| if (r3 > 0) {
0x00098b94 bgt.w 0x98948 | goto label_1;
| }
0x00098b98 b 0x9895c | goto label_6;
| label_30:
0x00098b9a ldr r5, [r3, 0x54] | r5 = *((r3 + 0x54));
0x00098b9c str r7, [sp, 0x58] | var_58h = r7;
0x00098b9e b 0x98a7e | goto label_7;
| label_28:
0x00098ba0 add r1, sp, 0x44 | r1 += var_44h;
0x00098ba2 add.w r0, sb, 0x24 | r0 = sb + 0x24;
0x00098ba6 bl 0x49d48 | fcn_00049d48 (r0, r1);
0x00098baa ldr r7, [sp, 0x44] | r7 = var_44h;
0x00098bac b 0x989ac | goto label_8;
| label_27:
0x00098bae add.w r3, r8, 0x10 | r3 = r8 + 0x10;
0x00098bb2 mov r1, r2 | r1 = r2;
0x00098bb4 mov r0, r8 | r0 = r8;
0x00098bb6 bl 0x41b80 | fcn_00041b80 (r0, r1, r2, r3, r4, r5);
0x00098bba str.w r0, [sb, 0x24] | __asm ("str.w r0, [sb, 0x24]");
0x00098bbe cmp r0, 0 |
| if (r0 != 0) {
0x00098bc0 bne.w 0x98994 | goto label_9;
| }
0x00098bc4 ldr.w r6, [r8, 0x10] | r6 = *((r8 + 0x10));
0x00098bc8 add r3, sp, 0x4c | r3 += var_4ch;
0x00098bca strd sl, r7, [sp, 0x38] | __asm ("strd sl, r7, [sp, 0x38]");
0x00098bce str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00098bd2 mov sb, r8 | sb = r8;
0x00098bd4 mov r7, r6 | r7 = r6;
0x00098bd6 str r3, [sp, 0x20] | var_20h = r3;
0x00098bd8 cmp r7, 0 |
| if (r7 == 0) {
0x00098bda beq 0x98c4c | goto label_38;
| }
| do {
0x00098bdc add.w r4, r7, 0x28 | r4 = r7 + 0x28;
0x00098be0 mov r0, r4 | r0 = r4;
0x00098be2 blx 0x85b4 | fcn_000085b4 ();
0x00098be6 movs r2, 0 | r2 = 0;
0x00098be8 mov r5, r0 | r5 = r0;
0x00098bea mov r1, r7 | r1 = r7;
0x00098bec mov r0, sb | r0 = sb;
0x00098bee bl 0x1dba0 | fcn_0001dba0 (r0, r1, r2);
0x00098bf2 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x00098bf4 mov r0, r4 | r0 = r4;
0x00098bf6 subs r3, 0x29 | r3 -= 0x29;
0x00098bf8 subs r3, r3, r5 | r3 -= r5;
0x00098bfa adds r5, 1 | r5++;
0x00098bfc str r3, [sp, 0xc] | var_ch_2 = r3;
0x00098bfe adds r3, r4, r5 | r3 = r4 + r5;
0x00098c00 str r3, [sp, 4] | var_4h = r3;
0x00098c02 blx 0x85b4 | fcn_000085b4 ();
0x00098c06 mov r3, r4 | r3 = r4;
0x00098c08 ldr r4, [sp] | r4 = *(sp);
0x00098c0a mov r2, r0 | r2 = r0;
0x00098c0c ldr r1, [sp, 0x10] | r1 = var_10h;
0x00098c0e mov r0, r4 | r0 = r4;
0x00098c10 bl 0x873c4 | fcn_000873c4 (r0, r1, r2, r3);
0x00098c14 ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
| if (r2 != 0) {
0x00098c16 cbnz r2, 0x98c4c | goto label_38;
| }
0x00098c18 ldr r4, [sp, 0x68] | r4 = var_68h;
0x00098c1a ldr r3, [sp, 0x74] | r3 = var_74h;
0x00098c1c ldr r5, [sp, 0xc] | r5 = var_ch_2;
0x00098c1e ldr r1, [sp, 0x14] | r1 = var_14h;
0x00098c20 add r3, r4 | r3 += r4;
0x00098c22 add r3, r5 | r3 += r5;
0x00098c24 cmp r1, r3 |
| if (r1 <= r3) {
0x00098c26 ble 0x98c88 | goto label_39;
| }
0x00098c28 ldr r0, [sp, 0x64] | r0 = var_64h;
0x00098c2a mov r2, r5 | r2 = r5;
0x00098c2c ldr r1, [sp, 4] | r1 = var_4h;
0x00098c2e add r0, r4 | r0 += r4;
0x00098c30 add r4, r5 | r4 += r5;
0x00098c32 blx 0x8610 | fcn_00008610 ();
0x00098c36 ldr r3, [sp] | r3 = *(sp);
0x00098c38 str r4, [sp, 0x68] | var_68h = r4;
0x00098c3a ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
| if (r2 != 0) {
| label_22:
0x00098c3c cbnz r2, 0x98c4c | goto label_38;
| }
| label_14:
0x00098c3e ldr.w r7, [sb, 0x10] | r7 = *((sb + 0x10));
0x00098c42 ldr r7, [r7, 4] | r7 = *((r7 + 4));
0x00098c44 str.w r7, [sb, 0x10] | __asm ("str.w r7, [sb, 0x10]");
0x00098c48 cmp r7, 0 |
0x00098c4a bne 0x98bdc |
| } while (r7 != 0);
| label_38:
0x00098c4c mov r8, sb | r8 = sb;
0x00098c4e ldrd sl, r7, [sp, 0x38] | __asm ("ldrd sl, r7, [var_38h]");
0x00098c52 ldr.w sb, [sp] | sb = *(sp);
0x00098c56 b 0x98994 | goto label_9;
| label_37:
0x00098c58 cmp r0, 0 |
| if (r0 != 0) {
0x00098c5a bne.w 0x98970 | goto label_10;
| }
0x00098c5e ldr.w r3, [sb] | r3 = *(sb);
0x00098c62 ldr r5, [r3, 0x50] | r5 = *((r3 + 0x50));
0x00098c64 cmp r5, 0 |
0x00098c66 it gt |
| if (r5 > 0) {
0x00098c68 movgt r4, r0 | r4 = r0;
| goto label_40;
| }
| if (r5 > 0) {
| label_40:
0x00098c6a bgt.w 0x98a26 | goto label_11;
| }
0x00098c6e b 0x98a74 | goto label_12;
| label_29:
0x00098c70 movs r3, 7 | r3 = 7;
0x00098c72 str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x00098c76 b 0x98ad6 | goto label_0;
| label_26:
0x00098c78 mov r0, r4 | r0 = r4;
0x00098c7a blx 0x8404 | fcn_00008404 ();
0x00098c7e str.w r5, [sb, 0x50] | __asm ("str.w r5, [sb, 0x50]");
0x00098c82 b 0x98b5a | goto label_13;
| label_33:
0x00098c84 blx 0x883c | fcn_0000883c ();
| label_39:
0x00098c88 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00098c8a vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00098c8e cmp r3, 0 |
0x00098c90 vstr d16, [sp, 0x50] | __asm ("vstr d16, [sp, 0x50]");
| if (r3 <= 0) {
0x00098c94 ble 0x98c3e | goto label_14;
| }
0x00098c96 add r3, sp, 0x50 | r3 += var_50h;
0x00098c98 mov sl, r2 | sl = r2;
0x00098c9a mov fp, r2 |
0x00098c9c mov r7, r2 | r7 = r2;
0x00098c9e mov r5, r4 | r5 = r4;
0x00098ca0 str r3, [sp, 0x1c] | var_1ch = r3;
0x00098ca2 str.w sb, [sp, 0x34] | __asm ("str.w sb, [var_34h]");
0x00098ca6 b 0x98d50 |
| while (ip != 0) {
0x00098ca8 ubfx r3, r5, 8, 8 | r3 = (r5 >> 8) & ((1 << 8) - 1);
0x00098cac cmp r6, 0x80 |
0x00098cae strb r3, [r1] | *(r1) = r3;
0x00098cb0 sbcs r3, r4, 0 | __asm ("sbcs r3, r4, 0");
0x00098cb4 strb r5, [r1, 1] | *((r1 + 1)) = r5;
0x00098cb6 itt lo |
| if (r6 >= 0x80) {
0x00098cb8 strblo r6, [r0] | *(r0) = r6;
| }
| if (r6 >= 0x80) {
0x00098cba movlo r0, 1 | r0 = 1;
| }
| if (r6 > 0x80) {
0x00098cbc blo 0x98cd2 |
0x00098cbe cmp.w r6, 0x4000 |
0x00098cc2 sbcs r3, r4, 0 | __asm ("sbcs r3, r4, 0");
| if (r6 <= 0x4000) {
0x00098cc6 blo.w 0x98eb2 | goto label_41;
| }
0x00098cca mov r2, r6 | r2 = r6;
0x00098ccc mov r3, r4 | r3 = r4;
0x00098cce bl 0x9758 | fcn_00009758 (r0, r1, r2);
| }
| label_20:
0x00098cd2 mov r3, r4 | r3 = r4;
0x00098cd4 ldr r4, [sp] | r4 = *(sp);
0x00098cd6 add r0, r5 | r0 += r5;
0x00098cd8 movs r1, 0 | r1 = 0;
0x00098cda mov r2, r6 | r2 = r6;
0x00098cdc str r0, [sp, 0x68] | var_68h = r0;
0x00098cde strb.w r1, [sp, 0x91] | var_91h = r1;
0x00098ce2 mov r0, r4 | r0 = r4;
0x00098ce4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00098ce6 bl 0x86c64 | fcn_00086c64 (r0, r1, r2, r3);
0x00098cea ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x00098cec cmp r2, 0 |
| if (r2 != 0) {
0x00098cee bne.w 0x98efe | goto label_42;
| }
0x00098cf2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00098cf4 ldr r4, [sp, 0x68] | r4 = var_68h;
0x00098cf6 cmp r3, 1 |
| if (r3 != 1) {
0x00098cf8 bne 0x98da4 | goto label_43;
| }
| label_15:
0x00098cfa ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x00098cfc cmp sl, r0 |
| if (sl >= r0) {
0x00098cfe bge 0x98de6 | goto label_44;
| }
0x00098d00 ldr r5, [sp, 4] | r5 = var_4h;
0x00098d02 ldrb.w r3, [r5, sl] | r3 = *((r5 + sl));
| if (r3 == 0) {
0x00098d06 cbnz r3, 0x98d2a |
0x00098d08 ldr r1, [sp, 0x64] | r1 = var_64h;
0x00098d0a adds r2, r4, 1 | r2 = r4 + 1;
0x00098d0c str r2, [sp, 0x68] | var_68h = r2;
0x00098d0e strb r3, [r1, r4] | *((r1 + r4)) = r3;
0x00098d10 add.w r3, sl, 1 | r3 = sl + 1;
0x00098d14 cmp r3, r0 |
| if (r3 >= r0) {
0x00098d16 bge 0x98de2 | goto label_45;
| }
0x00098d18 ldrb r0, [r5, r3] | r0 = *((r5 + r3));
0x00098d1a cmp r0, 0 |
| if (r0 != 0) {
0x00098d1c bne.w 0x98ef8 | goto label_46;
| }
0x00098d20 add.w sl, sl, 2 | sl += 2;
0x00098d24 adds r4, 2 | r4 += 2;
0x00098d26 strb r0, [r1, r2] | *((r1 + r2)) = r0;
0x00098d28 str r4, [sp, 0x68] | var_68h = r4;
| }
| label_23:
0x00098d2a ldr r3, [sp, 0x74] | r3 = var_74h;
0x00098d2c ldr r2, [sp, 0x14] | r2 = var_14h;
0x00098d2e add r3, r4 | r3 += r4;
0x00098d30 cmp r2, r3 |
| if (r2 <= r3) {
0x00098d32 ble 0x98df0 | goto label_47;
| }
0x00098d34 ldr r3, [sp] | r3 = *(sp);
0x00098d36 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
| label_16:
0x00098d38 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00098d3a cmp sl, r3 |
0x00098d3c ite ge |
| if (sl < r3) {
0x00098d3e movge r3, 0 | r3 = 0;
| }
| if (sl >= r3) {
0x00098d40 movlt r3, 1 | r3 = 1;
| }
0x00098d42 cmp r2, 0 |
0x00098d44 it ne |
| if (r2 == 0) {
0x00098d46 movne r3, 0 | r3 = 0;
| }
0x00098d48 cmp r3, 0 |
| if (r3 == 0) {
0x00098d4a beq.w 0x98f0a | goto label_48;
| }
0x00098d4e ldr r5, [sp, 0x68] | r5 = var_68h;
0x00098d50 ldr r3, [sp, 4] | r3 = var_4h;
0x00098d52 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00098d54 add.w r0, r3, sl | r0 = r3 + sl;
0x00098d58 bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00098d5c ldr r2, [sp, 0x50] | r2 = var_50h;
0x00098d5e add sl, r0 | sl += r0;
0x00098d60 ldr r3, [sp, 0x54] | r3 = var_54h;
0x00098d62 ldr r1, [sp, 0x64] | r1 = var_64h;
0x00098d64 ldrb.w ip, [sp, 0x91] | ip = var_91h;
0x00098d68 adds.w r6, fp, r2 | r6 = fp + r2;
0x00098d6c adc.w r4, r3, r7 | __asm ("adc.w r4, r3, r7");
0x00098d70 mov fp, r6 |
0x00098d72 mov r7, r4 | r7 = r4;
0x00098d74 adds r0, r1, r5 | r0 = r1 + r5;
0x00098d76 cmp.w ip, 0 |
0x00098d7a bne 0x98ca8 |
| }
0x00098d7c cmp r2, 0x80 |
0x00098d7e sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x00098d82 itt lo |
| if (r2 >= 0x80) {
0x00098d84 strblo r2, [r0] | *(r0) = r2;
| }
| if (r2 >= 0x80) {
0x00098d86 movlo r0, 1 | r0 = 1;
| }
| if (r2 > 0x80) {
0x00098d88 blo 0x98d9a |
0x00098d8a cmp.w r2, 0x4000 |
0x00098d8e sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 <= 0x4000) {
0x00098d92 blo.w 0x98ec4 | goto label_49;
| }
0x00098d96 bl 0x9758 | fcn_00009758 (r0, r1, r2);
| }
| label_21:
0x00098d9a ldr r3, [sp, 0x24] | r3 = var_24h;
0x00098d9c adds r4, r0, r5 | r4 = r0 + r5;
0x00098d9e str r4, [sp, 0x68] | var_68h = r4;
0x00098da0 cmp r3, 1 |
| if (r3 == 1) {
0x00098da2 beq 0x98cfa | goto label_15;
| }
| label_43:
0x00098da4 ldr r3, [sp, 4] | r3 = var_4h;
0x00098da6 ldrb.w r1, [r3, sl] | r1 = *((r3 + sl));
0x00098daa add r3, sl | r3 += sl;
0x00098dac lsls r2, r1, 0x18 | r2 = r1 << 0x18;
0x00098dae str r1, [sp, 0x4c] | var_4ch = r1;
0x00098db0 it pl |
| if (r2 < r1) {
0x00098db2 movpl r0, 1 | r0 = 1;
| }
| if (r2 < r1) {
0x00098db4 bmi 0x98ea2 | goto label_50;
| }
| label_19:
0x00098db6 add.w r1, r1, r1, lsr 31 | r1 += (r1 >> 31);
0x00098dba ldr r2, [sp, 0x74] | r2 = var_74h;
0x00098dbc add.w r8, r0, r1, asr 1 | r8 = r0 + (r1 >> 1);
0x00098dc0 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00098dc2 add r2, r4 | r2 += r4;
0x00098dc4 add r2, r8 | r2 += r8;
0x00098dc6 cmp r1, r2 |
| if (r1 >= r2) {
0x00098dc8 blt 0x98dfe |
0x00098dca ldr r0, [sp, 0x64] | r0 = var_64h;
0x00098dcc mov r1, r3 | r1 = r3;
0x00098dce mov r2, r8 | r2 = r8;
0x00098dd0 add sl, r8 | sl += r8;
0x00098dd2 add r0, r4 | r0 += r4;
0x00098dd4 add r4, r8 | r4 += r8;
0x00098dd6 blx 0x8610 | fcn_00008610 ();
0x00098dda ldr r3, [sp] | r3 = *(sp);
0x00098ddc str r4, [sp, 0x68] | var_68h = r4;
0x00098dde ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x00098de0 b 0x98d38 | goto label_16;
| label_45:
0x00098de2 mov r4, r2 | r4 = r2;
0x00098de4 mov sl, r3 | sl = r3;
| label_44:
0x00098de6 ldr r3, [sp, 0x74] | r3 = var_74h;
0x00098de8 add r4, r3 | r4 += r3;
0x00098dea ldr r3, [sp, 0x14] | r3 = var_14h;
0x00098dec cmp r3, r4 |
| if (r3 > r4) {
0x00098dee bgt 0x98eee | goto label_51;
| }
| label_47:
0x00098df0 ldr r4, [sp] | r4 = *(sp);
0x00098df2 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00098df4 mov r0, r4 | r0 = r4;
0x00098df6 bl 0x86e88 | fcn_00086e88 (r0, r1, r2);
0x00098dfa ldr r2, [r4, 0x24] | r2 = *((r4 + 0x24));
0x00098dfc b 0x98d38 | goto label_16;
| }
0x00098dfe str.w sl, [sp, 0x28] | __asm ("str.w sl, [var_28h]");
0x00098e02 mov.w sb, 0 | sb = 0;
0x00098e06 ldr.w sl, [sp, 0x14] | sl = var_14h;
0x00098e0a str r3, [sp, 8] | var_8h = r3;
0x00098e0c strd fp, r7, [sp, 0x2c] | __asm ("strd fp, r7, [sp, 0x2c]");
0x00098e10 b 0x98e36 |
| while (fp >= r4) {
0x00098e12 ldr r0, [sp, 0x64] | r0 = var_64h;
0x00098e14 mov r2, r4 | r2 = r4;
0x00098e16 add r4, r6 | r4 += r6;
0x00098e18 mov r1, r7 | r1 = r7;
0x00098e1a add r5, r4 | r5 += r4;
0x00098e1c add r0, r6 | r0 += r6;
0x00098e1e blx 0x8610 | fcn_00008610 ();
0x00098e22 cmp sl, r5 |
0x00098e24 str r4, [sp, 0x68] | var_68h = r4;
| if (sl > r5) {
0x00098e26 bgt 0x98ee0 | goto label_52;
| }
0x00098e28 mov sb, r8 | sb = r8;
| label_18:
0x00098e2a ldr r1, [sp, 0x10] | r1 = var_10h;
0x00098e2c ldr r0, [sp] | r0 = *(sp);
0x00098e2e bl 0x86e88 | fcn_00086e88 (r0, r1, r2);
| label_17:
0x00098e32 cmp r8, sb |
| if (r8 <= sb) {
0x00098e34 ble 0x98ee0 | goto label_52;
| }
0x00098e36 ldr r3, [sp] | r3 = *(sp);
0x00098e38 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x00098e3a cmp r2, 0 |
| if (r2 != 0) {
0x00098e3c bne 0x98ed6 | goto label_53;
| }
0x00098e3e ldr r6, [sp, 0x68] | r6 = var_68h;
0x00098e40 sub.w r4, r8, sb | r4 = r8 - sb;
0x00098e44 ldr r5, [sp, 0x74] | r5 = var_74h;
0x00098e46 ldr r3, [sp, 8] | r3 = var_8h;
0x00098e48 sub.w r2, sl, r6 | r2 = sl - r6;
0x00098e4c sub.w fp, r2, r5 |
0x00098e50 cmp fp, r4 |
0x00098e52 add.w r7, r3, sb | r7 = r3 + sb;
0x00098e56 bge 0x98e12 |
| }
0x00098e58 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00098e5a mov r0, r7 | r0 = r7;
0x00098e5c bl 0xccc4 | r0 = fcn_0000ccc4 (r0, r1);
0x00098e60 cmp fp, r0 |
0x00098e62 itt le |
| if (fp > r0) {
0x00098e64 movle r1, r0 | r1 = r0;
| }
| if (fp > r0) {
0x00098e66 movle r3, r1 | r3 = r1;
| }
| if (fp <= r0) {
0x00098e68 ble 0x98e84 | goto label_54;
| }
0x00098e6a ldr r4, [sp, 0x20] | r4 = var_20h;
0x00098e6c str r5, [sp, 0x18] | var_18h = r5;
0x00098e6e mov r5, r0 | r5 = r0;
| do {
0x00098e70 adds r0, r7, r5 | r0 = r7 + r5;
0x00098e72 mov r1, r4 | r1 = r4;
0x00098e74 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x00098e78 mov r1, r5 | r1 = r5;
0x00098e7a mov r3, r5 | r3 = r5;
0x00098e7c add r5, r0 | r5 += r0;
0x00098e7e cmp fp, r5 |
0x00098e80 bge 0x98e70 |
| } while (fp >= r5);
0x00098e82 ldr r5, [sp, 0x18] | r5 = var_18h;
| label_54:
0x00098e84 ldr r0, [sp, 0x64] | r0 = var_64h;
0x00098e86 mov r2, r1 | r2 = r1;
0x00098e88 mov r1, r7 | r1 = r7;
0x00098e8a add sb, r3 | sb += r3;
0x00098e8c str r3, [sp, 0x18] | var_18h = r3;
0x00098e8e add r0, r6 | r0 += r6;
0x00098e90 blx 0x8610 | fcn_00008610 ();
0x00098e94 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00098e96 add r6, r3 | r6 += r3;
0x00098e98 add r5, r6 | r5 += r6;
0x00098e9a str r6, [sp, 0x68] | var_68h = r6;
0x00098e9c cmp sl, r5 |
| if (sl > r5) {
0x00098e9e bgt 0x98e32 | goto label_17;
| }
0x00098ea0 b 0x98e2a | goto label_18;
| label_50:
0x00098ea2 ldr r1, [sp, 0x20] | r1 = var_20h;
0x00098ea4 mov r0, r3 | r0 = r3;
0x00098ea6 str r3, [sp, 8] | var_8h = r3;
0x00098ea8 bl 0xccc4 | fcn_0000ccc4 (r0, r1);
0x00098eac ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x00098eae ldr r3, [sp, 8] | r3 = var_8h;
0x00098eb0 b 0x98db6 | goto label_19;
| label_41:
0x00098eb2 lsrs r3, r6, 7 | r3 = r6 >> 7;
0x00098eb4 orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x00098eb8 strb r3, [r0] | *(r0) = r3;
0x00098eba and r3, r6, 0x7f | r3 = r6 & 0x7f;
0x00098ebe strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x00098ec0 movs r0, 2 | r0 = 2;
0x00098ec2 b 0x98cd2 | goto label_20;
| label_49:
0x00098ec4 lsrs r3, r2, 7 | r3 = r2 >> 7;
0x00098ec6 and r2, r2, 0x7f | r2 &= 0x7f;
0x00098eca strb r2, [r0, 1] | *((r0 + 1)) = r2;
0x00098ecc orn r3, r3, 0x7f | r3 |= 0x7f;
| r3 = ~r3;
0x00098ed0 strb r3, [r0] | *(r0) = r3;
0x00098ed2 movs r0, 2 | r0 = 2;
0x00098ed4 b 0x98d9a | goto label_21;
| label_53:
0x00098ed6 ldrd sl, fp, [sp, 0x28] | __asm ("ldrd sl, fp, [var_28h]");
0x00098eda ldr r7, [sp, 0x30] | r7 = var_30h;
0x00098edc add sl, r8 | sl += r8;
0x00098ede b 0x98d38 | goto label_16;
| label_52:
0x00098ee0 ldrd sl, fp, [sp, 0x28] | __asm ("ldrd sl, fp, [var_28h]");
0x00098ee4 ldr r3, [sp] | r3 = *(sp);
0x00098ee6 ldr r7, [sp, 0x30] | r7 = var_30h;
0x00098ee8 add sl, r8 | sl += r8;
0x00098eea ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x00098eec b 0x98d38 | goto label_16;
| label_51:
0x00098eee ldr r3, [sp] | r3 = *(sp);
0x00098ef0 ldr.w sb, [sp, 0x34] | sb = var_34h;
0x00098ef4 ldr r2, [r3, 0x24] | r2 = *((r3 + 0x24));
0x00098ef6 b 0x98c3c | goto label_22;
| label_46:
0x00098ef8 mov r4, r2 | r4 = r2;
0x00098efa mov sl, r3 | sl = r3;
0x00098efc b 0x98d2a | goto label_23;
| label_42:
0x00098efe ldrd r8, sl, [sp, 0x34] | __asm ("ldrd r8, sl, [var_34h]");
0x00098f02 ldr r7, [sp, 0x3c] | r7 = var_3ch;
0x00098f04 ldr.w sb, [sp] | sb = *(sp);
0x00098f08 b 0x98994 | goto label_9;
| label_48:
0x00098f0a ldr.w sb, [sp, 0x34] | sb = var_34h;
0x00098f0e b 0x98c3c | goto label_22;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x99360 */
| #include <stdint.h>
|
; (fcn) fcn.00099360 () | void fcn_00099360 (int16_t arg_60h, int16_t arg1, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r2 = arg3;
| r3 = arg4;
0x00099360 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00099364 sub sp, 0x3c |
0x00099366 str r2, [sp, 0x14] | var_14h = r2;
0x00099368 mov r5, r3 | r5 = r3;
0x0009936a mov r7, r0 | r7 = r0;
0x0009936c ldr r2, [pc, 0x264] |
0x0009936e ldr r3, [pc, 0x268] | r3 = *(0x995da);
0x00099370 ldr.w sl, [r0] | sl = *(r0);
0x00099374 add r2, pc | r2 = 0x13294c;
0x00099376 ldr.w sb, [sp, 0x60] | sb = *(arg_60h);
0x0009937a ldr r3, [r2, r3] |
0x0009937c movs r2, 0 | r2 = 0;
0x0009937e mov r6, sl | r6 = sl;
0x00099380 ldr r3, [r3] | r3 = imp.sinh;
0x00099382 str r3, [sp, 0x34] | var_34h = r3;
0x00099384 mov.w r3, 0 | r3 = 0;
0x00099388 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0009938a str r2, [sp, 0x20] | var_20h = r2;
0x0009938c cmp r3, 0 |
| if (r3 == 0) {
0x0009938e beq.w 0x99534 | goto label_8;
| }
0x00099392 movs r3, 0 | r3 = 0;
0x00099394 mov r8, r3 | r8 = r3;
0x00099396 str r3, [sp, 0x24] | var_24h = r3;
0x00099398 cmp.w sb, 0 |
| if (sb == 0) {
0x0009939c beq.w 0x99550 | goto label_9;
| }
| label_3:
0x000993a0 mov.w r3, -1 | r3 = -1;
0x000993a4 ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x000993a6 str r3, [sp, 0x2c] | var_2ch = r3;
0x000993a8 movs r1, 1 | r1 = 1;
0x000993aa mov r3, r5 | r3 = r5;
0x000993ac ldr r2, [sp, 0x14] | r2 = var_14h;
0x000993ae str r7, [sp, 0x28] | var_28h = r7;
0x000993b0 bl 0x9929c | r0 = fcn_0009929c (r0, r1, r2, r3);
0x000993b4 mov r4, r0 | r4 = r0;
0x000993b6 mov r3, r0 | r3 = r0;
0x000993b8 cmp r0, 0 |
| if (r0 != 0) {
0x000993ba bne.w 0x99500 | goto label_7;
| }
0x000993be ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x000993c0 mov fp, r0 |
0x000993c2 ldr r3, [pc, 0x218] |
0x000993c4 str r5, [sp, 0x1c] | var_1ch = r5;
0x000993c6 adds r5, r4, 1 | r5 = r4 + 1;
0x000993c8 cmp r2, r5 |
0x000993ca str.w sl, [sp, 0x18] | __asm ("str.w sl, [var_18h]");
0x000993ce add r3, pc | r3 = 0x1329b0;
0x000993d0 mov sl, r7 | sl = r7;
0x000993d2 str r3, [sp, 0x10] | var_10h = r3;
0x000993d4 add r3, sp, 0x28 | r3 += var_28h;
0x000993d6 str r3, [sp, 0xc] | var_ch = r3;
| if (r2 < r5) {
0x000993d8 blt 0x9944c | goto label_10;
| }
| do {
0x000993da ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000993dc ldrb r3, [r3, r4] | r3 = *((r3 + r4));
| if (r3 == 0) {
0x000993de cbnz r3, 0x99444 |
0x000993e0 cmp.w r8, 0 |
| if (r8 == 0) {
0x000993e4 beq 0x994d2 | goto label_11;
| }
0x000993e6 mov r1, r5 | r1 = r5;
0x000993e8 mov r0, r8 | r0 = r8;
0x000993ea blx 0x8148 | r0 = fcn_00008148 ();
0x000993ee mov r7, r0 | r7 = r0;
0x000993f0 mov r1, r5 | r1 = r5;
0x000993f2 mov r0, r8 | r0 = r8;
0x000993f4 blx 0x82f4 | fcn_000082f4 ();
0x000993f8 str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x000993fc mov r2, r0 | r2 = r0;
0x000993fe cmp r7, 0 |
| if (r7 == 0) {
0x00099400 beq 0x994f4 | goto label_12;
| }
| label_1:
0x00099402 ldrd r0, r1, [r6, 0x38] | __asm ("ldrd r0, r1, [r6, 0x38]");
0x00099406 mov r3, r7 | r3 = r7;
0x00099408 str r2, [sp] | *(sp) = r2;
0x0009940a ldr r2, [sp, 0x10] | r2 = var_10h;
0x0009940c str r2, [sp, 4] | var_4h = r2;
0x0009940e movs r2, 4 | r2 = 4;
0x00099410 ldr r7, [r1, 8] | r7 = *((r1 + 8));
0x00099412 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00099414 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00099416 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00099418 asrs r7, r3, 0x1f | r7 = r3 >> 0x1f;
| label_2:
0x0009941a ldr.w r1, [sl, 0x18] | r1 = *((sl + 0x18));
0x0009941e ldr.w r2, [r1, r4, lsl 3] | offset_0 = r4 << 3;
| r2 = *((r1 + offset_0));
0x00099422 add.w ip, r1, r4, lsl 3 |
0x00099426 subs r2, r2, r3 | r2 -= r3;
0x00099428 ldr.w r3, [ip, 4] | r3 = *((ip + 4));
0x0009942c str.w r2, [r1, r4, lsl 3] | __asm ("str.w r2, [r1, r4, lsl 3]");
0x00099430 sbc.w r3, r3, r7 | __asm ("sbc.w r3, r3, r7");
0x00099434 cmp r3, 0 |
0x00099436 str.w r3, [ip, 4] | __asm ("str.w r3, [ip, 4]");
| if (r3 < 0) {
0x0009943a blt 0x994fa | goto label_13;
| }
0x0009943c cmp r0, 0 |
| if (r0 != 0) {
0x0009943e bne.w 0x995ca | goto label_14;
| }
0x00099442 ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
| }
| label_0:
0x00099444 mov r4, r5 | r4 = r5;
0x00099446 adds r5, r4, 1 | r5 = r4 + 1;
0x00099448 cmp r2, r5 |
0x0009944a bge 0x993da |
| } while (r2 >= r5);
| label_10:
0x0009944c mov r7, sl | r7 = sl;
0x0009944e ldrd sl, r5, [sp, 0x18] | __asm ("ldrd sl, r5, [var_1ch]");
0x00099452 ldrd r3, r2, [r7, 0x10] | __asm ("ldrd r3, r2, [r7, 0x10]");
0x00099456 cmp r3, 1 |
0x00099458 sbcs r1, r2, 0 | __asm ("sbcs r1, r2, 0");
| if (r3 < 1) {
0x0009945c blt.w 0x99580 | goto label_15;
| }
0x00099460 subs r3, 1 | r3--;
0x00099462 adc r2, r2, -1 | __asm ("adc r2, r2, -1");
0x00099466 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x00099468 str r2, [r7, 0x14] | *((r7 + 0x14)) = r2;
| label_5:
0x0009946a mov r0, r8 | r0 = r8;
0x0009946c blx 0x81f8 | r0 = fcn_000081f8 ();
0x00099470 mov r3, r0 | r3 = r0;
0x00099472 cmp r3, 0 |
| if (r3 != 0) {
0x00099474 bne 0x99518 | goto label_4;
| }
0x00099476 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x0009947a cmp r3, 0 |
| if (r3 != 0) {
0x0009947c bne.w 0x99590 | goto label_16;
| }
0x00099480 ldr.w r2, [sl, 0x20] | r2 = *((sl + 0x20));
0x00099484 cmp r2, 0 |
| if (r2 != 0) {
0x00099486 bne 0x99518 | goto label_4;
| }
0x00099488 add r6, sp, 0x20 | r6 += var_20h;
| label_6:
0x0009948a movs r3, 0 | r3 = 0;
0x0009948c mov r2, r6 | r2 = r6;
0x0009948e mov r0, r7 | r0 = r7;
0x00099490 movs r1, 5 | r1 = 5;
0x00099492 bl 0x7bff8 | r0 = fcn_0007bff8 (r0, r1, r2, r3, r4, r5, r6);
0x00099496 mov r3, r0 | r3 = r0;
0x00099498 cmp r0, 0 |
| if (r0 != 0) {
0x0009949a bne 0x99518 | goto label_4;
| }
0x0009949c ldr r4, [sp, 0x20] | r4 = var_20h;
0x0009949e mov r3, r5 | r3 = r5;
0x000994a0 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000994a2 movs r1, 1 | r1 = 1;
0x000994a4 mov r0, r4 | r0 = r4;
0x000994a6 blx 0x84e8 | fcn_000084e8 ();
0x000994aa mov r0, r4 | r0 = r4;
0x000994ac blx 0x8728 | fcn_00008728 ();
0x000994b0 ldr r2, [pc, 0x12c] |
0x000994b2 ldr r3, [pc, 0x124] | r3 = *(0x995da);
0x000994b4 add r2, pc | r2 = 0x132a98;
0x000994b6 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000994b8 ldr r2, [r3] | r2 = imp.sinh;
0x000994ba ldr r3, [sp, 0x34] | r3 = var_34h;
0x000994bc eors r2, r3 | r2 ^= r3;
0x000994be mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000994c2 bne.w 0x995d0 | goto label_17;
| }
0x000994c6 mov r0, r4 | r0 = r4;
0x000994c8 add sp, 0x3c |
0x000994ca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000994ce b.w 0x81f4 | void (*0x81f4)() ();
| label_11:
0x000994d2 cmp.w sb, 0 |
| if (sb == 0) {
0x000994d6 beq 0x99444 | goto label_0;
| }
0x000994d8 ldr.w r0, [sb, r4, lsl 2] | offset_1 = r4 << 2;
| r0 = *((sb + offset_1));
0x000994dc blx 0x82e8 | r0 = fcn_000082e8 ();
0x000994e0 mov r7, r0 | r7 = r0;
0x000994e2 ldr.w r0, [sb, r4, lsl 2] | offset_2 = r4 << 2;
| r0 = *((sb + offset_2));
0x000994e6 blx 0x87e4 | fcn_000087e4 ();
0x000994ea str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x000994ee mov r2, r0 | r2 = r0;
0x000994f0 cmp r7, 0 |
| if (r7 != 0) {
0x000994f2 bne 0x99402 | goto label_1;
| }
| label_12:
0x000994f4 mov r0, r7 | r0 = r7;
0x000994f6 mov r3, r7 | r3 = r7;
0x000994f8 b 0x9941a | goto label_2;
| label_13:
0x000994fa mov r7, sl | r7 = sl;
0x000994fc movw r3, 0x10b | r3 = 0x10b;
| label_7:
0x00099500 ldrd r2, r1, [r7, 0x10] | __asm ("ldrd r2, r1, [r7, 0x10]");
0x00099504 mov r0, r8 | r0 = r8;
0x00099506 str r3, [sp, 0xc] | var_ch = r3;
0x00099508 subs r2, 1 | r2--;
0x0009950a adc r1, r1, -1 | __asm ("adc r1, r1, -1");
0x0009950e strd r2, r1, [r7, 0x10] | __asm ("strd r2, r1, [r7, 0x10]");
0x00099512 blx 0x81f8 | fcn_000081f8 ();
0x00099516 ldr r3, [sp, 0xc] | r3 = var_ch;
| do {
| label_4:
0x00099518 ldr r1, [pc, 0xc8] |
0x0009951a ldr r2, [pc, 0xbc] | r2 = *(0x995da);
0x0009951c add r1, pc | r1 = 0x132b04;
0x0009951e ldr r2, [r1, r2] | r2 = imp.sinh;
0x00099520 ldr r1, [r2] | r1 = imp.sinh;
0x00099522 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00099524 eors r1, r2 | r1 ^= r2;
0x00099526 mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x0009952a bne 0x995d0 | goto label_17;
| }
0x0009952c mov r0, r3 | r0 = r3;
0x0009952e add sp, 0x3c |
0x00099530 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x00099534 movs r1, 1 | r1 = 1;
0x00099536 bl 0x95c6c | r0 = fcn_00095c6c (r0, r1);
0x0009953a mov r3, r0 | r3 = r0;
0x0009953c cmp r0, 0 |
0x0009953e bne 0x99518 |
| } while (r0 != 0);
0x00099540 movs r3, 0 | r3 = 0;
0x00099542 ldr r6, [r7] | r6 = *(r7);
0x00099544 mov r8, r3 | r8 = r3;
0x00099546 str r3, [sp, 0x24] | var_24h = r3;
0x00099548 cmp.w sb, 0 |
| if (sb != 0) {
0x0009954c bne.w 0x993a0 | goto label_3;
| }
| label_9:
0x00099550 mov r3, sb | r3 = sb;
0x00099552 add r2, sp, 0x24 | r2 += var_24h;
0x00099554 movs r1, 2 | r1 = 2;
0x00099556 mov r0, r7 | r0 = r7;
0x00099558 bl 0x7bff8 | r0 = fcn_0007bff8 (r0, r1, r2, r3, r4, r5, r6);
0x0009955c mov r3, r0 | r3 = r0;
0x0009955e cmp r0, 0 |
| if (r0 != 0) {
0x00099560 bne 0x99518 | goto label_4;
| }
0x00099562 ldr.w r8, [sp, 0x24] | r8 = var_24h;
0x00099566 mov r3, r5 | r3 = r5;
0x00099568 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0009956a movs r1, 1 | r1 = 1;
0x0009956c mov r0, r8 | r0 = r8;
0x0009956e blx 0x84e8 | fcn_000084e8 ();
0x00099572 mov r0, r8 | r0 = r8;
0x00099574 blx 0x8728 | r0 = fcn_00008728 ();
0x00099578 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0009957a beq.w 0x993a0 | goto label_3;
| }
0x0009957e b 0x9946a | goto label_5;
| label_15:
0x00099580 movw r3, 0x10b | r3 = 0x10b;
0x00099584 mov r0, r8 | r0 = r8;
0x00099586 str r3, [sp, 0xc] | var_ch = r3;
0x00099588 blx 0x81f8 | fcn_000081f8 ();
0x0009958c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0009958e b 0x99518 | goto label_4;
| label_16:
0x00099590 add r6, sp, 0x20 | r6 += var_20h;
0x00099592 movs r3, 0 | r3 = 0;
0x00099594 mov r2, r6 | r2 = r6;
0x00099596 movs r1, 7 | r1 = 7;
0x00099598 mov r0, r7 | r0 = r7;
0x0009959a bl 0x7bff8 | r0 = fcn_0007bff8 (r0, r1, r2, r3, r4, r5, r6);
0x0009959e mov r3, r0 | r3 = r0;
0x000995a0 cmp r0, 0 |
| if (r0 != 0) {
0x000995a2 bne 0x99518 | goto label_4;
| }
0x000995a4 ldr r4, [sp, 0x20] | r4 = var_20h;
0x000995a6 mov r3, r5 | r3 = r5;
0x000995a8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000995aa movs r1, 1 | r1 = 1;
0x000995ac mov r0, r4 | r0 = r4;
0x000995ae blx 0x84e8 | fcn_000084e8 ();
0x000995b2 mov r0, r4 | r0 = r4;
0x000995b4 blx 0x8728 | fcn_00008728 ();
0x000995b8 mov r0, r4 | r0 = r4;
0x000995ba blx 0x81f8 | fcn_000081f8 ();
0x000995be ldr.w r2, [sl, 0x20] | r2 = *((sl + 0x20));
0x000995c2 mov r3, r0 | r3 = r0;
0x000995c4 orrs r2, r0 | r2 |= r0;
| if (r2 != r0) {
0x000995c6 bne 0x99518 | goto label_4;
| }
0x000995c8 b 0x9948a | goto label_6;
| label_14:
0x000995ca mov r3, r0 | r3 = r0;
0x000995cc mov r7, sl | r7 = sl;
0x000995ce b 0x99500 | goto label_7;
| label_17:
0x000995d0 blx 0x883c | fcn_0000883c ();
0x000995d4 vld4.8 {d0, d1, d2, d3}, [r4], r2 | __asm ("vld4.8 {d0, d1, d2, d3}, [r4], r2");
0x000995d8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000995da movs r0, r0 |
0x000995dc asrs r7, r0, 1 | r7 = r0 >> 1;
0x000995de invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x995e8 */
| #include <stdint.h>
|
; (fcn) fcn.000995e8 () | void fcn_000995e8 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int32_t var_20h_2;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000995e8 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x000995ec sub sp, 0x34 |
0x000995ee str r2, [sp, 8] | var_8h = r2;
0x000995f0 mov sb, r3 | sb = r3;
0x000995f2 mov r5, r0 | r5 = r0;
0x000995f4 mov r8, r1 | r8 = r1;
0x000995f6 ldr r2, [pc, 0x164] |
0x000995f8 add r6, sp, 0x20 | r6 += var_20h;
0x000995fa ldr r3, [pc, 0x164] | r3 = *(0x99762);
0x000995fc ldr.w sl, [r0, 8] | sl = *((r0 + 8));
0x00099600 add r2, pc | r2 = 0x132d62;
0x00099602 ldr r4, [r0] | r4 = *(r0);
0x00099604 ldr r3, [r2, r3] |
0x00099606 ldr r3, [r3] | r3 = imp.sinh;
0x00099608 str r3, [sp, 0x2c] | var_2ch = r3;
0x0009960a mov.w r3, 0 | r3 = 0;
0x0009960e movs r3, 0 | r3 = 0;
0x00099610 str r0, [sp, 0x14] | var_14h = r0;
0x00099612 strd r3, r3, [sp, 0x20] | __asm ("strd r3, r3, [var_20h]");
0x00099616 str r3, [sp, 0x28] | var_28h = r3;
0x00099618 cmp.w sl, 0 |
| if (sl == 0) {
0x0009961c beq.w 0x99730 | goto label_3;
| }
| label_2:
0x00099620 mov r3, sb | r3 = sb;
0x00099622 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00099624 ldr r2, [sp, 8] | r2 = var_8h;
0x00099626 movs r1, 0 | r1 = 0;
0x00099628 bl 0x9929c | fcn_0009929c (r0, r1, r2, r3);
0x0009962c movs r3, 0 | r3 = 0;
0x0009962e mov r7, r0 | r7 = r0;
0x00099630 str r0, [sp, 0x10] | var_10h = r0;
0x00099632 str r3, [sp, 0x18] | var_18h = r3;
0x00099634 cmp r0, 0 |
| if (r0 != 0) {
0x00099636 bne.w 0x99744 | goto label_4;
| }
0x0009963a ldr.w fp, [pc, 0x128] | fp = *(0x00099764);
0x0009963e mov r3, r0 | r3 = r0;
0x00099640 add.w sl, sp, 0x14 | sl += var_14h;
0x00099644 str.w sb, [sp, 0xc] | __asm ("str.w sb, [var_ch]");
0x00099648 add fp, pc |
0x0009964a b 0x99682 |
| while (r2 != 0) {
0x0009964c movs r2, 0 | r2 = 0;
0x0009964e mov r3, r2 | r3 = r2;
| label_0:
0x00099650 mov r1, r6 | r1 = r6;
0x00099652 add r0, sp, 0x10 | r0 += var_10h;
0x00099654 bl 0x4b30c | fcn_0004b30c (r0, r1, r2, r3);
0x00099658 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0009965a ldr.w ip, [r5, 0x18] | ip = *((r5 + 0x18));
0x0009965e ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x00099660 ldr.w r2, [ip, r3, lsl 3] | offset_0 = r3 << 3;
| r2 = *((ip + offset_0));
0x00099664 add.w r1, ip, r3, lsl 3 | r1 = ip + (r3 << 3);
0x00099668 ldr.w lr, [r1, 4] |
0x0009966c adds r2, r2, r0 | r2 += r0;
0x0009966e str.w r2, [ip, r3, lsl 3] | __asm ("str.w r2, [ip, r3, lsl 3]");
0x00099672 add.w r3, r3, 1 | r3++;
0x00099676 adc.w r2, lr, r0, asr 31 | __asm ("adc.w r2, lr, r0, asr 31");
0x0009967a ldr r0, [sp, 0x10] | r0 = var_10h;
0x0009967c str r2, [r1, 4] | *((r1 + 4)) = r2;
0x0009967e str r3, [sp, 0x18] | var_18h = r3;
| if (r0 != 0) {
0x00099680 cbnz r0, 0x996d0 | goto label_5;
| }
0x00099682 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00099684 cmp r2, r3 |
| if (r2 <= r3) {
0x00099686 ble 0x99704 | goto label_6;
| }
0x00099688 ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x0009968a str r7, [sp, 0x1c] | var_1ch = r7;
0x0009968c ldrb r2, [r2, r3] | r2 = *((r2 + r3));
0x0009968e cmp r2, 0 |
0x00099690 bne 0x9964c |
| }
0x00099692 adds r3, 2 | r3 += 2;
0x00099694 ldr.w r0, [r8, r3, lsl 2] | offset_1 = r3 << 2;
| r0 = *((r8 + offset_1));
0x00099698 blx 0x82e8 | fcn_000082e8 ();
0x0009969c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0009969e mov sb, r0 | sb = r0;
0x000996a0 adds r3, 2 | r3 += 2;
0x000996a2 ldr.w r0, [r8, r3, lsl 2] | offset_2 = r3 << 2;
| r0 = *((r8 + offset_2));
0x000996a6 blx 0x87e4 | r0 = fcn_000087e4 ();
0x000996aa mov r2, r0 | r2 = r0;
0x000996ac mov r0, sb | r0 = sb;
0x000996ae cmp.w sb, 0 |
| if (sb != 0) {
0x000996b2 beq 0x996c8 |
0x000996b4 ldrd r0, r1, [r4, 0x38] | __asm ("ldrd r0, r1, [r4, 0x38]");
0x000996b8 mov r3, sb | r3 = sb;
0x000996ba strd r2, fp, [sp] | __asm ("strd r2, fp, [sp]");
0x000996be movs r2, 4 | r2 = 4;
0x000996c0 ldr.w sb, [r1, 8] | sb = *((r1 + 8));
0x000996c4 mov r1, sl | r1 = sl;
0x000996c6 blx sb | sb (r0, r1, r2, r3);
| }
0x000996c8 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000996ca str r0, [sp, 0x10] | var_10h = r0;
0x000996cc asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000996ce b 0x99650 | goto label_0;
| label_5:
0x000996d0 ldrd r3, r2, [r5, 0x10] | __asm ("ldrd r3, r2, [r5, 0x10]");
0x000996d4 mov r7, r0 | r7 = r0;
0x000996d6 ldr r4, [sp, 0x20] | r4 = var_20h;
0x000996d8 adds r3, 1 | r3++;
0x000996da adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x000996de strd r3, r2, [r5, 0x10] | __asm ("strd r3, r2, [r5, 0x10]");
| do {
| label_1:
0x000996e2 mov r0, r4 | r0 = r4;
0x000996e4 blx 0x8404 | fcn_00008404 ();
0x000996e8 ldr r2, [pc, 0x7c] |
0x000996ea ldr r3, [pc, 0x74] | r3 = *(0x99762);
0x000996ec add r2, pc | r2 = 0x132e58;
0x000996ee ldr r3, [r2, r3] | r3 = imp.sinh;
0x000996f0 ldr r2, [r3] | r2 = imp.sinh;
0x000996f2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000996f4 eors r2, r3 | r2 ^= r3;
0x000996f6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000996fa bne 0x99756 | goto label_7;
| }
0x000996fc mov r0, r7 | r0 = r7;
0x000996fe add sp, 0x34 |
0x00099700 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x00099704 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00099706 ldr.w sb, [sp, 0xc] | sb = var_ch;
0x0009970a ldr r4, [sp, 0x20] | r4 = var_20h;
0x0009970c adds r3, 1 | r3++;
0x0009970e str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x00099710 ldr r3, [r5] | r3 = *(r5);
0x00099712 ldr r7, [r3, 0x2c] | r7 = *((r3 + 0x2c));
0x00099714 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00099716 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009971a str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x0009971c cmp r7, 0 |
0x0009971e beq 0x996e2 |
| } while (r7 == 0);
0x00099720 ldr r2, [sp, 8] | r2 = var_8h;
0x00099722 mov r3, sb | r3 = sb;
0x00099724 mov r0, r5 | r0 = r5;
0x00099726 str r6, [sp] | *(sp) = r6;
0x00099728 bl 0x88068 | r0 = fcn_00088068 (r0, r1, r2, r3);
0x0009972c mov r7, r0 | r7 = r0;
0x0009972e b 0x996e2 | goto label_1;
| label_3:
0x00099730 movs r1, 1 | r1 = 1;
0x00099732 bl 0x95c6c | r0 = fcn_00095c6c (r0, r1);
0x00099736 mov r7, r0 | r7 = r0;
0x00099738 str r0, [sp, 0x10] | var_10h = r0;
0x0009973a cmp r0, 0 |
| if (r0 == 0) {
0x0009973c beq.w 0x99620 | goto label_2;
| }
0x00099740 str.w sl, [sp, 0x18] | __asm ("str.w sl, [var_18h]");
| label_4:
0x00099744 ldrd r3, r2, [r5, 0x10] | __asm ("ldrd r3, r2, [r5, 0x10]");
0x00099748 movs r4, 0 | r4 = 0;
0x0009974a adds r3, 1 | r3++;
0x0009974c adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x00099750 strd r3, r2, [r5, 0x10] | __asm ("strd r3, r2, [r5, 0x10]");
0x00099754 b 0x996e2 | goto label_1;
| label_7:
0x00099756 blx 0x883c | fcn_0000883c ();
0x0009975a nop |
0x0009975c invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9976c */
| #include <stdint.h>
|
; (fcn) fcn.0009976c () | void fcn_0009976c (int16_t arg_98h, int16_t arg_9ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009976c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00099770 mov r5, r0 | r5 = r0;
0x00099772 ldr.w r0, [pc, 0x74c] | r0 = *(0x00099ec0);
0x00099776 mov r6, r2 | r6 = r2;
0x00099778 sub sp, 0x74 |
0x0009977a adds r4, r6, 1 | r4 = r6 + 1;
0x0009977c ldr.w r2, [pc, 0x744] |
0x00099780 mov fp, r3 |
0x00099782 add r0, pc | r0 += pc;
0x00099784 mov.w r3, 0 | r3 = 0;
0x00099788 ldr.w sl, [r5] | sl = *(r5);
0x0009978c ldr r2, [r0, r2] | r2 = *((r0 + r2));
0x0009978e ldr r2, [r2] | r2 = *(0x99ec4);
0x00099790 str r2, [sp, 0x6c] | var_6ch = r2;
0x00099792 mov.w r2, 0 | r2 = 0;
0x00099796 ldr r2, [sp, 0x98] | r2 = *(arg_98h);
0x00099798 str r3, [sp, 0x50] | var_50h = r3;
0x0009979a str r2, [sp, 0x1c] | var_1ch = r2;
0x0009979c ldr r2, [sp, 0x9c] | r2 = *(arg_9ch);
0x0009979e str r2, [sp, 0x20] | var_20h = r2;
| if (r4 != r6) {
0x000997a0 bne 0x9986c | goto label_26;
| }
0x000997a2 ldr.w r0, [sl, 0x18] | r0 = *((sl + 0x18));
0x000997a6 ands sb, fp, 1 | sb = fp & 1;
0x000997aa itt eq |
| if (sb != fp) {
0x000997ac moveq r6, sb | r6 = sb;
| }
| if (sb != fp) {
0x000997ae moveq r7, sb | r7 = sb;
| }
0x000997b0 mov r1, r0 | r1 = r0;
| if (sb == fp) {
0x000997b2 beq 0x997ea | goto label_4;
| }
0x000997b4 mov r7, r4 | r7 = r4;
0x000997b6 mov ip, r4 |
| label_6:
0x000997b8 cmp r1, 0 |
0x000997ba mov r0, r1 | r0 = r1;
| if (r1 <= 0) {
0x000997bc ble.w 0x998f8 | goto label_27;
| }
0x000997c0 ldr.w r2, [sl, 0x1c] | r2 = *((sl + 0x1c));
0x000997c4 mov.w sb, 1 | sb = 1;
0x000997c8 movs r6, 0 | r6 = 0;
0x000997ca add.w lr, ip, sb | lr = ip + sb;
0x000997ce subs r2, 4 | r2 -= 4;
0x000997d0 b 0x997e2 |
| while (r3 != ip) {
0x000997d2 cmp lr, r3 |
0x000997d4 it eq |
| if (lr != r3) {
0x000997d6 moveq r6, sb | r6 = sb;
| }
0x000997d8 add.w sb, sb, 1 | sb++;
0x000997dc cmp sb, r1 |
| if (sb > r1) {
0x000997de bgt.w 0x998fa | goto label_28;
| }
0x000997e2 ldr r3, [r2, 4]! | r3 = *((r2 += 4));
0x000997e6 cmp r3, ip |
0x000997e8 bne 0x997d2 |
| }
| label_4:
0x000997ea cmp sb, r0 |
| if (sb > r0) {
0x000997ec bgt.w 0x998fa | goto label_28;
| }
0x000997f0 mov r0, r5 | r0 = r5;
0x000997f2 add.w sb, sb, 0x30 | sb += 0x30;
0x000997f6 bl 0x95644 | fcn_00095644 (r0);
0x000997fa strb.w sb, [r7] | *(r7) = sb;
0x000997fe mov r6, r0 | r6 = r0;
0x00099800 cmp r0, 0 |
| if (r0 == 0) {
0x00099802 beq.w 0x99a1c | goto label_29;
| }
0x00099806 add r1, sp, 0x50 | r1 += var_50h;
0x00099808 str r4, [sp, 4] | var_4h = r4;
0x0009980a str r1, [sp, 0x10] | var_10h = r1;
0x0009980c movs r4, 0 | r4 = 0;
0x0009980e mov.w r1, -1 | r1 = -1;
0x00099812 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00099814 strd r1, r4, [sp, 8] | __asm ("strd r1, r4, [var_ch]");
0x00099818 orr r2, fp, 0x10 | r2 = fp | 0x10;
0x0009981c mov r1, r0 | r1 = r0;
0x0009981e str r7, [sp] | *(sp) = r7;
0x00099820 mov r0, r5 | r0 = r5;
0x00099822 bl 0x976a0 | fcn_000976a0 (r0, r1, r2, r3, r4, r5, r6);
0x00099826 ldr r3, [r6] | r3 = *(r6);
0x00099828 subs r3, 1 | r3--;
0x0009982a cmp r3, r4 |
0x0009982c str r3, [r6] | *(r6) = r3;
| if (r3 <= r4) {
0x0009982e ble.w 0x99bd8 | goto label_30;
| }
| label_12:
0x00099832 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00099834 ldr r6, [sp, 0x50] | r6 = var_50h;
0x00099836 cmp r3, 0 |
| if (r3 != 0) {
0x00099838 bne.w 0x99bd2 | goto label_31;
| }
| label_3:
0x0009983c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0009983e mov r0, r7 | r0 = r7;
0x00099840 str r6, [r3] | *(r3) = r6;
0x00099842 blx 0x8404 | fcn_00008404 ();
0x00099846 ldr r0, [r5, 0x24] | r0 = *((r5 + 0x24));
| label_0:
0x00099848 movs r3, 0 | r3 = 0;
0x0009984a ldr.w r2, [pc, 0x67c] |
0x0009984e str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
0x00099850 ldr.w r3, [pc, 0x670] | r3 = *(0x99ec4);
0x00099854 add r2, pc | r2 = 0x133722;
0x00099856 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00099858 ldr r2, [r3] | r2 = imp.sinh;
0x0009985a ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009985c eors r2, r3 | r2 ^= r3;
0x0009985e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00099862 bne.w 0x99e9e | goto label_32;
| }
0x00099866 add sp, 0x74 |
0x00099868 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_26:
0x0009986c cmp r4, 0x40 |
0x0009986e mov r8, r1 | r8 = r1;
0x00099870 mov.w r2, 0x40 | r2 = 0x40;
| if (r4 < 0x40) {
0x00099874 bls 0x99882 | goto label_33;
| }
| do {
0x00099876 adds r2, r2, r2 | r2 += r2;
0x00099878 adcs r3, r3 | __asm ("adcs r3, r3");
0x0009987a cmp r2, r4 |
0x0009987c sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x00099880 blo 0x99876 |
| } while (r2 <= r4);
| label_33:
0x00099882 movs r0, 0 | r0 = 0;
0x00099884 blx 0x8500 | r0 = fcn_00008500 ();
0x00099888 mov r7, r0 | r7 = r0;
0x0009988a movs r0, 7 | r0 = 7;
0x0009988c cmp r7, 0 |
| if (r7 == 0) {
0x0009988e beq 0x99848 | goto label_0;
| }
0x00099890 cmp r6, 0 |
0x00099892 and sb, fp, 1 | sb = fp & 1;
| if (r6 <= 0) {
0x00099896 ble.w 0x99a82 | goto label_34;
| }
0x0009989a mov r2, r6 | r2 = r6;
0x0009989c mov r1, r8 | r1 = r8;
0x0009989e adds r0, r7, 1 | r0 = r7 + 1;
0x000998a0 blx 0x8610 | fcn_00008610 ();
0x000998a4 cmp.w sb, 0 |
| if (sb == 0) {
0x000998a8 beq.w 0x99a36 | goto label_35;
| }
0x000998ac mov.w ip, 0 |
0x000998b0 add.w lr, r8, -1 | lr = r8 + -1;
0x000998b4 add lr, r6 | lr += r6;
0x000998b6 mov r3, ip | r3 = ip;
0x000998b8 rsb.w sb, r8, 1 | sb = 1 - r8;
0x000998bc b 0x998c8 |
| while (r1 < 0xbf) {
| label_1:
0x000998be cmp r6, r3 |
0x000998c0 add.w ip, ip, 1 |
| if (r6 <= r3) {
0x000998c4 ble.w 0x99a5c | goto label_36;
| }
0x000998c8 ldrb.w r1, [r8, r3] | r1 = *((r8 + r3));
0x000998cc adds r2, r3, 1 | r2 = r3 + 1;
0x000998ce add r3, r8 | r3 += r8;
0x000998d0 cmp r1, 0xbf |
0x000998d2 it ls |
| if (r1 > 0xbf) {
0x000998d4 movls r3, r2 | r3 = r2;
| }
0x000998d6 bls 0x998be |
| }
0x000998d8 cmp r6, r2 |
| if (r6 > r2) {
0x000998da bgt 0x998e4 | goto label_37;
| }
0x000998dc b 0x99a58 | goto label_38;
| do {
0x000998de cmp r3, lr |
| if (r3 == lr) {
0x000998e0 beq.w 0x99a58 | goto label_38;
| }
| label_37:
0x000998e4 mov r2, r3 | r2 = r3;
0x000998e6 ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x000998ea and r1, r1, 0xc0 | r1 &= 0xc0;
0x000998ee cmp r1, 0x80 |
0x000998f0 beq 0x998de |
| } while (r1 == 0x80);
0x000998f2 add.w r3, sb, r2 | r3 = sb + r2;
0x000998f6 b 0x998be | goto label_1;
| label_27:
0x000998f8 movs r6, 0 | r6 = 0;
| label_28:
0x000998fa ldr r3, [r5] | r3 = *(r5);
0x000998fc ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x000998fe cmp r3, 1 |
0x00099900 str r3, [sp, 0x2c] | var_2ch = r3;
| if (r3 == 1) {
0x00099902 beq.w 0x99a3e | goto label_39;
| }
0x00099906 ldr.w r3, [pc, 0x5c4] | r3 = *(0x00099ecc);
0x0009990a mov.w sb, 0x5a0 | sb = 0x5a0;
0x0009990e add r3, pc | r3 += pc;
0x00099910 str r3, [sp, 0x3c] | var_3ch = r3;
0x00099912 ldr.w r3, [pc, 0x5bc] | r3 = *(0x00099ed0);
0x00099916 add r3, pc | r3 += pc;
0x00099918 str r3, [sp, 0x28] | var_28h = r3;
0x0009991a movs r3, 0xf | r3 = 0xf;
0x0009991c str r3, [sp, 0x2c] | var_2ch = r3;
0x0009991e movs r3, 0x78 | r3 = 0x78;
0x00099920 str r3, [sp, 0x24] | var_24h = r3;
| label_5:
0x00099922 ldr.w sl, [r5, 0x24] | sl = *((r5 + 0x24));
0x00099926 add.w r3, r5, 0x24 | r3 = r5 + 0x24;
0x0009992a str r3, [sp, 0x38] | var_38h = r3;
0x0009992c cmp.w sl, 0 |
| if (sl != 0) {
0x00099930 bne.w 0x99a66 | goto label_40;
| }
0x00099934 mov r0, sb | r0 = sb;
0x00099936 mov r1, sl | r1 = sl;
0x00099938 blx 0x8240 | fcn_00008240 ();
0x0009993c str r0, [sp, 0x34] | var_34h = r0;
0x0009993e cmp r0, 0 |
| if (r0 == 0) {
0x00099940 beq.w 0x99a62 | goto label_41;
| }
0x00099944 mov r2, sb | r2 = sb;
0x00099946 mov r1, sl | r1 = sl;
0x00099948 blx 0x839c | fcn_0000839c ();
0x0009994c mov r0, r5 | r0 = r5;
0x0009994e bl 0x95644 | r0 = fcn_00095644 (r0);
0x00099952 mov sb, r0 | sb = r0;
0x00099954 cmp r0, 0 |
| if (r0 == 0) {
0x00099956 beq.w 0x99d60 | goto label_42;
| }
0x0009995a movs r3, 1 | r3 = 1;
0x0009995c str.w sl, [sp, 0x54] | __asm ("str.w sl, [var_54h]");
0x00099960 str r3, [sp, 0x58] | var_58h = r3;
0x00099962 add r3, sp, 0x60 | r3 += var_60h;
0x00099964 strd sl, sl, [sp, 0x60] | __asm ("strd sl, sl, [var_64h]");
0x00099968 str.w sl, [sp, 0x68] | __asm ("str.w sl, [var_68h]");
0x0009996c str r3, [sp, 0x30] | var_30h = r3;
0x0009996e cmp r6, 0 |
| if (r6 != 0) {
0x00099970 bne.w 0x99c26 | goto label_43;
| }
0x00099974 add r3, sp, 0x54 | r3 += var_54h;
0x00099976 strd r6, r6, [sp, 0x44] | __asm ("strd r6, r6, [var_44h]");
0x0009997a mov r8, r3 | r8 = r3;
| label_15:
0x0009997c mov.w r2, -1 | r2 = -1;
0x00099980 movs r1, 0 | r1 = 0;
0x00099982 adds r6, 0x30 | r6 += 0x30;
0x00099984 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00099986 strb r6, [r7] | *(r7) = r6;
0x00099988 mov r0, r5 | r0 = r5;
0x0009998a strd r2, r1, [sp, 8] | __asm ("strd r2, r1, [var_ch]");
0x0009998e movs r2, 0x38 | r2 = 0x38;
0x00099990 mov r1, sb | r1 = sb;
0x00099992 str.w r8, [sp, 0x10] | __asm ("str.w r8, [var_10h]");
0x00099996 strd r7, r4, [sp] | __asm ("strd r7, r4, [sp]");
0x0009999a bl 0x976a0 | fcn_000976a0 (r0, r1, r2, r3, r4, r5, r6);
0x0009999e ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x000999a0 ldr r1, [sp, 0x54] | r1 = var_54h;
0x000999a2 str r1, [sp, 0x40] | var_40h = r1;
0x000999a4 cmp r2, 0 |
| if (r2 == 0) {
0x000999a6 beq.w 0x99bfe | goto label_44;
| }
| label_13:
0x000999aa ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000999ac mov.w r8, 0 | r8 = 0;
0x000999b0 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000999b2 mov r4, r8 | r4 = r8;
0x000999b4 str r7, [sp, 0x2c] | var_2ch = r7;
0x000999b6 str.w fp, [sp, 0x44] | __asm ("str.w fp, [var_44h]");
0x000999ba mov fp, r3 |
0x000999bc add.w sl, r3, r3, lsl 1 | sl = r3 + (r3 << 1);
0x000999c0 str.w sb, [sp, 0x3c] | __asm ("str.w sb, [var_3ch]");
0x000999c4 lsl.w r1, sl, 2 | r1 = sl << 2;
0x000999c8 mov sl, r0 | sl = r0;
0x000999ca mov r7, r1 | r7 = r1;
0x000999cc adds r6, r0, r1 | r6 = r0 + r1;
0x000999ce str r6, [sp, 0x1c] | var_1ch = r6;
| label_2:
0x000999d0 mov sb, r8 | sb = r8;
| if (r2 == 0) {
0x000999d2 cbnz r2, 0x999e0 |
0x000999d4 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000999d6 mov r3, sl | r3 = sl;
0x000999d8 ldr r6, [sp, 0x28] | r6 = var_28h;
0x000999da mov r2, fp | r2 = fp;
0x000999dc mov r0, r5 | r0 = r5;
0x000999de blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
0x000999e0 add r8, fp | r8 += fp;
0x000999e2 cmp r8, sb |
0x000999e4 itt gt |
| if (r8 <= sb) {
0x000999e6 ldrgt r6, [sp, 0x1c] | r6 = var_1ch;
| }
| if (r8 <= sb) {
0x000999e8 movgt sb, sl | sb = sl;
| }
| if (r8 <= sb) {
0x000999ea ble 0x99a0a | goto label_45;
| }
| do {
0x000999ec ldr.w r0, [sb] | r0 = *(sb);
0x000999f0 add.w sb, sb, 0xc | sb += 0xc;
0x000999f4 blx 0x8404 | fcn_00008404 ();
0x000999f8 str r4, [sb, -0xc] | *((sb - 0xc)) = r4;
0x000999fc str r4, [sb, -0x8] | *((sb - 0x8)) = r4;
0x00099a00 str r4, [sb, -0x4] | *((sb - 0x4)) = r4;
0x00099a04 cmp r6, sb |
0x00099a06 bne 0x999ec |
| } while (r6 != sb);
0x00099a08 str r6, [sp, 0x1c] | var_1ch = r6;
| label_45:
0x00099a0a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00099a0c add sl, r7 | sl += r7;
0x00099a0e add r3, r7 | r3 += r7;
0x00099a10 str r3, [sp, 0x1c] | var_1ch = r3;
0x00099a12 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00099a14 cmp r8, r3 |
| if (r8 >= r3) {
0x00099a16 bge 0x99a94 | goto label_46;
| }
0x00099a18 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00099a1a b 0x999d0 | goto label_2;
| label_29:
0x00099a1c ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00099a1e cmp r3, 0 |
| if (r3 == 0) {
0x00099a20 beq.w 0x9983c | goto label_3;
| }
| label_7:
0x00099a24 ldr r0, [r5, 0x28] | r0 = *((r5 + 0x28));
0x00099a26 movs r3, 0 | r3 = 0;
0x00099a28 str r3, [sp, 0x50] | var_50h = r3;
| if (r0 != 0) {
0x00099a2a cbz r0, 0x99a32 |
0x00099a2c str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
0x00099a2e blx 0x8b04 | fcn_00008b04 ();
| }
0x00099a32 movs r6, 0 | r6 = 0;
0x00099a34 b 0x9983c | goto label_3;
| label_35:
0x00099a36 ldr.w r0, [sl, 0x18] | r0 = *((sl + 0x18));
| label_8:
0x00099a3a mov r6, sb | r6 = sb;
0x00099a3c b 0x997ea | goto label_4;
| label_39:
0x00099a3e ldr.w r3, [pc, 0x494] | r3 = *(0x00099ed4);
0x00099a42 mov.w sb, 0x180 | sb = 0x180;
0x00099a46 add r3, pc | r3 += pc;
0x00099a48 str r3, [sp, 0x3c] | var_3ch = r3;
0x00099a4a ldr.w r3, [pc, 0x48c] | r3 = *(0x00099ed8);
0x00099a4e add r3, pc | r3 += pc;
0x00099a50 str r3, [sp, 0x28] | var_28h = r3;
0x00099a52 movs r3, 0x20 | r3 = 0x20;
0x00099a54 str r3, [sp, 0x24] | var_24h = r3;
0x00099a56 b 0x99922 | goto label_5;
| label_38:
0x00099a58 add.w ip, ip, 1 |
| label_36:
0x00099a5c ldr.w r1, [sl, 0x18] | r1 = *((sl + 0x18));
0x00099a60 b 0x997b8 | goto label_6;
| label_41:
0x00099a62 movs r3, 7 | r3 = 7;
0x00099a64 str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
| label_40:
0x00099a66 mov r0, r5 | r0 = r5;
0x00099a68 bl 0x95644 | r0 = fcn_00095644 (r0);
0x00099a6c mov sb, r0 | sb = r0;
0x00099a6e cmp r0, 0 |
| if (r0 != 0) {
0x00099a70 bne 0x99b3c | goto label_47;
| }
| label_9:
0x00099a72 movs r0, 0 | r0 = 0;
0x00099a74 blx 0x8404 | fcn_00008404 ();
| label_10:
0x00099a78 ldr r6, [r5, 0x24] | r6 = *((r5 + 0x24));
0x00099a7a cmp r6, 0 |
| if (r6 == 0) {
0x00099a7c beq.w 0x9983c | goto label_3;
| }
0x00099a80 b 0x99a24 | goto label_7;
| label_34:
0x00099a82 ldr.w r0, [sl, 0x18] | r0 = *((sl + 0x18));
0x00099a86 mov r1, r0 | r1 = r0;
0x00099a88 cmp.w sb, 0 |
| if (sb == 0) {
0x00099a8c beq 0x99a3a | goto label_8;
| }
0x00099a8e mov.w ip, 0 |
0x00099a92 b 0x997b8 | goto label_6;
| label_46:
0x00099a94 ldrd r3, fp, [sp, 0x40] | __asm ("ldrd r3, fp, [var_44h]");
0x00099a98 ldr r7, [sp, 0x2c] | r7 = var_2ch;
0x00099a9a ldr.w sb, [sp, 0x3c] | sb = var_3ch;
| if (r3 != 0) {
0x00099a9e cbz r3, 0x99aa6 |
0x00099aa0 mov r0, r3 | r0 = r3;
0x00099aa2 bl 0x17d50 | fcn_00017d50 (r0);
| }
0x00099aa6 ldr.w r8, [r5, 0x24] | r8 = *((r5 + 0x24));
0x00099aaa ldr r6, [sp, 0x64] | r6 = var_64h;
0x00099aac cmp.w r8, 0 |
| if (r8 != 0) {
0x00099ab0 bne.w 0x99c22 | goto label_48;
| }
0x00099ab4 adds r6, 0x14 | r6 += 0x14;
0x00099ab6 mov r1, r8 | r1 = r8;
0x00099ab8 mov r0, r6 | r0 = r6;
0x00099aba blx 0x8240 | r0 = fcn_00008240 ();
0x00099abe mov r4, r0 | r4 = r0;
0x00099ac0 cmp r0, 0 |
| if (r0 == 0) {
0x00099ac2 beq.w 0x99c1c | goto label_49;
| }
0x00099ac6 mov r2, r6 | r2 = r6;
0x00099ac8 mov r1, r8 | r1 = r8;
0x00099aca blx 0x839c | fcn_0000839c ();
0x00099ace ldr r2, [sp, 0x64] | r2 = var_64h;
0x00099ad0 mov r3, r4 | r3 = r4;
0x00099ad2 add.w r0, r4, 0xc | r0 = r4 + 0xc;
0x00099ad6 str r0, [r3], 4 | *(r3) = r0;
| r3 += 4;
0x00099ada vdup.32 d16, r2 | __asm ("vdup.32 d16, r2");
0x00099ade vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x00099ae2 cmp r2, 0 |
| if (r2 != 0) {
0x00099ae4 bne.w 0x99d68 | goto label_50;
| }
| label_17:
0x00099ae8 movs r1, 2 | r1 = 2;
0x00099aea mov r0, r5 | r0 = r5;
0x00099aec bl 0x42654 | r0 = fcn_00042654 (r0, r1);
0x00099af0 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00099af2 cbz r0, 0x99b20 |
0x00099af4 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00099af6 mov.w r8, 1 | r8 = 1;
0x00099afa str.w r8, [r0, 0xb4] | __asm ("str.w r8, [r0, 0xb4]");
0x00099afe cmp r3, 0 |
| if (r3 > 0) {
0x00099b00 bgt.w 0x99d70 | goto label_51;
| }
0x00099b04 strb.w r8, [r0, 0x10] | *((r0 + 0x10)) = r8;
0x00099b08 ldr.w r8, [r5] | r8 = *(r5);
| label_18:
0x00099b0c ldr.w r3, [r8, 0x30] | r3 = *((r8 + 0x30));
0x00099b10 cmp r3, 1 |
| if (r3 == 1) {
0x00099b12 beq.w 0x99df0 | goto label_52;
| }
0x00099b16 ldr r3, [pc, 0x3c4] |
0x00099b18 add r3, pc | r3 = 0x1339fa;
| label_19:
0x00099b1a str.w r3, [r6, 0xd0] | __asm ("str.w r3, [r6, 0xd0]");
0x00099b1e str r6, [sp, 0x50] | var_50h = r6;
| }
0x00099b20 mov r0, r4 | r0 = r4;
0x00099b22 blx 0x8404 | fcn_00008404 ();
| label_14:
0x00099b26 ldr r0, [sp, 0x60] | r0 = var_60h;
0x00099b28 blx 0x8404 | fcn_00008404 ();
0x00099b2c ldr.w r3, [sb] | r3 = *(sb);
0x00099b30 subs r3, 1 | r3--;
0x00099b32 cmp r3, 0 |
0x00099b34 str.w r3, [sb] | __asm ("str.w r3, [sb]");
| if (r3 > 0) {
0x00099b38 bgt 0x99b76 | goto label_53;
| }
0x00099b3a b 0x99b4c | goto label_54;
| label_47:
0x00099b3c ldr r3, [r0] | r3 = *(r0);
0x00099b3e subs r3, 1 | r3--;
0x00099b40 cmp r3, 0 |
0x00099b42 str r3, [r0] | *(r0) = r3;
0x00099b44 itt le |
| if (r3 > 0) {
0x00099b46 movle r6, 0 | r6 = 0;
| }
| if (r3 <= 0) {
0x00099b48 strle r6, [sp, 0x34] | var_34h = r6;
| goto label_55;
| }
| if (r3 > 0) {
| label_55:
0x00099b4a bgt 0x99a72 | goto label_9;
| }
| label_54:
0x00099b4c ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00099b50 cmp r3, 0 |
0x00099b52 itt gt |
| if (r3 <= 0) {
0x00099b54 movgt r8, sb | r8 = sb;
| }
| if (r3 <= 0) {
0x00099b56 movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x00099b58 ble 0x99b70 | goto label_56;
| }
| do {
0x00099b5a ldr.w r0, [r8, 0x20] | r0 = *((r8 + 0x20));
0x00099b5e adds r4, 1 | r4++;
0x00099b60 blx 0x8404 | fcn_00008404 ();
0x00099b64 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00099b68 add.w r8, r8, 0xc | r8 += 0xc;
0x00099b6c cmp r4, r3 |
0x00099b6e blt 0x99b5a |
| } while (r4 < r3);
| label_56:
0x00099b70 mov r0, sb | r0 = sb;
0x00099b72 blx 0x8404 | fcn_00008404 ();
| label_53:
0x00099b76 ldr r0, [sp, 0x34] | r0 = var_34h;
0x00099b78 blx 0x8404 | fcn_00008404 ();
0x00099b7c cmp r6, 0 |
| if (r6 == 0) {
0x00099b7e beq.w 0x99a78 | goto label_10;
| }
0x00099b82 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| if (r3 != 0) {
0x00099b84 cbnz r3, 0x99bb8 | goto label_11;
| }
0x00099b86 ldr r0, [sp, 0x38] | r0 = var_38h;
0x00099b88 mov r1, r6 | r1 = r6;
0x00099b8a bl 0x49b50 | fcn_00049b50 (r0, r1);
0x00099b8e ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| if (r3 != 0) {
0x00099b90 cbnz r3, 0x99bb8 | goto label_11;
| }
0x00099b92 ldr r3, [r6, 0x48] | r3 = *((r6 + 0x48));
0x00099b94 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x00099b96 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00099b9a lsls r3, r3, 5 | r3 <<= 5;
0x00099b9c adds r2, r6, r3 | r2 = r6 + r3;
0x00099b9e ldr r2, [r2, 0x5c] | r2 = *((r2 + 0x5c));
0x00099ba0 cmp r2, 0 |
| if (r2 == 0) {
0x00099ba2 beq.w 0x9983c | goto label_3;
| }
0x00099ba6 adds r3, 0x50 | r3 += 0x50;
0x00099ba8 mov r0, r6 | r0 = r6;
0x00099baa adds r1, r6, r3 | r1 = r6 + r3;
0x00099bac ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x00099bae blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00099bb0 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00099bb2 cmp r3, 0 |
| if (r3 == 0) {
0x00099bb4 beq.w 0x9983c | goto label_3;
| }
| label_11:
0x00099bb8 ldr r4, [r6, 0x18] | r4 = *((r6 + 0x18));
0x00099bba mov r0, r6 | r0 = r6;
0x00099bbc bl 0x17d50 | fcn_00017d50 (r0);
0x00099bc0 ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x00099bc2 cmp r0, 0 |
| if (r0 == 0) {
0x00099bc4 beq.w 0x99a24 | goto label_7;
| }
0x00099bc8 movs r3, 0 | r3 = 0;
0x00099bca str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x00099bcc blx 0x8b04 | fcn_00008b04 ();
0x00099bd0 b 0x99a24 | goto label_7;
| label_31:
0x00099bd2 cmp r6, 0 |
| if (r6 != 0) {
0x00099bd4 bne 0x99bb8 | goto label_11;
| }
0x00099bd6 b 0x99a24 | goto label_7;
| label_30:
0x00099bd8 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00099bda cmp r3, 0 |
0x00099bdc it gt |
| if (r3 <= 0) {
0x00099bde movgt r8, r6 | r8 = r6;
| }
| if (r3 <= 0) {
0x00099be0 ble 0x99bf6 | goto label_57;
| }
| do {
0x00099be2 ldr.w r0, [r8, 0x20] | r0 = *((r8 + 0x20));
0x00099be6 adds r4, 1 | r4++;
0x00099be8 blx 0x8404 | fcn_00008404 ();
0x00099bec ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00099bee add.w r8, r8, 0xc | r8 += 0xc;
0x00099bf2 cmp r4, r3 |
0x00099bf4 blt 0x99be2 |
| } while (r4 < r3);
| label_57:
0x00099bf6 mov r0, r6 | r0 = r6;
0x00099bf8 blx 0x8404 | fcn_00008404 ();
0x00099bfc b 0x99832 | goto label_12;
| label_44:
0x00099bfe ldr r0, [sp, 0x38] | r0 = var_38h;
0x00099c00 bl 0x49b50 | fcn_00049b50 (r0, r1);
0x00099c04 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00099c06 ldr.w r8, [sp, 0x40] | r8 = var_40h;
0x00099c0a cmp r2, 0 |
| if (r2 != 0) {
0x00099c0c bne.w 0x999aa | goto label_13;
| }
| label_16:
0x00099c10 ldrb.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00099c14 cmp r3, 0 |
| if (r3 == 0) {
0x00099c16 beq 0x99cd6 | goto label_58;
| }
0x00099c18 movs r2, 0 | r2 = 0;
0x00099c1a b 0x999aa | goto label_13;
| if (r6 != 0) {
| label_49:
0x00099c1c cbz r6, 0x99c22 |
0x00099c1e movs r3, 7 | r3 = 7;
0x00099c20 str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
| }
| label_48:
0x00099c22 movs r6, 0 | r6 = 0;
0x00099c24 b 0x99b26 | goto label_14;
| label_43:
0x00099c26 add r3, sp, 0x54 | r3 += var_54h;
0x00099c28 movs r2, 0x30 | r2 = 0x30;
0x00099c2a strb r2, [r7] | *(r7) = r2;
0x00099c2c mov r8, r3 | r8 = r3;
0x00099c2e str r3, [sp, 0x10] | var_10h = r3;
0x00099c30 mov.w r3, -1 | r3 = -1;
0x00099c34 mov r1, r0 | r1 = r0;
0x00099c36 str.w sl, [sp, 0xc] | __asm ("str.w sl, [var_ch]");
0x00099c3a str r3, [sp, 8] | var_8h = r3;
0x00099c3c mov r0, r5 | r0 = r5;
0x00099c3e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00099c40 strd r7, r4, [sp] | __asm ("strd r7, r4, [sp]");
0x00099c44 str.w sl, [sp, 0x5c] | __asm ("str.w sl, [var_5ch]");
0x00099c48 bl 0x976a0 | fcn_000976a0 (r0, r1, r2, r3, r4, r5, r6);
0x00099c4c ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00099c4e ldr.w sl, [sp, 0x54] | sl = var_54h;
0x00099c52 cmp r3, 0 |
| if (r3 != 0) {
0x00099c54 bne.w 0x99dd2 | goto label_59;
| }
0x00099c58 ldr r0, [sp, 0x38] | r0 = var_38h;
0x00099c5a mov r1, sl | r1 = sl;
0x00099c5c bl 0x49b50 | fcn_00049b50 (r0, r1);
0x00099c60 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00099c62 cmp r3, 0 |
| if (r3 != 0) {
0x00099c64 bne.w 0x99dd2 | goto label_59;
| }
0x00099c68 strd r3, r3, [sp, 0x44] | __asm ("strd r3, r3, [var_44h]");
| do {
0x00099c6c ldrb.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
| if (r3 != 0) {
0x00099c70 cbnz r3, 0x99cce | goto label_24;
| }
0x00099c72 ldr.w r3, [sl, 0x48] | r3 = *((sl + 0x48));
0x00099c76 mov r0, sl | r0 = sl;
0x00099c78 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x00099c7a add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00099c7e add.w r1, sl, r3, lsl 5 | r1 = sl + (r3 << 5);
0x00099c82 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x00099c86 adds r1, 0x50 | r1 += 0x50;
0x00099c88 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00099c8a ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
| if (r3 != 0) {
0x00099c8e cbz r3, 0x99cba |
0x00099c90 ldr.w r3, [sl] | r3 = *(sl);
0x00099c94 mov r0, r5 | r0 = r5;
0x00099c96 ldr r2, [sp, 0x44] | r2 = var_44h;
0x00099c98 ldr r1, [sp, 0x48] | r1 = var_48h;
0x00099c9a subs r2, r3, r2 | r2 = r3 - r2;
0x00099c9c ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00099ca0 sbc.w r3, r3, r1 | __asm ("sbc.w r3, r3, r1");
0x00099ca4 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00099ca6 strd sl, r1, [sp] | __asm ("strd sl, r1, [sp]");
0x00099caa ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x00099cac blx r1 | uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00099cae ldr.w r3, [sl] | r3 = *(sl);
0x00099cb2 str r3, [sp, 0x44] | var_44h = r3;
0x00099cb4 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00099cb8 str r3, [sp, 0x48] | var_48h = r3;
| }
0x00099cba ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
| if (r3 != 0) {
0x00099cbc cbnz r3, 0x99cce | goto label_24;
| }
0x00099cbe add r2, sp, 0x5c | r2 += var_5ch;
0x00099cc0 mov r1, sl | r1 = sl;
0x00099cc2 mov r0, r5 | r0 = r5;
0x00099cc4 bl 0x1401c | fcn_0001401c (r0, r1, r2);
0x00099cc8 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00099cca cmp r3, 0 |
0x00099ccc beq 0x99c6c |
| } while (r3 == 0);
| label_24:
0x00099cce mov r0, sl | r0 = sl;
0x00099cd0 bl 0x17d50 | fcn_00017d50 (r0);
0x00099cd4 b 0x9997c | goto label_15;
| label_58:
0x00099cd6 ldr.w r3, [r8, 0x48] | r3 = *((r8 + 0x48));
0x00099cda mov r0, r8 | r0 = r8;
0x00099cdc ldr.w r2, [r8, 0x2c] | r2 = *((r8 + 0x2c));
0x00099ce0 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x00099ce2 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00099ce6 lsls r3, r3, 5 | r3 <<= 5;
0x00099ce8 add.w r1, r3, 0x50 | r1 = r3 + 0x50;
0x00099cec add r3, r8 | r3 += r8;
0x00099cee add r1, r8 | r1 += r8;
0x00099cf0 ldrd r6, sl, [r3, 0x94] | __asm ("ldrd r6, sl, [r3, 0x94]");
0x00099cf4 blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00099cf6 ldr r3, [sp, 0x58] | r3 = var_58h;
| if (r3 != 0) {
0x00099cf8 cbz r3, 0x99d10 |
0x00099cfa cmp r4, sl |
| if (r4 > sl) {
0x00099cfc bgt.w 0x99e9a | goto label_60;
| }
0x00099d00 mov r1, r6 | r1 = r6;
0x00099d02 mov r2, r4 | r2 = r4;
0x00099d04 mov r0, r7 | r0 = r7;
0x00099d06 blx 0x8214 | r0 = sysconf ();
0x00099d0a cmp r0, 0 |
| if (r0 != 0) {
0x00099d0c bne.w 0x99e9a | goto label_60;
| }
| }
0x00099d10 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
| if (r3 != 0) {
0x00099d14 cbz r3, 0x99d44 |
0x00099d16 ldrd r2, r3, [r8] | __asm ("ldrd r2, r3, [r8]");
0x00099d1a ldr r0, [sp, 0x44] | r0 = var_44h;
0x00099d1c ldr r6, [sp, 0x48] | r6 = var_48h;
0x00099d1e cmp r0, r2 |
0x00099d20 sbcs.w r1, r6, r3 | __asm ("sbcs.w r1, r6, r3");
| if (r0 >= r2) {
0x00099d24 bge 0x99dde | goto label_61;
| }
0x00099d26 subs r2, r2, r0 | r2 -= r0;
0x00099d28 sbc.w r3, r3, r6 | __asm ("sbc.w r3, r3, r6");
| label_20:
0x00099d2c ldr r1, [sp, 0x30] | r1 = var_30h;
0x00099d2e mov r0, r5 | r0 = r5;
0x00099d30 strd r8, r1, [sp] | __asm ("strd r8, r1, [sp]");
0x00099d34 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x00099d36 blx r1 | uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00099d38 ldr.w r3, [r8] | r3 = *(r8);
0x00099d3c str r3, [sp, 0x44] | var_44h = r3;
0x00099d3e ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00099d42 str r3, [sp, 0x48] | var_48h = r3;
| }
0x00099d44 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00099d46 cmp r2, 0 |
| if (r2 != 0) {
0x00099d48 bne.w 0x999aa | goto label_13;
| }
0x00099d4c add r2, sp, 0x58 | r2 += var_58h;
0x00099d4e mov r1, r8 | r1 = r8;
0x00099d50 mov r0, r5 | r0 = r5;
0x00099d52 bl 0x1401c | fcn_0001401c (r0, r1, r2);
0x00099d56 ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00099d58 cmp r2, 0 |
| if (r2 == 0) {
0x00099d5a beq.w 0x99c10 | goto label_16;
| }
0x00099d5e b 0x999aa | goto label_13;
| label_42:
0x00099d60 ldr r0, [sp, 0x34] | r0 = var_34h;
0x00099d62 blx 0x8404 | fcn_00008404 ();
0x00099d66 b 0x99a78 | goto label_10;
| label_50:
0x00099d68 ldr r1, [sp, 0x60] | r1 = var_60h;
0x00099d6a blx 0x8610 | fcn_00008610 ();
0x00099d6e b 0x99ae8 | goto label_17;
| label_51:
0x00099d70 str.w r4, [r0, 0xbc] | __asm ("str.w r4, [r0, 0xbc]");
0x00099d74 add.w r1, r6, 0x100 | r1 = r6 + 0x100;
0x00099d78 ldr r0, [r4] | r0 = *(r4);
0x00099d7a bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00099d7e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00099d80 tst.w fp, 2 |
0x00099d84 mov.w r4, 0 | r4 = 0;
0x00099d88 str.w r0, [r6, 0xc8] | __asm ("str.w r0, [r6, 0xc8]");
0x00099d8c str.w r4, [r6, 0xcc] | __asm ("str.w r4, [r6, 0xcc]");
0x00099d90 add.w r1, r6, 0xb0 | r1 = r6 + 0xb0;
0x00099d94 str.w r3, [r6, 0xe0] | __asm ("str.w r3, [r6, 0xe0]");
0x00099d98 ldr r3, [r6, 0x48] | r3 = *((r6 + 0x48));
0x00099d9a strh.w r8, [r3, 4] | *((r3 + 4)) = r8;
| if ((fp & 2) == 0) {
0x00099d9e bne 0x99db2 |
0x00099da0 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00099da2 ldr.w r8, [r5] | r8 = *(r5);
| if (r3 == 0) {
0x00099da6 cbnz r3, 0x99dae |
0x00099da8 mov r0, r8 | r0 = r8;
0x00099daa bl 0x11ab8 | fcn_00011ab8 (r0, r1);
| }
0x00099dae movs r4, 0 | r4 = 0;
0x00099db0 b 0x99b0c | goto label_18;
| }
0x00099db2 movs r3, 3 | r3 = 3;
0x00099db4 mov r0, r5 | r0 = r5;
0x00099db6 str.w r3, [r6, 0xb4] | __asm ("str.w r3, [r6, 0xb4]");
0x00099dba str.w r8, [r6, 0x34] | __asm ("str.w r8, [r6, 0x34]");
0x00099dbe bl 0x49bf8 | fcn_00049bf8 (r0, r1);
0x00099dc2 ldr.w r3, [r6, 0xb4] | r3 = *((r6 + 0xb4));
0x00099dc6 ands r3, r3, 2 | r3 &= 2;
| if (r3 == r3) {
0x00099dca beq 0x99eb6 | goto label_62;
| }
0x00099dcc ldr r3, [pc, 0x110] |
0x00099dce add r3, pc | r3 = 0x133cb2;
0x00099dd0 b 0x99b1a | goto label_19;
| label_59:
0x00099dd2 cmp.w sl, 0 |
| if (sl != 0) {
0x00099dd6 bne 0x99e92 | goto label_63;
| }
0x00099dd8 strd sl, sl, [sp, 0x44] | __asm ("strd sl, sl, [var_44h]");
0x00099ddc b 0x9997c | goto label_15;
| label_61:
0x00099dde ldr r1, [sp, 0x64] | r1 = var_64h;
0x00099de0 cmp r1, 0 |
| if (r1 <= 0) {
0x00099de2 bgt 0x99df6 |
0x00099de4 ldr r1, [sp, 0x44] | r1 = var_44h;
0x00099de6 subs r2, r2, r1 | r2 -= r1;
0x00099de8 ldr r1, [sp, 0x48] | r1 = var_48h;
0x00099dea sbc.w r3, r3, r1 | __asm ("sbc.w r3, r3, r1");
0x00099dee b 0x99d2c | goto label_20;
| label_52:
0x00099df0 ldr r3, [pc, 0xf0] |
0x00099df2 add r3, pc | r3 = 0x133cda;
0x00099df4 b 0x99b1a | goto label_19;
| }
0x00099df6 ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x00099df8 cmp r1, 0 |
| if (r1 != 0) {
0x00099dfa bne 0x99d2c | goto label_20;
| }
0x00099dfc ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00099dfe mov sl, r1 | sl = r1;
0x00099e00 str.w r8, [sp, 0x4c] | __asm ("str.w r8, [var_4ch]");
0x00099e04 ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x00099e08 strd r4, r7, [sp, 0x44] | __asm ("strd r4, r7, [var_44h]");
0x00099e0c mov r6, r3 | r6 = r3;
0x00099e0e mov r7, r3 | r7 = r3;
| label_21:
0x00099e10 cmp sl, r6 |
| if (sl >= r6) {
0x00099e12 bge 0x99e5e | goto label_64;
| }
0x00099e14 lsl.w r0, sl, 1 | r0 = sl << 1;
0x00099e18 mov r4, sl | r4 = sl;
0x00099e1a add.w r1, r0, sl | r1 = r0 + sl;
0x00099e1e add.w r1, r8, r1, lsl 2 | r1 = r8 + (r1 << 2);
0x00099e22 b 0x99e2c |
| while (r3 != 0) {
0x00099e24 adds r4, 1 | r4++;
0x00099e26 adds r1, 0xc | r1 += 0xc;
0x00099e28 cmp r4, r6 |
| if (r4 == r6) {
0x00099e2a beq 0x99e66 | goto label_65;
| }
0x00099e2c ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00099e2e cmp r3, 0 |
0x00099e30 bne 0x99e24 |
| }
0x00099e32 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00099e34 str r3, [sp, 0x1c] | var_1ch = r3;
0x00099e36 bl 0xc96c | fcn_0000c96c (r0, r1);
0x00099e3a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00099e3c cmp r4, r6 |
0x00099e3e str r3, [sp, 0x64] | var_64h = r3;
| if (r4 == r6) {
0x00099e40 beq 0x99ea2 | goto label_66;
| }
| label_23:
0x00099e42 ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
| label_22:
0x00099e44 add sl, r7 | sl += r7;
0x00099e46 add r6, r7 | r6 += r7;
| if (r1 != 0) {
0x00099e48 cbnz r1, 0x99e50 | goto label_67;
| }
0x00099e4a ldr r3, [sp, 0x64] | r3 = var_64h;
0x00099e4c cmp r3, 0 |
| if (r3 != 0) {
0x00099e4e bne 0x99e10 | goto label_21;
| }
| label_67:
0x00099e50 ldr.w r8, [sp, 0x4c] | r8 = var_4ch;
0x00099e54 ldrd r4, r7, [sp, 0x44] | __asm ("ldrd r4, r7, [var_44h]");
0x00099e58 ldrd r2, r3, [r8] | __asm ("ldrd r2, r3, [r8]");
0x00099e5c b 0x99d2c | goto label_20;
| label_64:
0x00099e5e it eq |
| if (r3 == 0) {
0x00099e60 lsleq r0, sl, 1 | r0 = sl << 1;
| goto label_68;
| }
| if (r3 != 0) {
| label_68:
0x00099e64 bne 0x99e44 | goto label_22;
| }
| label_65:
0x00099e66 add r0, sl | r0 += sl;
0x00099e68 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00099e6a add.w r3, r8, r0, lsl 2 | r3 = r8 + (r0 << 2);
0x00099e6e ldr r4, [sp, 0x28] | r4 = var_28h;
0x00099e70 mov r2, r7 | r2 = r7;
0x00099e72 mov r0, r5 | r0 = r5;
0x00099e74 str r3, [sp, 0x1c] | var_1ch = r3;
0x00099e76 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00099e78 cmp sl, r6 |
| if (sl >= r6) {
0x00099e7a bge 0x99e42 | goto label_23;
| }
| label_25:
0x00099e7c add.w r3, r6, r6, lsl 1 | r3 = r6 + (r6 << 1);
0x00099e80 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x00099e82 add.w r3, r8, r3, lsl 2 | r3 = r8 + (r3 << 2);
| do {
0x00099e86 movs r2, 0 | r2 = 0;
0x00099e88 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x00099e8a adds r4, 0xc | r4 += 0xc;
0x00099e8c cmp r4, r3 |
0x00099e8e bne 0x99e86 |
| } while (r4 != r3);
0x00099e90 b 0x99e42 | goto label_23;
| label_63:
0x00099e92 movs r3, 0 | r3 = 0;
0x00099e94 strd r3, r3, [sp, 0x44] | __asm ("strd r3, r3, [var_44h]");
0x00099e98 b 0x99cce | goto label_24;
| label_60:
0x00099e9a ldr r2, [r5, 0x24] | r2 = *((r5 + 0x24));
0x00099e9c b 0x999aa | goto label_13;
| label_32:
0x00099e9e blx 0x883c | fcn_0000883c ();
| label_66:
0x00099ea2 movs r4, 0xc | r4 = 0xc;
0x00099ea4 ldr r1, [sp, 0x30] | r1 = var_30h;
0x00099ea6 mla r3, r4, sl, r8 | __asm ("mla r3, r4, sl, r8");
0x00099eaa ldr r4, [sp, 0x28] | r4 = var_28h;
0x00099eac mov r2, r7 | r2 = r7;
0x00099eae mov r0, r5 | r0 = r5;
0x00099eb0 str r3, [sp, 0x1c] | var_1ch = r3;
0x00099eb2 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00099eb4 b 0x99e7c | goto label_25;
| label_62:
0x00099eb6 ldr.w r8, [r5] | r8 = *(r5);
0x00099eba mov r4, r3 | r4 = r3;
0x00099ebc b 0x99b0c | goto label_18;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9b210 */
| #include <stdint.h>
|
; (fcn) fcn.0009b210 () | void fcn_0009b210 (int16_t arg_88h, int16_t arg_8ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int32_t var_38h_2;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009b210 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009b214 sub sp, 0x64 |
0x0009b216 ldr r4, [pc, 0x32c] |
0x0009b218 mov r5, r3 | r5 = r3;
0x0009b21a str r3, [sp, 0x20] | var_20h = r3;
0x0009b21c ldr r3, [pc, 0x328] | r3 = *(0x9b548);
0x0009b21e add r4, pc | r4 = 0x136768;
0x0009b220 ldr r3, [r4, r3] |
0x0009b222 ldr r4, [sp, 0x88] | r4 = *(arg_88h);
0x0009b224 ldr r3, [r3] | r3 = imp.sinh;
0x0009b226 str r3, [sp, 0x5c] | var_5ch = r3;
0x0009b228 mov.w r3, 0 | r3 = 0;
0x0009b22c ldrb r3, [r5] | r3 = *(r5);
0x0009b22e str r0, [sp, 0x30] | var_30h = r0;
0x0009b230 ldrd r5, r7, [sp, 0x8c] | __asm ("ldrd r5, r7, [arg_8ch]");
0x0009b234 lsls r6, r3, 0x18 | r6 = r3 << 0x18;
0x0009b236 strd r1, r2, [sp, 0x24] | __asm ("strd r1, r2, [var_24h]");
0x0009b23a it pl |
| if (r6 < r3) {
0x0009b23c strpl r3, [sp, 0x44] | var_44h = r3;
| }
| if (r6 < r3) {
0x0009b23e bmi.w 0x9b3fa | goto label_16;
| }
| label_5:
0x0009b242 ldr r6, [sp, 0x20] | r6 = var_20h;
0x0009b244 add r2, sp, 0x50 | r2 += var_50h;
0x0009b246 mov r1, r2 | r1 = r2;
0x0009b248 str r2, [sp, 0x34] | var_34h = r2;
0x0009b24a adds r4, r6, r4 | r4 = r6 + r4;
0x0009b24c mov r0, r6 | r0 = r6;
0x0009b24e str r4, [sp, 0x14] | var_14h = r4;
0x0009b250 bl 0xb604 | r0 = fcn_0000b604 (r0, r1);
0x0009b254 add.w r8, r6, r0 | r8 = r6 + r0;
0x0009b258 mov r0, r8 | r0 = r8;
0x0009b25a bl 0xb604 | r0 = fcn_0000b604 (r0, r1);
0x0009b25e add r8, r0 | r8 += r0;
0x0009b260 cmp r4, r8 |
0x0009b262 it lo |
| if (r4 < r8) {
0x0009b264 movwlo sl, 0x10b | __asm ("movwlo sl, aav.0x000000ff");
| }
| if (r4 <= r8) {
0x0009b268 blo.w 0x9b3b2 | goto label_6;
| }
| if (r4 < r8) {
0x0009b26c bls.w 0x9b534 | goto label_17;
| }
0x0009b270 subs r3, r7, 0 | r3 = r7 - 0;
0x0009b272 it ne |
| if (r3 == r7) {
0x0009b274 movne r3, 1 | r3 = 1;
| }
0x0009b276 orrs.w fp, r5, r7 |
| if (fp == r5) {
0x0009b27a beq.w 0x9b408 | goto label_7;
| }
0x0009b27e mov.w fp, 0 |
0x0009b282 add r2, sp, 0x4c | r2 += var_4ch;
0x0009b284 mov r6, fp | r6 = fp;
0x0009b286 movs r0, 1 | r0 = 1;
0x0009b288 mov sb, r7 | sb = r7;
0x0009b28a mov r4, r5 | r4 = r5;
0x0009b28c mov sl, fp | sl = fp;
0x0009b28e str r2, [sp, 0x2c] | var_2ch = r2;
0x0009b290 str r3, [sp, 0x18] | var_18h = r3;
0x0009b292 strd r5, r7, [sp, 0x38] | __asm ("strd r5, r7, [var_38h]");
0x0009b296 str.w fp, [sp, 0x1c] | __asm ("str.w fp, [var_1ch]");
0x0009b29a b 0x9b36e |
| while (r0 == 0) {
0x0009b29c lsls r0, r5, 0x18 | r0 = r5 << 0x18;
0x0009b29e itt pl |
| if (r0 < r5) {
0x0009b2a0 movpl r0, 1 | r0 = 1;
| }
| if (r0 < r5) {
0x0009b2a2 strpl r5, [sp, 0x4c] | var_4ch = r5;
| }
| if (r0 < r5) {
0x0009b2a4 bmi.w 0x9b3ee | goto label_18;
| }
| label_4:
0x0009b2a8 cmp r5, r6 |
0x0009b2aa add r8, r0 | r8 += r0;
| if (r5 > r6) {
0x0009b2ac bgt 0x9b3a8 | goto label_19;
| }
| label_0:
0x0009b2ae ldrb.w r2, [r8] | r2 = *(r8);
0x0009b2b2 lsls r1, r2, 0x18 | r1 = r2 << 0x18;
0x0009b2b4 itt pl |
| if (r1 < r2) {
0x0009b2b6 movpl r7, 1 | r7 = 1;
| }
| if (r1 < r2) {
0x0009b2b8 strpl r2, [sp, 0x48] | var_48h = r2;
| }
| if (r1 < r2) {
0x0009b2ba bmi 0x9b394 | goto label_20;
| }
0x0009b2bc ldr r3, [sp, 0x20] | r3 = var_20h;
0x0009b2be add r7, r8 | r7 += r8;
0x0009b2c0 subs r3, r7, r3 | r3 = r7 - r3;
0x0009b2c2 cmp r3, r5 |
| if (r3 < r5) {
0x0009b2c4 blt 0x9b3a8 | goto label_19;
| }
| label_2:
0x0009b2c6 ldr.w r8, [sp, 0x48] | r8 = var_48h;
0x0009b2ca ldr r3, [sp, 0x14] | r3 = var_14h;
0x0009b2cc subs r2, r3, r7 | r2 = r3 - r7;
0x0009b2ce clz r3, r8 | r3 &= r8;
0x0009b2d2 lsrs r3, r3, 5 | r3 >>= 5;
0x0009b2d4 cmp r2, r8 |
0x0009b2d6 it lt |
| if (r2 >= r8) {
0x0009b2d8 orrlt r3, r3, 1 | r3 |= 1;
| }
0x0009b2dc cmp r3, 0 |
| if (r3 != 0) {
0x0009b2de bne 0x9b3a8 | goto label_19;
| }
0x0009b2e0 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0009b2e2 asr.w r3, r8, 0x1f | r3 = r8 >> 0x1f;
0x0009b2e6 adds.w r6, r5, r8 | r6 = r5 + r8;
0x0009b2ea adc.w r3, r3, r5, asr 31 | __asm ("adc.w r3, r3, r5, asr 31");
0x0009b2ee cmp r2, r6 |
0x0009b2f0 sbcs.w r2, sl, r3 | __asm ("sbcs.w r2, sl, r3");
| if (r2 < r6) {
0x0009b2f4 bge 0x9b30c |
0x0009b2f6 adds r2, r6, r6 | r2 = r6 + r6;
0x0009b2f8 mov r0, fp | r0 = fp;
0x0009b2fa adcs r3, r3 | __asm ("adcs r3, r3");
0x0009b2fc str r2, [sp, 0x1c] | var_1ch = r2;
0x0009b2fe mov sl, r3 | sl = r3;
0x0009b300 blx 0x8500 | r0 = fcn_00008500 ();
0x0009b304 cmp r0, 0 |
| if (r0 == 0) {
0x0009b306 beq.w 0x9b4dc | goto label_21;
| }
0x0009b30a mov fp, r0 |
| }
0x0009b30c mov r2, r8 | r2 = r8;
0x0009b30e add.w r0, fp, r5 | r0 = fp + r5;
0x0009b312 mov r1, r7 | r1 = r7;
0x0009b314 add r8, r7 | r8 += r7;
0x0009b316 blx 0x8610 | fcn_00008610 ();
0x0009b31a ldr r5, [sp, 0x28] | r5 = var_28h;
0x0009b31c mov r1, fp | r1 = fp;
0x0009b31e ldr r0, [sp, 0x24] | r0 = var_24h;
0x0009b320 cmp r5, r6 |
0x0009b322 mov r2, r5 | r2 = r5;
0x0009b324 it ge |
| if (r5 < r6) {
0x0009b326 movge r2, r6 | r2 = r6;
| }
0x0009b328 blx 0x8214 | sysconf ();
0x0009b32c ldrd r2, r1, [sp, 0x50] | __asm ("ldrd r2, r1, [var_50h]");
| if (r4 == 0) {
0x0009b330 cbz r4, 0x9b382 | goto label_22;
| }
0x0009b332 cmp r0, 0 |
| if (r0 < 0) {
0x0009b334 blt 0x9b37e | goto label_23;
| }
0x0009b336 ite eq |
| if (r0 != 0) {
0x0009b338 moveq r0, 1 | r0 = 1;
| }
| if (r0 == 0) {
0x0009b33a movne r0, 0 | r0 = 0;
| }
0x0009b33c cmp r5, r6 |
0x0009b33e ite ge |
| if (r5 < r6) {
0x0009b340 movge r0, 0 | r0 = 0;
| }
| if (r5 >= r6) {
0x0009b342 andlt r0, r0, 1 | r0 &= 1;
| }
0x0009b346 cmp r0, 0 |
| if (r0 == 0) {
0x0009b348 beq 0x9b3d0 | goto label_24;
| }
0x0009b34a strd r2, r1, [r4] | __asm ("strd r2, r1, [r4]");
| label_1:
0x0009b34e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0009b350 adds r2, 1 | r2++;
0x0009b352 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0009b356 str r2, [sp, 0x50] | var_50h = r2;
0x0009b358 str r1, [sp, 0x54] | var_54h = r1;
0x0009b35a cmp r3, r8 |
| if (r3 < r8) {
0x0009b35c bls.w 0x9b496 | goto label_25;
| }
0x0009b360 cmp.w sb, 0 |
| if (sb == 0) {
0x0009b364 beq 0x9b404 | goto label_26;
| }
0x0009b366 movs r4, 0 | r4 = 0;
0x0009b368 movs r3, 1 | r3 = 1;
0x0009b36a str r3, [sp, 0x18] | var_18h = r3;
| label_3:
0x0009b36c movs r0, 0 | r0 = 0;
0x0009b36e movs r3, 0 | r3 = 0;
0x0009b370 ldrb.w r5, [r8] | r5 = *(r8);
0x0009b374 str r3, [sp, 0x4c] | var_4ch = r3;
0x0009b376 cmp r0, 0 |
0x0009b378 beq 0x9b29c |
| }
0x0009b37a movs r5, 0 | r5 = 0;
0x0009b37c b 0x9b2ae | goto label_0;
| label_23:
0x0009b37e strd r2, r1, [r4] | __asm ("strd r2, r1, [r4]");
| label_22:
0x0009b382 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0009b384 ands.w r0, r3, r0, lsr 31 | r0 = r3 & (r0 >> 31);
0x0009b388 itt ne |
| if (r0 != r3) {
0x0009b38a strdne r2, r1, [sb] | __asm ("strdne r2, r1, [sb]");
| }
| if (r0 != r3) {
0x0009b38e mov.w sb, 0 | sb = 0;
| }
0x0009b392 b 0x9b34e | goto label_1;
| label_20:
0x0009b394 add r1, sp, 0x48 | r1 += var_48h;
0x0009b396 mov r0, r8 | r0 = r8;
0x0009b398 bl 0xb698 | fcn_0000b698 (r0, r1);
0x0009b39c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0009b39e mov r7, r0 | r7 = r0;
0x0009b3a0 add r7, r8 | r7 += r8;
0x0009b3a2 subs r3, r7, r3 | r3 = r7 - r3;
0x0009b3a4 cmp r3, r5 |
| if (r3 >= r5) {
0x0009b3a6 bge 0x9b2c6 | goto label_2;
| }
| label_19:
0x0009b3a8 movw sl, 0x10b | sl = 0x10b;
| label_10:
0x0009b3ac mov r0, fp | r0 = fp;
0x0009b3ae blx 0x8404 | fcn_00008404 ();
| do {
| label_6:
0x0009b3b2 ldr r2, [pc, 0x198] |
0x0009b3b4 ldr r3, [pc, 0x190] | r3 = *(0x9b548);
0x0009b3b6 add r2, pc | r2 = 0x136908;
0x0009b3b8 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0009b3ba ldr r2, [r3] | r2 = imp.sinh;
0x0009b3bc ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x0009b3be eors r2, r3 | r2 ^= r3;
0x0009b3c0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009b3c4 bne.w 0x9b53e | goto label_27;
| }
0x0009b3c8 mov r0, sl | r0 = sl;
0x0009b3ca add sp, 0x64 |
0x0009b3cc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x0009b3d0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0009b3d2 adds r2, 1 | r2++;
0x0009b3d4 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x0009b3d8 str r2, [sp, 0x50] | var_50h = r2;
0x0009b3da str r1, [sp, 0x54] | var_54h = r1;
0x0009b3dc cmp r3, r8 |
| if (r3 < r8) {
0x0009b3de bls.w 0x9b510 | goto label_28;
| }
0x0009b3e2 subs.w r3, sb, 0 | r3 = sb - 0;
0x0009b3e6 it ne |
| if (r3 == sb) {
0x0009b3e8 movne r3, 1 | r3 = 1;
| }
0x0009b3ea str r3, [sp, 0x18] | var_18h = r3;
0x0009b3ec b 0x9b36c | goto label_3;
| label_18:
0x0009b3ee ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0009b3f0 mov r0, r8 | r0 = r8;
0x0009b3f2 bl 0xb698 | fcn_0000b698 (r0, r1);
0x0009b3f6 ldr r5, [sp, 0x4c] | r5 = var_4ch;
0x0009b3f8 b 0x9b2a8 | goto label_4;
| label_16:
0x0009b3fa ldr r0, [sp, 0x20] | r0 = var_20h;
0x0009b3fc add r1, sp, 0x44 | r1 += var_44h;
0x0009b3fe bl 0xb698 | fcn_0000b698 (r0, r1);
0x0009b402 b 0x9b242 | goto label_5;
| label_26:
0x0009b404 ldrd r5, r7, [sp, 0x38] | __asm ("ldrd r5, r7, [var_38h]");
| label_7:
0x0009b408 mov r0, fp | r0 = fp;
0x0009b40a blx 0x8404 | fcn_00008404 ();
| label_8:
0x0009b40e ldr r6, [sp, 0x44] | r6 = var_44h;
0x0009b410 cmp r6, 1 |
0x0009b412 it le |
| if (r6 > 1) {
0x0009b414 movle sl, 0 | sl = 0;
| }
0x0009b418 ble 0x9b3b2 |
| } while (r6 <= 1);
0x0009b41a movs r4, 0 | r4 = 0;
0x0009b41c cmp r5, r4 |
0x0009b41e it ne |
| if (r5 != r4) {
0x0009b420 cmpne r7, r4 | __asm ("cmpne r7, r4");
| }
0x0009b422 strd r4, r4, [sp, 0x48] | __asm ("strd r4, r4, [var_48h]");
| if (r5 != r4) {
0x0009b426 beq 0x9b462 |
0x0009b428 ldrd r0, r1, [r5] | __asm ("ldrd r0, r1, [r5]");
0x0009b42c ldrd r2, r3, [r7] | __asm ("ldrd r2, r3, [r7]");
0x0009b430 cmp r1, r3 |
0x0009b432 it eq |
| if (r1 == r3) {
0x0009b434 cmpeq r0, r2 | __asm ("cmpeq r0, r2");
| }
| if (r1 != r3) {
0x0009b436 beq 0x9b472 |
0x0009b438 add.w sb, sp, 0x4c | sb += var_4ch;
0x0009b43c add.w r8, sp, 0x48 | r8 += var_48h;
0x0009b440 mov r2, r0 | r2 = r0;
0x0009b442 mov r3, r1 | r3 = r1;
0x0009b444 ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009b446 str r4, [sp, 8] | var_8h = r4;
0x0009b448 str.w sb, [sp, 4] | __asm ("str.w sb, [var_4h]");
0x0009b44c str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0009b450 bl 0x9b130 | r0 = fcn_0009b130 (r0, r1, r2, r3, r4, r5);
0x0009b454 mov sl, r0 | sl = r0;
0x0009b456 cmp r0, 0 |
| if (r0 == 0) {
0x0009b458 beq 0x9b4e2 | goto label_29;
| }
0x0009b45a ldr r0, [sp, 0x48] | r0 = var_48h;
0x0009b45c blx 0x8404 | fcn_00008404 ();
0x0009b460 b 0x9b48e |
| } else {
0x0009b462 add.w sb, sp, 0x4c | sb += var_4ch;
0x0009b466 add.w r8, sp, 0x48 | r8 += var_48h;
0x0009b46a cmp r5, 0 |
| if (r5 == 0) {
0x0009b46c beq 0x9b508 | goto label_30;
| }
0x0009b46e ldrd r2, r3, [r5] | __asm ("ldrd r2, r3, [r5]");
| }
0x0009b472 add.w sb, sp, 0x4c | sb += var_4ch;
0x0009b476 add.w r8, sp, 0x48 | r8 += var_48h;
| label_11:
0x0009b47a movs r1, 0 | r1 = 0;
0x0009b47c ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009b47e strd r8, sb, [sp] | __asm ("strd r8, sb, [sp]");
0x0009b482 str r1, [sp, 8] | var_8h = r1;
0x0009b484 bl 0x9b130 | r0 = fcn_0009b130 (r0, r1, r2, r3, r4, r5);
0x0009b488 mov sl, r0 | sl = r0;
| if (r0 == 0) {
0x0009b48a cbz r0, 0x9b4b0 | goto label_31;
| }
0x0009b48c ldr r4, [sp, 0x48] | r4 = var_48h;
| }
| label_9:
0x0009b48e mov r0, r4 | r0 = r4;
0x0009b490 blx 0x8404 | fcn_00008404 ();
0x0009b494 b 0x9b3b2 | goto label_6;
| label_25:
0x0009b496 ldrd r5, r7, [sp, 0x38] | __asm ("ldrd r5, r7, [var_38h]");
0x0009b49a mov r1, sb | r1 = sb;
| label_12:
0x0009b49c cmp r1, 0 |
| if (r1 == 0) {
0x0009b49e beq 0x9b408 | goto label_7;
| }
0x0009b4a0 ldrd r2, r3, [sp, 0x50] | __asm ("ldrd r2, r3, [var_50h]");
0x0009b4a4 mov r0, fp | r0 = fp;
0x0009b4a6 strd r2, r3, [r1] | __asm ("strd r2, r3, [r1]");
0x0009b4aa blx 0x8404 | fcn_00008404 ();
0x0009b4ae b 0x9b40e | goto label_8;
| label_31:
0x0009b4b0 ldr r4, [sp, 0x48] | r4 = var_48h;
0x0009b4b2 str r0, [sp, 0x50] | var_50h = r0;
0x0009b4b4 ldrb r3, [r4] | r3 = *(r4);
0x0009b4b6 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 < r3) {
0x0009b4b8 bmi 0x9b528 | goto label_32;
| }
| label_13:
0x0009b4ba cmp r6, r3 |
0x0009b4bc it le |
| if (r6 > r3) {
0x0009b4be movwle sl, 0x10b | __asm ("movwle sl, aav.0x000000ff");
| goto label_33;
| }
| if (r6 <= r3) {
| label_33:
0x0009b4c2 ble 0x9b48e | goto label_9;
| }
0x0009b4c4 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009b4c6 ldrd r1, r2, [sp, 0x24] | __asm ("ldrd r1, r2, [var_24h]");
0x0009b4ca ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009b4cc str r3, [sp] | *(sp) = r3;
0x0009b4ce mov r3, r4 | r3 = r4;
0x0009b4d0 str r7, [sp, 8] | var_8h = r7;
0x0009b4d2 str r5, [sp, 4] | var_4h = r5;
0x0009b4d4 bl 0x9b210 | r0 = fcn_0009b210 (r0, r1, r2, r3, r4, r5);
0x0009b4d8 mov sl, r0 | sl = r0;
0x0009b4da b 0x9b48e | goto label_9;
| label_21:
0x0009b4dc mov.w sl, 7 | sl = 7;
0x0009b4e0 b 0x9b3ac | goto label_10;
| label_29:
0x0009b4e2 strd r5, r0, [sp, 4] | __asm ("strd r5, r0, [var_4h]");
0x0009b4e6 ldrd r5, r3, [sp, 0x48] | __asm ("ldrd r5, r3, [var_48h]");
0x0009b4ea ldrd r1, r2, [sp, 0x24] | __asm ("ldrd r1, r2, [var_24h]");
0x0009b4ee ldr r0, [sp, 0x30] | r0 = var_30h;
0x0009b4f0 str r3, [sp] | *(sp) = r3;
0x0009b4f2 mov r3, r5 | r3 = r5;
0x0009b4f4 bl 0x9b210 | r0 = fcn_0009b210 (r0, r1, r2, r3, r4, r5);
0x0009b4f8 mov sl, r0 | sl = r0;
0x0009b4fa mov r0, r5 | r0 = r5;
0x0009b4fc blx 0x8404 | fcn_00008404 ();
0x0009b500 str r4, [sp, 0x48] | var_48h = r4;
0x0009b502 cmp.w sl, 0 |
| if (sl != 0) {
0x0009b506 bne 0x9b48e | goto label_9;
| }
| label_30:
0x0009b508 ldrd r2, r3, [r7] | __asm ("ldrd r2, r3, [r7]");
0x0009b50c movs r5, 0 | r5 = 0;
0x0009b50e b 0x9b47a | goto label_11;
| label_28:
0x0009b510 ldrd r5, r7, [sp, 0x38] | __asm ("ldrd r5, r7, [var_38h]");
| label_15:
0x0009b514 mov r1, sb | r1 = sb;
0x0009b516 mov sl, r4 | sl = r4;
| label_14:
0x0009b518 cmp.w sl, 0 |
| if (sl == 0) {
0x0009b51c beq 0x9b49c | goto label_12;
| }
0x0009b51e ldrd r8, sb, [sp, 0x50] | __asm ("ldrd r8, sb, [var_50h]");
0x0009b522 strd r8, sb, [sl] | __asm ("strd r8, sb, [sl]");
0x0009b526 b 0x9b49c | goto label_12;
| label_32:
0x0009b528 ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009b52a mov r0, r4 | r0 = r4;
0x0009b52c bl 0xb698 | fcn_0000b698 (r0, r1);
0x0009b530 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009b532 b 0x9b4ba | goto label_13;
| label_17:
0x0009b534 mov r1, r7 | r1 = r7;
0x0009b536 mov sl, r5 | sl = r5;
0x0009b538 mov.w fp, 0 |
0x0009b53c b 0x9b518 | goto label_14;
| label_27:
0x0009b53e blx 0x883c | fcn_0000883c ();
0x0009b542 nop |
| if (sl >= 0) {
0x0009b544 bge 0x9b63c | void (*0x9b63c)() ();
| }
0x0009b546 movs r2, r0 | r2 = r0;
0x0009b548 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0009b54a movs r0, r0 |
| if (r0 > r0) {
0x0009b54c bhi 0x9b514 | goto label_15;
| }
0x0009b54e movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9b550 */
| #include <stdint.h>
|
; (fcn) fcn.0009b550 () | void fcn_0009b550 (int16_t arg_38h, int16_t arg_60h, int16_t arg_8ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_24h_2;
| int16_t var_28h_2;
| int16_t var_2ch_2;
| int16_t var_30h_2;
| int16_t var_34h_2;
| int16_t var_48h_2;
| int16_t var_0h;
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_8ch;
| int16_t var_10h;
| int16_t var_18h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_3ch;
| int16_t var_40h;
| arithmetic x;
| int16_t var_54h;
| int16_t var_84h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009b550 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009b554 sub sp, 0x5c |
0x0009b556 ldr r5, [pc, 0x374] |
0x0009b558 mov r7, r2 | r7 = r2;
0x0009b55a ldr r4, [pc, 0x374] | r4 = *(0x9b8d2);
0x0009b55c add r5, pc | r5 = 0x136e2e;
0x0009b55e ldr.w sb, [sp, 0x80] | sb = var_0h_2;
0x0009b562 ldr.w sl, [sp, 0x88] | sl = var_8h;
0x0009b566 ldr r4, [r5, r4] |
0x0009b568 mov r5, r1 | r5 = r1;
0x0009b56a ldr.w r8, [sp, 0x90] | r8 = var_10h;
0x0009b56e ldr r4, [r4] | r4 = imp.sinh;
0x0009b570 str r4, [sp, 0x54] | var_0h = r4;
0x0009b572 mov.w r4, 0 | r4 = 0;
0x0009b576 subs r4, r3, 0 | r4 = r3 - 0;
0x0009b578 str r0, [sp, 0x24] | var_24h_2 = r0;
| if (r4 < r3) {
0x0009b57a blt 0x9b5be | goto label_9;
| }
0x0009b57c add r2, sp, 0x48 | r2 += var_48h_2;
0x0009b57e movs r3, 0 | r3 = 0;
0x0009b580 movs r1, 0xc | r1 = 0xc;
0x0009b582 str r2, [sp, 0x2c] | var_2ch_2 = r2;
0x0009b584 str r3, [sp, 0x48] | var_48h_2 = r3;
0x0009b586 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009b58a mov r2, r0 | r2 = r0;
0x0009b58c cmp r0, 0 |
| if (r0 == 0) {
0x0009b58e beq 0x9b63c | goto label_10;
| }
| do {
0x0009b590 ldr r4, [sp, 0x48] | r4 = x;
| label_1:
0x0009b592 mov r0, r4 | r0 = r4;
0x0009b594 str r2, [sp, 0x24] | var_24h = r2;
0x0009b596 blx 0x81f8 | fcn_000081f8 ();
0x0009b59a ldr r2, [sp, 0x24] | r2 = var_24h;
0x0009b59c cmp r2, 0x65 |
| if (r2 != 0x65) {
0x0009b59e beq 0x9b5a2 |
| label_8:
0x0009b5a0 mov r0, r2 | r0 = r2;
| }
| label_2:
0x0009b5a2 ldr r2, [pc, 0x330] |
0x0009b5a4 ldr r3, [pc, 0x328] | r3 = *(0x9b8d0);
0x0009b5a6 add r2, pc | r2 = 0x136e80;
0x0009b5a8 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0009b5aa ldr r2, [r3] | r2 = imp.sinh;
0x0009b5ac ldr r3, [sp, 0x54] | r3 = var_54h;
0x0009b5ae eors r2, r3 | r2 ^= r3;
0x0009b5b0 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009b5b4 bne.w 0x9b8c8 | goto label_11;
| }
0x0009b5b8 add sp, 0x5c |
0x0009b5ba pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x0009b5be ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x0009b5c0 ldr.w r3, [r3, 0x104] | r3 = *((r3 + 0x104));
| if (r3 != 0) {
0x0009b5c4 cbz r3, 0x9b5d2 |
0x0009b5c6 ldr r2, [sp, 0x24] | r2 = var_24h_2;
0x0009b5c8 ldr.w r2, [r2, 0x118] | r2 = *((r2 + 0x118));
0x0009b5cc cmp r2, r1 |
| if (r2 == r1) {
0x0009b5ce beq.w 0x9b786 | goto label_12;
| }
| }
| label_5:
0x0009b5d2 adds r4, 1 | r4++;
| if (r4 == 1) {
0x0009b5d4 beq.w 0x9b77c | goto label_13;
| }
| label_6:
0x0009b5d8 add r2, sp, 0x48 | r2 += x;
0x0009b5da movs r3, 0 | r3 = 0;
0x0009b5dc ldr r0, [sp, 0x24] | r0 = var_24h;
0x0009b5de movs r1, 0xd | r1 = 0xd;
0x0009b5e0 str r2, [sp, 0x2c] | var_2ch = r2;
0x0009b5e2 str r3, [sp, 0x48] | x = r3;
0x0009b5e4 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009b5e8 mov r2, r0 | r2 = r0;
0x0009b5ea cmp r0, 0 |
0x0009b5ec bne 0x9b590 |
| } while (r0 != 0);
0x0009b5ee ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009b5f0 asrs r6, r7, 0x1f | r6 = r7 >> 0x1f;
0x0009b5f2 mov r2, r7 | r2 = r7;
0x0009b5f4 ldr r4, [sp, 0x48] | r4 = x;
0x0009b5f6 mov ip, r6 |
0x0009b5f8 movs r1, 1 | r1 = 1;
0x0009b5fa ldr.w r0, [r3, 0x100] | r0 = *((r3 + 0x100));
0x0009b5fe smlal r2, ip, r5, r0 | __asm ("smlal r2, ip, r5, r0");
0x0009b602 mov r0, r4 | r0 = r4;
0x0009b604 mov r3, ip | r3 = ip;
0x0009b606 lsls r3, r3, 0xa | r3 <<= 0xa;
0x0009b608 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009b60c lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009b60e blx 0x84e8 | fcn_000084e8 ();
0x0009b612 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009b614 mov r2, r7 | r2 = r7;
0x0009b616 movw r1, 0x3ff | r1 = 0x3ff;
0x0009b61a mov r0, r4 | r0 = r4;
0x0009b61c ldr.w r3, [r3, 0x100] | r3 = *((r3 + 0x100));
0x0009b620 smlal r2, r6, r5, r3 | __asm ("smlal r2, r6, r5, r3");
0x0009b624 lsls r3, r6, 0xa | r3 = r6 << 0xa;
0x0009b626 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009b62a lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009b62c adds r2, r2, r1 | r2 += r1;
0x0009b62e mov.w r1, 2 | r1 = 2;
0x0009b632 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009b636 blx 0x84e8 | fcn_000084e8 ();
0x0009b63a b 0x9b662 | goto label_14;
| label_10:
0x0009b63c ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009b63e mov r2, r7 | r2 = r7;
0x0009b640 ldr.w r1, [r3, 0x100] | r1 = *((r3 + 0x100));
0x0009b644 asrs r3, r7, 0x1f | r3 = r7 >> 0x1f;
0x0009b646 smlal r2, r3, r5, r1 | __asm ("smlal r2, r3, r5, r1");
0x0009b64a movs r1, 1 | r1 = 1;
0x0009b64c lsls r3, r3, 0xa | r3 <<= 0xa;
0x0009b64e orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009b652 lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009b654 adds r2, r2, r4 | r2 += r4;
0x0009b656 adc.w r3, r3, r4, asr 31 | __asm ("adc.w r3, r3, r4, asr 31");
0x0009b65a ldr r4, [sp, 0x48] | r4 = x;
0x0009b65c mov r0, r4 | r0 = r4;
0x0009b65e blx 0x84e8 | fcn_000084e8 ();
| label_14:
0x0009b662 mov.w fp, 0 |
0x0009b666 b 0x9b6a6 |
| while (r1 == 0) {
0x0009b668 ldr r1, [sp, 0x8c] | r1 = *(arg_8ch);
0x0009b66a ldrd lr, r0, [sp, 0x48] | __asm ("ldrd lr, r0, [x]");
0x0009b66e orr.w r1, sl, r1 | r1 = sl | r1;
| label_0:
0x0009b672 strd r3, r5, [sp, 0x10] | __asm ("strd r3, r5, [sp, 0x10]");
0x0009b676 clz r1, r1 | r1 &= r1;
0x0009b67a strd r6, r7, [sp, 8] | __asm ("strd r6, r7, [sp, 8]");
0x0009b67e add r5, sp, 0x3c | r5 += var_3ch;
0x0009b680 str.w lr, [sp] | __asm ("str.w lr, [sp]");
0x0009b684 lsrs r1, r1, 5 | r1 >>= 5;
0x0009b686 str r0, [sp, 4] | var_4h = r0;
0x0009b688 mov r3, ip | r3 = ip;
0x0009b68a ldr.w r0, [r8, 4] | r0 = *((r8 + 4));
0x0009b68e str r5, [sp, 0x18] | var_18h = r5;
0x0009b690 adds r0, 1 | r0++;
0x0009b692 bl 0x3fc94 | r0 = fcn_0003fc94 (r0, r1, r2, r3, r4, r5, r6);
0x0009b696 cmp r0, 0 |
| if (r0 != 0) {
0x0009b698 bne 0x9b778 | goto label_15;
| }
0x0009b69a ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0009b69c mov r0, r8 | r0 = r8;
0x0009b69e bl 0x5ed94 | r0 = fcn_0005ed94 (r0, r1, r2);
0x0009b6a2 cmp r0, 0 |
| if (r0 != 0) {
0x0009b6a4 bne 0x9b778 | goto label_15;
| }
0x0009b6a6 mov r0, r4 | r0 = r4;
0x0009b6a8 blx 0x8728 | r0 = fcn_00008728 ();
0x0009b6ac cmp r0, 0x64 |
| if (r0 != 0x64) {
0x0009b6ae bne 0x9b778 | goto label_15;
| }
0x0009b6b0 movs r1, 1 | r1 = 1;
0x0009b6b2 mov r0, r4 | r0 = r4;
0x0009b6b4 str.w fp, [sp, 0x3c] | __asm ("str.w fp, [var_3ch]");
0x0009b6b8 blx 0x84d8 | r0 = fcn_000084d8 ();
0x0009b6bc mov r2, r0 | r2 = r0;
0x0009b6be mov r3, r1 | r3 = r1;
0x0009b6c0 mov r0, r4 | r0 = r4;
0x0009b6c2 movs r1, 2 | r1 = 2;
0x0009b6c4 strd r2, r3, [sp, 0x40] | __asm ("strd r2, r3, [sp, 0x40]");
0x0009b6c8 blx 0x84d8 | fcn_000084d8 ();
0x0009b6cc strd r0, r1, [sp, 0x48] | __asm ("strd r0, r1, [sp, 0x48]");
0x0009b6d0 movs r1, 3 | r1 = 3;
0x0009b6d2 mov r0, r4 | r0 = r4;
0x0009b6d4 blx 0x84d8 | r0 = fcn_000084d8 ();
0x0009b6d8 mov r6, r0 | r6 = r0;
0x0009b6da mov r7, r1 | r7 = r1;
0x0009b6dc mov r0, r4 | r0 = r4;
0x0009b6de movs r1, 4 | r1 = 4;
0x0009b6e0 blx 0x82f4 | fcn_000082f4 ();
0x0009b6e4 movs r1, 4 | r1 = 4;
0x0009b6e6 mov r5, r0 | r5 = r0;
0x0009b6e8 mov r0, r4 | r0 = r4;
0x0009b6ea blx 0x8924 | fcn_00008924 ();
0x0009b6ee ldrd r2, ip, [sp, 0x40] | __asm ("ldrd r2, ip, [var_40h]");
0x0009b6f2 mov r3, r0 | r3 = r0;
0x0009b6f4 orr.w r1, r2, ip | r1 = r2 | ip;
0x0009b6f8 cmp.w sb, 0 |
0x0009b6fc it ne |
| if (sb != 0) {
0x0009b6fe cmpne r1, 0 | __asm ("cmpne r1, 0");
| }
0x0009b700 ite ne |
| if (sb == 0) {
0x0009b702 movne r1, 1 | r1 = 1;
| }
| if (sb != 0) {
0x0009b704 moveq r1, 0 | r1 = 0;
| }
0x0009b706 cmp r0, 0 |
0x0009b708 ite eq |
| if (r0 != 0) {
0x0009b70a moveq r1, 0 | r1 = 0;
| }
| if (r0 == 0) {
0x0009b70c andne r1, r1, 1 | r1 &= 1;
| }
0x0009b710 cmp r1, 0 |
0x0009b712 beq 0x9b668 |
| }
0x0009b714 cmp.w sl, 0 |
| if (sl != 0) {
0x0009b718 bne 0x9b74e | goto label_16;
| }
0x0009b71a add r2, sp, 0x40 | r2 += var_40h;
0x0009b71c str r0, [sp, 0x28] | var_28h = r0;
0x0009b71e str r2, [sp, 4] | var_4h = r2;
0x0009b720 mov r1, sb | r1 = sb;
0x0009b722 ldr r2, [sp, 0x84] | r2 = var_84h;
0x0009b724 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0009b726 str.w sl, [sp, 8] | __asm ("str.w sl, [var_8h]");
0x0009b72a str r5, [sp] | *(sp) = r5;
0x0009b72c bl 0x9b210 | r0 = fcn_0009b210 (r0, r1, r2, r3, r4, r5);
| if (r0 != 0) {
0x0009b730 cbnz r0, 0x9b778 | goto label_15;
| }
0x0009b732 ldr r1, [sp, 0x8c] | r1 = *(arg_8ch);
0x0009b734 ldrd r2, ip, [sp, 0x40] | __asm ("ldrd r2, ip, [var_40h]");
0x0009b738 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009b73a ldrd lr, r0, [sp, 0x48] | __asm ("ldrd lr, r0, [x]");
0x0009b73e cmp r1, 0 |
| if (r1 != 0) {
0x0009b740 bne 0x9b672 | goto label_0;
| }
0x0009b742 ldr r1, [sp, 0x8c] | r1 = *(arg_8ch);
0x0009b744 mov lr, r2 | lr = r2;
0x0009b746 mov r0, ip | r0 = ip;
0x0009b748 strd r2, ip, [sp, 0x48] | __asm ("strd r2, ip, [sp, 0x48]");
0x0009b74c b 0x9b672 | goto label_0;
| label_16:
0x0009b74e ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x0009b750 mov r1, sb | r1 = sb;
0x0009b752 str r0, [sp, 0x28] | var_28h = r0;
0x0009b754 str r5, [sp] | *(sp) = r5;
0x0009b756 str r2, [sp, 8] | var_8h = r2;
0x0009b758 add r2, sp, 0x40 | r2 += var_40h;
0x0009b75a str r2, [sp, 4] | var_4h = r2;
0x0009b75c ldr r0, [sp, 0x24] | r0 = var_24h;
0x0009b75e ldr r2, [sp, 0x84] | r2 = var_84h;
0x0009b760 bl 0x9b210 | r0 = fcn_0009b210 (r0, r1, r2, r3, r4, r5);
| if (r0 == 0) {
0x0009b764 cbnz r0, 0x9b778 |
0x0009b766 ldr r3, [sp, 0x8c] | r3 = *(arg_8ch);
0x0009b768 ldrd r2, ip, [sp, 0x40] | __asm ("ldrd r2, ip, [var_40h]");
0x0009b76c ldrd lr, r0, [sp, 0x48] | __asm ("ldrd lr, r0, [x]");
0x0009b770 orr.w r1, sl, r3 | r1 = sl | r3;
0x0009b774 ldr r3, [sp, 0x28] | r3 = var_28h;
0x0009b776 b 0x9b672 | goto label_0;
| }
| label_15:
0x0009b778 mov r2, r0 | r2 = r0;
0x0009b77a b 0x9b592 | goto label_1;
| label_13:
0x0009b77c movs r0, 0 | r0 = 0;
0x0009b77e blx 0x81f8 | fcn_000081f8 ();
0x0009b782 movs r0, 0 | r0 = 0;
0x0009b784 b 0x9b5a2 | goto label_2;
| label_12:
0x0009b786 add.w r2, r7, r7, lsl 1 | r2 = r7 + (r7 << 1);
0x0009b78a add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x0009b78e ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x0009b790 orrs.w r6, sl, r2 | r6 = sl | r2;
| if (r6 == sl) {
0x0009b794 beq 0x9b7f0 | goto label_17;
| }
0x0009b796 ldr.w fp, [r3, 0xc] | fp = *((r3 + 0xc));
0x0009b79a cmp.w fp, 0 |
| if (fp == 0) {
0x0009b79e beq.w 0x9b8c0 | goto label_18;
| }
0x0009b7a2 movs r3, 0 | r3 = 0;
0x0009b7a4 mov r5, fp | r5 = fp;
0x0009b7a6 str r7, [sp, 0x34] | var_34h_2 = r7;
0x0009b7a8 mov r6, r3 | r6 = r3;
0x0009b7aa str r4, [sp, 0x28] | var_28h_2 = r4;
0x0009b7ac mov fp, r3 |
0x0009b7ae ldr r7, [sp, 0x84] | r7 = var_4h;
0x0009b7b0 mov r4, r3 | r4 = r3;
0x0009b7b2 str r1, [sp, 0x30] | var_30h_2 = r1;
0x0009b7b4 b 0x9b7c2 | goto label_19;
| label_4:
0x0009b7b6 str.w r5, [fp, r6, lsl 2] | __asm ("str.w r5, [fp, r6, lsl 2]");
0x0009b7ba adds r6, 1 | r6++;
| do {
| label_3:
0x0009b7bc ldr r5, [r5] | r5 = *(r5);
0x0009b7be cmp r5, 0 |
| if (r5 == 0) {
0x0009b7c0 beq 0x9b846 | goto label_20;
| }
| label_19:
0x0009b7c2 ldrd r0, r1, [r5, 0xc] | __asm ("ldrd r0, r1, [r5, 0xc]");
| if (r7 == 0) {
0x0009b7c6 cbz r7, 0x9b7d8 | goto label_21;
| }
0x0009b7c8 cmp r7, r1 |
0x0009b7ca bgt 0x9b7bc |
| } while (r7 > r1);
0x0009b7cc mov r2, r7 | r2 = r7;
0x0009b7ce mov r1, sb | r1 = sb;
0x0009b7d0 blx 0x8214 | r0 = sysconf ();
0x0009b7d4 cmp r0, 0 |
| if (r0 != 0) {
0x0009b7d6 bne 0x9b7bc | goto label_3;
| }
| label_21:
0x0009b7d8 cmp r6, r4 |
| if (r6 != r4) {
0x0009b7da bne 0x9b7b6 | goto label_4;
| }
0x0009b7dc add.w r4, r6, 0x10 | r4 = r6 + 0x10;
0x0009b7e0 mov r0, fp | r0 = fp;
0x0009b7e2 lsls r1, r4, 2 | r1 = r4 << 2;
0x0009b7e4 blx 0x8268 | r0 = fcn_00008268 ();
0x0009b7e8 cmp r0, 0 |
| if (r0 == 0) {
0x0009b7ea beq 0x9b89c | goto label_22;
| }
0x0009b7ec mov fp, r0 |
0x0009b7ee b 0x9b7b6 | goto label_4;
| label_17:
0x0009b7f0 ldr r2, [sp, 0x84] | r2 = var_4h;
0x0009b7f2 adds r0, r3, 4 | r0 = r3 + 4;
0x0009b7f4 mov r1, sb | r1 = sb;
0x0009b7f6 bl 0x1232c | r0 = fcn_0001232c (r0, r1, r2);
0x0009b7fa cmp r0, 0 |
| if (r0 == 0) {
0x0009b7fc beq.w 0x9b5d2 | goto label_5;
| }
0x0009b800 str r0, [sp, 0x28] | var_28h_2 = r0;
0x0009b802 movs r1, 0 | r1 = 0;
0x0009b804 movs r0, 0x68 | r0 = 0x68;
0x0009b806 blx 0x8240 | r0 = fcn_00008240 ();
0x0009b80a mov fp, r0 |
0x0009b80c cmp r0, 0 |
| if (r0 == 0) {
0x0009b80e beq 0x9b8a4 | goto label_23;
| }
0x0009b810 mov r1, r6 | r1 = r6;
0x0009b812 movs r2, 0x64 | r2 = 0x64;
0x0009b814 adds r0, 4 | r0 += 4;
0x0009b816 blx 0x839c | fcn_0000839c ();
0x0009b81a ldr r3, [sp, 0x28] | r3 = var_28h_2;
0x0009b81c mov r2, fp | r2 = fp;
0x0009b81e mvn r1, 0x80000000 | r1 = ~0x80000000;
0x0009b822 str r1, [r2], 0x60 | *(r2) = r1;
| r2 += 0x60;
0x0009b826 str.w r3, [fp, 0x60] | __asm ("str.w r3, [arg_60h]");
0x0009b82a str.w r2, [fp, 0x38] | __asm ("str.w r2, [arg_38h]");
| label_7:
0x0009b82e mov r1, fp | r1 = fp;
0x0009b830 mov r0, r8 | r0 = r8;
0x0009b832 bl 0x5ed94 | fcn_0005ed94 (r0, r1, r2);
0x0009b836 adds r4, 1 | r4++;
0x0009b838 mov r2, r0 | r2 = r0;
| if (r4 == 1) {
0x0009b83a beq 0x9b842 | goto label_24;
| }
0x0009b83c cmp r0, 0 |
| if (r0 == 0) {
0x0009b83e beq.w 0x9b5d8 | goto label_6;
| }
| label_24:
0x0009b842 movs r4, 0 | r4 = 0;
0x0009b844 b 0x9b592 | goto label_1;
| label_20:
0x0009b846 cmp r6, 1 |
0x0009b848 ldrd r5, r7, [sp, 0x30] | __asm ("ldrd r5, r7, [var_30h_2]");
0x0009b84c ldr r4, [sp, 0x28] | r4 = var_28h_2;
0x0009b84e str.w fp, [sp, 0x2c] | __asm ("str.w fp, [var_2ch_2]");
| if (r6 <= 1) {
0x0009b852 ble 0x9b8ae | goto label_25;
| }
0x0009b854 ldr r3, [pc, 0x80] |
0x0009b856 movs r2, 4 | r2 = 4;
0x0009b858 mov r1, r6 | r1 = r6;
0x0009b85a mov r0, fp | r0 = fp;
0x0009b85c add r3, pc | r3 = 0x137138;
0x0009b85e blx 0x8178 | qsort ();
| do {
0x0009b862 adds r6, 0x19 | r6 += 0x19;
0x0009b864 movs r1, 0 | r1 = 0;
0x0009b866 lsls r6, r6, 2 | r6 <<= 2;
0x0009b868 mov r0, r6 | r0 = r6;
0x0009b86a blx 0x8240 | r0 = fcn_00008240 ();
0x0009b86e mov fp, r0 |
| if (r0 == 0) {
0x0009b870 cbz r0, 0x9b8b8 | goto label_26;
| }
0x0009b872 mov r2, r6 | r2 = r6;
0x0009b874 movs r1, 0 | r1 = 0;
0x0009b876 blx 0x839c | fcn_0000839c ();
0x0009b87a sub.w r2, r6, 0x64 | r2 = r6 - 0x64;
0x0009b87e ldr r6, [sp, 0x2c] | r6 = var_2ch_2;
0x0009b880 mov r0, fp | r0 = fp;
0x0009b882 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x0009b886 str r3, [r0], 0x60 | *(r0) = r3;
| r0 += 0x60;
0x0009b88a mov r1, r6 | r1 = r6;
0x0009b88c str.w r0, [fp, 0x38] | __asm ("str.w r0, [arg_38h]");
0x0009b890 blx 0x8610 | fcn_00008610 ();
0x0009b894 mov r0, r6 | r0 = r6;
0x0009b896 blx 0x8404 | fcn_00008404 ();
0x0009b89a b 0x9b82e | goto label_7;
| label_22:
0x0009b89c str r0, [sp, 0x24] | var_24h_2 = r0;
0x0009b89e mov r0, fp | r0 = fp;
0x0009b8a0 blx 0x8404 | fcn_00008404 ();
| label_23:
0x0009b8a4 movs r0, 0 | r0 = 0;
0x0009b8a6 blx 0x81f8 | fcn_000081f8 ();
0x0009b8aa movs r2, 7 | r2 = 7;
0x0009b8ac b 0x9b5a0 | goto label_8;
| label_25:
0x0009b8ae beq 0x9b862 |
| } while (r2 == 7);
0x0009b8b0 ldr r0, [sp, 0x2c] | r0 = var_2ch_2;
0x0009b8b2 blx 0x8404 | fcn_00008404 ();
0x0009b8b6 b 0x9b5d2 | goto label_5;
| label_26:
0x0009b8b8 ldr r0, [sp, 0x2c] | r0 = var_2ch_2;
0x0009b8ba blx 0x8404 | fcn_00008404 ();
| do {
0x0009b8bc stc p7, c14, [r4, 0x3c4]! | __asm ("stc p7, c14, aav.0x000000ff!");
| label_18:
0x0009b8c0 mov r0, fp | r0 = fp;
0x0009b8c2 blx 0x8404 | fcn_00008404 ();
0x0009b8c6 b 0x9b5d2 | goto label_5;
| label_11:
0x0009b8c8 blx 0x883c | fcn_0000883c ();
0x0009b8cc bvc 0x9b948 | __asm ("bvc aav.0x000000ff");
0x0009b8ce movs r2, r0 | r2 = r0;
0x0009b8d0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0009b8d2 movs r0, r0 |
0x0009b8d4 bvs 0x9b8bc | __asm ("bvs aav.0x000000ff");
| } while (1);
0x0009b8d6 movs r2, r0 | r2 = r0;
0x0009b8d8 cmp r5, 0x6d |
0x0009b8da invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9b8dc */
| #include <stdint.h>
|
; (fcn) fcn.0009b8dc () | void fcn_0009b8dc (int16_t arg_48h, int16_t arg_4ch, int16_t arg_5ch, int16_t arg_88h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_10h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_50h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009b8dc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009b8e0 sub sp, 0x2c |
0x0009b8e2 ldr r4, [sp, 0x50] | r4 = *((sp + 0x50));
| if (r1 == 0) {
0x0009b8e4 cbz r1, 0x9b91c | goto label_3;
| }
0x0009b8e6 mov r8, r0 | r8 = r0;
0x0009b8e8 mov sb, r2 | sb = r2;
0x0009b8ea mov r7, r3 | r7 = r3;
0x0009b8ec mov r6, r1 | r6 = r1;
0x0009b8ee mov fp, r4 |
| do {
0x0009b8f0 ldr.w r1, [fp] | r1 = *(fp);
0x0009b8f4 mov r3, r7 | r3 = r7;
0x0009b8f6 mov r2, sb | r2 = sb;
0x0009b8f8 mov r0, r8 | r0 = r8;
| if (r1 != 0) {
0x0009b8fa cbnz r1, 0x9b91c | goto label_3;
| }
0x0009b8fc ldr r4, [r6] | r4 = *(r6);
0x0009b8fe cmp r4, 5 |
| if (r4 == 5) {
0x0009b900 beq 0x9b922 | goto label_4;
| }
0x0009b902 ldr r5, [r7] | r5 = *(r7);
0x0009b904 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0009b906 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0009b90a cmp r4, 4 |
0x0009b90c it eq |
| if (r4 != 4) {
0x0009b90e addeq r5, 1 | r5++;
| }
0x0009b910 str r5, [r7] | *(r7) = r5;
0x0009b912 bl 0x9b8dc | fcn_0009b8dc (r0, r1, r2, r3, r4, r5, r6);
0x0009b916 ldr r6, [r6, 0x10] | r6 = *((r6 + 0x10));
0x0009b918 cmp r6, 0 |
0x0009b91a bne 0x9b8f0 |
| } while (r6 != 0);
| label_3:
0x0009b91c add sp, 0x2c |
0x0009b91e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x0009b922 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0009b924 mov sl, r1 | sl = r1;
0x0009b926 mov r2, r3 | r2 = r3;
0x0009b928 str r3, [sp, 0x18] | var_18h_2 = r3;
0x0009b92a ldr r1, [r2, 0x40] | r1 = *((r2 + 0x40));
0x0009b92c ldr.w r3, [sb] | r3 = *(sb);
0x0009b930 cmp r1, 0 |
0x0009b932 add r3, r1 | r3 += r1;
0x0009b934 str.w r3, [sb] | __asm ("str.w r3, [sb]");
| if (r1 <= 0) {
0x0009b938 ble 0x9ba02 | goto label_5;
| }
0x0009b93a strd r1, r6, [sp, 0x20] | __asm ("strd r1, r6, [sp, 0x20]");
0x0009b93e str.w fp, [sp, 0x50] | __asm ("str.w fp, [var_24h]");
| label_0:
0x0009b942 lsl.w r3, sl, 1 | r3 = sl << 1;
0x0009b946 movs r0, 0x38 | r0 = 0x38;
0x0009b948 add.w fp, r3, sl |
0x0009b94c str r3, [sp, 0x1c] | *(arg_48h) = r3;
0x0009b94e ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0009b950 add.w fp, r3, fp, lsl 3 |
0x0009b954 ldr.w sb, [fp, 0x48] | sb = *(arg_48h);
0x0009b958 ldrd r6, r7, [fp, 0x4c] | __asm ("ldrd r6, r7, [arg_4ch]");
0x0009b95c blx 0x86a4 | r0 = fcn_000086a4 ();
0x0009b960 mov r5, r0 | r5 = r0;
0x0009b962 cmp r0, 0 |
| if (r0 == 0) {
0x0009b964 beq.w 0x9ba9c | goto label_6;
| }
0x0009b968 ldr.w r4, [r8] | r4 = *(r8);
| if (r7 == 0) {
0x0009b96c cbz r7, 0x9b9b2 | goto label_7;
| }
0x0009b96e ldr.w r2, [r4, 0x100] | r2 = *((r4 + 0x100));
0x0009b972 mov.w fp, 1 |
0x0009b976 movs r3, 0x18 | r3 = 0x18;
0x0009b978 cmp fp, r2 |
| if (fp >= r2) {
0x0009b97a bge 0x9b990 | goto label_8;
| }
| do {
0x0009b97c ldr.w r1, [r4, 0x104] | r1 = *((r4 + 0x104));
0x0009b980 ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x0009b982 adds r3, 0x18 | r3 += 0x18;
0x0009b984 cmp r6, r1 |
| if (r6 == r1) {
0x0009b986 beq 0x9ba52 | goto label_9;
| }
0x0009b988 add.w fp, fp, 1 |
0x0009b98c cmp fp, r2 |
0x0009b98e blt 0x9b97c |
| } while (fp < r2);
| label_8:
0x0009b990 mov.w fp, 1 |
0x0009b994 movs r3, 0x18 | r3 = 0x18;
0x0009b996 cmp r2, fp |
0x0009b998 add.w r0, r6, fp | r0 = r6 + fp;
| if (r2 <= fp) {
0x0009b99c ble 0x9b9b2 | goto label_7;
| }
| do {
0x0009b99e ldr.w r1, [r4, 0x104] | r1 = *((r4 + 0x104));
0x0009b9a2 ldr r1, [r1, r3] | r1 = *((r1 + r3));
0x0009b9a4 adds r3, 0x18 | r3 += 0x18;
0x0009b9a6 cmp r1, r0 |
| if (r1 == r0) {
0x0009b9a8 beq 0x9ba10 | goto label_10;
| }
0x0009b9aa add.w fp, fp, 1 |
0x0009b9ae cmp r2, fp |
0x0009b9b0 bgt 0x9b99e |
| } while (r2 > fp);
| label_7:
0x0009b9b2 movs r2, 0x38 | r2 = 0x38;
0x0009b9b4 movs r1, 0 | r1 = 0;
0x0009b9b6 mov r0, r5 | r0 = r5;
0x0009b9b8 ldr.w fp, [r8, 0x14] | fp = *((r8 + 0x14));
0x0009b9bc blx 0x839c | fcn_0000839c ();
0x0009b9c0 movs r3, 0 | r3 = 0;
0x0009b9c2 mov r0, r4 | r0 = r4;
0x0009b9c4 strd r7, r3, [sp, 8] | __asm ("strd r7, r3, [sp, 8]");
0x0009b9c8 clz r7, r7 | r7 &= r7;
0x0009b9cc lsrs r7, r7, 5 | r7 >>= 5;
0x0009b9ce mov r1, fp | r1 = fp;
0x0009b9d0 mvn r3, 1 | r3 = ~1;
0x0009b9d4 strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x0009b9d8 movs r2, 0 | r2 = 0;
0x0009b9da str r5, [sp, 0x10] | var_10h = r5;
0x0009b9dc bl 0x9b550 | fcn_0009b550 (r0, r1, r2, r3, r4, r5, r6);
0x0009b9e0 str r7, [r5, 0x24] | *((r5 + 0x24)) = r7;
| label_1:
0x0009b9e2 ldr r3, [sp, 0x1c] | r3 = *(arg_48h);
0x0009b9e4 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0009b9e6 add r3, sl | r3 += sl;
0x0009b9e8 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x0009b9ec str r5, [r3, 0x5c] | *((r3 + 0x5c)) = r5;
0x0009b9ee cmp r0, 0 |
| if (r0 != 0) {
0x0009b9f0 bne 0x9baa6 | goto label_11;
| }
0x0009b9f2 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0009b9f4 add.w sl, sl, 1 | sl++;
0x0009b9f8 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0009b9fa str r3, [sp, 0x18] | var_18h = r3;
0x0009b9fc ldr r3, [sp, 0x20] | r3 = *(arg_4ch);
0x0009b9fe cmp r3, sl |
| if (r3 != sl) {
0x0009ba00 bne 0x9b942 | goto label_0;
| }
| label_5:
0x0009ba02 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0009ba04 mov.w r3, -1 | r3 = -1;
0x0009ba08 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x0009ba0a add sp, 0x2c |
0x0009ba0c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x0009ba10 ldr.w r7, [r8, 0x14] | r7 = *((r8 + 0x14));
0x0009ba14 movs r2, 0x38 | r2 = 0x38;
0x0009ba16 movs r1, 0 | r1 = 0;
0x0009ba18 mov r0, r5 | r0 = r5;
0x0009ba1a blx 0x839c | fcn_0000839c ();
0x0009ba1e movs r3, 1 | r3 = 1;
0x0009ba20 movs r0, 0 | r0 = 0;
0x0009ba22 strd r3, r0, [sp, 8] | __asm ("strd r3, r0, [sp, 8]");
0x0009ba26 mov r2, fp | r2 = fp;
0x0009ba28 mov r1, r7 | r1 = r7;
0x0009ba2a mvn r3, 1 | r3 = ~1;
0x0009ba2e mov r0, r4 | r0 = r4;
0x0009ba30 str r5, [sp, 0x10] | var_10h = r5;
0x0009ba32 strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x0009ba36 bl 0x9b550 | r0 = fcn_0009b550 (r0, r1, r2, r3, r4, r5, r6);
| if (r0 == 0) {
0x0009ba3a cbz r0, 0x9ba80 | goto label_12;
| }
0x0009ba3c ldr r3, [sp, 0x1c] | r3 = *(arg_48h);
0x0009ba3e ldr r2, [sp, 0x18] | r2 = var_18h;
0x0009ba40 ldr r4, [sp, 0x50] | r4 = var_50h;
0x0009ba42 add r3, sl | r3 += sl;
0x0009ba44 add.w r3, r2, r3, lsl 3 | r3 = r2 + (r3 << 3);
0x0009ba48 str r5, [r3, 0x5c] | *((r3 + 0x5c)) = r5;
| do {
| label_2:
0x0009ba4a str r0, [r4] | *(r4) = r0;
0x0009ba4c add sp, 0x2c |
0x0009ba4e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x0009ba52 ldr.w r7, [r8, 0x14] | r7 = *((r8 + 0x14));
0x0009ba56 movs r2, 0x38 | r2 = 0x38;
0x0009ba58 movs r1, 0 | r1 = 0;
0x0009ba5a mov r0, r5 | r0 = r5;
0x0009ba5c blx 0x839c | fcn_0000839c ();
0x0009ba60 movs r3, 0 | r3 = 0;
0x0009ba62 mov r2, fp | r2 = fp;
0x0009ba64 strd r3, r3, [sp, 8] | __asm ("strd r3, r3, [sp, 8]");
0x0009ba68 mov r1, r7 | r1 = r7;
0x0009ba6a mvn r3, 1 | r3 = ~1;
0x0009ba6e mov r0, r4 | r0 = r4;
0x0009ba70 strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x0009ba74 str r5, [sp, 0x10] | var_10h = r5;
0x0009ba76 bl 0x9b550 | fcn_0009b550 (r0, r1, r2, r3, r4, r5, r6);
0x0009ba7a movs r3, 1 | r3 = 1;
0x0009ba7c str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
0x0009ba7e b 0x9b9e2 | goto label_1;
| label_12:
0x0009ba80 strd r0, r0, [sp, 8] | __asm ("strd r0, r0, [sp, 8]");
0x0009ba84 mov r2, r0 | r2 = r0;
0x0009ba86 strd sb, r6, [sp] | __asm ("strd sb, r6, [sp]");
0x0009ba8a mov r0, r4 | r0 = r4;
0x0009ba8c str r5, [sp, 0x10] | var_10h = r5;
0x0009ba8e mvn r3, 1 | r3 = ~1;
0x0009ba92 ldr.w r1, [r8, 0x14] | r1 = *((r8 + 0x14));
0x0009ba96 bl 0x9b550 | fcn_0009b550 (r0, r1, r2, r3, r4, r5, r6);
0x0009ba9a b 0x9b9e2 | goto label_1;
| label_6:
0x0009ba9c ldr r4, [sp, 0x50] | r4 = var_50h;
0x0009ba9e movs r0, 7 | r0 = 7;
0x0009baa0 str.w r5, [fp, 0x5c] | __asm ("str.w r5, [arg_5ch]");
0x0009baa4 b 0x9ba4a |
| } while (1);
| label_11:
0x0009baa6 ldr r4, [sp, 0x50] | r4 = var_50h;
0x0009baa8 b 0x9ba4a | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9baac */
| #include <stdint.h>
|
; (fcn) fcn.0009baac () | void fcn_0009baac (int16_t arg1, arithmetic x) {
| int16_t var_0h;
| int16_t var_4ch;
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = x;
0x0009baac ldr r2, [pc, 0x210] |
0x0009baae ldr r3, [pc, 0x214] | r3 = *(0x9bcc6);
0x0009bab0 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x0009bab4 sub sp, 0x24 |
0x0009bab6 add r2, pc | r2 = 0x13777a;
0x0009bab8 ldr r5, [r1, 0x48] | r5 = *((r1 + 0x48));
0x0009baba mov r6, r0 | r6 = r0;
0x0009babc mov r4, r1 | r4 = r1;
0x0009babe ldr r3, [r2, r3] |
0x0009bac0 ldr r0, [r1, 0x28] | r0 = *((r1 + 0x28));
0x0009bac2 ldr r3, [r3] | r3 = imp.sinh;
0x0009bac4 str r3, [sp, 0x1c] | var_1ch = r3;
0x0009bac6 mov.w r3, 0 | r3 = 0;
0x0009baca cmp r5, 0 |
| if (r5 == 0) {
0x0009bacc beq 0x9bbaa | goto label_7;
| }
0x0009bace ldr r3, [r1, 0x4c] | r3 = *((r1 + 0x4c));
0x0009bad0 add r5, r3 | r5 += r3;
| do {
0x0009bad2 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x0009bad4 add r3, r0 | r3 += r0;
0x0009bad6 cmp r5, r3 |
| if (r5 >= r3) {
0x0009bad8 bhs 0x9bbb0 | goto label_8;
| }
| label_1:
0x0009bada movs r2, 0x14 | r2 = 0x14;
0x0009badc mov r1, r5 | r1 = r5;
0x0009bade mov r0, r4 | r0 = r4;
0x0009bae0 bl 0x5f18c | r0 = fcn_0005f18c (r0, r1, r2);
0x0009bae4 cmp r0, 0 |
| if (r0 != 0) {
0x0009bae6 bne.w 0x9bc0e | goto label_0;
| }
0x0009baea ldrb r3, [r5] | r3 = *(r5);
0x0009baec lsls r0, r3, 0x18 | r0 = r3 << 0x18;
0x0009baee itt pl |
| if (r0 < r3) {
0x0009baf0 movpl r0, 1 | r0 = 1;
| }
| if (r0 < r3) {
0x0009baf2 strpl r3, [sp, 0x14] | var_14h = r3;
| }
| if (r0 < r3) {
0x0009baf4 bmi.w 0x9bc94 | goto label_9;
| }
| label_4:
0x0009baf8 ldrb r6, [r5, r0] | r6 = *((r5 + r0));
0x0009bafa add r5, r0 | r5 += r0;
0x0009bafc lsls r1, r6, 0x18 | r1 = r6 << 0x18;
0x0009bafe itt pl |
| if (r1 < r6) {
0x0009bb00 movpl r0, 1 | r0 = 1;
| }
| if (r1 < r6) {
0x0009bb02 strpl r6, [sp, 0x18] | var_18h = r6;
| }
| if (r1 < r6) {
0x0009bb04 bmi.w 0x9bc88 | goto label_10;
| }
| label_3:
0x0009bb08 cmp r6, 0 |
0x0009bb0a add r5, r0 | r5 += r0;
| if (r6 > 0) {
0x0009bb0c ble 0x9bba4 |
0x0009bb0e ldrd r3, r2, [r4, 0x28] | __asm ("ldrd r3, r2, [r4, 0x28]");
0x0009bb12 add r3, r2 | r3 += r2;
0x0009bb14 subs r3, r3, r5 | r3 -= r5;
0x0009bb16 cmp r3, r6 |
| if (r3 < r6) {
0x0009bb18 blt 0x9bba4 | goto label_11;
| }
0x0009bb1a ldr r7, [sp, 0x14] | r7 = var_14h;
0x0009bb1c ldr r3, [r4, 0x3c] | r3 = *((r4 + 0x3c));
0x0009bb1e cmp r3, r7 |
| if (r3 < r7) {
0x0009bb20 blt 0x9bba4 | goto label_11;
| }
0x0009bb22 ldr r1, [r4, 0x44] | r1 = *((r4 + 0x44));
0x0009bb24 asrs r3, r6, 0x1f | r3 = r6 >> 0x1f;
0x0009bb26 adds.w r8, r7, r6 | r8 = r7 + r6;
0x0009bb2a adc.w r3, r3, r7, asr 31 | __asm ("adc.w r3, r3, r7, asr 31");
0x0009bb2e cmp r1, r8 |
0x0009bb30 asr.w r2, r1, 0x1f | r2 = r1 >> 0x1f;
0x0009bb34 sbcs r2, r3 | __asm ("sbcs r2, r3");
| if (r1 < r8) {
0x0009bb36 bge 0x9bb50 |
0x0009bb38 adds.w sb, r8, r8 | sb = r8 + r8;
0x0009bb3c ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0009bb3e adcs r3, r3 | __asm ("adcs r3, r3");
0x0009bb40 mov r2, sb | r2 = sb;
0x0009bb42 blx 0x8500 | r0 = fcn_00008500 ();
0x0009bb46 cmp r0, 0 |
| if (r0 == 0) {
0x0009bb48 beq.w 0x9bc84 | goto label_12;
| }
0x0009bb4c strd r0, sb, [r4, 0x40] | __asm ("strd r0, sb, [r4, 0x40]");
| }
0x0009bb50 add.w r2, r6, 0xa | r2 = r6 + 0xa;
0x0009bb54 mov r1, r5 | r1 = r5;
0x0009bb56 mov r0, r4 | r0 = r4;
0x0009bb58 bl 0x5f18c | r0 = fcn_0005f18c (r0, r1, r2);
0x0009bb5c cmp r0, 0 |
| if (r0 != 0) {
0x0009bb5e bne 0x9bc0e | goto label_0;
| }
0x0009bb60 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0009bb62 mov r2, r6 | r2 = r6;
0x0009bb64 mov r1, r5 | r1 = r5;
0x0009bb66 add r0, r7 | r0 += r7;
0x0009bb68 blx 0x8610 | fcn_00008610 ();
0x0009bb6c str.w r8, [r4, 0x3c] | __asm ("str.w r8, [r4, 0x3c]");
0x0009bb70 ldrb r3, [r5, r6] | r3 = *((r5 + r6));
0x0009bb72 add r5, r6 | r5 += r6;
0x0009bb74 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x0009bb76 itt pl |
| if (r2 < r3) {
0x0009bb78 movpl r0, 1 | r0 = 1;
| }
| if (r2 < r3) {
0x0009bb7a strpl r3, [r4, 0x4c] | *((r4 + 0x4c)) = r3;
| }
| if (r2 < r3) {
0x0009bb7c bmi.w 0x9bcac | goto label_13;
| }
| label_6:
0x0009bb80 movs r2, 0 | r2 = 0;
0x0009bb82 ldr r1, [r4, 0x28] | r1 = *((r4 + 0x28));
0x0009bb84 str r2, [r4, 0x50] | *((r4 + 0x50)) = r2;
0x0009bb86 add r5, r0 | r5 += r0;
0x0009bb88 ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0009bb8a subs r1, r5, r1 | r1 = r5 - r1;
0x0009bb8c str r5, [r4, 0x48] | *((r4 + 0x48)) = r5;
0x0009bb8e subs r2, r2, r1 | r2 -= r1;
0x0009bb90 cmp r2, r3 |
| if (r2 < r3) {
0x0009bb92 blt 0x9bba4 | goto label_11;
| }
0x0009bb94 ldr r2, [r4, 0x30] | r2 = *((r4 + 0x30));
| if (r2 == 0) {
0x0009bb96 cbnz r2, 0x9bba0 |
0x0009bb98 add r5, r3 | r5 += r3;
0x0009bb9a ldrb r2, [r5, -0x1] | r2 = *((r5 - 0x1));
| if (r2 != 0) {
0x0009bb9e cbnz r2, 0x9bba4 | goto label_11;
| }
| }
0x0009bba0 cmp r3, 0 |
| if (r3 != 0) {
0x0009bba2 bne 0x9bc0c | goto label_14;
| }
| }
| label_11:
0x0009bba4 movw r0, 0x10b | r0 = 0x10b;
0x0009bba8 b 0x9bc0e | goto label_0;
| label_7:
0x0009bbaa mov r5, r0 | r5 = r0;
0x0009bbac cmp r0, 0 |
0x0009bbae bne 0x9bad2 |
| } while (r0 != 0);
| label_8:
0x0009bbb0 ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0009bbb2 cmp r3, 0 |
| if (r3 == 0) {
0x0009bbb4 beq 0x9bc28 | goto label_15;
| }
0x0009bbb6 ldr r6, [r3] | r6 = *(r3);
0x0009bbb8 blx 0x8404 | fcn_00008404 ();
0x0009bbbc movs r3, 0 | r3 = 0;
0x0009bbbe str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
| if (r6 == 0) {
0x0009bbc0 cbz r6, 0x9bc0c | goto label_14;
| }
0x0009bbc2 ldr.w r8, [r6, 8] | r8 = *((r6 + 8));
0x0009bbc6 ldr r7, [r6, 0x10] | r7 = *((r6 + 0x10));
0x0009bbc8 ldr r3, [r4, 0x44] | r3 = *((r4 + 0x44));
0x0009bbca ldr.w r5, [r8] | r5 = *(r8);
0x0009bbce ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0009bbd0 cmp r7, r3 |
0x0009bbd2 add.w r5, r5, 1 | r5++;
| if (r7 >= r3) {
0x0009bbd6 bge 0x9bc68 | goto label_16;
| }
| label_2:
0x0009bbd8 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0009bbda mov r2, r7 | r2 = r7;
0x0009bbdc blx 0x8610 | fcn_00008610 ();
0x0009bbe0 ldr r3, [r4, 0x40] | r3 = *((r4 + 0x40));
0x0009bbe2 movs r2, 0 | r2 = 0;
0x0009bbe4 mov r0, r5 | r0 = r5;
0x0009bbe6 strb r2, [r3, r7] | *((r3 + r7)) = r2;
0x0009bbe8 str r7, [r4, 0x3c] | *((r4 + 0x3c)) = r7;
0x0009bbea blx 0x86a4 | r0 = fcn_000086a4 ();
0x0009bbee mov r6, r0 | r6 = r0;
0x0009bbf0 cmp r0, 0 |
| if (r0 == 0) {
0x0009bbf2 beq 0x9bc84 | goto label_12;
| }
0x0009bbf4 ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x0009bbf8 mov r2, r5 | r2 = r5;
0x0009bbfa blx 0x8610 | fcn_00008610 ();
0x0009bbfe ldr r3, [r4, 0x38] | r3 = *((r4 + 0x38));
0x0009bc00 str r5, [r4, 0x4c] | *((r4 + 0x4c)) = r5;
0x0009bc02 str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
0x0009bc04 adds r3, 4 | r3 += 4;
0x0009bc06 str r6, [r4, 0x48] | *((r4 + 0x48)) = r6;
0x0009bc08 str r6, [r4, 0x28] | *((r4 + 0x28)) = r6;
0x0009bc0a str r3, [r4, 0x38] | *((r4 + 0x38)) = r3;
| do {
| label_14:
0x0009bc0c movs r0, 0 | r0 = 0;
| label_0:
0x0009bc0e ldr r2, [pc, 0xb8] |
0x0009bc10 ldr r3, [pc, 0xb0] | r3 = *(0x9bcc4);
0x0009bc12 add r2, pc | r2 = 0x1378e0;
0x0009bc14 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0009bc16 ldr r2, [r3] | r2 = imp.sinh;
0x0009bc18 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0009bc1a eors r2, r3 | r2 ^= r3;
0x0009bc1c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009bc20 bne 0x9bcba | goto label_17;
| }
0x0009bc22 add sp, 0x24 |
0x0009bc24 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_15:
0x0009bc28 ldrb r5, [r4, 5] | r5 = *((r4 + 5));
0x0009bc2a cmp r5, 0 |
| if (r5 == 0) {
0x0009bc2c beq 0x9bc9e | goto label_18;
| }
| label_5:
0x0009bc2e ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x0009bc30 movs r5, 0 | r5 = 0;
0x0009bc32 ldr r0, [r4, 0x10] | r0 = *((r4 + 0x10));
0x0009bc34 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0009bc36 ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x0009bc38 cmp r2, r0 |
0x0009bc3a str r5, [r4, 0x28] | *((r4 + 0x28)) = r5;
0x0009bc3c sbcs.w r1, r3, r1 | __asm ("sbcs.w r1, r3, r1");
0x0009bc40 bge 0x9bc0c |
| } while (r2 >= r0);
0x0009bc42 adds r2, 1 | r2++;
0x0009bc44 add.w r1, r4, 0x2c | r1 = r4 + 0x2c;
0x0009bc48 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009bc4c mov r0, r6 | r0 = r6;
0x0009bc4e strd r2, r3, [r4, 0x20] | __asm ("strd r2, r3, [r4, 0x20]");
0x0009bc52 str r1, [sp, 4] | var_4h_2 = r1;
0x0009bc54 add.w r1, r4, 0x28 | r1 = r4 + 0x28;
0x0009bc58 str r5, [sp, 8] | var_8h = r5;
0x0009bc5a str r1, [sp] | *(sp) = r1;
0x0009bc5c bl 0x9b130 | r0 = fcn_0009b130 (r0, r1, r2, r3, r4, r5);
0x0009bc60 cmp r0, 0 |
| if (r0 != 0) {
0x0009bc62 bne 0x9bc0e | goto label_0;
| }
0x0009bc64 ldr r5, [r4, 0x28] | r5 = *((r4 + 0x28));
0x0009bc66 b 0x9bada | goto label_1;
| label_16:
0x0009bc68 add.w sb, r7, 1 | sb = r7 + 1;
0x0009bc6c lsl.w sb, sb, 1 | sb <<= 1;
0x0009bc70 blx 0x8404 | fcn_00008404 ();
0x0009bc74 mov r0, sb | r0 = sb;
0x0009bc76 blx 0x86a4 | fcn_000086a4 ();
0x0009bc7a str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
| if (r0 != 0) {
0x0009bc7c cbz r0, 0x9bc84 |
0x0009bc7e str.w sb, [r4, 0x44] | __asm ("str.w sb, [r4, 0x44]");
0x0009bc82 b 0x9bbd8 | goto label_2;
| }
| label_12:
0x0009bc84 movs r0, 7 | r0 = 7;
0x0009bc86 b 0x9bc0e | goto label_0;
| do {
| label_10:
0x0009bc88 add r1, sp, 0x18 | r1 += var_18h;
0x0009bc8a mov r0, r5 | r0 = r5;
0x0009bc8c bl 0xb698 | fcn_0000b698 (r0, r1);
0x0009bc90 ldr r6, [sp, 0x18] | r6 = var_18h;
0x0009bc92 b 0x9bb08 | goto label_3;
| label_9:
0x0009bc94 add r1, sp, 0x14 | r1 += var_14h;
0x0009bc96 mov r0, r5 | r0 = r5;
0x0009bc98 bl 0xb698 | fcn_0000b698 (r0, r1);
0x0009bc9c b 0x9baf8 | goto label_4;
| label_18:
0x0009bc9e blx 0x8404 | fcn_00008404 ();
0x0009bca2 ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
0x0009bca4 blx 0x8b04 | fcn_00008b04 ();
0x0009bca8 str r5, [r4, 0x34] | *((r4 + 0x34)) = r5;
0x0009bcaa b 0x9bc2e | goto label_5;
| label_13:
0x0009bcac add.w r1, r4, 0x4c | r1 = r4 + 0x4c;
0x0009bcb0 mov r0, r5 | r0 = r5;
0x0009bcb2 bl 0xb698 | fcn_0000b698 (r0, r1);
0x0009bcb6 ldr r3, [r4, 0x4c] | r3 = *((r4 + 0x4c));
0x0009bcb8 b 0x9bb80 | goto label_6;
| label_17:
0x0009bcba blx 0x883c | fcn_0000883c ();
0x0009bcbe nop |
0x0009bcc0 bne 0x9bc88 |
| } while (r0 != 7);
0x0009bcc2 movs r2, r0 | r2 = r0;
0x0009bcc4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0009bcc6 movs r0, r0 |
| if (r0 == r0) {
0x0009bcc8 beq 0x9bbd8 | goto label_2;
| }
0x0009bcca movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9bccc */
| #include <stdint.h>
|
; (fcn) fcn.0009bccc () | void fcn_0009bccc (int16_t arg_0h, int16_t arg_4h, int16_t arg_8h, int16_t arg_10h, int16_t arg_28h, int16_t arg_2ch, int16_t arg_78h, int16_t arg_7ch, int16_t arg_a0h, int16_t arg_a4h, int16_t arg1, int16_t arg2) {
| int16_t var_4h;
| int16_t var_20h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_0h;
| int16_t var_7ch;
| int16_t var_f8h;
| int16_t var_48h_2;
| int16_t var_4ch_2;
| int16_t var_58h_2;
| r0 = arg1;
| r1 = arg2;
0x0009bccc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009bcd0 mov fp, r1 |
0x0009bcd2 ldr.w r3, [fp] | r3 = *(fp);
0x0009bcd6 sub sp, 0x84 |
0x0009bcd8 ldr.w r2, [pc, 0x5fc] |
0x0009bcdc str r3, [sp, 4] | *(arg_4h) = r3;
0x0009bcde ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x0009bce0 ldr.w r3, [pc, 0x5f8] | r3 = *(0x9c2dc);
0x0009bce4 add r2, pc | r2 = 0x137fc0;
0x0009bce6 str r0, [sp, 0x4c] | var_4ch = r0;
0x0009bce8 str r1, [sp, 0x48] | var_48h = r1;
0x0009bcea ldr r3, [r2, r3] |
0x0009bcec ldr.w r4, [fp, 4] | r4 = *(arg_4h);
0x0009bcf0 ldr.w sl, [r1, 0xc] | sl = *((r1 + 0xc));
0x0009bcf4 ldr r3, [r3] | r3 = imp.sinh;
0x0009bcf6 str r3, [sp, 0x7c] | var_7ch = r3;
0x0009bcf8 mov.w r3, 0 | r3 = 0;
0x0009bcfc ldrb.w r3, [r0, 0xef] | r3 = *(arg_0hxef);
0x0009bd00 cmp r3, 0 |
| if (r3 == 0) {
0x0009bd02 beq 0x9bd84 | goto label_9;
| }
0x0009bd04 ldr.w r3, [pc, 0x5d8] | r3 = *(0x0009c2e0);
0x0009bd08 add r3, pc | r3 += pc;
0x0009bd0a str r3, [sp, 0x20] | var_20h = r3;
0x0009bd0c cmp r4, 0 |
| if (r4 == 0) {
0x0009bd0e beq 0x9bd90 | goto label_5;
| }
| label_2:
0x0009bd10 ldr.w r3, [fp, 8] | r3 = *(arg_8h);
0x0009bd14 ldr r2, [sp, 4] | r2 = *(arg_4h);
0x0009bd16 cmp r3, 0 |
0x0009bd18 ldr.w r8, [r2] | r8 = *(r2);
| if (r3 <= 0) {
0x0009bd1c ble 0x9bde4 | goto label_10;
| }
0x0009bd1e subs r6, r2, 4 | r6 = r2 - 4;
| label_6:
0x0009bd20 movs r7, 0 | r7 = 0;
0x0009bd22 mov r8, r6 | r8 = r6;
0x0009bd24 ldr.w sb, [sp, 0x4c] | sb = var_4ch_2;
0x0009bd28 mov r6, r7 | r6 = r7;
0x0009bd2a str r4, [sp] | *(sp) = r4;
0x0009bd2c b 0x9bd3e |
| while (r3 != 0) {
0x0009bd2e ldrb r4, [r5, 5] | r4 = *((r5 + 5));
| if (r4 == 0) {
0x0009bd30 cbz r4, 0x9bd74 | goto label_11;
| }
| label_1:
0x0009bd32 str r6, [r5, 0x28] | *((r5 + 0x28)) = r6;
| label_0:
0x0009bd34 ldr.w r3, [fp, 8] | r3 = *(arg_78h);
0x0009bd38 adds r7, 1 | r7++;
0x0009bd3a cmp r3, r7 |
| if (r3 <= r7) {
0x0009bd3c ble 0x9bd94 | goto label_12;
| }
0x0009bd3e ldr r5, [r8, 4]! | r5 = *((r8 += 4));
0x0009bd42 ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x0009bd44 cmp r3, 0 |
0x0009bd46 bne 0x9bd2e |
| }
0x0009bd48 mov r1, r5 | r1 = r5;
0x0009bd4a mov r0, sb | r0 = sb;
0x0009bd4c bl 0x9baac | r0 = fcn_0009baac (r0, r1);
0x0009bd50 cmp r0, 0 |
| if (r0 == 0) {
0x0009bd52 beq 0x9bd34 | goto label_0;
| }
| label_3:
0x0009bd54 ldr.w r2, [pc, 0x58c] |
0x0009bd58 ldr.w r3, [pc, 0x580] | r3 = *(0x9c2dc);
0x0009bd5c add r2, pc | r2 = 0x138044;
0x0009bd5e ldr r3, [r2, r3] | r3 = imp.sinh;
0x0009bd60 ldr r2, [r3] | r2 = imp.sinh;
0x0009bd62 ldr r3, [sp, 0x7c] | r3 = *(arg_7ch);
0x0009bd64 eors r2, r3 | r2 ^= r3;
0x0009bd66 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009bd6a bne.w 0x9c2d2 | goto label_13;
| }
0x0009bd6e add sp, 0x84 |
0x0009bd70 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_11:
0x0009bd74 ldr r0, [r5, 0x28] | r0 = *((r5 + 0x28));
0x0009bd76 blx 0x8404 | fcn_00008404 ();
0x0009bd7a ldr r0, [r5, 0x34] | r0 = *((r5 + 0x34));
0x0009bd7c blx 0x8b04 | fcn_00008b04 ();
0x0009bd80 str r4, [r5, 0x34] | *((r5 + 0x34)) = r4;
0x0009bd82 b 0x9bd32 | goto label_1;
| label_9:
0x0009bd84 ldr.w r3, [pc, 0x560] | r3 = *(0x0009c2e8);
0x0009bd88 add r3, pc | r3 += pc;
0x0009bd8a str r3, [sp, 0x20] | var_20h = r3;
0x0009bd8c cmp r4, 0 |
| if (r4 != 0) {
0x0009bd8e bne 0x9bd10 | goto label_2;
| }
| label_5:
0x0009bd90 movs r0, 0 | r0 = 0;
0x0009bd92 b 0x9bd54 | goto label_3;
| label_12:
0x0009bd94 ldr r4, [sp] | r4 = *(sp);
0x0009bd96 cmp r3, r4 |
0x0009bd98 it eq |
| if (r3 != r4) {
0x0009bd9a addeq r3, r4, -1 | r3 = r4 + -1;
| }
0x0009bd9e subs r7, r3, 1 | r7 = r3 - 1;
| if (r7 < r3) {
0x0009bda0 bmi 0x9bdde | goto label_14;
| }
0x0009bda2 ldr.w sb, [sp, 4] | sb = var_7ch;
0x0009bda6 subs r6, r4, 1 | r6 = r4 - 1;
0x0009bda8 mov r8, r6 | r8 = r6;
0x0009bdaa str r4, [sp, 8] | var_f8h = r4;
| label_4:
0x0009bdac cmp r7, r8 |
| if (r7 >= r8) {
0x0009bdae bge 0x9bdd8 | goto label_15;
| }
0x0009bdb0 add.w r5, sb, r7, lsl 2 | r5 = sb + (r7 << 2);
0x0009bdb4 mov r6, r7 | r6 = r7;
0x0009bdb6 str r7, [sp] | *(sp) = r7;
0x0009bdb8 b 0x9bdc4 |
| while (r0 >= 0) {
0x0009bdba adds r6, 1 | r6++;
0x0009bdbc strd r4, r7, [r5, -0x4] | __asm ("strd r4, r7, [r5, -0x4]");
0x0009bdc0 cmp r6, r8 |
| if (r6 == r8) {
0x0009bdc2 beq 0x9bdd6 | goto label_16;
| }
0x0009bdc4 ldr r7, [r5] | r7 = *(r5);
0x0009bdc6 ldr r4, [r5, 4]! | r4 = *((r5 += 4));
0x0009bdca mov r0, r7 | r0 = r7;
0x0009bdcc mov r1, r4 | r1 = r4;
0x0009bdce bl 0xe600 | r0 = fcn_0000e600 (r0, r1);
0x0009bdd2 cmp r0, 0 |
0x0009bdd4 bge 0x9bdba |
| }
| label_16:
0x0009bdd6 ldr r7, [sp] | r7 = *(sp);
| label_15:
0x0009bdd8 subs r7, 1 | r7--;
| if (r7 >= 1) {
0x0009bdda bhs 0x9bdac | goto label_4;
| }
0x0009bddc ldr r4, [sp, 8] | r4 = var_f8h;
| label_14:
0x0009bdde ldr r3, [sp, 4] | r3 = var_7ch;
0x0009bde0 ldr.w r8, [r3] | r8 = *(r3);
| label_10:
0x0009bde4 ldr.w r3, [r8, 0x28] | r3 = *((r8 + 0x28));
0x0009bde8 movs r2, 0 | r2 = 0;
0x0009bdea str.w r2, [fp, 8] | __asm ("str.w r2, [arg_78h]");
0x0009bdee cmp r3, 0 |
| if (r3 == 0) {
0x0009bdf0 beq 0x9bd90 | goto label_5;
| }
0x0009bdf2 ldr r3, [sp, 0x48] | r3 = var_48h_2;
0x0009bdf4 ldr.w r5, [r8, 0x3c] | r5 = *((r8 + 0x3c));
0x0009bdf8 ldr.w r7, [r8, 0x40] | r7 = *((r8 + 0x40));
0x0009bdfc ldr r1, [r3] | r1 = *(r3);
0x0009bdfe eor r3, sl, 0x10 | r3 = sl ^ 0x10;
0x0009be02 str.w r5, [fp, 0x2c] | __asm ("str.w r5, [arg_2ch]");
0x0009be06 str.w r7, [fp, 0x28] | __asm ("str.w r7, [arg_28h]");
0x0009be0a subs r2, r1, r2 | r2 = r1 - r2;
0x0009be0c it ne |
| if (r2 == r1) {
0x0009be0e movne r2, 1 | r2 = 1;
| }
0x0009be10 ands.w r2, r2, r3, lsr 4 | r2 &= (r3 >> 4);
| if (r2 != r2) {
0x0009be14 bne.w 0x9c256 | goto label_17;
| }
| label_8:
0x0009be18 cmp r4, 1 |
0x0009be1a itt le |
| if (r4 > 1) {
0x0009be1c movle r3, 1 | r3 = 1;
| }
| if (r4 > 1) {
0x0009be1e strle r3, [sp, 0x58] | var_58h_2 = r3;
| }
| if (r4 <= 1) {
0x0009be20 ble 0x9be5e | goto label_18;
| }
0x0009be22 movs r3, 1 | r3 = 1;
0x0009be24 ldr r6, [sp, 4] | r6 = var_7ch;
0x0009be26 mov sb, r3 | sb = r3;
0x0009be28 b 0x9be44 |
| while (r2 != 0) {
0x0009be2a ldr r2, [r3, 0x3c] | r2 = *((r3 + 0x3c));
0x0009be2c cmp r5, r2 |
| if (r5 != r2) {
0x0009be2e bne 0x9be4e | goto label_19;
| }
0x0009be30 ldr r1, [r3, 0x40] | r1 = *((r3 + 0x40));
0x0009be32 mov r2, r5 | r2 = r5;
0x0009be34 mov r0, r7 | r0 = r7;
0x0009be36 blx 0x8214 | r0 = sysconf ();
| if (r0 != 0) {
0x0009be3a cbnz r0, 0x9be4e | goto label_19;
| }
0x0009be44 ldr r3, [r6, 4]! | r3 = *((r6 += 4));
0x0009be48 ldr r2, [r3, 0x28] | r2 = *((r3 + 0x28));
0x0009be4a cmp r2, 0 |
0x0009be4c bne 0x9be2a |
| }
| label_19:
0x0009be4e mov r3, sb | r3 = sb;
0x0009be50 str.w sb, [sp, 0x58] | __asm ("str.w sb, [var_58h_2]");
0x0009be54 sub.w r3, r3, 1 | r3--;
0x0009be58 clz r3, r3 | r3 &= r3;
0x0009be5c lsrs r3, r3, 5 | r3 >>= 5;
| label_18:
0x0009be5e ldr r2, [sp, 0x4c] | r2 = var_4ch_2;
0x0009be60 tst.w sl, 0x22 |
0x0009be64 and r3, r3, 1 | r3 &= 1;
0x0009be68 it ne |
| if ((sl & 0x22) == 0) {
0x0009be6a movne r3, 0 | r3 = 0;
| }
0x0009be6c ldrb.w r0, [r2, 0xef] | r0 = *((r2 + 0xef));
| if (r3 != 0) {
0x0009be70 cbz r3, 0x9bea2 |
0x0009be72 ldr.w r3, [r8, 0x38] | r3 = *((r8 + 0x38));
0x0009be76 cmp r0, 0 |
| if (r0 == 0) {
0x0009be78 beq.w 0x9c21c | goto label_20;
| }
| if (r3 != 0) {
0x0009be7c cbnz r3, 0x9bea2 | goto label_21;
| }
0x0009be7e ldrd r4, r3, [r8, 0x48] | __asm ("ldrd r4, r3, [r8, 0x48]");
0x0009be82 str.w r3, [fp, 0x34] | __asm ("str.w r3, [arg_a4h]");
| label_7:
0x0009be86 movs r3, 1 | r3 = 1;
0x0009be88 str.w r4, [fp, 0x30] | __asm ("str.w r4, [arg_a0h]");
0x0009be8c str r3, [sp, 0x58] | var_58h_2 = r3;
0x0009be8e ldr r3, [sp, 0x58] | r3 = var_58h_2;
0x0009be90 movs r0, 0x64 | r0 = 0x64;
0x0009be92 str.w r3, [fp, 8] | __asm ("str.w r3, [arg_78h]");
0x0009be96 b 0x9bd54 | goto label_3;
| }
| label_21:
0x0009bea2 ldr r3, [sp, 4] | r3 = var_7ch;
0x0009bea4 movs r5, 0 | r5 = 0;
0x0009bea6 ldr.w r8, [sp, 0x58] | r8 = var_58h_2;
0x0009beaa ldr.w sb, [sp, 0x4c] | sb = var_4ch_2;
0x0009beae subs r6, r3, 4 | r6 = r3 - 4;
0x0009beb0 mov r7, r6 | r7 = r6;
0x0009beb2 b 0x9beb8 |
| while (r5 != r8) {
0x0009beb4 ldrb.w r0, [sb, 0xef] | r0 = *((sb + 0xef));
0x0009beb8 ldr r1, [r7, 4]! | r1 = *((r7 += 4));
0x0009bebc adds r5, 1 | r5++;
0x0009bebe bl 0x5fc90 | fcn_0005fc90 (r0);
0x0009bec2 cmp r5, r8 |
0x0009bec4 bne 0x9beb4 |
| }
0x0009bec6 ldr.w sb, [sp, 0x58] | sb = var_58h_2;
0x0009beca ldr r5, [sp, 4] | r5 = var_7ch;
0x0009becc ldr r3, [sp, 0x20] | r3 = *((sp + 0x20));
0x0009bece mov r1, sb | r1 = sb;
0x0009bed0 mov r2, sb | r2 = sb;
0x0009bed2 mov r0, r5 | r0 = r5;
0x0009bed4 bl 0xbcf0 | fcn_0000bcf0 (r0, r1, r2, r3);
0x0009bed8 ldr r1, [r5] | r1 = *(r5);
0x0009beda ldr r3, [r1, 0x50] | r3 = *((r1 + 0x50));
0x0009bedc cmp r3, 0 |
| if (r3 != 0) {
0x0009bede beq.w 0x9c09e |
| }
0x0009c09e ldr r3, [sp, 0x58] | r3 = var_58h_2;
0x0009c0a0 str.w r3, [fp, 8] | __asm ("str.w r3, [arg_78h]");
0x0009c0a4 b 0x9bd20 | goto label_6;
| label_20:
0x0009c21c ldrd r4, r5, [r8, 0x48] | __asm ("ldrd r4, r5, [r8, 0x48]");
0x0009c220 str.w r5, [fp, 0x34] | __asm ("str.w r5, [arg_a4h]");
0x0009c224 cmp r3, 0 |
| if (r3 == 0) {
0x0009c226 beq.w 0x9be86 | goto label_7;
| }
0x0009c22a ldrd r0, r3, [fp, 0x10] | __asm ("ldrd r0, r3, [arg_10h]");
0x0009c22e cmp r5, r3 |
| if (r5 <= r3) {
0x0009c230 ble 0x9c242 | void (*0x9c242)() ();
| }
| label_17:
0x0009c256 ldr r3, [sp, 0x48] | r3 = var_48h_2;
0x0009c258 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0009c25a cmp r5, r2 |
| if (r5 < r2) {
0x0009c25c blt.w 0x9bd90 | goto label_5;
| }
0x0009c260 eor r3, sl, 8 | r3 = sl ^ 8;
0x0009c264 ite gt |
| if (r5 <= r2) {
0x0009c266 movgt r0, 1 | r0 = 1;
| }
| if (r5 > r2) {
0x0009c268 movle r0, 0 | r0 = 0;
| }
0x0009c26a ands.w r0, r0, r3, lsr 3 | r0 &= (r3 >> 3);
| if (r0 != r0) {
0x0009c26e bne.w 0x9bd90 | goto label_5;
| }
0x0009c272 mov r0, r7 | r0 = r7;
0x0009c274 blx 0x8214 | r0 = sysconf ();
0x0009c278 cmp r0, 0 |
| if (r0 == 0) {
0x0009c27a beq.w 0x9be18 | goto label_8;
| }
0x0009c27e b 0x9bd90 | goto label_5;
| label_13:
0x0009c2d2 blx 0x883c | fcn_0000883c ();
0x0009c2d6 nop |
0x0009c2d8 ldm r7, {r2, r4, r5, r7} | r2 = *(r7);
| r4 = *((r7 + 4));
| r5 = *((r7 + 8));
| r7 = *((r7 + 12));
0x0009c2da movs r2, r0 | r2 = r0;
0x0009c2dc lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0009c2de movs r0, r0 |
0x0009c2e0 add r5, r6 | r5 += r6;
0x0009c2e2 vcvt.u32.f32 d28, d28, 9 | __asm ("vcvt.u32.f32 d28, d28, 9");
0x0009c2e6 movs r2, r0 | r2 = r0;
0x0009c2e8 muls r5, r5, r5 | r5 *= r5;
0x0009c2ea invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9c5e4 */
| #include <stdint.h>
|
; (fcn) fcn.0009c5e4 () | void fcn_0009c5e4 (int16_t arg_0h, int16_t arg_1h, int16_t arg_8h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int32_t var_18h;
| int32_t var_18h_2;
| int32_t var_20h;
| int32_t var_20h_2;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| arithmetic var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| arithmetic x;
| int16_t var_60h;
| int32_t var_60h_2;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int32_t var_74h;
| int32_t var_74h_2;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int32_t var_4h;
| int32_t var_4h_3;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_a0h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009c5e4 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0009c5e8 sub sp, 0xd4 |
0x0009c5ea str r2, [sp, 0x44] | var_44h = r2;
0x0009c5ec mov r6, r2 | r6 = r2;
0x0009c5ee mov fp, r3 |
0x0009c5f0 add r4, sp, 0x94 | r4 += var_94h;
0x0009c5f2 ldr.w r2, [pc, 0x948] | r2 = *(0x0009cf3c);
0x0009c5f6 mov r5, r0 | r5 = r0;
0x0009c5f8 ldr.w r3, [pc, 0x944] |
0x0009c5fc mov r8, r1 | r8 = r1;
0x0009c5fe str r4, [sp, 0x3c] | var_3ch = r4;
0x0009c600 movs r7, 1 | r7 = 1;
0x0009c602 add r2, pc | r2 += pc;
0x0009c604 str r0, [sp, 0x34] | var_34h = r0;
0x0009c606 str r1, [sp, 0x48] | var_48h = r1;
0x0009c608 mov r0, r4 | r0 = r4;
0x0009c60a ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0009c60c movs r1, 0 | r1 = 0;
0x0009c60e movs r2, 0x38 | r2 = 0x38;
0x0009c610 ldr r3, [r3] | r3 = *(0x9cf40);
0x0009c612 str r3, [sp, 0xcc] | var_cch = r3;
0x0009c614 mov.w r3, 0 | r3 = 0;
0x0009c618 blx 0x839c | fcn_0000839c ();
0x0009c61c movs r3, 0 | r3 = 0;
0x0009c61e str r4, [sp, 0x10] | var_10h = r4;
0x0009c620 str r3, [sp, 0xc] | var_ch = r3;
0x0009c622 mov r2, r6 | r2 = r6;
0x0009c624 strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x0009c628 mov r1, r8 | r1 = r8;
0x0009c62a mov r3, fp | r3 = fp;
0x0009c62c mov r0, r5 | r0 = r5;
0x0009c62e str r7, [sp, 8] | var_8h = r7;
0x0009c630 bl 0x9b550 | r0 = fcn_0009b550 (r0, r1, r2, r3, r4, r5, r6);
0x0009c634 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0009c636 cbnz r0, 0x9c658 | goto label_5;
| }
0x0009c638 mov r6, r5 | r6 = r5;
0x0009c63a ldr r5, [sp, 0x98] | r5 = var_98h;
| if (r5 == 0) {
0x0009c63c cbz r5, 0x9c658 | goto label_5;
| }
0x0009c63e cmp.w fp, -1 |
| if (fp == -1) {
0x0009c642 beq 0x9c71a | goto label_20;
| }
0x0009c644 add.w sl, sp, 0x84 | sl += var_84h;
0x0009c648 mov r3, r0 | r3 = r0;
0x0009c64a mov r2, sl | r2 = sl;
0x0009c64c movs r1, 0xf | r1 = 0xf;
0x0009c64e mov r0, r6 | r0 = r6;
0x0009c650 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
| if (r0 == 0) {
0x0009c654 cbz r0, 0x9c680 | goto label_21;
| }
| label_1:
0x0009c656 mov r4, r0 | r4 = r0;
| do {
| label_5:
0x0009c658 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x0009c65a bl 0x5ede8 | fcn_0005ede8 (r0);
0x0009c65e ldr.w r2, [pc, 0x8e4] | r2 = *(0x0009cf44);
0x0009c662 ldr.w r3, [pc, 0x8dc] | r3 = *(0x9cf42);
0x0009c666 add r2, pc | r2 += pc;
0x0009c668 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0009c66a ldr r2, [r3] | r2 = *(0x9cf42);
0x0009c66c ldr r3, [sp, 0xcc] | r3 = var_cch;
0x0009c66e eors r2, r3 | r2 ^= r3;
0x0009c670 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009c674 bne.w 0x9cf36 | goto label_22;
| }
0x0009c678 mov r0, r4 | r0 = r4;
0x0009c67a add sp, 0xd4 |
0x0009c67c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_21:
0x0009c680 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009c682 mov r1, r7 | r1 = r7;
0x0009c684 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009c686 ldr r6, [sp, 0x48] | r6 = var_48h;
0x0009c688 ldr.w r0, [r3, 0x100] | r0 = *((r3 + 0x100));
0x0009c68c ldr.w r8, [sp, 0x84] | r8 = var_84h;
0x0009c690 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0009c692 asr.w sb, r6, 0x1f | sb = r6 >> 0x1f;
0x0009c696 mov r7, r3 | r7 = r3;
0x0009c698 str r3, [sp, 0x54] | var_54h = r3;
0x0009c69a smlal r2, r3, r6, r0 | __asm ("smlal r2, r3, r6, r0");
0x0009c69e mov r0, r8 | r0 = r8;
0x0009c6a0 lsls r3, r3, 0xa | r3 <<= 0xa;
0x0009c6a2 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009c6a6 lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009c6a8 blx 0x84e8 | fcn_000084e8 ();
0x0009c6ac ldr r1, [sp, 0x34] | r1 = var_34h;
0x0009c6ae mov r3, r7 | r3 = r7;
0x0009c6b0 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009c6b2 movw ip, 0x3ff | ip = 0x3ff;
0x0009c6b6 mov r0, r8 | r0 = r8;
0x0009c6b8 ldr.w r1, [r1, 0x100] | r1 = *((r1 + 0x100));
0x0009c6bc str r1, [sp, 0x30] | var_30h = r1;
0x0009c6be movs r1, 2 | r1 = 2;
0x0009c6c0 ldr r7, [sp, 0x30] | r7 = var_30h;
0x0009c6c2 smlal r2, r3, r6, r7 | __asm ("smlal r2, r3, r6, r7");
0x0009c6c6 lsls r3, r3, 0xa | r3 <<= 0xa;
0x0009c6c8 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009c6cc lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009c6ce adds.w r2, r2, ip | r2 += ip;
0x0009c6d2 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009c6d6 blx 0x84e8 | fcn_000084e8 ();
0x0009c6da mov r0, r8 | r0 = r8;
0x0009c6dc blx 0x8728 | r0 = fcn_00008728 ();
0x0009c6e0 cmp r0, 0x64 |
0x0009c6e2 it ne |
| if (r0 != 0x64) {
0x0009c6e4 strdne r4, r4, [sp, 0x4c] | __asm ("strdne r4, r4, [var_4ch]");
| }
| if (r0 == 0x64) {
0x0009c6e8 beq.w 0x9cc16 | goto label_23;
| }
| label_11:
0x0009c6ec mov r0, r8 | r0 = r8;
0x0009c6ee blx 0x81f8 | fcn_000081f8 ();
0x0009c6f2 str r0, [sp, 0x5c] | x = r0;
0x0009c6f4 cmp r0, 0 |
| if (r0 != 0) {
0x0009c6f6 bne.w 0x9cc12 | goto label_24;
| }
0x0009c6fa cmn.w fp, 2 |
| if (fp == 2) {
0x0009c6fe beq.w 0x9cb44 | goto label_25;
| }
| label_0:
0x0009c702 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0009c704 movs r3, 0 | r3 = 0;
0x0009c706 mov r2, sl | r2 = sl;
0x0009c708 movs r1, 8 | r1 = 8;
0x0009c70a ldr.w r5, [r0, 0x100] | r5 = *((r0 + 0x100));
0x0009c70e bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009c712 mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x0009c714 cbz r0, 0x9c730 | goto label_26;
| }
0x0009c716 mov r4, r0 | r4 = r0;
0x0009c718 b 0x9c658 |
| } while (1);
| label_20:
0x0009c71a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009c71c add.w sl, sp, 0x84 | sl += var_84h;
0x0009c720 strd r0, r0, [sp, 0x4c] | __asm ("strd r0, r0, [var_4ch]");
0x0009c724 asr.w sb, r3, 0x1f | sb = r3 >> 0x1f;
0x0009c728 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009c72a asrs r3, r3, 0x1f | r3 >>= 0x1f;
0x0009c72c str r3, [sp, 0x54] | var_54h = r3;
0x0009c72e b 0x9c702 | goto label_0;
| label_26:
0x0009c730 ldr r6, [sp, 0x48] | r6 = var_48h;
0x0009c732 mul r0, r5, sb | r0 = r5 * sb;
0x0009c736 asrs r1, r5, 0x1f | r1 = r5 >> 0x1f;
0x0009c738 ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009c73a mla r0, r6, r1, r0 | __asm ("mla r0, r6, r1, r0");
0x0009c73e ldr.w r2, [r3, 0x100] | r2 = *((r3 + 0x100));
0x0009c742 umull r5, r1, r5, r6 | r5:r1 = r5 * r6;
0x0009c746 mul r3, r2, sb | r3 = r2 * sb;
0x0009c74a add.w sb, fp, 1 | sb += arg_1h;
0x0009c74e add r0, r1 | r0 += r1;
0x0009c750 ldr r1, [sp, 0x44] | r1 = var_44h;
0x0009c752 adds r5, r5, r1 | r5 += r1;
0x0009c754 ldr r1, [sp, 0x54] | r1 = var_54h;
0x0009c756 adc.w r0, r0, r1 | __asm ("adc.w r0, r0, r1");
0x0009c75a asrs r1, r2, 0x1f | r1 = r2 >> 0x1f;
0x0009c75c lsls r0, r0, 0xa | r0 <<= 0xa;
0x0009c75e mla r3, r6, r1, r3 | __asm ("mla r3, r6, r1, r3");
0x0009c762 umull r2, r1, r2, r6 | r2:r1 = r2 * r6;
0x0009c766 orr.w r0, r0, r5, lsr 22 | r0 |= (r5 >> 22);
0x0009c76a lsls r5, r5, 0xa | r5 <<= 0xa;
0x0009c76c adds.w r8, r5, sb | r8 = r5 + sb;
0x0009c770 ldr r5, [sp, 0x84] | r5 = var_84h;
0x0009c772 add r3, r1 | r3 += r1;
0x0009c774 asr.w r1, sb, 0x1f | r1 = sb >> 0x1f;
0x0009c778 adc.w r6, r1, r0 | __asm ("adc.w r6, r1, r0");
0x0009c77c ldr r0, [sp, 0x44] | r0 = var_44h;
0x0009c77e adds r2, r2, r0 | r2 += r0;
0x0009c780 ldr r0, [sp, 0x54] | r0 = var_54h;
0x0009c782 adc.w r3, r3, r0 | __asm ("adc.w r3, r3, r0");
0x0009c786 mov r0, r5 | r0 = r5;
0x0009c788 lsls r3, r3, 0xa | r3 <<= 0xa;
0x0009c78a orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009c78e lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009c790 adds.w r2, r2, sb | r2 += sb;
0x0009c794 adc.w r3, r1, r3 | __asm ("adc.w r3, r1, r3");
0x0009c798 movs r1, 1 | r1 = 1;
0x0009c79a blx 0x84e8 | fcn_000084e8 ();
0x0009c79e mov r0, r5 | r0 = r5;
0x0009c7a0 blx 0x8728 | r0 = fcn_00008728 ();
0x0009c7a4 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0009c7a6 beq.w 0x9cc2e | goto label_27;
| }
0x0009c7aa mov r0, r5 | r0 = r5;
0x0009c7ac blx 0x81f8 | fcn_000081f8 ();
0x0009c7b0 str r0, [sp, 0x5c] | x = r0;
| label_16:
0x0009c7b2 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009c7b4 ldr r1, [sp, 0x50] | r1 = var_50h;
0x0009c7b6 ldr r0, [sp, 0x5c] | r0 = x;
0x0009c7b8 cmp r2, r8 |
0x0009c7ba sbcs.w r3, r1, r6 | __asm ("sbcs.w r3, r1, r6");
0x0009c7be ite lt |
| if (r2 >= r8) {
0x0009c7c0 movlt r3, 1 | r3 = 1;
| }
| if (r2 < r8) {
0x0009c7c2 movge r3, 0 | r3 = 0;
| }
0x0009c7c4 cmp.w fp, -1 |
0x0009c7c8 ite eq |
| if (fp != -1) {
0x0009c7ca moveq r3, 0 | r3 = 0;
| }
| if (fp == -1) {
0x0009c7cc andne r3, r3, 1 | r3 &= 1;
| }
0x0009c7d0 cmp r0, 0 |
| if (r0 != 0) {
0x0009c7d2 bne.w 0x9cc12 | goto label_24;
| }
0x0009c7d6 lsls r3, r3, 1 | r3 <<= 1;
0x0009c7d8 strd r2, r1, [sp, 0x68] | __asm ("strd r2, r1, [var_68h]");
0x0009c7dc str.w r8, [sp, 0x4c] | __asm ("str.w r8, [var_4ch]");
0x0009c7e0 orr r2, r3, 1 | r2 = r3 | 1;
0x0009c7e4 str r6, [sp, 0x50] | var_50h = r6;
| label_6:
0x0009c7e6 movs r3, 0 | r3 = 0;
0x0009c7e8 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0009c7ea str r3, [sp, 0x84] | var_84h = r3;
0x0009c7ec ldr r0, [sp, 0x34] | r0 = var_34h;
0x0009c7ee strd r3, r3, [sl, 4] | __asm ("strd r3, r3, [var_4h]");
0x0009c7f2 str r2, [sp, 0x90] | var_90h = r2;
0x0009c7f4 mov r2, r3 | r2 = r3;
0x0009c7f6 str.w sl, [sp, 0xa0] | __asm ("str.w sl, [var_a0h]");
0x0009c7fa bl 0x9c4d4 | r0 = fcn_0009c4d4 (r0, r1, r2, r3);
0x0009c7fe cmp r0, 0 |
| if (r0 != 0) {
0x0009c800 bne.w 0x9c656 | goto label_1;
| }
0x0009c804 mov r7, r0 | r7 = r0;
0x0009c806 strd r4, fp, [sp, 0x60] | __asm ("strd r4, fp, [var_0h_2x60]");
| label_2:
0x0009c80a ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x0009c80c ldr r0, [sp, 0x34] | r0 = var_34h;
0x0009c80e bl 0x9bccc | r0 = fcn_0009bccc (r0, r1, r2, r3, r4, r5, r6);
0x0009c812 cmp r0, 0x64 |
| if (r0 != 0x64) {
0x0009c814 bne.w 0x9cae6 | goto label_28;
| }
0x0009c818 ldr r3, [sp, 0xbc] | r3 = var_bch;
0x0009c81a ldr.w r8, [sp, 0xc8] | r8 = var_c8h;
0x0009c81e str r3, [sp, 0x38] | var_38h = r3;
0x0009c820 ldr r3, [sp, 0xc0] | r3 = var_c0h;
0x0009c822 str r3, [sp, 0x30] | var_30h = r3;
0x0009c824 ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x0009c826 str r3, [sp, 0x40] | var_40h = r3;
0x0009c828 cmp r7, 0 |
| if (r7 == 0) {
0x0009c82a beq.w 0x9ca88 | goto label_29;
| }
| label_4:
0x0009c82e ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x0009c830 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009c832 ldr.w sl, [r7, 0x2c] | sl = *((r7 + 0x2c));
0x0009c836 cmp r0, r3 |
0x0009c838 it ge |
| if (r0 < r3) {
0x0009c83a movge r0, r3 | r0 = r3;
| }
0x0009c83c ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x0009c83e cmp r0, 0 |
0x0009c840 itt le |
| if (r0 > 0) {
0x0009c842 ldrle sb, [sp, 0x30] | sb = var_30h;
| }
| if (r0 <= 0) {
0x0009c846 movs r4, 0 | r4 = 0;
| }
| if (r4 <= 0) {
0x0009c848 ble 0x9c86c | goto label_30;
| }
0x0009c84a ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009c84c subs r3, 1 | r3--;
0x0009c84e movs r4, 0 | r4 = 0;
0x0009c850 subs r2, 1 | r2--;
0x0009c852 b 0x9c85a |
| while (r5 == r1) {
0x0009c854 adds r4, 1 | r4++;
0x0009c856 cmp r4, r0 |
| if (r4 == r0) {
0x0009c858 beq 0x9c866 | goto label_31;
| }
0x0009c85a ldrb r5, [r3, 1]! | r5 = *((r3 += 1));
0x0009c85e ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x0009c862 cmp r5, r1 |
0x0009c864 beq 0x9c854 |
| }
| label_31:
0x0009c866 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009c868 sub.w sb, r3, r4 | sb = r3 - r4;
| label_30:
0x0009c86c cmp.w sb, 0 |
| if (sb <= 0) {
0x0009c870 ble.w 0x9ca6a | goto label_32;
| }
0x0009c874 asrs r2, r4, 0x1f | r2 = r4 >> 0x1f;
0x0009c876 mov r3, r4 | r3 = r4;
0x0009c878 movs r1, 0 | r1 = 0;
| do {
0x0009c87a lsrs r3, r3, 7 | r3 >>= 7;
0x0009c87c adds r1, 1 | r1++;
0x0009c87e orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x0009c882 lsrs r2, r2, 7 | r2 >>= 7;
0x0009c884 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x0009c888 bne 0x9c87a |
| } while (r0 != r3);
0x0009c88a asr.w r2, sb, 0x1f | r2 = sb >> 0x1f;
0x0009c88e mov r3, sb | r3 = sb;
0x0009c890 movs r0, 0 | r0 = 0;
| do {
0x0009c892 lsrs r3, r3, 7 | r3 >>= 7;
0x0009c894 adds r0, 1 | r0++;
0x0009c896 orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x0009c89a lsrs r2, r2, 7 | r2 >>= 7;
0x0009c89c orrs.w r5, r3, r2 | r5 = r3 | r2;
0x0009c8a0 bne 0x9c892 |
| } while (r5 != r3);
0x0009c8a2 asr.w fp, r8, 0x1f |
0x0009c8a6 add r1, r0 | r1 += r0;
0x0009c8a8 add r1, sb | r1 += sb;
0x0009c8aa mov r5, r8 | r5 = r8;
0x0009c8ac movs r0, 0 | r0 = 0;
0x0009c8ae mov r6, fp | r6 = fp;
0x0009c8b0 mov r3, r8 | r3 = r8;
0x0009c8b2 mov r2, fp | r2 = fp;
| do {
0x0009c8b4 lsrs r3, r3, 7 | r3 >>= 7;
0x0009c8b6 adds r0, 1 | r0++;
0x0009c8b8 orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x0009c8bc lsrs r2, r2, 7 | r2 >>= 7;
0x0009c8be orrs.w ip, r3, r2 |
0x0009c8c2 bne 0x9c8b4 |
| } while (ip != r3);
0x0009c8c4 cmp.w sl, 0 |
0x0009c8c8 add r1, r0 | r1 += r0;
0x0009c8ca add r1, r8 | r1 += r8;
| if (sl <= 0) {
0x0009c8cc ble 0x9c96e | goto label_33;
| }
0x0009c8ce ldr r0, [sp, 0x34] | r0 = var_34h;
0x0009c8d0 add.w r2, sl, r1 | r2 = sl + r1;
0x0009c8d4 ldr.w r3, [r0, 0xe8] | r3 = *((r0 + 0xe8));
0x0009c8d8 cmp r2, r3 |
| if (r2 <= r3) {
0x0009c8da ble 0x9c96e | goto label_33;
| }
0x0009c8dc ldrd r2, r3, [r7, 0x10] | __asm ("ldrd r2, r3, [r7, 0x10]");
0x0009c8e0 mvn r1, 0x80000000 | r1 = ~0x80000000;
0x0009c8e4 cmp r3, r1 |
0x0009c8e6 it eq |
| if (r3 == r1) {
0x0009c8e8 cmpeq r2, -1 | __asm ("cmpeq r2, -1");
| }
| if (r3 == r1) {
0x0009c8ec beq.w 0x9ca6a | goto label_32;
| }
0x0009c8f0 adds r1, r2, 1 | r1 = r2 + 1;
0x0009c8f2 mov sb, r0 | sb = r0;
0x0009c8f4 str r1, [r7, 0x10] | *((r7 + 0x10)) = r1;
0x0009c8f6 adc r1, r3, 0 | __asm ("adc r1, r3, 0");
0x0009c8fa str r1, [r7, 0x14] | *((r7 + 0x14)) = r1;
0x0009c8fc str.w sl, [sp, 4] | __asm ("str.w sl, [var_4h_2]");
0x0009c900 ldr r1, [r7, 0x30] | r1 = *((r7 + 0x30));
0x0009c902 str r1, [sp] | *(sp) = r1;
0x0009c904 bl 0x88688 | r0 = fcn_00088688 (r0, r1, r2);
0x0009c908 mov sl, r0 | sl = r0;
0x0009c90a cmp r0, 0 |
| if (r0 != 0) {
0x0009c90c bne.w 0x9cae0 | goto label_34;
| }
0x0009c910 ldr.w r2, [sb, 0x34] | r2 = *((sb + 0x34));
0x0009c914 adds r3, r4, 1 | r3 = r4 + 1;
0x0009c916 mov r0, sb | r0 = sb;
0x0009c918 mov r1, r7 | r1 = r7;
0x0009c91a adds r2, 1 | r2++;
0x0009c91c str.w r2, [sb, 0x34] | __asm ("str.w r2, [sb, 0x34]");
0x0009c920 ldr r2, [sp, 0x38] | r2 = var_38h;
0x0009c922 bl 0x4545c | r0 = fcn_0004545c (r0, r1, r2, r3);
0x0009c926 mov sl, r0 | sl = r0;
0x0009c928 cmp r0, 0 |
| if (r0 != 0) {
0x0009c92a bne.w 0x9cae0 | goto label_34;
| }
0x0009c92e ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009c930 mov r1, r0 | r1 = r0;
0x0009c932 str r0, [r7, 0x1c] | *((r7 + 0x1c)) = r0;
0x0009c934 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
| do {
0x0009c936 lsrs r3, r3, 7 | r3 >>= 7;
0x0009c938 mov r0, r1 | r0 = r1;
0x0009c93a adds r1, 1 | r1++;
0x0009c93c orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x0009c940 lsrs r2, r2, 7 | r2 >>= 7;
0x0009c942 orrs.w r4, r3, r2 | r4 = r3 | r2;
0x0009c946 bne 0x9c936 |
| } while (r4 != r3);
0x0009c948 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009c94a adds r1, r0, 2 | r1 = r0 + 2;
0x0009c94c movs r2, 0 | r2 = 0;
0x0009c94e add r1, r3 | r1 += r3;
0x0009c950 mov r3, r8 | r3 = r8;
| do {
0x0009c952 lsrs r3, r3, 7 | r3 >>= 7;
0x0009c954 adds r2, 1 | r2++;
0x0009c956 orr.w r3, r3, fp, lsl 25 | r3 |= (fp << 25);
0x0009c95a lsr.w fp, fp, 7 |
0x0009c95e orrs.w r0, r3, fp | r0 = r3 | fp;
0x0009c962 bne 0x9c952 |
| } while (r0 != r3);
0x0009c964 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x0009c968 add r1, r2 | r1 += r2;
0x0009c96a add r1, r8 | r1 += r8;
0x0009c96c movs r4, 0 | r4 = 0;
| label_33:
0x0009c96e ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x0009c970 ldr r0, [r7, 0x30] | r0 = *((r7 + 0x30));
0x0009c972 adds r3, r3, r1 | r3 += r1;
0x0009c974 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x0009c976 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x0009c978 adc.w r3, r3, r1, asr 31 | __asm ("adc.w r3, r3, r1, asr 31");
0x0009c97c str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x0009c97e ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0009c980 cmp r1, r3 |
| if (r1 > r3) {
0x0009c982 bgt 0x9ca74 | goto label_35;
| }
| label_3:
0x0009c984 add.w ip, r0, sl |
0x0009c988 asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x0009c98a mov r3, r4 | r3 = r4;
0x0009c98c mov r2, ip | r2 = ip;
| do {
0x0009c98e lsr.w fp, r3, 7 |
0x0009c992 orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x0009c996 uxtb.w lr, r3 | lr = (int8_t) r3;
0x0009c99a orr.w r3, fp, r1, lsl 25 | r3 = fp | (r1 << 25);
0x0009c99e lsrs r1, r1, 7 | r1 >>= 7;
0x0009c9a0 mov fp, r2 |
0x0009c9a2 strb r0, [r2], 1 | *(r2) = r0;
| r2++;
0x0009c9a6 orrs.w r0, r3, r1 | r0 = r3 | r1;
0x0009c9aa bne 0x9c98e |
| } while (r0 != r3);
0x0009c9ac strb.w lr, [fp] |
0x0009c9b0 sub.w r2, r2, ip | r2 -= ip;
0x0009c9b4 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x0009c9b6 add.w r0, r2, sl | r0 = r2 + sl;
0x0009c9ba asr.w r1, sb, 0x1f | r1 = sb >> 0x1f;
0x0009c9be add.w lr, r3, r0 | lr = r3 + r0;
0x0009c9c2 mov r3, sb | r3 = sb;
0x0009c9c4 mov r2, lr | r2 = lr;
| do {
0x0009c9c6 lsr.w fp, r3, 7 |
0x0009c9ca orn ip, r3, 0x7f | ip = r3 | 0x7f;
| ip = ~ip;
0x0009c9ce uxtb.w sl, r3 | sl = (int8_t) r3;
0x0009c9d2 orr.w r3, fp, r1, lsl 25 | r3 = fp | (r1 << 25);
0x0009c9d6 lsrs r1, r1, 7 | r1 >>= 7;
0x0009c9d8 mov fp, r2 |
0x0009c9da strb ip, [r2], 1 | *(r2) = ip;
| r2++;
0x0009c9de orrs.w ip, r3, r1 |
0x0009c9e2 bne 0x9c9c6 |
| } while (ip != r3);
0x0009c9e4 sub.w r2, r2, lr | r2 -= lr;
0x0009c9e8 strb.w sl, [fp] | *(fp) = sl;
0x0009c9ec ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009c9ee add.w sl, r2, r0 | sl = r2 + r0;
0x0009c9f2 ldr r0, [r7, 0x30] | r0 = *((r7 + 0x30));
0x0009c9f4 mov r2, sb | r2 = sb;
0x0009c9f6 adds r1, r3, r4 | r1 = r3 + r4;
0x0009c9f8 add r0, sl | r0 += sl;
0x0009c9fa add sl, sb | sl += sb;
0x0009c9fc blx 0x8610 | fcn_00008610 ();
0x0009ca00 ldr r2, [r7, 0x30] | r2 = *((r7 + 0x30));
0x0009ca02 add r2, sl | r2 += sl;
0x0009ca04 mov r3, r2 | r3 = r2;
| do {
0x0009ca06 lsrs r0, r5, 7 | r0 = r5 >> 7;
0x0009ca08 orn r1, r5, 0x7f | r1 = r5 | 0x7f;
| r1 = ~r1;
0x0009ca0c uxtb r4, r5 | r4 = (int8_t) r5;
0x0009ca0e orr.w r5, r0, r6, lsl 25 | r5 = r0 | (r6 << 25);
0x0009ca12 lsrs r6, r6, 7 | r6 >>= 7;
0x0009ca14 mov r0, r3 | r0 = r3;
0x0009ca16 strb r1, [r3], 1 | *(r3) = r1;
| r3++;
0x0009ca1a orrs.w r1, r5, r6 | r1 = r5 | r6;
0x0009ca1e bne 0x9ca06 |
| } while (r1 != r5);
0x0009ca20 strb r4, [r0] | *(r0) = r4;
0x0009ca22 subs r3, r3, r2 | r3 -= r2;
0x0009ca24 ldr r0, [r7, 0x30] | r0 = *((r7 + 0x30));
0x0009ca26 add.w r4, r3, sl | r4 = r3 + sl;
0x0009ca2a mov r2, r8 | r2 = r8;
0x0009ca2c ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009ca2e add r0, r4 | r0 += r4;
0x0009ca30 add r4, r8 | r4 += r8;
0x0009ca32 blx 0x8610 | fcn_00008610 ();
0x0009ca36 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0009ca38 ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009ca3a str r4, [r7, 0x2c] | *((r7 + 0x2c)) = r4;
0x0009ca3c cmp r2, r3 |
| if (r2 > r3) {
0x0009ca3e bgt 0x9ca50 | goto label_36;
| }
0x0009ca40 ldr r0, [r7, 0x18] | r0 = *((r7 + 0x18));
| do {
0x0009ca42 ldr r4, [sp, 0x30] | r4 = var_30h;
0x0009ca44 ldr r1, [sp, 0x38] | r1 = var_38h;
0x0009ca46 mov r2, r4 | r2 = r4;
0x0009ca48 blx 0x8610 | fcn_00008610 ();
0x0009ca4c str r4, [r7, 0x1c] | *((r7 + 0x1c)) = r4;
0x0009ca4e b 0x9c80a | goto label_2;
| label_36:
0x0009ca50 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009ca52 ldr r0, [r7, 0x24] | r0 = *((r7 + 0x24));
0x0009ca54 lsls r4, r3, 1 | r4 = r3 << 1;
0x0009ca56 mov r1, r4 | r1 = r4;
0x0009ca58 blx 0x8268 | r0 = fcn_00008268 ();
0x0009ca5c cmp r0, 0 |
| if (r0 == 0) {
0x0009ca5e beq.w 0x9cc24 | goto label_37;
| }
0x0009ca62 strd r4, r0, [r7, 0x20] | __asm ("strd r4, r0, [r7, 0x20]");
0x0009ca66 str r0, [r7, 0x18] | *((r7 + 0x18)) = r0;
0x0009ca68 b 0x9ca42 |
| } while (1);
| label_32:
0x0009ca6a movw sl, 0x10b | sl = 0x10b;
0x0009ca6e str r7, [sp, 0x30] | var_30h = r7;
0x0009ca70 mov r4, sl | r4 = sl;
0x0009ca72 b 0x9cb58 | goto label_8;
| label_35:
0x0009ca74 str r1, [sp, 0x58] | var_58h = r1;
0x0009ca76 blx 0x8268 | r0 = fcn_00008268 ();
0x0009ca7a cmp r0, 0 |
| if (r0 == 0) {
0x0009ca7c beq.w 0x9cc24 | goto label_37;
| }
0x0009ca80 ldr r1, [sp, 0x58] | r1 = var_58h;
0x0009ca82 str r0, [r7, 0x30] | *((r7 + 0x30)) = r0;
0x0009ca84 str r1, [r7, 0x28] | *((r7 + 0x28)) = r1;
0x0009ca86 b 0x9c984 | goto label_3;
| label_29:
0x0009ca88 movs r0, 0x40 | r0 = 0x40;
0x0009ca8a blx 0x86a4 | r0 = fcn_000086a4 ();
0x0009ca8e mov r7, r0 | r7 = r0;
0x0009ca90 cmp r0, 0 |
| if (r0 == 0) {
0x0009ca92 beq 0x9cb40 | goto label_38;
| }
0x0009ca94 movs r2, 0x40 | r2 = 0x40;
0x0009ca96 movs r1, 0 | r1 = 0;
0x0009ca98 blx 0x839c | fcn_0000839c ();
0x0009ca9c ldr r4, [sp, 0x34] | r4 = var_34h;
0x0009ca9e ldr.w r0, [r4, 0xe8] | r0 = *((r4 + 0xe8));
0x0009caa2 blx 0x86a4 | fcn_000086a4 ();
0x0009caa6 str r0, [r7, 0x30] | *((r7 + 0x30)) = r0;
0x0009caa8 cmp r0, 0 |
| if (r0 == 0) {
0x0009caaa beq.w 0x9cbb6 | goto label_39;
| }
0x0009caae ldr.w r3, [r4, 0xe8] | r3 = *((r4 + 0xe8));
0x0009cab2 mov r0, r4 | r0 = r4;
0x0009cab4 add r2, sp, 0x80 | r2 += var_80h;
0x0009cab6 movs r1, 0xa | r1 = 0xa;
0x0009cab8 str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
0x0009caba movs r3, 0 | r3 = 0;
0x0009cabc bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009cac0 mov r5, r0 | r5 = r0;
0x0009cac2 cmp r0, 0 |
| if (r0 != 0) {
0x0009cac4 bne 0x9cb54 | goto label_40;
| }
0x0009cac6 ldr r4, [sp, 0x80] | r4 = var_80h;
0x0009cac8 mov r0, r4 | r0 = r4;
0x0009caca blx 0x8728 | r0 = fcn_00008728 ();
0x0009cace cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0009cad0 beq 0x9cbca | goto label_41;
| }
| label_10:
0x0009cad2 mov r0, r4 | r0 = r4;
0x0009cad4 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009cad8 mov sl, r0 | sl = r0;
0x0009cada cmp r0, 0 |
| if (r0 == 0) {
0x0009cadc beq.w 0x9c82e | goto label_4;
| }
| label_34:
0x0009cae0 mov r4, sl | r4 = sl;
0x0009cae2 str r7, [sp, 0x30] | var_30h = r7;
0x0009cae4 b 0x9cb58 | goto label_8;
| label_28:
0x0009cae6 ldrd r4, fp, [sp, 0x60] | __asm ("ldrd r4, fp, [var_60h]");
0x0009caea str r7, [sp, 0x30] | var_30h = r7;
0x0009caec cmp r0, 0 |
| if (r0 != 0) {
0x0009caee bne.w 0x9cc08 | goto label_12;
| }
0x0009caf2 cmp.w fp, -1 |
| if (fp != -1) {
0x0009caf6 bne 0x9cb74 | goto label_42;
| }
| label_13:
0x0009caf8 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009cafa cmp r3, 0 |
| if (r3 == 0) {
0x0009cafc beq.w 0x9c658 | goto label_5;
| }
0x0009cb00 ldr r4, [sp, 0x30] | r4 = var_30h;
0x0009cb02 ldr r1, [r4] | r1 = *(r4);
0x0009cb04 ldrd r2, r3, [r4, 0x2c] | __asm ("ldrd r2, r3, [r4, 0x2c]");
0x0009cb08 cmp r1, 0 |
| if (r1 == 0) {
0x0009cb0a beq.w 0x9cc4a | goto label_43;
| }
0x0009cb0e ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x0009cb10 ldr r6, [r4, 0x14] | r6 = *((r4 + 0x14));
0x0009cb12 ldr r7, [sp, 0x34] | r7 = var_34h;
0x0009cb14 adds r1, r5, 1 | r1 = r5 + 1;
0x0009cb16 str r5, [sp, 0x54] | var_54h = r5;
0x0009cb18 str r1, [r4, 0x10] | *((r4 + 0x10)) = r1;
0x0009cb1a adc r1, r6, 0 | __asm ("adc r1, r6, 0");
0x0009cb1e str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x0009cb20 mov r0, r7 | r0 = r7;
0x0009cb22 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x0009cb26 mov r2, r5 | r2 = r5;
0x0009cb28 mov r3, r6 | r3 = r6;
0x0009cb2a str r6, [sp, 0x58] | var_58h = r6;
0x0009cb2c bl 0x88688 | r0 = fcn_00088688 (r0, r1, r2);
0x0009cb30 mov r4, r0 | r4 = r0;
0x0009cb32 cmp r0, 0 |
| if (r0 == 0) {
0x0009cb34 beq.w 0x9cd2a | goto label_44;
| }
0x0009cb38 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x0009cb3a adds r3, 1 | r3++;
0x0009cb3c str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
0x0009cb3e b 0x9cb58 | goto label_8;
| label_38:
0x0009cb40 movs r4, 7 | r4 = 7;
0x0009cb42 b 0x9c658 | goto label_5;
| label_25:
0x0009cb44 cmp r5, 1 |
| if (r5 == 1) {
0x0009cb46 beq 0x9cbbc | goto label_45;
| }
| label_9:
0x0009cb48 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009cb4a movs r2, 3 | r2 = 3;
0x0009cb4c str r3, [sp, 0x68] | var_68h = r3;
0x0009cb4e ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009cb50 str r3, [sp, 0x6c] | var_6ch = r3;
0x0009cb52 b 0x9c7e6 | goto label_6;
| label_40:
0x0009cb54 mov r4, r0 | r4 = r0;
0x0009cb56 str r7, [sp, 0x30] | var_30h = r7;
| label_8:
0x0009cb58 ldr r5, [sp, 0x30] | r5 = var_30h;
0x0009cb5a ldr r0, [r5, 0x30] | r0 = *((r5 + 0x30));
0x0009cb5c blx 0x8404 | fcn_00008404 ();
0x0009cb60 ldr r0, [r5, 0x24] | r0 = *((r5 + 0x24));
0x0009cb62 blx 0x8404 | fcn_00008404 ();
0x0009cb66 ldr r0, [r5] | r0 = *(r5);
0x0009cb68 bl 0xf2d0 | fcn_0000f2d0 (r0);
0x0009cb6c mov r0, r5 | r0 = r5;
0x0009cb6e blx 0x8404 | fcn_00008404 ();
0x0009cb72 b 0x9c658 | goto label_5;
| label_42:
0x0009cb74 ldrd r3, r7, [sp, 0x94] | __asm ("ldrd r3, r7, [var_94h]");
0x0009cb78 str r0, [sp, 0x80] | var_80h = r0;
0x0009cb7a cmp r7, 0 |
| if (r7 <= 0) {
0x0009cb7c ble 0x9cbee | goto label_46;
| }
0x0009cb7e ldr.w r8, [sp, 0x34] | r8 = var_34h;
0x0009cb82 subs r6, r3, 4 | r6 = r3 - 4;
0x0009cb84 mov r5, r0 | r5 = r0;
0x0009cb86 b 0x9cb96 |
| while (r3 == r2) {
| label_7:
0x0009cb88 adds r5, 1 | r5++;
0x0009cb8a cmp r7, r5 |
0x0009cb8c ite le |
| if (r7 > r5) {
0x0009cb8e movle r3, 0 | r3 = 0;
| }
| if (r7 <= r5) {
0x0009cb90 andgt r3, r3, 1 | r3 &= 1;
| }
| if (r3 == 0) {
0x0009cb94 cbz r3, 0x9cbec | goto label_47;
| }
0x0009cb96 ldr r1, [r6, 4]! | r1 = *((r6 += 4));
0x0009cb9a ldrd r2, r3, [r1, 8] | __asm ("ldrd r2, r3, [r1, 8]");
0x0009cb9e orrs r3, r2 | r3 |= r2;
0x0009cba0 itt eq |
| if (r3 != r2) {
0x0009cba2 moveq r0, 0 | r0 = 0;
| }
| if (r3 != r2) {
0x0009cba4 moveq r3, 1 | r3 = 1;
| }
0x0009cba6 beq 0x9cb88 |
| }
0x0009cba8 mov r0, r8 | r0 = r8;
0x0009cbaa bl 0x8874c | r0 = fcn_0008874c (r0, r1);
0x0009cbae clz r3, r0 | r3 &= r0;
0x0009cbb2 lsrs r3, r3, 5 | r3 >>= 5;
0x0009cbb4 b 0x9cb88 | goto label_7;
| label_39:
0x0009cbb6 movs r4, 7 | r4 = 7;
0x0009cbb8 str r7, [sp, 0x30] | var_30h = r7;
0x0009cbba b 0x9cb58 | goto label_8;
| label_45:
0x0009cbbc ldr r3, [sp, 0x94] | r3 = var_94h;
0x0009cbbe ldr r3, [r3] | r3 = *(r3);
0x0009cbc0 ldr r3, [r3, 0x38] | r3 = *((r3 + 0x38));
0x0009cbc2 cmp r3, 0 |
| if (r3 != 0) {
0x0009cbc4 bne 0x9cb48 | goto label_9;
| }
0x0009cbc6 movs r4, 0x65 | r4 = 0x65;
0x0009cbc8 b 0x9c658 | goto label_5;
| label_41:
0x0009cbca mov r1, r5 | r1 = r5;
0x0009cbcc mov r0, r4 | r0 = r4;
0x0009cbce blx 0x84d8 | fcn_000084d8 ();
0x0009cbd2 str r0, [sp, 0x70] | var_70h = r0;
0x0009cbd4 str r1, [sp, 0x7c] | var_7ch = r1;
0x0009cbd6 strd r1, r0, [sp, 0x74] | __asm ("strd r1, r0, [var_74h]");
0x0009cbda vldr d16, [sp, 0x70] | __asm ("vldr d16, [sp, 0x70]");
0x0009cbde vldr d17, [sp, 0x78] | __asm ("vldr d17, [sp, 0x78]");
0x0009cbe2 vstr d16, [r7, 8] | __asm ("vstr d16, [r7, 8]");
0x0009cbe6 vstr d17, [r7, 0x10] | __asm ("vstr d17, [r7, 0x10]");
0x0009cbea b 0x9cad2 | goto label_10;
| if (r0 == 0) {
| label_47:
0x0009cbec cbnz r0, 0x9cc08 |
| label_46:
0x0009cbee cmn.w fp, 2 |
0x0009cbf2 mov.w r3, 0 | r3 = 0;
0x0009cbf6 add r2, sp, 0x80 | r2 += var_80h;
| if (fp == 2) {
0x0009cbf8 beq 0x9ccbe | goto label_48;
| }
0x0009cbfa ldr r0, [sp, 0x34] | r0 = var_34h;
0x0009cbfc movs r1, 0x10 | r1 = 0x10;
0x0009cbfe bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009cc02 cmp r0, 0 |
| if (r0 == 0) {
0x0009cc04 beq.w 0x9ce3e | goto label_49;
| }
| }
| label_12:
0x0009cc08 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009cc0a mov r4, r0 | r4 = r0;
0x0009cc0c cmp r3, 0 |
| if (r3 != 0) {
0x0009cc0e bne 0x9cb58 | goto label_8;
| }
0x0009cc10 b 0x9c658 | goto label_5;
| label_24:
0x0009cc12 ldr r4, [sp, 0x5c] | r4 = x;
0x0009cc14 b 0x9c658 | goto label_5;
| label_23:
0x0009cc16 mov r1, r4 | r1 = r4;
0x0009cc18 mov r0, r8 | r0 = r8;
0x0009cc1a blx 0x84d8 | fcn_000084d8 ();
0x0009cc1e strd r0, r1, [sp, 0x4c] | __asm ("strd r0, r1, [var_4ch]");
0x0009cc22 b 0x9c6ec | goto label_11;
| label_37:
0x0009cc24 mov.w sl, 7 | sl = 7;
0x0009cc28 str r7, [sp, 0x30] | var_30h = r7;
0x0009cc2a mov r4, sl | r4 = sl;
0x0009cc2c b 0x9cb58 | goto label_8;
| label_27:
0x0009cc2e mov r1, r7 | r1 = r7;
0x0009cc30 mov r0, r5 | r0 = r5;
0x0009cc32 blx 0x81b4 | r0 = fcn_000081b4 ();
0x0009cc36 mov r3, r0 | r3 = r0;
0x0009cc38 mov r0, r5 | r0 = r5;
0x0009cc3a str r3, [sp, 0x5c] | x = r3;
0x0009cc3c blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009cc40 cmp r0, 0 |
| if (r0 == 0) {
0x0009cc42 beq.w 0x9ce1c | goto label_50;
| }
0x0009cc46 mov r4, r0 | r4 = r0;
0x0009cc48 b 0x9c658 | goto label_5;
| label_43:
0x0009cc4a ldrd r1, r0, [sp, 0x30] | __asm ("ldrd r1, r0, [var_34h]");
0x0009cc4e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0009cc52 strd r3, r2, [sp, 0x28] | __asm ("strd r3, r2, [var_2ch]");
0x0009cc56 ldrd r4, r5, [r1, 0x38] | __asm ("ldrd r4, r5, [r1, 0x38]");
0x0009cc5a ldr r1, [sp, 0x5c] | r1 = x;
0x0009cc5c ldrd r2, r3, [sp, 0x4c] | __asm ("ldrd r2, r3, [var_4ch]");
0x0009cc60 strd r4, r5, [sp, 0x20] | __asm ("strd r4, r5, [var_20h]");
0x0009cc64 str r1, [sp] | *(sp) = r1;
0x0009cc66 vstr d16, [sp, 0x18] | __asm ("vstr d16, [sp, 0x18]");
0x0009cc6a vstr d16, [sp, 0x10] | __asm ("vstr d16, [sp, 0x10]");
0x0009cc6e vstr d16, [sp, 8] | __asm ("vstr d16, [sp, 8]");
0x0009cc72 bl 0x88818 | r0 = fcn_00088818 (r0, r1, r2);
0x0009cc76 mov r4, r0 | r4 = r0;
| label_18:
0x0009cc78 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0009cc7a ldr r3, [r0, 0x34] | r3 = *((r0 + 0x34));
0x0009cc7c adds r3, 1 | r3++;
0x0009cc7e str r3, [r0, 0x34] | *((r0 + 0x34)) = r3;
0x0009cc80 cmp r4, 0 |
| if (r4 != 0) {
0x0009cc82 bne.w 0x9cb58 | goto label_8;
| }
0x0009cc86 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009cc88 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009cc8a ldr r1, [sp, 0x50] | r1 = var_50h;
0x0009cc8c cmp r2, r3 |
0x0009cc8e ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009cc90 sbcs.w r3, r1, r3 | __asm ("sbcs.w r3, r1, r3");
0x0009cc94 ite lt |
| if (r2 >= r3) {
0x0009cc96 movlt r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x0009cc98 movge r3, 0 | r3 = 0;
| }
0x0009cc9a cmp.w fp, -1 |
0x0009cc9e it eq |
| if (fp != -1) {
0x0009cca0 orreq r3, r3, 1 | r3 |= 1;
| }
0x0009cca4 cmp r3, 0 |
| if (r3 == 0) {
0x0009cca6 beq.w 0x9cb58 | goto label_8;
| }
0x0009ccaa mov r3, r1 | r3 = r1;
0x0009ccac ldr r1, [sp, 0x30] | r1 = var_30h;
0x0009ccae ldrd r4, r5, [r1, 0x38] | __asm ("ldrd r4, r5, [r1, 0x38]");
0x0009ccb2 strd r4, r5, [sp] | __asm ("strd r4, r5, [sp]");
0x0009ccb6 bl 0x8891c | r0 = fcn_0008891c (r0, r1, r2, r3, r4);
0x0009ccba mov r4, r0 | r4 = r0;
0x0009ccbc b 0x9cb58 | goto label_8;
| label_48:
0x0009ccbe ldr r0, [sp, 0x34] | r0 = var_34h;
0x0009ccc0 movs r1, 0x1a | r1 = 0x1a;
0x0009ccc2 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009ccc6 cmp r0, 0 |
| if (r0 != 0) {
0x0009ccc8 bne 0x9cc08 | goto label_12;
| }
0x0009ccca ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009cccc movs r1, 1 | r1 = 1;
0x0009ccce ldr r7, [sp, 0x48] | r7 = var_48h;
0x0009ccd0 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009ccd2 ldr.w r6, [r3, 0x100] | r6 = *((r3 + 0x100));
0x0009ccd6 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0009ccd8 ldr r5, [sp, 0x80] | r5 = var_80h;
0x0009ccda smlal r2, r3, r7, r6 | __asm ("smlal r2, r3, r7, r6");
0x0009ccde mov r0, r5 | r0 = r5;
0x0009cce0 lsls r3, r3, 0xa | r3 <<= 0xa;
0x0009cce2 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009cce6 lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009cce8 blx 0x84e8 | fcn_000084e8 ();
0x0009ccec ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009ccee mov r0, r5 | r0 = r5;
0x0009ccf0 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0009ccf2 ldr.w r1, [r2, 0x100] | r1 = *((r2 + 0x100));
0x0009ccf6 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009ccf8 smlal r2, r3, r7, r1 | __asm ("smlal r2, r3, r7, r1");
0x0009ccfc movw r1, 0x3ff | r1 = 0x3ff;
0x0009cd00 lsls r3, r3, 0xa | r3 <<= 0xa;
0x0009cd02 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009cd06 lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009cd08 adds r2, r2, r1 | r2 += r1;
0x0009cd0a mov.w r1, 2 | r1 = 2;
0x0009cd0e adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009cd12 blx 0x84e8 | fcn_000084e8 ();
| label_17:
0x0009cd16 mov r0, r5 | r0 = r5;
0x0009cd18 blx 0x8728 | fcn_00008728 ();
0x0009cd1c mov r0, r5 | r0 = r5;
0x0009cd1e blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009cd22 cmp r0, 0 |
| if (r0 == 0) {
0x0009cd24 beq.w 0x9caf8 | goto label_13;
| }
0x0009cd28 b 0x9cc08 | goto label_12;
| label_44:
0x0009cd2a ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009cd2c ldr.w sl, [r3] | sl = *(r3);
0x0009cd30 ldrd r6, r7, [r3, 8] | __asm ("ldrd r6, r7, [r3, 8]");
0x0009cd34 ldrd r1, r2, [r3, 0x10] | __asm ("ldrd r1, r2, [r3, 0x10]");
0x0009cd38 ldr.w r3, [sl] | r3 = *(sl);
0x0009cd3c cmp r3, 0 |
| if (r3 == 0) {
0x0009cd3e beq.w 0x9cf28 | goto label_51;
| }
0x0009cd42 strd r0, fp, [sp, 0x60] | __asm ("strd r0, fp, [var_0h_2x60]");
0x0009cd46 mov fp, sl |
0x0009cd48 ldr.w sl, [sp, 0x34] | sl = var_34h;
0x0009cd4c mov.w ip, 1 |
| label_15:
0x0009cd50 ldr.w r4, [fp, 8] | r4 = *(arg_8h);
0x0009cd54 cmp r4, 0 |
| if (r4 == 0) {
0x0009cd56 beq 0x9ce16 | goto label_52;
| }
0x0009cd58 uxtb.w sb, ip | sb = (int8_t) ip;
0x0009cd5c mov r5, r1 | r5 = r1;
0x0009cd5e mov r8, r2 | r8 = r2;
0x0009cd60 str.w fp, [sp, 0x38] | __asm ("str.w fp, [var_38h]");
0x0009cd64 strd ip, r1, [sp, 0x40] | __asm ("strd ip, r1, [var_44h]");
0x0009cd68 str r2, [sp, 0x48] | var_48h = r2;
| label_14:
0x0009cd6a mov r2, r6 | r2 = r6;
0x0009cd6c mov ip, r7 |
0x0009cd6e movs r1, 0 | r1 = 0;
0x0009cd70 mov r3, r6 | r3 = r6;
0x0009cd72 mov r0, r7 | r0 = r7;
| do {
0x0009cd74 lsrs r3, r3, 7 | r3 >>= 7;
0x0009cd76 adds r1, 1 | r1++;
0x0009cd78 orr.w r3, r3, r0, lsl 25 | r3 |= (r0 << 25);
0x0009cd7c lsrs r0, r0, 7 | r0 >>= 7;
0x0009cd7e orrs.w lr, r3, r0 | lr = r3 | r0;
0x0009cd82 bne 0x9cd74 |
| } while (lr != r3);
0x0009cd84 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0009cd86 rsb.w r0, r1, 0xa | r0 = 0xa - r1;
0x0009cd8a rsb.w r1, r1, 0xb | r1 = 0xb - r1;
0x0009cd8e strb.w sb, [r3, r0] | *((r3 + r0)) = sb;
0x0009cd92 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0009cd94 add r1, r3 | r1 += r3;
| do {
0x0009cd96 lsr.w lr, r2, 7 | lr = r2 >> 7;
0x0009cd9a orn r3, r2, 0x7f | r3 = r2 | 0x7f;
| r3 = ~r3;
0x0009cd9e uxtb.w fp, r2 | fp = (int8_t) r2;
0x0009cda2 orr.w r2, lr, ip, lsl 25 | r2 = lr | (ip << 25);
0x0009cda6 lsr.w ip, ip, 7 |
0x0009cdaa mov lr, r1 | lr = r1;
0x0009cdac strb r3, [r1], 1 | *(r1) = r3;
| r1++;
0x0009cdb0 orrs.w r3, r2, ip | r3 = r2 | ip;
0x0009cdb4 bne 0x9cd96 |
| } while (r3 != r2);
0x0009cdb6 strb.w fp, [lr] | *(lr) = fp;
0x0009cdba mov r2, r5 | r2 = r5;
0x0009cdbc ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0009cdbe subs r3, r3, r0 | r3 -= r0;
0x0009cdc0 str r3, [sp, 4] | var_4h_2 = r3;
0x0009cdc2 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0009cdc4 add r3, r0 | r3 += r0;
0x0009cdc6 mov r0, sl | r0 = sl;
0x0009cdc8 str r3, [sp] | *(sp) = r3;
0x0009cdca mov r3, r8 | r3 = r8;
0x0009cdcc bl 0x88688 | fcn_00088688 (r0, r1, r2);
0x0009cdd0 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0009cdd2 adds r5, 1 | r5++;
0x0009cdd4 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x0009cdd6 adc r8, r8, 0 | __asm ("adc r8, r8, 0");
0x0009cdda adds r3, 1 | r3++;
0x0009cddc adds r6, r3, r6 | r6 = r3 + r6;
0x0009cdde adc.w r7, r7, r3, asr 31 | __asm ("adc.w r7, r7, r3, asr 31");
0x0009cde2 subs r3, r4, 0 | r3 = r4 - 0;
0x0009cde4 it ne |
| if (r3 == r4) {
0x0009cde6 movne r3, 1 | r3 = 1;
| }
0x0009cde8 cmp r0, 0 |
0x0009cdea it ne |
| if (r0 == 0) {
0x0009cdec movne r3, 0 | r3 = 0;
| }
0x0009cdee cmp r3, 0 |
| if (r3 != 0) {
0x0009cdf0 bne 0x9cd6a | goto label_14;
| }
0x0009cdf2 ldr.w fp, [sp, 0x38] | fp = var_38h;
0x0009cdf6 ldrd ip, r1, [sp, 0x40] | __asm ("ldrd ip, r1, [var_44h]");
0x0009cdfa ldr r2, [sp, 0x48] | r2 = var_48h;
| if (r0 != 0) {
0x0009cdfc cbnz r0, 0x9ce32 | goto label_53;
| }
| do {
0x0009cdfe ldr.w fp, [fp] | fp = *(fp);
0x0009ce02 add.w ip, ip, 1 |
0x0009ce06 mov r6, r1 | r6 = r1;
0x0009ce08 mov r7, r2 | r7 = r2;
0x0009ce0a ldr.w r3, [fp] | r3 = *(fp);
| if (r3 == 0) {
0x0009ce0e cbz r3, 0x9ce6a | goto label_54;
| }
0x0009ce10 mov r1, r5 | r1 = r5;
0x0009ce12 mov r2, r8 | r2 = r8;
0x0009ce14 b 0x9cd50 | goto label_15;
| label_52:
0x0009ce16 mov r5, r1 | r5 = r1;
0x0009ce18 mov r8, r2 | r8 = r2;
0x0009ce1a b 0x9cdfe |
| } while (1);
| label_50:
0x0009ce1c ldr r3, [sp, 0x5c] | r3 = x;
0x0009ce1e cmp r3, 0xf |
| if (r3 <= 0xf) {
0x0009ce20 ble 0x9cefc | goto label_55;
| }
0x0009ce22 ldrd r2, r1, [sp, 0x44] | __asm ("ldrd r2, r1, [var_44h]");
0x0009ce26 mov r3, sb | r3 = sb;
0x0009ce28 ldr r0, [sp, 0x34] | r0 = var_34h;
0x0009ce2a bl 0x9c5e4 | fcn_0009c5e4 (r0, r1, r2, r3, r4, r5, r6);
0x0009ce2e str r0, [sp, 0x5c] | x = r0;
0x0009ce30 b 0x9c7b2 | goto label_16;
| label_53:
0x0009ce32 ldr r2, [sp, 0x34] | r2 = var_34h;
0x0009ce34 mov r4, r0 | r4 = r0;
0x0009ce36 ldr r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x0009ce38 adds r3, 1 | r3++;
0x0009ce3a str r3, [r2, 0x34] | *((r2 + 0x34)) = r3;
0x0009ce3c b 0x9cb58 | goto label_8;
| label_49:
0x0009ce3e ldr r3, [sp, 0x34] | r3 = var_34h;
0x0009ce40 ldr r0, [sp, 0x48] | r0 = var_48h;
0x0009ce42 ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009ce44 ldr.w r1, [r3, 0x100] | r1 = *((r3 + 0x100));
0x0009ce48 ldr r3, [sp, 0x54] | r3 = var_54h;
0x0009ce4a ldr r5, [sp, 0x80] | r5 = var_80h;
0x0009ce4c smlal r2, r3, r0, r1 | __asm ("smlal r2, r3, r0, r1");
0x0009ce50 movs r1, 1 | r1 = 1;
0x0009ce52 mov r0, r5 | r0 = r5;
0x0009ce54 lsls r3, r3, 0xa | r3 <<= 0xa;
0x0009ce56 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009ce5a lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009ce5c adds.w r2, r2, fp | r2 += fp;
0x0009ce60 adc.w r3, r3, fp, asr 31 | __asm ("adc.w r3, r3, fp, asr 31");
0x0009ce64 blx 0x84e8 | fcn_000084e8 ();
0x0009ce68 b 0x9cd16 | goto label_17;
| label_54:
0x0009ce6a mov sl, fp | sl = fp;
0x0009ce6c ldrd r4, fp, [sp, 0x60] | __asm ("ldrd r4, fp, [var_60h]");
| label_19:
0x0009ce70 mov r3, r1 | r3 = r1;
0x0009ce72 mov r0, r2 | r0 = r2;
| do {
0x0009ce74 lsrs r3, r3, 7 | r3 >>= 7;
0x0009ce76 adds r4, 1 | r4++;
0x0009ce78 orr.w r3, r3, r0, lsl 25 | r3 |= (r0 << 25);
0x0009ce7c lsrs r0, r0, 7 | r0 >>= 7;
0x0009ce7e orrs.w r6, r3, r0 | r6 = r3 | r0;
0x0009ce82 bne 0x9ce74 |
| } while (r6 != r3);
0x0009ce84 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0009ce88 rsb.w r7, r4, 0xa | r7 = 0xa - r4;
0x0009ce8c rsb.w r0, r4, 0xb | r0 = 0xb - r4;
0x0009ce90 strb.w ip, [r3, r7] | *((r3 + r7)) = ip;
0x0009ce94 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0009ce98 add r3, r0 | r3 += r0;
| do {
0x0009ce9a lsrs r4, r1, 7 | r4 = r1 >> 7;
0x0009ce9c orn r0, r1, 0x7f | r0 = r1 | 0x7f;
| r0 = ~r0;
0x0009cea0 uxtb r6, r1 | r6 = (int8_t) r1;
0x0009cea2 orr.w r1, r4, r2, lsl 25 | r1 = r4 | (r2 << 25);
0x0009cea6 lsrs r2, r2, 7 | r2 >>= 7;
0x0009cea8 mov r4, r3 | r4 = r3;
0x0009ceaa strb r0, [r3], 1 | *(r3) = r0;
| r3++;
0x0009ceae orrs.w r0, r1, r2 | r0 = r1 | r2;
0x0009ceb2 bne 0x9ce9a |
| } while (r0 != r1);
0x0009ceb4 strb r6, [r4] | *(r4) = r6;
0x0009ceb6 subs r5, 1 | r5--;
0x0009ceb8 ldr.w r3, [sl, 0x20] | r3 = *((sl + 0x20));
0x0009cebc adc r4, r8, -1 | __asm ("adc r4, r8, -1");
0x0009cec0 ldrd r1, r0, [sp, 0x30] | __asm ("ldrd r1, r0, [var_34h]");
0x0009cec4 subs r3, r3, r7 | r3 -= r7;
0x0009cec6 str r3, [sp, 0x2c] | var_2ch = r3;
0x0009cec8 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0009cecc add r3, r7 | r3 += r7;
0x0009cece str r3, [sp, 0x28] | var_28h = r3;
0x0009ced0 ldrd r6, r7, [r1, 0x38] | __asm ("ldrd r6, r7, [r1, 0x38]");
0x0009ced4 strd r5, r4, [sp, 0x18] | __asm ("strd r5, r4, [var_18h]");
0x0009ced8 ldr r4, [sp, 0x54] | r4 = var_54h;
0x0009ceda strd r6, r7, [sp, 0x20] | __asm ("strd r6, r7, [var_20h]");
0x0009cede ldrd r2, r3, [sp, 0x4c] | __asm ("ldrd r2, r3, [var_4ch]");
0x0009cee2 str r4, [sp, 0x10] | var_10h = r4;
0x0009cee4 ldr r4, [sp, 0x58] | r4 = var_58h;
0x0009cee6 str r4, [sp, 0x14] | var_14h = r4;
0x0009cee8 ldrd r4, r5, [r1, 8] | __asm ("ldrd r4, r5, [r1, 8]");
0x0009ceec ldr r1, [sp, 0x5c] | r1 = x;
0x0009ceee strd r4, r5, [sp, 8] | __asm ("strd r4, r5, [var_ch]");
0x0009cef2 str r1, [sp] | *(sp) = r1;
0x0009cef4 bl 0x88818 | r0 = fcn_00088818 (r0, r1, r2);
0x0009cef8 mov r4, r0 | r4 = r0;
0x0009cefa b 0x9cc78 | goto label_18;
| label_55:
0x0009cefc ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009cefe ldr r2, [sp, 0x50] | r2 = var_50h;
0x0009cf00 strd r8, r6, [sp, 0x4c] | __asm ("strd r8, r6, [var_4ch]");
0x0009cf04 cmp r3, r8 |
0x0009cf06 str r3, [sp, 0x68] | var_68h = r3;
0x0009cf08 sbcs.w r3, r2, r6 | __asm ("sbcs.w r3, r2, r6");
0x0009cf0c str r2, [sp, 0x6c] | var_6ch = r2;
0x0009cf0e ite lt |
| if (r3 >= r8) {
0x0009cf10 movlt r2, 1 | r2 = 1;
| }
| if (r3 < r8) {
0x0009cf12 movge r2, 0 | r2 = 0;
| }
0x0009cf14 cmp.w fp, -1 |
0x0009cf18 ite eq |
| if (fp != -1) {
0x0009cf1a moveq r2, 0 | r2 = 0;
| }
| if (fp == -1) {
0x0009cf1c andne r2, r2, 1 | r2 &= 1;
| }
0x0009cf20 lsls r2, r2, 1 | r2 <<= 1;
0x0009cf22 orr r2, r2, 1 | r2 |= 1;
0x0009cf26 b 0x9c7e6 | goto label_6;
| label_51:
0x0009cf28 mov r5, r1 | r5 = r1;
0x0009cf2a mov r8, r2 | r8 = r2;
0x0009cf2c mov r1, r6 | r1 = r6;
0x0009cf2e mov r2, r7 | r2 = r7;
0x0009cf30 mov.w ip, 1 |
0x0009cf34 b 0x9ce70 | goto label_19;
| label_22:
0x0009cf36 blx 0x883c | fcn_0000883c ();
0x0009cf3a nop |
0x0009cf3c stm r6!, {r1, r2, r4, r7} | *(r6!) = r1;
| *((r6! + 4)) = r2;
| *((r6! + 8)) = r4;
| *((r6! + 12)) = r7;
0x0009cf3e movs r2, r0 | r2 = r0;
0x0009cf40 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0009cf42 movs r0, r0 |
0x0009cf44 stm r6!, {r1, r4, r5} | *(r6!) = r1;
| *((r6! + 4)) = r4;
| *((r6! + 8)) = r5;
0x0009cf46 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9d6e8 */
| #include <stdint.h>
|
; (fcn) fcn.0009d6e8 () | void fcn_0009d6e8 (int16_t arg_4ch, int16_t arg_50h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_8h_2;
| int32_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| arithmetic x;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int16_t var_ach;
| int16_t var_b0h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_e0h;
| int16_t var_e4h;
| int16_t var_f0h;
| int32_t var_f0h_2;
| int16_t var_f8h;
| int16_t var_fch;
| int16_t var_114h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0009d6e8 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0009d6ec mov fp, r0 |
0x0009d6ee vpush {d8, d9} | __asm ("vpush {d8, d9}");
0x0009d6f2 sub sp, 0x11c |
0x0009d6f4 mov.w r0, 0x280 | r0 = 0x280;
0x0009d6f8 str r2, [sp, 0x70] | var_70h = r2;
0x0009d6fa ldr.w r2, [pc, 0xba4] | r2 = *(0x0009e2a0);
0x0009d6fe ldr.w r3, [pc, 0xba4] |
0x0009d702 str.w fp, [sp, 0x34] | __asm ("str.w fp, [x]");
0x0009d706 add r2, pc | r2 += pc;
0x0009d708 str r1, [sp, 0x50] | var_50h = r1;
0x0009d70a ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0009d70c ldr r3, [r3] | r3 = *(0x9e2a6);
0x0009d70e str r3, [sp, 0x114] | var_114h = r3;
0x0009d710 mov.w r3, 0 | r3 = 0;
0x0009d714 blx 0x86a4 | r0 = fcn_000086a4 ();
0x0009d718 cmp r0, 0 |
| if (r0 == 0) {
0x0009d71a beq.w 0x9dd82 | goto label_50;
| }
0x0009d71e add r3, sp, 0xe0 | r3 += var_e0h;
0x0009d720 movs r5, 0 | r5 = 0;
0x0009d722 mov r2, r3 | r2 = r3;
0x0009d724 str r3, [sp, 0x5c] | var_5ch = r3;
0x0009d726 mov sl, r0 | sl = r0;
0x0009d728 mov r3, r5 | r3 = r5;
0x0009d72a movs r1, 0x16 | r1 = 0x16;
0x0009d72c mov r0, fp | r0 = fp;
0x0009d72e str r5, [sp, 0xe0] | var_e0h = r5;
0x0009d730 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009d734 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0009d736 cbz r0, 0x9d76c | goto label_51;
| }
0x0009d738 str r5, [sp, 0x60] | var_60h = r5;
| do {
| label_2:
0x0009d73a mov r0, sl | r0 = sl;
0x0009d73c blx 0x8404 | fcn_00008404 ();
0x0009d740 ldr r0, [sp, 0x60] | r0 = var_60h;
0x0009d742 blx 0x8404 | fcn_00008404 ();
0x0009d744 invalid |
| label_16:
0x0009d746 ldr.w r2, [pc, 0xb60] | r2 = *(0x0009e2a8);
0x0009d74a ldr.w r3, [pc, 0xb58] | r3 = *(0x9e2a6);
0x0009d74e add r2, pc | r2 += pc;
0x0009d750 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0009d752 ldr r2, [r3] | r2 = *(0x9e2a6);
0x0009d754 ldr r3, [sp, 0x114] | r3 = var_114h;
0x0009d756 eors r2, r3 | r2 ^= r3;
0x0009d758 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009d75c bne.w 0x9ead2 | goto label_52;
| }
0x0009d760 mov r0, r4 | r0 = r4;
0x0009d762 add sp, 0x11c |
0x0009d764 vpop {d8, d9} | __asm ("vpop {d8, d9}");
0x0009d768 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_51:
0x0009d76c ldr r5, [sp, 0xe0] | r5 = var_e0h;
0x0009d76e movs r2, 1 | r2 = 1;
0x0009d770 mov r1, r2 | r1 = r2;
0x0009d772 mov r0, r5 | r0 = r5;
0x0009d774 blx 0x8250 | fcn_00008250 ();
0x0009d778 mov r0, r5 | r0 = r5;
0x0009d77a blx 0x8728 | r0 = fcn_00008728 ();
0x0009d77e cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0009d780 beq.w 0x9dece | goto label_53;
| }
0x0009d784 mov r0, r5 | r0 = r5;
0x0009d786 str r4, [sp, 0x84] | var_84h = r4;
0x0009d788 blx 0x81f8 | fcn_000081f8 ();
0x0009d78c str r4, [sp, 0x44] | var_44h = r4;
0x0009d78e str r4, [sp, 0x60] | var_60h = r4;
| label_20:
0x0009d790 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009d792 cmp r3, 0 |
0x0009d794 ite le |
| if (r3 > 0) {
0x0009d796 movle r3, 0 | r3 = 0;
| }
| if (r3 <= 0) {
0x0009d798 movgt r3, 1 | r3 = 1;
| }
0x0009d79a cmp r0, 0 |
0x0009d79c it ne |
| if (r0 == 0) {
0x0009d79e movne r3, 0 | r3 = 0;
| }
0x0009d7a0 str r3, [sp, 0x6c] | var_6ch = r3;
0x0009d7a2 cmp r3, 0 |
| if (r3 == 0) {
0x0009d7a4 beq.w 0x9dc86 | goto label_54;
| }
0x0009d7a8 add.w r3, sl, 0x238 | r3 = sl + 0x238;
0x0009d7ac vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x0009d7b0 str r3, [sp, 0x78] | var_78h = r3;
0x0009d7b2 add.w r3, sl, 0x248 | r3 = sl + 0x248;
0x0009d7b6 str r3, [sp, 0x40] | var_40h = r3;
0x0009d7b8 mov.w lr, 0 | lr = 0;
0x0009d7bc ldr r3, [sp, 0x70] | r3 = var_70h;
0x0009d7be strd lr, lr, [sp, 0x38] | __asm ("strd lr, lr, [var_38h]");
0x0009d7c2 str.w lr, [sp, 0x74] | __asm ("str.w lr, [var_74h]");
0x0009d7c6 cmp r3, 2 |
0x0009d7c8 it lt |
| if (r3 >= 2) {
0x0009d7ca movlt r3, 2 | r3 = 2;
| }
0x0009d7cc str r3, [sp, 0x54] | var_54h = r3;
0x0009d7ce add r3, sp, 0xb8 | r3 += var_b8h;
0x0009d7d0 str r3, [sp, 0x58] | var_58h = r3;
| label_1:
0x0009d7d2 ldr r0, [sp, 0x34] | r0 = x;
0x0009d7d4 movs r5, 0 | r5 = 0;
0x0009d7d6 mov r3, r5 | r3 = r5;
0x0009d7d8 ldr r2, [sp, 0x58] | r2 = var_58h;
0x0009d7da movs r1, 0x1c | r1 = 0x1c;
0x0009d7dc str r5, [sp, 0xb8] | var_b8h = r5;
0x0009d7de ldr.w r6, [r0, 0x100] | r6 = *((r0 + 0x100));
0x0009d7e2 bl 0x7c1d8 | fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009d7e6 ldr r4, [sp, 0xb8] | r4 = var_b8h;
0x0009d7e8 movs r1, 1 | r1 = 1;
0x0009d7ea ldr r2, [sp, 0x54] | r2 = var_54h;
0x0009d7ec lsls r6, r6, 0xa | r6 <<= 0xa;
0x0009d7ee mov r0, r4 | r0 = r4;
0x0009d7f0 blx 0x8250 | fcn_00008250 ();
0x0009d7f4 mov r0, r4 | r0 = r4;
0x0009d7f6 asr.w fp, r6, 0x1f |
0x0009d7fa blx 0x8728 | r0 = fcn_00008728 ();
0x0009d7fe cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0009d800 beq.w 0x9da4e | goto label_55;
| }
0x0009d804 mov r0, r4 | r0 = r4;
0x0009d806 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009d80a cmp r0, 0 |
| if (r0 != 0) {
0x0009d80c bne.w 0x9dc86 | goto label_54;
| }
0x0009d810 mov.w r3, -1 | r3 = -1;
0x0009d814 str r3, [sp, 0x30] | var_30h = r3;
| label_3:
0x0009d816 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009d818 cmp r3, 0 |
| if (r3 != 0) {
0x0009d81a bne.w 0x9da7c | goto label_56;
| }
0x0009d81e ldr.w fp, [sp, 0x44] | fp = var_44h;
0x0009d822 mov r4, fp | r4 = fp;
| label_4:
0x0009d824 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009d826 cmp r3, 0 |
| if (r3 <= 0) {
0x0009d828 ble.w 0x9eac0 | goto label_57;
| }
0x0009d82c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009d82e cmp r3, 0 |
| if (r3 < 0) {
0x0009d830 blt.w 0x9dc6e | goto label_58;
| }
0x0009d834 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0009d836 movs r1, 0 | r1 = 0;
0x0009d838 cmp r1, r2 |
0x0009d83a sbcs r6, r3 | __asm ("sbcs r6, r3");
| if (r1 < r2) {
0x0009d83c blt.w 0x9dc6e | goto label_58;
| }
0x0009d840 mov.w r2, 0x280 | r2 = 0x280;
0x0009d844 mov r0, sl | r0 = sl;
0x0009d846 blx 0x839c | fcn_0000839c ();
0x0009d84a movs r3, 1 | r3 = 1;
0x0009d84c str.w r3, [sl, 0x244] | __asm ("str.w r3, aav.0x000000ff");
| if (r4 == 0) {
0x0009d850 cbz r4, 0x9d85e | goto label_59;
| }
| label_0:
0x0009d852 mov r8, r4 | r8 = r4;
| label_9:
0x0009d854 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0009d856 mov r4, r8 | r4 = r8;
0x0009d858 bl 0x5ede8 | fcn_0005ede8 (r0);
0x0009d85c b 0x9d73a |
| } while (1);
| label_59:
0x0009d85e mov r3, r4 | r3 = r4;
0x0009d860 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009d862 ldr r0, [sp, 0x34] | r0 = x;
0x0009d864 movs r1, 8 | r1 = 8;
0x0009d866 str r4, [sp, 0xe0] | var_e0h = r4;
0x0009d868 bl 0x7c1d8 | fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009d86c ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009d86e adds r3, 1 | r3++;
0x0009d870 str r3, [sp, 0x64] | var_64h = r3;
0x0009d872 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009d874 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009d878 str r3, [sp, 0x68] | var_68h = r3;
0x0009d87a cmp r0, 0 |
| if (r0 == 0) {
0x0009d87c beq.w 0x9db44 | goto label_60;
| }
| label_6:
0x0009d880 movs r6, 0 | r6 = 0;
| label_8:
0x0009d882 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009d884 movs r3, 0 | r3 = 0;
0x0009d886 ldr r0, [sp, 0x34] | r0 = x;
0x0009d888 movs r1, 0xf | r1 = 0xf;
0x0009d88a bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009d88e mov r4, r0 | r4 = r0;
0x0009d890 cmp r0, 0 |
| if (r0 != 0) {
0x0009d892 bne 0x9d852 | goto label_0;
| }
0x0009d894 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009d896 movs r1, 1 | r1 = 1;
0x0009d898 ldr r5, [sp, 0xe0] | r5 = var_e0h;
0x0009d89a adds r2, r3, 2 | r2 = r3 + 2;
0x0009d89c ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009d89e mov r0, r5 | r0 = r5;
0x0009d8a0 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009d8a4 blx 0x84e8 | fcn_000084e8 ();
0x0009d8a8 ldr r3, [sp, 0x64] | r3 = var_64h;
0x0009d8aa movs r1, 2 | r1 = 2;
0x0009d8ac mov r0, r5 | r0 = r5;
0x0009d8ae lsrs r2, r3, 0xa | r2 = r3 >> 0xa;
0x0009d8b0 ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009d8b2 orr.w r2, r2, r3, lsl 22 | r2 |= (r3 << 22);
0x0009d8b6 lsrs r3, r3, 0xa | r3 >>= 0xa;
0x0009d8b8 adds r2, 1 | r2++;
0x0009d8ba adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009d8be lsls r3, r3, 0xa | r3 <<= 0xa;
0x0009d8c0 orr.w r3, r3, r2, lsr 22 | r3 |= (r2 >> 22);
0x0009d8c4 lsls r2, r2, 0xa | r2 <<= 0xa;
0x0009d8c6 blx 0x84e8 | fcn_000084e8 ();
0x0009d8c8 cdp p6, 1, c4, c0, c8, 1 | __asm ("cdp p6, 1, c4, c0, c8, 1");
0x0009d8cc blx 0x8728 | r0 = fcn_00008728 ();
0x0009d8d0 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0009d8d2 beq.w 0x9dd86 | goto label_61;
| }
0x0009d8d6 mov r0, r5 | r0 = r5;
0x0009d8d8 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009d8dc mov r5, r0 | r5 = r0;
| label_7:
0x0009d8de cmp r5, 0 |
| if (r5 != 0) {
0x0009d8e0 bne.w 0x9dc8a | goto label_62;
| }
0x0009d8e4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009d8e6 movs r2, 0x38 | r2 = 0x38;
0x0009d8e8 mov r1, r5 | r1 = r5;
0x0009d8ea ldr r0, [sp, 0x40] | r0 = var_40h;
0x0009d8ec str r5, [sp, 0xe0] | var_e0h = r5;
0x0009d8ee lsls r4, r3, 2 | r4 = r3 << 2;
0x0009d8f0 blx 0x839c | fcn_0000839c ();
0x0009d8f4 mov r0, r4 | r0 = r4;
0x0009d8f6 mov r1, r5 | r1 = r5;
0x0009d8f8 blx 0x8240 | fcn_00008240 ();
0x0009d8fc str.w r0, [sl, 0x248] | __asm ("str.w r0, aav.0x000000ff");
0x0009d900 cmp r0, 0 |
| if (r0 == 0) {
0x0009d902 beq.w 0x9db82 | goto label_63;
| }
0x0009d906 mov r2, r4 | r2 = r4;
0x0009d908 mov r1, r5 | r1 = r5;
0x0009d90a blx 0x839c | fcn_0000839c ();
0x0009d90e ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009d910 mov r3, r5 | r3 = r5;
0x0009d912 ldr r0, [sp, 0x34] | r0 = x;
0x0009d914 movs r1, 0xc | r1 = 0xc;
0x0009d916 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009d91a mov r4, r0 | r4 = r0;
0x0009d91c cmp r0, 0 |
| if (r0 != 0) {
0x0009d91e bne 0x9d852 | goto label_0;
| }
0x0009d920 ldr r5, [sp, 0xe0] | r5 = var_e0h;
0x0009d922 movs r1, 1 | r1 = 1;
0x0009d924 ldrd r3, r2, [sp, 0x38] | __asm ("ldrd r3, r2, [var_38h]");
0x0009d928 mov r0, r5 | r0 = r5;
0x0009d92a blx 0x84e8 | fcn_000084e8 ();
0x0009d92e strd fp, r6, [sp, 0x7c] | __asm ("strd fp, r6, [var_7ch]");
0x0009d932 b 0x9d99e |
| while (r3 != 0) {
0x0009d934 movs r1, 1 | r1 = 1;
0x0009d936 mov r0, r5 | r0 = r5;
0x0009d938 blx 0x84d8 | fcn_000084d8 ();
0x0009d93c str r0, [sp, 0x4c] | var_4ch = r0;
0x0009d93e mov r0, r5 | r0 = r5;
0x0009d940 str r1, [sp, 0x48] | var_48h = r1;
0x0009d942 movs r1, 2 | r1 = 2;
0x0009d944 blx 0x84d8 | r0 = fcn_000084d8 ();
0x0009d948 mov r7, r0 | r7 = r0;
0x0009d94a mov r6, r1 | r6 = r1;
0x0009d94c mov r0, r5 | r0 = r5;
0x0009d94e movs r1, 3 | r1 = 3;
0x0009d950 blx 0x84d8 | r0 = fcn_000084d8 ();
0x0009d954 mov sb, r0 | sb = r0;
0x0009d956 mov r8, r1 | r8 = r1;
0x0009d958 mov r0, r5 | r0 = r5;
0x0009d95a movs r1, 4 | r1 = 4;
0x0009d95c blx 0x8924 | fcn_00008924 ();
0x0009d960 movs r1, 4 | r1 = 4;
0x0009d962 mov fp, r0 |
0x0009d964 mov r0, r5 | r0 = r5;
0x0009d966 blx 0x82f4 | fcn_000082f4 ();
0x0009d96a ldr.w r1, [sl, 0x248] | r1 = *((sl + 0x248));
0x0009d96e ldrd r3, r2, [sp, 0x48] | __asm ("ldrd r3, r2, [var_48h]");
0x0009d972 strd fp, r0, [sp, 0x10] | __asm ("strd fp, r0, [var_10h]");
0x0009d976 mov r0, r4 | r0 = r4;
0x0009d978 strd sb, r8, [sp, 8] | __asm ("strd sb, r8, [var_8h]");
0x0009d97c add.w r1, r1, r4, lsl 2 | r1 += (r4 << 2);
0x0009d980 strd r7, r6, [sp] | __asm ("strd r7, r6, [sp]");
0x0009d984 adds r4, 1 | r4++;
0x0009d986 str r1, [sp, 0x18] | var_18h = r1;
0x0009d988 movs r1, 0 | r1 = 0;
0x0009d98a bl 0x3fc94 | fcn_0003fc94 (r0, r1, r2, r3, r4, r5, r6);
0x0009d98e ldr.w r3, [sl, 0x24c] | r3 = *((sl + 0x24c));
0x0009d992 adds r3, 1 | r3++;
0x0009d994 str.w r3, [sl, 0x24c] | __asm ("str.w r3, aav.0x000000ff");
0x0009d998 cmp r0, 0 |
| if (r0 != 0) {
0x0009d99a bne.w 0x9dd76 | goto label_64;
| }
0x0009d99e mov r0, r5 | r0 = r5;
0x0009d9a0 blx 0x8728 | fcn_00008728 ();
0x0009d9a4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009d9a6 cmp r4, r3 |
0x0009d9a8 ite ge |
| if (r4 < r3) {
0x0009d9aa movge r3, 0 | r3 = 0;
| }
| if (r4 >= r3) {
0x0009d9ac movlt r3, 1 | r3 = 1;
| }
0x0009d9ae cmp r0, 0x64 |
0x0009d9b0 it ne |
| if (r0 == 0x64) {
0x0009d9b2 movne r3, 0 | r3 = 0;
| }
0x0009d9b4 cmp r3, 0 |
0x0009d9b6 bne 0x9d934 |
| }
0x0009d9b8 mov r0, r5 | r0 = r5;
0x0009d9ba ldrd fp, r6, [sp, 0x7c] | __asm ("ldrd fp, r6, [var_7ch]");
0x0009d9be blx 0x81f8 | fcn_000081f8 ();
0x0009d9c2 str r0, [sp, 0x48] | var_48h = r0;
0x0009d9c4 cmp r0, 0 |
| if (r0 != 0) {
0x0009d9c6 bne.w 0x9df26 | goto label_65;
| }
0x0009d9ca ldr.w r3, [sl, 0x24c] | r3 = *((sl + 0x24c));
0x0009d9ce ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009d9d0 cmp r3, r2 |
0x0009d9d2 it ne |
| if (r3 == r2) {
0x0009d9d4 ldrne r4, [sp, 0x6c] | r4 = var_6ch;
| }
| if (r3 == r2) {
0x0009d9d6 beq.w 0x9db88 | goto label_66;
| }
| label_10:
0x0009d9da ldr r0, [sp, 0x40] | r0 = var_40h;
0x0009d9dc bl 0x5ede8 | fcn_0005ede8 (r0);
0x0009d9e0 ldr r3, [sp, 0x50] | r3 = var_50h;
0x0009d9e2 cmp r3, 0 |
0x0009d9e4 ite le |
| if (r3 > 0) {
0x0009d9e6 movle r3, 0 | r3 = 0;
| }
| if (r3 <= 0) {
0x0009d9e8 andgt r3, r4, 1 | r3 = r4 & 1;
| }
0x0009d9ec cmp r3, 0 |
| if (r3 != 0) {
0x0009d9ee bne.w 0x9d7d2 | goto label_1;
| }
0x0009d9f2 ldr.w lr, [sp, 0x74] | lr = var_74h;
0x0009d9f6 ldr.w sb, [sp, 0x48] | sb = var_48h;
0x0009d9fa and.w r3, r4, lr | r3 = r4 & lr;
0x0009d9fe mov r4, sb | r4 = sb;
| label_40:
0x0009da00 cmp r3, 0 |
| if (r3 == 0) {
0x0009da02 beq.w 0x9d73a | goto label_2;
| }
0x0009da06 movs r3, 0 | r3 = 0;
0x0009da08 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009da0a ldr r0, [sp, 0x34] | r0 = x;
0x0009da0c movs r1, 0x17 | r1 = 0x17;
0x0009da0e str r3, [sp, 0xe0] | var_e0h = r3;
0x0009da10 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009da14 mov r4, r0 | r4 = r0;
0x0009da16 cmp r0, 0 |
| if (r0 != 0) {
0x0009da18 bne.w 0x9d73a | goto label_2;
| }
0x0009da1c ldr r5, [sp, 0xe0] | r5 = var_e0h;
0x0009da1e movs r2, 1 | r2 = 1;
0x0009da20 mov r1, r2 | r1 = r2;
0x0009da22 mov r0, r5 | r0 = r5;
0x0009da24 blx 0x8250 | fcn_00008250 ();
0x0009da28 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009da2a movs r1, 2 | r1 = 2;
0x0009da2c ldr r2, [sp, 0x60] | r2 = var_60h;
0x0009da2e mov r0, r5 | r0 = r5;
0x0009da30 str r4, [sp] | *(sp) = r4;
0x0009da32 blx 0x8a94 | fcn_00008a94 ();
0x0009da36 mov r0, r5 | r0 = r5;
0x0009da38 blx 0x8728 | fcn_00008728 ();
0x0009da3c mov r0, r5 | r0 = r5;
0x0009da3e blx 0x81f8 | fcn_000081f8 ();
0x0009da42 movs r1, 2 | r1 = 2;
0x0009da44 mov r4, r0 | r4 = r0;
0x0009da46 mov r0, r5 | r0 = r5;
0x0009da48 blx 0x8304 | fcn_00008304 ();
0x0009da4c b 0x9d73a | goto label_2;
| label_55:
0x0009da4e mov r0, r4 | r0 = r4;
0x0009da50 mov r1, r5 | r1 = r5;
0x0009da52 blx 0x84d8 | r0 = fcn_000084d8 ();
0x0009da56 strd r1, r0, [sp, 0x38] | __asm ("strd r1, r0, [var_38h]");
0x0009da5a movs r1, 1 | r1 = 1;
0x0009da5c mov r0, r4 | r0 = r4;
0x0009da5e blx 0x81b4 | r0 = fcn_000081b4 ();
0x0009da62 mov r8, r0 | r8 = r0;
0x0009da64 mov r0, r4 | r0 = r4;
0x0009da66 str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x0009da6a blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009da6e mov r4, r0 | r4 = r0;
0x0009da70 cmp r0, 0 |
| if (r0 == 0) {
0x0009da72 beq.w 0x9d816 | goto label_3;
| }
| label_5:
0x0009da76 mov.w fp, 0 |
0x0009da7a b 0x9d824 | goto label_4;
| label_56:
0x0009da7c ldr r1, [sp, 0x60] | r1 = var_60h;
0x0009da7e subs r5, r3, 1 | r5 = r3 - 1;
0x0009da80 movs r2, 0 | r2 = 0;
0x0009da82 vstr d8, [sp, 0xe0] | __asm ("vstr d8, [sp, 0xe0]");
0x0009da86 str r2, [sp, 0xd0] | var_d0h = r2;
0x0009da88 ldrsb r3, [r1, r5] | r3 = *((r1 + r5));
0x0009da8a cmp r3, r2 |
| if (r3 < r2) {
0x0009da8c blt.w 0x9dc60 | goto label_67;
| }
0x0009da90 cmp r5, r2 |
| if (r5 <= r2) {
0x0009da92 ble.w 0x9dec4 | goto label_68;
| }
0x0009da96 adds r3, r1, r5 | r3 = r1 + r5;
0x0009da98 b 0x9daa0 |
| while (r2 < 0) {
0x0009da9a subs r5, 1 | r5--;
| if (r5 == 1) {
0x0009da9c beq.w 0x9dc60 | goto label_67;
| }
0x0009daa0 ldrsb r2, [r3, -0x1]! | r2 = *((r3 -= 0x1));
0x0009daa4 cmp r2, 0 |
0x0009daa6 blt 0x9da9a |
| }
0x0009daa8 subs r5, 1 | r5--;
0x0009daaa itt ne |
| if (r5 == 1) {
0x0009daac ldrne r3, [sp, 0x60] | r3 = var_60h;
| }
| if (r5 == 1) {
0x0009daae addne r3, r3, r5 | r3 += r5;
| }
| if (r5 != 1) {
0x0009dab0 bne 0x9dab8 | goto label_69;
| }
0x0009dab2 b 0x9dac0 | goto label_19;
| do {
0x0009dab4 subs r5, 1 | r5--;
| if (r5 == 1) {
0x0009dab6 beq 0x9dac0 | goto label_19;
| }
| label_69:
0x0009dab8 ldrsb r2, [r3, -0x1]! | r2 = *((r3 -= 0x1));
0x0009dabc cmp r2, 0 |
0x0009dabe blt 0x9dab4 |
| } while (r2 < 0);
| label_19:
0x0009dac0 ldrd r1, r7, [sp, 0x5c] | __asm ("ldrd r1, r7, [var_5ch]");
0x0009dac4 adds r0, r7, r5 | r0 = r7 + r5;
0x0009dac6 bl 0xb604 | r0 = fcn_0000b604 (r0, r1);
0x0009daca adds r4, r0, r5 | r4 = r0 + r5;
0x0009dacc ldrb r3, [r7, r4] | r3 = *((r7 + r4));
0x0009dace adds r0, r7, r4 | r0 = r7 + r4;
0x0009dad0 lsls r7, r3, 0x18 | r7 = r3 << 0x18;
0x0009dad2 itt pl |
| if (r7 < r3) {
0x0009dad4 movpl r0, 1 | r0 = 1;
| }
| if (r7 < r3) {
0x0009dad6 strpl r3, [sp, 0xd0] | var_d0h = r3;
| }
| if (r7 < r3) {
0x0009dad8 bmi.w 0x9dc74 | goto label_70;
| }
| label_12:
0x0009dadc ldr r2, [sp, 0x44] | r2 = var_44h;
0x0009dade adds r3, r4, r0 | r3 = r4 + r0;
0x0009dae0 ldr.w sb, [sp, 0xe4] | sb = var_e4h;
0x0009dae4 movw r4, 0x10b | r4 = 0x10b;
0x0009dae8 cmp r3, r2 |
0x0009daea it eq |
| if (r3 != r2) {
0x0009daec moveq r4, 0 | r4 = 0;
| }
0x0009daee ldr r3, [sp, 0xe0] | r3 = var_e0h;
0x0009daf0 str r3, [sp, 0x48] | var_48h = r3;
| label_11:
0x0009daf2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009daf4 cmp r3, 0 |
| if (r3 < 0) {
0x0009daf6 blt 0x9db1e | goto label_71;
| }
0x0009daf8 ldrd r1, r0, [sp, 0x38] | __asm ("ldrd r1, r0, [var_38h]");
0x0009dafc mov r2, r6 | r2 = r6;
0x0009dafe mov r3, fp | r3 = fp;
0x0009db00 bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x0009db04 mov r1, r3 | r1 = r3;
0x0009db06 mov r8, r2 | r8 = r2;
0x0009db08 mov r7, r1 | r7 = r1;
0x0009db0a ldr r0, [sp, 0x48] | r0 = var_48h;
0x0009db0c mov r3, fp | r3 = fp;
0x0009db0e mov r2, r6 | r2 = r6;
0x0009db10 mov r1, sb | r1 = sb;
0x0009db12 bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x0009db16 cmp r8, r2 |
0x0009db18 sbcs.w r3, r7, r3 | __asm ("sbcs.w r3, r7, r3");
| if (r8 < r2) {
0x0009db1c blt 0x9da76 | goto label_5;
| }
| label_71:
0x0009db1e ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009db20 mov.w fp, 1 |
0x0009db24 ldr r3, [sp, 0x70] | r3 = var_70h;
0x0009db26 str r5, [sp, 0x44] | var_44h = r5;
0x0009db28 str.w fp, [sp, 0x74] | __asm ("str.w fp, [var_74h]");
0x0009db2c cmp r2, r3 |
0x0009db2e it lt |
| if (r2 >= r3) {
0x0009db30 movlt r2, r3 | r2 = r3;
| }
0x0009db32 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009db34 strd sb, r3, [sp, 0x38] | __asm ("strd sb, r3, [var_38h]");
0x0009db38 ldr r3, [sp, 0xd0] | r3 = var_d0h;
0x0009db3a cmp r2, r3 |
0x0009db3c it ge |
| if (r2 < r3) {
0x0009db3e movge r2, r3 | r2 = r3;
| }
0x0009db40 str r2, [sp, 0x30] | var_30h = r2;
0x0009db42 b 0x9d824 | goto label_4;
| label_60:
0x0009db44 ldr r5, [sp, 0xe0] | r5 = var_e0h;
0x0009db46 movs r1, 1 | r1 = 1;
0x0009db48 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0009db4a mov r0, r5 | r0 = r5;
0x0009db4c blx 0x84e8 | fcn_000084e8 ();
0x0009db50 mov r0, r5 | r0 = r5;
0x0009db52 blx 0x8728 | fcn_00008728 ();
0x0009db56 mov r1, r4 | r1 = r4;
0x0009db58 mov r0, r5 | r0 = r5;
0x0009db5a blx 0x81b4 | r0 = fcn_000081b4 ();
0x0009db5e mov r6, r0 | r6 = r0;
0x0009db60 mov r0, r5 | r0 = r5;
0x0009db62 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009db66 mov r5, r0 | r5 = r0;
0x0009db68 cmp r6, 0 |
| if (r6 == 0) {
0x0009db6a beq.w 0x9d880 | goto label_6;
| }
0x0009db6e cmp r6, 1 |
0x0009db70 ite ne |
| if (r6 == 1) {
0x0009db72 movne r3, 0 | r3 = 0;
| }
| if (r6 != 1) {
0x0009db74 andeq r3, fp, 1 | r3 = fp & 1;
| }
0x0009db78 cmp r3, 0 |
| if (r3 == 0) {
0x0009db7a beq.w 0x9d8de | goto label_7;
| }
0x0009db7e movs r6, 1 | r6 = 1;
0x0009db80 b 0x9d882 | goto label_8;
| label_63:
0x0009db82 mov.w r8, 7 | r8 = 7;
0x0009db86 b 0x9d854 | goto label_9;
| label_66:
0x0009db88 ldr r3, [sp, 0x78] | r3 = var_78h;
0x0009db8a ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009db8c ldr r0, [sp, 0x34] | r0 = x;
0x0009db8e str.w r3, [sl, 0x254] | __asm ("str.w r3, aav.0x000000ff");
0x0009db92 ldrd r2, r3, [sl, 0x238] | __asm ("ldrd r2, r3, aav.0x000000ff");
0x0009db94 movs r3, 0x8e | r3 = 0x8e;
0x0009db96 bl 0x9c4d4 | r0 = fcn_0009c4d4 (r0, r1, r2, r3);
0x0009db9a mov r4, r0 | r4 = r0;
0x0009db9c cmp r0, 0 |
| if (r0 != 0) {
0x0009db9e bne.w 0x9d852 | goto label_0;
| }
0x0009dba2 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0009dba4 ldr r0, [sp, 0x34] | r0 = x;
0x0009dba6 bl 0x9bccc | r0 = fcn_0009bccc (r0, r1, r2, r3, r4, r5, r6);
0x0009dbaa cmp r0, 0 |
| if (r0 == 0) {
0x0009dbac beq 0x9dc8e | goto label_72;
| }
0x0009dbae cmp r0, 0x64 |
| if (r0 != 0x64) {
0x0009dbb0 bne.w 0x9e8e4 | goto label_73;
| }
0x0009dbb4 mov sb, r4 | sb = r4;
| label_13:
0x0009dbb6 cmp r6, 0 |
0x0009dbb8 ite le |
| if (r6 > 0) {
0x0009dbba movle r5, 0 | r5 = 0;
| }
| if (r6 <= 0) {
0x0009dbbc andgt r5, fp, 1 | r5 = fp & 1;
| }
0x0009dbc0 cmp r5, 0 |
| if (r5 != 0) {
0x0009dbc2 bne.w 0x9ddaa | goto label_74;
| }
0x0009dbc6 ldr r0, [sp, 0x34] | r0 = x;
0x0009dbc8 mov r3, r5 | r3 = r5;
0x0009dbca add r2, sp, 0xd0 | r2 += var_d0h;
0x0009dbcc movs r1, 0x1d | r1 = 0x1d;
0x0009dbce str r5, [sp, 0xd0] | var_d0h = r5;
0x0009dbd0 str r5, [sp, 0xe0] | var_e0h = r5;
0x0009dbd2 bl 0x7c1d8 | fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009dbd6 str r0, [sp, 0x48] | var_48h = r0;
| if (r0 == 0) {
0x0009dbd8 cbnz r0, 0x9dc12 |
0x0009dbda ldr r4, [sp, 0xd0] | r4 = var_d0h;
0x0009dbdc movs r1, 1 | r1 = 1;
0x0009dbde ldrd r3, r2, [sp, 0x38] | __asm ("ldrd r3, r2, [var_38h]");
0x0009dbe2 mov r0, r4 | r0 = r4;
0x0009dbe4 blx 0x84e8 | fcn_000084e8 ();
0x0009dbe8 ldr.w r2, [sl, 0x24c] | r2 = *((sl + 0x24c));
0x0009dbec movs r1, 2 | r1 = 2;
0x0009dbee mov r0, r4 | r0 = r4;
0x0009dbf0 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0009dbf2 blx 0x84e8 | fcn_000084e8 ();
0x0009dbf6 mov r0, r4 | r0 = r4;
0x0009dbf8 blx 0x8728 | r0 = fcn_00008728 ();
0x0009dbfc cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0009dbfe beq.w 0x9e24e | goto label_75;
| }
| label_28:
0x0009dc02 mov r0, r4 | r0 = r4;
0x0009dc04 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009dc08 mov r3, r0 | r3 = r0;
0x0009dc0a cmp r0, 0 |
| if (r0 == 0) {
0x0009dc0c beq.w 0x9df14 | goto label_76;
| }
| label_21:
0x0009dc10 str r3, [sp, 0x48] | var_48h = r3;
| }
| label_17:
0x0009dc12 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0009dc16 rsbs r3, r3, 0 | r3 -= ;
0x0009dc18 str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x0009dc1c ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x0009dc20 sbc.w r3, r3, r3, lsl 1 | __asm ("sbc.w r3, r3, r3, lsl 1");
0x0009dc24 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
| label_23:
0x0009dc28 mov r4, sl | r4 = sl;
0x0009dc2a mov r6, sl | r6 = sl;
0x0009dc2c movs r5, 0xf | r5 = 0xf;
| do {
0x0009dc2e ldr.w r3, [r6, 0x230] | r3 = *((r6 + 0x230));
0x0009dc32 cmp r3, 0 |
| if (r3 > 0) {
0x0009dc34 bgt 0x9dc94 | goto label_77;
| }
0x0009dc36 ldr.w r0, [r6, 0x22c] | r0 = *((r6 + 0x22c));
0x0009dc3a subs r5, 1 | r5--;
0x0009dc3c blx 0x8404 | fcn_00008404 ();
0x0009dc40 ldr.w r0, [r6, 0x220] | r0 = *((r6 + 0x220));
0x0009dc44 subs r6, 0x20 | r6 -= 0x20;
0x0009dc46 blx 0x8404 | fcn_00008404 ();
0x0009dc4a adds r3, r5, 1 | r3 = r5 + 1;
0x0009dc4c bne 0x9dc2e |
| } while (r3 != r5);
0x0009dc4e ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009dc50 cmp r3, 0 |
| if (r3 == 0) {
0x0009dc52 beq.w 0x9dd58 | goto label_78;
| }
| label_15:
0x0009dc56 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009dc58 clz r4, r3 | r4 &= r3;
0x0009dc5c lsrs r4, r4, 5 | r4 >>= 5;
0x0009dc5e b 0x9d9da | goto label_10;
| label_67:
0x0009dc60 movs r3, 0 | r3 = 0;
0x0009dc62 ldr r5, [sp, 0x44] | r5 = var_44h;
0x0009dc64 mov sb, r3 | sb = r3;
0x0009dc66 movw r4, 0x10b | r4 = 0x10b;
0x0009dc6a str r3, [sp, 0x48] | var_48h = r3;
0x0009dc6c b 0x9daf2 | goto label_11;
| label_58:
0x0009dc6e movw r4, 0x10b | r4 = 0x10b;
0x0009dc72 b 0x9d73a | goto label_2;
| label_70:
0x0009dc74 add r1, sp, 0xd0 | r1 += var_d0h;
0x0009dc76 bl 0xb698 | fcn_0000b698 (r0, r1);
0x0009dc7a b 0x9dadc | goto label_12;
| label_35:
0x0009dc7c mov r0, r5 | r0 = r5;
0x0009dc7e str r3, [sp, 0x60] | var_60h = r3;
0x0009dc80 blx 0x81f8 | fcn_000081f8 ();
0x0009dc84 movs r0, 7 | r0 = 7;
| label_54:
0x0009dc86 mov r4, r0 | r4 = r0;
0x0009dc88 b 0x9d73a | goto label_2;
| label_62:
0x0009dc8a mov r8, r5 | r8 = r5;
0x0009dc8c b 0x9d854 | goto label_9;
| label_72:
0x0009dc8e mov.w sb, 1 | sb = 1;
0x0009dc92 b 0x9dbb6 | goto label_13;
| label_77:
0x0009dc94 cmp r5, 0 |
| if (r5 == 0) {
0x0009dc96 beq.w 0x9de7a | goto label_79;
| }
| label_18:
0x0009dc9a lsls r7, r5, 5 | r7 = r5 << 5;
0x0009dc9c ldr.w r8, [sp, 0x48] | r8 = var_48h;
0x0009dca0 add.w r6, sl, r7 | r6 = sl + r7;
0x0009dca4 b 0x9dcb8 |
| while (r3 == 0) {
| label_14:
0x0009dca6 ldr r0, [r4, 0x4c] | r0 = *((r4 + 0x4c));
0x0009dca8 adds r4, 0x20 | r4 += 0x20;
0x0009dcaa blx 0x8404 | fcn_00008404 ();
0x0009dcae ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x0009dcb0 blx 0x8404 | fcn_00008404 ();
0x0009dcb4 cmp r4, r6 |
| if (r4 == r6) {
0x0009dcb6 beq 0x9dce2 | goto label_80;
| }
0x0009dcb8 ldr r1, [r4, 0x50] | r1 = *((r4 + 0x50));
0x0009dcba cmp r1, 0 |
0x0009dcbc ite le |
| if (r1 > 0) {
0x0009dcbe movle r3, 0 | r3 = 0;
| }
| if (r1 <= 0) {
0x0009dcc0 movgt r3, 1 | r3 = 1;
| }
0x0009dcc2 cmp.w r8, 0 |
0x0009dcc6 it ne |
| if (r8 == 0) {
0x0009dcc8 movne r3, 0 | r3 = 0;
| }
0x0009dcca cmp r3, 0 |
0x0009dccc beq 0x9dca6 |
| }
0x0009dcce ldrd r2, r3, [r4, 0x38] | __asm ("ldrd r2, r3, [r4, 0x38]");
0x0009dcd2 str r1, [sp, 4] | var_4h = r1;
0x0009dcd4 ldr r1, [r4, 0x4c] | r1 = *((r4 + 0x4c));
0x0009dcd6 ldr r0, [sp, 0x34] | r0 = x;
0x0009dcd8 str r1, [sp] | *(sp) = r1;
0x0009dcda bl 0x88688 | r0 = fcn_00088688 (r0, r1, r2);
0x0009dcde mov r8, r0 | r8 = r0;
0x0009dce0 b 0x9dca6 | goto label_14;
| label_80:
0x0009dce2 mov r3, r8 | r3 = r8;
0x0009dce4 str.w r8, [sp, 0x48] | __asm ("str.w r8, [var_48h]");
| if (r3 == 0) {
0x0009dce8 cbnz r3, 0x9dd3c |
0x0009dcea ldr.w r2, [sl, 8] | r2 = *((sl + 8));
0x0009dcee ldrb.w r0, [sl, 0x30] | r0 = *((sl + 0x30));
0x0009dcf2 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x0009dcf6 adds r2, 1 | r2++;
0x0009dcf8 ldr.w r1, [sl, 0x10] | r1 = *((sl + 0x10));
0x0009dcfc ldrd r8, sb, [sl, 0x18] | __asm ("ldrd r8, sb, [sl, 0x18]");
0x0009dd00 vldr d16, [sl, 0x38] | __asm ("vldr d16, [sl, 0x38]");
0x0009dd04 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009dd08 vldr d17, [sl, 0x20] | __asm ("vldr d17, [sl, 0x20]");
0x0009dd0c vmov.i32 d19, 0 | __asm ("vmov.i32 d19, 0");
| if (r0 == 0) {
0x0009dd10 cbnz r0, 0x9dd16 |
0x0009dd12 vldr d19, [sl, 0x28] | __asm ("vldr d19, [sl, 0x28]");
| }
0x0009dd16 add.w r4, sl, r7 | r4 = sl + r7;
0x0009dd1a ldr r0, [sp, 0x34] | r0 = x;
0x0009dd1c ldr r6, [r4, 0x50] | r6 = *((r4 + 0x50));
0x0009dd1e str r6, [sp, 0x2c] | var_2ch = r6;
0x0009dd20 ldr r4, [r4, 0x4c] | r4 = *((r4 + 0x4c));
0x0009dd22 vstr d17, [sp, 0x18] | __asm ("vstr d17, [sp, 0x18]");
0x0009dd26 vstr d16, [sp, 0x10] | __asm ("vstr d16, [sp, 0x10]");
0x0009dd2a strd r8, sb, [sp, 8] | __asm ("strd r8, sb, [var_8h]");
0x0009dd2e str r1, [sp] | *(sp) = r1;
0x0009dd30 str r4, [sp, 0x28] | var_28h = r4;
0x0009dd32 vstr d19, [sp, 0x20] | __asm ("vstr d19, [sp, 0x20]");
0x0009dd36 bl 0x88818 | fcn_00088818 (r0, r1, r2);
0x0009dd3a str r0, [sp, 0x48] | var_48h = r0;
| }
0x0009dd3c add.w r3, sl, r7 | r3 = sl + r7;
0x0009dd40 add.w r5, sl, r5, lsl 5 | r5 = sl + (r5 << 5);
0x0009dd44 ldr r0, [r3, 0x4c] | r0 = *((r3 + 0x4c));
0x0009dd46 blx 0x8404 | fcn_00008404 ();
0x0009dd4a ldr r0, [r5, 0x40] | r0 = *((r5 + 0x40));
0x0009dd4c blx 0x8404 | fcn_00008404 ();
0x0009dd50 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009dd52 cmp r3, 0 |
| if (r3 != 0) {
0x0009dd54 bne.w 0x9dc56 | goto label_15;
| }
| label_78:
0x0009dd58 ldrb.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x0009dd5c cmp r3, 0 |
| if (r3 != 0) {
0x0009dd5e bne.w 0x9dc56 | goto label_15;
| }
0x0009dd62 ldrd r4, r5, [sl, 0x28] | __asm ("ldrd r4, r5, [sl, 0x28]");
0x0009dd66 ldrd r2, r3, [sp, 0x64] | __asm ("ldrd r2, r3, [var_64h]");
0x0009dd6a ldr r0, [sp, 0x34] | r0 = x;
0x0009dd6c strd r4, r5, [sp] | __asm ("strd r4, r5, [sp]");
0x0009dd70 bl 0x8891c | fcn_0008891c (r0, r1, r2, r3, r4);
0x0009dd74 b 0x9dc56 | goto label_15;
| label_64:
0x0009dd76 mov r3, r0 | r3 = r0;
0x0009dd78 mov r0, r5 | r0 = r5;
0x0009dd7a mov r8, r3 | r8 = r3;
0x0009dd7c blx 0x81f8 | fcn_000081f8 ();
0x0009dd80 b 0x9d854 | goto label_9;
| label_50:
0x0009dd82 movs r4, 7 | r4 = 7;
0x0009dd84 b 0x9d746 | goto label_16;
| label_61:
0x0009dd86 mov r1, r4 | r1 = r4;
0x0009dd88 mov r0, r5 | r0 = r5;
0x0009dd8a blx 0x858c | r0 = fcn_0000858c ();
0x0009dd8e mov r4, r0 | r4 = r0;
0x0009dd90 mov r0, r5 | r0 = r5;
0x0009dd92 blx 0x81f8 | fcn_000081f8 ();
0x0009dd96 cmp r4, 5 |
0x0009dd98 mov r5, r0 | r5 = r0;
0x0009dd9a ittt eq |
| if (r4 != 5) {
0x0009dd9c ldreq r3, [sl, 0x244] | r3 = *((sl + 0x244));
| }
| if (r4 != 5) {
0x0009dda0 orreq r3, r3, 2 | r3 |= 2;
| }
| if (r4 == 5) {
0x0009dda4 str.w r3, [sl, 0x244] | __asm ("str.w r3, aav.0x000000ff");
| }
0x0009dda8 b 0x9d8de | goto label_7;
| label_74:
0x0009ddaa movs r3, 0 | r3 = 0;
0x0009ddac ldr r0, [sp, 0x34] | r0 = x;
0x0009ddae add r2, sp, 0xc0 | r2 += var_c0h;
0x0009ddb0 movs r1, 0x20 | r1 = 0x20;
0x0009ddb2 ldrd r7, fp, [sl, 0x270] | __asm ("ldrd r7, fp, [sl, 0x270]");
0x0009ddb6 str r3, [sp, 0xc0] | var_c0h = r3;
0x0009ddb8 bl 0x7c1d8 | fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009ddbc str r0, [sp, 0x48] | var_48h = r0;
0x0009ddbe cmp r0, 0 |
| if (r0 != 0) {
0x0009ddc0 bne.w 0x9dc12 | goto label_17;
| }
0x0009ddc4 subs r4, r6, 1 | r4 = r6 - 1;
0x0009ddc6 ldr r6, [sp, 0xc0] | r6 = var_c0h;
0x0009ddc8 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0009ddcc movs r1, 1 | r1 = 1;
0x0009ddce ldr r3, [sp, 0x68] | r3 = var_68h;
0x0009ddd0 ldr r2, [sp, 0x64] | r2 = var_64h;
0x0009ddd2 mov r0, r6 | r0 = r6;
0x0009ddd4 vstr d16, [sp, 0xd0] | __asm ("vstr d16, [sp, 0xd0]");
0x0009ddd8 str r4, [sp, 0x88] | var_88h = r4;
0x0009ddda blx 0x84e8 | fcn_000084e8 ();
0x0009ddde mov r2, r4 | r2 = r4;
0x0009dde0 movs r1, 2 | r1 = 2;
0x0009dde2 mov r0, r6 | r0 = r6;
0x0009dde4 blx 0x8250 | fcn_00008250 ();
0x0009dde8 mov r0, r6 | r0 = r6;
0x0009ddea blx 0x8728 | r0 = fcn_00008728 ();
0x0009ddee cmp r0, 0x64 |
| if (r0 != 0x64) {
0x0009ddf0 bne.w 0x9e4aa | goto label_41;
| }
0x0009ddf4 movs r1, 1 | r1 = 1;
0x0009ddf6 mov r0, r6 | r0 = r6;
0x0009ddf8 blx 0x84d8 | fcn_000084d8 ();
0x0009ddfc strd r0, r1, [sp, 0x7c] | __asm ("strd r0, r1, [var_7ch]");
0x0009de00 movs r1, 2 | r1 = 2;
0x0009de02 mov r0, r6 | r0 = r6;
0x0009de04 blx 0x84d8 | fcn_000084d8 ();
0x0009de08 add.w r3, sl, 0x28 | r3 = sl + 0x28;
0x0009de0c add r2, sp, 0xd0 | r2 += var_d0h;
0x0009de0e str r1, [sp, 0x98] | var_98h = r1;
0x0009de10 mov r8, r0 | r8 = r0;
0x0009de12 movs r1, 3 | r1 = 3;
0x0009de14 mov r0, r6 | r0 = r6;
0x0009de16 bl 0x1fccc | fcn_0001fccc (r0, r1);
0x0009de1a ldrd r3, r2, [sl, 0x28] | __asm ("ldrd r3, r2, [sl, 0x28]");
0x0009de1e cmp r2, 0 |
| if (r2 < 0) {
0x0009de20 bge 0x9de2c |
0x0009de22 rsbs r3, r3, 0 | r3 -= ;
0x0009de24 sbc.w r2, r2, r2, lsl 1 | __asm ("sbc.w r2, r2, r2, lsl 1");
0x0009de28 strd r3, r2, [sl, 0x28] | __asm ("strd r3, r2, [sl, 0x28]");
| }
0x0009de2c orrs r3, r2 | r3 |= r2;
0x0009de2e mov.w r1, 4 | r1 = 4;
0x0009de32 ite eq |
| if (r3 != r2) {
0x0009de34 moveq r3, 1 | r3 = 1;
| }
| if (r3 == r2) {
0x0009de36 movne r3, 0 | r3 = 0;
| }
0x0009de38 strb.w r3, [sl, 0x30] | *((sl + 0x30)) = r3;
0x0009de3c mov r0, r6 | r0 = r6;
0x0009de3e blx 0x82f4 | fcn_000082f4 ();
0x0009de42 movs r1, 4 | r1 = 4;
0x0009de44 str r0, [sp, 0x4c] | var_4ch = r0;
0x0009de46 mov r0, r6 | r0 = r6;
0x0009de48 blx 0x8924 | fcn_00008924 ();
0x0009de4c str r0, [sp, 0x8c] | var_8ch = r0;
0x0009de4e cmp r0, 0 |
| if (r0 == 0) {
0x0009de50 beq.w 0x9e46a | goto label_81;
| }
0x0009de54 ldr r4, [sp, 0xd0] | r4 = var_d0h;
0x0009de56 movs r3, 0 | r3 = 0;
0x0009de58 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009de5a movs r1, 0x22 | r1 = 0x22;
0x0009de5c ldr r0, [sp, 0x34] | r0 = x;
0x0009de5e str r4, [sp, 0x90] | var_90h = r4;
0x0009de60 ldr r4, [sp, 0xd4] | r4 = var_d4h;
0x0009de62 str r3, [sp, 0xe0] | var_e0h = r3;
0x0009de64 str r4, [sp, 0x94] | var_94h = r4;
0x0009de66 bl 0x7c1d8 | fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009de6a str r0, [sp, 0x48] | var_48h = r0;
0x0009de6c cmp r0, 0 |
| if (r0 == 0) {
0x0009de6e beq.w 0x9e482 | goto label_82;
| }
| label_30:
0x0009de72 mov r0, r6 | r0 = r6;
0x0009de74 blx 0x81f8 | fcn_000081f8 ();
0x0009de78 b 0x9dc12 | goto label_17;
| label_79:
0x0009de7a ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009de7c cmp r3, 0 |
| if (r3 != 0) {
0x0009de7e bne 0x9df02 | goto label_83;
| }
0x0009de80 ldr.w r3, [sl, 0x74] | r3 = *((sl + 0x74));
0x0009de84 ldr.w r0, [sl, 0x6c] | r0 = *((sl + 0x6c));
0x0009de88 cmp r3, 0xa |
| if (r3 <= 0xa) {
0x0009de8a ble.w 0x9e4ce | goto label_84;
| }
| label_33:
0x0009de8e movs r3, 1 | r3 = 1;
0x0009de90 strb r3, [r0] | *(r0) = r3;
0x0009de92 ldr.w r7, [sl, 0x6c] | r7 = *((sl + 0x6c));
0x0009de96 ldrd r3, r2, [sl, 0x38] | __asm ("ldrd r3, r2, [sl, 0x38]");
0x0009de9a adds r1, r7, 1 | r1 = r7 + 1;
| do {
0x0009de9c lsrs r5, r3, 7 | r5 = r3 >> 7;
0x0009de9e orn r0, r3, 0x7f | r0 = r3 | 0x7f;
| r0 = ~r0;
0x0009dea2 uxtb r6, r3 | r6 = (int8_t) r3;
0x0009dea4 orr.w r3, r5, r2, lsl 25 | r3 = r5 | (r2 << 25);
0x0009dea8 lsrs r2, r2, 7 | r2 >>= 7;
0x0009deaa mov r5, r1 | r5 = r1;
0x0009deac strb r0, [r1], 1 | *(r1) = r0;
| r1++;
0x0009deb0 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x0009deb4 bne 0x9de9c |
| } while (r0 != r3);
0x0009deb6 subs r3, r5, r7 | r3 = r5 - r7;
0x0009deb8 strb r6, [r5] | *(r5) = r6;
0x0009deba adds r3, 1 | r3++;
0x0009debc movs r5, 1 | r5 = 1;
0x0009debe str.w r3, [sl, 0x70] | __asm ("str.w r3, [sl, 0x70]");
0x0009dec2 b 0x9dc9a | goto label_18;
| if (r5 == 1) {
| label_68:
0x0009dec4 beq.w 0x9e4be | goto label_85;
| }
0x0009dec8 ldr r3, [sp, 0x44] | r3 = var_44h;
0x0009deca subs r5, r3, 2 | r5 = r3 - 2;
0x0009decc b 0x9dac0 | goto label_19;
| label_53:
0x0009dece mov r1, r4 | r1 = r4;
0x0009ded0 mov r0, r5 | r0 = r5;
0x0009ded2 blx 0x8924 | r0 = fcn_00008924 ();
0x0009ded6 mov r6, r0 | r6 = r0;
0x0009ded8 str r0, [sp, 0x60] | var_60h = r0;
0x0009deda mov r1, r4 | r1 = r4;
0x0009dedc mov r0, r5 | r0 = r5;
0x0009dede blx 0x82f4 | fcn_000082f4 ();
0x0009dee2 str r0, [sp, 0x44] | var_44h = r0;
| if (r6 != 0) {
0x0009dee4 cbz r6, 0x9df06 |
0x0009dee6 cmp r0, 0 |
0x0009dee8 mov r3, r0 | r3 = r0;
0x0009deea ittt le |
| if (r0 > 0) {
0x0009deec movle r3, r4 | r3 = r4;
| }
| if (r0 > 0) {
0x0009deee strle r3, [sp, 0x84] | var_84h = r3;
| }
| if (r0 > 0) {
0x0009def0 strle r3, [sp, 0x60] | var_60h = r3;
| }
| if (r0 > 0) {
0x0009def2 bgt.w 0x9e808 | goto label_86;
| }
| label_36:
0x0009def6 mov r0, r5 | r0 = r5;
0x0009def8 blx 0x81f8 | fcn_000081f8 ();
0x0009defc b 0x9d790 | goto label_20;
| label_32:
0x0009defe movs r3, 7 | r3 = 7;
0x0009df00 str r3, [sp, 0x48] | var_48h = r3;
| label_83:
0x0009df02 movs r5, 1 | r5 = 1;
0x0009df04 b 0x9dc9a | goto label_18;
| }
0x0009df06 mov r0, r5 | r0 = r5;
0x0009df08 blx 0x81f8 | fcn_000081f8 ();
0x0009df0c ldr r3, [sp, 0x60] | r3 = var_60h;
0x0009df0e str r3, [sp, 0x84] | var_84h = r3;
0x0009df10 str r3, [sp, 0x44] | var_44h = r3;
0x0009df12 b 0x9d790 | goto label_20;
| label_76:
0x0009df14 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009df16 movs r1, 0xa | r1 = 0xa;
0x0009df18 ldr r0, [sp, 0x34] | r0 = x;
0x0009df1a bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009df1e mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x0009df20 cbz r0, 0x9df2a |
0x0009df22 str r0, [sp, 0x48] | var_48h = r0;
0x0009df24 b 0x9dc12 | goto label_17;
| label_65:
0x0009df26 mov r8, r0 | r8 = r0;
0x0009df28 b 0x9d854 | goto label_9;
| }
0x0009df2a ldr r5, [sp, 0xe0] | r5 = var_e0h;
0x0009df2c mov r0, r5 | r0 = r5;
0x0009df2e blx 0x8728 | r0 = fcn_00008728 ();
0x0009df32 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0009df34 beq.w 0x9e82a | goto label_87;
| }
| label_37:
0x0009df38 mov r0, r5 | r0 = r5;
0x0009df3a blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009df3e mov r3, r0 | r3 = r0;
0x0009df40 cmp r0, 0 |
| if (r0 != 0) {
0x0009df42 bne.w 0x9dc10 | goto label_21;
| }
0x0009df46 ldrd r4, r5, [sl, 0x20] | __asm ("ldrd r4, r5, [sl, 0x20]");
0x0009df4a ldr r0, [sp, 0x34] | r0 = x;
0x0009df4c strd r3, r3, [sp] | __asm ("strd r3, r3, [sp]");
0x0009df50 mov r2, r4 | r2 = r4;
0x0009df52 mov r3, r5 | r3 = r5;
0x0009df54 bl 0x88688 | r0 = fcn_00088688 (r0, r1, r2);
0x0009df58 mov r2, r0 | r2 = r0;
0x0009df5a cmp r0, 0 |
| if (r0 != 0) {
0x0009df5c bne.w 0x9e8cc | goto label_88;
| }
0x0009df60 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009df62 movs r1, 0x10 | r1 = 0x10;
0x0009df64 str.w r6, [sl, 0x10] | __asm ("str.w r6, [sl, 0x10]");
0x0009df68 ldrd r4, r6, [sl, 0x18] | __asm ("ldrd r4, r6, [sl, 0x18]");
0x0009df6c ldr r7, [sp, 0x48] | r7 = var_48h;
0x0009df6e str.w r3, [sl, 8] | __asm ("str.w r3, [sl, 8]");
0x0009df72 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009df74 str.w r7, [sl] | __asm ("str.w r7, [sl]");
0x0009df78 str.w r3, [sl, 0xc] | __asm ("str.w r3, [sl, 0xc]");
| do {
0x0009df7c mul r3, r2, r7 | r3 = r2 * r7;
0x0009df80 add.w r0, sl, r2, lsl 5 | r0 = sl + (r2 << 5);
0x0009df84 adds r2, 1 | r2++;
0x0009df86 adds r5, r3, r4 | r5 = r3 + r4;
0x0009df88 adc.w r3, r6, r3, asr 31 | __asm ("adc.w r3, r6, r3, asr 31");
0x0009df8c subs r1, 1 | r1--;
0x0009df8e str r5, [r0, 0x38] | *((r0 + 0x38)) = r5;
0x0009df90 str r3, [r0, 0x3c] | *((r0 + 0x3c)) = r3;
0x0009df92 bne 0x9df7c |
| } while (r1 != 1);
| label_31:
0x0009df94 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009df96 cmp r3, 0 |
| if (r3 == 0) {
0x0009df98 beq.w 0x9dc12 | goto label_17;
| }
0x0009df9c cmp.w sb, 0 |
| if (sb == 0) {
0x0009dfa0 beq.w 0x9e25a | goto label_89;
| }
0x0009dfa4 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0009dfa8 ldr r2, [sp, 0x50] | r2 = var_50h;
0x0009dfaa adds r3, 1 | r3++;
0x0009dfac subs r3, r2, r3 | r3 = r2 - r3;
0x0009dfae str r3, [sp, 0x50] | var_50h = r3;
0x0009dfb0 ldr.w r3, [sl, 0x24c] | r3 = *((sl + 0x24c));
0x0009dfb4 subs r1, r3, 1 | r1 = r3 - 1;
0x0009dfb6 str r3, [sp, 0x48] | var_48h = r3;
| if (r1 < r3) {
0x0009dfb8 bmi.w 0x9e908 | goto label_90;
| }
0x0009dfbc ldr r4, [sp, 0x48] | r4 = var_48h;
0x0009dfbe movs r3, 0 | r3 = 0;
0x0009dfc0 ldr.w fp, [sp, 0x34] | fp = x;
0x0009dfc4 mov r7, r1 | r7 = r1;
0x0009dfc6 vmov.i32 d9, 0 | __asm ("vmov.i32 d9, 0");
0x0009dfca str r3, [sp, 0x30] | var_30h = r3;
0x0009dfcc add r3, sp, 0xc0 | r3 += var_c0h;
0x0009dfce str r3, [sp, 0x4c] | var_4ch = r3;
0x0009dfd0 str.w sl, [sp, 0x80] | __asm ("str.w sl, [var_80h]");
| label_22:
0x0009dfd4 cmp r4, 0 |
| if (r4 <= 0) {
0x0009dfd6 ble.w 0x9edfa | goto label_91;
| }
0x0009dfda ldr r3, [sp, 0x80] | r3 = var_80h;
0x0009dfdc ldr.w r2, [r3, 0x248] | r2 = *((r3 + 0x248));
0x0009dfe0 movs r3, 0 | r3 = 0;
0x0009dfe2 subs r2, 4 | r2 -= 4;
0x0009dfe4 b 0x9dfec |
| while (r5 != r7) {
0x0009dfe6 adds r3, 1 | r3++;
0x0009dfe8 cmp r3, r4 |
| if (r3 == r4) {
0x0009dfea beq 0x9dff6 | goto label_92;
| }
0x0009dfec ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x0009dff0 ldr r5, [r1] | r5 = *(r1);
0x0009dff2 cmp r5, r7 |
0x0009dff4 bne 0x9dfe6 |
| }
| label_92:
0x0009dff6 ldr r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x0009dff8 mov r8, r1 | r8 = r1;
0x0009dffa cmp r3, 0 |
| if (r3 != 0) {
0x0009dffc beq 0x9e068 |
0x0009dffe ldr.w r4, [r8, 0x40] | r4 = *((r8 + 0x40));
0x0009e002 add r3, sp, 0xd4 | r3 += var_d4h;
0x0009e004 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0009e008 movs r6, 0 | r6 = 0;
0x0009e00a str r6, [sp, 0xd0] | var_d0h = r6;
0x0009e00c add r2, sp, 0xbc | r2 += var_bch;
0x0009e00e str r4, [sp, 0x48] | var_48h = r4;
0x0009e010 movs r1, 0x20 | r1 = 0x20;
0x0009e012 ldr.w r4, [r8, 0x3c] | r4 = *((r8 + 0x3c));
0x0009e016 mov r0, fp | r0 = fp;
0x0009e018 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0009e01c add r3, sp, 0xe4 | r3 += var_e4h;
0x0009e01e str r6, [sp, 0xe0] | var_e0h = r6;
0x0009e020 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0009e024 mov r3, r6 | r3 = r6;
0x0009e026 str r4, [sp, 0x7c] | var_7ch = r4;
0x0009e028 vstr d9, [sp, 0xc8] | __asm ("vstr d9, [sp, 0xc8]");
0x0009e02c str r6, [sp, 0xbc] | var_bch = r6;
0x0009e02e bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009e032 mov r4, r0 | r4 = r0;
0x0009e034 cmp r0, 0 |
| if (r0 == 0) {
0x0009e036 beq 0x9e09c | goto label_93;
| }
0x0009e038 str r6, [sp, 0x88] | var_88h = r6;
| label_24:
0x0009e03a movs r5, 0 | r5 = 0;
0x0009e03c ldr r0, [sp, 0x88] | r0 = var_88h;
0x0009e03e blx 0x8404 | fcn_00008404 ();
0x0009e042 mov r0, r5 | r0 = r5;
0x0009e044 blx 0x8404 | fcn_00008404 ();
0x0009e048 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009e04a adds r3, 1 | r3++;
0x0009e04c str r3, [sp, 0x30] | var_30h = r3;
| label_27:
0x0009e04e subs r7, 1 | r7--;
0x0009e050 cmp r7, 0 |
0x0009e052 it ge |
| if (r7 >= 0) {
0x0009e054 cmpge r4, 0 | __asm ("cmpge r4, 0");
| }
0x0009e056 ite eq |
| if (r7 != 0) {
0x0009e058 moveq r6, 1 | r6 = 1;
| }
| if (r7 == 0) {
0x0009e05a movne r6, 0 | r6 = 0;
| }
| if (r7 != 0) {
0x0009e05c bne.w 0x9e4e6 | goto label_94;
| }
0x0009e060 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0009e062 ldr.w r4, [r3, 0x24c] | r4 = *((r3 + 0x24c));
0x0009e066 b 0x9dfd4 | goto label_22;
| }
0x0009e068 ldrd r3, r2, [r1, 8] | __asm ("ldrd r3, r2, [r1, 8]");
0x0009e06c orrs r3, r2 | r3 |= r2;
| if (r3 != r2) {
0x0009e06e bne.w 0x9e212 | goto label_95;
| }
| label_26:
0x0009e072 movs r3, 0 | r3 = 0;
0x0009e074 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009e076 movs r1, 0x1e | r1 = 0x1e;
0x0009e078 mov r0, fp | r0 = fp;
0x0009e07a str r3, [sp, 0xe0] | var_e0h = r3;
0x0009e07c bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009e080 mov r4, r0 | r4 = r0;
0x0009e082 cmp r0, 0 |
| if (r0 == 0) {
0x0009e084 beq.w 0x9e226 | goto label_96;
| }
| label_25:
0x0009e088 ldr.w sl, [sp, 0x80] | sl = var_80h;
0x0009e08c str r4, [sp, 0x48] | var_48h = r4;
| label_34:
0x0009e08e ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009e090 cmp r3, 0 |
| if (r3 == 0) {
0x0009e092 beq.w 0x9dc28 | goto label_23;
| }
| label_93:
0x0009e09c ldr.w r8, [sp, 0xbc] | r8 = var_bch;
0x0009e0a0 movs r1, 1 | r1 = 1;
0x0009e0a2 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009e0a4 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0009e0a6 mov r0, r8 | r0 = r8;
0x0009e0a8 blx 0x84e8 | fcn_000084e8 ();
0x0009e0ac mov r2, r5 | r2 = r5;
0x0009e0ae movs r1, 2 | r1 = 2;
0x0009e0b0 mov r0, r8 | r0 = r8;
0x0009e0b2 blx 0x8250 | fcn_00008250 ();
0x0009e0b6 mov r0, r8 | r0 = r8;
0x0009e0b8 blx 0x8728 | r0 = fcn_00008728 ();
0x0009e0bc cmp r0, 0x64 |
| if (r0 == 0x64) {
0x0009e0be beq.w 0x9e6f0 | goto label_97;
| }
0x0009e0c2 mov r0, r8 | r0 = r8;
0x0009e0c4 str r6, [sp, 0x88] | var_88h = r6;
0x0009e0c6 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009e0ca mov r4, r0 | r4 = r0;
0x0009e0cc strd r6, r6, [sp, 0x94] | __asm ("strd r6, r6, [var_94h]");
0x0009e0d0 cmp r4, 0 |
| if (r4 != 0) {
0x0009e0d2 bne 0x9e03a | goto label_24;
| }
| label_95:
0x0009e212 mov r0, fp | r0 = fp;
0x0009e214 bl 0x8874c | r0 = fcn_0008874c (r0, r1);
0x0009e218 mov r4, r0 | r4 = r0;
0x0009e21a cmp r0, 0 |
| if (r0 != 0) {
0x0009e21c bne.w 0x9e088 | goto label_25;
| }
0x0009e220 ldr.w r5, [r8] | r5 = *(r8);
0x0009e224 b 0x9e072 | goto label_26;
| label_96:
0x0009e226 ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x0009e228 movs r1, 1 | r1 = 1;
0x0009e22a ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009e22c ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0009e22e mov r0, r4 | r0 = r4;
0x0009e230 blx 0x84e8 | fcn_000084e8 ();
0x0009e234 mov r2, r5 | r2 = r5;
0x0009e236 movs r1, 2 | r1 = 2;
0x0009e238 mov r0, r4 | r0 = r4;
0x0009e23a blx 0x8250 | fcn_00008250 ();
0x0009e23e mov r0, r4 | r0 = r4;
0x0009e240 blx 0x8728 | fcn_00008728 ();
0x0009e244 mov r0, r4 | r0 = r4;
0x0009e246 blx 0x81f8 | r0 = fcn_000081f8 ();
0x0009e24a mov r4, r0 | r4 = r0;
0x0009e24c b 0x9e04e | goto label_27;
| label_75:
0x0009e24e ldr r1, [sp, 0x48] | r1 = var_48h;
0x0009e250 mov r0, r4 | r0 = r4;
0x0009e252 blx 0x81b4 | fcn_000081b4 ();
0x0009e256 str r0, [sp, 0x48] | var_48h = r0;
0x0009e258 b 0x9dc02 | goto label_28;
| label_89:
0x0009e25a add.w r3, sl, 0x4c | r3 = sl + 0x4c;
0x0009e25e str r3, [sp, 0x90] | var_90h = r3;
0x0009e260 add.w r3, sl, 0x40 | r3 = sl + 0x40;
0x0009e264 str r3, [sp, 0x94] | var_94h = r3;
0x0009e266 ldr.w r3, [sl, 0x274] | r3 = *((sl + 0x274));
0x0009e26a ldr.w r0, [sl, 0x44] | r0 = *((sl + 0x44));
0x0009e26e ldr.w fp, [sl, 0x27c] | fp = *((sl + 0x27c));
0x0009e272 str r3, [sp, 0x7c] | var_7ch = r3;
0x0009e274 cmp r0, r3 |
0x0009e276 it ge |
| if (r0 < r3) {
0x0009e278 movge r0, r3 | r0 = r3;
| }
0x0009e27a ldr.w r3, [sl, 0x270] | r3 = *((sl + 0x270));
0x0009e27e cmp r0, 0 |
0x0009e280 itt le |
| if (r0 > 0) {
0x0009e282 ldrle r5, [sp, 0x7c] | r5 = var_7ch;
| }
| if (r0 > 0) {
0x0009e284 movle r6, 0 | r6 = 0;
| }
0x0009e286 str r3, [sp, 0x4c] | var_4ch = r3;
0x0009e288 ldr.w r3, [sl, 0x278] | r3 = *((sl + 0x278));
0x0009e28c str r3, [sp, 0x80] | var_80h = r3;
0x0009e28e ldr.w r3, [sl, 0x40] | r3 = *((sl + 0x40));
| if (r0 <= 0) {
0x0009e292 ble 0x9e2c2 | goto label_98;
| }
0x0009e294 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009e296 subs r3, 1 | r3--;
0x0009e298 movs r6, 0 | r6 = 0;
0x0009e29a subs r2, 1 | r2--;
0x0009e29c b 0x9e2b2 |
| while (r4 == r1) {
0x0009e2ac adds r6, 1 | r6++;
0x0009e2ae cmp r0, r6 |
| if (r0 == r6) {
0x0009e2b0 beq 0x9e2be | goto label_99;
| }
0x0009e2b2 ldrb r4, [r3, 1]! | r4 = *((r3 += 1));
0x0009e2b6 ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x0009e2ba cmp r4, r1 |
0x0009e2bc beq 0x9e2ac |
| }
| label_99:
0x0009e2be ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0009e2c0 subs r5, r3, r6 | r5 = r3 - r6;
| label_98:
0x0009e2c2 cmp r5, 0 |
| if (r5 <= 0) {
0x0009e2c4 ble.w 0x9e478 | goto label_45;
| }
0x0009e2c8 asrs r2, r6, 0x1f | r2 = r6 >> 0x1f;
0x0009e2ca mov r3, r6 | r3 = r6;
0x0009e2cc movs r0, 0 | r0 = 0;
| do {
0x0009e2ce lsrs r3, r3, 7 | r3 >>= 7;
0x0009e2d0 adds r0, 1 | r0++;
0x0009e2d2 orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x0009e2d6 lsrs r2, r2, 7 | r2 >>= 7;
0x0009e2d8 orrs.w r1, r3, r2 | r1 = r3 | r2;
0x0009e2dc bne 0x9e2ce |
| } while (r1 != r3);
0x0009e2de asrs r2, r5, 0x1f | r2 = r5 >> 0x1f;
0x0009e2e0 mov r3, r5 | r3 = r5;
0x0009e2e2 movs r1, 0 | r1 = 0;
| do {
0x0009e2e4 lsrs r3, r3, 7 | r3 >>= 7;
0x0009e2e6 adds r1, 1 | r1++;
0x0009e2e8 orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x0009e2ec lsrs r2, r2, 7 | r2 >>= 7;
0x0009e2ee orrs.w r4, r3, r2 | r4 = r3 | r2;
0x0009e2f2 bne 0x9e2e4 |
| } while (r4 != r3);
0x0009e2f4 asr.w r8, fp, 0x1f | r8 = fp >> 0x1f;
0x0009e2f8 add r1, r5 | r1 += r5;
0x0009e2fa add r0, r1 | r0 += r1;
0x0009e2fc mov r7, fp | r7 = fp;
0x0009e2fe movs r1, 0 | r1 = 0;
0x0009e300 mov r2, fp | r2 = fp;
0x0009e302 mov r3, r8 | r3 = r8;
| do {
0x0009e304 lsrs r4, r2, 7 | r4 = r2 >> 7;
0x0009e306 lsrs r5, r3, 7 | r5 = r3 >> 7;
0x0009e308 orr.w r4, r4, r3, lsl 25 | r4 |= (r3 << 25);
0x0009e30c adds r1, 1 | r1++;
0x0009e30e mov r3, r5 | r3 = r5;
0x0009e310 orrs.w ip, r4, r5 |
0x0009e314 mov r2, r4 | r2 = r4;
0x0009e316 bne 0x9e304 |
| } while (ip != r4);
0x0009e318 add.w r2, fp, r1 | r2 = fp + r1;
0x0009e31c ldr.w r1, [sl, 0x50] | r1 = *((sl + 0x50));
0x0009e320 add r2, r0 | r2 += r0;
0x0009e322 cmp r1, 0 |
0x0009e324 add.w sb, r2, r1 | sb = r2 + r1;
| if (r1 > 0) {
0x0009e328 ble 0x9e334 |
0x0009e32a ldr r3, [sp, 0x34] | r3 = x;
0x0009e32c ldr.w r3, [r3, 0xe8] | r3 = *((r3 + 0xe8));
0x0009e330 cmp r3, sb |
| if (r3 < sb) {
0x0009e332 blt 0x9e3a2 | goto label_100;
| }
| }
0x0009e334 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x0009e338 ldr r4, [sp, 0x90] | r4 = var_90h;
0x0009e33a adds r3, r3, r2 | r3 += r2;
0x0009e33c str.w r3, [sl, 0x28] | __asm ("str.w r3, [sl, 0x28]");
0x0009e340 ldr.w r3, [sl, 0x2c] | r3 = *((sl + 0x2c));
0x0009e344 adc.w r3, r3, r2, asr 31 | __asm ("adc.w r3, r3, r2, asr 31");
0x0009e348 str.w r3, [sl, 0x2c] | __asm ("str.w r3, [sl, 0x2c]");
0x0009e34c ldr.w r3, [sl, 0x54] | r3 = *((sl + 0x54));
0x0009e350 cmp r3, sb |
| if (r3 < sb) {
0x0009e352 blt 0x9e444 | goto label_101;
| }
| if (r1 == 0) {
| label_29:
0x0009e354 cbnz r1, 0x9e364 |
0x0009e356 movs r3, 1 | r3 = 1;
0x0009e358 movs r2, 0 | r2 = 0;
0x0009e35a str.w r3, [sl, 0x50] | __asm ("str.w r3, [sl, 0x50]");
0x0009e35e ldr.w r3, [sl, 0x4c] | r3 = *((sl + 0x4c));
0x0009e362 strb r2, [r3] | *(r3) = r2;
| }
0x0009e364 ldr r3, [sp, 0x80] | r3 = var_80h;
0x0009e366 mov r0, r4 | r0 = r4;
0x0009e368 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009e36a ldr r1, [sp, 0x94] | r1 = var_94h;
0x0009e36c str r3, [sp] | *(sp) = r3;
0x0009e36e str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x0009e372 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0009e374 bl 0x456d4 | fcn_000456d4 (r0, r1, r2, r3);
0x0009e378 str r0, [sp, 0x48] | var_48h = r0;
| if (r0 != 0) {
0x0009e37a cbnz r0, 0x9e386 | void (*0x9e386)() ();
| }
| label_100:
0x0009e3a2 ldrd r2, r3, [sl, 0x38] | __asm ("ldrd r2, r3, [sl, 0x38]");
0x0009e3a6 str r1, [sp, 4] | var_4h = r1;
0x0009e3a8 ldr.w r1, [sl, 0x4c] | r1 = *((sl + 0x4c));
0x0009e3ac ldr r0, [sp, 0x34] | r0 = x;
0x0009e3ae str r1, [sp] | *(sp) = r1;
0x0009e3b0 bl 0x88688 | fcn_00088688 (r0, r1, r2);
0x0009e3b4 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x0009e3b8 str r0, [sp, 0x48] | var_48h = r0;
0x0009e3ba adds r3, 1 | r3++;
0x0009e3bc str.w r3, [sl, 4] | __asm ("str.w r3, [sl, 4]");
0x0009e3c0 cmp r0, 0 |
| if (r0 == 0) {
0x0009e3c2 beq.w 0x9e526 | goto label_102;
| }
0x0009e3c6 ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x0009e3ca movs r1, 0 | r1 = 0;
0x0009e3cc str.w r1, [sl, 0x44] | __asm ("str.w r1, [sl, 0x44]");
0x0009e3d0 str.w r1, [sl, 0x50] | __asm ("str.w r1, [sl, 0x50]");
0x0009e3d4 adds r3, 1 | r3++;
0x0009e3d6 str.w r3, [sl, 0x38] | __asm ("str.w r3, [sl, 0x38]");
0x0009e3da ldr.w r3, [sl, 0x3c] | r3 = *((sl + 0x3c));
0x0009e3de adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x0009e3e2 str.w r3, [sl, 0x3c] | __asm ("str.w r3, [sl, 0x3c]");
0x0009e3e6 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0009e3e8 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
| do {
0x0009e3ea lsrs r3, r3, 7 | r3 >>= 7;
0x0009e3ec adds r1, 1 | r1++;
0x0009e3ee orr.w r3, r3, r2, lsl 25 | r3 |= (r2 << 25);
0x0009e3f0 str r2, [r0, 0x34] | *((r0 + 0x34)) = r2;
0x0009e3f2 lsrs r2, r2, 7 | r2 >>= 7;
0x0009e3f4 orrs.w r0, r3, r2 | r0 = r3 | r2;
0x0009e3f8 bne 0x9e3ea |
| } while (r0 != r3);
| label_101:
0x0009e444 ldr.w r0, [sl, 0x4c] | r0 = *((sl + 0x4c));
0x0009e448 mov r1, sb | r1 = sb;
0x0009e44a blx 0x8268 | r0 = fcn_00008268 ();
0x0009e44e cmp r0, 0 |
| if (r0 == 0) {
0x0009e450 beq.w 0x9e74c | goto label_47;
| }
0x0009e454 ldr.w r1, [sl, 0x50] | r1 = *((sl + 0x50));
0x0009e458 str.w sb, [sl, 0x54] | __asm ("str.w sb, [sl, 0x54]");
0x0009e45c str.w r0, [sl, 0x4c] | __asm ("str.w r0, [sl, 0x4c]");
0x0009e460 b 0x9e354 | goto label_29;
| label_81:
0x0009e46a mov r0, r6 | r0 = r6;
0x0009e46c blx 0x81f8 | fcn_000081f8 ();
0x0009e470 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x0009e472 cmp r3, 0 |
| if (r3 != 0) {
0x0009e474 bne.w 0x9e74c | goto label_47;
| }
| label_45:
0x0009e478 movw r3, 0x10b | r3 = 0x10b;
0x0009e47c str r3, [sp, 0x48] | var_48h = r3;
0x0009e47e b.w 0x9dc12 | goto label_17;
| label_82:
0x0009e482 ldr r4, [sp, 0xe0] | r4 = var_e0h;
0x0009e484 movs r1, 1 | r1 = 1;
0x0009e486 ldrd r2, r3, [sp, 0x90] | __asm ("ldrd r2, r3, [var_90h]");
0x0009e48a mov r0, r4 | r0 = r4;
0x0009e48c blx 0x84e8 | fcn_000084e8 ();
0x0009e490 mov r0, r4 | r0 = r4;
0x0009e492 blx 0x8728 | r0 = fcn_00008728 ();
0x0009e496 cmp r0, 0x64 |
0x0009e498 mov r0, r4 | r0 = r4;
| if (r0 == 0x64) {
0x0009e49a beq.w 0x9ea74 | goto label_103;
| }
0x0009e49e blx 0x81f8 | fcn_000081f8 ();
0x0009e4a2 str r0, [sp, 0x48] | var_48h = r0;
0x0009e4a4 cmp r0, 0 |
| if (r0 != 0) {
0x0009e4a6 bne.w 0x9de72 | goto label_30;
| }
| label_41:
0x0009e4aa mov r0, r6 | r0 = r6;
0x0009e4ac blx 0x81f8 | r0 = fcn_000081f8 ();
| label_48:
0x0009e4b0 cmp r0, 0 |
| if (r0 != 0) {
0x0009e4b2 bne.w 0x9eb02 | goto label_104;
| }
0x0009e4b6 ldr.w r3, [sl] | r3 = *(sl);
0x0009e4ba str r3, [sp, 0x48] | var_48h = r3;
0x0009e4bc b 0x9df94 | goto label_31;
| label_85:
0x0009e4be movs r3, 0 | r3 = 0;
0x0009e4c0 movs r5, 1 | r5 = 1;
0x0009e4c2 mov sb, r3 | sb = r3;
0x0009e4c4 movw r4, 0x10b | r4 = 0x10b;
0x0009e4c8 str r3, [sp, 0x48] | var_48h = r3;
0x0009e4ca b.w 0x9daf2 | goto label_11;
| label_84:
0x0009e4ce movs r1, 0xb | r1 = 0xb;
0x0009e4d0 blx 0x8268 | r0 = fcn_00008268 ();
0x0009e4d4 cmp r0, 0 |
| if (r0 == 0) {
0x0009e4d6 beq.w 0x9defe | goto label_32;
| }
0x0009e4da movs r3, 0xb | r3 = 0xb;
0x0009e4dc str.w r0, [sl, 0x6c] | __asm ("str.w r0, [sl, 0x6c]");
0x0009e4e0 str.w r3, [sl, 0x74] | __asm ("str.w r3, [sl, 0x74]");
0x0009e4e4 b 0x9de8e | goto label_33;
| label_94:
0x0009e4e6 ldr.w sl, [sp, 0x80] | sl = var_80h;
0x0009e4ea str r4, [sp, 0x48] | var_48h = r4;
0x0009e4ec cmp r4, 0 |
| if (r4 != 0) {
0x0009e4ee bne.w 0x9e08e | goto label_34;
| }
| label_38:
0x0009e516 ldr r2, [sp, 0x34] | r2 = x;
0x0009e518 movs r3, 0 | r3 = 0;
0x0009e51a mov r0, r6 | r0 = r6;
0x0009e51c strb.w r3, [r2, 0xf0] | *((r2 + 0xf0)) = r3;
0x0009e520 blx 0x8404 | fcn_00008404 ();
0x0009e524 b 0x9e08e | goto label_34;
| label_102:
0x0009e526 adds r3, r6, 1 | r3 = r6 + 1;
0x0009e528 str r7, [sp, 0x8c] | var_8ch = r7;
0x0009e52a str r3, [sp, 0x88] | var_88h = r3;
0x0009e52c ldr.w r3, [sl, 0x38] | r3 = *((sl + 0x38));
0x0009e530 str r4, [sp, 0xa4] | var_a4h = r4;
0x0009e532 mov r4, sl | r4 = sl;
0x0009e534 str r5, [sp, 0xa8] | var_a8h = r5;
0x0009e536 str r3, [sp, 0xac] | var_ach = r3;
0x0009e538 ldr.w r3, [sl, 0x3c] | r3 = *((sl + 0x3c));
0x0009e53c str r3, [sp, 0xb0] | var_b0h = r3;
0x0009e53e movs r3, 1 | r3 = 1;
0x0009e540 mov r7, r3 | r7 = r3;
0x0009e542 ldr r5, [sp, 0x88] | r5 = var_88h;
0x0009e544 ldrd r3, lr, [r4, 0x60] | __asm ("ldrd r3, lr, [r4, 0x60]");
0x0009e548 cmp r5, lr |
0x0009e54a it ge |
| if (r5 < lr) {
0x0009e54c movge r5, lr | r5 = lr;
| }
0x0009e54e cmp r5, 0 |
| if (r5 <= 0) {
0x0009e550 ble.w 0x9e8d2 | void (*0x9e8d2)() ();
| }
| label_97:
0x0009e6f0 movs r1, 4 | r1 = 4;
0x0009e6f2 mov r0, r8 | r0 = r8;
0x0009e6f4 blx 0x8924 | fcn_00008924 ();
0x0009e6f8 movs r1, 4 | r1 = 4;
0x0009e6fa mov r6, r0 | r6 = r0;
0x0009e6fc mov r0, r8 | r0 = r8;
0x0009e6fe blx 0x82f4 | fcn_000082f4 ();
0x0009e702 movs r1, 1 | r1 = 1;
0x0009e704 mov r4, r0 | r4 = r0;
0x0009e706 mov r0, r8 | r0 = r8;
0x0009e708 blx 0x84d8 | fcn_000084d8 ();
0x0009e70c mov r3, r1 | r3 = r1;
0x0009e70e mov r1, r4 | r1 = r4;
0x0009e710 ldr r4, [sp, 0x7c] | r4 = var_7ch;
0x0009e712 mov r2, r0 | r2 = r0;
0x0009e714 strd r2, r3, [sp, 0x94] | __asm ("strd r2, r3, [var_94h]");
0x0009e718 add r3, sp, 0xc8 | r3 += var_c8h;
0x0009e71a str r3, [sp, 4] | var_4h = r3;
0x0009e71c mov r0, r6 | r0 = r6;
0x0009e71e str r4, [sp] | *(sp) = r4;
0x0009e720 add r2, sp, 0xd0 | r2 += var_d0h;
0x0009e722 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009e724 bl 0x459dc | r0 = fcn_000459dc (r0, r1, r2, r3, r4, r5);
0x0009e728 mov r4, r0 | r4 = r0;
0x0009e72a mov r0, r8 | r0 = r8;
0x0009e72c blx 0x81f8 | fcn_000081f8 ();
0x0009e730 cmp r4, 0 |
| if (r4 == 0) {
0x0009e732 beq.w 0x9eaac | void (*0x9eaac)() ();
| }
| label_42:
0x0009e73c ldrd sl, r6, [sp, 0x48] | __asm ("ldrd sl, r6, [var_48h]");
0x0009e740 ldr r0, [sp, 0xf8] | r0 = var_f8h;
0x0009e742 blx 0x8404 | fcn_00008404 ();
0x0009e746 mov r0, r6 | r0 = r6;
0x0009e748 blx 0x81f8 | fcn_000081f8 ();
| label_47:
0x0009e74c movs r3, 7 | r3 = 7;
0x0009e74e b.w 0x9dc10 | goto label_21;
| label_86:
0x0009e808 mov r1, r3 | r1 = r3;
0x0009e80a mov r0, r4 | r0 = r4;
0x0009e80c blx 0x8268 | r0 = fcn_00008268 ();
0x0009e810 mov r3, r0 | r3 = r0;
0x0009e812 cmp r0, 0 |
| if (r0 == 0) {
0x0009e814 beq.w 0x9dc7c | goto label_35;
| }
0x0009e818 ldr r4, [sp, 0x44] | r4 = var_44h;
0x0009e81a ldr r1, [sp, 0x60] | r1 = var_60h;
0x0009e81c str r0, [sp, 0x60] | var_60h = r0;
0x0009e81e mov r2, r4 | r2 = r4;
0x0009e820 blx 0x8610 | fcn_00008610 ();
0x0009e824 str r4, [sp, 0x84] | var_84h = r4;
0x0009e826 b.w 0x9def6 | goto label_36;
| label_87:
0x0009e82a mov r1, r4 | r1 = r4;
0x0009e82c mov r0, r5 | r0 = r5;
0x0009e82e blx 0x84d8 | r0 = fcn_000084d8 ();
0x0009e832 subs r3, r0, 1 | r3 = r0 - 1;
0x0009e834 str.w r1, [sl, 0x1c] | __asm ("str.w r1, [sl, 0x1c]");
0x0009e838 adc r2, r1, -1 | __asm ("adc r2, r1, -1");
0x0009e83c ldr r1, [sp, 0x48] | r1 = var_48h;
0x0009e83e str.w r0, [sl, 0x18] | __asm ("str.w r0, [sl, 0x18]");
0x0009e842 lsls r1, r1, 4 | r1 <<= 4;
0x0009e844 adds r3, r3, r1 | r3 += r1;
0x0009e846 adc.w r2, r2, r1, asr 31 | __asm ("adc.w r2, r2, r1, asr 31");
0x0009e84a strd r3, r2, [sl, 0x20] | __asm ("strd r3, r2, [sl, 0x20]");
0x0009e84e b.w 0x9df38 | goto label_37;
| label_88:
0x0009e8cc str r0, [sp, 0x48] | var_48h = r0;
0x0009e8ce b.w 0x9dc12 | goto label_17;
| label_73:
0x0009e8e4 mov r3, r0 | r3 = r0;
0x0009e8e6 ldr r0, [sp, 0x40] | r0 = var_40h;
0x0009e8e8 mov r4, r3 | r4 = r3;
0x0009e8ea bl 0x5ede8 | fcn_0005ede8 (r0);
0x0009e8ee b.w 0x9d73a | goto label_2;
| label_90:
0x0009e908 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009e90a cmp r3, 0 |
| if (r3 != 0) {
0x0009e90c bne.w 0x9ea44 | goto label_105;
| }
0x0009e910 str r3, [sp, 0x30] | var_30h = r3;
0x0009e912 b.w 0x9dc28 | goto label_23;
| label_39:
0x0009e916 ldr r4, [sp, 0xd0] | r4 = var_d0h;
0x0009e918 movs r5, 0 | r5 = 0;
0x0009e91a ldrd r3, r2, [sp, 0x38] | __asm ("ldrd r3, r2, [var_38h]");
0x0009e91e movs r1, 1 | r1 = 1;
0x0009e920 mov r8, r5 | r8 = r5;
0x0009e922 mov r6, r5 | r6 = r5;
0x0009e924 mov r0, r4 | r0 = r4;
0x0009e926 blx 0x84e8 | fcn_000084e8 ();
0x0009e92a b 0x9e950 |
| while (r0 == 0x64) {
0x0009e92c cmp r8, r5 |
| if (r8 >= r5) {
0x0009e92e blt 0x9e940 |
0x0009e930 adds r5, 0x10 | r5 += 0x10;
0x0009e932 mov r0, r6 | r0 = r6;
0x0009e934 lsls r1, r5, 2 | r1 = r5 << 2;
0x0009e936 blx 0x8268 | r0 = fcn_00008268 ();
0x0009e93a cmp r0, 0 |
| if (r0 == 0) {
0x0009e93c beq 0x9e9a8 | goto label_106;
| }
0x0009e93e mov r6, r0 | r6 = r0;
| }
0x0009e940 movs r1, 0 | r1 = 0;
0x0009e942 mov r0, r4 | r0 = r4;
0x0009e944 blx 0x81b4 | fcn_000081b4 ();
0x0009e948 str.w r0, [r6, r8, lsl 2] | __asm ("str.w r0, [r6, r8, lsl 2]");
0x0009e94c add.w r8, r8, 1 | r8++;
0x0009e950 mov r0, r4 | r0 = r4;
0x0009e952 blx 0x8728 | r0 = fcn_00008728 ();
0x0009e956 cmp r0, 0x64 |
0x0009e958 beq 0x9e92c |
| }
0x0009e95a mov r0, r4 | r0 = r4;
0x0009e95c blx 0x81f8 | fcn_000081f8 ();
0x0009e960 str r0, [sp, 0x48] | var_48h = r0;
0x0009e962 cmp r0, 0 |
| if (r0 != 0) {
0x0009e964 bne.w 0x9e516 | goto label_38;
| }
0x0009e968 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009e96a movs r1, 0x1f | r1 = 0x1f;
0x0009e96c ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x0009e96e ldr r0, [sp, 0x34] | r0 = x;
0x0009e970 bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009e974 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0009e976 cbz r0, 0x9e9b4 | void (*0x9e9b4)() ();
| }
| label_106:
0x0009e9a8 mov r0, r4 | r0 = r4;
0x0009e9aa blx 0x81f8 | fcn_000081f8 ();
0x0009e9ae movs r3, 7 | r3 = 7;
0x0009e9b0 str r3, [sp, 0x48] | var_48h = r3;
0x0009e9b2 b 0x9e516 | goto label_38;
| label_105:
0x0009ea44 movs r4, 0 | r4 = 0;
0x0009ea46 ldr r0, [sp, 0x34] | r0 = x;
0x0009ea48 mov r3, r4 | r3 = r4;
0x0009ea4a add r2, sp, 0xd0 | r2 += var_d0h;
0x0009ea4c movs r1, 0x23 | r1 = 0x23;
0x0009ea4e str r4, [sp, 0xd0] | var_d0h = r4;
0x0009ea50 str r4, [sp, 0xe0] | var_e0h = r4;
0x0009ea52 bl 0x7c1d8 | fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x0009ea56 str r0, [sp, 0x30] | var_30h = r0;
0x0009ea58 cmp r0, 0 |
| if (r0 == 0) {
0x0009ea5a beq.w 0x9e916 | goto label_39;
| }
0x0009ea5e ldr r3, [sp, 0x34] | r3 = x;
0x0009ea60 mov r0, r4 | r0 = r4;
0x0009ea62 strb.w r4, [r3, 0xf0] | *((r3 + 0xf0)) = r4;
0x0009ea66 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009ea68 str r3, [sp, 0x48] | var_48h = r3;
0x0009ea6a blx 0x8404 | fcn_00008404 ();
0x0009ea6e str r4, [sp, 0x30] | var_30h = r4;
0x0009ea70 b.w 0x9dc28 | goto label_23;
| label_103:
0x0009ea74 blx 0x81f8 | fcn_000081f8 ();
0x0009ea78 str r0, [sp, 0x48] | var_48h = r0;
0x0009ea7a cmp r0, 0 |
| if (r0 != 0) {
0x0009ea7c bne.w 0x9de72 | goto label_30;
| }
0x0009ea80 ldr r1, [sp, 0x48] | r1 = var_48h;
0x0009ea82 mov r2, r8 | r2 = r8;
0x0009ea84 ldr r3, [sp, 0x98] | r3 = var_98h;
0x0009ea86 ldr r0, [sp, 0x34] | r0 = x;
0x0009ea88 str r1, [sp, 8] | var_8h = r1;
0x0009ea8a strd r1, r1, [sp, 0xc4] | __asm ("strd r1, r1, [var_c4h]");
0x0009ea8e add r1, sp, 0xc8 | r1 += var_c8h;
0x0009ea90 str r1, [sp, 0x9c] | var_9ch = r1;
0x0009ea92 str r1, [sp, 4] | var_4h = r1;
0x0009ea94 add r1, sp, 0xc4 | r1 += var_c4h;
0x0009ea96 str r1, [sp] | *(sp) = r1;
0x0009ea98 str r1, [sp, 0x98] | var_98h = r1;
0x0009ea9a bl 0x9b130 | fcn_0009b130 (r0, r1, r2, r3, r4, r5);
0x0009ea9e str r0, [sp, 0x48] | var_48h = r0;
| if (r0 != 0) {
0x0009eaa0 cbz r0, 0x9ead6 |
0x0009eaa2 ldr r0, [sp, 0xc4] | r0 = var_c4h;
0x0009eaa4 blx 0x8404 | fcn_00008404 ();
0x0009eaa8 b.w 0x9de72 | goto label_30;
| label_57:
0x0009eac0 ldr.w lr, [sp, 0x74] | lr = var_74h;
0x0009eac4 cmp r4, 0 |
0x0009eac6 ite ne |
| if (r4 == 0) {
0x0009eac8 movne r3, 0 | r3 = 0;
| }
| if (r4 != 0) {
0x0009eaca andeq r3, lr, 1 | r3 = lr & 1;
| }
0x0009eace b.w 0x9da00 | goto label_40;
| label_52:
0x0009ead2 blx 0x883c | fcn_0000883c ();
| }
0x0009ead6 ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x0009ead8 ldr r2, [sp, 0xc8] | r2 = var_c8h;
0x0009eada ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x0009eadc mov r1, r3 | r1 = r3;
0x0009eade mov r8, r3 | r8 = r3;
0x0009eae0 bl 0x45994 | r0 = fcn_00045994 (r0, r1, r2);
0x0009eae4 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0009eae6 cbz r0, 0x9eaf2 | goto label_107;
| }
0x0009eae8 b 0x9eb0a | goto label_108;
| do {
0x0009eaea ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x0009eaec bl 0x45830 | r0 = fcn_00045830 (r0);
| if (r0 != 0) {
0x0009eaf0 cbnz r0, 0x9eb08 | goto label_109;
| }
| label_107:
0x0009eaf2 ldr r3, [sp, 0xe0] | r3 = var_e0h;
0x0009eaf4 cmp r3, 0 |
0x0009eaf6 bne 0x9eaea |
| } while (r3 != 0);
0x0009eaf8 b 0x9eb0a | goto label_108;
| label_104:
0x0009eb02 str r0, [sp, 0x48] | var_48h = r0;
0x0009eb04 b.w 0x9dc12 | goto label_17;
| label_109:
0x0009eb08 mov r4, r0 | r4 = r0;
| label_108:
0x0009eb0a ldrd r1, r3, [sp, 0xf8] | __asm ("ldrd r1, r3, [var_f8h]");
0x0009eb0e mov r2, fp | r2 = fp;
0x0009eb10 cmp fp, r3 |
0x0009eb12 it ge |
| if (fp < r3) {
0x0009eb14 movge r2, r3 | r2 = r3;
| }
0x0009eb16 cmp r1, 0 |
0x0009eb18 it ne |
| if (r1 != 0) {
0x0009eb1a cmpne r7, 0 | __asm ("cmpne r7, 0");
| }
| if (r1 != 0) {
0x0009eb1c beq 0x9eb32 |
| if (r2 == 0) {
0x0009eb1e cbz r2, 0x9eb32 | goto label_110;
| }
0x0009eb20 mov r0, r7 | r0 = r7;
0x0009eb22 str r3, [sp, 0xa0] | var_a0h = r3;
0x0009eb24 str r1, [sp, 0x48] | var_48h = r1;
0x0009eb26 blx 0x8214 | sysconf ();
0x0009eb2a ldr r1, [sp, 0x48] | r1 = var_48h;
0x0009eb2c mov r7, r0 | r7 = r0;
0x0009eb2e ldr r3, [sp, 0xa0] | r3 = var_a0h;
| if (r0 != 0) {
0x0009eb30 cbnz r0, 0x9eb36 | goto label_111;
| }
| }
| label_110:
0x0009eb32 sub.w r7, fp, r3 | r7 = fp - r3;
| label_111:
0x0009eb36 mov r0, r1 | r0 = r1;
0x0009eb38 blx 0x8404 | fcn_00008404 ();
0x0009eb3c mov r0, r8 | r0 = r8;
0x0009eb3e blx 0x8404 | fcn_00008404 ();
0x0009eb42 cmp r4, 0 |
| if (r4 != 0) {
0x0009eb44 bne.w 0x9edc8 | goto label_112;
| }
0x0009eb48 cmp r7, 0 |
| if (r7 <= 0) {
0x0009eb4a ble.w 0x9e4aa | goto label_41;
| }
0x0009eb4e ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x0009eb50 ldrb.w r8, [r3] | r8 = *(r3);
0x0009eb54 add.w r7, r8, -1 | r7 = r8 + -1;
0x0009eb58 cmp r7, 0xe |
| if (r7 > 0xe) {
0x0009eb5a bhi.w 0x9ed70 | goto label_113;
| }
0x0009eb5e ldr r3, [sp, 0x94] | r3 = var_94h;
0x0009eb60 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0009eb62 str.w r3, [sl, 0x24] | __asm ("str.w r3, [sl, 0x24]");
0x0009eb66 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0009eb68 str.w r2, [sl, 0x1c] | __asm ("str.w r2, [sl, 0x1c]");
0x0009eb6c ldr r2, [sp, 0x90] | r2 = var_90h;
0x0009eb6e str.w r3, [sl, 0x10] | __asm ("str.w r3, [sl, 0x10]");
0x0009eb70 adds r0, 0x10 | r0 += 0x10;
0x0009eb72 ldr r3, [sp, 0x7c] | r3 = var_7ch;
0x0009eb74 adds r1, r2, 1 | r1 = r2 + 1;
0x0009eb76 str.w r2, [sl, 0x20] | __asm ("str.w r2, [sl, 0x20]");
0x0009eb7a subs r1, r1, r3 | r1 -= r3;
0x0009eb7c str.w r3, [sl, 0x18] | __asm ("str.w r3, [sl, 0x18]");
0x0009eb80 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0009eb82 str.w r3, [sl, 8] | __asm ("str.w r3, [sl, 8]");
0x0009eb86 ldr r3, [sp, 0x38] | r3 = var_38h;
0x0009eb88 str.w r3, [sl, 0xc] | __asm ("str.w r3, [sl, 0xc]");
0x0009eb8c add.w r3, r1, 0xf | r3 = r1 + 0xf;
0x0009eb90 ands.w r3, r3, r1, asr 32 | r3 &= (r1 >> 32);
0x0009eb94 it lo |
| if (r3 >= r3) {
0x0009eb96 movlo r3, r1 | r3 = r1;
| }
0x0009eb98 cmp.w r8, 0xf |
0x0009eb9c asr.w r3, r3, 4 | r3 >>= 4;
0x0009eba0 add.w r1, r8, 1 | r1 = r8 + 1;
0x0009eba4 str.w r3, [sl] | __asm ("str.w r3, [sl]");
| if (r8 == 0xf) {
0x0009eba8 beq 0x9ebc6 | goto label_114;
| }
| do {
0x0009ebaa mul r2, r1, r3 | r2 = r1 * r3;
0x0009ebae ldr r4, [sp, 0x7c] | r4 = var_7ch;
0x0009ebb0 add.w r0, sl, r1, lsl 5 | r0 = sl + (r1 << 5);
0x0009ebb4 adds r1, 1 | r1++;
0x0009ebb6 adds r4, r2, r4 | r4 = r2 + r4;
0x0009ebb8 str r4, [r0, 0x38] | *((r0 + 0x38)) = r4;
0x0009ebba ldr r4, [sp, 0x80] | r4 = var_80h;
0x0009ebbc adc.w r2, r4, r2, asr 31 | __asm ("adc.w r2, r4, r2, asr 31");
0x0009ebc0 cmp r1, 0x10 |
0x0009ebc2 str r2, [r0, 0x3c] | *((r0 + 0x3c)) = r2;
0x0009ebc4 bne 0x9ebaa |
| } while (r1 != 0x10);
| label_114:
0x0009ebc6 mul r3, r3, r8 | r3 *= r8;
0x0009ebca ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x0009ebcc lsl.w fp, r8, 5 |
0x0009ebd0 add.w r4, sl, fp | r4 = sl + fp;
0x0009ebd4 adds r0, r3, r2 | r0 = r3 + r2;
0x0009ebd6 ldr r2, [sp, 0x80] | r2 = var_80h;
0x0009ebd8 adc.w r3, r2, r3, asr 31 | __asm ("adc.w r3, r2, r3, asr 31");
0x0009ebdc ldr r2, [sp, 0x34] | r2 = x;
0x0009ebde ldr.w r1, [r2, 0xe8] | r1 = *((r2 + 0xe8));
0x0009ebe2 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x0009ebe4 strd r0, r3, [r4, 0x38] | __asm ("strd r0, r3, [r4, 0x38]");
0x0009ebe8 ldr r3, [r4, 0x54] | r3 = *((r4 + 0x54));
0x0009ebea cmp r1, r2 |
0x0009ebec it lt |
| if (r1 >= r2) {
0x0009ebee movlt r1, r2 | r1 = r2;
| }
0x0009ebf0 adds r1, 0x14 | r1 += 0x14;
0x0009ebf2 cmp r1, r3 |
| if (r1 > r3) {
0x0009ebf4 bgt.w 0x9ed7a | goto label_115;
| }
| label_46:
0x0009ebf8 add.w r4, sl, r8, lsl 5 | r4 = sl + (r8 << 5);
0x0009ebfc ldr.w r8, [sp, 0x4c] | r8 = var_4ch;
0x0009ec00 add fp, sl |
0x0009ec02 ldr r1, [sp, 0x8c] | r1 = var_8ch;
0x0009ec04 ldr.w r0, [fp, 0x4c] | r0 = *(arg_4ch);
0x0009ec08 mov r2, r8 | r2 = r8;
0x0009ec0a blx 0x8610 | fcn_00008610 ();
0x0009ec0e ldr.w r3, [fp, 0x4c] | r3 = *(arg_4ch);
0x0009ec12 str.w r8, [fp, 0x50] | __asm ("str.w r8, [arg_50h]");
0x0009ec16 mov.w fp, 0 |
0x0009ec1a strd sl, r6, [sp, 0x48] | __asm ("strd sl, r6, [var_48h]");
0x0009ec1e str.w fp, [r3, r8] | __asm ("str.w fp, [r3, r8]");
0x0009ec22 add r3, r8 | r3 += r8;
0x0009ec24 ldr r6, [sp, 0x5c] | r6 = var_5ch;
0x0009ec26 str.w fp, [r3, 4] | __asm ("str.w fp, [r3, 4]");
0x0009ec2a str.w fp, [r3, 8] | __asm ("str.w fp, [r3, 8]");
0x0009ec2e str.w fp, [r3, 0xc] | __asm ("str.w fp, [r3, 0xc]");
0x0009ec32 str.w fp, [r3, 0x10] | __asm ("str.w fp, [r3, 0x10]");
0x0009ec36 str.w sb, [sp, 0x80] | __asm ("str.w sb, [var_80h]");
0x0009ec3a b 0x9ec62 |
| while (r1 == 0) {
0x0009ec3c ldr r3, [sp, 0xf8] | r3 = var_f8h;
0x0009ec3e mov sb, r1 | sb = r1;
0x0009ec40 mov r8, r7 | r8 = r7;
0x0009ec42 mov sl, r5 | sl = r5;
0x0009ec44 str r3, [sp, 0x7c] | var_7ch = r3;
| label_44:
0x0009ec46 ldr r0, [sp, 0x7c] | r0 = var_7ch;
0x0009ec48 subs r4, 0x20 | r4 -= 0x20;
0x0009ec4a blx 0x8404 | fcn_00008404 ();
0x0009ec4e cmp.w r8, -1 |
0x0009ec52 ite eq |
| if (r8 != -1) {
0x0009ec54 moveq r2, 0 | r2 = 0;
| }
| if (r8 == -1) {
0x0009ec56 andne r2, sl, 1 | r2 = sl & 1;
| }
0x0009ec5a subs r7, 1 | r7--;
0x0009ec5c cmp r2, 0 |
| if (r2 == 0) {
0x0009ec5e beq.w 0x9eda4 | goto label_116;
| }
0x0009ec62 ldr r1, [r4, 0x4c] | r1 = *((r4 + 0x4c));
0x0009ec64 cmp r1, 0 |
0x0009ec66 beq 0x9ec3c |
| }
0x0009ec68 ldr r2, [r4, 0x50] | r2 = *((r4 + 0x50));
0x0009ec6a mov r0, r6 | r0 = r6;
0x0009ec6c bl 0x45994 | fcn_00045994 (r0, r1, r2);
0x0009ec70 ldr r2, [sp, 0xe0] | r2 = var_e0h;
0x0009ec72 mov sb, r0 | sb = r0;
0x0009ec74 subs r2, 0 |
0x0009ec76 it ne |
| if (r2 == 0) {
0x0009ec78 movne r2, 1 | r2 = 1;
| }
0x0009ec7a cmp r0, 0 |
0x0009ec7c it ne |
| if (r0 == 0) {
0x0009ec7e movne r2, 0 | r2 = 0;
| }
| if (r2 == 0) {
0x0009ec80 cbz r2, 0x9ec9c | goto label_117;
| }
| do {
0x0009ec82 mov r0, r6 | r0 = r6;
0x0009ec84 bl 0x45830 | fcn_00045830 (r0);
0x0009ec88 ldr r3, [sp, 0xe0] | r3 = var_e0h;
0x0009ec8a subs r3, 0 |
0x0009ec8c it ne |
| if (r3 == 0) {
0x0009ec8e movne r3, 1 | r3 = 1;
| }
0x0009ec90 cmp r0, 0 |
0x0009ec92 it ne |
| if (r0 == 0) {
0x0009ec94 movne r3, 0 | r3 = 0;
| }
0x0009ec96 cmp r3, 0 |
0x0009ec98 bne 0x9ec82 |
| } while (r3 != 0);
0x0009ec9a mov sb, r0 | sb = r0;
| label_117:
0x0009ec9c ldr.w r8, [sp, 0xfc] | r8 = var_fch;
0x0009eca0 cmp.w sb, 0 |
| if (sb == 0) {
0x0009eca4 bne 0x9ecda |
0x0009eca6 ldr r3, [r4, 0x48] | r3 = *((r4 + 0x48));
0x0009eca8 cmp r8, r3 |
| if (r8 > r3) {
0x0009ecaa bgt 0x9ecec | goto label_118;
| }
| label_43:
0x0009ecac ldr r3, [sp, 0xf8] | r3 = var_f8h;
0x0009ecae cmp.w r8, 0 |
0x0009ecb2 str r3, [sp, 0x7c] | var_7ch = r3;
| if (r8 > 0) {
0x0009ecb4 ble 0x9ecc0 |
0x0009ecb6 ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0009ecb8 mov r2, r8 | r2 = r8;
0x0009ecba mov r1, r3 | r1 = r3;
0x0009ecbc blx 0x8610 | fcn_00008610 ();
| }
0x0009ecc0 adds r0, r7, 1 | r0 = r7 + 1;
0x0009ecc2 str.w r8, [r4, 0x44] | __asm ("str.w r8, [r4, 0x44]");
| if (r0 != r7) {
0x0009ecc6 bne 0x9ed02 | goto label_119;
| }
0x0009ecc8 ldr r0, [sp, 0x7c] | r0 = var_7ch;
0x0009ecca ldr.w sb, [sp, 0x80] | sb = var_80h;
0x0009ecce ldrd sl, r6, [sp, 0x48] | __asm ("ldrd sl, r6, [var_48h]");
0x0009ecd2 blx 0x8404 | fcn_00008404 ();
0x0009ecd6 b.w 0x9e4aa | goto label_41;
| }
0x0009ecda ldr r0, [sp, 0xf8] | r0 = var_f8h;
0x0009ecdc ldrd sl, r6, [sp, 0x48] | __asm ("ldrd sl, r6, [var_48h]");
0x0009ece0 str.w sb, [sp, 0x48] | __asm ("str.w sb, [var_48h]");
0x0009ece4 blx 0x8404 | fcn_00008404 ();
0x0009ece8 b.w 0x9de72 | goto label_30;
| label_118:
0x0009ecec ldr r0, [r4, 0x40] | r0 = *((r4 + 0x40));
0x0009ecee mov r1, r8 | r1 = r8;
0x0009ecf0 blx 0x8268 | r0 = fcn_00008268 ();
0x0009ecf4 cmp r0, 0 |
| if (r0 == 0) {
0x0009ecf6 beq.w 0x9e73c | goto label_42;
| }
0x0009ecfa str r0, [r4, 0x40] | *((r4 + 0x40)) = r0;
0x0009ecfc str.w r8, [r4, 0x48] | __asm ("str.w r8, [r4, 0x48]");
0x0009ed00 b 0x9ecac | goto label_43;
| label_119:
0x0009ed02 ldr r1, [sp, 0x9c] | r1 = var_9ch;
0x0009ed04 mov r8, r7 | r8 = r7;
0x0009ed06 ldrd r2, r3, [sp, 0xf0] | __asm ("ldrd r2, r3, [var_f0h]");
0x0009ed0a ldr r0, [sp, 0x34] | r0 = x;
0x0009ed0c strd fp, fp, [sp, 0xc4] | __asm ("strd fp, fp, [var_c4h]");
0x0009ed10 strd r2, r3, [r4, 0x18] | __asm ("strd r2, r3, [r4, 0x18]");
0x0009ed14 str r1, [sp, 4] | var_4h = r1;
0x0009ed16 ldr r1, [sp, 0x98] | r1 = var_98h;
0x0009ed18 str.w fp, [sp, 8] | __asm ("str.w fp, [var_8h]");
0x0009ed1c str r1, [sp] | *(sp) = r1;
0x0009ed1e bl 0x9b130 | r0 = fcn_0009b130 (r0, r1, r2, r3, r4, r5);
0x0009ed22 mov sb, r0 | sb = r0;
| if (r0 != 0) {
0x0009ed24 cbnz r0, 0x9ed60 | goto label_49;
| }
0x0009ed26 ldr r3, [sp, 0x34] | r3 = x;
0x0009ed28 ldr.w sl, [sp, 0xc8] | sl = var_c8h;
0x0009ed2c ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x0009ed2e ldr.w r1, [r3, 0xe8] | r1 = *((r3 + 0xe8));
0x0009ed32 ldr r3, [r4, 0x34] | r3 = *((r4 + 0x34));
0x0009ed34 cmp r1, sl |
0x0009ed36 it lt |
| if (r1 >= sl) {
0x0009ed38 movlt r1, sl | r1 = sl;
| }
0x0009ed3a adds r1, 0x14 | r1 += 0x14;
0x0009ed3c cmp r1, r3 |
0x0009ed3e bgt 0x9ed94 |
| while (1) {
0x0009ed40 mov r2, sl | r2 = sl;
0x0009ed42 ldr r1, [sp, 0xc4] | r1 = var_c4h;
0x0009ed44 ldr r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x0009ed46 blx 0x8610 | fcn_00008610 ();
0x0009ed4a ldr r2, [r4, 0x2c] | r2 = *((r4 + 0x2c));
0x0009ed4c movs r0, 0 | r0 = 0;
0x0009ed4e str.w sl, [r4, 0x30] | __asm ("str.w sl, [r4, 0x30]");
0x0009ed52 str.w r0, [r2, sl] | __asm ("str.w r0, [r2, sl]");
0x0009ed56 add r2, sl | r2 += sl;
0x0009ed58 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x0009ed5a str r0, [r2, 8] | *((r2 + 8)) = r0;
0x0009ed5c str r0, [r2, 0xc] | *((r2 + 0xc)) = r0;
0x0009ed5e str r0, [r2, 0x10] | *((r2 + 0x10)) = r0;
| label_49:
0x0009ed60 clz sl, sb | sl &= sb;
0x0009ed64 ldr r0, [sp, 0xc4] | r0 = var_c4h;
0x0009ed66 lsr.w sl, sl, 5 | sl >>= 5;
0x0009ed6a blx 0x8404 | fcn_00008404 ();
0x0009ed6e b 0x9ec46 | goto label_44;
| label_113:
0x0009ed70 mov r0, r6 | r0 = r6;
0x0009ed72 blx 0x81f8 | fcn_000081f8 ();
0x0009ed76 b.w 0x9e478 | goto label_45;
| label_115:
0x0009ed7a ldr r0, [r4, 0x4c] | r0 = *((r4 + 0x4c));
0x0009ed7c str r1, [sp, 0x48] | var_48h = r1;
0x0009ed7e blx 0x8268 | r0 = fcn_00008268 ();
| if (r0 != 0) {
0x0009ed82 cbz r0, 0x9ed8c |
0x0009ed84 ldr r1, [sp, 0x48] | r1 = var_48h;
0x0009ed86 str r0, [r4, 0x4c] | *((r4 + 0x4c)) = r0;
0x0009ed88 str r1, [r4, 0x54] | *((r4 + 0x54)) = r1;
0x0009ed8a b 0x9ebf8 | goto label_46;
| }
0x0009ed8c mov r0, r6 | r0 = r6;
0x0009ed8e blx 0x81f8 | fcn_000081f8 ();
0x0009ed92 b 0x9e74c | goto label_47;
0x0009ed94 str r1, [sp, 0x88] | var_88h = r1;
0x0009ed96 blx 0x8268 | r0 = fcn_00008268 ();
| if (r0 == 0) {
0x0009ed9a cbz r0, 0x9edc2 | goto label_120;
| }
0x0009ed9c ldr r1, [sp, 0x88] | r1 = var_88h;
0x0009ed9e str r0, [r4, 0x2c] | *((r4 + 0x2c)) = r0;
0x0009eda0 str r1, [r4, 0x34] | *((r4 + 0x34)) = r1;
0x0009eda2 b 0x9ed40 |
| }
| label_116:
0x0009eda4 ldrd sl, r6, [sp, 0x48] | __asm ("ldrd sl, r6, [var_48h]");
0x0009eda8 str.w sb, [sp, 0x48] | __asm ("str.w sb, [var_48h]");
0x0009edac ldr.w sb, [sp, 0x80] | sb = var_80h;
0x0009edb0 mov r0, r6 | r0 = r6;
0x0009edb2 blx 0x81f8 | fcn_000081f8 ();
0x0009edb6 ldr r3, [sp, 0x48] | r3 = var_48h;
0x0009edb8 cmp r3, 0 |
| if (r3 == 0) {
0x0009edba beq.w 0x9e4b0 | goto label_48;
| }
0x0009edbe b.w 0x9dc12 | goto label_17;
| label_120:
0x0009edc2 mov.w sb, 7 | sb = 7;
0x0009edc6 b 0x9ed60 | goto label_49;
| label_112:
0x0009edc8 str r4, [sp, 0x48] | var_48h = r4;
0x0009edca b.w 0x9de72 | goto label_30;
| label_91:
0x0009edfa movs r3, 0 | r3 = 0;
0x0009edfc ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x0009edfe udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x9ff10 */
| #include <stdint.h>
|
; (fcn) fcn.0009ff10 () | void fcn_0009ff10 (int16_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| int16_t var_0h_2;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h_2;
| int16_t var_14h;
| int16_t var_18h_2;
| int16_t var_1ch_3;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_28h_2;
| int16_t var_2ch_2;
| int16_t var_34h_2;
| int16_t var_38h_2;
| int16_t var_3ch_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0009ff10 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0009ff14 sub sp, 0x44 |
0x0009ff16 str r0, [sp, 0x18] | var_18h_2 = r0;
0x0009ff18 mov r6, r1 | r6 = r1;
0x0009ff1a mov r4, r2 | r4 = r2;
0x0009ff1c ldr r0, [r0] | r0 = *(r0);
0x0009ff1e ldr r1, [pc, 0x330] |
0x0009ff20 str r2, [sp, 0xc] | var_ch = r2;
0x0009ff22 ldr r2, [pc, 0x330] | r2 = *(0xa0256);
0x0009ff24 add r1, pc | r1 = 0x14017a;
0x0009ff26 ldr r7, [r0, 0x28] | r7 = *(var_0h_2x28);
0x0009ff28 str r0, [sp, 0x14] | var_14h = r0;
0x0009ff2a ldr r2, [r1, r2] |
0x0009ff2c ldr r2, [r2] | r2 = imp.sinh;
0x0009ff2e str r2, [sp, 0x3c] | var_3ch_2 = r2;
0x0009ff30 mov.w r2, 0 | r2 = 0;
0x0009ff34 cbz r7, 0x9ff58 |
| while (r3 <= 0) {
| label_0:
0x0009ff36 mov.w fp, 0 |
| label_3:
0x0009ff3a ldr r2, [pc, 0x31c] |
0x0009ff3c ldr r3, [pc, 0x314] | r3 = *(0xa0254);
0x0009ff3e add r2, pc | r2 = 0x14019c;
0x0009ff40 ldr r3, [r2, r3] | r3 = imp.sinh;
0x0009ff42 ldr r2, [r3] | r2 = imp.sinh;
0x0009ff44 ldr r3, [sp, 0x3c] | r3 = var_3ch_2;
0x0009ff46 eors r2, r3 | r2 ^= r3;
0x0009ff48 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0009ff4c bne.w 0xa024c | goto label_11;
| }
0x0009ff50 mov r0, fp | r0 = fp;
0x0009ff52 add sp, 0x44 |
0x0009ff54 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0009ff58 cmp r3, 0 |
0x0009ff5a ble 0x9ff36 |
| }
0x0009ff5c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0009ff60 mov r2, r4 | r2 = r4;
0x0009ff62 mov r1, r7 | r1 = r7;
0x0009ff64 add.w r4, r4, r3, lsl 3 | r4 += (r3 << 3);
0x0009ff68 mov r3, r2 | r3 = r2;
| do {
0x0009ff6a ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0009ff6c adds r3, 0x18 | r3 += 0x18;
0x0009ff6e cmp r6, r2 |
0x0009ff70 ittt eq |
| if (r6 != r2) {
0x0009ff72 ldreq r2, [r3, -0x8] | r2 = *((r3 - 0x8));
| }
| if (r6 != r2) {
0x0009ff76 addeq r7, 1 | r7++;
| }
| if (r6 == r2) {
0x0009ff78 adds r1, r1, r2 | r1 += r2;
| }
0x0009ff7a cmp r4, r3 |
0x0009ff7c bne 0x9ff6a |
| } while (r4 != r3);
0x0009ff7e cmp r1, 0 |
0x0009ff80 it ne |
| if (r1 == 0) {
0x0009ff82 cmpne r7, 1 | __asm ("cmpne r7, 1");
| goto label_12;
| }
| if (r1 <= 0) {
| label_12:
0x0009ff84 ble 0x9ff36 | goto label_0;
| }
0x0009ff86 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x0009ff88 ldr.w lr, [r3, 0x3c] |
0x0009ff8c cmp.w lr, 0 |
| if (lr == 0) {
0x0009ff90 beq 0xa001a | goto label_13;
| }
| label_5:
0x0009ff92 mov.w sl, 0 | sl = 0;
0x0009ff96 movs r3, 1 | r3 = 1;
0x0009ff98 add r2, sp, 0x34 | r2 += var_34h_2;
0x0009ff9a mov sb, sl | sb = sl;
0x0009ff9c mov r8, r3 | r8 = r3;
0x0009ff9e str r2, [sp, 0x20] | var_20h_2 = r2;
0x0009ffa0 add r2, sp, 0x38 | r2 += var_38h_2;
0x0009ffa2 str.w sl, [sp, 0x1c] | __asm ("str.w sl, [var_1ch_3]");
0x0009ffa6 str r2, [sp, 0x24] | var_24h_2 = r2;
0x0009ffa8 str.w lr, [sp, 0x28] | __asm ("str.w lr, [var_28h_2]");
0x0009ffac str r7, [sp, 0x10] | var_10h_2 = r7;
| label_7:
0x0009ffae ldr r3, [sp, 0xc] | r3 = var_ch;
0x0009ffb0 movs r5, 0 | r5 = 0;
0x0009ffb2 b 0x9ffba |
| while (r2 == 0) {
| label_1:
0x0009ffb4 adds r3, 0x18 | r3 += 0x18;
0x0009ffb6 cmp r3, r4 |
| if (r3 == r4) {
0x0009ffb8 beq 0x9ffdc | goto label_14;
| }
| label_2:
0x0009ffba ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x0009ffbc cmp r2, 0 |
0x0009ffbe beq 0x9ffb4 |
| }
0x0009ffc0 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0009ffc2 cmp r2, r6 |
| if (r2 != r6) {
0x0009ffc4 bne 0x9ffb4 | goto label_1;
| }
0x0009ffc6 cmp r5, 0 |
| if (r5 == 0) {
0x0009ffc8 beq.w 0xa013a | goto label_15;
| }
0x0009ffcc ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x0009ffce ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x0009ffd0 cmp r1, r2 |
0x0009ffd2 it lt |
| if (r1 >= r2) {
0x0009ffd4 movlt r5, r3 | r5 = r3;
| }
0x0009ffd6 adds r3, 0x18 | r3 += 0x18;
0x0009ffd8 cmp r3, r4 |
| if (r3 != r4) {
0x0009ffda bne 0x9ffba | goto label_2;
| }
| label_14:
0x0009ffdc ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0009ffde add.w r7, sl, 1 | r7 = sl + 1;
0x0009ffe2 cmp r7, r3 |
0x0009ffe4 ite ge |
| if (r7 < r3) {
0x0009ffe6 movge r3, 0 | r3 = 0;
| }
| if (r7 >= r3) {
0x0009ffe8 movlt r3, 1 | r3 = 1;
| }
0x0009ffea str r3, [sp, 8] | var_8h = r3;
0x0009ffec cmp.w sl, 0 |
| if (sl != 0) {
0x0009fff0 bne.w 0xa013e | goto label_16;
| }
0x0009fff4 lsl.w r8, r8, 2 | r8 <<= 2;
| label_6:
0x0009fff8 ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x0009fffa ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x0009fffc ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0009fffe ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a0000 str r3, [sp] | *(sp) = r3;
0x000a0002 ldr r3, [sp, 0x20] | r3 = var_20h_2;
0x000a0004 strd sb, sb, [sp, 0x34] | __asm ("strd sb, sb, [sp, 0x34]");
0x000a0008 bl 0x9fcd4 | r0 = fcn_0009fcd4 (r0, r1, r2, r3, r4);
0x000a000c movs r0, r0 |
0x000a000e movs r0, r0 |
| if (r0 == r0) {
0x000a0010 beq.w 0xa0188 | goto label_17;
| }
| label_8:
0x000a0014 str.w sb, [r5, 8] | __asm ("str.w sb, [r5, 8]");
0x000a0018 str r1, [r2, r1] | *((r2 + r1)) = r1;
| label_13:
0x000a001a movs r0, r0 |
0x000a001c lsls r1, r0, 2 | r1 = r0 << 2;
0x000a001e movs r0, r0 |
0x000a0020 stc2 p6, c4, [r7, 0x20c] | __asm ("stc2 p6, c4, aav.0x000000ff");
0x000a0024 cmp r0, 0 |
| if (r0 != 0) {
0x000a0026 bne 0x9ff3a | goto label_3;
| }
0x000a0028 ldr.w r8, [sp, 0x38] | r8 = var_38h_2;
0x000a002c mov r1, r0 | r1 = r0;
0x000a002e mov r0, r8 | r0 = r8;
| if (r0 > 0) {
0x000a0030 bhi 0xa005c | goto label_18;
| }
0x000a0032 strb r2, [r6, 5] | *((r6 + 5)) = r2;
0x000a0034 mov r5, r0 | r5 = r0;
0x000a0036 cmp r0, 0 |
| if (r0 == 0) {
0x000a0038 beq.w 0xa0240 | goto label_19;
| }
0x000a003c mov r1, fp | r1 = fp;
0x000a003e mov r0, r8 | r0 = r8;
0x000a0040 blx 0x82f4 | r0 = fcn_000082f4 ();
0x000a0044 add.w ip, r5, r0 |
0x000a0048 lsls r1, r0, 2 | r1 = r0 << 2;
0x000a004a movs r0, r0 |
0x000a004c mov r2, fp | r2 = fp;
0x000a004e mov lr, r2 | lr = r2;
0x000a0050 strh r5, [r1, r0] | *((r1 + r0)) = r5;
0x000a0052 mov r7, lr | r7 = lr;
0x000a0054 ldrh r4, [r6, 0x24] | r4 = *((r6 + 0x24));
0x000a0056 ldrh r4, [r7, 0x2c] | r4 = *((r7 + 0x2c));
| do {
0x000a0058 ldrb sb, [r5], 1 | sb = *(r5);
| r5++;
| label_18:
0x000a005c sub.w r0, r3, 0x20 | r0 = r3 - 0x20;
0x000a0060 rsb.w sl, r3, 0x20 | sl = 0x20 - r3;
0x000a0064 and r1, sb, 0x7f | r1 = sb & 0x7f;
0x000a0068 lsl.w r0, r1, r0 | r0 = r1 << r0;
0x000a006c lsr.w sl, r1, sl | sl = r1 >> sl;
0x000a0070 lsls r1, r3 | r1 <<= r3;
0x000a0072 orr.w r0, r0, sl | r0 |= sl;
0x000a0076 adds r1, r1, r2 | r1 += r2;
0x000a0078 adc.w lr, lr, r0 | __asm ("adc.w lr, lr, r0");
0x000a007c tst.w sb, 0x80 |
0x000a0080 mov r2, r1 | r2 = r1;
| if ((sb & 0x80) == 0) {
0x000a0082 beq 0xa0090 | goto label_20;
| }
0x000a0084 adds r3, 7 | r3 += 7;
0x000a0086 cmp r3, 0x46 |
| if (r3 == 0x46) {
0x000a0088 beq 0xa0090 | goto label_20;
| }
0x000a008a cmp ip, r5 |
0x000a008c bne 0xa0058 |
| } while (ip != r5);
0x000a008e adds r5, 1 | r5++;
| label_20:
0x000a0090 cmp ip, r5 |
0x000a0092 it hi |
| if (ip <= r5) {
0x000a0094 strhi r8, [sp, 8] | var_8h = r8;
| }
| if (ip < r5) {
0x000a0098 bls.w 0xa0240 | goto label_19;
| }
| label_4:
0x000a009c movs r0, 0 | r0 = 0;
0x000a009e mov sb, r0 | sb = r0;
0x000a00a0 mov fp, r0 |
| do {
0x000a00a2 ldrb sl, [r5], 1 | sl = *(r5);
| r5++;
0x000a00a6 sub.w r8, r0, 0x20 | r8 = r0 - 0x20;
0x000a00aa rsb.w r1, r0, 0x20 | r1 = 0x20 - r0;
0x000a00ae and r3, sl, 0x7f | r3 = sl & 0x7f;
0x000a00b2 lsl.w r8, r3, r8 | r8 = r3 << r8;
0x000a00b6 lsr.w r1, r3, r1 | r1 = r3 >> r1;
0x000a00ba lsls r3, r0 | r3 <<= r0;
0x000a00bc orr.w r1, r8, r1 | r1 = r8 | r1;
0x000a00c0 adds.w r3, r3, sb | r3 += sb;
0x000a00c4 adc.w r1, fp, r1 | __asm ("adc.w r1, fp, r1");
0x000a00c8 tst.w sl, 0x80 |
0x000a00cc mov sb, r3 | sb = r3;
0x000a00ce mov fp, r1 |
| if ((sl & 0x80) == 0) {
0x000a00d0 beq 0xa00e0 | goto label_21;
| }
0x000a00d2 adds r0, 7 | r0 += 7;
0x000a00d4 cmp r0, 0x46 |
| if (r0 == 0x46) {
0x000a00d6 beq 0xa00e0 | goto label_21;
| }
0x000a00d8 cmp ip, r5 |
0x000a00da bne 0xa00a2 |
| } while (ip != r5);
0x000a00dc add.w r5, ip, 1 | r5 = ip + 1;
| label_21:
0x000a00e0 cmp ip, r5 |
| if (ip > r5) {
0x000a00e2 bhi 0xa009c | goto label_4;
| }
0x000a00e4 orrs.w r5, r2, lr | r5 = r2 | lr;
0x000a00e8 ldr.w r8, [sp, 8] | r8 = var_8h;
0x000a00ec ite eq |
| if (r5 != r2) {
0x000a00ee moveq r5, 1 | r5 = 1;
| }
| if (r5 == r2) {
0x000a00f0 movne r5, 0 | r5 = 0;
| }
0x000a00f2 orrs.w ip, r3, r1 |
0x000a00f6 it eq |
| if (ip != r3) {
0x000a00f8 orreq r5, r5, 1 | r5 |= 1;
| }
0x000a00fc cmp r5, 0 |
| if (r5 != 0) {
0x000a00fe bne.w 0xa0240 | goto label_19;
| }
0x000a0102 ldr r5, [sp, 0x18] | r5 = var_18h_2;
0x000a0104 mov r0, r3 | r0 = r3;
0x000a0106 mov r3, lr | r3 = lr;
0x000a0108 strd r2, lr, [r5, 0x40] | __asm ("strd r2, lr, [r5, 0x40]");
0x000a010c bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x000a0110 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a0112 ldr.w r2, [r3, 0xf4] | r2 = *((r3 + 0xf4));
0x000a0116 adds r0, r0, r2 | r0 += r2;
0x000a0118 asr.w r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000a011c adc.w r1, r3, r1 | __asm ("adc.w r1, r3, r1");
0x000a0120 bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x000a0124 str r0, [r5, 0x3c] | *((r5 + 0x3c)) = r0;
0x000a0126 mov r0, r8 | r0 = r8;
0x000a0128 blx 0x81f8 | fcn_000081f8 ();
0x000a012c ldr.w lr, [r5, 0x3c] |
0x000a0130 mov fp, r0 |
0x000a0132 cmp r0, 0 |
| if (r0 == 0) {
0x000a0134 beq.w 0x9ff92 | goto label_5;
| }
0x000a0138 b 0x9ff3a | goto label_3;
| label_15:
0x000a013a mov r5, r3 | r5 = r3;
0x000a013c b 0x9ffb4 | goto label_1;
| label_16:
0x000a013e ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x000a0140 asr.w r1, r8, 2 | r1 = r8 >> 2;
0x000a0144 adds r0, r1, r3 | r0 = r1 + r3;
0x000a0146 subs r0, 1 | r0--;
0x000a0148 bl 0xb1ea8 | fcn_000b1ea8 (r0, r1);
0x000a014c ldr r3, [sp, 0x28] | r3 = var_28h_2;
0x000a014e mul r0, r3, r0 | r0 = r3 * r0;
0x000a0152 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000a0154 cmp r3, r0 |
| if (r3 >= r0) {
0x000a0156 bge 0xa01ee | goto label_22;
| }
0x000a0158 ldr r3, [r5] | r3 = *(r5);
0x000a015a cmp.w sl, 0xb |
0x000a015e it ls |
| if (sl > 0xb) {
0x000a0160 lslls r8, r8, 2 | r8 <<= 2;
| }
0x000a0164 ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000a0166 cmp r3, 1 |
| if (r3 <= 1) {
0x000a0168 ble 0xa0174 | goto label_23;
| }
0x000a016a ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000a016c subs r3, 1 | r3--;
0x000a016e cmp r3, sl |
| if (r3 != sl) {
0x000a0170 bne.w 0x9fff8 | goto label_6;
| }
| label_23:
0x000a0174 mov.w fp, 0 |
| label_10:
0x000a0178 ldr r3, [sp, 8] | r3 = var_8h;
0x000a017a str.w sb, [r5, 8] | __asm ("str.w sb, [r5, 8]");
0x000a017e cmp r3, 0 |
| if (r3 == 0) {
0x000a0180 beq.w 0x9ff3a | goto label_3;
| }
0x000a0184 mov sl, r7 | sl = r7;
0x000a0186 b 0x9ffae | goto label_7;
| label_17:
0x000a0188 ldr r3, [sp, 0x34] | r3 = var_34h_2;
0x000a018a ldrd r1, r2, [r5] | __asm ("ldrd r1, r2, [r5]");
0x000a018e ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a0190 str r3, [sp] | *(sp) = r3;
0x000a0192 ldr r3, [sp, 0x38] | r3 = var_38h_2;
0x000a0194 bl 0x42050 | r0 = fcn_00042050 (r0, r1, r2, r3, r4);
0x000a0198 mov fp, r0 |
0x000a019a cmp r0, 0 |
| if (r0 != 0) {
0x000a019c bne.w 0xa0014 | goto label_8;
| }
0x000a01a0 ldr r2, [r5] | r2 = *(r5);
0x000a01a2 ldr r3, [r2] | r3 = *(r2);
| if (r3 == 0) {
0x000a01a4 cbz r3, 0xa01d0 | goto label_24;
| }
0x000a01a6 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000a01a8 add.w ip, r3, r2 |
0x000a01ac cmp r3, ip |
| if (r3 >= ip) {
0x000a01ae bhs 0xa01d0 | goto label_24;
| }
| label_9:
0x000a01b0 adds r0, 1 | r0++;
| do {
0x000a01b2 ldrsb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x000a01b6 cmp r2, 0 |
0x000a01b8 blt 0xa01b2 |
| } while (r2 < 0);
0x000a01ba ldrb r2, [r3] | r2 = *(r3);
| if (r2 == 0) {
0x000a01bc cbz r2, 0xa01ca | goto label_25;
| }
| do {
0x000a01be and r1, r2, 0x80 | r1 = r2 & 0x80;
0x000a01c2 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000a01c6 orrs r1, r2 | r1 |= r2;
0x000a01c8 bne 0xa01be |
| } while (r1 != r2);
| label_25:
0x000a01ca adds r3, 1 | r3++;
0x000a01cc cmp ip, r3 |
| if (ip > r3) {
0x000a01ce bhi 0xa01b0 | goto label_9;
| }
| label_24:
0x000a01d0 ldr r2, [sp, 0x1c] | r2 = var_1ch_3;
0x000a01d2 cmp r0, r2 |
0x000a01d4 ite ge |
| if (r0 < r2) {
0x000a01d6 movge r3, 0 | r3 = 0;
| }
| if (r0 >= r2) {
0x000a01d8 movlt r3, 1 | r3 = 1;
| }
0x000a01da cmp.w sl, 0 |
0x000a01de it eq |
| if (sl != 0) {
0x000a01e0 orreq r3, r3, 1 | r3 |= 1;
| }
0x000a01e4 cmp r3, 0 |
0x000a01e6 it ne |
| if (r3 == 0) {
0x000a01e8 movne r2, r0 | r2 = r0;
| }
0x000a01ea str r2, [sp, 0x1c] | var_1ch_3 = r2;
0x000a01ec b 0xa0178 | goto label_10;
| label_22:
0x000a01ee movs r0, 0x10 | r0 = 0x10;
0x000a01f0 ldr.w sl, [r5, 8] | sl = *((r5 + 8));
0x000a01f4 ldr.w fp, [r5, 0x14] | fp = *((r5 + 0x14));
0x000a01f8 blx 0x86a4 | r0 = fcn_000086a4 ();
| if (r0 == 0) {
0x000a01fc cbz r0, 0xa0238 | goto label_26;
| }
0x000a01fe ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x000a0200 str.w sb, [r0, 4] | __asm ("str.w sb, [r0, 4]");
0x000a0204 str.w sb, [r0, 8] | __asm ("str.w sb, [r0, 8]");
0x000a0208 str.w sb, [r0, 0xc] | __asm ("str.w sb, [r0, 0xc]");
0x000a020c ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x000a020e str.w sl, [r0] | __asm ("str.w sl, [r0]");
0x000a0212 strd fp, r3, [r0, 4] | __asm ("strd fp, r3, [r0, 4]");
0x000a0216 mov.w fp, 0 |
0x000a021a str r0, [r2, 0x1c] | *((r2 + 0x1c)) = r0;
0x000a021c str.w r0, [sl, 0x10] | __asm ("str.w r0, [sl, 0x10]");
| do {
0x000a0220 ldr.w r0, [sl, 0x14] | r0 = *((sl + 0x14));
| if (r0 != 0) {
0x000a0224 cbz r0, 0xa022e |
0x000a0226 str r0, [sp, 0x2c] | var_2ch_2 = r0;
0x000a0228 bl 0x5ede8 | fcn_0005ede8 (r0);
0x000a022c ldr r0, [sp, 0x2c] | r0 = var_2ch_2;
| }
0x000a022e blx 0x8404 | fcn_00008404 ();
0x000a0232 str.w sb, [sl, 0x14] | __asm ("str.w sb, [sl, 0x14]");
0x000a0236 b 0xa0178 | goto label_10;
| label_26:
0x000a0238 mov.w fp, 7 |
0x000a023c str r0, [sp, 8] | var_8h = r0;
0x000a023e b 0xa0220 |
| } while (1);
| label_19:
0x000a0240 mov r0, r8 | r0 = r8;
0x000a0242 movw fp, 0x10b | fp = 0x10b;
0x000a0246 blx 0x81f8 | fcn_000081f8 ();
0x000a024a b 0x9ff3a | goto label_3;
| label_11:
0x000a024c blx 0x883c | fcn_0000883c ();
0x000a0250 ldrh r4, [r6, 0x2a] | r4 = *((r6 + 0x2a));
0x000a0252 movs r2, r0 | r2 = r0;
0x000a0254 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a0256 movs r0, r0 |
0x000a0258 ldrh r2, [r3, 0x2a] | r2 = *((r3 + 0x2a));
0x000a025a movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa0448 */
| #include <stdint.h>
|
; (fcn) fcn.000a0448 () | void fcn_000a0448 (int16_t arg1, uint32_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000a0448 rsble r2, sl, r0, lsl 18 | __asm ("rsble r2, sl, r0, lsl 18");
0x000a044c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000a0450 mov r8, r0 | r8 = r0;
0x000a0452 vpush {d8} | __asm ("vpush {d8}");
0x000a0456 mov sb, r2 | sb = r2;
0x000a0458 mov r6, r1 | r6 = r1;
0x000a045a movs r7, 0 | r7 = 0;
0x000a045c vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
| do {
0x000a0460 ldr.w r3, [sb] | r3 = *(sb);
| if (r3 != 0) {
0x000a0464 cbnz r3, 0xa04a6 | goto label_2;
| }
0x000a0466 ldr.w sl, [r6, 0x14] | sl = *((r6 + 0x14));
0x000a046a cmp.w sl, 0 |
| if (sl != 0) {
0x000a046e beq 0xa0490 |
0x000a0470 ldr.w r3, [sl, 0x18] | r3 = *((sl + 0x18));
| if (r3 != 0) {
0x000a0474 cbnz r3, 0xa04ae | goto label_3;
| }
0x000a0476 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x000a047a strd r7, r7, [sl, 0x1c] | __asm ("strd r7, r7, [sl, 0x1c]");
0x000a047e str.w r7, [sl, 0x18] | __asm ("str.w r7, [sl, 0x18]");
| if (r3 != 0) {
0x000a0482 cbnz r3, 0xa04c6 | goto label_4;
| }
| label_0:
0x000a0484 str.w r7, [sl, 8] | __asm ("str.w r7, [sl, 8]");
0x000a0488 vstr d8, [sl, 0x10] | __asm ("vstr d8, [sl, 0x10]");
0x000a048c str.w r7, [sl, 0x30] | __asm ("str.w r7, [sl, 0x30]");
| }
0x000a0490 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x000a0492 mov r2, sb | r2 = sb;
0x000a0494 vstr d8, [r6, 0x18] | __asm ("vstr d8, [r6, 0x18]");
0x000a0498 mov r0, r8 | r0 = r8;
0x000a049a strh r7, [r6, 0x20] | *((r6 + 0x20)) = r7;
0x000a049c bl 0xa0448 | fcn_000a0448 (r0, r1, r2);
0x000a04a0 ldr r6, [r6, 0x10] | r6 = *((r6 + 0x10));
0x000a04a2 cmp r6, 0 |
0x000a04a4 bne 0xa0460 |
| } while (r6 != 0);
| label_2:
0x000a04a6 vpop {d8} | __asm ("vpop {d8}");
0x000a04aa pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_3:
0x000a04ae ldr.w r0, [sl, 0x1c] | r0 = *((sl + 0x1c));
0x000a04b2 blx 0x8404 | fcn_00008404 ();
0x000a04b6 ldr.w r3, [sl, 0x28] | r3 = *((sl + 0x28));
0x000a04ba strd r7, r7, [sl, 0x1c] | __asm ("strd r7, r7, [sl, 0x1c]");
0x000a04be str.w r7, [sl, 0x18] | __asm ("str.w r7, [sl, 0x18]");
0x000a04c2 cmp r3, 0 |
| if (r3 == 0) {
0x000a04c4 beq 0xa0484 | goto label_0;
| }
| label_4:
0x000a04c6 ldr.w r0, [sl, 0x40] | r0 = *((sl + 0x40));
0x000a04ca cmp r0, 0 |
| if (r0 <= 0) {
0x000a04cc ble 0xa0512 | goto label_5;
| }
0x000a04ce add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000a04d2 movs r2, 0 | r2 = 0;
0x000a04d4 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a04d8 add.w ip, sl, 0x5c |
0x000a04dc lsls r0, r0, 1 | r0 <<= 1;
0x000a04de mov r5, r2 | r5 = r2;
0x000a04e0 mov.w lr, 1 | lr = 1;
| label_1:
0x000a04e4 ldr.w r3, [ip, r2, lsl 2] | offset_0 = r2 << 2;
| r3 = *((ip + offset_0));
| if (r3 == 0) {
0x000a04e8 cbz r3, 0xa050c | goto label_6;
| }
0x000a04ea ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000a04ec str r5, [r3, 8] | *((r3 + 8)) = r5;
0x000a04ee str.w lr, [r3, 0x1c] | __asm ("str.w lr, [r3, 0x1c]");
0x000a04f2 cmp r1, 0 |
| if (r1 <= 0) {
0x000a04f4 ble 0xa050c | goto label_6;
| }
0x000a04f6 ldr r4, [r3] | r4 = *(r3);
0x000a04f8 add.w r1, r4, r1, lsl 2 | r1 = r4 + (r1 << 2);
| do {
0x000a04fc ldr r3, [r4], 4 | r3 = *(r4);
| r4 += 4;
0x000a0500 cmp r4, r1 |
0x000a0502 strd r5, r5, [r3, 0x50] | __asm ("strd r5, r5, [r3, 0x50]");
0x000a0504 strb r4, [r2, r4] | *((r2 + r4)) = r4;
0x000a0506 vstr d16, [r3, 0x58] | __asm ("vstr d16, [r3, 0x58]");
0x000a050a bne 0xa04fc |
| } while (r4 != r1);
| label_6:
0x000a050c adds r2, 6 | r2 += 6;
0x000a050e cmp r2, r0 |
| if (r2 != r0) {
0x000a0510 bne 0xa04e4 | goto label_1;
| }
| label_5:
0x000a0512 mov r2, sl | r2 = sl;
0x000a0514 movs r1, 0 | r1 = 0;
0x000a0516 mov r0, r8 | r0 = r8;
0x000a0518 bl 0xa025c | fcn_000a025c (r0, r1, r2);
0x000a051c str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x000a0520 b 0xa0484 | goto label_0;
0x000a0522 bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa0524 */
| #include <stdint.h>
|
; (fcn) fcn.000a0524 () | void fcn_000a0524 (int16_t arg_0h, int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_20h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h;
| int16_t var_14h_2;
| int16_t var_18h_2;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h;
| int16_t var_28h_2;
| int16_t var_2ch_2;
| int16_t var_30h_2;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch_2;
| int16_t var_47h;
| int16_t var_48h_2;
| int16_t var_4ch_2;
| arithmetic x;
| int16_t var_54h_2;
| int16_t var_58h_2;
| int16_t var_5ch_2;
| int16_t var_64h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000a0524 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a0528 mov fp, r1 |
0x000a052a ldr r4, [r1, 0x14] | r4 = *((r1 + 0x14));
0x000a052c mov r7, r2 | r7 = r2;
0x000a052e sub sp, 0x6c |
0x000a0530 mov sl, r0 | sl = r0;
0x000a0532 ldr.w r1, [pc, 0x488] |
0x000a0536 ldr.w r2, [pc, 0x488] | r2 = *(0xa09c2);
0x000a053a str r4, [sp, 0x34] | var_34h = r4;
0x000a053c add r1, pc | r1 = 0x140efe;
0x000a053e str r3, [sp, 0x38] | var_38h = r3;
0x000a0540 ldr r2, [r1, r2] |
0x000a0542 ldr r1, [r0] | r1 = *(r0);
0x000a0544 movs r0, 0 | r0 = 0;
0x000a0546 ldr r2, [r2] | r2 = imp.sinh;
0x000a0548 str r2, [sp, 0x64] | var_64h = r2;
0x000a054a mov.w r2, 0 | r2 = 0;
0x000a054e ldr r2, [r4, 0x44] | r2 = *((r4 + 0x44));
0x000a0550 str r0, [r3] | *(r3) = r0;
0x000a0552 ldr r0, [r1, 0x18] | r0 = imp.sinh;
0x000a0554 cmp r2, r7 |
0x000a0556 it ne |
| if (r2 != r7) {
0x000a0558 cmpne r2, r0 | __asm ("cmpne r2, r0");
| }
| if (r2 < r7) {
0x000a055a blt.w 0xa072a | goto label_6;
| }
0x000a055e ldr.w r5, [fp, 0x18] | r5 = *(arg_18h);
0x000a0562 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
0x000a0566 ldrd r0, r2, [sl, 0x20] | __asm ("ldrd r0, r2, [sl, 0x20]");
0x000a056a ldr r4, [r4, 0x1c] | r4 = *((r4 + 0x1c));
0x000a056c str r5, [sp, 0x50] | x = r5;
0x000a056e cmp r3, r2 |
0x000a0570 it eq |
| if (r3 == r2) {
0x000a0572 cmpeq r5, r0 | __asm ("cmpeq r5, r0");
| }
0x000a0574 str r3, [sp, 0x54] | var_54h_2 = r3;
0x000a0576 str r4, [sp, 0x48] | var_48h_2 = r4;
| if (r3 == r2) {
0x000a0578 beq.w 0xa06c6 | goto label_28;
| }
| label_0:
0x000a057c ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x000a0580 movs r4, 0 | r4 = 0;
0x000a0582 ldrb.w sb, [r1, 0xef] | sb = *((r1 + 0xef));
0x000a0586 str r4, [sp, 0x4c] | var_4ch_2 = r4;
0x000a0588 cmp r2, 0 |
| if (r2 == 0) {
0x000a058a beq.w 0xa06a6 | goto label_16;
| }
0x000a058e mov r0, r4 | r0 = r4;
| do {
0x000a0590 ldr r1, [r2] | r1 = *(r2);
0x000a0592 cmp r1, 4 |
0x000a0594 it eq |
| if (r1 != 4) {
0x000a0596 moveq r0, 1 | r0 = 1;
| }
| if (r1 != 4) {
0x000a0598 beq 0xa05a0 |
0x000a059a cmp r1, 1 |
0x000a059c it eq |
| if (r1 == 1) {
0x000a059e moveq fp, r2 | goto label_29;
| }
| }
| label_29:
0x000a05a0 ldrb.w r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x000a05a4 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000a05a6 cmp r1, 0 |
0x000a05a8 it ne |
| if (r1 == 0) {
0x000a05aa movne r4, 1 | r4 = 1;
| }
0x000a05ac cmp r2, 0 |
0x000a05ae bne 0xa0590 |
| } while (r2 != 0);
0x000a05b0 str r0, [sp, 0x24] | var_24h = r0;
0x000a05b2 cmp r0, 0 |
| if (r0 == 0) {
0x000a05b4 beq 0xa06a8 | goto label_2;
| }
0x000a05b6 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a05b8 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x000a05ba cmp r2, 0 |
| if (r2 != 0) {
0x000a05bc bne.w 0xa08c8 | goto label_30;
| }
0x000a05c0 cmp r4, 0 |
| if (r4 != 0) {
0x000a05c2 bne.w 0xa08a0 | goto label_31;
| }
| label_25:
0x000a05c6 mov.w r1, -1 | r1 = -1;
0x000a05ca mov r2, r1 | r2 = r1;
0x000a05cc cmp.w sb, 0 |
| if (sb == 0) {
0x000a05d0 beq.w 0xa08c2 | goto label_22;
| }
| label_18:
0x000a05d4 ldrb.w r3, [sl, 0x34] | r3 = *((sl + 0x34));
0x000a05d8 cmp.w sb, 0 |
0x000a05dc str r7, [sp, 0x3c] | var_3ch_2 = r7;
0x000a05de mov r7, sb | r7 = sb;
0x000a05e0 mov sb, sl | sb = sl;
0x000a05e2 strd r1, r2, [sp, 0x2c] | __asm ("strd r1, r2, [var_2ch_2]");
0x000a05e6 str r3, [sp, 0x28] | var_28h_2 = r3;
0x000a05e8 ite ne |
| if (sb == 0) {
0x000a05ea movne r3, -1 | r3 = -1;
| }
| if (sb == 0) {
0x000a05ee movs r3, 1 | r3 = 1;
| }
0x000a05f0 str r3, [sp, 0x1c] | var_1ch_2 = r3;
| label_5:
0x000a05f2 ldr.w r3, [fp] | r3 = *(fp);
0x000a05f6 cmp r3, 1 |
0x000a05f8 ite eq |
| if (r3 != 1) {
0x000a05fa ldreq r3, [fp, 0x10] | r3 = *(arg_10h);
| }
| if (r3 != 1) {
0x000a05fe mov r3, fp | r3 = fp;
| }
0x000a0600 ldr.w sl, [r3, 0x14] | sl = *((r3 + 0x14));
0x000a0604 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000a0608 ldr.w r4, [sl, 0x30] | r4 = *((sl + 0x30));
0x000a060c str r3, [sp, 0x10] | var_10h = r3;
0x000a060e ldrd r2, r3, [sl, 0x38] | __asm ("ldrd r2, r3, [sl, 0x38]");
0x000a0612 str r4, [sp, 0x48] | var_48h_2 = r4;
0x000a0614 strd r2, r3, [sp, 0x50] | __asm ("strd r2, r3, [x]");
0x000a0618 ldr r3, [sp, 0x28] | r3 = var_28h_2;
0x000a061a cmp r7, r3 |
| if (r7 == r3) {
0x000a061c beq.w 0xa078a | goto label_32;
| }
0x000a0620 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000a0622 movs r5, 1 | r5 = 1;
| if (r3 != 0) {
0x000a0624 cbz r3, 0xa0636 |
0x000a0626 mov r5, r4 | r5 = r4;
| if (r4 == 0) {
0x000a0628 cbz r4, 0xa0636 | goto label_33;
| }
0x000a062a ldr.w r5, [sl] | r5 = *(sl);
0x000a062e cmp r4, r5 |
0x000a0630 ite hi |
| if (r4 <= r5) {
0x000a0632 movhi r5, 0 | r5 = 0;
| }
| if (r4 <= r5) {
0x000a0634 movls r5, 1 | r5 = 1;
| goto label_33;
| }
| }
| label_33:
0x000a0636 add.w r8, sp, 0x47 | r8 += var_47h;
0x000a063a add r6, sp, 0x58 | r6 += var_58h_2;
0x000a063c str.w r8, [sp, 0x18] | __asm ("str.w r8, [var_18h_2]");
0x000a0640 mov r8, r7 | r8 = r7;
0x000a0642 mov r7, r6 | r7 = r6;
0x000a0644 add r3, sp, 0x48 | r3 += var_48h_2;
0x000a0646 strb.w r5, [sp, 0x47] | var_47h = r5;
0x000a064a str r3, [sp, 0x14] | var_14h_2 = r3;
0x000a064c str.w fp, [sp, 0x20] | __asm ("str.w fp, [var_20h_2]");
| do {
| if (r4 != 0) {
0x000a0650 cbz r4, 0xa067e |
0x000a0652 ldrd r3, r2, [sb, 0x20] | __asm ("ldrd r3, r2, [sb, 0x20]");
0x000a0656 ldrd r1, r0, [sp, 0x50] | __asm ("ldrd r1, r0, [x]");
0x000a065a mov ip, r3 |
0x000a065c mov lr, r2 | lr = r2;
0x000a065e cmp.w r8, 0 |
| if (r8 == 0) {
0x000a0662 beq 0xa0730 | goto label_34;
| }
0x000a0664 cmp r3, r1 |
0x000a0666 sbcs.w fp, r2, r0 | __asm ("sbcs.w fp, r2, r0");
| if (r3 < r1) {
0x000a066a blt.w 0xa093e | goto label_35;
| }
| label_3:
0x000a066e cmp r0, r2 |
0x000a0670 it eq |
| if (r0 == r2) {
0x000a0672 cmpeq r1, r3 | __asm ("cmpeq r1, r3");
| }
| if (r0 == r2) {
0x000a0674 beq 0xa0750 | goto label_36;
| }
0x000a0676 ldr r6, [sp, 0x1c] | r6 = var_1ch_2;
0x000a0678 adds r6, 1 | r6++;
| if (r6 != 1) {
0x000a067a bne.w 0xa093e | goto label_35;
| }
| }
0x000a067e cmp r5, 0 |
| if (r5 != 0) {
0x000a0680 bne 0xa073c | goto label_37;
| }
| label_4:
0x000a0682 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x000a0684 mov r0, r8 | r0 = r8;
0x000a0686 ldr.w r1, [sl] | r1 = *(sl);
0x000a068a strd r7, r3, [sp, 4] | __asm ("strd r7, r3, [var_4h]");
0x000a068e add r3, sp, 0x50 | r3 += x;
0x000a0690 str r3, [sp] | *(sp) = r3;
0x000a0692 ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_10h]");
0x000a0696 bl 0x15de0 | fcn_00015de0 (r0, r1, r2, r3, r4, r5, r6);
0x000a069a ldr r4, [sp, 0x48] | r4 = var_48h_2;
0x000a069c ldrb.w r5, [sp, 0x47] | r5 = var_47h;
0x000a06a0 b 0xa0650 |
| } while (1);
| label_20:
0x000a06a2 movw r2, 0x10b | r2 = 0x10b;
| label_16:
0x000a06a6 str r2, [sp, 0x24] | var_24h = r2;
| label_2:
0x000a06a8 ldr r2, [pc, 0x318] |
0x000a06aa ldr r3, [pc, 0x314] | r3 = *(0xa09c2);
0x000a06ac add r2, pc | r2 = 0x141074;
0x000a06ae ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a06b0 ldr r2, [r3] | r2 = imp.sinh;
0x000a06b2 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000a06b4 eors r2, r3 | r2 ^= r3;
0x000a06b6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a06ba bne.w 0xa09b6 | goto label_38;
| }
0x000a06be ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a06c0 add sp, 0x6c |
0x000a06c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_28:
0x000a06c6 ldrb.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x000a06ca cmp r2, 0 |
| if (r2 != 0) {
0x000a06cc bne.w 0xa057c | goto label_0;
| }
| if (r4 == 0) {
| label_7:
0x000a06d0 cbz r4, 0xa072a | goto label_6;
| }
0x000a06d2 ldrb r0, [r4] | r0 = *(r4);
0x000a06d4 cmp r0, 1 |
0x000a06d6 itt ne |
| if (r0 == 1) {
0x000a06d8 movne r2, 0 | r2 = 0;
| }
| if (r0 == 1) {
0x000a06da strne r2, [sp, 0x58] | var_58h_2 = r2;
| }
| if (r0 == 1) {
0x000a06dc beq.w 0xa0972 | goto label_39;
| }
| label_23:
0x000a06e0 cmp r7, r2 |
| if (r7 <= r2) {
0x000a06e2 ble 0xa071a | goto label_40;
| }
0x000a06e4 add r1, sp, 0x58 | r1 += var_58h_2;
| label_1:
0x000a06e6 cmp r0, 1 |
| if (r0 < 1) {
0x000a06e8 bls 0xa06f8 | goto label_41;
| }
| do {
0x000a06ea and r3, r0, 0x80 | r3 = r0 & 0x80;
0x000a06ee ldrb r0, [r4, 1]! | r0 = *((r4 += 1));
0x000a06f2 orrs r3, r0 | r3 |= r0;
0x000a06f4 cmp r3, 1 |
0x000a06f6 bhi 0xa06ea |
| } while (r3 > 1);
| if (r0 == 0) {
| label_41:
0x000a06f8 cbz r0, 0xa072a | goto label_6;
| }
0x000a06fa ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000a06fc adds r5, r4, 1 | r5 = r4 + 1;
0x000a06fe str r5, [sp, 0x48] | var_48h_2 = r5;
0x000a0700 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x000a0702 itt pl |
| if (r2 < r3) {
0x000a0704 movpl r0, 1 | r0 = 1;
| }
| if (r2 < r3) {
0x000a0706 strpl r3, [sp, 0x58] | var_58h_2 = r3;
| }
| if (r2 < r3) {
0x000a0708 bmi.w 0xa0892 | goto label_42;
| }
| label_14:
0x000a070c cmp r7, r3 |
0x000a070e add.w r4, r5, r0 | r4 = r5 + r0;
0x000a0712 str r4, [sp, 0x48] | var_48h_2 = r4;
0x000a0714 ldrb r0, [r5, r0] | r0 = *((r5 + r0));
| if (r7 > r3) {
0x000a0716 bgt 0xa06e6 | goto label_1;
| }
0x000a0718 mov r2, r3 | r2 = r3;
| if (r0 == 0) {
| label_40:
0x000a071a cbnz r0, 0xa071e |
0x000a071c str r0, [sp, 0x48] | var_48h_2 = r0;
| }
0x000a071e cmp r7, r2 |
0x000a0720 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a0722 ite eq |
| if (r7 != r2) {
0x000a0724 ldreq r2, [sp, 0x48] | r2 = var_48h_2;
| }
| if (r7 == r2) {
0x000a0726 movne r2, 0 | r2 = 0;
| }
0x000a0728 str r2, [r3] | *(r3) = r2;
| label_6:
0x000a072a movs r3, 0 | r3 = 0;
0x000a072c str r3, [sp, 0x24] | var_24h = r3;
0x000a072e b 0xa06a8 | goto label_2;
| label_34:
0x000a0730 cmp r3, r1 |
0x000a0732 sbcs.w fp, r2, r0 | __asm ("sbcs.w fp, r2, r0");
| if (r3 >= r1) {
0x000a0736 bge 0xa066e | goto label_3;
| }
0x000a0738 cmp r5, 0 |
| if (r5 == 0) {
0x000a073a beq 0xa0682 | goto label_4;
| }
| label_37:
0x000a073c ldr.w fp, [sp, 0x20] | fp = var_20h_2;
0x000a0740 mov r7, r8 | r7 = r8;
| label_8:
0x000a0742 ldrd r2, r3, [sp, 0x50] | __asm ("ldrd r2, r3, [x]");
0x000a0746 str.w r4, [sl, 0x30] | __asm ("str.w r4, [sl, 0x30]");
0x000a074a strd r2, r3, [sl, 0x38] | __asm ("strd r2, r3, [sl, 0x38]");
0x000a074e b 0xa076a | goto label_21;
| label_36:
0x000a0750 ldr.w fp, [sp, 0x20] | fp = var_20h_2;
0x000a0754 mov r7, r8 | r7 = r8;
0x000a0756 mov r0, lr | r0 = lr;
| label_12:
0x000a0758 str.w r4, [sl, 0x30] | __asm ("str.w r4, [sl, 0x30]");
0x000a075c strd ip, r0, [sl, 0x38] | __asm ("strd ip, r0, [sl, 0x38]");
| if (r5 == 0) {
0x000a0760 cbnz r5, 0xa076a |
0x000a0762 cmp r0, r2 |
0x000a0764 it eq |
| if (r0 == r2) {
0x000a0766 cmpeq ip, r3 | __asm ("cmpeq ip, r3");
| }
| if (r0 == r2) {
0x000a0768 beq 0xa076e | goto label_43;
| }
| }
| label_21:
0x000a076a movs r3, 0 | r3 = 0;
0x000a076c str r3, [sp, 0x24] | var_24h = r3;
| label_43:
0x000a076e ldr.w fp, [fp, 0xc] | fp = *(arg_ch);
0x000a0772 cmp.w fp, 0 |
| if (fp != 0) {
0x000a0776 bne.w 0xa05f2 | goto label_5;
| }
0x000a077a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a077c ldr r7, [sp, 0x3c] | r7 = var_3ch_2;
0x000a077e cmp r3, 0 |
| if (r3 == 0) {
0x000a0780 beq 0xa072a | goto label_6;
| }
0x000a0782 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a0784 ldr r4, [r3, 0x30] | r4 = *((r3 + 0x30));
0x000a0786 str r4, [sp, 0x48] | var_48h_2 = r4;
0x000a0788 b 0xa06d0 | goto label_7;
| label_32:
0x000a078a ldr r2, [sp, 0x10] | r2 = var_10h;
0x000a078c cmp r2, 0 |
| if (r2 == 0) {
0x000a078e beq.w 0xa089c | goto label_44;
| }
0x000a0792 ldr.w r3, [sl] | r3 = *(sl);
0x000a0796 add r3, r2 | r3 += r2;
0x000a0798 cmp r4, r3 |
0x000a079a ite lo |
| if (r4 >= r3) {
0x000a079c movlo r5, 0 | r5 = 0;
| }
| if (r4 < r3) {
0x000a079e movhs r5, 1 | r5 = 1;
| }
| label_15:
0x000a07a0 add r1, sp, 0x50 | r1 += x;
0x000a07a2 strb.w r5, [sp, 0x47] | var_47h = r5;
| if (r4 != 0) {
0x000a07a6 cbnz r4, 0xa07be | goto label_45;
| }
| label_9:
0x000a07a8 cmp r5, 0 |
| if (r5 != 0) {
0x000a07aa bne 0xa0742 | goto label_8;
| }
0x000a07ac ldr.w r4, [sl] | r4 = *(sl);
0x000a07b0 mov r0, r4 | r0 = r4;
0x000a07b2 bl 0xb604 | r0 = fcn_0000b604 (r0, r1);
0x000a07b6 add r4, r0 | r4 += r0;
0x000a07b8 str r4, [sp, 0x48] | var_48h_2 = r4;
0x000a07ba cmp r4, 0 |
| if (r4 == 0) {
0x000a07bc beq 0xa07a8 | goto label_9;
| }
| label_45:
0x000a07be ldrd r8, r6, [sp, 0x50] | __asm ("ldrd r8, r6, [x]");
0x000a07c2 add r1, sp, 0x58 | r1 += var_58h_2;
0x000a07c4 ldrd r3, r2, [sb, 0x20] | __asm ("ldrd r3, r2, [sb, 0x20]");
0x000a07c8 strd r1, fp, [sp, 0x14] | __asm ("strd r1, fp, [var_0h_3x14]");
0x000a07cc mov fp, sb |
0x000a07ce mov ip, r8 |
0x000a07d0 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000a07d4 mov r0, r6 | r0 = r6;
| if (r7 == 0) {
0x000a07d6 cbz r7, 0xa082e | goto label_46;
| }
| label_10:
0x000a07d8 cmp r3, r8 |
0x000a07da sbcs.w r1, r2, r6 | __asm ("sbcs.w r1, r2, r6");
| if (r3 >= r8) {
0x000a07de bge 0xa0836 | goto label_47;
| }
| label_11:
0x000a07e0 cmp r5, 0 |
| if (r5 != 0) {
0x000a07e2 bne.w 0xa094a | goto label_48;
| }
0x000a07e6 ldrb r1, [r4] | r1 = *(r4);
0x000a07e8 ldr.w ip, [sl] | ip = *(sl);
| if (r1 == 0) {
0x000a07ec cbz r1, 0xa07fa | goto label_49;
| }
| do {
0x000a07ee and r0, r1, 0x80 | r0 = r1 & 0x80;
0x000a07f2 ldrb r1, [r4, 1]! | r1 = *((r4 += 1));
0x000a07f6 orrs r0, r1 | r0 |= r1;
0x000a07f8 bne 0xa07ee |
| } while (r0 != r1);
| label_49:
0x000a07fa adds r4, 1 | r4++;
0x000a07fc add ip, sb |
0x000a07fe cmp r4, ip |
| if (r4 >= ip) {
0x000a0800 bhs 0xa0818 | goto label_50;
| }
0x000a0802 mov r1, r4 | r1 = r4;
0x000a0804 b 0xa080a |
| while (r0 == 0) {
0x000a0806 cmp r1, ip |
| if (r1 == ip) {
0x000a0808 beq 0xa084c | goto label_51;
| }
0x000a080a mov r4, r1 | r4 = r1;
0x000a080c ldrb r0, [r1], 1 | r0 = *(r1);
| r1++;
0x000a0810 cmp r0, 0 |
0x000a0812 beq 0xa0806 |
| }
0x000a0814 cmp ip, r4 |
| if (ip > r4) {
0x000a0816 bhi 0xa085c | goto label_52;
| }
| label_50:
0x000a0818 mov.w r1, 1 | r1 = 1;
0x000a081c movs r5, 1 | r5 = 1;
0x000a081e strb.w r1, [sp, 0x47] | var_47h = r1;
0x000a0822 mov r1, r4 | r1 = r4;
| label_13:
0x000a0824 mov ip, r8 |
0x000a0826 mov r0, r6 | r0 = r6;
0x000a0828 str r1, [sp, 0x48] | var_48h_2 = r1;
0x000a082a cmp r7, 0 |
| if (r7 != 0) {
0x000a082c bne 0xa07d8 | goto label_10;
| }
| label_46:
0x000a082e cmp r3, r8 |
0x000a0830 sbcs.w r1, r2, r6 | __asm ("sbcs.w r1, r2, r6");
| if (r3 < r8) {
0x000a0834 blt 0xa0844 | goto label_53;
| }
| label_47:
0x000a0836 cmp r2, r6 |
0x000a0838 it eq |
| if (r2 == r6) {
0x000a083a cmpeq r3, r8 | __asm ("cmpeq r3, r8");
| }
| if (r2 == r6) {
0x000a083c beq 0xa0844 | goto label_53;
| }
0x000a083e ldr r1, [sp, 0x1c] | r1 = var_1ch_2;
0x000a0840 cmp r1, 1 |
| if (r1 == 1) {
0x000a0842 beq 0xa07e0 | goto label_11;
| }
| label_53:
0x000a0844 mov sb, fp | sb = fp;
0x000a0846 ldr.w fp, [sp, 0x18] | fp = var_18h_2;
0x000a084a b 0xa0758 | goto label_12;
| label_51:
0x000a084c mov r4, r1 | r4 = r1;
0x000a084e mov.w r1, 1 | r1 = 1;
0x000a0852 strb.w r1, [sp, 0x47] | var_47h = r1;
0x000a0856 movs r5, 1 | r5 = 1;
0x000a0858 mov r1, r4 | r1 = r4;
0x000a085a b 0xa0824 | goto label_13;
| label_52:
0x000a085c ldr r1, [sp, 0x14] | r1 = var_14h_2;
0x000a085e mov r0, r4 | r0 = r4;
0x000a0860 bl 0xb604 | fcn_0000b604 (r0, r1);
0x000a0864 ldr r3, [sp, 0x2c] | r3 = var_2ch_2;
0x000a0866 add r4, r0 | r4 += r0;
0x000a0868 ldr r2, [sp, 0x5c] | r2 = var_5ch_2;
0x000a086a ldr r1, [sp, 0x58] | r1 = var_58h_2;
0x000a086c ldr r0, [sp, 0x30] | r0 = var_30h_2;
0x000a086e mul r2, r3, r2 | r2 = r3 * r2;
0x000a0872 mla r2, r0, r1, r2 | __asm ("mla r2, r0, r1, r2");
0x000a0876 umull r1, r0, r1, r3 | r1:r0 = r1 * r3;
0x000a087a adds.w r1, r1, r8 | r1 += r8;
0x000a087e add r2, r0 | r2 += r0;
0x000a0880 adc.w r6, r2, r6 | __asm ("adc.w r6, r2, r6");
0x000a0884 mov r8, r1 | r8 = r1;
0x000a0886 str r1, [sp, 0x50] | x = r1;
0x000a0888 mov r1, r4 | r1 = r4;
0x000a088a ldrd r3, r2, [fp, 0x20] | __asm ("ldrd r3, r2, [arg_20h]");
0x000a088e str r6, [sp, 0x54] | var_54h_2 = r6;
0x000a0890 b 0xa0824 | goto label_13;
| label_42:
0x000a0892 mov r0, r5 | r0 = r5;
0x000a0894 bl 0xb698 | fcn_0000b698 (r0, r1);
0x000a0898 ldr r3, [sp, 0x58] | r3 = var_58h_2;
0x000a089a b 0xa070c | goto label_14;
| label_44:
0x000a089c movs r5, 1 | r5 = 1;
0x000a089e b 0xa07a0 | goto label_15;
| label_31:
0x000a08a0 ldrb.w r2, [fp, 0x20] | r2 = *(arg_20h);
| label_24:
0x000a08a4 add r4, sp, 0x4c | r4 += var_4ch_2;
| label_17:
0x000a08a6 cmp r2, 0 |
| if (r2 != 0) {
0x000a08a8 bne 0xa095a | goto label_54;
| }
0x000a08aa mov r2, r4 | r2 = r4;
0x000a08ac mov r1, fp | r1 = fp;
0x000a08ae mov r0, sl | r0 = sl;
0x000a08b0 bl 0x5f5a8 | fcn_0005f5a8 (r0, r1, r2);
0x000a08b4 ldr r2, [sp, 0x4c] | r2 = var_4ch_2;
0x000a08b6 cmp r2, 0 |
| if (r2 != 0) {
0x000a08b8 bne.w 0xa06a6 | goto label_16;
| }
0x000a08bc ldrb.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x000a08c0 b 0xa08a6 | goto label_17;
| label_22:
0x000a08c2 movs r1, 1 | r1 = 1;
0x000a08c4 movs r2, 0 | r2 = 0;
0x000a08c6 b 0xa05d4 | goto label_18;
| label_30:
0x000a08c8 add r6, sp, 0x4c | r6 += var_4ch_2;
0x000a08ca mov r1, fp | r1 = fp;
0x000a08cc mov r2, r6 | r2 = r6;
0x000a08ce mov r0, sl | r0 = sl;
0x000a08d0 str r3, [sp, 0x10] | var_10h = r3;
0x000a08d2 ldrb.w r8, [fp, 0x20] | r8 = *(arg_20h);
0x000a08d6 bl 0xa0448 | fcn_000a0448 (r0, r1, r2);
0x000a08da ldr r1, [sp, 0x4c] | r1 = var_4ch_2;
0x000a08dc ldr r3, [sp, 0x10] | r3 = var_10h;
0x000a08de mov r2, r1 | r2 = r1;
0x000a08e0 cmp r1, 0 |
| if (r1 != 0) {
0x000a08e2 bne 0xa09ac | goto label_55;
| }
0x000a08e4 mov r2, r5 | r2 = r5;
0x000a08e6 str.w sb, [sp, 0x10] | __asm ("str.w sb, [var_10h]");
0x000a08ea mov r5, r8 | r5 = r8;
0x000a08ec mov sb, fp | sb = fp;
0x000a08ee mov r8, r2 | r8 = r2;
0x000a08f0 mov fp, r7 |
0x000a08f2 mov r7, r3 | r7 = r3;
0x000a08f4 b 0xa0916 | goto label_56;
| label_19:
0x000a08f6 mov r2, r6 | r2 = r6;
0x000a08f8 mov r1, sb | r1 = sb;
0x000a08fa mov r0, sl | r0 = sl;
0x000a08fc bl 0x5f5a8 | fcn_0005f5a8 (r0, r1, r2);
| if (r5 == 0) {
0x000a0900 cbnz r5, 0xa090e |
0x000a0902 ldrd r2, r3, [sb, 0x18] | __asm ("ldrd r2, r3, [sb, 0x18]");
0x000a0906 cmp r7, r3 |
0x000a0908 it eq |
| if (r7 == r3) {
0x000a090a cmpeq r8, r2 | __asm ("cmpeq r8, r2");
| }
| if (r7 == r3) {
0x000a090c beq 0xa099a | goto label_57;
| }
| }
0x000a090e ldr r2, [sp, 0x4c] | r2 = var_4ch_2;
0x000a0910 cmp r2, 0 |
| if (r2 != 0) {
0x000a0912 bne.w 0xa06a6 | goto label_16;
| }
| label_56:
0x000a0916 ldrb.w r3, [sb, 0x20] | r3 = *((sb + 0x20));
0x000a091a cmp r3, 0 |
| if (r3 == 0) {
0x000a091c beq 0xa08f6 | goto label_19;
| }
0x000a091e mov r7, fp | r7 = fp;
0x000a0920 mov fp, sb |
0x000a0922 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000a0926 mov r8, r5 | r8 = r5;
| label_27:
0x000a0928 ldrb.w r2, [fp, 0x20] | r2 = *(arg_20h);
0x000a092c cmp r2, r8 |
| if (r2 == r8) {
0x000a092e beq 0xa0988 | goto label_58;
| }
0x000a0930 cmp r4, 0 |
| if (r4 != 0) {
0x000a0932 bne.w 0xa06a2 | goto label_20;
| }
0x000a0936 movw r3, 0x10b | r3 = 0x10b;
0x000a093a str r3, [sp, 0x24] | var_24h = r3;
0x000a093c b 0xa06a8 | goto label_2;
| label_35:
0x000a093e mov lr, r1 | lr = r1;
0x000a0940 ldr.w fp, [sp, 0x20] | fp = var_20h_2;
0x000a0944 mov r7, r8 | r7 = r8;
0x000a0946 mov ip, lr |
0x000a0948 b 0xa0758 | goto label_12;
| label_48:
0x000a094a mov sb, fp | sb = fp;
0x000a094c str.w r4, [sl, 0x30] | __asm ("str.w r4, [sl, 0x30]");
0x000a0950 ldr.w fp, [sp, 0x18] | fp = var_18h_2;
0x000a0954 strd r8, r6, [sl, 0x38] | __asm ("strd r8, r6, [sl, 0x38]");
0x000a0958 b 0xa076a | goto label_21;
| label_54:
0x000a095a ldr r2, [sp, 0x4c] | r2 = var_4ch_2;
0x000a095c cmp r2, 0 |
| if (r2 != 0) {
0x000a095e bne.w 0xa06a6 | goto label_16;
| }
0x000a0962 mov.w r1, -1 | r1 = -1;
0x000a0966 mov r2, r1 | r2 = r1;
0x000a0968 cmp.w sb, 0 |
| if (sb != 0) {
0x000a096c bne.w 0xa05d4 | goto label_18;
| }
0x000a0970 b 0xa08c2 | goto label_22;
| label_39:
0x000a0972 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x000a0974 adds r5, r4, 1 | r5 = r4 + 1;
0x000a0976 str r5, [sp, 0x48] | var_48h_2 = r5;
0x000a0978 lsls r1, r2, 0x18 | r1 = r2 << 0x18;
0x000a097a it pl |
| if (r1 < r2) {
0x000a097c strpl r2, [sp, 0x58] | var_58h_2 = r2;
| }
| if (r1 < r2) {
0x000a097e bmi 0xa098e | goto label_59;
| }
| label_26:
0x000a0980 adds r4, r5, r0 | r4 = r5 + r0;
0x000a0982 ldrb r0, [r5, r0] | r0 = *((r5 + r0));
0x000a0984 str r4, [sp, 0x48] | var_48h_2 = r4;
0x000a0986 b 0xa06e0 | goto label_23;
| label_58:
0x000a0988 cmp r4, 0 |
| if (r4 != 0) {
0x000a098a bne 0xa08a4 | goto label_24;
| }
0x000a098c b 0xa05c6 | goto label_25;
| label_59:
0x000a098e add r1, sp, 0x58 | r1 += var_58h_2;
0x000a0990 mov r0, r5 | r0 = r5;
0x000a0992 bl 0xb698 | fcn_0000b698 (r0, r1);
0x000a0996 ldr r2, [sp, 0x58] | r2 = var_58h_2;
0x000a0998 b 0xa0980 | goto label_26;
| label_57:
0x000a099a ldr r2, [sp, 0x4c] | r2 = var_4ch_2;
0x000a099c mov r7, fp | r7 = fp;
0x000a099e mov r8, r5 | r8 = r5;
0x000a09a0 mov fp, sb |
0x000a09a2 ldr.w sb, [sp, 0x10] | sb = var_10h;
0x000a09a6 cmp r2, 0 |
| if (r2 == 0) {
0x000a09a8 beq 0xa0928 | goto label_27;
| }
0x000a09aa b 0xa06a6 | goto label_16;
| label_55:
0x000a09ac cmp r4, 0 |
| if (r4 != 0) {
0x000a09ae bne.w 0xa06a6 | goto label_16;
| }
0x000a09b2 str r1, [sp, 0x24] | var_24h = r1;
0x000a09b4 b 0xa06a8 | goto label_2;
| label_38:
0x000a09b6 blx 0x883c | fcn_0000883c ();
0x000a09ba nop |
0x000a09bc strh r4, [r3, 0x3a] | *((r3 + 0x3a)) = r4;
0x000a09be movs r2, r0 | r2 = r0;
0x000a09c0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a09c2 movs r0, r0 |
0x000a09c4 strh r4, [r5, 0x2e] | *((r5 + 0x2e)) = r4;
0x000a09c6 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa09c8 */
| #include <stdint.h>
|
; (fcn) fcn.000a09c8 () | void fcn_000a09c8 (int16_t arg_10h, int16_t arg_14h, int16_t arg1, int16_t arg3) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_0h;
| int16_t var_4h_3;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h_2;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h_2;
| int16_t var_38h_2;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| arithmetic x;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h_2;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_a0h;
| int16_t var_ach;
| int16_t var_ech;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch;
| r0 = arg1;
| r2 = arg3;
0x000a09c8 mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x000a09cc mov r5, r2 | r5 = r2;
0x000a09ce ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000a09d0 sub sp, 8 |
0x000a09d2 ldr r4, [pc, 0xa0] |
0x000a09d4 ldr r2, [pc, 0xa0] | r2 = *(0xa0a78);
0x000a09d6 cmp r3, 0 |
0x000a09d8 add r4, pc |
0x000a09da ldr r2, [r4, r2] |
0x000a09dc mul r4, r1, r3 | r4 = r1 * r3;
0x000a09e0 ldr r2, [r2] | r2 = imp.sinh;
0x000a09e2 str r2, [sp, 4] | var_4h = r2;
0x000a09e4 mov.w r2, 0 | r2 = 0;
0x000a09e8 add.w r4, r4, r4, lsl 1 | r4 = 0x141452;
| if (r3 <= 0) {
0x000a09ec ble 0xa0a4e | goto label_14;
| }
0x000a09ee lsls r4, r4, 2 | r4 <<= 2;
0x000a09f0 mov r6, r0 | r6 = r0;
0x000a09f2 mov.w r8, 0 | r8 = 0;
0x000a09f6 mov r7, sp | r7 = sp;
0x000a09f8 b 0xa0a16 |
| while (r3 == 0) {
| label_1:
0x000a09fa ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000a09fc add.w r8, r8, 1 | r8++;
0x000a0a00 str r3, [r2, r4] | *((r2 + r4)) = r3;
0x000a0a02 adds r4, 0xc | r4 += 0xc;
0x000a0a04 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000a0a06 cmp r3, r8 |
0x000a0a08 ite le |
| if (r3 > r8) {
0x000a0a0a movle r3, 0 | r3 = 0;
| }
| if (r3 <= r8) {
0x000a0a0c movgt r3, 1 | r3 = 1;
| }
0x000a0a0e cmp r0, 0 |
0x000a0a10 it ne |
| if (r0 == 0) {
0x000a0a12 movne r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000a0a14 cbz r3, 0xa0a50 | goto label_15;
| }
0x000a0a16 mov r3, r7 | r3 = r7;
0x000a0a18 ldr r0, [r5] | r0 = *(r5);
0x000a0a1a mov r2, r8 | r2 = r8;
0x000a0a1c mov r1, r6 | r1 = r6;
0x000a0a1e bl 0xa0524 | fcn_000a0524 (r0, r1, r2, r3, r4, r5, r6);
0x000a0a22 ldr r3, [sp] | r3 = *(sp);
0x000a0a24 cmp r3, 0 |
0x000a0a26 beq 0xa09fa |
| }
0x000a0a28 ldrb.w ip, [r3] | ip = *(r3);
0x000a0a2c cmp.w ip, 1 |
| if (ip < 1) {
0x000a0a30 bls 0xa0a6a | goto label_16;
| }
0x000a0a32 mov.w lr, 0 | lr = 0;
| do {
| label_0:
0x000a0a36 tst.w ip, 0x80 |
0x000a0a3a ldrb ip, [r3, 1]! | ip = *((r3 += 1));
0x000a0a3e bne 0xa0a36 |
| } while ((ip & 0x80) != 0);
0x000a0a40 cmp.w ip, 1 |
0x000a0a44 add.w lr, lr, 1 | lr++;
| if (ip > 1) {
0x000a0a48 bhi 0xa0a36 | goto label_0;
| }
0x000a0a4a mov r3, lr | r3 = lr;
0x000a0a4c b 0xa09fa | goto label_1;
| label_14:
0x000a0a4e movs r0, 0 | r0 = 0;
| label_15:
0x000a0a50 ldr r2, [pc, 0x28] |
0x000a0a52 ldr r3, [pc, 0x24] | r3 = *(0xa0a7a);
0x000a0a54 add r2, pc | r2 = 0x1414d4;
0x000a0a56 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a0a58 ldr r2, [r3] | r2 = imp.sinh;
0x000a0a5a ldr r3, [sp, 4] | r3 = var_4h;
0x000a0a5c eors r2, r3 | r2 ^= r3;
0x000a0a5e mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000a0a62 bne 0xa0a6e |
0x000a0a64 add sp, 8 |
0x000a0a66 pop.w {r4, r5, r6, r7, r8, pc} |
| label_16:
0x000a0a6a movs r3, 0 | r3 = 0;
0x000a0a6c b 0xa09fa | goto label_1;
| }
0x000a0a6e blx 0x883c | fcn_0000883c ();
0x000a0a72 nop |
0x000a0a74 strh r0, [r0, 0x16] | *((r0 + 0x16)) = r0;
0x000a0a76 movs r2, r0 | r2 = r0;
0x000a0a78 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a0a7a movs r0, r0 |
0x000a0a7c strh r4, [r0, 0x12] | *((r0 + 0x12)) = r4;
0x000a0a7e movs r2, r0 | r2 = r0;
0x000a0a80 push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000a0a84 mov r4, r0 | r4 = r0;
0x000a0a86 ldr r5, [pc, 0xe0] |
0x000a0a88 sub sp, 0x10 |
0x000a0a8a mov r7, r2 | r7 = r2;
0x000a0a8c add r3, sp, 4 | r3 += var_4h_2;
0x000a0a8e ldr r1, [pc, 0xdc] | r1 = *(0xa0b6e);
0x000a0a90 add r5, pc | r5 = 0x1415fe;
0x000a0a92 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000a0a94 ldr r0, [r7] | r0 = *(r7);
0x000a0a96 ldr r1, [r5, r1] |
0x000a0a98 ldr r1, [r1] | r1 = imp.sinh;
0x000a0a9a str r1, [sp, 0xc] | var_ch = r1;
0x000a0a9c mov.w r1, 0 | r1 = 0;
0x000a0aa0 mov r1, r4 | r1 = r4;
0x000a0aa2 bl 0xa0524 | fcn_000a0524 (r0, r1, r2, r3, r4, r5, r6);
0x000a0aa6 ldr r5, [sp, 4] | r5 = var_4h_2;
0x000a0aa8 mov sb, r0 | sb = r0;
0x000a0aaa ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000a0aac mov r6, r5 | r6 = r5;
0x000a0aae mov r4, r5 | r4 = r5;
0x000a0ab0 ldr.w r8, [r3, 0x40] | r8 = *((r3 + 0x40));
| if (r5 != 0) {
0x000a0ab4 cbz r5, 0xa0ac8 |
0x000a0ab6 ldrb r4, [r5] | r4 = *(r5);
0x000a0ab8 lsls r3, r4, 0x18 | r3 = r4 << 0x18;
0x000a0aba it pl |
| if (r3 < r4) {
0x000a0abc movpl r3, 1 | r3 = 1;
| }
| if (r3 < r4) {
0x000a0abe bmi 0xa0b56 | goto label_17;
| }
| label_2:
0x000a0ac0 subs r4, 2 | r4 -= 2;
0x000a0ac2 add r3, r5 | r3 += r5;
0x000a0ac4 asrs r6, r4, 0x1f | r6 = r4 >> 0x1f;
0x000a0ac6 str r3, [sp, 4] | var_4h_2 = r3;
| }
0x000a0ac8 cmp.w r8, 0 |
| if (r8 <= 0) {
0x000a0acc ble 0xa0b3a | goto label_18;
| }
0x000a0ace ldr r5, [r7, 8] | r5 = *((r7 + 8));
0x000a0ad0 asr.w r0, r8, 0x1f | r0 = r8 >> 0x1f;
0x000a0ad4 ldr.w lr, [r7, 0x18] |
0x000a0ad8 adds.w ip, r8, -1 |
0x000a0adc ldr r2, [sp, 4] | r2 = var_4h_2;
0x000a0ade adc r0, r0, -1 | __asm ("adc r0, r0, -1");
0x000a0ae2 mov r3, ip | r3 = ip;
0x000a0ae4 mov sl, r0 | sl = r0;
0x000a0ae6 add.w r1, r5, r5, lsl 1 | r1 = r5 + (r5 << 1);
0x000a0aea add.w r1, lr, r1, lsl 3 | r1 = lr + (r1 << 3);
| do {
0x000a0aee str r3, [r1, 0x10] | *((r1 + 0x10)) = r3;
0x000a0af0 subs r3, 1 | r3--;
0x000a0af2 str.w sl, [r1, 0x14] | __asm ("str.w sl, [r1, 0x14]");
0x000a0af6 sbc sl, sl, 0 | __asm ("sbc sl, sl, 0");
0x000a0afa cmp.w sl, -1 |
0x000a0afe it eq |
| if (sl == -1) {
0x000a0b00 cmpeq r3, -1 | __asm ("cmpeq r3, -1");
| }
0x000a0b04 str r2, [r1] | *(r1) = r2;
0x000a0b06 strd r4, r6, [r1, 8] | __asm ("strd r4, r6, [r1, 8]");
0x000a0b0a add.w r1, r1, 0x18 | r1 += 0x18;
0x000a0b0e bne 0xa0aee |
| } while (sl != -1);
0x000a0b10 add r5, r8 | r5 += r8;
0x000a0b12 add.w r8, r8, -1 | r8 += -1;
0x000a0b16 str r5, [r7, 8] | *((r7 + 8)) = r5;
0x000a0b18 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x000a0b1c subs.w r3, ip, r8 | r3 = ip - r8;
0x000a0b20 lsl.w r5, r5, 3 | r5 <<= 3;
0x000a0b24 sbc r0, r0, 0 | __asm ("sbc r0, r0, 0");
0x000a0b28 subs r5, 0x18 | r5 -= 0x18;
0x000a0b2a add.w r1, lr, r5 | r1 = lr + r5;
0x000a0b2e strd r3, r0, [r1, 0x10] | __asm ("strd r3, r0, [r1, 0x10]");
0x000a0b32 str.w r2, [lr, r5] | __asm ("str.w r2, [lr, r5]");
0x000a0b36 strd r4, r6, [r1, 8] | __asm ("strd r4, r6, [r1, 8]");
| label_18:
0x000a0b3a ldr r2, [pc, 0x34] |
0x000a0b3c ldr r3, [pc, 0x2c] | r3 = *(0xa0b6c);
0x000a0b3e add r2, pc | r2 = 0x1416b4;
0x000a0b40 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a0b42 ldr r2, [r3] | r2 = imp.sinh;
0x000a0b44 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000a0b46 eors r2, r3 | r2 ^= r3;
0x000a0b48 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000a0b4c bne 0xa0b64 |
0x000a0b4e mov r0, sb | r0 = sb;
0x000a0b50 add sp, 0x10 |
0x000a0b52 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_17:
0x000a0b56 add r1, sp, 8 | r1 += var_8h_2;
0x000a0b58 mov r0, r5 | r0 = r5;
0x000a0b5a bl 0xb698 | fcn_0000b698 (r0, r1);
0x000a0b5e ldr r4, [sp, 8] | r4 = var_8h_2;
0x000a0b60 mov r3, r0 | r3 = r0;
0x000a0b62 b 0xa0ac0 | goto label_2;
| }
0x000a0b64 blx 0x883c | fcn_0000883c ();
0x000a0b68 strh r0, [r1, 0x10] | *((r1 + 0x10)) = r0;
0x000a0b6a movs r2, r0 | r2 = r0;
0x000a0b6c lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a0b6e movs r0, r0 |
0x000a0b70 strh r2, [r3, 0xa] | *((r3 + 0xa)) = r2;
0x000a0b72 movs r2, r0 | r2 = r0;
0x000a0b74 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a0b78 mov r4, r0 | r4 = r0;
0x000a0b7a ldr r0, [r2] | r0 = *(r2);
0x000a0b7c ldr.w r2, [pc, 0x490] |
0x000a0b80 ldr.w r3, [pc, 0x490] | r3 = *(0xa1014);
0x000a0b84 ldr.w r1, [pc, 0x490] | r1 = *(0x000a1018);
0x000a0b88 add r2, pc | r2 = 0x141b9c;
0x000a0b8a vpush {d8} | __asm ("vpush {d8}");
0x000a0b8e ldr r3, [r2, r3] |
0x000a0b90 sub sp, 0xf4 |
0x000a0b92 add r1, pc | r1 += pc;
0x000a0b94 ldr r3, [r3] | r3 = imp.sinh;
0x000a0b96 str r3, [sp, 0xec] | var_ech = r3;
0x000a0b98 mov.w r3, 0 | r3 = 0;
0x000a0b9c blx 0x87b0 | fcn_000087b0 ();
0x000a0ba0 ldr.w r3, [pc, 0x478] |
0x000a0ba4 add r3, pc | r3 = 0x141bc4;
0x000a0ba6 str r3, [sp, 0x18] | var_18h = r3;
| if (r0 != 0) {
0x000a0ba8 cbz r0, 0xa0bdc |
0x000a0baa mov r1, r0 | r1 = r0;
0x000a0bac mov sl, r0 | sl = r0;
0x000a0bae mov r0, r4 | r0 = r4;
0x000a0bb0 bl 0x88cd0 | r0 = fcn_00088cd0 (r0, r1);
0x000a0bb4 mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x000a0bb6 cbz r0, 0xa0c24 | goto label_19;
| }
| label_4:
0x000a0bb8 ldr.w r2, [pc, 0x464] |
0x000a0bbc ldr.w r3, [pc, 0x454] | r3 = *(0xa1014);
0x000a0bc0 add r2, pc | r2 = 0x141be4;
0x000a0bc2 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a0bc4 ldr r2, [r3] | r2 = imp.sinh;
0x000a0bc6 ldr r3, [sp, 0xec] | r3 = var_ech;
0x000a0bc8 eors r2, r3 | r2 ^= r3;
0x000a0bca mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a0bce bne.w 0xa100c | goto label_20;
| }
0x000a0bd2 add sp, 0xf4 |
0x000a0bd4 vpop {d8} | __asm ("vpop {d8}");
0x000a0bd8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000a0bdc ldr.w r1, [pc, 0x444] |
0x000a0be0 ldr.w r0, [pc, 0x444] | r0 = *(0x000a1028);
0x000a0be4 add r1, pc | r1 = 0x141c0c;
0x000a0be6 add r0, pc | r0 += pc;
0x000a0be8 blx 0x8644 | fcn_00008644 ();
0x000a0bec mov.w r2, -1 | r2 = -1;
0x000a0bf0 mov r1, r0 | r1 = r0;
0x000a0bf2 mov r5, r0 | r5 = r0;
0x000a0bf4 mov r0, r4 | r0 = r4;
0x000a0bf6 blx 0x8798 | fcn_00008798 ();
0x000a0bfa ldr.w r2, [pc, 0x430] | r2 = *(0x000a102c);
0x000a0bfe ldr.w r3, [pc, 0x414] | r3 = *(0xa1016);
0x000a0c02 add r2, pc | r2 += pc;
0x000a0c04 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a0c06 ldr r2, [r3] | r2 = *(0xa1016);
0x000a0c08 ldr r3, [sp, 0xec] | r3 = var_ech;
0x000a0c0a eors r2, r3 | r2 ^= r3;
0x000a0c0c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a0c10 bne.w 0xa100c | goto label_20;
| }
0x000a0c14 mov r0, r5 | r0 = r5;
0x000a0c16 add sp, 0xf4 |
0x000a0c18 vpop {d8} | __asm ("vpop {d8}");
0x000a0c1c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a0c20 b.w 0x8400 | void (*0x8400)() ();
| label_19:
0x000a0c24 ldr.w r3, [sl] | r3 = *(sl);
0x000a0c28 add r2, sp, 0x6c | r2 += var_6ch;
0x000a0c2a vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000a0c2e str r0, [sp, 0x68] | var_68h = r0;
0x000a0c30 mov r1, r3 | r1 = r3;
0x000a0c32 str r3, [sp, 0x28] | var_28h = r3;
0x000a0c34 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000a0c38 vst1.32 {d8}, [r2] | __asm ("vst1.32 {d8}, [r2]");
0x000a0c3c ldr r2, [r1, 0x24] | r2 = *((r1 + 0x24));
0x000a0c3e ldr.w fp, [r2] | fp = *(r2);
0x000a0c42 cmp r3, 0 |
| if (r3 == 0) {
0x000a0c44 beq.w 0xa0fca | goto label_21;
| }
0x000a0c48 add r3, sp, 0x88 | r3 += var_68h;
0x000a0c4a mov r1, r0 | r1 = r0;
0x000a0c4c movs r2, 0x20 | r2 = 0x20;
0x000a0c4e mov r0, r3 | r0 = r3;
0x000a0c50 str r3, [sp, 0x44] | var_44h = r3;
0x000a0c52 blx 0x839c | fcn_0000839c ();
0x000a0c56 ldr.w r5, [sl, 0x10] | r5 = *((sl + 0x10));
0x000a0c5a add r3, sp, 0x7c | r3 += var_7ch;
0x000a0c5c str.w sl, [sp, 0x78] | __asm ("str.w sl, [var_78h]");
0x000a0c60 str r7, [sp, 0x64] | var_44h = r7;
0x000a0c62 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x000a0c66 ldr r6, [r5] | r6 = *(r5);
0x000a0c68 cmp r6, 5 |
| if (r6 == 5) {
0x000a0c6a beq 0xa0ca2 | goto label_22;
| }
0x000a0c6c ldr.w sb, [pc, 0x3c0] | sb = *(0x000a1030);
0x000a0c70 add.w r8, sp, 0x78 | r8 += var_78h;
0x000a0c74 add r7, sp, 0x64 | r7 += var_44h;
0x000a0c76 add sb, pc | sb += pc;
| do {
0x000a0c78 mov r3, r8 | r3 = r8;
0x000a0c7a ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000a0c7c mov r2, sb | r2 = sb;
0x000a0c7e mov r1, r7 | r1 = r7;
0x000a0c80 bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a0c84 clz r3, r0 | r3 &= r0;
0x000a0c88 cmp r6, 2 |
0x000a0c8a lsr.w r3, r3, 5 | r3 >>= 5;
0x000a0c8e it eq |
| if (r6 != 2) {
0x000a0c90 moveq r3, 0 | r3 = 0;
| }
0x000a0c92 cmp r3, 0 |
| if (r3 == 0) {
0x000a0c94 beq.w 0xa0e0e | goto label_23;
| }
0x000a0c98 ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x000a0c9a ldr r6, [r5] | r6 = *(r5);
0x000a0c9c cmp r6, 5 |
0x000a0c9e bne 0xa0c78 |
| } while (r6 != 5);
0x000a0ca0 ldr r7, [sp, 0x80] | r7 = var_80h;
| label_22:
0x000a0ca2 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000a0ca4 ldr r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000a0ca6 adds r3, r7, r3 | r3 = r7 + r3;
0x000a0ca8 str r3, [sp, 0x34] | var_14h = r3;
| label_5:
0x000a0caa ldr r3, [sp, 0x34] | r3 = var_14h;
0x000a0cac movs r1, 0 | r1 = 0;
0x000a0cae add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000a0cb2 lsls r3, r3, 3 | r3 <<= 3;
0x000a0cb4 mov r0, r3 | r0 = r3;
0x000a0cb6 mov r6, r3 | r6 = r3;
0x000a0cb8 str r3, [sp, 0x30] | var_30h = r3;
0x000a0cba blx 0x8240 | r0 = fcn_00008240 ();
0x000a0cbe mov r5, r0 | r5 = r0;
0x000a0cc0 cmp r0, 0 |
| if (r0 == 0) {
0x000a0cc2 beq.w 0xa0fae | goto label_24;
| }
0x000a0cc6 mov r2, r6 | r2 = r6;
0x000a0cc8 movs r1, 0 | r1 = 0;
0x000a0cca blx 0x839c | fcn_0000839c ();
0x000a0cce ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a0cd0 ldrd r0, r1, [sl, 0x20] | __asm ("ldrd r0, r1, [sl, 0x20]");
0x000a0cd4 str r5, [sp, 0xa0] | var_80h = r5;
0x000a0cd6 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000a0cd8 str.w sl, [sp, 0x88] | __asm ("str.w sl, [var_68h]");
0x000a0cdc strd r0, r1, [sp, 0x98] | __asm ("strd r0, r1, [var_7ch]");
0x000a0ce0 cmp r3, 0 |
0x000a0ce2 itt le |
| if (r3 > 0) {
0x000a0ce4 movle r6, -1 | r6 = -1;
| }
| if (r3 <= 0) {
0x000a0ce8 movs r7, 0 | r7 = 0;
| }
| if (r7 <= 0) {
0x000a0cea ble 0xa0de4 | goto label_25;
| }
0x000a0cec movs r3, 0 | r3 = 0;
0x000a0cee movw lr, 0xaaab |
0x000a0cf2 str r3, [sp, 0x20] | var_20h = r3;
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x000a0cf4 movt lr, 0xaaaa | lr = 0xaaaaaaab;
0x000a0cf8 ldr r3, [pc, 0x338] |
0x000a0cfa str.w lr, [sp, 0x40] | __asm ("str.w lr, [var_20h]");
0x000a0cfe add r3, pc | r3 = 0x141d36;
0x000a0d00 str r3, [sp, 0x4c] | var_4ch = r3;
0x000a0d02 ldr r3, [pc, 0x334] |
0x000a0d04 add r3, pc | r3 = 0x141d42;
0x000a0d06 strd r4, r3, [sp, 0x38] | __asm ("strd r4, r3, [var_18h]");
| label_3:
0x000a0d0a movs r3, 0 | r3 = 0;
0x000a0d0c ldr.w r4, [sl, 0x10] | r4 = *((sl + 0x10));
0x000a0d10 str r3, [sp, 0x64] | var_44h = r3;
0x000a0d12 strd r3, r3, [sp, 0x58] | __asm ("strd r3, r3, [var_38h_2]");
0x000a0d16 str r3, [sp, 0x60] | var_40h = r3;
0x000a0d18 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a0d1a str r3, [sp, 0x8c] | var_6ch = r3;
0x000a0d1c movs r3, 0 | r3 = 0;
0x000a0d1e str r3, [sp, 0x78] | var_78h = r3;
0x000a0d20 ldr r5, [r4] | r5 = *(r4);
0x000a0d22 str r3, [sp, 0x90] | var_90h = r3;
0x000a0d24 cmp r5, 5 |
| if (r5 == 5) {
0x000a0d26 beq.w 0xa0ff4 | goto label_26;
| }
0x000a0d2a ldr r7, [sp, 0x44] | r7 = var_44h;
0x000a0d2c add r6, sp, 0x78 | r6 += var_78h;
0x000a0d2e ldr.w r8, [sp, 0x4c] | r8 = var_4ch;
| do {
0x000a0d32 mov r3, r7 | r3 = r7;
0x000a0d34 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a0d36 mov r2, r8 | r2 = r8;
0x000a0d38 mov r1, r6 | r1 = r6;
0x000a0d3a bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a0d3e clz r3, r0 | r3 &= r0;
0x000a0d42 cmp r5, 2 |
0x000a0d44 lsr.w r3, r3, 5 | r3 >>= 5;
0x000a0d48 it eq |
| if (r5 != 2) {
0x000a0d4a moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000a0d4c cbz r3, 0xa0d60 | goto label_27;
| }
0x000a0d4e ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000a0d50 ldr r5, [r4] | r5 = *(r4);
0x000a0d52 cmp r5, 5 |
0x000a0d54 bne 0xa0d32 |
| } while (r5 != 5);
0x000a0d56 ldr r1, [sp, 0x78] | r1 = var_78h;
| label_12:
0x000a0d58 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000a0d5a mov r0, r4 | r0 = r4;
0x000a0d5c bl 0xa0a80 | r0 = void (*0xa0a80)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_27:
0x000a0d60 cmp r0, 0 |
| if (r0 != 0) {
0x000a0d62 bne.w 0xa1006 | goto label_28;
| }
0x000a0d66 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a0d68 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000a0d6c adds r3, 1 | r3++;
0x000a0d6e mov r1, r3 | r1 = r3;
0x000a0d70 mov r5, r3 | r5 = r3;
0x000a0d72 str r3, [sp, 0x48] | var_28h = r3;
0x000a0d74 blx 0x8148 | r0 = fcn_00008148 ();
0x000a0d78 mov r4, r0 | r4 = r0;
0x000a0d7a mov r1, r5 | r1 = r5;
0x000a0d7c ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000a0d80 blx 0x82f4 | fcn_000082f4 ();
0x000a0d84 cmp r4, 0 |
| if (r4 != 0) {
0x000a0d86 bne 0xa0e44 | goto label_29;
| }
0x000a0d88 ldr.w r0, [sl, 0xc] | r0 = *((sl + 0xc));
0x000a0d8c mov r1, r5 | r1 = r5;
0x000a0d8e blx 0x858c | r0 = fcn_0000858c ();
0x000a0d92 cmp r0, 5 |
| if (r0 != 5) {
0x000a0d94 beq 0xa0dca |
0x000a0d96 ldr r4, [sp, 0x38] | r4 = var_18h;
0x000a0d98 movs r1, 7 | r1 = 7;
| label_9:
0x000a0d9a ldr r0, [sp, 0xa0] | r0 = var_80h;
0x000a0d9c str r1, [sp, 0x14] | var_14h = r1;
0x000a0d9e blx 0x8404 | fcn_00008404 ();
0x000a0da2 ldr r6, [sp, 0x28] | r6 = var_28h;
0x000a0da4 ldr.w r0, [r6, 0xfc] | r0 = *((r6 + 0xfc));
0x000a0da8 blx 0x8b04 | fcn_00008b04 ();
0x000a0dac movs r3, 0 | r3 = 0;
0x000a0dae ldr r5, [sp, 0x68] | r5 = var_68h;
0x000a0db0 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000a0db2 str.w r3, [r6, 0xfc] | __asm ("str.w r3, [r6, 0xfc]");
0x000a0db6 b 0xa0e36 | goto label_11;
| label_8:
0x000a0db8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a0dba ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x000a0dbc cmp r3, 0 |
| if (r3 == 0) {
0x000a0dbe beq.w 0xa0ffe | goto label_30;
| }
| label_6:
0x000a0dc2 ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000a0dc6 mov r0, sb | r0 = sb;
0x000a0dc8 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x000a0dca ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a0dcc ldr r2, [sp, 0x48] | r2 = var_28h;
0x000a0dce ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000a0dd0 cmp r2, r3 |
| if (r2 < r3) {
0x000a0dd2 bge 0xa0dda |
0x000a0dd4 ldr r3, [sp, 0x48] | r3 = var_28h;
0x000a0dd6 str r3, [sp, 0x20] | var_20h = r3;
0x000a0dd8 b 0xa0d0a | goto label_3;
| }
0x000a0dda ldrd r7, r6, [sp, 0x68] | __asm ("ldrd r7, r6, [var_68h]");
0x000a0dde ldr r4, [sp, 0x38] | r4 = var_18h;
0x000a0de0 ldr r5, [sp, 0xa0] | r5 = var_80h;
0x000a0de2 subs r6, 1 | r6--;
| label_25:
0x000a0de4 mov r0, r5 | r0 = r5;
0x000a0de6 blx 0x8404 | fcn_00008404 ();
0x000a0dea ldr r5, [sp, 0x28] | r5 = var_28h;
0x000a0dec ldr.w r0, [r5, 0xfc] | r0 = *((r5 + 0xfc));
0x000a0df0 blx 0x8b04 | fcn_00008b04 ();
0x000a0df4 mov r0, r4 | r0 = r4;
0x000a0df6 movs r4, 0 | r4 = 0;
0x000a0df8 str.w r4, [r5, 0xfc] | __asm ("str.w r4, [r5, 0xfc]");
0x000a0dfc mov r2, r6 | r2 = r6;
0x000a0dfe ldr r4, [sp, 0x18] | r4 = var_18h;
0x000a0e00 mov r1, r7 | r1 = r7;
0x000a0e02 ldr r3, [pc, 0x238] | r3 = *(0xa103e);
0x000a0e04 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x000a0e06 str r3, [sp, 0x14] | var_14h = r3;
0x000a0e08 blx 0x82c0 | fcn_000082c0 ();
0x000a0e0c b 0xa0bb8 | goto label_4;
| label_23:
0x000a0e0e str r3, [sp, 0x1c] | var_1ch = r3;
0x000a0e10 ldr r3, [sp, 0x80] | r3 = var_80h;
0x000a0e12 str r0, [sp, 0x14] | var_14h = r0;
0x000a0e14 str r3, [sp, 0x34] | var_14h = r3;
0x000a0e16 cmp r0, 0 |
| if (r0 == 0) {
0x000a0e18 beq.w 0xa0caa | goto label_5;
| }
0x000a0e1c ldr r0, [sp, 0xa0] | r0 = var_80h;
0x000a0e1e blx 0x8404 | fcn_00008404 ();
0x000a0e22 ldr r6, [sp, 0x28] | r6 = var_28h;
0x000a0e24 ldr.w r0, [r6, 0xfc] | r0 = *((r6 + 0xfc));
0x000a0e28 blx 0x8b04 | fcn_00008b04 ();
0x000a0e2c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a0e2e ldr r1, [sp, 0x14] | r1 = var_14h;
0x000a0e30 mov r5, r3 | r5 = r3;
0x000a0e32 str.w r3, [r6, 0xfc] | __asm ("str.w r3, [r6, 0xfc]");
| label_11:
0x000a0e36 mov r0, r4 | r0 = r4;
0x000a0e38 blx 0x86c0 | fcn_000086c0 ();
0x000a0e3c mov r0, r5 | r0 = r5;
0x000a0e3e blx 0x8404 | fcn_00008404 ();
0x000a0e42 b 0xa0bb8 | goto label_4;
| label_29:
0x000a0e44 mov r3, r0 | r3 = r0;
0x000a0e46 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a0e48 mov r2, r4 | r2 = r4;
0x000a0e4a add r4, sp, 0x50 | r4 += var_30h;
0x000a0e4c ldr.w r1, [sl, 0x14] | r1 = *((sl + 0x14));
0x000a0e50 ldr r0, [r0, 0x24] | r0 = *((r0 + 0x24));
0x000a0e52 str r4, [sp] | *(sp) = r4;
0x000a0e54 str r0, [sp, 0x14] | var_14h = r0;
0x000a0e56 bl 0xba70 | r0 = fcn_0000ba70 (r0, r1, r2, r3, r4);
0x000a0e5a cmp r0, 0 |
| if (r0 != 0) {
0x000a0e5c bne.w 0xa1006 | goto label_28;
| }
0x000a0e60 ldr.w sb, [sp, 0x50] | sb = var_30h;
0x000a0e64 add r5, sp, 0x58 | r5 += var_38h_2;
0x000a0e66 add.w r8, sp, 0x54 | r8 += var_34h_2;
0x000a0e6a add r7, sp, 0x64 | r7 += var_44h;
0x000a0e6c add r6, sp, 0x60 | r6 += var_40h;
0x000a0e6e add r3, sp, 0x5c | r3 += var_5ch;
0x000a0e70 str r7, [sp, 4] | var_4h_3 = r7;
0x000a0e72 mov r2, r5 | r2 = r5;
0x000a0e74 str r6, [sp] | *(sp) = r6;
0x000a0e76 mov r1, r8 | r1 = r8;
0x000a0e78 ldr.w r4, [fp, 0x14] | r4 = *(arg_14h);
0x000a0e7c mov r0, sb | r0 = sb;
0x000a0e7e str r3, [sp, 0x24] | var_4h_3 = r3;
0x000a0e80 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000a0e82 cmp r0, 0 |
| if (r0 != 0) {
0x000a0e84 bne 0xa0f48 | goto label_31;
| }
0x000a0e86 ldr r3, [sp, 0x34] | r3 = var_14h;
0x000a0e88 cmp r3, 0 |
0x000a0e8a itt gt |
| if (r3 <= 0) {
0x000a0e8c strgt sl, [sp, 0x2c] | var_2ch = sl;
| }
| if (r3 <= 0) {
0x000a0e90 mov sl, r8 | sl = r8;
| goto label_32;
| }
| if (r3 <= 0) {
| label_32:
0x000a0e92 ble 0xa0dc2 | goto label_6;
| }
| label_7:
0x000a0e94 ldr r0, [sp, 0xa0] | r0 = var_80h;
0x000a0e96 mov.w r8, 0 | r8 = 0;
0x000a0e9a ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a0e9c mvn r4, 0x80000000 | r4 = ~0x80000000;
0x000a0ea0 add.w ip, r3, r0 |
| do {
0x000a0ea4 ldr r3, [r0] | r3 = *(r0);
| if (r3 != 0) {
0x000a0ea6 cbz r3, 0xa0ec2 |
0x000a0ea8 ldr r2, [r0, 8] | r2 = *((r0 + 8));
0x000a0eaa ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000a0eac ldr r1, [r0, 0x14] | r1 = *((r0 + 0x14));
0x000a0eae subs r3, r2, r3 | r3 = r2 - r3;
0x000a0eb0 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x000a0eb2 sbc.w r2, r2, r1 | __asm ("sbc.w r2, r2, r1");
0x000a0eb6 asrs r1, r4, 0x1f | r1 = r4 >> 0x1f;
0x000a0eb8 cmp r3, r4 |
0x000a0eba sbcs r2, r1 | __asm ("sbcs r2, r1");
0x000a0ebc itt lt |
| if (r3 >= r4) {
0x000a0ebe movlt r4, r3 | r4 = r3;
| }
| if (r3 < r4) {
0x000a0ec0 movlt r8, r0 | r8 = r0;
| goto label_33;
| }
| }
| label_33:
0x000a0ec2 adds r0, 0x18 | r0 += 0x18;
0x000a0ec4 cmp ip, r0 |
0x000a0ec6 bne 0xa0ea4 |
| } while (ip != r0);
0x000a0ec8 cmp.w r8, 0 |
| if (r8 == 0) {
0x000a0ecc beq.w 0xa0ff8 | goto label_34;
| }
0x000a0ed0 ldr.w r3, [r8] | r3 = *(r8);
0x000a0ed4 ldrb r2, [r3] | r2 = *(r3);
0x000a0ed6 cmp r2, 1 |
| if (r2 > 1) {
0x000a0ed8 bhi 0xa0f6c | goto label_35;
| }
0x000a0eda movs r3, 0 | r3 = 0;
0x000a0edc str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x000a0ee0 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x000a0ee4 str r4, [sp, 0x14] | var_14h = r4;
0x000a0ee6 ldr.w r8, [sp, 0x24] | r8 = var_4h_3;
0x000a0eea b 0xa0f00 |
| while (r3 < r2) {
0x000a0eec strd r6, r7, [sp] | __asm ("strd r6, r7, [sp]");
0x000a0ef0 mov r3, r8 | r3 = r8;
0x000a0ef2 ldr.w r4, [fp, 0x14] | r4 = *(arg_14h);
0x000a0ef6 mov r2, r5 | r2 = r5;
0x000a0ef8 mov r1, sl | r1 = sl;
0x000a0efa mov r0, sb | r0 = sb;
0x000a0efc blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 != 0) {
0x000a0efe cbnz r0, 0xa0f50 | goto label_36;
| }
| label_10:
0x000a0f00 ldr r3, [sp, 0x64] | r3 = var_44h;
0x000a0f02 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000a0f04 cmp r3, r2 |
0x000a0f06 blt 0xa0eec |
| }
0x000a0f08 ldr.w r8, [sp, 0x1c] | r8 = var_1ch;
0x000a0f0c add r4, sp, 0xac | r4 += var_8ch;
0x000a0f0e ldr r3, [sp, 0xa0] | r3 = var_80h;
0x000a0f10 mov r1, r4 | r1 = r4;
0x000a0f12 ldr r2, [sp, 0x40] | r2 = var_20h;
0x000a0f14 movs r0, 0x40 | r0 = 0x40;
0x000a0f16 sub.w r3, r8, r3 | r3 = r8 - r3;
0x000a0f1a asrs r3, r3, 3 | r3 >>= 3;
0x000a0f1c mul r3, r2, r3 | r3 = r2 * r3;
0x000a0f20 ldr r2, [sp, 0x5c] | r2 = var_5ch;
0x000a0f22 str r2, [sp, 4] | var_4h_3 = r2;
0x000a0f24 str r3, [sp] | *(sp) = r3;
0x000a0f26 ldr r3, [sp, 0x60] | r3 = var_40h;
0x000a0f28 subs r3, r3, r2 | r3 -= r2;
0x000a0f2a ldr r2, [sp, 0x3c] | r2 = var_1ch;
0x000a0f2c str r3, [sp, 8] | var_8h = r3;
0x000a0f2e ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a0f30 blx 0x8968 | fcn_00008968 ();
0x000a0f34 mov r1, r4 | r1 = r4;
0x000a0f36 mov.w r2, -1 | r2 = -1;
0x000a0f3a add r0, sp, 0x68 | r0 += var_68h;
0x000a0f3c bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a0f40 cmp r0, 0 |
| if (r0 == 0) {
0x000a0f42 beq 0xa0e94 | goto label_7;
| }
0x000a0f44 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
| label_31:
0x000a0f48 cmp r0, 0x65 |
| if (r0 == 0x65) {
0x000a0f4a beq.w 0xa0dc2 | goto label_6;
| }
0x000a0f4e b 0xa0f5a | goto label_37;
| label_36:
0x000a0f50 cmp r0, 0x65 |
0x000a0f52 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
| if (r0 == 0x65) {
0x000a0f56 beq.w 0xa0db8 | goto label_8;
| }
| label_37:
0x000a0f5a ldr r4, [sp, 0x38] | r4 = var_18h;
0x000a0f5c mov r1, r0 | r1 = r0;
| label_13:
0x000a0f5e ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000a0f62 mov r0, sb | r0 = sb;
0x000a0f64 str r1, [sp, 0x14] | var_14h = r1;
0x000a0f66 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x000a0f68 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000a0f6a b 0xa0d9a | goto label_9;
| label_35:
0x000a0f6c lsls r1, r2, 0x18 | r1 = r2 << 0x18;
0x000a0f6e it pl |
| if (r1 < r2) {
0x000a0f70 movpl r0, 1 | r0 = 1;
| }
0x000a0f72 bmi 0xa0f9e |
| while (1) {
0x000a0f74 add r3, r0 | r3 += r0;
0x000a0f76 subs r2, 2 | r2 -= 2;
0x000a0f78 str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x000a0f7c ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
0x000a0f80 str.w r8, [sp, 0x1c] | __asm ("str.w r8, [var_1ch]");
0x000a0f84 str r4, [sp, 0x14] | var_14h = r4;
0x000a0f86 adds r3, r3, r2 | r3 += r2;
0x000a0f88 str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
0x000a0f8c ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x000a0f90 adc.w r3, r3, r2, asr 31 | __asm ("adc.w r3, r3, r2, asr 31");
0x000a0f94 str.w r3, [r8, 0xc] | __asm ("str.w r3, [r8, 0xc]");
0x000a0f98 ldr.w r8, [sp, 0x24] | r8 = var_4h_3;
0x000a0f9c b 0xa0f00 | goto label_10;
0x000a0f9e mov r0, r3 | r0 = r3;
0x000a0fa0 add r1, sp, 0x78 | r1 += var_78h;
0x000a0fa2 str r3, [sp, 0x14] | var_14h = r3;
0x000a0fa4 bl 0xb698 | fcn_0000b698 (r0, r1);
0x000a0fa8 ldr r2, [sp, 0x78] | r2 = var_78h;
0x000a0faa ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a0fac b 0xa0f74 |
| }
| label_24:
0x000a0fae str r0, [sp, 0xa0] | var_80h = r0;
0x000a0fb0 blx 0x8404 | fcn_00008404 ();
0x000a0fb4 ldr r6, [sp, 0x28] | r6 = var_28h;
0x000a0fb6 movs r1, 7 | r1 = 7;
0x000a0fb8 str r1, [sp, 0x14] | var_14h = r1;
0x000a0fba ldr.w r0, [r6, 0xfc] | r0 = *((r6 + 0xfc));
0x000a0fbe blx 0x8b04 | fcn_00008b04 ();
0x000a0fc2 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000a0fc4 str.w r5, [r6, 0xfc] | __asm ("str.w r5, [r6, 0xfc]");
0x000a0fc8 b 0xa0e36 | goto label_11;
| label_21:
0x000a0fca ldr r1, [pc, 0x74] |
0x000a0fcc ldr r2, [pc, 0x44] | r2 = *(0xa1014);
0x000a0fce add r1, pc | r1 = 0x142014;
0x000a0fd0 ldr r2, [r1, r2] | r2 = imp.sinh;
0x000a0fd2 ldr r1, [r2] | r1 = imp.sinh;
0x000a0fd4 ldr r2, [sp, 0xec] | r2 = var_ech;
0x000a0fd6 eors r1, r2 | r1 ^= r2;
0x000a0fd8 mov.w r2, 0 | r2 = 0;
| if (r1 == r2) {
0x000a0fdc bne 0xa100c |
0x000a0fde ldr r1, [pc, 0x64] |
0x000a0fe0 mov r2, r3 | r2 = r3;
0x000a0fe2 mov r0, r4 | r0 = r4;
0x000a0fe4 add r1, pc | r1 = 0x14202e;
0x000a0fe6 add sp, 0xf4 |
0x000a0fe8 vpop {d8} | __asm ("vpop {d8}");
0x000a0fec pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a0ff0 b.w 0x82bc | void (*0x82bc)() ();
| label_26:
0x000a0ff4 movs r1, 0 | r1 = 0;
0x000a0ff6 b 0xa0d58 | goto label_12;
| label_34:
0x000a0ff8 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x000a0ffc b 0xa0dc2 | goto label_6;
| label_30:
0x000a0ffe ldr r4, [sp, 0x38] | r4 = var_18h;
0x000a1000 movw r1, 0x10b | r1 = 0x10b;
0x000a1004 b 0xa0f5e | goto label_13;
| label_28:
0x000a1006 ldr r4, [sp, 0x38] | r4 = var_18h;
0x000a1008 mov r1, r0 | r1 = r0;
0x000a100a b 0xa0d9a | goto label_9;
| }
| label_20:
0x000a100c blx 0x883c | fcn_0000883c ();
0x000a1010 strh r0, [r2, 8] | *((r2 + 8)) = r0;
0x000a1012 movs r2, r0 | r2 = r0;
0x000a1014 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a1016 movs r0, r0 |
0x000a1018 ldrb r2, [r0, r1] | r2 = *((r0 + r1));
0x000a101a movs r1, r0 | r1 = r0;
0x000a101c strh r4, [r6, 6] | *((r6 + 6)) = r4;
0x000a101e movs r2, r0 | r2 = r0;
0x000a1020 strh r0, [r3, 6] | *((r3 + 6)) = r0;
0x000a1022 movs r2, r0 | r2 = r0;
0x000a1024 subs r7, 0x78 | r7 -= 0x78;
0x000a1026 movs r1, r0 | r1 = r0;
0x000a1028 str r2, [r1, 0x50] | *((r1 + 0x50)) = r2;
0x000a102a movs r1, r0 | r1 = r0;
0x000a102c strh r6, [r2, 4] | *((r2 + 4)) = r6;
0x000a102e movs r2, r0 | r2 = r0;
| if (r7 != 0) {
0x000a1030 cbz r7, 0xa1036 |
0x000a1032 invalid |
| }
0x000a1036 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa1048 */
| #include <stdint.h>
|
; (fcn) fcn.000a1048 () | void fcn_000a1048 (int16_t arg_1h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h_2;
| int16_t var_ch_2;
| arithmetic x;
| int16_t var_14h;
| int16_t var_18h;
| arithmetic var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| arithmetic var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| int16_t var_a8h;
| int32_t var_a8h_2;
| int16_t var_b0h;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c4h;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_d0h;
| int16_t var_d4h;
| int16_t var_d8h;
| int16_t var_dch;
| int16_t var_e0h;
| int16_t var_e4h;
| int16_t var_e8h;
| int16_t var_ech;
| int16_t var_f8h;
| int16_t var_fch;
| int16_t var_108h;
| int32_t var_108h_2;
| int16_t var_110h;
| int16_t var_114h;
| int16_t var_118h;
| int16_t var_11ch;
| int16_t var_120h;
| int16_t var_184h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| label_0:
0x00008794 bx pc | return void (*pc)() ();
0x000a1048 push {r4, r5, r6, lr} |
0x000a104a mov r3, r1 | r3 = r1;
0x000a104c ldr r4, [pc, 0x84] |
0x000a104e mov r1, r0 | r1 = r0;
0x000a1050 sub sp, 0x10 |
0x000a1052 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000a1056 ldr r0, [pc, 0x80] | r0 = *(0xa10da);
0x000a1058 mov ip, r2 |
0x000a105a add r4, pc | r4 = 0x142132;
0x000a105c ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x000a105e lsls r3, r3, 3 | r3 <<= 3;
0x000a1060 ldr r0, [r4, r0] |
0x000a1062 adds r5, r2, r3 | r5 = r2 + r3;
0x000a1064 ldr r0, [r0] | r0 = imp.sinh;
0x000a1066 str r0, [sp, 0xc] | var_ch = r0;
0x000a1068 mov.w r0, 0 | r0 = 0;
0x000a106c ldr r0, [r1, 0x14] | r0 = *((r1 + 0x14));
0x000a106e ldr r0, [r0, 0x40] | r0 = *((r0 + 0x40));
0x000a1070 str r0, [r2, r3] | *((r2 + r3)) = r0;
0x000a1072 add r3, sp, 4 | r3 += var_4h;
0x000a1074 ldrd r0, r2, [ip] | __asm ("ldrd r0, r2, [ip]");
0x000a1078 bl 0xa0524 | fcn_000a0524 (r0, r1, r2, r3, r4, r5, r6);
0x000a107c ldr r4, [sp, 4] | r4 = var_4h;
0x000a107e mov r6, r0 | r6 = r0;
| if (r4 == 0) {
0x000a1080 cbz r4, 0xa10a8 | goto label_39;
| }
0x000a1082 str r4, [r5, 4] | *((r5 + 4)) = r4;
0x000a1084 ldrb r3, [r4] | r3 = *(r4);
0x000a1086 lsls r2, r3, 0x18 | r2 = r3 << 0x18;
0x000a1088 it pl |
| if (r2 < r3) {
0x000a108a movpl r0, 1 | r0 = 1;
| }
0x000a108c bmi 0xa10c2 |
| while (1) {
0x000a108e subs r3, 2 | r3 -= 2;
0x000a1090 itett pl |
| if (r3 >= 2) {
0x000a1092 asrpl r2, r3, 0x1f | __asm ("asrpl r2, r3, 0x1f");
| }
| if (r3 < 2) {
0x000a1094 movwmi r6, 0x10b | __asm ("movwmi r6, aav.0x000000ff");
| }
| if (r3 < 2) {
0x000a1098 addpl r4, r4, r0 | r4 += r0;
| }
| if (r3 >= 2) {
0x000a109a str r4, [r5, 0x10] | *((r5 + 0x10)) = r4;
| }
0x000a109c ittt pl |
| if (r3 < 2) {
0x000a109e strpl r4, [r5, 0x20] | *((r5 + 0x20)) = r4;
| }
| if (r3 >= 2) {
0x000a10a0 strdpl r3, r2, [r5, 8] | __asm ("strdpl r3, r2, [r5, 8]");
| }
| if (r3 >= 2) {
0x000a10a4 strd r3, r2, [r5, 0x18] | __asm ("strd r3, r2, [r5, 0x18]");
| }
| label_39:
0x000a10a8 ldr r2, [pc, 0x30] |
0x000a10aa ldr r3, [pc, 0x2c] | r3 = *(0xa10da);
0x000a10ac add r2, pc | r2 = 0x14218c;
0x000a10ae ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a10b0 ldr r2, [r3] | r2 = imp.sinh;
0x000a10b2 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000a10b4 eors r2, r3 | r2 ^= r3;
0x000a10b6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a10ba bne 0xa10ce | goto label_40;
| }
0x000a10bc mov r0, r6 | r0 = r6;
0x000a10be add sp, 0x10 |
0x000a10c0 pop {r4, r5, r6, pc} |
0x000a10c2 add r1, sp, 8 | r1 += var_8h;
0x000a10c4 mov r0, r4 | r0 = r4;
0x000a10c6 bl 0xb698 | fcn_0000b698 (r0, r1);
0x000a10ca ldr r3, [sp, 8] | r3 = var_8h;
0x000a10cc b 0xa108e |
| }
| label_40:
0x000a10ce blx 0x883c | fcn_0000883c ();
0x000a10d2 nop |
0x000a10d4 ldrb r6, [r7, 0x10] | r6 = *((r7 + 0x10));
0x000a10d6 movs r2, r0 | r2 = r0;
0x000a10d8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a10da movs r0, r0 |
0x000a10dc ldrb r4, [r5, 0xf] | r4 = *((r5 + 0xf));
0x000a10de movs r2, r0 | r2 = r0;
0x000a10e0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a10e4 mov r5, r1 | r5 = r1;
0x000a10e6 ldr.w r1, [pc, 0xb98] | r1 = *(0x000a1c80);
0x000a10ea cmp r5, 6 |
0x000a10ec sub sp, 0x18c |
0x000a10ee ldr.w r3, [pc, 0xb94] |
0x000a10f2 add r1, pc | r1 += pc;
0x000a10f4 ldr.w r8, [pc, 0xb90] | r8 = *(0x000a1c88);
0x000a10f8 ldr r3, [r1, r3] | r3 = *((r1 + r3));
0x000a10fa add r8, pc | r8 += pc;
0x000a10fc ldr r3, [r3] | r3 = *(0xa1c86);
0x000a10fe str r3, [sp, 0x184] | var_184h = r3;
0x000a1100 mov.w r3, 0 | r3 = 0;
| if (r5 <= 6) {
0x000a1104 bgt 0xa1130 |
0x000a1106 ldr.w r1, [pc, 0xb84] |
0x000a110a mov r4, r0 | r4 = r0;
0x000a110c ldr r0, [r2] | r0 = *(r2);
0x000a110e mov r6, r2 | r6 = r2;
0x000a1110 add r1, pc | r1 = 0x142da2;
0x000a1112 blx 0x87b0 | fcn_000087b0 ();
0x000a1116 str r0, [sp, 0x44] | var_44h = r0;
0x000a1118 cmp r0, 0 |
| if (r0 == 0) {
0x000a111a beq.w 0xa1238 | goto label_41;
| }
0x000a111e subs r5, 2 | r5 -= 2;
0x000a1120 cmp r5, 4 |
| if (r5 > 4) {
0x000a1122 bhi.w 0xa127c | goto label_42;
| }
| /* switch table (5 cases) at 0xa112a */
0x000a1126 tbb [pc, r5] | __asm ("tbb aav.0x000000ff");
| }
0x000a1130 ldr.w r2, [pc, 0xb5c] |
0x000a1134 ldr.w r3, [pc, 0xb4c] | r3 = *(0xa1c84);
0x000a1138 add r2, pc | r2 = 0x142dcc;
0x000a113a ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a113c ldr r2, [r3] | r2 = imp.sinh;
0x000a113e ldr r3, [sp, 0x184] | r3 = var_184h;
0x000a1140 eors r2, r3 | r2 ^= r3;
0x000a1142 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a1146 bne.w 0xa17f0 | goto label_26;
| }
0x000a114a ldr.w r1, [pc, 0xb48] | r1 = *(0x000a1c94);
0x000a114e mov.w r2, -1 | r2 = -1;
0x000a1152 add r1, pc | r1 += pc;
0x000a1154 add sp, 0x18c |
0x000a1156 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a1158 ldr r7, [pc, 0x3c0] | r7 = *(0xa151c);
0x000a115a b.w 0x8794 | goto label_0;
0x000a115e movs r5, 0xf | r5 = 0xf;
| label_3:
0x000a1160 ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x000a1162 blx 0x828c | loc_imp_gmon_start_ ();
0x000a1166 str r0, [sp, 0x48] | var_48h = r0;
| label_2:
0x000a1168 ldr r0, [r6, 0xc] | r0 = *((r6 + 0xc));
0x000a116a blx 0x82e8 | r0 = fcn_000082e8 ();
0x000a116e clz r7, r0 | r7 &= r0;
0x000a1172 str r0, [sp, 0x58] | var_58h = r0;
0x000a1174 lsrs r7, r7, 5 | r7 >>= 5;
| label_1:
0x000a1176 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x000a1178 blx 0x82e8 | r0 = fcn_000082e8 ();
0x000a117c cmp r0, 0 |
0x000a117e it eq |
| if (r0 != 0) {
0x000a1180 orreq r7, r7, 1 | r7 |= 1;
| }
0x000a1184 str r0, [sp, 0x68] | var_68h = r0;
| do {
0x000a1186 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000a1188 blx 0x82e8 | r0 = fcn_000082e8 ();
0x000a118c cmp r0, 0 |
0x000a118e it eq |
| if (r0 != 0) {
0x000a1190 orreq r7, r7, 1 | r7 |= 1;
| }
0x000a1194 str r0, [sp, 0x80] | var_80h = r0;
| if (r7 == 0) {
0x000a1196 cbz r7, 0xa1202 | goto label_43;
| }
0x000a1198 ldr.w r2, [pc, 0xafc] |
0x000a119c ldr.w r3, [pc, 0xae4] | r3 = *(0xa1c84);
0x000a11a0 add r2, pc | r2 = 0x142e3c;
0x000a11a2 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a11a4 ldr r2, [r3] | r2 = imp.sinh;
0x000a11a6 ldr r3, [sp, 0x184] | r3 = var_184h;
0x000a11a8 eors r2, r3 | r2 ^= r3;
0x000a11aa mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a11ae bne.w 0xa17f0 | goto label_26;
| }
0x000a11b2 mov r0, r4 | r0 = r4;
0x000a11b4 add sp, 0x18c |
0x000a11b6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a11ba b.w 0x81e4 | void (*0x81e4)() ();
0x000a11be ldr.w r3, [pc, 0xadc] | r3 = *(0x000a1c9c);
0x000a11c2 movs r7, 0 | r7 = 0;
0x000a11c4 movs r5, 0xf | r5 = 0xf;
0x000a11c6 add r3, pc | r3 += pc;
0x000a11c8 str r3, [sp, 0x58] | var_58h = r3;
0x000a11ca ldr.w r3, [pc, 0xad4] | r3 = *(0x000a1ca0);
0x000a11ce add r3, pc | r3 += pc;
0x000a11d0 str r3, [sp, 0x68] | var_68h = r3;
0x000a11d2 mov.w r3, -1 | r3 = -1;
0x000a11d6 str r3, [sp, 0x48] | var_48h = r3;
0x000a11d8 b 0xa1186 |
| } while (1);
0x000a11da ldr.w r3, [pc, 0xac8] | r3 = *(0x000a1ca4);
0x000a11de movs r7, 0 | r7 = 0;
0x000a11e0 movs r5, 0xf | r5 = 0xf;
0x000a11e2 add r3, pc | r3 += pc;
0x000a11e4 str r3, [sp, 0x58] | var_58h = r3;
0x000a11e6 mov.w r3, -1 | r3 = -1;
0x000a11ea str r3, [sp, 0x48] | var_48h = r3;
0x000a11ec b 0xa1176 | goto label_1;
0x000a11ee mov.w r3, -1 | r3 = -1;
0x000a11f2 movs r5, 0xf | r5 = 0xf;
0x000a11f4 str r3, [sp, 0x48] | var_48h = r3;
0x000a11f6 b 0xa1168 | goto label_2;
0x000a11f8 ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x000a11fa blx 0x828c | r0 = loc_imp_gmon_start_ ();
0x000a11fe mov r5, r0 | r5 = r0;
0x000a1200 b 0xa1160 | goto label_3;
| label_43:
0x000a1202 cmp r5, 0 |
| if (r5 == 0) {
0x000a1204 bne 0xa129c |
0x000a1206 ldr.w r2, [pc, 0xaa0] | r2 = *(0x000a1ca8);
0x000a120a ldr.w r3, [pc, 0xa78] | r3 = *(0xa1c86);
0x000a120e add r2, pc | r2 += pc;
0x000a1210 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a1212 ldr r2, [r3] | r2 = *(0xa1c86);
0x000a1214 ldr r3, [sp, 0x184] | r3 = var_184h;
0x000a1216 eors r2, r3 | r2 ^= r3;
0x000a1218 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a121c bne.w 0xa17f0 | goto label_26;
| }
0x000a1220 ldr.w r1, [pc, 0xa88] |
0x000a1224 mov r3, r5 | r3 = r5;
0x000a1226 mov.w r2, -1 | r2 = -1;
0x000a122a mov r0, r4 | r0 = r4;
0x000a122c add r1, pc | r1 = 0x142edc;
| label_21:
0x000a122e add sp, 0x18c |
0x000a1230 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a1234 b.w 0x82bc | void (*0x82bc)() ();
| label_41:
0x000a1238 ldr.w r1, [pc, 0xa74] |
0x000a123c ldr.w r0, [pc, 0xa74] | r0 = *(0x000a1cb4);
0x000a1240 add r1, pc | r1 = 0x142ef4;
0x000a1242 add r0, pc | r0 += pc;
0x000a1244 blx 0x8644 | fcn_00008644 ();
0x000a1248 mov.w r2, -1 | r2 = -1;
0x000a124c mov r1, r0 | r1 = r0;
0x000a124e mov r5, r0 | r5 = r0;
0x000a1250 mov r0, r4 | r0 = r4;
0x000a1252 blx 0x8798 | fcn_00008798 ();
0x000a1256 ldr.w r2, [pc, 0xa60] | r2 = *(0x000a1cb8);
0x000a125a ldr.w r3, [pc, 0xa28] | r3 = *(0xa1c86);
0x000a125e add r2, pc | r2 += pc;
0x000a1260 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a1262 ldr r2, [r3] | r2 = *(0xa1c86);
0x000a1264 ldr r3, [sp, 0x184] | r3 = var_184h;
0x000a1266 eors r2, r3 | r2 ^= r3;
0x000a1268 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a126c bne.w 0xa17f0 | goto label_26;
| }
| label_14:
0x000a1270 mov r0, r5 | r0 = r5;
0x000a1272 add sp, 0x18c |
0x000a1274 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a1278 b.w 0x8400 | void (*0x8400)() ();
| label_42:
0x000a127c ldr.w r3, [pc, 0xa3c] | r3 = *(0x000a1cbc);
0x000a1280 movs r5, 0xf | r5 = 0xf;
0x000a1282 add r3, pc | r3 += pc;
0x000a1284 str r3, [sp, 0x58] | var_58h = r3;
0x000a1286 ldr.w r3, [pc, 0xa38] | r3 = *(0x000a1cc0);
0x000a128a add r3, pc | r3 += pc;
0x000a128c str r3, [sp, 0x68] | var_68h = r3;
0x000a128e mov.w r3, -1 | r3 = -1;
0x000a1292 str r3, [sp, 0x48] | var_48h = r3;
0x000a1294 ldr.w r3, [pc, 0xa2c] |
0x000a1298 add r3, pc | r3 = 0x142f60;
0x000a129a str r3, [sp, 0x80] | var_80h = r3;
| }
0x000a129c ldr r1, [sp, 0x44] | r1 = var_44h;
0x000a129e mov r0, r4 | r0 = r4;
0x000a12a0 bl 0x88cd0 | fcn_00088cd0 (r0, r1);
0x000a12a4 str r0, [sp, 0x7c] | var_7ch = r0;
| if (r0 != 0) {
0x000a12a6 cbz r0, 0xa12c8 |
0x000a12a8 ldr.w r2, [pc, 0xa1c] |
0x000a12ac ldr.w r3, [pc, 0x9d4] | r3 = *(0xa1c84);
0x000a12b0 add r2, pc | r2 = 0x142f7c;
0x000a12b2 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a12b4 ldr r2, [r3] | r2 = imp.sinh;
0x000a12b6 ldr r3, [sp, 0x184] | r3 = var_184h;
0x000a12b8 eors r2, r3 | r2 ^= r3;
0x000a12ba mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a12be bne.w 0xa17f0 | goto label_26;
| }
0x000a12c2 add sp, 0x18c |
0x000a12c4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x000a12c8 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000a12ca add r2, sp, 0xec | r2 += var_ech;
0x000a12cc vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a12d0 str r0, [sp, 0xe8] | var_e8h = r0;
0x000a12d2 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000a12d4 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000a12d8 ldr r2, [r1] | r2 = *(r1);
0x000a12da str r2, [sp, 0x50] | var_50h = r2;
0x000a12dc cmp r3, 0 |
| if (r3 == 0) {
0x000a12de beq.w 0xa1844 | goto label_44;
| }
0x000a12e2 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000a12e4 cmp r5, 0x40 |
0x000a12e6 mov sl, r5 | sl = r5;
0x000a12e8 it ge |
| if (r5 < 0x40) {
0x000a12ea movge sl, 0x40 | sl = 0x40;
| }
0x000a12ee mov r7, r4 | r7 = r4;
0x000a12f0 str.w r8, [sp, 0x9c] | __asm ("str.w r8, [var_9ch]");
0x000a12f4 ldr r6, [r3, 0x18] | r6 = *((r3 + 0x18));
0x000a12f6 mov.w fp, 1 |
0x000a12fa ldr.w r3, [pc, 0x9d0] | r3 = *(0x000a1ccc);
0x000a12fe mov r8, r5 | r8 = r5;
0x000a1300 add r3, pc | r3 += pc;
0x000a1302 str r3, [sp, 0xa4] | var_a4h = r3;
0x000a1304 mvn r3, 0x3f | r3 = ~0x3f;
0x000a1308 cmp sl, r3 |
0x000a130a it lt |
| if (sl >= r3) {
0x000a130c movlt sl, r3 | sl = r3;
| }
0x000a130e add r3, sp, 0x120 | r3 += var_120h;
0x000a1310 mov r4, r3 | r4 = r3;
| label_12:
0x000a1312 cmp.w r8, 0 |
0x000a1316 itt lt |
| if (r8 < 0) {
0x000a1318 rsblt r3, sl, 0 | __asm ("rsblt r3, sl, 0");
| }
| if (r8 < 0) {
0x000a131c str r3, [sp, 0x54] | var_54h = r3;
| }
| if (r8 >= 0) {
0x000a131e blt 0xa132e |
0x000a1320 add.w r0, sl, -1 | r0 = sl + -1;
0x000a1324 mov r1, fp | r1 = fp;
0x000a1326 add r0, fp | r0 += fp;
0x000a1328 bl 0xb1ea8 | fcn_000b1ea8 (r0, r1);
0x000a132c str r0, [sp, 0x54] | var_54h = r0;
| }
0x000a132e add.w r3, fp, fp, lsl 1 | r3 = fp + (fp << 1);
0x000a1332 ldr.w lr, [sp, 0x7c] | lr = var_7ch;
0x000a1336 mov ip, r4 |
0x000a1338 strd r8, sl, [sp, 0xa8] | __asm ("strd r8, sl, [var_a8h]");
0x000a133c add.w sb, r4, r3, lsl 3 | sb = r4 + (r3 << 3);
0x000a1340 movs r3, 0 | r3 = 0;
0x000a1342 str r3, [sp, 0x70] | var_70h = r3;
0x000a1344 str r3, [sp, 0x74] | var_74h = r3;
0x000a1346 mov r1, sb | r1 = sb;
0x000a1348 strd r3, r3, [sp, 0x28] | __asm ("strd r3, r3, [var_28h]");
0x000a134c ldr r3, [sp, 0x48] | r3 = var_48h;
0x000a134e str.w fp, [sp, 0xb0] | __asm ("str.w fp, [var_b0h]");
0x000a1352 str r4, [sp, 0xb4] | var_b4h = r4;
0x000a1354 mvns r3, r3 | r3 = ~r3;
0x000a1356 str r4, [sp, 0xb8] | var_b8h = r4;
0x000a1358 lsrs r3, r3, 0x1f | r3 >>= 0x1f;
0x000a135a str r3, [sp, 0x5c] | var_5ch = r3;
| label_11:
0x000a135c cmp r6, 0 |
0x000a135e strd lr, lr, [ip] | __asm ("strd lr, lr, [ip]");
0x000a1362 strd lr, lr, [ip, 8] | __asm ("strd lr, lr, [ip, 8]");
0x000a1366 strd lr, lr, [ip, 0x10] | __asm ("strd lr, lr, [ip, 0x10]");
| if (r6 <= 0) {
0x000a136a ble.w 0xa1762 | goto label_45;
| }
0x000a136e movs r3, 0 | r3 = 0;
0x000a1370 mov.w fp, 1 |
0x000a1374 mov sb, r3 | sb = r3;
0x000a1376 mov.w r2, -1 | r2 = -1;
0x000a137a str r2, [sp, 0x6c] | var_6ch = r2;
0x000a137c str.w lr, [sp, 0x60] | __asm ("str.w lr, [var_60h]");
0x000a1380 str r1, [sp, 0xbc] | var_bch = r1;
0x000a1382 str.w ip, [sp, 0xa0] | __asm ("str.w ip, [var_a0h]");
0x000a1386 str r7, [sp, 0x64] | var_64h = r7;
| label_10:
0x000a1388 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000a138a ldr r2, [sp, 0x48] | r2 = var_48h;
0x000a138c cmp r2, sb |
0x000a138e ite eq |
| if (r2 != sb) {
0x000a1390 moveq r3, 0 | r3 = 0;
| }
| if (r2 == sb) {
0x000a1392 andne r3, r3, 1 | r3 &= 1;
| }
0x000a1396 cmp r3, 0 |
| if (r3 != 0) {
0x000a1398 bne.w 0xa174c | goto label_46;
| }
0x000a139c ldr r2, [sp, 0x44] | r2 = var_44h;
0x000a139e add.w sl, sp, 0x108 | sl += var_108h;
0x000a13a2 strd r3, r3, [sp, 0x108] | __asm ("strd r3, r3, [var_108h]");
0x000a13a6 strd r3, r3, [sp, 0x110] | __asm ("strd r3, r3, [var_110h]");
0x000a13aa strd r3, r3, [sp, 0x118] | __asm ("strd r3, r3, [var_118h]");
0x000a13ae vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a13b2 ldr r4, [r2, 0x10] | r4 = *((r2 + 0x10));
0x000a13b4 str r3, [sp, 0xe4] | var_e4h = r3;
0x000a13b6 add r3, sp, 0xfc | r3 += var_fch;
0x000a13b8 str r2, [sp, 0xf8] | var_f8h = r2;
0x000a13ba vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000a13be ldr r5, [r4] | r5 = *(r4);
0x000a13c0 cmp r5, 5 |
| if (r5 == 5) {
0x000a13c2 beq.w 0xa1828 | goto label_47;
| }
0x000a13c6 ldr.w r8, [pc, 0x908] | r8 = *(0x000a1cd0);
0x000a13ca add r6, sp, 0xf8 | r6 += var_f8h;
0x000a13cc add r7, sp, 0xe4 | r7 += var_e4h;
0x000a13ce add r8, pc | r8 += pc;
| do {
0x000a13d0 mov r3, r6 | r3 = r6;
0x000a13d2 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a13d4 mov r2, r8 | r2 = r8;
0x000a13d6 mov r1, r7 | r1 = r7;
0x000a13d8 bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a13dc clz r3, r0 | r3 &= r0;
0x000a13e0 cmp r5, 2 |
0x000a13e2 lsr.w r3, r3, 5 | r3 >>= 5;
0x000a13e6 it eq |
| if (r5 != 2) {
0x000a13e8 moveq r3, 0 | r3 = 0;
| }
0x000a13ea cmp r3, 0 |
| if (r3 == 0) {
0x000a13ec beq.w 0xa17b4 | goto label_48;
| }
0x000a13f0 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000a13f2 ldr r5, [r4] | r5 = *(r4);
0x000a13f4 cmp r5, 5 |
0x000a13f6 bne 0xa13d0 |
| } while (r5 != 5);
0x000a13f8 ldr r7, [sp, 0xfc] | r7 = var_fch;
0x000a13fa adds r7, 1 | r7++;
0x000a13fc add.w r5, r7, r7, lsl 2 | r5 = r7 + (r7 << 2);
0x000a1400 lsls r5, r5, 3 | r5 <<= 3;
0x000a1402 mov r0, r5 | r0 = r5;
| label_18:
0x000a1404 movs r1, 0 | r1 = 0;
0x000a1406 blx 0x8240 | r0 = fcn_00008240 ();
0x000a140a mov r4, r0 | r4 = r0;
0x000a140c cmp r0, 0 |
| if (r0 == 0) {
0x000a140e beq.w 0xa17fc | goto label_49;
| }
0x000a1412 mov r2, r5 | r2 = r5;
0x000a1414 movs r1, 0 | r1 = 0;
0x000a1416 blx 0x839c | fcn_0000839c ();
0x000a141a ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a141c str r4, [sp, 0x118] | var_118h = r4;
0x000a141e ldr r2, [sp, 0x54] | r2 = var_54h;
0x000a1420 ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
0x000a1422 strd r3, sb, [sp, 0x108] | __asm ("strd r3, sb, [var_108h]");
0x000a1426 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000a1428 strd r2, r7, [sp, 0x110] | __asm ("strd r2, r7, [var_110h]");
0x000a142c str r3, [sp, 0xf8] | var_f8h = r3;
0x000a142e mov.w r3, -1 | r3 = -1;
0x000a1432 ldr r5, [r4] | r5 = *(r4);
0x000a1434 str r3, [sp, 0x11c] | var_11ch = r3;
0x000a1436 cmp r5, 5 |
| if (r5 == 5) {
0x000a1438 beq.w 0xa1830 | goto label_50;
| }
0x000a143c ldr.w r8, [sp, 0xa4] | r8 = var_a4h;
0x000a1440 add r6, sp, 0xf8 | r6 += var_f8h;
| do {
0x000a1442 mov r3, sl | r3 = sl;
0x000a1444 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a1446 mov r2, r8 | r2 = r8;
0x000a1448 mov r1, r6 | r1 = r6;
0x000a144a bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a144e clz r3, r0 | r3 &= r0;
0x000a1452 cmp r5, 2 |
0x000a1454 lsr.w r3, r3, 5 | r3 >>= 5;
0x000a1458 it eq |
| if (r5 != 2) {
0x000a145a moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000a145c cbz r3, 0xa1470 | goto label_51;
| }
0x000a145e ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000a1460 ldr r5, [r4] | r5 = *(r4);
0x000a1462 cmp r5, 5 |
0x000a1464 bne 0xa1442 |
| } while (r5 != 5);
0x000a1466 ldr r1, [sp, 0xf8] | r1 = var_f8h;
| label_19:
0x000a1468 mov r2, sl | r2 = sl;
0x000a146a mov r0, r4 | r0 = r4;
0x000a146c bl 0xa1048 | r0 = fcn_000a1048 (r0, r1, r2, r3);
| label_51:
0x000a1470 cmp r0, 0 |
| if (r0 != 0) {
0x000a1472 bne.w 0xa1804 | goto label_52;
| }
0x000a1476 cmp r7, 0 |
0x000a1478 it le |
| if (r7 > 0) {
0x000a147a ldrle r0, [sp, 0x118] | r0 = var_118h;
| }
| if (r7 <= 0) {
0x000a147c ble 0xa14b8 | goto label_53;
| }
0x000a147e mov r3, r0 | r3 = r0;
0x000a1480 ldr r0, [sp, 0x118] | r0 = var_118h;
0x000a1482 ldrd r6, ip, [sp, 0x70] | __asm ("ldrd r6, ip, [var_70h]");
0x000a1486 mov r4, r0 | r4 = r0;
| do {
0x000a1488 ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
| if (r2 != 0) {
0x000a148a cbz r2, 0xa14ac |
0x000a148c and r2, r3, 0x3f | r2 = r3 & 0x3f;
0x000a1490 sub.w r1, r2, 0x20 | r1 = r2 - 0x20;
0x000a1494 rsb.w r5, r2, 0x20 | r5 = 0x20 - r2;
0x000a1498 lsl.w r1, fp, r1 | r1 = fp << r1;
0x000a149c lsr.w r5, fp, r5 | r5 = fp >> r5;
0x000a14a0 lsl.w r2, fp, r2 | r2 = fp << r2;
0x000a14a4 orrs r1, r5 | r1 |= r5;
0x000a14a6 orr.w ip, r1, ip |
0x000a14aa orrs r6, r2 | r6 |= r2;
| }
0x000a14ac adds r3, 1 | r3++;
0x000a14ae adds r4, 0x28 | r4 += 0x28;
0x000a14b0 cmp r7, r3 |
0x000a14b2 bne 0xa1488 |
| } while (r7 != r3);
0x000a14b4 strd r6, ip, [sp, 0x70] | __asm ("strd r6, ip, [var_70h]");
| label_53:
0x000a14b8 ldr r2, [sp, 0x114] | r2 = var_114h;
0x000a14ba movs r3, 0 | r3 = 0;
0x000a14bc ldr r1, [sp, 0x11c] | r1 = var_11ch;
0x000a14be mov.w sl, -1 | sl = -1;
0x000a14c2 str r3, [sp, 0x84] | var_84h = r3;
0x000a14c4 strd r3, r3, [sp, 0x90] | __asm ("strd r3, r3, [var_90h]");
0x000a14c8 mov ip, r2 |
0x000a14ca strd r3, r3, [sp, 0x88] | __asm ("strd r3, r3, [var_88h]");
0x000a14ce add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x000a14d2 str r1, [sp, 0xc] | var_ch_2 = r1;
0x000a14d4 lsls r3, r3, 3 | r3 <<= 3;
0x000a14d6 str.w sb, [sp, 0x78] | __asm ("str.w sb, [var_78h]");
0x000a14da str.w sl, [sp, 0x4c] | __asm ("str.w sl, [var_4ch]");
0x000a14de str r3, [sp, 0x98] | var_98h = r3;
0x000a14e0 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000a14e2 cmp r3, 0 |
| if (r3 < 0) {
0x000a14e4 blt.w 0xa16d2 | goto label_54;
| }
| label_7:
0x000a14e8 cmp.w ip, 0 |
| if (ip <= 0) {
0x000a14ec ble.w 0xa1718 | goto label_55;
| }
| label_13:
0x000a14f0 ldr r3, [sp, 0x98] | r3 = var_98h;
0x000a14f2 mov r2, r0 | r2 = r0;
0x000a14f4 mvn r5, 0x80000000 | r5 = ~0x80000000;
0x000a14f8 adds r4, r0, r3 | r4 = r0 + r3;
| do {
0x000a14fa ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
| if (r3 != 0) {
0x000a14fc cbz r3, 0xa150e |
0x000a14fe ldrd r1, r6, [r2, 8] | __asm ("ldrd r1, r6, [r2, 8]");
0x000a1502 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x000a1504 cmp r1, r5 |
0x000a1506 sbcs.w r3, r6, r3 | __asm ("sbcs.w r3, r6, r3");
0x000a150a it lt |
| if (r1 < r5) {
0x000a150c movlt r5, r1 | r5 = r1;
| goto label_56;
| }
| }
| label_56:
0x000a150e adds r2, 0x28 | r2 += 0x28;
0x000a1510 cmp r2, r4 |
0x000a1512 bne 0xa14fa |
| } while (r2 != r4);
0x000a1514 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x000a1518 cmp r5, r3 |
| if (r5 == r3) {
0x000a151a beq.w 0xa1718 | goto label_55;
| }
0x000a151e ldr r3, [sp, 0x110] | r3 = var_110h;
0x000a1520 add.w r4, r0, 0x10 | r4 = r0 + 0x10;
0x000a1524 movs r6, 0 | r6 = 0;
0x000a1526 mov r8, ip | r8 = ip;
0x000a1528 subs r3, r5, r3 | r3 = r5 - r3;
0x000a152a adds r5, 1 | r5++;
0x000a152c adds r7, r3, 1 | r7 = r3 + 1;
0x000a152e str r7, [sp, 0xc] | var_ch_2 = r7;
0x000a1530 str r7, [sp, 0x11c] | var_11ch = r7;
| do {
0x000a1532 sub.w r1, r4, 8 | r1 = r4 - 8;
0x000a1536 mov r0, r4 | r0 = r4;
0x000a1538 mov r2, r5 | r2 = r5;
0x000a153a adds r6, 1 | r6++;
0x000a153c bl 0x14e10 | fcn_00014e10 (r0, r1, r2);
0x000a1540 add.w r1, r4, 8 | r1 = r4 + 8;
0x000a1544 add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x000a1548 mov r2, r7 | r2 = r7;
0x000a154a adds r4, 0x28 | r4 += 0x28;
0x000a154c bl 0x14e10 | fcn_00014e10 (r0, r1, r2);
0x000a1550 cmp r6, r8 |
0x000a1552 bne 0xa1532 |
| } while (r6 != r8);
0x000a1554 mov ip, r8 |
| label_8:
0x000a1556 ldr r2, [sp, 0xc] | r2 = var_ch_2;
0x000a1558 movs r3, 0 | r3 = 0;
0x000a155a ldr r1, [sp, 0x118] | r1 = var_118h;
0x000a155c mov sl, r3 | sl = r3;
0x000a155e str.w ip, [sp, 0x38] | __asm ("str.w ip, [var_38h]");
0x000a1562 mov sb, r3 | sb = r3;
0x000a1564 mov r8, r3 | r8 = r3;
0x000a1566 mov lr, r3 | lr = r3;
0x000a1568 asrs r2, r2, 0x1f | r2 >>= 0x1f;
0x000a156a mov ip, r1 |
0x000a156c mov r6, r3 | r6 = r3;
0x000a156e str r3, [sp, 0x18] | var_18h = r3;
0x000a1570 str r2, [sp, 0x24] | var_24h = r2;
0x000a1572 b 0xa1584 |
| while (r4 == 0) {
| label_4:
0x000a1574 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a1576 add.w lr, lr, 1 | lr++;
0x000a157a add.w ip, ip, 0x28 |
0x000a157e cmp lr, r3 |
| if (lr == r3) {
0x000a1580 beq.w 0xa16aa | goto label_57;
| }
| label_6:
0x000a1584 ldr.w r4, [ip, 0x20] | r4 = *((ip + 0x20));
0x000a1588 cmp r4, 0 |
0x000a158a beq 0xa1574 |
| }
0x000a158c ldr r3, [sp, 0x110] | r3 = var_110h;
0x000a158e ldr r1, [sp, 0xc] | r1 = var_ch_2;
0x000a1590 ldrd r7, r2, [ip, 0x18] | __asm ("ldrd r7, r2, [ip, 0x18]");
0x000a1594 adds r3, r1, r3 | r3 = r1 + r3;
0x000a1596 asrs r0, r3, 0x1f | r0 = r3 >> 0x1f;
0x000a1598 cmp r7, r3 |
0x000a159a str r3, [sp, 0x1c] | var_1ch = r3;
0x000a159c sbcs.w r3, r2, r0 | __asm ("sbcs.w r3, r2, r0");
0x000a15a0 str r0, [sp, 0x20] | var_20h = r0;
| if (r7 >= r3) {
0x000a15a2 bge 0xa1574 | goto label_4;
| }
0x000a15a4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a15a6 cmp r7, r1 |
0x000a15a8 str r2, [sp, 0x30] | var_30h = r2;
0x000a15aa sbcs.w r3, r2, r3 | __asm ("sbcs.w r3, r2, r3");
| if (r7 < r1) {
0x000a15ae blt 0xa1574 | goto label_4;
| }
0x000a15b0 and r3, lr, 0x3f | r3 = lr & 0x3f;
0x000a15b4 ldr.w r5, [ip] | r5 = *(ip);
0x000a15b8 sub.w r1, r3, 0x20 | r1 = r3 - 0x20;
0x000a15bc rsb.w r0, r3, 0x20 | r0 = 0x20 - r3;
0x000a15c0 lsl.w r2, fp, r1 | r2 = fp << r1;
0x000a15c4 lsr.w r0, fp, r0 | r0 = fp >> r0;
0x000a15c8 lsl.w r3, fp, r3 | r3 = fp << r3;
0x000a15cc strd lr, ip, [sp, 0x3c] | __asm ("strd lr, ip, [var_3ch]");
0x000a15d0 orrs r2, r0 | r2 |= r0;
0x000a15d2 str r2, [sp, 0x14] | var_14h = r2;
0x000a15d4 mov r2, sl | r2 = sl;
0x000a15d6 mov sl, r6 | sl = r6;
0x000a15d8 mov r6, r4 | r6 = r4;
0x000a15da ldr r4, [sp, 0x30] | r4 = var_30h;
0x000a15dc add r1, sp, 0xf8 | r1 += var_f8h;
0x000a15de str r3, [sp, 0x10] | x = r3;
0x000a15e0 str r1, [sp, 0x34] | var_34h = r1;
| label_5:
0x000a15e2 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000a15e4 sub.w lr, r7, r3 | lr = r7 - r3;
0x000a15e8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a15ea sub.w r0, lr, 0x20 | r0 = lr - 0x20;
0x000a15ee lsl.w r0, fp, r0 | r0 = fp << r0;
0x000a15f2 orr.w r1, r3, sl | r1 = r3 | sl;
0x000a15f6 ldr r3, [sp, 0x10] | r3 = x;
0x000a15f8 and.w ip, r1, r3 |
0x000a15fc rsb.w r3, lr, 0x20 | r3 = 0x20 - lr;
0x000a1600 lsr.w r3, fp, r3 | r3 = fp >> r3;
0x000a1604 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000a1606 lsl.w lr, fp, lr | lr = fp << lr;
0x000a160a orrs r0, r3 | r0 |= r3;
0x000a160c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000a160e orrs r3, r2 | r3 |= r2;
0x000a1610 ands r3, r1 | r3 &= r1;
0x000a1612 orrs.w r3, r3, ip | r3 |= ip;
0x000a1616 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a1618 ite ne |
| if (r3 == r3) {
0x000a161a addne r3, 1 | r3++;
| }
| if (r3 != r3) {
0x000a161c addeq r3, r3, 0x3e8 | r3 += 0x3e8;
| }
0x000a1620 str r3, [sp, 0x18] | var_18h = r3;
0x000a1622 cmp r5, 0 |
0x000a1624 ldr r3, [sp, 0x10] | r3 = x;
0x000a1626 orr.w sl, r3, sl | sl = r3 | sl;
0x000a162a ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a162c orr.w r2, r2, r3 | r2 |= r3;
| if (r5 <= 0) {
0x000a1630 ble 0xa1662 | goto label_58;
| }
0x000a1632 movs r3, 0 | r3 = 0;
| do {
0x000a1634 rsb.w ip, r3, 0x20 |
0x000a1638 lsr.w r1, lr, r3 | r1 = lr >> r3;
0x000a163c lsl.w ip, r0, ip |
0x000a1640 orr.w r1, r1, ip | r1 |= ip;
0x000a1644 sub.w ip, r3, 0x20 |
0x000a1648 lsr.w ip, r0, ip |
0x000a164c orr.w r1, r1, ip | r1 |= ip;
0x000a1650 orr.w sb, r1, sb | sb = r1 | sb;
0x000a1654 lsr.w r1, r0, r3 | r1 = r0 >> r3;
0x000a1658 adds r3, 1 | r3++;
0x000a165a cmp r3, r5 |
0x000a165c orr.w r8, r1, r8 | r8 = r1 | r8;
0x000a1660 bne 0xa1634 |
| } while (r3 != r5);
| label_58:
0x000a1662 ldrb r3, [r6] | r3 = *(r6);
0x000a1664 cmp r3, 1 |
| if (r3 < 1) {
0x000a1666 bls 0xa1692 | goto label_59;
| }
0x000a1668 lsls r0, r3, 0x18 | r0 = r3 << 0x18;
0x000a166a it pl |
| if (r0 < r3) {
0x000a166c movpl r0, 1 | r0 = 1;
| }
| if (r0 < r3) {
0x000a166e bmi 0xa1708 | goto label_60;
| }
| label_9:
0x000a1670 subs r3, 2 | r3 -= 2;
0x000a1672 add r6, r0 | r6 += r0;
0x000a1674 adds r7, r3, r7 | r7 = r3 + r7;
0x000a1676 adc.w r4, r4, r3, asr 31 | __asm ("adc.w r4, r4, r3, asr 31");
0x000a167a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a167c cmp r7, r3 |
0x000a167e ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a1680 sbcs.w r3, r4, r3 | __asm ("sbcs.w r3, r4, r3");
| if (r7 >= r3) {
0x000a1684 bge 0xa1692 | goto label_59;
| }
0x000a1686 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000a1688 cmp r7, r3 |
0x000a168a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a168c sbcs.w r3, r4, r3 | __asm ("sbcs.w r3, r4, r3");
| if (r7 >= r3) {
0x000a1690 bge 0xa15e2 | goto label_5;
| }
| label_59:
0x000a1692 ldrd lr, ip, [sp, 0x3c] | __asm ("ldrd lr, ip, [var_3ch]");
0x000a1696 mov r6, sl | r6 = sl;
0x000a1698 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a169a mov sl, r2 | sl = r2;
0x000a169c add.w lr, lr, 1 | lr++;
0x000a16a0 add.w ip, ip, 0x28 |
0x000a16a4 cmp lr, r3 |
| if (lr != r3) {
0x000a16a6 bne.w 0xa1584 | goto label_6;
| }
| label_57:
0x000a16aa ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a16ac mov r2, r6 | r2 = r6;
0x000a16ae ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000a16b0 ldr.w ip, [sp, 0x38] | ip = var_38h;
0x000a16b4 cmp r3, r1 |
| if (r3 <= r1) {
0x000a16b6 ble 0xa17aa | goto label_61;
| }
0x000a16b8 ldr r0, [sp, 0x118] | r0 = var_118h;
| label_20:
0x000a16ba ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a16bc strd sb, r8, [sp, 0x90] | __asm ("strd sb, r8, [var_90h]");
0x000a16c0 strd r2, sl, [sp, 0x88] | __asm ("strd r2, sl, [var_88h]");
0x000a16c4 str r3, [sp, 0x4c] | var_4ch = r3;
0x000a16c6 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000a16c8 str r3, [sp, 0x84] | var_84h = r3;
0x000a16ca ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000a16cc cmp r3, 0 |
| if (r3 >= 0) {
0x000a16ce bge.w 0xa14e8 | goto label_7;
| }
| label_54:
0x000a16d2 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000a16d4 cmp.w ip, 0 |
0x000a16d8 str r3, [sp, 0x11c] | var_11ch = r3;
| if (ip <= 0) {
0x000a16da ble.w 0xa1810 | goto label_62;
| }
| label_15:
0x000a16de movs r5, 0 | r5 = 0;
0x000a16e0 ldr r6, [sp, 0x110] | r6 = var_110h;
0x000a16e2 mov r7, r5 | r7 = r5;
0x000a16e4 mov r4, ip | r4 = ip;
0x000a16e6 b 0xa16ea |
| while (r5 != r4) {
0x000a16e8 ldr r0, [sp, 0x118] | r0 = var_118h;
0x000a16ea add r0, r7 | r0 += r7;
0x000a16ec adds r5, 1 | r5++;
0x000a16ee add.w r1, r0, 8 | r1 = r0 + 8;
0x000a16f2 mov r2, r6 | r2 = r6;
0x000a16f4 adds r0, 0x10 | r0 += 0x10;
0x000a16f6 adds r7, 0x28 | r7 += 0x28;
0x000a16f8 bl 0x14e10 | fcn_00014e10 (r0, r1, r2);
0x000a16fc cmp r5, r4 |
0x000a16fe bne 0xa16e8 |
| }
0x000a1700 movs r3, 0 | r3 = 0;
0x000a1702 mov ip, r4 |
0x000a1704 str r3, [sp, 0xc] | var_ch_2 = r3;
0x000a1706 b 0xa1556 | goto label_8;
| label_60:
0x000a1708 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000a170a mov r0, r6 | r0 = r6;
0x000a170c str r2, [sp, 0x30] | var_30h = r2;
0x000a170e bl 0xb698 | fcn_0000b698 (r0, r1);
0x000a1712 ldr r3, [sp, 0xf8] | r3 = var_f8h;
0x000a1714 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a1716 b 0xa1670 | goto label_9;
| label_55:
0x000a1718 ldr.w sb, [sp, 0x78] | sb = var_78h;
0x000a171c ldr.w sl, [sp, 0x4c] | sl = var_4ch;
| label_17:
0x000a1720 blx 0x8404 | fcn_00008404 ();
0x000a1724 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000a1726 cmp r3, sl |
| if (r3 < sl) {
0x000a1728 bge 0xa1748 |
0x000a172a ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x000a172c ldr r2, [sp, 0x84] | r2 = var_84h;
0x000a172e str.w sl, [sp, 0x6c] | __asm ("str.w sl, [var_6ch]");
0x000a1732 str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x000a1736 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x000a1738 ldr r2, [sp, 0x88] | r2 = var_88h;
0x000a173a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000a173c ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x000a173e str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000a1740 ldr r2, [sp, 0x90] | r2 = var_90h;
0x000a1742 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x000a1744 ldr r2, [sp, 0x94] | r2 = var_94h;
0x000a1746 str r2, [r3, 0x14] | *((r3 + 0x14)) = r2;
| }
0x000a1748 ldr r3, [sp, 0x50] | r3 = var_50h;
0x000a174a ldr r6, [r3, 0x18] | r6 = *((r3 + 0x18));
| label_46:
0x000a174c add.w sb, sb, 1 | sb++;
0x000a1750 cmp sb, r6 |
| if (sb < r6) {
0x000a1752 blt.w 0xa1388 | goto label_10;
| }
0x000a1756 ldr.w lr, [sp, 0x60] | lr = var_60h;
0x000a175a ldr r1, [sp, 0xbc] | r1 = var_bch;
0x000a175c ldr.w ip, [sp, 0xa0] | ip = var_a0h;
0x000a1760 ldr r7, [sp, 0x64] | r7 = var_64h;
| label_45:
0x000a1762 ldr.w r3, [ip, 8] | r3 = *((ip + 8));
0x000a1766 add.w ip, ip, 0x18 |
0x000a176a ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a176c orrs r2, r3 | r2 |= r3;
0x000a176e ldr r3, [ip, -0xc] | r3 = *((ip - 0xc));
0x000a1772 str r2, [sp, 0x28] | var_28h = r2;
0x000a1774 cmp r1, ip |
0x000a1776 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000a1778 orr.w r2, r2, r3 | r2 |= r3;
0x000a177c str r2, [sp, 0x2c] | var_2ch = r2;
| if (r1 != ip) {
0x000a177e bne.w 0xa135c | goto label_11;
| }
0x000a1782 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a1784 ldr r2, [sp, 0x70] | r2 = var_70h;
0x000a1786 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a1788 ldr r0, [sp, 0x74] | r0 = var_74h;
0x000a178a ldrd r8, sl, [sp, 0xa8] | __asm ("ldrd r8, sl, [var_a8h]");
0x000a178e ldrd fp, r5, [sp, 0xb0] | __asm ("ldrd fp, r5, [var_b0h]");
0x000a1792 cmp r1, r0 |
0x000a1794 it eq |
| if (r1 == r0) {
0x000a1796 cmpeq r3, r2 | __asm ("cmpeq r3, r2");
| }
0x000a1798 ldr r4, [sp, 0xb8] | r4 = var_b8h;
| if (r1 == r0) {
0x000a179a beq.w 0xa19a4 | goto label_63;
| }
0x000a179e cmp.w fp, 4 |
| if (fp == 4) {
0x000a17a2 beq 0xa1868 | goto label_64;
| }
0x000a17a4 add.w fp, fp, 1 |
0x000a17a8 b 0xa1312 | goto label_12;
| label_61:
0x000a17aa ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x000a17ac cmp r3, 0 |
| if (r3 < 0) {
0x000a17ae blt 0xa17f4 | goto label_65;
| }
0x000a17b0 ldr r0, [sp, 0x118] | r0 = var_118h;
0x000a17b2 b 0xa14f0 | goto label_13;
| label_48:
0x000a17b4 ldr r7, [sp, 0xfc] | r7 = var_fch;
| if (r0 == 0) {
0x000a17b6 cbz r0, 0xa181e | goto label_66;
| }
0x000a17b8 ldr r4, [sp, 0x64] | r4 = var_64h;
0x000a17ba mov sb, r0 | sb = r0;
| label_16:
0x000a17bc ldr r6, [sp, 0x50] | r6 = var_50h;
0x000a17be ldr.w r0, [r6, 0xfc] | r0 = *((r6 + 0xfc));
0x000a17c2 blx 0x8b04 | fcn_00008b04 ();
0x000a17c6 movs r3, 0 | r3 = 0;
0x000a17c8 mov r5, r3 | r5 = r3;
0x000a17ca str.w r3, [r6, 0xfc] | __asm ("str.w r3, [r6, 0xfc]");
| label_25:
0x000a17ce mov r1, sb | r1 = sb;
0x000a17d0 mov r0, r4 | r0 = r4;
0x000a17d2 blx 0x86c0 | fcn_000086c0 ();
0x000a17d6 ldr.w r2, [pc, 0x4fc] | r2 = *(0x000a1cd4);
0x000a17da ldr.w r3, [pc, 0x4a8] | r3 = *(0xa1c86);
0x000a17de add r2, pc | r2 += pc;
0x000a17e0 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a17e2 ldr r2, [r3] | r2 = *(0xa1c86);
0x000a17e4 ldr r3, [sp, 0x184] | r3 = var_184h;
0x000a17e6 eors r2, r3 | r2 ^= r3;
0x000a17e8 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000a17ec beq.w 0xa1270 | goto label_14;
| }
| do {
| label_26:
0x000a17f0 blx 0x883c | fcn_0000883c ();
| label_65:
0x000a17f4 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000a17f6 ldr r0, [sp, 0x118] | r0 = var_118h;
0x000a17f8 str r3, [sp, 0x11c] | var_11ch = r3;
0x000a17fa b 0xa16de | goto label_15;
| label_49:
0x000a17fc ldr r4, [sp, 0x64] | r4 = var_64h;
0x000a17fe mov.w sb, 7 | sb = 7;
0x000a1802 b 0xa17bc | goto label_16;
| label_52:
0x000a1804 mov sb, r0 | sb = r0;
0x000a1806 ldr r0, [sp, 0x118] | r0 = var_118h;
0x000a1808 ldr r4, [sp, 0x64] | r4 = var_64h;
0x000a180a blx 0x8404 | fcn_00008404 ();
0x000a180e b 0xa17bc | goto label_16;
| label_62:
0x000a1810 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a1812 adds r1, r3, 1 | r1 = r3 + 1;
| if (r1 != r3) {
0x000a1814 beq 0xa1834 |
0x000a1816 ldr.w sb, [sp, 0x78] | sb = var_78h;
0x000a181a mov sl, r3 | sl = r3;
0x000a181c b 0xa1720 | goto label_17;
| label_66:
0x000a181e add.w r5, r7, r7, lsl 2 | r5 = r7 + (r7 << 2);
0x000a1822 lsls r5, r5, 3 | r5 <<= 3;
0x000a1824 mov r0, r5 | r0 = r5;
0x000a1826 b 0xa1404 | goto label_18;
| label_47:
0x000a1828 movs r0, 0x28 | r0 = 0x28;
0x000a182a movs r7, 1 | r7 = 1;
0x000a182c mov r5, r0 | r5 = r0;
0x000a182e b 0xa1404 | goto label_18;
| label_50:
0x000a1830 movs r1, 0 | r1 = 0;
0x000a1832 b 0xa1468 | goto label_19;
| }
0x000a1834 movs r3, 0 | r3 = 0;
0x000a1836 mov r2, r3 | r2 = r3;
0x000a1838 mov r8, r3 | r8 = r3;
0x000a183a mov sl, r3 | sl = r3;
0x000a183c mov sb, r3 | sb = r3;
0x000a183e str r3, [sp, 0xc] | var_ch_2 = r3;
0x000a1840 str r3, [sp, 0x18] | var_18h = r3;
0x000a1842 b 0xa16ba | goto label_20;
| label_44:
0x000a1844 ldr.w r1, [pc, 0x490] |
0x000a1848 ldr.w r2, [pc, 0x438] | r2 = *(0xa1c84);
0x000a184c add r1, pc | r1 = 0x143528;
0x000a184e ldr r2, [r1, r2] | r2 = imp.sinh;
0x000a1850 ldr r1, [r2] | r1 = imp.sinh;
0x000a1852 ldr r2, [sp, 0x184] | r2 = var_184h;
0x000a1854 eors r1, r2 | r1 ^= r2;
0x000a1856 mov.w r2, 0 | r2 = 0;
0x000a185a bne 0xa17f0 |
| } while (r1 != r2);
0x000a185c ldr.w r1, [pc, 0x47c] |
0x000a1860 mov r2, r3 | r2 = r3;
0x000a1862 mov r0, r4 | r0 = r4;
0x000a1864 add r1, pc | r1 = 0x143544;
0x000a1866 b 0xa122e | goto label_21;
| label_64:
0x000a1868 ldr.w r8, [sp, 0x9c] | r8 = var_9ch;
0x000a186c mov r4, r7 | r4 = r7;
0x000a186e movs r2, 3 | r2 = 3;
0x000a1870 mov r7, r5 | r7 = r5;
| label_23:
0x000a1872 ldr r0, [sp, 0x54] | r0 = var_54h;
0x000a1874 movs r3, 1 | r3 = 1;
0x000a1876 str r4, [sp, 0x24] | var_24h = r4;
0x000a1878 mov r4, fp | r4 = fp;
0x000a187a mov.w sl, 0 | sl = 0;
0x000a187e str r7, [sp, 0x20] | var_20h = r7;
0x000a1880 sub.w r5, r0, 0x21 | r5 = r0 - 0x21;
0x000a1884 rsb.w r1, r0, 0x21 | r1 = 0x21 - r0;
0x000a1888 lsr.w r1, r3, r1 | r1 = r3 >> r1;
0x000a188c str r5, [sp, 0x5c] | var_5ch = r5;
0x000a188e lsl.w r5, r3, r5 | r5 = r3 << r5;
0x000a1892 str r2, [sp, 0x78] | var_78h = r2;
0x000a1894 orrs r1, r5 | r1 |= r5;
0x000a1896 str r1, [sp, 0x4c] | var_4ch = r1;
0x000a1898 subs r1, r0, 1 | r1 = r0 - 1;
0x000a189a lsls r3, r1 | r3 <<= r1;
0x000a189c str r1, [sp, 0x34] | var_34h = r1;
0x000a189e str r3, [sp, 0x48] | var_48h = r3;
0x000a18a0 add r3, sp, 0xe8 | r3 += var_e8h;
0x000a18a2 strd r3, sl, [sp, 0x14] | __asm ("strd r3, sl, [var_18h]");
| label_24:
0x000a18a6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a18a8 ldr r2, [sp, 0x44] | r2 = var_44h;
0x000a18aa ldr r7, [r3] | r7 = *(r3);
0x000a18ac ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x000a18ae ldr r2, [r2] | r2 = *(r2);
0x000a18b0 adds r7, 1 | r7++;
0x000a18b2 ldr.w fp, [r3, 4] | fp = *((r3 + 4));
0x000a18b6 mov r1, r7 | r1 = r7;
0x000a18b8 ldrd r6, r5, [r3, 0x10] | __asm ("ldrd r6, r5, [r3, 0x10]");
0x000a18bc str r2, [sp, 0x28] | var_28h = r2;
0x000a18be movs r2, 0 | r2 = 0;
0x000a18c0 str r2, [sp, 0xc0] | var_c0h = r2;
0x000a18c2 blx 0x8148 | fcn_00008148 ();
0x000a18c6 mov r1, r7 | r1 = r7;
0x000a18c8 mov sb, r0 | sb = r0;
0x000a18ca cmp r0, 0 |
| if (r0 == 0) {
0x000a18cc beq.w 0xa1bc6 | goto label_67;
| }
0x000a18d0 ldr r7, [sp, 0x44] | r7 = var_44h;
0x000a18d2 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x000a18d4 blx 0x82f4 | fcn_000082f4 ();
0x000a18d8 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a18da mov ip, r0 |
0x000a18dc str r0, [sp, 0x3c] | var_3ch = r0;
0x000a18de add r3, sp, 0xc4 | r3 += var_c4h;
0x000a18e0 ldr r0, [r2, 0x24] | r0 = *((r2 + 0x24));
0x000a18e2 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
0x000a18e4 mov r1, r2 | r1 = r2;
0x000a18e6 str r2, [sp, 0xc] | var_ch_2 = r2;
0x000a18e8 ldr r2, [r0] | r2 = *(r0);
0x000a18ea str r3, [sp] | *(sp) = r3;
0x000a18ec mov r3, ip | r3 = ip;
0x000a18ee str r2, [sp, 0x2c] | var_2ch = r2;
0x000a18f0 mov r2, sb | r2 = sb;
0x000a18f2 bl 0xba70 | r0 = fcn_0000ba70 (r0, r1, r2, r3, r4);
0x000a18f6 cmp r0, 0 |
| if (r0 != 0) {
0x000a18f8 bne.w 0xa1bae | goto label_68;
| }
0x000a18fc ldr r3, [sp, 0xc4] | r3 = var_c4h;
0x000a18fe str r4, [sp, 0xc] | var_ch_2 = r4;
0x000a1900 mov r4, r0 | r4 = r0;
0x000a1902 str.w r8, [sp, 0x10] | __asm ("str.w r8, [x]");
0x000a1906 mov r8, r0 | r8 = r0;
0x000a1908 str r3, [sp, 0x30] | var_30h = r3;
0x000a190a add r3, sp, 0xd0 | r3 += var_d0h;
0x000a190c str r3, [sp, 0x70] | var_70h = r3;
0x000a190e add r3, sp, 0xcc | r3 += var_cch;
0x000a1910 str r3, [sp, 0x6c] | var_6ch = r3;
0x000a1912 add r3, sp, 0xc8 | r3 += var_c8h;
0x000a1914 str r3, [sp, 0x64] | var_64h = r3;
0x000a1916 add r3, sp, 0xc0 | r3 += var_c0h;
0x000a1918 str r3, [sp, 0x60] | var_60h = r3;
0x000a191a add r3, sp, 0xd4 | r3 += var_d4h;
0x000a191c str r3, [sp, 0x74] | var_74h = r3;
| do {
| label_22:
0x000a191e ldr r3, [sp, 0x60] | r3 = var_60h;
0x000a1920 mov.w r2, -1 | r2 = -1;
0x000a1924 ldr r1, [sp, 0x64] | r1 = var_64h;
0x000a1926 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000a1928 str r3, [sp, 4] | var_4h_2 = r3;
0x000a192a ldr r3, [sp, 0x74] | r3 = var_74h;
0x000a192c str r3, [sp] | *(sp) = r3;
0x000a192e movs r3, 0 | r3 = 0;
0x000a1930 strd r2, r3, [sp, 0xcc] | __asm ("strd r2, r3, [var_d0h]");
0x000a1934 str r3, [sp, 0xd4] | var_d4h = r3;
0x000a1936 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000a1938 ldr r7, [r3, 0x14] | r7 = *((r3 + 0x14));
0x000a193a ldrd r2, r3, [sp, 0x6c] | __asm ("ldrd r2, r3, [var_6ch]");
0x000a193e blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000a1940 str r0, [sp, 0x38] | var_38h = r0;
0x000a1942 cmp r0, 0 |
| if (r0 != 0) {
0x000a1944 bne.w 0xa1b8c | goto label_69;
| }
0x000a1948 ldr r2, [sp, 0xc0] | r2 = var_c0h;
0x000a194a cmp r2, fp |
0x000a194c blt 0xa191e |
| } while (r2 < fp);
0x000a194e cmp r4, 0 |
| if (r4 == 0) {
0x000a1950 beq.w 0xa1ab4 | goto label_70;
| }
| label_33:
0x000a1954 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000a1956 add r3, fp | r3 += fp;
0x000a1958 cmp r3, r2 |
| if (r3 <= r2) {
0x000a195a ble.w 0xa1a8c | goto label_71;
| }
0x000a195e sub.w r3, r2, fp | r3 = r2 - fp;
0x000a1962 cmp fp, r2 |
0x000a1964 rsb.w r1, r3, 0x20 | r1 = 0x20 - r3;
0x000a1968 lsr.w r7, r6, r3 | r7 = r6 >> r3;
0x000a196c lsl.w r1, r5, r1 | r1 = r5 << r1;
0x000a1970 sub.w r3, r3, 0x20 | r3 -= 0x20;
0x000a1974 lsr.w r3, r5, r3 | r3 = r5 >> r3;
0x000a1978 orr.w r7, r7, r1 | r7 |= r1;
0x000a197c orr.w r7, r7, r3 | r7 |= r3;
0x000a1980 and r7, r7, 1 | r7 &= 1;
| if (fp < r2) {
0x000a1984 blt 0xa1a2a | goto label_72;
| }
0x000a1986 cmp r7, 0 |
| if (r7 != 0) {
0x000a1988 bne 0xa1a48 | goto label_73;
| }
0x000a198a ldrd r1, r2, [sp, 0xd0] | __asm ("ldrd r1, r2, [var_d0h]");
0x000a198e ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a1990 subs r2, r2, r1 | r2 -= r1;
0x000a1992 add r1, sb | r1 += sb;
0x000a1994 bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a1998 mov r4, r0 | r4 = r0;
| label_28:
0x000a199a ldr.w r8, [sp, 0xd4] | r8 = var_d4h;
| if (r4 == 0) {
0x000a199e cbnz r4, 0xa19b2 |
| label_34:
0x000a19a0 movs r4, 1 | r4 = 1;
0x000a19a2 b 0xa191e | goto label_22;
| label_63:
0x000a19a4 mov r4, r7 | r4 = r7;
0x000a19a6 ldr.w r8, [sp, 0x9c] | r8 = var_9ch;
0x000a19aa mov r7, r5 | r7 = r5;
0x000a19ac add.w r2, fp, -1 | r2 = fp + -1;
0x000a19b0 b 0xa1872 | goto label_23;
| }
| label_27:
0x000a19b2 mov sl, r4 | sl = r4;
0x000a19b4 ldrd r4, r8, [sp, 0xc] | __asm ("ldrd r4, r8, [var_ch_2]");
| label_29:
0x000a19b8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000a19ba ldr r0, [sp, 0x30] | r0 = var_30h;
0x000a19bc ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a19be blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| label_31:
0x000a19c0 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a19c2 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000a19c4 adds r3, 1 | r3++;
0x000a19c6 cmp r4, r3 |
0x000a19c8 str r3, [sp, 0x18] | var_18h = r3;
0x000a19ca ite le |
| if (r4 > r3) {
0x000a19cc movle r3, 0 | r3 = 0;
| }
| if (r4 <= r3) {
0x000a19ce movgt r3, 1 | r3 = 1;
| }
0x000a19d0 cmp.w sl, 0 |
0x000a19d4 add.w r2, r2, 0x18 | r2 += 0x18;
0x000a19d8 it ne |
| if (sl == 0) {
0x000a19da movne r3, 0 | r3 = 0;
| }
0x000a19dc str r2, [sp, 0x20] | var_20h = r2;
0x000a19de mov r5, r3 | r5 = r3;
0x000a19e0 cmp r3, 0 |
| if (r3 != 0) {
0x000a19e2 bne.w 0xa18a6 | goto label_24;
| }
0x000a19e6 ldr r6, [sp, 0x50] | r6 = var_50h;
0x000a19e8 mov sb, sl | sb = sl;
0x000a19ea ldr r4, [sp, 0x24] | r4 = var_24h;
0x000a19ec ldr.w r0, [r6, 0xfc] | r0 = *((r6 + 0xfc));
0x000a19f0 blx 0x8b04 | fcn_00008b04 ();
0x000a19f4 str.w r5, [r6, 0xfc] | __asm ("str.w r5, [r6, 0xfc]");
0x000a19f8 ldr r5, [sp, 0xe8] | r5 = var_e8h;
0x000a19fa cmp.w sl, 0 |
| if (sl != 0) {
0x000a19fe bne.w 0xa17ce | goto label_25;
| }
0x000a1a02 ldr r2, [pc, 0x2dc] |
0x000a1a04 ldr r3, [pc, 0x27c] | r3 = *(0xa1c84);
0x000a1a06 add r2, pc | r2 = 0x1436ec;
0x000a1a08 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a1a0a ldr r2, [r3] | r2 = imp.sinh;
0x000a1a0c ldr r3, [sp, 0x184] | r3 = var_184h;
0x000a1a0e eors r2, r3 | r2 ^= r3;
0x000a1a10 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a1a14 bne.w 0xa17f0 | goto label_26;
| }
0x000a1a18 ldr r3, [pc, 0x2c8] | r3 = *(0xa1ce4);
0x000a1a1a mov.w r2, -1 | r2 = -1;
0x000a1a1e mov r1, r5 | r1 = r5;
0x000a1a20 mov r0, r4 | r0 = r4;
0x000a1a22 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x000a1a26 str r3, [sp, 0xc] | var_ch_2 = r3;
0x000a1a28 b 0xa122e | goto label_21;
| label_72:
0x000a1a2a ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x000a1a2c add.w r1, sb, r8 | r1 = sb + r8;
0x000a1a30 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a1a32 sub.w r2, r2, r8 | r2 -= r8;
0x000a1a36 bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a1a3a cmp r0, 0 |
0x000a1a3c ite ne |
| if (r0 == 0) {
0x000a1a3e movne r3, 0 | r3 = 0;
| }
| if (r0 != 0) {
0x000a1a40 andeq r3, r7, 1 | r3 = r7 & 1;
| }
0x000a1a44 mov r4, r0 | r4 = r0;
| if (r3 != 0) {
0x000a1a46 cbz r3, 0xa1a56 |
| label_73:
0x000a1a48 ldr r1, [sp, 0x80] | r1 = var_80h;
0x000a1a4a mov.w r2, -1 | r2 = -1;
0x000a1a4e ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a1a50 bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a1a54 mov r4, r0 | r4 = r0;
| }
0x000a1a56 cmp r4, 0 |
| if (r4 != 0) {
0x000a1a58 bne 0xa19b2 | goto label_27;
| }
0x000a1a5a ldrd r1, r2, [sp, 0xd0] | __asm ("ldrd r1, r2, [var_d0h]");
0x000a1a5e ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x000a1a62 subs r2, r2, r1 | r2 -= r1;
0x000a1a64 add r1, sb | r1 += sb;
0x000a1a66 mov r0, r8 | r0 = r8;
0x000a1a68 bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a1a6c cmp r0, 0 |
0x000a1a6e ite ne |
| if (r0 == 0) {
0x000a1a70 movne r7, 0 | r7 = 0;
| }
| if (r0 != 0) {
0x000a1a72 andeq r7, r7, 1 | r7 &= 1;
| }
0x000a1a76 mov r4, r0 | r4 = r0;
0x000a1a78 cmp r7, 0 |
| if (r7 == 0) {
0x000a1a7a beq 0xa199a | goto label_28;
| }
0x000a1a7c ldr r1, [sp, 0x68] | r1 = var_68h;
0x000a1a7e mov.w r2, -1 | r2 = -1;
0x000a1a82 mov r0, r8 | r0 = r8;
0x000a1a84 bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a1a88 mov r4, r0 | r4 = r0;
0x000a1a8a b 0xa199a | goto label_28;
| label_71:
0x000a1a8c ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a1a8e ldr r2, [sp, 0x78] | r2 = var_78h;
0x000a1a90 ldr r4, [sp, 0xc] | r4 = var_ch_2;
0x000a1a92 ldr.w ip, [sp, 0x38] | ip = var_38h;
0x000a1a96 cmp r3, r2 |
0x000a1a98 ldr.w r8, [sp, 0x10] | r8 = x;
| if (r3 != r2) {
0x000a1a9c beq 0xa1aa2 |
| label_30:
0x000a1a9e mov sl, ip | sl = ip;
0x000a1aa0 b 0xa19b8 | goto label_29;
| }
0x000a1aa2 ldr r1, [sp, 0x58] | r1 = var_58h;
0x000a1aa4 mov.w r2, -1 | r2 = -1;
0x000a1aa8 add r0, sp, 0xe8 | r0 += var_e8h;
0x000a1aaa bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a1aae mov ip, r0 |
0x000a1ab0 mov sl, ip | sl = ip;
0x000a1ab2 b 0xa19b8 | goto label_29;
| label_70:
0x000a1ab4 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a1ab6 ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x000a1ab8 ldr r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x000a1aba orrs.w r3, r6, r5 | r3 = r6 | r5;
| if (r3 == r6) {
0x000a1abe beq.w 0xa1bf8 | goto label_38;
| }
0x000a1ac2 lsls r3, r6, 0x1f | r3 = r6 << 0x1f;
| if (r3 < r6) {
0x000a1ac4 bmi.w 0xa1bd6 | goto label_74;
| }
0x000a1ac8 mov r3, r4 | r3 = r4;
| do {
0x000a1aca adds r3, 1 | r3++;
0x000a1acc rsb.w r7, r3, 0x20 | r7 = 0x20 - r3;
0x000a1ad0 lsr.w r0, r6, r3 | r0 = r6 >> r3;
0x000a1ad4 lsl.w r7, r5, r7 | r7 = r5 << r7;
0x000a1ad8 orrs r0, r7 | r0 |= r7;
0x000a1ada sub.w r7, r3, 0x20 | r7 = r3 - 0x20;
0x000a1ade lsr.w r7, r5, r7 | r7 = r5 >> r7;
0x000a1ae2 orrs r0, r7 | r0 |= r7;
0x000a1ae4 lsls r7, r0, 0x1f | r7 = r0 << 0x1f;
0x000a1ae6 bpl 0xa1aca |
| } while (r7 >= r0);
0x000a1ae8 ldr r0, [sp, 0x48] | r0 = var_48h;
0x000a1aea ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x000a1aec ands r0, r6 | r0 &= r6;
0x000a1aee ands r7, r5 | r7 &= r5;
0x000a1af0 orrs r0, r7 | r0 |= r7;
| if (r0 != r7) {
0x000a1af2 bne 0xa1b16 | goto label_75;
| }
| do {
| label_32:
0x000a1af4 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000a1af6 adds r4, 1 | r4++;
0x000a1af8 subs r0, r0, r4 | r0 -= r4;
0x000a1afa rsb.w ip, r0, 0x20 |
0x000a1afe lsr.w r7, r6, r0 | r7 = r6 >> r0;
0x000a1b02 lsl.w ip, r5, ip |
0x000a1b06 subs r0, 0x20 | r0 -= 0x20;
0x000a1b08 lsr.w r0, r5, r0 | r0 = r5 >> r0;
0x000a1b0c orr.w r7, r7, ip | r7 |= ip;
0x000a1b10 orrs r7, r0 | r7 |= r0;
0x000a1b12 lsls r0, r7, 0x1f | r0 = r7 << 0x1f;
0x000a1b14 bpl 0xa1af4 |
| } while (r0 >= r7);
| label_75:
0x000a1b16 subs r4, r3, r4 | r4 = r3 - r4;
0x000a1b18 cmp r4, 1 |
| if (r4 <= 1) {
0x000a1b1a ble 0xa1bf8 | goto label_38;
| }
0x000a1b1c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a1b1e add.w ip, sp, 0xdc |
0x000a1b22 ldr r0, [r3, 0x24] | r0 = *((r3 + 0x24));
0x000a1b24 movs r3, 0 | r3 = 0;
0x000a1b26 str r3, [sp, 0xd8] | var_d8h = r3;
0x000a1b28 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000a1b2a ldr r7, [r0] | r7 = *(r0);
0x000a1b2c str.w ip, [sp] | __asm ("str.w ip, [sp]");
0x000a1b30 subs r3, r3, r2 | r3 -= r2;
0x000a1b32 add r2, sb | r2 += sb;
0x000a1b34 bl 0xba70 | r0 = fcn_0000ba70 (r0, r1, r2, r3, r4);
0x000a1b38 mov sl, r0 | sl = r0;
0x000a1b3a cmp r0, 0 |
| if (r0 != 0) {
0x000a1b3c bne.w 0xa1c76 | goto label_76;
| }
0x000a1b40 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000a1b42 add r2, sp, 0xe4 | r2 += var_e4h;
0x000a1b44 add.w r3, r3, r4, asr 1 | r3 += (r4 >> 1);
0x000a1b48 str r3, [sp, 0x40] | var_40h = r3;
0x000a1b4a ldr r3, [sp, 0xdc] | r3 = var_dch;
0x000a1b4c str r3, [sp, 0x1c] | var_1ch = r3;
0x000a1b4e add r3, sp, 0xf8 | r3 += var_f8h;
0x000a1b50 b 0xa1b7a |
| while (r1 < r0) {
0x000a1b52 add r1, sp, 0xd8 | r1 += var_d8h;
0x000a1b54 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000a1b56 str r1, [sp, 4] | var_4h_2 = r1;
0x000a1b58 add r1, sp, 0x108 | r1 += var_108h;
0x000a1b5a str r1, [sp] | *(sp) = r1;
0x000a1b5c add r1, sp, 0xe0 | r1 += var_e0h;
0x000a1b5e ldr r4, [r7, 0x14] | r4 = *((r7 + 0x14));
0x000a1b60 str.w sl, [sp, 0xe4] | __asm ("str.w sl, [var_e4h]");
0x000a1b64 str.w sl, [sp, 0xf8] | __asm ("str.w sl, [var_f8h]");
0x000a1b68 str.w sl, [sp, 0x108] | __asm ("str.w sl, [var_108h]");
0x000a1b6c str r3, [sp, 0x84] | var_84h = r3;
0x000a1b6e str r2, [sp, 0x7c] | var_7ch = r2;
0x000a1b70 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000a1b72 ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x000a1b74 ldr r3, [sp, 0x84] | r3 = var_84h;
0x000a1b76 cmp r0, 0 |
| if (r0 != 0) {
0x000a1b78 bne 0xa1c3c | goto label_77;
| }
0x000a1b7a ldr r1, [sp, 0xd8] | r1 = var_d8h;
0x000a1b7c ldr r0, [sp, 0x40] | r0 = var_40h;
0x000a1b7e cmp r1, r0 |
0x000a1b80 blt 0xa1b52 |
| }
0x000a1b82 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000a1b84 movs r4, 0 | r4 = 0;
0x000a1b86 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000a1b88 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000a1b8a b 0xa1c4a | goto label_78;
| label_69:
0x000a1b8c cmp r0, 0x65 |
0x000a1b8e mov lr, r8 | lr = r8;
0x000a1b90 ldr r4, [sp, 0xc] | r4 = var_ch_2;
0x000a1b92 mov ip, r0 |
0x000a1b94 ldr.w r8, [sp, 0x10] | r8 = x;
| if (r0 != 0x65) {
0x000a1b98 bne 0xa1a9e | goto label_30;
| }
0x000a1b9a add.w r1, sb, lr | r1 = sb + lr;
0x000a1b9e mov.w r2, -1 | r2 = -1;
0x000a1ba2 add r0, sp, 0xe8 | r0 += var_e8h;
0x000a1ba4 bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a1ba8 mov ip, r0 |
0x000a1baa mov sl, ip | sl = ip;
0x000a1bac b 0xa19b8 | goto label_29;
| label_68:
0x000a1bae ldr r4, [sp, 0x24] | r4 = var_24h;
0x000a1bb0 mov sb, r0 | sb = r0;
| label_35:
0x000a1bb2 ldr r6, [sp, 0x50] | r6 = var_50h;
0x000a1bb4 ldr.w r0, [r6, 0xfc] | r0 = *((r6 + 0xfc));
0x000a1bb8 blx 0x8b04 | fcn_00008b04 ();
0x000a1bbc movs r3, 0 | r3 = 0;
0x000a1bbe ldr r5, [sp, 0xe8] | r5 = var_e8h;
0x000a1bc0 str.w r3, [r6, 0xfc] | __asm ("str.w r3, [r6, 0xfc]");
0x000a1bc4 b 0xa17ce | goto label_25;
| label_67:
0x000a1bc6 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a1bc8 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000a1bca blx 0x858c | r0 = fcn_0000858c ();
0x000a1bce cmp r0, 5 |
| if (r0 != 5) {
0x000a1bd0 bne 0xa1c22 | goto label_79;
| }
0x000a1bd2 mov sl, sb | sl = sb;
0x000a1bd4 b 0xa19c0 | goto label_31;
| label_74:
0x000a1bd6 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a1bd8 rsb.w r0, r3, 0x20 | r0 = 0x20 - r3;
0x000a1bdc lsl.w r0, r5, r0 | r0 = r5 << r0;
0x000a1be0 lsr.w r3, r6, r3 | r3 = r6 >> r3;
0x000a1be4 orrs r3, r0 | r3 |= r0;
0x000a1be6 ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x000a1be8 lsr.w r0, r5, r0 | r0 = r5 >> r0;
0x000a1bec orrs r3, r0 | r3 |= r0;
0x000a1bee lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x000a1bf0 it pl |
| if (r3 >= r3) {
0x000a1bf2 movpl r3, r4 | r3 = r4;
| goto label_80;
| }
| if (r3 >= r3) {
| label_80:
0x000a1bf4 bpl.w 0xa1af4 | goto label_32;
| }
| label_38:
0x000a1bf8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a1bfa cmp.w fp, 0 |
0x000a1bfc lsrs r0, r0, 0x1c | r0 >>= 0x1c;
0x000a1bfe it le |
| if (r0 <= r0) {
0x000a1c00 cmple r3, 0 | __asm ("cmple r3, 0");
| }
| if (r0 == r0) {
0x000a1c02 beq 0xa1c2a | goto label_81;
| }
0x000a1c04 ldr r1, [sp, 0x58] | r1 = var_58h;
0x000a1c06 mov.w r2, -1 | r2 = -1;
0x000a1c0a ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a1c0c bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a1c10 mov r4, r0 | r4 = r0;
| label_37:
0x000a1c12 cmp r4, 0 |
| if (r4 != 0) {
0x000a1c14 bne.w 0xa19b2 | goto label_27;
| }
| label_36:
0x000a1c18 ldr r2, [sp, 0xc0] | r2 = var_c0h;
0x000a1c1a cmp fp, r2 |
| if (fp <= r2) {
0x000a1c1c ble.w 0xa1954 | goto label_33;
| }
0x000a1c20 b 0xa19a0 | goto label_34;
| label_79:
0x000a1c22 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000a1c24 mov.w sb, 7 | sb = 7;
0x000a1c28 b 0xa1bb2 | goto label_35;
| label_81:
0x000a1c2a ldr r2, [sp, 0xd0] | r2 = var_d0h;
0x000a1c2c cmp r2, 0 |
| if (r2 == 0) {
0x000a1c2e beq 0xa1c18 | goto label_36;
| }
0x000a1c30 mov r1, sb | r1 = sb;
0x000a1c32 add r0, sp, 0xe8 | r0 += var_e8h;
0x000a1c34 bl 0x4a4e4 | r0 = fcn_0004a4e4 (r0, r1, r2);
0x000a1c38 mov r4, r0 | r4 = r0;
0x000a1c3a b 0xa1c12 | goto label_37;
| label_77:
0x000a1c3c mov r4, r0 | r4 = r0;
0x000a1c3e ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000a1c40 ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x000a1c42 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000a1c44 cmp r4, 0x65 |
| if (r4 != 0x65) {
0x000a1c46 bne.w 0xa19b2 | goto label_27;
| }
| label_78:
0x000a1c4a ldr r3, [sp, 0xd8] | r3 = var_d8h;
0x000a1c4c ldr r2, [sp, 0x54] | r2 = var_54h;
0x000a1c4e cmp r4, 0x65 |
0x000a1c50 it eq |
| if (r4 != 0x65) {
0x000a1c52 addeq r3, 1 | r3++;
| }
0x000a1c54 subs r3, r3, r2 | r3 -= r2;
0x000a1c56 cmp r3, 0 |
| if (r3 <= 0) {
0x000a1c58 ble 0xa1bf8 | goto label_38;
| }
0x000a1c5a rsb.w r2, r3, 0x20 | r2 = 0x20 - r3;
0x000a1c5e lsrs r6, r3 | r6 >>= r3;
0x000a1c60 lsl.w r2, r5, r2 | r2 = r5 << r2;
0x000a1c64 add fp, r3 |
0x000a1c66 orrs r6, r2 | r6 |= r2;
0x000a1c68 sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x000a1c6c lsr.w r2, r5, r2 | r2 = r5 >> r2;
0x000a1c70 lsrs r5, r3 | r5 >>= r3;
0x000a1c72 orrs r6, r2 | r6 |= r2;
0x000a1c74 b 0xa1bf8 | goto label_38;
| label_76:
0x000a1c76 ldr r4, [sp, 0xc] | r4 = var_ch_2;
0x000a1c78 ldr.w r8, [sp, 0x10] | r8 = x;
0x000a1c7c b 0xa19b8 | goto label_29;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa1ce8 */
| #include <stdint.h>
|
; (fcn) fcn.000a1ce8 () | void fcn_000a1ce8 (int16_t arg_1h, int16_t arg_8h, int16_t arg_10h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_20h, int16_t arg_22h, int16_t arg_28h, int16_t arg_84h, int16_t arg_15ch, int16_t arg_1b8h, int16_t arg_2b8h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h_3;
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_10h_2;
| int16_t var_14h_2;
| arithmetic var_18h;
| int16_t var_1ch;
| int16_t var_20h_2;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h_2;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h_2;
| int16_t var_74h_2;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h_2;
| int16_t var_88h;
| int16_t var_8ch;
| arithmetic var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_9ch;
| int16_t var_a0h;
| int16_t var_a4h;
| arithmetic x;
| int16_t var_ach;
| int16_t var_b4h;
| int16_t var_b8h;
| int16_t var_bch;
| int16_t var_c0h;
| int16_t var_c8h;
| int16_t var_cch;
| int16_t var_f8h;
| int16_t var_10h;
| int16_t var_14h_3;
| int16_t var_1ch_2;
| int16_t var_20h;
| int16_t var_24h_2;
| int16_t var_28h_2;
| int16_t var_2ch_2;
| int16_t var_34h_2;
| int16_t var_38h_2;
| int16_t var_3ch_2;
| int16_t var_40h_2;
| int16_t var_44h;
| int16_t var_0h_4;
| int16_t var_ch_2;
| int16_t var_10h_3;
| int16_t var_14h;
| int16_t var_18h_2;
| int16_t var_1ch_3;
| int16_t var_20h_3;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_2ch_3;
| int16_t var_30h_2;
| int16_t var_34h_3;
| int16_t var_38h_3;
| int16_t var_3ch_3;
| int16_t var_40h_3;
| int16_t var_44h_3;
| int16_t var_48h_2;
| int16_t var_50h_2;
| int16_t var_54h;
| int16_t var_60h_2;
| int16_t var_64h_2;
| int16_t var_68h_2;
| int16_t var_70h_3;
| int16_t var_78h_2;
| int16_t var_7ch_2;
| int16_t var_84h;
| int16_t var_88h_2;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| label_53:
0x00089494 ldr r2, [pc, 0xe8] |
0x00089496 ldr r3, [pc, 0xec] | r3 = *(0x89586);
0x00089498 push {r4, r5, r6, r7, lr} |
0x0008949a sub sp, 0xc |
0x0008949c add r2, pc | r2 = 0x112a20;
0x0008949e mov r4, r0 | r4 = r0;
0x000894a0 ldr r3, [r2, r3] |
0x000894a2 ldr r3, [r3] | r3 = imp.sinh;
0x000894a4 str r3, [sp, 4] | var_4h_2 = r3;
0x000894a6 mov.w r3, 0 | r3 = 0;
0x000894aa ldrh r3, [r0, 4] | r3 = *((r0 + 4));
0x000894ac cmp r3, 1 |
| if (r3 < 1) {
0x000894ae bls 0x89516 | goto label_104;
| }
0x000894b0 ldr r5, [r0, 0x10] | r5 = *((r0 + 0x10));
0x000894b2 movs r3, 0 | r3 = 0;
0x000894b4 str r3, [sp] | *(sp) = r3;
0x000894b6 cmp r5, 0 |
| if (r5 == 0) {
0x000894b8 beq 0x8953a | goto label_105;
| }
0x000894ba mov r7, sp | r7 = sp;
0x000894bc movs r6, 1 | r6 = 1;
0x000894be b 0x894ec |
| while (r3 != 0) {
| label_0:
0x000894c0 ldr r3, [sp] | r3 = *(sp);
| if (r3 == 0) {
0x000894c2 cbnz r3, 0x894ce |
0x000894c4 mov r2, r7 | r2 = r7;
0x000894c6 mov r1, r5 | r1 = r5;
0x000894c8 mov r0, r4 | r0 = r4;
0x000894ca bl 0x5f5a8 | fcn_0005f5a8 (r0, r1, r2);
| }
0x000894ce ldrb.w r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000894d2 strb r6, [r4, 7] | *((r4 + 7)) = r6;
0x000894d4 str r6, [r4, 0x58] | *((r4 + 0x58)) = r6;
0x000894d6 strb r3, [r4, 6] | *((r4 + 6)) = r3;
0x000894d8 ldrd r0, r1, [r5, 0x18] | __asm ("ldrd r0, r1, [r5, 0x18]");
0x000894dc strd r0, r1, [r4, 0x20] | __asm ("strd r0, r1, [r4, 0x20]");
| if (r3 != 0) {
0x000894e0 cbnz r3, 0x894fa | goto label_106;
| }
0x000894e2 mov r1, r7 | r1 = r7;
0x000894e4 mov r0, r4 | r0 = r4;
0x000894e6 bl 0x88d48 | r0 = fcn_00088d48 (r0, r1, r2);
| if (r0 == 0) {
0x000894ea cbz r0, 0x894fa | goto label_106;
| }
0x000894ec ldrb r3, [r4, 7] | r3 = *((r4 + 7));
0x000894ee cmp r3, 0 |
0x000894f0 bne 0x894c0 |
| }
0x000894f2 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000894f4 blx 0x81f8 | fcn_000081f8 ();
0x000894f8 b 0x894c0 | goto label_0;
| label_106:
0x000894fa ldr r0, [sp] | r0 = *(sp);
| if (r0 == 0) {
0x000894fc cbz r0, 0x8953e | goto label_107;
| }
| do {
| label_1:
0x000894fe ldr r2, [pc, 0x88] |
0x00089500 ldr r3, [pc, 0x80] | r3 = *(0x89584);
0x00089502 add r2, pc | r2 = 0x112a90;
0x00089504 ldr r3, [r2, r3] | r3 = imp.sinh;
0x00089506 ldr r2, [r3] | r2 = imp.sinh;
0x00089508 ldr r3, [sp, 4] | r3 = var_4h_2;
0x0008950a eors r2, r3 | r2 ^= r3;
0x0008950c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00089510 bne 0x8957a | goto label_108;
| }
0x00089512 add sp, 0xc |
0x00089514 pop {r4, r5, r6, r7, pc} |
| label_104:
0x00089516 ldr r5, [r0] | r5 = *(r0);
0x00089518 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x0008951a ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x0008951c adds r3, 1 | r3++;
0x0008951e str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x00089520 blx 0x8728 | r0 = fcn_00008728 ();
0x00089524 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x00089526 beq 0x89566 | goto label_109;
| }
0x00089528 movs r3, 1 | r3 = 1;
0x0008952a ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0008952c strb r3, [r4, 6] | *((r4 + 6)) = r3;
0x0008952e blx 0x81f8 | fcn_000081f8 ();
| label_3:
0x00089532 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x00089534 subs r3, 1 | r3--;
0x00089536 str r3, [r5, 0x38] | *((r5 + 0x38)) = r3;
0x00089538 b 0x894fe |
| } while (1);
| label_105:
0x0008953a movs r3, 1 | r3 = 1;
0x0008953c strb r3, [r0, 6] | *((r0 + 6)) = r3;
| label_107:
0x0008953e ldrb.w r2, [r4, 0x34] | r2 = *((r4 + 0x34));
0x00089542 ldrd r1, r3, [r4, 0x20] | __asm ("ldrd r1, r3, [r4, 0x20]");
| if (r2 != 0) {
0x00089546 cbnz r2, 0x89556 | goto label_110;
| }
0x00089548 ldrd r0, r2, [r4, 0x50] | __asm ("ldrd r0, r2, [r4, 0x50]");
0x0008954c cmp r0, r1 |
0x0008954e sbcs r2, r3 | __asm ("sbcs r2, r3");
| if (r0 < r1) {
0x00089550 blt 0x89560 | goto label_111;
| }
| do {
| label_2:
0x00089552 movs r0, 0 | r0 = 0;
0x00089554 b 0x894fe | goto label_1;
| label_110:
0x00089556 ldrd r0, r2, [r4, 0x48] | __asm ("ldrd r0, r2, [r4, 0x48]");
0x0008955a cmp r1, r0 |
0x0008955c sbcs r3, r2 | __asm ("sbcs r3, r2");
0x0008955e bge 0x89552 |
| } while (r1 >= r0);
| label_111:
0x00089560 movs r3, 1 | r3 = 1;
0x00089562 strb r3, [r4, 6] | *((r4 + 6)) = r3;
0x00089564 b 0x89552 | goto label_2;
| label_109:
0x00089566 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00089568 movs r1, 0 | r1 = 0;
0x0008956a blx 0x84d8 | r0 = fcn_000084d8 ();
0x0008956e mov r2, r0 | r2 = r0;
0x00089570 mov r3, r1 | r3 = r1;
0x00089572 movs r0, 0 | r0 = 0;
0x00089574 strd r2, r3, [r4, 0x20] | __asm ("strd r2, r3, [r4, 0x20]");
0x00089578 b 0x89532 | goto label_3;
| label_108:
0x0008957a blx 0x883c | fcn_0000883c ();
0x0008957e nop |
0x00089580 invalid |
0x000a1ce8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a1cec mov fp, r0 |
0x000a1cee ldr r0, [pc, 0x204] |
0x000a1cf0 ldr r5, [r2, 4] | r5 = *((r2 + 4));
0x000a1cf2 ldr r6, [r2, 0x1c] | r6 = *((r2 + 0x1c));
0x000a1cf4 add r0, pc | r0 = 0x143bee;
0x000a1cf6 ldr r4, [r2] | r4 = *(r2);
0x000a1cf8 ldr r2, [pc, 0x1fc] | r2 = *(0xa1ef8);
0x000a1cfa vpush {d8} | __asm ("vpush {d8}");
0x000a1cfe mul r1, r5, r1 | r1 = r5 * r1;
0x000a1d02 sub sp, 0x14 |
0x000a1d04 ldr.w r8, [r4] | r8 = *(r4);
0x000a1d08 ldr r2, [r0, r2] |
0x000a1d0a add.w r1, r1, r1, lsl 1 | r1 += (r1 << 1);
0x000a1d0e ldr r2, [r2] | r2 = imp.sinh;
0x000a1d10 str r2, [sp, 0xc] | var_ch = r2;
0x000a1d12 mov.w r2, 0 | r2 = 0;
0x000a1d16 ldrb.w r2, [fp, 0x22] | r2 = *(arg_22h);
0x000a1d1a add.w r6, r6, r1, lsl 2 | r6 += (r1 << 2);
| if (r2 == 0) {
0x000a1d1e cbz r2, 0xa1d6e | goto label_112;
| }
0x000a1d20 ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x000a1d24 ldr r2, [r2] | r2 = *(r2);
0x000a1d26 cmp r2, 1 |
| if (r2 == 1) {
0x000a1d28 beq 0xa1d6e | goto label_112;
| }
0x000a1d2a ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x000a1d2e cmp r3, 0 |
| if (r3 <= 0) {
0x000a1d30 ble 0xa1d4c | goto label_4;
| }
0x000a1d32 ldr r2, [r4, 0x40] | r2 = *((r4 + 0x40));
0x000a1d34 adds r6, 4 | r6 += 4;
0x000a1d36 movs r3, 0 | r3 = 0;
0x000a1d38 vdup.32 d16, r2 | __asm ("vdup.32 d16, r2");
| do {
0x000a1d3c vst1.32 {d16}, [r6] | __asm ("vst1.32 {d16}, [r6]");
0x000a1d40 adds r3, 1 | r3++;
0x000a1d42 ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x000a1d46 adds r6, 0xc | r6 += 0xc;
0x000a1d48 cmp r3, r2 |
0x000a1d4a blt 0xa1d3c |
| } while (r3 < r2);
| do {
| label_4:
0x000a1d4c movs r0, 0 | r0 = 0;
| label_5:
0x000a1d4e ldr r2, [pc, 0x1ac] |
0x000a1d50 ldr r3, [pc, 0x1a4] | r3 = *(0xa1ef8);
0x000a1d52 add r2, pc | r2 = 0x143c54;
0x000a1d54 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a1d56 ldr r2, [r3] | r2 = imp.sinh;
0x000a1d58 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000a1d5a eors r2, r3 | r2 ^= r3;
0x000a1d5c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a1d60 bne.w 0xa1ef0 | goto label_113;
| }
0x000a1d64 add sp, 0x14 |
0x000a1d66 vpop {d8} | __asm ("vpop {d8}");
0x000a1d6a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_112:
0x000a1d6e movs r2, 0 | r2 = 0;
0x000a1d70 str r2, [sp, 8] | var_8h = r2;
0x000a1d72 ldr.w r2, [fp, 0x28] | r2 = *(arg_28h);
| if (r2 == 0) {
0x000a1d76 cbz r2, 0xa1da4 | goto label_114;
| }
| label_7:
0x000a1d78 ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x000a1d7c cmp r2, 0 |
0x000a1d7e ble 0xa1d4c |
| } while (r2 <= 0);
0x000a1d80 ldr.w r3, [fp, 0x28] | r3 = *(arg_28h);
0x000a1d84 movs r2, 0 | r2 = 0;
| do {
0x000a1d86 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000a1d88 adds r3, 0xc | r3 += 0xc;
0x000a1d8a adds r2, 1 | r2++;
0x000a1d8c adds r6, 0xc | r6 += 0xc;
0x000a1d8e str r1, [r6, -0x8] | *((r6 - 0x8)) = r1;
0x000a1d92 ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x000a1d96 str r1, [r6, -0x4] | *((r6 - 0x4)) = r1;
0x000a1d9a ldr.w r1, [r8, 0x18] | r1 = *((r8 + 0x18));
0x000a1d9e cmp r2, r1 |
0x000a1da0 blt 0xa1d86 |
| } while (r2 < r1);
0x000a1da2 b 0xa1d4c | goto label_4;
| label_114:
0x000a1da4 vldr d8, [r4, 0x20] | __asm ("vldr d8, [r4, 0x20]");
0x000a1da8 mov r2, fp | r2 = fp;
0x000a1daa b 0xa1db2 |
| while (r2 != 0) {
0x000a1dac ldr r3, [r2] | r3 = *(r2);
0x000a1dae cmp r3, 1 |
| if (r3 != 1) {
0x000a1db0 bne 0xa1dba | goto label_115;
| }
0x000a1db2 mov r5, r2 | r5 = r2;
0x000a1db4 ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000a1db6 cmp r2, 0 |
0x000a1db8 bne 0xa1dac |
| }
| label_115:
0x000a1dba ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000a1dbc mov r7, r5 | r7 = r5;
0x000a1dbe ldrb.w sl, [r5, 0x20] | sl = *((r5 + 0x20));
0x000a1dc2 str r3, [sp] | *(sp) = r3;
0x000a1dc4 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000a1dc6 str r3, [sp, 4] | var_4h = r3;
0x000a1dc8 b 0xa1dde |
| while (r0 != 0) {
0x000a1dca ldr.w r2, [r8, 0x18] | r2 = *((r8 + 0x18));
0x000a1dce movs r1, 0 | r1 = 0;
0x000a1dd0 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000a1dd4 lsls r2, r2, 2 | r2 <<= 2;
0x000a1dd6 blx 0x839c | fcn_0000839c ();
0x000a1dda ldr r7, [r7, 0xc] | r7 = *((r7 + 0xc));
| if (r7 == 0) {
0x000a1ddc cbz r7, 0xa1e06 | goto label_116;
| }
0x000a1dde ldr r3, [r7] | r3 = *(r7);
0x000a1de0 movs r1, 0 | r1 = 0;
0x000a1de2 ldr.w r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x000a1de6 cmp r3, 5 |
0x000a1de8 ite ne |
| if (r3 == 5) {
0x000a1dea ldrne sb, [r7, 0x10] | sb = *((r7 + 0x10));
| }
| if (r3 == 5) {
0x000a1dee mov sb, r7 | sb = r7;
| }
0x000a1df0 add.w r0, r0, r0, lsl 1 | r0 += (r0 << 1);
0x000a1df4 lsls r0, r0, 2 | r0 <<= 2;
0x000a1df6 blx 0x8240 | fcn_00008240 ();
0x000a1dfa str.w r0, [sb, 0x28] | __asm ("str.w r0, [sb, 0x28]");
0x000a1dfe cmp r0, 0 |
0x000a1e00 bne 0xa1dca |
| }
0x000a1e02 movs r0, 7 | r0 = 7;
0x000a1e04 b 0xa1d4e | goto label_5;
| label_116:
0x000a1e06 add.w sb, sp, 8 | sb += var_8h;
0x000a1e0a mov r1, r5 | r1 = r5;
0x000a1e0c mov r2, sb | r2 = sb;
0x000a1e0e mov r0, r4 | r0 = r4;
0x000a1e10 bl 0xa0448 | fcn_000a0448 (r0, r1, r2);
0x000a1e14 ldrb r2, [r4, 6] | r2 = *((r4 + 6));
| if (r2 != 0) {
0x000a1e16 cbnz r2, 0xa1e68 | goto label_8;
| }
0x000a1e18 ldr r2, [sp, 8] | r2 = var_8h;
0x000a1e1a movs r7, 1 | r7 = 1;
| if (r2 == 0) {
| label_9:
0x000a1e1c cbz r2, 0xa1e52 | goto label_117;
| }
0x000a1e1e b 0xa1e68 | goto label_8;
| do {
| label_6:
0x000a1e20 ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 == 0) {
0x000a1e22 cbnz r3, 0xa1e2e |
0x000a1e24 mov r2, sb | r2 = sb;
0x000a1e26 mov r1, r5 | r1 = r5;
0x000a1e28 mov r0, r4 | r0 = r4;
0x000a1e2a bl 0x5f5a8 | fcn_0005f5a8 (r0, r1, r2);
| }
0x000a1e2e ldrb.w r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000a1e32 strb r7, [r4, 7] | *((r4 + 7)) = r7;
0x000a1e34 str r7, [r4, 0x58] | *((r4 + 0x58)) = r7;
0x000a1e36 strb r3, [r4, 6] | *((r4 + 6)) = r3;
0x000a1e38 ldrd r0, r1, [r5, 0x18] | __asm ("ldrd r0, r1, [r5, 0x18]");
0x000a1e3c strd r0, r1, [r4, 0x20] | __asm ("strd r0, r1, [r4, 0x20]");
| if (r3 != 0) {
0x000a1e40 cbnz r3, 0xa1e68 | goto label_8;
| }
0x000a1e42 ldr r3, [r5] | r3 = *(r5);
0x000a1e44 cmp r3, 1 |
| if (r3 != 1) {
0x000a1e46 bne 0xa1e84 | goto label_118;
| }
0x000a1e48 mov r1, sb | r1 = sb;
0x000a1e4a mov r0, r4 | r0 = r4;
0x000a1e4c bl 0x88d48 | r0 = fcn_00088d48 (r0, r1, r2);
| if (r0 == 0) {
0x000a1e50 cbz r0, 0xa1e60 | goto label_119;
| }
| label_117:
0x000a1e52 ldrb r3, [r4, 7] | r3 = *((r4 + 7));
0x000a1e54 cmp r3, 0 |
0x000a1e56 bne 0xa1e20 |
| } while (r3 != 0);
0x000a1e58 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a1e5a blx 0x81f8 | fcn_000081f8 ();
0x000a1e5e b 0xa1e20 | goto label_6;
| label_119:
0x000a1e60 ldr r2, [sp, 8] | r2 = var_8h;
0x000a1e62 ldrb r3, [r4, 6] | r3 = *((r4 + 6));
| if (r2 != 0) {
0x000a1e64 cbnz r2, 0xa1e96 | goto label_120;
| }
| if (r3 == 0) {
0x000a1e66 cbz r3, 0xa1e8a | goto label_121;
| }
| label_8:
0x000a1e68 movs r2, 0 | r2 = 0;
0x000a1e6a vstr d8, [r4, 0x20] | __asm ("vstr d8, [r4, 0x20]");
0x000a1e6e strb r2, [r4, 6] | *((r4 + 6)) = r2;
0x000a1e70 cmp.w sl, 0 |
| if (sl == 0) {
0x000a1e74 beq 0xa1e9e | goto label_122;
| }
0x000a1e76 ldr r0, [sp, 8] | r0 = var_8h;
0x000a1e78 strb.w sl, [r5, 0x20] | *((r5 + 0x20)) = sl;
| label_10:
0x000a1e7c cmp r0, 0 |
| if (r0 == 0) {
0x000a1e7e beq.w 0xa1d78 | goto label_7;
| }
0x000a1e82 b 0xa1d4e | goto label_5;
| label_118:
0x000a1e84 ldr r2, [sp, 8] | r2 = var_8h;
0x000a1e86 cmp r2, 0 |
| if (r2 != 0) {
0x000a1e88 bne 0xa1e68 | goto label_8;
| }
| label_121:
0x000a1e8a ldr.w r1, [r8, 0x18] | r1 = *((r8 + 0x18));
0x000a1e8e mov r0, r5 | r0 = r5;
0x000a1e90 bl 0xb84c | fcn_0000b84c (r0, r1);
0x000a1e94 ldrb r3, [r4, 6] | r3 = *((r4 + 6));
| label_120:
0x000a1e96 cmp r3, 0 |
| if (r3 != 0) {
0x000a1e98 bne 0xa1e68 | goto label_8;
| }
0x000a1e9a ldr r2, [sp, 8] | r2 = var_8h;
0x000a1e9c b 0xa1e1c | goto label_9;
| label_122:
0x000a1e9e mov r2, sb | r2 = sb;
0x000a1ea0 mov r1, r5 | r1 = r5;
0x000a1ea2 mov r0, r4 | r0 = r4;
0x000a1ea4 bl 0xa0448 | fcn_000a0448 (r0, r1, r2);
0x000a1ea8 ldr r2, [sp, 8] | r2 = var_8h;
| if (r2 == 0) {
0x000a1eaa cbz r2, 0xa1ed2 | goto label_123;
| }
0x000a1eac ldrb.w r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x000a1eb0 movw r0, 0x10b | r0 = 0x10b;
0x000a1eb4 ldrd r7, r1, [r5, 0x18] | __asm ("ldrd r7, r1, [r5, 0x18]");
0x000a1eb8 cmp r2, 0 |
| if (r2 != 0) {
0x000a1eba bne.w 0xa1d4e | goto label_5;
| }
| label_11:
0x000a1ebe ldrd r3, r2, [sp] | __asm ("ldrd r3, r2, [sp]");
0x000a1ec2 ldr r0, [sp, 8] | r0 = var_8h;
0x000a1ec4 cmp r2, r1 |
0x000a1ec6 it eq |
| if (r2 != r1) {
0x000a1ec8 cmpeq r3, r7 | __asm ("cmpeq r3, r7");
| goto label_124;
| }
| if (r2 == r1) {
| label_124:
0x000a1eca beq 0xa1e7c | goto label_10;
| }
0x000a1ecc cmp r0, 0 |
| if (r0 != 0) {
0x000a1ece bne.w 0xa1d4e | goto label_5;
| }
| label_123:
0x000a1ed2 mov r2, sb | r2 = sb;
0x000a1ed4 mov r1, r5 | r1 = r5;
0x000a1ed6 mov r0, r4 | r0 = r4;
0x000a1ed8 bl 0x5f5a8 | fcn_0005f5a8 (r0, r1, r2);
0x000a1edc ldrb.w r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x000a1ee0 movw r0, 0x10b | r0 = 0x10b;
0x000a1ee4 ldrd r7, r1, [r5, 0x18] | __asm ("ldrd r7, r1, [r5, 0x18]");
0x000a1ee8 cmp r2, 0 |
| if (r2 != 0) {
0x000a1eea bne.w 0xa1d4e | goto label_5;
| }
0x000a1eee b 0xa1ebe | goto label_11;
| label_113:
0x000a1ef0 blx 0x883c | fcn_0000883c ();
0x000a1ef4 ldr r4, [r4, 0x78] | r4 = *((r4 + 0x78));
0x000a1ef6 movs r2, r0 | r2 = r0;
0x000a1ef8 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a1efa movs r0, r0 |
0x000a1efc ldr r6, [r0, 0x74] | r6 = *((r0 + 0x74));
0x000a1efe movs r2, r0 | r2 = r0;
0x000a1f00 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a1f04 mov r4, r0 | r4 = r0;
0x000a1f06 mov r5, r2 | r5 = r2;
0x000a1f08 ldr r0, [r2] | r0 = *(r2);
0x000a1f0a mov r7, r1 | r7 = r1;
0x000a1f0c ldr.w r2, [pc, 0x9f4] | r2 = *(0x000a2904);
0x000a1f10 ldr.w r3, [pc, 0x9f4] |
0x000a1f14 vpush {d8} | __asm ("vpush {d8}");
0x000a1f18 sub sp, 0x8c |
0x000a1f1a add r2, pc | r2 += pc;
0x000a1f1c ldr.w r1, [pc, 0x9ec] |
0x000a1f20 str r4, [sp, 0xc] | var_ch_2 = r4;
0x000a1f22 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a1f24 add r1, pc | r1 = 0x144834;
0x000a1f26 ldr r3, [r3] | r3 = *(0xa2908);
0x000a1f28 str r3, [sp, 0x84] | var_84h = r3;
0x000a1f2a mov.w r3, 0 | r3 = 0;
0x000a1f2e blx 0x87b0 | fcn_000087b0 ();
0x000a1f32 ldr.w r3, [pc, 0x9dc] | r3 = *(0x000a2910);
0x000a1f36 add r3, pc | r3 += pc;
0x000a1f38 str r3, [sp, 0x14] | var_14h = r3;
0x000a1f3a cmp r0, 0 |
| if (r0 == 0) {
0x000a1f3c beq.w 0xa253c | goto label_125;
| }
0x000a1f40 cmp r7, 1 |
0x000a1f42 mov r4, r0 | r4 = r0;
| if (r7 > 1) {
0x000a1f44 bgt 0xa201a | goto label_126;
| }
0x000a1f46 ldr.w r6, [pc, 0x9cc] |
0x000a1f4a ldr r7, [r0] | r7 = *(r0);
0x000a1f4c add r6, pc | r6 = 0x144866;
| do {
| label_12:
0x000a1f4e ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000a1f50 cmp r3, 0 |
| if (r3 == 0) {
0x000a1f52 beq.w 0xa2580 | goto label_127;
| }
0x000a1f56 movs r3, 0 | r3 = 0;
0x000a1f58 ldr r5, [r4, 0x5c] | r5 = *((r4 + 0x5c));
0x000a1f5a str r3, [sp, 0x7c] | var_7ch_2 = r3;
0x000a1f5c strd r3, r3, [sp, 0x64] | __asm ("strd r3, r3, [sp, 0x64]");
0x000a1f60 strd r3, r3, [sp, 0x6c] | __asm ("strd r3, r3, [sp, 0x6c]");
0x000a1f64 strd r3, r3, [sp, 0x74] | __asm ("strd r3, r3, [sp, 0x74]");
0x000a1f68 ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x000a1f6a str r4, [sp, 0x60] | var_60h_2 = r4;
0x000a1f6c str r2, [sp, 0x64] | var_64h_2 = r2;
0x000a1f6e cmp r5, 0 |
| if (r5 == 0) {
0x000a1f70 beq.w 0xa218e | goto label_128;
| }
0x000a1f74 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000a1f76 mov r1, r6 | r1 = r6;
0x000a1f78 blx 0x8ad0 | fcn_00008ad0 ();
0x000a1f7c movs r3, 0 | r3 = 0;
0x000a1f7e str r0, [sp, 0x10] | var_10h_3 = r0;
0x000a1f80 cmp r0, 0 |
| if (r0 != 0) {
0x000a1f82 bne.w 0xa2180 | goto label_129;
| }
| label_20:
0x000a1f86 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x000a1f88 cmp r3, 0 |
| if (r3 == 0) {
0x000a1f8a beq.w 0xa2170 | goto label_130;
| }
0x000a1f8e ldrb r3, [r5, 2] | r3 = *((r5 + 2));
0x000a1f90 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x000a1f92 cmp r3, 0 |
| if (r3 != 0) {
0x000a1f94 bne.w 0xa26a0 | goto label_131;
| }
0x000a1f98 ldr.w r8, [pc, 0x97c] | r8 = *(0x000a2918);
0x000a1f9c adds r0, 6 | r0 += 6;
0x000a1f9e add.w sb, r5, r0, lsl 2 | sb = r5 + (r0 << 2);
0x000a1fa2 movs r3, 1 | r3 = 1;
0x000a1fa4 strb r3, [r5, 2] | *((r5 + 2)) = r3;
0x000a1fa6 add r8, pc | r8 += pc;
| label_14:
0x000a1fa8 ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x000a1faa subs r6, 1 | r6--;
0x000a1fac vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x000a1fb0 mov fp, r4 |
0x000a1fb2 str.w sb, [sp, 0x7c] | __asm ("str.w sb, [var_7ch_2]");
0x000a1fb6 str r3, [sp, 0x68] | var_68h_2 = r3;
0x000a1fb8 movs r3, 0 | r3 = 0;
0x000a1fba strd r3, r3, [sp, 0x38] | __asm ("strd r3, r3, [sp, 0x38]");
0x000a1fbe ldr r3, [r4] | r3 = *(r4);
0x000a1fc0 strd sb, r7, [sp, 0x24] | __asm ("strd sb, r7, [sp, 0x24]");
0x000a1fc4 str.w r8, [sp, 0x2c] | __asm ("str.w r8, [var_2ch_3]");
0x000a1fc8 str r3, [sp, 0x18] | var_18h_2 = r3;
0x000a1fca add r3, sp, 0x54 | r3 += var_54h;
0x000a1fcc str r3, [sp, 0x14] | var_14h = r3;
| label_13:
0x000a1fce ldrb r1, [r6, 1]! | r1 = *((r6 += 1));
0x000a1fd2 cmp r1, 0 |
| if (r1 == 0) {
0x000a1fd4 beq.w 0xa25fa | goto label_132;
| }
0x000a1fd8 sub.w r3, r1, 0x61 | r3 = r1 - 0x61;
0x000a1fdc strb.w r1, [sp, 0x78] | var_78h_2 = r1;
0x000a1fe0 cmp r3, 0x18 |
| if (r3 > 0x18) {
0x000a1fe2 bhi 0xa2030 | goto label_133;
| }
| /* switch table (26 cases) at 0xa1fe8 */
0x000a1fe4 tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
| label_126:
0x000a201a ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x000a201c blx 0x82e8 | fcn_000082e8 ();
0x000a2020 ldr r7, [r4] | r7 = *(r4);
0x000a2022 mov r6, r0 | r6 = r0;
0x000a2024 cmp r0, 0 |
0x000a2026 bne 0xa1f4e |
| } while (r0 != 0);
0x000a2028 ldr.w r6, [pc, 0x8f0] |
0x000a202c add r6, pc | r6 = 0x14494c;
0x000a202e b 0xa1f4e | goto label_12;
| label_133:
0x000a2030 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a2032 ldr.w sb, [fp, 0x10] | sb = *(arg_10h);
0x000a2036 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x000a203a movs r3, 0 | r3 = 0;
0x000a203c str r3, [sp, 0x48] | var_48h_2 = r3;
0x000a203e ldr.w r8, [sb] | r8 = *(sb);
0x000a2042 str.w fp, [sp, 0x50] | __asm ("str.w fp, [var_50h_2]");
0x000a2046 cmp.w r8, 5 |
| if (r8 == 5) {
0x000a204a beq 0xa2086 | goto label_134;
| }
0x000a204c ldr.w sl, [pc, 0x8d0] | sl = *(0x000a2920);
0x000a2050 add r5, sp, 0x48 | r5 += var_48h_2;
0x000a2052 mov r3, r5 | r3 = r5;
0x000a2054 mov r4, sb | r4 = sb;
0x000a2056 mov r5, r8 | r5 = r8;
0x000a2058 add r7, sp, 0x50 | r7 += var_50h_2;
0x000a205a add sl, pc | sl += pc;
0x000a205c mov r8, r3 | r8 = r3;
| do {
0x000a205e mov r3, r7 | r3 = r7;
0x000a2060 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a2062 mov r2, sl | r2 = sl;
0x000a2064 mov r1, r8 | r1 = r8;
0x000a2066 bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a206a clz r3, r0 | r3 &= r0;
0x000a206e cmp r5, 2 |
0x000a2070 lsr.w r3, r3, 5 | r3 >>= 5;
0x000a2074 it eq |
| if (r5 != 2) {
0x000a2076 moveq r3, 0 | r3 = 0;
| }
0x000a2078 cmp r3, 0 |
| if (r3 == 0) {
0x000a207a beq.w 0xa25ac | goto label_135;
| }
0x000a207e ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000a2080 ldr r5, [r4] | r5 = *(r4);
0x000a2082 cmp r5, 5 |
0x000a2084 bne 0xa205e |
| } while (r5 != 5);
| label_134:
0x000a2086 movs r3, 0 | r3 = 0;
0x000a2088 str r3, [sp, 0x38] | var_38h_3 = r3;
| label_23:
0x000a208a ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000a208c cmp r3, 0 |
| if (r3 == 0) {
0x000a208e beq.w 0xa27ca | goto label_136;
| }
0x000a2092 ldr.w r3, [fp, 0x1c] | r3 = *(arg_1ch);
| if (r3 != 0) {
0x000a2096 cbz r3, 0xa20b0 |
0x000a2098 movs r3, 0 | r3 = 0;
0x000a209a ldr r0, [sp, 0x18] | r0 = var_18h_2;
0x000a209c add r2, sp, 0x70 | r2 += var_70h_3;
0x000a209e add r1, sp, 0x3c | r1 += var_3ch_3;
0x000a20a0 str r3, [sp] | *(sp) = r3;
0x000a20a2 bl 0x88bfc | r0 = fcn_00088bfc (r0, r1, r2, r3);
0x000a20a6 mov r8, r0 | r8 = r0;
0x000a20a8 str r0, [sp, 0x38] | var_38h_3 = r0;
0x000a20aa cmp r0, 0 |
| if (r0 != 0) {
0x000a20ac bne.w 0xa25c2 | goto label_137;
| }
| }
0x000a20b0 movs r1, 0 | r1 = 0;
0x000a20b2 str r1, [sp, 0x50] | var_50h_2 = r1;
0x000a20b4 ldr.w sl, [sb] | sl = *(sb);
0x000a20b8 cmp.w sl, 5 |
| if (sl == 5) {
0x000a20bc beq.w 0xa28f0 | goto label_138;
| }
0x000a20c0 ldr.w r8, [pc, 0x860] | r8 = *(0x000a2924);
0x000a20c4 add r7, sp, 0x50 | r7 += var_50h_2;
0x000a20c6 mov r3, r7 | r3 = r7;
0x000a20c8 mov r4, sb | r4 = sb;
0x000a20ca mov r7, sl | r7 = sl;
0x000a20cc add r5, sp, 0x60 | r5 += var_60h_2;
0x000a20ce add r8, pc | r8 += pc;
0x000a20d0 mov sl, r3 | sl = r3;
| do {
0x000a20d2 mov r3, r5 | r3 = r5;
0x000a20d4 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a20d6 mov r2, r8 | r2 = r8;
0x000a20d8 mov r1, sl | r1 = sl;
0x000a20da bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a20de clz r3, r0 | r3 &= r0;
0x000a20e2 cmp r7, 2 |
0x000a20e4 lsr.w r3, r3, 5 | r3 >>= 5;
0x000a20e8 it eq |
| if (r7 != 2) {
0x000a20ea moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x000a20ec cbz r3, 0xa2100 | goto label_139;
| }
0x000a20ee ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000a20f0 ldr r7, [r4] | r7 = *(r4);
0x000a20f2 cmp r7, 5 |
0x000a20f4 bne 0xa20d2 |
| } while (r7 != 5);
0x000a20f6 ldr r1, [sp, 0x50] | r1 = var_50h_2;
| label_46:
0x000a20f8 mov r0, r4 | r0 = r4;
0x000a20fa mov r2, r5 | r2 = r5;
0x000a20fc bl 0xa1ce8 | fcn_000a1ce8 (r0, r1, r2, r3, r4, r5, r6);
| label_139:
0x000a2100 str r0, [sp, 0x38] | var_38h_3 = r0;
0x000a2102 add r1, sp, 0x38 | r1 += var_38h_3;
0x000a2104 mov r0, fp | r0 = fp;
0x000a2106 bl 0x88d48 | fcn_00088d48 (r0, r1, r2);
0x000a210a ldr.w r8, [sp, 0x38] | r8 = var_38h_3;
0x000a210e cmp.w r8, 0 |
| if (r8 == 0) {
0x000a2112 beq.w 0xa27d0 | goto label_140;
| }
0x000a2116 mov r4, fp | r4 = fp;
0x000a2118 ldrd sb, r7, [sp, 0x24] | __asm ("ldrd sb, r7, [var_70h]");
0x000a211c mov fp, r8 |
0x000a211e ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a2122 ldr.w r8, [sp, 0x2c] | r8 = var_2ch_3;
0x000a2126 b 0xa25d4 | goto label_141;
0x000a2128 add r5, sp, 0x60 | r5 += var_60h_2;
0x000a212a mov r0, r5 | r0 = r5;
0x000a212c bl 0xbdb8 | fcn_0000bdb8 (r0, r1);
0x000a2130 movs r1, 0 | r1 = 0;
0x000a2132 lsls r2, r0, 2 | r2 = r0 << 2;
0x000a2134 ldr r0, [sp, 0x7c] | r0 = var_7ch_2;
0x000a2136 blx 0x839c | fcn_0000839c ();
0x000a213a ldr.w r0, [fp, 0x10] | r0 = *(arg_10h);
0x000a213e mov r1, r5 | r1 = r5;
0x000a2140 bl 0x12158 | fcn_00012158 (r0, r1);
0x000a2144 ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a2148 mov r8, r0 | r8 = r0;
0x000a214a str r0, [sp, 0x38] | var_38h_3 = r0;
| label_15:
0x000a214c ldrb r1, [r6] | r1 = *(r6);
0x000a214e mov r0, r5 | r0 = r5;
0x000a2150 bl 0xbdb8 | r0 = fcn_0000bdb8 (r0, r1);
0x000a2154 add.w r0, sl, r0, lsl 2 | r0 = sl + (r0 << 2);
0x000a2158 str r0, [sp, 0x7c] | var_7ch_2 = r0;
0x000a215a cmp.w r8, 0 |
| if (r8 == 0) {
0x000a215e beq.w 0xa1fce | goto label_13;
| }
0x000a2162 mov r4, fp | r4 = fp;
0x000a2164 ldrd sb, r7, [sp, 0x24] | __asm ("ldrd sb, r7, [var_70h]");
0x000a2168 mov fp, r8 |
0x000a216a ldr.w r8, [sp, 0x2c] | r8 = var_2ch_3;
0x000a216e b 0xa2606 | goto label_142;
| label_130:
0x000a2170 ldr.w r8, [pc, 0x7b4] | r8 = *(0x000a2928);
0x000a2174 movs r3, 1 | r3 = 1;
0x000a2176 add.w sb, r5, 0x14 | sb = r5 + 0x14;
0x000a217a strb r3, [r5, 1] | *((r5 + 1)) = r3;
0x000a217c add r8, pc | r8 += pc;
0x000a217e b 0xa1fa8 | goto label_14;
| label_129:
0x000a2180 strb r3, [r5] | *(r5) = r3;
0x000a2182 ldrh r3, [r5] | r3 = *(r5);
0x000a2184 cmp r3, 0 |
| if (r3 == 0) {
0x000a2186 beq.w 0xa26c8 | goto label_143;
| }
| label_29:
0x000a218a movs r3, 0 | r3 = 0;
0x000a218c str r3, [r4, 0x5c] | *((r4 + 0x5c)) = r3;
| label_128:
0x000a218e ldr r5, [r4, 0x10] | r5 = *((r4 + 0x10));
0x000a2190 movs r3, 0 | r3 = 0;
0x000a2192 str r3, [sp, 0x48] | var_48h_2 = r3;
0x000a2194 str r3, [sp, 0x50] | var_50h_2 = r3;
0x000a2196 ldr.w r8, [r5] | r8 = *(r5);
0x000a219a cmp.w r8, 5 |
| if (r8 == 5) {
0x000a219e beq.w 0xa28de | goto label_144;
| }
0x000a21a2 ldr.w fp, [pc, 0x788] | fp = *(0x000a292c);
0x000a21a6 mov r3, r8 | r3 = r8;
0x000a21a8 add.w sl, sp, 0x48 | sl += var_48h_2;
0x000a21ac mov r8, r4 | r8 = r4;
0x000a21ae add.w sb, sp, 0x50 | sb += var_50h_2;
0x000a21b2 mov r4, r3 | r4 = r3;
0x000a21b4 add fp, pc |
| do {
0x000a21b6 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000a21b8 mov r3, sl | r3 = sl;
0x000a21ba mov r2, fp | r2 = fp;
0x000a21bc mov r1, sb | r1 = sb;
0x000a21be bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a21c2 clz r0, r0 | r0 &= r0;
0x000a21c6 cmp r4, 2 |
0x000a21c8 lsr.w r0, r0, 5 | r0 >>= 5;
0x000a21cc it eq |
| if (r4 != 2) {
0x000a21ce moveq r0, 0 | r0 = 0;
| }
0x000a21d0 cmp r0, 0 |
| if (r0 == 0) {
0x000a21d2 beq.w 0xa269a | goto label_145;
| }
0x000a21d6 ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x000a21d8 ldr r4, [r5] | r4 = *(r5);
0x000a21da cmp r4, 5 |
0x000a21dc bne 0xa21b6 |
| } while (r4 != 5);
0x000a21de ldr r2, [sp, 0x48] | r2 = var_48h_2;
0x000a21e0 mov r4, r8 | r4 = r8;
0x000a21e2 ldr r3, [sp, 0x50] | r3 = var_50h_2;
0x000a21e4 adds r2, 1 | r2++;
| label_43:
0x000a21e6 str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
| label_28:
0x000a21e8 str r2, [r4, 0x18] | *((r4 + 0x18)) = r2;
0x000a21ea str r2, [sp, 0x68] | var_68h_2 = r2;
0x000a21ec ldrb r2, [r6] | r2 = *(r6);
0x000a21ee cmp r2, 0 |
| if (r2 == 0) {
0x000a21f0 beq.w 0xa28e2 | goto label_146;
| }
0x000a21f4 mov.w sl, 0 | sl = 0;
0x000a21f8 mov.w fp, 1 |
0x000a21fc movt fp, 0xc2 |
0x000a2200 mov sb, r6 | sb = r6;
0x000a2202 mov r5, sl | r5 = sl;
0x000a2204 add.w r8, sp, 0x60 | r8 += var_60h_2;
| label_19:
0x000a2208 cmp r2, 0x63 |
0x000a220a it ne |
| if (r2 != 0x63) {
0x000a220c cmpne r2, 0x70 | __asm ("cmpne r2, 0x70");
| }
0x000a220e str r5, [sp, 0x50] | var_50h_2 = r5;
| if (r2 == 0x63) {
0x000a2210 beq.w 0xa24a8 | goto label_21;
| }
0x000a2214 cmp r2, 0x6e |
| if (r2 == 0x6e) {
0x000a2216 beq.w 0xa249e | goto label_147;
| }
0x000a221a cmp r2, 0x61 |
| if (r2 == 0x61) {
0x000a221c beq.w 0xa249e | goto label_147;
| }
0x000a2220 cmp r2, 0x6c |
| if (r2 == 0x6c) {
0x000a2222 beq.w 0xa2530 | goto label_148;
| }
0x000a2226 sub.w r3, r2, 0x62 | r3 = r2 - 0x62;
0x000a222a uxtb r3, r3 | r3 = (int8_t) r3;
0x000a222c cmp r3, 0x17 |
| if (r3 <= 0x17) {
0x000a222e bhi 0xa223a |
0x000a2230 lsr.w r3, fp, r3 | r3 = fp >> r3;
0x000a2234 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 < r3) {
0x000a2236 bmi.w 0xa24a8 | goto label_21;
| }
| }
| label_18:
0x000a223a ldr.w r1, [pc, 0x6f4] |
0x000a223e add r0, sp, 0x50 | r0 += var_50h_2;
0x000a2240 add r1, pc | r1 = 0x144b76;
0x000a2242 bl 0x4c1a8 | fcn_0004c1a8 (r0);
0x000a2246 ldr r4, [sp, 0x50] | r4 = var_50h_2;
0x000a2248 mov.w r2, -1 | r2 = -1;
0x000a224c ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000a224e mov r1, r4 | r1 = r4;
0x000a2250 blx 0x8798 | fcn_00008798 ();
0x000a2254 mov r0, r4 | r0 = r4;
0x000a2256 blx 0x8404 | fcn_00008404 ();
| label_25:
0x000a225a ldr.w r0, [r7, 0xfc] | r0 = *((r7 + 0xfc));
0x000a225e blx 0x8b04 | fcn_00008b04 ();
0x000a2262 movs r3, 0 | r3 = 0;
0x000a2264 ldr.w r2, [pc, 0x6cc] |
0x000a2268 str.w r3, [r7, 0xfc] | __asm ("str.w r3, [r7, 0xfc]");
0x000a226c ldr.w r3, [pc, 0x698] | r3 = *(0xa2908);
0x000a2270 add r2, pc | r2 = 0x144ba8;
0x000a2272 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a2274 ldr r2, [r3] | r2 = imp.sinh;
0x000a2276 ldr r3, [sp, 0x84] | r3 = var_84h;
0x000a2278 eors r2, r3 | r2 ^= r3;
0x000a227a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a227e bne.w 0xa2900 | goto label_149;
| }
0x000a2282 add sp, 0x8c |
0x000a2284 vpop {d8} | __asm ("vpop {d8}");
0x000a2288 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000a228c ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000a228e ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a2292 ldr.w r8, [sp, 0x38] | r8 = var_38h_3;
0x000a2296 cmp r3, 0 |
| if (r3 == 0) {
0x000a2298 beq.w 0xa2470 | goto label_32;
| }
0x000a229c ldr r3, [sp, 0x68] | r3 = var_68h_2;
0x000a229e add r5, sp, 0x60 | r5 += var_60h_2;
0x000a22a0 str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x000a22a4 b 0xa214c | goto label_15;
0x000a22a6 ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000a22a8 cmp r3, 0 |
| if (r3 != 0) {
0x000a22aa bne.w 0xa2642 | goto label_150;
| }
| label_17:
0x000a22ae ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a22b2 add r5, sp, 0x60 | r5 += var_60h_2;
0x000a22b4 ldr.w r8, [sp, 0x38] | r8 = var_38h_3;
0x000a22b8 b 0xa214c | goto label_15;
0x000a22ba movs r3, 0 | r3 = 0;
0x000a22bc ldr r0, [sp, 0x18] | r0 = var_18h_2;
0x000a22be add r2, sp, 0x50 | r2 += var_50h_2;
0x000a22c0 movs r1, 0x15 | r1 = 0x15;
0x000a22c2 ldrd r4, r5, [fp, 0x20] | __asm ("ldrd r4, r5, [arg_20h]");
0x000a22c6 mov r7, r3 | r7 = r3;
0x000a22c8 str r3, [sp, 0x50] | var_50h_2 = r3;
0x000a22ca bl 0x7c1d8 | r0 = fcn_0007c1d8 (r0, r1, r2, r3, r4, r5);
0x000a22ce mov r8, r0 | r8 = r0;
0x000a22d0 cmp r0, 0 |
| if (r0 == 0) {
0x000a22d2 beq.w 0xa266a | goto label_151;
| }
0x000a22d6 ldr r5, [sp, 0x50] | r5 = var_50h_2;
0x000a22d8 str r0, [sp, 0x38] | var_38h_3 = r0;
| label_27:
0x000a22da mov r0, r5 | r0 = r5;
0x000a22dc add r5, sp, 0x60 | r5 += var_60h_2;
0x000a22de blx 0x81f8 | fcn_000081f8 ();
0x000a22e2 ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a22e6 b 0xa214c | goto label_15;
0x000a22e8 ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000a22ea ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a22ee ldr.w r8, [sp, 0x38] | r8 = var_38h_3;
0x000a22f2 cmp r3, 0 |
| if (r3 == 0) {
0x000a22f4 beq.w 0xa2470 | goto label_32;
| }
0x000a22f8 ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x000a22fa add r5, sp, 0x60 | r5 += var_60h_2;
0x000a22fc str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x000a2300 b 0xa214c | goto label_15;
0x000a2302 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a2304 ldr.w r4, [fp, 0x10] | r4 = *(arg_10h);
0x000a2308 vst1.32 {d8}, [r3] | __asm ("vst1.32 {d8}, [r3]");
0x000a230c movs r3, 0 | r3 = 0;
0x000a230e str r3, [sp, 0x48] | var_48h_2 = r3;
0x000a2310 ldr.w sl, [r4] | sl = *(r4);
0x000a2314 str.w fp, [sp, 0x50] | __asm ("str.w fp, [var_50h_2]");
0x000a2318 cmp.w sl, 5 |
| if (sl == 5) {
0x000a231c beq 0xa2356 | goto label_152;
| }
0x000a231e ldr.w sb, [pc, 0x618] | sb = *(0x000a2938);
0x000a2322 add r5, sp, 0x48 | r5 += var_48h_2;
0x000a2324 add r7, sp, 0x50 | r7 += var_50h_2;
0x000a2326 add sb, pc | sb += pc;
| do {
0x000a2328 mov r3, r7 | r3 = r7;
0x000a232a ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a232c mov r2, sb | r2 = sb;
0x000a232e mov r1, r5 | r1 = r5;
0x000a2330 bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a2334 clz r3, r0 | r3 &= r0;
0x000a2338 cmp.w sl, 2 |
0x000a233c lsr.w r3, r3, 5 | r3 >>= 5;
0x000a2340 it eq |
| if (sl != 2) {
0x000a2342 moveq r3, 0 | r3 = 0;
| }
0x000a2344 cmp r3, 0 |
| if (r3 == 0) {
0x000a2346 beq.w 0xa25b8 | goto label_153;
| }
0x000a234a ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000a234c ldr.w sl, [r4] | sl = *(r4);
0x000a2350 cmp.w sl, 5 |
0x000a2354 bne 0xa2328 |
| } while (sl != 5);
| label_152:
0x000a2356 movs r3, 0 | r3 = 0;
0x000a2358 str r3, [sp, 0x38] | var_38h_3 = r3;
| label_24:
0x000a235a ldr.w r4, [fp, 0x18] | r4 = *(arg_18h);
0x000a235e movs r5, 0 | r5 = 0;
0x000a2360 mov r1, r5 | r1 = r5;
0x000a2362 mov.w r8, 7 | r8 = 7;
0x000a2366 lsls r4, r4, 4 | r4 <<= 4;
0x000a2368 mov r0, r4 | r0 = r4;
0x000a236a blx 0x8240 | r0 = fcn_00008240 ();
0x000a236e mov sb, r0 | sb = r0;
0x000a2370 str r0, [sp, 0x1c] | var_1ch_3 = r0;
0x000a2372 cmp r0, 0 |
| if (r0 == 0) {
0x000a2374 beq 0xa2468 | goto label_154;
| }
0x000a2376 mov r2, r4 | r2 = r4;
0x000a2378 mov r1, r5 | r1 = r5;
0x000a237a blx 0x839c | fcn_0000839c ();
0x000a237e ldr.w r4, [fp, 0x10] | r4 = *(arg_10h);
0x000a2382 str r5, [sp, 0x50] | var_50h_2 = r5;
0x000a2384 ldr r5, [r4] | r5 = *(r4);
0x000a2386 cmp r5, 5 |
| if (r5 == 5) {
0x000a2388 beq.w 0xa28ec | goto label_155;
| }
0x000a238c ldr.w r8, [pc, 0x5ac] | r8 = *(0x000a293c);
0x000a2390 add r7, sp, 0x50 | r7 += var_50h_2;
0x000a2392 add r8, pc | r8 += pc;
| do {
0x000a2394 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a2396 mov r3, sb | r3 = sb;
0x000a2398 mov r2, r8 | r2 = r8;
0x000a239a mov r1, r7 | r1 = r7;
0x000a239c bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a23a0 clz r0, r0 | r0 &= r0;
0x000a23a4 cmp r5, 2 |
0x000a23a6 lsr.w r0, r0, 5 | r0 >>= 5;
0x000a23aa it eq |
| if (r5 != 2) {
0x000a23ac moveq r0, 0 | r0 = 0;
| }
| if (r0 == 0) {
0x000a23ae cbz r0, 0xa23c2 | goto label_156;
| }
0x000a23b0 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000a23b2 ldr r5, [r4] | r5 = *(r4);
0x000a23b4 cmp r5, 5 |
0x000a23b6 bne 0xa2394 |
| } while (r5 != 5);
0x000a23b8 ldr r3, [sp, 0x50] | r3 = var_50h_2;
0x000a23ba ldr r2, [sp, 0x1c] | r2 = var_1ch_3;
0x000a23bc add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
| label_45:
0x000a23c0 str r4, [r3] | *(r3) = r4;
| label_156:
0x000a23c2 ldr r5, [sp, 0x68] | r5 = var_68h_2;
0x000a23c4 cmp r5, 0 |
| if (r5 <= 0) {
0x000a23c6 ble 0xa23e2 | goto label_157;
| }
0x000a23c8 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x000a23ca movs r2, 0 | r2 = 0;
0x000a23cc add.w r0, r3, r5, lsl 4 | r0 = r3 + (r5 << 4);
| do {
0x000a23d0 ldr r1, [r3] | r1 = *(r3);
0x000a23d2 adds r3, 0x10 | r3 += 0x10;
0x000a23d4 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x000a23d6 ldr r1, [r1, 0x40] | r1 = *((r1 + 0x40));
0x000a23d8 subs r2, r2, r1 | r2 -= r1;
0x000a23da str r2, [r3, -0xc] | *((r3 - 0xc)) = r2;
0x000a23de cmp r0, r3 |
0x000a23e0 bne 0xa23d0 |
| } while (r0 != r3);
| label_157:
0x000a23e2 ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x000a23e4 cmp r3, 0 |
0x000a23e6 ittt gt |
| if (r3 <= 0) {
0x000a23e8 addgt r3, sp, 0x50 | r3 += var_50h_2;
| }
| if (r3 <= 0) {
0x000a23ea movgt r4, 0 | r4 = 0;
| }
| if (r3 <= 0) {
0x000a23ec strgt r3, [sp, 0x20] | var_20h_3 = r3;
| }
| if (r3 <= 0) {
0x000a23ee ble.w 0xa28fa | goto label_158;
| }
| label_39:
0x000a23f2 cmp r5, 0 |
| if (r5 <= 0) {
0x000a23f4 ble.w 0xa28f6 | goto label_159;
| }
0x000a23f8 mov.w sb, 0 | sb = 0;
0x000a23fc ldr r5, [sp, 0x1c] | r5 = var_1ch_3;
0x000a23fe mov r8, sb | r8 = sb;
0x000a2400 str r6, [sp, 0x30] | var_30h_2 = r6;
0x000a2402 b 0xa241e | goto label_160;
| label_16:
0x000a2404 subs r0, 2 | r0 -= 2;
0x000a2406 add.w sb, sb, 1 | sb++;
0x000a240a add r0, r6 | r0 += r6;
0x000a240c str r3, [r5, 8] | *((r5 + 8)) = r3;
0x000a240e str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
| do {
0x000a2410 ldr r3, [sp, 0x68] | r3 = var_68h_2;
0x000a2412 add.w r8, r8, 1 | r8++;
0x000a2416 adds r5, 0x10 | r5 += 0x10;
0x000a2418 cmp r8, r3 |
| if (r8 >= r3) {
0x000a241a bge.w 0xa2828 | goto label_161;
| }
| label_160:
0x000a241e mov r3, r5 | r3 = r5;
0x000a2420 mov r2, r4 | r2 = r4;
0x000a2422 ldr r1, [r3], 8 | r1 = *(r3);
| r3 += 8;
0x000a2426 mov r0, fp | r0 = fp;
0x000a2428 bl 0xa0524 | r0 = fcn_000a0524 (r0, r1, r2, r3, r4, r5, r6);
0x000a242c mov r7, r0 | r7 = r0;
0x000a242e cmp r0, 0 |
| if (r0 != 0) {
0x000a2430 bne.w 0xa2822 | goto label_162;
| }
0x000a2434 ldr.w sl, [r5, 8] | sl = *((r5 + 8));
0x000a2438 cmp.w sl, 0 |
0x000a243c beq 0xa2410 |
| } while (sl == 0);
0x000a243e ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x000a2440 mov r0, sl | r0 = sl;
0x000a2442 ldr r1, [sp, 0x20] | r1 = var_20h_3;
0x000a2444 str r6, [r5, 0xc] | *((r5 + 0xc)) = r6;
0x000a2446 bl 0xb604 | r0 = fcn_0000b604 (r0, r1);
0x000a244a add.w r3, sl, r0 | r3 = sl + r0;
0x000a244e ldrd r0, r1, [sp, 0x50] | __asm ("ldrd r0, r1, [var_50h_2]");
0x000a2452 cmp r0, 2 |
0x000a2454 sbcs r1, r1, 0 | __asm ("sbcs r1, r1, 0");
| if (r0 >= 2) {
0x000a2458 bhs 0xa2404 | goto label_16;
| }
0x000a245a ldr r6, [sp, 0x30] | r6 = var_30h_2;
0x000a245c movw r8, 0x10b | r8 = 0x10b;
0x000a2460 str r7, [r5, 8] | *((r5 + 8)) = r7;
| label_34:
0x000a2462 ldr r0, [sp, 0x1c] | r0 = var_1ch_3;
0x000a2464 blx 0x8404 | fcn_00008404 ();
| label_154:
0x000a2468 str.w r8, [sp, 0x38] | __asm ("str.w r8, [var_38h_3]");
| label_22:
0x000a246c ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
| label_32:
0x000a2470 add r5, sp, 0x60 | r5 += var_60h_2;
0x000a2472 b 0xa214c | goto label_15;
0x000a2474 ldr r3, [sp, 0x10] | r3 = var_10h_3;
0x000a2476 cmp r3, 0 |
| if (r3 == 0) {
0x000a2478 beq.w 0xa22ae | goto label_17;
| }
0x000a247c add r3, sp, 0x44 | r3 += var_44h_3;
0x000a247e ldr r0, [sp, 0x18] | r0 = var_18h_2;
0x000a2480 str r3, [sp] | *(sp) = r3;
0x000a2482 add r2, sp, 0x48 | r2 += var_48h_2;
0x000a2484 add r3, sp, 0x40 | r3 += var_40h_3;
0x000a2486 add r1, sp, 0x3c | r1 += var_3ch_3;
0x000a2488 bl 0x88bfc | r0 = fcn_00088bfc (r0, r1, r2, r3);
0x000a248c mov r8, r0 | r8 = r0;
0x000a248e str r0, [sp, 0x38] | var_38h_3 = r0;
0x000a2490 cmp r0, 0 |
| if (r0 == 0) {
0x000a2492 beq.w 0xa2764 | goto label_163;
| }
0x000a2496 ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a249a add r5, sp, 0x60 | r5 += var_60h_2;
0x000a249c b 0xa214c | goto label_15;
| label_147:
0x000a249e ldrb.w r3, [r7, 0xec] | r3 = *((r7 + 0xec));
0x000a24a2 cmp r3, 0 |
| if (r3 == 0) {
0x000a24a4 beq.w 0xa223a | goto label_18;
| }
| label_21:
0x000a24a8 ldrb.w r1, [sb] | r1 = *(sb);
0x000a24ac mov r0, r8 | r0 = r8;
0x000a24ae bl 0xbdb8 | fcn_0000bdb8 (r0, r1);
0x000a24b2 ldrb r2, [sb, 1]! | r2 = *((sb += 1));
0x000a24b6 add sl, r0 | sl += r0;
0x000a24b8 cmp r2, 0 |
| if (r2 != 0) {
0x000a24ba bne.w 0xa2208 | goto label_19;
| }
0x000a24be adds.w r8, sl, 3 | r8 = sl + 3;
0x000a24c2 adc r2, r2, 0 | __asm ("adc r2, r2, 0");
0x000a24c6 lsls r5, r2, 3 | r5 = r2 << 3;
0x000a24c8 orr.w r5, r5, r8, lsr 29 | r5 |= (r8 >> 29);
0x000a24cc lsl.w r8, r8, 3 | r8 <<= 3;
| label_44:
0x000a24d0 mov r0, r6 | r0 = r6;
0x000a24d2 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000a24d6 adds.w fp, r0, r8 |
0x000a24da mov sb, r0 | sb = r0;
0x000a24dc adc r1, r5, 0 | __asm ("adc r1, r5, 0");
0x000a24e0 adds.w fp, fp, 1 |
0x000a24e4 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000a24e8 mov r0, fp | r0 = fp;
0x000a24ea blx 0x8240 | r0 = fcn_00008240 ();
0x000a24ee mov r5, r0 | r5 = r0;
0x000a24f0 cmp r0, 0 |
| if (r0 == 0) {
0x000a24f2 beq.w 0xa26d8 | goto label_164;
| }
0x000a24f6 mov r2, fp | r2 = fp;
0x000a24f8 movs r1, 0 | r1 = 0;
0x000a24fa blx 0x839c | fcn_0000839c ();
0x000a24fe lsl.w r3, sl, 2 | r3 = sl << 2;
0x000a2502 movs r1, 0x14 | r1 = 0x14;
0x000a2504 str r1, [r5, 0x10] | *((r5 + 0x10)) = r1;
0x000a2506 add.w r0, r5, r8 | r0 = r5 + r8;
0x000a250a adds r3, 0x18 | r3 += 0x18;
0x000a250c add.w r1, sl, 5 | r1 = sl + 5;
0x000a2510 str.w r3, [r5, r1, lsl 2] | __asm ("str.w r3, [r5, r1, lsl 2]");
0x000a2514 add.w r2, sb, 1 | r2 = sb + 1;
0x000a2518 mov r1, r6 | r1 = r6;
0x000a251a str.w sl, [r5, 4] | __asm ("str.w sl, [r5, 4]");
0x000a251e str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x000a2520 blx 0x8610 | fcn_00008610 ();
0x000a2524 movs r3, 1 | r3 = 1;
0x000a2526 strb r3, [r5] | *(r5) = r3;
0x000a2528 str r3, [sp, 0x10] | var_10h_3 = r3;
0x000a252a strd r3, r5, [r4, 0x58] | __asm ("strd r3, r5, [r4, 0x58]");
0x000a252e b 0xa1f86 | goto label_20;
| label_148:
0x000a2530 ldrb.w r3, [r7, 0xee] | r3 = *((r7 + 0xee));
0x000a2534 cmp r3, 0 |
| if (r3 == 0) {
0x000a2536 beq.w 0xa223a | goto label_18;
| }
0x000a253a b 0xa24a8 | goto label_21;
| label_125:
0x000a253c ldr.w r1, [pc, 0x400] |
0x000a2540 ldr.w r0, [pc, 0x400] | r0 = *(0x000a2944);
0x000a2544 add r1, pc | r1 = 0x144e88;
0x000a2546 add r0, pc | r0 += pc;
0x000a2548 blx 0x8644 | fcn_00008644 ();
0x000a254c mov.w r2, -1 | r2 = -1;
0x000a2550 mov r1, r0 | r1 = r0;
0x000a2552 mov r4, r0 | r4 = r0;
0x000a2554 ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000a2556 blx 0x8798 | fcn_00008798 ();
0x000a255a ldr r2, [pc, 0x3ec] |
0x000a255c ldr r3, [pc, 0x3a8] | r3 = *(0xa2908);
0x000a255e add r2, pc | r2 = 0x144eac;
0x000a2560 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a2562 ldr r2, [r3] | r2 = imp.sinh;
0x000a2564 ldr r3, [sp, 0x84] | r3 = var_84h;
0x000a2566 eors r2, r3 | r2 ^= r3;
0x000a2568 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a256c bne.w 0xa2900 | goto label_149;
| }
0x000a2570 mov r0, r4 | r0 = r4;
0x000a2572 add sp, 0x8c |
0x000a2574 vpop {d8} | __asm ("vpop {d8}");
0x000a2578 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a257c b.w 0x8400 | void (*0x8400)() ();
| label_127:
0x000a2580 ldr r1, [pc, 0x3c8] |
0x000a2582 ldr r2, [pc, 0x384] | r2 = *(0xa290a);
0x000a2584 add r1, pc | r1 = 0x144ed4;
0x000a2586 ldr r2, [r1, r2] | r2 = imp.sinh;
0x000a2588 ldr r1, [r2] | r1 = imp.sinh;
0x000a258a ldr r2, [sp, 0x84] | r2 = var_84h;
0x000a258c eors r1, r2 | r1 ^= r2;
0x000a258e mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x000a2592 bne.w 0xa2900 | goto label_149;
| }
0x000a2596 ldr r1, [pc, 0x3b8] |
0x000a2598 mov r2, r3 | r2 = r3;
0x000a259a ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000a259c add r1, pc | r1 = 0x144ef2;
0x000a259e add sp, 0x8c |
0x000a25a0 vpop {d8} | __asm ("vpop {d8}");
0x000a25a4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a25a8 b.w 0x865c | void (*0x865c)() ();
| label_135:
0x000a25ac mov r8, r0 | r8 = r0;
0x000a25ae str r0, [sp, 0x38] | var_38h_3 = r0;
0x000a25b0 cmp r0, 0 |
| if (r0 != 0) {
0x000a25b2 bne.w 0xa246c | goto label_22;
| }
0x000a25b6 b 0xa208a | goto label_23;
| label_153:
0x000a25b8 mov r8, r0 | r8 = r0;
0x000a25ba str r0, [sp, 0x38] | var_38h_3 = r0;
0x000a25bc cmp r0, 0 |
| if (r0 == 0) {
0x000a25be beq.w 0xa235a | goto label_24;
| }
| label_137:
0x000a25c2 mov r4, fp | r4 = fp;
0x000a25c4 ldrd sb, r7, [sp, 0x24] | __asm ("ldrd sb, r7, [var_70h]");
0x000a25c8 mov fp, r8 |
0x000a25ca ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a25ce ldr.w r8, [sp, 0x2c] | r8 = var_2ch_3;
0x000a25d2 add r5, sp, 0x60 | r5 += var_60h_2;
| label_141:
0x000a25d4 ldrb r1, [r6] | r1 = *(r6);
0x000a25d6 mov r0, r5 | r0 = r5;
0x000a25d8 bl 0xbdb8 | r0 = fcn_0000bdb8 (r0, r1);
0x000a25dc add.w r0, sl, r0, lsl 2 | r0 = sl + (r0 << 2);
0x000a25e0 str r0, [sp, 0x7c] | var_7ch_2 = r0;
0x000a25e2 ldr r0, [sp, 0x3c] | r0 = var_3ch_3;
0x000a25e4 blx 0x81f8 | fcn_000081f8 ();
0x000a25e8 ldr r3, [sp, 0x10] | r3 = var_10h_3;
| if (r3 != 0) {
0x000a25ea cbnz r3, 0xa2628 | goto label_165;
| }
| do {
0x000a25ec ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000a25ee mov r1, fp | r1 = fp;
0x000a25f0 blx 0x86c0 | fcn_000086c0 ();
0x000a25f4 mov r0, sb | r0 = sb;
0x000a25f6 blx r8 | uint32_t (*r8)(uint32_t) (r0);
0x000a25f8 b 0xa225a | goto label_25;
| label_132:
0x000a25fa ldrd sb, r7, [sp, 0x24] | __asm ("ldrd sb, r7, [var_70h]");
0x000a25fe mov r4, fp | r4 = fp;
0x000a2600 ldr.w r8, [sp, 0x2c] | r8 = var_2ch_3;
0x000a2604 mov fp, r1 |
| label_142:
0x000a2606 ldr r0, [sp, 0x3c] | r0 = var_3ch_3;
0x000a2608 blx 0x81f8 | fcn_000081f8 ();
0x000a260c ldr r3, [sp, 0x10] | r3 = var_10h_3;
| if (r3 != 0) {
0x000a260e cbnz r3, 0xa2628 | goto label_165;
| }
| label_26:
0x000a2610 cmp.w fp, 0 |
0x000a2614 bne 0xa25ec |
| } while (fp != 0);
0x000a2616 ldr r2, [r4, 0x5c] | r2 = *((r4 + 0x5c));
0x000a2618 mov r3, r8 | r3 = r8;
0x000a261a ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000a261c mov r1, sb | r1 = sb;
0x000a261e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000a2620 lsls r2, r2, 2 | r2 <<= 2;
0x000a2622 blx 0x8660 | fcn_00008660 ();
0x000a2626 b 0xa225a | goto label_25;
| label_165:
0x000a2628 ldr r0, [r4, 0x5c] | r0 = *((r4 + 0x5c));
0x000a262a movs r3, 1 | r3 = 1;
0x000a262c ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000a262e add.w r1, r0, 0x14 | r1 = r0 + 0x14;
0x000a2632 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x000a2634 adds r2, 6 | r2 += 6;
0x000a2636 lsls r2, r2, 2 | r2 <<= 2;
0x000a2638 add r0, r2 | r0 += r2;
0x000a263a subs r2, 0x18 | r2 -= 0x18;
0x000a263c blx 0x8610 | fcn_00008610 ();
0x000a2640 b 0xa2610 | goto label_26;
| label_150:
0x000a2642 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a2646 movs r3, 0 | r3 = 0;
0x000a2648 str r3, [sp] | *(sp) = r3;
0x000a264a add r2, sp, 0x50 | r2 += var_50h_2;
0x000a264c ldr r0, [sp, 0x18] | r0 = var_18h_2;
0x000a264e add r1, sp, 0x3c | r1 += var_3ch_3;
0x000a2650 vstr d16, [sp, 0x50] | __asm ("vstr d16, [sp, 0x50]");
0x000a2654 add r5, sp, 0x60 | r5 += var_60h_2;
0x000a2656 bl 0x88bfc | fcn_00088bfc (r0, r1, r2, r3);
0x000a265a ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a265e mov r8, r0 | r8 = r0;
0x000a2660 ldr r3, [sp, 0x50] | r3 = var_50h_2;
0x000a2662 str r0, [sp, 0x38] | var_38h_3 = r0;
0x000a2664 str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x000a2668 b 0xa214c | goto label_15;
| label_151:
0x000a266a mov r3, r5 | r3 = r5;
0x000a266c ldr r5, [sp, 0x50] | r5 = var_50h_2;
0x000a266e mov r2, r4 | r2 = r4;
0x000a2670 movs r1, 1 | r1 = 1;
0x000a2672 mov r0, r5 | r0 = r5;
0x000a2674 blx 0x84e8 | fcn_000084e8 ();
0x000a2678 mov r0, r5 | r0 = r5;
0x000a267a blx 0x8728 | r0 = fcn_00008728 ();
0x000a267e cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000a2680 beq 0xa26e8 | goto label_166;
| }
| label_30:
0x000a2682 mov r0, r5 | r0 = r5;
0x000a2684 movw r8, 0x10b | r8 = 0x10b;
0x000a2688 blx 0x81f8 | r0 = fcn_000081f8 ();
0x000a268c cmp r0, 0 |
0x000a268e it ne |
| if (r0 == 0) {
0x000a2690 movne r8, r0 | r8 = r0;
| }
0x000a2692 movs r5, 0 | r5 = 0;
0x000a2694 str.w r8, [sp, 0x38] | __asm ("str.w r8, [var_38h_3]");
0x000a2698 b 0xa22da | goto label_27;
| label_145:
0x000a269a ldr r2, [sp, 0x48] | r2 = var_48h_2;
0x000a269c mov r4, r8 | r4 = r8;
0x000a269e b 0xa21e8 | goto label_28;
| label_131:
0x000a26a0 lsls r0, r0, 2 | r0 <<= 2;
0x000a26a2 movs r1, 0 | r1 = 0;
0x000a26a4 blx 0x8240 | r0 = fcn_00008240 ();
0x000a26a8 mov sb, r0 | sb = r0;
| if (r0 != 0) {
0x000a26aa cbz r0, 0xa26be |
0x000a26ac ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000a26ae cmp r3, 0 |
| if (r3 != 0) {
0x000a26b0 bne.w 0xa28d0 | goto label_167;
| }
| label_42:
0x000a26b4 ldr r3, [pc, 0x29c] | r3 = *(0xa2954);
0x000a26b6 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000a26b8 ldr.w r8, [r2, r3] | r8 = *((r2 + r3));
0x000a26bc b 0xa1fa8 | goto label_14;
| }
0x000a26be ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000a26c0 movs r1, 7 | r1 = 7;
0x000a26c2 blx 0x86c0 | fcn_000086c0 ();
0x000a26c6 b 0xa225a | goto label_25;
| label_143:
0x000a26c8 ldrb r3, [r5, 2] | r3 = *((r5 + 2));
0x000a26ca cmp r3, 0 |
| if (r3 != 0) {
0x000a26cc bne.w 0xa218a | goto label_29;
| }
0x000a26d0 mov r0, r5 | r0 = r5;
0x000a26d2 blx 0x8404 | fcn_00008404 ();
0x000a26d6 b 0xa218a | goto label_29;
| label_164:
0x000a26d8 movs r3, 1 | r3 = 1;
0x000a26da ldr r0, [sp, 0xc] | r0 = var_ch_2;
0x000a26dc movs r1, 7 | r1 = 7;
0x000a26de strd r3, r5, [r4, 0x58] | __asm ("strd r3, r5, [r4, 0x58]");
0x000a26e2 blx 0x86c0 | fcn_000086c0 ();
0x000a26e6 b 0xa225a | goto label_25;
| label_166:
0x000a26e8 mov r1, r8 | r1 = r8;
0x000a26ea mov r0, r5 | r0 = r5;
0x000a26ec blx 0x858c | r0 = fcn_0000858c ();
0x000a26f0 cmp r0, 4 |
| if (r0 != 4) {
0x000a26f2 bne 0xa2682 | goto label_30;
| }
0x000a26f4 mov r1, r8 | r1 = r8;
0x000a26f6 mov r0, r5 | r0 = r5;
0x000a26f8 str.w r8, [sp, 0x38] | __asm ("str.w r8, [var_38h_3]");
0x000a26fc blx 0x8924 | fcn_00008924 ();
0x000a2700 mov r1, r8 | r1 = r8;
0x000a2702 mov r4, r0 | r4 = r0;
0x000a2704 mov r0, r5 | r0 = r5;
0x000a2706 blx 0x82f4 | fcn_000082f4 ();
0x000a270a ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x000a270c add r0, r4 | r0 += r4;
0x000a270e cmp r3, 0 |
| if (r3 <= 0) {
0x000a2710 ble.w 0xa22da | goto label_27;
| }
0x000a2714 ldr r3, [sp, 0x7c] | r3 = var_7ch_2;
0x000a2716 mov r7, r8 | r7 = r8;
0x000a2718 sub.w ip, r3, 4 |
0x000a271c b 0xa272c | goto label_168;
| label_31:
0x000a271e str r1, [ip, 4]! | *((ip += 4)) = r1;
0x000a2722 adds r7, 1 | r7++;
0x000a2724 ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x000a2726 cmp r7, r3 |
| if (r7 >= r3) {
0x000a2728 bge.w 0xa22da | goto label_27;
| }
| label_168:
0x000a272c cmp r0, r4 |
0x000a272e it ls |
| if (r0 > r4) {
0x000a2730 movls r1, 0 | r1 = 0;
| }
| if (r0 < r4) {
0x000a2732 bls 0xa2754 | goto label_169;
| }
0x000a2734 movs r3, 0 | r3 = 0;
0x000a2736 mov r1, r3 | r1 = r3;
| do {
0x000a2738 ldrb lr, [r4], 1 |
0x000a273c and r2, lr, 0x7f | r2 = lr & 0x7f;
0x000a2740 lsls r2, r3 | r2 <<= r3;
0x000a2742 adds r1, r2, r1 | r1 = r2 + r1;
0x000a2744 tst.w lr, 0x80 |
| if ((lr & 0x80) == 0) {
0x000a2748 beq 0xa2756 | goto label_170;
| }
0x000a274a adds r3, 7 | r3 += 7;
0x000a274c cmp r3, 0x46 |
| if (r3 == 0x46) {
0x000a274e beq 0xa2756 | goto label_170;
| }
0x000a2750 cmp r0, r4 |
0x000a2752 bne 0xa2738 |
| } while (r0 != r4);
| label_169:
0x000a2754 adds r4, 1 | r4++;
| label_170:
0x000a2756 cmp r0, r4 |
| if (r0 >= r4) {
0x000a2758 bhs 0xa271e | goto label_31;
| }
0x000a275a movw r3, 0x10b | r3 = 0x10b;
0x000a275e mov r8, r3 | r8 = r3;
0x000a2760 str r3, [sp, 0x38] | var_38h_3 = r3;
0x000a2762 b 0xa22da | goto label_27;
| label_163:
0x000a2764 ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x000a2766 ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a276a cmp r3, 0 |
0x000a276c ittt gt |
| if (r3 > 0) {
0x000a276e ldrdgt r4, sb, [sp, 0x40] | __asm ("ldrdgt r4, sb, [var_40h_3]");
| }
| if (r3 <= 0) {
0x000a2772 movgt r5, r0 | r5 = r0;
| }
| if (r3 > 0) {
0x000a2774 add r7, sp, 0x50 | r7 += var_50h_2;
| }
| if (r3 > 0) {
0x000a2776 bgt 0xa27b0 | goto label_171;
| }
0x000a2778 b 0xa2470 | goto label_32;
| label_33:
0x000a277a ldrd r2, r3, [sp, 0x48] | __asm ("ldrd r2, r3, [var_48h_2]");
0x000a277e ldr r0, [sp, 0x50] | r0 = var_50h_2;
0x000a2780 lsr.w ip, r3, 0x1f |
0x000a2784 adds.w ip, ip, r2 |
0x000a2788 lsr.w ip, ip, 1 |
0x000a278c adc r1, r3, 0 | __asm ("adc r1, r3, 0");
0x000a2790 orr.w ip, ip, r1, lsl 31 |
0x000a2794 asrs r1, r1, 1 | r1 >>= 1;
0x000a2796 adds.w r0, r0, ip | r0 += ip;
0x000a279a adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x000a279e bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x000a27a2 str.w r0, [sl, r5, lsl 2] | __asm ("str.w r0, [sl, r5, lsl 2]");
0x000a27a6 adds r5, 1 | r5++;
0x000a27a8 ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x000a27aa cmp r5, r3 |
| if (r5 >= r3) {
0x000a27ac bge.w 0xa2470 | goto label_32;
| }
| label_171:
0x000a27b0 mov r0, r4 | r0 = r4;
0x000a27b2 mov r1, r7 | r1 = r7;
0x000a27b4 bl 0xb604 | r0 = fcn_0000b604 (r0, r1);
0x000a27b8 add r4, r0 | r4 += r0;
0x000a27ba cmp r4, sb |
0x000a27bc str r4, [sp, 0x40] | var_40h_3 = r4;
| if (r4 < sb) {
0x000a27be bls 0xa277a | goto label_33;
| }
0x000a27c0 movw r3, 0x10b | r3 = 0x10b;
0x000a27c4 mov r8, r3 | r8 = r3;
0x000a27c6 str r3, [sp, 0x38] | var_38h_3 = r3;
0x000a27c8 b 0xa2470 | goto label_32;
| label_136:
0x000a27ca ldr.w r8, [sp, 0x38] | r8 = var_38h_3;
0x000a27ce add r5, sp, 0x60 | r5 += var_60h_2;
| label_140:
0x000a27d0 movs r1, 0 | r1 = 0;
0x000a27d2 str r1, [sp, 0x50] | var_50h_2 = r1;
0x000a27d4 ldr.w r4, [sb] | r4 = *(sb);
0x000a27d8 cmp r4, 5 |
| if (r4 == 5) {
0x000a27da beq 0xa2814 | goto label_172;
| }
0x000a27dc ldr.w sl, [pc, 0x178] | sl = *(0x000a2958);
0x000a27e0 add r7, sp, 0x50 | r7 += var_50h_2;
0x000a27e2 mov r3, r7 | r3 = r7;
0x000a27e4 mov r7, r4 | r7 = r4;
0x000a27e6 mov r4, sb | r4 = sb;
0x000a27e8 mov sb, r3 | sb = r3;
0x000a27ea add sl, pc | sl += pc;
| do {
0x000a27ec ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a27ee mov r3, r5 | r3 = r5;
0x000a27f0 mov r2, sl | r2 = sl;
0x000a27f2 mov r1, sb | r1 = sb;
0x000a27f4 bl 0xbd40 | r0 = fcn_0000bd40 (r0, r1, r2, r3);
0x000a27f8 clz r0, r0 | r0 &= r0;
0x000a27fc cmp r7, 2 |
0x000a27fe lsr.w r0, r0, 5 | r0 >>= 5;
0x000a2802 it eq |
| if (r7 != 2) {
0x000a2804 moveq r0, 0 | r0 = 0;
| }
| if (r0 == 0) {
0x000a2806 cbz r0, 0xa281c | goto label_173;
| }
0x000a2808 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000a280a ldr r7, [r4] | r7 = *(r4);
0x000a280c cmp r7, 5 |
0x000a280e bne 0xa27ec |
| } while (r7 != 5);
0x000a2810 ldr r1, [sp, 0x50] | r1 = var_50h_2;
0x000a2812 mov sb, r4 | sb = r4;
| label_172:
0x000a2814 mov r0, sb | r0 = sb;
0x000a2816 mov r2, r5 | r2 = r5;
0x000a2818 bl 0xa09c8 | fcn_000a09c8 (r0, r1, r2, r3);
| label_173:
0x000a281c ldr.w sl, [sp, 0x7c] | sl = var_7ch_2;
0x000a2820 b 0xa214c | goto label_15;
| label_162:
0x000a2822 ldr r6, [sp, 0x30] | r6 = var_30h_2;
0x000a2824 mov r8, r0 | r8 = r0;
0x000a2826 b 0xa2462 | goto label_34;
| label_161:
0x000a2828 ldr r6, [sp, 0x30] | r6 = var_30h_2;
0x000a282a mov sl, r3 | sl = r3;
0x000a282c cmp.w sb, 0 |
| if (sb == 0) {
0x000a2830 beq 0xa28f6 | goto label_159;
| }
0x000a2832 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x000a2834 movs r7, 0 | r7 = 0;
0x000a2836 add.w r8, r3, sl, lsl 4 | r8 = r3 + (sl << 4);
0x000a283a add r3, sp, 0x50 | r3 += var_50h_2;
0x000a283c strd r3, r4, [sp, 0x30] | __asm ("strd r3, r4, [sp, 0x30]");
| label_35:
0x000a2840 cmp.w sl, 0 |
| if (sl <= 0) {
0x000a2844 ble 0xa28aa | goto label_174;
| }
| label_40:
0x000a2846 ldr r1, [sp, 0x1c] | r1 = var_1ch_3;
0x000a2848 movs r0, 0 | r0 = 0;
0x000a284a mov r5, r0 | r5 = r0;
| do {
0x000a284c ldr r3, [r1, 8] | r3 = *((r1 + 8));
| if (r3 == 0) {
0x000a284e cbz r3, 0xa28a2 | goto label_175;
| }
| if (r5 == 0) {
0x000a2850 cbz r5, 0xa28a6 | goto label_176;
| }
0x000a2852 ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x000a2854 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000a2856 cmp r2, r3 |
0x000a2858 it lt |
| if (r2 >= r3) {
0x000a285a movlt r5, r1 | r5 = r1;
| }
| if (r0 == 0) {
| label_38:
0x000a285c cbz r0, 0xa289e | goto label_177;
| }
0x000a285e ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x000a2860 ldr r3, [r1, -0x4] | r3 = *((r1 - 0x4));
0x000a2864 cmp r2, r3 |
0x000a2866 it ne |
| if (r2 == r3) {
0x000a2868 movne r0, 1 | r0 = 1;
| }
| if (r2 == r3) {
0x000a286a beq 0xa289e | goto label_177;
| }
| label_36:
0x000a286c cmp r7, r0 |
0x000a286e it lt |
| if (r7 >= r0) {
0x000a2870 movlt r7, r0 | r7 = r0;
| }
| label_37:
0x000a2872 adds r1, 0x10 | r1 += 0x10;
0x000a2874 cmp r1, r8 |
0x000a2876 bne 0xa284c |
| } while (r1 != r8);
| if (r5 == 0) {
0x000a2878 cbz r5, 0xa28c8 | goto label_178;
| }
0x000a287a ldr r4, [r5, 8] | r4 = *((r5 + 8));
0x000a287c ldr r1, [sp, 0x30] | r1 = var_30h_2;
0x000a287e mov r0, r4 | r0 = r4;
0x000a2880 bl 0xb604 | fcn_0000b604 (r0, r1);
0x000a2884 ldrd r1, r3, [sp, 0x50] | __asm ("ldrd r1, r3, [var_50h_2]");
0x000a2888 cmp r1, 2 |
0x000a288a sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r1 <= 2) {
0x000a288e blo 0xa28c4 | goto label_179;
| }
0x000a2890 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000a2892 subs r1, 2 | r1 -= 2;
0x000a2894 adds r2, r4, r0 | r2 = r4 + r0;
0x000a2896 str r2, [r5, 8] | *((r5 + 8)) = r2;
0x000a2898 add r3, r1 | r3 += r1;
0x000a289a str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x000a289c b 0xa2840 | goto label_35;
| label_177:
0x000a289e adds r0, 1 | r0++;
0x000a28a0 b 0xa286c | goto label_36;
| label_175:
0x000a28a2 mov r0, r3 | r0 = r3;
0x000a28a4 b 0xa2872 | goto label_37;
| label_176:
0x000a28a6 mov r5, r1 | r5 = r1;
0x000a28a8 b 0xa285c | goto label_38;
| label_174:
0x000a28aa subs.w sb, sb, 1 | sb--;
| if (sb != sb) {
0x000a28ae bne 0xa2840 | goto label_35;
| }
| label_41:
0x000a28b0 ldr r4, [sp, 0x34] | r4 = var_34h_3;
| label_47:
0x000a28b2 ldr r3, [sp, 0x7c] | r3 = var_7ch_2;
0x000a28b4 str.w r7, [r3, r4, lsl 2] | __asm ("str.w r7, [r3, r4, lsl 2]");
0x000a28b8 adds r4, 1 | r4++;
0x000a28ba ldr r3, [sp, 0x64] | r3 = var_64h_2;
0x000a28bc cmp r4, r3 |
| if (r4 >= r3) {
0x000a28be bge 0xa28fa | goto label_158;
| }
0x000a28c0 ldr r5, [sp, 0x68] | r5 = var_68h_2;
0x000a28c2 b 0xa23f2 | goto label_39;
| label_179:
0x000a28c4 movs r3, 0 | r3 = 0;
0x000a28c6 str r3, [r5, 8] | *((r5 + 8)) = r3;
| label_178:
0x000a28c8 subs.w sb, sb, 1 | sb--;
| if (sb != sb) {
0x000a28cc bne 0xa2846 | goto label_40;
| }
0x000a28ce b 0xa28b0 | goto label_41;
| label_167:
0x000a28d0 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000a28d2 add.w r1, r5, 0x14 | r1 = r5 + 0x14;
0x000a28d6 lsls r2, r2, 2 | r2 <<= 2;
0x000a28d8 blx 0x8610 | fcn_00008610 ();
0x000a28dc b 0xa26b4 | goto label_42;
| label_144:
0x000a28de movs r2, 1 | r2 = 1;
0x000a28e0 b 0xa21e6 | goto label_43;
| label_146:
0x000a28e2 mov r5, r2 | r5 = r2;
0x000a28e4 mov.w r8, 0x18 | r8 = 0x18;
0x000a28e8 mov sl, r2 | sl = r2;
0x000a28ea b 0xa24d0 | goto label_44;
| label_155:
0x000a28ec ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x000a28ee b 0xa23c0 | goto label_45;
| label_138:
0x000a28f0 mov r4, sb | r4 = sb;
0x000a28f2 add r5, sp, 0x60 | r5 += var_60h_2;
0x000a28f4 b 0xa20f8 | goto label_46;
| label_159:
0x000a28f6 movs r7, 0 | r7 = 0;
0x000a28f8 b 0xa28b2 | goto label_47;
| label_158:
0x000a28fa mov.w r8, 0 | r8 = 0;
0x000a28fe b 0xa2462 | goto label_34;
| label_149:
0x000a2900 blx 0x883c | fcn_0000883c ();
0x000a2904 ldr r6, [r7, 0x54] | r6 = *((r7 + 0x54));
0x000a2906 movs r2, r0 | r2 = r0;
0x000a2908 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a290a movs r0, r0 |
0x000a290c ldr r0, [pc, 0x2c0] | r0 = *(0xa2bd0);
0x000a290e movs r1, r0 | r1 = r0;
0x000a2910 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x000a2912 movs r2, r0 | r2 = r0;
0x000a2914 strh r4, [r5, r2] | *((r5 + r2)) = r4;
0x000a2916 movs r1, r0 | r1 = r0;
| if (r1 > r0) {
0x000a2918 blo 0xa29d2 |
0x000a291a invalid |
| }
0x000a29d2 ldr r7, [pc, 0x3c0] | r7 = *(0xa2d96);
0x000a29d4 mov r5, r2 | r5 = r2;
0x000a29d6 ldr r2, [pc, 0x18c] |
0x000a29d8 mov lr, r3 | lr = r3;
0x000a29da sub sp, 0x4c |
0x000a29dc ldr r3, [pc, 0x188] | r3 = *(0xa2b68);
0x000a29de add r2, pc | r2 = 0x145548;
0x000a29e0 ldr r7, [sp, 0x74] | r7 = var_74h;
0x000a29e2 str r0, [sp, 0x10] | var_10h = r0;
0x000a29e4 ldr r3, [r2, r3] |
0x000a29e6 ldr r6, [sp, 0x70] | r6 = var_70h;
0x000a29e8 ldr r3, [r3] | r3 = imp.sinh;
0x000a29ea str r3, [sp, 0x44] | var_44h = r3;
0x000a29ec mov.w r3, 0 | r3 = 0;
0x000a29f0 ldr r3, [r7] | r3 = *(0xa2d96);
0x000a29f2 str r7, [sp, 0x20] | var_20h = r7;
| if (r3 != 0) {
0x000a29f4 cbnz r3, 0xa2a3c | goto label_49;
| }
0x000a29f6 mov r4, r1 | r4 = r1;
0x000a29f8 mov r8, lr | r8 = lr;
| do {
0x000a29fa ldr r2, [r5] | r2 = *(r5);
0x000a29fc cmp r2, 5 |
| if (r2 == 5) {
0x000a29fe beq 0xa2a58 | goto label_180;
| }
0x000a2a00 cmp r2, 2 |
| if (r2 == 2) {
0x000a2a02 beq 0xa2a3c | goto label_49;
| }
0x000a2a04 cmp r2, 4 |
0x000a2a06 mov r3, r8 | r3 = r8;
0x000a2a08 itt eq |
| if (r2 != 4) {
0x000a2a0a ldreq r4, [r5, 0xc] | r4 = *((r5 + 0xc));
| }
| if (r2 != 4) {
0x000a2a0c ldreq r2, [r6] | r2 = *(r6);
| }
0x000a2a0e ldr r0, [sp, 0x10] | r0 = var_10h;
0x000a2a10 mov r1, r4 | r1 = r4;
0x000a2a12 itt eq |
| if (r2 != 4) {
0x000a2a14 streq r4, [r2], 4 | *(r2) = r4;
| r2 += 4;
| }
| if (r2 == 4) {
0x000a2a18 str r2, [r6] | *(r6) = r2;
| }
0x000a2a1a ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x000a2a1c strd r6, r7, [sp] | __asm ("strd r6, r7, [sp]");
0x000a2a20 bl 0xa29d0 | fcn_000a29d0 (r0, r1);
0x000a2a24 ldr r3, [r5] | r3 = *(r5);
0x000a2a26 cmp r3, 4 |
0x000a2a28 itttt eq |
| if (r3 != 4) {
0x000a2a2a ldreq r4, [r5, 0x10] | r4 = *((r5 + 0x10));
| }
| if (r3 != 4) {
0x000a2a2c ldreq r2, [r6] | r2 = *(r6);
| }
| if (r3 != 4) {
0x000a2a2e streq r4, [r2], 4 | *(r2) = r4;
| r2 += 4;
| }
| if (r3 == 4) {
0x000a2a32 str r2, [r6] | *(r6) = r2;
| }
0x000a2a34 ldr r2, [r7] | r2 = *(r7);
0x000a2a36 ldr r5, [r5, 0x10] | r5 = *((r5 + 0x10));
0x000a2a38 cmp r2, 0 |
0x000a2a3a beq 0xa29fa |
| } while (r2 == 0);
| do {
| label_49:
0x000a2a3c ldr r2, [pc, 0x12c] |
0x000a2a3e ldr r3, [pc, 0x128] | r3 = *(0xa2b6a);
0x000a2a40 add r2, pc | r2 = 0x1455b0;
0x000a2a42 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a2a44 ldr r2, [r3] | r2 = imp.sinh;
0x000a2a46 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a2a48 eors r2, r3 | r2 ^= r3;
0x000a2a4a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a2a4e bne.w 0xa2b5e | goto label_181;
| }
0x000a2a52 add sp, 0x4c |
0x000a2a54 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_180:
0x000a2a58 ldr r7, [r5, 0x14] | r7 = *((r5 + 0x14));
0x000a2a5a mov lr, r8 | lr = r8;
0x000a2a5c movs r2, 0 | r2 = 0;
0x000a2a5e str r4, [sp, 0x28] | var_28h_2 = r4;
0x000a2a60 mov r8, r2 | r8 = r2;
0x000a2a62 mov r4, lr | r4 = lr;
0x000a2a64 add.w ip, r7, 0x48 |
0x000a2a68 add r3, sp, 0x40 | r3 += var_40h_2;
0x000a2a6a str r3, [sp, 0x3c] | var_3ch_2 = r3;
| label_50:
0x000a2a6c ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x000a2a6e cmp r3, r2 |
0x000a2a70 ble 0xa2a3c |
| } while (r3 <= r2);
0x000a2a72 ldr r6, [r4] | r6 = *(r4);
0x000a2a74 mov.w fp, 0 |
0x000a2a78 ldr r1, [sp, 0x28] | r1 = var_28h_2;
0x000a2a7a mov r5, fp | r5 = fp;
0x000a2a7c ldr.w sb, [ip, 0x14] | sb = *((ip + 0x14));
0x000a2a80 mov lr, r4 | lr = r4;
0x000a2a82 add.w r3, r6, 0x18 | r3 = r6 + 0x18;
0x000a2a86 str r2, [sp, 0x14] | var_14h_3 = r2;
0x000a2a88 str r3, [r4] | *(r4) = r3;
0x000a2a8a ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x000a2a8c strd ip, r1, [r6, 8] | __asm ("strd ip, r1, [r6, 8]");
0x000a2a90 strd r7, r2, [r6] | __asm ("strd r7, r2, [r6]");
0x000a2a94 mov r2, r7 | r2 = r7;
0x000a2a96 str r3, [r6, 0x14] | *((r6 + 0x14)) = r3;
0x000a2a98 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000a2a9a ldr.w r0, [sb, 4] | r0 = *((sb + 4));
0x000a2a9e ldr r1, [r3] | r1 = *(r3);
0x000a2aa0 strd ip, r1, [sp, 0x18] | __asm ("strd ip, r1, [sp, 0x18]");
0x000a2aa4 mov ip, r6 |
0x000a2aa6 ldr.w sl, [r1, 0xf4] | sl = *((r1 + 0xf4));
0x000a2aaa b 0xa2aae |
| while (r3 != 0) {
| label_48:
0x000a2aac adds r5, 1 | r5++;
0x000a2aae cmp r0, r5 |
| if (r0 <= r5) {
0x000a2ab0 ble 0xa2b30 | goto label_182;
| }
0x000a2ab2 ldr.w r3, [sb] | r3 = *(sb);
0x000a2ab6 ldr.w r6, [r3, r5, lsl 2] | offset_0 = r5 << 2;
| r6 = *((r3 + offset_0));
0x000a2aba ldr r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x000a2abc cmp r3, 0 |
0x000a2abe bne 0xa2aac |
| }
0x000a2ac0 ldrb r3, [r6, 5] | r3 = *((r6 + 5));
0x000a2ac2 cmp r3, 0 |
| if (r3 != 0) {
0x000a2ac4 bne 0xa2aac | goto label_48;
| }
0x000a2ac6 ldrd r7, r1, [r6, 0xc] | __asm ("ldrd r7, r1, [r6, 0xc]");
0x000a2aca ldr r4, [r6, 8] | r4 = *((r6 + 8));
0x000a2acc ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000a2ace cmp r1, r4 |
0x000a2ad0 sbcs r3, r7 | __asm ("sbcs r3, r7");
| if (r1 < r4) {
0x000a2ad2 blt 0xa2aac | goto label_48;
| }
0x000a2ad4 strd sb, r2, [sp, 0x2c] | __asm ("strd sb, r2, [sp, 0x2c]");
0x000a2ad8 mov sb, r7 | sb = r7;
0x000a2ada str r5, [sp, 0x34] | var_34h_2 = r5;
0x000a2adc ldr r7, [sp, 0x3c] | r7 = var_3ch_2;
0x000a2ade ldr r5, [sp, 0x1c] | r5 = var_1ch_2;
0x000a2ae0 str.w ip, [sp, 0x24] | __asm ("str.w ip, [var_24h_2]");
0x000a2ae4 str.w lr, [sp, 0x38] | __asm ("str.w lr, [var_38h_2]");
0x000a2ae8 b 0xa2b0e |
| while (r0 == 0) {
0x000a2aea ldr r0, [sp, 0x40] | r0 = var_40h_2;
0x000a2aec adds r0, 0x22 | r0 += 0x22;
0x000a2aee cmp sl, r0 |
| if (sl <= r0) {
0x000a2af0 bgt 0xa2afa |
0x000a2af2 mov r1, sl | r1 = sl;
0x000a2af4 bl 0xb1ea8 | r0 = fcn_000b1ea8 (r0, r1);
0x000a2af8 add fp, r0 |
| }
0x000a2afa ldrd r0, r1, [r6, 0x10] | __asm ("ldrd r0, r1, [r6, 0x10]");
0x000a2afe adds r2, r4, 1 | r2 = r4 + 1;
0x000a2b00 adc sb, sb, 0 | __asm ("adc sb, sb, 0");
0x000a2b04 mov r4, r2 | r4 = r2;
0x000a2b06 cmp r0, r2 |
0x000a2b08 sbcs.w r1, r1, sb | __asm ("sbcs.w r1, r1, sb");
| if (r0 < r2) {
0x000a2b0c blt 0xa2b4c | goto label_183;
| }
0x000a2b0e mov r2, r4 | r2 = r4;
0x000a2b10 mov r3, sb | r3 = sb;
0x000a2b12 mov r0, r5 | r0 = r5;
0x000a2b14 strd r7, r8, [sp, 4] | __asm ("strd r7, r8, [sp, 4]");
0x000a2b18 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000a2b1c bl 0x9b130 | r0 = fcn_0009b130 (r0, r1, r2, r3, r4, r5);
0x000a2b20 cmp r0, 0 |
0x000a2b22 beq 0xa2aea |
| }
0x000a2b24 ldr r6, [sp, 0x24] | r6 = var_24h_2;
0x000a2b26 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a2b28 str.w fp, [r6, 0x10] | __asm ("str.w fp, [r6, 0x10]");
0x000a2b2c str r0, [r3] | *(r3) = r0;
0x000a2b2e b 0xa2a3c | goto label_49;
| label_182:
0x000a2b30 mov r6, ip | r6 = ip;
0x000a2b32 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a2b34 mov r7, r2 | r7 = r2;
0x000a2b36 ldrd r2, ip, [sp, 0x14] | __asm ("ldrd r2, ip, [var_14h_3]");
0x000a2b3a str.w fp, [r6, 0x10] | __asm ("str.w fp, [r6, 0x10]");
0x000a2b3e mov r4, lr | r4 = lr;
0x000a2b40 str.w r8, [r3] | __asm ("str.w r8, [r3]");
0x000a2b44 adds r2, 1 | r2++;
0x000a2b46 add.w ip, ip, 0x18 |
0x000a2b4a b 0xa2a6c | goto label_50;
| label_183:
0x000a2b4c ldrd sb, r2, [sp, 0x2c] | __asm ("ldrd sb, r2, [var_2ch_2]");
0x000a2b50 ldr.w ip, [sp, 0x24] | ip = var_24h_2;
0x000a2b54 ldrd r5, lr, [sp, 0x34] | __asm ("ldrd r5, lr, [var_34h_2]");
0x000a2b58 ldr.w r0, [sb, 4] | r0 = *((sb + 4));
0x000a2b5c b 0xa2aac | goto label_48;
| label_181:
0x000a2b5e blx 0x883c | fcn_0000883c ();
0x000a2b62 nop |
0x000a2b64 str r2, [r7, 0x28] | *((r7 + 0x28)) = r2;
0x000a2b66 movs r2, r0 | r2 = r0;
0x000a2b68 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a2b6a movs r0, r0 |
0x000a2b6c str r0, [r3, 0x24] | *((r3 + 0x24)) = r0;
0x000a2b6e movs r2, r0 | r2 = r0;
0x000a2b70 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a2b74 mov sb, r2 | sb = r2;
0x000a2b76 ldr.w r2, [pc, 0xb6c] | r2 = *(0x000a36e4);
0x000a2b7a sub sp, 0xd4 |
0x000a2b7c mov r5, r0 | r5 = r0;
0x000a2b7e ldr.w r3, [pc, 0xb68] |
0x000a2b82 add r2, pc | r2 += pc;
0x000a2b84 ldr r7, [r0] | r7 = *(r0);
0x000a2b86 ldr r0, [sp, 0xf8] | r0 = var_f8h;
0x000a2b88 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a2b8a ldr r3, [r3] | r3 = *(0xa36ea);
0x000a2b8c str r3, [sp, 0xcc] | var_cch = r3;
0x000a2b8e mov.w r3, 0 | r3 = 0;
0x000a2b92 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
| if (r3 != 0) {
0x000a2b94 cbnz r3, 0xa2bf6 | goto label_58;
| }
0x000a2b96 uxth r3, r1 | r3 = (int16_t) r1;
0x000a2b98 mov sl, r1 | sl = r1;
0x000a2b9a str r3, [sp, 0x6c] | var_6ch = r3;
| if (r3 != 0) {
0x000a2b9c cbnz r3, 0xa2be0 | goto label_184;
| }
0x000a2b9e ldr r2, [sp, 0x6c] | r2 = var_6ch;
0x000a2ba0 mov r3, r2 | r3 = r2;
0x000a2ba2 str r2, [sp, 0x88] | var_88h = r2;
| do {
0x000a2ba4 ands r4, sl, 0x10000 | r4 = sl & 0x10000;
0x000a2ba8 and r6, sl, 0x40000 | r6 = sl & 0x40000;
0x000a2bac itt ne |
| if (r4 == sl) {
0x000a2bae ldrne r4, [r0, r3, lsl 2] | offset_1 = r3 << 2;
| r4 = *((r0 + offset_1));
| }
| if (r4 != sl) {
0x000a2bb2 adds r3, 1 | r3++;
| }
0x000a2bb4 ands r2, sl, 0x20000 | r2 = sl & 0x20000;
| if (r2 != sl) {
0x000a2bb8 bne 0xa2c1a | goto label_185;
| }
0x000a2bba cmp r6, 0 |
| if (r6 != 0) {
0x000a2bbc bne.w 0xa2d56 | goto label_186;
| }
0x000a2bc0 mov r0, r5 | r0 = r5;
0x000a2bc2 bl 0x61390 | fcn_00061390 (r0);
| label_51:
0x000a2bc6 movs r3, 0 | r3 = 0;
0x000a2bc8 movs r0, 0 | r0 = 0;
0x000a2bca mov.w r1, -0x80000000 | r1 = -0x80000000;
0x000a2bce str r3, [sp, 0x78] | var_78h = r3;
0x000a2bd0 str r3, [sp, 0x7c] | var_7ch = r3;
0x000a2bd2 mov.w r2, -1 | r2 = -1;
0x000a2bd6 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x000a2bda strd r0, r1, [r5, 0x48] | __asm ("strd r0, r1, [r5, 0x48]");
0x000a2bde b 0xa2c66 | goto label_90;
| label_184:
0x000a2be0 ldr r3, [r0] | r3 = *(r0);
0x000a2be2 str r3, [sp, 0x88] | var_88h = r3;
0x000a2be4 movs r3, 1 | r3 = 1;
0x000a2be6 b 0xa2ba4 |
| } while (1);
| label_64:
0x000a2be8 ldr.w r1, [pc, 0xb00] |
0x000a2bec movs r2, 0xc | r2 = 0xc;
0x000a2bee mov r0, sb | r0 = sb;
0x000a2bf0 add r1, pc | r1 = 0x1462e0;
0x000a2bf2 bl 0x4c1a8 | fcn_0004c1a8 (r0);
| label_58:
0x000a2bf6 movs r6, 1 | r6 = 1;
| label_52:
0x000a2bf8 ldr.w r2, [pc, 0xaf4] |
0x000a2bfc ldr.w r3, [pc, 0xae8] | r3 = *(0xa36e8);
0x000a2c00 add r2, pc | r2 = 0x1462f4;
0x000a2c02 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a2c04 ldr r2, [r3] | r2 = imp.sinh;
0x000a2c06 ldr r3, [sp, 0xcc] | r3 = var_cch;
0x000a2c08 eors r2, r3 | r2 ^= r3;
0x000a2c0a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a2c0e bne.w 0xa371e | goto label_187;
| }
0x000a2c12 mov r0, r6 | r0 = r6;
0x000a2c14 add sp, 0xd4 |
0x000a2c16 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_185:
0x000a2c1a ldr.w r2, [r0, r3, lsl 2] | offset_2 = r3 << 2;
| r2 = *((r0 + offset_2));
0x000a2c1e lsls r3, r3, 2 | r3 <<= 2;
0x000a2c20 str r2, [sp, 0x7c] | var_7ch = r2;
0x000a2c22 cmp r6, 0 |
| if (r6 != 0) {
0x000a2c24 bne.w 0xa2d34 | goto label_188;
| }
0x000a2c28 mov r0, r5 | r0 = r5;
0x000a2c2a bl 0x61390 | fcn_00061390 (r0);
0x000a2c2e ldr r2, [sp, 0x7c] | r2 = var_7ch;
0x000a2c30 cmp r2, 0 |
| if (r2 == 0) {
0x000a2c32 beq 0xa2bc6 | goto label_51;
| }
0x000a2c34 ldr r0, [sp, 0x7c] | r0 = var_7ch;
0x000a2c36 blx 0x82b0 | r0 = fcn_000082b0 ();
0x000a2c3a cmp r0, 1 |
0x000a2c3c it eq |
| if (r0 != 1) {
0x000a2c3e streq r6, [sp, 0x78] | var_78h = r6;
| }
| if (r0 != 1) {
0x000a2c40 bne.w 0xa3564 | goto label_189;
| }
| label_54:
0x000a2c44 ldr r0, [sp, 0x7c] | r0 = var_7ch;
0x000a2c46 blx 0x89d4 | fcn_000089d4 ();
| label_55:
0x000a2c4a ldr r3, [sp, 0x78] | r3 = var_78h;
0x000a2c4c strd r0, r1, [r5, 0x48] | __asm ("strd r0, r1, [r5, 0x48]");
| if (r3 != 0) {
0x000a2c50 cbz r3, 0xa2c5e |
0x000a2c52 mov r0, r3 | r0 = r3;
0x000a2c54 blx 0x82b0 | r0 = fcn_000082b0 ();
0x000a2c58 cmp r0, 1 |
| if (r0 == 1) {
0x000a2c5a beq.w 0xa35fa | goto label_190;
| }
| }
0x000a2c5e mov.w r2, -1 | r2 = -1;
0x000a2c62 mvn r3, 0x80000000 | r3 = ~0x80000000;
| label_90:
0x000a2c66 strd r2, r3, [r5, 0x50] | __asm ("strd r2, r3, [r5, 0x50]");
0x000a2c6a cmp.w sb, 0 |
| if (sb == 0) {
0x000a2c6e beq.w 0xa3510 | goto label_191;
| }
0x000a2c72 ldrb.w r3, [sb] | r3 = *(sb);
0x000a2c76 sub.w r3, r3, 0x44 | r3 -= 0x44;
0x000a2c7a clz r3, r3 | r3 &= r3;
0x000a2c7e lsrs r3, r3, 5 | r3 >>= 5;
| label_81:
0x000a2c80 strb.w r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
0x000a2c84 movw r3, 0xfffe | r3 = 0xfffe;
0x000a2c88 tst.w sl, r3 |
0x000a2c8c strh.w sl, [r5, 4] | *((r5 + 4)) = sl;
| if ((sl & r3) != 0) {
0x000a2c90 bne 0xa2d6c | goto label_192;
| }
| label_92:
0x000a2c92 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000a2c94 cmp r3, 0 |
| if (r3 != 0) {
0x000a2c96 bne.w 0xa34d0 | goto label_193;
| }
0x000a2c9a ldrd r2, r0, [sp, 0x78] | __asm ("ldrd r2, r0, [var_78h]");
0x000a2c9e ldr.w r1, [r7, 0xe0] | r1 = *((r7 + 0xe0));
0x000a2ca2 ldrb.w r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x000a2ca6 orrs r2, r0 | r2 |= r0;
| if (r2 == r0) {
0x000a2ca8 beq.w 0xa3524 | goto label_194;
| }
0x000a2cac ldrd r8, sb, [r5, 0x48] | __asm ("ldrd r8, sb, [r5, 0x48]");
0x000a2cb0 ldrd sl, fp, [r5, 0x50] | __asm ("ldrd sl, fp, [r5, 0x50]");
0x000a2cb4 cmp r3, 0 |
| if (r3 == 0) {
0x000a2cb6 beq.w 0xa355c | goto label_195;
| }
0x000a2cba ldr.w r3, [pc, 0xa38] | r3 = *(0x000a36f4);
0x000a2cbe add r3, pc | r3 += pc;
| label_89:
0x000a2cc0 ldr.w r0, [pc, 0xa34] | r0 = *(0x000a36f8);
0x000a2cc4 mov r2, r8 | r2 = r8;
0x000a2cc6 str r3, [sp, 8] | var_4h_2 = r3;
0x000a2cc8 mov r3, sb | r3 = sb;
0x000a2cca strd sl, fp, [sp] | __asm ("strd sl, fp, [sp]");
0x000a2cce add r0, pc | r0 += pc;
0x000a2cd0 blx 0x8644 | r0 = fcn_00008644 ();
0x000a2cd4 mov r4, r0 | r4 = r0;
| label_85:
0x000a2cd6 cmp r4, 0 |
| if (r4 == 0) {
0x000a2cd8 beq.w 0xa354c | goto label_196;
| }
0x000a2cdc ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x000a2cde mov.w r2, -1 | r2 = -1;
0x000a2ce2 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x000a2ce4 mov r1, r4 | r1 = r4;
0x000a2ce6 adds r3, 1 | r3++;
0x000a2ce8 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x000a2cea movs r3, 0 | r3 = 0;
0x000a2cec str r3, [sp, 4] | var_0h_2 = r3;
0x000a2cee add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x000a2cf2 str r3, [sp] | *(sp) = r3;
0x000a2cf4 movs r3, 1 | r3 = 1;
0x000a2cf6 blx 0x8280 | fcn_00008280 ();
0x000a2cfa ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x000a2cfc mov r6, r0 | r6 = r0;
0x000a2cfe mov r0, r4 | r0 = r4;
0x000a2d00 subs r3, 1 | r3--;
0x000a2d02 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x000a2d04 blx 0x8404 | fcn_00008404 ();
0x000a2d08 cmp r6, 0 |
| if (r6 != 0) {
0x000a2d0a bne.w 0xa2bf8 | goto label_52;
| }
| label_80:
0x000a2d0e ldr.w r2, [pc, 0x9ec] | r2 = *(0x000a36fc);
0x000a2d12 ldr.w r3, [pc, 0x9d4] | r3 = *(0xa36ea);
0x000a2d16 add r2, pc | r2 += pc;
0x000a2d18 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a2d1a ldr r2, [r3] | r2 = *(0xa36ea);
0x000a2d1c ldr r3, [sp, 0xcc] | r3 = var_cch;
0x000a2d1e eors r2, r3 | r2 ^= r3;
0x000a2d20 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a2d24 bne.w 0xa371e | goto label_187;
| }
0x000a2d28 mov r0, r5 | r0 = r5;
0x000a2d2a add sp, 0xd4 |
0x000a2d2c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a2d30 b.w 0x89494 | goto label_53;
| label_188:
0x000a2d34 add r0, r3 | r0 += r3;
0x000a2d36 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000a2d38 mov r0, r5 | r0 = r5;
0x000a2d3a str r3, [sp, 0x78] | var_78h = r3;
0x000a2d3c bl 0x61390 | fcn_00061390 (r0);
0x000a2d40 ldr r0, [sp, 0x7c] | r0 = var_7ch;
| if (r0 == 0) {
0x000a2d42 cbz r0, 0xa2d4e | goto label_197;
| }
0x000a2d44 blx 0x82b0 | r0 = fcn_000082b0 ();
0x000a2d48 cmp r0, 1 |
| if (r0 == 1) {
0x000a2d4a beq.w 0xa2c44 | goto label_54;
| }
| label_197:
0x000a2d4e movs r0, 0 | r0 = 0;
0x000a2d50 mov.w r1, -0x80000000 | r1 = -0x80000000;
0x000a2d54 b 0xa2c4a | goto label_55;
| label_186:
0x000a2d56 ldr.w r3, [r0, r3, lsl 2] | offset_3 = r3 << 2;
| r3 = *((r0 + offset_3));
0x000a2d5a mov r0, r5 | r0 = r5;
0x000a2d5c strd r3, r2, [sp, 0x78] | __asm ("strd r3, r2, [sp, 0x78]");
0x000a2d60 bl 0x61390 | fcn_00061390 (r0);
0x000a2d64 movs r0, 0 | r0 = 0;
0x000a2d66 mov.w r1, -0x80000000 | r1 = -0x80000000;
0x000a2d6a b 0xa2c4a | goto label_55;
| label_192:
0x000a2d6c ldr r0, [sp, 0x88] | r0 = var_88h;
0x000a2d6e blx 0x82e8 | fcn_000082e8 ();
0x000a2d72 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000a2d74 str r0, [sp, 0x8c] | var_8ch = r0;
0x000a2d76 subs r3, 2 | r3 -= 2;
0x000a2d78 str r3, [sp, 0x60] | var_60h = r3;
0x000a2d7a cmp r0, 0 |
| if (r0 == 0) {
0x000a2d7c beq.w 0xa3540 | goto label_198;
| }
| label_86:
0x000a2d80 movs r3, 0 | r3 = 0;
0x000a2d82 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x000a2d84 cmp r4, 0 |
| if (r4 == 0) {
0x000a2d86 beq.w 0xa3520 | goto label_199;
| }
0x000a2d8a mov r0, r4 | r0 = r4;
0x000a2d8c blx 0x828c | loc_imp_gmon_start_ ();
0x000a2d90 str r0, [sp, 0x74] | var_74h_2 = r0;
0x000a2d92 str r0, [r5, 0x14] | *((r5 + 0x14)) = r0;
| label_84:
0x000a2d94 ldrb.w r3, [r7, 0xec] | r3 = *((r7 + 0xec));
0x000a2d98 add.w sb, r7, 8 | sb = r7 + 8;
0x000a2d9c ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x000a2d9e ldr r1, [r7, 0x1c] | r1 = *((r7 + 0x1c));
0x000a2da0 ldr.w fp, [r7, 0x18] | fp = *((r7 + 0x18));
0x000a2da4 str r3, [sp, 0xb4] | var_b4h = r3;
0x000a2da6 ldr r3, [sp, 0x74] | r3 = var_74h_2;
0x000a2da8 str r2, [sp, 0x84] | var_84h_2 = r2;
0x000a2daa str r2, [sp, 0xa8] | x = r2;
0x000a2dac strd r3, r1, [sp, 0xac] | __asm ("strd r3, r1, [sp, 0xac]");
0x000a2db0 ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x000a2db2 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000a2db4 str r1, [sp, 0x64] | var_64h = r1;
0x000a2db6 str.w fp, [sp, 0xb8] | __asm ("str.w fp, [var_b8h]");
0x000a2dba str r3, [sp, 0xbc] | var_bch = r3;
0x000a2dbc movs r3, 0 | r3 = 0;
0x000a2dbe strd r3, r3, [sp, 0xc0] | __asm ("strd r3, r3, [sp, 0xc0]");
0x000a2dc2 str r3, [sp, 0xc8] | var_c8h = r3;
0x000a2dc4 cmp r2, 0 |
| if (r2 == 0) {
0x000a2dc6 beq.w 0xa3594 | goto label_200;
| }
0x000a2dca ldr r6, [sp, 0x8c] | r6 = var_8ch;
0x000a2dcc mov r8, r3 | r8 = r3;
0x000a2dce ldr.w r4, [pc, 0x930] | r4 = *(0x000a3700);
0x000a2dd2 str r3, [sp, 0x4c] | var_4ch = r3;
0x000a2dd4 mov r0, r6 | r0 = r6;
0x000a2dd6 add r4, pc | r4 += pc;
0x000a2dd8 str r4, [sp, 0x44] | var_44h_2 = r4;
0x000a2dda blx 0x85b4 | fcn_000085b4 ();
0x000a2dde str r0, [sp, 0x10] | var_10h_2 = r0;
0x000a2de0 movs r3, 0 | r3 = 0;
0x000a2de2 str r5, [sp, 0x24] | var_24h = r5;
0x000a2de4 movs r1, 1 | r1 = 1;
0x000a2de6 ldr r5, [sp, 0x10] | r5 = var_10h_2;
0x000a2de8 adds r2, r4, 4 | r2 = r4 + 4;
0x000a2dea str r6, [sp, 0x14] | var_14h_2 = r6;
0x000a2dec str r1, [sp, 0x5c] | var_5ch = r1;
0x000a2dee cmp r5, r3 |
0x000a2df0 str.w r8, [sp, 0x80] | __asm ("str.w r8, [var_80h]");
0x000a2df4 str r2, [sp, 0x48] | var_48h = r2;
0x000a2df6 str.w sb, [sp, 0x20] | __asm ("str.w sb, [var_20h_2]");
0x000a2dfa str r7, [sp, 0x40] | var_40h = r7;
0x000a2dfc str r3, [sp, 0xc0] | var_c0h = r3;
| if (r5 <= r3) {
0x000a2dfe ble 0xa2ed6 | goto label_201;
| }
| do {
0x000a2e00 ldr r3, [sp, 0x14] | r3 = var_14h_2;
| label_57:
0x000a2e02 mov r4, r3 | r4 = r3;
0x000a2e04 ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x000a2e08 sub.w r1, r2, 9 | r1 = r2 - 9;
0x000a2e0c cmp r2, 0x20 |
0x000a2e0e it ne |
| if (r2 != 0x20) {
0x000a2e10 cmpne r1, 4 | __asm ("cmpne r1, 4");
| }
| if (r2 < 0x20) {
0x000a2e12 bls 0xa2edc | goto label_202;
| }
| label_56:
0x000a2e14 cmp r5, 0 |
| if (r5 == 0) {
0x000a2e16 beq 0xa2ee0 | goto label_203;
| }
0x000a2e18 ldr r3, [sp, 0x44] | r3 = var_44h_2;
0x000a2e1a ldr.w sl, [sp, 0x48] | sl = var_48h;
0x000a2e1e sub.w r6, r3, 0x1c | r6 = r3 - 0x1c;
| label_60:
0x000a2e22 ldrb r3, [r6, 5] | r3 = *((r6 + 5));
0x000a2e24 cmp r3, 0 |
| if (r3 != 0) {
0x000a2e26 bne.w 0xa2f40 | goto label_71;
| }
0x000a2e2a ldrb r7, [r6, 4] | r7 = *((r6 + 4));
0x000a2e2c cmp r5, r7 |
| if (r5 < r7) {
0x000a2e2e blt.w 0xa2f40 | goto label_71;
| }
0x000a2e32 ldr r1, [r6] | r1 = *(r6);
0x000a2e34 mov r2, r7 | r2 = r7;
0x000a2e36 mov r0, r4 | r0 = r4;
0x000a2e38 blx 0x8214 | r0 = sysconf ();
0x000a2e3c mov r3, r0 | r3 = r0;
0x000a2e3e cmp r0, 0 |
| if (r0 != 0) {
0x000a2e40 bne 0xa2f40 | goto label_71;
| }
0x000a2e42 ldrb.w sb, [r6, 6] | sb = *((r6 + 6));
0x000a2e46 cmp.w sb, 1 |
| if (sb == 1) {
0x000a2e4a beq.w 0xa31ce | goto label_204;
| }
| label_68:
0x000a2e4e movs r3, 0xa | r3 = 0xa;
| label_69:
0x000a2e50 ldrb r2, [r4, r7] | r2 = *((r4 + r7));
0x000a2e52 and r0, r2, 0xfd | r0 = r2 & 0xfd;
0x000a2e56 sub.w r1, r2, 9 | r1 = r2 - 9;
0x000a2e5a cmp r0, 0x20 |
0x000a2e5c it ne |
| if (r0 != 0x20) {
0x000a2e5e cmpne r1, 4 | __asm ("cmpne r1, 4");
| }
| if (r0 > 0x20) {
0x000a2e60 bhi 0xa2f36 | goto label_205;
| }
| label_59:
0x000a2e62 movs r0, 0x30 | r0 = 0x30;
0x000a2e64 movs r1, 0 | r1 = 0;
0x000a2e66 str r3, [sp, 0x18] | var_18h = r3;
0x000a2e68 blx 0x8240 | r0 = fcn_00008240 ();
0x000a2e6c mov r5, r0 | r5 = r0;
0x000a2e6e cmp r0, 0 |
| if (r0 == 0) {
0x000a2e70 beq.w 0xa3538 | goto label_206;
| }
0x000a2e74 movs r2, 0x28 | r2 = 0x28;
0x000a2e76 movs r1, 0 | r1 = 0;
0x000a2e78 adds r0, 8 | r0 += 8;
0x000a2e7a mov r6, sb | r6 = sb;
0x000a2e7c blx 0x839c | fcn_0000839c ();
0x000a2e80 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a2e82 str.w sb, [r5] | __asm ("str.w sb, [r5]");
0x000a2e86 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x000a2e88 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000a2e8a subs r4, r4, r3 | r4 -= r3;
0x000a2e8c add r4, r7 | r4 += r7;
| label_95:
0x000a2e8e cmp r6, 5 |
| if (r6 != 5) {
0x000a2e90 beq 0xa2e9a |
| label_74:
0x000a2e92 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000a2e94 cmp r3, 0 |
| if (r3 == 0) {
0x000a2e96 beq.w 0xa3430 | goto label_207;
| }
0x000a2e98 strh r3, [r1, 0x16] | *((r1 + 0x16)) = r3;
| }
| label_75:
0x000a2e9a ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000a2e9c cmp r3, 0 |
| if (r3 == 0) {
0x000a2e9e beq.w 0xa3258 | goto label_208;
| }
0x000a2ea2 cmp.w r8, 0 |
| if (r8 != 0) {
0x000a2ea6 bne.w 0xa351c | goto label_209;
| }
0x000a2eaa ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a2eac str.w r8, [sp, 0x5c] | __asm ("str.w r8, [var_5ch]");
0x000a2eb0 cmp r3, 0 |
| if (r3 == 0) {
0x000a2eb2 beq.w 0xa32a0 | goto label_210;
| }
| label_72:
0x000a2eb6 str.w r5, [r8, 0x10] | __asm ("str.w r5, [r8, 0x10]");
0x000a2eba str.w r8, [r5, 8] | __asm ("str.w r8, [r5, 8]");
0x000a2ebe mov r8, r5 | r8 = r5;
| label_73:
0x000a2ec0 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000a2ec2 subs r3, r3, r4 | r3 -= r4;
0x000a2ec4 str r3, [sp, 0x10] | var_10h_2 = r3;
0x000a2ec6 ldr r3, [sp, 0x14] | r3 = var_14h_2;
0x000a2ec8 ldr r5, [sp, 0x10] | r5 = var_10h_2;
0x000a2eca add r3, r4 | r3 += r4;
0x000a2ecc str r3, [sp, 0x14] | var_14h_2 = r3;
0x000a2ece movs r3, 0 | r3 = 0;
0x000a2ed0 cmp r5, r3 |
0x000a2ed2 str r3, [sp, 0xc0] | var_c0h = r3;
0x000a2ed4 bgt 0xa2e00 |
| } while (r5 > r3);
| label_201:
0x000a2ed6 ldrd r5, r4, [sp, 0x10] | __asm ("ldrd r5, r4, [var_10h_2]");
0x000a2eda b 0xa2e14 | goto label_56;
| label_202:
0x000a2edc subs r5, 1 | r5--;
| if (r5 != 1) {
0x000a2ede bne 0xa2e02 | goto label_57;
| }
| label_203:
0x000a2ee0 ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a2ee4 ldr r7, [sp, 0x40] | r7 = var_40h;
0x000a2ee6 ldr r5, [sp, 0x24] | r5 = var_24h;
| label_62:
0x000a2ee8 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a2eea cmp r3, 0 |
| if (r3 == 0) {
0x000a2eec beq.w 0xa36c6 | goto label_211;
| }
0x000a2ef0 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000a2ef2 cmp r3, 0 |
| if (r3 != 0) {
0x000a2ef4 bne.w 0xa357c | goto label_212;
| }
0x000a2ef8 ldr r3, [sp, 0x80] | r3 = var_80h;
| if (r3 == 0) {
0x000a2efa cbz r3, 0xa2f10 | goto label_213;
| }
0x000a2efc ldr r3, [sp, 0x80] | r3 = var_80h;
| do {
0x000a2efe mov r2, r3 | r2 = r3;
0x000a2f00 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a2f02 cmp r3, 0 |
0x000a2f04 bne 0xa2efe |
| } while (r3 != 0);
0x000a2f06 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a2f08 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x000a2f0a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000a2f0c ldr r3, [sp, 0x80] | r3 = var_80h;
0x000a2f0e str r3, [sp, 0x4c] | var_4ch = r3;
| label_213:
0x000a2f10 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a2f12 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x000a2f14 ldr r3, [sp, 0xc8] | r3 = var_c8h;
0x000a2f16 cmp r3, 0 |
| if (r3 == 0) {
0x000a2f18 beq.w 0xa3580 | goto label_214;
| }
| label_99:
0x000a2f1c ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x000a2f1e bl 0x5ee7c | fcn_0005ee7c (r0);
0x000a2f22 movs r3, 0 | r3 = 0;
0x000a2f24 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
| label_65:
0x000a2f26 ldr.w r1, [pc, 0x7dc] | r1 = *(0x000a3704);
0x000a2f2a mov r0, sb | r0 = sb;
0x000a2f2c ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x000a2f2e add r1, pc | r1 += pc;
0x000a2f30 bl 0x4c1a8 | fcn_0004c1a8 (r0);
0x000a2f34 b 0xa2bf6 | goto label_58;
| label_205:
0x000a2f36 cmp r2, 0x22 |
| if (r2 > 0x22) {
0x000a2f38 bhi.w 0xa324e | goto label_215;
| }
0x000a2f3c cmp r2, 0 |
| if (r2 == 0) {
0x000a2f3e beq 0xa2e62 | goto label_59;
| }
| label_71:
0x000a2f40 adds r6, 8 | r6 += 8;
0x000a2f42 cmp sl, r6 |
| if (sl != r6) {
0x000a2f44 bne.w 0xa2e22 | goto label_60;
| }
0x000a2f48 ldrb r3, [r4] | r3 = *(r4);
0x000a2f4a cmp r3, 0x22 |
| if (r3 == 0x22) {
0x000a2f4c beq 0xa3036 | goto label_216;
| }
0x000a2f4e cmp.w fp, 0 |
| if (fp <= 0) {
0x000a2f52 ble 0xa302a | goto label_217;
| }
0x000a2f54 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000a2f56 movs r7, 0 | r7 = 0;
0x000a2f58 sub.w sb, r3, 4 | sb = r3 - 4;
0x000a2f5c b 0xa2f64 |
| while (r5 <= r0) {
| label_61:
0x000a2f5e adds r7, 1 | r7++;
0x000a2f60 cmp fp, r7 |
| if (fp == r7) {
0x000a2f62 beq 0xa302a | goto label_217;
| }
0x000a2f64 ldr r6, [sb, 4]! | r6 = *((sb += 4));
0x000a2f68 mov r0, r6 | r0 = r6;
0x000a2f6a blx 0x85b4 | r0 = fcn_000085b4 ();
0x000a2f6e cmp r5, r0 |
0x000a2f70 mov sl, r0 | sl = r0;
0x000a2f72 ble 0xa2f5e |
| }
0x000a2f74 ldrb r3, [r4, r0] | r3 = *((r4 + r0));
0x000a2f76 cmp r3, 0x3a |
| if (r3 != 0x3a) {
0x000a2f78 bne 0xa2f5e | goto label_61;
| }
0x000a2f7a mov r0, r6 | r0 = r6;
0x000a2f7c mov r2, sl | r2 = sl;
0x000a2f7e mov r1, r4 | r1 = r4;
0x000a2f80 blx 0x8154 | r0 = fcn_00008154 ();
0x000a2f84 cmp r0, 0 |
| if (r0 != 0) {
0x000a2f86 bne 0xa2f5e | goto label_61;
| }
0x000a2f88 ldr r2, [sp, 0x14] | r2 = var_14h_2;
0x000a2f8a subs r4, r4, r2 | r4 -= r2;
0x000a2f8c add r4, sl | r4 += sl;
0x000a2f8e adds r3, r4, 1 | r3 = r4 + 1;
0x000a2f90 add.w sl, r2, r3 | sl = r2 + r3;
0x000a2f94 ldr r2, [sp, 0x10] | r2 = var_10h_2;
0x000a2f96 str r3, [sp, 0x1c] | var_1ch = r3;
0x000a2f98 sub.w sb, r2, r3 | sb = r2 - r3;
| label_63:
0x000a2f9c ldr r0, [sp, 0xa8] | r0 = x;
0x000a2f9e cmp.w sb, 0 |
0x000a2fa2 ldr r3, [r0] | r3 = *(r0);
0x000a2fa4 str r3, [sp, 0x18] | var_18h = r3;
| if (sb <= 0) {
0x000a2fa6 ble.w 0xa3518 | goto label_218;
| }
0x000a2faa add.w r3, sl, -1 | r3 = sl + -1;
0x000a2fae movs r4, 0 | r4 = 0;
0x000a2fb0 b 0xa2fb8 |
| while (r2 != 0x22) {
0x000a2fb2 adds r4, 1 | r4++;
0x000a2fb4 cmp r4, sb |
| if (r4 == sb) {
0x000a2fb6 beq 0xa2fc0 | goto label_82;
| }
0x000a2fb8 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000a2fbc cmp r2, 0x22 |
0x000a2fbe bne 0xa2fb2 |
| }
| label_82:
0x000a2fc0 add r3, sp, 0x90 | r3 += var_90h;
0x000a2fc2 ldr r1, [sp, 0xac] | r1 = var_ach;
0x000a2fc4 str r3, [sp] | *(sp) = r3;
0x000a2fc6 mov r2, sl | r2 = sl;
0x000a2fc8 mov r3, r4 | r3 = r4;
0x000a2fca bl 0xba70 | r0 = fcn_0000ba70 (r0, r1, r2, r3, r4);
0x000a2fce mov r6, r0 | r6 = r0;
0x000a2fd0 cmp r0, 0 |
| if (r0 != 0) {
0x000a2fd2 bne.w 0xa31c4 | goto label_219;
| }
0x000a2fd6 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000a2fd8 add.w ip, sp, 0xa4 |
0x000a2fdc strd r0, r0, [sp, 0x98] | __asm ("strd r0, r0, [sp, 0x98]");
0x000a2fe0 add r1, sp, 0xa0 | r1 += var_a0h;
0x000a2fe2 strd r0, r0, [sp, 0xa0] | __asm ("strd r0, r0, [sp, 0xa0]");
0x000a2fe6 add r3, sp, 0x9c | r3 += var_9ch;
0x000a2fe8 ldr r0, [sp, 0x90] | r0 = var_90h;
0x000a2fea str r1, [sp] | *(sp) = r1;
0x000a2fec add r1, sp, 0x94 | r1 += var_94h;
0x000a2fee str.w ip, [sp, 4] | __asm ("str.w ip, [var_0h_2]");
0x000a2ff2 ldr r5, [r2, 0x14] | r5 = *((r2 + 0x14));
0x000a2ff4 add r2, sp, 0x98 | r2 += var_98h;
0x000a2ff6 str r0, [sp, 0x28] | var_28h = r0;
0x000a2ff8 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000a2ffa mov r6, r0 | r6 = r0;
0x000a2ffc cmp r0, 0 |
| if (r0 == 0) {
0x000a2ffe beq.w 0xa32b2 | goto label_220;
| }
0x000a3002 subs r2, r4, 0 | r2 = r4 - 0;
0x000a3004 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a3006 it ne |
| if (r2 == r4) {
0x000a3008 movne r2, 1 | r2 = 1;
| }
0x000a300a cmp r0, 0x65 |
0x000a300c it ne |
| if (r0 == 0x65) {
0x000a300e movne r2, 0 | r2 = 0;
| }
0x000a3010 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a3012 cmp r2, 0 |
| if (r2 != 0) {
0x000a3014 bne.w 0xa32a6 | goto label_221;
| }
0x000a3018 ldrd r5, r0, [sp, 0x24] | __asm ("ldrd r5, r0, [var_24h]");
0x000a301c ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a3020 ldr r7, [sp, 0x40] | r7 = var_40h;
0x000a3022 blx r3 | uint32_t (*r3)() ();
| label_67:
0x000a3024 cmp r6, 0x65 |
| if (r6 != 0x65) {
0x000a3026 bne 0xa30ec | goto label_70;
| }
0x000a3028 b 0xa2ee8 | goto label_62;
| label_217:
0x000a302a movs r3, 0 | r3 = 0;
0x000a302c ldrd sb, sl, [sp, 0x10] | __asm ("ldrd sb, sl, [var_10h_2]");
0x000a3030 ldr r7, [sp, 0x60] | r7 = var_60h;
0x000a3032 str r3, [sp, 0x1c] | var_1ch = r3;
0x000a3034 b 0xa2f9c | goto label_63;
| label_216:
0x000a3036 cmp r5, 1 |
| if (r5 <= 1) {
0x000a3038 ble.w 0xa3552 | goto label_222;
| }
0x000a303c mov r3, r4 | r3 = r4;
0x000a303e movs r7, 1 | r7 = 1;
0x000a3040 b 0xa304a |
| while (r2 != 0x22) {
0x000a3042 adds r7, 1 | r7++;
0x000a3044 cmp r5, r7 |
| if (r5 == r7) {
0x000a3046 beq.w 0xa3246 | goto label_223;
| }
0x000a304a ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000a304e cmp r2, 0x22 |
0x000a3050 bne 0xa3042 |
| }
| label_87:
0x000a3052 cmp r5, r7 |
| if (r5 == r7) {
0x000a3054 beq.w 0xa3246 | goto label_223;
| }
0x000a3058 ldr r0, [sp, 0x84] | r0 = var_84h_2;
0x000a305a movs r3, 0 | r3 = 0;
0x000a305c subs r1, r7, 1 | r1 = r7 - 1;
0x000a305e str r3, [sp, 0x90] | var_90h = r3;
0x000a3060 movs r0, r0 |
0x000a3062 movs r4, r2 | r4 = r2;
0x000a3064 ldr.w sl, [r0] | sl = *(r0);
0x000a3068 str r1, [sp, 0x68] | var_68h = r1;
0x000a306a str r3, [sp] | *(sp) = r3;
0x000a306c mov r3, r1 | r3 = r1;
0x000a306e ldr r1, [sp, 0x74] | r1 = var_74h_2;
0x000a3070 str r2, [sp, 0x70] | var_70h_2 = r2;
0x000a3072 bl 0xba70 | r0 = fcn_0000ba70 (r0, r1, r2, r3, r4);
0x000a3076 mov r6, r0 | r6 = r0;
0x000a3078 cmp r0, 0 |
| if (r0 != 0) {
0x000a307a bne.w 0xa3398 | goto label_224;
| }
0x000a307e add r3, sp, 0x9c | r3 += var_9ch;
0x000a3080 ldr r2, [sp, 0x90] | r2 = var_90h;
0x000a3082 add.w ip, sp, 0xa4 |
0x000a3086 add r1, sp, 0xa0 | r1 += var_a0h;
0x000a3088 str r3, [sp, 0x2c] | var_2ch = r3;
0x000a308a mov sb, r0 | sb = r0;
0x000a308c add r3, sp, 0x98 | r3 += var_98h;
0x000a308e str.w r8, [sp, 0x58] | __asm ("str.w r8, [var_58h]");
0x000a3092 str r4, [sp, 0x34] | var_34h = r4;
0x000a3094 mov r8, ip | r8 = ip;
0x000a3096 mov r4, r1 | r4 = r1;
0x000a3098 str r3, [sp, 0x30] | var_30h = r3;
0x000a309a add r3, sp, 0x94 | r3 += var_94h;
0x000a309c str r0, [sp, 0x1c] | var_1ch = r0;
0x000a309e str r2, [sp, 0x18] | var_18h = r2;
0x000a30a0 strd r0, r0, [sp, 0x38] | __asm ("strd r0, r0, [sp, 0x38]");
0x000a30a4 str r3, [sp, 0x28] | var_28h = r3;
0x000a30a6 strd fp, r7, [sp, 0x50] | __asm ("strd fp, r7, [sp, 0x50]");
| label_66:
0x000a30aa movs r3, 0 | r3 = 0;
0x000a30ac strd r4, r8, [sp] | __asm ("strd r4, r8, [sp]");
0x000a30b0 strd r3, r3, [sp, 0x98] | __asm ("strd r3, r3, [sp, 0x98]");
0x000a30b4 strd r3, r3, [sp, 0xa0] | __asm ("strd r3, r3, [sp, 0xa0]");
0x000a30b8 ldr.w r5, [sl, 0x14] | r5 = *((sl + 0x14));
0x000a30bc ldrd r3, r2, [sp, 0x2c] | __asm ("ldrd r3, r2, [var_2ch]");
0x000a30c0 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000a30c2 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000a30c4 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000a30c6 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x000a30c8 cbz r0, 0xa3116 | goto label_225;
| }
0x000a30ca ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000a30ce ldr r0, [sp, 0x18] | r0 = var_18h;
0x000a30d0 ldrd fp, r7, [sp, 0x50] | __asm ("ldrd fp, r7, [var_50h]");
0x000a30d4 ldr.w r8, [sp, 0x58] | r8 = var_58h;
0x000a30d8 ldr r4, [sp, 0x34] | r4 = var_34h;
0x000a30da blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000a30dc cmp r6, 0x65 |
0x000a30de mov.w r3, 0 | r3 = 0;
0x000a30e2 str r3, [sp, 0x90] | var_90h = r3;
| if (r6 == 0x65) {
0x000a30e4 beq.w 0xa33aa | goto label_226;
| }
| label_76:
0x000a30e8 ldrd sb, r5, [sp, 0x20] | __asm ("ldrd sb, r5, [var_20h_2]");
| label_70:
0x000a30ec ldr r0, [sp, 0x4c] | r0 = var_4ch;
0x000a30ee movs r4, 0 | r4 = 0;
0x000a30f0 bl 0x5ee7c | fcn_0005ee7c (r0);
0x000a30f4 ldr r0, [sp, 0x80] | r0 = var_80h;
0x000a30f6 bl 0x5ee7c | fcn_0005ee7c (r0);
0x000a30fa str r4, [r5, 0x10] | *((r5 + 0x10)) = r4;
| label_91:
0x000a30fc mov r0, r4 | r0 = r4;
0x000a30fe bl 0x5ee7c | fcn_0005ee7c (r0);
0x000a3102 cmp r6, 0x12 |
0x000a3104 mov.w r3, 0 | r3 = 0;
0x000a3108 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
| if (r6 == 0x12) {
0x000a310a beq.w 0xa2be8 | goto label_64;
| }
0x000a310e cmp r6, 1 |
| if (r6 != 1) {
0x000a3110 bne.w 0xa2bf8 | goto label_52;
| }
0x000a3114 b 0xa2f26 | goto label_65;
| label_225:
0x000a3116 lsl.w fp, sb, 1 |
0x000a311a mov r3, r0 | r3 = r0;
0x000a311c ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a311e add.w r7, fp, sb | r7 = fp + sb;
0x000a3122 lsls r7, r7, 3 | r7 <<= 3;
0x000a3124 add.w r2, r7, 0x90 | r2 = r7 + 0x90;
0x000a3128 blx 0x8500 | r0 = fcn_00008500 ();
0x000a312c mov r5, r0 | r5 = r0;
0x000a312e cmp r0, 0 |
| if (r0 == 0) {
0x000a3130 beq.w 0xa3492 | goto label_227;
| }
0x000a3134 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a3136 ldr r2, [sp, 0x98] | r2 = var_98h;
0x000a3138 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000a313a add r2, r3 | r2 += r3;
0x000a313c asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000a313e blx 0x8500 | r0 = fcn_00008500 ();
0x000a3142 mov r3, r0 | r3 = r0;
0x000a3144 cmp r0, 0 |
| if (r0 == 0) {
0x000a3146 beq.w 0xa34ba | goto label_228;
| }
0x000a314a add.w r2, r7, 0x78 | r2 = r7 + 0x78;
0x000a314e str r3, [sp, 0x38] | var_38h = r3;
0x000a3150 str r6, [r5, r2] | *((r5 + r2)) = r6;
0x000a3152 add r2, r5 | r2 += r5;
0x000a3154 str r6, [r2, 4] | *((r2 + 4)) = r6;
0x000a3156 add r7, r5 | r7 += r5;
0x000a3158 str r6, [r2, 8] | *((r2 + 8)) = r6;
0x000a315a str r6, [r2, 0xc] | *((r2 + 0xc)) = r6;
0x000a315c str r6, [r2, 0x10] | *((r2 + 0x10)) = r6;
0x000a315e str r6, [r2, 0x14] | *((r2 + 0x14)) = r6;
0x000a3160 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000a3162 add r0, r2 | r0 += r2;
0x000a3164 ldrd r1, r2, [sp, 0x94] | __asm ("ldrd r1, r2, [var_94h]");
0x000a3168 blx 0x8610 | fcn_00008610 ();
0x000a316c ldr r2, [sp, 0x98] | r2 = var_98h;
0x000a316e ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a3170 str r2, [r7, 0x7c] | *((r7 + 0x7c)) = r2;
0x000a3172 add r3, r2 | r3 += r2;
0x000a3174 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x000a3176 str r3, [sp, 0x1c] | var_1ch = r3;
0x000a3178 ldr r3, [sp, 0x68] | r3 = var_68h;
0x000a317a cmp r3, r2 |
0x000a317c ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a317e itet gt |
| if (r3 <= r2) {
0x000a3180 ldrgt r1, [sp, 0x70] | r1 = var_70h_2;
| }
| if (r3 > r2) {
0x000a3182 movle r1, r6 | r1 = r6;
| }
| if (r3 <= r2) {
0x000a3184 ldrbgt r1, [r1, r2] | r1 = *((r1 + r2));
| }
0x000a3186 add.w r2, fp, sb | r2 = fp + sb;
0x000a318a add.w r2, r5, r2, lsl 3 | r2 = r5 + (r2 << 3);
0x000a318e ittt gt |
| if (r3 <= r2) {
0x000a3190 subgt r1, 0x2a | r1 -= 0x2a;
| }
| if (r3 > r2) {
0x000a3192 clzgt r1, r1 | __asm ("clzgt r1, r1");
| }
| if (r3 > r2) {
0x000a3196 lsrs r1, r1, 5 | r1 >>= 5;
| }
0x000a3198 str.w r1, [r2, 0x80] | __asm ("str.w r1, [r2, 0x80]");
0x000a319c ldr r2, [sp, 0x9c] | r2 = var_9ch;
0x000a319e cmp r2, 0 |
| if (r2 > 0) {
0x000a31a0 ble 0xa31b0 |
0x000a31a2 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000a31a4 ldrb r6, [r1, r2] | r6 = *((r1 + r2));
0x000a31a6 sub.w r6, r6, 0x5e | r6 -= 0x5e;
0x000a31aa clz r6, r6 | r6 &= r6;
0x000a31ae lsrs r6, r6, 5 | r6 >>= 5;
| }
0x000a31b0 add fp, sb |
0x000a31b2 str r3, [sp, 0x38] | var_38h = r3;
0x000a31b4 add.w fp, r5, fp, lsl 3 |
0x000a31b8 add.w sb, sb, 1 | sb++;
0x000a31bc str r5, [sp, 0x3c] | var_3ch = r5;
0x000a31be str.w r6, [fp, 0x84] | __asm ("str.w r6, [arg_84h]");
0x000a31c2 b 0xa30aa | goto label_66;
| label_219:
0x000a31c4 ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a31c8 ldr r7, [sp, 0x40] | r7 = var_40h;
0x000a31ca ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a31cc b 0xa3024 | goto label_67;
| label_204:
0x000a31ce ldrb r2, [r4, 4] | r2 = *((r4 + 4));
0x000a31d0 cmp r2, 0x2f |
| if (r2 != 0x2f) {
0x000a31d2 bne.w 0xa2e4e | goto label_68;
| }
0x000a31d6 ldrb r2, [r4, 5] | r2 = *((r4 + 5));
0x000a31d8 subs r2, 0x30 | r2 -= 0x30;
0x000a31da cmp r2, 9 |
| if (r2 > 9) {
0x000a31dc bhi.w 0xa2e4e | goto label_68;
| }
0x000a31e0 adds r1, r7, 1 | r1 = r7 + 1;
0x000a31e2 ldrb r2, [r4, r1] | r2 = *((r4 + r1));
0x000a31e4 add r1, r4 | r1 += r4;
0x000a31e6 subs r2, 0x30 | r2 -= 0x30;
0x000a31e8 uxtb r0, r2 | r0 = (int8_t) r2;
0x000a31ea cmp r0, 9 |
| if (r0 > 9) {
0x000a31ec bhi.w 0xa36dc | goto label_229;
| }
0x000a31f0 str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_18h]");
0x000a31f4 asrs r0, r2, 0x1f | r0 = r2 >> 0x1f;
0x000a31f6 mov fp, r1 |
0x000a31f8 b 0xa3224 |
| while (r1 < 9) {
0x000a31fa lsl.w ip, r0, 2 |
0x000a31fe lsls r1, r2, 2 | r1 = r2 << 2;
0x000a3200 orr.w ip, ip, r2, lsr 30 |
0x000a3204 adds r1, r1, r2 | r1 += r2;
0x000a3206 adc.w ip, r0, ip | __asm ("adc.w ip, r0, ip");
0x000a320a adds r1, r1, r1 | r1 += r1;
0x000a320c adc.w ip, ip, ip | __asm ("adc.w ip, ip, ip");
0x000a3210 adds.w r2, lr, r1 | r2 = lr + r1;
0x000a3214 adc.w r0, ip, lr, asr 31 | __asm ("adc.w r0, ip, lr, asr 31");
0x000a3218 cmp.w r2, -0x80000000 |
0x000a321c sbcs r1, r0, 0 | __asm ("sbcs r1, r0, 0");
| if (r2 >= -0x80000000) {
0x000a3220 bhs.w 0xa3646 | goto label_230;
| }
0x000a3224 ldrb lr, [fp, 1]! |
0x000a3228 mov ip, r3 |
0x000a322a adds r3, 1 | r3++;
0x000a322c sub.w lr, lr, 0x30 | lr -= 0x30;
0x000a3230 uxtb.w r1, lr | r1 = (int8_t) lr;
0x000a3234 cmp r1, 9 |
0x000a3236 bls 0xa31fa |
| }
0x000a3238 add.w ip, ip, 2 |
0x000a323c ldr.w fp, [sp, 0x18] | fp = var_18h;
0x000a3240 mov r3, r2 | r3 = r2;
0x000a3242 add r7, ip | r7 += ip;
0x000a3244 b 0xa2e50 | goto label_69;
| label_223:
0x000a3246 ldrd sb, r5, [sp, 0x20] | __asm ("ldrd sb, r5, [var_20h_2]");
| label_97:
0x000a324a movs r6, 1 | r6 = 1;
0x000a324c b 0xa30ec | goto label_70;
| label_215:
0x000a324e subs r2, 0x28 | r2 -= 0x28;
0x000a3250 cmp r2, 1 |
| if (r2 > 1) {
0x000a3252 bhi.w 0xa2f40 | goto label_71;
| }
0x000a3256 b 0xa2e62 | goto label_59;
| label_208:
0x000a3258 movs r0, 0x30 | r0 = 0x30;
0x000a325a movs r1, 0 | r1 = 0;
0x000a325c blx 0x8240 | r0 = fcn_00008240 ();
0x000a3260 mov r7, r0 | r7 = r0;
0x000a3262 cmp r0, 0 |
| if (r0 == 0) {
0x000a3264 beq.w 0xa3386 | goto label_231;
| }
0x000a3268 movs r2, 0x2c | r2 = 0x2c;
0x000a326a movs r1, 0 | r1 = 0;
0x000a326c adds r0, 4 | r0 += 4;
0x000a326e blx 0x839c | fcn_0000839c ();
0x000a3272 mov r2, r8 | r2 = r8;
0x000a3274 movs r3, 3 | r3 = 3;
0x000a3276 str r3, [r7] | *(r7) = r3;
| do {
0x000a3278 mov r3, r2 | r3 = r2;
0x000a327a ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x000a327c cmp r2, 0 |
0x000a327e bne 0xa3278 |
| } while (r2 != 0);
0x000a3280 str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x000a3282 str r7, [sp, 0x4c] | var_4ch = r7;
0x000a3284 str r7, [r3, 8] | *((r3 + 8)) = r7;
| label_83:
0x000a3286 cmp r6, 5 |
| if (r6 != 5) {
0x000a3288 beq 0xa3292 |
0x000a328a ldr r3, [r7] | r3 = *(r7);
0x000a328c cmp r3, 1 |
| if (r3 == 1) {
0x000a328e beq.w 0xa3634 | goto label_232;
| }
| }
0x000a3292 movs r3, 0 | r3 = 0;
0x000a3294 mov r8, r7 | r8 = r7;
0x000a3296 str r3, [sp, 0x5c] | var_5ch = r3;
0x000a3298 ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a329a cmp r3, 0 |
| if (r3 != 0) {
0x000a329c bne.w 0xa2eb6 | goto label_72;
| }
| label_210:
0x000a32a0 mov r8, r5 | r8 = r5;
0x000a32a2 str r5, [sp, 0x4c] | var_4ch = r5;
0x000a32a4 b 0xa2ec0 | goto label_73;
| label_221:
0x000a32a6 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000a32a8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a32aa add r2, r4 | r2 += r4;
0x000a32ac mov r4, r2 | r4 = r2;
0x000a32ae blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
0x000a32b0 b 0xa2ec0 | goto label_73;
| label_220:
0x000a32b2 ldr r4, [sp, 0x98] | r4 = var_98h;
0x000a32b4 mov r1, r0 | r1 = r0;
0x000a32b6 adds r4, 0x90 | r4 += 0x90;
0x000a32b8 mov r0, r4 | r0 = r4;
0x000a32ba blx 0x8240 | r0 = fcn_00008240 ();
0x000a32be mov r5, r0 | r5 = r0;
0x000a32c0 cmp r0, 0 |
| if (r0 == 0) {
0x000a32c2 beq.w 0xa34fa | goto label_233;
| }
0x000a32c6 mov r2, r4 | r2 = r4;
0x000a32c8 mov r1, r6 | r1 = r6;
0x000a32ca blx 0x839c | fcn_0000839c ();
0x000a32ce movs r6, 1 | r6 = 1;
0x000a32d0 mov r3, r5 | r3 = r5;
0x000a32d2 movs r2, 5 | r2 = 5;
0x000a32d4 add.w r0, r5, 0x90 | r0 = r5 + 0x90;
0x000a32d8 str r2, [r3], 0x30 | *(r3) = r2;
| r3 += 0x30;
0x000a32dc str r7, [r5, 0x74] | *((r5 + 0x74)) = r7;
0x000a32de str r6, [r5, 0x70] | *((r5 + 0x70)) = r6;
0x000a32e0 ldr r2, [sp, 0x98] | r2 = var_98h;
0x000a32e2 str r0, [r5, 0x78] | *((r5 + 0x78)) = r0;
0x000a32e4 ldr r1, [sp, 0x94] | r1 = var_94h;
0x000a32e6 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x000a32e8 str r2, [r5, 0x7c] | *((r5 + 0x7c)) = r2;
0x000a32ea blx 0x8610 | fcn_00008610 ();
0x000a32ee ldr r4, [sp, 0xa0] | r4 = var_a0h;
0x000a32f0 cmp r4, sb |
| if (r4 < sb) {
0x000a32f2 bge 0xa3304 |
0x000a32f4 ldrb.w r3, [sl, r4] | r3 = *((sl + r4));
0x000a32f8 cmp r3, 0x2a |
0x000a32fa ittt eq |
| if (r3 != 0x2a) {
0x000a32fc addeq r4, r4, r6 | r4 += r6;
| }
| if (r3 != 0x2a) {
0x000a32fe streq r6, [r5, 0x80] | *((r5 + 0x80)) = r6;
| }
| if (r3 != 0x2a) {
0x000a3302 str r4, [sp, 0xa0] | var_a0h = r4;
| goto label_234;
| }
| }
| label_234:
0x000a3304 ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x000a3306 cmp r3, 0 |
| if (r3 <= 0) {
0x000a3308 ble 0xa333c | goto label_235;
| }
0x000a330a ldr r6, [sp, 0xb4] | r6 = var_b4h;
0x000a330c add sl, r3 | sl += r3;
0x000a330e movs r0, 0 | r0 = 0;
0x000a3310 subs r3, 1 | r3--;
0x000a3312 movs r1, 1 | r1 = 1;
| do {
0x000a3314 ldrb r2, [sl, -0x1]! | r2 = *((sl -= 0x1));
0x000a3318 cmp r2, 0x2d |
0x000a331a itt eq |
| if (r2 != 0x2d) {
0x000a331c moveq r2, r3 | r2 = r3;
| }
| if (r2 != 0x2d) {
0x000a331e moveq r0, 1 | r0 = 1;
| }
| if (r2 != 0x2d) {
0x000a3320 beq 0xa332e |
| if (r6 == 0) {
0x000a3322 cbz r6, 0xa3336 | goto label_236;
| }
0x000a3324 cmp r2, 0x5e |
| if (r2 != 0x5e) {
0x000a3326 bne 0xa3336 | goto label_236;
| }
0x000a3328 mov r2, r3 | r2 = r3;
0x000a332a str.w r1, [r5, 0x84] | __asm ("str.w r1, [r5, 0x84]");
| }
0x000a332e str r3, [sp, 0x9c] | var_9ch = r3;
0x000a3330 subs r3, 1 | r3--;
0x000a3332 cmp r2, 0 |
0x000a3334 bne 0xa3314 |
| } while (r2 != 0);
| if (r0 != 0) {
| label_236:
0x000a3336 cbz r0, 0xa333c |
0x000a3338 movs r3, 1 | r3 = 1;
0x000a333a str r3, [sp, 0xc0] | var_c0h = r3;
| }
| label_235:
0x000a333c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a333e ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a3340 add r3, r4 | r3 += r4;
0x000a3342 mov r4, r3 | r4 = r3;
0x000a3344 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a3346 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a3348 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000a334a ldr r6, [r5] | r6 = *(r5);
0x000a334c cmp r6, 5 |
| if (r6 != 5) {
0x000a334e bne.w 0xa2e92 | goto label_74;
| }
0x000a3352 ldr r3, [sp, 0xc0] | r3 = var_c0h;
0x000a3354 cmp r3, 0 |
| if (r3 == 0) {
0x000a3356 beq.w 0xa2e9a | goto label_75;
| }
0x000a335a movs r0, 0x30 | r0 = 0x30;
0x000a335c movs r1, 0 | r1 = 0;
0x000a335e blx 0x8240 | r0 = fcn_00008240 ();
0x000a3362 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x000a3364 cbz r0, 0xa3386 |
0x000a3366 movs r2, 0x2c | r2 = 0x2c;
0x000a3368 movs r1, 0 | r1 = 0;
0x000a336a adds r0, 4 | r0 += 4;
0x000a336c blx 0x839c | fcn_0000839c ();
0x000a3370 movs r3, 2 | r3 = 2;
0x000a3372 str r5, [r6, 0x10] | *((r6 + 0x10)) = r5;
0x000a3374 str r3, [r6] | *(r6) = r3;
0x000a3376 ldr r3, [sp, 0x80] | r3 = var_80h;
0x000a3378 str r6, [r5, 8] | *((r5 + 8)) = r6;
| if (r3 != 0) {
0x000a337a cbz r3, 0xa3382 |
0x000a337c ldr r3, [sp, 0x80] | r3 = var_80h;
0x000a337e str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x000a3380 str r6, [r3, 8] | *((r3 + 8)) = r6;
| }
0x000a3382 str r6, [sp, 0x80] | var_80h = r6;
0x000a3384 b 0xa2ec0 | goto label_73;
| }
| label_231:
0x000a3386 mov r8, r5 | r8 = r5;
0x000a3388 ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a338c mov r0, r8 | r0 = r8;
0x000a338e ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a3390 movs r6, 7 | r6 = 7;
0x000a3392 bl 0x5ee7c | fcn_0005ee7c (r0);
0x000a3396 b 0xa30ec | goto label_70;
| label_224:
0x000a3398 cmp r6, 0x65 |
0x000a339a mov.w sb, 0 | sb = 0;
0x000a339e str.w sb, [sp, 0x1c] | __asm ("str.w sb, [var_1ch]");
0x000a33a2 strd sb, sb, [sp, 0x38] | __asm ("strd sb, sb, [sp, 0x38]");
| if (r6 != 0x65) {
0x000a33a6 bne.w 0xa30e8 | goto label_76;
| }
| label_226:
0x000a33aa add.w r3, sb, sb, lsl 1 | r3 = sb + (sb << 1);
0x000a33ae ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a33b0 lsls r6, r3, 3 | r6 = r3 << 3;
0x000a33b2 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a33b4 add.w r2, r3, 0x90 | r2 = r3 + 0x90;
0x000a33b8 movs r3, 0 | r3 = 0;
0x000a33ba add r2, r6 | r2 += r6;
0x000a33bc blx 0x8500 | r0 = fcn_00008500 ();
0x000a33c0 mov r5, r0 | r5 = r0;
0x000a33c2 cmp r0, 0 |
| if (r0 == 0) {
0x000a33c4 beq.w 0xa364e | goto label_237;
| }
0x000a33c8 movs r2, 0x78 | r2 = 0x78;
0x000a33ca movs r1, 0 | r1 = 0;
0x000a33cc blx 0x839c | fcn_0000839c ();
0x000a33d0 mov r3, r5 | r3 = r5;
0x000a33d2 movs r2, 5 | r2 = 5;
0x000a33d4 ldr r1, [sp, 0x38] | r1 = var_38h;
0x000a33d6 adds r6, 0x48 | r6 += 0x48;
0x000a33d8 str r2, [r3], 0x30 | *(r3) = r2;
| r3 += 0x30;
0x000a33dc add r6, r3 | r6 += r3;
0x000a33de ldr r2, [sp, 0x60] | r2 = var_60h;
0x000a33e0 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x000a33e2 strd sb, r2, [r5, 0x70] | __asm ("strd sb, r2, [r5, 0x70]");
| if (r1 != 0) {
0x000a33e6 cbz r1, 0xa33fe |
0x000a33e8 mov sb, r1 | sb = r1;
0x000a33ea ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000a33ec mov r0, r6 | r0 = r6;
0x000a33ee blx 0x8610 | fcn_00008610 ();
0x000a33f2 mov r0, sb | r0 = sb;
0x000a33f4 blx 0x8404 | fcn_00008404 ();
0x000a33f8 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000a33fa ldr.w sb, [r3, 0x40] | sb = *((r3 + 0x40));
| }
0x000a33fe ldr r2, [sp, 0x14] | r2 = var_14h_2;
0x000a3400 cmp.w sb, 0 |
0x000a3404 sub.w r4, r4, r2 | r4 -= r2;
0x000a3408 it gt |
| if (sb <= 0) {
0x000a340a movgt r2, 0 | r2 = 0;
| }
0x000a340c add r4, r7 | r4 += r7;
0x000a340e add.w r4, r4, 1 | r4++;
| if (sb <= 0) {
0x000a3412 ble.w 0xa3662 | goto label_238;
| }
| do {
0x000a3416 ldr r1, [r3, 0x4c] | r1 = *((r3 + 0x4c));
0x000a3418 adds r2, 1 | r2++;
0x000a341a cmp r2, sb |
0x000a341c str r6, [r3, 0x48] | *((r3 + 0x48)) = r6;
0x000a341e add.w r3, r3, 0x18 | r3 += 0x18;
0x000a3420 lsls r0, r3, 0xc | r0 = r3 << 0xc;
0x000a3422 add r6, r1 | r6 += r1;
0x000a3424 bne 0xa3416 |
| } while (r0 != r3);
0x000a3426 ldr r6, [r5] | r6 = *(r5);
0x000a3428 cmp r6, 5 |
| if (r6 != 5) {
0x000a342a bne.w 0xa2e92 | goto label_74;
| }
0x000a342e b 0xa2e9a | goto label_75;
| label_207:
0x000a3430 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000a3432 cmp r3, 0 |
| if (r3 != 0) {
0x000a3434 bne.w 0xa3608 | goto label_239;
| }
0x000a3438 cmp.w r8, 0 |
| if (r8 != 0) {
0x000a343c beq 0xa344c |
0x000a343e cmp r6, 1 |
| if (r6 != 1) {
0x000a3440 bne 0xa344c | goto label_240;
| }
0x000a3442 ldr.w r3, [r8] | r3 = *(r8);
0x000a3446 cmp r3, 5 |
| if (r3 != 5) {
0x000a3448 bne.w 0xa3634 | goto label_232;
| }
| }
| label_240:
0x000a344c ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
| if (r3 != 0) {
0x000a3450 cbnz r3, 0xa345c | goto label_241;
| }
0x000a3452 b 0xa361a | goto label_242;
| do {
| label_77:
0x000a3454 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000a3456 mov r8, r3 | r8 = r3;
| if (r2 == 0) {
0x000a3458 cbz r2, 0xa348e | goto label_243;
| }
| label_78:
0x000a345a mov r3, r2 | r3 = r2;
| label_241:
0x000a345c ldr r2, [r3] | r2 = *(r3);
0x000a345e cmp r2, 1 |
0x000a3460 beq 0xa3454 |
| } while (r2 == 1);
0x000a3462 cmp r2, 4 |
0x000a3464 ldr r1, [r5] | r1 = *(r5);
| if (r2 == 4) {
0x000a3466 beq 0xa3482 | goto label_244;
| }
0x000a3468 cmp r1, 4 |
0x000a346a it ne |
| if (r1 == 4) {
0x000a346c cmpne r1, 1 | __asm ("cmpne r1, 1");
| goto label_245;
| }
| if (r1 != 4) {
| label_245:
0x000a346e bne 0xa3454 | goto label_77;
| }
| do {
0x000a3470 str r5, [r3, 0x10] | *((r3 + 0x10)) = r5;
0x000a3472 str r3, [r5, 8] | *((r5 + 8)) = r3;
0x000a3474 mov r3, r8 | r3 = r8;
| label_79:
0x000a3476 str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x000a3478 mov r8, r5 | r8 = r5;
0x000a347a str r5, [r3, 8] | *((r3 + 8)) = r5;
0x000a347c movs r3, 1 | r3 = 1;
0x000a347e str r3, [sp, 0x5c] | var_5ch = r3;
0x000a3480 b 0xa2ec0 | goto label_73;
| label_244:
0x000a3482 cmp r1, 1 |
0x000a3484 beq 0xa3470 |
| } while (r1 == 1);
0x000a3486 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000a3488 mov r8, r3 | r8 = r3;
0x000a348a cmp r2, 0 |
| if (r2 != 0) {
0x000a348c bne 0xa345a | goto label_78;
| }
| label_243:
0x000a348e str r5, [sp, 0x4c] | var_4ch = r5;
0x000a3490 b 0xa3476 | goto label_79;
| label_227:
0x000a3492 mov r8, r0 | r8 = r0;
0x000a3494 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a3496 ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a349a ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a349c blx 0x8404 | fcn_00008404 ();
| do {
| label_94:
0x000a34a0 ldr r0, [sp, 0x18] | r0 = var_18h;
| if (r0 != 0) {
0x000a34a2 cbz r0, 0xa34aa |
0x000a34a4 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000a34a8 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x000a34aa ldr r0, [sp, 0x38] | r0 = var_38h;
0x000a34ac movs r6, 7 | r6 = 7;
0x000a34ae blx 0x8404 | fcn_00008404 ();
0x000a34b2 mov r0, r8 | r0 = r8;
0x000a34b4 blx 0x8404 | fcn_00008404 ();
0x000a34b8 b 0xa30ec | goto label_70;
| label_228:
0x000a34ba str r0, [sp, 0x10] | var_10h_2 = r0;
0x000a34bc mov r8, r5 | r8 = r5;
0x000a34be ldr r0, [sp, 0x38] | r0 = var_38h;
0x000a34c0 ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a34c4 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a34c6 blx 0x8404 | fcn_00008404 ();
0x000a34ca ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x000a34cc str r3, [sp, 0x38] | var_38h = r3;
0x000a34ce b 0xa34a0 |
| } while (1);
| label_193:
0x000a34d0 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000a34d2 cmp r3, 1 |
| if (r3 != 1) {
0x000a34d4 bne.w 0xa2d0e | goto label_80;
| }
0x000a34d8 mov r0, r5 | r0 = r5;
0x000a34da bl 0x7c30c | fcn_0007c30c (r0);
0x000a34dc vmax.u16 d4, d7, d6 | __asm ("vmax.u16 d4, d7, d6");
0x000a34e0 cmp r0, 0 |
| if (r0 != 0) {
0x000a34e2 bne.w 0xa2bf8 | goto label_52;
| }
0x000a34e6 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000a34e8 ldr r2, [sp, 0x88] | r2 = var_88h;
0x000a34ea ldr r1, [sp, 0x6c] | r1 = var_6ch;
0x000a34ec blx 0x8af8 | r0 = fcn_00008af8 ();
0x000a34f0 mov r6, r0 | r6 = r0;
0x000a34f2 cmp r6, 0 |
| if (r6 != 0) {
0x000a34f4 bne.w 0xa2bf8 | goto label_52;
| }
0x000a34f8 b 0xa2d0e | goto label_80;
| label_233:
0x000a34fa ldr.w sl, [sp, 0x18] | sl = var_18h;
0x000a34fe movs r6, 7 | r6 = 7;
0x000a3500 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a3502 ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a3506 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x000a350a ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a350c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000a350e b 0xa30ec | goto label_70;
| label_191:
0x000a3510 ldrb.w r3, [r7, 0xef] | r3 = *((r7 + 0xef));
0x000a3514 b.w 0xa2c80 | goto label_81;
| label_218:
0x000a3518 movs r4, 0 | r4 = 0;
0x000a351a b 0xa2fc0 | goto label_82;
| label_209:
0x000a351c mov r7, r8 | r7 = r8;
0x000a351e b 0xa3286 | goto label_83;
| label_199:
0x000a3520 str r4, [sp, 0x74] | var_74h_2 = r4;
0x000a3522 b 0xa2d94 | goto label_84;
| if (r3 == 0) {
| label_194:
0x000a3524 cbz r3, 0xa3556 | goto label_246;
| }
0x000a3526 ldr r2, [pc, 0x1e0] |
0x000a3528 add r2, pc | r2 = 0x146c36;
| label_88:
0x000a352a ldr r0, [pc, 0x1e0] |
0x000a352c add r0, pc | r0 = 0x146c3e;
0x000a352e blx 0x8644 | r0 = fcn_00008644 ();
0x000a3532 mov r4, r0 | r4 = r0;
0x000a3534 b.w 0xa2cd6 | goto label_85;
| label_206:
0x000a3538 ldrd sb, r5, [sp, 0x20] | __asm ("ldrd sb, r5, [var_20h_2]");
0x000a353c movs r6, 7 | r6 = 7;
0x000a353e b 0xa30ec | goto label_70;
| label_198:
0x000a3540 ldr r0, [sp, 0x88] | r0 = var_88h;
0x000a3542 blx 0x8944 | r0 = fcn_00008944 ();
0x000a3546 cmp r0, 5 |
| if (r0 == 5) {
0x000a3548 beq.w 0xa2d80 | goto label_86;
| }
| label_196:
0x000a354c movs r6, 7 | r6 = 7;
0x000a354e b.w 0xa2bf8 | goto label_52;
| label_222:
0x000a3552 movs r7, 1 | r7 = 1;
0x000a3554 b 0xa3052 | goto label_87;
| label_246:
0x000a3556 ldr r2, [pc, 0x1b8] |
0x000a3558 add r2, pc | r2 = 0x146c6e;
0x000a355a b 0xa352a | goto label_88;
| label_195:
0x000a355c ldr r3, [pc, 0x1b4] |
0x000a355e add r3, pc | r3 = 0x146c76;
0x000a3560 b.w 0xa2cc0 | goto label_89;
| label_189:
0x000a3564 movs r0, 0 | r0 = 0;
0x000a3566 mov.w r1, -0x80000000 | r1 = -0x80000000;
0x000a356a mov.w r2, -1 | r2 = -1;
0x000a356e mvn r3, 0x80000000 | r3 = ~0x80000000;
0x000a3572 str r6, [sp, 0x78] | var_78h = r6;
0x000a3574 strd r0, r1, [r5, 0x48] | __asm ("strd r0, r1, [r5, 0x48]");
0x000a3578 b.w 0xa2c66 | goto label_90;
| label_212:
0x000a357c ldr r6, [sp, 0x5c] | r6 = var_5ch;
0x000a357e b 0xa30ec | goto label_70;
| label_214:
0x000a3580 movs r1, 0xc | r1 = 0xc;
0x000a3582 add.w r0, r5, 0x10 | r0 = r5 + 0x10;
0x000a3586 bl 0x5ef34 | r0 = fcn_0005ef34 (r0, r1);
0x000a358a mov r6, r0 | r6 = r0;
0x000a358c cmp r0, 0 |
| if (r0 == 0) {
0x000a358e beq 0xa3620 | goto label_247;
| }
0x000a3590 ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
0x000a3592 b 0xa30fc | goto label_91;
| label_200:
0x000a3594 str r2, [r5, 0x10] | *((r5 + 0x10)) = r2;
| label_98:
0x000a3596 movs r4, 0 | r4 = 0;
| label_93:
0x000a3598 movs r3, 0 | r3 = 0;
0x000a359a add r6, sp, 0x98 | r6 += var_98h;
0x000a359c mov r1, r4 | r1 = r4;
0x000a359e str r6, [sp] | *(sp) = r6;
0x000a35a0 strd r3, r3, [sp, 0x98] | __asm ("strd r3, r3, [sp, 0x98]");
0x000a35a4 add r2, sp, 0x9c | r2 += var_9ch;
0x000a35a6 str r3, [sp, 0xa0] | var_a0h = r3;
0x000a35a8 mov r0, r5 | r0 = r5;
0x000a35aa add r3, sp, 0xa0 | r3 += var_a0h;
0x000a35ac ldr r4, [r5] | r4 = *(r5);
0x000a35ae bl 0x9b8dc | fcn_0009b8dc (r0, r1, r2, r3, r4, r5, r6);
0x000a35b2 ldr.w sl, [sp, 0x98] | sl = var_98h;
0x000a35b6 cmp.w sl, 0 |
| if (sl == 0) {
0x000a35ba bne 0xa35ca |
0x000a35bc ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x000a35be cmp r3, 1 |
| if (r3 <= 1) {
0x000a35c0 ble 0xa35ca | goto label_96;
| }
0x000a35c2 ldrb.w r2, [r4, 0xec] | r2 = *((r4 + 0xec));
0x000a35c6 cmp r2, 0 |
| if (r2 != 0) {
0x000a35c8 bne 0xa3666 | goto label_248;
| }
| }
| label_96:
0x000a35ca mov r2, r6 | r2 = r6;
0x000a35cc ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x000a35ce mov r0, r5 | r0 = r5;
0x000a35d0 bl 0xa295c | fcn_000a295c (r0, r1, r2);
0x000a35d4 ldr r6, [sp, 0x98] | r6 = var_98h;
0x000a35d6 ldr.w r0, [r7, 0xfc] | r0 = *((r7 + 0xfc));
0x000a35da blx 0x8b04 | fcn_00008b04 ();
0x000a35de movs r3, 0 | r3 = 0;
0x000a35e0 str.w r3, [r7, 0xfc] | __asm ("str.w r3, [r7, 0xfc]");
0x000a35e4 cmp r6, 0 |
| if (r6 != 0) {
0x000a35e6 bne.w 0xa2bf8 | goto label_52;
| }
0x000a35ea ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x000a35ec vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a35f0 str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
0x000a35f2 vstr d16, [r5, 0x20] | __asm ("vstr d16, [r5, 0x20]");
0x000a35f6 b.w 0xa2c92 | goto label_92;
| label_190:
0x000a35fa ldr r0, [sp, 0x78] | r0 = var_78h;
0x000a35fc blx 0x89d4 | r0 = fcn_000089d4 ();
0x000a3600 mov r2, r0 | r2 = r0;
0x000a3602 mov r3, r1 | r3 = r1;
0x000a3604 b.w 0xa2c66 | goto label_90;
| label_239:
0x000a3608 mov r8, r5 | r8 = r5;
0x000a360a ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a360e mov r0, r8 | r0 = r8;
0x000a3610 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a3612 bl 0x5ee7c | fcn_0005ee7c (r0);
0x000a3616 ldr r6, [sp, 0x5c] | r6 = var_5ch;
0x000a3618 b 0xa30ec | goto label_70;
| label_242:
0x000a361a mov r3, r8 | r3 = r8;
0x000a361c str r5, [sp, 0x4c] | var_4ch = r5;
0x000a361e b 0xa3476 | goto label_79;
| label_247:
0x000a3620 ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
0x000a3622 movs r1, 0xc | r1 = 0xc;
0x000a3624 mov r0, r4 | r0 = r4;
0x000a3626 bl 0x15fa4 | r0 = fcn_00015fa4 (r0, r1);
0x000a362a mov r6, r0 | r6 = r0;
0x000a362c cmp r0, 0 |
| if (r0 != 0) {
0x000a362e bne.w 0xa30fc | goto label_91;
| }
0x000a3632 b 0xa3598 | goto label_93;
| label_232:
0x000a3634 mov r8, r5 | r8 = r5;
0x000a3636 ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a363a mov r0, r8 | r0 = r8;
0x000a363c ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a363e movs r6, 1 | r6 = 1;
0x000a3640 bl 0x5ee7c | fcn_0005ee7c (r0);
0x000a3644 b 0xa30ec | goto label_70;
| label_230:
0x000a3646 ldr.w fp, [sp, 0x18] | fp = var_18h;
0x000a364a movs r3, 0xa | r3 = 0xa;
0x000a364c b 0xa2e50 | goto label_69;
| label_237:
0x000a364e mov r8, r0 | r8 = r0;
0x000a3650 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a3652 ldr.w sb, [sp, 0x20] | sb = var_20h_2;
0x000a3656 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a3658 blx 0x8404 | fcn_00008404 ();
0x000a365c ldr r3, [sp, 0x90] | r3 = var_90h;
0x000a365e str r3, [sp, 0x18] | var_18h = r3;
0x000a3660 b 0xa34a0 | goto label_94;
| label_238:
0x000a3662 ldr r6, [r5] | r6 = *(r5);
0x000a3664 b 0xa2e8e | goto label_95;
| label_248:
0x000a3666 ldr r2, [sp, 0xa0] | r2 = var_a0h;
0x000a3668 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000a366c mov r1, sl | r1 = sl;
0x000a366e adds r0, r3, r2 | r0 = r3 + r2;
0x000a3670 lsls r0, r0, 3 | r0 <<= 3;
0x000a3672 blx 0x8240 | r0 = fcn_00008240 ();
0x000a3676 mov sb, r0 | sb = r0;
0x000a3678 cmp r0, 0 |
| if (r0 == 0) {
0x000a367a beq 0xa3718 | goto label_249;
| }
0x000a367c ldr r4, [sp, 0x9c] | r4 = var_9ch;
0x000a367e add r3, sp, 0xa8 | r3 += x;
0x000a3680 str r3, [sp] | *(sp) = r3;
0x000a3682 mov r1, sl | r1 = sl;
0x000a3684 add r3, sp, 0xa4 | r3 += var_a4h;
0x000a3686 str r6, [sp, 4] | var_0h_2 = r6;
0x000a3688 str r0, [sp, 0xa4] | var_a4h = r0;
0x000a368a add.w r4, r4, r4, lsl 1 | r4 += (r4 << 1);
0x000a368e ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x000a3690 add.w r4, r0, r4, lsl 3 | r4 = r0 + (r4 << 3);
0x000a3694 mov r0, r5 | r0 = r5;
0x000a3696 str r4, [sp, 0xa8] | x = r4;
0x000a3698 bl 0xa29d0 | fcn_000a29d0 (r0, r1);
0x000a369c ldr r2, [sp, 0xa8] | r2 = x;
0x000a369e ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x000a36a0 ldr r1, [sp, 0x98] | r1 = var_98h;
0x000a36a2 subs r2, r2, r4 | r2 -= r4;
0x000a36a4 asrs r2, r2, 2 | r2 >>= 2;
0x000a36a6 sub.w r3, r3, sb | r3 -= sb;
0x000a36aa asrs r3, r3, 3 | r3 >>= 3;
0x000a36ac str r2, [sp, 0xa0] | var_a0h = r2;
0x000a36ae movw r2, 0xaaab |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x000a36b2 movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x000a36b6 mul r3, r2, r3 | r3 = r2 * r3;
0x000a36ba str r3, [sp, 0x9c] | var_9ch = r3;
| if (r1 == 0) {
0x000a36bc cbz r1, 0xa3722 | goto label_250;
| }
| label_100:
0x000a36be mov r0, sb | r0 = sb;
0x000a36c0 blx 0x8404 | fcn_00008404 ();
0x000a36c4 b 0xa35ca | goto label_96;
| label_211:
0x000a36c6 ldr r3, [sp, 0x80] | r3 = var_80h;
0x000a36c8 cmp r3, 0 |
| if (r3 != 0) {
0x000a36ca bne.w 0xa324a | goto label_97;
| }
0x000a36ce ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a36d0 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x000a36d2 ldr r3, [sp, 0xc8] | r3 = var_c8h;
0x000a36d4 cmp r3, 0 |
| if (r3 == 0) {
0x000a36d6 beq.w 0xa3596 | goto label_98;
| }
0x000a36da b 0xa2f1c | goto label_99;
| label_229:
0x000a36dc mov ip, sb |
0x000a36de add r7, ip | r7 += ip;
0x000a36e0 b.w 0xa2e50 | goto label_69;
| label_249:
0x000a3718 movs r3, 7 | r3 = 7;
0x000a371a str r3, [sp, 0x98] | var_98h = r3;
0x000a371c b 0xa35ca | goto label_96;
| label_187:
0x000a371e blx 0x883c | fcn_0000883c ();
| label_250:
0x000a3722 mov r2, sb | r2 = sb;
0x000a3724 mov r0, r5 | r0 = r5;
0x000a3726 bl 0x9ff10 | r0 = fcn_0009ff10 (r0, r1, r2, r3);
0x000a372a mov sl, r0 | sl = r0;
0x000a372c str r0, [sp, 0x98] | var_98h = r0;
0x000a372e cmp r0, 0 |
| if (r0 != 0) {
0x000a3730 bne 0xa36be | goto label_100;
| }
0x000a3732 subs r4, 4 | r4 -= 4;
0x000a3734 b 0xa374e | goto label_251;
| label_101:
0x000a3736 ldr r3, [sp, 0x9c] | r3 = var_9ch;
0x000a3738 mov r2, sb | r2 = sb;
0x000a373a ldr r1, [r4, 4]! | r1 = *((r4 += 4));
0x000a373e mov r0, r5 | r0 = r5;
0x000a3740 bl 0x9ff10 | fcn_0009ff10 (r0, r1, r2, r3);
0x000a3744 add.w sl, sl, 1 | sl++;
0x000a3748 str r0, [sp, 0x98] | var_98h = r0;
0x000a374a cmp r0, 0 |
| if (r0 != 0) {
0x000a374c bne 0xa36be | goto label_100;
| }
| label_251:
0x000a374e ldr r3, [sp, 0xa0] | r3 = var_a0h;
0x000a3750 cmp sl, r3 |
| if (sl < r3) {
0x000a3752 blt 0xa3736 | goto label_101;
| }
0x000a3754 b 0xa36be | goto label_100;
| do {
0x000aef72 ldr r2, [pc, 0x260] |
0x000aef74 ldr r3, [pc, 0x258] | r3 = *(0xaf1d0);
0x000aef76 add r2, pc | r2 = 0x15e150;
0x000aef78 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000aef7a ldr r2, [r3] | r2 = imp.sinh;
0x000aef7c ldr r3, [sp, 0x15c] | r3 = *(arg_15ch);
0x000aef7e eors r2, r3 | r2 ^= r3;
0x000aef80 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000aef84 bne.w 0xaf1c8 | goto label_252;
| }
0x000aef88 add sp, 0x164 |
0x000aef8a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_103:
0x000aefb6 ldr r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x000aefb8 movs r3, 1 |
0x000aefba movt r3, 0x1000 | r3 = 0x10000001;
0x000aefbe ands r3, r2 | r3 &= r2;
0x000aefc0 cmp r3, 1 |
0x000aefc2 it eq |
| if (r3 == 1) {
0x000aefc4 cmpeq fp, 1 | __asm ("cmpeq fp, 1");
| }
| if (r3 == 1) {
0x000aefc8 beq.w 0xaf14e | goto label_253;
| }
0x000aefcc mov r1, fp | r1 = fp;
0x000aefce mov r0, r7 | r0 = r7;
0x000aefd0 blx 0x86c0 | fcn_000086c0 ();
| label_102:
0x000aefd4 mov r0, sb | r0 = sb;
0x000aefd6 bl 0x5e450 | fcn_0005e450 (r0);
0x000aefda ldrb.w r3, [r4, 0x5f] | r3 = *((r4 + 0x5f));
0x000aefde str.w r8, [r4, 0x168] | __asm ("str.w r8, aav.0x000000ff");
0x000aefe2 cmp r3, 0 |
0x000aefe4 bne 0xaef72 |
| } while (r3 != 0);
0x000aefe6 ldr r2, [pc, 0x1f0] |
0x000aefe8 ldr r3, [pc, 0x1e4] | r3 = *(0xaf1d0);
0x000aefea add r2, pc | r2 = 0x15e1c8;
0x000aefec ldr r3, [r2, r3] | r3 = imp.sinh;
0x000aefee ldr r2, [r3] | r2 = imp.sinh;
0x000aeff0 ldr r3, [sp, 0x15c] | r3 = *(arg_15ch);
0x000aeff2 eors r2, r3 | r2 ^= r3;
0x000aeff4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000aeff8 bne.w 0xaf1c8 | goto label_252;
| }
0x000aeffc mov r0, r4 | r0 = r4;
0x000aeffe add sp, 0x164 |
0x000af000 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000af004 b.w 0x161d8 | void (*0x161d8)() ();
| do {
0x000af094 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x000af096 add r2, sb | r2 += sb;
0x000af098 ldrh r0, [r2, 8] | r0 = *((r2 + 8));
| if (r0 != 0) {
0x000af09a cbz r0, 0xaf0bc |
0x000af09c ldrb.w r2, [r1, 0x2b] | r2 = *((r1 + 0x2b));
| if (r2 != 0) {
0x000af0a0 cbnz r2, 0xaf0bc | goto label_254;
| }
0x000af0a2 ldr r2, [r1, 0x34] | r2 = *((r1 + 0x34));
| if (r2 == 0) {
0x000af0a4 cbz r2, 0xaf0bc | goto label_254;
| }
0x000af0a6 ldr r1, [r2] | r1 = *(r2);
0x000af0a8 cmp r1, r0 |
| if (r1 < r0) {
0x000af0aa blt 0xaf0bc | goto label_254;
| }
0x000af0ac add.w r2, r2, r0, lsl 4 | r2 += (r0 << 4);
0x000af0b0 ldr r1, [r2, -0x8] | r1 = *((r2 - 0x8));
| if (r1 == 0) {
0x000af0b4 cbz r1, 0xaf0bc | goto label_254;
| }
0x000af0b6 mov r0, sl | r0 = sl;
0x000af0b8 bl 0x30f3c | fcn_00030f3c (r0, r1);
| }
| label_254:
0x000af0bc ldr.w r1, [r4, 0xec] | r1 = *((r4 + 0xec));
0x000af0c0 add.w fp, fp, 1 |
0x000af0c4 add.w sb, sb, 0xc | sb += 0xc;
0x000af0c8 ldrsh.w r2, [r1, 0x22] | r2 = *((r1 + 0x22));
0x000af0cc cmp r2, fp |
0x000af0ce bgt 0xaf094 |
| } while (r2 > fp);
0x000af0d0 mov sb, r4 | sb = r4;
0x000af0d2 ldr r4, [sp, 0x10] | r4 = var_10h_3;
0x000af0d4 mov r2, r6 | r2 = r6;
0x000af0d6 ldr r6, [sp, 0xc] | r6 = var_ch_2;
0x000af0d8 movs r3, 0 | r3 = 0;
0x000af0da mov r0, r7 | r0 = r7;
0x000af0dc str r3, [sp] | *(sp) = r3;
0x000af0de mov r1, r6 | r1 = r6;
0x000af0e0 bl 0x2a3d4 | fcn_0002a3d4 (r0, r1, r2, r3, r4);
0x000af0e4 ldr r6, [r6] | r6 = *(r6);
0x000af0e6 mov fp, r0 |
| if (r6 == 0) {
0x000af0e8 cbz r6, 0xaf0f8 | goto label_255;
| }
| do {
0x000af0ea mov r1, r6 | r1 = r6;
0x000af0ec ldr r6, [r6, 0xc] | r6 = *((r6 + 0xc));
0x000af0ee mov r0, r4 | r0 = r4;
0x000af0f0 bl 0x16808 | fcn_00016808 (r0, r1);
0x000af0f4 cmp r6, 0 |
0x000af0f6 bne 0xaf0ea |
| } while (r6 != 0);
| label_255:
0x000af0f8 cmp.w fp, 0 |
| if (fp == 0) {
0x000af0fc beq.w 0xaefd4 | goto label_102;
| }
0x000af100 b 0xaefb6 | goto label_103;
| label_253:
0x000af14e ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x000af150 mov r0, r7 | r0 = r7;
0x000af152 blx 0x8344 | fcn_00008344 ();
0x000af156 b 0xaefd4 | goto label_102;
| label_252:
0x000af1c8 blx 0x883c | fcn_0000883c ();
0x000af1cc ldr r5, [sp, 0x1b8] | r5 = *(arg_1b8h);
0x000af1ce movs r1, r0 | r1 = r0;
0x000af1d0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000af1d2 movs r0, r0 |
0x000af1d4 ldr r5, [sp, 0x88] | r5 = var_88h_2;
0x000af1d6 movs r1, r0 | r1 = r0;
0x000af1d8 ldr r4, [sp, 0x2b8] | r4 = *(arg_2b8h);
0x000af1da movs r1, r0 | r1 = r0;
0x000af1dc ldrd pc, pc, [r7, 0x3d8] | __asm ("ldrd pc, pc, [r7, 0x3d8]");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa4d54 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000a4d54 () | void fcn_000a4d54 (int16_t arg_0h, int16_t arg_1h, int16_t arg_4h, int16_t arg_8h, int16_t arg_ch, int16_t arg_10h, int16_t arg_34h, int16_t arg_38h, int16_t arg_68h, int16_t arg_6ch, int16_t arg_f8h, arithmetic arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_18h;
| arithmetic x;
| arithmetic var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int32_t var_70h_2;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_84h;
| int16_t var_88h;
| int16_t var_8ch;
| arithmetic var_90h;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_a4h;
| int16_t var_a8h;
| int32_t var_ach;
| int32_t var_ach_2;
| int16_t var_b4h;
| int16_t var_b8h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000a4d54 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x000a4d58 mov r4, r2 | r4 = r2;
0x000a4d5a ldr.w r2, [pc, 0x994] | r2 = *(0x000a56f0);
0x000a4d5e mov r7, r3 | r7 = r3;
0x000a4d60 mov r5, r1 | r5 = r1;
0x000a4d62 ldr.w r3, [pc, 0x990] |
0x000a4d66 vpush {d8, d9, d10} | __asm ("vpush {d8, d9, d10}");
0x000a4d6a add r2, pc | r2 += pc;
0x000a4d6c sub sp, 0xbc |
0x000a4d6e ldr.w r8, [pc, 0x988] | r8 = *(0x000a56f8);
0x000a4d72 str r0, [sp, 0x24] | var_24h = r0;
0x000a4d74 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a4d76 ldr.w sl, [r0, 8] | sl = *((r0 + 8));
0x000a4d7a add r8, pc | r8 += pc;
0x000a4d7c ldr r2, [r0] | r2 = *(r0);
0x000a4d7e ldr r3, [r3] | r3 = *(0xa56f6);
0x000a4d80 str r3, [sp, 0xb4] | var_b4h = r3;
0x000a4d82 mov.w r3, 0 | r3 = 0;
0x000a4d86 str r2, [sp, 0x20] | x = r2;
0x000a4d88 cmp.w sl, 0 |
| if (sl == 0) {
0x000a4d8c beq.w 0xa4e9a | goto label_150;
| }
| label_1:
0x000a4d90 movs r3, 1 | r3 = 1;
0x000a4d92 movs r2, 0 | r2 = 0;
0x000a4d94 movs r1, 0xa6 | r1 = 0xa6;
0x000a4d96 str r2, [sp] | *(sp) = r2;
0x000a4d98 mov r0, sl | r0 = sl;
0x000a4d9a mov r2, r3 | r2 = r3;
0x000a4d9c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a4da0 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a4da2 movs r3, 2 | r3 = 2;
0x000a4da4 mov r1, r5 | r1 = r5;
0x000a4da6 mov r2, r4 | r2 = r4;
0x000a4da8 str r3, [r0, 0x2c] | *((r0 + 0x2c)) = r3;
0x000a4daa add r3, sp, 0x80 | r3 += var_80h;
0x000a4dac bl 0x241a8 | r0 = fcn_000241a8 (r0, r1, r2, r3);
0x000a4db0 subs r3, r0, 0 | r3 = r0 - 0;
0x000a4db2 str r3, [sp, 0x30] | var_30h = r3;
| if (r3 < r0) {
0x000a4db4 blt 0xa4e6a | goto label_0;
| }
0x000a4db6 ldr r2, [sp, 0x20] | r2 = x;
0x000a4db8 cmp r3, 1 |
0x000a4dba ldr r5, [r2, 0x10] | r5 = *((r2 + 0x10));
0x000a4dbc beq 0xa4e8e |
| while (r0 == 0) {
0x000a4dbe ldr r1, [sp, 0x80] | r1 = var_80h;
0x000a4dc0 ldr r0, [sp, 0x20] | r0 = x;
0x000a4dc2 bl 0x22a34 | fcn_00022a34 (r0, r1);
0x000a4dc6 str r0, [sp, 0x2c] | var_2ch = r0;
0x000a4dc8 cmp r0, 0 |
| if (r0 != 0) {
0x000a4dca beq 0xa4e6a |
0x000a4dcc ldr r3, [sp, 0xf8] | r3 = *(arg_f8h);
0x000a4dce cmp r3, 0 |
| if (r3 == 0) {
0x000a4dd0 beq 0xa4eb2 | goto label_151;
| }
0x000a4dd2 ldr.w r1, [pc, 0x928] | r1 = *(0x000a56fc);
0x000a4dd6 mov r2, r7 | r2 = r7;
0x000a4dd8 ldr r0, [sp, 0x20] | r0 = x;
0x000a4dda add r1, pc | r1 += pc;
0x000a4ddc bl 0x24ec8 | fcn_00024ec8 (r0);
0x000a4de0 str r0, [sp, 0x28] | var_28h = r0;
| label_3:
0x000a4de2 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a4de4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a4de6 lsl.w sb, r2, 4 | sb = r2 << 4;
0x000a4dea add.w r6, r5, sb | r6 = r5 + sb;
0x000a4dee cmp r3, 0 |
| if (r3 == 0) {
0x000a4df0 beq 0xa4eae | goto label_152;
| }
0x000a4df2 ldr.w r3, [r5, sb] | r3 = *((r5 + sb));
0x000a4df6 str r3, [sp, 0x34] | var_34h = r3;
| label_2:
0x000a4df8 ldr r7, [sp, 0x34] | r7 = var_34h;
0x000a4dfa movs r1, 0x13 | r1 = 0x13;
0x000a4dfc ldrd r3, fp, [sp, 0x28] | __asm ("ldrd r3, fp, [var_2ch]");
0x000a4e00 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a4e02 str r7, [sp] | *(sp) = r7;
0x000a4e04 mov r2, fp | r2 = fp;
0x000a4e06 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000a4e0a mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x000a4e0c cbnz r0, 0xa4e56 |
0x000a4e0e ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a4e10 mov r1, r7 | r1 = r7;
0x000a4e12 ldr r0, [sp, 0x20] | r0 = x;
0x000a4e14 movs r2, 0xe | r2 = 0xe;
0x000a4e16 str r5, [sp, 0xa4] | var_a4h = r5;
0x000a4e18 strd r3, r5, [sp, 0xac] | __asm ("strd r3, r5, [var_ach]");
0x000a4e1c add r3, sp, 0xa4 | r3 += var_a4h;
0x000a4e1e str.w r5, [r0, 0x1c4] | __asm ("str.w r5, aav.0x000000ff");
0x000a4e22 str.w fp, [sp, 0xa8] | __asm ("str.w fp, [var_a8h]");
0x000a4e26 blx 0x89f8 | r0 = fcn_000089f8 ();
0x000a4e2a mov r7, r0 | r7 = r0;
0x000a4e2c cmp r0, 0 |
| if (r0 == 0) {
0x000a4e2e beq.w 0xa4f66 | goto label_153;
| }
0x000a4e32 cmp r0, 0xc |
| if (r0 == 0xc) {
0x000a4e34 beq 0xa4ecc | goto label_154;
| }
0x000a4e36 ldr r2, [sp, 0xa4] | r2 = var_a4h;
| if (r2 != 0) {
0x000a4e38 cbz r2, 0xa4e4c |
0x000a4e3a ldr.w r1, [pc, 0x8c4] |
0x000a4e3e ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a4e40 add r1, pc | r1 = 0x14a546;
0x000a4e42 bl 0x21598 | fcn_00021598 (r0, r1);
0x000a4e46 ldr r0, [sp, 0xa4] | r0 = var_a4h;
0x000a4e48 blx 0x8404 | fcn_00008404 ();
| }
0x000a4e4c ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a4e4e ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x000a4e50 str r7, [r2, 0xc] | *((r2 + 0xc)) = r7;
0x000a4e52 adds r3, 1 | r3++;
0x000a4e54 str r3, [r2, 0x24] | *((r2 + 0x24)) = r3;
| }
| label_5:
0x000a4e56 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a4e58 ldr r0, [sp, 0x20] | r0 = x;
0x000a4e5a bl 0x16808 | fcn_00016808 (r0, r1);
0x000a4e5e ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r3 == 0) {
0x000a4e60 cbz r3, 0xa4e6a | goto label_0;
| }
| label_16:
0x000a4e62 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000a4e64 ldr r0, [sp, 0x20] | r0 = x;
0x000a4e66 bl 0x16808 | fcn_00016808 (r0, r1);
| }
| label_0:
0x000a4e6a ldr.w r2, [pc, 0x898] | r2 = *(0x000a5704);
0x000a4e6e ldr.w r3, [pc, 0x884] | r3 = *(0xa56f6);
0x000a4e72 add r2, pc | r2 += pc;
0x000a4e74 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a4e76 ldr r2, [r3] | r2 = *(0xa56f6);
0x000a4e78 ldr r3, [sp, 0xb4] | r3 = var_b4h;
0x000a4e7a eors r2, r3 | r2 ^= r3;
0x000a4e7c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a4e80 bne.w 0xa77d2 | goto label_155;
| }
0x000a4e84 add sp, 0xbc |
0x000a4e86 vpop {d8, d9, d10} | __asm ("vpop {d8, d9, d10}");
0x000a4e8a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000a4e8e ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a4e90 bl 0x570d0 | r0 = fcn_000570d0 (r0);
0x000a4e94 cmp r0, 0 |
0x000a4e96 beq 0xa4dbe |
| }
0x000a4e98 b 0xa4e6a | goto label_0;
| label_150:
0x000a4e9a ldr r3, [r0, 0x74] | r3 = *((r0 + 0x74));
| if (r3 == 0) {
0x000a4e9c cbz r3, 0xa4ebe | goto label_156;
| }
| label_4:
0x000a4e9e ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a4ea0 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000a4ea4 mov sl, r0 | sl = r0;
0x000a4ea6 cmp r0, 0 |
| if (r0 != 0) {
0x000a4ea8 bne.w 0xa4d90 | goto label_1;
| }
0x000a4eac b 0xa4e6a | goto label_0;
| label_152:
0x000a4eae str r3, [sp, 0x34] | var_34h = r3;
0x000a4eb0 b 0xa4df8 | goto label_2;
| label_151:
0x000a4eb2 ldr r0, [sp, 0x20] | r0 = x;
0x000a4eb4 mov r1, r7 | r1 = r7;
0x000a4eb6 bl 0x22a34 | fcn_00022a34 (r0, r1);
0x000a4eba str r0, [sp, 0x28] | var_28h = r0;
0x000a4ebc b 0xa4de2 | goto label_3;
| label_156:
0x000a4ebe ldr r3, [r2, 0x50] | r3 = *((r2 + 0x50));
0x000a4ec0 lsls r6, r3, 0x1c | r6 = r3 << 0x1c;
0x000a4ec2 ittt pl |
| if (r6 < r3) {
0x000a4ec4 movpl r3, 1 | r3 = 1;
| }
| if (r6 < r3) {
0x000a4ec6 movpl r2, r0 | r2 = r0;
| }
| if (r6 < r3) {
0x000a4ec8 strbpl r3, [r2, 0x17] | *((r2 + 0x17)) = r3;
| }
0x000a4eca b 0xa4e9e | goto label_4;
| label_154:
0x000a4ecc ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000a4ece bl 0x1b96c | fcn_0001b96c (r0);
0x000a4ed2 str r0, [sp, 0x38] | var_38h = r0;
0x000a4ed4 cmp r0, 0 |
| if (r0 == 0) {
0x000a4ed6 beq 0xa4e56 | goto label_5;
| }
0x000a4ed8 ldrb r3, [r0, 5] | r3 = *((r0 + 5));
0x000a4eda lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 >= r3) {
0x000a4edc bmi 0xa4fa8 |
| label_6:
0x000a4ede lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
| if (r2 >= r3) {
0x000a4ee0 bmi 0xa4f02 |
0x000a4ee2 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a4ee4 eor r3, r3, 4 | r3 ^= 4;
0x000a4ee8 ubfx r3, r3, 2, 1 | r3 = (r3 >> 2) & ((1 << 1) - 1);
0x000a4eec cmp r2, 0 |
0x000a4eee it eq |
| if (r2 != 0) {
0x000a4ef0 orreq r3, r3, 1 | r3 |= 1;
| }
0x000a4ef4 cmp r3, 0 |
| if (r3 == 0) {
0x000a4ef6 beq.w 0xa63ac | goto label_157;
| }
0x000a4efa ldr r1, [sp, 0x38] | r1 = var_38h;
0x000a4efc mov r0, sl | r0 = sl;
0x000a4efe bl 0x2c8d8 | fcn_0002c8d8 (r0, r1);
| }
0x000a4f02 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a4f04 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x000a4f06 subs r3, 1 | r3--;
0x000a4f08 cmp r3, 0x2a |
| if (r3 > 0x2a) {
0x000a4f0a bhi 0xa4fba | goto label_158;
| }
| /* switch table (44 cases) at 0xa4f10 */
0x000a4f0c tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
| label_153:
0x000a4f66 movs r1, 1 | r1 = 1;
0x000a4f68 mov r0, sl | r0 = sl;
0x000a4f6a bl 0x218b0 | fcn_000218b0 (r0, r1);
0x000a4f6e ldr.w r3, [sl] | r3 = *(sl);
0x000a4f72 ldr r1, [sp, 0xa4] | r1 = var_a4h;
0x000a4f74 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000a4f78 cbnz r3, 0xa4f96 |
0x000a4f7a movs r3, 1 | r3 = 1;
0x000a4f7c mov.w r4, -1 | r4 = -1;
0x000a4f80 ldr.w r0, [sl, 0x74] | r0 = *((sl + 0x74));
0x000a4f84 mov.w r2, -1 | r2 = -1;
0x000a4f88 strd r3, r4, [sp] | __asm ("strd r3, r4, [sp]");
0x000a4f8c mov.w r3, -1 | r3 = -1;
0x000a4f90 bl 0x29280 | fcn_00029280 (r0, r1, r2, r3, r4, r5, r6);
0x000a4f94 ldr r1, [sp, 0xa4] | r1 = var_a4h;
| }
| if (r1 != 0) {
0x000a4f96 cbz r1, 0xa4fa0 |
0x000a4f98 mov r0, sl | r0 = sl;
0x000a4f9a bl 0x2f31c | fcn_0002f31c (r0, r1, r2);
0x000a4f9e ldr r1, [sp, 0xa4] | r1 = var_a4h;
| }
0x000a4fa0 mov r0, r1 | r0 = r1;
0x000a4fa2 blx 0x8404 | fcn_00008404 ();
0x000a4fa6 b 0xa4e56 | goto label_5;
| }
0x000a4fa8 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a4faa bl 0x89f38 | r0 = fcn_00089f38 (r0);
0x000a4fae cmp r0, 0 |
| if (r0 != 0) {
0x000a4fb0 bne.w 0xa4e56 | goto label_5;
| }
0x000a4fb4 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a4fb6 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x000a4fb8 b 0xa4ede | goto label_6;
| label_158:
0x000a4fba ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a4fbc cmp r3, 0 |
| if (r3 != 0) {
0x000a4fbe bne.w 0xa646c | goto label_159;
| }
| label_44:
0x000a4fc2 ldr r3, [sp, 0x20] | r3 = x;
0x000a4fc4 ldr.w r3, [r3, 0x1f0] | r3 = *((r3 + 0x1f0));
| label_30:
0x000a4fc8 mov r2, r3 | r2 = r3;
0x000a4fca str r3, [sp, 0x24] | var_24h = r3;
0x000a4fcc mov r0, sl | r0 = sl;
0x000a4fce asrs r3, r3, 0x1f | r3 >>= 0x1f;
0x000a4fd0 bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a4fd4 b 0xa4e56 | goto label_5;
0x000a4fd6 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a4fd8 movs r3, 6 | r3 = 6;
0x000a4fda ldr r1, [sp, 0x34] | r1 = var_34h;
0x000a4fdc str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a4fde mov r0, r2 | r0 = r2;
0x000a4fe0 bl 0x57304 | fcn_00057304 (r0, r1);
0x000a4fe4 ldr r2, [sp, 0x20] | r2 = x;
0x000a4fe6 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x000a4fe8 cmp r3, 0 |
| if (r3 <= 0) {
0x000a4fea ble.w 0xa4e56 | goto label_5;
| }
0x000a4fee ldr.w r3, [pc, 0x718] | r3 = *(0x000a5708);
0x000a4ff2 ldr.w r8, [pc, 0x718] |
0x000a4ff6 ldr.w fp, [pc, 0x718] | fp = *(0x000a5710);
0x000a4ffa add r3, pc | r3 += pc;
0x000a4ffc str.w sl, [sp, 0x3c] | __asm ("str.w sl, [var_3ch]");
0x000a5000 str r3, [sp, 0x38] | var_38h = r3;
0x000a5002 mov sl, r5 | sl = r5;
0x000a5004 ldr.w r3, [pc, 0x70c] | r3 = *(0x000a5714);
0x000a5008 add r8, pc | r8 = 0x14a71a;
0x000a500a add fp, pc |
0x000a500c mov r5, r2 | r5 = r2;
0x000a500e add r3, pc | r3 += pc;
0x000a5010 str r3, [sp, 0x40] | var_40h = r3;
0x000a5012 b 0xa5020 | goto label_160;
| label_7:
0x000a5014 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000a5016 add.w sl, sl, 1 | sl++;
0x000a501a cmp r3, sl |
| if (r3 <= sl) {
0x000a501c ble.w 0xa4e56 | goto label_5;
| }
| label_160:
0x000a5020 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a5022 lsl.w sb, sl, 4 | sb = sl << 4;
0x000a5026 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| if (r2 == 0) {
0x000a5028 cbz r2, 0xa503a | goto label_161;
| }
0x000a502a ldr.w r1, [r3, sb] | r1 = *((r3 + sb));
0x000a502e ldr r0, [sp, 0x34] | r0 = var_34h;
0x000a5030 blx 0x8540 | r0 = fcn_00008540 ();
0x000a5034 cmp r0, 0 |
| if (r0 != 0) {
0x000a5036 bne 0xa5014 | goto label_7;
| }
0x000a5038 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| label_161:
0x000a503a add r3, sb | r3 += sb;
0x000a503c add r2, sp, 0x90 | r2 += var_90h;
0x000a503e ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a5040 str r2, [sp, 0x24] | var_24h = r2;
0x000a5042 ldr r6, [r3, 0xc] | r6 = *((r3 + 0xc));
0x000a5044 adds r3, 8 | r3 += 8;
| label_8:
0x000a5046 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x000a5048 cmp r6, 0 |
| if (r6 == 0) {
0x000a504a beq.w 0xa7bec | goto label_162;
| }
0x000a504e cmp r1, 0 |
| if (r1 == 0) {
0x000a5050 beq 0xa5014 | goto label_7;
| }
0x000a5052 mov r3, r1 | r3 = r1;
0x000a5054 b 0xa505e |
| while (r4 != 0) {
0x000a5056 ldr r3, [r3] | r3 = *(r3);
0x000a5058 cmp r3, 0 |
| if (r3 == 0) {
0x000a505a beq.w 0xa61d0 | goto label_163;
| }
0x000a505e ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000a5060 ldrsh.w r4, [r2, 0x22] | r4 = *((r2 + 0x22));
0x000a5064 cmp r4, 0 |
0x000a5066 bne 0xa5056 |
| }
0x000a5068 ldr r2, [r2] | r2 = *(r2);
0x000a506a mov r0, r5 | r0 = r5;
0x000a506c ldr r1, [sp, 0x38] | r1 = var_38h;
0x000a506e bl 0x24ec8 | r0 = fcn_00024ec8 (r0);
0x000a5072 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x000a5074 cbz r0, 0xa5096 |
0x000a5076 mov r1, r0 | r1 = r0;
0x000a5078 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a507a mov.w r2, -1 | r2 = -1;
0x000a507e mov r0, r5 | r0 = r5;
0x000a5080 str r4, [sp] | *(sp) = r4;
0x000a5082 str r4, [sp, 0x90] | var_90h = r4;
0x000a5084 blx 0x89a0 | utimes ();
0x000a5088 ldr r0, [sp, 0x90] | r0 = var_90h;
0x000a508a blx 0x8580 | fcn_00008580 ();
0x000a508e mov r1, r7 | r1 = r7;
0x000a5090 mov r0, r5 | r0 = r5;
0x000a5092 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000a5096 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
0x000a509a cmp r3, 0 |
| if (r3 != 0) {
0x000a509c bne.w 0xa628e | goto label_164;
| }
| label_40:
0x000a50a0 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000a50a2 subs r6, 1 | r6--;
0x000a50a4 add r3, sb | r3 += sb;
0x000a50a6 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a50a8 adds r3, 8 | r3 += 8;
0x000a50aa b 0xa5046 | goto label_8;
0x000a50ac ldr r1, [sp, 0x30] | r1 = var_30h;
0x000a50ae movs r2, 1 | r2 = 1;
0x000a50b0 ldr.w r3, [sl, 0x98] | r3 = *((sl + 0x98));
0x000a50b4 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000a50b6 cmp r1, 1 |
0x000a50b8 lsl.w r2, r2, r1 | r2 <<= r1;
0x000a50bc ldr r4, [r0, 8] | r4 = *((r0 + 8));
0x000a50be orr.w r3, r3, r2 | r3 |= r2;
0x000a50c2 str.w r3, [sl, 0x98] | __asm ("str.w r3, [sl, 0x98]");
| if (r1 != 1) {
0x000a50c6 beq 0xa50e0 |
0x000a50c8 ldr.w r3, [sl] | r3 = *(sl);
0x000a50cc ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a50ce add r3, sb | r3 += sb;
0x000a50d0 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a50d2 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x000a50d4 cbz r3, 0xa50e0 | goto label_165;
| }
0x000a50d6 ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x000a50da orrs r3, r2 | r3 |= r2;
0x000a50dc str.w r3, [sl, 0x9c] | __asm ("str.w r3, [sl, 0x9c]");
| }
| label_165:
0x000a50e0 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a50e2 cmp r3, 0 |
| if (r3 == 0) {
0x000a50e4 beq.w 0xa7aaa | goto label_166;
| }
0x000a50e8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a50ea ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x000a50ec ands r6, r3, 8 | r6 = r3 & 8;
| if (r6 == r3) {
0x000a50f0 beq.w 0xa78c0 | goto label_167;
| }
0x000a50f4 ldr.w r2, [pc, 0x620] |
0x000a50f8 movs r1, 3 | r1 = 3;
0x000a50fa mov r0, sl | r0 = sl;
0x000a50fc add r2, pc |
0x000a50fe add.w r2, r2, 0xce0 | r2 = 0x14b4f8;
0x000a5102 bl 0x2db78 | fcn_0002db78 (r0, r1, r2);
0x000a5106 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a5108 str r4, [r0, 0x20] | *((r0 + 0x20)) = r4;
0x000a510a str r2, [r0, 4] | *((r0 + 4)) = r2;
0x000a510c str r2, [r0, 0x18] | *((r0 + 0x18)) = r2;
0x000a510e ldrd r4, r0, [sl, 0x68] | __asm ("ldrd r4, r0, [sl, 0x68]");
0x000a5112 cmp r0, 1 |
| if (r0 <= 1) {
0x000a5114 ble.w 0xa56ca | goto label_22;
| }
| label_135:
0x000a5118 mov r3, r4 | r3 = r4;
0x000a511a movs r2, 1 | r2 = 1;
0x000a511c b 0xa5128 | goto label_168;
| label_9:
0x000a511e adds r2, 1 | r2++;
0x000a5120 adds r3, 0x14 | r3 += 0x14;
0x000a5122 cmp r0, r2 |
| if (r0 <= r2) {
0x000a5124 ble.w 0xa4e56 | goto label_5;
| }
| label_168:
0x000a5128 ldrb r1, [r3, 0x14] | r1 = *((r3 + 0x14));
0x000a512a cmp r1, 0xa6 |
| if (r1 != 0xa6) {
0x000a512c bne 0xa511e | goto label_9;
| }
| label_14:
0x000a512e movs r3, 0xb8 | r3 = 0xb8;
0x000a5130 strb r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
0x000a5132 b 0xa4e56 | goto label_5;
0x000a5134 ldr.w r5, [pc, 0x5e4] | r5 = *(0x000a571c);
0x000a5138 movs r4, 0 | r4 = 0;
0x000a513a ldr.w r6, [pc, 0x5e4] |
0x000a513e add r5, pc | r5 += pc;
0x000a5140 add.w r5, r5, 0x2a8 | r5 += 0x2a8;
0x000a5144 add r6, pc | r6 = 0x14a86a;
| do {
0x000a5146 ldr.w r3, [r5, r4, lsl 2] | offset_0 = r4 << 2;
| r3 = *((r5 + offset_0));
0x000a514a mov r2, r6 | r2 = r6;
0x000a514c adds r4, 4 | r4 += 4;
0x000a514e movs r1, 1 | r1 = 1;
0x000a5150 mov r0, sl | r0 = sl;
0x000a5152 bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a5156 cmp.w r4, 0x108 |
0x000a515a bne 0xa5146 |
| } while (r4 != 0x108);
0x000a515c b 0xa4e56 | goto label_5;
0x000a515e ldr r3, [sp, 0x20] | r3 = x;
0x000a5160 ldr.w r7, [pc, 0x5c0] | r7 = *(0x000a5724);
0x000a5164 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a5166 ldr r5, [r3, 0x18] | r5 = *((r3 + 0x18));
0x000a5168 movs r3, 6 | r3 = 6;
0x000a516a add r7, pc | r7 += pc;
0x000a516c add.w r6, r7, 0x104 | r6 = r7 + 0x104;
0x000a5170 add.w r7, r7, 0x160 | r7 += 0x160;
0x000a5174 ubfx r5, r5, 5, 1 | r5 = (r5 >> 5) & ((1 << 1) - 1);
0x000a5178 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
| label_10:
0x000a517a ldr r4, [r6, 4]! | r4 = *((r6 += 4));
| if (r4 == 0) {
0x000a517e cbz r4, 0xa5192 | goto label_169;
| }
| do {
0x000a5180 mov r1, r4 | r1 = r4;
0x000a5182 mov r3, r5 | r3 = r5;
0x000a5184 movs r2, 1 | r2 = 1;
0x000a5186 mov r0, sl | r0 = sl;
0x000a5188 bl 0x2e398 | fcn_0002e398 (r0, r1, r2, r3);
0x000a518c ldr r4, [r4, 0x24] | r4 = *((r4 + 0x24));
0x000a518e cmp r4, 0 |
0x000a5190 bne 0xa5180 |
| } while (r4 != 0);
| label_169:
0x000a5192 cmp r7, r6 |
| if (r7 != r6) {
0x000a5194 bne 0xa517a | goto label_10;
| }
0x000a5196 ldr r3, [sp, 0x20] | r3 = x;
0x000a5198 ldr.w r4, [r3, 0x1a4] | r4 = *((r3 + 0x1a4));
0x000a519c cmp r4, 0 |
| if (r4 == 0) {
0x000a519e beq.w 0xa4e56 | goto label_5;
| }
| do {
0x000a51a2 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000a51a4 mov r3, r5 | r3 = r5;
0x000a51a6 movs r2, 0 | r2 = 0;
0x000a51a8 mov r0, sl | r0 = sl;
0x000a51aa bl 0x2e398 | fcn_0002e398 (r0, r1, r2, r3);
0x000a51ae ldr r4, [r4] | r4 = *(r4);
0x000a51b0 cmp r4, 0 |
0x000a51b2 bne 0xa51a2 |
| } while (r4 != 0);
0x000a51b4 b 0xa4e56 | goto label_5;
0x000a51b6 ldr r3, [sp, 0x20] | r3 = x;
0x000a51b8 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a51ba ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a51bc ldr.w ip, [r5, 0x2c] | ip = *((r5 + 0x2c));
0x000a51c0 add r3, sb | r3 += sb;
0x000a51c2 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a51c4 add.w fp, ip, 5 |
0x000a51c8 add.w r2, ip, 1 | r2 = ip + 1;
0x000a51cc str r2, [sp, 0x4c] | var_4ch = r2;
0x000a51ce ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a51d0 str.w fp, [r5, 0x2c] | __asm ("str.w fp, [r5, 0x2c]");
0x000a51d4 str r3, [sp, 0x60] | var_60h = r3;
0x000a51d6 cmp r3, 0 |
| if (r3 == 0) {
0x000a51d8 beq.w 0xa4e56 | goto label_5;
| }
0x000a51dc ldr.w r3, [pc, 0x548] |
0x000a51e0 str.w ip, [sp, 0x6c] | __asm ("str.w ip, [var_6ch]");
0x000a51e4 add r3, pc |
0x000a51e6 adds r3, 4 | r3 += 4;
0x000a51e8 str r3, [sp, 0x70] | var_70h = r3;
0x000a51ea ldr.w r3, [pc, 0x540] | r3 = *(0x000a572c);
0x000a51ee add r3, pc | r3 = 0x1efb02;
0x000a51f0 str r3, [sp, 0x58] | var_58h = r3;
0x000a51f2 mov r3, fp | r3 = fp;
0x000a51f4 mov fp, sl |
0x000a51f6 mov sl, r3 | sl = r3;
| label_68:
0x000a51f8 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a51fa cmp r2, 0 |
| if (r2 == 0) {
0x000a51fc beq.w 0xa75ee | goto label_170;
| }
0x000a5200 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a5202 movs r1, 0 | r1 = 0;
0x000a5204 mov r0, r5 | r0 = r5;
0x000a5206 bl 0x8a750 | fcn_0008a750 (r0, r1, r2, r3, r4, r5);
0x000a520a str r0, [sp, 0x24] | var_24h = r0;
0x000a520c cmp r0, 0 |
| if (r0 == 0) {
0x000a520e beq.w 0xa56ca | goto label_22;
| }
0x000a5212 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a5214 ldrb.w r7, [r3, 0x2b] | r7 = *((r3 + 0x2b));
0x000a5218 cmp r7, 0 |
| if (r7 != 0) {
0x000a521a bne.w 0xa56ca | goto label_22;
| }
0x000a521e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a5220 ldr r2, [r3, 0x30] | r2 = *((r3 + 0x30));
0x000a5222 cmp r2, 0 |
| if (r2 == 0) {
0x000a5224 beq.w 0xa56ca | goto label_22;
| }
0x000a5228 str r7, [sp, 0x60] | var_60h = r7;
| label_102:
0x000a522a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a522c ldr r0, [r3, 0x3c] | r0 = *((r3 + 0x3c));
0x000a522e ldr r3, [sp, 0x20] | r3 = x;
0x000a5230 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x000a5232 cmp r0, 0 |
| if (r0 == 0) {
0x000a5234 beq.w 0xa7c14 | goto label_171;
| }
0x000a5238 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000a523a cmp r0, r3 |
| if (r0 == r3) {
0x000a523c beq.w 0xa7754 | goto label_172;
| }
0x000a5240 add.w r3, r2, 0x10 | r3 = r2 + 0x10;
0x000a5244 movs r6, 0 | r6 = 0;
| do {
0x000a5246 mov r2, r3 | r2 = r3;
0x000a5248 adds r6, 1 | r6++;
0x000a524a ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x000a524c adds r3, 0x10 | r3 += 0x10;
0x000a524e cmp r0, r1 |
0x000a5250 bne 0xa5246 |
| } while (r0 != r1);
0x000a5252 lsls r3, r6, 4 | r3 = r6 << 4;
0x000a5254 str r3, [sp, 0x38] | var_38h = r3;
| label_117:
0x000a5256 ldr r0, [r5, 0x74] | r0 = *((r5 + 0x74));
0x000a5258 ldr r3, [r2] | r3 = *(r2);
0x000a525a cmp r0, 0 |
0x000a525c it eq |
| if (r0 != 0) {
0x000a525e moveq r0, r5 | r0 = r5;
| }
0x000a5260 ldr r2, [r0, 0x54] | r2 = *((r0 + 0x54));
0x000a5262 str r3, [sp, 0x34] | var_34h = r3;
0x000a5264 movs r3, 1 | r3 = 1;
0x000a5266 lsls r3, r6 | r3 <<= r6;
0x000a5268 tst r2, r3 |
| if ((r2 & r3) != 0) {
0x000a526a bne.w 0xa7510 | goto label_173;
| }
0x000a526e cmp r6, 1 |
0x000a5270 orr.w r2, r2, r3 | r2 |= r3;
0x000a5274 str r2, [r0, 0x54] | *((r0 + 0x54)) = r2;
| if (r6 == 1) {
0x000a5276 beq.w 0xa775c | goto label_174;
| }
0x000a527a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a527c ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x000a527e ldr r1, [r3] | r1 = *(r3);
| label_92:
0x000a5280 ldr r3, [r5] | r3 = *(r5);
0x000a5282 ldr r0, [sp, 0x38] | r0 = var_38h;
0x000a5284 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a5286 add r3, r0 | r3 += r0;
0x000a5288 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a528a ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 != 0) {
0x000a528c cbz r3, 0xa529a |
0x000a528e str r1, [sp] | *(sp) = r1;
0x000a5290 movs r3, 0 | r3 = 0;
0x000a5292 mov r1, r6 | r1 = r6;
0x000a5294 mov r0, r5 | r0 = r5;
0x000a5296 bl 0x2fbbc | fcn_0002fbbc (r0, r1, r2, r3, r4);
| }
| label_91:
0x000a529a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a529c movs r1, 0 | r1 = 0;
0x000a529e ldr r2, [r5, 0x2c] | r2 = *((r5 + 0x2c));
0x000a52a0 mov r0, r5 | r0 = r5;
0x000a52a2 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000a52a4 mov.w r8, 1 | r8 = 1;
0x000a52a8 ldrsh.w r3, [r3, 0x22] | r3 = *((r3 + 0x22));
0x000a52ac add r3, sl | r3 += sl;
0x000a52ae cmp r3, r2 |
0x000a52b0 mov r2, r6 | r2 = r6;
0x000a52b2 it gt |
| if (r3 <= r2) {
0x000a52b4 strgt r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
| }
0x000a52b6 movs r3, 0x70 | r3 = 0x70;
0x000a52b8 str r3, [sp] | *(sp) = r3;
0x000a52ba mov r3, r4 | r3 = r4;
0x000a52bc bl 0x2fc88 | fcn_0002fc88 (r0, r1, r2, r3, r4);
0x000a52c0 ldr r2, [r4] | r2 = *(r4);
0x000a52c2 mov r0, fp | r0 = fp;
0x000a52c4 ldr r1, [sp, 0x4c] | r1 = var_4ch;
0x000a52c6 bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000a52ca ldr r7, [r4, 0x30] | r7 = *((r4 + 0x30));
0x000a52cc cmp r7, 0 |
| if (r7 == 0) {
0x000a52ce beq.w 0xa6ac2 | goto label_175;
| }
0x000a52d2 add r3, sp, 0x8c | r3 += var_8ch;
0x000a52d4 str.w fp, [sp, 0x3c] | __asm ("str.w fp, [var_3ch]");
0x000a52d8 str.w sl, [sp, 0x40] | __asm ("str.w sl, [var_40h]");
0x000a52dc mov sb, r6 | sb = r6;
0x000a52de ldr.w fp, [sp, 0x20] | fp = x;
0x000a52e2 ldr.w sl, [sp, 0x34] | sl = var_34h;
0x000a52e6 str r3, [sp, 0x30] | var_30h = r3;
0x000a52e8 b 0xa530e | goto label_176;
| label_11:
0x000a52ea ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x000a52ec movs r1, 0x70 | r1 = 0x70;
0x000a52ee ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a52f0 mov r2, r8 | r2 = r8;
0x000a52f2 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000a52f6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a52fa mov r1, r6 | r1 = r6;
0x000a52fc mov r0, r5 | r0 = r5;
0x000a52fe bl 0x2bf78 | fcn_0002bf78 (r0, r1);
| do {
| label_12:
0x000a5302 ldr r7, [r7, 4] | r7 = *((r7 + 4));
0x000a5304 add.w r8, r8, 1 | r8++;
0x000a5308 cmp r7, 0 |
| if (r7 == 0) {
0x000a530a beq.w 0xa6abe | goto label_177;
| }
| label_176:
0x000a530e ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x000a5310 mov r2, sl | r2 = sl;
0x000a5312 mov r0, fp | r0 = fp;
0x000a5314 bl 0x3e27c | r0 = fcn_0003e27c (r0, r1, r2, r3);
0x000a5318 mov r4, r0 | r4 = r0;
0x000a531a cmp r0, 0 |
0x000a531c beq 0xa5302 |
| } while (r0 == 0);
0x000a531e cmp.w sb, 1 |
0x000a5322 mov.w r3, 0 | r3 = 0;
0x000a5326 str r3, [sp, 0x8c] | var_8ch = r3;
| if (sb != 1) {
0x000a5328 beq 0xa5348 |
0x000a532a ldr r3, [r5] | r3 = *(r5);
0x000a532c ldr r2, [sp, 0x38] | r2 = var_38h;
0x000a532e ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a5330 add r3, r2 | r3 += r2;
0x000a5332 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a5334 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x000a5336 cbz r3, 0xa5348 | goto label_178;
| }
0x000a5338 ldr r3, [r0] | r3 = *(r0);
0x000a533a mov r1, sb | r1 = sb;
0x000a533c ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x000a533e mov r0, r5 | r0 = r5;
0x000a5340 str r3, [sp] | *(sp) = r3;
0x000a5342 movs r3, 0 | r3 = 0;
0x000a5344 bl 0x2fbbc | fcn_0002fbbc (r0, r1, r2, r3, r4);
| }
| label_178:
0x000a5348 movs r3, 0 | r3 = 0;
0x000a534a mov r2, r7 | r2 = r7;
0x000a534c str r3, [sp] | *(sp) = r3;
0x000a534e mov r1, r4 | r1 = r4;
0x000a5350 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a5352 mov r0, r5 | r0 = r5;
0x000a5354 bl 0x247d4 | r0 = fcn_000247d4 (r0, r1, r2, r3, r4, r5, r6);
0x000a5358 cmp r0, 0 |
| if (r0 != 0) {
0x000a535a bne.w 0xa4e56 | goto label_5;
| }
0x000a535e ldr r6, [sp, 0x8c] | r6 = var_8ch;
0x000a5360 cmp r6, 0 |
| if (r6 != 0) {
0x000a5362 bne 0xa52ea | goto label_11;
| }
0x000a5364 movs r2, 0x70 | r2 = 0x70;
0x000a5366 mov r3, r4 | r3 = r4;
0x000a5368 str r2, [sp] | *(sp) = r2;
0x000a536a mov r1, r8 | r1 = r8;
0x000a536c mov r2, sb | r2 = sb;
0x000a536e mov r0, r5 | r0 = r5;
0x000a5370 bl 0x2fc88 | fcn_0002fc88 (r0, r1, r2, r3, r4);
0x000a5374 b 0xa5302 | goto label_12;
0x000a5376 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a5378 movs r3, 1 | r3 = 1;
0x000a537a movs r4, 0 | r4 = 0;
0x000a537c str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a537e b 0xa5396 |
| while (r0 != 0) {
0x000a5380 movs r1, 1 | r1 = 1;
0x000a5382 mov r0, sl | r0 = sl;
0x000a5384 bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000a5388 movs r3, 1 | r3 = 1;
0x000a538a movs r1, 0x54 | r1 = 0x54;
0x000a538c mov r2, r3 | r2 = r3;
0x000a538e mov r0, sl | r0 = sl;
0x000a5390 str r4, [sp] | *(sp) = r4;
0x000a5392 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5396 mov r0, r5 | r0 = r5;
0x000a5398 adds r5, 1 | r5++;
0x000a539a blx 0x87a4 | r0 = fcn_000087a4 ();
0x000a539e mov r2, r0 | r2 = r0;
0x000a53a0 cmp r0, 0 |
0x000a53a2 bne 0xa5380 |
| }
0x000a53a4 ldrd r4, r0, [sl, 0x68] | __asm ("ldrd r4, r0, [sl, 0x68]");
0x000a53a8 cmp r0, 1 |
| if (r0 <= 1) {
0x000a53aa ble.w 0xa4e56 | goto label_5;
| }
0x000a53ae mov r2, r4 | r2 = r4;
0x000a53b0 movs r3, 1 | r3 = 1;
0x000a53b2 b 0xa53be | goto label_179;
| label_13:
0x000a53b4 adds r3, 1 | r3++;
0x000a53b6 adds r2, 0x14 | r2 += 0x14;
0x000a53b8 cmp r0, r3 |
| if (r0 == r3) {
0x000a53ba beq.w 0xa4e56 | goto label_5;
| }
| label_179:
0x000a53be ldrb r1, [r2, 0x14] | r1 = *((r2 + 0x14));
0x000a53c0 cmp r1, 0xa6 |
| if (r1 != 0xa6) {
0x000a53c2 bne 0xa53b4 | goto label_13;
| }
0x000a53c4 b 0xa512e | goto label_14;
0x000a53c6 ldr r3, [r4] | r3 = *(r4);
0x000a53c8 movs r4, 0x64 | r4 = 0x64;
0x000a53ca str r4, [sp, 0x84] | var_84h = r4;
0x000a53cc cmp r3, 0 |
0x000a53ce ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a53d0 it eq |
| if (r3 != 0) {
0x000a53d2 moveq r3, -1 | r3 = -1;
| }
0x000a53d6 str r3, [sp, 0x30] | var_30h = r3;
0x000a53d8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000a53da ldrb r2, [r3] | r2 = *(r3);
0x000a53dc ldr r3, [pc, 0x350] |
0x000a53de add r3, pc | r3 = 0x14ab12;
0x000a53e0 add r3, r2 | r3 += r2;
0x000a53e2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a53e4 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000a53e8 str r3, [sp, 0x44] | var_44h = r3;
0x000a53ea movs r3, 6 | r3 = 6;
0x000a53ec str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a53ee ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a53f0 cmp r3, 0 |
| if (r3 == 0) {
0x000a53f2 beq.w 0xa7744 | goto label_180;
| }
0x000a53f6 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a53f8 add r1, sp, 0x84 | r1 += var_84h;
0x000a53fa bl 0xd320 | r0 = fcn_0000d320 (r0, r1);
0x000a53fe mov r3, r0 | r3 = r0;
0x000a5400 cmp r0, 0 |
| if (r0 == 0) {
0x000a5402 beq.w 0xa78f8 | goto label_181;
| }
0x000a5406 ldr r5, [sp, 0x84] | r5 = var_84h;
0x000a5408 cmp r5, 0 |
| if (r5 <= 0) {
0x000a540a ble.w 0xa7742 | goto label_182;
| }
| label_115:
0x000a540e movs r3, 0 | r3 = 0;
0x000a5410 str r3, [sp, 0x3c] | var_3ch = r3;
| label_126:
0x000a5412 movs r7, 0 | r7 = 0;
0x000a5414 movs r3, 1 | r3 = 1;
0x000a5416 subs r2, r5, 1 | r2 = r5 - 1;
0x000a5418 movs r1, 0x47 | r1 = 0x47;
0x000a541a mov r0, sl | r0 = sl;
0x000a541c str r7, [sp] | *(sp) = r7;
0x000a541e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5422 ldr r3, [sp, 0x20] | r3 = x;
0x000a5424 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000a5426 cmp r3, r7 |
| if (r3 <= r7) {
0x000a5428 ble.w 0xa7642 | goto label_183;
| }
0x000a542c ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a542e mov r8, r7 | r8 = r7;
0x000a5430 vldr d8, [pc, 0x2a4] | __asm ("vldr d8, aav.0x000000ff");
0x000a5434 mov r7, sl | r7 = sl;
0x000a5436 str r5, [sp, 0x6c] | var_6ch = r5;
0x000a5438 mvn.w sb, r2 | sb = ~r2;
0x000a543c vldr d9, [pc, 0x2a0] | __asm ("vldr d9, aav.0x000000ff");
0x000a5440 lsr.w sb, sb, 0x1f | sb >>= 0x1f;
0x000a5444 mov sl, r2 | sl = r2;
0x000a5446 vldr d10, [pc, 0x2a0] | __asm ("vldr d10, aav.0x000000ff");
0x000a544a mov fp, sb |
0x000a544c ldr.w sb, [sp, 0x24] | sb = var_24h;
0x000a5450 b 0xa545c |
| while (r2 != 0) {
| label_63:
0x000a5452 add.w r8, r8, 1 | r8++;
0x000a5456 cmp r3, r8 |
| if (r3 <= r8) {
0x000a5458 ble.w 0xa763e | goto label_184;
| }
0x000a545c cmp sl, r8 |
0x000a545e ite eq |
| if (sl != r8) {
0x000a5460 moveq r2, 0 | r2 = 0;
| }
| if (sl == r8) {
0x000a5462 andne r2, fp, 1 | r2 = fp & 1;
| }
0x000a5466 cmp r2, 0 |
0x000a5468 bne 0xa5452 |
| }
0x000a546a ldr.w r0, [sb, 0x74] | r0 = *((sb + 0x74));
0x000a546e movs r3, 1 | r3 = 1;
0x000a5470 lsl.w r3, r3, r8 | r3 <<= r8;
0x000a5474 cmp r0, 0 |
0x000a5476 it eq |
| if (r0 != 0) {
0x000a5478 moveq r0, sb | r0 = sb;
| }
0x000a547a ldr r2, [r0, 0x54] | r2 = *((r0 + 0x54));
0x000a547c tst r2, r3 |
| if ((r2 & r3) == 0) {
0x000a547e bne 0xa548e |
0x000a5480 cmp.w r8, 1 |
0x000a5484 orr.w r2, r2, r3 | r2 |= r3;
0x000a5488 str r2, [r0, 0x54] | *((r0 + 0x54)) = r2;
| if (r8 == 1) {
0x000a548a beq.w 0xa76fe | goto label_185;
| }
| }
| label_110:
0x000a548e ldr r3, [sp, 0x20] | r3 = x;
0x000a5490 lsl.w r6, r8, 4 | r6 = r8 << 4;
0x000a5494 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a5496 add r3, r6 | r3 += r6;
0x000a5498 ldr r5, [r3, 0xc] | r5 = *((r3 + 0xc));
0x000a549a ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000a549c cmp r3, 0 |
| if (r3 == 0) {
0x000a549e beq.w 0xa6a16 | goto label_65;
| }
0x000a54a2 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a54a4 movs r4, 0 | r4 = 0;
0x000a54a6 str r5, [sp, 0x24] | var_24h = r5;
0x000a54a8 mov ip, r4 |
0x000a54aa subs r2, r0, r4 | r2 = r0 - r4;
0x000a54ac it ne |
| if (r2 == r0) {
0x000a54ae movne r2, 1 | r2 = 1;
| }
0x000a54b0 mov r5, r2 | r5 = r2;
0x000a54b2 str r2, [sp, 0x40] | var_40h = r2;
0x000a54b4 b 0xa54be |
| while (r2 != 0) {
| label_15:
0x000a54b6 ldr r3, [r3] | r3 = *(r3);
0x000a54b8 cmp r3, 0 |
| if (r3 == 0) {
0x000a54ba beq.w 0xa6a38 | goto label_186;
| }
0x000a54be ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x000a54c0 cmp r0, r1 |
0x000a54c2 ite eq |
| if (r0 != r1) {
0x000a54c4 moveq r2, 0 | r2 = 0;
| }
| if (r0 == r1) {
0x000a54c6 andne r2, r5, 1 | r2 = r5 & 1;
| }
0x000a54ca cmp r2, 0 |
0x000a54cc bne 0xa54b6 |
| }
0x000a54ce ldr r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x000a54d0 lsls r2, r2, 0x18 | r2 <<= 0x18;
0x000a54d2 ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x000a54d4 it pl |
| if (r2 < r2) {
0x000a54d6 addpl ip, ip, 1 |
| }
0x000a54da cmp r2, 0 |
| if (r2 == 0) {
0x000a54dc beq.w 0xa750a | goto label_187;
| }
0x000a54e0 movs r1, 0 | r1 = 0;
| do {
0x000a54e2 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000a54e4 mov lr, r1 | lr = r1;
0x000a54e6 adds r1, 1 | r1++;
0x000a54e8 cmp r2, 0 |
0x000a54ea bne 0xa54e2 |
| } while (r2 != 0);
0x000a54ec add.w ip, ip, 1 |
0x000a54f0 add ip, lr |
| label_90:
0x000a54f2 cmp r4, r1 |
0x000a54f4 it lt |
| if (r4 >= r1) {
0x000a54f6 movlt r4, r1 | r4 = r1;
| }
0x000a54f8 b 0xa54b6 | goto label_15;
0x000a54fa ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a54fc movs r2, 1 | r2 = 1;
0x000a54fe ldr r1, [sp, 0x30] | r1 = var_30h;
0x000a5500 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a5504 ldr r0, [r3, 0x74] | r0 = *((r3 + 0x74));
0x000a5506 lsls r2, r1 | r2 <<= r1;
0x000a5508 vstr d16, [sp, 0x90] | __asm ("vstr d16, [sp, 0x90]");
0x000a550c cmp r0, 0 |
0x000a550e it eq |
| if (r0 != 0) {
0x000a5510 moveq r0, r3 | r0 = r3;
| }
0x000a5512 ldr r3, [r0, 0x54] | r3 = *((r0 + 0x54));
0x000a5514 tst r3, r2 |
| if ((r3 & r2) == 0) {
0x000a5516 bne 0xa5524 |
0x000a5518 cmp r1, 1 |
0x000a551a orr.w r3, r3, r2 | r3 |= r2;
0x000a551e str r3, [r0, 0x54] | *((r0 + 0x54)) = r3;
| if (r1 == 1) {
0x000a5520 beq.w 0xa7ba4 | goto label_188;
| }
| }
| label_143:
0x000a5524 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a5526 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000a5528 ldr r4, [r3, 0x2c] | r4 = *((r3 + 0x2c));
0x000a552a adds r4, 1 | r4++;
0x000a552c str r4, [r3, 0x2c] | *((r3 + 0x2c)) = r4;
0x000a552e ldr r3, [pc, 0x204] |
0x000a5530 ldrb r2, [r2] | r2 = *(r2);
0x000a5532 add r3, pc | r3 = 0x14ac6c;
0x000a5534 add r3, r2 | r3 += r2;
0x000a5536 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000a553a cmp r3, 0x70 |
| if (r3 == 0x70) {
0x000a553c beq.w 0xa7a96 | goto label_189;
| }
0x000a5540 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5542 cmp r3, 0 |
| if (r3 == 0) {
0x000a5544 beq.w 0xa76f0 | goto label_190;
| }
0x000a5548 add r1, sp, 0x90 | r1 += var_90h;
0x000a554a mov r0, r3 | r0 = r3;
0x000a554c bl 0x10b24 | r0 = fcn_00010b24 (r0, r1);
0x000a5550 mov r2, r0 | r2 = r0;
0x000a5552 cmp r0, 0 |
| if (r0 != 0) {
0x000a5554 bne.w 0xa76f0 | goto label_190;
| }
0x000a5558 ldrd r3, r1, [sp, 0x90] | __asm ("ldrd r3, r1, [var_90h]");
0x000a555c cmp r1, 0 |
| if (r1 < 0) {
0x000a555e blt.w 0xa76f0 | goto label_190;
| }
0x000a5562 mvn r0, 1 | r0 = ~1;
0x000a5566 cmp r0, r3 |
0x000a5568 sbcs r2, r1 | __asm ("sbcs r2, r1");
0x000a556a itttt lt |
| if (r0 >= r3) {
0x000a556c movlt r3, r0 | r3 = r0;
| }
| if (r0 >= r3) {
0x000a556e movlt r2, 0 | r2 = 0;
| }
| if (r0 >= r3) {
0x000a5570 strlt r3, [sp, 0x90] | var_90h = r3;
| }
| if (r0 >= r3) {
0x000a5572 strlt r2, [sp, 0x94] | var_94h = r2;
| }
| label_109:
0x000a5574 str r3, [sp] | *(sp) = r3;
0x000a5576 movs r1, 0xb2 | r1 = 0xb2;
0x000a5578 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a557a mov r3, r4 | r3 = r4;
0x000a557c mov r0, sl | r0 = sl;
0x000a557e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_134:
0x000a5582 movs r3, 0 | r3 = 0;
0x000a5584 mov r2, r4 | r2 = r4;
0x000a5586 str r3, [sp] | *(sp) = r3;
0x000a5588 mov r0, sl | r0 = sl;
0x000a558a movs r3, 1 | r3 = 1;
0x000a558c movs r1, 0x54 | r1 = 0x54;
0x000a558e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5592 b 0xa4e56 | goto label_5;
0x000a5594 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000a5596 movs r3, 1 | r3 = 1;
0x000a5598 ldr.w r2, [sl, 0x98] | r2 = *((sl + 0x98));
0x000a559c cmp r1, 1 |
0x000a559e lsl.w r3, r3, r1 | r3 <<= r1;
0x000a55a2 orr.w r2, r2, r3 | r2 |= r3;
0x000a55a6 str.w r2, [sl, 0x98] | __asm ("str.w r2, [sl, 0x98]");
| if (r1 != 1) {
0x000a55aa beq 0xa55c4 |
0x000a55ac ldr.w r2, [sl] | r2 = *(sl);
0x000a55b0 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x000a55b2 add r2, sb | r2 += sb;
0x000a55b4 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000a55b6 ldrb r2, [r2, 9] | r2 = *((r2 + 9));
| if (r2 == 0) {
0x000a55b8 cbz r2, 0xa55c4 | goto label_191;
| }
0x000a55ba ldr.w r2, [sl, 0x9c] | r2 = *((sl + 0x9c));
0x000a55be orrs r2, r3 | r2 |= r3;
0x000a55c0 str.w r2, [sl, 0x9c] | __asm ("str.w r2, [sl, 0x9c]");
| }
| label_191:
0x000a55c4 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a55c6 cmp r3, 0 |
| if (r3 == 0) {
0x000a55c8 beq.w 0xa797a | goto label_192;
| }
0x000a55cc movs r3, 0 | r3 = 0;
0x000a55ce ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a55d0 add r1, sp, 0x90 | r1 += var_90h;
0x000a55d2 str r3, [sp, 0x90] | var_90h = r3;
0x000a55d4 bl 0xd320 | fcn_0000d320 (r0, r1);
0x000a55d8 ldr r4, [sp, 0x90] | r4 = var_90h;
0x000a55da cmp r4, 0 |
| if (r4 < 0) {
0x000a55dc bge 0xa55ea |
0x000a55de cmp.w r4, -0x80000000 |
0x000a55e2 ite ne |
| if (r4 != -0x80000000) {
0x000a55e4 rsbne r4, r4, 0 | __asm ("rsbne r4, r4, 0");
| }
| if (r4 == -0x80000000) {
0x000a55e6 mvneq r4, 0x80000000 | r4 = ~0x80000000;
| goto label_193;
| }
| }
| label_193:
0x000a55ea ldr r5, [sp, 0x30] | r5 = var_30h;
0x000a55ec movs r1, 0 | r1 = 0;
0x000a55ee ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a55f0 mov r2, r5 | r2 = r5;
0x000a55f2 bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x000a55f6 mov r2, r5 | r2 = r5;
0x000a55f8 mov r0, sl | r0 = sl;
0x000a55fa movs r3, 3 | r3 = 3;
0x000a55fc movs r1, 0x64 | r1 = 0x64;
0x000a55fe str r4, [sp] | *(sp) = r4;
0x000a5600 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5604 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000a5606 mov r1, r4 | r1 = r4;
0x000a5608 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000a560a str r4, [r3, 0x50] | *((r3 + 0x50)) = r4;
0x000a560c bl 0x19cc8 | fcn_00019cc8 (r0, r1);
0x000a5610 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a5612 ldr r0, [sp, 0x20] | r0 = x;
0x000a5614 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a5618 b 0xa4e62 | goto label_16;
0x000a561a ldr r3, [sp, 0x20] | r3 = x;
0x000a561c movs r2, 3 | r2 = 3;
0x000a561e ldr r1, [sp, 0x24] | r1 = var_24h;
0x000a5620 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000a5622 str r2, [r1, 0x2c] | *((r1 + 0x2c)) = r2;
0x000a5624 cmp r3, 0 |
| if (r3 <= 0) {
0x000a5626 ble.w 0xa4e56 | goto label_5;
| }
0x000a562a ldr r2, [pc, 0x10c] |
0x000a562c ldr r4, [pc, 0x10c] |
0x000a562e ldr r7, [sp, 0x20] | r7 = x;
0x000a5630 add r2, pc | r2 = 0x14ad6e;
0x000a5632 add.w r6, r2, 0x13c | r6 = r2 + 0x13c;
0x000a5636 add r4, pc | r4 = 0x14ad76;
0x000a5638 b 0xa5658 | goto label_194;
| label_18:
0x000a563a ldr.w r3, [r3, 0xb8] | r3 = *((r3 + 0xb8));
| label_19:
0x000a563e strd r1, r3, [sp] | __asm ("strd r1, r3, [sp]");
0x000a5642 mov r2, r4 | r2 = r4;
0x000a5644 mov r3, r5 | r3 = r5;
0x000a5646 movs r1, 1 | r1 = 1;
0x000a5648 mov r0, sl | r0 = sl;
0x000a564a bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a564e ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
| label_17:
0x000a5650 adds r5, 1 | r5++;
0x000a5652 cmp r3, r5 |
| if (r3 <= r5) {
0x000a5654 ble.w 0xa4e56 | goto label_5;
| }
| label_194:
0x000a5658 ldr r0, [r7, 0x10] | r0 = *((r7 + 0x10));
0x000a565a lsls r1, r5, 4 | r1 = r5 << 4;
0x000a565c adds r2, r0, r1 | r2 = r0 + r1;
0x000a565e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000a5660 cmp r2, 0 |
| if (r2 == 0) {
0x000a5662 beq 0xa5650 | goto label_17;
| }
0x000a5664 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x000a5666 ldr r1, [r0, r1] | r1 = *((r0 + r1));
0x000a5668 ldr r3, [r3] | r3 = *(r3);
0x000a566a ldrb r2, [r3, 0xf] | r2 = *((r3 + 0xf));
0x000a566c cmp r2, 0 |
| if (r2 == 0) {
0x000a566e beq 0xa563a | goto label_18;
| }
0x000a5670 mov r3, r6 | r3 = r6;
0x000a5672 b 0xa563e | goto label_19;
0x000a5674 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5676 cmp r3, 0 |
| if (r3 == 0) {
0x000a5678 beq.w 0xa7b00 | goto label_195;
| }
0x000a567c ldr r0, [sp, 0x20] | r0 = x;
0x000a567e ldr r3, [r0, 0x18] | r3 = *((r0 + 0x18));
0x000a5680 lsls r1, r3, 0x19 | r1 = r3 << 0x19;
| if (r1 < r3) {
0x000a5682 bmi.w 0xa61c6 | goto label_140;
| }
0x000a5686 ldr r4, [pc, 0xb8] |
0x000a5688 ldr r1, [pc, 0xb8] |
0x000a568a ldr r5, [pc, 0xbc] |
0x000a568c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a568e add r4, pc | r4 = 0x14add4;
0x000a5690 adds r4, 4 | r4 += 4;
0x000a5692 add r1, pc | r1 = 0x14adda;
0x000a5694 add r5, pc | r5 = 0x14ade2;
0x000a5696 subs r6, r3, 1 | r6 = r3 - 1;
| label_20:
0x000a5698 subs r1, 1 | r1--;
0x000a569a mov r0, r6 | r0 = r6;
| do {
| label_38:
0x000a569c ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x000a56a0 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x000a56a4 cmp r3, r2 |
| if (r3 == r2) {
0x000a56a6 beq.w 0xa625e | goto label_196;
| }
0x000a56aa add r3, r5 | r3 += r5;
0x000a56ac add r2, r5 | r2 += r5;
0x000a56ae ldrb.w r7, [r3, 0x140] | r7 = *((r3 + 0x140));
0x000a56b2 ldrb.w r3, [r2, 0x140] | r3 = *((r2 + 0x140));
0x000a56b6 cmp r7, r3 |
0x000a56b8 beq 0xa569c |
| } while (r7 == r3);
0x000a56ba ldr r1, [r4, 8]! | r1 = *((r4 += 8));
0x000a56be cmp r1, 0 |
| if (r1 != 0) {
0x000a56c0 bne 0xa5698 | goto label_20;
| }
| label_39:
0x000a56c2 ldr r3, [r4] | r3 = *(r4);
0x000a56c4 cmp r3, 0 |
| if (r3 == 0) {
0x000a56c6 beq.w 0xa7b8c | goto label_197;
| }
| do {
| label_22:
0x000a56ca ldr r1, [sp, 0x2c] | r1 = var_2ch;
| label_23:
0x000a56cc ldr r0, [sp, 0x20] | r0 = x;
0x000a56ce bl 0x16808 | fcn_00016808 (r0, r1);
0x000a56d2 b.w 0xa4e62 | goto label_16;
0x000a574c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a574e cmp r3, 0 |
| if (r3 != 0) {
0x000a5750 bne.w 0xa64ac | goto label_198;
| }
| label_46:
0x000a5754 ldr r2, [sp, 0x20] | r2 = x;
0x000a5756 ldr.w r3, [pc, 0xbac] | r3 = *(0x000a6304);
0x000a575a ldr.w r2, [r2, 0x10c] | r2 = *((r2 + 0x10c));
0x000a575e add r3, pc | r3 += pc;
0x000a5760 cmp r2, r3 |
0x000a5762 iteet eq |
| if (r2 != r3) {
0x000a5764 ldreq r3, [sp, 0x20] | r3 = x;
| }
| if (r2 == r3) {
0x000a5766 movne r2, 0 | r2 = 0;
| }
| if (r2 == r3) {
0x000a5768 movne r3, r2 | r3 = r2;
| }
| if (r2 != r3) {
0x000a576a ldreq r2, [r3, 0x110] | r2 = *((r3 + 0x110));
| }
0x000a576e it eq |
| if (r2 == r3) {
0x000a5770 asreq r3, r2, 0x1f | __asm ("asreq r3, r2, 0x1f");
| }
| label_28:
0x000a5772 mov r0, sl | r0 = sl;
0x000a5774 bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a5778 b.w 0xa4e56 | goto label_5;
0x000a577c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a577e cmp r3, 0 |
| if (r3 != 0) {
0x000a5780 bne.w 0xa6484 | goto label_199;
| }
| label_45:
0x000a5784 ldr r0, [sp, 0x20] | r0 = x;
0x000a5786 mov.w r2, -1 | r2 = -1;
0x000a578a movs r1, 0xb | r1 = 0xb;
0x000a578c blx 0x8900 | r0 = fcn_00008900 ();
0x000a5790 mov r2, r0 | r2 = r0;
0x000a5792 mov r0, sl | r0 = sl;
0x000a5794 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000a5796 bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a579a b.w 0xa4e56 | goto label_5;
0x000a579e ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a57a0 cmp r3, 0 |
| if (r3 == 0) {
0x000a57a2 beq.w 0xa79b0 | goto label_200;
| }
0x000a57a6 ldr r3, [sp, 0x20] | r3 = x;
0x000a57a8 ldrb.w r3, [r3, 0x55] | r3 = *((r3 + 0x55));
0x000a57ac cmp r3, 0 |
| if (r3 == 0) {
0x000a57ae beq.w 0xa7956 | goto label_201;
| }
0x000a57b2 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a57b4 cmp r3, 1 |
0x000a57b6 beq 0xa56ca |
| } while (r3 == 1);
0x000a57b8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a57ba movs r2, 1 | r2 = 1;
0x000a57bc movs r1, 0 | r1 = 0;
0x000a57be bl 0xf81c | r0 = fcn_0000f81c (r0, r1, r2, r3, r4, r5, r6);
0x000a57c2 adds r3, r0, 1 | r3 = r0 + 1;
0x000a57c4 ldr r0, [sp, 0x20] | r0 = x;
0x000a57c6 ands r3, r3, 7 | r3 &= 7;
0x000a57ca it eq |
| if (r3 != r3) {
0x000a57cc moveq r3, 1 | r3 = 1;
| }
0x000a57ce strb r3, [r6, 8] | *((r6 + 8)) = r3;
0x000a57d0 movs r3, 1 | r3 = 1;
0x000a57d2 strb r3, [r6, 9] | *((r6 + 9)) = r3;
0x000a57d4 ldrb.w r3, [r0, 0x55] | r3 = *((r0 + 0x55));
0x000a57d8 cmp r3, 0 |
| if (r3 == 0) {
0x000a57da beq.w 0xa61c6 | goto label_140;
| }
| label_35:
0x000a57de ldr r4, [sp, 0x20] | r4 = x;
0x000a57e0 mov r0, r4 | r0 = r4;
0x000a57e2 bl 0x1b0b4 | fcn_0001b0b4 (r0, r1);
0x000a57e6 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a57e8 mov r0, r4 | r0 = r4;
0x000a57ea bl 0x16808 | fcn_00016808 (r0, r1);
0x000a57ee b.w 0xa4e62 | goto label_16;
0x000a57f2 ldr.w r3, [pc, 0xb14] | r3 = *(0x000a6308);
0x000a57f6 add r3, pc | r3 += pc;
0x000a57f8 ldrb r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x000a57fa cbz r0, 0xa5808 |
0x000a57fc ldr.w r3, [pc, 0xb0c] | r3 = *(0x000a630c);
0x000a5800 movs r0, 0xb | r0 = 0xb;
0x000a5802 add r3, pc | r3 += pc;
0x000a5804 ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x000a5806 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x000a5808 blx 0x8b50 | fcn_00008b50 ();
0x000a580c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a580e cmp r3, 0 |
| if (r3 == 0) {
0x000a5810 beq.w 0xa793e | goto label_202;
| }
0x000a5814 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000a5816 ldrb r3, [r1] | r3 = *(r1);
| if (r3 != 0) {
0x000a5818 cbz r3, 0xa5834 |
0x000a581a ldr r3, [sp, 0x20] | r3 = x;
0x000a581c movs r2, 1 | r2 = 1;
0x000a581e ldr r0, [r3] | r0 = *(r3);
0x000a5820 add r3, sp, 0x90 | r3 += var_90h;
0x000a5822 ldr r4, [r0, 0x20] | r4 = *((r0 + 0x20));
0x000a5824 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x000a5826 cmp r0, 0 |
| if (r0 != 0) {
0x000a5828 bne.w 0xa7a2a | goto label_203;
| }
0x000a582c ldr r3, [sp, 0x90] | r3 = var_90h;
0x000a582e cmp r3, 0 |
| if (r3 == 0) {
0x000a5830 beq.w 0xa7a2a | goto label_203;
| }
| }
0x000a5834 ldr r3, [sp, 0x20] | r3 = x;
0x000a5836 ldrb.w r3, [r3, 0x56] | r3 = *((r3 + 0x56));
0x000a583a cmp r3, 1 |
| if (r3 < 1) {
0x000a583c bls.w 0xa7a20 | goto label_204;
| }
| label_131:
0x000a5840 ldr.w r3, [pc, 0xacc] | r3 = *(0xa6310);
0x000a5844 ldr.w r4, [r8, r3] | r4 = *((r8 + r3));
0x000a5848 ldr r0, [r4] | r0 = *(r4);
0x000a584a blx 0x8404 | fcn_00008404 ();
0x000a584e ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5850 ldrb r3, [r3] | r3 = *(r3);
0x000a5852 cmp r3, 0 |
| if (r3 != 0) {
0x000a5854 bne.w 0xa79c8 | goto label_205;
| }
0x000a5858 str r3, [r4] | *(r4) = r3;
| label_128:
0x000a585a ldr.w r3, [pc, 0xab8] | r3 = *(0x000a6314);
0x000a585e add r3, pc | r3 += pc;
0x000a5860 ldrb r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x000a5862 cbz r0, 0xa586a |
0x000a5864 ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x000a5866 movs r0, 0xb | r0 = 0xb;
0x000a5868 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x000a586a blx 0x87c0 | fcn_000087c0 ();
0x000a586e b.w 0xa4e56 | goto label_5;
0x000a5872 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5874 cmp r3, 0 |
| if (r3 != 0) {
0x000a5876 bne.w 0xa6650 | goto label_206;
| }
0x000a587a add r7, sp, 0x90 | r7 += var_90h;
| label_50:
0x000a587c vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x000a5880 mov r3, r7 | r3 = r7;
0x000a5882 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000a5884 movs r2, 0x12 | r2 = 0x12;
0x000a5886 ldr r0, [sp, 0x20] | r0 = x;
0x000a5888 vstr d16, [sp, 0x90] | __asm ("vstr d16, [sp, 0x90]");
0x000a588c blx 0x89f8 | r0 = fcn_000089f8 ();
0x000a5890 cmp r0, 0 |
| if (r0 == 0) {
0x000a5892 beq.w 0xa77c4 | goto label_207;
| }
0x000a5896 cmp r0, 0xc |
| if (r0 == 0xc) {
0x000a5898 beq.w 0xa4e56 | goto label_5;
| }
0x000a589c ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a589e ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x000a58a0 str r0, [r2, 0xc] | *((r2 + 0xc)) = r0;
0x000a58a2 adds r3, 1 | r3++;
0x000a58a4 str r3, [r2, 0x24] | *((r2 + 0x24)) = r3;
0x000a58a6 b.w 0xa4e56 | goto label_5;
0x000a58aa ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a58ac cmp r3, 0 |
| if (r3 != 0) {
0x000a58ae bne.w 0xa673c | goto label_208;
| }
0x000a58b2 movw r6, 0xfffe | r6 = 0xfffe;
| label_53:
0x000a58b6 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a58b8 ldr.w fp, [r2, 0x28] | fp = *((r2 + 0x28));
0x000a58bc add.w r3, fp, 1 | r3 += arg_1h;
0x000a58c0 str r3, [r2, 0x28] | *((r2 + 0x28)) = r3;
0x000a58c2 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a58c4 cmp r3, 0 |
| if (r3 == 0) {
0x000a58c6 beq.w 0xa7a0c | goto label_209;
| }
0x000a58ca ldr.w r8, [sp, 0x30] | r8 = var_30h;
| label_129:
0x000a58ce ldr.w r3, [pc, 0xa48] | r3 = *(0x000a6318);
0x000a58d2 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a58d4 str r6, [sp, 0x3c] | var_3ch = r6;
0x000a58d6 add r3, pc | r3 += pc;
0x000a58d8 strd r3, fp, [sp, 0x34] | __asm ("strd r3, fp, [var_0hx34]");
0x000a58dc ldrd fp, r7, [sp, 0x20] | __asm ("ldrd fp, r7, [x]");
| label_64:
0x000a58e0 cmp r2, 1 |
| if (r2 == 1) {
0x000a58e2 beq.w 0xa6a24 | goto label_210;
| }
0x000a58e6 ldr r3, [r7, 0x74] | r3 = *((r7 + 0x74));
0x000a58e8 movs r1, 1 | r1 = 1;
0x000a58ea lsl.w r4, r1, r2 | r4 = r1 << r2;
0x000a58ee lsls r5, r2, 4 | r5 = r2 << 4;
0x000a58f0 cmp r3, 0 |
0x000a58f2 it eq |
| if (r3 != 0) {
0x000a58f4 moveq r3, r7 | r3 = r7;
| }
0x000a58f6 ldr r0, [r3, 0x54] | r0 = *((r3 + 0x54));
0x000a58f8 tst r0, r4 |
0x000a58fa itt eq |
| if ((r0 & r4) != 0) {
0x000a58fc orreq r0, r4 | r0 |= r4;
| }
| if ((r0 & r4) != 0) {
0x000a58fe streq r0, [r3, 0x54] | *((r3 + 0x54)) = r0;
| }
0x000a5900 ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000a5904 add r3, r5 | r3 += r5;
0x000a5906 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a5908 ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
0x000a590a cmp r4, 0 |
| if (r4 == 0) {
0x000a590c beq.w 0xa6a24 | goto label_210;
| }
0x000a5910 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000a5912 str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x000a5916 mov r8, r5 | r8 = r5;
0x000a5918 str r2, [sp, 0x24] | var_24h = r2;
0x000a591a and sb, r3, 1 | sb = r3 & 1;
0x000a591e b 0xa5928 |
| while (r3 >= r3) {
| label_21:
0x000a5920 ldr r4, [r4] | r4 = *(r4);
0x000a5922 cmp r4, 0 |
| if (r4 == 0) {
0x000a5924 beq.w 0xa6a1e | goto label_211;
| }
0x000a5928 ldr r6, [r4, 8] | r6 = *((r4 + 8));
0x000a592a ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000a592c lsls r3, r3, 0x17 | r3 <<= 0x17;
0x000a592e bpl 0xa5920 |
| }
0x000a5930 ldr r3, [r6, 8] | r3 = *((r6 + 8));
| if (r3 != 0) {
0x000a5932 cbnz r3, 0xa5940 | goto label_212;
| }
0x000a5934 b.w 0xa69d8 | goto label_213;
| do {
0x000a5938 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000a593a cmp r3, 0 |
| if (r3 == 0) {
0x000a593c beq.w 0xa69d8 | goto label_213;
| }
| label_212:
0x000a5940 ldrsb.w r2, [r3, 0x37] | r2 = *((r3 + 0x37));
0x000a5944 cmp r2, 0 |
0x000a5946 blt 0xa5938 |
| } while (r2 < 0);
| label_62:
0x000a5948 ldr.w r2, [fp, 0x10] | r2 = *(arg_10h);
0x000a594c mov r0, fp | r0 = fp;
0x000a594e ldr r3, [r6] | r3 = *(r6);
0x000a5950 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000a5952 ldr.w r2, [r2, r8] | r2 = *((r2 + r8));
0x000a5956 bl 0x24ec8 | fcn_00024ec8 (r0);
0x000a595a cmp.w sb, 0 |
| if (sb == 0) {
0x000a595e beq.w 0xa6ce4 | goto label_214;
| }
0x000a5962 ldrb r3, [r7, 0x13] | r3 = *((r7 + 0x13));
0x000a5964 cmp r3, 0 |
| if (r3 == 0) {
0x000a5966 beq.w 0xa6d00 | goto label_215;
| }
0x000a596a subs r3, 1 | r3--;
0x000a596c uxtb r3, r3 | r3 = (int8_t) r3;
0x000a596e strb r3, [r7, 0x13] | *((r7 + 0x13)) = r3;
0x000a5970 adds r3, 0x26 | r3 += 0x26;
0x000a5972 ldr.w r6, [r7, r3, lsl 2] | offset_1 = r3 << 2;
| r6 = *((r7 + offset_1));
| label_72:
0x000a5976 movs r5, 0 | r5 = 0;
0x000a5978 mvn r3, 5 | r3 = ~5;
0x000a597c mov r2, r5 | r2 = r5;
0x000a597e str r0, [sp, 4] | var_4h = r0;
0x000a5980 str r3, [sp, 8] | var_8h = r3;
0x000a5982 movs r1, 0x75 | r1 = 0x75;
0x000a5984 mov r3, r6 | r3 = r6;
0x000a5986 mov r0, sl | r0 = sl;
0x000a5988 str r5, [sp] | *(sp) = r5;
0x000a598a bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000a598e mov r2, r6 | r2 = r6;
0x000a5990 movs r3, 1 | r3 = 1;
0x000a5992 movs r1, 0x54 | r1 = 0x54;
0x000a5994 mov r0, sl | r0 = sl;
0x000a5996 str r5, [sp] | *(sp) = r5;
0x000a5998 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a599c b 0xa5920 | goto label_21;
0x000a599e ldr r3, [sp, 0x20] | r3 = x;
0x000a59a0 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a59a2 ldr.w r4, [r3, 0x188] | r4 = *((r3 + 0x188));
0x000a59a6 movs r3, 1 | r3 = 1;
0x000a59a8 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a59aa cmp r4, 0 |
| if (r4 == 0) {
0x000a59ac beq.w 0xa4e56 | goto label_5;
| }
0x000a59b0 ldr.w r5, [pc, 0x968] |
0x000a59b4 add r5, pc | r5 = 0x14bcd4;
| do {
0x000a59b6 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000a59b8 mov r2, r5 | r2 = r5;
0x000a59ba movs r1, 1 | r1 = 1;
0x000a59bc mov r0, sl | r0 = sl;
0x000a59be ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a59c0 bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a59c4 ldr r4, [r4] | r4 = *(r4);
0x000a59c6 cmp r4, 0 |
0x000a59c8 bne 0xa59b6 |
| } while (r4 != 0);
0x000a59ca b.w 0xa4e56 | goto label_5;
0x000a59ce ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a59d0 cmp r3, 0 |
| if (r3 != 0) {
0x000a59d2 bne.w 0xa64c4 | goto label_216;
| }
| label_27:
0x000a59d6 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a59d8 ldr r0, [sp, 0x20] | r0 = x;
0x000a59da bl 0x16808 | fcn_00016808 (r0, r1);
0x000a59de b.w 0xa4e6a | goto label_0;
0x000a59e2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a59e4 cmp r3, 0 |
| if (r3 != 0) {
0x000a59e6 bne.w 0xa67dc | goto label_217;
| }
| label_56:
0x000a59ea mov.w r0, -1 | r0 = -1;
0x000a59ee mov.w r1, -1 | r1 = -1;
0x000a59f2 blx 0x8710 | r0 = fcn_00008710 ();
0x000a59f6 mov r2, r0 | r2 = r0;
0x000a59f8 mov r3, r1 | r3 = r1;
0x000a59fa mov r0, sl | r0 = sl;
0x000a59fc bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a5a00 b.w 0xa4e56 | goto label_5;
0x000a5a04 ldr r0, [sp, 0x20] | r0 = x;
0x000a5a06 blx 0x8888 | fcn_00008888 ();
0x000a5a0a b.w 0xa4e56 | goto label_5;
0x000a5a0e ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5a10 cmp r3, 0 |
| if (r3 == 0) {
0x000a5a12 beq.w 0xa7898 | goto label_218;
| }
0x000a5a16 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5a18 ldrb r4, [r3] | r4 = *(r3);
0x000a5a1a subs r4, 0x30 | r4 -= 0x30;
0x000a5a1c uxtb r3, r4 | r3 = (int8_t) r4;
0x000a5a1e cmp r3, 2 |
| if (r3 >= 2) {
0x000a5a20 bls 0xa5a4a |
0x000a5a22 ldr.w r1, [pc, 0x8fc] |
0x000a5a26 ldr r4, [sp, 0x28] | r4 = var_28h;
0x000a5a28 add r1, pc | r1 = 0x14bd4e;
0x000a5a2a mov r0, r4 | r0 = r4;
0x000a5a2c bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x000a5a30 cmp r0, 0 |
| if (r0 == 0) {
0x000a5a32 beq.w 0xa7a52 | goto label_219;
| }
0x000a5a36 ldr.w r1, [pc, 0x8ec] |
0x000a5a3a mov r0, r4 | r0 = r4;
0x000a5a3c add r1, pc | r1 = 0x14bd66;
0x000a5a3e bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x000a5a42 clz r4, r0 | r4 &= r0;
0x000a5a46 lsrs r4, r4, 5 | r4 >>= 5;
0x000a5a48 lsls r4, r4, 1 | r4 <<= 1;
| }
| label_132:
0x000a5a4a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a5a4c ldr r5, [r3] | r5 = *(r3);
0x000a5a4e ldrb.w r3, [r5, 0x56] | r3 = *((r5 + 0x56));
0x000a5a52 cmp r3, r4 |
| if (r3 == r4) {
0x000a5a54 beq.w 0xa56ca | goto label_22;
| }
0x000a5a58 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a5a5a bl 0x5e700 | fcn_0005e700 (r0);
0x000a5a5e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a5a60 cmp r0, 0 |
| if (r0 != 0) {
0x000a5a62 bne.w 0xa56cc | goto label_23;
| }
0x000a5a66 ldr r0, [sp, 0x20] | r0 = x;
0x000a5a68 strb.w r4, [r5, 0x56] | *((r5 + 0x56)) = r4;
0x000a5a6c bl 0x16808 | fcn_00016808 (r0, r1);
0x000a5a70 b.w 0xa4e62 | goto label_16;
0x000a5a74 ldr r3, [sp, 0x20] | r3 = x;
0x000a5a76 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a5a78 ldr.w r4, [r3, 0x1b4] | r4 = *((r3 + 0x1b4));
0x000a5a7c movs r3, 2 | r3 = 2;
0x000a5a7e str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a5a80 cmp r4, 0 |
| if (r4 == 0) {
0x000a5a82 beq.w 0xa4e56 | goto label_5;
| }
0x000a5a86 ldr.w r6, [pc, 0x8a0] | r6 = *(0x000a6328);
0x000a5a8a add r6, pc | r6 += pc;
| do {
0x000a5a8c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000a5a8e mov r2, r6 | r2 = r6;
0x000a5a90 movs r1, 1 | r1 = 1;
0x000a5a92 mov r0, sl | r0 = sl;
0x000a5a94 ldr r3, [r3] | r3 = *(r3);
0x000a5a96 str r3, [sp] | *(sp) = r3;
0x000a5a98 mov r3, r5 | r3 = r5;
0x000a5a9a bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a5a9e ldr r4, [r4] | r4 = *(r4);
0x000a5aa0 adds r5, 1 | r5++;
0x000a5aa2 cmp r4, 0 |
0x000a5aa4 bne 0xa5a8c |
| } while (r4 != 0);
0x000a5aa6 b.w 0xa4e56 | goto label_5;
0x000a5aaa ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r3 == 0) {
0x000a5aac cbz r3, 0xa5ae2 | goto label_120;
| }
0x000a5aae ldr.w r8, [sp, 0x28] | r8 = var_28h;
0x000a5ab2 movs r7, 0 | r7 = 0;
0x000a5ab4 mov r0, r8 | r0 = r8;
0x000a5ab6 blx 0x85b4 | fcn_000085b4 ();
0x000a5aba ldr.w r3, [pc, 0x870] | r3 = *(0x000a632c);
0x000a5abe bic r5, r0, 0xc0000000 | r5 = BIT_MASK (r0, 0xc0000000);
0x000a5ac2 add r3, pc | r3 += pc;
0x000a5ac4 addw r6, r3, 0xd68 | __asm ("addw r6, r3, aav.0x000000ff");
| do {
0x000a5ac8 ldr r1, [r6], 4 | r1 = *(r6);
| r6 += 4;
| if (r1 == 0) {
0x000a5acc cbz r1, 0xa5ae2 | goto label_120;
| }
0x000a5ace mov r2, r5 | r2 = r5;
0x000a5ad0 mov r0, r8 | r0 = r8;
0x000a5ad2 blx 0x8154 | r0 = fcn_00008154 ();
0x000a5ad6 cmp r0, 0 |
| if (r0 == 0) {
0x000a5ad8 beq.w 0xa77b0 | goto label_220;
| }
0x000a5adc adds r7, 1 | r7++;
0x000a5ade cmp r7, 6 |
0x000a5ae0 bne 0xa5ac8 |
| } while (r7 != 6);
| label_120:
0x000a5ae2 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a5ae4 cmp r3, 0 |
| if (r3 == 0) {
0x000a5ae6 beq.w 0xa796c | goto label_221;
| }
0x000a5aea mov.w r7, -1 | r7 = -1;
| label_119:
0x000a5aee ldr r3, [sp, 0x20] | r3 = x;
0x000a5af0 ldr r5, [r3, 0x14] | r5 = *((r3 + 0x14));
0x000a5af2 subs r5, 1 | r5--;
| if (r5 < 1) {
0x000a5af4 bmi.w 0xa762a | goto label_222;
| }
0x000a5af8 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x000a5afc movs r6, 1 | r6 = 1;
0x000a5afe mov r8, r3 | r8 = r3;
0x000a5b00 b 0xa5b2e | goto label_223;
| label_25:
0x000a5b02 ldr.w r3, [sl] | r3 = *(sl);
0x000a5b06 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a5b08 add r3, r2 | r3 += r2;
0x000a5b0a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a5b0c ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 != 0) {
0x000a5b0e cbz r3, 0xa5b1a |
0x000a5b10 ldr.w r3, [sl, 0x9c] | r3 = *((sl + 0x9c));
0x000a5b14 orrs r3, r1 | r3 |= r1;
0x000a5b16 str.w r3, [sl, 0x9c] | __asm ("str.w r3, [sl, 0x9c]");
| }
0x000a5b1a movs r3, 1 | r3 = 1;
0x000a5b1c mov r2, r5 | r2 = r5;
0x000a5b1e movs r1, 4 | r1 = 4;
0x000a5b20 mov r0, sl | r0 = sl;
0x000a5b22 str r7, [sp] | *(sp) = r7;
0x000a5b24 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| do {
| label_24:
0x000a5b28 subs r5, 1 | r5--;
| if (r5 <= 1) {
0x000a5b2a blo.w 0xa762a | goto label_222;
| }
| label_223:
0x000a5b2e ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000a5b32 lsls r2, r5, 4 | r2 = r5 << 4;
0x000a5b34 add r3, r2 | r3 += r2;
0x000a5b36 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a5b38 cmp r3, 0 |
0x000a5b3a beq 0xa5b28 |
| } while (r3 == 0);
| label_26:
0x000a5b3c cmp sb, r5 |
| if (sb == r5) {
0x000a5b3e beq 0xa5b46 | goto label_224;
| }
0x000a5b40 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a5b42 cmp r3, 0 |
| if (r3 != 0) {
0x000a5b44 bne 0xa5b28 | goto label_24;
| }
| label_224:
0x000a5b46 ldr.w r3, [sl, 0x98] | r3 = *((sl + 0x98));
0x000a5b4a lsl.w r1, r6, r5 | r1 = r6 << r5;
0x000a5b4e cmp r5, 1 |
0x000a5b50 orr.w r3, r3, r1 | r3 |= r1;
0x000a5b54 str.w r3, [sl, 0x98] | __asm ("str.w r3, [sl, 0x98]");
| if (r5 != 1) {
0x000a5b58 bne 0xa5b02 | goto label_25;
| }
0x000a5b5a mov r3, r5 | r3 = r5;
0x000a5b5c mov r2, r5 | r2 = r5;
0x000a5b5e movs r1, 4 | r1 = 4;
0x000a5b60 mov r0, sl | r0 = sl;
0x000a5b62 str r7, [sp] | *(sp) = r7;
0x000a5b64 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5b68 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000a5b6c movs r2, 0 | r2 = 0;
0x000a5b6e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a5b70 cmp r3, 0 |
| if (r3 == 0) {
0x000a5b72 beq.w 0xa762a | goto label_222;
| }
0x000a5b76 mov r5, r2 | r5 = r2;
0x000a5b78 b 0xa5b3c | goto label_26;
0x000a5b7a ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5b7c cmp r3, 0 |
| if (r3 != 0) {
0x000a5b7e bne.w 0xa6756 | goto label_225;
| }
0x000a5b82 ldr r3, [r4, 4] | r3 = *((r4 + 4));
| label_54:
0x000a5b84 cmp r3, 0 |
| if (r3 != 0) {
0x000a5b86 bne.w 0xa7872 | goto label_226;
| }
0x000a5b8a ldr r3, [sp, 0x20] | r3 = x;
0x000a5b8c ldrb.w r3, [r3, 0x59] | r3 = *((r3 + 0x59));
| label_55:
0x000a5b90 cmp r3, 1 |
| if (r3 == 1) {
0x000a5b92 beq.w 0xa7868 | goto label_227;
| }
0x000a5b96 ldr.w r1, [pc, 0x798] | r1 = *(0x000a6330);
0x000a5b9a add r1, pc | r1 += pc;
| label_122:
0x000a5b9c mov r0, sl | r0 = sl;
0x000a5b9e bl 0x2f31c | fcn_0002f31c (r0, r1, r2);
0x000a5ba2 b.w 0xa4e56 | goto label_5;
0x000a5ba6 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000a5ba8 mvn r2, 1 | r2 = ~1;
0x000a5bac ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a5bae ldr r4, [r3] | r4 = *(r3);
0x000a5bb0 mov.w r3, -1 | r3 = -1;
0x000a5bb4 strd r2, r3, [sp, 0x90] | __asm ("strd r2, r3, [sp, 0x90]");
0x000a5bb8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5bba cmp r3, 0 |
| if (r3 != 0) {
0x000a5bbc bne.w 0xa6992 | goto label_228;
| }
| label_61:
0x000a5bc0 ldrd r2, r3, [r4, 0xb0] | __asm ("ldrd r2, r3, [r4, 0xb0]");
0x000a5bc4 mov r0, sl | r0 = sl;
0x000a5bc6 bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a5bca b.w 0xa4e56 | goto label_5;
0x000a5bce ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5bd0 cmp r3, 0 |
| if (r3 == 0) {
0x000a5bd2 beq.w 0xa59d6 | goto label_27;
| }
0x000a5bd6 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a5bd8 movs r2, 0 | r2 = 0;
0x000a5bda movs r1, 1 | r1 = 1;
0x000a5bdc bl 0xf81c | r0 = fcn_0000f81c (r0, r1, r2, r3, r4, r5, r6);
0x000a5be0 cmp r0, 0 |
| if (r0 == 0) {
0x000a5be2 beq.w 0xa791c | goto label_229;
| }
0x000a5be6 ldr.w r5, [pc, 0x74c] | r5 = *(0x000a6334);
0x000a5bea add r5, pc | r5 += pc;
0x000a5bec addw r5, r5, 0xc78 | __asm ("addw r5, r5, aav.0x000000ff");
| label_127:
0x000a5bf0 ldr.w r3, [pc, 0x744] |
0x000a5bf4 movs r4, 0 | r4 = 0;
0x000a5bf6 ldr.w r8, [pc, 0x744] | r8 = *(0x000a633c);
0x000a5bfa movs r2, 2 | r2 = 2;
0x000a5bfc ldr.w sb, [sp, 0x20] | sb = x;
0x000a5c00 add r3, pc | r3 = 0x14bf3c;
0x000a5c02 str r5, [sp] | *(sp) = r5;
0x000a5c04 add r8, pc | r8 += pc;
0x000a5c06 mov r6, r3 | r6 = r3;
0x000a5c08 mov r1, r3 | r1 = r3;
0x000a5c0a mov r0, sb | r0 = sb;
0x000a5c0c movs r3, 1 | r3 = 1;
0x000a5c0e str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h]");
0x000a5c12 strd r4, r4, [sp, 0x14] | __asm ("strd r4, r4, [sp, 0x14]");
0x000a5c16 strd r4, r4, [sp, 0xc] | __asm ("strd r4, r4, [sp, 0xc]");
0x000a5c1a str r4, [sp, 8] | var_8h = r4;
0x000a5c1c bl 0x37804 | fcn_00037804 (r0, r1, r2, r3, r4, r5, r6);
0x000a5c20 mov r1, r6 | r1 = r6;
0x000a5c22 movs r3, 1 | r3 = 1;
0x000a5c24 movs r2, 3 | r2 = 3;
0x000a5c26 mov r0, sb | r0 = sb;
0x000a5c28 strd r5, r8, [sp] | __asm ("strd r5, r8, [sp]");
0x000a5c2c strd r4, r4, [sp, 0x14] | __asm ("strd r4, r4, [sp, 0x14]");
0x000a5c30 strd r4, r4, [sp, 0xc] | __asm ("strd r4, r4, [sp, 0xc]");
0x000a5c34 str r4, [sp, 8] | var_8h = r4;
0x000a5c36 bl 0x37804 | fcn_00037804 (r0, r1, r2, r3, r4, r5, r6);
0x000a5c3a mov r1, r6 | r1 = r6;
0x000a5c3c movs r3, 1 | r3 = 1;
0x000a5c3e movs r2, 2 | r2 = 2;
0x000a5c40 mov r0, sb | r0 = sb;
0x000a5c42 str r4, [sp] | *(sp) = r4;
0x000a5c44 bl 0x37594 | fcn_00037594 (r0, r1, r2, r3, r4, r5);
0x000a5c48 ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000a5c4a mov r1, r6 | r1 = r6;
0x000a5c4c movs r3, 1 | r3 = 1;
0x000a5c4e orrs r2, r7 | r2 |= r7;
0x000a5c50 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x000a5c52 movs r2, 3 | r2 = 3;
0x000a5c54 mov r0, sb | r0 = sb;
0x000a5c56 str r4, [sp] | *(sp) = r4;
0x000a5c58 bl 0x37594 | fcn_00037594 (r0, r1, r2, r3, r4, r5);
0x000a5c5c ldr r2, [r0, 4] | r2 = *((r0 + 4));
0x000a5c5e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a5c60 orrs r2, r7 | r2 |= r7;
0x000a5c62 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x000a5c64 mov r0, sb | r0 = sb;
0x000a5c66 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a5c6a b.w 0xa4e62 | goto label_16;
0x000a5c6e ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5c70 cmp r3, 0 |
| if (r3 == 0) {
0x000a5c72 beq.w 0xa59d6 | goto label_27;
| }
0x000a5c76 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a5c78 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000a5c7a ldr r0, [sp, 0x20] | r0 = x;
0x000a5c7c bl 0x3e27c | r0 = fcn_0003e27c (r0, r1, r2, r3);
0x000a5c80 mov r4, r0 | r4 = r0;
0x000a5c82 cmp r0, 0 |
| if (r0 == 0) {
0x000a5c84 beq.w 0xa56ca | goto label_22;
| }
0x000a5c88 ldr r1, [r0, 0x3c] | r1 = *((r0 + 0x3c));
0x000a5c8a cmp r1, 0 |
| if (r1 == 0) {
0x000a5c8c beq.w 0xa7be0 | goto label_230;
| }
0x000a5c90 ldr r0, [sp, 0x20] | r0 = x;
0x000a5c92 bl 0xfdfc | r0 = fcn_0000fdfc (r0, r1);
0x000a5c96 mov r1, r0 | r1 = r0;
| label_146:
0x000a5c98 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a5c9a ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x000a5c9c mov r0, r2 | r0 = r2;
0x000a5c9e cmp r3, 0 |
0x000a5ca0 it ne |
| if (r3 == 0) {
0x000a5ca2 movne r0, r3 | r0 = r3;
| }
0x000a5ca4 movs r3, 5 | r3 = 5;
0x000a5ca6 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a5ca8 bl 0x572e0 | fcn_000572e0 (r0, r1);
0x000a5cac ldr r4, [r4, 8] | r4 = *((r4 + 8));
0x000a5cae cmp r4, 0 |
| if (r4 == 0) {
0x000a5cb0 beq.w 0xa56ca | goto label_22;
| }
0x000a5cb4 ldr.w r3, [pc, 0x688] | r3 = *(0x000a6340);
0x000a5cb8 add r7, sp, 0x98 | r7 += var_98h;
0x000a5cba ldr.w r8, [pc, 0x688] |
0x000a5cbe add r3, pc | r3 += pc;
0x000a5cc0 add.w r6, r3, 0x3b8 | r6 = r3 + 0x3b8;
0x000a5cc4 add r8, pc | r8 = 0x14c00e;
| do {
0x000a5cc6 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000a5cc8 ldm.w r6, {r0, r1, r2} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
0x000a5ccc subs r3, 0 |
0x000a5cce it ne |
| if (r3 == 0) {
0x000a5cd0 movne r3, 1 | r3 = 1;
| }
0x000a5cd2 str r3, [sp, 0xc] | var_ch = r3;
0x000a5cd4 add r3, sp, 0xb8 | r3 += var_b8h;
0x000a5cd6 ldrb.w ip, [r4, 0x37] | ip = *((r4 + 0x37));
0x000a5cda stm.w r7, {r0, r1, r2} | *(r7) = r0;
| *((r7 + 4)) = r1;
| *((r7 + 8)) = r2;
0x000a5cde movs r1, 1 | r1 = 1;
0x000a5ce0 mov r0, sl | r0 = sl;
0x000a5ce2 and ip, ip, 3 |
0x000a5ce6 add.w ip, r3, ip, lsl 2 |
0x000a5cea mov r3, r5 | r3 = r5;
0x000a5cec adds r5, 1 | r5++;
0x000a5cee ldr r2, [ip, -0x20] | r2 = *((ip - 0x20));
0x000a5cf2 str r2, [sp, 8] | var_8h = r2;
0x000a5cf4 ldrb.w r2, [r4, 0x36] | r2 = *((r4 + 0x36));
0x000a5cf8 subs r2, 0 |
0x000a5cfa it ne |
| if (r2 == 0) {
0x000a5cfc movne r2, 1 | r2 = 1;
| }
0x000a5cfe str r2, [sp, 4] | var_4h = r2;
0x000a5d00 ldr r2, [r4] | r2 = *(r4);
0x000a5d02 str r2, [sp] | *(sp) = r2;
0x000a5d04 mov r2, r8 | r2 = r8;
0x000a5d06 bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a5d0a ldr r4, [r4, 0x14] | r4 = *((r4 + 0x14));
0x000a5d0c cmp r4, 0 |
0x000a5d0e bne 0xa5cc6 |
| } while (r4 != 0);
0x000a5d10 b 0xa56ca | goto label_22;
0x000a5d12 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5d14 ldr r4, [r6, 4] | r4 = *((r6 + 4));
0x000a5d16 cmp r3, 0 |
| if (r3 != 0) {
0x000a5d18 bne.w 0xa68f4 | goto label_231;
| }
| if (r4 != 0) {
0x000a5d1c cbz r4, 0xa5d22 |
0x000a5d1e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a5d20 ldr r5, [r3, 0x24] | r5 = *((r3 + 0x24));
| }
0x000a5d22 asrs r3, r5, 0x1f | r3 = r5 >> 0x1f;
0x000a5d24 mov r2, r5 | r2 = r5;
| label_34:
0x000a5d26 mov r0, sl | r0 = sl;
0x000a5d28 bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a5d2c ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a5d2e ldr r0, [sp, 0x20] | r0 = x;
0x000a5d30 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a5d34 b.w 0xa4e6a | goto label_0;
0x000a5d38 movs r3, 0 | r3 = 0;
0x000a5d3a str r3, [sp, 0x90] | var_90h = r3;
0x000a5d3c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5d3e cmp r3, 0 |
| if (r3 != 0) {
0x000a5d40 bne.w 0xa6896 | goto label_232;
| }
| label_58:
0x000a5d44 mvn r3, 0x80000000 | r3 = ~0x80000000;
0x000a5d48 str r3, [sp, 0x90] | var_90h = r3;
| label_59:
0x000a5d4a ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a5d4c movs r1, 0 | r1 = 0;
0x000a5d4e ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a5d50 movs r5, 0 | r5 = 0;
0x000a5d52 bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x000a5d56 movs r3, 1 | r3 = 1;
0x000a5d58 ldr r2, [sp, 0x90] | r2 = var_90h;
0x000a5d5a movs r1, 0x47 | r1 = 0x47;
0x000a5d5c mov r0, sl | r0 = sl;
0x000a5d5e str r5, [sp] | *(sp) = r5;
0x000a5d60 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5d64 ldrd r4, r3, [sl, 0x6c] | __asm ("ldrd r4, r3, [sl, 0x6c]");
0x000a5d68 cmp r4, r3 |
| if (r4 >= r3) {
0x000a5d6a bge.w 0xa7ad0 | goto label_233;
| }
0x000a5d6e movs r3, 0x14 | r3 = 0x14;
0x000a5d70 ldr.w r1, [sl, 0x68] | r1 = *((sl + 0x68));
0x000a5d74 mul r3, r4, r3 | r3 = r4 * r3;
0x000a5d78 ldr r6, [sp, 0x30] | r6 = var_30h;
0x000a5d7a adds r2, r4, 1 | r2 = r4 + 1;
0x000a5d7c movs r0, 0x3d | r0 = 0x3d;
0x000a5d7e str.w r2, [sl, 0x6c] | __asm ("str.w r2, [sl, 0x6c]");
0x000a5d82 adds r2, r1, r3 | r2 = r1 + r3;
0x000a5d84 strd r6, r5, [r2, 4] | __asm ("strd r6, r5, [r2, 4]");
0x000a5d88 strd r5, r5, [r2, 0xc] | __asm ("strd r5, r5, [r2, 0xc]");
0x000a5d8c str r0, [r1, r3] | *((r1 + r3)) = r0;
| label_136:
0x000a5d8e movs r5, 0 | r5 = 0;
0x000a5d90 movs r2, 1 | r2 = 1;
0x000a5d92 mov r3, r5 | r3 = r5;
0x000a5d94 movs r1, 0x54 | r1 = 0x54;
0x000a5d96 mov r0, sl | r0 = sl;
0x000a5d98 str r5, [sp] | *(sp) = r5;
0x000a5d9a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5d9e mov.w r3, -1 | r3 = -1;
0x000a5da2 movs r2, 1 | r2 = 1;
0x000a5da4 movs r1, 0x56 | r1 = 0x56;
0x000a5da6 mov r0, sl | r0 = sl;
0x000a5da8 str r5, [sp] | *(sp) = r5;
0x000a5daa bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5dae mov r3, r4 | r3 = r4;
0x000a5db0 movs r2, 1 | r2 = 1;
0x000a5db2 movs r1, 0x31 | r1 = 0x31;
0x000a5db4 mov r0, sl | r0 = sl;
0x000a5db6 str r5, [sp] | *(sp) = r5;
0x000a5db8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5dbc ldr.w r3, [sl] | r3 = *(sl);
0x000a5dc0 cmp r4, r5 |
0x000a5dc2 ldr.w r2, [sl, 0x6c] | r2 = *((sl + 0x6c));
0x000a5dc6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a5dca it lt |
| if (r4 >= r5) {
0x000a5dcc addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x000a5dd0 cmp r3, 0 |
| if (r3 != 0) {
0x000a5dd2 bne.w 0xa7706 | goto label_234;
| }
0x000a5dd6 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
0x000a5dda movs r1, 0x14 | r1 = 0x14;
0x000a5ddc mla r3, r1, r4, r3 | __asm ("mla r3, r1, r4, r3");
| label_111:
0x000a5de0 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000a5de2 b.w 0xa4e56 | goto label_5;
0x000a5de6 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5de8 cmp r3, 0 |
| if (r3 != 0) {
0x000a5dea bne.w 0xa66f8 | goto label_235;
| }
| label_52:
0x000a5dee mov.w r0, -1 | r0 = -1;
0x000a5df2 mov.w r1, -1 | r1 = -1;
0x000a5df6 blx 0x86b0 | r0 = fcn_000086b0 ();
0x000a5dfa mov r2, r0 | r2 = r0;
0x000a5dfc mov r3, r1 | r3 = r1;
0x000a5dfe b 0xa5772 | goto label_28;
0x000a5e00 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5e02 cmp r3, 0 |
| if (r3 == 0) {
0x000a5e04 beq.w 0xa59d6 | goto label_27;
| }
0x000a5e08 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a5e0a ldr r1, [sp, 0x28] | r1 = var_28h;
0x000a5e0c ldr r0, [sp, 0x20] | r0 = x;
0x000a5e0e bl 0x1cadc | fcn_0001cadc (r0, r1, r2, r3);
0x000a5e10 cdp2 p6, 6, c4, c5, c7, 0 | __asm ("cdp2 p6, 6, c4, c5, c7, 0");
0x000a5e14 cmp r0, 0 |
| if (r0 == 0) {
0x000a5e16 beq.w 0xa7bac | goto label_236;
| }
| label_144:
0x000a5e1a ldr r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x000a5e1c cmp r1, 0 |
| if (r1 == 0) {
0x000a5e1e beq.w 0xa7c08 | goto label_237;
| }
0x000a5e22 ldr r0, [sp, 0x20] | r0 = x;
0x000a5e24 bl 0xfdfc | r0 = fcn_0000fdfc (r0, r1);
0x000a5e28 mov r1, r0 | r1 = r0;
| label_149:
0x000a5e2a ldr r2, [sp, 0x38] | r2 = var_38h;
0x000a5e2c ldr.w sb, [r7, 0xc] | sb = *((r7 + 0xc));
0x000a5e30 ldrd r3, r2, [r2, 8] | __asm ("ldrd r3, r2, [r2, 8]");
0x000a5e34 orrs r3, r2 | r3 |= r2;
0x000a5e36 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a5e38 itete ne |
| if (r3 == r2) {
0x000a5e3a movne r3, 6 | r3 = 6;
| }
| if (r3 != r2) {
0x000a5e3c moveq r3, 3 | r3 = 3;
| }
| if (r3 != r2) {
0x000a5e3e ldrhne r4, [r7, 0x34] | __asm ("ldrhne r4, [r7, 0x34]");
| }
| if (r3 == r2) {
0x000a5e40 ldrheq r4, [r7, 0x32] | __asm ("ldrheq r4, [r7, 0x32]");
| }
0x000a5e42 mov r0, r2 | r0 = r2;
0x000a5e44 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a5e46 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x000a5e48 cmp r3, 0 |
0x000a5e4a it ne |
| if (r3 == 0) {
0x000a5e4c movne r0, r3 | r0 = r3;
| }
0x000a5e4e bl 0x572e0 | fcn_000572e0 (r0, r1);
0x000a5e52 cmp r4, 0 |
| if (r4 == 0) {
0x000a5e54 beq.w 0xa56ca | goto label_22;
| }
0x000a5e58 ldr.w r8, [pc, 0x4ec] | r8 = *(0x000a6348);
0x000a5e5c movs r6, 0 | r6 = 0;
0x000a5e5e ldr.w fp, [sp, 0x38] | fp = var_38h;
0x000a5e62 add r8, pc | r8 += pc;
0x000a5e64 str.w r8, [sp, 0x30] | __asm ("str.w r8, [var_30h]");
0x000a5e68 ldr.w r8, [sp, 0x24] | r8 = var_24h;
0x000a5e6c b 0xa5e86 | goto label_238;
| label_29:
0x000a5e6e str r6, [sp] | *(sp) = r6;
0x000a5e70 adds r5, 1 | r5++;
0x000a5e72 ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x000a5e76 movs r2, 1 | r2 = 1;
0x000a5e78 movs r1, 0x54 | r1 = 0x54;
0x000a5e7a mov r0, sl | r0 = sl;
0x000a5e7c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5e80 cmp r4, r5 |
| if (r4 == r5) {
0x000a5e82 beq.w 0xa56ca | goto label_22;
| }
| label_238:
0x000a5e86 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000a5e88 mov r0, sl | r0 = sl;
0x000a5e8a ldrsh.w r3, [r3, r5, lsl 1] | offset_2 = r5 << 1;
| r3 = *((r3 + offset_2));
0x000a5e8e cmp r3, 0 |
0x000a5e90 ittet ge |
| if (r3 < 0) {
0x000a5e92 ldrge r2, [sb, 4] | r2 = *((sb + 4));
| }
| if (r3 >= 0) {
0x000a5e96 addlt r1, r3, r3, lsl 1 | r1 = r3 + (r3 << 1);
| }
| if (r3 < 0) {
0x000a5e9a movs r2, 0 | r2 = 0;
| }
| if (r3 >= 0) {
0x000a5e9c ldr.w r2, [r2, r1, lsl 2] | offset_3 = r1 << 2;
| r2 = *((r2 + offset_3));
| }
0x000a5ea0 movs r1, 1 | r1 = 1;
0x000a5ea2 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x000a5ea6 mov r3, r5 | r3 = r5;
0x000a5ea8 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a5eaa bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a5eae ldrd r3, r2, [fp, 8] | __asm ("ldrd r3, r2, [arg_8h]");
0x000a5eb2 orrs r3, r2 | r3 |= r2;
| if (r3 == r2) {
0x000a5eb4 beq 0xa5e6e | goto label_29;
| }
0x000a5eb6 ldrh r2, [r7, 0x32] | r2 = *((r7 + 0x32));
0x000a5eb8 movs r1, 4 | r1 = 4;
0x000a5eba ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x000a5ebc mov r0, sl | r0 = sl;
0x000a5ebe cmp r2, r5 |
0x000a5ec0 ite le |
| if (r2 > r5) {
0x000a5ec2 movle r2, 0 | r2 = 0;
| }
| if (r2 <= r5) {
0x000a5ec4 movgt r2, 1 | r2 = 1;
| }
0x000a5ec6 ldrb r3, [r3, r5] | r3 = *((r3 + r5));
0x000a5ec8 str r2, [sp, 4] | var_4h = r2;
0x000a5eca ldr r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x000a5ecc ldr.w r2, [r2, r5, lsl 2] | offset_4 = r5 << 2;
| r2 = *((r2 + offset_4));
0x000a5ed0 str r2, [sp] | *(sp) = r2;
0x000a5ed2 ldr.w r2, [pc, 0x478] | r2 = *(0x000a634c);
0x000a5ed6 add r2, pc | r2 += pc;
0x000a5ed8 bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a5edc b 0xa5e6e | goto label_29;
0x000a5ede ldr r3, [r4] | r3 = *(r4);
0x000a5ee0 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a5ee2 cmp r3, 0 |
0x000a5ee4 it ne |
| if (r3 == 0) {
0x000a5ee6 movne r7, r2 | r7 = r2;
| }
0x000a5ee8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5eea cmp r3, 0 |
| if (r3 != 0) {
0x000a5eec bne.w 0xa6876 | goto label_239;
| }
| label_57:
0x000a5ef0 ldr r1, [sp, 0x24] | r1 = var_24h;
0x000a5ef2 movs r4, 3 | r4 = 3;
0x000a5ef4 mov r3, r5 | r3 = r5;
0x000a5ef6 movs r5, 1 | r5 = 1;
0x000a5ef8 mov r2, r7 | r2 = r7;
0x000a5efa mov r0, sl | r0 = sl;
0x000a5efc str r4, [r1, 0x2c] | *((r1 + 0x2c)) = r4;
0x000a5efe mov r1, r4 | r1 = r4;
0x000a5f00 str r5, [sp] | *(sp) = r5;
0x000a5f02 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5f06 movs r1, 0 | r1 = 0;
0x000a5f08 mov r3, r4 | r3 = r4;
0x000a5f0a str r1, [sp] | *(sp) = r1;
0x000a5f0c mov r2, r5 | r2 = r5;
0x000a5f0e mov r0, sl | r0 = sl;
0x000a5f10 movs r1, 0x54 | r1 = 0x54;
0x000a5f12 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a5f16 b.w 0xa4e56 | goto label_5;
0x000a5f1a ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5f1c cmp r3, 0 |
| if (r3 != 0) {
0x000a5f1e bne.w 0xa662e | goto label_240;
| }
| label_49:
0x000a5f22 ldr r3, [sp, 0x20] | r3 = x;
0x000a5f24 ldr.w r3, [r3, 0x1ec] | r3 = *((r3 + 0x1ec));
0x000a5f28 b.w 0xa4fc8 | goto label_30;
0x000a5f2c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5f2e ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x000a5f30 cmp r3, 0 |
| if (r3 != 0) {
0x000a5f32 bne.w 0xa68b2 | goto label_241;
| }
0x000a5f36 mov.w r4, -1 | r4 = -1;
| label_60:
0x000a5f3a mov r1, r4 | r1 = r4;
0x000a5f3c mov r0, r6 | r0 = r6;
0x000a5f3e bl 0x1a08c | r0 = fcn_0001a08c (r0, r1);
0x000a5f42 mov r2, r0 | r2 = r0;
0x000a5f44 mov r0, sl | r0 = sl;
0x000a5f46 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000a5f48 bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a5f4c b.w 0xa4e56 | goto label_5;
0x000a5f50 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5f52 cmp r3, 0 |
| if (r3 == 0) {
0x000a5f54 beq.w 0xa78b0 | goto label_242;
| }
0x000a5f58 movs r3, 0 | r3 = 0;
0x000a5f5a add r1, sp, 0x90 | r1 += var_90h;
0x000a5f5c ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a5f5e str r3, [sp, 0x90] | var_90h = r3;
0x000a5f60 bl 0xd320 | fcn_0000d320 (r0, r1);
0x000a5f64 ldr r1, [sp, 0x90] | r1 = var_90h;
0x000a5f66 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000a5f68 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000a5f6a str r1, [r3, 0x50] | *((r3 + 0x50)) = r1;
0x000a5f6c bl 0x19cc8 | fcn_00019cc8 (r0, r1);
0x000a5f70 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a5f72 ldr r0, [sp, 0x20] | r0 = x;
0x000a5f74 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a5f78 b.w 0xa4e62 | goto label_16;
0x000a5f7c ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a5f7e cmp r3, 0 |
| if (r3 == 0) {
0x000a5f80 beq.w 0xa59d6 | goto label_27;
| }
0x000a5f84 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a5f86 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000a5f88 ldr r0, [sp, 0x20] | r0 = x;
0x000a5f8a bl 0x3e27c | r0 = fcn_0003e27c (r0, r1, r2, r3);
0x000a5f8e mov fp, r0 |
0x000a5f90 cmp r0, 0 |
| if (r0 == 0) {
0x000a5f92 beq.w 0xa56ca | goto label_22;
| }
0x000a5f96 ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
0x000a5f9a cmp r3, 0 |
| if (r3 != 0) {
0x000a5f9c bne.w 0xa56ca | goto label_22;
| }
0x000a5fa0 ldr r4, [r0, 0x30] | r4 = *((r0 + 0x30));
0x000a5fa2 cmp r4, 0 |
| if (r4 == 0) {
0x000a5fa4 beq.w 0xa56ca | goto label_22;
| }
0x000a5fa8 ldr r1, [r0, 0x3c] | r1 = *((r0 + 0x3c));
0x000a5faa cmp r1, 0 |
| if (r1 == 0) {
0x000a5fac beq.w 0xa7bfc | goto label_243;
| }
0x000a5fb0 ldr r0, [sp, 0x20] | r0 = x;
0x000a5fb2 bl 0xfdfc | r0 = fcn_0000fdfc (r0, r1);
0x000a5fb6 mov r1, r0 | r1 = r0;
| label_148:
0x000a5fb8 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a5fba mov.w r8, 0 | r8 = 0;
0x000a5fbe ldr.w sb, [pc, 0x390] | sb = *(0x000a6350);
0x000a5fc2 ldr r3, [r2, 0x74] | r3 = *((r2 + 0x74));
0x000a5fc4 mov r0, r2 | r0 = r2;
0x000a5fc6 add sb, pc | sb += pc;
0x000a5fc8 cmp r3, 0 |
0x000a5fca it ne |
| if (r3 == 0) {
0x000a5fcc movne r0, r3 | r0 = r3;
| }
0x000a5fce movs r3, 8 | r3 = 8;
0x000a5fd0 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a5fd2 bl 0x572e0 | fcn_000572e0 (r0, r1);
0x000a5fd6 ldr r3, [pc, 0x37c] |
0x000a5fd8 mov lr, sb | lr = sb;
0x000a5fda mov sb, r8 | sb = r8;
0x000a5fdc add r3, pc | r3 = 0x14c336;
0x000a5fde str r3, [sp, 0x24] | var_24h = r3;
0x000a5fe0 ldr r3, [pc, 0x374] |
0x000a5fe2 add r3, pc | r3 = 0x14c33e;
0x000a5fe4 str r3, [sp, 0x30] | var_30h = r3;
0x000a5fe6 ldr r3, [pc, 0x374] |
0x000a5fe8 add r3, pc | r3 = 0x14c34a;
0x000a5fea mov r8, r3 | r8 = r3;
| label_31:
0x000a5fec ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000a5fee cmp r3, 0 |
0x000a5ff0 ittt gt |
| if (r3 <= 0) {
0x000a5ff2 movgt r6, r4 | r6 = r4;
| }
| if (r3 <= 0) {
0x000a5ff4 movgt r5, 0 | r5 = 0;
| }
| if (r3 <= 0) {
0x000a5ff6 movgt r7, lr | r7 = lr;
| }
| if (r3 <= 0) {
0x000a5ff8 ble 0xa6062 | goto label_244;
| }
| do {
0x000a5ffa ldr r2, [r6, 0x24] | r2 = *((r6 + 0x24));
0x000a5ffc ldrb r3, [r4, 0x1a] | r3 = *((r4 + 0x1a));
0x000a5ffe ldr.w r1, [fp, 4] | r1 = *(arg_4h);
0x000a6002 ldr r0, [r6, 0x28] | r0 = *((r6 + 0x28));
0x000a6004 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000a6008 subs r3, 7 | r3 -= 7;
0x000a600a ldr.w r1, [r1, r2, lsl 2] | offset_5 = r2 << 2;
| r1 = *((r1 + offset_5));
0x000a600e ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x000a6010 cmp r3, 3 |
| if (r3 > 3) {
0x000a6012 bhi.w 0xa7c2c | goto label_245;
| }
| /* switch table (4 cases) at 0xa601a */
0x000a6016 tbb [pc, r3] | __asm ("tbb aav.0x000000ff");
0x000a601e ldr.w ip, [sp, 0x24] | ip = var_24h;
| label_33:
0x000a6022 ldrb r3, [r4, 0x19] | r3 = *((r4 + 0x19));
0x000a6024 subs r3, 7 | r3 -= 7;
0x000a6026 cmp r3, 3 |
| if (r3 > 3) {
0x000a6028 bhi.w 0xa7c36 | goto label_246;
| }
| /* switch table (4 cases) at 0xa6030 */
0x000a602c tbb [pc, r3] | __asm ("tbb aav.0x000000ff");
0x000a6034 ldr r3, [pc, 0x328] |
0x000a6036 add r3, pc | r3 = 0x14c39a;
| label_32:
0x000a6038 strd ip, r3, [sp, 0x10] | __asm ("strd ip, r3, [sp, 0x10]");
0x000a603c adds r6, 8 | r6 += 8;
0x000a603e ldr r3, [pc, 0x324] |
0x000a6040 strd r1, r0, [sp, 8] | __asm ("strd r1, r0, [sp, 8]");
0x000a6044 movs r1, 1 | r1 = 1;
0x000a6046 strd r5, r2, [sp] | __asm ("strd r5, r2, [sp]");
0x000a604a mov r0, sl | r0 = sl;
0x000a604c add r3, pc | r3 = 0x14c3b6;
0x000a604e mov r2, r8 | r2 = r8;
0x000a6050 str r3, [sp, 0x18] | var_18h = r3;
0x000a6052 mov r3, sb | r3 = sb;
0x000a6054 bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a6058 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000a605a adds r5, 1 | r5++;
0x000a605c cmp r3, r5 |
0x000a605e bgt 0xa5ffa |
| } while (r3 > r5);
0x000a6060 mov lr, r7 | lr = r7;
| label_244:
0x000a6062 ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x000a6064 add.w sb, sb, 1 | sb++;
0x000a6068 cmp r4, 0 |
| if (r4 != 0) {
0x000a606a bne 0xa5fec | goto label_31;
| }
0x000a606c b.w 0xa56ca | goto label_22;
0x000a6070 ldr r3, [pc, 0x2f4] |
0x000a6072 add r3, pc | r3 = 0x14c3de;
0x000a6074 b 0xa6038 | goto label_32;
0x000a6076 ldr.w ip, [pc, 0x2f4] | ip = *(0x000a636c);
0x000a607a add ip, pc |
0x000a607c b 0xa6022 | goto label_33;
0x000a607e mov ip, r7 |
0x000a6080 b 0xa6022 | goto label_33;
0x000a6082 ldr r3, [pc, 0x2ec] |
0x000a6084 add r3, pc | r3 = 0x14c3fa;
0x000a6086 b 0xa6038 | goto label_32;
0x000a6088 ldr r3, [pc, 0x2e8] |
0x000a608a add r3, pc | r3 = 0x14c402;
0x000a608c b 0xa6038 | goto label_32;
0x000a608e ldr.w ip, [sp, 0x30] | ip = var_30h;
0x000a6092 b 0xa6022 | goto label_33;
0x000a6094 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a6096 ldr r5, [r6, 4] | r5 = *((r6 + 4));
0x000a6098 cmp r3, 0 |
| if (r3 == 0) {
0x000a609a beq.w 0xa792a | goto label_247;
| }
0x000a609e ldr r1, [pc, 0x2d8] |
0x000a60a0 ldr r4, [sp, 0x28] | r4 = var_28h;
0x000a60a2 add r1, pc | r1 = 0x14c420;
0x000a60a4 mov r0, r4 | r0 = r4;
0x000a60a6 bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x000a60aa cmp r0, 0 |
| if (r0 == 0) {
0x000a60ac beq.w 0xa779e | goto label_248;
| }
0x000a60b0 ldr r1, [pc, 0x2c8] |
0x000a60b2 mov r0, r4 | r0 = r4;
0x000a60b4 add r1, pc | r1 = 0x14c434;
0x000a60b6 bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x000a60ba cmp r0, 0 |
| if (r0 == 0) {
0x000a60bc beq.w 0xa7a7a | goto label_249;
| }
0x000a60c0 ldr r1, [pc, 0x2bc] |
0x000a60c2 mov r0, r4 | r0 = r4;
0x000a60c4 add r1, pc | r1 = 0x14c448;
0x000a60c6 bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x000a60ca cmp r0, 0 |
| if (r0 == 0) {
0x000a60cc beq.w 0xa7b88 | goto label_250;
| }
0x000a60d0 movs r3, 0 | r3 = 0;
0x000a60d2 mov r0, r4 | r0 = r4;
0x000a60d4 add r1, sp, 0x90 | r1 += var_90h;
0x000a60d6 str r3, [sp, 0x90] | var_90h = r3;
0x000a60d8 bl 0xd320 | fcn_0000d320 (r0, r1);
0x000a60dc ldr r4, [sp, 0x90] | r4 = var_90h;
0x000a60de cmp r4, 2 |
| if (r4 > 2) {
0x000a60e0 bhi.w 0xa779e | goto label_248;
| }
0x000a60e4 ldr r3, [sp, 0x20] | r3 = x;
0x000a60e6 mov r0, r5 | r0 = r5;
0x000a60e8 mov r1, r4 | r1 = r4;
0x000a60ea strb.w r4, [r3, 0x5a] | *((r3 + 0x5a)) = r4;
0x000a60ee bl 0x19ae8 | r0 = fcn_00019ae8 (r0, r1);
0x000a60f2 cmp r0, 0 |
| if (r0 != 0) {
0x000a60f4 bne.w 0xa56ca | goto label_22;
| }
0x000a60f8 subs r4, 1 | r4--;
0x000a60fa cmp r4, 1 |
| if (r4 > 1) {
0x000a60fc bhi.w 0xa56ca | goto label_22;
| }
| label_133:
0x000a6100 ldr r2, [pc, 0x280] |
0x000a6102 movs r1, 5 | r1 = 5;
0x000a6104 mov r0, sl | r0 = sl;
0x000a6106 ldr.w r5, [sl, 0x6c] | r5 = *((sl + 0x6c));
0x000a610a add r2, pc |
0x000a610c add.w r2, r2, 0xca0 | r2 = 0x14d132;
0x000a6110 adds r5, 4 | r5 += 4;
0x000a6112 bl 0x2db78 | fcn_0002db78 (r0, r1, r2);
0x000a6116 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000a6118 movs r3, 1 | r3 = 1;
0x000a611a ldr.w r2, [sl, 0x98] | r2 = *((sl + 0x98));
0x000a611e str r4, [r0, 0x5c] | *((r0 + 0x5c)) = r4;
0x000a6120 cmp r1, 1 |
0x000a6122 str r5, [r0, 0x30] | *((r0 + 0x30)) = r5;
0x000a6124 lsl.w r3, r3, r1 | r3 <<= r1;
0x000a6128 str r1, [r0, 4] | *((r0 + 4)) = r1;
0x000a612a str r1, [r0, 0x18] | *((r0 + 0x18)) = r1;
0x000a612c orr.w r2, r2, r3 | r2 |= r3;
0x000a6130 str r1, [r0, 0x54] | *((r0 + 0x54)) = r1;
0x000a6132 str.w r2, [sl, 0x98] | __asm ("str.w r2, [sl, 0x98]");
| if (r1 == 1) {
0x000a6136 beq.w 0xa56ca | goto label_22;
| }
0x000a613a ldr.w r2, [sl] | r2 = *(sl);
0x000a613e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a6140 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x000a6142 add r2, sb | r2 += sb;
0x000a6144 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000a6146 ldrb r2, [r2, 9] | r2 = *((r2 + 9));
0x000a6148 cmp r2, 0 |
| if (r2 == 0) {
0x000a614a beq.w 0xa56cc | goto label_23;
| }
0x000a614e ldr.w r2, [sl, 0x9c] | r2 = *((sl + 0x9c));
0x000a6152 ldr r0, [sp, 0x20] | r0 = x;
0x000a6154 orrs r2, r3 | r2 |= r3;
0x000a6156 str.w r2, [sl, 0x9c] | __asm ("str.w r2, [sl, 0x9c]");
0x000a615a bl 0x16808 | fcn_00016808 (r0, r1);
0x000a615e b.w 0xa4e62 | goto label_16;
0x000a6162 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a6164 cmp r3, 0 |
| if (r3 != 0) {
0x000a6166 bne.w 0xa67f6 | goto label_251;
| }
0x000a616a ldr r3, [sp, 0x20] | r3 = x;
0x000a616c ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000a616e lsls r0, r3, 0x1a | r0 = r3 << 0x1a;
| if (r0 < r3) {
0x000a6170 bmi.w 0xa7b2e | goto label_252;
| }
0x000a6174 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a6176 mov r3, r2 | r3 = r2;
0x000a6178 b 0xa5d26 | goto label_34;
0x000a617a ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a617c cmp r3, 0 |
| if (r3 == 0) {
0x000a617e beq.w 0xa79d8 | goto label_253;
| }
0x000a6182 ldr r3, [sp, 0x20] | r3 = x;
0x000a6184 ldr r2, [sp, 0x38] | r2 = var_38h;
0x000a6186 ldrb.w r3, [r3, 0x55] | r3 = *((r3 + 0x55));
0x000a618a ldrd r4, r5, [r2, 8] | __asm ("ldrd r4, r5, [r2, 8]");
| if (r3 == 0) {
0x000a618e cbnz r3, 0xa6194 |
0x000a6190 bic r4, r4, 0x4000 | r4 = BIT_MASK (r4, 0x4000);
| }
0x000a6194 movs r2, 0 | r2 = 0;
0x000a6196 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a6198 movs r1, 1 | r1 = 1;
0x000a619a bl 0xf81c | fcn_0000f81c (r0, r1, r2, r3, r4, r5, r6);
0x000a619e ldr r2, [sp, 0x20] | r2 = x;
0x000a61a0 ldr r3, [r2, 0x20] | r3 = *((r2 + 0x20));
0x000a61a2 cmp r0, 0 |
| if (r0 == 0) {
0x000a61a4 beq.w 0xa7764 | goto label_254;
| }
0x000a61a8 orrs r3, r4 | r3 |= r4;
0x000a61aa str r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
0x000a61ac ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x000a61ae orrs r3, r5 | r3 |= r5;
0x000a61b0 str r3, [r2, 0x24] | *((r2 + 0x24)) = r3;
| label_118:
0x000a61b2 mov r0, sl | r0 = sl;
0x000a61b4 movs r1, 0xa6 | r1 = 0xa6;
0x000a61b6 bl 0x2e448 | fcn_0002e448 (r0, r1);
0x000a61ba ldr r0, [sp, 0x20] | r0 = x;
0x000a61bc ldrb.w r3, [r0, 0x55] | r3 = *((r0 + 0x55));
0x000a61c0 cmp r3, 0 |
| if (r3 != 0) {
0x000a61c2 bne.w 0xa57de | goto label_35;
| }
| label_140:
0x000a61c6 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a61c8 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a61cc b.w 0xa4e62 | goto label_16;
| label_163:
0x000a61d0 mov r4, r1 | r4 = r1;
0x000a61d2 str.w sl, [sp, 0x30] | __asm ("str.w sl, [var_30h]");
0x000a61d6 b 0xa623a | goto label_147;
| label_36:
0x000a61d8 cmp r3, 1 |
| if (r3 == 1) {
0x000a61da beq.w 0xa69c8 | goto label_255;
| }
0x000a61de ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x000a61e0 lsls r6, r3, 0x13 | r6 = r3 << 0x13;
| if (r6 >= r3) {
0x000a61e2 bpl.w 0xa69d0 | goto label_256;
| }
0x000a61e6 ldr.w sl, [pc, 0x1a0] | sl = *(0x000a6388);
0x000a61ea add sl, pc | sl += pc;
| label_37:
0x000a61ec ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000a61ee mov r6, r1 | r6 = r1;
0x000a61f0 ldr r1, [pc, 0x198] |
0x000a61f2 movs r2, 7 | r2 = 7;
0x000a61f4 mov r0, r6 | r0 = r6;
0x000a61f6 ldr.w r3, [r3, sb] | r3 = *((r3 + sb));
0x000a61fa add r1, pc | r1 = 0x14c58a;
0x000a61fc str r3, [sp, 0x24] | var_24h = r3;
0x000a61fe blx 0x8154 | fcn_00008154 ();
0x000a6202 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a6204 cmp r0, 0 |
| if (r0 == 0) {
0x000a6206 beq 0xa62a4 | goto label_257;
| }
| label_41:
0x000a6208 ldr.w ip, [r7, 0x1c] | ip = *((r7 + 0x1c));
0x000a620c movs r1, 1 | r1 = 1;
0x000a620e ldr r2, [pc, 0x180] |
0x000a6210 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a6212 ubfx lr, ip, 0x10, 1 | lr = (ip >> 0x10) & ((1 << 1) - 1);
0x000a6216 ubfx ip, ip, 7, 1 | ip = (ip >> 7) & ((1 << 1) - 1);
0x000a621a str.w lr, [sp, 0x10] | __asm ("str.w lr, [var_10h]");
0x000a621e add r2, pc | r2 = 0x14c5b4;
0x000a6220 str.w ip, [sp, 0xc] | __asm ("str.w ip, [var_ch]");
0x000a6224 ldrsh.w r7, [r7, 0x22] | r7 = *((r7 + 0x22));
0x000a6228 strd r6, sl, [sp] | __asm ("strd r6, sl, [sp]");
0x000a622c str r7, [sp, 8] | var_8h = r7;
0x000a622e bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
| do {
0x000a6232 ldr r4, [r4] | r4 = *(r4);
0x000a6234 cmp r4, 0 |
| if (r4 == 0) {
0x000a6236 beq.w 0xa6cdc | goto label_258;
| }
| label_147:
0x000a623a ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a623c ldr r7, [r4, 8] | r7 = *((r4 + 8));
0x000a623e ldr r1, [r7] | r1 = *(r7);
| if (r3 == 0) {
0x000a6240 cbz r3, 0xa624e | goto label_259;
| }
0x000a6242 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a6244 blx 0x8540 | r0 = fcn_00008540 ();
0x000a6248 cmp r0, 0 |
0x000a624a bne 0xa6232 |
| } while (r0 != 0);
0x000a624c ldr r1, [r7] | r1 = *(r7);
| label_259:
0x000a624e ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
0x000a6252 cmp r3, 2 |
| if (r3 != 2) {
0x000a6254 bne 0xa61d8 | goto label_36;
| }
0x000a6256 ldr.w sl, [pc, 0x13c] | sl = *(0x000a6394);
0x000a625a add sl, pc | sl += pc;
0x000a625c b 0xa61ec | goto label_37;
| label_196:
0x000a625e cmp r3, 0 |
| if (r3 != 0) {
0x000a6260 bne.w 0xa569c | goto label_38;
| }
0x000a6264 ldr r5, [sp, 0x20] | r5 = x;
0x000a6266 ldrb r1, [r4, 4] | r1 = *((r4 + 4));
0x000a6268 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x000a626a mov r0, r5 | r0 = r5;
0x000a626c cmp r1, 0 |
0x000a626e it eq |
| if (r1 != 0) {
0x000a6270 moveq r1, 2 | r1 = 2;
| }
0x000a6272 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x000a6274 strb.w r1, [r2, 0x4d] | *((r2 + 0x4d)) = r1;
0x000a6278 ldr r2, [pc, 0x11c] |
0x000a627a strb.w r1, [r5, 0x54] | *((r5 + 0x54)) = r1;
0x000a627e add r2, pc |
0x000a6280 add.w r2, r2, 0x2dc | r2 = 0x14c8f6;
0x000a6284 bl 0x2402c | fcn_0002402c (r0, r1, r2, r3);
0x000a6288 str r0, [r5, 8] | *((r5 + 8)) = r0;
0x000a628a b.w 0xa56c2 | goto label_39;
| label_164:
0x000a628e ldr.w r0, [r5, 0x108] | r0 = *((r5 + 0x108));
0x000a6292 ldr r1, [sp, 0x40] | r1 = var_40h;
0x000a6294 bl 0x21598 | fcn_00021598 (r0, r1);
0x000a6298 ldr.w r3, [r5, 0x108] | r3 = *((r5 + 0x108));
0x000a629c movs r2, 7 | r2 = 7;
0x000a629e str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000a62a0 b.w 0xa50a0 | goto label_40;
| label_257:
0x000a62a4 ldr r0, [pc, 0xf4] |
0x000a62a6 add.w lr, r6, 6 | lr = r6 + 6;
0x000a62aa mov ip, lr |
0x000a62ac add r0, pc | r0 = 0x14c64c;
0x000a62ae adds r0, 6 | r0 += 6;
| do {
| label_42:
0x000a62b0 ldrb r2, [ip, 1]! | r2 = *((ip += 1));
0x000a62b4 ldrb r1, [r0, 1]! | r1 = *((r0 += 1));
0x000a62b8 cmp r2, r1 |
| if (r2 == r1) {
0x000a62ba beq 0xa62f0 | goto label_260;
| }
0x000a62bc add r2, r8 | r2 += r8;
0x000a62be add r1, r8 | r1 += r8;
0x000a62c0 ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000a62c4 ldrb.w r1, [r1, 0x140] | r1 = *((r1 + 0x140));
0x000a62c8 cmp r2, r1 |
0x000a62ca beq 0xa62b0 |
| } while (r2 == r1);
0x000a62cc ldr r0, [pc, 0xd0] |
0x000a62ce add r0, pc | r0 = 0x14c672;
0x000a62d0 adds r0, 6 | r0 += 6;
| do {
| label_43:
0x000a62d2 ldrb r2, [lr, 1]! | r2 = *((lr += 1));
0x000a62d6 ldrb r1, [r0, 1]! | r1 = *((r0 += 1));
0x000a62da cmp r2, r1 |
| if (r2 == r1) {
0x000a62dc beq 0xa62fa | goto label_261;
| }
0x000a62de add r2, fp | r2 += fp;
0x000a62e0 add r1, fp | r1 += fp;
0x000a62e2 ldrb.w ip, [r2, 0x140] | ip = *((r2 + 0x140));
0x000a62e6 ldrb.w r2, [r1, 0x140] | r2 = *((r1 + 0x140));
0x000a62ea cmp ip, r2 |
0x000a62ec beq 0xa62d2 |
| } while (ip == r2);
0x000a62ee b 0xa6208 | goto label_41;
| label_260:
0x000a62f0 cmp r2, 0 |
| if (r2 != 0) {
0x000a62f2 bne 0xa62b0 | goto label_42;
| }
0x000a62f4 ldr r6, [pc, 0xac] |
0x000a62f6 add r6, pc | r6 = 0x14c69e;
0x000a62f8 b 0xa6208 | goto label_41;
| label_261:
0x000a62fa cmp r2, 0 |
| if (r2 != 0) {
0x000a62fc bne 0xa62d2 | goto label_43;
| }
0x000a62fe ldr r6, [pc, 0xa8] |
0x000a6300 add r6, pc | r6 = 0x14c6ae;
0x000a6302 b 0xa6208 | goto label_41;
| label_157:
0x000a63ac ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a63ae ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x000a63b0 subs r3, 1 | r3--;
0x000a63b2 cmp r3, 0x2a |
| if (r3 <= 0x2a) {
0x000a63b4 bhi 0xa646c |
0x000a63b6 adr r2, 8 | r2 = 8;
0x000a63b8 ldr.w r3, [r2, r3, lsl 2] | offset_6 = r3 << 2;
| r3 = *((r2 + offset_6));
0x000a63bc add r2, r3 | r2 += r3;
0x000a63be bx r2 | return uint32_t (*r2)() ();
| }
| label_159:
0x000a646c movs r3, 0 | r3 = 0;
0x000a646e add r1, sp, 0x90 | r1 += var_90h;
0x000a6470 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a6472 str r3, [sp, 0x90] | var_90h = r3;
0x000a6474 bl 0xd320 | fcn_0000d320 (r0, r1);
0x000a6478 ldr r1, [sp, 0x90] | r1 = var_90h;
0x000a647a ldr r0, [sp, 0x20] | r0 = x;
0x000a647c blx 0x8a60 | fcn_00008a60 ();
0x000a6480 b.w 0xa4fc2 | goto label_44;
| label_199:
0x000a6484 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a6486 add r1, sp, 0x90 | r1 += var_90h;
0x000a6488 bl 0x10b24 | r0 = fcn_00010b24 (r0, r1);
0x000a648c cmp r0, 0 |
| if (r0 != 0) {
0x000a648e bne.w 0xa5784 | goto label_45;
| }
0x000a6492 ldrd r2, r3, [sp, 0x90] | __asm ("ldrd r2, r3, [var_90h]");
0x000a6496 cmp r3, 0 |
| if (r3 < 0) {
0x000a6498 blt.w 0xa5784 | goto label_45;
| }
0x000a649c ldr r0, [sp, 0x20] | r0 = x;
0x000a649e bic r2, r2, 0x80000000 | r2 = BIT_MASK (r2, 0x80000000);
0x000a64a2 movs r1, 0xb | r1 = 0xb;
0x000a64a4 blx 0x8900 | fcn_00008900 ();
0x000a64a8 b.w 0xa5784 | goto label_45;
| label_198:
0x000a64ac movs r3, 0 | r3 = 0;
0x000a64ae add r1, sp, 0x90 | r1 += var_90h;
0x000a64b0 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a64b2 str r3, [sp, 0x90] | var_90h = r3;
0x000a64b4 bl 0xd320 | fcn_0000d320 (r0, r1);
0x000a64b8 ldr r1, [sp, 0x90] | r1 = var_90h;
0x000a64ba ldr r0, [sp, 0x20] | r0 = x;
0x000a64bc blx 0x8350 | fcn_00008350 ();
0x000a64c0 b.w 0xa5754 | goto label_46;
| label_216:
0x000a64c4 ldr r5, [sp, 0x34] | r5 = var_34h;
0x000a64c6 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000a64c8 mov r1, r5 | r1 = r5;
0x000a64ca mov r0, r4 | r0 = r4;
0x000a64cc bl 0x57304 | fcn_00057304 (r0, r1);
0x000a64d0 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a64d2 mov r3, r5 | r3 = r5;
0x000a64d4 movs r1, 2 | r1 = 2;
0x000a64d6 mov r0, r4 | r0 = r4;
0x000a64d8 bl 0x8a750 | fcn_0008a750 (r0, r1, r2, r3, r4, r5);
0x000a64dc str r0, [sp, 0x30] | var_30h = r0;
0x000a64de cmp r0, 0 |
| if (r0 == 0) {
0x000a64e0 beq.w 0xa56ca | goto label_22;
| }
0x000a64e4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a64e6 ldr r7, [r3, 8] | r7 = *((r3 + 8));
| if (r7 != 0) {
0x000a64e8 cbnz r7, 0xa64f0 | goto label_262;
| }
0x000a64ea b 0xa64fc | goto label_263;
| do {
0x000a64ec ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
| if (r7 == 0) {
0x000a64ee cbz r7, 0xa64fc | goto label_263;
| }
| label_262:
0x000a64f0 ldrb.w r3, [r7, 0x37] | r3 = *((r7 + 0x37));
0x000a64f4 and r3, r3, 3 | r3 &= 3;
0x000a64f8 cmp r3, 2 |
0x000a64fa bne 0xa64ec |
| } while (r3 != 2);
| label_263:
0x000a64fc ldr r4, [sp, 0x30] | r4 = var_30h;
0x000a64fe movs r3, 7 | r3 = 7;
0x000a6500 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a6502 mov r1, r4 | r1 = r4;
0x000a6504 mov r0, r2 | r0 = r2;
0x000a6506 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a6508 bl 0x774c4 | fcn_000774c4 (r0, r1);
0x000a650c ldrsh.w r1, [r4, 0x22] | r1 = *((r4 + 0x22));
0x000a6510 ldr.w r8, [r4, 4] | r8 = *((r4 + 4));
0x000a6514 cmp r1, 0 |
| if (r1 <= 0) {
0x000a6516 ble.w 0xa56ca | goto label_22;
| }
0x000a651a ldr.w r3, [pc, 0xb54] | r3 = *(0x000a7070);
0x000a651e mov.w ip, 0 |
0x000a6522 mov fp, ip |
0x000a6524 mov sb, ip | sb = ip;
0x000a6526 str.w sl, [sp, 0x3c] | __asm ("str.w sl, [var_3ch]");
0x000a6528 adr r0, 0xf0 | r0 = 0xf0;
0x000a652a add r3, pc | r3 += pc;
0x000a652c str r3, [sp, 0x40] | var_40h = r3;
0x000a652e ldr.w r3, [pc, 0xb44] | r3 = *(0x000a7074);
0x000a6532 add r3, pc | r3 += pc;
0x000a6534 str r3, [sp, 0x44] | var_44h = r3;
0x000a6536 ldr.w r3, [pc, 0xb40] | r3 = *(0x000a7078);
0x000a653a add r3, pc | r3 += pc;
0x000a653c str r3, [sp, 0x48] | var_48h = r3;
0x000a653e b 0xa661a | goto label_264;
| label_47:
0x000a6540 orrs.w r2, ip, r6 | r2 = ip | r6;
0x000a6544 it eq |
| if (r2 != ip) {
0x000a6546 addeq sb, sb, 1 | sb++;
| }
| if (r2 != ip) {
0x000a654a beq 0xa660c |
0x000a654c ands r5, r3, 0x20 | r5 = r3 & 0x20;
0x000a6550 itt ne |
| if (r5 == r3) {
0x000a6552 movne r5, 0 | r5 = 0;
| }
| if (r5 == r3) {
0x000a6554 movne sl, 2 | sl = 2;
| }
| if (r5 == r3) {
0x000a6558 bne 0xa6564 |
0x000a655a lsls r2, r3, 0x19 | r2 = r3 << 0x19;
| if (r2 < r3) {
0x000a655c bmi.w 0xa7936 | goto label_265;
| }
0x000a6560 movs r5, 1 | r5 = 1;
0x000a6562 mov sl, r5 | sl = r5;
| }
| label_48:
0x000a6564 ands r4, r3, 1 | r4 = r3 & 1;
| if (r4 != r3) {
0x000a6568 beq 0xa6572 |
0x000a656a movs r4, 1 | r4 = 1;
0x000a656c cmp r7, 0 |
| if (r7 != 0) {
0x000a656e bne.w 0xa7726 | goto label_266;
| }
| }
| label_113:
0x000a6572 ldrh.w r0, [r8, 8] | r0 = *((r8 + 8));
0x000a6576 cmp r0, 0 |
| if (r0 == 0) {
0x000a6578 beq.w 0xa76ea | goto label_267;
| }
0x000a657c ldr r1, [sp, 0x30] | r1 = var_30h;
0x000a657e ldrb.w lr, [r1, 0x2b] |
0x000a6582 cmp.w lr, 0 |
0x000a6584 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 != r0) {
0x000a6586 bne.w 0xa76ea | goto label_267;
| }
0x000a658a ldr r1, [r1, 0x34] | r1 = *((r1 + 0x34));
| if (r1 != 0) {
0x000a658c cbz r1, 0xa65a0 |
0x000a658e ldr r2, [r1] | r2 = *(r1);
0x000a6590 cmp r2, r0 |
0x000a6592 it lt |
| if (r2 >= r0) {
0x000a6594 movlt r1, lr | r1 = lr;
| }
| if (r2 < r0) {
0x000a6596 blt 0xa65a0 | goto label_108;
| }
0x000a6598 add.w r0, r1, r0, lsl 4 | r0 = r1 + (r0 << 4);
0x000a659c ldr r1, [r0, -0x8] | r1 = *((r0 - 0x8));
| }
| label_108:
0x000a65a0 orrs.w r6, ip, r6 | r6 = ip | r6;
| if (r6 == ip) {
0x000a65a4 beq.w 0xa75ce | goto label_268;
| }
0x000a65a8 ldr.w r2, [pc, 0xad0] |
0x000a65ac add r2, pc | r2 = 0x14d62c;
0x000a65ae str r2, [sp, 0x34] | var_34h = r2;
| label_100:
0x000a65b0 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x000a65b2 sub.w r0, fp, sb | r0 = fp - sb;
0x000a65b6 ldr.w r2, [r8] | r2 = *(r8);
0x000a65ba ldrb.w r6, [r8, 4] | r6 = *((r8 + 4));
0x000a65be str r0, [sp, 0x24] | var_24h = r0;
| if (r3 < r3) {
0x000a65c0 bmi.w 0xa7692 | goto label_269;
| }
0x000a65c4 cmp r6, 0xf |
0x000a65c6 ittet hi |
| if (r6 <= 0xf) {
0x000a65c8 lsrhi r3, r6, 4 | r3 = r6 >> 4;
| }
| if (r6 <= 0xf) {
0x000a65ca ldrhi r0, [sp, 0x44] | r0 = var_44h;
| }
| if (r6 > 0xf) {
0x000a65cc ldrls r3, [sp, 0x40] | r3 = var_40h;
| }
| if (r6 <= 0xf) {
0x000a65ce addhi r3, r3, -1 | r3 += -1;
| }
0x000a65d2 it hi |
| if (r6 <= 0xf) {
0x000a65d4 ldrhi r3, [r0, r3, lsl 2] | offset_7 = r3 << 2;
| r3 = *((r0 + offset_7));
| }
| label_104:
0x000a65d8 ands r6, r6, 0xf | r6 &= 0xf;
0x000a65dc it ne |
| if (r6 == r6) {
0x000a65de movne r6, 1 | r6 = 1;
| }
0x000a65e0 cmp r1, 0 |
0x000a65e2 ite eq |
| if (r1 != 0) {
0x000a65e4 moveq r5, 0 | r5 = 0;
| }
| if (r1 == 0) {
0x000a65e6 andne r5, r5, 1 | r5 &= 1;
| }
| if (r5 != 0) {
0x000a65ea cbz r5, 0xa65ee |
0x000a65ec ldr r5, [r1, 8] | r5 = *((r1 + 8));
| }
0x000a65ee strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x000a65f2 movs r1, 1 | r1 = 1;
0x000a65f4 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a65f6 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a65f8 ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000a65fa strd r4, sl, [sp, 0x10] | __asm ("strd r4, sl, [sp, 0x10]");
0x000a65fe strd r6, r5, [sp, 8] | __asm ("strd r6, r5, [sp, 8]");
0x000a6602 bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a6606 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a6608 ldrsh.w r1, [r3, 0x22] | r1 = *((r3 + 0x22));
| }
0x000a660c add.w fp, fp, 1 |
0x000a6610 add.w r8, r8, 0xc | r8 += 0xc;
0x000a6614 cmp r1, fp |
| if (r1 <= fp) {
0x000a6616 ble.w 0xa56ca | goto label_22;
| }
| label_264:
0x000a661a ldrh.w r3, [r8, 0xa] | r3 = *((r8 + 0xa));
0x000a661e ldr r2, [sp, 0x38] | r2 = var_38h;
0x000a6620 ands sl, r3, 0x62 | sl = r3 & 0x62;
0x000a6624 ldrd ip, r6, [r2, 8] | __asm ("ldrd ip, r6, [r2, 8]");
| if (sl != r3) {
0x000a6628 bne 0xa6540 | goto label_47;
| }
0x000a662a movs r5, 1 | r5 = 1;
0x000a662c b 0xa6564 | goto label_48;
| label_240:
0x000a662e ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a6630 add r1, sp, 0x90 | r1 += var_90h;
0x000a6632 bl 0x10b24 | r0 = fcn_00010b24 (r0, r1);
0x000a6636 cmp r0, 0 |
| if (r0 != 0) {
0x000a6638 bne.w 0xa5f22 | goto label_49;
| }
0x000a663c ldrd r3, r2, [sp, 0x90] | __asm ("ldrd r3, r2, [var_90h]");
0x000a6640 cmp r2, 0 |
0x000a6642 ittt ge |
| if (r2 < 0) {
0x000a6644 ldrge r2, [sp, 0x20] | r2 = x;
| }
| if (r2 >= 0) {
0x000a6646 bicge r3, r3, 0x80000000 | __asm ("bicge r3, r3, aav.0x000000ff");
| }
| if (r2 >= 0) {
0x000a664a str.w r3, [r2, 0x1ec] | __asm ("str.w r3, aav.0x000000ff");
| }
0x000a664e b 0xa5f22 | goto label_49;
| label_206:
0x000a6650 add r7, sp, 0x90 | r7 += var_90h;
0x000a6652 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a6654 mov r1, r7 | r1 = r7;
0x000a6656 bl 0x10b24 | fcn_00010b24 (r0, r1);
0x000a665a ldr r3, [sp, 0x94] | r3 = var_94h;
0x000a665c cmp r3, 0 |
| if (r3 < 0) {
0x000a665e bge 0xa666e |
0x000a6660 ldr.w r3, [pc, 0xa1c] |
0x000a6664 add r3, pc | r3 = 0x14d6e8;
0x000a6666 ldrd r2, r3, [r3, 0xa8] | __asm ("ldrd r2, r3, [r3, 0xa8]");
0x000a666a strd r2, r3, [sp, 0x90] | __asm ("strd r2, r3, [sp, 0x90]");
| }
0x000a666e ldr r3, [r4, 4] | r3 = *((r4 + 4));
| if (r3 == 0) {
0x000a6670 cbnz r3, 0xa667c |
0x000a6672 ldrd r2, r3, [sp, 0x90] | __asm ("ldrd r2, r3, [var_90h]");
0x000a6676 ldr r1, [sp, 0x20] | r1 = x;
0x000a6678 strd r2, r3, [r1, 0x30] | __asm ("strd r2, r3, [r1, 0x30]");
| }
0x000a667c ldr r3, [sp, 0x20] | r3 = x;
0x000a667e ldr r5, [r3, 0x14] | r5 = *((r3 + 0x14));
0x000a6680 subs r5, 1 | r5--;
| if (r5 < 1) {
0x000a6682 bmi.w 0xa587c | goto label_50;
| }
0x000a6686 ldr.w r8, [sp, 0x30] | r8 = var_30h;
0x000a668a mov sb, r3 | sb = r3;
0x000a668c b 0xa6694 | goto label_270;
| label_51:
0x000a668e subs r5, 1 | r5--;
| if (r5 <= 1) {
0x000a6690 blo.w 0xa587c | goto label_50;
| }
| label_270:
0x000a6694 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000a6698 add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x000a669c ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x000a669e cmp r6, 0 |
| if (r6 == 0) {
0x000a66a0 beq 0xa668e | goto label_51;
| }
0x000a66a2 cmp r8, r5 |
| if (r8 == r5) {
0x000a66a4 beq 0xa66ac | goto label_271;
| }
0x000a66a6 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a66a8 cmp r3, 0 |
| if (r3 != 0) {
0x000a66aa bne 0xa668e | goto label_51;
| }
| label_271:
0x000a66ac ldrb r3, [r6, 9] | r3 = *((r6 + 9));
0x000a66ae ldr.w fp, [r6, 4] | fp = *((r6 + 4));
0x000a66b0 add sp, 0x10 |
0x000a66b2 vldr d8, [sp, 0x90] | __asm ("vldr d8, [sp, 0x90]");
| if (r3 != 0) {
0x000a66b6 cbz r3, 0xa66c8 |
0x000a66b8 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000a66ba adds r3, 1 | r3++;
0x000a66bc str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x000a66be ldrb r3, [r6, 0xa] | r3 = *((r6 + 0xa));
| if (r3 != 0) {
0x000a66c0 cbnz r3, 0xa66c8 | goto label_272;
| }
0x000a66c2 mov r0, r6 | r0 = r6;
0x000a66c4 bl 0x12e84 | fcn_00012e84 (r0);
| }
| label_272:
0x000a66c8 ldr.w r0, [fp] | r0 = *(fp);
0x000a66cc ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000a66ce vstr d8, [r0, 0x88] | __asm ("vstr d8, [r0, 0x88]");
0x000a66d2 ldr r3, [r3] | r3 = *(r3);
| if (r3 != 0) {
0x000a66d4 cbz r3, 0xa66e0 |
0x000a66d6 ldr r3, [r3] | r3 = *(r3);
0x000a66d8 cmp r3, 2 |
| if (r3 <= 2) {
0x000a66da ble 0xa66e0 | goto label_273;
| }
0x000a66dc bl 0x13094 | fcn_00013094 (r0);
| }
| label_273:
0x000a66e0 ldrb r3, [r6, 9] | r3 = *((r6 + 9));
0x000a66e2 cmp r3, 0 |
| if (r3 == 0) {
0x000a66e4 beq 0xa668e | goto label_51;
| }
0x000a66e6 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000a66e8 subs r3, 1 | r3--;
0x000a66ea str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x000a66ec cmp r3, 0 |
| if (r3 != 0) {
0x000a66ee bne 0xa668e | goto label_51;
| }
0x000a66f0 mov r0, r6 | r0 = r6;
0x000a66f2 bl 0xa14c | fcn_0000a14c (r0);
0x000a66f6 b 0xa668e | goto label_51;
| label_235:
0x000a66f8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a66fa add r1, sp, 0x90 | r1 += var_90h;
0x000a66fc bl 0x10b24 | r0 = fcn_00010b24 (r0, r1);
0x000a6700 cmp r0, 0 |
| if (r0 != 0) {
0x000a6702 bne.w 0xa5dee | goto label_52;
| }
0x000a6706 mov.w r0, -1 | r0 = -1;
0x000a670a mov.w r1, -1 | r1 = -1;
0x000a670e blx 0x86b0 | r0 = fcn_000086b0 ();
0x000a6712 mov r2, r0 | r2 = r0;
0x000a6714 mov r3, r1 | r3 = r1;
0x000a6716 ldrd r0, r1, [sp, 0x90] | __asm ("ldrd r0, r1, [var_90h]");
0x000a671a cmp r0, 1 |
0x000a671c sbcs r4, r1, 0 | __asm ("sbcs r4, r1, 0");
| if (r0 < 1) {
0x000a6720 blt.w 0xa5dee | goto label_52;
| }
0x000a6724 orrs.w r4, r2, r3 | r4 = r2 | r3;
| if (r4 == r2) {
0x000a6728 beq 0xa6734 | goto label_274;
| }
0x000a672a cmp r0, r2 |
0x000a672c sbcs.w r3, r1, r3 | __asm ("sbcs.w r3, r1, r3");
| if (r0 >= r2) {
0x000a6730 bge.w 0xa5dee | goto label_52;
| }
| label_274:
0x000a6734 blx 0x86b0 | fcn_000086b0 ();
0x000a6738 b.w 0xa5dee | goto label_52;
| label_208:
0x000a673c movs r3, 0 | r3 = 0;
0x000a673e ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a6740 add r1, sp, 0x90 | r1 += var_90h;
0x000a6742 str r3, [sp, 0x90] | var_90h = r3;
0x000a6744 bl 0xd320 | fcn_0000d320 (r0, r1);
0x000a6748 ldr r3, [sp, 0x90] | r3 = var_90h;
0x000a674a lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
| if (r2 >= r3) {
0x000a674c bpl.w 0xa56ca | goto label_22;
| }
0x000a6750 mov r6, r3 | r6 = r3;
0x000a6752 b.w 0xa58b6 | goto label_53;
| label_225:
0x000a6756 ldr.w r1, [pc, 0x92c] |
0x000a675a ldr r5, [sp, 0x28] | r5 = var_28h;
0x000a675c add r1, pc | r1 = 0x14d7e6;
0x000a675e mov r0, r5 | r0 = r5;
0x000a6760 bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x000a6764 cmp r0, 0 |
| if (r0 == 0) {
0x000a6766 beq.w 0xa787c | goto label_275;
| }
0x000a676a ldr.w r1, [pc, 0x91c] |
0x000a676e mov r0, r5 | r0 = r5;
0x000a6770 add r1, pc | r1 = 0x14d7fe;
0x000a6772 bl 0x8ec0 | fcn_00008ec0 (r0);
0x000a6776 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a6778 mov r2, r0 | r2 = r0;
0x000a677a cmp r0, 0 |
| if (r0 != 0) {
0x000a677c bne.w 0xa5b84 | goto label_54;
| }
| if (r3 != 0) {
0x000a6780 cbnz r3, 0xa67bc | goto label_276;
| }
| label_139:
0x000a6782 ldr r3, [sp, 0x20] | r3 = x;
0x000a6784 uxtb r4, r2 | r4 = (int8_t) r2;
0x000a6786 ldr r0, [r3, 0x14] | r0 = *((r3 + 0x14));
0x000a6788 cmp r0, 2 |
| if (r0 <= 2) {
0x000a678a ble 0xa67b6 | goto label_277;
| }
0x000a678c ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a678e sub.w r1, r3, 0x20 | r1 = r3 - 0x20;
0x000a6792 add.w r1, r1, r0, lsl 4 | r1 += (r0 << 4);
| do {
0x000a6796 ldr r0, [r3, 0x24] | r0 = *((r3 + 0x24));
0x000a6798 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x000a679a ldr r0, [r0] | r0 = *(r0);
0x000a679c ldrb r5, [r0, 0xc] | r5 = *((r0 + 0xc));
| if (r5 == 0) {
0x000a679e cbnz r5, 0xa67b0 |
0x000a67a0 ldr.w r5, [r0, 0xe8] | r5 = *((r0 + 0xe8));
| if (r5 != 0) {
0x000a67a4 cbz r5, 0xa67ae |
0x000a67a6 ldrb.w r5, [r5, 0x2b] | r5 = *((r5 + 0x2b));
0x000a67aa cmp r5, 2 |
| if (r5 == 2) {
0x000a67ac beq 0xa67b0 | goto label_278;
| }
| }
0x000a67ae strb r4, [r0, 4] | *((r0 + 4)) = r4;
| }
| label_278:
0x000a67b0 adds r3, 0x10 | r3 += 0x10;
0x000a67b2 cmp r1, r3 |
0x000a67b4 bne 0xa6796 |
| } while (r1 != r3);
| label_277:
0x000a67b6 ldr r3, [sp, 0x20] | r3 = x;
0x000a67b8 strb.w r4, [r3, 0x59] | *((r3 + 0x59)) = r4;
| label_276:
0x000a67bc ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000a67be ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a67c0 ldr r3, [r3] | r3 = *(r3);
| label_124:
0x000a67c2 ldrb r1, [r3, 0xc] | r1 = *((r3 + 0xc));
| if (r1 == 0) {
0x000a67c4 cbnz r1, 0xa67d6 |
0x000a67c6 ldr.w r1, [r3, 0xe8] | r1 = *((r3 + 0xe8));
| if (r1 != 0) {
0x000a67ca cbz r1, 0xa67d4 |
0x000a67cc ldrb.w r1, [r1, 0x2b] | r1 = *((r1 + 0x2b));
0x000a67d0 cmp r1, 2 |
| if (r1 == 2) {
0x000a67d2 beq 0xa67d6 | goto label_123;
| }
| }
0x000a67d4 strb r2, [r3, 4] | *((r3 + 4)) = r2;
| }
| label_123:
0x000a67d6 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x000a67d8 b.w 0xa5b90 | goto label_55;
| label_217:
0x000a67dc ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a67de add r1, sp, 0x90 | r1 += var_90h;
0x000a67e0 bl 0x10b24 | r0 = fcn_00010b24 (r0, r1);
0x000a67e4 cmp r0, 0 |
| if (r0 != 0) {
0x000a67e6 bne.w 0xa59ea | goto label_56;
| }
0x000a67ea ldrd r0, r1, [sp, 0x90] | __asm ("ldrd r0, r1, [var_90h]");
0x000a67ee blx 0x8710 | fcn_00008710 ();
0x000a67f2 b.w 0xa59ea | goto label_56;
| label_251:
0x000a67f6 movs r3, 1 | r3 = 1;
0x000a67f8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a67fa add r1, sp, 0x90 | r1 += var_90h;
0x000a67fc str r3, [sp, 0x90] | var_90h = r3;
0x000a67fe bl 0xd320 | r0 = fcn_0000d320 (r0, r1);
0x000a6802 cmp r0, 0 |
| if (r0 != 0) {
0x000a6804 bne.w 0xa7b3e | goto label_279;
| }
| label_138:
0x000a6808 ldr r2, [sp, 0x90] | r2 = var_90h;
0x000a680a movs r1, 1 | r1 = 1;
0x000a680c ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a680e subs r2, 0 |
0x000a6810 it ne |
| if (r2 == 0) {
0x000a6812 movne r2, 1 | r2 = 1;
| }
0x000a6814 bl 0xf81c | fcn_0000f81c (r0, r1, r2, r3, r4, r5, r6);
0x000a6818 ldr r2, [sp, 0x20] | r2 = x;
0x000a681a ldrd r3, r2, [r2, 0x20] | __asm ("ldrd r3, r2, [r2, 0x20]");
0x000a681e cmp r0, 0 |
| if (r0 == 0) {
0x000a6820 beq.w 0xa7890 | goto label_280;
| }
0x000a6824 orr r3, r3, 0x20 | r3 |= 0x20;
| label_125:
0x000a6828 ldr r1, [sp, 0x20] | r1 = x;
0x000a682a str r3, [r1, 0x20] | *((r1 + 0x20)) = r3;
0x000a682c ldrb.w r3, [r1, 0x55] | r3 = *((r1 + 0x55));
0x000a6830 str r2, [r1, 0x24] | *((r1 + 0x24)) = r2;
0x000a6832 cmp r3, 0 |
| if (r3 == 0) {
0x000a6834 beq.w 0xa56ca | goto label_22;
| }
0x000a6838 mov r0, r1 | r0 = r1;
0x000a683a bl 0x1b0b4 | fcn_0001b0b4 (r0, r1);
0x000a683e b.w 0xa56ca | goto label_22;
| label_239:
0x000a6876 ldr.w r1, [pc, 0x818] |
0x000a687a ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a687c add r1, pc | r1 = 0x14d912;
0x000a687e bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x000a6882 cmp r0, 0 |
| if (r0 != 0) {
0x000a6884 bne.w 0xa7a58 | goto label_281;
| }
0x000a6888 movs r5, 1 | r5 = 1;
0x000a688a b.w 0xa5ef0 | goto label_57;
| label_232:
0x000a6896 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a6898 add r1, sp, 0x90 | r1 += var_90h;
0x000a689a bl 0xd320 | r0 = fcn_0000d320 (r0, r1);
0x000a689e cmp r0, 0 |
| if (r0 == 0) {
0x000a68a0 beq.w 0xa5d44 | goto label_58;
| }
0x000a68a4 ldr r3, [sp, 0x90] | r3 = var_90h;
0x000a68a6 cmp r3, 0 |
| if (r3 > 0) {
0x000a68a8 bgt.w 0xa5d4a | goto label_59;
| }
0x000a68ac b.w 0xa5d44 | goto label_58;
| label_241:
0x000a68b2 ldr.w r1, [pc, 0x7e0] |
0x000a68b6 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a68b8 add r1, pc | r1 = 0x14d952;
0x000a68ba blx 0x8540 | r0 = fcn_00008540 ();
0x000a68be cmp r0, 0 |
| if (r0 != 0) {
0x000a68c0 bne.w 0xa7ae4 | goto label_282;
| }
0x000a68c4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a68c6 movs r4, 2 | r4 = 2;
0x000a68c8 cmp r3, 0 |
| if (r3 != 0) {
0x000a68ca bne.w 0xa5f3a | goto label_60;
| }
| label_137:
0x000a68ce ldr r7, [sp, 0x20] | r7 = x;
0x000a68d0 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000a68d2 cmp r3, 0 |
| if (r3 <= 0) {
0x000a68d4 ble.w 0xa5f3a | goto label_60;
| }
| do {
0x000a68d8 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000a68da mov r1, r4 | r1 = r4;
0x000a68dc add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x000a68e0 adds r5, 1 | r5++;
0x000a68e2 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x000a68e4 bl 0x1a08c | fcn_0001a08c (r0, r1);
0x000a68e8 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000a68ea cmp r3, r5 |
0x000a68ec bgt 0xa68d8 |
| } while (r3 > r5);
0x000a68ee b.w 0xa5f3a | goto label_60;
| label_231:
0x000a68f4 movs r5, 0 | r5 = 0;
0x000a68f6 add r1, sp, 0x90 | r1 += var_90h;
0x000a68f8 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a68fa str r5, [sp, 0x90] | var_90h = r5;
0x000a68fc bl 0xd320 | fcn_0000d320 (r0, r1);
0x000a6900 ldr r1, [sp, 0x90] | r1 = var_90h;
0x000a6902 mov r0, r4 | r0 = r4;
0x000a6904 ldr r4, [sp, 0x20] | r4 = x;
0x000a6906 mov r3, r5 | r3 = r5;
0x000a6908 mov r2, r5 | r2 = r5;
0x000a690a str r1, [r4, 0x64] | *((r4 + 0x64)) = r1;
0x000a690c bl 0x1dc88 | r0 = fcn_0001dc88 (r0, r1, r2, r3);
0x000a6910 cmp r0, 7 |
| if (r0 == 7) {
0x000a6912 beq.w 0xa7b50 | goto label_283;
| }
| label_141:
0x000a6916 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a6918 mov r0, r4 | r0 = r4;
0x000a691a bl 0x16808 | fcn_00016808 (r0, r1);
0x000a691e b.w 0xa4e62 | goto label_16;
| label_228:
0x000a6992 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a6994 add r1, sp, 0x90 | r1 += var_90h;
0x000a6996 bl 0x10b24 | fcn_00010b24 (r0, r1);
0x000a699a ldrd r2, r3, [sp, 0x90] | __asm ("ldrd r2, r3, [var_90h]");
0x000a699e adds r2, 1 | r2++;
0x000a69a0 sbcs r3, r3, -1 | __asm ("sbcs r3, r3, -1");
| if (r2 < 1) {
0x000a69a4 bge 0xa69ae |
0x000a69a6 vmov.i8 d16, 0xff | __asm ("vmov.i8 d16, 0xff");
0x000a69aa vstr d16, [sp, 0x90] | __asm ("vstr d16, [sp, 0x90]");
| }
0x000a69ae ldr.w r3, [r4, 0xe8] | r3 = *((r4 + 0xe8));
0x000a69b2 ldrd r0, r1, [sp, 0x90] | __asm ("ldrd r0, r1, [var_90h]");
0x000a69b6 strd r0, r1, [r4, 0xb0] | __asm ("strd r0, r1, [r4, 0xb0]");
0x000a69ba cmp r3, 0 |
| if (r3 == 0) {
0x000a69bc beq.w 0xa5bc0 | goto label_61;
| }
0x000a69c0 strd r0, r1, [r3, 0x10] | __asm ("strd r0, r1, [r3, 0x10]");
0x000a69c4 b.w 0xa5bc0 | goto label_61;
| label_255:
0x000a69c8 ldr.w sl, [pc, 0x6cc] |
0x000a69cc add sl, pc | sl = 0x14da68;
0x000a69ce b 0xa61ec | goto label_37;
| label_256:
0x000a69d0 ldr.w sl, [pc, 0x6c8] |
0x000a69d4 add sl, pc | sl = 0x14da74;
0x000a69d6 b 0xa61ec | goto label_37;
| label_213:
0x000a69d8 ldrh r5, [r6, 0x26] | r5 = *((r6 + 0x26));
0x000a69da adds r5, 0x2e | r5 += 0x2e;
0x000a69dc sxth r5, r5 | __asm ("sxth r5, r5");
0x000a69de cmp r5, 0 |
| if (r5 == 0) {
0x000a69e0 beq.w 0xa5948 | goto label_62;
| }
0x000a69e4 movs r3, 0x70 | r3 = 0x70;
0x000a69e6 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a69e8 ldr r1, [sp, 0x38] | r1 = var_38h;
0x000a69ea mov r0, r7 | r0 = r7;
0x000a69ec str r3, [sp] | *(sp) = r3;
0x000a69ee mov r3, r6 | r3 = r6;
0x000a69f0 bl 0x2fc88 | fcn_0002fc88 (r0, r1, r2, r3, r4);
0x000a69f4 ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x000a69f8 movs r1, 0x20 | r1 = 0x20;
0x000a69fa ldr r2, [sp, 0x38] | r2 = var_38h;
0x000a69fc mov r0, sl | r0 = sl;
0x000a69fe str r5, [sp] | *(sp) = r5;
0x000a6a00 adds r3, 2 | r3 += 2;
0x000a6a02 add r3, sb | r3 += sb;
0x000a6a04 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6a08 b.w 0xa5948 | goto label_62;
| label_73:
0x000a6a0c mov sb, fp | sb = fp;
0x000a6a0e ldrd sl, r8, [sp, 0x70] | __asm ("ldrd sl, r8, [var_70h]");
0x000a6a12 ldr.w fp, [sp, 0x78] | fp = var_78h;
| label_65:
0x000a6a16 ldr r3, [sp, 0x20] | r3 = x;
0x000a6a18 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000a6a1a b.w 0xa5452 | goto label_63;
| label_211:
0x000a6a1e ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a6a20 ldr.w r8, [sp, 0x30] | r8 = var_30h;
| label_210:
0x000a6a24 adds r2, 1 | r2++;
0x000a6a26 cmp r2, r8 |
| if (r2 <= r8) {
0x000a6a28 ble.w 0xa58e0 | goto label_64;
| }
| label_130:
0x000a6a2c movs r1, 0xa6 | r1 = 0xa6;
0x000a6a2e mov r0, sl | r0 = sl;
0x000a6a30 bl 0x2e448 | fcn_0002e448 (r0, r1);
0x000a6a34 b.w 0xa4e56 | goto label_5;
| label_186:
0x000a6a38 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000a6a3a cmp.w ip, 0 |
| if (ip == 0) {
0x000a6a3e beq 0xa6a16 | goto label_65;
| }
0x000a6a40 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x000a6a42 cmp r2, 0 |
| if (r2 == 0) {
0x000a6a44 beq.w 0xa76c0 | goto label_284;
| }
0x000a6a48 add.w r2, ip, 2 | r2 = ip + 2;
0x000a6a4c ldr r0, [sp, 0x20] | r0 = x;
0x000a6a4e lsls r2, r2, 2 | r2 <<= 2;
0x000a6a50 str r3, [sp, 0x24] | var_24h = r3;
0x000a6a52 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x000a6a56 cmp r0, 0 |
| if (r0 == 0) {
0x000a6a58 beq.w 0xa763e | goto label_184;
| }
0x000a6a5c ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a6a5e str r3, [r0, 4] | *((r0 + 4)) = r3;
0x000a6a60 movs r3, 1 | r3 = 1;
| label_106:
0x000a6a62 ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x000a6a64 cmp r1, 0 |
| if (r1 == 0) {
0x000a6a66 beq.w 0xa6d0c | goto label_285;
| }
0x000a6a6a str r5, [sp, 0x30] | var_30h = r5;
0x000a6a6c ldrd r5, ip, [sp, 0x3c] | __asm ("ldrd r5, ip, [var_3ch]");
0x000a6a70 b 0xa6a7a |
| while (r2 != 0) {
| label_66:
0x000a6a72 ldr r1, [r1] | r1 = *(r1);
0x000a6a74 cmp r1, 0 |
| if (r1 == 0) {
0x000a6a76 beq.w 0xa6d0a | goto label_286;
| }
0x000a6a7a ldr.w lr, [r1, 8] |
0x000a6a7e cmp r5, lr |
0x000a6a80 ite eq |
| if (r5 != lr) {
0x000a6a82 moveq r2, 0 | r2 = 0;
| }
| if (r5 == lr) {
0x000a6a84 andne r2, ip, 1 | r2 = ip & 1;
| }
0x000a6a88 cmp r2, 0 |
0x000a6a8a bne 0xa6a72 |
| }
0x000a6a8c ldr.w r2, [lr, 0x1c] | r2 = *((lr + 0x1c));
0x000a6a90 lsls r2, r2, 0x18 | r2 <<= 0x18;
0x000a6a92 ittt pl |
| if (r2 < r2) {
0x000a6a94 ldrpl r2, [lr, 0x14] | r2 = *((lr + 0x14));
| }
| if (r2 < r2) {
0x000a6a98 addpl r3, 1 | r3++;
| }
| if (r2 >= r2) {
0x000a6a9a str.w r2, [r0, r3, lsl 2] | __asm ("str.w r2, [r0, r3, lsl 2]");
| }
0x000a6a9e ldr.w r2, [lr, 8] | r2 = *((lr + 8));
0x000a6aa2 cmp r2, 0 |
| if (r2 == 0) {
0x000a6aa4 beq 0xa6a72 | goto label_66;
| }
0x000a6aa6 add.w lr, r0, r3, lsl 2 | lr = r0 + (r3 << 2);
0x000a6aaa str r1, [sp, 0x24] | var_24h = r1;
| do {
0x000a6aac ldr r1, [r2, 0x2c] | r1 = *((r2 + 0x2c));
0x000a6aae adds r3, 1 | r3++;
0x000a6ab0 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000a6ab2 str r1, [lr, 4]! | *((lr += 4)) = r1;
0x000a6ab6 cmp r2, 0 |
0x000a6ab8 bne 0xa6aac |
| } while (r2 != 0);
0x000a6aba ldr r1, [sp, 0x24] | r1 = var_24h;
0x000a6abc b 0xa6a72 | goto label_66;
| label_177:
0x000a6abe ldrd fp, sl, [sp, 0x3c] | __asm ("ldrd fp, sl, [var_3ch]");
| label_175:
0x000a6ac2 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x000a6ac4 cmp r3, r8 |
0x000a6ac6 ldrd r4, r3, [fp, 0x6c] | __asm ("ldrd r4, r3, [arg_6ch]");
0x000a6aca it lt |
| if (r3 >= r8) {
0x000a6acc strlt r8, [r5, 0x28] | *((r5 + 0x28)) = r8;
| }
0x000a6ad0 cmp r4, r3 |
| if (r4 >= r3) {
0x000a6ad2 bge.w 0xa76a8 | goto label_287;
| }
0x000a6ad6 ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x000a6ada add.w r2, r4, r4, lsl 2 | r2 = r4 + (r4 << 2);
0x000a6ade add.w sb, r4, 1 | sb = r4 + 1;
0x000a6ae2 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a6ae6 movs r0, 0x23 | r0 = 0x23;
0x000a6ae8 str.w sb, [fp, 0x6c] | __asm ("str.w sb, [arg_6ch]");
0x000a6aec str.w r0, [r3, r2, lsl 2] | __asm ("str.w r0, [r3, r2, lsl 2]");
0x000a6af0 movs r1, 0 | r1 = 0;
0x000a6af2 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x000a6af6 adds r2, r3, 4 | r2 = r3 + 4;
0x000a6af8 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000a6afc strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_105:
0x000a6b00 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a6b02 ldr r6, [r3, 0x30] | r6 = *((r3 + 0x30));
0x000a6b04 cmp r6, 0 |
| if (r6 == 0) {
0x000a6b06 beq.w 0xa6c66 | goto label_288;
| }
0x000a6b0a ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x000a6b0c mov.w r8, 0 | r8 = 0;
0x000a6b10 strd sb, r4, [sp, 0x64] | __asm ("strd sb, r4, [sp, 0x64]");
0x000a6b14 adds r2, r3, 3 | r2 = r3 + 3;
0x000a6b16 adds r3, 2 | r3 += 2;
0x000a6b18 str r2, [sp, 0x50] | var_50h = r2;
0x000a6b1a movs r2, 1 | r2 = 1;
0x000a6b1c str r3, [sp, 0x54] | var_54h = r3;
0x000a6b1e add r3, sp, 0x8c | r3 += var_8ch;
0x000a6b20 str r2, [sp, 0x30] | var_30h = r2;
0x000a6b22 str r3, [sp, 0x5c] | var_5ch = r3;
| label_67:
0x000a6b24 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x000a6b26 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a6b28 ldr r0, [sp, 0x20] | r0 = x;
0x000a6b2a bl 0x3e27c | fcn_0003e27c (r0, r1, r2, r3);
0x000a6b2e strd r8, r8, [sp, 0x8c] | __asm ("strd r8, r8, [sp, 0x8c]");
0x000a6b32 mov r1, r0 | r1 = r0;
0x000a6b34 mov r2, r0 | r2 = r0;
0x000a6b36 mov r7, r0 | r7 = r0;
| if (r0 != 0) {
0x000a6b38 cbz r0, 0xa6b50 |
0x000a6b3a add r3, sp, 0x90 | r3 += var_90h;
0x000a6b3c mov r2, r6 | r2 = r6;
0x000a6b3e str r3, [sp] | *(sp) = r3;
0x000a6b40 str r0, [sp, 0x38] | var_38h = r0;
0x000a6b42 mov r0, r5 | r0 = r5;
0x000a6b44 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000a6b46 bl 0x247d4 | fcn_000247d4 (r0, r1, r2, r3, r4, r5, r6);
0x000a6b4a ldrd r2, r7, [sp, 0x8c] | __asm ("ldrd r2, r7, [var_8ch]");
0x000a6b4e ldr r1, [sp, 0x38] | r1 = var_38h;
| }
0x000a6b50 ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x000a6b52 ldr r0, [r5, 0x2c] | r0 = *((r5 + 0x2c));
0x000a6b54 mov r4, r3 | r4 = r3;
0x000a6b56 str r3, [sp, 0x3c] | var_3ch = r3;
0x000a6b58 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000a6b5a add.w sb, r4, -1 | sb = r4 + -1;
0x000a6b5e str.w sb, [r5, 0x38] | __asm ("str.w sb, [r5, 0x38]");
0x000a6b62 add.w r4, sl, r3 | r4 = sl + r3;
0x000a6b66 cmp r4, r0 |
0x000a6b68 it gt |
| if (r4 <= r0) {
0x000a6b6a strgt r4, [r5, 0x2c] | *((r5 + 0x2c)) = r4;
| }
0x000a6b6c cmp r3, 0 |
| if (r3 <= 0) {
0x000a6b6e ble 0xa6bb6 | goto label_289;
| }
0x000a6b70 movs r4, 0 | r4 = 0;
0x000a6b72 add.w r3, r6, 0x24 | r3 = r6 + 0x24;
0x000a6b76 str r3, [sp, 0x38] | var_38h = r3;
0x000a6b78 strd r1, r2, [sp, 0x40] | __asm ("strd r1, r2, [sp, 0x40]");
0x000a6b7c str r5, [sp, 0x48] | var_48h = r5;
| do {
0x000a6b7e cmp r7, 0 |
| if (r7 == 0) {
0x000a6b80 beq.w 0xa6ca6 | goto label_290;
| }
0x000a6b84 ldr.w r3, [r7, r4, lsl 2] | offset_8 = r4 << 2;
| r3 = *((r7 + offset_8));
| label_69:
0x000a6b88 add.w r5, sl, r4 | r5 = sl + r4;
0x000a6b8c ldr r1, [sp, 0x24] | r1 = var_24h;
0x000a6b8e movs r2, 0 | r2 = 0;
0x000a6b90 mov r0, fp | r0 = fp;
0x000a6b92 str r5, [sp] | *(sp) = r5;
0x000a6b94 adds r4, 1 | r4++;
0x000a6b96 bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
0x000a6b9a mov r3, sb | r3 = sb;
0x000a6b9c mov r2, r5 | r2 = r5;
0x000a6b9e movs r1, 0x32 | r1 = 0x32;
0x000a6ba0 mov r0, fp | r0 = fp;
0x000a6ba2 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000a6ba6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6baa ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000a6bac cmp r3, r4 |
0x000a6bae bgt 0xa6b7e |
| } while (r3 > r4);
0x000a6bb0 ldrd r1, r2, [sp, 0x40] | __asm ("ldrd r1, r2, [var_40h]");
0x000a6bb4 ldr r5, [sp, 0x48] | r5 = var_48h;
| label_289:
0x000a6bb6 str r3, [sp, 0x38] | var_38h = r3;
0x000a6bb8 cmp r2, 0 |
| if (r2 == 0) {
0x000a6bba beq 0xa6cae | goto label_291;
| }
0x000a6bbc mov r1, r2 | r1 = r2;
0x000a6bbe ldr r0, [sp, 0x20] | r0 = x;
0x000a6bc0 bl 0x35b10 | fcn_00035b10 (r0, r1);
0x000a6bc4 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000a6bc6 movs r1, 0x60 | r1 = 0x60;
0x000a6bc8 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a6bca str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000a6bce strd r0, r2, [sp, 4] | __asm ("strd r0, r2, [sp, 4]");
0x000a6bd2 mov r2, sl | r2 = sl;
0x000a6bd4 mov r0, fp | r0 = fp;
0x000a6bd6 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000a6bda ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x000a6bdc mov r3, sb | r3 = sb;
0x000a6bde movs r1, 0x1c | r1 = 0x1c;
0x000a6be0 mov r0, fp | r0 = fp;
0x000a6be2 strd sl, r2, [sp] | __asm ("strd sl, r2, [sp]");
0x000a6be6 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a6be8 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
| label_70:
0x000a6bec ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a6bee mov r0, fp | r0 = fp;
0x000a6bf0 ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x000a6bf2 ands r2, r2, 0x80 | r2 &= 0x80;
0x000a6bf6 ittee eq |
| if (r2 != r2) {
0x000a6bf8 ldreq r3, [sp, 0x54] | r3 = var_54h;
| }
| if (r2 != r2) {
0x000a6bfa moveq r1, 0x87 | r1 = 0x87;
| }
| if (r2 == r2) {
0x000a6bfc ldrne r3, [sp, 0x54] | r3 = var_54h;
| }
| if (r2 == r2) {
0x000a6bfe movne r2, 0 | r2 = 0;
| }
0x000a6c00 itet ne |
| if (r2 == r2) {
0x000a6c02 movne r1, 0x4b | r1 = 0x4b;
| }
| if (r2 != r2) {
0x000a6c04 streq r2, [sp] | *(sp) = r2;
| }
| if (r2 == r2) {
0x000a6c06 strne r8, [sp] | *(sp) = r8;
| }
0x000a6c0a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6c0e ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a6c10 mov r0, fp | r0 = fp;
0x000a6c12 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000a6c14 ldr r1, [sp, 0x50] | r1 = var_50h;
0x000a6c16 subs r2, 1 | r2--;
0x000a6c18 str r2, [sp] | *(sp) = r2;
0x000a6c1a ldr r2, [sp, 0x58] | r2 = var_58h;
0x000a6c1c bl 0x2e248 | fcn_0002e248 (r0, r1, r2, r3);
0x000a6c20 ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000a6c22 movs r3, 4 | r3 = 4;
0x000a6c24 movs r1, 0x54 | r1 = 0x54;
0x000a6c26 mov r0, fp | r0 = fp;
0x000a6c28 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000a6c2c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6c30 ldr.w r0, [fp, 0xc] | r0 = *(arg_ch);
0x000a6c34 ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x000a6c38 cmn r2, r3 |
| if (r2 < r3) {
0x000a6c3a bmi 0xa6cd0 | goto label_292;
| }
0x000a6c3c ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000a6c3e ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x000a6c40 ldr.w r1, [fp, 0x6c] | r1 = *(arg_6ch);
0x000a6c44 lsls r3, r3, 2 | r3 <<= 2;
0x000a6c46 rsbs r3, r3, 0 | r3 -= ;
0x000a6c48 str r1, [r2, r3] | *((r2 + r3)) = r1;
| if (r7 != 0) {
| label_71:
0x000a6c4a cbz r7, 0xa6c54 |
0x000a6c4c ldr r0, [sp, 0x20] | r0 = x;
0x000a6c4e mov r1, r7 | r1 = r7;
0x000a6c50 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000a6c54 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a6c56 ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x000a6c58 adds r3, 1 | r3++;
0x000a6c5a str r3, [sp, 0x30] | var_30h = r3;
0x000a6c5c cmp r6, 0 |
| if (r6 != 0) {
0x000a6c5e bne.w 0xa6b24 | goto label_67;
| }
0x000a6c62 ldrd sb, r4, [sp, 0x64] | __asm ("ldrd sb, r4, [var_64h]");
| label_288:
0x000a6c66 movs r2, 0 | r2 = 0;
0x000a6c68 mov r3, sb | r3 = sb;
0x000a6c6a str r2, [sp] | *(sp) = r2;
0x000a6c6c movs r1, 0x26 | r1 = 0x26;
0x000a6c6e mov r0, fp | r0 = fp;
0x000a6c70 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6c74 cmp r4, 0 |
0x000a6c76 ldr.w r2, [fp, 0x6c] | r2 = *(arg_6ch);
| if (r4 < 0) {
0x000a6c7a bge 0xa6c7e |
0x000a6c7c subs r4, r2, 1 | r4 = r2 - 1;
| }
0x000a6c7e ldr.w r3, [fp] | r3 = *(fp);
0x000a6c82 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a6c86 cmp r3, 0 |
| if (r3 != 0) {
0x000a6c88 bne.w 0xa7532 | goto label_293;
| }
0x000a6c8c ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x000a6c90 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x000a6c94 add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_94:
0x000a6c98 str r2, [r3, 8] | *((r3 + 8)) = r2;
| label_103:
0x000a6c9a ldr r3, [sp, 0x60] | r3 = var_60h;
0x000a6c9c cmp r3, 0 |
| if (r3 != 0) {
0x000a6c9e bne.w 0xa51f8 | goto label_68;
| }
0x000a6ca2 b.w 0xa4e56 | goto label_5;
| label_290:
0x000a6ca6 ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a6ca8 ldr.w r3, [r3, r4, lsl 3] | offset_9 = r4 << 3;
| r3 = *((r3 + offset_9));
0x000a6cac b 0xa6b88 | goto label_69;
| label_291:
0x000a6cae cmp r1, 0 |
| if (r1 == 0) {
0x000a6cb0 beq 0xa6bec | goto label_70;
| }
0x000a6cb2 ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x000a6cb6 movs r1, 0x1d | r1 = 0x1d;
0x000a6cb8 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a6cba mov r0, fp | r0 = fp;
0x000a6cbc str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000a6cc0 adds r3, 2 | r3 += 2;
0x000a6cc2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6cc6 mov r1, sb | r1 = sb;
0x000a6cc8 mov r0, fp | r0 = fp;
0x000a6cca bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x000a6cce b 0xa6bec | goto label_70;
| label_292:
0x000a6cd0 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000a6cd2 mov r1, fp | r1 = fp;
0x000a6cd4 rsbs r2, r3, 0 | r2 = r3 - ;
0x000a6cd6 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x000a6cda b 0xa6c4a | goto label_71;
| label_258:
0x000a6cdc ldr.w sl, [sp, 0x30] | sl = var_30h;
0x000a6ce0 b.w 0xa5014 | goto label_7;
| label_214:
0x000a6ce4 mvn r3, 5 | r3 = ~5;
0x000a6ce8 str r0, [sp, 4] | var_4h = r0;
0x000a6cea str r3, [sp, 8] | var_8h = r3;
0x000a6cec mov r2, sb | r2 = sb;
0x000a6cee mov r3, sb | r3 = sb;
0x000a6cf0 movs r1, 0x94 | r1 = 0x94;
0x000a6cf2 mov r0, sl | r0 = sl;
0x000a6cf4 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000a6cf8 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000a6cfc b.w 0xa5920 | goto label_21;
| label_215:
0x000a6d00 ldr r6, [r7, 0x2c] | r6 = *((r7 + 0x2c));
0x000a6d02 adds r6, 1 | r6++;
0x000a6d04 str r6, [r7, 0x2c] | *((r7 + 0x2c)) = r6;
0x000a6d06 b.w 0xa5976 | goto label_72;
| label_286:
0x000a6d0a ldr r5, [sp, 0x30] | r5 = var_30h;
| label_285:
0x000a6d0c str r3, [r0] | *(r0) = r3;
0x000a6d0e adds r4, 8 | r4 += 8;
0x000a6d10 str r0, [sp, 4] | var_4h = r0;
0x000a6d12 movs r1, 0x9b | r1 = 0x9b;
0x000a6d14 ldr.w r2, [sb, 0x2c] | r2 = *((sb + 0x2c));
0x000a6d18 mov r0, r7 | r0 = r7;
0x000a6d1a cmp r4, r2 |
0x000a6d1c it lt |
| if (r4 >= r2) {
0x000a6d1e movlt r4, r2 | r4 = r2;
| }
0x000a6d20 movs r2, 0 | r2 = 0;
0x000a6d22 strb.w r2, [sb, 0x13] | *((sb + 0x13)) = r2;
0x000a6d26 str.w r2, [sb, 0x1c] | __asm ("str.w r2, [sb, 0x1c]");
0x000a6d2a mvn r2, 0xd | r2 = ~0xd;
0x000a6d2e str.w r4, [sb, 0x2c] | __asm ("str.w r4, [sb, 0x2c]");
0x000a6d32 str r2, [sp, 8] | var_8h = r2;
0x000a6d34 movs r2, 1 | r2 = 1;
0x000a6d36 str r2, [sp] | *(sp) = r2;
0x000a6d38 movs r2, 2 | r2 = 2;
0x000a6d3a bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000a6d3e ldr r4, [r7, 0x6c] | r4 = *((r7 + 0x6c));
0x000a6d40 cmp r4, 0 |
| if (r4 > 0) {
0x000a6d42 ble 0xa6d56 |
0x000a6d44 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a6d46 add.w r2, r4, r4, lsl 2 | r2 = r4 + (r4 << 2);
0x000a6d4a add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x000a6d4e uxtb.w r2, r8 | r2 = (int8_t) r8;
0x000a6d52 strh r2, [r3, -0x12] | *((r3 - 0x12)) = r2;
| }
0x000a6d56 ldr r3, [r7, 0x70] | r3 = *((r7 + 0x70));
0x000a6d58 cmp r4, r3 |
| if (r4 >= r3) {
0x000a6d5a bge.w 0xa7712 | goto label_294;
| }
0x000a6d5e ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a6d60 add.w r2, r4, r4, lsl 2 | r2 = r4 + (r4 << 2);
0x000a6d64 adds r0, r4, 1 | r0 = r4 + 1;
0x000a6d66 str r0, [r7, 0x6c] | *((r7 + 0x6c)) = r0;
0x000a6d68 movs r0, 0x32 | r0 = 0x32;
0x000a6d6a str.w r0, [r3, r2, lsl 2] | __asm ("str.w r0, [r3, r2, lsl 2]");
0x000a6d6e movs r1, 0 | r1 = 0;
0x000a6d70 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x000a6d74 adds r2, r3, 4 | r2 = r3 + 4;
0x000a6d76 vst1.32 {d10}, [r2] | __asm ("vst1.32 {d10}, [r2]");
0x000a6d7a strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_112:
0x000a6d7e ldr r0, [sp, 0x20] | r0 = x;
0x000a6d80 ldr r1, [pc, 0x31c] |
0x000a6d82 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x000a6d84 add r1, pc | r1 = 0x14de28;
0x000a6d86 ldr r2, [r3, r6] | r2 = *((r3 + r6));
0x000a6d88 bl 0x24ec8 | fcn_00024ec8 (r0);
0x000a6d8c movs r2, 0 | r2 = 0;
0x000a6d8e mvn r3, 5 | r3 = ~5;
0x000a6d92 movs r1, 0x75 | r1 = 0x75;
0x000a6d94 str r0, [sp, 4] | var_4h = r0;
0x000a6d96 str r2, [sp] | *(sp) = r2;
0x000a6d98 mov r0, r7 | r0 = r7;
0x000a6d9a str r3, [sp, 8] | var_8h = r3;
0x000a6d9c movs r3, 3 | r3 = 3;
0x000a6d9e bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000a6da2 movs r3, 3 | r3 = 3;
0x000a6da4 movs r2, 2 | r2 = 2;
0x000a6da6 str r3, [sp] | *(sp) = r3;
0x000a6da8 movs r1, 0x6f | r1 = 0x6f;
0x000a6daa mov r0, r7 | r0 = r7;
0x000a6dac bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6db0 mov r0, r7 | r0 = r7;
0x000a6db2 bl 0x2ec54 | fcn_0002ec54 (r0);
0x000a6db6 ldr r3, [r7] | r3 = *(r7);
0x000a6db8 cmp r4, 0 |
0x000a6dba ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x000a6dbc ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a6dc0 it lt |
| if (r4 >= 0) {
0x000a6dc2 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x000a6dc6 cmp r3, 0 |
| if (r3 != 0) {
0x000a6dc8 bne.w 0xa75c4 | goto label_295;
| }
0x000a6dcc ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a6dce add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x000a6dd2 add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_99:
0x000a6dd6 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000a6dd8 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000a6dda str r3, [sp, 0x24] | var_24h = r3;
0x000a6ddc cmp r3, 0 |
| if (r3 == 0) {
0x000a6dde beq.w 0xa6a16 | goto label_65;
| }
0x000a6de2 ldr r3, [pc, 0x2c0] |
0x000a6de4 str.w fp, [sp, 0x78] | __asm ("str.w fp, [var_78h]");
0x000a6de8 mov fp, sb |
0x000a6dea strd sl, r8, [sp, 0x70] | __asm ("strd sl, r8, [var_70h]");
0x000a6dee add r3, pc | r3 = 0x14de98;
0x000a6df0 adds r3, 4 | r3 += 4;
0x000a6df2 str r3, [sp, 0x4c] | var_4ch = r3;
0x000a6df4 b 0xa6e02 | goto label_296;
| label_74:
0x000a6df6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a6df8 ldr r3, [r3] | r3 = *(r3);
0x000a6dfa str r3, [sp, 0x24] | var_24h = r3;
0x000a6dfc cmp r3, 0 |
| if (r3 == 0) {
0x000a6dfe beq.w 0xa6a0c | goto label_73;
| }
| label_296:
0x000a6e02 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a6e04 ldr.w sl, [r3, 8] | sl = *((r3 + 8));
0x000a6e08 ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000a6e0c cmp r3, 0 |
| if (r3 != 0) {
0x000a6e0e bne 0xa6df6 | goto label_74;
| }
0x000a6e10 ldrd r2, r3, [sp, 0x3c] | __asm ("ldrd r2, r3, [var_3ch]");
0x000a6e14 cmp r2, sl |
0x000a6e16 ite eq |
| if (r2 != sl) {
0x000a6e18 moveq r3, 0 | r3 = 0;
| }
| if (r2 == sl) {
0x000a6e1a andne r3, r3, 1 | r3 &= 1;
| }
0x000a6e1e cmp r3, 0 |
| if (r3 != 0) {
0x000a6e20 bne 0xa6df6 | goto label_74;
| }
0x000a6e22 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000a6e26 ands r3, r3, 0x80 | r3 &= 0x80;
0x000a6e2a it eq |
| if (r3 != r3) {
0x000a6e2c streq r3, [sp, 0x38] | var_38h = r3;
| }
| if (r3 != r3) {
0x000a6e2e bne.w 0xa757a | goto label_297;
| }
| label_97:
0x000a6e32 add r3, sp, 0x8c | r3 += var_8ch;
0x000a6e34 mov.w r8, 0 | r8 = 0;
0x000a6e38 str r3, [sp, 0xc] | var_ch = r3;
0x000a6e3a add r3, sp, 0x88 | r3 += var_88h;
0x000a6e3c str r3, [sp, 8] | var_8h = r3;
0x000a6e3e movs r3, 1 | r3 = 1;
0x000a6e40 movs r2, 0x70 | r2 = 0x70;
0x000a6e42 mov r1, sl | r1 = sl;
0x000a6e44 str r3, [sp] | *(sp) = r3;
0x000a6e46 mov r0, fp | r0 = fp;
0x000a6e48 mov r3, r8 | r3 = r8;
0x000a6e4a str.w r8, [sp, 4] | __asm ("str.w r8, [var_4h]");
0x000a6e4e bl 0x2fe28 | fcn_0002fe28 (r0, r1, r2, r3, r4, r5, r6);
0x000a6e52 movs r3, 7 | r3 = 7;
0x000a6e54 mov r2, r8 | r2 = r8;
0x000a6e56 movs r1, 0x47 | r1 = 0x47;
0x000a6e58 mov r0, r7 | r0 = r7;
0x000a6e5a str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000a6e5e movs r6, 8 | r6 = 8;
0x000a6e60 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6e64 ldr.w r5, [sl, 8] | r5 = *((sl + 8));
| if (r5 == 0) {
0x000a6e68 cbz r5, 0xa6e82 | goto label_298;
| }
| do {
0x000a6e6a mov r3, r6 | r3 = r6;
0x000a6e6c movs r2, 0 | r2 = 0;
0x000a6e6e movs r1, 0x47 | r1 = 0x47;
0x000a6e70 mov r0, r7 | r0 = r7;
0x000a6e72 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000a6e76 adds r6, 1 | r6++;
0x000a6e78 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6e7c ldr r5, [r5, 0x14] | r5 = *((r5 + 0x14));
0x000a6e7e cmp r5, 0 |
0x000a6e80 bne 0xa6e6a |
| } while (r5 != 0);
| label_298:
0x000a6e82 ldr r3, [sp, 0x88] | r3 = var_88h;
0x000a6e84 movs r5, 0 | r5 = 0;
0x000a6e86 movs r1, 0x23 | r1 = 0x23;
0x000a6e88 mov r0, r7 | r0 = r7;
0x000a6e8a str r5, [sp] | *(sp) = r5;
0x000a6e8c mov r2, r3 | r2 = r3;
0x000a6e8e str r3, [sp, 0x34] | var_34h = r3;
0x000a6e90 mov r3, r5 | r3 = r5;
0x000a6e92 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6e96 ldrd sb, r3, [r7, 0x6c] | __asm ("ldrd sb, r3, [r7, 0x6c]");
0x000a6e9a cmp sb, r3 |
| if (sb >= r3) {
0x000a6e9c bge.w 0xa75d6 | goto label_299;
| }
0x000a6ea0 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a6ea2 add.w r2, sb, sb, lsl 2 | r2 = sb + (sb << 2);
0x000a6ea6 add.w r1, sb, 1 | r1 = sb + 1;
0x000a6eaa str r1, [r7, 0x6c] | *((r7 + 0x6c)) = r1;
0x000a6eac movs r1, 0x56 | r1 = 0x56;
0x000a6eae str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x000a6eb2 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x000a6eb6 adds r2, r3, 4 | r2 = r3 + 4;
0x000a6eb8 vst1.32 {d9}, [r2] | __asm ("vst1.32 {d9}, [r2]");
0x000a6ebc strd r5, r5, [r3, 0xc] | __asm ("strd r5, r5, [r3, 0xc]");
| label_101:
0x000a6ec0 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a6ec2 cmp r3, 0x71 |
| if (r3 != 0x71) {
0x000a6ec4 beq 0xa6ef0 |
0x000a6ec6 ldrsh.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x000a6eca movs r2, 3 | r2 = 3;
0x000a6ecc str r2, [sp] | *(sp) = r2;
0x000a6ece movs r1, 0x5e | r1 = 0x5e;
0x000a6ed0 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a6ed2 mov r0, r7 | r0 = r7;
0x000a6ed4 subs r3, 1 | r3--;
0x000a6ed6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a6eda ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x000a6edc cmp r3, 0 |
| if (r3 <= 0) {
0x000a6ede ble 0xa6ef0 | goto label_300;
| }
0x000a6ee0 ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x000a6ee2 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000a6ee4 lsls r3, r0, 0xe | r3 = r0 << 0xe;
0x000a6ee6 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x000a6eea movs r3, 0x80 | r3 = 0x80;
0x000a6eec strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
| label_300:
0x000a6ef0 ldrsh.w r2, [sl, 0x22] | r2 = *((sl + 0x22));
0x000a6ef4 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000a6ef8 cmp r2, 0 |
0x000a6efa and r3, r3, 0x10000 | r3 &= 0x10000;
0x000a6efe itt gt |
| if (r2 <= 0) {
0x000a6f00 movgt r6, 0 | r6 = 0;
| }
| if (r2 <= 0) {
0x000a6f02 movgt r8, r6 | r8 = r6;
| }
0x000a6f04 str r3, [sp, 0x30] | var_30h = r3;
0x000a6f06 it gt |
| if (r2 <= 0) {
0x000a6f08 strgt sb, [sp, 0x48] | var_48h = sb;
| }
| if (r2 > 0) {
0x000a6f0c bgt.w 0xa7044 | goto label_301;
| }
0x000a6f10 b 0xa715c | goto label_302;
| label_75:
0x000a6f12 cmp r3, 0 |
| if (r3 == 0) {
0x000a6f14 beq.w 0xa7038 | goto label_303;
| }
| label_76:
0x000a6f18 ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x000a6f1c add.w sb, r3, -1 | sb = r3 + -1;
0x000a6f20 str.w sb, [fp, 0x38] | __asm ("str.w sb, [arg_38h]");
| label_77:
0x000a6f24 movs r3, 3 | r3 = 3;
0x000a6f26 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a6f28 str r3, [sp] | *(sp) = r3;
0x000a6f2a mov r1, sl | r1 = sl;
0x000a6f2c mov r3, r6 | r3 = r6;
0x000a6f2e mov r0, r7 | r0 = r7;
0x000a6f30 bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
0x000a6f34 ldr r3, [r7] | r3 = *(r7);
0x000a6f36 ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x000a6f38 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a6f3c mov r4, r2 | r4 = r2;
0x000a6f3e cmp r3, 0 |
| if (r3 != 0) {
0x000a6f40 bne.w 0xa706a | goto label_304;
| }
0x000a6f44 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a6f46 subs r1, r2, 1 | r1 = r2 - 1;
0x000a6f48 add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x000a6f4c add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| label_78:
0x000a6f50 ldrb r3, [r3] | r3 = *(r3);
0x000a6f52 cmp r2, 0 |
0x000a6f54 sub.w r3, r3, 0x5e | r3 -= 0x5e;
0x000a6f58 clz r3, r3 | r3 &= r3;
0x000a6f5c lsr.w r3, r3, 5 | r3 >>= 5;
0x000a6f60 it le |
| if (r2 > 0) {
0x000a6f62 movle r3, 0 | r3 = 0;
| }
0x000a6f64 cmp r3, 0 |
| if (r3 != 0) {
0x000a6f66 bne.w 0xa7146 | goto label_305;
| }
| label_80:
0x000a6f6a ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x000a6f6c lsls r3, r3, 0x1c | r3 <<= 0x1c;
| if (r3 != r3) {
0x000a6f6e bne.w 0xa70b4 | goto label_306;
| }
| label_79:
0x000a6f72 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000a6f76 lsls r4, r3, 0xf | r4 = r3 << 0xf;
| if (r4 >= r3) {
0x000a6f78 bpl 0xa7034 | void (*0xa7034)() ();
| }
| do {
| label_303:
0x000a7038 adds r6, 1 | r6++;
0x000a703a add.w r8, r8, 0xc | r8 += 0xc;
0x000a703e cmp r2, r6 |
| if (r2 <= r6) {
0x000a7040 ble.w 0xa7158 | goto label_307;
| }
| label_301:
0x000a7044 ldrsh.w r3, [sl, 0x20] | r3 = *((sl + 0x20));
0x000a7048 ldr.w r5, [sl, 4] | r5 = *((sl + 4));
0x000a704c cmp r3, r6 |
0x000a704e add r5, r8 | r5 += r8;
0x000a7050 beq 0xa7038 |
| } while (r3 == r6);
0x000a7052 ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x000a7054 tst.w r3, 0xf |
0x000a7058 ldr r3, [sp, 0x30] | r3 = var_30h;
| if ((r3 & 0xf) == 0) {
0x000a705a beq.w 0xa6f12 | goto label_75;
| }
0x000a705e cmp r3, 0 |
| if (r3 != 0) {
0x000a7060 bne.w 0xa6f18 | goto label_76;
| }
0x000a7064 ldr.w sb, [sp, 0x30] | sb = var_30h;
0x000a7068 b 0xa6f24 | goto label_77;
| label_304:
0x000a706a ldr r3, [sp, 0x4c] | r3 = var_4ch;
0x000a706c b 0xa6f50 | goto label_78;
| label_306:
0x000a70b4 ldr r3, [r7, 0x70] | r3 = *((r7 + 0x70));
0x000a70b6 cmp r2, r3 |
| if (r2 >= r3) {
0x000a70b8 bge.w 0xa7520 | goto label_308;
| }
0x000a70bc ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a70be add.w r1, r2, r2, lsl 2 | r1 = r2 + (r2 << 2);
0x000a70c2 movs r0, 0x33 | r0 = 0x33;
0x000a70c4 adds r2, 1 | r2++;
0x000a70c6 str r2, [r7, 0x6c] | *((r7 + 0x6c)) = r2;
0x000a70c8 movs r2, 0 | r2 = 0;
0x000a70ca str.w r0, [r3, r1, lsl 2] | __asm ("str.w r0, [r3, r1, lsl 2]");
0x000a70ce add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
0x000a70d2 adds r1, r3, 4 | r1 = r3 + 4;
0x000a70d4 vst1.32 {d8}, [r1] | __asm ("vst1.32 {d8}, [r1]");
0x000a70d8 strd r2, r2, [r3, 0xc] | __asm ("strd r2, r2, [r3, 0xc]");
| label_93:
0x000a70dc ldr.w r1, [pc, 0xb60] | r1 = *(0x000a7c40);
0x000a70e0 ldr r3, [r5] | r3 = *(r5);
0x000a70e2 ldr.w r2, [sl] | r2 = *(sl);
0x000a70e6 add r1, pc | r1 += pc;
0x000a70e8 ldr r0, [sp, 0x20] | r0 = x;
0x000a70ea bl 0x24ec8 | fcn_00024ec8 (r0);
0x000a70ee movs r2, 0 | r2 = 0;
0x000a70f0 mvn r3, 5 | r3 = ~5;
0x000a70f4 str r0, [sp, 4] | var_4h = r0;
0x000a70f6 movs r1, 0x75 | r1 = 0x75;
0x000a70f8 str r3, [sp, 8] | var_8h = r3;
0x000a70fa mov r0, r7 | r0 = r7;
0x000a70fc movs r3, 3 | r3 = 3;
0x000a70fe str r2, [sp] | *(sp) = r2;
0x000a7100 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000a7104 ldr r3, [sp, 0x30] | r3 = var_30h;
| if (r3 == 0) {
0x000a7106 cbz r3, 0xa713e | goto label_309;
| }
0x000a7108 ldrb r3, [r5, 4] | r3 = *((r5 + 4));
0x000a710a and r3, r3, 0xf0 | r3 &= 0xf0;
0x000a710e cmp r3, 0x10 |
| if (r3 == 0x10) {
0x000a7110 beq 0xa713e | goto label_309;
| }
0x000a7112 mov r1, sb | r1 = sb;
0x000a7114 mov r0, r7 | r0 = r7;
0x000a7116 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
| do {
0x000a711a ldr r3, [r7] | r3 = *(r7);
0x000a711c cmp r4, 0 |
0x000a711e ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x000a7120 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a7124 it lt |
| if (r4 >= 0) {
0x000a7126 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x000a712a cmp r3, 0 |
| if (r3 != 0) {
0x000a712c bne.w 0xa7290 | goto label_310;
| }
0x000a7130 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a7132 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x000a7136 add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_83:
0x000a713a str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000a713c b 0xa6f72 | goto label_79;
| label_309:
0x000a713e mov r0, r7 | r0 = r7;
0x000a7140 bl 0x2ec54 | fcn_0002ec54 (r0);
0x000a7144 b 0xa711a |
| } while (1);
| label_305:
0x000a7146 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a7148 add.w r1, r2, r2, lsl 2 | r1 = r2 + (r2 << 2);
0x000a714c add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
0x000a7150 movs r1, 0x80 | r1 = 0x80;
0x000a7152 strh r1, [r3, -0x12] | *((r3 - 0x12)) = r1;
0x000a7156 b 0xa6f6a | goto label_80;
| label_307:
0x000a7158 ldr.w sb, [sp, 0x48] | sb = var_48h;
| label_302:
0x000a715c ldr.w r1, [sl, 0x10] | r1 = *((sl + 0x10));
| if (r1 != 0) {
0x000a7160 cbz r1, 0xa7170 |
0x000a7162 ldr r3, [sp, 0x20] | r3 = x;
0x000a7164 ldr r2, [r3, 0x20] | r2 = *((r3 + 0x20));
0x000a7166 and r2, r2, 0x200 | r2 &= 0x200;
0x000a716a cmp r2, 0 |
| if (r2 == 0) {
0x000a716c beq.w 0xa759a | goto label_311;
| }
| }
| label_98:
0x000a7170 ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a7172 cmp r3, 0x71 |
| if (r3 != 0x71) {
0x000a7174 bne.w 0xa72ae | goto label_312;
| }
| label_85:
0x000a7178 movs r3, 0 | r3 = 0;
0x000a717a ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a717c str r3, [sp] | *(sp) = r3;
0x000a717e movs r1, 0x26 | r1 = 0x26;
0x000a7180 mov r3, sb | r3 = sb;
0x000a7182 mov r0, r7 | r0 = r7;
0x000a7184 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a7188 subs.w sb, sb, 1 | sb--;
0x000a718c ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
| if (sb < sb) {
0x000a718e bpl 0xa7194 |
0x000a7190 add.w sb, r2, -1 | sb = r2 + -1;
| }
0x000a7194 ldr r3, [r7] | r3 = *(r7);
0x000a7196 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a719a cmp r3, 0 |
| if (r3 != 0) {
0x000a719c bne.w 0xa72a4 | goto label_313;
| }
0x000a71a0 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a71a2 add.w sb, sb, sb, lsl 2 | sb += (sb << 2);
0x000a71a6 add.w r3, r3, sb, lsl 2 | r3 += (sb << 2);
| label_84:
0x000a71aa str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000a71ac ldr r3, [sp, 0x44] | r3 = var_44h;
0x000a71ae cmp r3, 0x71 |
| if (r3 == 0x71) {
0x000a71b0 beq.w 0xa6df6 | goto label_74;
| }
0x000a71b4 ldr.w r2, [pc, 0xa8c] |
0x000a71b8 movs r1, 2 | r1 = 2;
0x000a71ba mov r0, r7 | r0 = r7;
0x000a71bc add r2, pc | r2 = 0x14ee04;
0x000a71be bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000a71c2 ldr.w r5, [sl, 8] | r5 = *((sl + 8));
0x000a71c6 cmp r5, 0 |
| if (r5 == 0) {
0x000a71c8 beq.w 0xa6df6 | goto label_74;
| }
0x000a71cc ldr.w r3, [pc, 0xa78] |
0x000a71d0 movs r6, 0 | r6 = 0;
0x000a71d2 ldr.w sb, [sp, 0x38] | sb = var_38h;
0x000a71d6 mov r8, r6 | r8 = r6;
0x000a71d8 str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x000a71dc add r3, pc | r3 = 0x14ee28;
0x000a71de add.w sl, r3, 4 | sl = r3 + 4;
0x000a71e2 b 0xa71fa | goto label_314;
| label_81:
0x000a71e4 ldr r3, [r7, 0x68] | r3 = *((r7 + 0x68));
0x000a71e6 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x000a71ea add.w r3, r3, r4, lsl 2 | r3 += (r4 << 2);
| label_82:
0x000a71ee str r2, [r3, 8] | *((r3 + 8)) = r2;
| do {
0x000a71f0 ldr r5, [r5, 0x14] | r5 = *((r5 + 0x14));
0x000a71f2 adds r6, 1 | r6++;
0x000a71f4 cmp r5, 0 |
| if (r5 == 0) {
0x000a71f6 beq.w 0xa75be | goto label_315;
| }
| label_314:
0x000a71fa cmp sb, r5 |
0x000a71fc beq 0xa71f0 |
| } while (sb == r5);
0x000a71fe ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x000a7200 movs r3, 3 | r3 = 3;
0x000a7202 movs r1, 0x62 | r1 = 0x62;
0x000a7204 mov r0, r7 | r0 = r7;
0x000a7206 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x000a720a add r2, r6 | r2 += r6;
0x000a720c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a7210 ldrd r4, r3, [r7, 0x6c] | __asm ("ldrd r4, r3, [r7, 0x6c]");
0x000a7214 add.w ip, r6, 8 |
0x000a7218 cmp r4, r3 |
| if (r4 >= r3) {
0x000a721a bge.w 0xa754a | goto label_316;
| }
0x000a721e ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x000a7220 add.w r1, r4, r4, lsl 2 | r1 = r4 + (r4 << 2);
0x000a7224 adds r3, r4, 1 | r3 = r4 + 1;
0x000a7226 mov.w fp, 3 |
0x000a722a mov.w lr, 0x35 | lr = 0x35;
0x000a722e str r3, [r7, 0x6c] | *((r7 + 0x6c)) = r3;
0x000a7230 add.w r0, r2, r1, lsl 2 | r0 = r2 + (r1 << 2);
0x000a7234 str.w ip, [r0, 4] | __asm ("str.w ip, [r0, 4]");
0x000a7238 strd r8, fp, [r0, 8] | __asm ("strd r8, fp, [r0, 8]");
0x000a723c str.w r8, [r0, 0x10] | __asm ("str.w r8, [r0, 0x10]");
0x000a7240 str.w lr, [r2, r1, lsl 2] | __asm ("str.w lr, [r2, r1, lsl 2]");
| label_96:
0x000a7244 cmp r3, 0 |
| if (r3 > 0) {
0x000a7246 ble 0xa7258 |
0x000a7248 ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x000a724a add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000a724e add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x000a7252 movs r3, 0x90 | r3 = 0x90;
0x000a7254 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
0x000a7258 ldr r2, [r5] | r2 = *(r5);
0x000a725a movs r1, 4 | r1 = 4;
0x000a725c mov r0, r7 | r0 = r7;
0x000a725e bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000a7262 movs r3, 3 | r3 = 3;
0x000a7264 movs r2, 4 | r2 = 4;
0x000a7266 movs r1, 0x6f | r1 = 0x6f;
0x000a7268 str r3, [sp] | *(sp) = r3;
0x000a726a mov r0, r7 | r0 = r7;
0x000a726c movs r3, 2 | r3 = 2;
0x000a726e bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a7272 mov r0, r7 | r0 = r7;
0x000a7274 bl 0x2ec54 | fcn_0002ec54 (r0);
0x000a7278 ldr r3, [r7] | r3 = *(r7);
0x000a727a cmp r4, 0 |
0x000a727c ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x000a727e ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a7282 it lt |
| if (r4 >= 0) {
0x000a7284 addlt r4, r2, -1 | r4 = r2 + -1;
| }
0x000a7288 cmp r3, 0 |
| if (r3 == 0) {
0x000a728a beq 0xa71e4 | goto label_81;
| }
0x000a728c mov r3, sl | r3 = sl;
0x000a728e b 0xa71ee | goto label_82;
| label_310:
0x000a7290 ldr.w r3, [pc, 0x9b8] |
0x000a7294 add r3, pc | r3 = 0x14eee4;
0x000a7296 adds r3, 4 | r3 += 4;
0x000a7298 b 0xa713a | goto label_83;
| label_313:
0x000a72a4 ldr.w r3, [pc, 0x9ac] |
0x000a72a8 add r3, pc | r3 = 0x14ef00;
0x000a72aa adds r3, 4 | r3 += 4;
0x000a72ac b 0xa71aa | goto label_84;
| label_312:
0x000a72ae ldr.w r6, [sl, 8] | r6 = *((sl + 8));
0x000a72b2 cmp r6, 0 |
| if (r6 == 0) {
0x000a72b4 beq.w 0xa7178 | goto label_85;
| }
0x000a72b8 ldr.w r3, [pc, 0x99c] | r3 = *(0x000a7c58);
0x000a72bc mov.w r8, -1 | r8 = -1;
0x000a72c0 movs r2, 0 | r2 = 0;
0x000a72c2 mov r5, r8 | r5 = r8;
0x000a72c4 mov r8, r2 | r8 = r2;
0x000a72c6 str.w sb, [sp, 0x7c] | __asm ("str.w sb, [var_7ch]");
0x000a72ca add r3, pc | r3 += pc;
0x000a72cc adds r3, 4 | r3 += 4;
0x000a72ce str r3, [sp, 0x5c] | var_5ch = r3;
0x000a72d0 ldr.w r3, [pc, 0x988] |
0x000a72d4 add r3, pc |
0x000a72d6 adds r3, 4 | r3 += 4;
0x000a72d8 str r3, [sp, 0x60] | var_60h = r3;
0x000a72da ldr.w r3, [pc, 0x984] | r3 = *(0x000a7c60);
0x000a72de add r3, pc |
0x000a72e0 str r3, [sp, 0x50] | var_50h = r3;
0x000a72e2 ldr.w r3, [pc, 0x980] | r3 = *(0x000a7c64);
0x000a72e6 add r3, pc | r3 = 0x29d500;
0x000a72e8 str r3, [sp, 0x54] | var_54h = r3;
| do {
0x000a72ea ldr r3, [sp, 0x38] | r3 = var_38h;
0x000a72ec ldr.w r4, [fp, 0x38] | r4 = *(arg_38h);
0x000a72f0 cmp r3, r6 |
0x000a72f2 add.w r4, r4, -1 | r4 += -1;
0x000a72f6 str.w r4, [fp, 0x38] | __asm ("str.w r4, [arg_38h]");
| if (r3 != r6) {
0x000a72fa beq 0xa73e2 |
0x000a72fc strd r2, r5, [sp, 8] | __asm ("strd r2, r5, [var_8h]");
0x000a7300 add r3, sp, 0x90 | r3 += var_90h;
0x000a7302 movs r5, 0 | r5 = 0;
0x000a7304 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a7306 mov r1, r6 | r1 = r6;
0x000a7308 str r5, [sp] | *(sp) = r5;
0x000a730a str r3, [sp, 4] | var_4h = r3;
0x000a730c mov r0, fp | r0 = fp;
0x000a730e mov r3, r5 | r3 = r5;
0x000a7310 mov.w sb, 3 | sb = 3;
0x000a7314 bl 0x6f88c | fcn_0006f88c (r0, r1, r2, r3, r4, r5, r6);
0x000a7318 movs r3, 1 | r3 = 1;
0x000a731a add.w r2, r8, 8 | r2 = r8 + 8;
0x000a731e movs r1, 0x56 | r1 = 0x56;
0x000a7320 str r5, [sp] | *(sp) = r5;
0x000a7322 mov r5, r0 | r5 = r0;
0x000a7324 mov r0, r7 | r0 = r7;
0x000a7326 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a732a ldr r2, [sp, 0x8c] | r2 = var_8ch;
0x000a732c mov r3, r4 | r3 = r4;
0x000a732e mov r0, r7 | r0 = r7;
0x000a7330 add r2, r8 | r2 += r8;
0x000a7332 mov r1, r2 | r1 = r2;
0x000a7334 str r2, [sp, 0x30] | var_30h = r2;
0x000a7336 ldrh r2, [r6, 0x34] | r2 = *((r6 + 0x34));
0x000a7338 strd r5, r2, [sp] | __asm ("strd r5, r2, [sp]");
0x000a733c mov r2, r1 | r2 = r1;
0x000a733e movs r1, 0x1c | r1 = 0x1c;
0x000a7340 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x000a7344 mov r1, sb | r1 = sb;
0x000a7346 mov r4, r0 | r4 = r0;
0x000a7348 ldr r2, [sp, 0x50] | r2 = var_50h;
0x000a734a mov r0, r7 | r0 = r7;
0x000a734c bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000a7350 mov r3, sb | r3 = sb;
0x000a7352 movs r1, 0x6f | r1 = 0x6f;
0x000a7354 movs r2, 7 | r2 = 7;
0x000a7356 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000a735a mov r0, r7 | r0 = r7;
0x000a735c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a7360 ldr r2, [sp, 0x54] | r2 = var_54h;
0x000a7362 movs r1, 4 | r1 = 4;
0x000a7364 mov r0, r7 | r0 = r7;
0x000a7366 bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000a736a mov r3, sb | r3 = sb;
0x000a736c movs r2, 4 | r2 = 4;
0x000a736e movs r1, 0x6f | r1 = 0x6f;
0x000a7370 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000a7374 mov r0, r7 | r0 = r7;
0x000a7376 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a737a ldr r2, [r6] | r2 = *(r6);
0x000a737c movs r1, 4 | r1 = 4;
0x000a737e mov r0, r7 | r0 = r7;
0x000a7380 bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000a7384 mov r3, sb | r3 = sb;
0x000a7386 movs r2, 4 | r2 = 4;
0x000a7388 movs r1, 0x6f | r1 = 0x6f;
0x000a738a str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000a738e str r0, [sp, 0x48] | var_48h = r0;
0x000a7390 mov r0, r7 | r0 = r7;
0x000a7392 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a7396 mov r0, r7 | r0 = r7;
0x000a7398 bl 0x2ec54 | fcn_0002ec54 (r0);
0x000a739c ldr r2, [r7] | r2 = *(r7);
0x000a739e cmp r4, 0 |
0x000a73a0 ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x000a73a2 mov sb, r0 | sb = r0;
0x000a73a4 ldrb.w r2, [r2, 0x57] | r2 = *((r2 + 0x57));
0x000a73a8 mov r0, r3 | r0 = r3;
0x000a73aa it lt |
| if (r4 >= 0) {
0x000a73ac addlt r4, r3, -1 | r4 = r3 + -1;
| }
| if (r2 != 0) {
0x000a73b0 cbnz r2, 0xa7414 | goto label_317;
| }
0x000a73b2 ldr r1, [r7, 0x68] | r1 = *((r7 + 0x68));
0x000a73b4 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x000a73b8 add.w r1, r1, r4, lsl 2 | r1 += (r4 << 2);
| label_88:
0x000a73bc str r3, [r1, 8] | *((r1 + 8)) = r3;
0x000a73be ldrb.w r1, [r6, 0x36] | r1 = *((r6 + 0x36));
| if (r1 != 0) {
0x000a73c2 cbnz r1, 0xa7418 | goto label_318;
| }
| label_89:
0x000a73c4 cmp.w sb, 0 |
0x000a73c8 it lt |
| if (sb >= 0) {
0x000a73ca addlt sb, r0, -1 | sb = r0 + -1;
| }
| if (r2 != 0) {
0x000a73ce cbnz r2, 0xa7410 | goto label_319;
| }
0x000a73d0 ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x000a73d2 add.w r3, sb, sb, lsl 2 | r3 = sb + (sb << 2);
0x000a73d6 add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_87:
0x000a73da str r0, [r3, 8] | *((r3 + 8)) = r0;
0x000a73dc ldr r2, [sp, 0x90] | r2 = var_90h;
| if (r2 != 0) {
0x000a73de cbnz r2, 0xa73f4 | goto label_320;
| }
| label_86:
0x000a73e0 mov r2, r6 | r2 = r6;
| }
0x000a73e2 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x000a73e4 add.w r8, r8, 1 | r8++;
0x000a73e8 cmp r6, 0 |
0x000a73ea bne.w 0xa72ea |
| } while (r6 != 0);
0x000a73ee ldr.w sb, [sp, 0x7c] | sb = var_7ch;
0x000a73f2 b 0xa7178 | goto label_85;
| label_320:
0x000a73f4 ldr.w r1, [fp, 8] | r1 = *(arg_8h);
0x000a73f8 mvns r2, r2 | r2 = ~r2;
0x000a73fa ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x000a73fc ldrd r3, r4, [r0, 0x38] | __asm ("ldrd r3, r4, [r0, 0x38]");
0x000a7400 cmn r4, r3 |
| if (r4 < r3) {
0x000a7402 bmi.w 0xa75e8 | goto label_321;
| }
0x000a7406 ldr r1, [r1, 0x6c] | r1 = *((r1 + 0x6c));
0x000a7408 ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000a740a str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x000a740e b 0xa73e0 | goto label_86;
| label_319:
0x000a7410 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x000a7412 b 0xa73da | goto label_87;
| label_317:
0x000a7414 ldr r1, [sp, 0x60] | r1 = var_60h;
0x000a7416 b 0xa73bc | goto label_88;
| label_318:
0x000a7418 ldr.w r2, [fp, 0x38] | r2 = *(arg_38h);
0x000a741c ldrh r1, [r6, 0x32] | r1 = *((r6 + 0x32));
0x000a741e str r2, [sp, 0x64] | var_64h = r2;
0x000a7420 subs r2, 1 | r2--;
0x000a7422 str r2, [sp, 0x58] | var_58h = r2;
0x000a7424 str.w r2, [fp, 0x38] | __asm ("str.w r2, [arg_38h]");
| if (r1 == 0) {
0x000a7428 cbz r1, 0xa746e | goto label_322;
| }
0x000a742a str.w r8, [sp, 0x68] | __asm ("str.w r8, [var_68h]");
0x000a742e movs r4, 0 | r4 = 0;
0x000a7430 ldr.w r8, [sp, 0x58] | r8 = var_58h;
| do {
0x000a7434 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000a7436 ldrsh.w r3, [r3, r4, lsl 1] | offset_10 = r4 << 1;
| r3 = *((r3 + offset_10));
0x000a743a cmp r3, 0 |
| if (r3 >= 0) {
0x000a743c blt 0xa7450 |
0x000a743e ldr.w r2, [sl, 4] | r2 = *((sl + 4));
0x000a7442 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000a7446 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x000a744a ldrb r3, [r2, 4] | r3 = *((r2 + 4));
0x000a744c lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
| if (r0 != r3) {
0x000a744e bne 0xa7462 | goto label_323;
| }
| }
0x000a7450 movs r3, 0 | r3 = 0;
0x000a7452 movs r1, 0x32 | r1 = 0x32;
0x000a7454 str r3, [sp] | *(sp) = r3;
0x000a7456 adds r2, r5, r4 | r2 = r5 + r4;
0x000a7458 mov r3, r8 | r3 = r8;
0x000a745a mov r0, r7 | r0 = r7;
0x000a745c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a7460 ldrh r1, [r6, 0x32] | r1 = *((r6 + 0x32));
| label_323:
0x000a7462 adds r4, 1 | r4++;
0x000a7464 cmp r1, r4 |
0x000a7466 bgt 0xa7434 |
| } while (r1 > r4);
0x000a7468 ldr.w r8, [sp, 0x68] | r8 = var_68h;
0x000a746c ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
| label_322:
0x000a746e mov r4, r3 | r4 = r3;
0x000a7470 ldr r3, [r7, 0x70] | r3 = *((r7 + 0x70));
0x000a7472 cmp r4, r3 |
| if (r4 >= r3) {
0x000a7474 bge.w 0xa76d8 | goto label_324;
| }
0x000a7478 ldr r1, [r7, 0x68] | r1 = *((r7 + 0x68));
0x000a747a add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x000a747e adds r0, r4, 1 | r0 = r4 + 1;
0x000a7480 str r0, [r7, 0x6c] | *((r7 + 0x6c)) = r0;
0x000a7482 movs r2, 0 | r2 = 0;
0x000a7484 ldr r0, [sp, 0x30] | r0 = var_30h;
0x000a7486 mov.w lr, 0x26 | lr = 0x26;
0x000a748a add.w ip, r1, r3, lsl 2 |
0x000a748e strd r0, r2, [ip, 4] | __asm ("strd r0, r2, [ip, 4]");
0x000a7492 strd r2, r2, [ip, 0xc] | __asm ("strd r2, r2, [ip, 0xc]");
0x000a7496 str.w lr, [r1, r3, lsl 2] | __asm ("str.w lr, [r1, r3, lsl 2]");
| label_107:
0x000a749a ldr r1, [sp, 0x58] | r1 = var_58h;
0x000a749c mov r0, r7 | r0 = r7;
0x000a749e bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x000a74a2 ldr r3, [r7] | r3 = *(r7);
0x000a74a4 cmp r4, 0 |
0x000a74a6 ldr r1, [r7, 0x6c] | r1 = *((r7 + 0x6c));
0x000a74a8 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a74ac it lt |
| if (r4 >= 0) {
0x000a74ae addlt r4, r1, -1 | r4 = r1 + -1;
| }
0x000a74b2 cmp r3, 0 |
| if (r3 != 0) {
0x000a74b4 bne 0xa7540 | goto label_325;
| }
0x000a74b6 ldr r2, [r7, 0x68] | r2 = *((r7 + 0x68));
0x000a74b8 add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x000a74bc add.w r3, r2, r3, lsl 2 | r3 = r2 + (r3 << 2);
| label_95:
0x000a74c0 str r1, [r3, 8] | *((r3 + 8)) = r1;
0x000a74c2 mov r0, r7 | r0 = r7;
0x000a74c4 ldrh r1, [r6, 0x32] | r1 = *((r6 + 0x32));
0x000a74c6 ldr r3, [sp, 0x58] | r3 = var_58h;
0x000a74c8 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a74ca strd r5, r1, [sp] | __asm ("strd r5, r1, [sp]");
0x000a74ce movs r1, 0x28 | r1 = 0x28;
0x000a74d0 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
0x000a74d4 ldr.w r2, [pc, 0x790] |
0x000a74d8 movs r1, 3 | r1 = 3;
0x000a74da mov r0, r7 | r0 = r7;
0x000a74dc add r2, pc | r2 = 0x14f148;
0x000a74de bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000a74e2 mov r0, r7 | r0 = r7;
0x000a74e4 ldr r1, [sp, 0x48] | r1 = var_48h;
0x000a74e6 bl 0x2e490 | fcn_0002e490 (r0, r1, r2);
0x000a74ea ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x000a74ec ldrd r3, r2, [r0, 0x38] | __asm ("ldrd r3, r2, [r0, 0x38]");
0x000a74f0 cmn r2, r3 |
| if (r2 < r3) {
0x000a74f2 bmi.w 0xa7616 | goto label_326;
| }
0x000a74f6 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000a74f8 ldr r2, [r0, 0x40] | r2 = *((r0 + 0x40));
0x000a74fa ldr r0, [r7, 0x6c] | r0 = *((r7 + 0x6c));
0x000a74fc lsls r3, r3, 2 | r3 <<= 2;
0x000a74fe rsbs r3, r3, 0 | r3 -= ;
0x000a7500 str r0, [r2, r3] | *((r2 + r3)) = r0;
0x000a7502 ldr r3, [r7] | r3 = *(r7);
0x000a7504 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x000a7508 b 0xa73c4 | goto label_89;
| label_187:
0x000a750a mov r1, r2 | r1 = r2;
0x000a750c b.w 0xa54f2 | goto label_90;
| label_173:
0x000a7510 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a7512 cmp r6, 1 |
0x000a7514 ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x000a7516 ldr r1, [r3] | r1 = *(r3);
| if (r6 == 1) {
0x000a7518 beq.w 0xa529a | goto label_91;
| }
0x000a751c b.w 0xa5280 | goto label_92;
| label_308:
0x000a7520 movs r3, 0 | r3 = 0;
0x000a7522 movs r2, 3 | r2 = 3;
0x000a7524 movs r1, 0x33 | r1 = 0x33;
0x000a7526 mov r0, r7 | r0 = r7;
0x000a7528 str r3, [sp] | *(sp) = r3;
0x000a752a bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000a752e mov r4, r0 | r4 = r0;
0x000a7530 b 0xa70dc | goto label_93;
| label_293:
0x000a7532 ldr r3, [sp, 0x70] | r3 = var_70h;
0x000a7534 b.w 0xa6c98 | goto label_94;
| label_325:
0x000a7540 ldr.w r3, [pc, 0x728] |
0x000a7544 add r3, pc | r3 = 0x14f1b4;
0x000a7546 adds r3, 4 | r3 += 4;
0x000a7548 b 0xa74c0 | goto label_95;
| label_316:
0x000a754a movs r3, 3 | r3 = 3;
0x000a754c mov r2, ip | r2 = ip;
0x000a754e str r3, [sp] | *(sp) = r3;
0x000a7550 movs r1, 0x35 | r1 = 0x35;
0x000a7552 movs r3, 0 | r3 = 0;
0x000a7554 mov r0, r7 | r0 = r7;
0x000a7556 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000a755a ldr r3, [r7, 0x6c] | r3 = *((r7 + 0x6c));
0x000a755c mov r4, r0 | r4 = r0;
0x000a755e b 0xa7244 | goto label_96;
| label_297:
0x000a757a ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x000a757e str r3, [sp, 0x38] | var_38h = r3;
0x000a7580 ldr r2, [sp, 0x38] | r2 = var_38h;
| if (r3 != 0) {
0x000a7582 cbnz r3, 0xa758a | goto label_327;
| }
0x000a7584 b 0xa6e32 | goto label_97;
| do {
0x000a7586 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
| if (r2 == 0) {
0x000a7588 cbz r2, 0xa7596 | goto label_328;
| }
| label_327:
0x000a758a ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x000a758e and r3, r3, 3 | r3 &= 3;
0x000a7592 cmp r3, 2 |
0x000a7594 bne 0xa7586 |
| } while (r3 != 2);
| label_328:
0x000a7596 str r2, [sp, 0x38] | var_38h = r2;
0x000a7598 b 0xa6e32 | goto label_97;
| label_311:
0x000a759a mov r4, r3 | r4 = r3;
0x000a759c mov r0, r3 | r0 = r3;
0x000a759e bl 0x321b0 | fcn_000321b0 (r0, r1, r2, r3, r4);
0x000a75a2 ldrb.w r3, [r4, 0x57] | r3 = *((r4 + 0x57));
0x000a75a6 mov r8, r0 | r8 = r0;
0x000a75a8 cmp r3, 0 |
| if (r3 == 0) {
0x000a75aa beq.w 0xa77d6 | goto label_329;
| }
0x000a75ae cmp r0, 0 |
| if (r0 == 0) {
0x000a75b0 beq.w 0xa7170 | goto label_98;
| }
| label_121:
0x000a75b4 ldr r0, [sp, 0x20] | r0 = x;
0x000a75b6 mov r1, r8 | r1 = r8;
0x000a75b8 bl 0x1a608 | fcn_0001a608 (r0, r1);
0x000a75bc b 0xa7170 | goto label_98;
| label_315:
0x000a75be ldr.w fp, [sp, 0x30] | fp = var_30h;
0x000a75c2 b 0xa6df6 | goto label_74;
| label_295:
0x000a75c4 ldr.w r3, [pc, 0x6a8] |
0x000a75c8 add r3, pc | r3 = 0x14f23c;
0x000a75ca adds r3, 4 | r3 += 4;
0x000a75cc b 0xa6dd6 | goto label_99;
| label_268:
0x000a75ce ldr r2, [sp, 0x48] | r2 = var_48h;
0x000a75d0 str r2, [sp, 0x34] | var_34h = r2;
0x000a75d2 b.w 0xa65b0 | goto label_100;
| label_299:
0x000a75d6 movs r3, 1 | r3 = 1;
0x000a75d8 movs r2, 7 | r2 = 7;
0x000a75da movs r1, 0x56 | r1 = 0x56;
0x000a75dc mov r0, r7 | r0 = r7;
0x000a75de str r5, [sp] | *(sp) = r5;
0x000a75e0 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000a75e4 mov sb, r0 | sb = r0;
0x000a75e6 b 0xa6ec0 | goto label_101;
| label_321:
0x000a75e8 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x000a75ec b 0xa73e0 | goto label_86;
| label_170:
0x000a75ee ldr r3, [sp, 0x60] | r3 = var_60h;
| do {
0x000a75f0 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000a75f2 ldr r3, [r3] | r3 = *(r3);
| if (r2 == 0) {
0x000a75f4 cbz r2, 0xa7610 | goto label_330;
| }
0x000a75f6 ldrb.w r1, [r2, 0x2b] | r1 = *((r2 + 0x2b));
| if (r1 == 0) {
0x000a75fa cbnz r1, 0xa7600 |
0x000a75fc ldr r1, [r2, 0x30] | r1 = *((r2 + 0x30));
| if (r1 != 0) {
0x000a75fe cbnz r1, 0xa7608 | goto label_331;
| }
| }
0x000a7600 cmp r3, 0 |
0x000a7602 bne 0xa75f0 |
| } while (r3 != 0);
0x000a7604 b.w 0xa4e56 | goto label_5;
| label_331:
0x000a7608 str r2, [sp, 0x24] | var_24h = r2;
0x000a760a str r3, [sp, 0x60] | var_60h = r3;
0x000a760c b.w 0xa522a | goto label_102;
| label_330:
0x000a7610 str r3, [sp, 0x60] | var_60h = r3;
0x000a7612 b.w 0xa6c9a | goto label_103;
| label_326:
0x000a7616 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000a7618 mov r1, r7 | r1 = r7;
0x000a761a rsbs r2, r3, 0 | r2 = r3 - ;
0x000a761c bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x000a7620 ldr r3, [r7] | r3 = *(r7);
0x000a7622 ldr r0, [r7, 0x6c] | r0 = *((r7 + 0x6c));
0x000a7624 ldrb.w r2, [r3, 0x57] | r2 = *((r3 + 0x57));
0x000a7628 b 0xa73c4 | goto label_89;
| label_222:
0x000a762a movs r3, 0 | r3 = 0;
0x000a762c mov r0, sl | r0 = sl;
0x000a762e str r3, [sp] | *(sp) = r3;
0x000a7630 movs r3, 1 | r3 = 1;
0x000a7632 mov r2, r3 | r2 = r3;
0x000a7634 movs r1, 0x54 | r1 = 0x54;
0x000a7636 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a763a b.w 0xa4e56 | goto label_5;
| do {
| label_184:
0x000a763e ldr r5, [sp, 0x6c] | r5 = var_6ch;
0x000a7640 mov sl, r7 | sl = r7;
| label_183:
0x000a7642 ldr.w r2, [pc, 0x630] | r2 = *(0x000a7c74);
0x000a7646 movs r1, 7 | r1 = 7;
0x000a7648 mov r0, sl | r0 = sl;
0x000a764a add r2, pc | r2 += pc;
0x000a764c addw r2, r2, 0xcb4 | __asm ("addw r2, r2, aav.0x000000ff");
0x000a7650 bl 0x2db78 | r0 = fcn_0002db78 (r0, r1, r2);
| if (r0 != 0) {
0x000a7654 cbz r0, 0xa7676 |
0x000a7656 rsb.w r2, r5, 1 | r2 = 1 - r5;
0x000a765a str r2, [r0, 8] | *((r0 + 8)) = r2;
0x000a765c ldr.w r2, [pc, 0x618] |
0x000a7660 add r2, pc | r2 = 0x14f2dc;
0x000a7662 str r2, [r0, 0x38] | *((r0 + 0x38)) = r2;
0x000a7664 ldr.w r2, [pc, 0x614] |
0x000a7668 add r2, pc | r2 = 0x14f2e8;
0x000a766a str r2, [r0, 0x74] | *((r0 + 0x74)) = r2;
0x000a766c movs r2, 0xff | r2 = 0xff;
0x000a766e strb.w r2, [r0, 0x29] | *((r0 + 0x29)) = r2;
0x000a7672 strb.w r2, [r0, 0x65] | *((r0 + 0x65)) = r2;
| }
0x000a7676 ldr.w r3, [sl, 0x6c] | r3 = *((sl + 0x6c));
0x000a767a subs r2, r3, 2 | r2 = r3 - 2;
0x000a767c ldr.w r3, [sl] | r3 = *(sl);
0x000a7680 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000a7684 cmp r3, 0 |
| if (r3 != 0) {
0x000a7686 bne 0xa774a | goto label_332;
| }
0x000a7688 ldr.w r3, [sl, 0x68] | r3 = *((sl + 0x68));
| label_116:
0x000a768c str r2, [r3, 0xc] | *((r3 + 0xc)) = r2;
0x000a768e b.w 0xa4e56 | goto label_5;
| label_269:
0x000a7692 mov r0, r2 | r0 = r2;
0x000a7694 str r1, [sp, 0x50] | var_50h = r1;
0x000a7696 str r2, [sp, 0x4c] | var_4ch = r2;
0x000a7698 blx 0x85b4 | fcn_000085b4 ();
0x000a769c ldr r2, [sp, 0x4c] | r2 = var_4ch;
0x000a769e adds r3, r0, 1 | r3 = r0 + 1;
0x000a76a0 ldr r1, [sp, 0x50] | r1 = var_50h;
0x000a76a2 add r3, r2 | r3 += r2;
0x000a76a4 b.w 0xa65d8 | goto label_104;
| label_287:
0x000a76a8 movs r3, 0 | r3 = 0;
0x000a76aa movs r1, 0x23 | r1 = 0x23;
0x000a76ac mov r2, r3 | r2 = r3;
0x000a76ae mov r0, fp | r0 = fp;
0x000a76b0 str r3, [sp] | *(sp) = r3;
0x000a76b2 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000a76b6 mov r4, r0 | r4 = r0;
0x000a76b8 add.w sb, r0, 1 | sb = r0 + 1;
0x000a76bc b.w 0xa6b00 | goto label_105;
| label_284:
0x000a76c0 add.w r2, ip, 1 | r2 = ip + 1;
0x000a76c4 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000a76c6 ldr r0, [sp, 0x20] | r0 = x;
0x000a76c8 lsls r2, r2, 2 | r2 <<= 2;
0x000a76ca bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x000a76ce cmp r0, 0 |
0x000a76d0 beq 0xa763e |
| } while (r0 == 0);
0x000a76d2 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000a76d4 b.w 0xa6a62 | goto label_106;
| label_324:
0x000a76d8 movs r3, 0 | r3 = 0;
0x000a76da ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a76dc movs r1, 0x26 | r1 = 0x26;
0x000a76de mov r0, r7 | r0 = r7;
0x000a76e0 str r3, [sp] | *(sp) = r3;
0x000a76e2 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000a76e6 mov r4, r0 | r4 = r0;
0x000a76e8 b 0xa749a | goto label_107;
| label_267:
0x000a76ea movs r1, 0 | r1 = 0;
0x000a76ec b.w 0xa65a0 | goto label_108;
| label_190:
0x000a76f0 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a76f4 movs r3, 0 | r3 = 0;
0x000a76f6 vstr d16, [sp, 0x90] | __asm ("vstr d16, [sp, 0x90]");
0x000a76fa b.w 0xa5574 | goto label_109;
| label_185:
0x000a76fe bl 0x570d0 | fcn_000570d0 (r0);
0x000a7702 b.w 0xa548e | goto label_110;
| label_234:
0x000a7706 ldr.w r3, [pc, 0x578] | r3 = *(0x000a7c80);
0x000a770a add r3, pc | r3 += pc;
0x000a770c adds r3, 4 | r3 += 4;
0x000a770e b.w 0xa5de0 | goto label_111;
| label_294:
0x000a7712 movs r3, 0 | r3 = 0;
0x000a7714 movs r2, 2 | r2 = 2;
0x000a7716 movs r1, 0x32 | r1 = 0x32;
0x000a7718 mov r0, r7 | r0 = r7;
0x000a771a str r3, [sp] | *(sp) = r3;
0x000a771c bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000a7720 mov r4, r0 | r4 = r0;
0x000a7722 b.w 0xa6d7e | goto label_112;
| label_266:
0x000a7726 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x000a7728 movs r4, 1 | r4 = 1;
0x000a772a subs r2, 2 | r2 -= 2;
0x000a772c b 0xa7736 | goto label_333;
| label_114:
0x000a772e adds r4, 1 | r4++;
0x000a7730 cmp r4, r1 |
| if (r4 > r1) {
0x000a7732 bgt.w 0xa6572 | goto label_113;
| }
| label_333:
0x000a7736 ldrsh r0, [r2, 2]! | r0 = *((r2 += 2));
0x000a773a cmp r0, fp |
| if (r0 != fp) {
0x000a773c bne 0xa772e | goto label_114;
| }
0x000a773e b.w 0xa6572 | goto label_113;
| label_182:
0x000a7742 str r4, [sp, 0x84] | var_84h = r4;
| label_180:
0x000a7744 mov r5, r4 | r5 = r4;
0x000a7746 b.w 0xa540e | goto label_115;
| label_332:
0x000a774a ldr.w r3, [pc, 0x538] | r3 = *(0x000a7c84);
0x000a774e add r3, pc | r3 += pc;
0x000a7750 adds r3, 4 | r3 += 4;
0x000a7752 b 0xa768c | goto label_116;
| label_172:
0x000a7754 movs r6, 0 | r6 = 0;
0x000a7756 str r6, [sp, 0x38] | var_38h = r6;
0x000a7758 b.w 0xa5256 | goto label_117;
| label_174:
0x000a775c bl 0x570d0 | fcn_000570d0 (r0);
0x000a7760 b.w 0xa529a | goto label_91;
| label_254:
0x000a7764 bic.w r3, r3, r4 | r3 = BIT_MASK (r3, r4);
0x000a7768 str r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
0x000a776a ldr r3, [r2, 0x24] | r3 = *((r2 + 0x24));
0x000a776c bic.w r3, r3, r5 | r3 = BIT_MASK (r3, r5);
0x000a7770 str r3, [r2, 0x24] | *((r2 + 0x24)) = r3;
0x000a7772 sub.w r3, r4, 0x80000 | r3 = r4 - 0x80000;
0x000a7776 orrs r3, r5 | r3 |= r5;
| if (r3 == r5) {
0x000a7778 beq.w 0xa7a6e | goto label_334;
| }
0x000a777c lsls r1, r4, 0x1f | r1 = r4 << 0x1f;
| if (r1 >= r4) {
0x000a777e bpl.w 0xa61b2 | goto label_118;
| }
0x000a7782 ldr.w r1, [pc, 0x504] |
0x000a7786 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a7788 add r1, pc | r1 = 0x14f416;
0x000a778a blx 0x8540 | r0 = fcn_00008540 ();
0x000a778e cmp r0, 0 |
| if (r0 != 0) {
0x000a7790 bne.w 0xa61b2 | goto label_118;
| }
0x000a7794 ldr r0, [sp, 0x20] | r0 = x;
0x000a7796 bl 0x1ad8c | fcn_0001ad8c (r0);
0x000a779a b.w 0xa61b2 | goto label_118;
| label_248:
0x000a779e ldr r3, [sp, 0x20] | r3 = x;
0x000a77a0 movs r1, 0 | r1 = 0;
0x000a77a2 mov r0, r5 | r0 = r5;
0x000a77a4 strb.w r1, [r3, 0x5a] | *((r3 + 0x5a)) = r1;
0x000a77a8 bl 0x19ae8 | fcn_00019ae8 (r0, r1);
0x000a77ac b.w 0xa56ca | goto label_22;
| label_220:
0x000a77b0 cmp r7, 2 |
| if (r7 != 2) {
0x000a77b2 bne.w 0xa5aee | goto label_119;
| }
0x000a77b6 ldr r3, [sp, 0x20] | r3 = x;
0x000a77b8 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000a77ba lsls r5, r3, 3 | r5 = r3 << 3;
| if (r5 < r3) {
0x000a77bc bmi.w 0xa5ae2 | goto label_120;
| }
0x000a77c0 b.w 0xa5aee | goto label_119;
| label_207:
0x000a77c4 ldrd r2, r3, [sp, 0x90] | __asm ("ldrd r2, r3, [var_90h]");
0x000a77c8 mov r0, sl | r0 = sl;
0x000a77ca bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a77ce b.w 0xa4e56 | goto label_5;
| label_155:
0x000a77d2 blx 0x883c | r0 = fcn_0000883c ();
| label_329:
0x000a77d6 ldr r5, [r0] | r5 = *(r0);
0x000a77d8 ldr r2, [sp, 0x34] | r2 = var_34h;
0x000a77da ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x000a77de subs r6, r5, 1 | r6 = r5 - 1;
0x000a77e0 adds r2, 1 | r2++;
0x000a77e2 cmp r6, 0 |
0x000a77e4 str.w r2, [fp, 0x34] | __asm ("str.w r2, [arg_34h]");
0x000a77e8 sub.w r2, r3, 2 | r2 = r3 - 2;
0x000a77ec it gt |
| if (r6 <= 0) {
0x000a77ee addgt r5, r0, r5, lsl 4 | r5 = r0 + (r5 << 4);
| }
0x000a77f2 add.w r4, r3, -1 | r4 = r3 + -1;
0x000a77f6 str r2, [sp, 0x30] | var_30h = r2;
0x000a77f8 str.w r2, [fp, 0x38] | __asm ("str.w r2, [arg_38h]");
| if (r6 <= 0) {
0x000a77fc ble 0xa7814 | goto label_335;
| }
| do {
0x000a77fe ldr r1, [r5, -0x8] | r1 = *((r5 - 0x8));
0x000a7802 movs r3, 0 | r3 = 0;
0x000a7804 mov r2, r4 | r2 = r4;
0x000a7806 mov r0, fp | r0 = fp;
0x000a7808 bl 0x67af8 | fcn_00067af8 (r0, r1, r2, r3);
0x000a780c subs r6, 1 | r6--;
0x000a780e sub.w r5, r5, 0x10 | r5 -= 0x10;
0x000a7812 bne 0xa77fe |
| } while (r6 != 1);
| label_335:
0x000a7814 ldr r6, [sp, 0x30] | r6 = var_30h;
0x000a7816 movs r3, 0x10 | r3 = 0x10;
0x000a7818 ldr.w r1, [r8, 8] | r1 = *((r8 + 8));
0x000a781c mov r0, fp | r0 = fp;
0x000a781e movs r5, 0 | r5 = 0;
0x000a7820 mov r2, r6 | r2 = r6;
0x000a7822 bl 0x677a0 | fcn_000677a0 (r0, r1, r2, r3, r4);
0x000a7826 mov r1, r4 | r1 = r4;
0x000a7828 mov r0, r7 | r0 = r7;
0x000a782a bl 0x30110 | fcn_00030110 (r0, r1);
0x000a782e ldr.w r1, [pc, 0x45c] |
0x000a7832 ldr.w r2, [sl] | r2 = *(sl);
0x000a7836 ldr r0, [sp, 0x20] | r0 = x;
0x000a7838 add r1, pc | r1 = 0x14f4ca;
0x000a783a str.w r5, [fp, 0x34] | __asm ("str.w r5, [arg_34h]");
0x000a783e bl 0x24ec8 | fcn_00024ec8 (r0);
0x000a7842 mvn r3, 5 | r3 = ~5;
0x000a7846 mov r2, r5 | r2 = r5;
0x000a7848 movs r1, 0x75 | r1 = 0x75;
0x000a784a strd r5, r0, [sp] | __asm ("strd r5, r0, [sp]");
0x000a784e str r3, [sp, 8] | var_8h = r3;
0x000a7850 mov r0, r7 | r0 = r7;
0x000a7852 movs r3, 3 | r3 = 3;
0x000a7854 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000a7858 mov r0, r7 | r0 = r7;
0x000a785a bl 0x2ec54 | fcn_0002ec54 (r0);
0x000a785e mov r1, r6 | r1 = r6;
0x000a7860 mov r0, r7 | r0 = r7;
0x000a7862 bl 0x30110 | fcn_00030110 (r0, r1);
0x000a7866 b 0xa75b4 | goto label_121;
| label_227:
0x000a7868 ldr.w r1, [pc, 0x424] |
0x000a786c add r1, pc | r1 = 0x14f500;
0x000a786e b.w 0xa5b9c | goto label_122;
| label_226:
0x000a7872 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000a7874 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a7876 ldr r3, [r3] | r3 = *(r3);
0x000a7878 b.w 0xa67d6 | goto label_123;
| label_275:
0x000a787c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a787e cmp r3, 0 |
| if (r3 == 0) {
0x000a7880 beq.w 0xa7b4a | goto label_336;
| }
0x000a7884 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000a7886 movs r2, 1 | r2 = 1;
0x000a7888 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a788a ldr r3, [r3] | r3 = *(r3);
0x000a788c b.w 0xa67c2 | goto label_124;
| label_280:
0x000a7890 bic r3, r3, 0x20 | r3 = BIT_MASK (r3, 0x20);
0x000a7894 b.w 0xa6828 | goto label_125;
| label_218:
0x000a7898 ldr r4, [sp, 0x20] | r4 = x;
0x000a789a mov r0, sl | r0 = sl;
0x000a789c ldrb.w r2, [r4, 0x56] | r2 = *((r4 + 0x56));
0x000a78a0 bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a78a4 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a78a6 mov r0, r4 | r0 = r4;
0x000a78a8 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a78ac b.w 0xa4e6a | goto label_0;
| label_242:
0x000a78b0 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x000a78b2 mov r0, sl | r0 = sl;
0x000a78b4 ldr r2, [r3, 0x50] | r2 = *((r3 + 0x50));
| do {
0x000a78b6 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000a78b8 bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a78bc b.w 0xa59d6 | goto label_27;
| label_167:
0x000a78c0 ldr r2, [pc, 0x3d0] |
0x000a78c2 mov r0, sl | r0 = sl;
0x000a78c4 movs r1, 2 | r1 = 2;
0x000a78c6 add r2, pc | r2 = 0x14f55e;
0x000a78c8 addw r2, r2, 0xcd8 | __asm ("addw r2, r2, aav.0x000000ff");
0x000a78cc bl 0x2db78 | fcn_0002db78 (r0, r1, r2);
0x000a78d0 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a78d2 mov r5, r0 | r5 = r0;
0x000a78d4 str r4, [r0, 0x1c] | *((r0 + 0x1c)) = r4;
0x000a78d6 add r1, sp, 0x90 | r1 += var_90h;
0x000a78d8 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x000a78da str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x000a78dc ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a78de str r6, [sp, 0x90] | var_90h = r6;
0x000a78e0 bl 0xd320 | fcn_0000d320 (r0, r1);
0x000a78e4 ldr r3, [sp, 0x90] | r3 = var_90h;
0x000a78e6 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a78e8 ldr r0, [sp, 0x20] | r0 = x;
0x000a78ea str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
0x000a78ec movs r3, 1 | r3 = 1;
0x000a78ee strh r3, [r5, 0x16] | *((r5 + 0x16)) = r3;
0x000a78f0 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a78f4 b.w 0xa4e62 | goto label_16;
| label_181:
0x000a78f8 ldr r1, [sp, 0x30] | r1 = var_30h;
0x000a78fa adds r0, r1, 1 | r0 = r1 + 1;
0x000a78fc ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a78fe ittt ne |
| if (r0 == r1) {
0x000a7900 ldrne r3, [sp, 0x20] | r3 = x;
| }
| if (r0 == r1) {
0x000a7902 ldrne r2, [r3, 0x10] | r2 = *((r3 + 0x10));
| }
| if (r0 == r1) {
0x000a7904 lslne r3, r1, 4 | r3 = r1 << 4;
| }
0x000a7906 mov.w r1, 0 | r1 = 0;
0x000a790a it ne |
| if (r0 == r1) {
0x000a790c ldrne r3, [r2, r3] | r3 = *((r2 + r3));
| }
0x000a790e ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a7910 bl 0x8a750 | fcn_0008a750 (r0, r1, r2, r3, r4, r5);
0x000a7914 ldr r5, [sp, 0x84] | r5 = var_84h;
0x000a7916 str r0, [sp, 0x3c] | var_3ch = r0;
0x000a7918 b.w 0xa5412 | goto label_126;
| label_229:
0x000a791c ldr r5, [pc, 0x378] |
0x000a791e movs r7, 4 | r7 = 4;
0x000a7920 add r5, pc | r5 = 0x14f5bc;
0x000a7922 addw r5, r5, 0x964 | __asm ("addw r5, r5, aav.0x000000ff");
0x000a7926 b.w 0xa5bf0 | goto label_127;
| label_247:
0x000a792a mov r0, r5 | r0 = r5;
0x000a792c bl 0x18ff0 | r0 = fcn_00018ff0 (r0);
0x000a7930 mov r2, r0 | r2 = r0;
0x000a7932 mov r0, sl | r0 = sl;
0x000a7934 b 0xa78b6 |
| } while (1);
| label_265:
0x000a7936 mov.w sl, 3 | sl = 3;
0x000a793a b.w 0xa6564 | goto label_48;
| label_202:
0x000a793e ldr r3, [pc, 0x35c] | r3 = *(0xa7c9e);
0x000a7940 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x000a7944 ldr r1, [r3] | r1 = *(0xa7c9e);
0x000a7946 cmp r1, 0 |
| if (r1 == 0) {
0x000a7948 beq.w 0xa585a | goto label_128;
| }
0x000a794c mov r0, sl | r0 = sl;
0x000a794e bl 0x2f31c | fcn_0002f31c (r0, r1, r2);
0x000a7952 b.w 0xa585a | goto label_128;
| label_201:
0x000a7956 ldr r1, [pc, 0x348] |
0x000a7958 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a795a add r1, pc | r1 = 0x14f600;
0x000a795c bl 0x21598 | fcn_00021598 (r0, r1);
0x000a7960 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a7962 ldr r0, [sp, 0x20] | r0 = x;
0x000a7964 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a7968 b.w 0xa4e62 | goto label_16;
| label_221:
0x000a796c str r3, [sp, 0x30] | var_30h = r3;
0x000a796e movs r3, 1 | r3 = 1;
0x000a7970 mov.w r7, -1 | r7 = -1;
0x000a7974 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x000a7976 b.w 0xa5aee | goto label_119;
| label_192:
0x000a797a ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a797c mov r0, sl | r0 = sl;
0x000a797e movs r1, 9 | r1 = 9;
0x000a7980 ldr r3, [r2, 0x2c] | r3 = *((r2 + 0x2c));
0x000a7982 adds r3, 2 | r3 += 2;
0x000a7984 str r3, [r2, 0x2c] | *((r2 + 0x2c)) = r3;
0x000a7986 ldr r2, [pc, 0x31c] |
0x000a7988 add r2, pc | r2 = 0x14f632;
0x000a798a addw r2, r2, 0xc7c | __asm ("addw r2, r2, aav.0x000000ff");
0x000a798e bl 0x2db78 | fcn_0002db78 (r0, r1, r2);
0x000a7992 ldr r4, [sp, 0x30] | r4 = var_30h;
0x000a7994 movw r2, 0xf830 |
0x000a7998 mov r3, r0 | r3 = r0;
0x000a799a movt r2, 0xffff | r2 = 0xfffff830;
0x000a799e ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a79a0 ldr r0, [sp, 0x20] | r0 = x;
0x000a79a2 str r4, [r3, 4] | *((r3 + 4)) = r4;
0x000a79a4 str r4, [r3, 0x18] | *((r3 + 0x18)) = r4;
0x000a79a6 str r2, [r3, 0x7c] | *((r3 + 0x7c)) = r2;
0x000a79a8 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a79ac b.w 0xa4e6a | goto label_0;
| label_200:
0x000a79b0 ldrb r2, [r6, 8] | r2 = *((r6 + 8));
0x000a79b2 mov r0, sl | r0 = sl;
0x000a79b4 subs r2, 1 | r2--;
0x000a79b6 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000a79b8 bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a79bc ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a79be ldr r0, [sp, 0x20] | r0 = x;
0x000a79c0 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a79c4 b.w 0xa4e6a | goto label_0;
| label_205:
0x000a79c8 ldr r0, [pc, 0x2dc] |
0x000a79ca ldr r1, [sp, 0x28] | r1 = var_28h;
0x000a79cc add r0, pc | r0 = 0x14f678;
0x000a79ce blx 0x8644 | fcn_00008644 ();
0x000a79d2 str r0, [r4] | *(r4) = r0;
0x000a79d4 b.w 0xa585a | goto label_128;
| label_253:
0x000a79d8 ldr r6, [sp, 0x38] | r6 = var_38h;
0x000a79da mov r0, sl | r0 = sl;
0x000a79dc mov r1, r6 | r1 = r6;
0x000a79de bl 0x2c8d8 | fcn_0002c8d8 (r0, r1);
0x000a79e2 ldr r5, [sp, 0x20] | r5 = x;
0x000a79e4 mov r0, sl | r0 = sl;
0x000a79e6 ldr r4, [r6, 8] | r4 = *((r6 + 8));
0x000a79e8 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000a79ea ldrd r2, r1, [r5, 0x20] | __asm ("ldrd r2, r1, [r5, 0x20]");
0x000a79ee ands r2, r4 | r2 &= r4;
0x000a79f0 ldr r4, [r6, 0xc] | r4 = *((r6 + 0xc));
0x000a79f2 ands r1, r4 | r1 &= r4;
0x000a79f4 orrs r2, r1 | r2 |= r1;
0x000a79f6 ite ne |
| if (r2 == r1) {
0x000a79f8 movne r2, 1 | r2 = 1;
| }
| if (r2 != r1) {
0x000a79fa moveq r2, 0 | r2 = 0;
| }
0x000a79fc bl 0x2eb54 | fcn_0002eb54 (r0, r1, r2, r3);
0x000a7a00 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a7a02 mov r0, r5 | r0 = r5;
0x000a7a04 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a7a08 b.w 0xa4e6a | goto label_0;
| label_209:
0x000a7a0c ldr r3, [sp, 0x20] | r3 = x;
0x000a7a0e ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000a7a10 add.w r8, r3, -1 | r8 = r3 + -1;
0x000a7a14 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000a7a16 cmp r3, r8 |
| if (r3 <= r8) {
0x000a7a18 ble.w 0xa58ce | goto label_129;
| }
0x000a7a1c b.w 0xa6a2c | goto label_130;
| label_204:
0x000a7a20 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a7a22 bl 0x5e700 | fcn_0005e700 (r0);
0x000a7a26 b.w 0xa5840 | goto label_131;
| label_203:
0x000a7a2a ldr r1, [pc, 0x280] |
0x000a7a2c ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a7a2e add r1, pc | r1 = 0x14f6e0;
0x000a7a30 bl 0x21598 | fcn_00021598 (r0, r1);
0x000a7a34 ldr r3, [pc, 0x278] |
0x000a7a36 add r3, pc | r3 = 0x14f6ea;
0x000a7a38 ldrb r0, [r3, 4] | r0 = *((r3 + 4));
| if (r0 != 0) {
0x000a7a3a cbz r0, 0xa7a42 |
0x000a7a3c ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x000a7a3e movs r0, 0xb | r0 = 0xb;
0x000a7a40 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x000a7a42 blx 0x87c0 | fcn_000087c0 ();
0x000a7a46 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a7a48 ldr r0, [sp, 0x20] | r0 = x;
0x000a7a4a bl 0x16808 | fcn_00016808 (r0, r1);
0x000a7a4e b.w 0xa4e62 | goto label_16;
| label_219:
0x000a7a52 movs r4, 1 | r4 = 1;
0x000a7a54 b.w 0xa5a4a | goto label_132;
| label_281:
0x000a7a58 ldr r1, [pc, 0x258] |
0x000a7a5a ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a7a5c add r1, pc | r1 = 0x14f714;
0x000a7a5e bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x000a7a62 cmp r0, 0 |
| if (r0 != 0) {
0x000a7a64 bne.w 0xa7b74 | goto label_337;
| }
0x000a7a68 movs r5, 2 | r5 = 2;
0x000a7a6a b.w 0xa5ef0 | goto label_57;
| label_334:
0x000a7a6e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a7a72 vstr d16, [r2, 0x208] | __asm ("vstr d16, aav.0x000000ff");
0x000a7a76 b.w 0xa61b2 | goto label_118;
| label_249:
0x000a7a7a movs r4, 1 | r4 = 1;
| label_142:
0x000a7a7c ldr r3, [sp, 0x20] | r3 = x;
0x000a7a7e mov r0, r5 | r0 = r5;
0x000a7a80 mov r1, r4 | r1 = r4;
0x000a7a82 strb.w r4, [r3, 0x5a] | *((r3 + 0x5a)) = r4;
0x000a7a86 bl 0x19ae8 | r0 = fcn_00019ae8 (r0, r1);
0x000a7a8a cmp r0, 0 |
| if (r0 != 0) {
0x000a7a8c bne.w 0xa56ca | goto label_22;
| }
0x000a7a90 subs r4, 1 | r4--;
0x000a7a92 b.w 0xa6100 | goto label_133;
| label_189:
0x000a7a96 movs r3, 0 | r3 = 0;
0x000a7a98 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a7a9a str r3, [sp] | *(sp) = r3;
0x000a7a9c movs r1, 0xb1 | r1 = 0xb1;
0x000a7a9e mov r3, r4 | r3 = r4;
0x000a7aa0 mov r0, sl | r0 = sl;
0x000a7aa2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a7aa6 b.w 0xa5582 | goto label_134;
| label_166:
0x000a7aaa ldr r2, [pc, 0x20c] |
0x000a7aac movs r1, 3 | r1 = 3;
0x000a7aae mov r0, sl | r0 = sl;
0x000a7ab0 add r2, pc |
0x000a7ab2 add.w r2, r2, 0xce0 | r2 = 0x15044e;
0x000a7ab6 bl 0x2db78 | fcn_0002db78 (r0, r1, r2);
0x000a7aba ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a7abc str r4, [r0, 0x20] | *((r0 + 0x20)) = r4;
0x000a7abe str r2, [r0, 4] | *((r0 + 4)) = r2;
0x000a7ac0 str r2, [r0, 0x18] | *((r0 + 0x18)) = r2;
0x000a7ac2 ldrd r4, r0, [sl, 0x68] | __asm ("ldrd r4, r0, [sl, 0x68]");
0x000a7ac6 cmp r0, 1 |
| if (r0 > 1) {
0x000a7ac8 bgt.w 0xa5118 | goto label_135;
| }
0x000a7acc b.w 0xa59d6 | goto label_27;
| label_233:
0x000a7ad0 ldr r2, [sp, 0x30] | r2 = var_30h;
0x000a7ad2 mov r3, r5 | r3 = r5;
0x000a7ad4 movs r1, 0x3d | r1 = 0x3d;
0x000a7ad6 mov r0, sl | r0 = sl;
0x000a7ad8 str r5, [sp] | *(sp) = r5;
0x000a7ada bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000a7ade mov r4, r0 | r4 = r0;
0x000a7ae0 b.w 0xa5d8e | goto label_136;
| label_282:
0x000a7ae4 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a7ae6 movs r2, 0 | r2 = 0;
0x000a7ae8 movs r1, 1 | r1 = 1;
0x000a7aea bl 0xf81c | fcn_0000f81c (r0, r1, r2, r3, r4, r5, r6);
0x000a7aee ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a7af0 subs r4, r0, 0 | r4 = r0 - 0;
0x000a7af2 it ne |
| if (r4 == r0) {
0x000a7af4 movne r4, 1 | r4 = 1;
| }
0x000a7af6 cmp r3, 0 |
| if (r3 == 0) {
0x000a7af8 beq.w 0xa68ce | goto label_137;
| }
0x000a7afc b.w 0xa5f3a | goto label_60;
| label_195:
0x000a7b00 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a7b02 bl 0x89f38 | r0 = fcn_00089f38 (r0);
0x000a7b06 cmp r0, 0 |
| if (r0 != 0) {
0x000a7b08 bne.w 0xa59d6 | goto label_27;
| }
0x000a7b0c ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a7b0e ldr r2, [r3] | r2 = *(r3);
0x000a7b10 ldr r3, [pc, 0x1a8] |
0x000a7b12 ldrb.w r2, [r2, 0x54] | r2 = *((r2 + 0x54));
0x000a7b16 add r3, pc | r3 = 0x14f7d6;
0x000a7b18 add.w r3, r3, r2, lsl 3 | r3 += (r2 << 3);
0x000a7b1c ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000a7b1e cmp r1, 0 |
| if (r1 == 0) {
0x000a7b20 beq.w 0xa59d6 | goto label_27;
| }
0x000a7b24 mov r0, sl | r0 = sl;
0x000a7b26 bl 0x2f31c | fcn_0002f31c (r0, r1, r2);
0x000a7b2a b.w 0xa59d6 | goto label_27;
| label_252:
0x000a7b2e ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000a7b30 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000a7b32 bl 0x19fec | r0 = fcn_00019fec (r0, r1);
0x000a7b36 asrs r3, r0, 0x1f | r3 = r0 >> 0x1f;
0x000a7b38 mov r2, r0 | r2 = r0;
0x000a7b3a b.w 0xa5d26 | goto label_34;
| label_279:
0x000a7b3e ldr r1, [sp, 0x90] | r1 = var_90h;
0x000a7b40 ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x000a7b42 bl 0x19fec | fcn_00019fec (r0, r1);
0x000a7b46 b.w 0xa6808 | goto label_138;
| label_336:
0x000a7b4a movs r2, 1 | r2 = 1;
0x000a7b4c b.w 0xa6782 | goto label_139;
| label_283:
0x000a7b50 ldr r0, [sp, 0x20] | r0 = x;
0x000a7b52 ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x000a7b56 cmp r3, 0 |
| if (r3 != 0) {
0x000a7b58 bne.w 0xa61c6 | goto label_140;
| }
0x000a7b5c ldr r0, [sp, 0x20] | r0 = x;
0x000a7b5e ldrb.w r3, [r0, 0x58] | r3 = *((r0 + 0x58));
0x000a7b62 cmp r3, 0 |
| if (r3 != 0) {
0x000a7b64 bne.w 0xa61c6 | goto label_140;
| }
0x000a7b68 ldr r4, [sp, 0x20] | r4 = x;
0x000a7b6a mov r0, r4 | r0 = r4;
0x000a7b6c bl 0x21644 | fcn_00021644 (r0);
0x000a7b70 b.w 0xa6916 | goto label_141;
| label_337:
0x000a7b74 ldr r1, [pc, 0x148] |
0x000a7b76 ldr r0, [sp, 0x28] | r0 = var_28h;
0x000a7b78 add r1, pc | r1 = 0x14f83c;
0x000a7b7a bl 0x8ec0 | r0 = fcn_00008ec0 (r0);
0x000a7b7e cmp r0, 0 |
0x000a7b80 it eq |
| if (r0 != 0) {
0x000a7b82 moveq r5, 3 | r5 = 3;
| }
0x000a7b84 b.w 0xa5ef0 | goto label_57;
| label_250:
0x000a7b88 movs r4, 2 | r4 = 2;
0x000a7b8a b 0xa7a7c | goto label_142;
| label_197:
0x000a7b8c ldr r1, [pc, 0x134] |
0x000a7b8e ldrd r0, r2, [sp, 0x24] | __asm ("ldrd r0, r2, [var_24h]");
0x000a7b92 add r1, pc | r1 = 0x14f85a;
0x000a7b94 bl 0x21598 | fcn_00021598 (r0, r1);
0x000a7b98 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a7b9a ldr r0, [sp, 0x20] | r0 = x;
0x000a7b9c bl 0x16808 | fcn_00016808 (r0, r1);
0x000a7ba0 b.w 0xa4e62 | goto label_16;
| label_188:
0x000a7ba4 bl 0x570d0 | fcn_000570d0 (r0);
0x000a7ba8 b.w 0xa5524 | goto label_143;
| label_236:
0x000a7bac ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a7bae movs r1, 2 | r1 = 2;
0x000a7bb0 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a7bb2 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000a7bb4 bl 0x8a750 | r0 = fcn_0008a750 (r0, r1, r2, r3, r4, r5);
0x000a7bb8 cmp r0, 0 |
| if (r0 == 0) {
0x000a7bba beq.w 0xa56ca | goto label_22;
| }
0x000a7bbe ldr r2, [r0, 0x1c] | r2 = *((r0 + 0x1c));
0x000a7bc0 lsls r4, r2, 0x18 | r4 = r2 << 0x18;
| if (r4 >= r2) {
0x000a7bc2 bpl.w 0xa56ca | goto label_22;
| }
0x000a7bc6 ldr r7, [r0, 8] | r7 = *((r0 + 8));
| label_145:
0x000a7bc8 cmp r7, 0 |
| if (r7 == 0) {
0x000a7bca beq.w 0xa56ca | goto label_22;
| }
0x000a7bce ldrb.w r3, [r7, 0x37] | r3 = *((r7 + 0x37));
0x000a7bd2 and r3, r3, 3 | r3 &= 3;
0x000a7bd6 cmp r3, 2 |
| if (r3 == 2) {
0x000a7bd8 beq.w 0xa5e1a | goto label_144;
| }
0x000a7bdc ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
0x000a7bde b 0xa7bc8 | goto label_145;
| label_230:
0x000a7be0 mov.w r1, 0x8000 |
0x000a7be4 movt r1, 0xffff | r1 = 0x-8000;
0x000a7be8 b.w 0xa5c98 | goto label_146;
| label_162:
0x000a7bec mov r4, r1 | r4 = r1;
0x000a7bee cmp r1, 0 |
| if (r1 == 0) {
0x000a7bf0 beq.w 0xa5014 | goto label_7;
| }
0x000a7bf4 str.w sl, [sp, 0x30] | __asm ("str.w sl, [var_30h]");
0x000a7bf8 b.w 0xa623a | goto label_147;
| label_243:
0x000a7bfc mov.w r1, 0x8000 |
0x000a7c00 movt r1, 0xffff | r1 = 0x-8000;
0x000a7c04 b.w 0xa5fb8 | goto label_148;
| label_237:
0x000a7c08 mov.w r1, 0x8000 |
0x000a7c0c movt r1, 0xffff | r1 = 0x-8000;
0x000a7c10 b.w 0xa5e2a | goto label_149;
| label_171:
0x000a7c14 movs r3, 0 | r3 = 0;
0x000a7c16 mov.w r6, 0x8000 | r6 = 0x8000;
0x000a7c1a movt r3, 0xfff8 | r3 = (r3 & 0xFFFF) | 0xfff80000;
0x000a7c1e sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x000a7c22 movt r6, 0xffff | r6 = (r6 & 0xFFFF) | 0xffff0000;
0x000a7c26 str r3, [sp, 0x38] | var_38h = r3;
0x000a7c28 b.w 0xa5256 | goto label_117;
| label_245:
0x000a7c2c ldr.w ip, [pc, 0x98] |
0x000a7c30 add ip, pc | ip = 0x14f8fc;
0x000a7c32 b.w 0xa6022 | goto label_33;
| label_246:
0x000a7c36 ldr r3, [pc, 0x94] |
0x000a7c38 add r3, pc | r3 = 0x14f90a;
0x000a7c3a b.w 0xa6038 | goto label_32;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa89e4 */
| #include <stdint.h>
|
; (fcn) fcn.000a89e4 () | void fcn_000a89e4 (arithmetic arg1) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_54h;
| int16_t var_7ch;
| int16_t var_80h;
| r0 = arg1;
0x000a89e4 push {r1, r2, r3} |
0x000a89e6 ldr r2, [pc, 0xb4] |
0x000a89e8 ldr r3, [pc, 0xb4] | r3 = *(0xa8aa0);
0x000a89ea push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000a89ee add r2, pc | r2 = 0x151490;
0x000a89f0 ldr r7, [r0, 0x24] | r7 = *((r0 + 0x24));
0x000a89f2 sub sp, 0x5c |
0x000a89f4 ldr r3, [r2, r3] |
0x000a89f6 ldr r5, [r0] | r5 = *(r0);
0x000a89f8 ldr r1, [sp, 0x7c] | r1 = var_7ch;
0x000a89fa ldr r3, [r3] | r3 = imp.sinh;
0x000a89fc str r3, [sp, 0x54] | var_54h = r3;
0x000a89fe mov.w r3, 0 | r3 = 0;
0x000a8a02 ldr.w sb, [r5, 0x18] | sb = *((r5 + 0x18));
0x000a8a06 cbz r7, 0xa8a26 |
| while (1) {
| label_0:
0x000a8a08 ldr r2, [pc, 0x98] |
0x000a8a0a ldr r3, [pc, 0x94] | r3 = *(0xa8aa2);
0x000a8a0c add r2, pc | r2 = 0x1514b4;
0x000a8a0e ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a8a10 ldr r2, [r3] | r2 = imp.sinh;
0x000a8a12 ldr r3, [sp, 0x54] | r3 = var_54h;
0x000a8a14 eors r2, r3 | r2 ^= r3;
0x000a8a16 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a8a1a bne 0xa8a98 | goto label_1;
| }
0x000a8a1c add sp, 0x5c |
0x000a8a1e pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000a8a22 add sp, 0xc |
0x000a8a24 bx lr | return;
0x000a8a26 add r2, sp, 0x80 | r2 += var_80h;
0x000a8a28 mov r4, r0 | r4 = r0;
0x000a8a2a mov r0, r5 | r0 = r5;
0x000a8a2c str r2, [sp, 4] | var_4h = r2;
0x000a8a2e bl 0x214f4 | r0 = fcn_000214f4 (r0);
0x000a8a32 mov r6, r0 | r6 = r0;
| if (r0 == 0) {
0x000a8a34 cbz r0, 0xa8a86 | goto label_2;
| }
0x000a8a36 ldrb r3, [r4, 0x12] | r3 = *((r4 + 0x12));
0x000a8a38 add.w sl, r4, 0xc4 | sl = r4 + 0xc4;
0x000a8a3c add.w r8, sp, 8 | r8 += var_8h;
0x000a8a40 movs r2, 0x4c | r2 = 0x4c;
0x000a8a42 mov r1, sl | r1 = sl;
0x000a8a44 mov r0, r8 | r0 = r8;
0x000a8a46 adds r3, 1 | r3++;
0x000a8a48 strb r3, [r4, 0x12] | *((r4 + 0x12)) = r3;
0x000a8a4a blx 0x8610 | fcn_00008610 ();
0x000a8a4e movs r2, 0x4c | r2 = 0x4c;
0x000a8a50 mov r1, r7 | r1 = r7;
0x000a8a52 mov r0, sl | r0 = sl;
0x000a8a54 blx 0x839c | fcn_0000839c ();
0x000a8a58 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000a8a5a mov r1, r6 | r1 = r6;
0x000a8a5c mov r0, r4 | r0 = r4;
0x000a8a5e orr r3, r3, 2 | r3 |= 2;
0x000a8a62 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x000a8a64 bl 0x7b3e0 | fcn_0007b3e0 (r0, r1, r2, r3, r4, r5, r6);
0x000a8a68 mov r1, r6 | r1 = r6;
0x000a8a6a mov r0, r5 | r0 = r5;
0x000a8a6c str.w sb, [r5, 0x18] | __asm ("str.w sb, [r5, 0x18]");
0x000a8a70 bl 0x16808 | fcn_00016808 (r0, r1);
0x000a8a74 movs r2, 0x4c | r2 = 0x4c;
0x000a8a76 mov r1, r8 | r1 = r8;
0x000a8a78 mov r0, sl | r0 = sl;
0x000a8a7a blx 0x8610 | fcn_00008610 ();
0x000a8a7e ldrb r3, [r4, 0x12] | r3 = *((r4 + 0x12));
0x000a8a80 subs r3, 1 | r3--;
0x000a8a82 strb r3, [r4, 0x12] | *((r4 + 0x12)) = r3;
0x000a8a84 b 0xa8a08 |
| }
| label_2:
0x000a8a86 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
| if (r3 == 0) {
0x000a8a8a cbnz r3, 0xa8a90 |
0x000a8a8c movs r3, 0x12 | r3 = 0x12;
0x000a8a8e str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| }
0x000a8a90 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000a8a92 adds r3, 1 | r3++;
0x000a8a94 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x000a8a96 b 0xa8a08 | goto label_0;
| label_1:
0x000a8a98 blx 0x883c | fcn_0000883c ();
0x000a8a9c lsls r2, r5, 0xa | r2 = r5 << 0xa;
0x000a8a9e movs r2, r0 | r2 = r0;
0x000a8aa0 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000a8aa2 movs r0, r0 |
0x000a8aa4 lsls r4, r1, 0xa | r4 = r1 << 0xa;
0x000a8aa6 movs r2, r0 | r2 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa8b3c */
| #include <stdint.h>
|
; (fcn) fcn.000a8b3c () | void fcn_000a8b3c (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x000a8b3c mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, aav.0x000000ff");
0x000a8b40 mov r6, r1 | r6 = r1;
0x000a8b42 ldr r5, [r1, 0x14] | r5 = *((r1 + 0x14));
0x000a8b44 sub sp, 0xc |
0x000a8b46 mov r7, r0 | r7 = r0;
0x000a8b48 ldr.w r8, [r0] | r8 = *(r0);
0x000a8b4c cmp r5, 0 |
| if (r5 == 0) {
0x000a8b4e beq.w 0xa8ca6 | goto label_5;
| }
0x000a8b52 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000a8b56 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000a8b58 cmp r5, r2 |
| if (r5 == r2) {
0x000a8b5a beq.w 0xa8c70 | goto label_6;
| }
0x000a8b5e adds r3, 0x10 | r3 += 0x10;
0x000a8b60 movs r4, 0 | r4 = 0;
| do {
0x000a8b62 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000a8b64 mov sb, r3 | sb = r3;
0x000a8b66 adds r4, 1 | r4++;
0x000a8b68 adds r3, 0x10 | r3 += 0x10;
0x000a8b6a cmp r5, r2 |
0x000a8b6c bne 0xa8b62 |
| } while (r5 != r2);
0x000a8b6e ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x000a8b70 movs r2, 0 | r2 = 0;
0x000a8b72 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x000a8b74 adds r0, 8 | r0 += 8;
0x000a8b76 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x000a8b7a ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 != 0) {
0x000a8b7c cbz r3, 0xa8bb0 |
0x000a8b7e cmp r4, 1 |
0x000a8b80 ldr.w r5, [sb] | r5 = *(sb);
| if (r4 == 1) {
0x000a8b84 beq 0xa8c58 | goto label_7;
| }
0x000a8b86 ldr.w sb, [pc, 0x128] |
0x000a8b8a movs r1, 0x10 | r1 = 0x10;
0x000a8b8c add sb, pc | sb = 0x151842;
| label_0:
0x000a8b8e ldr r3, [r3] | r3 = *(r3);
0x000a8b90 mov r0, r7 | r0 = r7;
0x000a8b92 str r5, [sp] | *(sp) = r5;
0x000a8b94 ldr r2, [r6] | r2 = *(r6);
0x000a8b96 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000a8b9a cmp r0, 0 |
| if (r0 != 0) {
0x000a8b9c bne 0xa8c52 | goto label_8;
| }
0x000a8b9e mov r3, r0 | r3 = r0;
0x000a8ba0 mov r2, sb | r2 = sb;
0x000a8ba2 movs r1, 9 | r1 = 9;
0x000a8ba4 mov r0, r7 | r0 = r7;
0x000a8ba6 str r5, [sp] | *(sp) = r5;
0x000a8ba8 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000a8bac cmp r0, 0 |
| if (r0 != 0) {
0x000a8bae bne 0xa8c52 | goto label_8;
| }
| }
| label_2:
0x000a8bb0 ldr r5, [r7, 8] | r5 = *((r7 + 8));
0x000a8bb2 cmp r5, 0 |
0x000a8bb4 beq 0xa8c42 |
| while (r0 != 0) {
0x000a8bb6 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000a8bba lsl.w r8, r4, 4 | r8 = r4 << 4;
0x000a8bbe ldr r1, [pc, 0xf4] |
0x000a8bc0 mov r0, r7 | r0 = r7;
0x000a8bc2 ldr.w r2, [r3, r8] | r2 = *((r3 + r8));
0x000a8bc6 add r1, pc | r1 = 0x151880;
0x000a8bc8 ldr r3, [r6] | r3 = *(r6);
0x000a8bca bl 0xa89e4 | fcn_000a89e4 (r0);
0x000a8bce ldr r3, [r7] | r3 = *(r7);
0x000a8bd0 mov r2, r4 | r2 = r4;
0x000a8bd2 ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x000a8bd4 movs r1, 0x64 | r1 = 0x64;
0x000a8bd6 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a8bd8 add r3, r8 | r3 += r8;
0x000a8bda ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a8bdc ldr r3, [r3] | r3 = *(r3);
0x000a8bde adds r3, 1 | r3++;
0x000a8be0 str r3, [sp] | *(sp) = r3;
0x000a8be2 movs r3, 1 | r3 = 1;
0x000a8be4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a8be8 ldrd r0, r3, [r5, 0x6c] | __asm ("ldrd r0, r3, [r5, 0x6c]");
0x000a8bec ldr r6, [r6] | r6 = *(r6);
0x000a8bee cmp r0, r3 |
| if (r0 >= r3) {
0x000a8bf0 bge 0xa8c96 | goto label_9;
| }
0x000a8bf2 adds r3, r0, 1 | r3 = r0 + 1;
0x000a8bf4 ldr r7, [r5, 0x68] | r7 = *((r5 + 0x68));
0x000a8bf6 str r3, [r5, 0x6c] | *((r5 + 0x6c)) = r3;
0x000a8bf8 add.w r3, r0, r0, lsl 2 | r3 = r0 + (r0 << 2);
0x000a8bfc movs r1, 0 | r1 = 0;
0x000a8bfe lsls r3, r3, 2 | r3 <<= 2;
0x000a8c00 mov.w ip, 0x9a |
0x000a8c04 adds r2, r7, r3 | r2 = r7 + r3;
0x000a8c06 strd r4, r1, [r2, 4] | __asm ("strd r4, r1, [r2, 4]");
0x000a8c0a strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x000a8c0e str.w ip, [r7, r3] | __asm ("str.w ip, [r7, r3]");
| label_3:
0x000a8c12 ldr r3, [r5] | r3 = *(r5);
0x000a8c14 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x000a8c18 cbnz r3, 0xa8c52 | goto label_8;
| }
0x000a8c1a cmp r0, 0 |
0x000a8c1c ldr r4, [r5, 0x68] | r4 = *((r5 + 0x68));
0x000a8c1e it lt |
| if (r0 >= 0) {
0x000a8c20 ldrlt r0, [r5, 0x6c] | r0 = *((r5 + 0x6c));
| }
0x000a8c22 mov.w r3, 0 | r3 = 0;
0x000a8c26 mov r2, r6 | r2 = r6;
0x000a8c28 it lt |
| if (r0 >= 0) {
0x000a8c2a addlt r0, r0, -1 | r0 += -1;
| }
0x000a8c2e add.w r1, r0, r0, lsl 2 | r1 = r0 + (r0 << 2);
0x000a8c32 mov r0, r5 | r0 = r5;
0x000a8c34 add.w r1, r4, r1, lsl 2 | r1 = r4 + (r1 << 2);
0x000a8c38 add sp, 0xc |
0x000a8c3a pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x000a8c3e b.w 0x22c24 | void (*0x22c24)() ();
0x000a8c42 ldr r3, [r7, 0x74] | r3 = *((r7 + 0x74));
| if (r3 == 0) {
0x000a8c44 cbz r3, 0xa8c62 | goto label_10;
| }
| label_1:
0x000a8c46 mov r0, r7 | r0 = r7;
0x000a8c48 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000a8c4c mov r5, r0 | r5 = r0;
0x000a8c4e cmp r0, 0 |
0x000a8c50 bne 0xa8bb6 |
| }
| label_8:
0x000a8c52 add sp, 0xc |
0x000a8c54 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_7:
0x000a8c58 ldr.w sb, [pc, 0x5c] | sb = *(0x000a8cb8);
0x000a8c5c movs r1, 0xe | r1 = 0xe;
0x000a8c5e add sb, pc | sb += pc;
0x000a8c60 b 0xa8b8e | goto label_0;
| label_10:
0x000a8c62 ldr r3, [r7] | r3 = *(r7);
0x000a8c64 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000a8c66 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000a8c68 itt pl |
| if (r3 < r3) {
0x000a8c6a movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000a8c6c strbpl r3, [r7, 0x17] | *((r7 + 0x17)) = r3;
| }
0x000a8c6e b 0xa8c46 | goto label_1;
| label_6:
0x000a8c70 movs r4, 0 | r4 = 0;
| label_4:
0x000a8c72 ldr r0, [r6, 0x18] | r0 = *((r6 + 0x18));
0x000a8c74 movs r2, 0 | r2 = 0;
0x000a8c76 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x000a8c78 adds r0, 8 | r0 += 8;
0x000a8c7a bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x000a8c7e ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000a8c80 cmp r3, 0 |
| if (r3 == 0) {
0x000a8c82 beq 0xa8bb0 | goto label_2;
| }
0x000a8c84 ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x000a8c88 lsls r2, r4, 4 | r2 = r4 << 4;
0x000a8c8a ldr.w sb, [pc, 0x30] | sb = *(0x000a8cbc);
0x000a8c8e ldr r5, [r1, r2] | r5 = *((r1 + r2));
0x000a8c90 movs r1, 0x10 | r1 = 0x10;
0x000a8c92 add sb, pc | sb += pc;
0x000a8c94 b 0xa8b8e | goto label_0;
| label_9:
0x000a8c96 movs r3, 0 | r3 = 0;
0x000a8c98 mov r2, r4 | r2 = r4;
0x000a8c9a movs r1, 0x9a | r1 = 0x9a;
0x000a8c9c mov r0, r5 | r0 = r5;
0x000a8c9e str r3, [sp] | *(sp) = r3;
0x000a8ca0 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000a8ca4 b 0xa8c12 | goto label_3;
| label_5:
0x000a8ca6 mov.w r4, 0x8000 |
0x000a8caa movt r4, 0xffff | r4 = 0x-8000;
0x000a8cae b 0xa8c72 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa8ebc */
| #include <stdint.h>
|
; (fcn) fcn.000a8ebc () | void fcn_000a8ebc (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000a8ebc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a8ec0 mov r6, r1 | r6 = r1;
0x000a8ec2 ldr r7, [r0] | r7 = *(r0);
0x000a8ec4 sub sp, 0x14 |
0x000a8ec6 ldrb.w r3, [r7, 0x57] | r3 = *((r7 + 0x57));
0x000a8eca cbz r3, 0xa8eda |
| while (r0 != 0) {
| label_0:
0x000a8ecc mov r1, r6 | r1 = r6;
0x000a8ece mov r0, r7 | r0 = r7;
0x000a8ed0 add sp, 0x14 |
0x000a8ed2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a8ed6 b.w 0x1a3c8 | void (*0x1a3c8)() ();
0x000a8eda mov r5, r0 | r5 = r0;
0x000a8edc mov sb, r2 | sb = r2;
0x000a8ede bl 0x89f38 | r0 = fcn_00089f38 (r0);
0x000a8ee2 mov r4, r0 | r4 = r0;
0x000a8ee4 cmp r0, 0 |
0x000a8ee6 bne 0xa8ecc |
| }
0x000a8ee8 ldrd sl, r1, [r6, 0xc] | __asm ("ldrd sl, r1, [r6, 0xc]");
0x000a8eec mov r0, r7 | r0 = r7;
0x000a8eee mov r2, sl | r2 = sl;
0x000a8ef0 bl 0x1cadc | r0 = fcn_0001cadc (r0, r1, r2, r3);
0x000a8ef4 mov r8, r0 | r8 = r0;
0x000a8ef6 cmp r0, 0 |
| if (r0 == 0) {
0x000a8ef8 beq 0xa8ff2 | goto label_6;
| }
0x000a8efa ldrb.w r3, [r0, 0x37] | r3 = *((r0 + 0x37));
0x000a8efe lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
| if (r2 != r3) {
0x000a8f00 bne.w 0xa901e | goto label_7;
| }
0x000a8f04 ldr r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x000a8f06 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000a8f08 ldr.w sb, [r0, 0xc] | sb = *((r0 + 0xc));
0x000a8f0c cmp r1, 0 |
| if (r1 == 0) {
0x000a8f0e beq.w 0xa9052 | goto label_8;
| }
0x000a8f12 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000a8f14 cmp r1, r2 |
| if (r1 == r2) {
0x000a8f16 beq.w 0xa903c | goto label_9;
| }
0x000a8f1a adds r3, 0x10 | r3 += 0x10;
| do {
0x000a8f1c mov r0, r3 | r0 = r3;
0x000a8f1e adds r4, 1 | r4++;
0x000a8f20 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000a8f22 adds r3, 0x10 | r3 += 0x10;
0x000a8f24 cmp r1, r2 |
0x000a8f26 bne 0xa8f1c |
| } while (r1 != r2);
0x000a8f28 cmp r4, 1 |
0x000a8f2a ldr.w sl, [r0] | sl = *(r0);
0x000a8f2e lsl.w fp, r4, 4 |
| if (r4 == 1) {
0x000a8f32 beq 0xa8fd8 | goto label_10;
| }
| label_4:
0x000a8f34 ldr r2, [pc, 0x150] |
0x000a8f36 movs r1, 9 | r1 = 9;
0x000a8f38 movs r3, 0 | r3 = 0;
0x000a8f3a mov r0, r5 | r0 = r5;
0x000a8f3c str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000a8f40 add r2, pc | r2 = 0x151fcc;
0x000a8f42 bl 0x24140 | fcn_00024140 (r0, r1);
0x000a8f46 movs r1, 0xa | r1 = 0xa;
0x000a8f48 cmp r0, 0 |
| if (r0 != 0) {
0x000a8f4a bne 0xa8ecc | goto label_0;
| }
| label_1:
0x000a8f4c ldr.w r3, [sb] | r3 = *(sb);
0x000a8f50 mov r0, r5 | r0 = r5;
0x000a8f52 ldr.w r2, [r8] | r2 = *(r8);
0x000a8f56 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000a8f5a bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000a8f5e cmp r0, 0 |
| if (r0 != 0) {
0x000a8f60 bne 0xa8ecc | goto label_0;
| }
0x000a8f62 ldr.w sb, [r5, 8] | sb = *((r5 + 8));
0x000a8f66 cmp.w sb, 0 |
| if (sb == 0) {
0x000a8f6a beq 0xa900c | goto label_11;
| }
| label_2:
0x000a8f6c mov r2, r4 | r2 = r4;
0x000a8f6e mov r0, r5 | r0 = r5;
0x000a8f70 movs r1, 1 | r1 = 1;
0x000a8f72 bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x000a8f76 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000a8f78 mov r0, r5 | r0 = r5;
0x000a8f7a ldr r1, [pc, 0x110] |
0x000a8f7c ldr.w r2, [r3, fp] | r2 = *((r3 + fp));
0x000a8f80 add r1, pc | r1 = 0x152012;
0x000a8f82 ldr.w r3, [r8] | r3 = *(r8);
0x000a8f86 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000a8f8a ldr r2, [pc, 0x104] |
0x000a8f8c mov r1, r4 | r1 = r4;
0x000a8f8e ldr.w r3, [r8] | r3 = *(r8);
0x000a8f92 mov r0, r5 | r0 = r5;
0x000a8f94 add r2, pc | r2 = 0x15202a;
0x000a8f96 bl 0xa8aa8 | fcn_000a8aa8 (r0, r1, r2, r3);
0x000a8f9a ldr r3, [r5] | r3 = *(r5);
0x000a8f9c mov r2, r4 | r2 = r4;
0x000a8f9e movs r1, 0x64 | r1 = 0x64;
0x000a8fa0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a8fa2 add r3, fp | r3 += fp;
0x000a8fa4 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a8fa6 ldr r3, [r3] | r3 = *(r3);
0x000a8fa8 adds r3, 1 | r3++;
0x000a8faa str r3, [sp] | *(sp) = r3;
0x000a8fac movs r3, 1 | r3 = 1;
0x000a8fae ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x000a8fb0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a8fb4 ldr.w r1, [r8, 0x2c] | r1 = *((r8 + 0x2c));
0x000a8fb8 mov r2, r4 | r2 = r4;
0x000a8fba mov r0, r5 | r0 = r5;
0x000a8fbc bl 0xa8e04 | fcn_000a8e04 (r0, r1, r2);
0x000a8fc0 movs r3, 0 | r3 = 0;
0x000a8fc2 mov r2, r4 | r2 = r4;
0x000a8fc4 str r3, [sp, 8] | var_8h = r3;
0x000a8fc6 mov r0, sb | r0 = sb;
0x000a8fc8 ldr.w r1, [r8] | r1 = *(r8);
0x000a8fcc strd r3, r1, [sp] | __asm ("strd r3, r1, [sp]");
0x000a8fd0 movs r1, 0x98 | r1 = 0x98;
0x000a8fd2 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000a8fd6 b 0xa8ecc | goto label_0;
| label_10:
0x000a8fd8 ldr r2, [pc, 0xb8] |
0x000a8fda movs r1, 9 | r1 = 9;
0x000a8fdc movs r3, 0 | r3 = 0;
0x000a8fde mov r0, r5 | r0 = r5;
0x000a8fe0 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000a8fe4 add r2, pc | r2 = 0x15207c;
0x000a8fe6 bl 0x24140 | fcn_00024140 (r0, r1);
0x000a8fea movs r1, 0xc | r1 = 0xc;
0x000a8fec cmp r0, 0 |
| if (r0 == 0) {
0x000a8fee beq 0xa8f4c | goto label_1;
| }
0x000a8ff0 b 0xa8ecc | goto label_0;
| label_6:
0x000a8ff2 cmp.w sb, 0 |
| if (sb != 0) {
0x000a8ff6 bne 0xa902c | goto label_12;
| }
0x000a8ff8 ldr r1, [pc, 0x9c] |
0x000a8ffa add.w r2, r6, 8 | r2 = r6 + 8;
0x000a8ffe mov r0, r5 | r0 = r5;
0x000a9000 add r1, pc | r1 = 0x15209c;
0x000a9002 bl 0x21598 | fcn_00021598 (r0, r1);
| label_3:
0x000a9006 movs r3, 1 | r3 = 1;
0x000a9008 strb r3, [r5, 0x11] | *((r5 + 0x11)) = r3;
0x000a900a b 0xa8ecc | goto label_0;
| label_11:
0x000a900c ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
| if (r3 == 0) {
0x000a900e cbz r3, 0xa9044 | goto label_13;
| }
| label_5:
0x000a9010 mov r0, r5 | r0 = r5;
0x000a9012 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000a9016 mov sb, r0 | sb = r0;
0x000a9018 cmp r0, 0 |
| if (r0 != 0) {
0x000a901a bne 0xa8f6c | goto label_2;
| }
0x000a901c b 0xa8ecc | goto label_0;
| label_7:
0x000a901e ldr r1, [pc, 0x7c] |
0x000a9020 mov r2, r4 | r2 = r4;
0x000a9022 mov r0, r5 | r0 = r5;
0x000a9024 add r1, pc | r1 = 0x1520c6;
0x000a9026 bl 0x21598 | fcn_00021598 (r0, r1);
0x000a902a b 0xa8ecc | goto label_0;
| label_12:
0x000a902c mov r0, r5 | r0 = r5;
0x000a902e mov r1, sl | r1 = sl;
0x000a9030 bl 0x57304 | fcn_00057304 (r0, r1);
0x000a9034 mov r0, r5 | r0 = r5;
0x000a9036 bl 0x2f3d8 | fcn_0002f3d8 (r0, r1);
0x000a903a b 0xa9006 | goto label_3;
| label_9:
0x000a903c ldr.w sl, [r3] | sl = *(r3);
0x000a9040 mov fp, r4 |
0x000a9042 b 0xa8f34 | goto label_4;
| label_13:
0x000a9044 ldr r3, [r5] | r3 = *(r5);
0x000a9046 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000a9048 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000a904a itt pl |
| if (r3 < r3) {
0x000a904c movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000a904e strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000a9050 b 0xa9010 | goto label_5;
| label_8:
0x000a9052 sub.w r2, r3, 0x80000 | r2 = r3 - 0x80000;
0x000a9056 movs r1, 9 | r1 = 9;
0x000a9058 ldr.w sl, [r2] | sl = *(r2);
0x000a905c mov r3, r4 | r3 = r4;
0x000a905e ldr r2, [pc, 0x40] |
0x000a9060 mov r0, r5 | r0 = r5;
0x000a9062 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x000a9066 add r2, pc | r2 = 0x15210c;
0x000a9068 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000a906c cmp r0, 0 |
| if (r0 != 0) {
0x000a906e bne.w 0xa8ecc | goto label_0;
| }
0x000a9072 mov.w fp, 0 |
0x000a9076 mov.w r4, 0x8000 | r4 = 0x8000;
0x000a907a movt fp, 0xfff8 |
0x000a907e movt r4, 0xffff | r4 = (r4 & 0xFFFF) | 0xffff0000;
0x000a9082 movs r1, 0xa | r1 = 0xa;
0x000a9084 b 0xa8f4c | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa90a4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000a90a4 () | void fcn_000a90a4 (int16_t arg_0h, int16_t arg_68h, int16_t arg_6ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000a90a4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a90a8 mov r6, r3 | r6 = r3;
0x000a90aa ldr.w r8, [r0] | r8 = *(r0);
0x000a90ae sub sp, 0x24 |
0x000a90b0 mov r7, r1 | r7 = r1;
0x000a90b2 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x000a90b6 cbz r3, 0xa90c6 |
| while (r0 != 0) {
| label_0:
0x000a90b8 mov r1, r7 | r1 = r7;
0x000a90ba mov r0, r8 | r0 = r8;
0x000a90bc add sp, 0x24 |
0x000a90be pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a90c2 b.w 0x1a3c8 | void (*0x1a3c8)() ();
0x000a90c6 mov r5, r0 | r5 = r0;
0x000a90c8 mov sb, r2 | sb = r2;
0x000a90ca bl 0x89f38 | r0 = fcn_00089f38 (r0);
0x000a90ce mov r4, r0 | r4 = r0;
0x000a90d0 cmp r0, 0 |
0x000a90d2 bne 0xa90b8 |
| }
0x000a90d4 add.w r2, r7, 8 | r2 = r7 + 8;
0x000a90d8 cmp r6, 0 |
| if (r6 != 0) {
0x000a90da bne.w 0xa9328 | goto label_30;
| }
0x000a90de mov r1, sb | r1 = sb;
0x000a90e0 mov r0, r5 | r0 = r5;
0x000a90e2 bl 0x8a9bc | r0 = fcn_0008a9bc (r0, r1, r2);
0x000a90e6 mov sl, r0 | sl = r0;
0x000a90e8 cmp r0, 0 |
| if (r0 == 0) {
0x000a90ea beq 0xa90b8 | goto label_0;
| }
| label_2:
0x000a90ec ldr.w r1, [sl, 0x3c] | r1 = *((sl + 0x3c));
0x000a90f0 ldrb.w lr, [sl, 0x2b] |
0x000a90f4 cmp r1, 0 |
| if (r1 == 0) {
0x000a90f6 beq.w 0xa95fa | goto label_31;
| }
0x000a90fa ldr.w ip, [r8, 0x10] | ip = *((r8 + 0x10));
0x000a90fe ldr.w r3, [ip, 0xc] | r3 = *((ip + 0xc));
0x000a9102 cmp r1, r3 |
| if (r1 == r3) {
0x000a9104 beq.w 0xa9392 | goto label_32;
| }
0x000a9108 movs r3, 0x10 | r3 = 0x10;
0x000a910a sub.w r0, ip, 4 | r0 = ip - 4;
| do {
0x000a910e mov r6, r3 | r6 = r3;
0x000a9110 adds r3, 0x10 | r3 += 0x10;
0x000a9112 ldr r2, [r0, r3] | r2 = *((r0 + r3));
0x000a9114 adds r4, 1 | r4++;
0x000a9116 cmp r1, r2 |
0x000a9118 bne 0xa910e |
| } while (r1 != r2);
0x000a911a cmp.w lr, 1 |
| if (lr == 1) {
0x000a911e beq.w 0xa937e | goto label_33;
| }
| label_5:
0x000a9122 cmp r4, 1 |
0x000a9124 it ne |
| if (r4 == 1) {
0x000a9126 addne ip, r6 |
| }
| if (r4 == 1) {
0x000a9128 beq.w 0xa935c | goto label_34;
| }
| label_6:
0x000a912c ldr.w r2, [pc, 0x640] |
0x000a9130 add r2, pc | r2 = 0x1528a4;
| label_3:
0x000a9132 ldr.w fp, [ip] | fp = *(ip);
0x000a9136 movs r3, 0 | r3 = 0;
0x000a9138 movs r1, 9 | r1 = 9;
0x000a913a mov r0, r5 | r0 = r5;
0x000a913c str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000a9140 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000a9144 cmp r0, 0 |
| if (r0 != 0) {
0x000a9146 bne 0xa90b8 | goto label_0;
| }
0x000a9148 cmp.w sb, 0 |
| if (sb == 0) {
0x000a914c beq.w 0xa936a | goto label_35;
| }
0x000a9150 cmp r4, 1 |
0x000a9152 mov r3, r0 | r3 = r0;
0x000a9154 ite eq |
| if (r4 != 1) {
0x000a9156 moveq r1, 0xf | r1 = 0xf;
| }
| if (r4 == 1) {
0x000a9158 movne r1, 0x11 | r1 = 0x11;
| }
| label_4:
0x000a915a ldr.w r2, [sl] | r2 = *(sl);
0x000a915e mov r0, r5 | r0 = r5;
0x000a9160 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000a9164 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000a9168 cmp r0, 0 |
| if (r0 != 0) {
0x000a916a bne 0xa90b8 | goto label_0;
| }
0x000a916c ldr.w r2, [sl] | r2 = *(sl);
0x000a9170 mov r3, r0 | r3 = r0;
0x000a9172 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000a9176 movs r1, 9 | r1 = 9;
0x000a9178 mov r0, r5 | r0 = r5;
0x000a917a bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000a917e mov fp, r0 |
0x000a9180 cmp r0, 0 |
| if (r0 != 0) {
0x000a9182 bne 0xa90b8 | goto label_0;
| }
0x000a9184 ldr.w r1, [pc, 0x5ec] | r1 = *(0x000a9774);
0x000a9188 movs r2, 7 | r2 = 7;
0x000a918a ldr.w r0, [sl] | r0 = *(sl);
0x000a918e add r1, pc | r1 += pc;
0x000a9190 blx 0x8154 | r0 = fcn_00008154 ();
0x000a9194 cmp r0, 0 |
| if (r0 == 0) {
0x000a9196 beq.w 0xa9486 | goto label_36;
| }
0x000a919a ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000a919e lsls r1, r3, 0x13 | r1 = r3 << 0x13;
| if (r1 < r3) {
0x000a91a0 bpl 0xa91b4 |
0x000a91a2 ldr.w r2, [r8, 0x20] | r2 = *((r8 + 0x20));
0x000a91a6 lsls r2, r2, 3 | r2 <<= 3;
| if (r2 >= r2) {
0x000a91a8 bpl 0xa91b4 | goto label_23;
| }
0x000a91aa ldr.w r2, [r8, 0x190] | r2 = *((r8 + 0x190));
0x000a91ae cmp r2, 0 |
| if (r2 == 0) {
0x000a91b0 beq.w 0xa961e | goto label_37;
| }
| }
| label_23:
0x000a91b4 lsls r0, r3, 0x10 | r0 = r3 << 0x10;
| if (r0 < r3) {
0x000a91b6 bmi.w 0xa94b2 | goto label_24;
| }
| label_10:
0x000a91ba ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000a91be cmp.w sb, 0 |
| if (sb == 0) {
0x000a91c2 beq.w 0xa93e2 | goto label_38;
| }
0x000a91c6 cmp r3, 2 |
| if (r3 != 2) {
0x000a91c8 bne.w 0xa950c | goto label_39;
| }
0x000a91cc ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000a91ce cmp r3, 0 |
| if (r3 == 0) {
0x000a91d0 beq.w 0xa94c2 | goto label_40;
| }
0x000a91d4 mov r2, r4 | r2 = r4;
0x000a91d6 movs r1, 1 | r1 = 1;
0x000a91d8 mov r0, r5 | r0 = r5;
0x000a91da bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x000a91de ldr r3, [r5] | r3 = *(r5);
0x000a91e0 str r3, [sp, 0x14] | var_14h = r3;
| label_9:
0x000a91e2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a91e4 ldr.w fp, [r5, 8] | fp = *((r5 + 8));
0x000a91e8 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a91ea add r3, r6 | r3 += r6;
0x000a91ec str r3, [sp, 0x18] | var_18h = r3;
0x000a91ee cmp.w fp, 0 |
| if (fp == 0) {
0x000a91f2 beq.w 0xa94e8 | goto label_41;
| }
| label_13:
0x000a91f6 mov r2, r4 | r2 = r4;
0x000a91f8 movs r1, 1 | r1 = 1;
0x000a91fa mov r0, r5 | r0 = r5;
0x000a91fc bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x000a9200 ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000a9204 cmp r3, 1 |
| if (r3 == 1) {
0x000a9206 beq.w 0xa95ae | goto label_42;
| }
| label_20:
0x000a920a ldr r0, [r5] | r0 = *(r5);
0x000a920c mov r1, sl | r1 = sl;
0x000a920e bl 0x1b1d8 | r0 = fcn_0001b1d8 (r0, r1, r2);
| if (r0 == 0) {
0x000a9212 cbz r0, 0xa9228 | goto label_43;
| }
0x000a9214 str r4, [sp, 0x1c] | var_1ch = r4;
0x000a9216 mov r4, r0 | r4 = r0;
| do {
0x000a9218 mov r1, r4 | r1 = r4;
0x000a921a mov r0, r5 | r0 = r5;
0x000a921c bl 0xa8b3c | fcn_000a8b3c (r0, r1);
0x000a9220 ldr r4, [r4, 0x20] | r4 = *((r4 + 0x20));
0x000a9222 cmp r4, 0 |
0x000a9224 bne 0xa9218 |
| } while (r4 != 0);
0x000a9226 ldr r4, [sp, 0x1c] | r4 = var_1ch;
| label_43:
0x000a9228 ldr.w r3, [sl, 0x1c] | r3 = *((sl + 0x1c));
0x000a922c lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
| if (r0 < r3) {
0x000a922e bmi.w 0xa94f8 | goto label_44;
| }
| label_14:
0x000a9232 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a9234 mov r0, r5 | r0 = r5;
0x000a9236 ldr.w r1, [pc, 0x540] |
0x000a923a ldr r2, [r3] | r2 = *(r3);
0x000a923c add r1, pc | r1 = 0x1529ba;
0x000a923e ldr.w r3, [sl] | r3 = *(sl);
0x000a9242 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000a9246 cmp.w sb, 0 |
| if (sb != 0) {
0x000a924a bne.w 0xa93d6 | goto label_45;
| }
0x000a924e ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000a9252 cmp r3, 1 |
| if (r3 != 1) {
0x000a9254 bne.w 0xa951c | goto label_46;
| }
| label_8:
0x000a9258 movs r3, 0 | r3 = 0;
0x000a925a movs r1, 0xac | r1 = 0xac;
0x000a925c str r3, [sp, 8] | var_8h = r3;
0x000a925e mov r0, fp | r0 = fp;
0x000a9260 ldr.w r2, [sl] | r2 = *(sl);
0x000a9264 strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x000a9268 mov r2, r4 | r2 = r4;
0x000a926a bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000a926e ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x000a9270 movs r2, 1 | r2 = 1;
0x000a9272 cmp r3, 0 |
0x000a9274 it eq |
| if (r3 != 0) {
0x000a9276 moveq r3, r5 | r3 = r5;
| }
0x000a9278 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
| label_7:
0x000a927a ldrd r1, r3, [fp, 0x6c] | __asm ("ldrd r1, r3, [arg_6ch]");
0x000a927e ldr.w sb, [sl] | sb = *(sl);
0x000a9282 cmp r1, r3 |
| if (r1 >= r3) {
0x000a9284 bge.w 0xa959c | goto label_47;
| }
0x000a9288 add.w r3, r1, r1, lsl 2 | r3 = r1 + (r1 << 2);
0x000a928c ldr.w ip, [fp, 0x68] | ip = *(arg_68h);
0x000a9290 adds r2, r1, 1 | r2 = r1 + 1;
0x000a9292 lsls r3, r3, 2 | r3 <<= 2;
0x000a9294 str.w r2, [fp, 0x6c] | __asm ("str.w r2, [arg_6ch]");
0x000a9298 movs r0, 0 | r0 = 0;
0x000a929a add.w r2, ip, r3 | r2 = ip + r3;
0x000a929e mov.w lr, 0x97 | lr = 0x97;
0x000a92a2 strd r4, r0, [r2, 4] | __asm ("strd r4, r0, [r2, 4]");
0x000a92a6 strd r0, r0, [r2, 0xc] | __asm ("strd r0, r0, [r2, 0xc]");
0x000a92aa str.w lr, [ip, r3] | __asm ("str.w lr, [ip, r3]");
| label_19:
0x000a92ae ldr.w r3, [fp] | r3 = *(fp);
0x000a92b2 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000a92b6 cbnz r3, 0xa92dc |
0x000a92b8 cmp r1, 0 |
0x000a92ba ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x000a92be it lt |
| if (r1 >= 0) {
0x000a92c0 ldrlt r1, [fp, 0x6c] | r1 = *(arg_6ch);
| }
0x000a92c4 mov r2, sb | r2 = sb;
0x000a92c6 mov r0, fp | r0 = fp;
0x000a92c8 it lt |
| if (r1 >= 0) {
0x000a92ca addlt r1, r1, -1 | r1 += -1;
| }
0x000a92ce add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x000a92d2 add.w r1, r3, r1, lsl 2 | r1 = r3 + (r1 << 2);
0x000a92d6 movs r3, 0 | r3 = 0;
0x000a92d8 bl 0x22c24 | fcn_00022c24 (r0, r1, r2, r3);
| }
0x000a92dc ldr r3, [r5] | r3 = *(r5);
0x000a92de mov r2, r4 | r2 = r4;
0x000a92e0 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x000a92e2 movs r1, 0x64 | r1 = 0x64;
0x000a92e4 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a92e6 add r3, r6 | r3 += r6;
0x000a92e8 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a92ea ldr r3, [r3] | r3 = *(r3);
0x000a92ec adds r3, 1 | r3++;
0x000a92ee str r3, [sp] | *(sp) = r3;
0x000a92f0 movs r3, 1 | r3 = 1;
0x000a92f2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a92f6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a92f8 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a92fa add r3, r6 | r3 += r6;
0x000a92fc ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a92fe ldrh.w r2, [r3, 0x4e] | r2 = *((r3 + 0x4e));
0x000a9302 lsls r1, r2, 0x1e | r1 = r2 << 0x1e;
| if (r1 >= r2) {
0x000a9304 bpl.w 0xa90b8 | goto label_0;
| }
0x000a9308 ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
| if (r4 != 0) {
0x000a930a cbnz r4, 0xa9316 | goto label_48;
| }
0x000a930c b 0xa947c | goto label_49;
| do {
| label_1:
0x000a930e ldr r4, [r4] | r4 = *(r4);
0x000a9310 cmp r4, 0 |
| if (r4 == 0) {
0x000a9312 beq.w 0xa9470 | goto label_50;
| }
| label_48:
0x000a9316 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000a9318 ldrb.w r3, [r1, 0x2b] | r3 = *((r1 + 0x2b));
0x000a931c cmp r3, 2 |
0x000a931e bne 0xa930e |
| } while (r3 != 2);
0x000a9320 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a9322 bl 0x1a648 | fcn_0001a648 (r0, r1);
0x000a9326 b 0xa930e | goto label_1;
| label_30:
0x000a9328 ldrb.w r3, [r8, 0x5b] | r3 = *((r8 + 0x5b));
0x000a932c mov r1, sb | r1 = sb;
0x000a932e mov r0, r5 | r0 = r5;
0x000a9330 adds r3, 1 | r3++;
0x000a9332 strb.w r3, [r8, 0x5b] | *((r8 + 0x5b)) = r3;
0x000a9336 bl 0x8a9bc | fcn_0008a9bc (r0, r1, r2);
0x000a933a ldrb.w r3, [r8, 0x5b] | r3 = *((r8 + 0x5b));
0x000a933e mov sl, r0 | sl = r0;
0x000a9340 subs r3, 1 | r3--;
0x000a9342 strb.w r3, [r8, 0x5b] | *((r8 + 0x5b)) = r3;
0x000a9346 cmp r0, 0 |
| if (r0 != 0) {
0x000a9348 bne.w 0xa90ec | goto label_2;
| }
0x000a934c mov r0, r5 | r0 = r5;
0x000a934e ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x000a9350 bl 0x57304 | fcn_00057304 (r0, r1);
0x000a9354 mov r0, r5 | r0 = r5;
0x000a9356 bl 0x2f3d8 | fcn_0002f3d8 (r0, r1);
0x000a935a b 0xa90b8 | goto label_0;
| label_34:
0x000a935c ldr.w r2, [pc, 0x41c] | r2 = *(0x000a977c);
0x000a9360 add.w ip, ip, 0x10 |
0x000a9364 movs r6, 0x10 | r6 = 0x10;
0x000a9366 add r2, pc | r2 += pc;
0x000a9368 b 0xa9132 | goto label_3;
| label_35:
0x000a936a ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000a936e cmp r3, 1 |
| if (r3 == 1) {
0x000a9370 beq 0xa93b6 | goto label_51;
| }
0x000a9372 cmp r4, 1 |
0x000a9374 mov r3, sb | r3 = sb;
0x000a9376 ite eq |
| if (r4 != 1) {
0x000a9378 moveq r1, 0xd | r1 = 0xd;
| }
| if (r4 == 1) {
0x000a937a movne r1, 0xb | r1 = 0xb;
| }
0x000a937c b 0xa915a | goto label_4;
| label_33:
0x000a937e mov r1, sl | r1 = sl;
0x000a9380 mov r0, r5 | r0 = r5;
0x000a9382 bl 0x774c4 | r0 = fcn_000774c4 (r0, r1);
0x000a9386 cmp r0, 0 |
| if (r0 != 0) {
0x000a9388 bne.w 0xa90b8 | goto label_0;
| }
0x000a938c ldr.w ip, [r8, 0x10] | ip = *((r8 + 0x10));
0x000a9390 b 0xa9122 | goto label_5;
| label_32:
0x000a9392 cmp.w lr, 1 |
0x000a9396 it ne |
| if (lr != 1) {
0x000a9398 movne r6, 0 | r6 = 0;
| goto label_52;
| }
| if (lr != 1) {
| label_52:
0x000a939a bne.w 0xa912c | goto label_6;
| }
0x000a939e mov r1, sl | r1 = sl;
0x000a93a0 mov r0, r5 | r0 = r5;
0x000a93a2 bl 0x774c4 | r0 = fcn_000774c4 (r0, r1);
0x000a93a6 mov r4, r0 | r4 = r0;
0x000a93a8 cmp r0, 0 |
| if (r0 != 0) {
0x000a93aa bne.w 0xa90b8 | goto label_0;
| }
0x000a93ae ldr.w ip, [r8, 0x10] | ip = *((r8 + 0x10));
0x000a93b2 mov r6, r0 | r6 = r0;
0x000a93b4 b 0xa912c | goto label_6;
| label_51:
0x000a93b6 ldr.w r3, [sl, 0x34] | r3 = *((sl + 0x34));
| if (r3 != 0) {
0x000a93ba cbnz r3, 0xa93c6 | goto label_53;
| }
0x000a93bc b 0xa9768 | goto label_54;
| do {
0x000a93be ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000a93c0 cmp r3, 0 |
| if (r3 == 0) {
0x000a93c2 beq.w 0xa9768 | goto label_54;
| }
| label_53:
0x000a93c6 ldr r2, [r3] | r2 = *(r3);
0x000a93c8 cmp r8, r2 |
0x000a93ca bne 0xa93be |
| } while (r8 != r2);
0x000a93cc ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a93ce movs r1, 0x1e | r1 = 0x1e;
0x000a93d0 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a93d2 b 0xa915a | goto label_4;
| label_15:
0x000a93d4 ldr r4, [sp, 0x18] | r4 = var_18h;
| label_45:
0x000a93d6 ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000a93da cmp r3, 1 |
| if (r3 != 1) {
0x000a93dc bne.w 0xa927a | goto label_7;
| }
0x000a93e0 b 0xa9258 | goto label_8;
| label_38:
0x000a93e2 cmp r3, 2 |
| if (r3 == 2) {
0x000a93e4 beq.w 0xa963e | goto label_55;
| }
0x000a93e8 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000a93ea cmp r3, 0 |
| if (r3 == 0) {
0x000a93ec beq 0xa94c2 | goto label_40;
| }
0x000a93ee mov r2, r4 | r2 = r4;
0x000a93f0 movs r1, 1 | r1 = 1;
0x000a93f2 mov r0, r5 | r0 = r5;
0x000a93f4 bl 0x57398 | fcn_00057398 (r0, r1, r2);
| label_12:
0x000a93f8 ldr r2, [pc, 0x384] |
0x000a93fa mov r1, r4 | r1 = r4;
0x000a93fc ldr.w r3, [sl] | r3 = *(sl);
0x000a9400 mov r0, r5 | r0 = r5;
0x000a9402 add r2, pc | r2 = 0x152b86;
0x000a9404 bl 0xa8aa8 | fcn_000a8aa8 (r0, r1, r2, r3);
0x000a9408 ldr r3, [r5] | r3 = *(r5);
0x000a940a str r3, [sp, 0x14] | var_14h = r3;
0x000a940c ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000a940e lsls r2, r3, 0x11 | r2 = r3 << 0x11;
| if (r2 >= r3) {
0x000a9410 bpl.w 0xa91e2 | goto label_9;
| }
0x000a9414 ldrb.w r3, [sl, 0x2b] | r3 = *((sl + 0x2b));
0x000a9418 cmp r3, 0 |
| if (r3 != 0) {
0x000a941a bne.w 0xa91e2 | goto label_9;
| }
0x000a941e ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000a9420 str r3, [sp, 0x18] | var_18h = r3;
0x000a9422 cmp r3, 0 |
| if (r3 == 0) {
0x000a9424 beq.w 0xa9710 | goto label_56;
| }
| label_27:
0x000a9428 ldr.w r0, [sl, 0x3c] | r0 = *((sl + 0x3c));
0x000a942c movs r2, 0 | r2 = 0;
0x000a942e ldr.w r1, [sl] | r1 = *(sl);
0x000a9432 adds r0, 0x38 | r0 += 0x38;
0x000a9434 bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x000a9438 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000a943a cmp r3, 0 |
| if (r3 == 0) {
0x000a943c beq.w 0xa965e | goto label_57;
| }
0x000a9440 movs r3, 1 | r3 = 1;
0x000a9442 movs r2, 0 | r2 = 0;
0x000a9444 strb.w r3, [r5, 0x97] | *((r5 + 0x97)) = r3;
0x000a9448 mov r1, r7 | r1 = r7;
0x000a944a ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a944c bl 0x32c4c | fcn_00032c4c (r0, r1, r2);
0x000a9450 movs r2, 0 | r2 = 0;
0x000a9452 mov r1, r0 | r1 = r0;
0x000a9454 mov r0, r5 | r0 = r5;
0x000a9456 bl 0x911ec | fcn_000911ec (r0, r1, r2, r3);
0x000a945a movs r3, 0 | r3 = 0;
0x000a945c strb.w r3, [r5, 0x97] | *((r5 + 0x97)) = r3;
0x000a9460 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a9462 ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000a9464 lsls r2, r3, 0xc | r2 = r3 << 0xc;
| if (r2 >= r3) {
0x000a9466 bpl.w 0xa96e4 | goto label_58;
| }
| label_11:
0x000a946a ldr r3, [r5] | r3 = *(r5);
0x000a946c str r3, [sp, 0x14] | var_14h = r3;
0x000a946e b 0xa91e2 | goto label_9;
| label_50:
0x000a9470 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a9472 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000a9474 add r3, r6 | r3 += r6;
0x000a9476 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a9478 ldrh.w r2, [r3, 0x4e] | r2 = *((r3 + 0x4e));
| label_49:
0x000a947c bic r2, r2, 2 | r2 = BIT_MASK (r2, 2);
0x000a9480 strh.w r2, [r3, 0x4e] | *((r3 + 0x4e)) = r2;
0x000a9484 b 0xa90b8 | goto label_0;
| label_36:
0x000a9486 ldr.w r0, [sl] | r0 = *(sl);
0x000a948a movs r2, 4 | r2 = 4;
0x000a948c ldr r1, [pc, 0x2f4] |
0x000a948e adds r0, 7 | r0 += 7;
0x000a9490 add r1, pc | r1 = 0x152c18;
0x000a9492 blx 0x8154 | r0 = fcn_00008154 ();
0x000a9496 cmp r0, 0 |
| if (r0 == 0) {
0x000a9498 beq.w 0xa91ba | goto label_10;
| }
0x000a949c ldr.w r0, [sl] | r0 = *(sl);
0x000a94a0 movs r2, 0xa | r2 = 0xa;
0x000a94a2 ldr r1, [pc, 0x2e4] |
0x000a94a4 adds r0, 7 | r0 += 7;
0x000a94a6 add r1, pc | r1 = 0x152c34;
0x000a94a8 blx 0x8154 | r0 = fcn_00008154 ();
0x000a94ac cmp r0, 0 |
| if (r0 == 0) {
0x000a94ae beq.w 0xa91ba | goto label_10;
| }
| label_24:
0x000a94b2 ldr r1, [pc, 0x2d8] |
0x000a94b4 mov r0, r5 | r0 = r5;
0x000a94b6 ldr.w r2, [sl] | r2 = *(sl);
0x000a94ba add r1, pc | r1 = 0x152c4c;
0x000a94bc bl 0x21598 | fcn_00021598 (r0, r1);
0x000a94c0 b 0xa90b8 | goto label_0;
| label_40:
0x000a94c2 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x000a94c4 cmp r3, 0 |
| if (r3 == 0) {
0x000a94c6 beq.w 0xa95de | goto label_59;
| }
| label_21:
0x000a94ca mov r0, r5 | r0 = r5;
0x000a94cc bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000a94d0 cmp r0, 0 |
| if (r0 == 0) {
0x000a94d2 beq.w 0xa90b8 | goto label_0;
| }
0x000a94d6 mov r2, r4 | r2 = r4;
0x000a94d8 movs r1, 1 | r1 = 1;
0x000a94da mov r0, r5 | r0 = r5;
0x000a94dc bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x000a94e0 cmp.w sb, 0 |
| if (sb != 0) {
0x000a94e4 bne 0xa946a | goto label_11;
| }
0x000a94e6 b 0xa93f8 | goto label_12;
| label_41:
0x000a94e8 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
0x000a94ea cmp r3, 0 |
| if (r3 == 0) {
0x000a94ec beq 0xa95ec | goto label_60;
| }
| label_22:
0x000a94ee mov r0, r5 | r0 = r5;
0x000a94f0 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000a94f4 mov fp, r0 |
0x000a94f6 b 0xa91f6 | goto label_13;
| label_44:
0x000a94f8 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000a94fa mov r0, r5 | r0 = r5;
0x000a94fc ldr r1, [pc, 0x290] |
0x000a94fe ldr.w r3, [sl] | r3 = *(sl);
0x000a9502 ldr r2, [r2] | r2 = *(r2);
0x000a9504 add r1, pc | r1 = 0x152c98;
0x000a9506 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000a950a b 0xa9232 | goto label_14;
| label_39:
0x000a950c ldr r1, [pc, 0x284] |
0x000a950e mov r0, r5 | r0 = r5;
0x000a9510 ldr.w r2, [sl] | r2 = *(sl);
0x000a9514 add r1, pc | r1 = 0x152cac;
0x000a9516 bl 0x21598 | fcn_00021598 (r0, r1);
0x000a951a b 0xa90b8 | goto label_0;
| label_46:
0x000a951c mov ip, sb |
0x000a951e ldr.w sb, [sl, 0x14] | sb = *((sl + 0x14));
0x000a9522 str r4, [sp, 0x18] | var_18h = r4;
| label_16:
0x000a9524 clz lr, ip | lr &= ip;
0x000a9528 ldr.w r3, [sl, 8] | r3 = *((sl + 8));
0x000a952c lsr.w lr, lr, 5 | lr >>= 5;
0x000a9530 cmp sb, ip |
0x000a9532 ite hs |
| if (sb < ip) {
0x000a9534 movhs r4, lr | r4 = lr;
| }
| if (sb >= ip) {
0x000a9536 orrlo r4, lr, 1 | r4 = lr | 1;
| }
| if (r4 != 0) {
0x000a953a cbnz r4, 0xa9594 | goto label_61;
| }
0x000a953c cmp r3, 0 |
| if (r3 == 0) {
0x000a953e beq.w 0xa93d4 | goto label_15;
| }
| do {
| label_17:
0x000a9542 ldr r2, [r3, 0x2c] | r2 = *((r3 + 0x2c));
0x000a9544 cmp ip, r2 |
0x000a9546 ite ls |
| if (ip > r2) {
0x000a9548 movls r1, lr | r1 = lr;
| }
| if (ip <= r2) {
0x000a954a orrhi r1, lr, 1 | r1 = lr | 1;
| }
| if (r1 != 0) {
0x000a954e cbz r1, 0xa9556 |
0x000a9550 cmp r4, r2 |
0x000a9552 it lo |
| if (r4 < r2) {
0x000a9554 movlo r4, r2 | r4 = r2;
| goto label_62;
| }
| }
| label_62:
0x000a9556 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000a9558 cmp r3, 0 |
0x000a955a bne 0xa9542 |
| } while (r3 != 0);
| label_18:
0x000a955c cmp r4, 0 |
| if (r4 == 0) {
0x000a955e beq.w 0xa93d4 | goto label_15;
| }
0x000a9562 ldr.w r2, [sl, 0x3c] | r2 = *((sl + 0x3c));
0x000a9566 ldr r3, [r5] | r3 = *(r5);
0x000a9568 cmp r2, 0 |
| if (r2 == 0) {
0x000a956a beq.w 0xa971e | goto label_63;
| }
0x000a956e ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x000a9570 mov.w ip, 0 |
0x000a9574 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x000a9576 cmp r2, r3 |
| if (r2 == r3) {
0x000a9578 beq 0xa9586 | goto label_28;
| }
| do {
0x000a957a ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x000a957c adds r1, 0x10 | r1 += 0x10;
0x000a957e add.w ip, ip, 1 |
0x000a9582 cmp r2, r3 |
0x000a9584 bne 0xa957a |
| } while (r2 != r3);
| label_28:
0x000a9586 mov r2, ip | r2 = ip;
0x000a9588 mov r1, r4 | r1 = r4;
0x000a958a mov r0, r5 | r0 = r5;
0x000a958c bl 0xa8e04 | fcn_000a8e04 (r0, r1, r2);
0x000a9590 mov ip, r4 |
0x000a9592 b 0xa9524 | goto label_16;
| label_61:
0x000a9594 mov r4, sb | r4 = sb;
0x000a9596 cmp r3, 0 |
| if (r3 != 0) {
0x000a9598 bne 0xa9542 | goto label_17;
| }
0x000a959a b 0xa955c | goto label_18;
| label_47:
0x000a959c movs r3, 0 | r3 = 0;
0x000a959e movs r1, 0x97 | r1 = 0x97;
0x000a95a0 mov r2, r4 | r2 = r4;
0x000a95a2 mov r0, fp | r0 = fp;
0x000a95a4 str r3, [sp] | *(sp) = r3;
0x000a95a6 bl 0x2dc28 | r0 = fcn_0002dc28 (r0, r1, r2, r3);
0x000a95aa mov r1, r0 | r1 = r0;
0x000a95ac b 0xa92ae | goto label_19;
| label_42:
0x000a95ae ldrd r3, r2, [fp, 0x6c] | __asm ("ldrd r3, r2, [arg_6ch]");
0x000a95b2 cmp r3, r2 |
| if (r3 >= r2) {
0x000a95b4 bge 0xa964e | goto label_64;
| }
0x000a95b6 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x000a95ba adds r3, 1 | r3++;
0x000a95bc str.w r3, [fp, 0x6c] | __asm ("str.w r3, [arg_6ch]");
0x000a95c0 movs r0, 0xaa | r0 = 0xaa;
0x000a95c2 ldr.w r3, [fp, 0x68] | r3 = *(arg_68h);
0x000a95c6 lsls r2, r2, 2 | r2 <<= 2;
0x000a95c8 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000a95cc movs r1, 0 | r1 = 0;
0x000a95ce str r0, [r3, r2] | *((r3 + r2)) = r0;
0x000a95d0 add r3, r2 | r3 += r2;
0x000a95d2 adds r2, r3, 4 | r2 = r3 + 4;
0x000a95d4 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000a95d8 strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
0x000a95dc b 0xa920a | goto label_20;
| label_59:
0x000a95de ldr r3, [r5] | r3 = *(r5);
0x000a95e0 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000a95e2 lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
0x000a95e4 itt pl |
| if (r1 < r3) {
0x000a95e6 movpl r3, 1 | r3 = 1;
| }
| if (r1 < r3) {
0x000a95e8 strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000a95ea b 0xa94ca | goto label_21;
| label_60:
0x000a95ec ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a95ee ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000a95f0 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000a95f2 itt pl |
| if (r3 < r3) {
0x000a95f4 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000a95f6 strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000a95f8 b 0xa94ee | goto label_22;
| label_31:
0x000a95fa cmp.w lr, 1 |
| if (lr == 1) {
0x000a95fe beq.w 0xa9728 | goto label_65;
| }
0x000a9602 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000a9606 movs r6, 0 | r6 = 0;
0x000a9608 ldr r2, [pc, 0x18c] |
0x000a960a mov.w r4, 0x8000 | r4 = 0x8000;
0x000a960e movt r6, 0xfff8 | r6 = (r6 & 0xFFFF) | 0xfff80000;
0x000a9612 movt r4, 0xffff | r4 = (r4 & 0xFFFF) | 0xffff0000;
0x000a9616 sub.w ip, r3, 0x80000 |
0x000a961a add r2, pc | r2 = 0x152db6;
0x000a961c b 0xa9132 | goto label_3;
| label_37:
0x000a961e ldr.w r2, [r8, 0xc4] | r2 = *((r8 + 0xc4));
0x000a9622 cmp r2, 0 |
| if (r2 != 0) {
0x000a9624 bne.w 0xa91b4 | goto label_23;
| }
0x000a9628 ldr.w r2, [r8, 0x17c] | r2 = *((r8 + 0x17c));
0x000a962c cmp r2, 0 |
| if (r2 <= 0) {
0x000a962e ble.w 0xa94b2 | goto label_24;
| }
0x000a9632 ldr.w r2, [r8, 0x194] | r2 = *((r8 + 0x194));
0x000a9636 cmp r2, 0 |
| if (r2 != 0) {
0x000a9638 bne.w 0xa94b2 | goto label_24;
| }
0x000a963c b 0xa91b4 | goto label_23;
| label_55:
0x000a963e ldr r1, [pc, 0x15c] |
0x000a9640 mov r0, r5 | r0 = r5;
0x000a9642 ldr.w r2, [sl] | r2 = *(sl);
0x000a9646 add r1, pc | r1 = 0x152de8;
0x000a9648 bl 0x21598 | fcn_00021598 (r0, r1);
0x000a964c b 0xa90b8 | goto label_0;
| label_64:
0x000a964e movs r3, 0 | r3 = 0;
0x000a9650 movs r1, 0xaa | r1 = 0xaa;
0x000a9652 mov r2, r3 | r2 = r3;
0x000a9654 mov r0, fp | r0 = fp;
0x000a9656 str r3, [sp] | *(sp) = r3;
0x000a9658 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000a965c b 0xa920a | goto label_20;
| label_57:
0x000a965e ldr.w r3, [sl, 0x30] | r3 = *((sl + 0x30));
0x000a9662 ldr r1, [sp, 0x14] | r1 = var_14h;
| if (r3 != 0) {
0x000a9664 cbnz r3, 0xa9676 | goto label_66;
| }
0x000a9666 b 0xa946a | goto label_11;
| label_25:
0x000a9668 ldr r2, [r1, 0x20] | r2 = *((r1 + 0x20));
0x000a966a lsls r0, r2, 0xc | r0 = r2 << 0xc;
| if (r0 < r2) {
0x000a966c bmi 0xa967c | goto label_67;
| }
0x000a966e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a9670 cmp r3, 0 |
| if (r3 == 0) {
0x000a9672 beq.w 0xa946a | goto label_11;
| }
| label_66:
0x000a9676 ldrb r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x000a9678 cmp r2, 0 |
| if (r2 == 0) {
0x000a967a beq 0xa9668 | goto label_25;
| }
| label_67:
0x000a967c ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x000a967e movs r2, 1 | r2 = 1;
0x000a9680 movs r1, 0x30 | r1 = 0x30;
0x000a9682 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000a9684 add.w fp, r3, -1 |
0x000a9688 movs r3, 0 | r3 = 0;
0x000a968a str.w fp, [r5, 0x38] | __asm ("str.w fp, [r5, 0x38]");
0x000a968e str r3, [sp] | *(sp) = r3;
0x000a9690 mov r3, fp | r3 = fp;
0x000a9692 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a9696 movs r3, 1 | r3 = 1;
0x000a9698 movs r2, 0 | r2 = 0;
0x000a969a strb.w r3, [r5, 0x97] | *((r5 + 0x97)) = r3;
0x000a969e mov r1, r7 | r1 = r7;
0x000a96a0 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000a96a2 bl 0x32c4c | fcn_00032c4c (r0, r1, r2);
0x000a96a6 movs r2, 0 | r2 = 0;
0x000a96a8 mov r1, r0 | r1 = r0;
0x000a96aa mov r0, r5 | r0 = r5;
0x000a96ac bl 0x911ec | fcn_000911ec (r0, r1, r2, r3);
0x000a96b0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a96b2 mov.w r2, 0 | r2 = 0;
0x000a96b6 strb.w r2, [r5, 0x97] | *((r5 + 0x97)) = r2;
0x000a96ba ldr r3, [r3, 0x20] | r3 = *((r3 + 0x20));
0x000a96bc lsls r3, r3, 0xc | r3 <<= 0xc;
| if (r3 >= r3) {
0x000a96be bpl 0xa96e4 | goto label_58;
| }
| label_26:
0x000a96c0 cmp.w fp, 0 |
| if (fp == 0) {
0x000a96c4 beq.w 0xa946a | goto label_11;
| }
0x000a96c8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a96ca mvn.w r2, fp | r2 = ~fp;
0x000a96ce ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000a96d0 ldrd r3, r1, [r0, 0x38] | __asm ("ldrd r3, r1, [r0, 0x38]");
0x000a96d4 cmn r1, r3 |
| if (r1 < r3) {
0x000a96d6 bmi 0xa974e | goto label_68;
| }
0x000a96d8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a96da ldr r1, [r3, 0x6c] | r1 = *((r3 + 0x6c));
0x000a96dc ldr r3, [r0, 0x40] | r3 = *((r0 + 0x40));
0x000a96de str.w r1, [r3, r2, lsl 2] | __asm ("str.w r1, [r3, r2, lsl 2]");
0x000a96e2 b 0xa946a | goto label_11;
| label_58:
0x000a96e4 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000a96e6 movs r2, 0 | r2 = 0;
0x000a96e8 movs r1, 0x30 | r1 = 0x30;
0x000a96ea ldr r3, [r0, 0x6c] | r3 = *((r0 + 0x6c));
0x000a96ec str r2, [sp] | *(sp) = r2;
0x000a96ee adds r3, 2 | r3 += 2;
0x000a96f0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000a96f4 movs r2, 0 | r2 = 0;
0x000a96f6 movs r1, 4 | r1 = 4;
0x000a96f8 mov r3, r2 | r3 = r2;
0x000a96fa mov.w r2, -1 | r2 = -1;
0x000a96fe strd r2, r1, [sp] | __asm ("strd r2, r1, [sp]");
0x000a9702 mov r0, r5 | r0 = r5;
0x000a9704 movs r2, 2 | r2 = 2;
0x000a9706 movw r1, 0x313 | r1 = 0x313;
0x000a970a bl 0x2eda0 | fcn_0002eda0 (r0, r1, r2, r3, r4, r5);
0x000a970e b 0xa96c0 | goto label_26;
| label_56:
0x000a9710 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
| if (r3 == 0) {
0x000a9712 cbz r3, 0xa975a | goto label_69;
| }
| label_29:
0x000a9714 mov r0, r5 | r0 = r5;
0x000a9716 bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x000a971a str r0, [sp, 0x18] | var_18h = r0;
0x000a971c b 0xa9428 | goto label_27;
| label_63:
0x000a971e mov.w ip, 0x8000 |
0x000a9722 movt ip, 0xffff |
0x000a9726 b 0xa9586 | goto label_28;
| label_65:
0x000a9728 mov r1, sl | r1 = sl;
0x000a972a mov r0, r5 | r0 = r5;
0x000a972c bl 0x774c4 | r0 = fcn_000774c4 (r0, r1);
0x000a9730 cmp r0, 0 |
| if (r0 != 0) {
0x000a9732 bne.w 0xa90b8 | goto label_0;
| }
0x000a9736 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000a973a movs r6, 0 | r6 = 0;
0x000a973c mov.w r4, 0x8000 | r4 = 0x8000;
0x000a9740 movt r6, 0xfff8 | r6 = (r6 & 0xFFFF) | 0xfff80000;
0x000a9744 movt r4, 0xffff | r4 = (r4 & 0xFFFF) | 0xffff0000;
0x000a9748 sub.w ip, r3, 0x80000 |
0x000a974c b 0xa912c | goto label_6;
| label_68:
0x000a974e ldr r1, [sp, 0x18] | r1 = var_18h;
0x000a9750 bl 0x3008c | fcn_0003008c (r0, r1, r2);
0x000a9754 ldr r3, [r5] | r3 = *(r5);
0x000a9756 str r3, [sp, 0x14] | var_14h = r3;
0x000a9758 b 0xa91e2 | goto label_9;
| label_69:
0x000a975a ldr r3, [sp, 0x14] | r3 = var_14h;
0x000a975c ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000a975e lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000a9760 itt pl |
| if (r3 < r3) {
0x000a9762 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000a9764 strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000a9766 b 0xa9714 | goto label_29;
| label_54:
0x000a9768 movs r3, 0 | r3 = 0;
0x000a976a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000a976c udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa97a0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000a97a0 () | void fcn_000a97a0 (int16_t arg_100h, int16_t arg_104h, int16_t arg_108h, int16_t arg_10ch, int16_t arg_110h, int16_t arg_114h, int16_t arg_118h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h;
| arithmetic x;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_70h;
| int16_t var_74h;
| int16_t var_78h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_88h;
| int16_t var_a8h;
| int16_t var_d4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000a97a0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a97a4 mov r4, r2 | r4 = r2;
0x000a97a6 ldr.w r2, [pc, 0xb5c] | r2 = *(0x000aa304);
0x000a97aa mov fp, r3 |
0x000a97ac sub sp, 0xdc |
0x000a97ae ldr.w r3, [pc, 0xb58] |
0x000a97b2 add r2, pc | r2 += pc;
0x000a97b4 ldr.w sl, [sp, 0x100] | sl = *(arg_100h);
0x000a97b8 ldr r7, [sp, 0x10c] | r7 = *(arg_10ch);
0x000a97ba ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000a97bc ldr r2, [r0, 0x24] | r2 = *(arg_100hx24);
0x000a97be ldr.w r8, [r0] | r8 = *(r0);
0x000a97c2 ldr r3, [r3] | r3 = *(0xaa30a);
0x000a97c4 str r3, [sp, 0xd4] | var_d4h = r3;
0x000a97c6 mov.w r3, 0 | r3 = 0;
0x000a97ca movs r3, 0 | r3 = 0;
0x000a97cc strd r3, r3, [sp, 0x40] | __asm ("strd r3, r3, [var_40h]");
0x000a97d0 ldr r3, [sp, 0x108] | r3 = *(arg_108h);
0x000a97d2 str r3, [sp, 0x18] | var_18h = r3;
0x000a97d4 ldrb.w r3, [sp, 0x118] | r3 = *(arg_118h);
0x000a97d8 str r3, [sp, 0x10] | var_10h = r3;
0x000a97da cmp r2, 0 |
| if (r2 != 0) {
0x000a97dc bne 0xa9894 | goto label_1;
| }
0x000a97de ldrb.w r3, [r0, 0xd0] | r3 = *(arg_100hxd0);
0x000a97e2 mov r6, r0 | r6 = r0;
0x000a97e4 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000a97e6 sub.w r3, r3, 1 | r3--;
0x000a97ea clz r3, r3 | r3 &= r3;
0x000a97ee cmp r2, 2 |
0x000a97f0 lsr.w r3, r3, 5 | r3 >>= 5;
0x000a97f4 it eq |
| if (r2 != 2) {
0x000a97f6 moveq r3, 0 | r3 = 0;
| }
0x000a97f8 cmp r3, 0 |
| if (r3 != 0) {
0x000a97fa bne 0xa9894 | goto label_1;
| }
0x000a97fc mov r5, r1 | r5 = r1;
0x000a97fe bl 0x89f38 | r0 = fcn_00089f38 (r0);
0x000a9802 cmp r0, 0 |
| if (r0 != 0) {
0x000a9804 bne 0xa9894 | goto label_1;
| }
0x000a9806 cmp.w sl, 0 |
| if (sl == 0) {
0x000a980a beq 0xa98b2 | goto label_58;
| }
0x000a980c ldr.w r2, [sl] | r2 = *(sl);
0x000a9810 cmp r2, 0 |
| if (r2 > 0) {
0x000a9812 bgt 0xa981a | goto label_59;
| }
0x000a9814 b 0xa98b2 | goto label_58;
| do {
0x000a9816 cmp r2, r0 |
| if (r2 == r0) {
0x000a9818 beq 0xa98b2 | goto label_58;
| }
| label_59:
0x000a981a adds r0, 1 | r0++;
0x000a981c lsls r3, r0, 4 | r3 = r0 << 4;
0x000a981e add.w r1, sl, r3 | r1 = sl + r3;
0x000a9822 ldrb r1, [r1, 1] | r1 = *((r1 + 1));
0x000a9824 lsls r1, r1, 0x1a | r1 <<= 0x1a;
0x000a9826 bpl 0xa9816 |
| } while (r1 >= r1);
0x000a9828 ldrb.w r3, [sl, r3] | r3 = *((sl + r3));
0x000a982c cmp r3, 3 |
0x000a982e it ne |
| if (r3 != 3) {
0x000a9830 cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
| if (r3 != 3) {
0x000a9832 bne.w 0xa9b12 | goto label_60;
| }
0x000a9836 ldr.w r2, [pc, 0xad4] | r2 = *(0x000aa30c);
0x000a983a add r2, pc | r2 += pc;
| label_7:
0x000a983c ldr.w r1, [pc, 0xad0] | r1 = *(0x000aa310);
0x000a9840 mov r0, r6 | r0 = r6;
0x000a9842 add r1, pc | r1 += pc;
0x000a9844 bl 0x21598 | fcn_00021598 (r0, r1);
| if (r7 != 0) {
0x000a9848 cbz r7, 0xa9852 |
0x000a984a mov r1, r7 | r1 = r7;
0x000a984c mov r0, r8 | r0 = r8;
0x000a984e bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x000a9852 mov r1, sl | r1 = sl;
0x000a9854 mov r0, r8 | r0 = r8;
0x000a9856 mov.w sb, 0 | sb = 0;
0x000a985a bl 0x1a608 | fcn_0001a608 (r0, r1);
| do {
| label_0:
0x000a985e mov r1, fp | r1 = fp;
0x000a9860 mov r0, r8 | r0 = r8;
0x000a9862 bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x000a9866 cmp.w sb, 0 |
| if (sb != 0) {
0x000a986a beq 0xa9874 |
| label_56:
0x000a986c mov r1, sb | r1 = sb;
0x000a986e mov r0, r8 | r0 = r8;
0x000a9870 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000a9874 ldr.w r2, [pc, 0xa9c] |
0x000a9878 ldr.w r3, [pc, 0xa8c] | r3 = *(0xaa308);
0x000a987c add r2, pc | r2 = 0x153b94;
0x000a987e ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a9880 ldr r2, [r3] | r2 = imp.sinh;
0x000a9882 ldr r3, [sp, 0xd4] | r3 = var_d4h;
0x000a9884 eors r2, r3 | r2 ^= r3;
0x000a9886 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a988a bne.w 0xaa4b4 | goto label_61;
| }
0x000a988e add sp, 0xdc |
0x000a9890 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x000a9894 mov.w sb, 0 | sb = 0;
| if (r7 != 0) {
| label_2:
0x000a9898 cbz r7, 0xa98a2 |
0x000a989a mov r1, r7 | r1 = r7;
0x000a989c mov r0, r8 | r0 = r8;
0x000a989e bl 0x1a57c | fcn_0001a57c (r0, r1);
| }
0x000a98a2 cmp.w sl, 0 |
0x000a98a6 beq 0xa985e |
| } while (sl == 0);
0x000a98a8 mov r1, sl | r1 = sl;
0x000a98aa mov r0, r8 | r0 = r8;
0x000a98ac bl 0x1a608 | fcn_0001a608 (r0, r1);
0x000a98b0 b 0xa985e | goto label_0;
| label_58:
0x000a98b2 cmp.w fp, 0 |
| if (fp == 0) {
0x000a98b6 beq.w 0xa9a18 | goto label_62;
| }
0x000a98ba mov r2, r4 | r2 = r4;
0x000a98bc mov r1, r5 | r1 = r5;
0x000a98be add r3, sp, 0x40 | r3 += var_40h;
0x000a98c0 mov r0, r6 | r0 = r6;
0x000a98c2 bl 0x241a8 | r0 = fcn_000241a8 (r0, r1, r2, r3);
0x000a98c6 subs r2, r0, 0 | r2 = r0 - 0;
0x000a98c8 str r2, [sp, 0x1c] | var_1ch = r2;
| if (r2 < r0) {
0x000a98ca blt 0xa9894 | goto label_1;
| }
0x000a98cc ldrb.w r3, [r8, 0xb1] | r3 = *((r8 + 0xb1));
0x000a98d0 cmp r3, 0 |
| if (r3 == 0) {
0x000a98d2 beq.w 0xa9c46 | goto label_63;
| }
0x000a98d6 mov r3, r2 | r3 = r2;
| label_10:
0x000a98d8 sub.w r5, r3, 1 | r5 = r3 - 1;
0x000a98dc lsls r2, r3, 4 | r2 = r3 << 4;
0x000a98de clz r5, r5 | r5 &= r5;
0x000a98e2 lsrs r5, r5, 5 | r5 >>= 5;
0x000a98e4 str r2, [sp, 0x20] | var_20h = r2;
| label_23:
0x000a98e6 ldr r3, [r6] | r3 = *(r6);
0x000a98e8 ldr.w r0, [pc, 0xa2c] | r0 = *(0x000aa318);
0x000a98ec ldr.w r1, [pc, 0xa2c] | r1 = *(0x000aa31c);
0x000a98f0 ldr r4, [r3, 0x10] | r4 = *((r3 + 0x10));
0x000a98f2 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a98f4 add r0, pc | r0 += pc;
0x000a98f6 ldr.w r2, [pc, 0xa28] | r2 = *(0x000aa320);
0x000a98fa add r1, pc | r1 += pc;
0x000a98fc ldr.w lr, [pc, 0xa24] |
0x000a9900 add.w ip, r4, r3 |
0x000a9904 ldr r4, [r4, r3] | r4 = *((r4 + r3));
0x000a9906 ldr r3, [sp, 0x40] | r3 = var_40h;
0x000a9908 add r2, pc | r2 += pc;
0x000a990a str r0, [sp, 0x58] | var_58h = r0;
0x000a990c add lr, pc | lr += pc;
0x000a990e ldr.w r0, [ip, 0xc] | r0 = *((ip + 0xc));
0x000a9912 str r3, [sp, 0x80] | var_80h = r3;
0x000a9914 add r3, sp, 0x50 | r3 += var_50h;
0x000a9916 vdup.32 d16, r6 | __asm ("vdup.32 d16, r6");
0x000a991a strb.w r5, [sp, 0x74] | var_74h = r5;
0x000a991e movs r5, 0 | r5 = 0;
0x000a9920 str r3, [sp, 0x6c] | var_6ch = r3;
0x000a9922 add r3, sp, 0x88 | r3 += var_88h;
0x000a9924 str r1, [sp, 0x7c] | var_7ch = r1;
0x000a9926 mov r1, r5 | r1 = r5;
0x000a9928 str r2, [sp, 0x5c] | var_5ch = r2;
0x000a992a movs r2, 0x4c | r2 = 0x4c;
0x000a992c str r0, [sp, 0x70] | var_70h = r0;
0x000a992e mov r0, r3 | r0 = r3;
0x000a9930 str.w lr, [sp, 0x60] | __asm ("str.w lr, [var_60h]");
0x000a9934 vstr d16, [sp, 0x50] | __asm ("vstr d16, [sp, 0x50]");
0x000a9938 str r4, [sp, 0x78] | var_78h = r4;
0x000a993a str r5, [sp, 0x64] | var_64h = r5;
0x000a993c strh.w r5, [sp, 0x68] | var_68h = r5;
0x000a9940 blx 0x839c | r0 = fcn_0000839c ();
0x000a9944 mov r1, r0 | r1 = r0;
0x000a9946 add r0, sp, 0x54 | r0 += var_54h;
0x000a9948 str.w fp, [sp, 0xa8] | __asm ("str.w fp, [var_a8h]");
0x000a994c bl 0x31b70 | fcn_00031b70 (r0, r1, r2, r3, r4, r5);
0x000a9950 add.w r2, fp, 8 | r2 += arg_108h;
0x000a9954 mov r1, r5 | r1 = r5;
0x000a9956 mov r0, r6 | r0 = r6;
0x000a9958 bl 0x8a9bc | fcn_0008a9bc (r0, r1, r2);
0x000a995c str r0, [sp, 0x14] | x = r0;
0x000a995e cmp r0, 0 |
| if (r0 == 0) {
0x000a9960 beq 0xa9894 | goto label_1;
| }
0x000a9962 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a9964 ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x000a9968 ldr r0, [r0] | r0 = *(r0);
0x000a996a cmp r3, 1 |
| if (r3 == 1) {
0x000a996c beq.w 0xa9c68 | goto label_64;
| }
| label_11:
0x000a9970 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a9972 ldr r2, [sp, 0x14] | r2 = x;
0x000a9974 adds r3, r1, r3 | r3 = r1 + r3;
0x000a9976 str r3, [sp, 0x24] | var_24h = r3;
0x000a9978 ldr r3, [r2, 0x1c] | r3 = *((r2 + 0x1c));
0x000a997a ands r3, r3, 0x80 | r3 &= 0x80;
0x000a997e it eq |
| if (r3 != r3) {
0x000a9980 streq r3, [sp, 0x28] | var_28h = r3;
| }
| if (r3 == r3) {
0x000a9982 beq 0xa99a0 | goto label_65;
| }
0x000a9984 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x000a9986 str r3, [sp, 0x28] | var_28h = r3;
0x000a9988 ldr r2, [sp, 0x28] | r2 = var_28h;
| if (r3 != 0) {
0x000a998a cbnz r3, 0xa9992 | goto label_66;
| }
0x000a998c b 0xa99a0 | goto label_65;
| do {
0x000a998e ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
| if (r2 == 0) {
0x000a9990 cbz r2, 0xa999e | goto label_67;
| }
| label_66:
0x000a9992 ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x000a9996 and r3, r3, 3 | r3 &= 3;
0x000a999a cmp r3, 2 |
0x000a999c bne 0xa998e |
| } while (r3 != 2);
| label_67:
0x000a999e str r2, [sp, 0x28] | var_28h = r2;
| label_65:
0x000a99a0 ldr.w r1, [pc, 0x984] | r1 = *(0x000aa328);
0x000a99a4 movs r2, 7 | r2 = 7;
0x000a99a6 add r1, pc | r1 += pc;
0x000a99a8 blx 0x8154 | r0 = fcn_00008154 ();
0x000a99ac cmp r0, 0 |
| if (r0 != 0) {
0x000a99ae bne 0xa9a6a | goto label_25;
| }
0x000a99b0 ldrb.w r3, [r8, 0xb1] | r3 = *((r8 + 0xb1));
0x000a99b4 cmp r3, 0 |
| if (r3 != 0) {
0x000a99b6 bne 0xa9a6a | goto label_25;
| }
0x000a99b8 ldr.w r1, [pc, 0x970] | r1 = *(0x000aa32c);
0x000a99bc mov sb, r3 | sb = r3;
0x000a99be ldr r3, [sp, 0x14] | r3 = x;
0x000a99c0 mov r0, r6 | r0 = r6;
0x000a99c2 add r1, pc | r1 += pc;
0x000a99c4 ldr r2, [r3] | r2 = *(r3);
0x000a99c6 bl 0x21598 | fcn_00021598 (r0, r1);
| label_5:
0x000a99ca ldr r3, [sp, 0x14] | r3 = x;
0x000a99cc ldr r5, [r3, 8] | r5 = *((r3 + 8));
0x000a99ce add.w r4, r3, 8 | r4 = r3 + 8;
0x000a99d2 cmp r5, 0 |
| if (r5 == 0) {
0x000a99d4 beq.w 0xa9898 | goto label_2;
| }
| label_33:
0x000a99d8 ldrb.w r2, [r5, 0x36] | r2 = *((r5 + 0x36));
0x000a99dc ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000a99de cmp r2, 5 |
| if (r2 == 5) {
0x000a99e0 beq 0xa99f8 | goto label_4;
| }
| label_3:
0x000a99e2 add.w r4, r5, 0x14 | r4 = r5 + 0x14;
0x000a99e6 cmp r3, 0 |
| if (r3 == 0) {
0x000a99e8 beq.w 0xa9898 | goto label_2;
| }
0x000a99ec mov r5, r3 | r5 = r3;
0x000a99ee ldrb.w r2, [r5, 0x36] | r2 = *((r5 + 0x36));
0x000a99f2 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000a99f4 cmp r2, 5 |
| if (r2 != 5) {
0x000a99f6 bne 0xa99e2 | goto label_3;
| }
| label_4:
0x000a99f8 cmp r3, 0 |
| if (r3 == 0) {
0x000a99fa beq.w 0xa9898 | goto label_2;
| }
0x000a99fe ldrb.w r2, [r3, 0x36] | r2 = *((r3 + 0x36));
0x000a9a02 cmp r2, 5 |
| if (r2 == 5) {
0x000a9a04 beq.w 0xa9898 | goto label_2;
| }
0x000a9a08 str r3, [r4] | *(r4) = r3;
0x000a9a0a mov r4, r3 | r4 = r3;
0x000a9a0c ldr r2, [r3, 0x14] | r2 = *((r3 + 0x14));
0x000a9a0e str r2, [r5, 0x14] | *((r5 + 0x14)) = r2;
0x000a9a10 str r5, [r4, 0x14]! | *((r4 += 0x14)) = r5;
0x000a9a14 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000a9a16 b 0xa99f8 | goto label_4;
| label_62:
0x000a9a18 ldr.w r3, [r6, 0xec] | r3 = *((r6 + 0xec));
0x000a9a1c str r3, [sp, 0x14] | x = r3;
0x000a9a1e cmp r3, 0 |
| if (r3 == 0) {
0x000a9a20 beq.w 0xa9894 | goto label_1;
| }
0x000a9a24 ldr r1, [r3, 0x3c] | r1 = *((r3 + 0x3c));
0x000a9a26 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x000a9a2a str r2, [sp, 0x24] | var_24h = r2;
0x000a9a2c cmp r1, 0 |
| if (r1 == 0) {
0x000a9a2e beq.w 0xaa4da | goto label_68;
| }
0x000a9a32 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000a9a34 cmp r1, r3 |
| if (r1 == r3) {
0x000a9a36 beq.w 0xa9fcc | goto label_69;
| }
0x000a9a3a mov r3, r2 | r3 = r2;
0x000a9a3c mov r2, fp | r2 = fp;
0x000a9a3e adds r3, 0x10 | r3 += 0x10;
| do {
0x000a9a40 mov r0, r3 | r0 = r3;
0x000a9a42 adds r2, 1 | r2++;
0x000a9a44 ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x000a9a46 adds r3, 0x10 | r3 += 0x10;
0x000a9a48 cmp r1, r4 |
0x000a9a4a bne 0xa9a40 |
| } while (r1 != r4);
0x000a9a4c ldr r3, [sp, 0x14] | r3 = x;
0x000a9a4e ldr.w r1, [pc, 0x8e0] |
0x000a9a52 str r2, [sp, 0x1c] | var_1ch = r2;
0x000a9a54 movs r2, 7 | r2 = 7;
0x000a9a56 str r0, [sp, 0x24] | var_24h = r0;
0x000a9a58 add r1, pc | r1 = 0x153d8e;
0x000a9a5a ldr r0, [r3] | r0 = *(r3);
0x000a9a5c blx 0x8154 | fcn_00008154 ();
0x000a9a60 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a9a62 lsls r3, r3, 4 | r3 <<= 4;
0x000a9a64 str r3, [sp, 0x20] | var_20h = r3;
0x000a9a66 movs r3, 0 | r3 = 0;
0x000a9a68 str r3, [sp, 0x28] | var_28h = r3;
| label_25:
0x000a9a6a ldr r3, [sp, 0x14] | r3 = x;
0x000a9a6c ldrb.w r3, [r3, 0x2b] | r3 = *((r3 + 0x2b));
0x000a9a70 cmp r3, 2 |
| if (r3 == 2) {
0x000a9a72 beq.w 0xa9be6 | goto label_70;
| }
0x000a9a76 cmp r3, 1 |
| if (r3 == 1) {
0x000a9a78 beq.w 0xa9f40 | goto label_71;
| }
0x000a9a7c ldr r3, [sp, 0x40] | r3 = var_40h;
0x000a9a7e str r3, [sp, 0x30] | var_30h = r3;
0x000a9a80 cmp r3, 0 |
| if (r3 == 0) {
0x000a9a82 beq 0xa9b1a | goto label_72;
| }
0x000a9a84 mov r1, r3 | r1 = r3;
0x000a9a86 mov r0, r8 | r0 = r8;
0x000a9a88 bl 0x22a34 | r0 = fcn_00022a34 (r0, r1);
0x000a9a8c mov sb, r0 | sb = r0;
0x000a9a8e cmp r0, 0 |
| if (r0 == 0) {
0x000a9a90 beq 0xa99ca | goto label_5;
| }
0x000a9a92 ldr r3, [sp, 0x14] | r3 = x;
0x000a9a94 mov r1, r0 | r1 = r0;
0x000a9a96 ldr.w r2, [pc, 0x89c] | r2 = *(0x000aa334);
0x000a9a9a mov r0, r6 | r0 = r6;
0x000a9a9c ldr r3, [r3] | r3 = *(r3);
0x000a9a9e add r2, pc | r2 += pc;
0x000a9aa0 bl 0x3e5a4 | r0 = fcn_0003e5a4 (r0, r1, r2, r3);
0x000a9aa4 cmp r0, 0 |
| if (r0 != 0) {
0x000a9aa6 bne 0xa99ca | goto label_5;
| }
0x000a9aa8 ldrb.w r3, [r6, 0xd0] | r3 = *((r6 + 0xd0));
0x000a9aac cmp r3, 1 |
| if (r3 < 1) {
0x000a9aae bls 0xa9b8e | goto label_73;
| }
| label_8:
0x000a9ab0 cmp.w sl, 0 |
| if (sl == 0) {
0x000a9ab4 beq.w 0xa9f52 | goto label_74;
| }
0x000a9ab8 ldr r3, [r6] | r3 = *(r6);
0x000a9aba ldr.w r2, [r3, 0x80] | r2 = *((r3 + 0x80));
0x000a9abe ldr.w r3, [sl] | r3 = *(sl);
0x000a9ac2 cmp r2, r3 |
| if (r2 < r3) {
0x000a9ac4 blt.w 0xa9ffe | goto label_75;
| }
| label_27:
0x000a9ac8 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x000a9aca cmp r3, 0 |
| if (r3 != 0) {
0x000a9acc bne.w 0xa99ca | goto label_5;
| }
0x000a9ad0 ldr.w r3, [sl] | r3 = *(sl);
| label_21:
0x000a9ad4 cmp r3, 0 |
0x000a9ad6 mov.w r2, 0 | r2 = 0;
| if (r3 <= 0) {
0x000a9ada ble.w 0xa9c00 | goto label_76;
| }
0x000a9ade str r6, [sp, 0x2c] | var_2ch = r6;
0x000a9ae0 mov r5, r2 | r5 = r2;
0x000a9ae2 str r7, [sp, 0x34] | var_34h = r7;
0x000a9ae4 mov r4, sl | r4 = sl;
0x000a9ae6 mov r6, r2 | r6 = r2;
0x000a9ae8 mov r7, r3 | r7 = r3;
0x000a9aea b 0xa9af6 |
| while (r0 != 0x71) {
| label_6:
0x000a9aec adds r5, 1 | r5++;
0x000a9aee adds r4, 0x10 | r4 += 0x10;
0x000a9af0 cmp r5, r7 |
| if (r5 == r7) {
0x000a9af2 beq.w 0xa9bf8 | goto label_77;
| }
0x000a9af6 ldr r1, [r4, 8] | r1 = *((r4 + 8));
0x000a9af8 ldrb r0, [r1] | r0 = *(r1);
0x000a9afa cmp r0, 0x71 |
0x000a9afc bne 0xa9aec |
| }
0x000a9afe ldr r0, [r1, 8] | r0 = *((r1 + 8));
0x000a9b00 movs r1, 1 | r1 = 1;
| if (r0 != 0) {
0x000a9b02 cbz r0, 0xa9b0e |
0x000a9b04 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000a9b08 bic r1, r0, 0xc0000000 | r1 = BIT_MASK (r0, 0xc0000000);
0x000a9b0c adds r1, 1 | r1++;
| }
0x000a9b0e add r6, r1 | r6 += r1;
0x000a9b10 b 0xa9aec | goto label_6;
| label_60:
0x000a9b12 ldr.w r2, [pc, 0x824] | r2 = *(0x000aa338);
0x000a9b16 add r2, pc | r2 += pc;
0x000a9b18 b 0xa983c | goto label_7;
| label_72:
0x000a9b1a ldr r3, [sp, 0x14] | r3 = x;
0x000a9b1c ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000a9b1e movs r3, 1 | r3 = 1;
| if (r2 == 0) {
0x000a9b20 cbz r2, 0xa9b2a | goto label_78;
| }
| do {
0x000a9b22 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000a9b24 adds r3, 1 | r3++;
0x000a9b26 cmp r2, 0 |
0x000a9b28 bne 0xa9b22 |
| } while (r2 != 0);
| label_78:
0x000a9b2a ldr r2, [sp, 0x14] | r2 = x;
0x000a9b2c mov r0, r8 | r0 = r8;
0x000a9b2e ldr.w r1, [pc, 0x80c] |
0x000a9b32 ldr r2, [r2] | r2 = *(r2);
0x000a9b34 add r1, pc | r1 = 0x153e76;
0x000a9b36 bl 0x24ec8 | r0 = fcn_00024ec8 (r0);
0x000a9b3a mov sb, r0 | sb = r0;
0x000a9b3c cmp r0, 0 |
| if (r0 == 0) {
0x000a9b3e beq 0xa9bf2 | goto label_79;
| }
0x000a9b40 ldrb.w r3, [r6, 0xd0] | r3 = *((r6 + 0xd0));
| if (r3 == 0) {
0x000a9b44 cbz r3, 0xa9b54 | goto label_80;
| }
0x000a9b46 ldrb r3, [r0, 7] | r3 = *((r0 + 7));
0x000a9b48 adds r3, 1 | r3++;
0x000a9b4a strb r3, [r0, 7] | *((r0 + 7)) = r3;
| label_9:
0x000a9b4c ldrb.w r3, [r6, 0xd0] | r3 = *((r6 + 0xd0));
0x000a9b50 cmp r3, 1 |
| if (r3 > 1) {
0x000a9b52 bhi 0xa9ab0 | goto label_8;
| }
| label_80:
0x000a9b54 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a9b56 ldr r5, [r3] | r5 = *(r3);
| label_30:
0x000a9b58 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a9b5a cmp r3, 1 |
| if (r3 == 1) {
0x000a9b5c beq.w 0xa9fe4 | goto label_81;
| }
0x000a9b60 ldr.w r2, [pc, 0x7dc] | r2 = sym.sqlite3_stmt_isexplain;
0x000a9b64 movs r1, 0x12 | r1 = 0x12;
0x000a9b66 movs r3, 0 | r3 = 0;
0x000a9b68 mov r0, r6 | r0 = r6;
0x000a9b6a str r5, [sp] | *(sp) = r5;
0x000a9b6c add r2, pc | r2 += pc;
0x000a9b6e bl 0x24140 | fcn_00024140 (r0, r1);
0x000a9b72 movs r1, 1 | r1 = 1;
0x000a9b74 cmp r0, 0 |
| if (r0 != 0) {
0x000a9b76 bne.w 0xa99ca | goto label_5;
| }
| label_26:
0x000a9b7a ldr r3, [sp, 0x14] | r3 = x;
0x000a9b7c mov r2, sb | r2 = sb;
0x000a9b7e mov r0, r6 | r0 = r6;
0x000a9b80 ldr r3, [r3] | r3 = *(r3);
0x000a9b82 str r5, [sp] | *(sp) = r5;
0x000a9b84 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000a9b88 cmp r0, 0 |
| if (r0 == 0) {
0x000a9b8a beq 0xa9ab0 | goto label_8;
| }
0x000a9b8c b 0xa99ca | goto label_5;
| label_73:
0x000a9b8e ldrb.w r2, [r8, 0xb1] | r2 = *((r8 + 0xb1));
0x000a9b92 cmp r2, 0 |
| if (r2 != 0) {
0x000a9b94 bne.w 0xaa01a | goto label_82;
| }
0x000a9b98 mov r1, sb | r1 = sb;
0x000a9b9a mov r0, r8 | r0 = r8;
0x000a9b9c bl 0x3e27c | r0 = fcn_0003e27c (r0, r1, r2, r3);
0x000a9ba0 cmp r0, 0 |
| if (r0 != 0) {
0x000a9ba2 bne.w 0xaa108 | goto label_83;
| }
0x000a9ba6 ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a9ba8 mov r1, sb | r1 = sb;
0x000a9baa mov r0, r8 | r0 = r8;
0x000a9bac ldr r2, [r3] | r2 = *(r3);
0x000a9bae bl 0x1cadc | fcn_0001cadc (r0, r1, r2, r3);
0x000a9bb0 vmlal.u16 q1, d5, d0 | __asm ("vmlal.u16 q1, d5, d0");
| if (r0 == 0) {
0x000a9bb4 beq 0xa9b4c | goto label_9;
| }
| label_29:
0x000a9bb6 ldr r3, [sp, 0x114] | r3 = *(arg_114h);
0x000a9bb8 cmp r3, 0 |
| if (r3 == 0) {
0x000a9bba beq.w 0xaa2a0 | goto label_84;
| }
0x000a9bbe ldr r0, [r6, 0x74] | r0 = *((r6 + 0x74));
0x000a9bc0 movs r2, 1 | r2 = 1;
0x000a9bc2 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000a9bc4 cmp r0, 0 |
0x000a9bc6 it eq |
| if (r0 != 0) {
0x000a9bc8 moveq r0, r6 | r0 = r6;
| }
0x000a9bca ldr r3, [r0, 0x54] | r3 = *((r0 + 0x54));
0x000a9bcc lsls r2, r1 | r2 <<= r1;
0x000a9bce tst r3, r2 |
| if ((r3 & r2) == 0) {
0x000a9bd0 bne 0xa9bde |
0x000a9bd2 cmp r1, 1 |
0x000a9bd4 orr.w r3, r3, r2 | r3 |= r2;
0x000a9bd8 str r3, [r0, 0x54] | *((r0 + 0x54)) = r3;
| if (r1 == 1) {
0x000a9bda beq.w 0xaa4bc | goto label_85;
| }
| }
| label_51:
0x000a9bde mov r0, r6 | r0 = r6;
0x000a9be0 bl 0x2f3d8 | fcn_0002f3d8 (r0, r1);
0x000a9be4 b 0xa99ca | goto label_5;
| label_70:
0x000a9be6 ldr.w r1, [pc, 0x75c] |
0x000a9bea mov r0, r6 | r0 = r6;
0x000a9bec add r1, pc | r1 = 0x153f36;
0x000a9bee bl 0x21598 | fcn_00021598 (r0, r1);
| label_79:
0x000a9bf2 mov.w sb, 0 | sb = 0;
0x000a9bf6 b 0xa99ca | goto label_5;
| label_77:
0x000a9bf8 mov r2, r6 | r2 = r6;
0x000a9bfa mov r3, r7 | r3 = r7;
0x000a9bfc ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x000a9bfe ldr r7, [sp, 0x34] | r7 = var_34h;
| label_76:
0x000a9c00 mov r0, sb | r0 = sb;
0x000a9c02 str r3, [sp, 0x34] | var_34h = r3;
0x000a9c04 str r2, [sp, 0x2c] | var_2ch = r2;
0x000a9c06 blx 0x85b4 | fcn_000085b4 ();
0x000a9c0a ldrd r1, r2, [sp, 0x28] | __asm ("ldrd r1, r2, [var_28h]");
0x000a9c0e bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x000a9c12 mov r4, r3 | r4 = r3;
0x000a9c14 ldr r3, [sp, 0x34] | r3 = var_34h;
0x000a9c16 cmp r1, 0 |
| if (r1 == 0) {
0x000a9c18 beq.w 0xa9fc8 | goto label_86;
| }
0x000a9c1c ldrh r1, [r1, 0x32] | r1 = *((r1 + 0x32));
| label_24:
0x000a9c1e add r1, r3 | r1 += r3;
0x000a9c20 add r2, r4 | r2 += r4;
0x000a9c22 add r3, sp, 0x44 | r3 += var_44h;
0x000a9c24 sxth r1, r1 | __asm ("sxth r1, r1");
0x000a9c26 adds r2, 1 | r2++;
0x000a9c28 mov r0, r8 | r0 = r8;
0x000a9c2a bl 0x2310c | fcn_0002310c (r0, r1, r2, r3);
0x000a9c2e ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x000a9c32 mov r5, r0 | r5 = r0;
| if (r3 == 0) {
0x000a9c34 cbz r3, 0xa9c86 | goto label_87;
| }
0x000a9c36 cmp r0, 0 |
| if (r0 == 0) {
0x000a9c38 beq.w 0xa99ca | goto label_5;
| }
| label_18:
0x000a9c3c mov r1, r5 | r1 = r5;
0x000a9c3e mov r0, r8 | r0 = r8;
0x000a9c40 bl 0x1a8e4 | fcn_0001a8e4 (r0, r1);
0x000a9c44 b 0xa99ca | goto label_5;
| label_63:
0x000a9c46 mov r1, fp | r1 = fp;
0x000a9c48 mov r0, r6 | r0 = r6;
0x000a9c4a bl 0x8a9ec | fcn_0008a9ec (r0, r1);
0x000a9c4e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000a9c50 cmp r0, 0 |
0x000a9c52 clz r3, r3 | r3 &= r3;
0x000a9c56 lsr.w r3, r3, 5 | r3 >>= 5;
0x000a9c5a it eq |
| if (r0 != 0) {
0x000a9c5c moveq r3, 0 | r3 = 0;
| }
0x000a9c5e cmp r3, 0 |
| if (r3 != 0) {
0x000a9c60 bne.w 0xa9fb0 | goto label_88;
| }
| label_22:
0x000a9c64 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000a9c66 b 0xa98d8 | goto label_10;
| label_64:
0x000a9c68 ldr r3, [sp, 0x14] | r3 = x;
0x000a9c6a ldr r2, [r1, 0x1c] | r2 = *((r1 + 0x1c));
0x000a9c6c ldr r3, [r3, 0x3c] | r3 = *((r3 + 0x3c));
0x000a9c6e cmp r2, r3 |
| if (r2 == r3) {
0x000a9c70 beq.w 0xa9970 | goto label_11;
| }
0x000a9c74 ldr.w r1, [pc, 0x6d0] | r1 = *(0x000aa348);
0x000a9c78 mov r2, r0 | r2 = r0;
0x000a9c7a mov r0, r6 | r0 = r6;
0x000a9c7c mov sb, r5 | sb = r5;
0x000a9c7e add r1, pc | r1 += pc;
0x000a9c80 bl 0x21598 | fcn_00021598 (r0, r1);
0x000a9c84 b 0xa99ca | goto label_5;
| label_87:
0x000a9c86 ldr r0, [sp, 0x44] | r0 = var_44h;
0x000a9c88 mov r2, r4 | r2 = r4;
0x000a9c8a adds r2, 1 | r2++;
0x000a9c8c str r3, [sp, 0x2c] | var_2ch = r3;
0x000a9c8e adds r1, r0, r2 | r1 = r0 + r2;
0x000a9c90 str r0, [r5] | *(r5) = r0;
0x000a9c92 str r1, [sp, 0x44] | var_44h = r1;
0x000a9c94 mov r1, sb | r1 = sb;
0x000a9c96 blx 0x8610 | fcn_00008610 ();
0x000a9c9a ldr r3, [sp, 0x104] | r3 = *(arg_104h);
0x000a9c9c ldrb.w r1, [r5, 0x37] | r1 = *((r5 + 0x37));
0x000a9ca0 ldr r0, [sp, 0x14] | r0 = x;
0x000a9ca2 strb.w r3, [r5, 0x36] | *((r5 + 0x36)) = r3;
0x000a9ca6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000a9ca8 bic r1, r1, 0xb | r1 = BIT_MASK (r1, 0xb);
0x000a9cac ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x000a9cb0 str r0, [r5, 0xc] | *((r5 + 0xc)) = r0;
0x000a9cb2 add r2, r3 | r2 += r3;
0x000a9cb4 ldr r3, [sp, 0x104] | r3 = *(arg_104h);
0x000a9cb6 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x000a9cb8 str r2, [r5, 0x18] | *((r5 + 0x18)) = r2;
0x000a9cba subs r2, r3, 0 | r2 = r3 - 0;
0x000a9cbc ldr r3, [sp, 0x10] | r3 = var_10h;
0x000a9cbe it ne |
| if (r2 == r3) {
0x000a9cc0 movne r2, 1 | r2 = 1;
| }
0x000a9cc2 orr.w r2, r3, r2, lsl 3 | r2 = r3 | (r2 << 3);
0x000a9cc6 and r2, r2, 0xb | r2 &= 0xb;
0x000a9cca orrs r2, r1 | r2 |= r1;
0x000a9ccc strb.w r2, [r5, 0x37] | *((r5 + 0x37)) = r2;
0x000a9cd0 ldrh.w r2, [sl] | r2 = *(sl);
0x000a9cd4 strh r2, [r5, 0x32] | *((r5 + 0x32)) = r2;
| if (r7 != 0) {
0x000a9cd6 cbz r7, 0xa9cec |
0x000a9cd8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000a9cda movs r2, 2 | r2 = 2;
0x000a9cdc mov r1, r0 | r1 = r0;
0x000a9cde mov r0, r6 | r0 = r6;
0x000a9ce0 str r3, [sp] | *(sp) = r3;
0x000a9ce2 mov r3, r7 | r3 = r7;
0x000a9ce4 bl 0x3139c | fcn_0003139c (r0, r1, r2, r3);
0x000a9ce8 ldrh r2, [r5, 0x32] | r2 = *((r5 + 0x32));
0x000a9cea str r7, [r5, 0x24] | *((r5 + 0x24)) = r7;
| }
0x000a9cec ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a9cee ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000a9cf0 ldrb.w r3, [r3, 0x4c] | r3 = *((r3 + 0x4c));
0x000a9cf4 cmp r3, 3 |
0x000a9cf6 mov.w r3, -1 | r3 = -1;
0x000a9cfa it ls |
| if (r3 > 3) {
0x000a9cfc movls r3, 0 | r3 = 0;
| }
0x000a9cfe mov r1, r3 | r1 = r3;
0x000a9d00 ldrb.w r3, [r6, 0xd0] | r3 = *((r6 + 0xd0));
0x000a9d04 cmp r3, 1 |
0x000a9d06 it ls |
| if (r3 > 1) {
0x000a9d08 strls sl, [sp, 0x2c] | var_2ch = sl;
| }
| if (r3 >= 1) {
0x000a9d0c bls 0xa9d16 |
0x000a9d0e movs r3, 0 | r3 = 0;
0x000a9d10 str.w sl, [r5, 0x28] | __asm ("str.w sl, [r5, 0x28]");
0x000a9d14 str r3, [sp, 0x2c] | var_2ch = r3;
| }
0x000a9d16 cmp r2, 0 |
| if (r2 == 0) {
0x000a9d18 beq.w 0xaa4b8 | goto label_89;
| }
0x000a9d1c ldr.w r3, [pc, 0x62c] |
0x000a9d20 add.w r7, sl, 0x18 | r7 = sl + 0x18;
0x000a9d24 ldr r4, [sp, 0x14] | r4 = x;
0x000a9d26 mov.w sl, 0 | sl = 0;
0x000a9d2a str.w sb, [sp, 0x38] | __asm ("str.w sb, [var_38h]");
0x000a9d2e mov sb, r1 | sb = r1;
0x000a9d30 add r3, pc |
0x000a9d32 str.w fp, [sp, 0x3c] | __asm ("str.w fp, [var_3ch]");
0x000a9d36 add.w r3, r3, 0x2dc | r3 = 0x15435c;
0x000a9d3a str r3, [sp, 0x34] | var_34h = r3;
| label_12:
0x000a9d3c ldr r3, [r7, -0x10] | r3 = *((r7 - 0x10));
0x000a9d40 ldrb r2, [r3] | r2 = *(r3);
0x000a9d42 cmp r2, 0x75 |
0x000a9d44 itt eq |
| if (r2 != 0x75) {
0x000a9d46 moveq r2, 0x3b | r2 = 0x3b;
| }
| if (r2 != 0x75) {
0x000a9d48 strbeq r2, [r3] | *(r3) = r2;
| }
| if (r2 != 0x75) {
0x000a9d4a beq 0xa9d5c |
0x000a9d4c cmp r2, 0x71 |
| if (r2 != 0x71) {
0x000a9d4e bne 0xa9d5c | goto label_90;
| }
0x000a9d50 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000a9d52 ldrb r1, [r2] | r1 = *(r2);
0x000a9d54 cmp r1, 0x75 |
0x000a9d56 itt eq |
| if (r1 != 0x75) {
0x000a9d58 moveq r1, 0x3b | r1 = 0x3b;
| }
| if (r1 == 0x75) {
0x000a9d5a strbeq r1, [r2] | *(r2) = r1;
| goto label_90;
| }
| }
| label_90:
0x000a9d5c movs r2, 0 | r2 = 0;
0x000a9d5e mov r1, r4 | r1 = r4;
0x000a9d60 str r2, [sp] | *(sp) = r2;
0x000a9d62 mov r0, r6 | r0 = r6;
0x000a9d64 movs r2, 0x20 | r2 = 0x20;
0x000a9d66 bl 0x3139c | fcn_0003139c (r0, r1, r2, r3);
0x000a9d6a ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x000a9d6c cmp r3, 0 |
| if (r3 != 0) {
0x000a9d6e bne.w 0xa9f0e | goto label_91;
| }
0x000a9d72 ldr r3, [r7, -0x10] | r3 = *((r7 - 0x10));
0x000a9d76 cmp r3, 0 |
| if (r3 == 0) {
0x000a9d78 beq.w 0xaa582 | goto label_92;
| }
0x000a9d7c mov r2, r3 | r2 = r3;
0x000a9d7e b 0xa9d88 |
| while (r1 != r1) {
0x000a9d80 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x000a9d82 cmp r2, 0 |
| if (r2 == 0) {
0x000a9d84 beq.w 0xaa582 | goto label_92;
| }
0x000a9d88 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000a9d8a ands r1, r1, 0x2000 | r1 &= 0x2000;
0x000a9d8e bne 0xa9d80 |
| }
0x000a9d90 ldrb r0, [r2] | r0 = *(r2);
0x000a9d92 cmp r0, 0xa7 |
| if (r0 == 0xa7) {
0x000a9d94 beq 0xa9e58 | goto label_93;
| }
0x000a9d96 ldr.w r2, [r6, 0xec] | r2 = *((r6 + 0xec));
0x000a9d9a cmp r2, r4 |
| if (r2 == r4) {
0x000a9d9c beq.w 0xaa0ee | goto label_94;
| }
0x000a9da0 ldr r2, [r5, 0x28] | r2 = *((r5 + 0x28));
0x000a9da2 cmp r2, 0 |
| if (r2 == 0) {
0x000a9da4 beq.w 0xa9f1a | goto label_95;
| }
| label_19:
0x000a9da8 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000a9daa movw r1, 0xfffe | r1 = 0xfffe;
0x000a9dae strh.w r1, [r2, sl, lsl 1] | offset_0 = sl << 1;
| *((r2 + offset_0)) = r1;
0x000a9db2 ldrb.w r2, [r5, 0x37] | r2 = *((r5 + 0x37));
0x000a9db6 bfc r2, 3, 1 | value_1 = BIT_MASK (1, );
| value_1 = ~value_1;
| r2 &= value_1;
0x000a9dba strb.w r2, [r5, 0x37] | *((r5 + 0x37)) = r2;
0x000a9dbe ldrb r2, [r3] | r2 = *(r3);
0x000a9dc0 cmp r2, 0x71 |
| if (r2 == 0x71) {
0x000a9dc2 beq.w 0xa9ed2 | goto label_20;
| }
0x000a9dc6 ldr.w fp, [sp, 0x34] | fp = var_34h;
| label_14:
0x000a9dca ldrb.w r3, [r8, 0xb1] | r3 = *((r8 + 0xb1));
0x000a9dce cmp r3, 0 |
| if (r3 == 0) {
0x000a9dd0 beq.w 0xa9f00 | goto label_96;
| }
| label_17:
0x000a9dd4 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000a9dd6 adds r7, 0x10 | r7 += 0x10;
0x000a9dd8 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000a9dda str.w fp, [r3, sl, lsl 2] | __asm ("str.w fp, [r3, sl, lsl 2]");
0x000a9dde ldrb r3, [r7, -0x18] | r3 = *((r7 - 0x18));
0x000a9de2 and.w r3, r3, sb | r3 &= sb;
0x000a9de6 strb.w r3, [r2, sl] | *((r2 + sl)) = r3;
0x000a9dea add.w sl, sl, 1 | sl++;
0x000a9dee ldrh r3, [r5, 0x32] | r3 = *((r5 + 0x32));
0x000a9df0 cmp r3, sl |
| if (r3 > sl) {
0x000a9df2 bgt 0xa9d3c | goto label_12;
| }
0x000a9df4 ldrd sb, fp, [sp, 0x38] | __asm ("ldrd sb, fp, [var_38h]");
| label_50:
0x000a9df8 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000a9dfa cmp r2, 0 |
| if (r2 == 0) {
0x000a9dfc beq.w 0xaa2b0 | goto label_97;
| }
0x000a9e00 ldrh r3, [r2, 0x32] | r3 = *((r2 + 0x32));
0x000a9e02 cmp r3, 0 |
| if (r3 == 0) {
0x000a9e04 beq.w 0xaa032 | goto label_44;
| }
0x000a9e08 str r6, [sp, 0x24] | var_24h = r6;
0x000a9e0a movs r7, 0 | r7 = 0;
0x000a9e0c mov r6, r2 | r6 = r2;
0x000a9e0e b 0xa9e20 |
| while (r0 != 0) {
0x000a9e10 ldrh r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x000a9e12 subs r3, 1 | r3--;
0x000a9e14 strh r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
| label_13:
0x000a9e16 ldrh r3, [r6, 0x32] | r3 = *((r6 + 0x32));
0x000a9e18 adds r7, 1 | r7++;
0x000a9e1a cmp r3, r7 |
| if (r3 <= r7) {
0x000a9e1c ble.w 0xaa030 | goto label_98;
| }
0x000a9e20 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000a9e22 mov r2, r6 | r2 = r6;
0x000a9e24 ldrh r1, [r5, 0x32] | r1 = *((r5 + 0x32));
0x000a9e26 mov r0, r5 | r0 = r5;
0x000a9e28 ldrsh.w r4, [r3, r7, lsl 1] | offset_2 = r7 << 1;
| r4 = *((r3 + offset_2));
0x000a9e2c mov r3, r7 | r3 = r7;
0x000a9e2e bl 0x18ec0 | r0 = fcn_00018ec0 (r0, r1, r2, r3, r4);
0x000a9e32 cmp r0, 0 |
0x000a9e34 bne 0xa9e10 |
| }
0x000a9e36 ldr r3, [r6, 0x20] | r3 = *((r6 + 0x20));
0x000a9e38 ldr.w r1, [r3, r7, lsl 2] | offset_3 = r7 << 2;
| r1 = *((r3 + offset_3));
0x000a9e3c ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000a9e3e strh.w r4, [r3, sl, lsl 1] | offset_4 = sl << 1;
| *((r3 + offset_4)) = r4;
0x000a9e42 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000a9e44 str.w r1, [r3, sl, lsl 2] | __asm ("str.w r1, [r3, sl, lsl 2]");
0x000a9e48 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x000a9e4a ldrb r1, [r3, r7] | r1 = *((r3 + r7));
0x000a9e4c ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000a9e4e strb.w r1, [r3, sl] | *((r3 + sl)) = r1;
0x000a9e52 add.w sl, sl, 1 | sl++;
0x000a9e56 b 0xa9e16 | goto label_13;
| label_93:
0x000a9e58 ldrsh.w r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x000a9e5c lsl.w lr, sl, 1 | lr = sl << 1;
0x000a9e60 ldr.w ip, [r5, 4] | ip = *((r5 + 4));
0x000a9e64 cmp r1, 0 |
| if (r1 < 0) {
0x000a9e66 blt 0xa9f22 | goto label_99;
| }
0x000a9e68 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000a9e6a add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x000a9e6e add.w r2, r0, r2, lsl 2 | r2 = r0 + (r2 << 2);
0x000a9e72 ldrb r0, [r2, 4] | r0 = *((r2 + 4));
0x000a9e74 ands r0, r0, 0xf | r0 &= 0xf;
0x000a9e78 ittt eq |
| if (r0 != r0) {
0x000a9e7a ldrbeq fp, [r5, 0x37] | fp = *((r5 + 0x37));
| }
| if (r0 == r0) {
0x000a9e7e bfieq fp, r0, 3, 1 | __asm ("bfieq fp, r0, 3, 1");
| }
| if (r0 == r0) {
0x000a9e82 strb.w fp, [r5, 0x37] | *((r5 + 0x37)) = fp;
| }
0x000a9e86 ldrh r0, [r2, 0xa] | r0 = *((r2 + 0xa));
0x000a9e88 lsls r0, r0, 0x1a | r0 <<= 0x1a;
| if (r0 < r0) {
0x000a9e8a bpl 0xa9e98 |
0x000a9e8c ldrb.w r0, [r5, 0x38] | r0 = *((r5 + 0x38));
0x000a9e90 orr r0, r0, 4 | r0 |= 4;
0x000a9e94 strb.w r0, [r5, 0x38] | *((r5 + 0x38)) = r0;
| }
0x000a9e98 strh.w r1, [ip, lr] | *((ip + lr)) = r1;
0x000a9e9c ldrb r1, [r3] | r1 = *(r3);
0x000a9e9e cmp r1, 0x71 |
| if (r1 == 0x71) {
0x000a9ea0 beq 0xa9ed2 | goto label_20;
| }
| label_28:
0x000a9ea2 ldrh r1, [r2, 0xa] | r1 = *((r2 + 0xa));
0x000a9ea4 ldr r3, [r2] | r3 = *(r2);
0x000a9ea6 lsls r0, r1, 0x16 | r0 = r1 << 0x16;
| if (r0 >= r1) {
0x000a9ea8 bpl 0xa9f34 | goto label_100;
| }
0x000a9eaa ldrb r2, [r3] | r2 = *(r3);
| if (r2 == 0) {
0x000a9eac cbz r2, 0xa9eb6 | goto label_101;
| }
| do {
0x000a9eae ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000a9eb2 cmp r2, 0 |
0x000a9eb4 bne 0xa9eae |
| } while (r2 != 0);
| label_101:
0x000a9eb6 lsls r2, r1, 0x1d | r2 = r1 << 0x1d;
0x000a9eb8 bmi 0xa9ec0 |
| while (r2 == 0) {
| label_16:
0x000a9eba add.w fp, r3, 1 |
0x000a9ebe b 0xa9dca | goto label_14;
| label_15:
0x000a9ec0 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000a9ec4 cmp r2, 0 |
0x000a9ec6 beq 0xa9eba |
| }
0x000a9ec8 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000a9ecc cmp r2, 0 |
| if (r2 != 0) {
0x000a9ece bne 0xa9ec0 | goto label_15;
| }
0x000a9ed0 b 0xa9eba | goto label_16;
| label_20:
0x000a9ed2 ldr.w fp, [r3, 8] | fp = *((r3 + 8));
0x000a9ed6 movs r2, 1 | r2 = 1;
0x000a9ed8 cmp.w fp, 0 |
| if (fp != 0) {
0x000a9edc beq 0xa9eea |
0x000a9ede mov r0, fp | r0 = fp;
0x000a9ee0 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000a9ee4 bic r2, r0, 0xc0000000 | r2 = BIT_MASK (r0, 0xc0000000);
0x000a9ee8 adds r2, 1 | r2++;
| }
0x000a9eea mov r1, fp | r1 = fp;
0x000a9eec ldr.w fp, [sp, 0x44] | fp = var_44h;
0x000a9ef0 str r2, [sp, 0x24] | var_24h = r2;
0x000a9ef2 mov r0, fp | r0 = fp;
0x000a9ef4 blx 0x8610 | fcn_00008610 ();
0x000a9ef8 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000a9efa add r2, fp | r2 += fp;
0x000a9efc str r2, [sp, 0x44] | var_44h = r2;
0x000a9efe b 0xa9dca | goto label_14;
| label_96:
0x000a9f00 mov r1, fp | r1 = fp;
0x000a9f02 mov r0, r6 | r0 = r6;
0x000a9f04 bl 0x2be8c | r0 = fcn_0002be8c (r0, r1);
0x000a9f08 cmp r0, 0 |
| if (r0 != 0) {
0x000a9f0a bne.w 0xa9dd4 | goto label_17;
| }
| label_91:
0x000a9f0e ldrd sb, fp, [sp, 0x38] | __asm ("ldrd sb, fp, [var_38h]");
| label_36:
0x000a9f12 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x000a9f16 movs r7, 0 | r7 = 0;
0x000a9f18 b 0xa9c3c | goto label_18;
| label_95:
0x000a9f1a ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000a9f1c str r2, [sp, 0x2c] | var_2ch = r2;
0x000a9f1e str r1, [r5, 0x28] | *((r5 + 0x28)) = r1;
0x000a9f20 b 0xa9da8 | goto label_19;
| label_99:
0x000a9f22 ldrsh.w r2, [r4, 0x20] | r2 = *((r4 + 0x20));
0x000a9f26 strh.w r2, [ip, sl, lsl 1] | offset_5 = sl << 1;
| *((ip + offset_5)) = r2;
0x000a9f2a ldrb r1, [r3] | r1 = *(r3);
0x000a9f2c cmp r1, 0x71 |
| if (r1 == 0x71) {
0x000a9f2e beq 0xa9ed2 | goto label_20;
| }
0x000a9f30 cmp r2, 0 |
| if (r2 >= 0) {
0x000a9f32 bge 0xaa00e | goto label_102;
| }
| label_100:
0x000a9f34 ldr.w r3, [pc, 0x418] |
0x000a9f38 add r3, pc | r3 = 0x15428c;
0x000a9f3a add.w fp, r3, 0x2dc |
0x000a9f3e b 0xa9dca | goto label_14;
| label_71:
0x000a9f40 ldr.w r1, [pc, 0x410] | r1 = *(0x000aa354);
0x000a9f44 mov r0, r6 | r0 = r6;
0x000a9f46 mov.w sb, 0 | sb = 0;
0x000a9f4a add r1, pc | r1 += pc;
0x000a9f4c bl 0x21598 | fcn_00021598 (r0, r1);
0x000a9f50 b 0xa99ca | goto label_5;
| label_74:
0x000a9f52 ldr r0, [sp, 0x14] | r0 = x;
0x000a9f54 movs r1, 0xc | r1 = 0xc;
0x000a9f56 mvn r2, 0xb | r2 = ~0xb;
0x000a9f5a ldrh r3, [r0, 0x22] | r3 = *((r0 + 0x22));
0x000a9f5c smlabb r3, r3, r1, r2 | __asm ("smlabb r3, r3, r1, r2");
0x000a9f60 ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x000a9f62 adds r2, r1, r3 | r2 = r1 + r3;
0x000a9f64 ldr r0, [r1, r3] | r0 = *((r1 + r3));
0x000a9f66 ldrh r3, [r2, 0xa] | r3 = *((r2 + 0xa));
0x000a9f68 str r0, [sp, 0x48] | var_48h = r0;
0x000a9f6a orr r3, r3, 8 | r3 |= 8;
0x000a9f6e strh r3, [r2, 0xa] | *((r2 + 0xa)) = r3;
0x000a9f70 cmp r0, 0 |
| if (r0 == 0) {
0x000a9f72 beq.w 0xaa104 | goto label_103;
| }
0x000a9f76 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000a9f7a bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| label_34:
0x000a9f7e movs r3, 0 | r3 = 0;
0x000a9f80 add r2, sp, 0x48 | r2 += var_48h;
0x000a9f82 movs r1, 0x3b | r1 = 0x3b;
0x000a9f84 str r0, [sp, 0x4c] | var_4ch = r0;
0x000a9f86 mov r0, r8 | r0 = r8;
0x000a9f88 bl 0x21bd8 | r0 = fcn_00021bd8 (r0, r1, r2, r3);
0x000a9f8c mov r1, r0 | r1 = r0;
0x000a9f8e ldr r0, [r6] | r0 = *(r6);
0x000a9f90 bl 0x21b94 | r0 = fcn_00021b94 (r0, r1);
0x000a9f94 mov sl, r0 | sl = r0;
0x000a9f96 cmp r0, 0 |
| if (r0 == 0) {
0x000a9f98 beq.w 0xa99ca | goto label_5;
| }
0x000a9f9c ldr r3, [sp, 0x110] | r3 = *(arg_110h);
0x000a9f9e adds r4, r3, 1 | r4 = r3 + 1;
0x000a9fa0 it eq |
| if (r4 != r3) {
0x000a9fa2 moveq r3, 0 | r3 = 0;
| }
0x000a9fa4 str r3, [sp, 0x110] | *(arg_110h) = r3;
0x000a9fa6 ldr r3, [r0] | r3 = *(r0);
0x000a9fa8 ldr r1, [sp, 0x110] | r1 = *(arg_110h);
0x000a9faa lsls r2, r3, 4 | r2 = r3 << 4;
0x000a9fac strb r1, [r0, r2] | *((r0 + r2)) = r1;
0x000a9fae b 0xa9ad4 | goto label_21;
| label_88:
0x000a9fb0 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000a9fb4 ldr r2, [r0, 0x3c] | r2 = *((r0 + 0x3c));
0x000a9fb6 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000a9fb8 cmp r2, r3 |
| if (r2 != r3) {
0x000a9fba bne.w 0xa9c64 | goto label_22;
| }
0x000a9fbe movs r5, 1 | r5 = 1;
0x000a9fc0 movs r3, 0x10 | r3 = 0x10;
0x000a9fc2 strd r5, r3, [sp, 0x1c] | __asm ("strd r5, r3, [var_1ch]");
0x000a9fc6 b 0xa98e6 | goto label_23;
| label_86:
0x000a9fc8 movs r1, 1 | r1 = 1;
0x000a9fca b 0xa9c1e | goto label_24;
| label_69:
0x000a9fcc strd fp, fp, [sp, 0x1c] | __asm ("strd fp, fp, [var_1ch]");
| label_54:
0x000a9fd0 ldr r3, [sp, 0x14] | r3 = x;
0x000a9fd2 movs r2, 7 | r2 = 7;
0x000a9fd4 ldr r1, [pc, 0x380] |
0x000a9fd6 ldr r0, [r3] | r0 = *(r3);
0x000a9fd8 add r1, pc | r1 = 0x154334;
0x000a9fda blx 0x8154 | fcn_00008154 ();
0x000a9fde movs r3, 0 | r3 = 0;
0x000a9fe0 str r3, [sp, 0x28] | var_28h = r3;
0x000a9fe2 b 0xa9a6a | goto label_25;
| label_81:
0x000a9fe4 ldr r2, [pc, 0x374] |
0x000a9fe6 movs r1, 0x12 | r1 = 0x12;
0x000a9fe8 movs r3, 0 | r3 = 0;
0x000a9fea mov r0, r6 | r0 = r6;
0x000a9fec str r5, [sp] | *(sp) = r5;
0x000a9fee add r2, pc | r2 = 0x15434e;
0x000a9ff0 bl 0x24140 | fcn_00024140 (r0, r1);
0x000a9ff4 movs r1, 3 | r1 = 3;
0x000a9ff6 cmp r0, 0 |
| if (r0 == 0) {
0x000a9ff8 beq.w 0xa9b7a | goto label_26;
| }
0x000a9ffc b 0xa99ca | goto label_5;
| label_75:
0x000a9ffe ldr r2, [pc, 0x360] |
0x000aa000 mov r0, r6 | r0 = r6;
0x000aa002 ldr r1, [pc, 0x360] |
0x000aa004 add r2, pc | r2 = 0x15436a;
0x000aa006 add r1, pc | r1 = 0x154370;
0x000aa008 bl 0x21598 | fcn_00021598 (r0, r1);
0x000aa00c b 0xa9ac8 | goto label_27;
| label_102:
0x000aa00e ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000aa010 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x000aa014 add.w r2, r3, r2, lsl 2 | r2 = r3 + (r2 << 2);
0x000aa018 b 0xa9ea2 | goto label_28;
| label_82:
0x000aa01a ldr r3, [sp, 0x24] | r3 = var_24h;
0x000aa01c mov r1, sb | r1 = sb;
0x000aa01e mov r0, r8 | r0 = r8;
0x000aa020 ldr r5, [r3] | r5 = *(r3);
0x000aa022 mov r2, r5 | r2 = r5;
0x000aa024 bl 0x1cadc | r0 = fcn_0001cadc (r0, r1, r2, r3);
0x000aa028 cmp r0, 0 |
| if (r0 != 0) {
0x000aa02a bne.w 0xa9bb6 | goto label_29;
| }
0x000aa02e b 0xa9b58 | goto label_30;
| label_98:
0x000aa030 ldr r6, [sp, 0x24] | r6 = var_24h;
| label_44:
0x000aa032 mov r0, r5 | r0 = r5;
0x000aa034 bl 0xdb0c | fcn_0000db0c (r0);
0x000aa038 ldr.w r7, [r6, 0xec] | r7 = *((r6 + 0xec));
0x000aa03c mov r0, r5 | r0 = r5;
0x000aa03e cmp r7, 0 |
| if (r7 == 0) {
0x000aa040 beq.w 0xaa2ca | goto label_104;
| }
0x000aa044 bl 0xab14 | fcn_0000ab14 (r0);
0x000aa048 cmp.w fp, 0 |
| if (fp == 0) {
0x000aa04c beq 0xaa0b8 | goto label_43;
| }
0x000aa04e ldr r3, [sp, 0x14] | r3 = x;
0x000aa050 ldrh.w lr, [r5, 0x34] |
0x000aa054 ldrsh.w sl, [r3, 0x22] | sl = *((r3 + 0x22));
0x000aa058 cmp lr, sl |
| if (lr < sl) {
0x000aa05a blt 0xaa0b8 | goto label_43;
| }
0x000aa05c ldrb.w r3, [r5, 0x37] | r3 = *((r5 + 0x37));
0x000aa060 cmp.w sl, 0 |
0x000aa064 orr r3, r3, 0x20 | r3 |= 0x20;
0x000aa068 strb.w r3, [r5, 0x37] | *((r5 + 0x37)) = r3;
| if (sl <= 0) {
0x000aa06c ble 0xaa0b8 | goto label_43;
| }
| label_45:
0x000aa06e ldr r3, [sp, 0x14] | r3 = x;
0x000aa070 movs r2, 0 | r2 = 0;
0x000aa072 ldrsh.w r0, [r3, 0x20] | r0 = *((r3 + 0x20));
| label_32:
0x000aa076 cmp r0, r2 |
| if (r0 == r2) {
0x000aa078 beq 0xaa0b2 | goto label_105;
| }
0x000aa07a cmp.w lr, 0 |
| if (lr == 0) {
0x000aa07e beq.w 0xaa292 | goto label_106;
| }
0x000aa082 ldr r4, [r5, 4] | r4 = *((r5 + 4));
| label_31:
0x000aa084 sxth.w ip, r2 | __asm ("sxth.w ip, r2");
0x000aa088 subs r1, r4, 2 | r1 = r4 - 2;
0x000aa08a movs r3, 0 | r3 = 0;
0x000aa08c str r5, [sp, 0x24] | var_24h = r5;
0x000aa08e b 0xaa098 |
| while (r5 != ip) {
0x000aa090 adds r3, 1 | r3++;
0x000aa092 cmp lr, r3 |
| if (lr == r3) {
0x000aa094 beq.w 0xaa290 | goto label_107;
| }
0x000aa098 ldrsh r5, [r1, 2]! | r5 = *((r1 += 2));
0x000aa09c cmp r5, ip |
0x000aa09e bne 0xaa090 |
| }
0x000aa0a0 lsls r3, r3, 0x10 | r3 <<= 0x10;
0x000aa0a2 ldr r5, [sp, 0x24] | r5 = var_24h;
| if (r3 < r3) {
0x000aa0a4 bmi.w 0xaa292 | goto label_106;
| }
0x000aa0a8 adds r2, 1 | r2++;
0x000aa0aa cmp sl, r2 |
| if (sl == r2) {
0x000aa0ac beq 0xaa0b8 | goto label_43;
| }
0x000aa0ae cmp r0, r2 |
| if (r0 != r2) {
0x000aa0b0 bne 0xaa084 | goto label_31;
| }
| label_105:
0x000aa0b2 adds r2, 1 | r2++;
0x000aa0b4 cmp sl, r2 |
| if (sl != r2) {
0x000aa0b6 bne 0xaa076 | goto label_32;
| }
| label_43:
0x000aa0b8 ldr r3, [sp, 0x14] | r3 = x;
0x000aa0ba cmp r7, r3 |
| if (r7 == r3) {
0x000aa0bc beq 0xaa1b2 | goto label_108;
| }
| label_37:
0x000aa0be ldrb.w r3, [r6, 0xd0] | r3 = *((r6 + 0xd0));
0x000aa0c2 ldrb.w r2, [r8, 0xb1] | r2 = *((r8 + 0xb1));
0x000aa0c6 cmp r3, 1 |
| if (r3 >= 1) {
0x000aa0c8 bls 0xaa116 |
| label_46:
0x000aa0ca clz r3, fp | r3 &= fp;
0x000aa0ce lsrs r3, r3, 5 | r3 >>= 5;
0x000aa0d0 cmp r2, 0 |
0x000aa0d2 it ne |
| if (r2 == 0) {
0x000aa0d4 orrne r3, r3, 1 | r3 |= 1;
| }
0x000aa0d8 cmp r3, 0 |
| if (r3 == 0) {
0x000aa0da beq 0xaa198 | goto label_109;
| }
| label_35:
0x000aa0dc ldr r4, [sp, 0x14] | r4 = x;
0x000aa0de movs r7, 0 | r7 = 0;
0x000aa0e0 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x000aa0e4 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000aa0e6 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x000aa0e8 str r5, [r4, 8]! | *((r4 += 8)) = r5;
0x000aa0ec b 0xa99d8 | goto label_33;
| label_94:
0x000aa0ee mov r7, r1 | r7 = r1;
0x000aa0f0 ldr r1, [pc, 0x274] |
0x000aa0f2 mov r0, r6 | r0 = r6;
0x000aa0f4 ldrd sb, fp, [sp, 0x38] | __asm ("ldrd sb, fp, [var_38h]");
0x000aa0f8 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x000aa0fc add r1, pc | r1 = 0x154468;
0x000aa0fe bl 0x21598 | fcn_00021598 (r0, r1);
0x000aa102 b 0xa9c3c | goto label_18;
| label_103:
0x000aa104 mov r0, sl | r0 = sl;
0x000aa106 b 0xa9f7e | goto label_34;
| label_83:
0x000aa108 ldr r1, [pc, 0x260] |
0x000aa10a mov r0, r6 | r0 = r6;
0x000aa10c mov r2, sb | r2 = sb;
0x000aa10e add r1, pc | r1 = 0x15447e;
0x000aa110 bl 0x21598 | fcn_00021598 (r0, r1);
0x000aa114 b 0xa99ca | goto label_5;
| }
0x000aa116 cmp r2, 0 |
| if (r2 == 0) {
0x000aa118 beq.w 0xaa394 | goto label_53;
| }
0x000aa11c cmp.w fp, 0 |
| if (fp == 0) {
0x000aa120 beq 0xaa15a | goto label_52;
| }
| label_47:
0x000aa122 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000aa124 ldr.w r2, [r8, 0xac] | r2 = *((r8 + 0xac));
0x000aa128 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000aa12a str r2, [r5, 0x2c] | *((r5 + 0x2c)) = r2;
| if (r3 == 0) {
0x000aa12c cbz r3, 0xaa15a | goto label_52;
| }
0x000aa12e ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x000aa130 cmp r1, r2 |
| if (r1 != r2) {
0x000aa132 bne 0xaa154 | goto label_110;
| }
0x000aa134 cmp r5, r3 |
| if (r5 == r3) {
0x000aa136 beq 0xaa154 | goto label_110;
| }
0x000aa138 b 0xaa534 | goto label_111;
| do {
0x000aa13a ldr r1, [r3, 0x2c] | r1 = *((r3 + 0x2c));
0x000aa13c cmp r5, r3 |
0x000aa13e sub.w r1, r1, r2 | r1 -= r2;
0x000aa142 clz r1, r1 | r1 &= r1;
0x000aa146 lsr.w r1, r1, 5 | r1 >>= 5;
0x000aa14a it eq |
| if (r5 != r3) {
0x000aa14c moveq r1, 0 | r1 = 0;
| }
0x000aa14e cmp r1, 0 |
| if (r1 != 0) {
0x000aa150 bne.w 0xaa534 | goto label_111;
| }
| label_110:
0x000aa154 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x000aa156 cmp r3, 0 |
0x000aa158 bne 0xaa13a |
| } while (r3 != 0);
| label_52:
0x000aa15a ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x000aa15c mov r2, r5 | r2 = r5;
0x000aa15e ldr r1, [r5] | r1 = *(r5);
0x000aa160 adds r0, 0x18 | r0 += 0x18;
0x000aa162 bl 0x17978 | r0 = fcn_00017978 (r0, r1, r2, r3, r4);
0x000aa166 cmp r0, 0 |
| if (r0 != 0) {
0x000aa168 bne.w 0xaa4f6 | goto label_112;
| }
0x000aa16c ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
0x000aa170 orr r3, r3, 1 | r3 |= 1;
0x000aa174 str.w r3, [r8, 0x18] | __asm ("str.w r3, [r8, 0x18]");
| label_48:
0x000aa178 ldrb.w r2, [r8, 0xb1] | r2 = *((r8 + 0xb1));
0x000aa17c clz r3, fp | r3 &= fp;
0x000aa180 lsrs r3, r3, 5 | r3 >>= 5;
0x000aa182 cmp r2, 0 |
0x000aa184 it ne |
| if (r2 == 0) {
0x000aa186 orrne r3, r3, 1 | r3 |= 1;
| }
0x000aa18a cmp r3, 0 |
| if (r3 != 0) {
0x000aa18c bne 0xaa0dc | goto label_35;
| }
0x000aa18e ldrb.w r3, [r6, 0xd0] | r3 = *((r6 + 0xd0));
0x000aa192 cmp r3, 1 |
| if (r3 < 1) {
0x000aa194 bls.w 0xa9f12 | goto label_36;
| }
| label_109:
0x000aa198 ldr r3, [sp, 0x14] | r3 = x;
0x000aa19a str.w r5, [r6, 0xf0] | __asm ("str.w r5, [r6, 0xf0]");
0x000aa19e ldr r5, [r3, 8] | r5 = *((r3 + 8));
| label_39:
0x000aa1a0 ldr r4, [sp, 0x14] | r4 = x;
0x000aa1a2 adds r4, 8 | r4 += 8;
0x000aa1a4 cmp r5, 0 |
| if (r5 == 0) {
0x000aa1a6 beq.w 0xaa554 | goto label_113;
| }
0x000aa1aa ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x000aa1ae movs r7, 0 | r7 = 0;
0x000aa1b0 b 0xa99d8 | goto label_33;
| label_108:
0x000aa1b2 ldr r7, [r3, 8] | r7 = *((r3 + 8));
0x000aa1b4 cmp r7, 0 |
| if (r7 == 0) {
0x000aa1b6 beq 0xaa0be | goto label_37;
| }
0x000aa1b8 ldrh r3, [r5, 0x32] | r3 = *((r5 + 0x32));
0x000aa1ba ldr r1, [pc, 0x1b4] |
0x000aa1bc str.w sb, [sp, 0x24] | __asm ("str.w sb, [var_24h]");
0x000aa1c0 mov ip, r3 |
0x000aa1c2 add r1, pc | r1 = 0x154538;
0x000aa1c4 b 0xaa1ce |
| while (r3 != ip) {
| label_38:
0x000aa1c6 ldr r7, [r7, 0x14] | r7 = *((r7 + 0x14));
0x000aa1c8 cmp r7, 0 |
| if (r7 == 0) {
0x000aa1ca beq.w 0xaa2fe | goto label_114;
| }
0x000aa1ce ldrh r3, [r7, 0x32] | r3 = *((r7 + 0x32));
0x000aa1d0 cmp r3, ip |
0x000aa1d2 bne 0xaa1c6 |
| }
0x000aa1d4 cmp.w ip, 0 |
| if (ip == 0) {
0x000aa1d8 beq 0xaa226 | goto label_42;
| }
0x000aa1da ldr r4, [r7, 4] | r4 = *((r7 + 4));
0x000aa1dc movs r0, 0 | r0 = 0;
0x000aa1de ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000aa1e0 subs r4, 2 | r4 -= 2;
0x000aa1e2 sub.w lr, r3, 2 | lr = r3 - 2;
| label_41:
0x000aa1e6 ldrsh r2, [r4, 2]! | r2 = *((r4 += 2));
0x000aa1ea ldrsh r3, [lr, 2]! | r3 = *((lr += 2));
0x000aa1ee cmp r2, r3 |
| if (r2 != r3) {
0x000aa1f0 bne 0xaa222 | goto label_115;
| }
0x000aa1f2 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x000aa1f4 ldr.w r3, [r3, r0, lsl 2] | offset_6 = r0 << 2;
| r3 = *((r3 + offset_6));
0x000aa1f8 add.w sb, r3, -1 | sb = r3 + -1;
0x000aa1fc ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000aa1fe ldr.w r3, [r3, r0, lsl 2] | offset_7 = r0 << 2;
| r3 = *((r3 + offset_7));
0x000aa202 add.w sl, r3, -1 | sl = r3 + -1;
| do {
| label_40:
0x000aa206 ldrb r3, [sb, 1]! | r3 = *((sb += 1));
0x000aa20a ldrb r2, [sl, 1]! | r2 = *((sl += 1));
0x000aa20e cmp r3, r2 |
| if (r3 == r2) {
0x000aa210 beq 0xaa284 | goto label_116;
| }
0x000aa212 add r3, r1 | r3 += r1;
0x000aa214 add r2, r1 | r2 += r1;
0x000aa216 ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000aa21a ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000aa21e cmp r3, r2 |
0x000aa220 beq 0xaa206 |
| } while (r3 == r2);
| label_115:
0x000aa222 cmp ip, r0 |
| if (ip != r0) {
0x000aa224 bne 0xaa1c6 | goto label_38;
| }
| label_42:
0x000aa226 ldrb.w r3, [r7, 0x36] | r3 = *((r7 + 0x36));
0x000aa22a ldrb.w r2, [r5, 0x36] | r2 = *((r5 + 0x36));
0x000aa22e ldr.w sb, [sp, 0x24] | sb = var_24h;
0x000aa232 cmp r3, r2 |
| if (r3 != r2) {
0x000aa234 beq 0xaa256 |
0x000aa236 cmp r2, 0xb |
| if (r2 != 0xb) {
0x000aa238 beq 0xaa250 |
0x000aa23a cmp r3, 0xb |
| if (r3 == 0xb) {
0x000aa23c beq.w 0xaa56c | goto label_117;
| }
0x000aa240 ldr r1, [pc, 0x130] |
0x000aa242 movs r2, 0 | r2 = 0;
0x000aa244 mov r0, r6 | r0 = r6;
0x000aa246 add r1, pc | r1 = 0x1545be;
0x000aa248 bl 0x21598 | fcn_00021598 (r0, r1);
0x000aa24c ldrb.w r3, [r7, 0x36] | r3 = *((r7 + 0x36));
| }
0x000aa250 cmp r3, 0xb |
| if (r3 == 0xb) {
0x000aa252 beq.w 0xaa56c | goto label_117;
| }
| }
| label_57:
0x000aa256 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000aa258 cmp r3, 2 |
0x000aa25a itttt eq |
| if (r3 != 2) {
0x000aa25c ldrbeq r3, [r7, 0x37] | r3 = *((r7 + 0x37));
| }
| if (r3 != 2) {
0x000aa260 ldreq r2, [sp, 0x10] | r2 = var_10h;
| }
| if (r3 == 2) {
0x000aa262 bfieq r3, r2, 0, 2 | __asm ("bfieq r3, r2, 0, 2");
| }
| if (r3 == 2) {
0x000aa266 strb.w r3, [r7, 0x37] | *((r7 + 0x37)) = r3;
| }
0x000aa26a ldrb.w r3, [r6, 0xd0] | r3 = *((r6 + 0xd0));
0x000aa26e cmp r3, 1 |
| if (r3 < 1) {
0x000aa270 bls.w 0xa9f12 | goto label_36;
| }
0x000aa274 ldr.w r3, [r6, 0xf0] | r3 = *((r6 + 0xf0));
0x000aa278 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x000aa27a ldr r3, [sp, 0x14] | r3 = x;
0x000aa27c str.w r5, [r6, 0xf0] | __asm ("str.w r5, [r6, 0xf0]");
0x000aa280 ldr r5, [r3, 8] | r5 = *((r3 + 8));
0x000aa282 b 0xaa1a0 | goto label_39;
| label_116:
0x000aa284 cmp r3, 0 |
| if (r3 != 0) {
0x000aa286 bne 0xaa206 | goto label_40;
| }
0x000aa288 adds r0, 1 | r0++;
0x000aa28a cmp r0, ip |
| if (r0 != ip) {
0x000aa28c bne 0xaa1e6 | goto label_41;
| }
0x000aa28e b 0xaa226 | goto label_42;
| label_107:
0x000aa290 ldr r5, [sp, 0x24] | r5 = var_24h;
| label_106:
0x000aa292 ldrb.w r3, [r5, 0x37] | r3 = *((r5 + 0x37));
0x000aa296 bfc r3, 5, 1 | value_8 = BIT_MASK (1, );
| value_8 = ~value_8;
| r3 &= value_8;
0x000aa29a strb.w r3, [r5, 0x37] | *((r5 + 0x37)) = r3;
0x000aa29e b 0xaa0b8 | goto label_43;
| label_84:
0x000aa2a0 ldr r1, [pc, 0xd4] |
0x000aa2a2 mov r0, r6 | r0 = r6;
0x000aa2a4 mov r2, sb | r2 = sb;
0x000aa2a6 add r1, pc | r1 = 0x154622;
0x000aa2a8 bl 0x21598 | fcn_00021598 (r0, r1);
0x000aa2ac b.w 0xa99ca | goto label_5;
| label_97:
0x000aa2b0 ldr r3, [pc, 0xc8] |
0x000aa2b2 movw r0, 0xffff | r0 = 0xffff;
0x000aa2b6 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x000aa2b8 ldr r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x000aa2ba add r3, pc |
0x000aa2bc add.w r3, r3, 0x2dc | r3 = 0x154916;
0x000aa2c0 strh.w r0, [r1, sl, lsl 1] | offset_9 = sl << 1;
| *((r1 + offset_9)) = r0;
0x000aa2c4 str.w r3, [r2, sl, lsl 2] | __asm ("str.w r3, [r2, sl, lsl 2]");
0x000aa2c8 b 0xaa032 | goto label_44;
| label_104:
0x000aa2ca bl 0x19dd4 | r0 = fcn_00019dd4 (r0);
0x000aa2ce bl 0xab14 | fcn_0000ab14 (r0);
0x000aa2d2 cmp.w fp, 0 |
| if (fp == 0) {
0x000aa2d6 beq.w 0xaa4c4 | goto label_118;
| }
0x000aa2da ldr r3, [sp, 0x14] | r3 = x;
0x000aa2dc ldrh.w lr, [r5, 0x34] |
0x000aa2e0 ldrsh.w sl, [r3, 0x22] | sl = *((r3 + 0x22));
0x000aa2e4 cmp sl, lr |
| if (sl > lr) {
0x000aa2e6 bgt 0xaa380 | goto label_119;
| }
0x000aa2e8 ldrb.w r3, [r5, 0x37] | r3 = *((r5 + 0x37));
0x000aa2ec cmp.w sl, 0 |
0x000aa2f0 orr r3, r3, 0x20 | r3 |= 0x20;
0x000aa2f4 strb.w r3, [r5, 0x37] | *((r5 + 0x37)) = r3;
| if (sl > 0) {
0x000aa2f8 bgt.w 0xaa06e | goto label_45;
| }
0x000aa2fc b 0xaa0be | goto label_37;
| label_114:
0x000aa2fe ldr.w sb, [sp, 0x24] | sb = var_24h;
0x000aa302 b 0xaa0be | goto label_37;
| label_119:
0x000aa380 ldrb.w r3, [r6, 0xd0] | r3 = *((r6 + 0xd0));
0x000aa384 ldrb.w r2, [r8, 0xb1] | r2 = *((r8 + 0xb1));
0x000aa388 cmp r3, 1 |
| if (r3 > 1) {
0x000aa38a bhi.w 0xaa0ca | goto label_46;
| }
0x000aa38e cmp r2, 0 |
| if (r2 != 0) {
0x000aa390 bne.w 0xaa122 | goto label_47;
| }
| label_53:
0x000aa394 ldr r3, [sp, 0x14] | r3 = x;
0x000aa396 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000aa398 eor r3, r3, 0x80 | r3 ^= 0x80;
0x000aa39c ubfx r3, r3, 7, 1 | r3 = (r3 >> 7) & ((1 << 1) - 1);
0x000aa3a0 cmp.w fp, 0 |
0x000aa3a4 it ne |
| if (fp == 0) {
0x000aa3a6 orrne r3, r3, 1 | r3 |= 1;
| }
0x000aa3aa cmp r3, 0 |
| if (r3 == 0) {
0x000aa3ac beq.w 0xaa0dc | goto label_35;
| }
0x000aa3b0 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x000aa3b2 ldr r7, [r6, 8] | r7 = *((r6 + 8));
0x000aa3b4 add.w sl, r3, 1 | sl = r3 + 1;
0x000aa3b8 str.w sl, [r6, 0x2c] | __asm ("str.w sl, [r6, 0x2c]");
0x000aa3bc cmp r7, 0 |
| if (r7 == 0) {
0x000aa3be beq 0xaa4a6 | goto label_120;
| }
| label_49:
0x000aa3c0 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x000aa3c2 movs r1, 1 | r1 = 1;
0x000aa3c4 mov r0, r6 | r0 = r6;
0x000aa3c6 mov r2, r4 | r2 = r4;
0x000aa3c8 bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x000aa3cc movs r3, 0 | r3 = 0;
0x000aa3ce movs r1, 0xb8 | r1 = 0xb8;
0x000aa3d0 mov r2, r3 | r2 = r3;
0x000aa3d2 str r3, [sp] | *(sp) = r3;
0x000aa3d4 mov r0, r7 | r0 = r7;
0x000aa3d6 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000aa3da movs r3, 2 | r3 = 2;
0x000aa3dc str r0, [r5, 0x2c] | *((r5 + 0x2c)) = r0;
0x000aa3de mov r2, r4 | r2 = r4;
0x000aa3e0 str r3, [sp] | *(sp) = r3;
0x000aa3e2 movs r1, 0x93 | r1 = 0x93;
0x000aa3e4 mov r3, sl | r3 = sl;
0x000aa3e6 mov r0, r7 | r0 = r7;
0x000aa3e8 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000aa3ec ldr r3, [sp, 0x18] | r3 = var_18h;
0x000aa3ee cmp r3, 0 |
| if (r3 == 0) {
0x000aa3f0 beq.w 0xaa512 | goto label_121;
| }
0x000aa3f4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000aa3f6 ldr.w r2, [r6, 0xc8] | r2 = *((r6 + 0xc8));
0x000aa3fa ldr r1, [r3] | r1 = *(r3);
0x000aa3fc ldr.w r3, [r6, 0xc4] | r3 = *((r6 + 0xc4));
0x000aa400 subs r3, r3, r1 | r3 -= r1;
0x000aa402 add r3, r2 | r3 += r2;
0x000aa404 adds r2, r1, r3 | r2 = r1 + r3;
0x000aa406 ldrb r2, [r2, -0x1] | r2 = *((r2 - 0x1));
0x000aa40a cmp r2, 0x3b |
0x000aa40c ldr r2, [sp, 0x104] | r2 = *(arg_104h);
0x000aa40e it eq |
| if (r2 != 0x3b) {
0x000aa410 addeq r3, r3, -1 | r3 += -1;
| }
0x000aa414 cmp r2, 0 |
| if (r2 != 0) {
0x000aa416 bne 0xaa4a0 | goto label_122;
| }
0x000aa418 ldr r2, [pc, 0x16c] |
0x000aa41a add r2, pc | r2 = 0x1549a6;
| do {
0x000aa41c str r1, [sp] | *(sp) = r1;
0x000aa41e mov r0, r8 | r0 = r8;
0x000aa420 ldr r1, [pc, 0x168] |
0x000aa422 add r1, pc | r1 = 0x1549b2;
0x000aa424 bl 0x24ec8 | fcn_00024ec8 (r0);
0x000aa428 ldr r2, [sp, 0x14] | r2 = x;
0x000aa42a mov r4, r0 | r4 = r0;
0x000aa42c ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000aa430 strd sl, r0, [sp, 4] | __asm ("strd sl, r0, [var_4h]");
0x000aa434 mov r0, r6 | r0 = r6;
0x000aa436 ldr r2, [r2] | r2 = *(r2);
0x000aa438 ldr r1, [pc, 0x154] |
0x000aa43a str r2, [sp] | *(sp) = r2;
0x000aa43c ldr r2, [sp, 0x20] | r2 = var_20h;
0x000aa43e add r1, pc | r1 = 0x1549d2;
0x000aa440 ldr r2, [r3, r2] | r2 = *((r3 + r2));
0x000aa442 ldr r3, [r5] | r3 = *(r5);
0x000aa444 bl 0xa89e4 | fcn_000a89e4 (r0);
| if (r4 != 0) {
0x000aa448 cbz r4, 0xaa452 |
0x000aa44a mov r1, r4 | r1 = r4;
0x000aa44c mov r0, r8 | r0 = r8;
0x000aa44e bl 0x16808 | fcn_00016808 (r0, r1);
| }
| label_55:
0x000aa452 cmp.w fp, 0 |
| if (fp != 0) {
0x000aa456 beq 0xaa494 |
0x000aa458 mov r2, sl | r2 = sl;
0x000aa45a mov r1, r5 | r1 = r5;
0x000aa45c mov r0, r6 | r0 = r6;
0x000aa45e bl 0x6fa4c | fcn_0006fa4c (r0, r1, r2, r3, r4, r5);
0x000aa462 ldr r4, [sp, 0x1c] | r4 = var_1ch;
0x000aa464 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x000aa466 ldr r0, [r6] | r0 = *(r6);
0x000aa468 mov r2, r4 | r2 = r4;
0x000aa46a bl 0x2ea94 | fcn_0002ea94 (r0, r1, r2);
0x000aa46e ldr r1, [pc, 0x124] |
0x000aa470 mov r0, r8 | r0 = r8;
0x000aa472 ldr r2, [r5] | r2 = *(r5);
0x000aa474 add r1, pc | r1 = 0x154a0e;
0x000aa476 bl 0x24ec8 | fcn_00024ec8 (r0);
0x000aa47a mov r1, r4 | r1 = r4;
0x000aa47c mov r2, r0 | r2 = r0;
0x000aa47e movs r3, 0 | r3 = 0;
0x000aa480 mov r0, r7 | r0 = r7;
0x000aa482 bl 0x2f21c | fcn_0002f21c (r0, r1, r2, r3);
0x000aa486 movs r2, 0 | r2 = 0;
0x000aa488 movs r3, 1 | r3 = 1;
0x000aa48a movs r1, 0xa6 | r1 = 0xa6;
0x000aa48c mov r0, r7 | r0 = r7;
0x000aa48e str r2, [sp] | *(sp) = r2;
0x000aa490 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| }
0x000aa494 ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x000aa496 mov r0, r7 | r0 = r7;
0x000aa498 ldr r1, [r5, 0x2c] | r1 = *((r5 + 0x2c));
0x000aa49a bl 0xa514 | fcn_0000a514 (r0, r1, r2);
0x000aa49e b 0xaa178 | goto label_48;
| label_122:
0x000aa4a0 ldr r2, [pc, 0xf4] |
0x000aa4a2 add r2, pc | r2 = 0x154a3e;
0x000aa4a4 b 0xaa41c |
| } while (1);
| label_120:
0x000aa4a6 mov r0, r6 | r0 = r6;
0x000aa4a8 bl 0x2dd00 | r0 = fcn_0002dd00 (r0, r1);
0x000aa4ac mov r7, r0 | r7 = r0;
0x000aa4ae cmp r0, 0 |
| if (r0 != 0) {
0x000aa4b0 bne 0xaa3c0 | goto label_49;
| }
0x000aa4b2 b 0xa9f12 | goto label_36;
| label_61:
0x000aa4b4 blx 0x883c | fcn_0000883c ();
| label_89:
0x000aa4b8 mov sl, r2 | sl = r2;
0x000aa4ba b 0xa9df8 | goto label_50;
| label_85:
0x000aa4bc bl 0x570d0 | fcn_000570d0 (r0);
0x000aa4c0 b.w 0xa9bde | goto label_51;
| label_118:
0x000aa4c4 ldrb.w r3, [r6, 0xd0] | r3 = *((r6 + 0xd0));
0x000aa4c8 cmp r3, 1 |
| if (r3 > 1) {
0x000aa4ca bhi.w 0xaa0dc | goto label_35;
| }
0x000aa4ce ldrb.w r3, [r8, 0xb1] | r3 = *((r8 + 0xb1));
0x000aa4d2 cmp r3, 0 |
| if (r3 != 0) {
0x000aa4d4 bne.w 0xaa15a | goto label_52;
| }
0x000aa4d8 b 0xaa394 | goto label_53;
| label_68:
0x000aa4da ldr r3, [sp, 0x24] | r3 = var_24h;
0x000aa4dc sub.w r3, r3, 0x80000 | r3 -= 0x80000;
0x000aa4e0 str r3, [sp, 0x24] | var_24h = r3;
0x000aa4e2 movs r3, 0 |
0x000aa4e4 movt r3, 0xfff8 | r3 = 0x-80000;
0x000aa4e8 str r3, [sp, 0x20] | var_20h = r3;
0x000aa4ea mov.w r3, 0x8000 |
0x000aa4ee movt r3, 0xffff | r3 = 0x-8000;
0x000aa4f2 str r3, [sp, 0x1c] | var_1ch = r3;
0x000aa4f4 b 0xa9fd0 | goto label_54;
| label_112:
0x000aa4f6 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x000aa4fa cmp r3, 0 |
| if (r3 != 0) {
0x000aa4fc bne.w 0xa9f12 | goto label_36;
| }
0x000aa500 ldrb.w r3, [r8, 0x58] | r3 = *((r8 + 0x58));
0x000aa504 cmp r3, 0 |
| if (r3 != 0) {
0x000aa506 bne.w 0xa9f12 | goto label_36;
| }
0x000aa50a mov r0, r8 | r0 = r8;
0x000aa50c bl 0x21644 | fcn_00021644 (r0);
0x000aa510 b 0xa9f12 | goto label_36;
| label_121:
0x000aa512 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000aa514 mov r0, r6 | r0 = r6;
0x000aa516 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000aa51a ldr r1, [pc, 0x80] |
0x000aa51c strd sl, r2, [sp, 4] | __asm ("strd sl, r2, [var_4h]");
0x000aa520 ldr r2, [sp, 0x14] | r2 = x;
0x000aa522 add r1, pc | r1 = 0x154ac4;
0x000aa524 ldr r2, [r2] | r2 = *(r2);
0x000aa526 str r2, [sp] | *(sp) = r2;
0x000aa528 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000aa52a ldr r2, [r3, r2] | r2 = *((r3 + r2));
0x000aa52c ldr r3, [r5] | r3 = *(r5);
0x000aa52e bl 0xa89e4 | fcn_000a89e4 (r0);
0x000aa532 b 0xaa452 | goto label_55;
| label_111:
0x000aa534 ldr r1, [pc, 0x68] |
0x000aa536 mov r0, r6 | r0 = r6;
0x000aa538 add r1, pc | r1 = 0x154adc;
0x000aa53a bl 0x21598 | fcn_00021598 (r0, r1);
0x000aa53e ldr r2, [pc, 0x64] |
0x000aa540 movw r1, 0xd2e7 |
0x000aa544 movt r1, 1 | r1 = 0x1d2e7;
0x000aa548 movs r0, 0xb | r0 = 0xb;
0x000aa54a add r2, pc | r2 = 0x154af4;
0x000aa54c bl 0x250e0 | fcn_000250e0 (r0, r1, r2);
0x000aa550 str r0, [r6, 0xc] | *((r6 + 0xc)) = r0;
0x000aa552 b 0xa9f12 | goto label_36;
| label_113:
0x000aa554 ldr r3, [sp, 0x2c] | r3 = var_2ch;
| if (r3 != 0) {
0x000aa556 cbz r3, 0xaa576 |
0x000aa558 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x000aa55a mov r0, r8 | r0 = r8;
0x000aa55c bl 0x1a608 | fcn_0001a608 (r0, r1);
0x000aa560 mov r1, fp | r1 = fp;
0x000aa562 mov r0, r8 | r0 = r8;
0x000aa564 bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x000aa568 b.w 0xa986c | goto label_56;
| label_117:
0x000aa56c ldrb.w r3, [r5, 0x36] | r3 = *((r5 + 0x36));
0x000aa570 strb.w r3, [r7, 0x36] | *((r7 + 0x36)) = r3;
0x000aa574 b 0xaa256 | goto label_57;
| }
0x000aa576 mov r1, fp | r1 = fp;
0x000aa578 mov r0, r8 | r0 = r8;
0x000aa57a bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x000aa57e b.w 0xa986c | goto label_56;
| label_92:
0x000aa582 movs r3, 0 | r3 = 0;
0x000aa584 ldrb r3, [r3] | r3 = *(r3);
0x000aa586 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xaa874 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000aa874 () | void fcn_000aa874 (int16_t arg_1h, int16_t arg_8h, int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_20h, int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_58h;
| int16_t var_78h;
| int16_t var_a4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000aa874 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000aa878 mov r4, r2 | r4 = r2;
0x000aa87a ldr r2, [pc, 0x38c] |
0x000aa87c sub sp, 0xac |
0x000aa87e mov fp, r1 |
0x000aa880 ldr r3, [pc, 0x388] | r3 = *(0xaac0c);
0x000aa882 add r2, pc | r2 = 0x155490;
0x000aa884 ldr r6, [r0, 0x24] | r6 = *((r0 + 0x24));
0x000aa886 ldr.w r7, [r0, 0xf4] | r7 = *((r0 + 0xf4));
0x000aa88a ldr r3, [r2, r3] |
0x000aa88c ldr.w sb, [r0] | sb = *(r0);
0x000aa890 ldr r3, [r3] | r3 = imp.sinh;
0x000aa892 str r3, [sp, 0xa4] | var_a4h = r3;
0x000aa894 mov.w r3, 0 | r3 = 0;
0x000aa898 movs r3, 0 | r3 = 0;
0x000aa89a str.w r3, [r0, 0xf4] | __asm ("str.w r3, [r0, 0xf4]");
0x000aa89e cmp r6, 0 |
| if (r6 != 0) {
0x000aa8a0 bne.w 0xaaaa0 | goto label_10;
| }
0x000aa8a4 cmp r7, 0 |
| if (r7 == 0) {
0x000aa8a6 beq.w 0xaaa62 | goto label_2;
| }
0x000aa8aa ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x000aa8ac mov r8, r0 | r8 = r0;
0x000aa8ae ldr.w sl, [r7] | sl = *(r7);
0x000aa8b2 ldr.w r5, [sb, 0x10] | r5 = *((sb + 0x10));
0x000aa8b6 cmp r1, 0 |
| if (r1 == 0) {
0x000aa8b8 beq.w 0xaabea | goto label_11;
| }
0x000aa8bc ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000aa8be cmp r1, r3 |
| if (r1 == r3) {
0x000aa8c0 beq.w 0xaab7a | goto label_12;
| }
0x000aa8c4 add.w r2, r5, 0x10 | r2 = r5 + 0x10;
| do {
0x000aa8c8 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000aa8ca mov r5, r2 | r5 = r2;
0x000aa8cc adds r6, 1 | r6++;
0x000aa8ce adds r2, 0x10 | r2 += 0x10;
0x000aa8d0 cmp r1, r3 |
0x000aa8d2 bne 0xaa8c8 |
| } while (r1 != r3);
0x000aa8d4 lsls r2, r6, 4 | r2 = r6 << 4;
0x000aa8d6 str r2, [sp, 0x10] | var_10h = r2;
0x000aa8d8 sub.w r2, r6, 1 | r2 = r6 - 1;
0x000aa8dc clz r2, r2 | r2 &= r2;
0x000aa8e0 lsrs r2, r2, 5 | r2 >>= 5;
| label_4:
0x000aa8e2 mov r1, fp | r1 = fp;
0x000aa8e4 str.w fp, [r7, 0x1c] | __asm ("str.w fp, [r7, 0x1c]");
0x000aa8e8 cmp.w fp, 0 |
| if (fp == 0) {
0x000aa8ec beq 0xaa8f6 | goto label_13;
| }
| do {
0x000aa8ee str r7, [r1, 4] | *((r1 + 4)) = r7;
0x000aa8f0 ldr r1, [r1, 0x28] | r1 = *((r1 + 0x28));
0x000aa8f2 cmp r1, 0 |
0x000aa8f4 bne 0xaa8ee |
| } while (r1 != 0);
| label_13:
0x000aa8f6 str.w sl, [sp, 0x18] | __asm ("str.w sl, [var_18h]");
0x000aa8fa cmp.w sl, 0 |
| if (sl == 0) {
0x000aa8fe beq.w 0xaab80 | goto label_14;
| }
0x000aa902 mov r0, sl | r0 = sl;
0x000aa904 strd r3, r2, [sp, 8] | __asm ("strd r3, r2, [var_8h]");
0x000aa908 blx 0x85b4 | fcn_000085b4 ();
0x000aa90c ldrd r3, r2, [sp, 8] | __asm ("ldrd r3, r2, [var_8h]");
0x000aa910 bic r0, r0, 0xc0000000 | r0 = BIT_MASK (r0, 0xc0000000);
| label_5:
0x000aa914 ldr r1, [r5] | r1 = *(r5);
0x000aa916 str r3, [sp, 0x40] | var_40h = r3;
0x000aa918 ldr r3, [pc, 0x2f4] |
0x000aa91a vdup.32 d16, r8 | __asm ("vdup.32 d16, r8");
0x000aa91e str r0, [sp, 0x1c] | var_1ch = r0;
0x000aa920 add r3, pc | r3 = 0x155534;
0x000aa922 strb.w r2, [sp, 0x44] | var_44h = r2;
0x000aa926 str r3, [sp, 0x4c] | var_4ch = r3;
0x000aa928 ldr r3, [pc, 0x2e8] |
0x000aa92a str r1, [sp, 0x48] | var_48h = r1;
0x000aa92c vstr d16, [sp, 0x20] | __asm ("vstr d16, [sp, 0x20]");
0x000aa930 add r3, pc | r3 = 0x155548;
0x000aa932 str r3, [sp, 0x28] | var_28h = r3;
0x000aa934 ldr r3, [pc, 0x2e0] |
0x000aa936 add r3, pc | r3 = 0x155552;
0x000aa938 str r3, [sp, 0x2c] | var_2ch = r3;
0x000aa93a ldr r3, [pc, 0x2e0] |
0x000aa93c add r3, pc | r3 = 0x15555e;
0x000aa93e str r3, [sp, 0x30] | var_30h = r3;
0x000aa940 movs r3, 0 | r3 = 0;
0x000aa942 str r3, [sp, 0x34] | var_34h = r3;
0x000aa944 strh.w r3, [sp, 0x38] | var_38h = r3;
0x000aa948 add r3, sp, 0x18 | r3 += var_18h;
0x000aa94a str r3, [sp, 0x50] | var_50h = r3;
0x000aa94c add r3, sp, 0x20 | r3 += var_20h;
0x000aa94e str r3, [sp, 0x3c] | var_3ch = r3;
0x000aa950 cmp.w fp, 0 |
| if (fp == 0) {
0x000aa954 beq 0xaaa4e | goto label_15;
| }
0x000aa956 add r5, sp, 0x24 | r5 += var_24h;
0x000aa958 str.w sl, [sp, 0xc] | __asm ("str.w sl, [var_ch]");
0x000aa95c str r6, [sp, 0x14] | var_14h = r6;
| label_1:
0x000aa95e ldr.w r1, [fp, 8] | r1 = *(arg_8h);
0x000aa962 mov r0, r5 | r0 = r5;
0x000aa964 bl 0x31b70 | r0 = fcn_00031b70 (r0, r1, r2, r3, r4, r5);
0x000aa968 cmp r0, 0 |
| if (r0 != 0) {
0x000aa96a bne 0xaaa5a | goto label_3;
| }
0x000aa96c ldr.w r1, [fp, 0x14] | r1 = *(arg_14h);
| if (r1 != 0) {
0x000aa970 cbz r1, 0xaa97c |
0x000aa972 mov r0, r5 | r0 = r5;
0x000aa974 bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
0x000aa978 cmp r0, 0 |
| if (r0 != 0) {
0x000aa97a bne 0xaaa5a | goto label_3;
| }
| }
0x000aa97c ldr.w r2, [fp, 0x18] | r2 = *(arg_18h);
| if (r2 == 0) {
0x000aa980 cbz r2, 0xaa9a4 | goto label_16;
| }
0x000aa982 ldr r6, [r2] | r6 = *(r2);
0x000aa984 cmp r6, 0 |
| if (r6 <= 0) {
0x000aa986 ble 0xaa9a4 | goto label_16;
| }
0x000aa988 add.w sl, r2, 0x18 | sl = r2 + 0x18;
| do {
0x000aa98c ldr r1, [sl, -0x10] | r1 = *((sl - 0x10));
| if (r1 != 0) {
0x000aa990 cbz r1, 0xaa99c |
0x000aa992 mov r0, r5 | r0 = r5;
0x000aa994 bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
0x000aa998 cmp r0, 0 |
| if (r0 != 0) {
0x000aa99a bne 0xaaa5a | goto label_3;
| }
| }
0x000aa99c subs r6, 1 | r6--;
0x000aa99e add.w sl, sl, 0x10 | sl += 0x10;
0x000aa9a2 bne 0xaa98c |
| } while (r6 != 1);
| label_16:
0x000aa9a4 ldr.w sl, [fp, 0x10] | sl = *(arg_10h);
0x000aa9a8 cmp.w sl, 0 |
| if (sl != 0) {
0x000aa9ac beq 0xaa9ca |
0x000aa9ae add r3, sp, 0x58 | r3 += var_58h;
0x000aa9b0 movs r1, 0 | r1 = 0;
0x000aa9b2 movs r2, 0x4c | r2 = 0x4c;
0x000aa9b4 mov r0, r3 | r0 = r3;
0x000aa9b6 blx 0x839c | r0 = fcn_0000839c ();
0x000aa9ba mov r1, r0 | r1 = r0;
0x000aa9bc mov r0, r5 | r0 = r5;
0x000aa9be str.w sl, [sp, 0x78] | __asm ("str.w sl, [var_78h]");
0x000aa9c2 bl 0x31b70 | r0 = fcn_00031b70 (r0, r1, r2, r3, r4, r5);
0x000aa9c6 cmp r0, 0 |
| if (r0 != 0) {
0x000aa9c8 bne 0xaaa5a | goto label_3;
| }
| }
0x000aa9ca ldr.w r6, [fp, 0x20] | r6 = *(arg_20h);
0x000aa9ce cmp r6, 0 |
| if (r6 == 0) {
0x000aa9d0 beq 0xaaa3e | goto label_17;
| }
0x000aa9d2 str r4, [sp, 8] | var_8h = r4;
0x000aa9d4 mov r4, r6 | r4 = r6;
| label_0:
0x000aa9d6 ldr r2, [r4] | r2 = *(r4);
| if (r2 == 0) {
0x000aa9d8 cbz r2, 0xaa9fa | goto label_18;
| }
0x000aa9da ldr r6, [r2] | r6 = *(r2);
0x000aa9dc cmp r6, 0 |
| if (r6 <= 0) {
0x000aa9de ble 0xaa9fa | goto label_18;
| }
0x000aa9e0 add.w sl, r2, 0x18 | sl = r2 + 0x18;
| do {
0x000aa9e4 ldr r1, [sl, -0x10] | r1 = *((sl - 0x10));
| if (r1 != 0) {
0x000aa9e8 cbz r1, 0xaa9f2 |
0x000aa9ea mov r0, r5 | r0 = r5;
0x000aa9ec bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
| if (r0 != 0) {
0x000aa9f0 cbnz r0, 0xaaa5a | goto label_3;
| }
| }
0x000aa9f2 subs r6, 1 | r6--;
0x000aa9f4 add.w sl, sl, 0x10 | sl += 0x10;
0x000aa9f8 bne 0xaa9e4 |
| } while (r6 != 1);
| label_18:
0x000aa9fa ldr r1, [r4, 4] | r1 = *((r4 + 4));
| if (r1 != 0) {
0x000aa9fc cbz r1, 0xaaa06 |
0x000aa9fe mov r0, r5 | r0 = r5;
0x000aaa00 bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
| if (r0 != 0) {
0x000aaa04 cbnz r0, 0xaaa5a | goto label_3;
| }
| }
0x000aaa06 ldr r2, [r4, 8] | r2 = *((r4 + 8));
| if (r2 == 0) {
0x000aaa08 cbz r2, 0xaaa2a | goto label_19;
| }
0x000aaa0a ldr r6, [r2] | r6 = *(r2);
0x000aaa0c cmp r6, 0 |
| if (r6 <= 0) {
0x000aaa0e ble 0xaaa2a | goto label_19;
| }
0x000aaa10 add.w sl, r2, 0x18 | sl = r2 + 0x18;
| do {
0x000aaa14 ldr r1, [sl, -0x10] | r1 = *((sl - 0x10));
| if (r1 != 0) {
0x000aaa18 cbz r1, 0xaaa22 |
0x000aaa1a mov r0, r5 | r0 = r5;
0x000aaa1c bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
| if (r0 != 0) {
0x000aaa20 cbnz r0, 0xaaa5a | goto label_3;
| }
| }
0x000aaa22 subs r6, 1 | r6--;
0x000aaa24 add.w sl, sl, 0x10 | sl += 0x10;
0x000aaa28 bne 0xaaa14 |
| } while (r6 != 1);
| label_19:
0x000aaa2a ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
| if (r1 != 0) {
0x000aaa2c cbz r1, 0xaaa36 |
0x000aaa2e mov r0, r5 | r0 = r5;
0x000aaa30 bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
| if (r0 != 0) {
0x000aaa34 cbnz r0, 0xaaa5a | goto label_3;
| }
| }
0x000aaa36 ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x000aaa38 cmp r4, 0 |
| if (r4 != 0) {
0x000aaa3a bne 0xaa9d6 | goto label_0;
| }
0x000aaa3c ldr r4, [sp, 8] | r4 = var_8h;
| label_17:
0x000aaa3e ldr.w fp, [fp, 0x28] | fp = *(arg_28h);
0x000aaa42 cmp.w fp, 0 |
| if (fp != 0) {
0x000aaa46 bne 0xaa95e | goto label_1;
| }
0x000aaa48 ldr.w sl, [sp, 0xc] | sl = var_ch;
0x000aaa4c ldr r6, [sp, 0x14] | r6 = var_14h;
| label_15:
0x000aaa4e ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
| if (r1 == 0) {
0x000aaa50 cbz r1, 0xaaa86 | goto label_20;
| }
0x000aaa52 add r0, sp, 0x24 | r0 += var_24h;
0x000aaa54 bl 0x30f3c | r0 = fcn_00030f3c (r0, r1);
| if (r0 == 0) {
0x000aaa58 cbz r0, 0xaaa86 | goto label_20;
| }
| label_3:
0x000aaa5a ldrb r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x000aaa5c mov.w fp, 0 |
| if (r3 == 0) {
0x000aaa60 cbz r3, 0xaaaaa | goto label_21;
| }
| do {
| label_2:
0x000aaa62 mov r1, fp | r1 = fp;
0x000aaa64 mov r0, sb | r0 = sb;
0x000aaa66 bl 0x1ab8c | fcn_0001ab8c (r0, r1);
0x000aaa6a ldr r2, [pc, 0x1b4] |
0x000aaa6c ldr r3, [pc, 0x19c] | r3 = *(0xaac0c);
0x000aaa6e add r2, pc | r2 = 0x155694;
0x000aaa70 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000aaa72 ldr r2, [r3] | r2 = imp.sinh;
0x000aaa74 ldr r3, [sp, 0xa4] | r3 = var_a4h;
0x000aaa76 eors r2, r3 | r2 ^= r3;
0x000aaa78 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000aaa7c bne.w 0xaac04 | goto label_22;
| }
0x000aaa80 add sp, 0xac |
0x000aaa82 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_20:
0x000aaa86 ldrb.w r3, [r8, 0xd0] | r3 = *((r8 + 0xd0));
0x000aaa8a ldrb.w r2, [sb, 0xb1] | r2 = *((sb + 0xb1));
0x000aaa8c movs r0, 0xb1 | r0 = 0xb1;
0x000aaa8e cmp r3, 1 |
| if (r3 < 1) {
0x000aaa90 bls 0xaaab4 | goto label_23;
| }
0x000aaa92 str.w r7, [r8, 0xf4] | __asm ("str.w r7, [r8, 0xf4]");
0x000aaa96 cmp r2, 0 |
| if (r2 != 0) {
0x000aaa98 bne 0xaab84 | goto label_24;
| }
| label_8:
0x000aaa9a mov.w fp, 0 |
0x000aaa9e b 0xaaa62 |
| } while (1);
| label_10:
0x000aaaa0 cmp r7, 0 |
| if (r7 == 0) {
0x000aaaa2 beq 0xaaa62 | goto label_2;
| }
0x000aaaa4 ldrb r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x000aaaa6 cmp r3, 0 |
| if (r3 != 0) {
0x000aaaa8 bne 0xaaa62 | goto label_2;
| }
| label_21:
0x000aaaaa mov r1, r7 | r1 = r7;
0x000aaaac mov r0, sb | r0 = sb;
0x000aaaae bl 0x1ac1c | fcn_0001ac1c (r0, r1);
0x000aaab2 b 0xaaa62 | goto label_2;
| label_23:
0x000aaab4 cmp r2, 0 |
| if (r2 != 0) {
0x000aaab6 bne 0xaab4c | goto label_25;
| }
0x000aaab8 ldr.w r5, [r8, 8] | r5 = *((r8 + 8));
0x000aaabc cmp r5, 0 |
| if (r5 == 0) {
0x000aaabe beq 0xaab88 | goto label_26;
| }
| label_6:
0x000aaac0 movs r1, 0 | r1 = 0;
0x000aaac2 mov r2, r6 | r2 = r6;
0x000aaac4 mov r0, r8 | r0 = r8;
0x000aaac6 bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x000aaaca ldrd r1, fp, [r4] | __asm ("ldrd r1, fp, [r4]");
0x000aaace str r1, [sp, 8] | var_8h = r1;
0x000aaad0 cmp r1, 0 |
| if (r1 == 0) {
0x000aaad2 beq 0xaab9c | goto label_27;
| }
0x000aaad4 adds.w r2, fp, 1 | r2 += arg_1h;
0x000aaad8 mov.w r3, 0 | r3 = 0;
0x000aaadc adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000aaae0 mov r0, sb | r0 = sb;
0x000aaae2 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x000aaae6 mov r4, r0 | r4 = r0;
0x000aaae8 cmp r0, 0 |
| if (r0 == 0) {
0x000aaaea beq 0xaab9c | goto label_27;
| }
0x000aaaec ldr r1, [sp, 8] | r1 = var_8h;
0x000aaaee mov r2, fp | r2 = fp;
0x000aaaf0 blx 0x8610 | fcn_00008610 ();
0x000aaaf4 mov.w r3, 0 | r3 = 0;
0x000aaaf8 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000aaafa strb.w r3, [r4, fp] | *((r4 + fp)) = r3;
0x000aaafe mov r0, r8 | r0 = r8;
0x000aab00 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000aab04 ldr r1, [pc, 0x11c] |
0x000aab06 ldr r2, [r3, r2] | r2 = *((r3 + r2));
0x000aab08 str r4, [sp, 4] | var_4h = r4;
0x000aab0a add r1, pc | r1 = 0x155732;
0x000aab0c ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000aab0e str r3, [sp] | *(sp) = r3;
0x000aab10 mov r3, sl | r3 = sl;
0x000aab12 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000aab16 mov r1, r4 | r1 = r4;
0x000aab18 mov r0, sb | r0 = sb;
0x000aab1a bl 0x16808 | fcn_00016808 (r0, r1);
| label_7:
0x000aab1e ldr.w r1, [r8, 8] | r1 = *((r8 + 8));
0x000aab22 mov r2, r6 | r2 = r6;
0x000aab24 ldr.w r0, [r8] | r0 = *(r8);
0x000aab28 bl 0x2ea94 | fcn_0002ea94 (r0, r1, r2);
0x000aab2c ldr r1, [pc, 0xf8] |
0x000aab2e mov r2, sl | r2 = sl;
0x000aab30 mov r0, sb | r0 = sb;
0x000aab32 add r1, pc | r1 = 0x15575e;
0x000aab34 bl 0x24ec8 | fcn_00024ec8 (r0);
0x000aab38 movs r3, 0 | r3 = 0;
0x000aab3a mov r2, r0 | r2 = r0;
0x000aab3c mov r1, r6 | r1 = r6;
0x000aab3e mov r0, r5 | r0 = r5;
0x000aab40 bl 0x2f21c | fcn_0002f21c (r0, r1, r2, r3);
0x000aab44 ldrb.w r3, [sb, 0xb1] | r3 = *((sb + 0xb1));
0x000aab48 cmp r3, 0 |
| if (r3 == 0) {
0x000aab4a beq 0xaaa5a | goto label_3;
| }
| do {
| label_25:
0x000aab4c ldr r2, [sp, 0x10] | r2 = var_10h;
0x000aab4e mov r1, sl | r1 = sl;
0x000aab50 ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000aab54 add r3, r2 | r3 += r2;
0x000aab56 mov r2, r7 | r2 = r7;
0x000aab58 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x000aab5a adds r0, 0x28 | r0 += 0x28;
0x000aab5c bl 0x17978 | r0 = fcn_00017978 (r0, r1, r2, r3, r4);
0x000aab60 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000aab62 cbz r0, 0xaabba | goto label_28;
| }
0x000aab64 ldrb.w r3, [sb, 0x57] | r3 = *((sb + 0x57));
| if (r3 == 0) {
0x000aab68 cbnz r3, 0xaab76 |
0x000aab6a ldrb.w r3, [sb, 0x58] | r3 = *((sb + 0x58));
| if (r3 != 0) {
0x000aab6e cbnz r3, 0xaab76 | goto label_29;
| }
0x000aab70 mov r0, sb | r0 = sb;
0x000aab72 bl 0x21644 | fcn_00021644 (r0);
| }
| label_29:
0x000aab76 mov r7, r4 | r7 = r4;
0x000aab78 b 0xaaa5a | goto label_3;
| label_12:
0x000aab7a mov r2, r6 | r2 = r6;
0x000aab7c str r6, [sp, 0x10] | var_10h = r6;
0x000aab7e b 0xaa8e2 | goto label_4;
| label_14:
0x000aab80 mov r0, sl | r0 = sl;
0x000aab82 b 0xaa914 | goto label_5;
| label_24:
0x000aab84 movs r7, 0 | r7 = 0;
0x000aab86 b 0xaab4c |
| } while (1);
| label_26:
0x000aab88 ldr.w r3, [r8, 0x74] | r3 = *((r8 + 0x74));
| if (r3 == 0) {
0x000aab8c cbz r3, 0xaabd8 | goto label_30;
| }
| label_9:
0x000aab8e mov r0, r8 | r0 = r8;
0x000aab90 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000aab94 mov r5, r0 | r5 = r0;
0x000aab96 cmp r0, 0 |
| if (r0 != 0) {
0x000aab98 bne 0xaaac0 | goto label_6;
| }
0x000aab9a b 0xaaa5a | goto label_3;
| label_27:
0x000aab9c ldr.w r3, [sb, 0x10] | r3 = *((sb + 0x10));
0x000aaba0 mov r0, r8 | r0 = r8;
0x000aaba2 ldr r2, [sp, 0x10] | r2 = var_10h;
0x000aaba4 ldr r1, [pc, 0x84] |
0x000aaba6 ldr r2, [r3, r2] | r2 = *((r3 + r2));
0x000aaba8 movs r3, 0 | r3 = 0;
0x000aabaa str r3, [sp, 4] | var_4h = r3;
0x000aabac add r1, pc | r1 = 0x1557dc;
0x000aabae ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000aabb0 str r3, [sp] | *(sp) = r3;
0x000aabb2 mov r3, sl | r3 = sl;
0x000aabb4 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000aabb8 b 0xaab1e | goto label_7;
| label_28:
0x000aabba ldrd r0, r3, [r7, 0x14] | __asm ("ldrd r0, r3, [r7, 0x14]");
0x000aabbe cmp r0, r3 |
| if (r0 != r3) {
0x000aabc0 bne.w 0xaaa9a | goto label_8;
| }
0x000aabc4 mov r2, r4 | r2 = r4;
0x000aabc6 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x000aabc8 adds r0, 8 | r0 += 8;
0x000aabca bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x000aabce ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000aabd0 ldr r2, [r3, 0x38] | r2 = *((r3 + 0x38));
0x000aabd2 str r2, [r7, 0x20] | *((r7 + 0x20)) = r2;
0x000aabd4 str r7, [r3, 0x38] | *((r3 + 0x38)) = r7;
0x000aabd6 b 0xaaa9a | goto label_8;
| label_30:
0x000aabd8 ldr.w r3, [r8] | r3 = *(r8);
0x000aabdc ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000aabde lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000aabe0 itt pl |
| if (r3 < r3) {
0x000aabe2 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000aabe4 strbpl r3, [r8, 0x17] | *((r8 + 0x17)) = r3;
| }
0x000aabe8 b 0xaab8e | goto label_9;
| label_11:
0x000aabea movs r3, 0 | r3 = 0;
0x000aabec sub.w r5, r5, 0x80000 | r5 -= 0x80000;
0x000aabf0 movt r3, 0xfff8 | r3 = (r3 & 0xFFFF) | 0xfff80000;
0x000aabf4 mov r2, r6 | r2 = r6;
0x000aabf6 mov.w r6, 0x8000 | r6 = 0x8000;
0x000aabfa str r3, [sp, 0x10] | var_10h = r3;
0x000aabfc movt r6, 0xffff | r6 = (r6 & 0xFFFF) | 0xffff0000;
0x000aac00 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000aac02 b 0xaa8e2 | goto label_4;
| label_22:
0x000aac04 blx 0x883c | fcn_0000883c ();
0x000aac08 b 0xaa438 | return void (*0xaa438)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xaac30 */
| #include <stdint.h>
|
; (fcn) fcn.000aac30 () | void fcn_000aac30 (int16_t arg_10h, int16_t arg_50h, arithmetic x, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_38h;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000aac30 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000aac34 mov r5, r1 | r5 = r1;
0x000aac36 sub sp, 0x44 |
0x000aac38 ldr r1, [pc, 0x19c] |
0x000aac3a mov r7, r0 | r7 = r0;
0x000aac3c str r3, [sp, 0x10] | var_10h = r3;
0x000aac3e ldr r0, [sp, 0x68] | r0 = *(x);
0x000aac40 add r1, pc | r1 = 0x155a1c;
0x000aac42 ldr r3, [pc, 0x198] | r3 = *(0xaadde);
0x000aac44 ldr r4, [r7, 8] | r4 = *((r7 + 8));
0x000aac46 str r0, [sp, 0x18] | var_18h = r0;
0x000aac48 ldr r3, [r1, r3] |
0x000aac4a ldr.w fp, [r7] | fp = *(r7);
0x000aac4c add sp, 0 |
0x000aac4e ldr r3, [r3] | r3 = imp.sinh;
0x000aac50 str r3, [sp, 0x3c] | var_3ch = r3;
0x000aac52 mov.w r3, 0 | r3 = 0;
0x000aac56 cmp r4, 0 |
| if (r4 == 0) {
0x000aac58 beq.w 0xaad9e | goto label_8;
| }
| label_2:
0x000aac5c ldr r1, [pc, 0x180] |
0x000aac5e movs r6, 0 | r6 = 0;
0x000aac60 ldr.w r3, [fp, 0x10] | r3 = *(arg_10h);
0x000aac64 mov sl, r6 | sl = r6;
0x000aac66 mov r8, r7 | r8 = r7;
0x000aac68 str r2, [sp, 0x20] | var_20h = r2;
0x000aac6a add r1, pc | r1 = 0x155a4e;
0x000aac6c adds r1, 0x70 | r1 += 0x70;
0x000aac6e str r1, [sp, 8] | var_8h = r1;
0x000aac70 lsls r1, r5, 4 | r1 = r5 << 4;
0x000aac72 add.w sb, r3, r1 | sb = r3 + r1;
0x000aac76 ldr r3, [pc, 0x16c] |
0x000aac78 str r1, [sp, 0x14] | var_14h = r1;
0x000aac7a add r3, pc | r3 = 0x155a64;
0x000aac7c str r3, [sp, 0x1c] | var_1ch = r3;
0x000aac7e add r3, sp, 0x38 | r3 += var_38h;
0x000aac80 str r3, [sp, 0xc] | var_ch = r3;
| do {
| label_1:
0x000aac82 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000aac84 mov r0, fp | r0 = fp;
0x000aac86 ldr.w r2, [sb] | r2 = *(sb);
0x000aac8a strb.w sl, [r3, r6] | *((r3 + r6)) = sl;
0x000aac8e ldr r3, [sp, 8] | r3 = var_8h;
0x000aac90 ldr.w r7, [r3, r6, lsl 3] | offset_0 = r6 << 3;
| r7 = *((r3 + offset_0));
0x000aac94 mov r1, r7 | r1 = r7;
0x000aac96 bl 0x3e27c | r0 = fcn_0003e27c (r0, r1, r2, r3);
0x000aac9a cmp r0, 0 |
| if (r0 == 0) {
0x000aac9c beq 0xaad74 | goto label_9;
| }
0x000aac9e ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x000aaca0 cmp r5, 1 |
0x000aaca2 add r3, sp, 0x2c | r3 += var_2ch;
0x000aaca4 str.w r2, [r3, r6, lsl 2] | __asm ("str.w r2, [r3, r6, lsl 2]");
| if (r5 != 1) {
0x000aaca8 beq 0xaacca |
0x000aacaa ldr.w r3, [r8] | r3 = *(r8);
0x000aacae ldr r1, [sp, 0x14] | r1 = var_14h;
0x000aacb0 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000aacb2 add r3, r1 | r3 += r1;
0x000aacb4 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000aacb6 ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x000aacb8 cbz r3, 0xaacca | goto label_10;
| }
0x000aacba movs r3, 1 | r3 = 1;
0x000aacbc mov r1, r5 | r1 = r5;
0x000aacbe mov r0, r8 | r0 = r8;
0x000aacc0 str r7, [sp] | *(sp) = r7;
0x000aacc2 str r2, [sp, 0x24] | var_24h = r2;
0x000aacc4 bl 0x2fbbc | fcn_0002fbbc (r0, r1, r2, r3, r4);
0x000aacc8 ldr r2, [sp, 0x24] | r2 = var_24h;
| }
| label_10:
0x000aacca ldr r1, [sp, 0x10] | r1 = var_10h;
0x000aaccc cmp r1, 0 |
| if (r1 == 0) {
0x000aacce beq 0xaadb6 | goto label_11;
| }
0x000aacd0 ldr.w r2, [sb] | r2 = *(sb);
0x000aacd4 mov r3, r7 | r3 = r7;
0x000aacd6 str r1, [sp, 4] | var_4h = r1;
0x000aacd8 mov r0, r8 | r0 = r8;
0x000aacda ldr r1, [sp, 0x18] | r1 = var_18h;
0x000aacdc str r1, [sp] | *(sp) = r1;
0x000aacde ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000aace0 bl 0xa89e4 | fcn_000a89e4 (r0);
| label_0:
0x000aace4 adds r6, 1 | r6++;
0x000aace6 cmp r6, 3 |
0x000aace8 bne 0xaac82 |
| } while (r6 != 3);
0x000aacea ldrd r0, r3, [r4, 0x6c] | __asm ("ldrd r0, r3, [r4, 0x6c]");
0x000aacee ldr r2, [sp, 0x20] | r2 = var_20h;
0x000aacf0 ldr.w r8, [sp, 0x2c] | r8 = var_2ch;
0x000aacf4 cmp r0, r3 |
| if (r0 >= r3) {
0x000aacf6 bge 0xaad64 | goto label_12;
| }
0x000aacf8 add.w r1, r0, r0, lsl 2 | r1 = r0 + (r0 << 2);
0x000aacfc ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x000aacfe adds r6, r0, 1 | r6 = r0 + 1;
0x000aad00 lsls r1, r1, 2 | r1 <<= 2;
0x000aad02 mov.w lr, 0 | lr = 0;
0x000aad06 mov.w ip, 0x71 |
0x000aad0a str r6, [r4, 0x6c] | *((r4 + 0x6c)) = r6;
0x000aad0c adds r7, r3, r1 | r7 = r3 + r1;
0x000aad0e strd r2, r8, [r7, 4] | __asm ("strd r2, r8, [r7, 4]");
0x000aad12 strd r5, lr, [r7, 0xc] | __asm ("strd r5, lr, [r7, 0xc]");
0x000aad16 str.w ip, [r3, r1] | __asm ("str.w ip, [r3, r1]");
| do {
0x000aad1a ldr r3, [r4] | r3 = *(r4);
0x000aad1c ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 == 0) {
0x000aad20 cbnz r3, 0xaad34 |
0x000aad22 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x000aad24 add.w r0, r0, r0, lsl 2 | r0 += (r0 << 2);
0x000aad28 movs r1, 0xfd | r1 = 0xfd;
0x000aad2a movs r2, 3 | r2 = 3;
0x000aad2c add.w r0, r3, r0, lsl 2 | r0 = r3 + (r0 << 2);
0x000aad30 strb r1, [r0, 1] | *((r0 + 1)) = r1;
0x000aad32 str r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
| }
0x000aad34 cmp r6, 0 |
| if (r6 > 0) {
0x000aad36 ble 0xaad4a |
0x000aad38 ldr r3, [r4, 0x68] | r3 = *((r4 + 0x68));
0x000aad3a add.w r6, r6, r6, lsl 2 | r6 += (r6 << 2);
0x000aad3e ldrb.w r2, [sp, 0x38] | r2 = var_38h;
0x000aad42 add.w r3, r3, r6, lsl 2 | r3 += (r6 << 2);
0x000aad46 strh r2, [r3, -0x12] | *((r3 - 0x12)) = r2;
| }
| label_3:
0x000aad4a ldr r2, [pc, 0x9c] |
0x000aad4c ldr r3, [pc, 0x8c] | r3 = *(0xaaddc);
0x000aad4e add r2, pc | r2 = 0x155b3c;
0x000aad50 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000aad52 ldr r2, [r3] | r2 = imp.sinh;
0x000aad54 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000aad56 eors r2, r3 | r2 ^= r3;
0x000aad58 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000aad5c bne 0xaadd4 | goto label_13;
| }
0x000aad5e add sp, 0x44 |
0x000aad60 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x000aad64 mov r3, r8 | r3 = r8;
0x000aad66 movs r1, 0x71 | r1 = 0x71;
0x000aad68 mov r0, r4 | r0 = r4;
0x000aad6a str r5, [sp] | *(sp) = r5;
0x000aad6c bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000aad70 ldr r6, [r4, 0x6c] | r6 = *((r4 + 0x6c));
0x000aad72 b 0xaad1a |
| } while (1);
| label_9:
0x000aad74 cmp r6, 0 |
| if (r6 != 0) {
0x000aad76 bne 0xaace4 | goto label_0;
| }
0x000aad78 ldr r1, [pc, 0x70] |
0x000aad7a mov r3, r7 | r3 = r7;
0x000aad7c ldr.w r2, [sb] | r2 = *(sb);
0x000aad80 mov r0, r8 | r0 = r8;
0x000aad82 movs r6, 1 | r6 = 1;
0x000aad84 add r1, pc | r1 = 0x155b74;
0x000aad86 str r1, [sp] | *(sp) = r1;
0x000aad88 ldr r1, [pc, 0x64] |
0x000aad8a add r1, pc | r1 = 0x155b7e;
0x000aad8c bl 0xa89e4 | fcn_000a89e4 (r0);
0x000aad90 ldr.w r3, [r8, 0x5c] | r3 = *((r8 + 0x5c));
0x000aad94 str r3, [sp, 0x2c] | var_2ch = r3;
0x000aad96 movs r3, 0x10 | r3 = 0x10;
0x000aad98 strb.w r3, [sp, 0x38] | var_38h = r3;
0x000aad9c b 0xaac82 | goto label_1;
| label_8:
0x000aad9e ldr r3, [r7, 0x74] | r3 = *((r7 + 0x74));
| if (r3 == 0) {
0x000aada0 cbz r3, 0xaadc6 | goto label_14;
| }
| label_4:
0x000aada2 mov r0, r7 | r0 = r7;
0x000aada4 str r2, [sp, 8] | var_8h = r2;
0x000aada6 bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x000aadaa ldr r2, [sp, 8] | r2 = var_8h;
0x000aadac mov r4, r0 | r4 = r0;
0x000aadae cmp r0, 0 |
| if (r0 != 0) {
0x000aadb0 bne.w 0xaac5c | goto label_2;
| }
0x000aadb4 b 0xaad4a | goto label_3;
| label_11:
0x000aadb6 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000aadb8 movs r1, 0x91 | r1 = 0x91;
0x000aadba mov r0, r4 | r0 = r4;
0x000aadbc str r3, [sp] | *(sp) = r3;
0x000aadbe mov r3, r5 | r3 = r5;
0x000aadc0 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000aadc4 b 0xaace4 | goto label_0;
| label_14:
0x000aadc6 ldr.w r3, [fp, 0x50] | r3 = *(arg_50h);
0x000aadca lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000aadcc itt pl |
| if (r3 < r3) {
0x000aadce movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000aadd0 strbpl r3, [r7, 0x17] | *((r7 + 0x17)) = r3;
| }
0x000aadd2 b 0xaada2 | goto label_4;
| label_13:
0x000aadd4 blx 0x883c | fcn_0000883c ();
0x000aadd8 b 0xaae8c |
0x000aae8c cmp r0, 0 |
| if (r0 == 0) {
0x000aae8e beq 0xaaf2c | goto label_15;
| }
0x000aae90 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000aae92 movs r4, 0 | r4 = 0;
0x000aae94 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000aae96 cmp r0, r2 |
| if (r0 == r2) {
0x000aae98 beq 0xaaea4 | goto label_7;
| }
| do {
0x000aae9a ldr r5, [r3, 0x1c] | r5 = *((r3 + 0x1c));
0x000aae9c adds r4, 1 | r4++;
0x000aae9e adds r3, 0x10 | r3 += 0x10;
0x000aaea0 cmp r0, r5 |
0x000aaea2 bne 0xaae9a |
| } while (r0 != r5);
| label_7:
0x000aaea4 mov r2, r4 | r2 = r4;
0x000aaea6 movs r1, 0 | r1 = 0;
0x000aaea8 mov r0, r6 | r0 = r6;
0x000aaeaa bl 0x57398 | fcn_00057398 (r0, r1, r2);
0x000aaeae ldr r5, [r6, 0x28] | r5 = *((r6 + 0x28));
0x000aaeb0 adds r3, r5, 3 | r3 = r5 + 3;
0x000aaeb2 str r3, [r6, 0x28] | *((r6 + 0x28)) = r3;
| if (r7 == 0) {
0x000aaeb4 cbz r7, 0xaaf08 | goto label_16;
| }
0x000aaeb6 ldr r3, [pc, 0x80] |
0x000aaeb8 mov r2, r5 | r2 = r5;
0x000aaeba mov r1, r4 | r1 = r4;
0x000aaebc mov r0, r6 | r0 = r6;
0x000aaebe add r3, pc | r3 = 0x155dfc;
0x000aaec0 str r3, [sp] | *(sp) = r3;
0x000aaec2 ldr r3, [r7] | r3 = *(r7);
0x000aaec4 bl 0xaac30 | fcn_000aac30 (r0, r1, r2, r3, r4, r5, r6);
| label_5:
0x000aaec8 ldr r0, [r6, 0x2c] | r0 = *((r6 + 0x2c));
0x000aaeca mov r3, r5 | r3 = r5;
0x000aaecc mov r2, r7 | r2 = r7;
0x000aaece mov r1, r8 | r1 = r8;
0x000aaed0 adds r0, 1 | r0++;
0x000aaed2 str r0, [sp] | *(sp) = r0;
0x000aaed4 ldr r0, [r6, 0x28] | r0 = *((r6 + 0x28));
0x000aaed6 str r0, [sp, 4] | var_4h = r0;
0x000aaed8 mov r0, r6 | r0 = r6;
0x000aaeda bl 0x3d06c | fcn_0003d06c (r0, r1, r2, r3, r4, r5, r6);
0x000aaede ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x000aaee0 cbz r0, 0xaaef4 |
| while (r0 != 0) {
0x000aaee2 movs r3, 0 | r3 = 0;
0x000aaee4 mov r2, r4 | r2 = r4;
0x000aaee6 movs r1, 0x96 | r1 = 0x96;
0x000aaee8 str r3, [sp] | *(sp) = r3;
0x000aaeea bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000aaeee add sp, 8 |
0x000aaef0 pop.w {r4, r5, r6, r7, r8, pc} |
0x000aaef4 ldr r3, [r6, 0x74] | r3 = *((r6 + 0x74));
| if (r3 == 0) {
0x000aaef6 cbz r3, 0xaaf1e | goto label_17;
| }
| label_6:
0x000aaef8 mov r0, r6 | r0 = r6;
0x000aaefa bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000aaefe cmp r0, 0 |
0x000aaf00 bne 0xaaee2 |
| }
0x000aaf02 add sp, 8 |
0x000aaf04 pop.w {r4, r5, r6, r7, r8, pc} |
| label_16:
0x000aaf08 ldr r3, [pc, 0x30] |
0x000aaf0a mov r2, r5 | r2 = r5;
0x000aaf0c mov r1, r4 | r1 = r4;
0x000aaf0e mov r0, r6 | r0 = r6;
0x000aaf10 add r3, pc | r3 = 0x155e50;
0x000aaf12 str r3, [sp] | *(sp) = r3;
0x000aaf14 ldr.w r3, [r8] | r3 = *(r8);
0x000aaf18 bl 0xaac30 | fcn_000aac30 (r0, r1, r2, r3, r4, r5, r6);
0x000aaf1c b 0xaaec8 | goto label_5;
| label_17:
0x000aaf1e ldr r3, [r6] | r3 = *(r6);
0x000aaf20 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000aaf22 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000aaf24 itt pl |
| if (r3 < r3) {
0x000aaf26 movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000aaf28 strbpl r3, [r6, 0x17] | *((r6 + 0x17)) = r3;
| }
0x000aaf2a b 0xaaef8 | goto label_6;
| label_15:
0x000aaf2c mov.w r4, 0x8000 |
0x000aaf30 movt r4, 0xffff | r4 = 0x-8000;
0x000aaf34 b 0xaaea4 | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xaaf40 */
| #include <stdint.h>
|
; (fcn) fcn.000aaf40 () | void fcn_000aaf40 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000aaf40 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000aaf44 mov r8, r2 | r8 = r2;
0x000aaf46 ldr r2, [pc, 0x158] |
0x000aaf48 sub sp, 0x14 |
0x000aaf4a mov r5, r0 | r5 = r0;
0x000aaf4c mov r6, r1 | r6 = r1;
0x000aaf4e ldr r3, [pc, 0x154] | r3 = *(0xab0a6);
0x000aaf50 add r2, pc | r2 = 0x155ff6;
0x000aaf52 ldr r7, [r0] | r7 = *(r0);
0x000aaf54 ldr r3, [r2, r3] |
0x000aaf56 ldr r3, [r3] | r3 = imp.sinh;
0x000aaf58 str r3, [sp, 0xc] | var_ch = r3;
0x000aaf5a mov.w r3, 0 | r3 = 0;
0x000aaf5e bl 0x89f38 | r0 = fcn_00089f38 (r0);
0x000aaf62 cmp r0, 0 |
| if (r0 != 0) {
0x000aaf64 bne 0xab012 | goto label_2;
| }
0x000aaf66 cmp r6, 0 |
| if (r6 == 0) {
0x000aaf68 beq 0xab02c | goto label_6;
| }
0x000aaf6a ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
| if (r3 == 0) {
0x000aaf6e cbnz r3, 0xaaf94 |
0x000aaf70 mov r1, r6 | r1 = r6;
0x000aaf72 mov r0, r7 | r0 = r7;
0x000aaf74 bl 0x22a34 | r0 = fcn_00022a34 (r0, r1);
0x000aaf78 mov r4, r0 | r4 = r0;
0x000aaf7a mov r0, r7 | r0 = r7;
0x000aaf7c mov r1, r4 | r1 = r4;
0x000aaf7e bl 0x1b83c | r0 = fcn_0001b83c (r0, r1);
0x000aaf82 mov sb, r0 | sb = r0;
| if (r4 != 0) {
0x000aaf84 cbz r4, 0xaaf8e |
0x000aaf86 mov r1, r4 | r1 = r4;
0x000aaf88 mov r0, r7 | r0 = r7;
0x000aaf8a bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000aaf8e cmp.w sb, 0 |
| if (sb >= 0) {
0x000aaf92 bge 0xab05a | goto label_7;
| }
| }
0x000aaf94 add r3, sp, 8 | r3 += var_8h;
0x000aaf96 mov r1, r6 | r1 = r6;
0x000aaf98 mov r2, r8 | r2 = r8;
0x000aaf9a mov r0, r5 | r0 = r5;
0x000aaf9c bl 0x241a8 | r0 = fcn_000241a8 (r0, r1, r2, r3);
0x000aafa0 cmp r0, 0 |
| if (r0 < 0) {
0x000aafa2 blt 0xaafde | goto label_0;
| }
0x000aafa4 ldr.w r6, [r8, 4] | r6 = *((r8 + 4));
| if (r6 != 0) {
0x000aafa8 cbz r6, 0xaafb0 |
0x000aafaa ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000aafac lsls r0, r0, 4 | r0 <<= 4;
0x000aafae ldr r6, [r3, r0] | r6 = *((r3 + r0));
| }
| label_5:
0x000aafb0 ldr r1, [sp, 8] | r1 = var_8h;
0x000aafb2 mov r0, r7 | r0 = r7;
0x000aafb4 bl 0x22a34 | r0 = fcn_00022a34 (r0, r1);
0x000aafb8 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x000aafba cbz r0, 0xaafde | goto label_0;
| }
0x000aafbc mov r1, r0 | r1 = r0;
0x000aafbe mov r2, r6 | r2 = r6;
0x000aafc0 mov r0, r7 | r0 = r7;
0x000aafc2 bl 0x1cadc | r0 = fcn_0001cadc (r0, r1, r2, r3);
0x000aafc6 mov r8, r0 | r8 = r0;
0x000aafc8 cmp r0, 0 |
| if (r0 == 0) {
0x000aafca beq 0xab080 | goto label_8;
| }
0x000aafcc ldr r1, [r0, 0xc] | r1 = *((r0 + 0xc));
0x000aafce mov r2, r0 | r2 = r0;
0x000aafd0 mov r0, r5 | r0 = r5;
0x000aafd2 bl 0xaae7c | fcn_000aae7c (r0, r1, r2);
| label_4:
0x000aafd6 mov r1, r4 | r1 = r4;
0x000aafd8 mov r0, r7 | r0 = r7;
0x000aafda bl 0x16808 | fcn_00016808 (r0, r1);
| do {
| label_0:
0x000aafde ldrb.w r3, [r7, 0x60] | r3 = *((r7 + 0x60));
| if (r3 == 0) {
0x000aafe2 cbnz r3, 0xab012 |
0x000aafe4 ldr r0, [r5, 8] | r0 = *((r5 + 8));
| if (r0 == 0) {
0x000aafe6 cbz r0, 0xab04a | goto label_9;
| }
| label_1:
0x000aafe8 ldrd r3, r2, [r0, 0x6c] | __asm ("ldrd r3, r2, [r0, 0x6c]");
0x000aafec cmp r3, r2 |
| if (r3 >= r2) {
0x000aafee bge 0xab064 | goto label_10;
| }
0x000aaff0 add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x000aaff4 ldr r4, [r0, 0x68] | r4 = *((r0 + 0x68));
0x000aaff6 adds r3, 1 | r3++;
0x000aaff8 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000aaffc lsls r2, r2, 2 | r2 <<= 2;
0x000aaffe str r3, [r0, 0x6c] | *((r0 + 0x6c)) = r3;
0x000ab000 movs r0, 0xa6 | r0 = 0xa6;
0x000ab002 adds r3, r4, r2 | r3 = r4 + r2;
0x000ab004 str r0, [r4, r2] | *((r4 + r2)) = r0;
0x000ab006 adds r2, r3, 4 | r2 = r3 + 4;
0x000ab008 movs r1, 0 | r1 = 0;
0x000ab00a vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000ab00e strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| }
| label_2:
0x000ab012 ldr r2, [pc, 0x94] |
0x000ab014 ldr r3, [pc, 0x8c] | r3 = *(0xab0a4);
0x000ab016 add r2, pc | r2 = 0x1560c4;
0x000ab018 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000ab01a ldr r2, [r3] | r2 = imp.sinh;
0x000ab01c ldr r3, [sp, 0xc] | r3 = var_ch;
0x000ab01e eors r2, r3 | r2 ^= r3;
0x000ab020 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ab024 bne 0xab09c | goto label_11;
| }
0x000ab026 add sp, 0x14 |
0x000ab028 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_6:
0x000ab02c ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x000ab02e mov r4, r0 | r4 = r0;
0x000ab030 cmp r3, 0 |
0x000ab032 ble 0xaafde |
| } while (r3 <= 0);
| do {
0x000ab034 cmp r4, 1 |
| if (r4 != 1) {
0x000ab036 beq 0xab042 |
0x000ab038 mov r1, r4 | r1 = r4;
0x000ab03a mov r0, r5 | r0 = r5;
0x000ab03c bl 0xaadf4 | fcn_000aadf4 (r0, r1);
0x000ab040 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
| }
0x000ab042 adds r4, 1 | r4++;
0x000ab044 cmp r3, r4 |
0x000ab046 bgt 0xab034 |
| } while (r3 > r4);
0x000ab048 b 0xaafde | goto label_0;
| label_9:
0x000ab04a ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
| if (r3 == 0) {
0x000ab04c cbz r3, 0xab072 | goto label_12;
| }
| label_3:
0x000ab04e mov r0, r5 | r0 = r5;
0x000ab050 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000ab054 cmp r0, 0 |
| if (r0 != 0) {
0x000ab056 bne 0xaafe8 | goto label_1;
| }
0x000ab058 b 0xab012 | goto label_2;
| label_7:
0x000ab05a mov r1, sb | r1 = sb;
0x000ab05c mov r0, r5 | r0 = r5;
0x000ab05e bl 0xaadf4 | fcn_000aadf4 (r0, r1);
0x000ab062 b 0xaafde | goto label_0;
| label_10:
0x000ab064 movs r3, 0 | r3 = 0;
0x000ab066 movs r1, 0xa6 | r1 = 0xa6;
0x000ab068 mov r2, r3 | r2 = r3;
0x000ab06a str r3, [sp] | *(sp) = r3;
0x000ab06c bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000ab070 b 0xab012 | goto label_2;
| label_12:
0x000ab072 ldr r3, [r5] | r3 = *(r5);
0x000ab074 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000ab076 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000ab078 itt pl |
| if (r3 < r3) {
0x000ab07a movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000ab07c strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000ab07e b 0xab04e | goto label_3;
| label_8:
0x000ab080 mov r1, r0 | r1 = r0;
0x000ab082 mov r3, r6 | r3 = r6;
0x000ab084 mov r2, r4 | r2 = r4;
0x000ab086 mov r0, r5 | r0 = r5;
0x000ab088 bl 0x8a750 | r0 = fcn_0008a750 (r0, r1, r2, r3, r4, r5);
0x000ab08c mov r1, r0 | r1 = r0;
0x000ab08e cmp r0, 0 |
| if (r0 == 0) {
0x000ab090 beq 0xaafd6 | goto label_4;
| }
0x000ab092 mov r2, r8 | r2 = r8;
0x000ab094 mov r0, r5 | r0 = r5;
0x000ab096 bl 0xaae7c | fcn_000aae7c (r0, r1, r2);
0x000ab09a b 0xaafd6 | goto label_4;
| label_11:
0x000ab09c blx 0x883c | fcn_0000883c ();
| if (r0 <= 0) {
0x000ab0a0 ble 0xab134 | void (*0xab134)() ();
| }
0x000ab0a2 movs r1, r0 | r1 = r0;
0x000ab0a4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000ab0a6 movs r0, r0 |
| if (r0 > r0) {
0x000ab0a8 bgt 0xaafb0 | goto label_5;
| }
0x000ab0aa movs r1, r0 | r1 = r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xab0ac */
| #include <stdint.h>
|
; (fcn) fcn.000ab0ac () | void fcn_000ab0ac (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000ab0ac push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab0b0 sub sp, 0x24 |
0x000ab0b2 ldr r5, [r0] | r5 = *(r0);
0x000ab0b4 ldrb.w r4, [r5, 0x57] | r4 = *((r5 + 0x57));
| if (r4 != 0) {
0x000ab0b8 cbz r4, 0xab0c6 |
0x000ab0ba mov r0, r5 | r0 = r5;
0x000ab0bc add sp, 0x24 |
0x000ab0be pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab0c2 b.w 0x1a3c8 | void (*0x1a3c8)() ();
| }
0x000ab0c6 mov r7, r1 | r7 = r1;
0x000ab0c8 mov r8, r2 | r8 = r2;
0x000ab0ca add.w r2, r1, 8 | r2 = r1 + 8;
0x000ab0ce mov r1, r4 | r1 = r4;
0x000ab0d0 mov r6, r0 | r6 = r0;
0x000ab0d2 bl 0x8a9bc | r0 = fcn_0008a9bc (r0, r1, r2);
0x000ab0d6 mov sb, r0 | sb = r0;
| if (r0 == 0) {
0x000ab0d8 cbz r0, 0xab142 | goto label_9;
| }
0x000ab0da ldr r2, [r0, 0x3c] | r2 = *((r0 + 0x3c));
0x000ab0dc ldr r3, [r6] | r3 = *(r6);
0x000ab0de cmp r2, 0 |
| if (r2 == 0) {
0x000ab0e0 beq.w 0xab394 | goto label_10;
| }
0x000ab0e4 ldr r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x000ab0e6 ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x000ab0e8 cmp r2, r3 |
| if (r2 == r3) {
0x000ab0ea beq.w 0xab326 | goto label_11;
| }
0x000ab0ee subs r1, 4 | r1 -= 4;
0x000ab0f0 movs r3, 0x10 | r3 = 0x10;
0x000ab0f2 mov ip, r5 |
| do {
0x000ab0f4 mov r0, r3 | r0 = r3;
0x000ab0f6 adds r3, 0x10 | r3 += 0x10;
0x000ab0f8 ldr r5, [r1, r3] | r5 = *((r1 + r3));
0x000ab0fa adds r4, 1 | r4++;
0x000ab0fc cmp r2, r5 |
0x000ab0fe bne 0xab0f4 |
| } while (r2 != r5);
0x000ab100 mov r5, ip | r5 = ip;
| label_4:
0x000ab102 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000ab104 mov r1, r8 | r1 = r8;
0x000ab106 ldr.w sl, [r3, r0] | sl = *((r3 + r0));
0x000ab10a mov r0, r5 | r0 = r5;
0x000ab10c bl 0x22a34 | r0 = fcn_00022a34 (r0, r1);
0x000ab110 mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x000ab112 cbz r0, 0xab142 | goto label_9;
| }
0x000ab114 mov r1, r0 | r1 = r0;
0x000ab116 mov r2, sl | r2 = sl;
0x000ab118 mov r0, r5 | r0 = r5;
0x000ab11a bl 0x3e27c | r0 = fcn_0003e27c (r0, r1, r2, r3);
0x000ab11e cbz r0, 0xab150 |
| while (r0 != 0) {
| label_0:
0x000ab120 ldr r1, [pc, 0x324] |
0x000ab122 mov r0, r6 | r0 = r6;
0x000ab124 mov r2, r8 | r2 = r8;
0x000ab126 add r1, pc | r1 = 0x156572;
0x000ab128 bl 0x21598 | fcn_00021598 (r0, r1);
0x000ab12c mov r1, r7 | r1 = r7;
0x000ab12e mov r0, r5 | r0 = r5;
0x000ab130 bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
| label_1:
0x000ab134 mov r1, r8 | r1 = r8;
0x000ab136 mov r0, r5 | r0 = r5;
0x000ab138 add sp, 0x24 |
0x000ab13a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab13e b.w 0x16808 | void (*0x16808)() ();
| label_9:
0x000ab142 mov r1, r7 | r1 = r7;
0x000ab144 mov r0, r5 | r0 = r5;
0x000ab146 add sp, 0x24 |
0x000ab148 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab14c b.w 0x1a3c8 | void (*0x1a3c8)() ();
0x000ab150 mov r2, sl | r2 = sl;
0x000ab152 mov r1, r8 | r1 = r8;
0x000ab154 mov r0, r5 | r0 = r5;
0x000ab156 bl 0x1cadc | r0 = fcn_0001cadc (r0, r1, r2, r3);
0x000ab15a mov fp, r0 |
0x000ab15c cmp r0, 0 |
0x000ab15e bne 0xab120 |
| }
0x000ab160 mov r2, r8 | r2 = r8;
0x000ab162 mov r1, sb | r1 = sb;
0x000ab164 mov r0, r5 | r0 = r5;
0x000ab166 bl 0x17b8c | r0 = fcn_00017b8c (r0, r1, r2);
0x000ab16a cmp r0, 0 |
| if (r0 != 0) {
0x000ab16c bne 0xab120 | goto label_0;
| }
0x000ab16e mov r1, sb | r1 = sb;
0x000ab170 mov r0, r6 | r0 = r6;
0x000ab172 bl 0x2476c | r0 = fcn_0002476c (r0, r1);
0x000ab176 cmp r0, 0 |
| if (r0 != 0) {
0x000ab178 bne.w 0xab38a | goto label_6;
| }
0x000ab17c ldr r2, [pc, 0x2cc] |
0x000ab17e mov r3, r8 | r3 = r8;
0x000ab180 mov r1, r8 | r1 = r8;
0x000ab182 mov r0, r6 | r0 = r6;
0x000ab184 add r2, pc | r2 = 0x1565d4;
0x000ab186 bl 0x3e5a4 | r0 = fcn_0003e5a4 (r0, r1, r2, r3);
0x000ab18a cmp r0, 0 |
| if (r0 != 0) {
0x000ab18c bne.w 0xab38a | goto label_6;
| }
0x000ab190 ldrb.w r2, [sb, 0x2b] | r2 = *((sb + 0x2b));
0x000ab194 ldr.w r3, [sb] | r3 = *(sb);
0x000ab198 cmp r2, 2 |
| if (r2 == 2) {
0x000ab19a beq.w 0xab3a4 | goto label_12;
| }
0x000ab19e str r0, [sp] | *(sp) = r0;
0x000ab1a0 mov r2, sl | r2 = sl;
0x000ab1a2 movs r1, 0x1a | r1 = 0x1a;
0x000ab1a4 mov r0, r6 | r0 = r6;
0x000ab1a6 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000ab1aa cmp r0, 0 |
| if (r0 != 0) {
0x000ab1ac bne.w 0xab38a | goto label_6;
| }
0x000ab1b0 mov r1, sb | r1 = sb;
0x000ab1b2 mov r0, r6 | r0 = r6;
0x000ab1b4 bl 0x774c4 | fcn_000774c4 (r0, r1);
0x000ab1b8 str r0, [sp, 0x1c] | var_1ch = r0;
0x000ab1ba cmp r0, 0 |
| if (r0 != 0) {
0x000ab1bc bne.w 0xab38a | goto label_6;
| }
0x000ab1c0 ldrb.w r3, [sb, 0x2b] | r3 = *((sb + 0x2b));
0x000ab1c4 cmp r3, 1 |
| if (r3 == 1) {
0x000ab1c6 beq.w 0xab3ca | goto label_13;
| }
| label_7:
0x000ab1ca ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000ab1cc str r3, [sp, 0x10] | var_10h = r3;
0x000ab1ce cmp r3, 0 |
| if (r3 == 0) {
0x000ab1d0 beq.w 0xab3ba | goto label_14;
| }
| label_5:
0x000ab1d4 ldr r3, [r6, 0x74] | r3 = *((r6 + 0x74));
0x000ab1d6 movs r2, 1 | r2 = 1;
0x000ab1d8 cmp r3, 0 |
0x000ab1da it eq |
| if (r3 != 0) {
0x000ab1dc moveq r3, r6 | r3 = r6;
| }
0x000ab1de strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
0x000ab1e0 ldr.w r3, [sb] | r3 = *(sb);
0x000ab1e4 ldrb r2, [r3] | r2 = *(r3);
0x000ab1e6 str r3, [sp, 0x18] | var_18h = r3;
0x000ab1e8 cmp.w r3, -1 |
0x000ab1ec it ne |
| if (r3 != -1) {
0x000ab1ee cmpne r2, 0 | __asm ("cmpne r2, 0");
| }
| if (r3 == -1) {
0x000ab1f0 beq 0xab212 | goto label_15;
| }
0x000ab1f2 ldr r0, [sp, 0x1c] | r0 = var_1ch;
| do {
0x000ab1f4 cmp r2, 0xbf |
0x000ab1f6 ldrb r1, [r3, 1] | r1 = *((r3 + 1));
0x000ab1f8 add.w r3, r3, 1 | r3++;
| if (r2 > 0xbf) {
0x000ab1fc bhi.w 0xab30e | goto label_16;
| }
| label_2:
0x000ab200 mov r2, r1 | r2 = r1;
| label_3:
0x000ab202 cmp.w r3, -1 |
0x000ab206 it ne |
| if (r3 != -1) {
0x000ab208 cmpne r2, 0 | __asm ("cmpne r2, 0");
| }
0x000ab20a add.w r0, r0, 1 | r0++;
0x000ab20e bne 0xab1f4 |
| } while (r3 != -1);
0x000ab210 str r0, [sp, 0x1c] | var_1ch = r0;
| label_15:
0x000ab212 sub.w r2, r4, 1 | r2 = r4 - 1;
0x000ab216 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000ab218 ldr r1, [pc, 0x234] |
0x000ab21a clz r2, r2 | r2 &= r2;
0x000ab21e lsrs r2, r2, 5 | r2 >>= 5;
0x000ab220 mov r0, r6 | r0 = r6;
0x000ab222 str r3, [sp, 0xc] | var_ch = r3;
0x000ab224 add r1, pc | r1 = 0x156678;
0x000ab226 strd r3, r8, [sp] | __asm ("strd r3, r8, [sp]");
0x000ab228 subs r0, 0 |
0x000ab22a str r2, [sp, 0x14] | var_14h = r2;
0x000ab22c mov r3, sl | r3 = sl;
0x000ab22e str r2, [sp, 8] | var_8h = r2;
0x000ab230 mov r2, sl | r2 = sl;
0x000ab232 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab236 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000ab238 mov r0, r6 | r0 = r6;
0x000ab23a ldr r3, [sp, 0x18] | r3 = var_18h;
0x000ab23c ldr r1, [pc, 0x214] |
0x000ab23e str r2, [sp, 8] | var_8h = r2;
0x000ab240 mov r2, sl | r2 = sl;
0x000ab242 str r3, [sp, 0xc] | var_ch = r3;
0x000ab244 mov r3, r8 | r3 = r8;
0x000ab246 add r1, pc | r1 = 0x15669e;
0x000ab248 strd r8, r8, [sp] | __asm ("strd r8, r8, [sp]");
0x000ab24c bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab250 ldr r1, [pc, 0x204] |
0x000ab252 mov r2, sl | r2 = sl;
0x000ab254 mov r0, r5 | r0 = r5;
0x000ab256 add r1, pc | r1 = 0x1566b2;
0x000ab258 bl 0x3e27c | r0 = fcn_0003e27c (r0, r1, r2, r3);
| if (r0 != 0) {
0x000ab25c cbz r0, 0xab272 |
0x000ab25e ldr.w r3, [sb] | r3 = *(sb);
0x000ab262 mov r2, sl | r2 = sl;
0x000ab264 ldr r1, [pc, 0x1f4] |
0x000ab266 mov r0, r6 | r0 = r6;
0x000ab268 str r3, [sp] | *(sp) = r3;
0x000ab26a mov r3, r8 | r3 = r8;
0x000ab26c add r1, pc | r1 = 0x1566cc;
0x000ab26e bl 0xa89e4 | fcn_000a89e4 (r0);
| }
0x000ab272 cmp r4, 1 |
| if (r4 == 1) {
0x000ab274 beq 0xab32a | goto label_17;
| }
0x000ab276 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000ab278 mov r2, sl | r2 = sl;
0x000ab27a ldr r1, [pc, 0x1e4] |
0x000ab27c mov r0, r6 | r0 = r6;
0x000ab27e strd sl, r8, [sp, 8] | __asm ("strd sl, r8, [var_ch]");
0x000ab282 strd r8, r3, [sp] | __asm ("strd r8, r3, [sp]");
0x000ab286 add r1, pc | r1 = 0x1566ec;
0x000ab288 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab28c cmp.w fp, 0 |
| if (fp == 0) {
0x000ab290 beq.w 0xab3ec | goto label_18;
| }
0x000ab294 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x000ab296 mov r2, r8 | r2 = r8;
0x000ab298 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ab29a add.w sb, r3, 1 | sb = r3 + 1;
0x000ab29e mov r1, sb | r1 = sb;
0x000ab2a0 str.w sb, [r6, 0x2c] | __asm ("str.w sb, [r6, 0x2c]");
0x000ab2a4 bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000ab2a8 mov r2, sb | r2 = sb;
0x000ab2aa mvn r3, 0xa | r3 = ~0xa;
0x000ab2ae mov.w sb, 0 | sb = 0;
0x000ab2b2 movs r1, 0xb0 | r1 = 0xb0;
0x000ab2b4 str r3, [sp, 8] | var_8h = r3;
0x000ab2b6 mov r3, sb | r3 = sb;
0x000ab2b8 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ab2ba str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x000ab2be str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000ab2c2 bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000ab2c6 mov r1, r4 | r1 = r4;
0x000ab2c8 mov r0, r6 | r0 = r6;
0x000ab2ca movs r2, 1 | r2 = 1;
0x000ab2cc bl 0x2f2d0 | fcn_0002f2d0 (r0, r1, r2);
0x000ab2d0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ab2d2 mov r2, sl | r2 = sl;
0x000ab2d4 ldr r1, [pc, 0x18c] |
0x000ab2d6 mov r0, r6 | r0 = r6;
0x000ab2d8 str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h]");
0x000ab2dc str r3, [sp] | *(sp) = r3;
0x000ab2de ldr r3, [pc, 0x188] |
0x000ab2e0 add r1, pc | r1 = 0x156748;
0x000ab2e2 add r3, pc | r3 = 0x156750;
0x000ab2e4 str r3, [sp, 4] | var_4h = r3;
0x000ab2e6 movs r3, 1 | r3 = 1;
0x000ab2e8 strb r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x000ab2ea mov r3, sl | r3 = sl;
0x000ab2ec bl 0xa89e4 | fcn_000a89e4 (r0);
| label_8:
0x000ab2f0 movs r3, 0 | r3 = 0;
0x000ab2f2 ldr r1, [pc, 0x178] |
0x000ab2f4 str r3, [sp] | *(sp) = r3;
0x000ab2f6 mov r0, r6 | r0 = r6;
0x000ab2f8 ldr r3, [pc, 0x174] |
0x000ab2fa mov r2, sl | r2 = sl;
0x000ab2fc add r1, pc | r1 = 0x15676e;
0x000ab2fe add r3, pc | r3 = 0x156772;
0x000ab300 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab304 mov r1, r7 | r1 = r7;
0x000ab306 mov r0, r5 | r0 = r5;
0x000ab308 bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x000ab30c b 0xab134 | goto label_1;
| label_16:
0x000ab30e and r2, r1, 0xc0 | r2 = r1 & 0xc0;
0x000ab312 cmp r2, 0x80 |
| if (r2 != 0x80) {
0x000ab314 bne.w 0xab200 | goto label_2;
| }
| do {
0x000ab318 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000ab31c and r1, r2, 0xc0 | r1 = r2 & 0xc0;
0x000ab320 cmp r1, 0x80 |
0x000ab322 beq 0xab318 |
| } while (r1 == 0x80);
0x000ab324 b 0xab202 | goto label_3;
| label_11:
0x000ab326 mov r0, r4 | r0 = r4;
0x000ab328 b 0xab102 | goto label_4;
| label_17:
0x000ab32a cmp.w fp, 0 |
| if (fp == 0) {
0x000ab32e beq 0xab418 | goto label_19;
| }
0x000ab330 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x000ab332 mov r2, r8 | r2 = r8;
0x000ab334 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ab336 add.w sb, r3, 1 | sb = r3 + 1;
0x000ab33a mov r1, sb | r1 = sb;
0x000ab33c str.w sb, [r6, 0x2c] | __asm ("str.w sb, [r6, 0x2c]");
0x000ab340 bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000ab344 mov r2, sb | r2 = sb;
0x000ab346 mvn r3, 0xa | r3 = ~0xa;
0x000ab34a mov.w sb, 0 | sb = 0;
0x000ab34e movs r1, 0xb0 | r1 = 0xb0;
0x000ab350 str r3, [sp, 8] | var_8h = r3;
0x000ab352 mov r3, sb | r3 = sb;
0x000ab354 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000ab356 str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x000ab35a str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000ab35e bl 0x2e4d0 | fcn_0002e4d0 (r0, r1, r2, r3, r4, r5);
0x000ab362 mov r2, r4 | r2 = r4;
0x000ab364 mov r1, r4 | r1 = r4;
0x000ab366 mov r0, r6 | r0 = r6;
0x000ab368 bl 0x2f2d0 | fcn_0002f2d0 (r0, r1, r2);
0x000ab36c ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ab36e mov r0, r6 | r0 = r6;
0x000ab370 strb r4, [r6, 0x10] | *((r6 + 0x10)) = r4;
0x000ab372 mov r2, sl | r2 = sl;
0x000ab374 ldr r1, [pc, 0xfc] |
0x000ab376 str r3, [sp] | *(sp) = r3;
0x000ab378 ldr r3, [pc, 0xfc] |
0x000ab37a add r1, pc | r1 = 0x1567f2;
0x000ab37c str.w sb, [sp, 8] | __asm ("str.w sb, [var_8h]");
0x000ab380 add r3, pc | r3 = 0x1567fc;
0x000ab382 str r3, [sp, 4] | var_4h = r3;
0x000ab384 mov r3, sl | r3 = sl;
0x000ab386 bl 0xa89e4 | fcn_000a89e4 (r0);
| label_6:
0x000ab38a mov r1, r7 | r1 = r7;
0x000ab38c mov r0, r5 | r0 = r5;
0x000ab38e bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x000ab392 b 0xab134 | goto label_1;
| label_10:
0x000ab394 movs r0, 0 | r0 = 0;
0x000ab396 mov.w r4, 0x8000 | r4 = 0x8000;
0x000ab39a movt r0, 0xfff8 | r0 = (r0 & 0xFFFF) | 0xfff80000;
0x000ab39e movt r4, 0xffff | r4 = (r4 & 0xFFFF) | 0xffff0000;
0x000ab3a2 b 0xab102 | goto label_4;
| label_12:
0x000ab3a4 ldr r1, [pc, 0xd4] |
0x000ab3a6 mov r0, r6 | r0 = r6;
0x000ab3a8 mov r2, r3 | r2 = r3;
0x000ab3aa add r1, pc | r1 = 0x15682a;
0x000ab3ac bl 0x21598 | fcn_00021598 (r0, r1);
0x000ab3b0 mov r1, r7 | r1 = r7;
0x000ab3b2 mov r0, r5 | r0 = r5;
0x000ab3b4 bl 0x1a3c8 | fcn_0001a3c8 (r0, r1);
0x000ab3b8 b 0xab134 | goto label_1;
| label_14:
0x000ab3ba mov r0, r6 | r0 = r6;
0x000ab3bc bl 0x2dd00 | fcn_0002dd00 (r0, r1);
0x000ab3c0 str r0, [sp, 0x10] | var_10h = r0;
0x000ab3c2 cmp r0, 0 |
| if (r0 != 0) {
0x000ab3c4 bne.w 0xab1d4 | goto label_5;
| }
0x000ab3c8 b 0xab38a | goto label_6;
| label_13:
0x000ab3ca ldr.w r3, [sb, 0x34] | r3 = *((sb + 0x34));
| if (r3 != 0) {
0x000ab3ce cbnz r3, 0xab3d8 | goto label_20;
| }
0x000ab3d0 b 0xab442 | goto label_21;
| do {
0x000ab3d2 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x000ab3d4 cmp r3, 0 |
| if (r3 == 0) {
0x000ab3d6 beq 0xab442 | goto label_21;
| }
| label_20:
0x000ab3d8 ldr r2, [r3] | r2 = *(r3);
0x000ab3da cmp r5, r2 |
0x000ab3dc bne 0xab3d2 |
| } while (r5 != r2);
0x000ab3de ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000ab3e0 ldr r2, [r2] | r2 = *(r2);
0x000ab3e2 ldr r2, [r2, 0x4c] | r2 = *((r2 + 0x4c));
0x000ab3e4 cmp r2, 0 |
0x000ab3e6 it ne |
| if (r2 == 0) {
0x000ab3e8 movne fp, r3 |
| }
0x000ab3ea b 0xab1ca | goto label_7;
| label_18:
0x000ab3ec mov r1, r4 | r1 = r4;
0x000ab3ee mov r0, r6 | r0 = r6;
0x000ab3f0 movs r2, 1 | r2 = 1;
0x000ab3f2 bl 0x2f2d0 | fcn_0002f2d0 (r0, r1, r2);
0x000ab3f6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ab3f8 mov r2, sl | r2 = sl;
0x000ab3fa ldr r1, [pc, 0x84] |
0x000ab3fc mov r0, r6 | r0 = r6;
0x000ab3fe str.w fp, [sp, 8] | __asm ("str.w fp, [var_8h]");
0x000ab402 str r3, [sp] | *(sp) = r3;
0x000ab404 ldr r3, [pc, 0x7c] |
0x000ab406 add r1, pc | r1 = 0x15688c;
0x000ab408 add r3, pc | r3 = 0x156890;
0x000ab40a str r3, [sp, 4] | var_4h = r3;
0x000ab40c movs r3, 1 | r3 = 1;
0x000ab40e strb r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x000ab410 mov r3, sl | r3 = sl;
0x000ab412 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab416 b 0xab2f0 | goto label_8;
| label_19:
0x000ab418 mov r2, r4 | r2 = r4;
0x000ab41a mov r1, r4 | r1 = r4;
0x000ab41c mov r0, r6 | r0 = r6;
0x000ab41e bl 0x2f2d0 | fcn_0002f2d0 (r0, r1, r2);
0x000ab422 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ab424 mov r0, r6 | r0 = r6;
0x000ab426 strb r4, [r6, 0x10] | *((r6 + 0x10)) = r4;
0x000ab428 mov r2, sl | r2 = sl;
0x000ab42a ldr r1, [pc, 0x5c] |
0x000ab42c str r3, [sp] | *(sp) = r3;
0x000ab42e ldr r3, [pc, 0x5c] |
0x000ab430 add r1, pc | r1 = 0x1568be;
0x000ab432 str.w fp, [sp, 8] | __asm ("str.w fp, [var_8h]");
0x000ab436 add r3, pc | r3 = 0x1568c8;
0x000ab438 str r3, [sp, 4] | var_4h = r3;
0x000ab43a mov r3, sl | r3 = sl;
0x000ab43c bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab440 b 0xab38a | goto label_6;
| label_21:
0x000ab442 movs r3, 0 | r3 = 0;
0x000ab444 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000ab446 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xab490 */
| #include <stdint.h>
|
; (fcn) fcn.000ab490 () | void fcn_000ab490 (int16_t arg_0h, int16_t arg_4h, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| arithmetic x;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
0x000ab490 ldr r2, [pc, 0x3c4] |
0x000ab492 ldr r3, [pc, 0x3c8] | r3 = *(0xab85e);
0x000ab494 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab498 sub sp, 0x34 |
0x000ab49a add r2, pc | r2 = 0x156cf6;
0x000ab49c ldr r4, [r0, 0x24] | r4 = *(arg_0hx24);
0x000ab49e ldr r3, [r2, r3] |
0x000ab4a0 ldr.w r8, [r0] | r8 = *(r0);
0x000ab4a4 ldr r3, [r3] | r3 = imp.sinh;
0x000ab4a6 str r3, [sp, 0x2c] | var_2ch = r3;
0x000ab4a8 mov.w r3, 0 | r3 = 0;
0x000ab4ac cmp r4, 0 |
| if (r4 != 0) {
0x000ab4ae bne.w 0xab6d6 | goto label_4;
| }
0x000ab4b2 ldr.w r6, [r0, 0xec] | r6 = *(arg_0hxec);
0x000ab4b6 mov r5, r0 | r5 = r0;
0x000ab4b8 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x000ab4bc mov fp, r1 |
0x000ab4be ldr r0, [r6, 0x3c] | r0 = *((r6 + 0x3c));
0x000ab4c0 cmp r0, 0 |
| if (r0 == 0) {
0x000ab4c2 beq.w 0xab83c | goto label_13;
| }
0x000ab4c6 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000ab4c8 cmp r0, r3 |
| if (r0 == r3) {
0x000ab4ca beq.w 0xab7cc | goto label_14;
| }
0x000ab4ce add.w r3, r2, 0x10 | r3 = r2 + 0x10;
| do {
0x000ab4d2 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x000ab4d4 mov r2, r3 | r2 = r3;
0x000ab4d6 adds r4, 1 | r4++;
0x000ab4d8 adds r3, 0x10 | r3 += 0x10;
0x000ab4da cmp r0, r1 |
0x000ab4dc bne 0xab4d2 |
| } while (r0 != r1);
0x000ab4de lsls r3, r4, 4 | r3 = r4 << 4;
0x000ab4e0 str r3, [sp, 0x18] | var_18h = r3;
| label_5:
0x000ab4e2 ldrh r3, [r6, 0x22] | r3 = *((r6 + 0x22));
0x000ab4e4 movs r1, 0xc | r1 = 0xc;
0x000ab4e6 ldr.w sb, [r2] | sb = *(r2);
0x000ab4ea mvn r2, 0xb | r2 = ~0xb;
0x000ab4ee ldr r7, [r6, 4] | r7 = *((r6 + 4));
0x000ab4f0 smlabb r3, r3, r1, r2 | __asm ("smlabb r3, r3, r1, r2");
0x000ab4f4 add r7, r3 | r7 += r3;
0x000ab4f6 ldr r3, [r6] | r3 = *(r6);
0x000ab4f8 adds r3, 0x10 | r3 += 0x10;
0x000ab4fa str r3, [sp, 0x14] | var_14h = r3;
0x000ab4fc ldrh r3, [r7, 8] | r3 = *((r7 + 8));
0x000ab4fe cmp r3, 0 |
| if (r3 == 0) {
0x000ab500 beq.w 0xab6f2 | goto label_15;
| }
0x000ab504 ldrb.w r2, [r6, 0x2b] | r2 = *((r6 + 0x2b));
0x000ab508 cmp r2, 0 |
| if (r2 != 0) {
0x000ab50a bne.w 0xab6f2 | goto label_15;
| }
0x000ab50e ldr.w sl, [r6, 0x34] | sl = *((r6 + 0x34));
0x000ab512 cmp.w sl, 0 |
| if (sl != 0) {
0x000ab516 beq 0xab52c |
0x000ab518 ldr.w r1, [sl] | r1 = *(sl);
0x000ab51c cmp r1, r3 |
0x000ab51e it lt |
| if (r1 >= r3) {
0x000ab520 movlt sl, r2 | sl = r2;
| }
| if (r1 < r3) {
0x000ab522 blt 0xab52c | goto label_0;
| }
0x000ab524 add.w r3, sl, r3, lsl 4 | r3 = sl + (r3 << 4);
0x000ab528 ldr sl, [r3, -0x8] | sl = *((r3 - 0x8));
| }
| label_0:
0x000ab52c ldr r1, [sp, 0x14] | r1 = var_14h;
0x000ab52e mov r2, sb | r2 = sb;
0x000ab530 mov r0, r8 | r0 = r8;
0x000ab532 bl 0x3e27c | fcn_0003e27c (r0, r1, r2, r3);
0x000ab536 movs r2, 0 | r2 = 0;
0x000ab538 ldr r3, [r0] | r3 = *(r0);
0x000ab53a movs r1, 0x1a | r1 = 0x1a;
0x000ab53c str r2, [sp] | *(sp) = r2;
0x000ab53e mov r0, r5 | r0 = r5;
0x000ab540 mov r2, sb | r2 = sb;
0x000ab542 bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000ab546 cmp r0, 0 |
| if (r0 != 0) {
0x000ab548 bne.w 0xab6d6 | goto label_4;
| }
0x000ab54c ldrh r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x000ab54e lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 < r3) {
0x000ab550 bmi.w 0xab79e | goto label_16;
| }
0x000ab554 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x000ab556 cmp r2, 0 |
| if (r2 != 0) {
0x000ab558 bne.w 0xab77a | goto label_17;
| }
0x000ab55c tst.w r3, 0x60 |
| if ((r3 & 0x60) == 0) {
0x000ab560 beq.w 0xab6f8 | goto label_18;
| }
0x000ab564 lsls r1, r3, 0x19 | r1 = r3 << 0x19;
| if (r1 < r3) {
0x000ab566 bmi.w 0xab7f2 | goto label_19;
| }
| label_1:
0x000ab56a ldrd r1, r3, [fp] | __asm ("ldrd r1, r3, [fp]");
0x000ab56e str r1, [sp, 0x24] | var_24h = r1;
0x000ab570 cmp r1, 0 |
| if (r1 == 0) {
0x000ab572 beq 0xab5e8 | goto label_20;
| }
0x000ab574 adds r2, r3, 1 | r2 = r3 + 1;
0x000ab576 mov.w sl, 0 | sl = 0;
0x000ab57a str r3, [sp, 0x20] | var_20h = r3;
0x000ab57c mov r0, r8 | r0 = r8;
0x000ab57e adc r3, sl, 0 | __asm ("adc r3, sl, 0");
0x000ab582 bl 0x21784 | fcn_00021784 (r0, r1);
0x000ab586 str r0, [sp, 0x1c] | var_1ch = r0;
| if (r0 == 0) {
0x000ab588 cbz r0, 0xab5e8 | goto label_20;
| }
0x000ab58a ldrd r2, r1, [sp, 0x20] | __asm ("ldrd r2, r1, [var_24h]");
0x000ab58e blx 0x8610 | fcn_00008610 ();
0x000ab592 ldrd r1, r3, [sp, 0x1c] | __asm ("ldrd r1, r3, [var_20h]");
0x000ab596 strb.w sl, [r1, r3] | *((r1 + r3)) = sl;
0x000ab59a ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x000ab59e subs r2, r3, 1 | r2 = r3 - 1;
0x000ab5a0 add r2, r1 | r2 += r1;
0x000ab5a2 cmp r1, r2 |
| if (r1 >= r2) {
0x000ab5a4 bhs 0xab5c8 | goto label_21;
| }
0x000ab5a6 ldr r0, [pc, 0x2b8] |
0x000ab5a8 add r3, r1 | r3 += r1;
0x000ab5aa adds r1, 1 | r1++;
0x000ab5ac add r0, pc | r0 = 0x156e12;
| do {
0x000ab5ae ldrb r2, [r3, -0x1]! | r2 = *((r3 -= 0x1));
0x000ab5b2 cmp r2, 0x3b |
| if (r2 != 0x3b) {
0x000ab5b4 beq 0xab5c0 |
0x000ab5b6 add r2, r0 | r2 += r0;
0x000ab5b8 ldrb.w r2, [r2, 0x40] | r2 = *((r2 + 0x40));
0x000ab5bc lsls r2, r2, 0x1f | r2 <<= 0x1f;
| if (r2 >= r2) {
0x000ab5be bpl 0xab5c8 | goto label_21;
| }
| }
0x000ab5c0 cmp r1, r3 |
0x000ab5c2 strb.w sl, [r3] | *(r3) = sl;
0x000ab5c6 bne 0xab5ae |
| } while (r1 != r3);
| label_21:
0x000ab5c8 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000ab5ca mov r0, r5 | r0 = r5;
0x000ab5cc ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x000ab5ce ldr r1, [pc, 0x294] |
0x000ab5d0 str r2, [sp, 8] | var_8h = r2;
0x000ab5d2 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000ab5d4 add r1, pc | r1 = 0x156e3e;
0x000ab5d6 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x000ab5da mov r2, sb | r2 = sb;
0x000ab5dc bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab5e0 ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x000ab5e2 mov r0, r8 | r0 = r8;
0x000ab5e4 bl 0x16808 | fcn_00016808 (r0, r1);
| label_20:
0x000ab5e8 ldr.w r8, [r5, 8] | r8 = *((r5 + 8));
0x000ab5ec cmp.w r8, 0 |
| if (r8 == 0) {
0x000ab5f0 beq.w 0xab7b8 | goto label_22;
| }
| label_3:
0x000ab5f4 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x000ab5f6 cmp r3, 0 |
| if (r3 == 0) {
0x000ab5f8 beq.w 0xab7d0 | goto label_23;
| }
0x000ab5fc subs r3, 1 | r3--;
0x000ab5fe uxtb r3, r3 | r3 = (int8_t) r3;
0x000ab600 strb r3, [r5, 0x13] | *((r5 + 0x13)) = r3;
0x000ab602 adds r3, 0x26 | r3 += 0x26;
0x000ab604 ldr.w sl, [r5, r3, lsl 2] | offset_0 = r3 << 2;
| sl = *((r5 + offset_0));
| label_6:
0x000ab608 movs r3, 2 | r3 = 2;
0x000ab60a mov r2, r4 | r2 = r4;
0x000ab60c str r3, [sp] | *(sp) = r3;
0x000ab60e movs r1, 0x63 | r1 = 0x63;
0x000ab610 mov r3, sl | r3 = sl;
0x000ab612 mov r0, r8 | r0 = r8;
0x000ab614 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ab618 ldr.w r2, [r8, 0x98] | r2 = *((r8 + 0x98));
0x000ab61c movs r3, 1 | r3 = 1;
0x000ab61e lsls r3, r4 | r3 <<= r4;
0x000ab620 cmp r4, 1 |
0x000ab622 orr.w r2, r2, r3 | r2 |= r3;
0x000ab626 str.w r2, [r8, 0x98] | __asm ("str.w r2, [r8, 0x98]");
| if (r4 != 1) {
0x000ab62a beq 0xab646 |
0x000ab62c ldr.w r2, [r8] | r2 = *(r8);
0x000ab630 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000ab632 ldr r2, [r2, 0x10] | r2 = *((r2 + 0x10));
0x000ab634 add r2, r1 | r2 += r1;
0x000ab636 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000ab638 ldrb r2, [r2, 9] | r2 = *((r2 + 9));
| if (r2 == 0) {
0x000ab63a cbz r2, 0xab646 | goto label_24;
| }
0x000ab63c ldr.w r2, [r8, 0x9c] | r2 = *((r8 + 0x9c));
0x000ab640 orrs r2, r3 | r2 |= r3;
0x000ab642 str.w r2, [r8, 0x9c] | __asm ("str.w r2, [r8, 0x9c]");
| }
| label_24:
0x000ab646 mov.w fp, 0 |
0x000ab64a mvn r3, 1 | r3 = ~1;
0x000ab64e mov r2, sl | r2 = sl;
0x000ab650 movs r1, 0x56 | r1 = 0x56;
0x000ab652 mov r0, r8 | r0 = r8;
0x000ab654 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000ab658 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ab65c ldr.w r3, [r8, 0x6c] | r3 = *((r8 + 0x6c));
0x000ab660 mov r2, sl | r2 = sl;
0x000ab662 movs r1, 0x31 | r1 = 0x31;
0x000ab664 mov r0, r8 | r0 = r8;
0x000ab666 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000ab66a adds r3, 2 | r3 += 2;
0x000ab66c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ab670 movs r3, 3 | r3 = 3;
0x000ab672 mov r0, r8 | r0 = r8;
0x000ab674 str r3, [sp] | *(sp) = r3;
0x000ab676 mov r2, r4 | r2 = r4;
0x000ab678 movs r3, 2 | r3 = 2;
0x000ab67a movs r1, 0x64 | r1 = 0x64;
0x000ab67c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ab680 cmp.w sl, 0 |
| if (sl != 0) {
0x000ab684 beq 0xab696 |
0x000ab686 ldrb r3, [r5, 0x13] | r3 = *((r5 + 0x13));
0x000ab688 cmp r3, 7 |
0x000ab68a itttt ls |
| if (r3 > 7) {
0x000ab68c addls r2, r3, 1 | r2 = r3 + 1;
| }
| if (r3 > 7) {
0x000ab68e addls r3, 0x26 | r3 += 0x26;
| }
| if (r3 > 7) {
0x000ab690 strbls r2, [r5, 0x13] | *((r5 + 0x13)) = r2;
| }
| if (r3 <= 7) {
0x000ab692 strls sl, [r5, r3, lsl 2] | offset_1 = r3 << 2;
| *((r5 + offset_1)) = sl;
| goto label_25;
| }
| }
| label_25:
0x000ab696 mov r1, r4 | r1 = r4;
0x000ab698 movs r2, 3 | r2 = 3;
0x000ab69a mov r0, r5 | r0 = r5;
0x000ab69c bl 0x2f2d0 | fcn_0002f2d0 (r0, r1, r2);
0x000ab6a0 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
| if (r3 != 0) {
0x000ab6a2 cbz r3, 0xab6ce |
| label_7:
0x000ab6a4 ldr r2, [pc, 0x1c0] |
0x000ab6a6 ldr r3, [pc, 0x1b4] | r3 = *(0xab85e);
0x000ab6a8 add r2, pc | r2 = 0x156f14;
0x000ab6aa ldr r3, [r2, r3] | r3 = imp.sinh;
0x000ab6ac ldr r2, [r3] | r2 = imp.sinh;
0x000ab6ae ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ab6b0 eors r2, r3 | r2 ^= r3;
0x000ab6b2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ab6b6 bne.w 0xab852 | goto label_26;
| }
0x000ab6ba ldr r1, [pc, 0x1b0] |
0x000ab6bc mov r3, sb | r3 = sb;
0x000ab6be ldr r2, [sp, 0x14] | r2 = var_14h;
0x000ab6c0 mov r0, r5 | r0 = r5;
0x000ab6c2 add r1, pc | r1 = 0x156f34;
0x000ab6c4 add sp, 0x34 |
0x000ab6c6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab6ca b.w 0xa89e4 | void (*0xa89e4)() ();
| }
0x000ab6ce ldrb r3, [r7, 4] | r3 = *((r7 + 4));
0x000ab6d0 lsls r3, r3, 0x1c | r3 <<= 0x1c;
| if (r3 != r3) {
0x000ab6d2 bne.w 0xab7dc | goto label_27;
| }
| do {
| label_4:
0x000ab6d6 ldr r2, [pc, 0x198] |
0x000ab6d8 ldr r3, [pc, 0x180] | r3 = *(0xab85c);
0x000ab6da add r2, pc | r2 = 0x156f50;
0x000ab6dc ldr r3, [r2, r3] | r3 = imp.sinh;
0x000ab6de ldr r2, [r3] | r2 = imp.sinh;
0x000ab6e0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ab6e2 eors r2, r3 | r2 ^= r3;
0x000ab6e4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ab6e8 bne.w 0xab852 | goto label_26;
| }
0x000ab6ec add sp, 0x34 |
0x000ab6ee pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x000ab6f2 mov.w sl, 0 | sl = 0;
0x000ab6f6 b 0xab52c | goto label_0;
| label_18:
0x000ab6f8 cmp.w sl, 0 |
| if (sl != 0) {
0x000ab6fc beq 0xab70c |
0x000ab6fe ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x000ab702 ldrb r3, [r3] | r3 = *(r3);
0x000ab704 cmp r3, 0x79 |
0x000ab706 it eq |
| if (r3 == 0x79) {
0x000ab708 moveq sl, 0 | sl = 0;
| goto label_28;
| }
| }
| label_28:
0x000ab70c ldr.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x000ab710 lsls r2, r3, 0x11 | r2 = r3 << 0x11;
| if (r2 >= r3) {
0x000ab712 bpl 0xab758 | goto label_29;
| }
0x000ab714 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
| if (r3 == 0) {
0x000ab716 cbz r3, 0xab758 | goto label_29;
| }
0x000ab718 cmp.w sl, 0 |
| if (sl == 0) {
0x000ab71c beq.w 0xab834 | goto label_30;
| }
0x000ab720 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ab722 mov r0, r5 | r0 = r5;
0x000ab724 ldr r2, [pc, 0x14c] |
0x000ab726 ldr r1, [pc, 0x150] |
0x000ab728 str r3, [sp] | *(sp) = r3;
0x000ab72a mov r3, sb | r3 = sb;
0x000ab72c add r2, pc | r2 = 0x156fa4;
0x000ab72e add r1, pc | r1 = 0x156fac;
0x000ab730 bl 0xa89e4 | fcn_000a89e4 (r0);
| label_2:
0x000ab734 add r3, sp, 0x28 | r3 += x;
0x000ab736 mov r1, sl | r1 = sl;
0x000ab738 str r3, [sp] | *(sp) = r3;
0x000ab73a movs r3, 0 | r3 = 0;
0x000ab73c str r3, [sp, 0x28] | x = r3;
0x000ab73e movs r2, 1 | r2 = 1;
0x000ab740 movs r3, 0x41 | r3 = 0x41;
0x000ab742 mov r0, r8 | r0 = r8;
0x000ab744 bl 0x346dc | r0 = fcn_000346dc (r0, r1, r2, r3, r4);
0x000ab748 cmp r0, 0 |
0x000ab74a bne 0xab6d6 |
| } while (r0 != 0);
0x000ab74c ldr r0, [sp, 0x28] | r0 = x;
0x000ab74e cmp r0, 0 |
| if (r0 == 0) {
0x000ab750 beq 0xab816 | goto label_31;
| }
| label_9:
0x000ab752 bl 0x1c81c | fcn_0001c81c (r0);
0x000ab756 b 0xab56a | goto label_1;
| label_29:
0x000ab758 ldrb r3, [r7, 4] | r3 = *((r7 + 4));
0x000ab75a lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
| if (r0 == r3) {
0x000ab75c beq 0xab7ea | goto label_32;
| }
0x000ab75e cmp.w sl, 0 |
| if (sl != 0) {
0x000ab762 bne 0xab734 | goto label_2;
| }
| label_10:
0x000ab764 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ab766 mov r0, r5 | r0 = r5;
0x000ab768 ldr r2, [pc, 0x110] |
0x000ab76a ldr r1, [pc, 0x114] |
0x000ab76c str r3, [sp] | *(sp) = r3;
0x000ab76e mov r3, sb | r3 = sb;
0x000ab770 add r2, pc | r2 = 0x156ff0;
0x000ab772 add r1, pc | r1 = 0x156ff8;
0x000ab774 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab778 b 0xab56a | goto label_1;
| label_17:
0x000ab77a ldr r2, [pc, 0x108] |
0x000ab77c ldr r3, [pc, 0xdc] | r3 = *(0xab85c);
0x000ab77e add r2, pc | r2 = 0x157008;
0x000ab780 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000ab782 ldr r2, [r3] | r2 = imp.sinh;
0x000ab784 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ab786 eors r2, r3 | r2 ^= r3;
0x000ab788 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ab78c bne 0xab852 | goto label_26;
| }
0x000ab78e ldr r1, [pc, 0xf8] |
0x000ab790 add r1, pc | r1 = 0x15701e;
| do {
0x000ab792 mov r0, r5 | r0 = r5;
0x000ab794 add sp, 0x34 |
0x000ab796 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab79a b.w 0x21598 | void (*0x21598)() ();
| label_16:
0x000ab79e ldr r2, [pc, 0xec] |
0x000ab7a0 ldr r3, [pc, 0xb8] | r3 = *(0xab85c);
0x000ab7a2 add r2, pc | r2 = 0x157034;
0x000ab7a4 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000ab7a6 ldr r2, [r3] | r2 = imp.sinh;
0x000ab7a8 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ab7aa eors r2, r3 | r2 ^= r3;
0x000ab7ac mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000ab7b0 bne 0xab852 | goto label_26;
| }
0x000ab7b2 ldr r1, [pc, 0xdc] |
0x000ab7b4 add r1, pc | r1 = 0x15704a;
0x000ab7b6 b 0xab792 |
| } while (1);
| label_22:
0x000ab7b8 ldr r3, [r5, 0x74] | r3 = *((r5 + 0x74));
| if (r3 == 0) {
0x000ab7ba cbz r3, 0xab808 | goto label_33;
| }
| label_8:
0x000ab7bc mov r0, r5 | r0 = r5;
0x000ab7be bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000ab7c2 mov r8, r0 | r8 = r0;
0x000ab7c4 cmp r0, 0 |
| if (r0 != 0) {
0x000ab7c6 bne.w 0xab5f4 | goto label_3;
| }
0x000ab7ca b 0xab6d6 | goto label_4;
| label_14:
0x000ab7cc str r4, [sp, 0x18] | var_18h = r4;
0x000ab7ce b 0xab4e2 | goto label_5;
| label_23:
0x000ab7d0 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x000ab7d2 add.w sl, r3, 1 | sl = r3 + 1;
0x000ab7d6 str.w sl, [r5, 0x2c] | __asm ("str.w sl, [r5, 0x2c]");
0x000ab7da b 0xab608 | goto label_6;
| label_27:
0x000ab7dc ldrh r3, [r7, 0xa] | r3 = *((r7 + 0xa));
0x000ab7de and r3, r3, 0x60 | r3 &= 0x60;
0x000ab7e2 cmp r3, 0 |
| if (r3 == 0) {
0x000ab7e4 beq.w 0xab6d6 | goto label_4;
| }
0x000ab7e8 b 0xab6a4 | goto label_7;
| label_32:
0x000ab7ea cmp.w sl, 0 |
| if (sl != 0) {
0x000ab7ee bne 0xab734 | goto label_2;
| }
| label_11:
0x000ab7f0 b 0xab56a | goto label_1;
| label_19:
0x000ab7f2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ab7f4 mov r0, r5 | r0 = r5;
0x000ab7f6 ldr r2, [pc, 0x9c] |
0x000ab7f8 ldr r1, [pc, 0x9c] |
0x000ab7fa str r3, [sp] | *(sp) = r3;
0x000ab7fc mov r3, sb | r3 = sb;
0x000ab7fe add r2, pc | r2 = 0x157098;
0x000ab800 add r1, pc | r1 = 0x15709c;
0x000ab802 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab806 b 0xab56a | goto label_1;
| label_33:
0x000ab808 ldr r3, [r5] | r3 = *(r5);
0x000ab80a ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000ab80c lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
0x000ab80e itt pl |
| if (r2 < r3) {
0x000ab810 movpl r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x000ab812 strbpl r3, [r5, 0x17] | *((r5 + 0x17)) = r3;
| }
0x000ab814 b 0xab7bc | goto label_8;
| label_31:
0x000ab816 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ab818 mov r0, r5 | r0 = r5;
0x000ab81a ldr r2, [pc, 0x80] |
0x000ab81c ldr r1, [pc, 0x80] |
0x000ab81e str r3, [sp] | *(sp) = r3;
0x000ab820 mov r3, sb | r3 = sb;
0x000ab822 add r2, pc | r2 = 0x1570c4;
0x000ab824 add r1, pc | r1 = 0x1570c8;
0x000ab826 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab82a ldr r0, [sp, 0x28] | r0 = x;
0x000ab82c cmp r0, 0 |
| if (r0 == 0) {
0x000ab82e beq.w 0xab56a | goto label_1;
| }
0x000ab832 b 0xab752 | goto label_9;
| label_30:
0x000ab834 ldrb r3, [r7, 4] | r3 = *((r7 + 4));
0x000ab836 lsls r3, r3, 0x1c | r3 <<= 0x1c;
| if (r3 != r3) {
0x000ab838 bne 0xab764 | goto label_10;
| }
0x000ab83a b 0xab56a | goto label_1;
| label_13:
0x000ab83c movs r3, 0 | r3 = 0;
0x000ab83e mov.w r4, 0x8000 | r4 = 0x8000;
0x000ab842 movt r3, 0xfff8 | r3 = (r3 & 0xFFFF) | 0xfff80000;
0x000ab846 sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x000ab84a movt r4, 0xffff | r4 = (r4 & 0xFFFF) | 0xffff0000;
| do {
0x000ab84c strb r7, [r7, 0x13] | *((r7 + 0x13)) = r7;
0x000ab84e str r3, [sp, 0x18] | var_18h = r3;
0x000ab850 b 0xab4e2 | goto label_5;
| label_26:
0x000ab852 blx 0x883c | fcn_0000883c ();
0x000ab856 nop |
0x000ab858 bvc 0xab858 | __asm ("bvc aav.0x000000ff");
0x000ab85a movs r1, r0 | r1 = r0;
0x000ab85c lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000ab85e movs r0, r0 |
0x000ab860 lsls r0, r7, 0x1a | r0 = r7 << 0x1a;
0x000ab862 movs r1, r0 | r1 = r0;
0x000ab864 ldm r7, {r3, r5, r6, r7} | r3 = *(r7);
| r5 = *((r7 + 4));
| r6 = *((r7 + 8));
| r7 = *((r7 + 12));
0x000ab866 movs r0, r0 |
0x000ab868 bpl 0xab84c |
| } while (r0 >= r0);
0x000ab86a movs r1, r0 | r1 = r0;
0x000ab86c ldm r7, {r1, r2, r3, r7} | r1 = *(r7);
| r2 = *((r7 + 4));
| r3 = *((r7 + 8));
| r7 = *((r7 + 12));
0x000ab86e movs r0, r0 |
| if (r0 >= r0) {
0x000ab870 bpl 0xab7f0 | goto label_11;
| }
0x000ab872 movs r1, r0 | r1 = r0;
0x000ab874 ldm r5, {r3, r5, r7} | r3 = *(r5);
| r5 = *((r5 + 4));
| r7 = *((r5 + 8));
0x000ab876 movs r0, r0 |
0x000ab878 ldm r5, {r1, r5, r6, r7} | r1 = *(r5);
| r5 = *((r5 + 4));
| r6 = *((r5 + 8));
| r7 = *((r5 + 12));
0x000ab87a movs r0, r0 |
| label_12:
0x000ab87c ldm r5!, {r3, r6, r7} | r3 = *(r5!);
| r6 = *((r5! + 4));
| r7 = *((r5! + 8));
0x000ab87e movs r0, r0 |
0x000ab880 ldm r5!, {r1, r2, r3, r4, r7} | r1 = *(r5!);
| r2 = *((r5! + 4));
| r3 = *((r5! + 8));
| r4 = *((r5! + 12));
| r7 = *((r5! + 16));
0x000ab882 movs r0, r0 |
| if (r0 >= r0) {
0x000ab884 bpl 0xab8bc | void (*0xab8bc)() ();
| }
0x000ab886 movs r1, r0 | r1 = r0;
0x000ab888 ldm r5, {r3, r5} | r3 = *(r5);
| r5 = *((r5 + 4));
0x000ab88a movs r0, r0 |
| if (r0 < r0) {
0x000ab88c bmi 0xab87c | goto label_12;
| }
0x000ab88e movs r1, r0 | r1 = r0;
0x000ab890 ldm r4!, {r2, r5, r6, r7} | r2 = *(r4!);
| r5 = *((r4! + 4));
| r6 = *((r4! + 8));
| r7 = *((r4! + 12));
0x000ab892 movs r0, r0 |
0x000ab894 ldm r5, {r1, r5, r7} | r1 = *(r5);
| r5 = *((r5 + 4));
| r7 = *((r5 + 8));
0x000ab896 movs r0, r0 |
0x000ab898 ldm r5!, {r4} | r4 = *(r5!);
0x000ab89a movs r0, r0 |
0x000ab89c ldm r5!, {r1, r2, r3, r6} | r1 = *(r5!);
| r2 = *((r5! + 4));
| r3 = *((r5! + 8));
| r6 = *((r5! + 12));
0x000ab89e movs r0, r0 |
0x000ab8a0 ldm r4!, {r2, r3, r5, r6, r7} | r2 = *(r4!);
| r3 = *((r4! + 4));
| r5 = *((r4! + 8));
| r6 = *((r4! + 12));
| r7 = *((r4! + 16));
0x000ab8a2 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xab8a4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.000ab8a4 () | void fcn_000ab8a4 (int16_t arg_0h, int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int32_t var_0h_2;
| int16_t var_8h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
0x000ab8a4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ab8a8 sub sp, 0x1c |
0x000ab8aa ldr.w r6, [r0, 0xec] | r6 = *(arg_0hxec);
0x000ab8ae ldr r7, [r0] | r7 = *(r0);
0x000ab8b0 cmp r6, 0 |
| if (r6 == 0) {
0x000ab8b2 beq.w 0xaba18 | goto label_2;
| }
0x000ab8b6 ldr.w sb, [r0, 0xfc] | sb = *(arg_0hxfc);
0x000ab8ba mov r4, r0 | r4 = r0;
0x000ab8bc mov r5, r1 | r5 = r1;
0x000ab8be cmp.w sb, 0 |
| if (sb != 0) {
0x000ab8c2 beq 0xab8f6 |
0x000ab8c4 ldr.w r8, [r0, 0x100] | r8 = *(arg_0hx100);
0x000ab8c8 mov r0, r7 | r0 = r7;
0x000ab8ca adds.w r2, r8, 1 | r2 = r8 + 1;
0x000ab8ce asr.w r3, r8, 0x1f | r3 = r8 >> 0x1f;
0x000ab8d2 adc r3, r3, 0 | __asm ("adc r3, r3, 0");
0x000ab8d6 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x000ab8da mov sl, r0 | sl = r0;
| if (r0 != 0) {
0x000ab8dc cbz r0, 0xab8ec |
0x000ab8de mov r1, sb | r1 = sb;
0x000ab8e0 mov r2, r8 | r2 = r8;
0x000ab8e2 blx 0x8610 | fcn_00008610 ();
0x000ab8e6 movs r3, 0 | r3 = 0;
0x000ab8e8 strb.w r3, [sl, r8] | *((sl + r8)) = r3;
| }
0x000ab8ec mov r2, sl | r2 = sl;
0x000ab8ee mov r1, r6 | r1 = r6;
0x000ab8f0 mov r0, r4 | r0 = r4;
0x000ab8f2 bl 0x2d0a0 | fcn_0002d0a0 (r0, r1, r2);
| }
0x000ab8f6 ldr r3, [r6, 0x2c] | r3 = *((r6 + 0x2c));
0x000ab8f8 movs r2, 0 | r2 = 0;
0x000ab8fa str.w r2, [r4, 0xfc] | __asm ("str.w r2, [r4, 0xfc]");
0x000ab8fe cmp r3, r2 |
| if (r3 <= r2) {
0x000ab900 ble.w 0xaba18 | goto label_2;
| }
0x000ab904 ldrb.w r3, [r7, 0xb1] | r3 = *((r7 + 0xb1));
0x000ab908 cmp r3, 0 |
| if (r3 != 0) {
0x000ab90a bne.w 0xaba1e | goto label_6;
| }
0x000ab90e ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x000ab910 cmp r3, r2 |
0x000ab912 it eq |
| if (r3 != r2) {
0x000ab914 moveq r3, r4 | r3 = r4;
| }
0x000ab916 movs r2, 1 | r2 = 1;
0x000ab918 strb r2, [r3, 0x15] | *((r3 + 0x15)) = r2;
| if (r5 != 0) {
0x000ab91a cbz r5, 0xab92c |
0x000ab91c ldrd r3, r2, [r5] | __asm ("ldrd r3, r2, [r5]");
0x000ab920 ldr.w r1, [r4, 0xbc] | r1 = *((r4 + 0xbc));
0x000ab924 subs r3, r3, r1 | r3 -= r1;
0x000ab926 add r3, r2 | r3 += r2;
0x000ab928 str.w r3, [r4, 0xc0] | __asm ("str.w r3, [r4, 0xc0]");
| }
0x000ab92c ldr r1, [pc, 0x208] |
0x000ab92e add.w r2, r4, 0xbc | r2 = r4 + 0xbc;
0x000ab932 mov r0, r7 | r0 = r7;
0x000ab934 add r1, pc | r1 = 0x157470;
0x000ab936 bl 0x24ec8 | fcn_00024ec8 (r0);
0x000ab93a ldr r1, [r6, 0x3c] | r1 = *((r6 + 0x3c));
0x000ab93c mov r8, r0 | r8 = r0;
0x000ab93e cmp r1, 0 |
| if (r1 == 0) {
0x000ab940 beq.w 0xabb20 | goto label_7;
| }
0x000ab944 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x000ab946 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000ab948 cmp r1, r3 |
| if (r1 == r3) {
0x000ab94a beq.w 0xabaf8 | goto label_8;
| }
0x000ab94e adds r2, 0x10 | r2 += 0x10;
0x000ab950 movs r5, 0 | r5 = 0;
| do {
0x000ab952 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x000ab954 mov ip, r2 |
0x000ab956 adds r5, 1 | r5++;
0x000ab958 adds r2, 0x10 | r2 += 0x10;
0x000ab95a cmp r1, r3 |
0x000ab95c bne 0xab952 |
| } while (r1 != r3);
0x000ab95e lsl.w sl, r5, 4 | sl = r5 << 4;
0x000ab962 mov r2, ip | r2 = ip;
| label_4:
0x000ab964 ldr r3, [r6] | r3 = *(r6);
0x000ab966 mov r0, r4 | r0 = r4;
0x000ab968 ldr r2, [r2] | r2 = *(r2);
0x000ab96a strd r3, r8, [sp] | __asm ("strd r3, r8, [sp]");
0x000ab96e ldr r1, [r4, 0x58] | r1 = *((r4 + 0x58));
0x000ab970 str r1, [sp, 8] | var_8h = r1;
0x000ab972 ldr r1, [pc, 0x1c8] |
0x000ab974 add r1, pc | r1 = 0x1574b6;
0x000ab976 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ab97a ldr.w sb, [r4, 8] | sb = *((r4 + 8));
0x000ab97e mov r0, sb | r0 = sb;
0x000ab980 cmp.w sb, 0 |
| if (sb == 0) {
0x000ab984 beq.w 0xabaae | goto label_9;
| }
| label_0:
0x000ab988 ldr r3, [r4] | r3 = *(r4);
0x000ab98a mov r2, r5 | r2 = r5;
0x000ab98c movs r1, 0x64 | r1 = 0x64;
0x000ab98e ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x000ab990 add r3, sl | r3 += sl;
0x000ab992 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000ab994 ldr r3, [r3] | r3 = *(r3);
0x000ab996 adds r3, 1 | r3++;
0x000ab998 str r3, [sp] | *(sp) = r3;
0x000ab99a movs r3, 1 | r3 = 1;
0x000ab99c bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ab9a0 ldrd r3, r2, [sb, 0x6c] | __asm ("ldrd r3, r2, [sb, 0x6c]");
0x000ab9a4 cmp r3, r2 |
| if (r3 >= r2) {
0x000ab9a6 bge.w 0xababe | goto label_10;
| }
0x000ab9aa add.w r2, r3, r3, lsl 2 | r2 = r3 + (r3 << 2);
0x000ab9ae adds r3, 1 | r3++;
0x000ab9b0 str.w r3, [sb, 0x6c] | __asm ("str.w r3, [sb, 0x6c]");
0x000ab9b4 movs r0, 0xa6 | r0 = 0xa6;
0x000ab9b6 ldr.w r3, [sb, 0x68] | r3 = *((sb + 0x68));
0x000ab9ba lsls r2, r2, 2 | r2 <<= 2;
0x000ab9bc vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000ab9c0 movs r1, 0 | r1 = 0;
0x000ab9c2 str r0, [r3, r2] | *((r3 + r2)) = r0;
0x000ab9c4 add r3, r2 | r3 += r2;
0x000ab9c6 adds r2, r3, 4 | r2 = r3 + 4;
0x000ab9c8 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000ab9cc strd r1, r1, [r3, 0xc] | __asm ("strd r1, r1, [r3, 0xc]");
| label_1:
0x000ab9d0 ldr r1, [pc, 0x16c] |
0x000ab9d2 mov r3, r8 | r3 = r8;
0x000ab9d4 ldr r2, [r6] | r2 = *(r6);
0x000ab9d6 mov r0, r7 | r0 = r7;
0x000ab9d8 add r1, pc | r1 = 0x15751c;
0x000ab9da bl 0x24ec8 | fcn_00024ec8 (r0);
0x000ab9de movs r3, 0 | r3 = 0;
0x000ab9e0 mov r2, r0 | r2 = r0;
0x000ab9e2 mov r1, r5 | r1 = r5;
0x000ab9e4 mov r0, sb | r0 = sb;
0x000ab9e6 bl 0x2f21c | fcn_0002f21c (r0, r1, r2, r3);
0x000ab9ea cmp.w r8, 0 |
| if (r8 != 0) {
0x000ab9ee beq 0xab9f8 |
0x000ab9f0 mov r1, r8 | r1 = r8;
0x000ab9f2 mov r0, r7 | r0 = r7;
0x000ab9f4 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000ab9f8 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000ab9fa mov r0, sb | r0 = sb;
0x000ab9fc ldr r2, [r6] | r2 = *(r6);
0x000ab9fe adds r6, r3, 1 | r6 = r3 + 1;
0x000aba00 mov r1, r6 | r1 = r6;
0x000aba02 str r6, [r4, 0x2c] | *((r4 + 0x2c)) = r6;
0x000aba04 movs r4, 0 | r4 = 0;
0x000aba06 bl 0x2eae0 | fcn_0002eae0 (r0, r1, r2);
0x000aba0a mov r3, r6 | r3 = r6;
0x000aba0c mov r2, r5 | r2 = r5;
0x000aba0e movs r1, 0xab | r1 = 0xab;
0x000aba10 mov r0, sb | r0 = sb;
0x000aba12 str r4, [sp] | *(sp) = r4;
0x000aba14 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
| label_2:
0x000aba18 add sp, 0x1c |
0x000aba1a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_6:
0x000aba1e ldr r3, [r6, 0x3c] | r3 = *((r6 + 0x3c));
0x000aba20 add.w r0, r7, 0x180 | r0 = r7 + 0x180;
0x000aba24 ldr.w sl, [r6] | sl = *(r6);
0x000aba28 str r3, [sp, 0x14] | var_14h = r3;
0x000aba2a ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x000aba2c ldr r1, [r3] | r1 = *(r3);
0x000aba2e bl 0x178b4 | fcn_000178b4 (r0, r1, r2);
0x000aba32 ldr.w fp, [r0, 8] | fp = *((r0 + 8));
0x000aba36 cmp.w fp, 0 |
| if (fp == 0) {
0x000aba3a beq 0xaba96 | goto label_11;
| }
0x000aba3c ldr.w r2, [fp] | r2 = *(fp);
| if (r2 == 0) {
0x000aba40 cbz r2, 0xaba96 | goto label_11;
| }
0x000aba42 ldr r1, [r2] | r1 = *(r2);
0x000aba44 cmp r1, 2 |
| if (r1 <= 2) {
0x000aba46 ble 0xaba96 | goto label_11;
| }
0x000aba48 ldr r2, [r2, 0x5c] | r2 = *((r2 + 0x5c));
| if (r2 == 0) {
0x000aba4a cbz r2, 0xaba96 | goto label_11;
| }
0x000aba4c mov sb, sl | sb = sl;
0x000aba4e cmp.w sl, 0 |
| if (sl != 0) {
0x000aba52 beq 0xaba5e |
0x000aba54 mov r0, sl | r0 = sl;
0x000aba56 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000aba5a bic sb, r0, 0xc0000000 | sb = BIT_MASK (r0, 0xc0000000);
| }
0x000aba5e ldr r3, [sp, 0x14] | r3 = var_14h;
0x000aba60 ldr r5, [r3, 0x10] | r5 = *((r3 + 0x10));
| if (r5 == 0) {
0x000aba62 cbz r5, 0xaba96 | goto label_11;
| }
| do {
0x000aba64 ldr.w r8, [r5, 8] | r8 = *((r5 + 8));
0x000aba68 ldrb.w r2, [r8, 0x2b] | r2 = *((r8 + 0x2b));
| if (r2 == 0) {
0x000aba6c cbnz r2, 0xaba90 |
0x000aba6e ldr.w r1, [r8, 0x1c] | r1 = *((r8 + 0x1c));
0x000aba72 mov r2, sb | r2 = sb;
0x000aba74 lsls r3, r1, 0x13 | r3 = r1 << 0x13;
| if (r3 < r1) {
0x000aba76 bmi 0xaba90 | goto label_5;
| }
0x000aba78 ldr r1, [r6] | r1 = *(r6);
0x000aba7a ldr.w r0, [r8] | r0 = *(r8);
0x000aba7e blx 0x8154 | r0 = fcn_00008154 ();
| if (r0 != 0) {
0x000aba82 cbnz r0, 0xaba90 | goto label_5;
| }
0x000aba84 ldr.w r2, [r8] | r2 = *(r8);
0x000aba88 ldrb.w r1, [r2, sb] | r1 = *((r2 + sb));
0x000aba8c cmp r1, 0x5f |
| if (r1 == 0x5f) {
0x000aba8e beq 0xabb00 | goto label_12;
| }
| }
| label_5:
0x000aba90 ldr r5, [r5] | r5 = *(r5);
0x000aba92 cmp r5, 0 |
0x000aba94 bne 0xaba64 |
| } while (r5 != 0);
| label_11:
0x000aba96 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000aba98 mov r2, r6 | r2 = r6;
0x000aba9a mov r1, sl | r1 = sl;
0x000aba9c adds r0, 8 | r0 += 8;
0x000aba9e bl 0x17978 | r0 = fcn_00017978 (r0, r1, r2, r3, r4);
| if (r0 == 0) {
0x000abaa2 cbnz r0, 0xabace |
0x000abaa4 str.w r0, [r4, 0xec] | __asm ("str.w r0, [r4, 0xec]");
0x000abaa8 add sp, 0x1c |
0x000abaaa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_9:
0x000abaae ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
| if (r3 == 0) {
0x000abab0 cbz r3, 0xabaea | goto label_13;
| }
| label_3:
0x000abab2 mov r0, r4 | r0 = r4;
0x000abab4 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x000abab8 mov sb, r0 | sb = r0;
0x000ababa ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x000ababc b 0xab988 | goto label_0;
| label_10:
0x000ababe movs r3, 0 | r3 = 0;
0x000abac0 movs r1, 0xa6 | r1 = 0xa6;
0x000abac2 mov r2, r3 | r2 = r3;
0x000abac4 mov r0, sb | r0 = sb;
0x000abac6 str r3, [sp] | *(sp) = r3;
0x000abac8 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000abacc b 0xab9d0 | goto label_1;
| }
0x000abace ldrb.w r3, [r7, 0x57] | r3 = *((r7 + 0x57));
0x000abad2 cmp r3, 0 |
| if (r3 != 0) {
0x000abad4 bne 0xaba18 | goto label_2;
| }
0x000abad6 ldrb.w r3, [r7, 0x58] | r3 = *((r7 + 0x58));
0x000abada cmp r3, 0 |
| if (r3 != 0) {
0x000abadc bne 0xaba18 | goto label_2;
| }
0x000abade mov r0, r7 | r0 = r7;
0x000abae0 add sp, 0x1c |
0x000abae2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000abae6 b.w 0x21644 | void (*0x21644)() ();
| label_13:
0x000abaea ldr r3, [r4] | r3 = *(r4);
0x000abaec ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000abaee lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
0x000abaf0 itt pl |
| if (r2 < r3) {
0x000abaf2 movpl r3, 1 | r3 = 1;
| }
| if (r2 < r3) {
0x000abaf4 strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x000abaf6 b 0xabab2 | goto label_3;
| label_8:
0x000abaf8 mov.w sl, 0 | sl = 0;
0x000abafc mov r5, sl | r5 = sl;
0x000abafe b 0xab964 | goto label_4;
| label_12:
0x000abb00 ldr.w r1, [fp] | r1 = *(fp);
0x000abb04 add.w r0, sb, 1 | r0 = sb + 1;
0x000abb08 add r0, r2 | r0 += r2;
0x000abb0a ldr r1, [r1, 0x5c] | r1 = *((r1 + 0x5c));
0x000abb0c blx r1 | r0 = uint32_t (*r1)(uint32_t, uint32_t) (r0, r1);
0x000abb0e cmp r0, 0 |
| if (r0 == 0) {
0x000abb10 beq 0xaba90 | goto label_5;
| }
0x000abb12 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x000abb16 orr r2, r2, 0x1000 | r2 |= 0x1000;
0x000abb1a str.w r2, [r8, 0x1c] | __asm ("str.w r2, [r8, 0x1c]");
0x000abb1e b 0xaba90 | goto label_5;
| label_7:
0x000abb20 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000abb22 mov.w sl, 0 | sl = 0;
0x000abb26 mov.w r5, 0x8000 | r5 = 0x8000;
0x000abb2a movt sl, 0xfff8 | sl = (sl & 0xFFFF) | 0xfff80000;
0x000abb2e movt r5, 0xffff | r5 = (r5 & 0xFFFF) | 0xffff0000;
0x000abb32 sub.w r2, r3, 0x80000 | r2 = r3 - 0x80000;
0x000abb36 b 0xab964 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xabe2c */
| #include <stdint.h>
|
; (fcn) fcn.000abe2c () | void fcn_000abe2c (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000abe2c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000abe30 mov r5, r1 | r5 = r1;
0x000abe32 ldr r6, [r0] | r6 = *(r0);
0x000abe34 sub sp, 0x3c |
0x000abe36 ldrb.w r1, [r6, 0x57] | r1 = *((r6 + 0x57));
0x000abe3a cbz r1, 0xabe4a |
| while (r0 == 0) {
| label_0:
0x000abe3c mov r1, r5 | r1 = r5;
0x000abe3e mov r0, r6 | r0 = r6;
0x000abe40 add sp, 0x3c |
0x000abe42 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000abe46 b.w 0x1a3c8 | void (*0x1a3c8)() ();
0x000abe4a mov sb, r2 | sb = r2;
0x000abe4c add.w r2, r5, 8 | r2 = r5 + 8;
0x000abe50 mov r4, r0 | r4 = r0;
0x000abe52 bl 0x8a9bc | r0 = fcn_0008a9bc (r0, r1, r2);
0x000abe56 mov r7, r0 | r7 = r0;
0x000abe58 str r0, [sp, 0x14] | var_14h = r0;
0x000abe5a cmp r0, 0 |
0x000abe5c beq 0xabe3c |
| }
0x000abe5e mov r1, r0 | r1 = r0;
0x000abe60 mov r0, r4 | r0 = r4;
0x000abe62 bl 0x2476c | r0 = fcn_0002476c (r0, r1);
0x000abe66 mov r8, r0 | r8 = r0;
0x000abe68 cmp r0, 0 |
| if (r0 != 0) {
0x000abe6a bne 0xabe3c | goto label_0;
| }
0x000abe6c ldrb.w r3, [r7, 0x2b] | r3 = *((r7 + 0x2b));
0x000abe70 ldr r2, [r7] | r2 = *(r7);
0x000abe72 cmp r3, 2 |
| if (r3 == 2) {
0x000abe74 beq.w 0xac152 | goto label_16;
| }
0x000abe78 cmp r3, 1 |
| if (r3 == 1) {
0x000abe7a beq.w 0xac18a | goto label_17;
| }
0x000abe7e mov r1, sb | r1 = sb;
0x000abe80 mov r0, r6 | r0 = r6;
0x000abe82 bl 0x22a34 | r0 = fcn_00022a34 (r0, r1);
0x000abe86 mov fp, r0 |
0x000abe88 cmp r0, 0 |
| if (r0 == 0) {
0x000abe8a beq 0xabe3c | goto label_0;
| }
0x000abe8c mov r1, r0 | r1 = r0;
0x000abe8e ldr r0, [sp, 0x14] | r0 = var_14h;
0x000abe90 bl 0x18da4 | r0 = fcn_00018da4 (r0, r1);
0x000abe94 subs.w sl, r0, 0 | sl = r0 - 0;
| if (sl < r0) {
0x000abe98 blt.w 0xac174 | goto label_18;
| }
0x000abe9c add.w sb, sl, sl, lsl 1 | sb = sl + (sl << 1);
0x000abea0 lsl.w r3, sb, 2 | r3 = sb << 2;
0x000abea4 mov r2, r3 | r2 = r3;
0x000abea6 str r3, [sp, 0x18] | var_18h = r3;
0x000abea8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000abeaa ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000abeac add r3, r2 | r3 += r2;
0x000abeae ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x000abeb0 tst.w r3, 9 |
| if ((r3 & 9) != 0) {
0x000abeb4 bne.w 0xac190 | goto label_19;
| }
0x000abeb8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000abeba ldrsh.w r3, [r3, 0x22] | r3 = *((r3 + 0x22));
0x000abebe cmp r3, 1 |
| if (r3 <= 1) {
0x000abec0 ble.w 0xac1ac | goto label_20;
| }
0x000abec4 ldr r7, [sp, 0x14] | r7 = var_14h;
0x000abec6 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x000abec8 ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
0x000abeca cmp r1, 0 |
| if (r1 == 0) {
0x000abecc beq.w 0xac1ba | goto label_21;
| }
0x000abed0 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000abed2 cmp r1, r2 |
| if (r1 == r2) {
0x000abed4 beq.w 0xac1c6 | goto label_22;
| }
0x000abed8 adds r3, 0x10 | r3 += 0x10;
| do {
0x000abeda mov r0, r3 | r0 = r3;
0x000abedc add.w r8, r8, 1 | r8++;
0x000abee0 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000abee2 adds r3, 0x10 | r3 += 0x10;
0x000abee4 cmp r1, r2 |
0x000abee6 bne 0xabeda |
| } while (r1 != r2);
0x000abee8 ldr.w sb, [r0] | sb = *(r0);
0x000abeec movs r1, 0x1a | r1 = 0x1a;
0x000abeee ldr r3, [r7] | r3 = *(r7);
0x000abef0 mov r0, r4 | r0 = r4;
0x000abef2 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000abef4 add sp, 0 |
0x000abef6 mov r2, sb | r2 = sb;
0x000abef8 str r7, [sp, 0x14] | var_14h = r7;
0x000abefa bl 0x24140 | r0 = fcn_00024140 (r0, r1);
0x000abefe cmp r0, 0 |
| if (r0 != 0) {
0x000abf00 bne.w 0xac180 | goto label_4;
| }
0x000abf04 ldr.w r3, [pc, 0x50c] | r3 = *(0x000ac414);
0x000abf08 mov r2, sb | r2 = sb;
0x000abf0a ldr.w r1, [pc, 0x50c] | r1 = *(0x000ac418);
0x000abf0e str r0, [sp, 8] | var_8h = r0;
0x000abf10 mov r0, r4 | r0 = r4;
0x000abf12 add r3, pc | r3 += pc;
0x000abf14 str r3, [sp, 4] | var_4h = r3;
0x000abf16 sub.w r3, r8, 1 | r3 = r8 - 1;
0x000abf1a clz r3, r3 | r3 &= r3;
0x000abf1e add r1, pc | r1 += pc;
0x000abf20 lsrs r3, r3, 5 | r3 >>= 5;
0x000abf22 str r1, [sp, 0x20] | var_20h = r1;
0x000abf24 str r3, [sp] | *(sp) = r3;
0x000abf26 mov r7, r3 | r7 = r3;
0x000abf28 movs r3, 1 | r3 = 1;
0x000abf2a str r7, [sp, 0x1c] | var_1ch = r7;
0x000abf2c strb r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x000abf2e mov r3, sb | r3 = sb;
0x000abf30 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000abf34 cmp.w r8, 1 |
| if (r8 != 1) {
0x000abf38 bne.w 0xac200 | goto label_23;
| }
0x000abf3c ldr.w r1, [pc, 0x4dc] | r1 = *(0x000ac41c);
0x000abf40 mov r3, sb | r3 = sb;
0x000abf42 mov r2, sb | r2 = sb;
0x000abf44 mov r0, r4 | r0 = r4;
0x000abf46 add r1, pc | r1 += pc;
0x000abf48 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000abf4c ldr r3, [sp, 0x14] | r3 = var_14h;
0x000abf4e mov r2, sb | r2 = sb;
0x000abf50 ldr.w r1, [pc, 0x4cc] |
0x000abf54 mov r0, r4 | r0 = r4;
0x000abf56 ldr r3, [r3] | r3 = *(r3);
0x000abf58 add r1, pc | r1 = 0x15837c;
0x000abf5a strd sl, r3, [sp] | __asm ("strd sl, r3, [sp]");
0x000abf5e mov r3, r8 | r3 = r8;
0x000abf60 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000abf64 mov r1, r8 | r1 = r8;
0x000abf66 mov r0, r4 | r0 = r4;
0x000abf68 movs r2, 2 | r2 = 2;
0x000abf6a bl 0x2f2d0 | fcn_0002f2d0 (r0, r1, r2);
0x000abf6e ldr.w r3, [pc, 0x4b4] |
0x000abf72 mov r2, sb | r2 = sb;
0x000abf74 str r7, [sp] | *(sp) = r7;
0x000abf76 mov r0, r4 | r0 = r4;
0x000abf78 strb.w r8, [r4, 0x10] | *((r4 + 0x10)) = r8;
0x000abf7c add r3, pc | r3 = 0x1583a6;
0x000abf7e ldr r1, [sp, 0x20] | r1 = var_20h;
0x000abf80 str r3, [sp, 4] | var_4h = r3;
0x000abf82 mov r3, sb | r3 = sb;
0x000abf84 str.w r8, [sp, 8] | __asm ("str.w r8, [var_8h]");
0x000abf88 bl 0xa89e4 | fcn_000a89e4 (r0);
| label_5:
0x000abf8c ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x000abf8e cmp r3, 0 |
| if (r3 != 0) {
0x000abf90 bne.w 0xac180 | goto label_4;
| }
0x000abf94 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000abf96 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000abf98 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000abf9a add r3, r2 | r3 += r2;
0x000abf9c ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x000abf9e lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 < r3) {
0x000abfa0 bmi.w 0xac180 | goto label_4;
| }
0x000abfa4 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x000abfa6 str r3, [sp, 0x18] | var_18h = r3;
0x000abfa8 cmp r3, 0 |
| if (r3 == 0) {
0x000abfaa beq.w 0xac33a | goto label_24;
| }
| label_9:
0x000abfae ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x000abfb0 movs r3, 0x71 | r3 = 0x71;
0x000abfb2 str r3, [sp] | *(sp) = r3;
0x000abfb4 mov r2, r8 | r2 = r8;
0x000abfb6 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000abfb8 adds r1, r0, 1 | r1 = r0 + 1;
0x000abfba str r0, [sp, 0x1c] | var_1ch = r0;
0x000abfbc str r1, [r4, 0x28] | *((r4 + 0x28)) = r1;
0x000abfbe mov r1, r0 | r1 = r0;
0x000abfc0 mov r0, r4 | r0 = r4;
0x000abfc2 bl 0x2fc88 | fcn_0002fc88 (r0, r1, r2, r3, r4);
0x000abfc6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000abfc8 ldr r2, [r3, 0x6c] | r2 = *((r3 + 0x6c));
0x000abfca ldr r3, [r3, 0x70] | r3 = *((r3 + 0x70));
0x000abfcc str r2, [sp, 0x24] | var_24h = r2;
0x000abfce cmp r2, r3 |
| if (r2 >= r3) {
0x000abfd0 bge.w 0xac3b2 | goto label_25;
| }
0x000abfd4 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000abfd6 movs r1, 0 | r1 = 0;
0x000abfd8 ldr r7, [sp, 0x18] | r7 = var_18h;
0x000abfda mov.w ip, 0x23 |
0x000abfde add.w r3, r2, r2, lsl 2 | r3 = r2 + (r2 << 2);
0x000abfe2 ldr r0, [r7, 0x68] | r0 = *((r7 + 0x68));
0x000abfe4 adds r2, 1 | r2++;
0x000abfe6 str r2, [r7, 0x6c] | *((r7 + 0x6c)) = r2;
0x000abfe8 lsls r3, r3, 2 | r3 <<= 2;
0x000abfea ldr r7, [sp, 0x1c] | r7 = var_1ch;
0x000abfec adds r2, r0, r3 | r2 = r0 + r3;
0x000abfee strd r1, r1, [r2, 0xc] | __asm ("strd r1, r1, [r2, 0xc]");
0x000abff2 strd r7, r1, [r2, 4] | __asm ("strd r7, r1, [r2, 4]");
0x000abff6 str.w ip, [r0, r3] | __asm ("str.w ip, [r0, r3]");
| label_13:
0x000abffa ldr r3, [sp, 0x14] | r3 = var_14h;
0x000abffc ldr.w r8, [r4, 0x2c] | r8 = *((r4 + 0x2c));
0x000ac000 ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000ac002 add.w r2, r8, 1 | r2 = r8 + 1;
0x000ac006 str r2, [sp, 0x2c] | var_2ch = r2;
0x000ac008 ands sb, r3, 0x80 | sb = r3 & 0x80;
0x000ac00c str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
| if (sb == r3) {
0x000ac00e beq.w 0xac34a | goto label_26;
| }
0x000ac012 ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ac014 ldr r7, [sp, 0x14] | r7 = var_14h;
0x000ac016 ldr.w sb, [r3, 8] | sb = *((r3 + 8));
0x000ac01a mov r2, sb | r2 = sb;
0x000ac01c cmp.w sb, 0 |
| if (sb != 0) {
0x000ac020 bne 0xac02c | goto label_27;
| }
0x000ac022 b 0xac40e | goto label_28;
| do {
0x000ac024 ldr r2, [r2, 0x14] | r2 = *((r2 + 0x14));
0x000ac026 cmp r2, 0 |
| if (r2 == 0) {
0x000ac028 beq.w 0xac40e | goto label_28;
| }
| label_27:
0x000ac02c ldrb.w r3, [r2, 0x37] | r3 = *((r2 + 0x37));
0x000ac030 and r3, r3, 3 | r3 &= 3;
0x000ac034 cmp r3, 2 |
0x000ac036 bne 0xac024 |
| } while (r3 != 2);
0x000ac038 ldrh r3, [r2, 0x34] | r3 = *((r2 + 0x34));
0x000ac03a mov sb, r2 | sb = r2;
0x000ac03c ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x000ac03e str r7, [sp, 0x14] | var_14h = r7;
0x000ac040 add r3, r2 | r3 += r2;
0x000ac042 ldrh.w r2, [sb, 0x32] | r2 = *((sb + 0x32));
0x000ac046 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000ac048 cmp r2, 0 |
| if (r2 == 0) {
0x000ac04a beq.w 0xac3e8 | goto label_29;
| }
0x000ac04e str r6, [sp, 0x28] | var_28h = r6;
0x000ac050 add.w r3, r8, 2 | r3 = r8 + 2;
0x000ac054 ldr r6, [sp, 0x1c] | r6 = var_1ch;
0x000ac056 mov.w r8, 0 | r8 = 0;
0x000ac05a ldr r7, [sp, 0x18] | r7 = var_18h;
0x000ac05c str.w fp, [sp, 0x30] | __asm ("str.w fp, [var_30h]");
0x000ac060 mov fp, r3 |
0x000ac062 str r3, [sp, 0x20] | var_20h = r3;
| do {
0x000ac064 add.w r3, fp, r8 | r3 = fp + r8;
0x000ac068 mov r2, r6 | r2 = r6;
0x000ac06a str r3, [sp] | *(sp) = r3;
0x000ac06c movs r1, 0x5e | r1 = 0x5e;
0x000ac06e mov r3, r8 | r3 = r8;
0x000ac070 mov r0, r7 | r0 = r7;
0x000ac072 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ac076 ldrh.w r3, [sb, 0x32] | r3 = *((sb + 0x32));
0x000ac07a add.w r8, r8, 1 | r8++;
0x000ac07e cmp r3, r8 |
0x000ac080 bgt 0xac064 |
| } while (r3 > r8);
0x000ac082 ldr r2, [sp, 0x14] | r2 = var_14h;
0x000ac084 mov r7, r3 | r7 = r3;
0x000ac086 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000ac088 ldr r6, [sp, 0x28] | r6 = var_28h;
0x000ac08a ldrsh.w ip, [r2, 0x22] | ip = *((r2 + 0x22));
0x000ac08e adds r3, 1 | r3++;
0x000ac090 ldr.w fp, [sp, 0x30] | fp = var_30h;
0x000ac094 str r3, [sp, 0x28] | var_28h = r3;
0x000ac096 cmp.w ip, 0 |
0x000ac09a str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
| if (ip <= 0) {
0x000ac09c ble.w 0xac3d2 | goto label_30;
| }
| label_10:
0x000ac0a0 sxth.w r3, sl | __asm ("sxth.w r3, sl");
0x000ac0a4 mov r2, r5 | r2 = r5;
0x000ac0a6 str r6, [sp, 0x30] | var_30h = r6;
0x000ac0a8 mov r5, sb | r5 = sb;
0x000ac0aa mov r6, r7 | r6 = r7;
0x000ac0ac str r4, [sp, 0x34] | var_34h = r4;
0x000ac0ae ldr r7, [sp, 0x14] | r7 = var_14h;
0x000ac0b0 mov.w r8, 0 | r8 = 0;
0x000ac0b4 mov r4, r3 | r4 = r3;
0x000ac0b6 mov sb, r2 | sb = r2;
0x000ac0b8 str.w fp, [sp, 0x14] | __asm ("str.w fp, [var_14h]");
0x000ac0bc b 0xac0ea | goto label_31;
| label_2:
0x000ac0be ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ac0c0 add r3, r6 | r3 += r6;
| label_3:
0x000ac0c2 ldrsh.w r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x000ac0c6 cmp r2, r8 |
| if (r2 == r8) {
0x000ac0c8 beq.w 0xac318 | goto label_32;
| }
0x000ac0cc str r3, [sp] | *(sp) = r3;
0x000ac0ce mov r1, r7 | r1 = r7;
0x000ac0d0 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000ac0d2 mov r3, r8 | r3 = r8;
0x000ac0d4 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac0d6 bl 0x6999c | fcn_0006999c (r0, r1, r2, r3, r4);
| label_6:
0x000ac0da ldrsh.w ip, [r7, 0x22] | ip = *((r7 + 0x22));
0x000ac0de adds r6, 1 | r6++;
| do {
| label_1:
0x000ac0e0 add.w r8, r8, 1 | r8++;
0x000ac0e4 cmp ip, r8 |
| if (ip <= r8) {
0x000ac0e6 ble.w 0xac282 | goto label_33;
| }
| label_31:
0x000ac0ea cmp sl, r8 |
0x000ac0ec beq 0xac0e0 |
| } while (sl == r8);
0x000ac0ee ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000ac0f0 add.w r2, r8, r8, lsl 1 | r2 = r8 + (r8 << 1);
0x000ac0f4 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x000ac0f8 ldrh r3, [r3, 0xa] | r3 = *((r3 + 0xa));
0x000ac0fa ands r3, r3, 0x20 | r3 &= 0x20;
| if (r3 != r3) {
0x000ac0fe bne 0xac0e0 | goto label_1;
| }
0x000ac100 cmp r5, 0 |
| if (r5 == 0) {
0x000ac102 beq 0xac0be | goto label_2;
| }
0x000ac104 ldrh r1, [r5, 0x34] | r1 = *((r5 + 0x34));
0x000ac106 cmp r1, 0 |
| if (r1 == 0) {
0x000ac108 beq 0xac0e0 | goto label_1;
| }
0x000ac10a ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000ac10c sxth.w fp, r8 | __asm ("sxth.w fp, r8");
0x000ac110 subs r2, 2 | r2 -= 2;
0x000ac112 mov r0, r2 | r0 = r2;
0x000ac114 b 0xac11e |
| while (lr != fp) {
0x000ac116 adds r3, 1 | r3++;
0x000ac118 cmp r3, r1 |
| if (r3 == r1) {
0x000ac11a beq.w 0xac326 | goto label_34;
| }
0x000ac11e ldrsh lr, [r0, 2]! |
0x000ac122 cmp lr, fp |
0x000ac124 bne 0xac116 |
| }
0x000ac126 sxth.w lr, r3 | __asm ("sxth.w lr, r3");
| label_7:
0x000ac12a movs r0, 0 | r0 = 0;
0x000ac12c b 0xac136 |
| while (r3 != r4) {
0x000ac12e adds r0, 1 | r0++;
0x000ac130 cmp r0, r1 |
| if (r0 == r1) {
0x000ac132 beq.w 0xac32c | goto label_35;
| }
0x000ac136 ldrsh r3, [r2, 2]! | r3 = *((r2 += 2));
0x000ac13a cmp r3, r4 |
0x000ac13c bne 0xac12e |
| }
0x000ac13e sxth r0, r0 | __asm ("sxth r0, r0");
| label_8:
0x000ac140 ldrh r3, [r5, 0x32] | r3 = *((r5 + 0x32));
0x000ac142 cmp r3, lr |
| if (r3 > lr) {
0x000ac144 bgt 0xac0e0 | goto label_1;
| }
0x000ac146 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ac148 add r3, lr | r3 += lr;
0x000ac14a cmp lr, r0 |
0x000ac14c it gt |
| if (lr <= r0) {
0x000ac14e subgt r3, 1 | r3--;
| }
0x000ac150 b 0xac0c2 | goto label_3;
| label_16:
0x000ac152 ldr r3, [pc, 0x2d4] |
0x000ac154 add r3, pc | r3 = 0x158582;
| do {
0x000ac156 str r2, [sp] | *(sp) = r2;
0x000ac158 mov r0, r4 | r0 = r4;
0x000ac15a ldr r2, [pc, 0x2d0] |
0x000ac15c ldr r1, [pc, 0x2d0] |
0x000ac15e add r2, pc | r2 = 0x158590;
0x000ac160 add r1, pc | r1 = 0x158594;
0x000ac162 bl 0x21598 | fcn_00021598 (r0, r1);
0x000ac166 mov r1, r5 | r1 = r5;
0x000ac168 mov r0, r6 | r0 = r6;
0x000ac16a add sp, 0x3c |
0x000ac16c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000ac170 b.w 0x1a3c8 | void (*0x1a3c8)() ();
| label_18:
0x000ac174 ldr r1, [pc, 0x2bc] |
0x000ac176 mov r2, sb | r2 = sb;
0x000ac178 mov r0, r4 | r0 = r4;
0x000ac17a add r1, pc | r1 = 0x1585b2;
0x000ac17c bl 0x21598 | fcn_00021598 (r0, r1);
| label_4:
0x000ac180 mov r1, fp | r1 = fp;
0x000ac182 mov r0, r6 | r0 = r6;
0x000ac184 bl 0x16808 | fcn_00016808 (r0, r1);
0x000ac188 b 0xabe3c | goto label_0;
| label_17:
0x000ac18a ldr r3, [pc, 0x2ac] |
0x000ac18c add r3, pc | r3 = 0x1585ca;
0x000ac18e b 0xac156 |
| } while (1);
| label_19:
0x000ac190 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 >= r3) {
0x000ac192 bpl 0xac1a6 | goto label_36;
| }
0x000ac194 ldr r2, [pc, 0x2a4] |
0x000ac196 add r2, pc | r2 = 0x1585d6;
| do {
0x000ac198 ldr r1, [pc, 0x2a4] |
0x000ac19a mov r0, r4 | r0 = r4;
0x000ac19c mov r3, fp | r3 = fp;
0x000ac19e add r1, pc | r1 = 0x1585e2;
0x000ac1a0 bl 0x21598 | fcn_00021598 (r0, r1);
0x000ac1a4 b 0xac180 | goto label_4;
| label_36:
0x000ac1a6 ldr r2, [pc, 0x29c] |
0x000ac1a8 add r2, pc | r2 = 0x1585f2;
0x000ac1aa b 0xac198 |
| } while (1);
| label_20:
0x000ac1ac ldr r1, [pc, 0x298] |
0x000ac1ae mov r2, fp | r2 = fp;
0x000ac1b0 mov r0, r4 | r0 = r4;
0x000ac1b2 add r1, pc | r1 = 0x1585fe;
0x000ac1b4 bl 0x21598 | fcn_00021598 (r0, r1);
0x000ac1b8 b 0xac180 | goto label_4;
| label_21:
0x000ac1ba mov.w r8, 0x8000 | r8 = 0x8000;
0x000ac1be sub.w r3, r3, 0x80000 | r3 -= 0x80000;
0x000ac1c2 movt r8, 0xffff | r8 = (r8 & 0xFFFF) | 0xffff0000;
| label_22:
0x000ac1c6 ldr.w sb, [r3] | sb = *(r3);
0x000ac1ca movs r1, 0x1a | r1 = 0x1a;
0x000ac1cc ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ac1ce mov r0, r4 | r0 = r4;
0x000ac1d0 mov r2, sb | r2 = sb;
0x000ac1d2 ldr r3, [r3] | r3 = *(r3);
0x000ac1d4 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000ac1d8 bl 0x24140 | fcn_00024140 (r0, r1);
0x000ac1dc str r0, [sp, 0x1c] | var_1ch = r0;
0x000ac1de cmp r0, 0 |
| if (r0 != 0) {
0x000ac1e0 bne 0xac180 | goto label_4;
| }
0x000ac1e2 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000ac1e4 mov r2, sb | r2 = sb;
0x000ac1e6 ldr r1, [pc, 0x264] |
0x000ac1e8 mov r0, r4 | r0 = r4;
0x000ac1ea str r3, [sp, 8] | var_8h = r3;
0x000ac1ec str r3, [sp] | *(sp) = r3;
0x000ac1ee add r1, pc | r1 = 0x158640;
0x000ac1f0 ldr r3, [pc, 0x25c] |
0x000ac1f2 add r3, pc | r3 = 0x158646;
0x000ac1f4 str r3, [sp, 4] | var_4h = r3;
0x000ac1f6 movs r3, 1 | r3 = 1;
0x000ac1f8 strb r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x000ac1fa mov r3, sb | r3 = sb;
0x000ac1fc bl 0xa89e4 | fcn_000a89e4 (r0);
| label_23:
0x000ac200 movs r3, 0 | r3 = 0;
0x000ac202 ldr r1, [pc, 0x250] |
0x000ac204 str r3, [sp] | *(sp) = r3;
0x000ac206 mov r0, r4 | r0 = r4;
0x000ac208 ldr r3, [pc, 0x24c] |
0x000ac20a mov r2, sb | r2 = sb;
0x000ac20c add r1, pc | r1 = 0x158666;
0x000ac20e ldr r7, [pc, 0x24c] |
0x000ac210 str r1, [sp, 0x20] | var_20h = r1;
0x000ac212 add r3, pc | r3 = 0x15866e;
0x000ac214 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ac218 ldr r1, [pc, 0x244] |
0x000ac21a mov r3, sb | r3 = sb;
0x000ac21c mov r2, sb | r2 = sb;
0x000ac21e mov r0, r4 | r0 = r4;
0x000ac220 add r7, pc | r7 = 0x158682;
0x000ac222 add r1, pc | r1 = 0x158686;
0x000ac224 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ac228 ldr r1, [pc, 0x238] |
0x000ac22a mov r0, r4 | r0 = r4;
0x000ac22c add r1, pc | r1 = 0x158694;
0x000ac22e bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ac230 invalid |
0x000ac234 mov r2, sb | r2 = sb;
0x000ac236 ldr r1, [pc, 0x230] |
0x000ac238 mov r0, r4 | r0 = r4;
0x000ac23a ldr r3, [r3] | r3 = *(r3);
0x000ac23c add r1, pc | r1 = 0x1586aa;
0x000ac23e strd sl, r3, [sp] | __asm ("strd sl, r3, [sp]");
0x000ac242 mov r3, r8 | r3 = r8;
0x000ac244 bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ac248 mov r1, r8 | r1 = r8;
0x000ac24a mov r0, r4 | r0 = r4;
0x000ac24c movs r2, 2 | r2 = 2;
0x000ac24e bl 0x2f2d0 | fcn_0002f2d0 (r0, r1, r2);
0x000ac252 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000ac254 mov r2, sb | r2 = sb;
0x000ac256 ldr r1, [pc, 0x214] |
0x000ac258 mov r0, r4 | r0 = r4;
0x000ac25a str r3, [sp] | *(sp) = r3;
0x000ac25c mov.w r3, 1 | r3 = 1;
0x000ac260 strb r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x000ac262 movs r3, 1 | r3 = 1;
0x000ac264 str r3, [sp, 8] | var_8h = r3;
0x000ac266 add r1, pc | r1 = 0x1586d8;
0x000ac268 mov r3, sb | r3 = sb;
0x000ac26a str r7, [sp, 4] | var_4h = r7;
0x000ac26c bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ac270 movs r3, 1 | r3 = 1;
0x000ac272 ldr r1, [sp, 0x20] | r1 = var_20h;
0x000ac274 str r3, [sp] | *(sp) = r3;
0x000ac276 mov r2, sb | r2 = sb;
0x000ac278 mov r3, r7 | r3 = r7;
0x000ac27a mov r0, r4 | r0 = r4;
0x000ac27c bl 0xa89e4 | fcn_000a89e4 (r0);
0x000ac280 b 0xabf8c | goto label_5;
| label_33:
0x000ac282 mov r3, r6 | r3 = r6;
0x000ac284 mov r2, sb | r2 = sb;
0x000ac286 mov r7, r6 | r7 = r6;
0x000ac288 mov sb, r5 | sb = r5;
0x000ac28a ldr r6, [sp, 0x30] | r6 = var_30h;
0x000ac28c mov r5, r2 | r5 = r2;
0x000ac28e ldr.w fp, [sp, 0x14] | fp = var_14h;
0x000ac292 ldr r4, [sp, 0x34] | r4 = var_34h;
0x000ac294 cmp r3, 0 |
| if (r3 == 0) {
0x000ac296 beq 0xac386 | goto label_37;
| }
| label_11:
0x000ac298 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000ac29a mov r3, r7 | r3 = r7;
0x000ac29c ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac29e movs r1, 0x61 | r1 = 0x61;
0x000ac2a0 str r2, [sp] | *(sp) = r2;
0x000ac2a2 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000ac2a4 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ac2a8 cmp.w sb, 0 |
| if (sb == 0) {
0x000ac2ac beq 0xac3a0 | goto label_38;
| }
| label_15:
0x000ac2ae ldrh.w r3, [sb, 0x32] | r3 = *((sb + 0x32));
0x000ac2b2 movs r1, 0x8a | r1 = 0x8a;
0x000ac2b4 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000ac2b6 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac2b8 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x000ac2bc ldr r3, [sp, 0x28] | r3 = var_28h;
0x000ac2be ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000ac2c0 bl 0x2e8f4 | fcn_0002e8f4 (r0, r1, r2, r3, r4, r5);
| label_12:
0x000ac2c4 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000ac2c6 ldr r3, [r2, 0x6c] | r3 = *((r2 + 0x6c));
0x000ac2c8 cmp r3, 0 |
| if (r3 > 0) {
0x000ac2ca ble 0xac2dc |
0x000ac2cc ldr r2, [r2, 0x68] | r2 = *((r2 + 0x68));
0x000ac2ce add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000ac2d2 add.w r2, r2, r3, lsl 2 | r2 += (r3 << 2);
0x000ac2d6 movs r3, 2 | r3 = 2;
0x000ac2d8 strh r3, [r2, -0x12] | *((r2 - 0x12)) = r3;
| }
0x000ac2dc ldr r7, [sp, 0x18] | r7 = var_18h;
0x000ac2de movs r3, 0 | r3 = 0;
0x000ac2e0 ldr r4, [sp, 0x24] | r4 = var_24h;
0x000ac2e2 movs r1, 0x26 | r1 = 0x26;
0x000ac2e4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000ac2e6 str r3, [sp] | *(sp) = r3;
0x000ac2e8 mov r0, r7 | r0 = r7;
0x000ac2ea adds r3, r4, 1 | r3 = r4 + 1;
0x000ac2ec bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ac2f0 ldr r2, [r7, 0x6c] | r2 = *((r7 + 0x6c));
0x000ac2f2 cmp r4, 0 |
0x000ac2f4 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000ac2f6 mov r3, r7 | r3 = r7;
0x000ac2f8 itt lt |
| if (r4 >= 0) {
0x000ac2fa addlt r3, r2, -1 | r3 = r2 + -1;
| }
| if (r4 < 0) {
0x000ac2fe str r3, [sp, 0x24] | var_24h = r3;
| }
0x000ac300 ldr r3, [r1] | r3 = *(r1);
0x000ac302 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x000ac306 cbnz r3, 0xac332 | goto label_39;
| }
0x000ac308 ldr r3, [r1, 0x68] | r3 = *((r1 + 0x68));
0x000ac30a ldr r1, [sp, 0x24] | r1 = var_24h;
0x000ac30c add.w r1, r1, r1, lsl 2 | r1 += (r1 << 2);
0x000ac310 add.w r3, r3, r1, lsl 2 | r3 += (r1 << 2);
| do {
0x000ac314 str r2, [r3, 8] | *((r3 + 8)) = r2;
0x000ac316 b 0xac180 | goto label_4;
| label_32:
0x000ac318 movs r2, 0 | r2 = 0;
0x000ac31a ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac31c movs r1, 0x4b | r1 = 0x4b;
0x000ac31e str r2, [sp] | *(sp) = r2;
0x000ac320 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ac324 b 0xac0da | goto label_6;
| label_34:
0x000ac326 mov.w lr, -1 | lr = -1;
0x000ac32a b 0xac12a | goto label_7;
| label_35:
0x000ac32c mov.w r0, -1 | r0 = -1;
0x000ac330 b 0xac140 | goto label_8;
| label_39:
0x000ac332 ldr r3, [pc, 0x13c] |
0x000ac334 add r3, pc | r3 = 0x1587aa;
0x000ac336 adds r3, 4 | r3 += 4;
0x000ac338 b 0xac314 |
| } while (1);
| label_24:
0x000ac33a ldr r3, [r4, 0x74] | r3 = *((r4 + 0x74));
0x000ac33c cmp r3, 0 |
0x000ac33e beq 0xac3c4 |
| while (1) {
0x000ac340 mov r0, r4 | r0 = r4;
0x000ac342 bl 0x2dcb8 | fcn_0002dcb8 (r0);
0x000ac346 str r0, [sp, 0x18] | var_18h = r0;
0x000ac348 b 0xabfae | goto label_9;
| label_26:
0x000ac34a mov r3, r2 | r3 = r2;
0x000ac34c ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac34e ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000ac350 movs r1, 0x87 | r1 = 0x87;
0x000ac352 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x000ac356 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ac35a ldr r2, [sp, 0x14] | r2 = var_14h;
0x000ac35c ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
0x000ac35e ldrsh.w ip, [r2, 0x22] | ip = *((r2 + 0x22));
0x000ac362 cmp.w ip, 0 |
0x000ac366 add r3, ip | r3 += ip;
0x000ac368 add.w r3, r3, 1 | r3++;
0x000ac36c it le |
| if (ip > 0) {
0x000ac36e addle r2, r8, 2 | r2 = r8 + 2;
| }
0x000ac372 str r3, [sp, 0x28] | var_28h = r3;
0x000ac374 str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000ac376 it le |
| if (ip > 0) {
0x000ac378 strle r2, [sp, 0x20] | var_20h = r2;
| }
| if (ip > 0) {
0x000ac37a ble 0xac388 |
0x000ac37c add.w r3, r8, 2 | r3 = r8 + 2;
0x000ac380 mov r7, sb | r7 = sb;
0x000ac382 str r3, [sp, 0x20] | var_20h = r3;
0x000ac384 b 0xac0a0 | goto label_10;
| label_37:
0x000ac386 ldr r3, [r4, 0x2c] | r3 = *((r4 + 0x2c));
| }
| label_14:
0x000ac388 adds r3, 1 | r3++;
0x000ac38a movs r2, 0 | r2 = 0;
0x000ac38c str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000ac38e movs r3, 1 | r3 = 1;
0x000ac390 mov r7, r3 | r7 = r3;
0x000ac392 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac394 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ac396 movs r1, 0x4b | r1 = 0x4b;
0x000ac398 str r2, [sp] | *(sp) = r2;
0x000ac39a bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ac39e b 0xac298 | goto label_11;
| label_38:
0x000ac3a0 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ac3a2 movs r1, 0x80 | r1 = 0x80;
0x000ac3a4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000ac3a6 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac3a8 str r3, [sp] | *(sp) = r3;
0x000ac3aa ldr r3, [sp, 0x28] | r3 = var_28h;
0x000ac3ac bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ac3b0 b 0xac2c4 | goto label_12;
| label_25:
0x000ac3b2 movs r3, 0 | r3 = 0;
0x000ac3b4 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x000ac3b6 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac3b8 movs r1, 0x23 | r1 = 0x23;
0x000ac3ba str r3, [sp] | *(sp) = r3;
0x000ac3bc bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x000ac3c0 str r0, [sp, 0x24] | var_24h = r0;
0x000ac3c2 b 0xabffa | goto label_13;
0x000ac3c4 ldr r3, [r4] | r3 = *(r4);
0x000ac3c6 ldr r3, [r3, 0x50] | r3 = *((r3 + 0x50));
0x000ac3c8 lsls r3, r3, 0x1c | r3 <<= 0x1c;
0x000ac3ca itt pl |
| if (r3 < r3) {
0x000ac3cc movpl r3, 1 | r3 = 1;
| }
| if (r3 < r3) {
0x000ac3ce strbpl r3, [r4, 0x17] | *((r4 + 0x17)) = r3;
| }
0x000ac3d0 b 0xac340 |
| }
| label_30:
0x000ac3d2 cmp r7, 0 |
| if (r7 == 0) {
0x000ac3d4 beq 0xac388 | goto label_14;
| }
0x000ac3d6 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000ac3d8 mov r3, r7 | r3 = r7;
0x000ac3da ldr r0, [sp, 0x18] | r0 = var_18h;
0x000ac3dc movs r1, 0x61 | r1 = 0x61;
0x000ac3de str r2, [sp] | *(sp) = r2;
0x000ac3e0 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000ac3e2 bl 0x2dc70 | fcn_0002dc70 (r0, r1, r2, r3);
0x000ac3e6 b 0xac2ae | goto label_15;
| label_29:
0x000ac3e8 adds r3, 1 | r3++;
0x000ac3ea str r3, [sp, 0x28] | var_28h = r3;
0x000ac3ec str r3, [r4, 0x2c] | *((r4 + 0x2c)) = r3;
0x000ac3ee ldr r3, [sp, 0x14] | r3 = var_14h;
0x000ac3f0 ldrsh.w ip, [r3, 0x22] | ip = *((r3 + 0x22));
0x000ac3f4 cmp.w ip, 0 |
| if (ip > 0) {
0x000ac3f8 ble 0xac404 |
0x000ac3fa add.w r3, r8, 2 | r3 = r8 + 2;
0x000ac3fe mov r7, r2 | r7 = r2;
0x000ac400 str r3, [sp, 0x20] | var_20h = r3;
0x000ac402 b 0xac0a0 | goto label_10;
| }
0x000ac404 add.w r3, r8, 2 | r3 = r8 + 2;
0x000ac408 str r3, [sp, 0x20] | var_20h = r3;
0x000ac40a ldr r3, [sp, 0x28] | r3 = var_28h;
0x000ac40c b 0xac388 | goto label_14;
| label_28:
0x000ac40e movs r3, 0 | r3 = 0;
0x000ac410 ldrh r3, [r3, 0x34] | r3 = *((r3 + 0x34));
0x000ac412 udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xaca88 */
| #include <stdint.h>
|
; (fcn) fcn.000aca88 () | void fcn_000aca88 (int16_t arg_140h, int16_t arg_144h, int16_t arg_148h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| arithmetic x;
| int16_t var_5ch;
| int16_t var_60h;
| int16_t var_64h;
| int16_t var_68h;
| int16_t var_6ch;
| int16_t var_74h;
| int32_t var_4h;
| arithmetic var_8h_2;
| int16_t var_94h;
| int8_t var_84h;
| int16_t var_114h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000aca88 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000aca8c sub sp, 0x11c |
0x000aca8e str r2, [sp, 0x24] | var_24h = r2;
0x000aca90 mov r8, r3 | r8 = r3;
0x000aca92 mov r6, r1 | r6 = r1;
0x000aca94 movs r1, 0 | r1 = 0;
0x000aca96 ldr r2, [pc, 0x330] |
0x000aca98 mov.w fp, 7 |
0x000aca9c str r3, [sp, 8] | var_8h = r3;
0x000aca9e ldr r3, [pc, 0x32c] | r3 = *(0xacdce);
0x000acaa0 add r2, pc | r2 = 0x15986e;
0x000acaa2 str r0, [sp, 0x2c] | var_2ch = r0;
0x000acaa4 movs r0, 0x20 | r0 = 0x20;
0x000acaa6 ldr r4, [sp, 0x140] | r4 = *(arg_140h);
0x000acaa8 ldr r3, [r2, r3] |
0x000acaaa ldr r2, [sp, 0x144] | r2 = *(arg_144h);
0x000acaac ldr r3, [r3] | r3 = imp.sinh;
0x000acaae str r3, [sp, 0x114] | var_114h = r3;
0x000acab0 mov.w r3, 0 | r3 = 0;
0x000acab4 str r2, [sp, 0x1c] | var_1ch = r2;
0x000acab6 ldr r2, [sp, 0x148] | r2 = *(arg_148h);
0x000acab8 str r2, [sp, 0x20] | var_20h = r2;
0x000acaba blx 0x8240 | r0 = fcn_00008240 ();
0x000acabe mov sb, r0 | sb = r0;
0x000acac0 cmp r0, 0 |
| if (r0 == 0) {
0x000acac2 beq.w 0xaccd8 | goto label_10;
| }
0x000acac6 movs r2, 0x20 | r2 = 0x20;
0x000acac8 movs r1, 0 | r1 = 0;
0x000acaca blx 0x839c | fcn_0000839c ();
0x000acace movs r7, 0 | r7 = 0;
0x000acad0 movs r0, 0x6c | r0 = 0x6c;
0x000acad2 str r7, [sp, 0x58] | x = r7;
0x000acad4 blx 0x86a4 | r0 = fcn_000086a4 ();
0x000acad8 mov r5, r0 | r5 = r0;
0x000acada cmp r0, 0 |
| if (r0 == 0) {
0x000acadc beq.w 0xaccca | goto label_2;
| }
0x000acae0 movs r2, 0x68 | r2 = 0x68;
0x000acae2 mov r1, r7 | r1 = r7;
0x000acae4 adds r0, 4 | r0 += 4;
0x000acae6 str.w r8, [sp, 8] | __asm ("str.w r8, [var_8h]");
0x000acaea blx 0x839c | fcn_0000839c ();
0x000acaee mov.w r3, -1 | r3 = -1;
0x000acaf2 lsl.w r8, r8, 2 | r8 <<= 2;
0x000acaf6 str r3, [r5, 0x48] | *((r5 + 0x48)) = r3;
0x000acaf8 mov r1, r7 | r1 = r7;
0x000acafa ldr r3, [sp, 8] | r3 = var_8h;
0x000acafc str r6, [r5] | *(r5) = r6;
0x000acafe add.w sl, r8, r3 | sl = r8 + r3;
0x000acb02 mov r0, sl | r0 = sl;
0x000acb04 blx 0x8240 | r0 = fcn_00008240 ();
0x000acb08 mov r6, r0 | r6 = r0;
0x000acb0a cmp r0, 0 |
| if (r0 == 0) {
0x000acb0c beq.w 0xad1ac | goto label_40;
| }
0x000acb10 mov r2, sl | r2 = sl;
0x000acb12 mov r1, r7 | r1 = r7;
0x000acb14 blx 0x839c | fcn_0000839c ();
0x000acb18 add.w r3, r6, r8 | r3 = r6 + r8;
| label_31:
0x000acb1c strd r6, r3, [r5, 0x10] | __asm ("strd r6, r3, [r5, 0x10]");
0x000acb20 ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x000acb22 mov r0, r6 | r0 = r6;
0x000acb24 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000acb28 mov r8, r0 | r8 = r0;
0x000acb2a adds r0, 1 | r0++;
0x000acb2c blx 0x86a4 | r0 = fcn_000086a4 ();
0x000acb30 mov r7, r0 | r7 = r0;
0x000acb32 cmp r0, 0 |
| if (r0 == 0) {
0x000acb34 beq.w 0xad1b8 | goto label_41;
| }
0x000acb38 mov r1, r6 | r1 = r6;
0x000acb3a mov r2, r8 | r2 = r8;
0x000acb3c movs r6, 0 | r6 = 0;
0x000acb3e blx 0x8610 | fcn_00008610 ();
0x000acb42 strb.w r6, [r7, r8] | *((r7 + r8)) = r6;
0x000acb46 str r7, [r5, 4] | *((r5 + 4)) = r7;
0x000acb48 ldr.w sl, [r4, 8] | sl = *((r4 + 8));
0x000acb4c mov r0, sl | r0 = sl;
0x000acb4e blx 0x85b4 | r0 = fcn_000085b4 ();
0x000acb52 mov r8, r0 | r8 = r0;
0x000acb54 adds r0, 1 | r0++;
0x000acb56 blx 0x86a4 | r0 = fcn_000086a4 ();
0x000acb5a mov r7, r0 | r7 = r0;
0x000acb5c cmp r0, 0 |
| if (r0 == 0) {
0x000acb5e beq.w 0xad1bc | goto label_42;
| }
0x000acb62 mov r1, sl | r1 = sl;
0x000acb64 mov r2, r8 | r2 = r8;
0x000acb66 blx 0x8610 | fcn_00008610 ();
0x000acb6a ldr r1, [pc, 0x264] |
0x000acb6c add.w r3, r5, 0x2c | r3 = r5 + 0x2c;
0x000acb70 vldr d16, [pc, 0x24c] | __asm ("vldr d16, aav.0x000000ff");
0x000acb74 mov r0, r7 | r0 = r7;
0x000acb76 strb.w r6, [r7, r8] | *((r7 + r8)) = r6;
0x000acb7a add r1, pc | r1 = 0x159950;
0x000acb7c str r7, [r5, 8] | *((r5 + 8)) = r7;
0x000acb7e vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000acb82 blx 0x8540 | r0 = fcn_00008540 ();
0x000acb86 cmp r0, 0 |
| if (r0 == 0) {
0x000acb88 beq.w 0xad404 | goto label_43;
| }
0x000acb8c ldr r3, [sp, 8] | r3 = var_8h;
0x000acb8e cmp r3, 3 |
| if (r3 <= 3) {
0x000acb90 ble.w 0xacd6c | goto label_44;
| }
0x000acb94 ldr r2, [pc, 0x23c] |
0x000acb96 add.w r3, r4, 8 | r3 = r4 + 8;
0x000acb9a str.w sb, [sp, 0x28] | __asm ("str.w sb, [var_28h]");
0x000acb9e mov.w fp, 3 |
0x000acba2 mov sb, r3 | sb = r3;
0x000acba4 add r2, pc | r2 = 0x15997c;
0x000acba6 str r2, [sp, 0x38] | var_38h = r2;
0x000acba8 ldr r2, [pc, 0x22c] |
0x000acbaa add r2, pc | r2 = 0x159986;
0x000acbac str r2, [sp, 0x30] | var_30h = r2;
0x000acbae ldr r2, [pc, 0x22c] |
0x000acbb0 add r2, pc | r2 = 0x159992;
0x000acbb2 str r2, [sp, 0x34] | var_34h = r2;
0x000acbb4 add r2, sp, 0x64 | r2 += var_64h;
0x000acbb6 str r2, [sp, 0x14] | var_14h = r2;
0x000acbb8 add r2, sp, 0x5c | r2 += var_5ch;
0x000acbba str r2, [sp, 0x10] | var_10h = r2;
0x000acbbc add r2, sp, 0x58 | r2 += x;
0x000acbbe str r2, [sp, 0xc] | var_ch = r2;
| label_1:
0x000acbc0 ldr r6, [sb, 4]! | r6 = *((sb += 4));
0x000acbc4 movs r4, 0 | r4 = 0;
0x000acbc6 ldrd r2, r3, [sp, 0x10] | __asm ("ldrd r2, r3, [var_14h]");
0x000acbca ldr r0, [sp, 0xc] | r0 = var_ch;
0x000acbcc mov r1, r6 | r1 = r6;
0x000acbce str r4, [sp, 0x60] | var_60h = r4;
0x000acbd0 bl 0x41c60 | r0 = fcn_00041c60 (r0, r1, r2, r3);
0x000acbd4 cmp r0, 0 |
| if (r0 == 0) {
0x000acbd6 beq.w 0xacf9c | goto label_45;
| }
0x000acbda ldrb r3, [r0] | r3 = *(r0);
0x000acbdc cmp r3, 0x20 |
| if (r3 != 0x20) {
0x000acbde bne.w 0xad0e8 | goto label_46;
| }
| do {
0x000acbe2 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x000acbe6 cmp r3, 0x20 |
0x000acbe8 beq 0xacbe2 |
| } while (r3 == 0x20);
0x000acbea cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x000acbec bne.w 0xacf1a | goto label_47;
| }
| label_13:
0x000acbf0 ldr r3, [sp, 0x64] | r3 = var_64h;
0x000acbf2 cmp r3, 0 |
| if (r3 != 0) {
0x000acbf4 bne.w 0xacf68 | goto label_48;
| }
0x000acbf8 ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x000acbfa adds r0, 1 | r0++;
0x000acbfc cmp r3, 0x20 |
| if (r3 != 0x20) {
0x000acbfe bne 0xacc08 | goto label_49;
| }
| do {
0x000acc00 ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x000acc04 cmp r3, 0x20 |
0x000acc06 beq 0xacc00 |
| } while (r3 == 0x20);
| label_49:
0x000acc08 movs r4, 1 | r4 = 1;
| label_14:
0x000acc0a ldr r7, [sp, 0x5c] | r7 = var_5ch;
0x000acc0c cmp r3, 0 |
| if (r3 != 0) {
0x000acc0e bne.w 0xacf24 | goto label_50;
| }
| label_4:
0x000acc12 ldr r6, [sp, 0x58] | r6 = x;
0x000acc14 cmp r6, 0 |
| if (r6 != 0) {
0x000acc16 bne.w 0xad0be | goto label_51;
| }
0x000acc1a cmp r4, 0 |
| if (r4 == 0) {
0x000acc1c beq 0xaccfc | goto label_52;
| }
0x000acc1e str r3, [sp, 0x18] | var_18h = r3;
0x000acc20 cmp r7, 0 |
| if (r7 == 0) {
0x000acc22 beq.w 0xad23a | goto label_53;
| }
0x000acc26 ldr r4, [pc, 0x1b8] |
0x000acc28 mov sl, r7 | sl = r7;
0x000acc2a add r4, pc | r4 = 0x159a10;
| label_6:
0x000acc2c movs r3, 0 | r3 = 0;
0x000acc2e mov r0, sl | r0 = sl;
0x000acc30 str r3, [sp, 0x68] | var_68h = r3;
0x000acc32 blx 0x85b4 | fcn_000085b4 ();
0x000acc36 mov r1, sl | r1 = sl;
0x000acc38 mov r2, r0 | r2 = r0;
0x000acc3a mov r8, r0 | r8 = r0;
0x000acc3c ldr r0, [sp, 0x30] | r0 = var_30h;
0x000acc3e blx 0x8154 | r0 = fcn_00008154 ();
0x000acc42 mov r6, r0 | r6 = r0;
0x000acc44 cmp r0, 0 |
| if (r0 != 0) {
0x000acc46 bne.w 0xad0f0 | goto label_54;
| }
0x000acc4a ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x000acc4c cmp r3, 0 |
| if (r3 == 0) {
0x000acc4e beq.w 0xad244 | goto label_55;
| }
| label_20:
0x000acc52 movs r2, 1 | r2 = 1;
| label_0:
0x000acc54 ldrb r3, [r4] | r3 = *(r4);
0x000acc56 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x000acc58 bne 0xacc62 | goto label_56;
| }
| do {
0x000acc5a ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x000acc5e cmp r3, 0x20 |
0x000acc60 beq 0xacc5a |
| } while (r3 == 0x20);
| label_56:
0x000acc62 eor r2, r2, 1 | r2 ^= 1;
0x000acc66 cmp r3, 0x2c |
0x000acc68 ite ne |
| if (r3 == 0x2c) {
0x000acc6a movne r2, 0 | r2 = 0;
| }
| if (r3 != 0x2c) {
0x000acc6c andeq r2, r2, 1 | r2 &= 1;
| }
0x000acc70 cmp r2, 0 |
| if (r2 != 0) {
0x000acc72 bne.w 0xad28c | goto label_57;
| }
0x000acc76 cmp r3, 0 |
| if (r3 == 0) {
0x000acc78 beq 0xacd48 | goto label_11;
| }
0x000acc7a ldrb r2, [r4] | r2 = *(r4);
| label_21:
0x000acc7c subs r2, 0x30 | r2 -= 0x30;
0x000acc7e uxtb r3, r2 | r3 = (int8_t) r2;
0x000acc80 cmp r3, 9 |
| if (r3 > 9) {
0x000acc82 bhi.w 0xad64c | goto label_58;
| }
0x000acc86 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x000acc88 cmp r1, 0x1f |
| if (r1 == 0x1f) {
0x000acc8a beq.w 0xad642 | goto label_59;
| }
0x000acc8e movs r3, 0 | r3 = 0;
0x000acc90 b 0xacc9a |
| while (r0 < 9) {
0x000acc92 cmp.w r3, 0x3e8 |
| if (r3 >= 0x3e8) {
0x000acc96 bge.w 0xad0b0 | goto label_60;
| }
0x000acc9a add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000acc9e add.w r3, r2, r3, lsl 1 | r3 = r2 + (r3 << 1);
0x000acca2 ldrb r2, [r4, 1]! | r2 = *((r4 += 1));
0x000acca6 subs r2, 0x30 | r2 -= 0x30;
0x000acca8 uxtb r0, r2 | r0 = (int8_t) r2;
0x000accaa cmp r0, 9 |
0x000accac bls 0xacc92 |
| }
0x000accae subs r0, r3, 1 | r0 = r3 - 1;
0x000accb0 movw r2, 0x3e6 | r2 = 0x3e6;
0x000accb4 cmp r0, r2 |
| if (r0 > r2) {
0x000accb6 bhi.w 0xad0b0 | goto label_60;
| }
0x000accba ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000accbc str.w r3, [r2, r1, lsl 2] | __asm ("str.w r3, [r2, r1, lsl 2]");
0x000accc0 movs r2, 0 | r2 = 0;
0x000accc2 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x000accc4 adds r3, 1 | r3++;
0x000accc6 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x000accc8 b 0xacc54 | goto label_0;
| label_2:
0x000accca mov.w fp, 7 |
| label_3:
0x000accce mov r0, sb | r0 = sb;
0x000accd0 mov.w sb, 0 | sb = 0;
0x000accd4 bl 0x614bc | fcn_000614bc (r0);
| label_10:
0x000accd8 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000accda ldr r2, [pc, 0x108] |
0x000accdc str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x000acce0 ldr r3, [pc, 0xe8] | r3 = *(0xacdcc);
0x000acce2 add r2, pc | r2 = 0x159acc;
0x000acce4 ldr r3, [r2, r3] | r3 = imp.sinh;
0x000acce6 ldr r2, [r3] | r2 = imp.sinh;
0x000acce8 ldr r3, [sp, 0x114] | r3 = var_114h;
0x000accea eors r2, r3 | r2 ^= r3;
0x000accec mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000accf0 bne.w 0xad756 | goto label_61;
| }
0x000accf4 mov r0, fp | r0 = fp;
0x000accf6 add sp, 0x11c |
0x000accf8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_52:
0x000accfc str r4, [sp, 0x18] | var_18h = r4;
| label_5:
0x000accfe ldr r1, [sp, 0x38] | r1 = var_38h;
0x000acd00 mov r0, r7 | r0 = r7;
0x000acd02 blx 0x8540 | r0 = fcn_00008540 ();
0x000acd06 cmp r0, 0 |
| if (r0 == 0) {
0x000acd08 beq.w 0xad0d4 | goto label_62;
| }
0x000acd0c ldr r1, [pc, 0xd8] |
0x000acd0e mov r0, r7 | r0 = r7;
0x000acd10 add r1, pc | r1 = 0x159afc;
0x000acd12 blx 0x8540 | r0 = fcn_00008540 ();
0x000acd16 cmp r0, 0 |
| if (r0 == 0) {
0x000acd18 beq.w 0xad0d4 | goto label_62;
| }
0x000acd1c ldr r3, [sp, 0x18] | r3 = var_18h;
| if (r3 != 0) {
0x000acd1e cbz r3, 0xacd38 |
0x000acd20 ldr r1, [pc, 0xc8] |
0x000acd22 mov r0, r3 | r0 = r3;
0x000acd24 add r1, pc | r1 = 0x159b14;
0x000acd26 blx 0x8540 | r0 = fcn_00008540 ();
0x000acd2a cmp r0, 0 |
| if (r0 != 0) {
0x000acd2c bne.w 0xad656 | goto label_63;
| }
0x000acd30 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x000acd32 movs r1, 1 | r1 = 1;
0x000acd34 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000acd36 strb r1, [r2, r3] | *((r2 + r3)) = r1;
| }
0x000acd38 movs r6, 0 | r6 = 0;
| label_12:
0x000acd3a ldrd r3, r2, [r5, 0xc] | __asm ("ldrd r3, r2, [r5, 0xc]");
0x000acd3e adds r1, r3, 1 | r1 = r3 + 1;
0x000acd40 str r1, [r5, 0xc] | *((r5 + 0xc)) = r1;
0x000acd42 str.w r7, [r2, r3, lsl 2] | __asm ("str.w r7, [r2, r3, lsl 2]");
0x000acd44 strb r3, [r4] | *(r4) = r3;
0x000acd46 movs r7, 0 | r7 = 0;
| label_11:
0x000acd48 mov r0, r7 | r0 = r7;
0x000acd4a str r6, [sp, 0x58] | x = r6;
0x000acd4c blx 0x8404 | fcn_00008404 ();
0x000acd50 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000acd52 add.w fp, fp, 1 |
0x000acd56 blx 0x8404 | fcn_00008404 ();
0x000acd5a cmp r6, 0 |
| if (r6 != 0) {
0x000acd5c bne.w 0xad74a | goto label_64;
| }
0x000acd60 ldr r3, [sp, 8] | r3 = var_8h;
0x000acd62 cmp r3, fp |
| if (r3 != fp) {
0x000acd64 bne.w 0xacbc0 | goto label_1;
| }
0x000acd68 ldr.w sb, [sp, 0x28] | sb = var_28h;
| label_44:
0x000acd6c ldr r3, [r5, 0x38] | r3 = *((r5 + 0x38));
0x000acd6e cmp r3, 0 |
| if (r3 == 0) {
0x000acd70 beq.w 0xad192 | goto label_65;
| }
| label_19:
0x000acd74 ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x000acd76 cmp r3, 0 |
| if (r3 == 0) {
0x000acd78 beq.w 0xad3b6 | goto label_66;
| }
| label_26:
0x000acd7c ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x000acd7e cmp r3, 0 |
| if (r3 == 0) {
0x000acd80 beq.w 0xad46e | goto label_67;
| }
| label_30:
0x000acd84 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000acd88 add r2, sp, 0x6c | r2 += var_6ch;
0x000acd8a add r6, sp, 0x68 | r6 += var_68h;
0x000acd8c movs r4, 0 | r4 = 0;
0x000acd8e mov r1, r6 | r1 = r6;
0x000acd90 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x000acd94 add r2, sp, 0x64 | r2 += var_64h;
0x000acd96 mov r0, r2 | r0 = r2;
0x000acd98 ldr r2, [pc, 0x54] |
0x000acd9a mov sl, r0 | sl = r0;
0x000acd9c strd r4, r4, [sp, 0x64] | __asm ("strd r4, r4, [var_68h]");
0x000acda0 add r2, pc | r2 = 0x159b94;
0x000acda2 bl 0x4c128 | fcn_0004c128 (r0, r1);
0x000acda6 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000acda8 cmp r3, 1 |
| if (r3 == 1) {
0x000acdaa beq 0xace20 | goto label_68;
| }
0x000acdac ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x000acdae cmp r2, r4 |
| if (r2 <= r4) {
0x000acdb0 ble 0xace20 | goto label_68;
| }
0x000acdb2 ldr r7, [pc, 0x40] |
0x000acdb4 ldr.w r8, [pc, 0x40] | r8 = *(0x000acdf8);
0x000acdb8 add r7, pc | r7 = 0x159bb2;
0x000acdba add r8, pc | r8 += pc;
0x000acdbc b 0xacdfe |
| while (r4 < r3) {
0x000acdfc ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000acdfe cmp r3, 2 |
0x000ace00 mov r1, r6 | r1 = r6;
0x000ace02 itete eq |
| if (r3 != 2) {
0x000ace04 ldreq r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| }
| if (r3 == 2) {
0x000ace06 movne r3, r4 | r3 = r4;
| }
| if (r3 != 2) {
0x000ace08 moveq r2, r8 | r2 = r8;
| }
| if (r3 == 2) {
0x000ace0a movne r2, r7 | r2 = r7;
| }
0x000ace0c mov r0, sl | r0 = sl;
0x000ace0e it eq |
| if (r3 != 2) {
0x000ace10 ldreq r3, [r3, r4, lsl 2] | offset_0 = r4 << 2;
| r3 = *((r3 + offset_0));
| }
0x000ace14 adds r4, 1 | r4++;
0x000ace16 bl 0x4c128 | fcn_0004c128 (r0, r1);
0x000ace1a ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000ace1c cmp r4, r3 |
0x000ace1e blt 0xacdfc |
| }
| label_68:
0x000ace20 ldrd r7, r3, [sp, 0x64] | __asm ("ldrd r7, r3, [var_68h]");
0x000ace24 str r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
0x000ace26 cmp r7, 0 |
| if (r7 != 0) {
0x000ace28 bne.w 0xacf92 | goto label_7;
| }
0x000ace2c ldr r3, [sp, 0x24] | r3 = var_24h;
0x000ace2e movs r0, 0x58 | r0 = 0x58;
0x000ace30 movs r1, 0 | r1 = 0;
0x000ace32 str.w r5, [sb, 0xc] | __asm ("str.w r5, [sb, 0xc]");
0x000ace36 str r7, [sp, 0x68] | var_68h = r7;
0x000ace38 str.w r3, [sb, 0x18] | __asm ("str.w r3, [sb, 0x18]");
0x000ace3c blx 0x8240 | r0 = fcn_00008240 ();
0x000ace40 mov r8, r0 | r8 = r0;
0x000ace42 cmp r0, 0 |
| if (r0 == 0) {
0x000ace44 beq.w 0xad12a | goto label_69;
| }
0x000ace48 movs r2, 0x54 | r2 = 0x54;
0x000ace4a mov r1, r7 | r1 = r7;
0x000ace4c adds r0, 4 | r0 += 4;
0x000ace4e blx 0x839c | fcn_0000839c ();
0x000ace52 ldr.w r1, [pc, 0x654] |
0x000ace56 movs r3, 0x40 | r3 = 0x40;
0x000ace58 str.w r8, [sb, 0x10] | __asm ("str.w r8, [sb, 0x10]");
0x000ace5c mov r0, r6 | r0 = r6;
0x000ace5e str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
0x000ace62 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x000ace64 add r1, pc | r1 = 0x15a312;
0x000ace66 str.w r5, [r8] | __asm ("str.w r5, [r8]");
0x000ace6a bl 0x4bed4 | fcn_0004bed4 (r0);
0x000ace6e ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000ace70 str.w r0, [r8, 4] | __asm ("str.w r0, [r8, 4]");
0x000ace74 cmp r0, 0 |
0x000ace76 ite eq |
| if (r0 != 0) {
0x000ace78 moveq r3, 0 | r3 = 0;
| }
| if (r0 == 0) {
0x000ace7a andne r3, r3, 1 | r3 &= 1;
| }
0x000ace7e cmp r3, 0 |
| if (r3 != 0) {
0x000ace80 bne.w 0xad416 | goto label_70;
| }
0x000ace84 ldr r4, [sp, 0x68] | r4 = var_68h;
| label_29:
0x000ace86 cmp r4, 0 |
| if (r4 != 0) {
0x000ace88 bne.w 0xad752 | goto label_71;
| }
0x000ace8c ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000ace8e mov r1, r4 | r1 = r4;
0x000ace90 ldr.w r8, [sb, 0x10] | r8 = *((sb + 0x10));
0x000ace94 adds r3, 9 | r3 += 9;
0x000ace96 lsl.w sl, r3, 3 | sl = r3 << 3;
0x000ace9a mov r0, sl | r0 = sl;
0x000ace9c blx 0x8240 | r0 = fcn_00008240 ();
0x000acea0 mov r7, r0 | r7 = r0;
0x000acea2 str.w r0, [sb, 0x14] | __asm ("str.w r0, [sb, 0x14]");
0x000acea6 cmp r0, 0 |
| if (r0 == 0) {
0x000acea8 beq.w 0xaccca | goto label_2;
| }
0x000aceac mov r2, sl | r2 = sl;
0x000aceae mov r1, r4 | r1 = r4;
0x000aceb0 blx 0x839c | fcn_0000839c ();
0x000aceb4 add.w r3, r7, 0x48 | r3 = r7 + 0x48;
0x000aceb8 strd r5, r8, [r7] | __asm ("strd r5, r8, [r7]");
0x000acebc str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x000acebe ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000acec0 cmp r3, 0 |
| if (r3 == 0) {
0x000acec2 beq.w 0xacfcc | goto label_72;
| }
0x000acec6 ldr.w r8, [r5, 0x20] | r8 = *((r5 + 0x20));
0x000aceca cmp.w r8, 0 |
| if (r8 == 0) {
0x000acece beq.w 0xad31a | goto label_73;
| }
| label_25:
0x000aced2 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x000aced4 cmp r3, 0 |
| if (r3 != 0) {
0x000aced6 bne.w 0xad3e6 | goto label_74;
| }
| label_27:
0x000aceda ldr r3, [sp, 0x20] | r3 = var_20h;
0x000acedc mov r0, r5 | r0 = r5;
0x000acede ldr.w r2, [pc, 0x5cc] | r2 = *(0x000ad4ac);
0x000acee2 ldr.w r1, [pc, 0x5cc] |
0x000acee6 str r3, [sp] | *(sp) = r3;
0x000acee8 movs r3, 1 | r3 = 1;
0x000aceea add r2, pc | r2 += pc;
0x000aceec add r1, pc | r1 = 0x15a3a2;
0x000aceee bl 0x85298 | r0 = fcn_00085298 (r0, r1, r2, r3, r4);
0x000acef2 mov fp, r0 |
0x000acef4 cmp r0, 0 |
| if (r0 == 0) {
0x000acef6 beq 0xacfb6 | goto label_75;
| }
| label_8:
0x000acef8 add.w r4, r7, 0x18 | r4 = r7 + 0x18;
0x000acefc add.w r5, r7, 0x44 | r5 = r7 + 0x44;
| do {
0x000acf00 ldr r0, [r4, 4]! | r0 = *((r4 += 4));
0x000acf04 blx 0x8580 | fcn_00008580 ();
0x000acf08 cmp r4, r5 |
0x000acf0a bne 0xacf00 |
| } while (r4 != r5);
0x000acf0c mov r0, r7 | r0 = r7;
0x000acf0e blx 0x8404 | fcn_00008404 ();
0x000acf12 movs r3, 0 | r3 = 0;
0x000acf14 str.w r3, [sb, 0x14] | __asm ("str.w r3, [sb, 0x14]");
0x000acf18 b 0xaccce | goto label_3;
| label_47:
0x000acf1a ldr r7, [sp, 0x5c] | r7 = var_5ch;
0x000acf1c movs r4, 0 | r4 = 0;
0x000acf1e cmp r3, 0 |
| if (r3 == 0) {
0x000acf20 beq.w 0xacc12 | goto label_4;
| }
| label_50:
0x000acf24 mov r1, r0 | r1 = r0;
0x000acf26 add r3, sp, 0x68 | r3 += var_68h;
0x000acf28 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000acf2a add r2, sp, 0x60 | r2 += var_60h;
0x000acf2c bl 0x41c60 | r0 = fcn_00041c60 (r0, r1, r2, r3);
0x000acf30 cmp r0, 0 |
| if (r0 == 0) {
0x000acf32 beq.w 0xad144 | goto label_76;
| }
0x000acf36 ldrb r3, [r0] | r3 = *(r0);
0x000acf38 cmp r3, 0 |
| if (r3 != 0) {
0x000acf3a bne.w 0xad144 | goto label_76;
| }
0x000acf3e ldr r6, [sp, 0x58] | r6 = x;
0x000acf40 ldr r3, [sp, 0x60] | r3 = var_60h;
0x000acf42 str r3, [sp, 0x18] | var_18h = r3;
0x000acf44 cmp r6, 0 |
| if (r6 != 0) {
0x000acf46 bne.w 0xad0be | goto label_51;
| }
0x000acf4a cmp r4, 0 |
| if (r4 == 0) {
0x000acf4c beq.w 0xaccfe | goto label_5;
| }
0x000acf50 mov sl, r7 | sl = r7;
0x000acf52 cmp r7, 0 |
| if (r7 == 0) {
0x000acf54 beq.w 0xad162 | goto label_77;
| }
| label_17:
0x000acf58 ldr r4, [sp, 0x18] | r4 = var_18h;
0x000acf5a cmp r4, 0 |
| if (r4 != 0) {
0x000acf5c bne.w 0xacc2c | goto label_6;
| }
0x000acf60 ldr.w r4, [pc, 0x550] |
0x000acf64 add r4, pc | r4 = 0x15a41c;
0x000acf66 b 0xacc2c | goto label_6;
| label_48:
0x000acf68 ldrd r7, r0, [sp, 0x58] | __asm ("ldrd r7, r0, [x]");
0x000acf6c ldr.w sb, [sp, 0x28] | sb = var_28h;
| if (r7 != 0) {
0x000acf70 cbnz r7, 0xacfaa | goto label_78;
| }
0x000acf72 mov r8, r7 | r8 = r7;
| do {
| label_16:
0x000acf74 ldr.w r0, [pc, 0x540] |
0x000acf78 mov r1, r6 | r1 = r6;
0x000acf7a movs r7, 1 | r7 = 1;
0x000acf7c add r0, pc | r0 = 0x15a438;
0x000acf7e blx 0x8644 | fcn_00008644 ();
0x000acf82 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000acf84 str r0, [r3] | *(r3) = r0;
0x000acf86 ldr r0, [sp, 0x5c] | r0 = var_5ch;
0x000acf88 blx 0x8404 | fcn_00008404 ();
0x000acf8c mov r0, r8 | r0 = r8;
0x000acf8e blx 0x8404 | fcn_00008404 ();
| label_7:
0x000acf92 mov r0, r5 | r0 = r5;
0x000acf94 bl 0x10224 | fcn_00010224 (r0);
| label_9:
0x000acf98 mov fp, r7 |
0x000acf9a b 0xaccce | goto label_3;
| label_45:
0x000acf9c mov r8, r0 | r8 = r0;
0x000acf9e ldrd r7, r0, [sp, 0x58] | __asm ("ldrd r7, r0, [x]");
0x000acfa2 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x000acfa6 cmp r7, 0 |
0x000acfa8 beq 0xacf74 |
| } while (r7 == 0);
| label_78:
0x000acfaa blx 0x8404 | fcn_00008404 ();
0x000acfae movs r0, 0 | r0 = 0;
0x000acfb0 blx 0x8404 | fcn_00008404 ();
0x000acfb4 b 0xacf92 | goto label_7;
| label_75:
0x000acfb6 ldr.w r1, [pc, 0x504] |
0x000acfba mov r2, r0 | r2 = r0;
0x000acfbc movs r3, 4 | r3 = 4;
0x000acfbe mov r0, r7 | r0 = r7;
0x000acfc0 add r1, pc | r1 = 0x15a482;
0x000acfc2 bl 0xa3758 | r0 = fcn_000a3758 (r0, r1, r2, r3);
0x000acfc6 mov fp, r0 |
0x000acfc8 cmp r0, 0 |
| if (r0 != 0) {
0x000acfca bne 0xacef8 | goto label_8;
| }
| label_72:
0x000acfcc ldr.w r1, [pc, 0x4f0] | r1 = *(0x000ad4c0);
0x000acfd0 movs r3, 0 | r3 = 0;
0x000acfd2 mov r0, r6 | r0 = r6;
0x000acfd4 str r3, [sp, 0x68] | var_68h = r3;
0x000acfd6 add r1, pc | r1 += pc;
0x000acfd8 bl 0x4bed4 | r0 = fcn_0004bed4 (r0);
0x000acfdc mov r2, r0 | r2 = r0;
| if (r0 == 0) {
0x000acfde cbz r0, 0xad01a | goto label_79;
| }
0x000acfe0 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000acfe2 cmp r3, 0 |
| if (r3 <= 0) {
0x000acfe4 ble 0xad01c | goto label_80;
| }
0x000acfe6 ldr.w r3, [pc, 0x4dc] | r3 = *(0x000ad4c4);
0x000acfea ldr.w r7, [pc, 0x4dc] |
0x000acfee ldr.w r8, [pc, 0x4dc] | r8 = *(0x000ad4cc);
0x000acff2 add r3, pc | r3 += pc;
0x000acff4 add r7, pc | r7 = 0x15a4c2;
0x000acff6 add r8, pc | r8 += pc;
0x000acff8 b 0xad002 |
| while (r0 != 0) {
0x000acffa ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x000acffc mov r3, r8 | r3 = r8;
0x000acffe cmp r4, r1 |
| if (r4 >= r1) {
0x000ad000 bge 0xad01c | goto label_80;
| }
0x000ad002 ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x000ad004 mov r0, r6 | r0 = r6;
0x000ad006 ldr.w r1, [r1, r4, lsl 2] | offset_1 = r4 << 2;
| r1 = *((r1 + offset_1));
0x000ad00a adds r4, 1 | r4++;
0x000ad00c str r1, [sp] | *(sp) = r1;
0x000ad00e mov r1, r7 | r1 = r7;
0x000ad010 bl 0x4bed4 | r0 = fcn_0004bed4 (r0);
0x000ad014 mov r2, r0 | r2 = r0;
0x000ad016 cmp r0, 0 |
0x000ad018 bne 0xacffa |
| }
| label_79:
0x000ad01a movs r2, 0 | r2 = 0;
| label_80:
0x000ad01c ldr.w r1, [pc, 0x4b0] |
0x000ad020 mov r0, r6 | r0 = r6;
0x000ad022 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000ad024 add r1, pc | r1 = 0x15a4f8;
0x000ad026 str r1, [sp] | *(sp) = r1;
0x000ad028 ldr.w r1, [pc, 0x4a8] |
0x000ad02c add r1, pc | r1 = 0x15a504;
0x000ad02e bl 0x4bed4 | r0 = fcn_0004bed4 (r0);
0x000ad032 mov r4, r0 | r4 = r0;
0x000ad034 cmp r0, 0 |
| if (r0 == 0) {
0x000ad036 beq.w 0xad140 | goto label_81;
| }
0x000ad03a ldr r0, [r5] | r0 = *(r5);
0x000ad03c mov r1, r4 | r1 = r4;
0x000ad03e blx 0x887c | r0 = fcn_0000887c ();
0x000ad042 mov r7, r0 | r7 = r0;
0x000ad044 mov r0, r4 | r0 = r4;
0x000ad046 blx 0x8404 | fcn_00008404 ();
| label_15:
0x000ad04a cmp r7, 0 |
| if (r7 != 0) {
0x000ad04c bne 0xacf98 | goto label_9;
| }
0x000ad04e ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad050 ldr.w sl, [sb, 0x10] | sl = *((sb + 0x10));
0x000ad054 str r3, [r5, 0x68] | *((r5 + 0x68)) = r3;
0x000ad056 mov r0, sl | r0 = sl;
0x000ad058 bl 0x95644 | r0 = fcn_00095644 (r0);
0x000ad05c mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x000ad05e cbz r0, 0xad06a |
0x000ad060 ldr r3, [r0] | r3 = *(r0);
0x000ad062 subs r3, 1 | r3--;
0x000ad064 cmp r3, 0 |
0x000ad066 str r3, [r0] | *(r0) = r3;
| if (r3 <= 0) {
0x000ad068 ble 0xad16a | goto label_82;
| }
| }
| label_18:
0x000ad06a ldr.w r4, [sb, 0x10] | r4 = *((sb + 0x10));
0x000ad06e movs r3, 0 | r3 = 0;
0x000ad070 ldr.w fp, [sl, 0x24] | fp = *((sl + 0x24));
0x000ad074 str.w r3, [sl, 0x24] | __asm ("str.w r3, [sl, 0x24]");
0x000ad078 ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
| if (r0 != 0) {
0x000ad07a cbz r0, 0xad082 |
0x000ad07c str r3, [r4, 0x28] | *((r4 + 0x28)) = r3;
0x000ad07e blx 0x8b04 | fcn_00008b04 ();
| }
0x000ad082 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
| if (r0 != 0) {
0x000ad084 cbz r0, 0xad08e |
0x000ad086 bl 0xf360 | fcn_0000f360 (r0);
0x000ad08a movs r3, 0 | r3 = 0;
0x000ad08c str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
| }
0x000ad08e ldr r6, [r4, 0x50] | r6 = *((r4 + 0x50));
| if (r6 != 0) {
0x000ad090 cbz r6, 0xad0a2 |
0x000ad092 ldr r3, [r6] | r3 = *(r6);
0x000ad094 subs r3, 1 | r3--;
0x000ad096 cmp r3, 0 |
0x000ad098 str r3, [r6] | *(r6) = r3;
| if (r3 <= 0) {
0x000ad09a ble.w 0xad2aa | goto label_83;
| }
| label_23:
0x000ad09e movs r3, 0 | r3 = 0;
0x000ad0a0 str r3, [r4, 0x50] | *((r4 + 0x50)) = r3;
| }
0x000ad0a2 movs r3, 0 | r3 = 0;
0x000ad0a4 str r3, [r5, 0x68] | *((r5 + 0x68)) = r3;
0x000ad0a6 cmp.w fp, 0 |
| if (fp != 0) {
0x000ad0aa bne.w 0xaccce | goto label_3;
| }
0x000ad0ae b 0xaccd8 | goto label_10;
| label_60:
0x000ad0b0 ldr r0, [sp, 0x34] | r0 = var_34h;
0x000ad0b2 blx 0x8644 | fcn_00008644 ();
| label_32:
0x000ad0b6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad0b8 movs r6, 1 | r6 = 1;
0x000ad0ba str r0, [r3] | *(r3) = r0;
0x000ad0bc b 0xacd48 | goto label_11;
| label_51:
0x000ad0be mov sl, r3 | sl = r3;
0x000ad0c0 mov r0, r7 | r0 = r7;
0x000ad0c2 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x000ad0c6 mov r7, r6 | r7 = r6;
0x000ad0c8 blx 0x8404 | fcn_00008404 ();
0x000ad0cc mov r0, sl | r0 = sl;
0x000ad0ce blx 0x8404 | fcn_00008404 ();
0x000ad0d2 b 0xacf92 | goto label_7;
| label_62:
0x000ad0d4 ldr.w r0, [pc, 0x400] | r0 = *(0x000ad4d8);
0x000ad0d8 mov r1, r7 | r1 = r7;
0x000ad0da add r0, pc | r0 += pc;
0x000ad0dc blx 0x8644 | fcn_00008644 ();
| label_38:
0x000ad0e0 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad0e2 movs r6, 1 | r6 = 1;
0x000ad0e4 str r0, [r3] | *(r3) = r0;
0x000ad0e6 b 0xacd3a | goto label_12;
| label_46:
0x000ad0e8 cmp r3, 0x3d |
| if (r3 == 0x3d) {
0x000ad0ea beq.w 0xacbf0 | goto label_13;
| }
0x000ad0ee b 0xacc0a | goto label_14;
| label_54:
0x000ad0f0 ldr r0, [pc, 0x3e8] |
0x000ad0f2 mov r2, r8 | r2 = r8;
0x000ad0f4 mov r1, sl | r1 = sl;
0x000ad0f6 add r0, pc | r0 = 0x15a5d6;
0x000ad0f8 blx 0x8154 | r0 = fcn_00008154 ();
0x000ad0fc mov r6, r0 | r6 = r0;
0x000ad0fe cmp r0, 0 |
| if (r0 == 0) {
0x000ad100 beq 0xad1d0 | goto label_84;
| }
0x000ad102 ldr r0, [pc, 0x3dc] |
0x000ad104 mov r2, r8 | r2 = r8;
0x000ad106 mov r1, sl | r1 = sl;
0x000ad108 add r0, pc | r0 = 0x15a5ee;
0x000ad10a blx 0x8154 | r0 = fcn_00008154 ();
0x000ad10e cmp r0, 0 |
| if (r0 != 0) {
0x000ad110 bne.w 0xad264 | goto label_85;
| }
0x000ad114 ldr r6, [r5, 0x20] | r6 = *((r5 + 0x20));
0x000ad116 cmp r6, 0 |
| if (r6 != 0) {
0x000ad118 bne.w 0xad306 | goto label_86;
| }
0x000ad11c ldrb r3, [r4] | r3 = *(r4);
0x000ad11e cmp r3, 0 |
| if (r3 != 0) {
0x000ad120 bne.w 0xad622 | goto label_87;
| }
0x000ad124 movs r3, 1 | r3 = 1;
0x000ad126 str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
0x000ad128 b 0xacd48 | goto label_11;
| label_69:
0x000ad12a mov.w fp, 7 |
0x000ad12e str.w r0, [sb, 0x10] | __asm ("str.w r0, [sb, 0x10]");
| label_28:
0x000ad132 mov r0, r8 | r0 = r8;
0x000ad134 bl 0x61430 | fcn_00061430 (r0);
0x000ad138 movs r3, 0 | r3 = 0;
0x000ad13a str.w r3, [sb, 0x10] | __asm ("str.w r3, [sb, 0x10]");
0x000ad13e b 0xaccce | goto label_3;
| label_81:
0x000ad140 ldr r7, [sp, 0x68] | r7 = var_68h;
0x000ad142 b 0xad04a | goto label_15;
| label_76:
0x000ad144 mov r0, r7 | r0 = r7;
0x000ad146 ldr r7, [sp, 0x58] | r7 = x;
0x000ad148 ldr.w sb, [sp, 0x28] | sb = var_28h;
0x000ad14c ldr.w r8, [sp, 0x60] | r8 = var_60h;
0x000ad150 cmp r7, 0 |
| if (r7 == 0) {
0x000ad152 beq.w 0xacf74 | goto label_16;
| }
0x000ad156 blx 0x8404 | fcn_00008404 ();
0x000ad15a mov r0, r8 | r0 = r8;
0x000ad15c blx 0x8404 | fcn_00008404 ();
0x000ad160 b 0xacf92 | goto label_7;
| label_77:
0x000ad162 ldr.w sl, [pc, 0x380] | sl = *(0x000ad4e4);
0x000ad166 add sl, pc | sl += pc;
0x000ad168 b 0xacf58 | goto label_17;
| label_82:
0x000ad16a ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x000ad16c cmp r3, 0 |
0x000ad16e itt gt |
| if (r3 <= 0) {
0x000ad170 movgt r8, r0 | r8 = r0;
| }
| if (r3 <= 0) {
0x000ad172 movgt r6, r7 | r6 = r7;
| }
| if (r3 <= 0) {
0x000ad174 ble 0xad18a | goto label_88;
| }
| do {
0x000ad176 ldr.w r0, [r8, 0x20] | r0 = *((r8 + 0x20));
0x000ad17a adds r6, 1 | r6++;
0x000ad17c blx 0x8404 | fcn_00008404 ();
0x000ad180 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000ad182 add.w r8, r8, 0xc | r8 += 0xc;
0x000ad186 cmp r6, r3 |
0x000ad188 blt 0xad176 |
| } while (r6 < r3);
| label_88:
0x000ad18a mov r0, r4 | r0 = r4;
0x000ad18c blx 0x8404 | fcn_00008404 ();
0x000ad190 b 0xad06a | goto label_18;
| label_65:
0x000ad192 movs r2, 0 | r2 = 0;
0x000ad194 ldr r0, [sp, 0x24] | r0 = var_24h;
0x000ad196 mov r3, r5 | r3 = r5;
0x000ad198 mov r1, r2 | r1 = r2;
0x000ad19a str r2, [sp] | *(sp) = r2;
0x000ad19c bl 0x50f34 | r0 = fcn_00050f34 (r0, r1, r2, r3, r4);
0x000ad1a0 mov r7, r0 | r7 = r0;
0x000ad1a2 str r0, [sp, 0x58] | x = r0;
0x000ad1a4 cmp r0, 0 |
| if (r0 == 0) {
0x000ad1a6 beq.w 0xacd74 | goto label_19;
| }
0x000ad1aa b 0xacf92 | goto label_7;
| label_40:
0x000ad1ac ldr r3, [sp, 8] | r3 = var_8h;
0x000ad1ae cmp r3, 0 |
| if (r3 == 0) {
0x000ad1b0 beq.w 0xad498 | goto label_89;
| }
0x000ad1b4 strd r0, r0, [r5, 0x10] | __asm ("strd r0, r0, [r5, 0x10]");
| label_41:
0x000ad1b8 movs r3, 0 | r3 = 0;
0x000ad1ba str r3, [r5, 4] | *((r5 + 4)) = r3;
| label_42:
0x000ad1bc add.w r3, r5, 0x2c | r3 = r5 + 0x2c;
0x000ad1c0 vldr d16, [pc, 0x2dc] | __asm ("vldr d16, aav.0x000000ff");
0x000ad1c4 movs r2, 0 | r2 = 0;
0x000ad1c6 movs r7, 7 | r7 = 7;
0x000ad1c8 str r2, [r5, 8] | *((r5 + 8)) = r2;
0x000ad1ca vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000ad1ce b 0xacf92 | goto label_7;
| label_84:
0x000ad1d0 mov r0, r4 | r0 = r4;
0x000ad1d2 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000ad1d6 add.w r8, r0, 1 | r8 = r0 + 1;
0x000ad1da lsl.w sl, r8, 2 | sl = r8 << 2;
0x000ad1de lsr.w r1, r8, 0x1e | r1 = r8 >> 0x1e;
0x000ad1e2 mov r0, sl | r0 = sl;
0x000ad1e4 blx 0x8240 | fcn_00008240 ();
0x000ad1e8 str r0, [sp, 0x3c] | var_3ch = r0;
0x000ad1ea cmp r0, 0 |
| if (r0 == 0) {
0x000ad1ec beq.w 0xad466 | goto label_90;
| }
0x000ad1f0 mov r2, sl | r2 = sl;
0x000ad1f2 mov r1, r6 | r1 = r6;
0x000ad1f4 blx 0x839c | fcn_0000839c ();
0x000ad1f8 adds.w r8, r8, r8 | r8 += r8;
0x000ad1fc adc.w r1, r6, r6 | __asm ("adc.w r1, r6, r6");
0x000ad200 mov r0, r8 | r0 = r8;
0x000ad202 blx 0x8240 | fcn_00008240 ();
0x000ad206 str r0, [sp, 0x44] | var_44h = r0;
0x000ad208 cmp r0, 0 |
| if (r0 == 0) {
0x000ad20a beq.w 0xad316 | goto label_91;
| }
0x000ad20e mov r2, r8 | r2 = r8;
0x000ad210 mov r1, r6 | r1 = r6;
0x000ad212 blx 0x839c | fcn_0000839c ();
0x000ad216 ldr r2, [r5, 0x38] | r2 = *((r5 + 0x38));
0x000ad218 cmp r2, 0 |
| if (r2 == 0) {
0x000ad21a beq.w 0xad556 | goto label_92;
| }
0x000ad21e ldr r0, [pc, 0x2c8] |
0x000ad220 add r0, pc | r0 = 0x15a70e;
0x000ad222 blx 0x8644 | fcn_00008644 ();
| label_36:
0x000ad226 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad228 movs r6, 1 | r6 = 1;
0x000ad22a str r0, [r3] | *(r3) = r0;
| label_24:
0x000ad22c ldr r0, [sp, 0x3c] | r0 = var_3ch;
0x000ad22e blx 0x8404 | fcn_00008404 ();
0x000ad232 ldr r0, [sp, 0x44] | r0 = var_44h;
0x000ad234 blx 0x8404 | fcn_00008404 ();
0x000ad238 b 0xacd48 | goto label_11;
| label_53:
0x000ad23a ldr.w sl, [pc, 0x2b0] | sl = *(0x000ad4ec);
0x000ad23e add sl, pc | sl += pc;
0x000ad240 mov r4, sl | r4 = sl;
0x000ad242 b 0xacc2c | goto label_6;
| label_55:
0x000ad244 movs r0, 0x7c | r0 = 0x7c;
0x000ad246 movs r1, 0 | r1 = 0;
0x000ad248 blx 0x8240 | r0 = fcn_00008240 ();
0x000ad24c mov r8, r0 | r8 = r0;
| if (r0 != 0) {
0x000ad24e cbz r0, 0xad25e |
0x000ad250 movs r2, 0x7c | r2 = 0x7c;
0x000ad252 mov r1, r6 | r1 = r6;
0x000ad254 blx 0x839c | fcn_0000839c ();
0x000ad258 str.w r8, [r5, 0x1c] | __asm ("str.w r8, [r5, 0x1c]");
0x000ad25c b 0xacc52 | goto label_20;
| }
0x000ad25e str r6, [r5, 0x1c] | *((r5 + 0x1c)) = r6;
0x000ad260 movs r6, 7 | r6 = 7;
0x000ad262 b 0xacd48 | goto label_11;
| label_85:
0x000ad264 ldr r0, [pc, 0x288] |
0x000ad266 mov r2, r8 | r2 = r8;
0x000ad268 mov r1, sl | r1 = sl;
0x000ad26a add r0, pc | r0 = 0x15a75e;
0x000ad26c blx 0x8154 | r0 = fcn_00008154 ();
0x000ad270 mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x000ad272 cbnz r0, 0xad2d0 | goto label_93;
| }
0x000ad274 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x000ad276 cmp r3, 0 |
| if (r3 == 0) {
0x000ad278 beq.w 0xad69a | goto label_94;
| }
0x000ad27c ldr r0, [pc, 0x274] |
0x000ad27e movs r6, 1 | r6 = 1;
0x000ad280 add r0, pc | r0 = 0x15a778;
0x000ad282 blx 0x8644 | fcn_00008644 ();
0x000ad286 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad288 str r0, [r3] | *(r3) = r0;
0x000ad28a b 0xacd48 | goto label_11;
| label_57:
0x000ad28c ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x000ad28e adds r4, 1 | r4++;
0x000ad290 cmp r2, 0x20 |
| if (r2 != 0x20) {
0x000ad292 bne.w 0xacc7c | goto label_21;
| }
| label_22:
0x000ad296 ldrb r2, [r4, 1]! | r2 = *((r4 += 1));
0x000ad29a cmp r2, 0x20 |
| if (r2 != 0x20) {
0x000ad29c bne.w 0xacc7c | goto label_21;
| }
0x000ad2a0 ldrb r2, [r4, 1]! | r2 = *((r4 += 1));
0x000ad2a4 cmp r2, 0x20 |
| if (r2 == 0x20) {
0x000ad2a6 beq 0xad296 | goto label_22;
| }
0x000ad2a8 b 0xacc7c | goto label_21;
| label_83:
0x000ad2aa ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000ad2ac cmp r3, 0 |
0x000ad2ae it gt |
| if (r3 <= 0) {
0x000ad2b0 movgt r8, r6 | r8 = r6;
| }
| if (r3 <= 0) {
0x000ad2b2 ble 0xad2c8 | goto label_95;
| }
| do {
0x000ad2b4 ldr.w r0, [r8, 0x20] | r0 = *((r8 + 0x20));
0x000ad2b8 adds r7, 1 | r7++;
0x000ad2ba blx 0x8404 | fcn_00008404 ();
0x000ad2be ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x000ad2c0 add.w r8, r8, 0xc | r8 += 0xc;
0x000ad2c4 cmp r7, r3 |
0x000ad2c6 blt 0xad2b4 |
| } while (r7 < r3);
| label_95:
0x000ad2c8 mov r0, r6 | r0 = r6;
0x000ad2ca blx 0x8404 | fcn_00008404 ();
0x000ad2ce b 0xad09e | goto label_23;
| label_93:
0x000ad2d0 ldr r0, [pc, 0x224] |
0x000ad2d2 mov r2, r8 | r2 = r8;
0x000ad2d4 mov r1, sl | r1 = sl;
0x000ad2d6 add r0, pc | r0 = 0x15a7d2;
0x000ad2d8 blx 0x8154 | r0 = fcn_00008154 ();
0x000ad2dc mov r6, r0 | r6 = r0;
0x000ad2de cmp r0, 0 |
| if (r0 != 0) {
0x000ad2e0 bne.w 0xad534 | goto label_96;
| }
0x000ad2e4 ldrb r3, [r4] | r3 = *(r4);
0x000ad2e6 sub.w r2, r3, 0x30 | r2 = r3 - 0x30;
0x000ad2ea cmp r2, 1 |
| if (r2 > 1) {
0x000ad2ec bhi.w 0xad682 | goto label_97;
| }
0x000ad2f0 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x000ad2f2 cmp r2, 0 |
| if (r2 != 0) {
0x000ad2f4 bne.w 0xad682 | goto label_97;
| }
0x000ad2f8 sub.w r3, r3, 0x31 | r3 -= 0x31;
0x000ad2fc clz r3, r3 | r3 &= r3;
0x000ad300 lsrs r3, r3, 5 | r3 >>= 5;
0x000ad302 str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x000ad304 b 0xacd48 | goto label_11;
| label_86:
0x000ad306 ldr r0, [pc, 0x1f4] |
0x000ad308 movs r6, 1 | r6 = 1;
0x000ad30a add r0, pc | r0 = 0x15a80c;
0x000ad30c blx 0x8644 | fcn_00008644 ();
0x000ad310 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad312 str r0, [r3] | *(r3) = r0;
0x000ad314 b 0xacd48 | goto label_11;
| label_91:
0x000ad316 movs r6, 7 | r6 = 7;
0x000ad318 b 0xad22c | goto label_24;
| label_73:
0x000ad31a ldr.w fp, [r5, 0xc] | fp = *((r5 + 0xc));
0x000ad31e movs r1, 0xa | r1 = 0xa;
0x000ad320 movs r0, 0x20 | r0 = 0x20;
0x000ad322 mov r3, r4 | r3 = r4;
0x000ad324 smlal r0, r3, fp, r1 | __asm ("smlal r0, r3, fp, r1");
0x000ad328 mov r1, r3 | r1 = r3;
0x000ad32a blx 0x8240 | r0 = fcn_00008240 ();
0x000ad32e mov sl, r0 | sl = r0;
0x000ad330 cmp r0, 0 |
| if (r0 == 0) {
0x000ad332 beq.w 0xad45c | goto label_98;
| }
0x000ad336 add.w r3, fp, fp, lsl 2 | r3 = fp + (fp << 2);
0x000ad33a ldr r2, [pc, 0x1c4] |
0x000ad33c mov r1, r0 | r1 = r0;
0x000ad33e lsls r3, r3, 1 | r3 <<= 1;
0x000ad340 add r2, pc | r2 = 0x15a846;
0x000ad342 adds r3, 0x20 | r3 += 0x20;
0x000ad344 mov r0, r3 | r0 = r3;
0x000ad346 str r3, [sp, 8] | var_8h = r3;
0x000ad348 blx 0x8968 | fcn_00008968 ();
0x000ad34c mov r0, sl | r0 = sl;
0x000ad34e blx 0x85b4 | fcn_000085b4 ();
0x000ad352 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000ad354 mov fp, r0 |
0x000ad356 cmp r3, 0 |
| if (r3 <= 0) {
0x000ad358 ble 0xad392 | goto label_99;
| }
0x000ad35a ldr r3, [pc, 0x1a8] |
0x000ad35c strd sb, r7, [sp, 0xc] | __asm ("strd sb, r7, [var_ch]");
0x000ad360 ldr r7, [sp, 8] | r7 = var_8h;
0x000ad362 add r3, pc | r3 = 0x15a86c;
0x000ad364 str r4, [sp, 8] | var_8h = r4;
0x000ad366 mov sb, r3 | sb = r3;
| do {
0x000ad368 add.w r4, sl, fp | r4 = sl + fp;
0x000ad36c mov r3, r8 | r3 = r8;
0x000ad36e mov r2, sb | r2 = sb;
0x000ad370 mov r1, r4 | r1 = r4;
0x000ad372 sub.w r0, r7, fp | r0 = r7 - fp;
0x000ad376 add.w r8, r8, 1 | r8++;
0x000ad37a blx 0x8968 | fcn_00008968 ();
0x000ad37e mov r0, r4 | r0 = r4;
0x000ad380 blx 0x85b4 | fcn_000085b4 ();
0x000ad384 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000ad386 add fp, r0 |
0x000ad388 cmp r8, r3 |
0x000ad38a blt 0xad368 |
| } while (r8 < r3);
0x000ad38c ldrd sb, r7, [sp, 0xc] | __asm ("ldrd sb, r7, [var_ch]");
0x000ad390 ldr r4, [sp, 8] | r4 = var_8h;
| label_99:
0x000ad392 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad394 mov r2, sl | r2 = sl;
0x000ad396 ldr r1, [pc, 0x170] |
0x000ad398 mov r0, r5 | r0 = r5;
0x000ad39a str r3, [sp] | *(sp) = r3;
0x000ad39c movs r3, 0 | r3 = 0;
0x000ad39e add r1, pc | r1 = 0x15a8ac;
0x000ad3a0 bl 0x85298 | r0 = fcn_00085298 (r0, r1, r2, r3, r4);
0x000ad3a4 mov fp, r0 |
0x000ad3a6 mov r0, sl | r0 = sl;
0x000ad3a8 blx 0x8404 | fcn_00008404 ();
0x000ad3ac cmp.w fp, 0 |
| if (fp == 0) {
0x000ad3b0 beq.w 0xaced2 | goto label_25;
| }
0x000ad3b4 b 0xacef8 | goto label_8;
| label_66:
0x000ad3b6 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x000ad3b8 cmp r3, 0 |
| if (r3 == 0) {
0x000ad3ba beq.w 0xad63c | goto label_100;
| }
0x000ad3be ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x000ad3c0 cmp r3, 0 |
| if (r3 == 0) {
0x000ad3c2 beq.w 0xacd7c | goto label_26;
| }
0x000ad3c6 ldr r1, [pc, 0x144] |
0x000ad3c8 add r1, pc | r1 = 0x15a8da;
| label_37:
0x000ad3ca ldrd r2, r3, [r5, 4] | __asm ("ldrd r2, r3, [r5, 4]");
0x000ad3ce add r0, sp, 0x58 | r0 += x;
0x000ad3d0 str r1, [sp] | *(sp) = r1;
0x000ad3d2 ldr r1, [pc, 0x13c] |
0x000ad3d4 add r1, pc | r1 = 0x15a8ea;
0x000ad3d6 bl 0x4bed4 | fcn_0004bed4 (r0);
0x000ad3da ldr r7, [sp, 0x58] | r7 = x;
0x000ad3dc str r0, [r5, 0x24] | *((r5 + 0x24)) = r0;
0x000ad3de cmp r7, 0 |
| if (r7 == 0) {
0x000ad3e0 beq.w 0xacd7c | goto label_26;
| }
0x000ad3e4 b 0xacf92 | goto label_7;
| label_74:
0x000ad3e6 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad3e8 mov r0, r5 | r0 = r5;
0x000ad3ea ldr r2, [pc, 0x128] |
0x000ad3ec ldr r1, [pc, 0x128] |
0x000ad3ee str r3, [sp] | *(sp) = r3;
0x000ad3f0 movs r3, 0 | r3 = 0;
0x000ad3f2 add r2, pc | r2 = 0x15a90c;
0x000ad3f4 add r1, pc | r1 = 0x15a910;
0x000ad3f6 bl 0x85298 | r0 = fcn_00085298 (r0, r1, r2, r3, r4);
0x000ad3fa mov fp, r0 |
0x000ad3fc cmp r0, 0 |
| if (r0 != 0) {
0x000ad3fe bne.w 0xacef8 | goto label_8;
| }
0x000ad402 b 0xaceda | goto label_27;
| label_43:
0x000ad404 ldr r0, [pc, 0x114] |
0x000ad406 movs r7, 1 | r7 = 1;
0x000ad408 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x000ad40a add r0, pc | r0 = 0x15a92a;
0x000ad40c blx 0x8644 | fcn_00008644 ();
0x000ad410 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad412 str r0, [r3] | *(r3) = r0;
0x000ad414 b 0xacf92 | goto label_7;
| label_70:
0x000ad416 ldr r2, [sp, 0x20] | r2 = var_20h;
0x000ad418 mov r3, r7 | r3 = r7;
0x000ad41a ldr r1, [pc, 0x104] |
0x000ad41c mov r0, r5 | r0 = r5;
0x000ad41e str r2, [sp] | *(sp) = r2;
0x000ad420 ldr r2, [pc, 0x100] |
0x000ad422 add r1, pc | r1 = 0x15a948;
0x000ad424 add r2, pc | r2 = 0x15a94c;
0x000ad426 bl 0x85298 | r0 = fcn_00085298 (r0, r1, r2, r3, r4);
0x000ad42a mov fp, r0 |
0x000ad42c str r0, [sp, 0x68] | var_68h = r0;
0x000ad42e cmp r0, 0 |
| if (r0 != 0) {
0x000ad430 bne.w 0xad132 | goto label_28;
| }
0x000ad434 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad436 mov r0, r5 | r0 = r5;
0x000ad438 ldr r2, [pc, 0xec] |
0x000ad43a ldr r1, [pc, 0xf0] |
0x000ad43c str r3, [sp] | *(sp) = r3;
0x000ad43e movs r3, 1 | r3 = 1;
0x000ad440 add r2, pc | r2 = 0x15a96c;
0x000ad442 add r1, pc | r1 = 0x15a974;
0x000ad444 bl 0x85298 | r0 = fcn_00085298 (r0, r1, r2, r3, r4);
0x000ad448 mov fp, r0 |
0x000ad44a str r0, [sp, 0x68] | var_68h = r0;
0x000ad44c cmp r0, 0 |
| if (r0 != 0) {
0x000ad44e bne.w 0xad132 | goto label_28;
| }
0x000ad452 mov r0, r8 | r0 = r8;
0x000ad454 bl 0x871fc | r0 = fcn_000871fc (r0);
0x000ad458 mov r4, r0 | r4 = r0;
0x000ad45a b 0xace86 | goto label_29;
| label_98:
0x000ad45c mov.w fp, 7 |
0x000ad460 blx 0x8404 | fcn_00008404 ();
0x000ad464 b 0xacef8 | goto label_8;
| label_90:
0x000ad466 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x000ad468 movs r6, 7 | r6 = 7;
0x000ad46a str r3, [sp, 0x44] | var_44h = r3;
0x000ad46c b 0xad22c | goto label_24;
| label_67:
0x000ad46e movs r0, 6 | r0 = 6;
0x000ad470 blx 0x86a4 | r0 = fcn_000086a4 ();
0x000ad474 mov r3, r0 | r3 = r0;
0x000ad476 cmp r0, 0 |
| if (r0 == 0) {
0x000ad478 beq.w 0xad694 | goto label_101;
| }
0x000ad47c ldr r2, [pc, 0xb0] |
0x000ad47e movs r1, 0 | r1 = 0;
0x000ad480 ldr r7, [sp, 0x58] | r7 = x;
0x000ad482 strb r1, [r0, 5] | *((r0 + 5)) = r1;
0x000ad484 add r2, pc | r2 = 0x15a9b8;
0x000ad486 ldr r0, [r2] | r0 = imp.sinh;
0x000ad488 ldrb r2, [r2, 4] | r2 = *((r2 + 4));
0x000ad48a str r0, [r3] | *(r3) = r0;
0x000ad48c strb r2, [r3, 4] | *((r3 + 4)) = r2;
0x000ad48e str r3, [r5, 0x28] | *((r5 + 0x28)) = r3;
0x000ad490 cmp r7, 0 |
| if (r7 != 0) {
0x000ad492 bne.w 0xacf92 | goto label_7;
| }
0x000ad496 b 0xacd84 | goto label_30;
| label_89:
0x000ad498 ldr r3, [sp, 8] | r3 = var_8h;
0x000ad49a b.w 0xacb1c | goto label_31;
| label_96:
0x000ad534 ldr r0, [pc, 0x224] |
0x000ad536 mov r2, r8 | r2 = r8;
0x000ad538 mov r1, sl | r1 = sl;
0x000ad53a add r0, pc | r0 = 0x15ac9a;
0x000ad53c blx 0x8154 | r0 = fcn_00008154 ();
0x000ad540 mov r6, r0 | r6 = r0;
0x000ad542 cmp r0, 0 |
| if (r0 == 0) {
0x000ad544 beq.w 0xad6c2 | goto label_102;
| }
0x000ad548 ldr r0, [pc, 0x214] |
0x000ad54a mov r2, sl | r2 = sl;
0x000ad54c mov r1, r8 | r1 = r8;
0x000ad54e add r0, pc | r0 = 0x15acb2;
0x000ad550 blx 0x8644 | fcn_00008644 ();
0x000ad554 b 0xad0b6 | goto label_32;
| label_92:
0x000ad556 ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000ad558 add.w sl, sp, 0x94 | sl += var_94h;
0x000ad55c ldr.w r8, [pc, 0x204] | r8 = *(0x000ad764);
0x000ad560 ldrb r3, [r4] | r3 = *(r4);
0x000ad562 subs r0, r1, 4 | r0 = r1 - 4;
0x000ad564 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000ad566 add r8, pc | r8 += pc;
0x000ad568 strd fp, r5, [sp, 0x48] | __asm ("strd fp, r5, [var_48h]");
0x000ad56c str r7, [sp, 0x50] | var_50h = r7;
0x000ad56e addw r8, r8, 0x474 | __asm ("addw r8, r8, aav.0x000000ff");
0x000ad572 mov r7, r4 | r7 = r4;
0x000ad574 mov fp, r2 |
0x000ad576 mov r4, r1 | r4 = r1;
0x000ad578 str r0, [sp, 0x40] | var_40h = r0;
0x000ad57a str.w sb, [sp, 0x54] | __asm ("str.w sb, [var_54h]");
| if (r3 != 0) {
| label_34:
0x000ad57e cbnz r3, 0xad586 | goto label_103;
| }
0x000ad580 b 0xad662 | goto label_104;
| do {
0x000ad582 ldrb r3, [r7, 1]! | r3 = *((r7 += 1));
| label_103:
0x000ad586 cmp r3, 0x20 |
0x000ad588 beq 0xad582 |
| } while (r3 == 0x20);
0x000ad58a cmp r3, 0x27 |
0x000ad58c it ne |
| if (r3 == 0x27) {
0x000ad58e movne sb, r7 | sb = r7;
| }
| if (r3 == 0x27) {
0x000ad590 beq 0xad604 | goto label_105;
| }
| do {
| label_33:
0x000ad592 ldrb.w r6, [sb] | r6 = *(sb);
0x000ad596 movs r2, 0x80 | r2 = 0x80;
0x000ad598 mov r1, r8 | r1 = r8;
0x000ad59a mov r0, sl | r0 = sl;
0x000ad59c blx 0x8610 | fcn_00008610 ();
0x000ad5a0 lsls r3, r6, 0x18 | r3 = r6 << 0x18;
0x000ad5a2 mov r5, sb | r5 = sb;
0x000ad5a4 add.w sb, sb, 1 | sb++;
0x000ad5a8 bmi 0xad592 |
| } while (r3 < r6);
0x000ad5aa add.w r3, r6, 0x118 | r3 = r6 + 0x118;
0x000ad5ae add.w r6, sp, r3 | r6 = sp + r3;
0x000ad5b2 ldrb r3, [r6, -0x84] | r3 = var_84h;
0x000ad5b6 cmp r3, 0 |
| if (r3 != 0) {
0x000ad5b8 bne 0xad592 | goto label_33;
| }
0x000ad5ba cmp r5, r7 |
| if (r5 == r7) {
0x000ad5bc beq 0xad610 | goto label_106;
| }
| label_35:
0x000ad5be subs r6, r5, r7 | r6 = r5 - r7;
0x000ad5c0 mov r1, r7 | r1 = r7;
0x000ad5c2 mov r2, r6 | r2 = r6;
0x000ad5c4 mov r0, r4 | r0 = r4;
0x000ad5c6 blx 0x8610 | fcn_00008610 ();
0x000ad5ca ldr r3, [sp, 0x40] | r3 = var_40h;
0x000ad5cc str r4, [r3, 4]! | *((r3 += 4)) = r4;
0x000ad5d0 str r3, [sp, 0x40] | var_40h = r3;
0x000ad5d2 ldrb r3, [r4] | r3 = *(r4);
0x000ad5d4 cmp r3, 0x27 |
0x000ad5d6 it ne |
| if (r3 != 0x27) {
0x000ad5d8 cmpne r3, 0x5b | __asm ("cmpne r3, 0x5b");
| }
| if (r3 != 0x27) {
0x000ad5da beq 0xad5e4 |
0x000ad5dc cmp r3, 0x60 |
0x000ad5de it ne |
| if (r3 != 0x60) {
0x000ad5e0 cmpne r3, 0x22 | __asm ("cmpne r3, 0x22");
| }
| if (r3 != 0x60) {
0x000ad5e2 bne 0xad5ea | goto label_107;
| }
| }
0x000ad5e4 mov r0, r4 | r0 = r4;
0x000ad5e6 bl 0xc740 | fcn_0000c740 (r0);
| label_107:
0x000ad5ea ldrb r3, [r5] | r3 = *(r5);
0x000ad5ec adds r6, 1 | r6++;
0x000ad5ee add r4, r6 | r4 += r6;
0x000ad5f0 cmp r3, 0x20 |
| if (r3 != 0x20) {
0x000ad5f2 bne 0xad5fc | goto label_108;
| }
| do {
0x000ad5f4 ldrb r3, [r5, 1]! | r3 = *((r5 += 1));
0x000ad5f8 cmp r3, 0x20 |
0x000ad5fa beq 0xad5f4 |
| } while (r3 == 0x20);
| label_108:
0x000ad5fc adds.w fp, fp, 1 |
0x000ad600 mov r7, r5 | r7 = r5;
0x000ad602 b 0xad57e | goto label_34;
| label_105:
0x000ad604 mov r0, r7 | r0 = r7;
0x000ad606 bl 0xf740 | r0 = fcn_0000f740 (r0);
0x000ad60a mov r5, r0 | r5 = r0;
0x000ad60c cmp r0, 0 |
| if (r0 != 0) {
0x000ad60e bne 0xad5be | goto label_35;
| }
| label_106:
0x000ad610 ldr r0, [pc, 0x154] |
0x000ad612 ldrd fp, r5, [sp, 0x48] | __asm ("ldrd fp, r5, [var_48h]");
0x000ad616 ldrd r7, sb, [sp, 0x50] | __asm ("ldrd r7, sb, [var_50h]");
0x000ad61a add r0, pc | r0 = 0x15ad86;
0x000ad61c blx 0x8644 | fcn_00008644 ();
0x000ad620 b 0xad226 | goto label_36;
| label_87:
0x000ad622 ldr r1, [pc, 0x148] |
0x000ad624 movs r2, 2 | r2 = 2;
0x000ad626 str r2, [r5, 0x20] | *((r5 + 0x20)) = r2;
0x000ad628 mov r3, r4 | r3 = r4;
0x000ad62a ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000ad62c add r0, sp, 0x68 | r0 += var_68h;
0x000ad62e add r1, pc | r1 = 0x15ada0;
0x000ad630 bl 0x4bed4 | fcn_0004bed4 (r0);
0x000ad634 ldr r6, [sp, 0x68] | r6 = var_68h;
0x000ad636 str r0, [r5, 0x24] | *((r5 + 0x24)) = r0;
0x000ad638 b.w 0xacd48 | goto label_11;
| label_100:
0x000ad63c ldr r1, [pc, 0x130] |
0x000ad63e add r1, pc | r1 = 0x15adb2;
0x000ad640 b 0xad3ca | goto label_37;
| label_59:
0x000ad642 ldr r0, [pc, 0x130] |
0x000ad644 add r0, pc | r0 = 0x15adbe;
0x000ad646 blx 0x8644 | fcn_00008644 ();
0x000ad64a b 0xad0b6 | goto label_32;
| label_58:
0x000ad64c ldr r0, [pc, 0x128] |
0x000ad64e add r0, pc | r0 = 0x15adca;
0x000ad650 blx 0x8644 | fcn_00008644 ();
0x000ad654 b 0xad0b6 | goto label_32;
| label_63:
0x000ad656 ldr r0, [pc, 0x124] |
0x000ad658 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000ad65a add r0, pc | r0 = 0x15addc;
0x000ad65c blx 0x8644 | fcn_00008644 ();
0x000ad660 b 0xad0e0 | goto label_38;
| label_104:
0x000ad662 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad664 mov r2, fp | r2 = fp;
0x000ad666 ldrd r5, r7, [sp, 0x4c] | __asm ("ldrd r5, r7, [var_50h]");
0x000ad66a ldr r1, [sp, 0x3c] | r1 = var_3ch;
0x000ad66c str r3, [sp] | *(sp) = r3;
0x000ad66e ldr r0, [sp, 0x24] | r0 = var_24h;
0x000ad670 mov r3, r5 | r3 = r5;
0x000ad672 ldr.w sb, [sp, 0x54] | sb = var_54h;
0x000ad676 ldr.w fp, [sp, 0x48] | fp = var_48h;
0x000ad67a bl 0x50f34 | r0 = fcn_00050f34 (r0, r1, r2, r3, r4);
0x000ad67e mov r6, r0 | r6 = r0;
0x000ad680 b 0xad22c | goto label_24;
| label_97:
0x000ad682 ldr r0, [pc, 0xfc] |
0x000ad684 movs r6, 1 | r6 = 1;
0x000ad686 add r0, pc | r0 = 0x15ae0c;
0x000ad688 blx 0x8644 | fcn_00008644 ();
0x000ad68c ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad68e str r0, [r3] | *(r3) = r0;
0x000ad690 b.w 0xacd48 | goto label_11;
| label_101:
0x000ad694 movs r7, 7 | r7 = 7;
0x000ad696 str r0, [r5, 0x28] | *((r5 + 0x28)) = r0;
0x000ad698 b 0xacf92 | goto label_7;
| label_94:
0x000ad69a mov r0, r4 | r0 = r4;
0x000ad69c blx 0x85b4 | r0 = fcn_000085b4 ();
0x000ad6a0 mov sl, r0 | sl = r0;
0x000ad6a2 adds r0, 1 | r0++;
0x000ad6a4 blx 0x86a4 | r0 = fcn_000086a4 ();
0x000ad6a8 mov r8, r0 | r8 = r0;
0x000ad6aa cmp r0, 0 |
| if (r0 == 0) {
0x000ad6ac beq 0xad746 | goto label_109;
| }
0x000ad6ae mov r1, r4 | r1 = r4;
0x000ad6b0 mov r2, sl | r2 = sl;
0x000ad6b2 blx 0x8610 | fcn_00008610 ();
0x000ad6b6 strb.w r6, [r8, sl] | *((r8 + sl)) = r6;
| label_39:
0x000ad6ba str.w r8, [r5, 0x28] | __asm ("str.w r8, [r5, 0x28]");
0x000ad6be b.w 0xacd48 | goto label_11;
| label_102:
0x000ad6c2 ldr.w ip, [pc, 0xc0] |
0x000ad6c6 add.w lr, sp, 0x74 | lr += var_74h;
0x000ad6ca mov r8, lr | r8 = lr;
0x000ad6cc mov.w sl, -1 | sl = -1;
0x000ad6d0 add ip, pc |
0x000ad6d2 add.w ip, ip, 0x3d0 | ip = 0x15b22a;
0x000ad6d6 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x000ad6da stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x000ad6de ldm.w ip, {r0, r1, r2, r3} | r0 = *(ip);
| r1 = *((ip + 4));
| r2 = *((ip + 8));
| r3 = *((ip + 12));
0x000ad6e2 stm.w lr, {r0, r1, r2, r3} | *(lr) = r0;
| *((lr + 4)) = r1;
| *((lr + 8)) = r2;
| *((lr + 12)) = r3;
0x000ad6e6 mov r0, r4 | r0 = r4;
0x000ad6e8 blx 0x85b4 | fcn_000085b4 ();
0x000ad6ec mov r3, r8 | r3 = r8;
0x000ad6ee mov r8, r7 | r8 = r7;
0x000ad6f0 str r0, [sp, 0x3c] | var_3ch = r0;
0x000ad6f2 mov r7, r6 | r7 = r6;
0x000ad6f4 ldr r0, [pc, 0x90] |
0x000ad6f6 mov r6, r5 | r6 = r5;
0x000ad6f8 mov r5, r3 | r5 = r3;
0x000ad6fa add r0, pc | r0 = 0x15ae86;
| do {
0x000ad6fc ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x000ad6fe mov r1, r4 | r1 = r4;
0x000ad700 blx 0x8154 | r0 = fcn_00008154 ();
| if (r0 == 0) {
0x000ad704 cbnz r0, 0xad710 |
0x000ad706 cmp.w sl, 0 |
| if (sl >= 0) {
0x000ad70a bge 0xad740 | goto label_110;
| }
0x000ad70c ldr.w sl, [r5, 4] | sl = var_4h;
| }
0x000ad710 ldr r0, [r5, 8]! | r0 = var_8h_2;
0x000ad714 cmp r0, 0 |
0x000ad716 bne 0xad6fc |
| } while (r0 != 0);
0x000ad718 lsr.w r3, sl, 0x1f | r3 = sl >> 0x1f;
0x000ad71c mov r5, r6 | r5 = r6;
0x000ad71e str.w sl, [r5, 0x30] | __asm ("str.w sl, [r5, 0x30]");
0x000ad722 mov r6, r7 | r6 = r7;
0x000ad724 str r3, [sp, 0x68] | var_68h = r3;
0x000ad726 mov r7, r8 | r7 = r8;
0x000ad728 cmp r3, 0 |
| if (r3 == 0) {
0x000ad72a beq.w 0xacd48 | goto label_11;
| }
| do {
0x000ad72e ldr r0, [pc, 0x5c] |
0x000ad730 movs r6, 1 | r6 = 1;
0x000ad732 add r0, pc | r0 = 0x15aec4;
0x000ad734 blx 0x8644 | fcn_00008644 ();
0x000ad738 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000ad73a str r0, [r3] | *(r3) = r0;
0x000ad73c b.w 0xacd48 | goto label_11;
| label_110:
0x000ad740 mov r5, r6 | r5 = r6;
0x000ad742 mov r7, r8 | r7 = r8;
0x000ad744 b 0xad72e |
| } while (1);
| label_109:
0x000ad746 movs r6, 7 | r6 = 7;
0x000ad748 b 0xad6ba | goto label_39;
| label_64:
0x000ad74a ldr.w sb, [sp, 0x28] | sb = var_28h;
0x000ad74e mov r7, r6 | r7 = r6;
0x000ad750 b 0xacf92 | goto label_7;
| label_71:
0x000ad752 mov fp, r4 |
0x000ad754 b 0xad132 | goto label_28;
| label_61:
0x000ad756 blx 0x883c | fcn_0000883c ();
0x000ad75a nop |
0x000ad75c invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xb2838 */
| #include <stdint.h>
|
; (fcn) fcn.000b2838 () | void fcn_000b2838 (int16_t arg_1ch, uint32_t arg1, int16_t arg2, int16_t arg3, uint32_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000b2838 mvnsmi lr, 0xb4000 | __asm ("mvnsmi lr, aav.0x000000ff");
0x000b283c cmp r0, r2 |
0x000b283e mov r5, r1 | r5 = r1;
0x000b2840 mov r4, r0 | r4 = r0;
0x000b2842 sbcs.w r1, r5, r3 | __asm ("sbcs.w r1, r5, r3");
0x000b2846 it lo |
| if (r0 >= r2) {
0x000b2848 movlo r0, 0 | r0 = 0;
| }
0x000b284a ldr r7, [sp, 0x1c] | r7 = *(arg_1ch);
0x000b284c it lo |
| if (r0 >= r2) {
0x000b284e movlo r1, r0 | r1 = r0;
| }
| if (r0 <= r2) {
0x000b2850 blo 0xb2918 | goto label_3;
| }
0x000b2852 clz r6, r3 | r6 &= r3;
0x000b2856 cmp r3, 0 |
| if (r3 == 0) {
0x000b2858 beq 0xb292a | goto label_4;
| }
0x000b285a clz r1, r5 | r1 &= r5;
0x000b285e cmp r5, 0 |
| if (r5 == 0) {
0x000b2860 beq 0xb2922 | goto label_2;
| }
| label_1:
0x000b2862 subs r6, r6, r1 | r6 -= r1;
0x000b2864 sub.w ip, r6, 0x20 |
0x000b2868 lsls r3, r6 | r3 <<= r6;
0x000b286a lsl.w r1, r2, ip | r1 = r2 << ip;
0x000b286e rsb.w lr, r6, 0x20 | lr = 0x20 - r6;
0x000b2872 orrs r3, r1 | r3 |= r1;
0x000b2874 lsr.w r1, r2, lr | r1 = r2 >> lr;
0x000b2878 lsls r2, r6 | r2 <<= r6;
0x000b287a orrs r3, r1 | r3 |= r1;
0x000b287c cmp r4, r2 |
0x000b287e sbcs.w r1, r5, r3 | __asm ("sbcs.w r1, r5, r3");
0x000b2882 itt lo |
| if (r4 >= r2) {
0x000b2884 movlo r0, 0 | r0 = 0;
| }
| if (r4 >= r2) {
0x000b2886 movlo r1, r0 | r1 = r0;
| }
| if (r4 > r2) {
0x000b2888 blo 0xb28a2 |
0x000b288a movs r0, 1 | r0 = 1;
0x000b288c subs r4, r4, r2 | r4 -= r2;
0x000b288e lsl.w r1, r0, ip | r1 = r0 << ip;
0x000b2892 lsr.w r8, r0, lr | r8 = r0 >> lr;
0x000b2896 lsl.w r0, r0, r6 | r0 <<= r6;
0x000b289a sbc.w r5, r5, r3 | __asm ("sbc.w r5, r5, r3");
0x000b289e orr.w r1, r1, r8 | r1 |= r8;
| }
| if (r6 == 0) {
0x000b28a2 cbz r6, 0xb2918 | goto label_3;
| }
0x000b28a4 lsrs r2, r2, 1 | r2 >>= 1;
0x000b28a6 mov r8, r6 | r8 = r6;
0x000b28a8 orr.w r2, r2, r3, lsl 31 | r2 |= (r3 << 31);
0x000b28ac lsrs r3, r3, 1 | r3 >>= 1;
0x000b28ae b 0xb28c6 |
| while (r4 >= r2) {
0x000b28b0 subs r4, r4, r2 | r4 -= r2;
0x000b28b2 sbc.w r5, r5, r3 | __asm ("sbc.w r5, r5, r3");
0x000b28b6 adds r4, r4, r4 | r4 += r4;
0x000b28b8 adcs r5, r5 | __asm ("adcs r5, r5");
0x000b28ba adds r4, 1 | r4++;
0x000b28bc adc r5, r5, 0 | __asm ("adc r5, r5, 0");
0x000b28c0 subs.w r8, r8, 1 | r8--;
| if (r8 == r8) {
0x000b28c4 beq 0xb28d8 | goto label_5;
| }
| label_0:
0x000b28c6 cmp r4, r2 |
0x000b28c8 sbcs.w sb, r5, r3 | __asm ("sbcs.w sb, r5, r3");
0x000b28cc bhs 0xb28b0 |
| }
0x000b28ce adds r4, r4, r4 | r4 += r4;
0x000b28d0 adcs r5, r5 | __asm ("adcs r5, r5");
0x000b28d2 subs.w r8, r8, 1 | r8--;
| if (r8 != r8) {
0x000b28d6 bne 0xb28c6 | goto label_0;
| }
| label_5:
0x000b28d8 adds r0, r0, r4 | r0 += r4;
0x000b28da lsl.w lr, r5, lr | lr = r5 << lr;
0x000b28de lsr.w r4, r4, r6 | r4 >>= r6;
0x000b28e2 lsr.w ip, r5, ip |
0x000b28e6 adc.w r1, r1, r5 | __asm ("adc.w r1, r1, r5");
0x000b28ea orr.w r4, r4, lr | r4 |= lr;
0x000b28ee lsrs r5, r6 | r5 >>= r6;
0x000b28f0 orr.w r4, r4, ip | r4 |= ip;
0x000b28f4 sub.w ip, r6, 0x20 |
0x000b28f8 lsl.w ip, r4, ip |
0x000b28fc lsl.w r2, r5, r6 | r2 = r5 << r6;
0x000b2900 rsb.w r3, r6, 0x20 | r3 = 0x20 - r6;
0x000b2904 orr.w r2, r2, ip | r2 |= ip;
0x000b2908 lsr.w r3, r4, r3 | r3 = r4 >> r3;
0x000b290c orrs r2, r3 | r2 |= r3;
0x000b290e lsl.w r3, r4, r6 | r3 = r4 << r6;
0x000b2912 subs r0, r0, r3 | r0 -= r3;
0x000b2914 sbc.w r1, r1, r2 | __asm ("sbc.w r1, r1, r2");
| if (r7 != 0) {
| label_3:
0x000b2918 cbz r7, 0xb291e |
0x000b291a strd r4, r5, [r7] | __asm ("strd r4, r5, [r7]");
| }
0x000b291e pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_2:
0x000b2922 clz r1, r4 | r1 &= r4;
0x000b2926 adds r1, 0x20 | r1 += 0x20;
0x000b2928 b 0xb2862 | goto label_1;
| label_4:
0x000b292a clz r6, r2 | r6 &= r2;
0x000b292e clz r1, r5 | r1 &= r5;
0x000b2932 adds r6, 0x20 | r6 += 0x20;
0x000b2934 cmp r5, 0 |
| if (r5 != 0) {
0x000b2936 bne 0xb2862 | goto label_1;
| }
0x000b2938 b 0xb2922 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xbebc4 */
| #include <stdint.h>
|
; (fcn) fcn.000bebc4 () | void fcn_000bebc4 (int16_t arg_48h, int16_t arg_c0h, int16_t arg_170h, int16_t arg_1d8h, int16_t arg_1e0h, int16_t arg_264h, int16_t arg_268h, int16_t arg_278h, int16_t arg_294h, int16_t arg2, uint32_t arg3, uint32_t arg4) {
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000bebc4 cmp r3, 0x15 |
0x000bebc6 strh r2, [r6, r0] | *((r6 + r0)) = r2;
0x000bebc8 ldrh r5, [r1, 8] | r5 = *((r1 + 8));
0x000bebca adds r3, 0x5e | r3 += 0x5e;
0x000bebcc tst r3, r2 |
0x000bebce cmp r7, 0x79 |
0x000bebd0 lsls r0, r1, 0x1a | r0 = r1 << 0x1a;
0x000bebd2 strb r4, [r3, 0xc] | *((r3 + 0xc)) = r4;
0x000bebd4 adr r2, 0x1d8 | r2 = 0x1d8;
0x000bebd6 lsrs r7, r0, 5 | r7 = r0 >> 5;
0x000bebd8 strb r4, [r2, 0x1c] | *((r2 + 0x1c)) = r4;
0x000bebda cmp pc, r2 |
0x000bebdc strh r4, [r0, 0x12] | *((r0 + 0x12)) = r4;
0x000bebde ldr r5, [r1, r5] | r5 = *((r1 + r5));
0x000bebe0 cmp r0, 0x5f |
0x000bebe2 cmp r7, 0x93 |
0x000bebe4 strb r5, [r0, 0x18] | *((r0 + 0x18)) = r5;
0x000bebe6 ldrb r5, [r7, 0xd] | r5 = *((r7 + 0xd));
0x000bebe8 subs r3, r0, r0 | r3 = r0 - r0;
0x000bebea strb r1, [r2, 0x19] | *((r2 + 0x19)) = r1;
0x000bebec movs r0, 0xe | r0 = 0xe;
0x000bebee ldr r0, [sp, 0xc0] | r0 = *(arg_c0h);
0x000bebf0 str r2, [sp, 0x170] | *(arg_170h) = r2;
0x000bebf2 subs r3, r4, 4 | r3 = r4 - 4;
0x000bebf4 ldr r5, [sp, 0x1e0] | r5 = *(arg_1e0h);
0x000bebf6 asrs r1, r6, 5 | r1 = r6 >> 5;
0x000bebf8 lsrs r4, r4, 1 | r4 >>= 1;
0x000bebfa ldrb r7, [r1, 0x1e] | r7 = *((r1 + 0x1e));
0x000bebfc lsls r6, r5, 0x10 | r6 = r5 << 0x10;
0x000bebfe mov r6, r3 | r6 = r3;
0x000bec00 lsls r1, r4, 0x1d | r1 = r4 << 0x1d;
0x000bec02 cmp r5, 0x8c |
0x000bec04 ldrh r1, [r0, 0x1c] | r1 = *((r0 + 0x1c));
0x000bec06 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x000bec08 str r5, [sp, 0x278] | *(arg_278h) = r5;
0x000bec0a subs r0, r1, r5 | r0 = r1 - r5;
0x000bec0c str r5, [r3, 0x30] | *((r3 + 0x30)) = r5;
0x000bec0e strh r4, [r5, 0x28] | *((r5 + 0x28)) = r4;
0x000bec10 ldrb r7, [r2, 0x19] | r7 = *((r2 + 0x19));
0x000bec12 adds r1, 0xf | r1 += 0xf;
0x000bec14 subs r4, 0x24 | r4 -= 0x24;
0x000bec16 movs r5, 0xa | r5 = 0xa;
0x000bec18 str r6, [r6, 0x44] | *((r6 + 0x44)) = r6;
0x000bec1a strb r4, [r4, r5] | *((r4 + r5)) = r4;
0x000bec1c cmp r2, 0x58 |
0x000bec1e adr r6, 0x150 | r6 = 0x150;
0x000bec20 strh r1, [r1, r5] | *((r1 + r5)) = r1;
0x000bec22 ldrh r6, [r2, 0x32] | r6 = *((r2 + 0x32));
0x000bec24 str r4, [sp, 0x1d8] | *(arg_1d8h) = r4;
0x000bec26 str r1, [sp, 0x48] | *(arg_48h) = r1;
0x000bec28 ldrb r2, [r1, r5] | r2 = *((r1 + r5));
0x000bec2a str r6, [sp, 0x294] | *(arg_294h) = r6;
0x000bec2c lsrs r6, r6, 0x11 | r6 >>= 0x11;
0x000bec2e ldr r3, [pc, 0x130] | r3 = *(0xbed62);
0x000bec30 strh r2, [r3, 0x32] | *((r3 + 0x32)) = r2;
0x000bec32 ldr r6, [pc, 0x240] | r6 = *(0xbee76);
0x000bec34 adr r4, 0x13c | r4 = 0x13c;
0x000bec36 movs r2, 0x3d | r2 = 0x3d;
0x000bec38 strh r0, [r0, 0x3a] | *((r0 + 0x3a)) = r0;
0x000bec3a lsls r2, r7, 1 | r2 = r7 << 1;
0x000bec3c movs r0, r0 |
0x000bec3e movs r0, r0 |
0x000bec40 movs r0, r0 |
0x000bec42 movs r0, r0 |
0x000bec44 movs r4, r0 | r4 = r0;
0x000bec46 movs r3, r5 | r3 = r5;
0x000bec48 ldr r0, [r0, 0x20] | r0 = *((r0 + 0x20));
0x000bec4a lsls r2, r6, 1 | r2 = r6 << 1;
0x000bec4c movs r0, r0 |
0x000bec4e movs r2, r0 | r2 = r0;
0x000bec50 ldrh r0, [r0, 0x38] | r0 = *((r0 + 0x38));
0x000bec52 movs r0, r0 |
0x000bec54 lsrs r0, r0, 0x14 | r0 >>= 0x14;
0x000bec56 movs r0, r0 |
0x000bec58 movs r0, r0 |
0x000bec5a lsls r5, r1, 2 | r5 = r1 << 2;
0x000bec5c strb r0, [r0, 0x1c] | *((r0 + 0x1c)) = r0;
0x000bec5e movs r4, r6 | r4 = r6;
0x000bec60 ldrh r0, [r0, 8] | r0 = *((r0 + 8));
0x000bec62 movs r4, r1 | r4 = r1;
0x000bec64 subs r6, 0 |
0x000bec66 ldrh r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x000bec68 strh r0, [r0, 0x28] | *((r0 + 0x28)) = r0;
0x000bec6a movs r0, r0 |
0x000bec6c movs r4, r4 |
0x000bec6e adds r0, r0, 0 | r0 += 0;
0x000bec70 lsls r5, r1, 1 | r5 = r1 << 1;
0x000bec72 movs r0, r0 |
0x000bec74 subs r3, 0 |
0x000bec76 cmp r7, 0 |
0x000bec78 movs r0, r0 |
0x000bec7a movs r0, r0 |
0x000bec7c movs r0, r0 |
0x000bec7e movs r0, r0 |
0x000bec80 movs r0, r0 |
0x000bec82 lsls r5, r0, 1 | r5 = r0 << 1;
0x000bec84 movs r0, r0 |
0x000bec86 movs r0, r0 |
0x000bec88 lsls r2, r2, 0xe | r2 <<= 0xe;
0x000bec8a subs r2, 0 |
0x000bec8c lsls r0, r0, 4 | r0 <<= 4;
0x000bec8e lsls r3, r1, 1 | r3 = r1 << 1;
0x000bec90 movs r0, r0 |
0x000bec92 movs r7, r3 | r7 = r3;
0x000bec94 movs r0, r0 |
0x000bec96 movs r0, r0 |
0x000bec98 lsls r7, r7, 1 | r7 <<= 1;
0x000bec9a lsls r0, r5, 1 | r0 = r5 << 1;
0x000bec9c rsbs r0, r0, 0 | r0 -= ;
0x000bec9e movs r7, r7 |
0x000beca0 movs r0, r0 |
0x000beca2 movs r0, r0 |
0x000beca4 movs r6, r5 | r6 = r5;
0x000beca6 lsrs r0, r2, 0x20 | r0 = r2 >> 0x20;
0x000beca8 movs r0, r0 |
0x000becaa movs r0, r0 |
0x000becac movs r0, r0 |
0x000becae movs r0, r0 |
0x000becb0 movs r0, r0 |
0x000becb2 str r1, [r2, 0x54] | *((r2 + 0x54)) = r1;
0x000becb4 strb r0, [r0] | *(r0) = r0;
0x000becb6 lsls r5, r2, 0x1c | r5 = r2 << 0x1c;
0x000becb8 lsls r3, r0, 1 | r3 = r0 << 1;
0x000becba str r7, [r1, 4] | *((r1 + 4)) = r7;
0x000becbc lsls r6, r6, 1 | r6 <<= 1;
0x000becbe add r0, r0 | r0 += r0;
0x000becc0 movs r0, r0 |
0x000becc2 cmp r4, 0x63 |
0x000becc4 adds r7, 0 | r7 += 0;
0x000becc6 ldr r4, [pc, 0] | r4 = *(0x000becc8);
0x000becc8 ldrsh r0, [r0, r4] | r0 = *((r0 + r4));
0x000becca movs r1, 0x20 | r1 = 0x20;
0x000beccc adds r1, r7, r4 | r1 = r7 + r4;
0x000becce str r0, [r0, 0x60] | *((r0 + 0x60)) = r0;
0x000becd0 movs r0, r0 |
0x000becd2 lsls r7, r2, 1 | r7 = r2 << 1;
0x000becd4 movs r0, r0 |
0x000becd6 movs r0, r0 |
0x000becd8 adds r5, r3, 0 | r5 = r3 + 0;
0x000becda adds r4, r3, 0 | r4 = r3 + 0;
0x000becdc adds r4, r3, 0 | r4 = r3 + 0;
0x000becde adds r4, r3, 0 | r4 = r3 + 0;
0x000bece0 lsls r4, r3, 0x1c | r4 = r3 << 0x1c;
0x000bece2 adds r7, r0, 0 | r7 = r0 + 0;
0x000bece4 lsls r7, r0, 0x1c | r7 = r0 << 0x1c;
0x000bece6 adds r4, r3, 0 | r4 = r3 + 0;
0x000bece8 adds r4, r3, 0 | r4 = r3 + 0;
0x000becea adds r4, r3, 0 | r4 = r3 + 0;
0x000becec adds r4, r3, 0 | r4 = r3 + 0;
0x000becee adds r4, r3, 0 | r4 = r3 + 0;
0x000becf0 adds r4, r3, 0 | r4 = r3 + 0;
0x000becf2 adds r4, r3, 0 | r4 = r3 + 0;
0x000becf4 adds r4, r3, 0 | r4 = r3 + 0;
0x000becf6 adds r4, r3, 0 | r4 = r3 + 0;
0x000becf8 lsrs r7, r0, 0x1c | r7 = r0 >> 0x1c;
0x000becfa lsls r0, r1, 0x14 | r0 = r1 << 0x14;
0x000becfc asrs r4, r0, 0x18 | r4 = r0 >> 0x18;
0x000becfe lsrs r0, r3, 0x20 | r0 = r3 >> 0x20;
0x000bed00 asrs r1, r2, 8 | r1 = r2 >> 8;
0x000bed02 asrs r5, r2, 0x10 | r5 = r2 >> 0x10;
0x000bed04 lsrs r7, r2, 0xc | r7 = r2 >> 0xc;
0x000bed06 asrs r2, r3, 0x20 | r2 = r3 >> 0x20;
0x000bed08 lsls r3, r0, 0xc | r3 = r0 << 0xc;
0x000bed0a lsls r3, r0, 0xc | r3 = r0 << 0xc;
0x000bed0c lsls r3, r0, 0xc | r3 = r0 << 0xc;
0x000bed0e lsls r3, r0, 0xc | r3 = r0 << 0xc;
0x000bed10 lsls r3, r0, 0xc | r3 = r0 << 0xc;
0x000bed12 asrs r5, r0, 0xc | r5 = r0 >> 0xc;
0x000bed14 lsrs r4, r1, 0x18 | r4 = r1 >> 0x18;
0x000bed16 lsls r5, r1, 0x18 | r5 = r1 << 0x18;
0x000bed18 lsls r5, r0, 4 | r5 = r0 << 4;
0x000bed1a lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed1c lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed1e lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed20 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed22 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed24 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed26 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed28 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed2a lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed2c lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed2e lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed30 lsls r0, r0, 8 | r0 <<= 8;
0x000bed32 lsrs r2, r0, 4 | r2 = r0 >> 4;
0x000bed34 adds r4, r3, 0 | r4 = r3 + 0;
0x000bed36 lsls r4, r3, 8 | r4 = r3 << 8;
0x000bed38 lsls r0, r1, 4 | r0 = r1 << 4;
0x000bed3a lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed3c lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed3e lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed40 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed42 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed44 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed46 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed48 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed4a lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed4c lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed4e lsls r1, r0, 4 | r1 = r0 << 4;
0x000bed50 lsls r0, r0, 8 | r0 <<= 8;
0x000bed52 adds r2, r0, 0 | r2 = r0 + 0;
0x000bed54 adds r2, r1, 0 | r2 = r1 + 0;
0x000bed56 adds r1, r3, 0 | r1 = r3 + 0;
0x000bed58 subs r3, r3, r4 | r3 -= r4;
0x000bed5a subs r3, r3, r4 | r3 -= r4;
0x000bed5c subs r3, r3, r4 | r3 -= r4;
0x000bed5e subs r3, r3, r4 | r3 -= r4;
0x000bed60 subs r3, r3, r4 | r3 -= r4;
0x000bed62 subs r3, r3, r4 | r3 -= r4;
0x000bed64 subs r3, r3, r4 | r3 -= r4;
0x000bed66 subs r3, r3, r4 | r3 -= r4;
0x000bed68 subs r3, r3, r4 | r3 -= r4;
0x000bed6a subs r3, r3, r4 | r3 -= r4;
0x000bed6c subs r3, r3, r4 | r3 -= r4;
0x000bed6e subs r3, r3, r4 | r3 -= r4;
0x000bed70 subs r3, r3, r4 | r3 -= r4;
0x000bed72 subs r3, r3, r4 | r3 -= r4;
0x000bed74 subs r3, r3, r4 | r3 -= r4;
0x000bed76 subs r3, r3, r4 | r3 -= r4;
0x000bed78 subs r3, r3, r4 | r3 -= r4;
0x000bed7a subs r3, r3, r4 | r3 -= r4;
0x000bed7c subs r3, r3, r4 | r3 -= r4;
0x000bed7e subs r3, r3, r4 | r3 -= r4;
0x000bed80 subs r3, r3, r4 | r3 -= r4;
0x000bed82 subs r3, r3, r4 | r3 -= r4;
0x000bed84 subs r3, r3, r4 | r3 -= r4;
0x000bed86 subs r3, r3, r4 | r3 -= r4;
0x000bed88 subs r3, r3, r4 | r3 -= r4;
0x000bed8a subs r3, r3, r4 | r3 -= r4;
0x000bed8c subs r3, r3, r4 | r3 -= r4;
0x000bed8e subs r3, r3, r4 | r3 -= r4;
0x000bed90 subs r3, r3, r4 | r3 -= r4;
0x000bed92 subs r3, r3, r4 | r3 -= r4;
0x000bed94 subs r3, r3, r4 | r3 -= r4;
0x000bed96 subs r3, r3, r4 | r3 -= r4;
0x000bed98 subs r3, r3, r4 | r3 -= r4;
0x000bed9a subs r3, r3, r4 | r3 -= r4;
0x000bed9c subs r3, r3, r4 | r3 -= r4;
0x000bed9e subs r3, r3, r4 | r3 -= r4;
0x000beda0 subs r3, r3, r4 | r3 -= r4;
0x000beda2 subs r3, r3, r4 | r3 -= r4;
0x000beda4 subs r3, r3, r4 | r3 -= r4;
0x000beda6 subs r3, r3, r4 | r3 -= r4;
0x000beda8 subs r3, r3, r4 | r3 -= r4;
0x000bedaa subs r3, r3, r4 | r3 -= r4;
0x000bedac subs r3, r3, r4 | r3 -= r4;
0x000bedae subs r3, r3, r4 | r3 -= r4;
0x000bedb0 subs r3, r3, r4 | r3 -= r4;
0x000bedb2 subs r3, r3, r4 | r3 -= r4;
0x000bedb4 movs r0, r0 |
0x000bedb6 movs r0, r0 |
0x000bedb8 subs r3, r3, r4 | r3 -= r4;
0x000bedba subs r3, r3, r4 | r3 -= r4;
0x000bedbc subs r3, r3, r4 | r3 -= r4;
0x000bedbe subs r3, r3, r4 | r3 -= r4;
0x000bedc0 subs r3, r3, r4 | r3 -= r4;
0x000bedc2 subs r3, r3, r4 | r3 -= r4;
0x000bedc4 subs r3, r3, r4 | r3 -= r4;
0x000bedc6 subs r3, r3, 0 |
0x000bedc8 movs r3, r3 |
0x000bedca subs r3, r3, r4 | r3 -= r4;
0x000bedcc subs r0, r0, r4 | r0 -= r4;
0x000bedce subs r3, r3, r4 | r3 -= r4;
0x000bedd0 subs r3, r3, r4 | r3 -= r4;
0x000bedd2 subs r3, r3, r4 | r3 -= r4;
0x000bedd4 subs r3, r3, r4 | r3 -= r4;
0x000bedd6 subs r3, r3, r4 | r3 -= r4;
0x000bedd8 movs r0, r0 |
0x000bedda movs r0, r0 |
0x000beddc movs r3, r7 | r3 = r7;
0x000bedde movs r3, r7 | r3 = r7;
0x000bede0 movs r3, r7 | r3 = r7;
0x000bede2 movs r3, r7 | r3 = r7;
0x000bede4 movs r0, r0 |
0x000bede6 movs r3, r7 | r3 = r7;
0x000bede8 movs r3, r7 | r3 = r7;
0x000bedea movs r3, r7 | r3 = r7;
0x000bedec movs r0, r0 |
0x000bedee movs r3, r7 | r3 = r7;
0x000bedf0 movs r3, r7 | r3 = r7;
0x000bedf2 movs r3, r7 | r3 = r7;
0x000bedf4 movs r3, r7 | r3 = r7;
0x000bedf6 movs r0, r0 |
0x000bedf8 movs r0, r0 |
0x000bedfa movs r0, r0 |
0x000bedfc movs r3, r7 | r3 = r7;
0x000bedfe movs r0, r0 |
0x000bee00 movs r0, r0 |
0x000bee02 movs r3, r7 | r3 = r7;
0x000bee04 movs r0, r0 |
0x000bee06 movs r0, r0 |
0x000bee08 movs r0, r0 |
0x000bee0a movs r0, r0 |
0x000bee0c movs r3, r7 | r3 = r7;
0x000bee0e movs r3, r7 | r3 = r7;
0x000bee10 movs r3, r7 | r3 = r7;
0x000bee12 movs r3, r7 | r3 = r7;
0x000bee14 movs r3, r7 | r3 = r7;
0x000bee16 movs r3, r7 | r3 = r7;
0x000bee18 movs r3, r7 | r3 = r7;
0x000bee1a movs r3, r7 | r3 = r7;
0x000bee1c movs r3, r7 | r3 = r7;
0x000bee1e movs r3, r7 | r3 = r7;
0x000bee20 movs r3, r7 | r3 = r7;
0x000bee22 movs r3, r7 | r3 = r7;
0x000bee24 movs r3, r7 | r3 = r7;
0x000bee26 movs r3, r7 | r3 = r7;
0x000bee28 movs r3, r7 | r3 = r7;
0x000bee2a movs r3, r7 | r3 = r7;
0x000bee2c movs r3, r7 | r3 = r7;
0x000bee2e movs r0, r0 |
0x000bee30 movs r0, r0 |
0x000bee32 movs r0, r0 |
0x000bee34 movs r3, r7 | r3 = r7;
0x000bee36 movs r3, r7 | r3 = r7;
0x000bee38 movs r0, r0 |
0x000bee3a movs r0, r0 |
0x000bee3c movs r0, r0 |
0x000bee3e movs r0, r0 |
0x000bee40 movs r0, r0 |
0x000bee42 movs r0, r0 |
0x000bee44 movs r0, r0 |
0x000bee46 movs r0, r0 |
0x000bee48 movs r0, r0 |
0x000bee4a movs r0, r0 |
0x000bee4c movs r0, r0 |
0x000bee4e movs r0, r0 |
0x000bee50 movs r3, r7 | r3 = r7;
0x000bee52 movs r3, r7 | r3 = r7;
0x000bee54 movs r3, r7 | r3 = r7;
0x000bee56 movs r3, r7 | r3 = r7;
0x000bee58 movs r3, r7 | r3 = r7;
0x000bee5a movs r3, r7 | r3 = r7;
0x000bee5c movs r3, r7 | r3 = r7;
0x000bee5e movs r3, r7 | r3 = r7;
0x000bee60 movs r3, r7 | r3 = r7;
0x000bee62 movs r3, r7 | r3 = r7;
0x000bee64 movs r3, r7 | r3 = r7;
0x000bee66 movs r3, r7 | r3 = r7;
0x000bee68 movs r3, r7 | r3 = r7;
0x000bee6a movs r3, r7 | r3 = r7;
0x000bee6c movs r3, r7 | r3 = r7;
0x000bee6e movs r3, r7 | r3 = r7;
0x000bee70 movs r3, r7 | r3 = r7;
0x000bee72 movs r3, r7 | r3 = r7;
0x000bee74 movs r3, r7 | r3 = r7;
0x000bee76 movs r3, r7 | r3 = r7;
0x000bee78 movs r3, r7 | r3 = r7;
0x000bee7a movs r3, r7 | r3 = r7;
0x000bee7c movs r3, r7 | r3 = r7;
0x000bee7e movs r3, r7 | r3 = r7;
0x000bee80 movs r3, r7 | r3 = r7;
0x000bee82 movs r3, r7 | r3 = r7;
0x000bee84 movs r3, r7 | r3 = r7;
0x000bee86 movs r3, r7 | r3 = r7;
0x000bee88 movs r3, r7 | r3 = r7;
0x000bee8a movs r3, r7 | r3 = r7;
0x000bee8c movs r3, r7 | r3 = r7;
0x000bee8e movs r3, r7 | r3 = r7;
0x000bee90 movs r3, r7 | r3 = r7;
0x000bee92 movs r3, r7 | r3 = r7;
0x000bee94 movs r3, r7 | r3 = r7;
0x000bee96 movs r3, r7 | r3 = r7;
0x000bee98 movs r3, r7 | r3 = r7;
0x000bee9a movs r3, r7 | r3 = r7;
0x000bee9c movs r3, r7 | r3 = r7;
0x000bee9e movs r3, r7 | r3 = r7;
0x000beea0 movs r3, r7 | r3 = r7;
0x000beea2 movs r0, r0 |
0x000beea4 movs r0, r0 |
0x000beea6 movs r0, r0 |
0x000beea8 movs r0, r0 |
0x000beeaa movs r0, r0 |
0x000beeac movs r0, r0 |
0x000beeae movs r0, r0 |
0x000beeb0 movs r0, r0 |
0x000beeb2 movs r0, r0 |
0x000beeb4 movs r0, r0 |
0x000beeb6 movs r0, r0 |
0x000beeb8 movs r0, r0 |
0x000beeba movs r0, r0 |
0x000beebc movs r0, r0 |
0x000beebe movs r0, r0 |
0x000beec0 movs r0, r0 |
0x000beec2 movs r0, r0 |
0x000beec4 movs r0, r0 |
0x000beec6 movs r0, r0 |
0x000beec8 movs r0, r0 |
0x000beeca movs r0, r0 |
0x000beecc movs r0, r0 |
0x000beece movs r0, r0 |
0x000beed0 movs r0, r0 |
0x000beed2 movs r0, r0 |
0x000beed4 movs r0, r0 |
0x000beed6 movs r0, r0 |
0x000beed8 movs r0, r0 |
0x000beeda movs r0, r0 |
0x000beedc movs r0, r0 |
0x000beede movs r0, r0 |
0x000beee0 movs r0, r0 |
0x000beee2 movs r0, r0 |
0x000beee4 movs r0, r0 |
0x000beee6 movs r0, r0 |
0x000beee8 movs r0, r0 |
0x000beeea movs r0, r0 |
0x000beeec movs r0, r0 |
0x000beeee movs r0, r0 |
0x000beef0 movs r0, r0 |
0x000beef2 movs r0, r0 |
0x000beef4 movs r0, r0 |
0x000beef6 movs r0, r0 |
0x000beef8 movs r0, r0 |
0x000beefa movs r0, r0 |
0x000beefc movs r0, r0 |
0x000beefe movs r0, r0 |
0x000bef00 movs r0, r0 |
0x000bef02 movs r0, r0 |
0x000bef04 movs r0, r0 |
0x000bef06 movs r0, r0 |
0x000bef08 movs r0, r0 |
0x000bef0a movs r0, r0 |
0x000bef0c movs r0, r0 |
0x000bef0e movs r0, r0 |
0x000bef10 movs r0, r0 |
0x000bef12 movs r0, r0 |
0x000bef14 movs r0, r0 |
0x000bef16 movs r0, r0 |
0x000bef18 movs r0, r0 |
0x000bef1a movs r0, r0 |
0x000bef1c movs r0, r0 |
0x000bef1e movs r0, r0 |
0x000bef20 movs r0, r0 |
0x000bef22 movs r0, r0 |
0x000bef24 movs r0, r0 |
0x000bef26 movs r0, r0 |
0x000bef28 movs r0, r0 |
0x000bef2a movs r0, r0 |
0x000bef2c movs r0, r0 |
0x000bef2e movs r0, r0 |
0x000bef30 movs r0, r0 |
0x000bef32 movs r0, r0 |
0x000bef34 movs r0, r0 |
0x000bef36 movs r0, r0 |
0x000bef38 movs r0, r0 |
0x000bef3a movs r0, r0 |
0x000bef3c movs r0, r0 |
0x000bef3e movs r0, r0 |
0x000bef40 movs r0, r0 |
0x000bef42 movs r0, r0 |
0x000bef44 movs r0, r0 |
0x000bef46 movs r0, r0 |
0x000bef48 movs r0, r0 |
0x000bef4a movs r0, r0 |
0x000bef4c lsls r2, r5, 0xf | r2 = r5 << 0xf;
0x000bef4e movs r0, r0 |
0x000bef50 movs r0, r0 |
0x000bef52 movs r0, r0 |
0x000bef54 lsls r3, r5, 0xf | r3 = r5 << 0xf;
0x000bef56 movs r0, r0 |
0x000bef58 movs r0, r0 |
0x000bef5a movs r4, r0 | r4 = r0;
0x000bef5c lsls r7, r6, 0xf | r7 = r6 << 0xf;
0x000bef5e movs r0, r0 |
0x000bef60 movs r0, r0 |
0x000bef62 strh r0, [r0] | *(r0) = r0;
0x000bef64 lsls r4, r5, 0xf | r4 = r5 << 0xf;
0x000bef66 movs r0, r0 |
0x000bef68 movs r0, r0 |
0x000bef6a lsls r0, r0, 1 | r0 <<= 1;
0x000bef6c lsls r5, r5, 0xf | r5 <<= 0xf;
0x000bef6e movs r0, r0 |
0x000bef70 movs r0, r0 |
0x000bef72 movs r1, r0 | r1 = r0;
0x000bef74 lsls r6, r5, 0xf | r6 = r5 << 0xf;
0x000bef76 movs r0, r0 |
0x000bef78 lsrs r0, r0, 0x20 | r0 >>= 0x20;
0x000bef7a movs r0, r0 |
0x000bef7c lsls r7, r5, 0xf | r7 = r5 << 0xf;
0x000bef7e movs r0, r0 |
0x000bef80 movs r0, r0 |
0x000bef82 lsls r0, r0, 2 | r0 <<= 2;
0x000bef84 lsls r0, r6, 0xf | r0 = r6 << 0xf;
0x000bef86 movs r0, r0 |
0x000bef88 movs r0, r0 |
0x000bef8a lsls r0, r0, 4 | r0 <<= 4;
0x000bef8c lsls r1, r6, 0xf | r1 = r6 << 0xf;
0x000bef8e movs r0, r0 |
0x000bef90 movs r0, r0 |
0x000bef92 lsls r0, r0, 8 | r0 <<= 8;
0x000bef94 lsls r2, r6, 0xf | r2 = r6 << 0xf;
0x000bef96 movs r0, r0 |
0x000bef98 movs r0, r0 |
0x000bef9a asrs r0, r0, 0x20 | r0 >>= 0x20;
0x000bef9c lsls r3, r6, 0xf | r3 = r6 << 0xf;
0x000bef9e movs r0, r0 |
0x000befa0 movs r1, r0 | r1 = r0;
0x000befa2 lsrs r0, r0, 0x20 | r0 >>= 0x20;
0x000befa4 lsls r4, r6, 0xf | r4 = r6 << 0xf;
0x000befa6 movs r0, r0 |
0x000befa8 movs r0, r0 |
0x000befaa lsls r0, r0, 0x10 | r0 <<= 0x10;
0x000befac lsls r6, r6, 0xf | r6 <<= 0xf;
0x000befae movs r0, r0 |
0x000befb0 movs r0, r0 |
0x000befb2 movs r0, 0 | r0 = 0;
0x000befb4 lsls r5, r6, 0xf | r5 = r6 << 0xf;
0x000befb6 movs r0, r0 |
0x000befb8 movs r0, r0 |
0x000befba ands r0, r0 | r0 &= r0;
0x000befbc lsls r0, r7, 0xf | r0 = r7 << 0xf;
0x000befbe movs r0, r0 |
0x000befc0 movs r2, r0 | r2 = r0;
0x000befc2 movs r0, r0 |
0x000befc4 lsls r1, r7, 0xf | r1 = r7 << 0xf;
0x000befc6 movs r0, r0 |
0x000befc8 lsls r0, r0, 2 | r0 <<= 2;
0x000befca movs r0, r0 |
0x000befcc movs r0, r0 |
0x000befce movs r0, r0 |
0x000befd0 movs r0, r0 |
0x000befd2 movs r0, r0 |
0x000befd4 movs r0, r0 |
0x000befd6 movs r0, r0 |
0x000befd8 movs r0, r0 |
0x000befda movs r0, r0 |
0x000befdc movs r0, r0 |
0x000befde movs r0, r0 |
0x000befe0 movs r1, r0 | r1 = r0;
0x000befe2 movs r0, r0 |
0x000befe4 movs r0, r0 |
0x000befe6 movs r0, r0 |
0x000befe8 movs r0, r0 |
0x000befea movs r0, r0 |
0x000befec movs r0, r0 |
0x000befee movs r0, r0 |
0x000beff0 movs r0, r0 |
0x000beff2 movs r0, r0 |
0x000beff4 movs r0, r0 |
0x000beff6 movs r0, r0 |
0x000beff8 lsls r0, r0, 4 | r0 <<= 4;
0x000beffa lsls r2, r0, 0xc | r2 = r0 << 0xc;
0x000beffc lsls r4, r0, 0x18 | r4 = r0 << 0x18;
0x000beffe lsrs r0, r1, 0x20 | r0 = r1 >> 0x20;
0x000bf000 movs r0, r0 |
0x000bf002 movs r0, r0 |
0x000bf004 movs r0, r0 |
0x000bf006 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bf008 lsls r2, r0, 8 | r2 = r0 << 8;
0x000bf00a lsls r3, r0, 0xc | r3 = r0 << 0xc;
0x000bf00c lsls r4, r0, 0x10 | r4 = r0 << 0x10;
0x000bf00e lsls r5, r0, 0x14 | r5 = r0 << 0x14;
0x000bf010 lsls r6, r0, 0x18 | r6 = r0 << 0x18;
0x000bf012 lsls r7, r0, 0x1c | r7 = r0 << 0x1c;
0x000bf014 lsrs r0, r1, 0x20 | r0 = r1 >> 0x20;
0x000bf016 lsrs r1, r1, 4 | r1 >>= 4;
0x000bf018 lsrs r2, r1, 8 | r2 = r1 >> 8;
0x000bf01a lsrs r3, r1, 0xc | r3 = r1 >> 0xc;
0x000bf01c lsrs r4, r1, 0x10 | r4 = r1 >> 0x10;
0x000bf01e lsrs r5, r1, 0x14 | r5 = r1 >> 0x14;
0x000bf020 lsrs r6, r1, 0x18 | r6 = r1 >> 0x18;
0x000bf022 lsrs r7, r1, 0x1c | r7 = r1 >> 0x1c;
0x000bf024 asrs r0, r2, 0x20 | r0 = r2 >> 0x20;
0x000bf026 asrs r1, r2, 4 | r1 = r2 >> 4;
0x000bf028 asrs r2, r2, 8 | r2 >>= 8;
0x000bf02a asrs r3, r2, 0xc | r3 = r2 >> 0xc;
0x000bf02c asrs r4, r2, 0x10 | r4 = r2 >> 0x10;
0x000bf02e asrs r5, r2, 0x14 | r5 = r2 >> 0x14;
0x000bf030 asrs r6, r2, 0x18 | r6 = r2 >> 0x18;
0x000bf032 asrs r7, r2, 0x1c | r7 = r2 >> 0x1c;
0x000bf034 adds r0, r3, r0 | r0 = r3 + r0;
0x000bf036 adds r1, r3, r4 | r1 = r3 + r4;
0x000bf038 subs r2, r3, r0 | r2 = r3 - r0;
0x000bf03a subs r3, r3, r4 | r3 -= r4;
0x000bf03c adds r4, r3, 0 | r4 = r3 + 0;
0x000bf03e adds r5, r3, 4 | r5 = r3 + 4;
0x000bf040 subs r6, r3, 0 | r6 = r3 - 0;
0x000bf042 subs r7, r3, 4 | r7 = r3 - 4;
0x000bf044 movs r0, 0x20 | r0 = 0x20;
0x000bf046 movs r1, 0x21 | r1 = 0x21;
0x000bf048 movs r2, 0x22 | r2 = 0x22;
0x000bf04a movs r3, 0x23 | r3 = 0x23;
0x000bf04c movs r4, 0x24 | r4 = 0x24;
0x000bf04e movs r5, 0x25 | r5 = 0x25;
0x000bf050 movs r6, 0x26 | r6 = 0x26;
0x000bf052 movs r7, 0x27 | r7 = 0x27;
0x000bf054 cmp r0, 0x28 |
0x000bf056 cmp r1, 0x29 |
0x000bf058 cmp r2, 0x2a |
0x000bf05a cmp r3, 0x2b |
0x000bf05c cmp r4, 0x2c |
0x000bf05e cmp r5, 0x2d |
0x000bf060 cmp r6, 0x2e |
| do {
0x000bf062 cmp r7, 0x2f |
0x000bf064 adds r0, 0x30 | r0 += 0x30;
0x000bf066 adds r1, 0x31 | r1 += 0x31;
0x000bf068 adds r2, 0x32 | r2 += 0x32;
0x000bf06a adds r3, 0x33 | r3 += 0x33;
0x000bf06c adds r4, 0x34 | r4 += 0x34;
0x000bf06e adds r5, 0x35 | r5 += 0x35;
0x000bf070 adds r6, 0x36 | r6 += 0x36;
0x000bf072 adds r7, 0x37 | r7 += 0x37;
0x000bf074 subs r0, 0x38 | r0 -= 0x38;
0x000bf076 subs r1, 0x39 | r1 -= 0x39;
0x000bf078 movs r0, r0 |
0x000bf07a movs r2, r0 | r2 = r0;
0x000bf07c movs r3, r0 | r3 = r0;
0x000bf07e movs r5, r0 | r5 = r0;
0x000bf080 movs r6, r0 | r6 = r0;
0x000bf082 movs r7, r0 | r7 = r0;
0x000bf084 movs r0, r1 | r0 = r1;
0x000bf086 movs r1, r1 |
0x000bf088 movs r0, r0 |
0x000bf08a movs r0, r0 |
0x000bf08c movs r0, r0 |
0x000bf08e movs r0, r0 |
0x000bf090 lsls r0, r0, 4 | r0 <<= 4;
0x000bf092 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bf094 lsls r0, r0, 4 | r0 <<= 4;
0x000bf096 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bf098 lsls r0, r0, 4 | r0 <<= 4;
0x000bf09a lsls r1, r0, 4 | r1 = r0 << 4;
0x000bf09c lsls r1, r0, 4 | r1 = r0 << 4;
0x000bf09e lsls r0, r0, 4 | r0 <<= 4;
0x000bf0a0 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bf0a2 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bf0a4 lsls r0, r0, 4 | r0 <<= 4;
0x000bf0a6 lsls r1, r0, 4 | r1 = r0 << 4;
0x000bf0a8 lsls r2, r0, 4 | r2 = r0 << 4;
0x000bf0aa movs r0, r0 |
0x000bf0ac bpl 0xbf062 |
| } while (r0 >= r0);
0x000bf0ae vst4.8 {d10, d12, d14, d16}, [r5:0x80], r0 | __asm ("vst4.8 {d10, d12, d14, d16}, [r5:0x80], r0");
0x000bf0b2 bvc 0xbf17c | __asm ("bvc aav.0x000000ff");
0x000bf0b4 movs r0, r0 |
0x000bf0b6 movs r0, r0 |
0x000bf0b8 movs r0, r0 |
0x000bf0ba movs r0, r0 |
0x000bf0bc movs r0, r0 |
0x000bf0be movs r0, r0 |
0x000bf0c0 movs r0, r0 |
0x000bf0c2 movs r0, r0 |
0x000bf0c4 movs r0, r0 |
0x000bf0c6 movs r0, r0 |
0x000bf0c8 movs r0, r0 |
0x000bf0ca movs r0, r0 |
0x000bf0cc movs r0, r0 |
0x000bf0ce movs r0, r0 |
0x000bf0d0 movs r0, r0 |
0x000bf0d2 movs r0, r0 |
0x000bf0d4 lsrs r4, r4, 9 | r4 >>= 9;
0x000bf0d6 asrs r1, r0, 0x20 | r1 = r0 >> 0x20;
0x000bf0d8 movs r0, r0 |
0x000bf0da lsls r3, r6, 1 | r3 = r6 << 1;
0x000bf0dc lsls r4, r0, 0x14 | r4 = r0 << 0x14;
0x000bf0de movs r0, r0 |
0x000bf0e0 lsls r7, r4, 1 | r7 = r4 << 1;
0x000bf0e2 lsls r1, r0, 0xc | r1 = r0 << 0xc;
0x000bf0e4 movs r6, r3 | r6 = r3;
0x000bf0e6 lsls r2, r7, 1 | r2 = r7 << 1;
0x000bf0e8 lsls r4, r0, 0x18 | r4 = r0 << 0x18;
0x000bf0ea movs r0, r0 |
0x000bf0ec lsls r1, r6, 1 | r1 = r6 << 1;
0x000bf0ee lsrs r4, r0, 4 | r4 = r0 >> 4;
0x000bf0f0 movs r0, r0 |
0x000bf0f2 lsls r1, r2, 1 | r1 = r2 << 1;
0x000bf0f4 lsrs r4, r0, 8 | r4 = r0 >> 8;
0x000bf0f6 movs r0, r0 |
0x000bf0f8 lsls r7, r6, 1 | r7 = r6 << 1;
0x000bf0fa lsrs r4, r0, 0x18 | r4 = r0 >> 0x18;
0x000bf0fc movs r0, r0 |
0x000bf0fe lsls r3, r4, 1 | r3 = r4 << 1;
0x000bf100 lsrs r0, r0, 0x20 | r0 >>= 0x20;
0x000bf102 movs r0, r0 |
0x000bf104 lsrs r7, r5, 1 | r7 = r5 >> 1;
0x000bf106 movs r0, r0 |
0x000bf108 lsls r0, r0, 8 | r0 <<= 8;
0x000bf10a lsrs r5, r6, 9 | r5 = r6 >> 9;
0x000bf10c asrs r0, r0, 0x20 | r0 >>= 0x20;
0x000bf10e movs r0, r0 |
0x000bf110 asrs r0, r7, 1 | r0 = r7 >> 1;
0x000bf112 movs r0, r0 |
0x000bf114 lsls r0, r2, 4 | r0 = r2 << 4;
0x000bf116 asrs r0, r3, 1 | r0 = r3 >> 1;
0x000bf118 movs r0, r0 |
0x000bf11a lsls r0, r0, 0x10 | r0 <<= 0x10;
0x000bf11c lsls r6, r4, 1 | r6 = r4 << 1;
0x000bf11e lsls r1, r0, 4 | r1 = r0 << 4;
0x000bf120 movs r0, r0 |
0x000bf122 lsls r5, r4, 1 | r5 = r4 << 1;
0x000bf124 lsls r1, r0, 8 | r1 = r0 << 8;
0x000bf126 movs r6, r3 | r6 = r3;
0x000bf128 lsls r5, r0, 1 | r5 = r0 << 1;
0x000bf12a lsls r1, r0, 8 | r1 = r0 << 8;
0x000bf12c movs r6, r1 | r6 = r1;
0x000bf12e lsls r7, r0, 1 | r7 = r0 << 1;
0x000bf130 lsls r1, r0, 0xc | r1 = r0 << 0xc;
0x000bf132 movs r6, r1 | r6 = r1;
0x000bf134 lsrs r1, r5, 9 | r1 = r5 >> 9;
0x000bf136 asrs r1, r0, 0x20 | r1 = r0 >> 0x20;
0x000bf138 movs r0, r0 |
0x000bf13a lsls r6, r5, 1 | r6 = r5 << 1;
0x000bf13c lsls r0, r0, 0x10 | r0 <<= 0x10;
0x000bf13e movs r0, r0 |
0x000bf140 movs r5, r4 | r5 = r4;
0x000bf142 lsls r0, r0, 0x1c | r0 <<= 0x1c;
0x000bf144 movs r0, r0 |
0x000bf146 asrs r0, r6, 1 | r0 = r6 >> 1;
0x000bf148 lsrs r0, r0, 0x14 | r0 >>= 0x14;
0x000bf14a lsls r0, r0, 4 | r0 <<= 4;
0x000bf14c lsls r4, r2, 1 | r4 = r2 << 1;
0x000bf14e lsrs r0, r0, 0xc | r0 >>= 0xc;
0x000bf150 movs r0, r0 |
0x000bf152 lsls r3, r2, 1 | r3 = r2 << 1;
0x000bf154 lsrs r0, r0, 0x10 | r0 >>= 0x10;
0x000bf156 movs r0, r0 |
0x000bf158 lsrs r2, r6, 9 | r2 = r6 >> 9;
0x000bf15a lsrs r1, r0, 0x1c | r1 = r0 >> 0x1c;
0x000bf15c movs r0, r0 |
0x000bf15e movs r0, r0 |
0x000bf160 ldr r4, [r6, 4] | r4 = *((r6 + 4));
0x000bf162 strb r3, [r6, 0x11] | *((r6 + 0x11)) = r3;
0x000bf164 str r6, [r5, 0x44] | *((r5 + 0x44)) = r6;
0x000bf166 str r2, [r6, 0x44] | *((r6 + 0x44)) = r2;
0x000bf168 movs r0, r0 |
0x000bf16a movs r0, r0 |
0x000bf16c movs r0, r0 |
0x000bf16e movs r0, r0 |
0x000bf170 adds r1, 0x30 | r1 += 0x30;
0x000bf172 adds r3, 0x32 | r3 += 0x32;
0x000bf174 adds r5, 0x34 | r5 += 0x34;
0x000bf176 adds r7, 0x36 | r7 += 0x36;
0x000bf178 subs r1, 0x38 | r1 -= 0x38;
0x000bf17a rsbs r1, r0, 0 | r1 = r0 - ;
0x000bf17c add r3, r8 | r3 += r8;
0x000bf17e mov r5, r8 | r5 = r8;
0x000bf180 adds r1, 0x30 | r1 += 0x30;
0x000bf182 adds r3, 0x32 | r3 += 0x32;
0x000bf184 adds r5, 0x34 | r5 += 0x34;
0x000bf186 adds r7, 0x36 | r7 += 0x36;
0x000bf188 subs r1, 0x38 | r1 -= 0x38;
0x000bf18a str r1, [r4, 0x24] | *((r4 + 0x24)) = r1;
0x000bf18c str r3, [r4, 0x44] | *((r4 + 0x44)) = r3;
0x000bf18e str r5, [r4, 0x64] | *((r4 + 0x64)) = r5;
0x000bf190 movs r0, r0 |
0x000bf192 movs r0, r0 |
0x000bf194 ldrb r5, [r5] | r5 = *(r5);
0x000bf196 movs r0, r6 | r0 = r6;
0x000bf198 adds r0, 0x58 | r0 += 0x58;
0x000bf19a movs r0, r0 |
0x000bf19c movs r0, r0 |
0x000bf19e movs r0, r0 |
0x000bf1a0 movs r0, r0 |
0x000bf1a2 movs r0, r0 |
0x000bf1a4 movs r0, r0 |
0x000bf1a6 subs r7, 0xe0 | r7 -= 0xe0;
0x000bf1a8 ldr r1, [sp, 0x268] | r1 = *(arg_268h);
0x000bf1aa ldr r1, [sp, 0x264] | r1 = *(arg_264h);
0x000bf1ac ldr r1, [sp, 0x264] | r1 = *(arg_264h);
0x000bf1ae subs r7, 0xa9 | r7 -= 0xa9;
0x000bf1b0 asrs r3, r7, 0x11 | r3 = r7 >> 0x11;
0x000bf1b2 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x5cadc */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_backup_step () | void sqlite3_backup_step (int16_t arg1, int16_t arg2) {
| int16_t var_5h;
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| arithmetic x;
| int32_t var_30h_2;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
0x0005cadc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0005cae0 mov r7, r1 | r7 = r1;
0x0005cae2 ldr.w r1, [pc, 0x698] |
0x0005cae6 sub sp, 0x44 |
0x0005cae8 mov r5, r0 | r5 = r0;
0x0005caea ldr.w r2, [pc, 0x694] | r2 = *(0x5d182);
0x0005caee ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x0005caf0 add r1, pc | r1 = 0xb9c72;
0x0005caf2 ldr r2, [r1, r2] |
0x0005caf4 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0005caf6 ldr r2, [r2] | r2 = *(0xb9c72);
0x0005caf8 str r2, [sp, 0x3c] | var_3ch = r2;
0x0005cafa mov.w r2, 0 | r2 = 0;
0x0005cafe blx 0x8b50 | fcn_00008b50 ();
0x0005cb02 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005cb04 ldrb r3, [r0, 9] | r3 = *((r0 + 9));
| if (r3 != 0) {
0x0005cb06 cbz r3, 0x5cb16 |
0x0005cb08 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x0005cb0a ldrb r2, [r0, 0xa] | r2 = *((r0 + 0xa));
0x0005cb0c adds r3, 1 | r3++;
0x0005cb0e str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0005cb10 cmp r2, 0 |
| if (r2 == 0) {
0x0005cb12 beq.w 0x5cca4 | goto label_29;
| }
| }
0x0005cb16 ldr r3, [r5] | r3 = *(r5);
0x0005cb18 cmp r3, 0 |
| if (r3 == 0) {
0x0005cb1a beq.w 0x5ccb0 | goto label_30;
| }
| label_2:
0x0005cb1e ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x0005cb20 blx 0x8b50 | fcn_00008b50 ();
0x0005cb24 ldr.w fp, [r5, 0x1c] | fp = *((r5 + 0x1c));
0x0005cb28 sub.w r2, fp, 5 | r2 = fp - 5;
0x0005cb2c cmp.w fp, 0 |
0x0005cb30 it ne |
| if (fp != 0) {
0x0005cb32 cmpne r2, 1 | __asm ("cmpne r2, 1");
| }
0x0005cb34 ite hi |
| if (fp <= 0) {
0x0005cb36 movhi r2, 1 | r2 = 1;
| }
| if (fp > 0) {
0x0005cb38 movls r2, 0 | r2 = 0;
| }
| if (fp > 0) {
0x0005cb3a bhi.w 0x5cc60 | goto label_31;
| }
0x0005cb3e ldrd r3, r0, [r5] | __asm ("ldrd r3, r0, [r5]");
0x0005cb42 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x0005cb44 ldr r6, [r0, 4] | r6 = *((r0 + 4));
0x0005cb46 str r3, [sp, 0xc] | var_ch = r3;
0x0005cb48 ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x0005cb4a ldr r3, [r6] | r3 = *(r6);
0x0005cb4c ldr.w r8, [r4] | r8 = *(r4);
0x0005cb50 str r3, [sp, 0x18] | var_18h = r3;
0x0005cb52 ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x0005cb54 cbz r3, 0x5cb5e |
0x0005cb56 ldrb r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0005cb58 cmp r3, 2 |
| if (r3 == 2) {
0x0005cb5a beq.w 0x5ce34 | goto label_32;
| }
| }
0x0005cb5e ldrb r2, [r1, 8] | r2 = *((r1 + 8));
0x0005cb60 cmp r2, 0 |
| if (r2 == 0) {
0x0005cb62 beq.w 0x5ccda | goto label_33;
| }
| label_4:
0x0005cb66 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x0005cb68 str r3, [sp, 0x10] | var_10h = r3;
0x0005cb6a cmp r3, 0 |
| if (r3 == 0) {
0x0005cb6c beq.w 0x5ccf8 | goto label_34;
| }
0x0005cb70 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005cb72 movs r2, 0 | r2 = 0;
0x0005cb74 str r2, [sp, 0x10] | var_10h = r2;
| label_13:
0x0005cb76 ldrb r3, [r3, 5] | r3 = *((r3 + 5));
0x0005cb78 ldr r2, [r6, 0x24] | r2 = *((r6 + 0x24));
0x0005cb7a ldr r0, [r4, 0x24] | r0 = *((r4 + 0x24));
0x0005cb7c cmp r3, 5 |
0x0005cb7e str r2, [sp, 0x1c] | var_1ch = r2;
0x0005cb80 str r0, [sp, 0x20] | var_20h = r0;
| if (r3 != 5) {
0x0005cb82 bne.w 0x5d148 | goto label_35;
| }
0x0005cb86 subs r3, r2, r0 | r3 = r2 - r0;
0x0005cb88 it ne |
| if (r3 == r2) {
0x0005cb8a movne r3, 1 | r3 = 1;
| }
0x0005cb8c lsl.w fp, r3, 3 |
0x0005cb90 movs r3, 1 | r3 = 1;
0x0005cb92 str r3, [sp, 0x24] | var_24h = r3;
| label_5:
0x0005cb94 ldr.w sl, [r4, 0x30] | sl = *((r4 + 0x30));
0x0005cb98 cmp r7, 0 |
| if (r7 == 0) {
0x0005cb9a beq 0x5cc1c | goto label_36;
| }
| label_27:
0x0005cb9c ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
0x0005cb9e cmp sl, r4 |
0x0005cba0 it hs |
| if (sl >= r4) {
0x0005cba2 cmphs fp, 0 | __asm ("cmphs fp, 0");
| }
| if (sl != r4) {
0x0005cba6 bne 0x5cc1c | goto label_36;
| }
0x0005cba8 ldr.w sb, [pc, 0x5d8] |
0x0005cbac add r3, sp, 0x30 | r3 += x;
0x0005cbae movs r6, 0 | r6 = 0;
0x0005cbb0 mov fp, r3 |
0x0005cbb2 str r7, [sp, 0xc] | var_ch = r7;
0x0005cbb4 add sb, pc | sb = 0xb9d3c;
0x0005cbb6 b 0x5cbd0 | goto label_37;
| label_0:
0x0005cbb8 ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
| do {
| label_1:
0x0005cbba ldr r2, [sp, 0xc] | r2 = var_ch;
0x0005cbbc adds r6, 1 | r6++;
0x0005cbbe adds r4, 1 | r4++;
0x0005cbc0 str r4, [r5, 0x10] | *((r5 + 0x10)) = r4;
0x0005cbc2 cmp r2, r6 |
| if (r2 == r6) {
0x0005cbc4 beq 0x5cc1a | goto label_38;
| }
0x0005cbc6 cmp r4, sl |
0x0005cbc8 it ls |
| if (r4 <= sl) {
0x0005cbca cmpls r3, 0 | __asm ("cmpls r3, 0");
| }
| if (r4 != sl) {
0x0005cbcc bne 0x5cc1a | goto label_38;
| }
0x0005cbce ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
| label_37:
0x0005cbd0 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0005cbd2 ldr.w r0, [sb, 0x118] | r0 = *((sb + 0x118));
0x0005cbd6 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x0005cbd8 bl 0xb1c30 | fcn_000b1c30 (r0, r1, r2);
0x0005cbdc adds r0, 1 | r0++;
0x0005cbde cmp r0, r4 |
0x0005cbe0 it eq |
| if (r0 != r4) {
0x0005cbe2 moveq r3, 0 | r3 = 0;
| }
0x0005cbe4 beq 0x5cbba |
| } while (r0 == r4);
0x0005cbe6 movs r3, 2 | r3 = 2;
0x0005cbe8 ldr.w r7, [r8, 0xdc] | r7 = *((r8 + 0xdc));
0x0005cbec mov r2, fp | r2 = fp;
0x0005cbee mov r1, r4 | r1 = r4;
0x0005cbf0 mov r0, r8 | r0 = r8;
0x0005cbf2 blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005cbf4 mov r3, r0 | r3 = r0;
0x0005cbf6 cmp r0, 0 |
| if (r0 != 0) {
0x0005cbf8 bne 0x5cbb8 | goto label_0;
| }
0x0005cbfa ldr r2, [sp, 0x30] | r2 = x;
0x0005cbfc mov r1, r4 | r1 = r4;
0x0005cbfe mov r0, r5 | r0 = r5;
0x0005cc00 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x0005cc02 bl 0x54868 | r0 = fcn_00054868 (r0, r1, r2, r3);
0x0005cc06 mov r3, r0 | r3 = r0;
0x0005cc08 ldr r0, [sp, 0x30] | r0 = x;
0x0005cc0a cmp r0, 0 |
| if (r0 == 0) {
0x0005cc0c beq 0x5cbb8 | goto label_0;
| }
0x0005cc0e str r3, [sp, 0x14] | var_14h = r3;
0x0005cc10 bl 0x129c4 | fcn_000129c4 (r0);
0x0005cc14 ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
0x0005cc16 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0005cc18 b 0x5cbba | goto label_1;
| label_38:
0x0005cc1a mov fp, r3 |
| label_36:
0x0005cc1c cmp.w fp, 0 |
| if (fp != 0) {
0x0005cc20 bne.w 0x5cd4e | goto label_39;
| }
| label_28:
0x0005cc24 ldr r1, [r5, 0x10] | r1 = *((r5 + 0x10));
0x0005cc26 str.w sl, [r5, 0x24] | __asm ("str.w sl, [r5, 0x24]");
0x0005cc28 adr r0, 0x90 | r0 = 0x90;
0x0005cc2a rsb.w r3, r1, 1 | r3 = 1 - r1;
0x0005cc2e cmp r1, sl |
0x0005cc30 add r3, sl | r3 += sl;
0x0005cc32 str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
| if (r1 > sl) {
0x0005cc34 bhi.w 0x5cd54 | goto label_40;
| }
0x0005cc38 ldr r4, [r5, 0x28] | r4 = *((r5 + 0x28));
0x0005cc3a cmp r4, 0 |
| if (r4 != 0) {
0x0005cc3c bne.w 0x5ce90 | goto label_41;
| }
0x0005cc40 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005cc42 movs r2, 1 | r2 = 1;
0x0005cc44 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0005cc46 ldr r3, [r3] | r3 = *(r3);
0x0005cc48 ldr r1, [r3, 0x60] | r1 = *((r3 + 0x60));
0x0005cc4a str r1, [r5, 0x2c] | *((r5 + 0x2c)) = r1;
0x0005cc4c str r5, [r3, 0x60] | *((r3 + 0x60)) = r5;
0x0005cc4e ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005cc50 str r2, [r5, 0x28] | *((r5 + 0x28)) = r2;
0x0005cc52 cmp r3, 0 |
| if (r3 != 0) {
0x0005cc54 bne.w 0x5cf26 | goto label_42;
| }
| label_11:
0x0005cc58 mov.w fp, 0 |
| label_7:
0x0005cc5c str.w fp, [r5, 0x1c] | __asm ("str.w fp, [r5, 0x1c]");
| label_31:
0x0005cc60 ldr r2, [r5] | r2 = *(r5);
| if (r2 != 0) {
0x0005cc62 cbz r2, 0x5cc6a |
0x0005cc64 ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x0005cc66 blx 0x87c0 | fcn_000087c0 ();
| }
| label_3:
0x0005cc6a ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005cc6c ldrb r2, [r0, 9] | r2 = *((r0 + 9));
| if (r2 != 0) {
0x0005cc6e cbz r2, 0x5cc7a |
0x0005cc70 ldr r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x0005cc72 subs r2, 1 | r2--;
0x0005cc74 str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x0005cc76 cmp r2, 0 |
| if (r2 == 0) {
0x0005cc78 beq 0x5cd48 | goto label_43;
| }
| }
| label_6:
0x0005cc7a ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0005cc7c ldr r0, [r2, 0xc] | r0 = *((r2 + 0xc));
0x0005cc7e blx 0x87c0 | fcn_000087c0 ();
0x0005cc82 ldr.w r1, [pc, 0x504] | r1 = *(0x0005d188);
0x0005cc86 ldr.w r2, [pc, 0x4f8] | r2 = *(0x5d182);
0x0005cc8a add r1, pc | r1 += pc;
0x0005cc8c ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x0005cc8e ldr r1, [r2] | r1 = *(0x5d182);
0x0005cc90 ldr r2, [sp, 0x3c] | r2 = var_3ch;
0x0005cc92 eors r1, r2 | r1 ^= r2;
0x0005cc94 mov.w r2, 0 | r2 = 0;
| if (r1 != r2) {
0x0005cc98 bne.w 0x5d12e | goto label_44;
| }
0x0005cc9c mov r0, fp | r0 = fp;
0x0005cc9e add sp, 0x44 |
0x0005cca0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_29:
0x0005cca4 bl 0x12e84 | fcn_00012e84 (r0);
0x0005cca8 ldr r3, [r5] | r3 = *(r5);
0x0005ccaa cmp r3, 0 |
| if (r3 != 0) {
0x0005ccac bne.w 0x5cb1e | goto label_2;
| }
| label_30:
0x0005ccb0 ldr.w fp, [r5, 0x1c] | fp = *((r5 + 0x1c));
0x0005ccb4 sub.w r2, fp, 5 | r2 = fp - 5;
0x0005ccb8 cmp.w fp, 0 |
0x0005ccbc it ne |
| if (fp == 0) {
0x0005ccbe cmpne r2, 1 | __asm ("cmpne r2, 1");
| goto label_45;
| }
| if (fp > 0) {
| label_45:
0x0005ccc0 bhi 0x5cc6a | goto label_3;
| }
0x0005ccc2 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0005ccc4 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x0005ccc6 ldr r6, [r0, 4] | r6 = *((r0 + 4));
0x0005ccc8 ldrb r2, [r1, 8] | r2 = *((r1 + 8));
0x0005ccca ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x0005cccc ldr r3, [r6] | r3 = *(r6);
0x0005ccce ldr.w r8, [r4] | r8 = *(r4);
0x0005ccd2 str r3, [sp, 0x18] | var_18h = r3;
0x0005ccd4 cmp r2, 0 |
| if (r2 != 0) {
0x0005ccd6 bne.w 0x5cb66 | goto label_4;
| }
| label_33:
0x0005ccda mov r0, r1 | r0 = r1;
0x0005ccdc mov r1, r2 | r1 = r2;
0x0005ccde bl 0x57c50 | fcn_00057c50 (r0, r1, r2, r3);
0x0005cce2 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0005cce4 mov fp, r0 |
0x0005cce6 orrs.w r1, r2, r0 | r1 = r2 | r0;
| if (r1 != r2) {
0x0005ccea bne.w 0x5ce7c | goto label_46;
| }
0x0005ccee ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
0x0005ccf0 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0005ccf2 ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x0005ccf4 movs r3, 1 | r3 = 1;
0x0005ccf6 str r3, [sp, 0x10] | var_10h = r3;
| label_34:
0x0005ccf8 movs r3, 0 | r3 = 0;
0x0005ccfa ldr r1, [r4, 0x24] | r1 = *((r4 + 0x24));
0x0005ccfc mov r2, r3 | r2 = r3;
0x0005ccfe bl 0x1dc88 | r0 = fcn_0001dc88 (r0, r1, r2, r3);
0x0005cd02 cmp r0, 7 |
0x0005cd04 mov fp, r0 |
| if (r0 != 7) {
0x0005cd06 beq 0x5cd26 |
0x0005cd08 ldr r2, [r5, 0xc] | r2 = *((r5 + 0xc));
0x0005cd0a ldr r6, [r5, 4] | r6 = *((r5 + 4));
| label_19:
0x0005cd0c cmp r2, 0 |
| if (r2 != 0) {
0x0005cd0e bne.w 0x5cf3c | goto label_47;
| }
0x0005cd12 mov r0, r6 | r0 = r6;
0x0005cd14 add.w r2, r5, 8 | r2 = r5 + 8;
0x0005cd18 movs r1, 2 | r1 = 2;
0x0005cd1a bl 0x57c50 | r0 = fcn_00057c50 (r0, r1, r2, r3);
0x0005cd1e mov fp, r0 |
0x0005cd20 cmp r0, 0 |
| if (r0 == 0) {
0x0005cd22 beq.w 0x5cec2 | goto label_48;
| }
| }
0x0005cd26 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0005cd28 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x0005cd2a ldr r6, [r2, 4] | r6 = *((r2 + 4));
0x0005cd2c ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x0005cd2e ldr r2, [r6] | r2 = *(r6);
| label_8:
0x0005cd30 ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x0005cd32 ldrb r2, [r2, 5] | r2 = *((r2 + 5));
0x0005cd34 str r3, [sp, 0x1c] | var_1ch = r3;
0x0005cd36 sub.w r3, r2, 5 | r3 = r2 - 5;
0x0005cd3a clz r3, r3 | r3 &= r3;
0x0005cd3e lsrs r3, r3, 5 | r3 >>= 5;
0x0005cd40 str r3, [sp, 0x24] | var_24h = r3;
0x0005cd42 ldr r3, [r4, 0x24] | r3 = *((r4 + 0x24));
0x0005cd44 str r3, [sp, 0x20] | var_20h = r3;
0x0005cd46 b 0x5cb94 | goto label_5;
| label_43:
0x0005cd48 bl 0xa14c | fcn_0000a14c (r0);
0x0005cd4c b 0x5cc7a | goto label_6;
| label_39:
0x0005cd4e cmp.w fp, 0x65 |
| if (fp == 0x65) {
0x0005cd52 bne 0x5ce12 |
| label_40:
0x0005cd54 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x0005cd56 cmp.w sl, 0 |
| if (sl == 0) {
0x0005cd5a beq 0x5ce3e | goto label_49;
| }
| label_10:
0x0005cd5c ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0005cd5e mov r0, r6 | r0 = r6;
0x0005cd60 movs r1, 1 | r1 = 1;
0x0005cd62 adds r2, 1 | r2++;
0x0005cd64 bl 0x58360 | r0 = fcn_00058360 (r0, r1, r2);
0x0005cd68 mov fp, r0 |
0x0005cd6a cmp r0, 0 |
| if (r0 != 0) {
0x0005cd6c bne 0x5ce12 | goto label_9;
| }
0x0005cd6e ldr r0, [r5] | r0 = *(r5);
| if (r0 != 0) {
0x0005cd70 cbz r0, 0x5cd76 |
0x0005cd72 bl 0x1ad8c | fcn_0001ad8c (r0);
| }
0x0005cd76 ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005cd78 cmp r3, 0 |
| if (r3 != 0) {
0x0005cd7a bne.w 0x5cf0e | goto label_50;
| }
| label_18:
0x0005cd7e ldrd r2, r3, [sp, 0x1c] | __asm ("ldrd r2, r3, [var_1ch]");
0x0005cd82 cmp r3, r2 |
| if (r3 >= r2) {
0x0005cd84 bge.w 0x5cf46 | goto label_51;
| }
0x0005cd88 ldr r4, [sp, 0x20] | r4 = var_20h;
0x0005cd8a ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0005cd8c mov r1, r4 | r1 = r4;
0x0005cd8e bl 0xb1ea8 | fcn_000b1ea8 (r0, r1);
0x0005cd92 asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x0005cd94 mov r1, r0 | r1 = r0;
0x0005cd96 add r0, sl | r0 += sl;
0x0005cd98 subs r0, 1 | r0--;
0x0005cd9a str r3, [sp, 0x14] | var_14h = r3;
0x0005cd9c bl 0xb1ea8 | fcn_000b1ea8 (r0, r1);
0x0005cda0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0005cda2 mov r6, r0 | r6 = r0;
0x0005cda4 smull r0, r2, r4, sl | r0:r2 = r4 * sl;
0x0005cda8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005cdaa ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x0005cdac ldr r3, [pc, 0x3dc] |
0x0005cdae str r0, [sp, 0x24] | var_24h = r0;
0x0005cdb0 str r2, [sp, 0x28] | var_28h = r2;
0x0005cdb2 add r3, pc |
0x0005cdb4 str r1, [sp, 0x2c] | var_2ch = r1;
0x0005cdb6 ldr.w r3, [r3, 0x118] | r3 = *(0xba05a);
0x0005cdba mov r0, r3 | r0 = r3;
0x0005cdbc str r3, [sp, 0xc] | var_ch = r3;
0x0005cdbe bl 0xb1c30 | fcn_000b1c30 (r0, r1, r2);
0x0005cdc2 ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005cdc4 adds r2, r0, 1 | r2 = r0 + 1;
0x0005cdc6 cmp r2, r6 |
0x0005cdc8 ite ne |
| if (r2 == r6) {
0x0005cdca movne sb, r6 | sb = r6;
| }
| if (r2 != r6) {
0x0005cdcc moveq sb, r0 | sb = r0;
| }
0x0005cdce ldr.w sl, [r3, 0x1c] | sl = *(0xba076);
0x0005cdd2 ldr r4, [r3, 0x40] | r4 = *(0xba09a);
0x0005cdd4 cmp sb, sl |
| if (sb > sl) {
0x0005cdd6 bhi.w 0x5cfba | goto label_52;
| }
0x0005cdda ldr r6, [pc, 0x3b4] |
0x0005cddc mov fp, r4 |
0x0005cdde mov r4, r3 | r4 = r3;
0x0005cde0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0005cde2 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0005cde4 add r7, sp, 0x30 | r7 += x;
0x0005cde6 add r6, pc | r6 = 0xb9f7c;
0x0005cde8 str r7, [sp, 0xc] | var_ch = r7;
0x0005cdea mov r0, r3 | r0 = r3;
| label_16:
0x0005cdec bl 0xb1c30 | fcn_000b1c30 (r0, r1, r2);
0x0005cdf0 adds r0, 1 | r0++;
0x0005cdf2 cmp r0, sb |
0x0005cdf4 it eq |
| if (r0 != sb) {
0x0005cdf6 addeq sb, sb, 1 | sb++;
| }
| if (r0 == sb) {
0x0005cdfa beq 0x5cef6 | goto label_53;
| }
0x0005cdfc movs r3, 0 | r3 = 0;
0x0005cdfe ldr r2, [sp, 0xc] | r2 = var_ch;
0x0005ce00 ldr.w r7, [r4, 0xdc] | r7 = *((r4 + 0xdc));
0x0005ce04 mov r1, sb | r1 = sb;
0x0005ce06 mov r0, r4 | r0 = r4;
0x0005ce08 blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005ce0a mov r3, r0 | r3 = r0;
0x0005ce0c cmp r0, 0 |
| if (r0 == 0) {
0x0005ce0e beq 0x5ceda | goto label_54;
| }
| label_15:
0x0005ce10 mov fp, r3 |
| }
| label_9:
0x0005ce12 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005ce14 cbnz r3, 0x5ce24 |
| while (1) {
0x0005ce16 movw r2, 0xc0a | r2 = 0xc0a;
0x0005ce1a cmp fp, r2 |
0x0005ce1c it eq |
| if (fp != r2) {
0x0005ce1e moveq fp, 7 |
| }
0x0005ce22 b 0x5cc5c | goto label_7;
0x0005ce24 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005ce26 ldrb r2, [r0, 8] | r2 = *((r0 + 8));
0x0005ce28 cmp r2, 2 |
| if (r2 == 2) {
0x0005ce2a beq 0x5ceb8 | goto label_55;
| }
| label_12:
0x0005ce2c movs r1, 0 | r1 = 0;
0x0005ce2e bl 0x574ac | fcn_000574ac (r0, r1);
0x0005ce32 b 0x5ce16 |
| }
| label_32:
0x0005ce34 str r2, [sp, 0x10] | var_10h = r2;
0x0005ce36 mov.w fp, 5 |
0x0005ce3a ldr r2, [sp, 0x18] | r2 = var_18h;
0x0005ce3c b 0x5cd30 | goto label_8;
| label_49:
0x0005ce3e ldrb r3, [r6, 9] | r3 = *((r6 + 9));
| if (r3 != 0) {
0x0005ce40 cbz r3, 0x5ce4e |
0x0005ce42 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0005ce44 adds r3, 1 | r3++;
0x0005ce46 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x0005ce48 ldrb r3, [r6, 0xa] | r3 = *((r6 + 0xa));
0x0005ce4a cmp r3, 0 |
| if (r3 == 0) {
0x0005ce4c beq 0x5ced2 | goto label_56;
| }
| }
| label_14:
0x0005ce4e ldr r0, [r6, 4] | r0 = *((r6 + 4));
0x0005ce50 movs r3, 0 | r3 = 0;
0x0005ce52 str r3, [r0, 0x30] | *((r0 + 0x30)) = r3;
0x0005ce54 bl 0x57bbc | fcn_00057bbc (r0);
0x0005ce58 ldrb r2, [r6, 9] | r2 = *((r6 + 9));
0x0005ce5a mov fp, r0 |
| if (r2 != 0) {
0x0005ce5c cbz r2, 0x5ce68 |
0x0005ce5e ldr r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0005ce60 subs r2, 1 | r2--;
0x0005ce62 str r2, [r6, 0xc] | *((r6 + 0xc)) = r2;
0x0005ce64 cmp r2, 0 |
| if (r2 == 0) {
0x0005ce66 beq 0x5cf06 | goto label_57;
| }
| }
| label_17:
0x0005ce68 cmp.w fp, 0x65 |
0x0005ce6c it ne |
| if (fp == 0x65) {
0x0005ce6e cmpne fp, 0 | __asm ("cmpne fp, 0");
| goto label_58;
| }
| if (fp != 0x65) {
| label_58:
0x0005ce72 bne 0x5ce12 | goto label_9;
| }
0x0005ce74 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x0005ce76 mov.w sl, 1 | sl = 1;
0x0005ce7a b 0x5cd5c | goto label_10;
| label_46:
0x0005ce7c ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x0005ce7e cmp r0, 0 |
| if (r0 == 0) {
0x0005ce80 beq 0x5cf20 | goto label_59;
| }
0x0005ce82 ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x0005ce84 movs r3, 1 | r3 = 1;
0x0005ce86 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x0005ce88 str r3, [sp, 0x10] | var_10h = r3;
0x0005ce8a ldr r2, [r6] | r2 = *(r6);
0x0005ce8c ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x0005ce8e b 0x5cd30 | goto label_8;
| label_41:
0x0005ce90 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005ce92 cmp r3, 0 |
| if (r3 == 0) {
0x0005ce94 beq.w 0x5cc58 | goto label_11;
| }
0x0005ce98 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005ce9a movs r1, 0 | r1 = 0;
0x0005ce9c ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x0005ce9e cmp r3, 2 |
| if (r3 == 2) {
0x0005cea0 beq.w 0x5cfaa | goto label_60;
| }
| label_20:
0x0005cea4 bl 0x574ac | fcn_000574ac (r0, r1);
0x0005cea8 b 0x5cc58 | goto label_11;
| label_24:
0x0005ceaa ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005ceac ldrb r2, [r0, 8] | r2 = *((r0 + 8));
0x0005ceae cmp r2, 2 |
| if (r2 != 2) {
0x0005ceb0 bne.w 0x5d140 | goto label_61;
| }
0x0005ceb4 mov.w fp, 0xa |
| label_55:
0x0005ceb8 movs r1, 0 | r1 = 0;
0x0005ceba bl 0x5c7cc | fcn_0005c7cc (r0, r1, r2);
0x0005cebe ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005cec0 b 0x5ce2c | goto label_12;
| label_48:
0x0005cec2 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0005cec4 ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x0005cec6 ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x0005cec8 movs r3, 1 | r3 = 1;
0x0005ceca str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0005cecc ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x0005cece ldr r3, [r6] | r3 = *(r6);
0x0005ced0 b 0x5cb76 | goto label_13;
| label_56:
0x0005ced2 mov r0, r6 | r0 = r6;
0x0005ced4 bl 0x12e84 | fcn_00012e84 (r0);
0x0005ced8 b 0x5ce4e | goto label_14;
| label_54:
0x0005ceda ldr r0, [sp, 0x30] | r0 = x;
0x0005cedc bl 0x5480c | r0 = fcn_0005480c (r0);
0x0005cee0 mov r3, r0 | r3 = r0;
0x0005cee2 ldr r0, [sp, 0x30] | r0 = x;
| if (r0 != 0) {
0x0005cee4 cbz r0, 0x5ceee |
0x0005cee6 str r3, [sp, 0x2c] | var_2ch = r3;
0x0005cee8 bl 0x129c4 | fcn_000129c4 (r0);
0x0005ceec ldr r3, [sp, 0x2c] | r3 = var_2ch;
| }
0x0005ceee add.w sb, sb, 1 | sb++;
0x0005cef2 cmp r3, 0 |
| if (r3 != 0) {
0x0005cef4 bne 0x5ce10 | goto label_15;
| }
| label_53:
0x0005cef6 cmp sb, sl |
| if (sb > sl) {
0x0005cef8 bhi 0x5cfb8 | goto label_62;
| }
0x0005cefa ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0005cefc ldr.w r0, [r6, 0x118] | r0 = *((r6 + 0x118));
0x0005cf00 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0005cf02 ldr r1, [r3, 0x24] | r1 = *((r3 + 0x24));
0x0005cf04 b 0x5cdec | goto label_16;
| label_57:
0x0005cf06 mov r0, r6 | r0 = r6;
0x0005cf08 bl 0xa14c | fcn_0000a14c (r0);
0x0005cf0c b 0x5ce68 | goto label_17;
| label_50:
0x0005cf0e ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0005cf10 movs r1, 2 | r1 = 2;
0x0005cf12 bl 0x583c8 | r0 = fcn_000583c8 (r0, r1);
0x0005cf16 mov fp, r0 |
0x0005cf18 cmp r0, 0 |
| if (r0 != 0) {
0x0005cf1a bne.w 0x5ce12 | goto label_9;
| }
0x0005cf1e b 0x5cd7e | goto label_18;
| label_59:
0x0005cf20 movs r3, 1 | r3 = 1;
0x0005cf22 str r3, [sp, 0x10] | var_10h = r3;
0x0005cf24 b 0x5cd0c | goto label_19;
| label_42:
0x0005cf26 ldrb r3, [r0, 8] | r3 = *((r0 + 8));
0x0005cf28 mov r1, r4 | r1 = r4;
0x0005cf2a cmp r3, 2 |
| if (r3 != 2) {
0x0005cf2c bne 0x5cea4 | goto label_20;
| }
0x0005cf2e bl 0x5c7cc | fcn_0005c7cc (r0, r1, r2);
0x0005cf32 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005cf34 mov r1, r4 | r1 = r4;
0x0005cf36 bl 0x574ac | fcn_000574ac (r0, r1);
0x0005cf3a b 0x5cc58 | goto label_11;
| label_47:
0x0005cf3c ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x0005cf3e ldr r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x0005cf40 ldr r3, [r6] | r3 = *(r6);
0x0005cf42 ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x0005cf44 b 0x5cb76 | goto label_13;
| label_51:
0x0005cf46 ldrd r1, r0, [sp, 0x1c] | __asm ("ldrd r1, r0, [var_1ch]");
0x0005cf4a bl 0xb1ea8 | fcn_000b1ea8 (r0, r1);
0x0005cf4e ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005cf50 mul r0, sl, r0 | r0 = sl * r0;
0x0005cf54 ldr.w fp, [r3, 0x2c] | fp = *((r3 + 0x2c));
0x0005cf58 str r0, [r3, 0x1c] | *((r3 + 0x1c)) = r0;
0x0005cf5a cmp.w fp, 0 |
| if (fp != 0) {
0x0005cf5e bne.w 0x5ce12 | goto label_9;
| }
0x0005cf62 ldr r2, [pc, 0x230] |
0x0005cf64 add r2, pc |
0x0005cf66 ldr.w r2, [r2, 0x100] | r2 = *(0xba1fe);
| if (r2 != 0) {
0x0005cf6a cbz r2, 0x5cf78 |
0x0005cf6c mov.w r0, 0x190 | r0 = 0x190;
0x0005cf70 blx r2 | r0 = uint32_t (*r2)(uint32_t) (r0);
0x0005cf72 cmp r0, 0 |
| if (r0 != 0) {
0x0005cf74 bne.w 0x5d132 | goto label_63;
| }
| }
0x0005cf78 movs r2, 0 | r2 = 0;
0x0005cf7a ldr r0, [sp, 0x18] | r0 = var_18h;
0x0005cf7c mov r1, r2 | r1 = r2;
0x0005cf7e bl 0x5b8d4 | r0 = fcn_0005b8d4 (r0, r1, r2, r3);
0x0005cf82 mov fp, r0 |
| label_21:
0x0005cf84 cmp.w fp, 0 |
| if (fp != 0) {
0x0005cf88 bne.w 0x5ce12 | goto label_9;
| }
0x0005cf8c mov r1, fp | r1 = fp;
0x0005cf8e ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x0005cf90 bl 0x574ac | r0 = fcn_000574ac (r0, r1);
0x0005cf94 mov fp, r0 |
0x0005cf96 cmp r0, 0 |
| if (r0 != 0) {
0x0005cf98 bne.w 0x5ce12 | goto label_9;
| }
0x0005cf9c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005cf9e cmp r3, 0 |
| if (r3 != 0) {
0x0005cfa0 bne.w 0x5d11e | goto label_64;
| }
| label_25:
0x0005cfa4 mov.w fp, 0x65 |
0x0005cfa8 b 0x5cc5c | goto label_7;
| label_60:
0x0005cfaa bl 0x5c7cc | fcn_0005c7cc (r0, r1, r2);
0x0005cfae ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005cfb0 movs r1, 0 | r1 = 0;
0x0005cfb2 bl 0x574ac | fcn_000574ac (r0, r1);
0x0005cfb6 b 0x5cc58 | goto label_11;
| label_62:
0x0005cfb8 mov r4, fp | r4 = fp;
| label_52:
0x0005cfba ldr r3, [sp, 0x18] | r3 = var_18h;
0x0005cfbc ldr.w fp, [r3, 0x2c] | fp = *((r3 + 0x2c));
0x0005cfc0 cmp.w fp, 0 |
| if (fp != 0) {
0x0005cfc4 bne.w 0x5ce12 | goto label_9;
| }
0x0005cfc8 ldr r2, [pc, 0x1cc] |
0x0005cfca add r2, pc |
0x0005cfcc ldr.w r2, [r2, 0x100] | r2 = *(0xba266);
| if (r2 != 0) {
0x0005cfd0 cbz r2, 0x5cfde |
0x0005cfd2 mov.w r0, 0x190 | r0 = 0x190;
0x0005cfd6 blx r2 | r0 = uint32_t (*r2)(uint32_t) (r0);
0x0005cfd8 cmp r0, 0 |
| if (r0 != 0) {
0x0005cfda bne.w 0x5d110 | goto label_65;
| }
| }
0x0005cfde movs r2, 1 | r2 = 1;
0x0005cfe0 movs r1, 0 | r1 = 0;
0x0005cfe2 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0005cfe4 bl 0x5b8d4 | fcn_0005b8d4 (r0, r1, r2, r3);
0x0005cfe8 ldr r2, [pc, 0x1b0] |
0x0005cfea mov fp, r0 |
0x0005cfec ldr r3, [sp, 0x24] | r3 = var_24h;
0x0005cfee ldr r6, [sp, 0x28] | r6 = var_28h;
0x0005cff0 add r2, pc | r2 = 0xba190;
0x0005cff2 ldr.w r1, [r2, 0x118] | r1 = *(0xba2a8);
0x0005cff6 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0005cff8 add r2, r1 | r2 += r1;
0x0005cffa asr.w ip, r2, 0x1f |
0x0005cffe cmp r3, r2 |
0x0005d000 sbcs.w r0, r6, ip | __asm ("sbcs.w r0, r6, ip");
0x0005d004 it lt |
| if (r3 >= r2) {
0x0005d006 movlt r2, r3 | r2 = r3;
| }
0x0005d008 ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005d00a it lt |
| if (r3 >= r2) {
0x0005d00c movlt ip, r6 |
| }
0x0005d00e add.w sb, r1, r3 | sb = r1 + r3;
0x0005d012 asr.w sl, sb, 0x1f | sl = sb >> 0x1f;
0x0005d016 cmp sb, r2 |
0x0005d018 sbcs.w r1, sl, ip | __asm ("sbcs.w r1, sl, ip");
0x0005d01c ite lt |
| if (sb >= r2) {
0x0005d01e movlt r1, 1 | r1 = 1;
| }
| if (sb < r2) {
0x0005d020 movge r1, 0 | r1 = 0;
| }
0x0005d022 cmp.w fp, 0 |
0x0005d026 ite ne |
| if (fp == 0) {
0x0005d028 movne r1, 0 | r1 = 0;
| }
| if (fp != 0) {
0x0005d02a andeq r1, r1, 1 | r1 &= 1;
| }
0x0005d02e cmp r1, 0 |
| if (r1 == 0) {
0x0005d030 beq 0x5d0aa | goto label_22;
| }
0x0005d032 add r7, sp, 0x30 | r7 += x;
0x0005d034 str r5, [sp, 0xc] | var_ch = r5;
0x0005d036 mov fp, r7 |
0x0005d038 mov r7, sb | r7 = sb;
0x0005d03a mov sb, r3 | sb = r3;
0x0005d03c ldr r5, [sp, 0x14] | r5 = var_14h;
0x0005d03e str.w ip, [sp, 0x1c] | __asm ("str.w ip, [var_1ch]");
0x0005d042 str r2, [sp, 0x14] | var_14h = r2;
| do {
0x0005d044 movs r3, 0 | r3 = 0;
0x0005d046 mov r2, sb | r2 = sb;
0x0005d048 str r3, [sp, 0x30] | x = r3;
0x0005d04a mov r0, r7 | r0 = r7;
0x0005d04c mov r3, r5 | r3 = r5;
0x0005d04e mov r1, sl | r1 = sl;
0x0005d050 bl 0xb26ec | fcn_000b26ec (r0, r1, r2, r3);
0x0005d054 ldr.w r6, [r8, 0xdc] | r6 = *((r8 + 0xdc));
0x0005d058 adds r1, r0, 1 | r1 = r0 + 1;
0x0005d05a movs r3, 0 | r3 = 0;
0x0005d05c mov r2, fp | r2 = fp;
0x0005d05e mov r0, r8 | r0 = r8;
0x0005d060 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005d062 cmp r0, 0 |
| if (r0 != 0) {
0x0005d064 bne 0x5d0f4 | goto label_66;
| }
0x0005d066 ldr r3, [sp, 0x30] | r3 = x;
0x0005d068 mov r2, sb | r2 = sb;
0x0005d06a mov r0, r4 | r0 = r4;
0x0005d06c ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0005d06e ldr r3, [r4] | r3 = *(r4);
0x0005d070 strd r7, sl, [sp] | __asm ("strd r7, sl, [sp]");
0x0005d074 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0005d076 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005d078 mov r3, r0 | r3 = r0;
0x0005d07a ldr r0, [sp, 0x30] | r0 = x;
0x0005d07c cmp r0, 0 |
| if (r0 != 0) {
0x0005d07e bne 0x5d106 | goto label_67;
| }
| label_23:
0x0005d080 ldr r2, [sp, 0x14] | r2 = var_14h;
0x0005d082 adds.w r7, sb, r7 | r7 = sb + r7;
0x0005d086 adc.w sl, r5, sl | __asm ("adc.w sl, r5, sl");
0x0005d08a cmp r7, r2 |
0x0005d08c ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0005d08e sbcs.w r2, sl, r2 | __asm ("sbcs.w r2, sl, r2");
0x0005d092 ite lt |
| if (r7 >= r2) {
0x0005d094 movlt r2, 1 | r2 = 1;
| }
| if (r7 < r2) {
0x0005d096 movge r2, 0 | r2 = 0;
| }
0x0005d098 cmp r3, 0 |
0x0005d09a ite ne |
| if (r3 == 0) {
0x0005d09c movne r2, 0 | r2 = 0;
| }
| if (r3 != 0) {
0x0005d09e andeq r2, r2, 1 | r2 &= 1;
| }
0x0005d0a2 cmp r2, 0 |
0x0005d0a4 bne 0x5d044 |
| } while (r2 != 0);
0x0005d0a6 ldr r5, [sp, 0xc] | r5 = var_ch;
0x0005d0a8 mov fp, r3 |
| label_22:
0x0005d0aa cmp.w fp, 0 |
| if (fp != 0) {
0x0005d0ae bne.w 0x5ce12 | goto label_9;
| }
0x0005d0b2 ldr r3, [r4] | r3 = *(r4);
0x0005d0b4 add r1, sp, 0x30 | r1 += x;
0x0005d0b6 mov r0, r4 | r0 = r4;
0x0005d0b8 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x0005d0ba blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0005d0bc mov fp, r0 |
0x0005d0be cmp r0, 0 |
| if (r0 != 0) {
0x0005d0c0 bne.w 0x5ce12 | goto label_9;
| }
0x0005d0c4 ldrd r2, r3, [sp, 0x30] | __asm ("ldrd r2, r3, [x]");
0x0005d0c8 ldr r1, [sp, 0x24] | r1 = var_24h;
0x0005d0ca ldr r0, [sp, 0x28] | r0 = var_28h;
0x0005d0cc cmp r1, r2 |
0x0005d0ce sbcs.w r3, r0, r3 | __asm ("sbcs.w r3, r0, r3");
| if (r1 >= r2) {
0x0005d0d2 bge 0x5d0e8 | goto label_68;
| }
0x0005d0d4 mov r2, r1 | r2 = r1;
0x0005d0d6 ldr r1, [r4] | r1 = *(r4);
0x0005d0d8 mov r3, r0 | r3 = r0;
0x0005d0da mov r0, r4 | r0 = r4;
0x0005d0dc ldr r1, [r1, 0x10] | r1 = *((r1 + 0x10));
0x0005d0de blx r1 | r0 = uint32_t (*r1)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0005d0e0 mov fp, r0 |
0x0005d0e2 cmp r0, 0 |
| if (r0 != 0) {
0x0005d0e4 bne.w 0x5ce12 | goto label_9;
| }
| label_68:
0x0005d0e8 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0005d0ea movs r1, 0 | r1 = 0;
0x0005d0ec bl 0x15da8 | r0 = fcn_00015da8 (r0, r1);
0x0005d0f0 mov fp, r0 |
0x0005d0f2 b 0x5cf84 | goto label_21;
| label_66:
0x0005d0f4 mov fp, r0 |
0x0005d0f6 ldr r0, [sp, 0x30] | r0 = x;
0x0005d0f8 ldr r5, [sp, 0xc] | r5 = var_ch;
0x0005d0fa cmp r0, 0 |
| if (r0 == 0) {
0x0005d0fc beq.w 0x5ce12 | goto label_9;
| }
0x0005d100 bl 0x129c4 | fcn_000129c4 (r0);
0x0005d104 b 0x5d0aa | goto label_22;
| label_67:
0x0005d106 str r3, [sp, 0x20] | var_20h = r3;
0x0005d108 bl 0x129c4 | fcn_000129c4 (r0);
0x0005d10c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0005d10e b 0x5d080 | goto label_23;
| label_65:
0x0005d110 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005d112 cmp r3, 0 |
| if (r3 != 0) {
0x0005d114 bne.w 0x5ceaa | goto label_24;
| }
| do {
| label_26:
0x0005d118 mov.w fp, 0xa |
0x0005d11c b 0x5cc5c | goto label_7;
| label_64:
0x0005d11e ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005d120 mov r1, fp | r1 = fp;
0x0005d122 ldrb r2, [r0, 8] | r2 = *((r0 + 8));
0x0005d124 cmp r2, 2 |
| if (r2 == 2) {
0x0005d126 beq 0x5d15c | goto label_69;
| }
0x0005d128 bl 0x574ac | fcn_000574ac (r0, r1);
0x0005d12c b 0x5cfa4 | goto label_25;
| label_44:
0x0005d12e blx 0x883c | fcn_0000883c ();
| label_63:
0x0005d132 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0005d134 cmp r3, 0 |
0x0005d136 beq 0x5d118 |
| } while (r3 == 0);
0x0005d138 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005d13a ldrb r2, [r0, 8] | r2 = *((r0 + 8));
0x0005d13c cmp r2, 2 |
| if (r2 != 2) {
0x0005d13e beq 0x5d16a |
| label_61:
0x0005d140 mov r1, fp | r1 = fp;
0x0005d142 bl 0x574ac | fcn_000574ac (r0, r1);
0x0005d146 b 0x5d118 | goto label_26;
| label_35:
0x0005d148 ldr.w sl, [r4, 0x30] | sl = *((r4 + 0x30));
| if (r7 != 0) {
0x0005d14c cbz r7, 0x5d158 |
0x0005d14e mov.w fp, 0 |
0x0005d152 str.w fp, [sp, 0x24] | __asm ("str.w fp, [var_24h]");
0x0005d156 b 0x5cb9c | goto label_27;
| }
0x0005d158 str r7, [sp, 0x24] | var_24h = r7;
0x0005d15a b 0x5cc24 | goto label_28;
| label_69:
0x0005d15c bl 0x5c7cc | fcn_0005c7cc (r0, r1, r2);
0x0005d160 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005d162 mov r1, fp | r1 = fp;
0x0005d164 bl 0x574ac | fcn_000574ac (r0, r1);
0x0005d168 b 0x5cfa4 | goto label_25;
| }
0x0005d16a mov r1, fp | r1 = fp;
0x0005d16c bl 0x5c7cc | fcn_0005c7cc (r0, r1, r2);
0x0005d170 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0005d172 mov r1, fp | r1 = fp;
0x0005d174 bl 0x574ac | fcn_000574ac (r0, r1);
0x0005d178 b 0x5d118 | goto label_26;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x26dd0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.sqlite3_bind_zeroblob () | void sqlite3_bind_zeroblob (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00026dd0 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x00026dd4 mov r7, r0 | r7 = r0;
0x00026dd6 mov r4, r1 | r4 = r1;
0x00026dd8 mov r6, r2 | r6 = r2;
0x00026dda bl 0x26b40 | r0 = fcn_00026b40 (r0, r1);
0x00026dde mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00026de0 cbz r0, 0x26de8 |
0x00026de2 mov r0, r5 | r0 = r5;
0x00026de4 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
0x00026de8 add.w r4, r4, r4, lsl 2 | r4 += (r4 << 2);
0x00026dec ldr.w sb, [r7, 0x64] | sb = *((r7 + 0x64));
0x00026df0 lsls r4, r4, 3 | r4 <<= 3;
0x00026df2 subs r4, 0x28 | r4 -= 0x28;
0x00026df4 add.w r8, sb, r4 | r8 = sb + r4;
0x00026df8 ldrh.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00026dfc tst.w r3, 0x9000 |
| if ((r3 & 0x9000) == 0) {
0x00026e00 bne 0x26e08 |
0x00026e02 ldr.w r3, [r8, 0x18] | r3 = *((r8 + 0x18));
| if (r3 == 0) {
0x00026e06 cbz r3, 0x26e0e | goto label_0;
| }
| }
0x00026e08 mov r0, r8 | r0 = r8;
0x00026e0a bl 0x16c50 | fcn_00016c50 (r0);
| label_0:
0x00026e0e bic.w r6, r6, r6, asr 31 | r6 = BIT_MASK (r6, r6);
0x00026e12 mov.w r2, 0x410 | r2 = 0x410;
0x00026e16 strh.w r2, [r8, 0x10] | *((r8 + 0x10)) = r2;
0x00026e1a movs r3, 0 | r3 = 0;
0x00026e1c movs r2, 1 | r2 = 1;
0x00026e1e str.w r3, [r8, 0xc] | __asm ("str.w r3, [r8, 0xc]");
0x00026e22 str.w r6, [sb, r4] | __asm ("str.w r6, [sb, r4]");
0x00026e26 strb.w r2, [r8, 0x12] | *((r8 + 0x12)) = r2;
0x00026e2a str.w r3, [r8, 8] | __asm ("str.w r3, [r8, 8]");
0x00026e2e ldr r3, [r7] | r3 = *(r7);
0x00026e30 ldr r0, [r3, 0xc] | r0 = *((r3 + 0xc));
0x00026e32 blx 0x87c0 | fcn_000087c0 ();
0x00026e36 mov r0, r5 | r0 = r5;
0x00026e38 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x26e3c */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_bind_zeroblob64 () | void sqlite3_bind_zeroblob64 (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00026e3c mvnsmi lr, sp, lsr 18 | __asm ("mvnsmi lr, sp, lsr 18");
0x00026e40 mov r4, r0 | r4 = r0;
0x00026e42 ldr r0, [r0] | r0 = *(r0);
0x00026e44 mov r7, r3 | r7 = r3;
0x00026e46 mov r6, r2 | r6 = r2;
0x00026e48 mov r8, r1 | r8 = r1;
0x00026e4a ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x00026e4c blx 0x8b50 | fcn_00008b50 ();
0x00026e50 ldr r5, [r4] | r5 = *(r4);
0x00026e52 ldr r2, [r5, 0x78] | r2 = *((r5 + 0x78));
0x00026e54 cmp r2, r6 |
0x00026e56 asr.w r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00026e5a sbcs r3, r7 | __asm ("sbcs r3, r7");
0x00026e5c it lo |
| if (r2 >= r6) {
0x00026e5e movlo r1, 0x12 | r1 = 0x12;
| }
0x00026e60 bhs 0x26e78 |
| while (r0 != 0) {
0x00026e62 mov r0, r5 | r0 = r5;
0x00026e64 bl 0x177a0 | fcn_000177a0 (r0, r1);
0x00026e68 ldr r5, [r4] | r5 = *(r4);
0x00026e6a mov r4, r0 | r4 = r0;
0x00026e6c ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00026e6e blx 0x87c0 | fcn_000087c0 ();
0x00026e72 mov r0, r4 | r0 = r4;
0x00026e74 pop.w {r4, r5, r6, r7, r8, pc} |
0x00026e78 mov r1, r8 | r1 = r8;
0x00026e7a mov r0, r4 | r0 = r4;
0x00026e7c mov r2, r6 | r2 = r6;
0x00026e7e blx 0x8a08 | fcn_00008a08 ();
0x00026e82 ldr r5, [r4] | r5 = *(r4);
0x00026e84 mov r1, r0 | r1 = r0;
0x00026e86 ldrb.w r3, [r5, 0x57] | r3 = *((r5 + 0x57));
0x00026e8a cmp r0, 0 |
0x00026e8c it eq |
| if (r0 == 0) {
0x00026e8e cmpeq r3, 0 | __asm ("cmpeq r3, 0");
| }
0x00026e90 itet eq |
| if (r0 != 0) {
0x00026e92 moveq r3, 0 | r3 = 0;
| }
| if (r0 == 0) {
0x00026e94 movne r3, 1 | r3 = 1;
| }
| if (r0 != 0) {
0x00026e96 moveq r4, r3 | r4 = r3;
| }
0x00026e98 bne 0x26e62 |
| }
0x00026e9a ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x00026e9c blx 0x87c0 | fcn_000087c0 ();
0x00026ea0 mov r0, r4 | r0 = r4;
0x00026ea2 pop.w {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x91c7c */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_blob_open () | void sqlite3_blob_open (int16_t arg_10h, int16_t arg_14h, int16_t arg_18h, int16_t arg_1ch, int16_t arg_180h, int16_t arg_188h, int16_t arg_18ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_154h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00091c7c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00091c80 mov r8, r0 | r8 = r0;
0x00091c82 ldr.w r4, [pc, 0x54c] | r4 = *(0x000921d0);
0x00091c86 sub sp, 0x15c |
0x00091c88 movs r6, 0 | r6 = 0;
0x00091c8a ldr.w r0, [pc, 0x548] |
0x00091c8e add r4, pc | r4 += pc;
0x00091c90 ldr r0, [r4, r0] | r0 = *((r4 + r0));
0x00091c92 ldr r4, [sp, 0x18c] | r4 = *(arg_18ch);
0x00091c94 ldr r0, [r0] | r0 = *(0x921d6);
0x00091c96 str r0, [sp, 0x154] | var_154h = r0;
0x00091c98 mov.w r0, 0 | r0 = 0;
0x00091c9c ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00091ca0 str r3, [sp, 0x28] | var_28h = r3;
0x00091ca2 add r3, sp, 0x3c | r3 += var_3ch;
0x00091ca4 str r6, [r4] | *(r4) = r6;
0x00091ca6 str r1, [sp, 0x24] | var_24h = r1;
0x00091ca8 str r2, [sp, 0x1c] | var_1ch = r2;
0x00091caa str r3, [sp, 0x14] | var_14h = r3;
0x00091cac str r6, [sp, 0x3c] | var_3ch = r6;
0x00091cae blx 0x8b50 | fcn_00008b50 ();
0x00091cb2 mov r0, r8 | r0 = r8;
0x00091cb4 movs r2, 0x20 | r2 = 0x20;
0x00091cb6 movs r3, 0 | r3 = 0;
0x00091cb8 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x00091cbc mov fp, r0 |
0x00091cbe cmp r0, 0 |
| if (r0 == 0) {
0x00091cc0 beq.w 0x9209a | goto label_22;
| }
0x00091cc4 mov r1, r6 | r1 = r6;
0x00091cc6 movs r2, 0x20 | r2 = 0x20;
0x00091cc8 blx 0x839c | fcn_0000839c ();
0x00091ccc ldr.w sl, [pc, 0x508] |
0x00091cd0 mov r5, r6 | r5 = r6;
0x00091cd2 ldr r3, [sp, 0x188] | r3 = *(arg_188h);
0x00091cd4 add r0, sp, 0x40 | r0 += var_40h;
0x00091cd6 ldr.w sb, [pc, 0x504] |
0x00091cda mov r1, r8 | r1 = r8;
0x00091cdc add sl, pc | sl = 0x123eb8;
0x00091cde str r0, [sp, 0xc] | var_ch = r0;
0x00091ce0 subs r3, r3, r6 | r3 -= r6;
0x00091ce2 str r6, [sp, 0x10] | var_10h = r6;
0x00091ce4 add sb, pc | sb = 0x123ec6;
0x00091ce6 it ne |
| if (r3 == r3) {
0x00091ce8 movne r3, 1 | r3 = 1;
| }
0x00091cea str r3, [sp, 0x30] | var_30h = r3;
0x00091cec str r6, [sp, 0x18] | var_18h = r6;
0x00091cee bl 0x240fc | fcn_000240fc (r0, r1);
0x00091cf2 str r4, [sp, 0x34] | var_34h = r4;
| if (r5 != 0) {
| label_3:
0x00091cf4 cbz r5, 0x91cfe |
0x00091cf6 mov r1, r5 | r1 = r5;
0x00091cf8 mov r0, r8 | r0 = r8;
0x00091cfa bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x00091cfe ldrb.w r3, [r8, 0x5f] | r3 = *((r8 + 0x5f));
0x00091d02 movs r2, 0 | r2 = 0;
0x00091d04 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00091d06 str r2, [r1] | *(r1) = r2;
0x00091d08 cmp r3, 0 |
| if (r3 == 0) {
0x00091d0a beq.w 0x91f84 | goto label_23;
| }
| label_6:
0x00091d0e ldr r3, [sp, 0x24] | r3 = var_24h;
0x00091d10 movs r1, 0 | r1 = 0;
0x00091d12 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00091d14 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00091d16 bl 0x8a750 | fcn_0008a750 (r0, r1, r2, r3, r4, r5);
0x00091d1a str r0, [sp, 8] | var_8h = r0;
0x00091d1c cmp r0, 0 |
| if (r0 == 0) {
0x00091d1e beq.w 0x9210e | goto label_18;
| }
0x00091d22 ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
0x00091d26 cmp r3, 1 |
| if (r3 == 1) {
0x00091d28 beq.w 0x92102 | goto label_24;
| }
0x00091d2c ldr r2, [sp, 8] | r2 = var_8h;
0x00091d2e ldr r0, [r2, 0x1c] | r0 = *((r2 + 0x1c));
0x00091d30 ands r0, r0, 0x80 | r0 &= 0x80;
| if (r0 != r0) {
0x00091d34 bne.w 0x9217e | goto label_25;
| }
0x00091d38 cmp r3, 2 |
| if (r3 == 2) {
0x00091d3a beq.w 0x9218c | goto label_26;
| }
0x00091d3e ldr r3, [sp, 8] | r3 = var_8h;
0x00091d40 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x00091d44 ldr r4, [r3, 0x3c] | r4 = *((r3 + 0x3c));
0x00091d46 str.w r3, [fp, 0x1c] | __asm ("str.w r3, [arg_1ch]");
0x00091d4a cmp r4, 0 |
| if (r4 == 0) {
0x00091d4c beq.w 0x9219a | goto label_27;
| }
0x00091d50 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x00091d52 cmp r4, r3 |
| if (r4 == r3) {
0x00091d54 beq 0x91d66 | goto label_19;
| }
0x00091d56 add.w r3, r2, 0x10 | r3 = r2 + 0x10;
| do {
0x00091d5a mov r2, r3 | r2 = r3;
0x00091d5c adds r3, 0x10 | r3 += 0x10;
0x00091d5e ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x00091d62 cmp r4, r1 |
0x00091d64 bne 0x91d5a |
| } while (r4 != r1);
| label_19:
0x00091d66 ldr r3, [r2] | r3 = *(r2);
0x00091d68 str.w r3, [fp, 0x18] | __asm ("str.w r3, [arg_18h]");
0x00091d6c ldr r3, [sp, 8] | r3 = var_8h;
0x00091d6e ldrsh.w r5, [r3, 0x22] | r5 = *((r3 + 0x22));
0x00091d72 cmp r5, 0 |
| if (r5 <= 0) {
0x00091d74 ble.w 0x9214e | goto label_28;
| }
0x00091d78 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00091d7a movs r4, 0 | r4 = 0;
0x00091d7c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00091d7e subs r6, r2, 1 | r6 = r2 - 1;
| label_0:
0x00091d80 ldr.w r2, [r3, r0, lsl 2] | offset_0 = r0 << 2;
| r2 = *((r3 + offset_0));
0x00091d84 mov r7, r6 | r7 = r6;
0x00091d86 add.w ip, r2, -1 |
| do {
| label_1:
0x00091d8a ldrb r2, [ip, 1]! | r2 = *((ip += 1));
0x00091d8e ldrb r1, [r7, 1]! | r1 = *((r7 += 1));
0x00091d92 cmp r2, r1 |
| if (r2 == r1) {
0x00091d94 beq 0x91dd2 | goto label_29;
| }
0x00091d96 add r2, sl | r2 += sl;
0x00091d98 add r1, sl | r1 += sl;
0x00091d9a ldrb.w lr, [r2, 0x140] |
0x00091d9e ldrb.w r2, [r1, 0x140] | r2 = *((r1 + 0x140));
0x00091da2 cmp lr, r2 |
0x00091da4 beq 0x91d8a |
| } while (lr == r2);
0x00091da6 adds r4, 1 | r4++;
0x00091da8 adds r0, 3 | r0 += 3;
0x00091daa cmp r4, r5 |
| if (r4 != r5) {
0x00091dac bne 0x91d80 | goto label_0;
| }
| label_2:
0x00091dae ldr.w r1, [pc, 0x430] | r1 = *(0x000921e0);
0x00091db2 mov r0, r8 | r0 = r8;
0x00091db4 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00091db6 add r1, pc | r1 += pc;
0x00091db8 bl 0x24ec8 | fcn_00024ec8 (r0);
0x00091dbc ldr r3, [sp, 0x14] | r3 = var_14h;
0x00091dbe mov r5, r0 | r5 = r0;
0x00091dc0 str r0, [r3] | *(r3) = r0;
0x00091dc2 ldrb.w r3, [r8, 0x5f] | r3 = *((r8 + 0x5f));
0x00091dc6 cmp r3, 0 |
| if (r3 == 0) {
0x00091dc8 beq.w 0x921a0 | goto label_30;
| }
0x00091dcc movs r4, 1 | r4 = 1;
0x00091dce str r4, [sp, 0x10] | var_10h = r4;
0x00091dd0 b 0x9212a | goto label_16;
| label_29:
0x00091dd2 cmp r2, 0 |
| if (r2 != 0) {
0x00091dd4 bne 0x91d8a | goto label_1;
| }
| label_14:
0x00091dd6 cmp r5, r4 |
| if (r5 == r4) {
0x00091dd8 beq 0x91dae | goto label_2;
| }
0x00091dda ldr r3, [sp, 0x188] | r3 = *(arg_188h);
0x00091ddc cmp r3, 0 |
| if (r3 != 0) {
0x00091dde bne.w 0x91f20 | goto label_31;
| }
| label_4:
0x00091de2 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00091de4 bl 0x2dcb8 | r0 = fcn_0002dcb8 (r0);
0x00091de8 mov r6, r0 | r6 = r0;
0x00091dea str.w r0, [fp, 0x10] | __asm ("str.w r0, [arg_10h]");
0x00091dee cmp r0, 0 |
| if (r0 == 0) {
0x00091df0 beq 0x91ec2 | goto label_8;
| }
0x00091df2 ldr r3, [sp, 8] | r3 = var_8h;
0x00091df4 ldr r1, [r3, 0x3c] | r1 = *((r3 + 0x3c));
0x00091df6 cmp r1, 0 |
| if (r1 == 0) {
0x00091df8 beq.w 0x921b0 | goto label_32;
| }
0x00091dfc ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00091e00 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00091e02 cmp r1, r2 |
| if (r1 == r2) {
0x00091e04 beq.w 0x92146 | goto label_33;
| }
0x00091e08 movs r5, 0 | r5 = 0;
| do {
0x00091e0a ldr r2, [r3, 0x1c] | r2 = *((r3 + 0x1c));
0x00091e0c adds r3, 0x10 | r3 += 0x10;
0x00091e0e adds r5, 1 | r5++;
0x00091e10 cmp r1, r2 |
0x00091e12 bne 0x91e0a |
| } while (r1 != r2);
| label_21:
0x00091e14 movs r3, 1 | r3 = 1;
0x00091e16 lsls r3, r5 | r3 <<= r5;
0x00091e18 str r3, [sp, 0x20] | var_20h = r3;
| label_13:
0x00091e1a ldrd r3, r2, [r6, 0x6c] | __asm ("ldrd r3, r2, [r6, 0x6c]");
0x00091e1e ldrd lr, r1, [r1] | __asm ("ldrd lr, r1, [r1]");
0x00091e22 cmp r3, r2 |
0x00091e24 str r1, [sp, 0x2c] | var_2ch = r1;
| if (r3 >= r2) {
0x00091e26 bge.w 0x92038 | goto label_34;
| }
0x00091e2a ldr.w ip, [r6, 0x68] | ip = *((r6 + 0x68));
0x00091e2e add.w r1, r3, r3, lsl 2 | r1 = r3 + (r3 << 2);
0x00091e32 movs r7, 0 | r7 = 0;
0x00091e34 adds r2, r3, 1 | r2 = r3 + 1;
0x00091e36 str r2, [r6, 0x6c] | *((r6 + 0x6c)) = r2;
0x00091e38 add.w r0, ip, r1, lsl 2 | r0 = ip + (r1 << 2);
0x00091e3c str r7, [r0, 0x10] | *((r0 + 0x10)) = r7;
0x00091e3e ldr r7, [sp, 0x30] | r7 = var_30h;
0x00091e40 str.w lr, [r0, 0xc] | __asm ("str.w lr, [r0, 0xc]");
0x00091e44 str r5, [r0, 4] | *((r0 + 4)) = r5;
0x00091e46 str r7, [r0, 8] | *((r0 + 8)) = r7;
0x00091e48 movs r0, 2 | r0 = 2;
0x00091e4a str.w r0, [ip, r1, lsl 2] | __asm ("str.w r0, [ip, r1, lsl 2]");
| label_9:
0x00091e4e ldr r1, [r6] | r1 = *(r6);
0x00091e50 ldrb.w r1, [r1, 0x57] | r1 = *((r1 + 0x57));
| if (r1 == 0) {
0x00091e54 cbnz r1, 0x91e68 |
0x00091e56 ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x00091e58 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x00091e5c add.w r3, r1, r3, lsl 2 | r3 = r1 + (r3 << 2);
0x00091e60 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00091e62 str r1, [r3, 0x10] | *((r3 + 0x10)) = r1;
0x00091e64 movs r1, 0xfd | r1 = 0xfd;
0x00091e66 strb r1, [r3, 1] | *((r3 + 1)) = r1;
| }
0x00091e68 cmp r2, 0 |
| if (r2 > 0) {
0x00091e6a ble 0x91e7c |
0x00091e6c ldr r3, [r6, 0x68] | r3 = *((r6 + 0x68));
0x00091e6e add.w r2, r2, r2, lsl 2 | r2 += (r2 << 2);
0x00091e72 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00091e76 movs r2, 1 | r2 = 1;
0x00091e78 strh r2, [r3, -0x12] | *((r3 - 0x12)) = r2;
| }
0x00091e7c ldr r2, [pc, 0x364] |
0x00091e7e movs r1, 6 | r1 = 6;
0x00091e80 mov r0, r6 | r0 = r6;
0x00091e82 add r2, pc | r2 = 0x12406a;
0x00091e84 addw r2, r2, 0xc58 | __asm ("addw r2, r2, aav.0x000000ff");
0x00091e88 bl 0x2db78 | fcn_0002db78 (r0, r1, r2);
0x00091e8c ldr.w r3, [r6, 0x98] | r3 = *((r6 + 0x98));
0x00091e90 cmp r5, 1 |
0x00091e92 ldr r2, [sp, 0x20] | r2 = var_20h;
0x00091e94 mov r7, r0 | r7 = r0;
0x00091e96 orr.w r3, r3, r2 | r3 |= r2;
0x00091e9a str.w r3, [r6, 0x98] | __asm ("str.w r3, [r6, 0x98]");
| if (r5 != 1) {
0x00091e9e beq 0x91eb8 |
0x00091ea0 ldr r3, [r6] | r3 = *(r6);
0x00091ea2 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00091ea4 add.w r3, r3, r5, lsl 4 | r3 += (r5 << 4);
0x00091ea8 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00091eaa ldrb r3, [r3, 9] | r3 = *((r3 + 9));
| if (r3 == 0) {
0x00091eac cbz r3, 0x91eb8 | goto label_35;
| }
0x00091eae ldr.w r3, [r6, 0x9c] | r3 = *((r6 + 0x9c));
0x00091eb2 orrs r3, r2 | r3 |= r2;
0x00091eb4 str.w r3, [r6, 0x9c] | __asm ("str.w r3, [r6, 0x9c]");
| }
| label_35:
0x00091eb8 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x00091ebc cmp r3, 0 |
| if (r3 == 0) {
0x00091ebe beq.w 0x91fd4 | goto label_36;
| }
| label_8:
0x00091ec2 strh.w r4, [fp, 8] | *(arg_188h) = r4;
0x00091ec6 str.w r8, [fp, 0x14] | __asm ("str.w r8, [arg_14h]");
0x00091eca ldrb.w r3, [r8, 0x5f] | r3 = *((r8 + 0x5f));
0x00091ece cmp r3, 0 |
| if (r3 == 0) {
0x00091ed0 beq 0x91f8c | goto label_37;
| }
0x00091ed2 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x00091ed6 cmp r3, 0 |
| if (r3 != 0) {
0x00091ed8 bne 0x91f9a | goto label_38;
| }
| label_7:
0x00091eda ldr r3, [sp, 0x14] | r3 = var_14h;
0x00091edc mov r0, fp | r0 = fp;
0x00091ede ldr r4, [sp, 0x18] | r4 = var_18h;
0x00091ee0 str r3, [sp] | *(sp) = r3;
0x00091ee2 adds r4, 1 | r4++;
0x00091ee4 ldrd r2, r3, [sp, 0x180] | __asm ("ldrd r2, r3, [arg_180h]");
0x00091ee8 str r4, [sp, 0x18] | var_18h = r4;
0x00091eea bl 0x89cb0 | r0 = fcn_00089cb0 (r0, r1, r2, r3);
0x00091eee subs.w r3, r0, 0x11 | r3 = r0 - 0x11;
0x00091ef2 str r0, [sp, 0x10] | var_10h = r0;
0x00091ef4 it ne |
| if (r3 == r0) {
0x00091ef6 movne r3, 1 | r3 = 1;
| }
0x00091ef8 cmp r4, 0x32 |
0x00091efa it eq |
| if (r4 != 0x32) {
0x00091efc orreq r3, r3, 1 | r3 |= 1;
| }
0x00091f00 cmp r3, 0 |
| if (r3 != 0) {
0x00091f02 bne.w 0x9215a | goto label_39;
| }
0x00091f06 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00091f08 mov r0, r4 | r0 = r4;
0x00091f0a bl 0x1a6fc | fcn_0001a6fc (r0);
0x00091f0e ldr r3, [sp, 0x14] | r3 = var_14h;
0x00091f10 mov r1, r8 | r1 = r8;
0x00091f12 mov r0, r4 | r0 = r4;
0x00091f14 ldr r5, [r3] | r5 = *(r3);
0x00091f16 bl 0x240fc | fcn_000240fc (r0, r1);
0x00091f1a movs r3, 0x11 | r3 = 0x11;
0x00091f1c str r3, [sp, 0x10] | var_10h = r3;
0x00091f1e b 0x91cf4 | goto label_3;
| label_31:
0x00091f20 ldr.w r2, [r8, 0x20] | r2 = *((r8 + 0x20));
0x00091f24 ldr r3, [sp, 8] | r3 = var_8h;
0x00091f26 and r2, r2, 0x4000 | r2 &= 0x4000;
0x00091f2a ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00091f2c cmp r2, 0 |
| if (r2 != 0) {
0x00091f2e bne.w 0x9204e | goto label_40;
| }
0x00091f32 cmp r1, 0 |
| if (r1 == 0) {
0x00091f34 beq.w 0x91de2 | goto label_4;
| }
| label_5:
0x00091f38 ldrh r5, [r1, 0x32] | r5 = *((r1 + 0x32));
| if (r5 == 0) {
0x00091f3a cbz r5, 0x91f56 | goto label_41;
| }
0x00091f3c ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00091f3e add.w r5, r3, r5, lsl 1 | r5 = r3 + (r5 << 1);
| do {
0x00091f42 ldrsh r0, [r3], 2 | r0 = *(r3);
| r3 += 2;
0x00091f46 cmn.w r0, 2 |
0x00091f4a it ne |
| if (r0 != 2) {
0x00091f4c cmpne r0, r4 | __asm ("cmpne r0, r4");
| }
0x00091f4e it eq |
| if (r0 != 2) {
0x00091f50 moveq r2, sb | r2 = sb;
| }
0x00091f52 cmp r3, r5 |
0x00091f54 bne 0x91f42 |
| } while (r3 != r5);
| label_41:
0x00091f56 ldr r1, [r1, 0x14] | r1 = *((r1 + 0x14));
0x00091f58 cmp r1, 0 |
| if (r1 != 0) {
0x00091f5a bne 0x91f38 | goto label_5;
| }
0x00091f5c cmp r2, 0 |
| if (r2 == 0) {
0x00091f5e beq.w 0x91de2 | goto label_4;
| }
| label_11:
0x00091f62 ldr r1, [pc, 0x284] |
0x00091f64 mov r0, r8 | r0 = r8;
0x00091f66 add r1, pc | r1 = 0x124154;
0x00091f68 bl 0x24ec8 | fcn_00024ec8 (r0);
0x00091f6c ldr r3, [sp, 0x14] | r3 = var_14h;
0x00091f6e mov r5, r0 | r5 = r0;
0x00091f70 str r0, [r3] | *(r3) = r0;
0x00091f72 ldrb.w r3, [r8, 0x5f] | r3 = *((r8 + 0x5f));
0x00091f76 cmp r3, 0 |
| if (r3 == 0) {
0x00091f78 beq.w 0x921c2 | goto label_42;
| }
0x00091f7c movs r3, 1 | r3 = 1;
0x00091f7e mov r4, r3 | r4 = r3;
0x00091f80 str r3, [sp, 0x10] | var_10h = r3;
0x00091f82 b 0x9212a | goto label_16;
| label_23:
0x00091f84 mov r0, r8 | r0 = r8;
0x00091f86 bl 0x17560 | fcn_00017560 (r0);
0x00091f8a b 0x91d0e | goto label_6;
| label_37:
0x00091f8c mov r0, r8 | r0 = r8;
0x00091f8e bl 0x161d8 | fcn_000161d8 (r0);
0x00091f92 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x00091f96 cmp r3, 0 |
| if (r3 == 0) {
0x00091f98 beq 0x91eda | goto label_7;
| }
| label_38:
0x00091f9a ldr r3, [sp, 0x10] | r3 = var_10h;
0x00091f9c movs r5, 0 | r5 = 0;
0x00091f9e ldr r4, [sp, 0x34] | r4 = var_34h;
0x00091fa0 cmp r3, 0 |
| if (r3 != 0) {
0x00091fa2 bne.w 0x92168 | goto label_43;
| }
| label_15:
0x00091fa6 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x00091faa cmp r3, 0 |
| if (r3 != 0) {
0x00091fac bne.w 0x921be | goto label_44;
| }
| label_20:
0x00091fb0 str.w fp, [r4] | __asm ("str.w fp, [r4]");
0x00091fb4 movs r4, 0 | r4 = 0;
0x00091fb6 str r4, [sp, 0x10] | var_10h = r4;
| label_12:
0x00091fb8 cmp r5, 0 |
| if (r5 == 0) {
0x00091fba beq 0x920b4 | goto label_45;
| }
0x00091fbc ldr r2, [pc, 0x22c] |
0x00091fbe mov r0, r8 | r0 = r8;
0x00091fc0 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00091fc2 mov r3, r5 | r3 = r5;
0x00091fc4 add r2, pc | r2 = 0x1241b4;
0x00091fc6 bl 0x2b81c | fcn_0002b81c (r0, r1);
0x00091fca mov r1, r5 | r1 = r5;
0x00091fcc mov r0, r8 | r0 = r8;
0x00091fce bl 0x16808 | fcn_00016808 (r0, r1);
0x00091fd2 b 0x920c0 | goto label_46;
| label_36:
0x00091fd4 ldr r2, [sp, 8] | r2 = var_8h;
0x00091fd6 ldr r3, [sp, 0x30] | r3 = var_30h;
0x00091fd8 str r5, [r7, 4] | *((r7 + 4)) = r5;
0x00091fda ldr r1, [r2, 0x14] | r1 = *((r2 + 0x14));
0x00091fdc ldr r2, [r2] | r2 = *(r2);
0x00091fde strd r1, r3, [r7, 8] | __asm ("strd r1, r3, [r7, 8]");
0x00091fe2 ldr r3, [r6] | r3 = *(r6);
0x00091fe4 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
| if (r3 != 0) {
0x00091fe8 cbnz r3, 0x92002 | goto label_47;
| }
0x00091fea ldr r1, [r6, 0x68] | r1 = *((r6 + 0x68));
0x00091fec mov r0, r6 | r0 = r6;
0x00091fee adds r1, 0x28 | r1 += 0x28;
0x00091ff0 bl 0x22c24 | fcn_00022c24 (r0, r1, r2, r3);
0x00091ff4 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x00091ff8 cmp r3, 0 |
| if (r3 != 0) {
0x00091ffa bne.w 0x91ec2 | goto label_8;
| }
0x00091ffe ldr r2, [sp, 8] | r2 = var_8h;
0x00092000 ldr r1, [r2, 0x14] | r1 = *((r2 + 0x14));
| label_47:
0x00092002 ldr r3, [sp, 0x188] | r3 = *(arg_188h);
| if (r3 != 0) {
0x00092004 cbz r3, 0x9200a |
0x00092006 movs r3, 0x71 | r3 = 0x71;
0x00092008 strb r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
| }
0x0009200a movs r3, 0xfd | r3 = 0xfd;
0x0009200c ldr r2, [sp, 0xc] | r2 = var_ch;
0x0009200e strb r3, [r7, 0x15] | *((r7 + 0x15)) = r3;
0x00092010 mov r0, r6 | r0 = r6;
0x00092012 ldr r3, [sp, 8] | r3 = var_8h;
0x00092014 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00092018 strd r1, r5, [r7, 0x1c] | __asm ("strd r1, r5, [r7, 0x1c]");
0x0009201c mov r1, r2 | r1 = r2;
0x0009201e ldrsh.w r3, [r3, 0x22] | r3 = *((r3 + 0x22));
0x00092020 adds r0, 0x22 | r0 += 0x22;
0x00092022 str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x00092024 adds r3, 1 | r3++;
0x00092026 str r3, [r7, 0x24] | *((r7 + 0x24)) = r3;
0x00092028 movs r3, 0 | r3 = 0;
0x0009202a vstr d16, [sp, 0x68] | __asm ("vstr d16, [sp, 0x68]");
0x0009202e strh.w r3, [r2, 0xcc] | *((r2 + 0xcc)) = r3;
0x00092032 bl 0x2c560 | fcn_0002c560 (r0, r1, r2, r3);
0x00092036 b 0x91ec2 | goto label_8;
| label_34:
0x00092038 ldr r3, [sp, 0x30] | r3 = var_30h;
0x0009203a mov r2, r5 | r2 = r5;
0x0009203c movs r1, 2 | r1 = 2;
0x0009203e mov r0, r6 | r0 = r6;
0x00092040 str.w lr, [sp] | __asm ("str.w lr, [sp]");
0x00092044 bl 0x2dc28 | fcn_0002dc28 (r0, r1, r2, r3);
0x00092048 ldr r2, [r6, 0x6c] | r2 = *((r6 + 0x6c));
0x0009204a mov r3, r0 | r3 = r0;
0x0009204c b 0x91e4e | goto label_9;
| label_40:
0x0009204e ldr.w ip, [r3, 0x30] | ip = *((r3 + 0x30));
0x00092052 cmp.w ip, 0 |
| if (ip == 0) {
0x00092056 beq.w 0x92174 | goto label_48;
| }
0x0009205a ldr r6, [pc, 0x194] |
0x0009205c mov r3, r1 | r3 = r1;
0x0009205e movs r2, 0 | r2 = 0;
0x00092060 mov r1, ip | r1 = ip;
0x00092062 mov ip, r3 |
0x00092064 add r6, pc | r6 = 0x12425a;
| label_10:
0x00092066 ldr r5, [r1, 0x14] | r5 = *((r1 + 0x14));
0x00092068 cmp r5, 0 |
0x0009206a itt gt |
| if (r5 <= 0) {
0x0009206c movgt r3, 0 | r3 = 0;
| }
| if (r5 <= 0) {
0x0009206e addgt r7, r1, 0x24 | r7 = r1 + 0x24;
| }
| if (r5 <= 0) {
0x00092072 ble 0x92084 | goto label_49;
| }
| do {
0x00092074 ldr.w r0, [r7, r3, lsl 3] | offset_1 = r3 << 3;
| r0 = *((r7 + offset_1));
0x00092078 adds r3, 1 | r3++;
0x0009207a cmp r0, r4 |
0x0009207c it eq |
| if (r0 != r4) {
0x0009207e moveq r2, r6 | r2 = r6;
| }
0x00092080 cmp r5, r3 |
0x00092082 bne 0x92074 |
| } while (r5 != r3);
| label_49:
0x00092084 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00092086 cmp r1, 0 |
| if (r1 != 0) {
0x00092088 bne 0x92066 | goto label_10;
| }
0x0009208a mov r1, ip | r1 = ip;
0x0009208c cmp r1, 0 |
| if (r1 != 0) {
0x0009208e bne.w 0x91f38 | goto label_5;
| }
0x00092092 cmp r2, 0 |
| if (r2 == 0) {
0x00092094 beq.w 0x91de2 | goto label_4;
| }
0x00092098 b 0x91f62 | goto label_11;
| label_22:
0x0009209a add r3, sp, 0x40 | r3 += var_40h;
0x0009209c mov r1, r8 | r1 = r8;
0x0009209e mov r0, r3 | r0 = r3;
0x000920a0 str r3, [sp, 0xc] | var_ch = r3;
0x000920a2 bl 0x240fc | fcn_000240fc (r0, r1);
0x000920a6 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x000920aa cmp r3, 0 |
| if (r3 == 0) {
0x000920ac beq 0x921ac | goto label_50;
| }
0x000920ae mov r4, fp | r4 = fp;
0x000920b0 str.w fp, [sp, 0x10] | __asm ("str.w fp, [var_10h]");
| label_45:
0x000920b4 movs r3, 0 | r3 = 0;
0x000920b6 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000920b8 mov r2, r3 | r2 = r3;
0x000920ba mov r0, r8 | r0 = r8;
0x000920bc bl 0x2b81c | fcn_0002b81c (r0, r1);
| label_46:
0x000920c0 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000920c2 bl 0x1a6fc | fcn_0001a6fc (r0);
0x000920c6 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x000920ca cmp r3, 0 |
0x000920cc it ne |
| if (r3 == 0) {
0x000920ce orrne r4, r4, 1 | r4 |= 1;
| }
| if (r4 != 0) {
0x000920d2 cbz r4, 0x920de |
0x000920d4 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000920d6 mov r0, r8 | r0 = r8;
0x000920d8 bl 0x177a0 | r0 = fcn_000177a0 (r0, r1);
0x000920dc mov r4, r0 | r4 = r0;
| }
0x000920de ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x000920e2 blx 0x87c0 | fcn_000087c0 ();
0x000920e6 ldr r2, [pc, 0x10c] |
0x000920e8 ldr r3, [pc, 0xe8] | r3 = *(0x921d4);
0x000920ea add r2, pc | r2 = 0x1242e4;
0x000920ec ldr r3, [r2, r3] | r3 = imp.sinh;
0x000920ee ldr r2, [r3] | r2 = imp.sinh;
0x000920f0 ldr r3, [sp, 0x154] | r3 = var_154h;
0x000920f2 eors r2, r3 | r2 ^= r3;
0x000920f4 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000920f8 bne 0x921ba | goto label_51;
| }
0x000920fa mov r0, r4 | r0 = r4;
0x000920fc add sp, 0x15c |
0x000920fe pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x00092102 ldr r1, [pc, 0xf4] |
0x00092104 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00092106 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00092108 add r1, pc | r1 = 0x124306;
0x0009210a bl 0x21598 | fcn_00021598 (r0, r1);
| label_18:
0x0009210e ldr r2, [sp, 0xc] | r2 = var_ch;
0x00092110 ldr r3, [r2, 4] | r3 = *((r2 + 4));
| if (r3 != 0) {
0x00092112 cbz r3, 0x9211c |
0x00092114 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00092116 str r3, [r1] | *(r1) = r3;
0x00092118 movs r3, 0 | r3 = 0;
0x0009211a str r3, [r2, 4] | *((r2 + 4)) = r3;
| }
0x0009211c ldrb.w r3, [r8, 0x5f] | r3 = *((r8 + 0x5f));
0x00092120 cbz r3, 0x92152 |
| while (1) {
0x00092122 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00092124 movs r4, 1 | r4 = 1;
0x00092126 str r4, [sp, 0x10] | var_10h = r4;
0x00092128 ldr r5, [r3] | r5 = *(r3);
| label_16:
0x0009212a ldr.w r6, [fp, 0x10] | r6 = *(arg_10h);
| if (r6 != 0) {
0x0009212e cbz r6, 0x9213c |
0x00092130 ldrb.w r3, [r6, 0x95] | r3 = *((r6 + 0x95));
| if (r3 != 0) {
0x00092134 cbnz r3, 0x9216c | goto label_52;
| }
| label_17:
0x00092136 mov r0, r6 | r0 = r6;
0x00092138 bl 0x1c934 | fcn_0001c934 (r0);
| }
0x0009213c mov r1, fp | r1 = fp;
0x0009213e mov r0, r8 | r0 = r8;
0x00092140 bl 0x16808 | fcn_00016808 (r0, r1);
0x00092144 b 0x91fb8 | goto label_12;
| label_33:
0x00092146 movs r3, 1 | r3 = 1;
0x00092148 movs r5, 0 | r5 = 0;
0x0009214a str r3, [sp, 0x20] | var_20h = r3;
0x0009214c b 0x91e1a | goto label_13;
| label_28:
0x0009214e movs r4, 0 | r4 = 0;
0x00092150 b 0x91dd6 | goto label_14;
0x00092152 mov r0, r8 | r0 = r8;
0x00092154 bl 0x161d8 | fcn_000161d8 (r0);
0x00092158 b 0x92122 |
| }
| label_39:
0x0009215a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0009215c ldr r4, [sp, 0x34] | r4 = var_34h;
0x0009215e ldr r5, [r3] | r5 = *(r3);
0x00092160 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00092162 cmp r3, 0 |
| if (r3 == 0) {
0x00092164 beq.w 0x91fa6 | goto label_15;
| }
| label_43:
0x00092168 movs r4, 1 | r4 = 1;
0x0009216a b 0x9212a | goto label_16;
| label_52:
0x0009216c mov r0, r6 | r0 = r6;
0x0009216e bl 0x5e214 | fcn_0005e214 (r0);
0x00092172 b 0x92136 | goto label_17;
| label_48:
0x00092174 mov r2, ip | r2 = ip;
0x00092176 cmp r1, 0 |
| if (r1 != 0) {
0x00092178 bne.w 0x91f38 | goto label_5;
| }
0x0009217c b 0x91de2 | goto label_4;
| label_25:
0x0009217e ldr r1, [pc, 0x7c] |
0x00092180 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00092182 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00092184 add r1, pc | r1 = 0x124386;
0x00092186 bl 0x21598 | fcn_00021598 (r0, r1);
0x0009218a b 0x9210e | goto label_18;
| label_26:
0x0009218c ldr r1, [pc, 0x70] |
0x0009218e ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x00092190 ldr r0, [sp, 0xc] | r0 = var_ch;
0x00092192 add r1, pc | r1 = 0x124396;
0x00092194 bl 0x21598 | fcn_00021598 (r0, r1);
0x00092198 b 0x9210e | goto label_18;
| label_27:
0x0009219a sub.w r2, r2, 0x80000 | r2 -= 0x80000;
0x0009219e b 0x91d66 | goto label_19;
| label_30:
0x000921a0 mov r0, r8 | r0 = r8;
0x000921a2 movs r4, 1 | r4 = 1;
0x000921a4 bl 0x161d8 | fcn_000161d8 (r0);
0x000921a8 str r4, [sp, 0x10] | var_10h = r4;
0x000921aa b 0x9212a | goto label_16;
| label_50:
0x000921ac mov r5, fp | r5 = fp;
0x000921ae b 0x91fb0 | goto label_20;
| label_32:
0x000921b0 mov.w r5, 0x8000 |
0x000921b4 movt r5, 0xffff | r5 = 0x-8000;
0x000921b8 b 0x91e14 | goto label_21;
| label_51:
0x000921ba blx 0x883c | fcn_0000883c ();
| label_44:
0x000921be ldr r4, [sp, 0x10] | r4 = var_10h;
0x000921c0 b 0x9212a | goto label_16;
| label_42:
0x000921c2 mov r0, r8 | r0 = r8;
0x000921c4 bl 0x161d8 | fcn_000161d8 (r0);
0x000921c8 movs r3, 1 | r3 = 1;
0x000921ca mov r4, r3 | r4 = r3;
0x000921cc str r3, [sp, 0x10] | var_10h = r3;
0x000921ce b 0x9212a | goto label_16;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x16c94 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.sqlite3_clear_bindings () | void sqlite3_clear_bindings (int16_t arg1) {
| r0 = arg1;
0x00016c94 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x00016c98 mov r8, r0 | r8 = r0;
0x00016c9a ldr r3, [r0] | r3 = *(r0);
0x00016c9c ldr r7, [r3, 0xc] | r7 = *((r3 + 0xc));
0x00016c9e mov r0, r7 | r0 = r7;
0x00016ca0 blx 0x8b50 | fcn_00008b50 ();
0x00016ca4 ldrsh.w ip, [r8, 0x10] | ip = *((r8 + 0x10));
0x00016ca8 cmp.w ip, 0 |
| if (ip <= 0) {
0x00016cac ble 0x16cea | goto label_0;
| }
0x00016cae ldr.w r2, [r8, 0x64] | r2 = *((r8 + 0x64));
0x00016cb2 mov.w sb, 0x9000 | sb = 0x9000;
0x00016cb6 movs r4, 0 | r4 = 0;
0x00016cb8 movt sb, 0xffff | sb = (sb & 0xFFFF) | 0xffff0000;
0x00016cbc movs r6, 1 | r6 = 1;
| do {
0x00016cbe add.w r5, r4, r4, lsl 2 | r5 = r4 + (r4 << 2);
0x00016cc2 adds r4, 1 | r4++;
0x00016cc4 lsls r5, r5, 3 | r5 <<= 3;
0x00016cc6 adds r3, r2, r5 | r3 = r2 + r5;
0x00016cc8 ldrh r1, [r3, 0x10] | r1 = *((r3 + 0x10));
0x00016cca mov r0, r3 | r0 = r3;
0x00016ccc tst.w sb, r1 |
| if ((sb & r1) == 0) {
0x00016cd0 bne 0x16cd6 |
0x00016cd2 ldr r1, [r3, 0x18] | r1 = *((r3 + 0x18));
| if (r1 == 0) {
0x00016cd4 cbz r1, 0x16ce4 | goto label_1;
| }
| }
0x00016cd6 bl 0x16c50 | fcn_00016c50 (r0);
0x00016cda ldr.w r2, [r8, 0x64] | r2 = *((r8 + 0x64));
0x00016cde ldrsh.w ip, [r8, 0x10] | ip = *((r8 + 0x10));
0x00016ce2 adds r3, r2, r5 | r3 = r2 + r5;
| label_1:
0x00016ce4 cmp ip, r4 |
0x00016ce6 strh r6, [r3, 0x10] | *((r3 + 0x10)) = r6;
0x00016ce8 bgt 0x16cbe |
| } while (ip > r4);
| label_0:
0x00016cea ldr.w r3, [r8, 0xd8] | r3 = *((r8 + 0xd8));
| if (r3 != 0) {
0x00016cee cbz r3, 0x16cfe |
0x00016cf0 ldrb.w r3, [r8, 0x96] | r3 = *((r8 + 0x96));
0x00016cf4 movs r2, 1 | r2 = 1;
0x00016cf6 bfi r3, r2, 0, 2 | value_0 = BIT_MASK (0, 2);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x00016cfa strb.w r3, [r8, 0x96] | *((r8 + 0x96)) = r3;
| }
0x00016cfe mov r0, r7 | r0 = r7;
0x00016d00 blx 0x87c0 | fcn_000087c0 ();
0x00016d04 movs r0, 0 | r0 = 0;
0x00016d06 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xf4b0 */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_complete () | uint32_t sqlite3_complete (int16_t arg1) {
| r0 = arg1;
0x0000f4b0 blhs 0x2d4c4 | __asm ("blhs aav.0x000000ff");
| if (? == ?) {
0x0000f4b4 beq.w 0xf6fa | goto label_7;
| }
0x0000f4b8 push.w {r4, r5, r6, r7, r8, lr} |
0x0000f4bc movs r5, 0x1b | r5 = 0x1b;
0x0000f4be ldr r7, [pc, 0x240] |
0x0000f4c0 mov r1, r0 | r1 = r0;
0x0000f4c2 movs r4, 0 | r4 = 0;
0x0000f4c4 movt r5, 0x80 | r5 = (r5 & 0xFFFF) | 0x800000;
0x0000f4c8 ldr r6, [pc, 0x238] |
0x0000f4ca add r7, pc | r7 = 0x1ebd0;
0x0000f4cc add r6, pc | r6 = 0x1ebd4;
0x0000f4ce b 0xf516 |
| while (r3 < 0x2f) {
0x0000f4d0 cmp r3, 0x27 |
| if (r3 > 0x27) {
0x0000f4d2 bhi 0xf546 | goto label_8;
| }
0x0000f4d4 cmp r3, 8 |
| if (r3 >= 8) {
0x0000f4d6 bls 0xf4f0 |
0x0000f4d8 sub.w r2, r3, 9 | r2 = r3 - 9;
0x0000f4dc mov.w ip, 1 |
0x0000f4e0 uxtb r2, r2 | r2 = (int8_t) r2;
0x0000f4e2 lsl.w r2, ip, r2 | r2 = ip << r2;
0x0000f4e6 tst r2, r5 |
| if ((r2 & r5) != 0) {
0x0000f4e8 bne 0xf58c | goto label_9;
| }
0x0000f4ea tst.w r2, 0x42000000 |
| if ((r2 & 0x42000000) != 0) {
0x0000f4ee bne 0xf526 | goto label_10;
| }
| }
| label_1:
0x0000f4f0 adds r2, r7, r3 | r2 = r7 + r3;
0x0000f4f2 ldrb.w r2, [r2, 0x40] | r2 = *((r2 + 0x40));
0x0000f4f6 tst.w r2, 0x46 |
| if ((r2 & 0x46) != 0) {
0x0000f4fa bne 0xf5bc | goto label_11;
| }
| label_2:
0x0000f4fc movs r2, 2 | r2 = 2;
| label_0:
0x0000f4fe ldr r3, [pc, 0x208] |
0x0000f500 adds r1, 1 | r1++;
0x0000f502 add r3, pc | r3 = 0x1ec10;
0x0000f504 add.w r3, r3, r4, lsl 3 | r3 += (r4 << 3);
0x0000f508 add r3, r2 | r3 += r2;
0x0000f50a ldrb.w r4, [r3, 0x968] | r4 = *((r3 + 0x968));
0x0000f50e cmp r0, 0 |
| if (r0 == 0) {
0x0000f510 beq.w 0xf652 | goto label_12;
| }
0x0000f514 mov r3, r0 | r3 = r0;
0x0000f516 cmp r3, 0x2f |
0x0000f518 ldrb r0, [r1, 1] | r0 = *((r1 + 1));
| if (r3 == 0x2f) {
0x0000f51a beq 0xf56e | goto label_13;
| }
0x0000f51c bls 0xf4d0 |
| }
0x0000f51e cmp r3, 0x5b |
| if (r3 == 0x5b) {
0x0000f520 beq 0xf59a | goto label_14;
| }
0x0000f522 cmp r3, 0x60 |
| if (r3 != 0x60) {
0x0000f524 bne 0xf53c | goto label_15;
| }
| label_10:
0x0000f526 adds r1, 1 | r1++;
| if (r0 != 0) {
0x0000f528 cbnz r0, 0xf532 | goto label_16;
| }
0x0000f52a b 0xf596 | goto label_3;
| do {
0x0000f52c ldrb r0, [r1, 1]! | r0 = *((r1 += 1));
| if (r0 == 0) {
0x0000f530 cbz r0, 0xf596 | goto label_3;
| }
| label_16:
0x0000f532 cmp r3, r0 |
0x0000f534 bne 0xf52c |
| } while (r3 != r0);
| label_5:
0x0000f536 ldrb r0, [r1, 1] | r0 = *((r1 + 1));
0x0000f538 movs r2, 2 | r2 = 2;
0x0000f53a b 0xf4fe | goto label_0;
| label_15:
0x0000f53c cmp r3, 0x3b |
0x0000f53e it eq |
| if (r3 == 0x3b) {
0x0000f540 moveq r2, 0 | r2 = 0;
| goto label_17;
| }
| if (r3 == 0x3b) {
| label_17:
0x0000f542 beq 0xf4fe | goto label_0;
| }
0x0000f544 b 0xf4f0 | goto label_1;
| label_8:
0x0000f546 cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x0000f548 bne 0xf4f0 | goto label_1;
| }
0x0000f54a cmp r0, 0x2d |
| if (r0 != 0x2d) {
0x0000f54c bne 0xf4fc | goto label_2;
| }
0x0000f54e ldrb r3, [r1] | r3 = *(r1);
0x0000f550 cmp r3, 0 |
0x0000f552 it ne |
| if (r3 != 0) {
0x0000f554 cmpne r3, 0xa | __asm ("cmpne r3, 0xa");
| }
| if (r3 == 0) {
0x0000f556 beq 0xf564 | goto label_18;
| }
| do {
0x0000f558 ldrb r3, [r1, 1]! | r3 = *((r1 += 1));
0x0000f55c cmp r3, 0 |
0x0000f55e it ne |
| if (r3 != 0) {
0x0000f560 cmpne r3, 0xa | __asm ("cmpne r3, 0xa");
| }
0x0000f562 bne 0xf558 |
| } while (r3 != 0);
| label_18:
0x0000f564 cmp r3, 0 |
| if (r3 == 0) {
0x0000f566 beq 0xf652 | goto label_12;
| }
0x0000f568 ldrb r0, [r1, 1] | r0 = *((r1 + 1));
0x0000f56a movs r2, 1 | r2 = 1;
0x0000f56c b 0xf4fe | goto label_0;
| label_13:
0x0000f56e cmp r0, 0x2a |
| if (r0 != 0x2a) {
0x0000f570 bne 0xf4fc | goto label_2;
| }
0x0000f572 ldrb r3, [r1, 2] | r3 = *((r1 + 2));
0x0000f574 adds r2, r1, 2 | r2 = r1 + 2;
| if (r3 == 0) {
0x0000f576 cbz r3, 0xf594 | goto label_19;
| }
| do {
0x0000f578 mov r0, r3 | r0 = r3;
0x0000f57a mov r1, r2 | r1 = r2;
0x0000f57c cmp r0, 0x2a |
0x0000f57e ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
| if (r0 == 0x2a) {
0x0000f582 bne 0xf590 |
0x0000f584 cmp r3, 0x2f |
| if (r3 != 0x2f) {
0x0000f586 bne 0xf590 | goto label_20;
| }
0x0000f588 ldrb r0, [r1, 2] | r0 = *((r1 + 2));
0x0000f58a mov r1, r2 | r1 = r2;
| label_9:
0x0000f58c movs r2, 1 | r2 = 1;
0x0000f58e b 0xf4fe | goto label_0;
| }
| label_20:
0x0000f590 cmp r3, 0 |
0x0000f592 bne 0xf578 |
| } while (r3 != 0);
| label_19:
0x0000f594 mov r0, r3 | r0 = r3;
| label_3:
0x0000f596 pop.w {r4, r5, r6, r7, r8, pc} |
| label_14:
0x0000f59a cmp r0, 0x5d |
0x0000f59c it ne |
| if (r0 != 0x5d) {
0x0000f59e cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x0000f5a0 add.w r1, r1, 1 | r1++;
| if (r0 == 0x5d) {
0x0000f5a4 beq 0xf5b2 | goto label_21;
| }
| do {
0x0000f5a6 ldrb r0, [r1, 1]! | r0 = *((r1 += 1));
0x0000f5aa cmp r0, 0 |
0x0000f5ac it ne |
| if (r0 != 0) {
0x0000f5ae cmpne r0, 0x5d | __asm ("cmpne r0, 0x5d");
| }
0x0000f5b0 bne 0xf5a6 |
| } while (r0 != 0);
| label_21:
0x0000f5b2 cmp r0, 0 |
| if (r0 == 0) {
0x0000f5b4 beq 0xf596 | goto label_3;
| }
0x0000f5b6 ldrb r0, [r1, 1] | r0 = *((r1 + 1));
0x0000f5b8 movs r2, 2 | r2 = 2;
0x0000f5ba b 0xf4fe | goto label_0;
| label_11:
0x0000f5bc adds r2, r7, r0 | r2 = r7 + r0;
0x0000f5be ldrb.w r2, [r2, 0x40] | r2 = *((r2 + 0x40));
0x0000f5c2 tst.w r2, 0x46 |
| if ((r2 & 0x46) == 0) {
0x0000f5c6 beq 0xf6b0 | goto label_22;
| }
0x0000f5c8 add.w ip, r1, 1 |
0x0000f5cc movs r2, 1 | r2 = 1;
| do {
0x0000f5ce ldrb r0, [ip, 1]! | r0 = *((ip += 1));
0x0000f5d2 mov lr, r2 | lr = r2;
0x0000f5d4 adds r2, 1 | r2++;
0x0000f5d6 add r0, r6 | r0 += r6;
0x0000f5d8 ldrb.w r0, [r0, 0x40] | r0 = *((r0 + 0x40));
0x0000f5dc tst.w r0, 0x46 |
0x0000f5e0 bne 0xf5ce |
| } while ((r0 & 0x46) != 0);
0x0000f5e2 cmp r3, 0x65 |
0x0000f5e4 add.w r8, r1, lr | r8 = r1 + lr;
| if (r3 > 0x65) {
0x0000f5e8 bhi 0xf62a | goto label_23;
| }
0x0000f5ea cmp r3, 0x42 |
| if (r3 < 0x42) {
0x0000f5ec bls 0xf620 | goto label_4;
| }
0x0000f5ee subs r3, 0x43 | r3 -= 0x43;
0x0000f5f0 cmp r3, 0x22 |
| if (r3 > 0x22) {
0x0000f5f2 bhi 0xf620 | goto label_4;
| }
| /* switch table (35 cases) at 0xf5f8 */
0x0000f5f4 tbb [pc, r3] | __asm ("tbb aav.0x000000ff");
0x0000f61c cmp r2, 6 |
| if (r2 == 6) {
0x0000f61e beq 0xf680 | goto label_24;
| }
| do {
| label_4:
0x0000f620 ldrb.w r0, [r8, 1] | r0 = *((r8 + 1));
0x0000f624 mov r1, r8 | r1 = r8;
0x0000f626 movs r2, 2 | r2 = 2;
0x0000f628 b 0xf4fe | goto label_0;
| label_23:
0x0000f62a cmp r3, 0x74 |
0x0000f62c bne 0xf620 |
| } while (r3 != 0x74);
0x0000f62e cmp r2, 7 |
| if (r2 == 7) {
0x0000f630 beq 0xf698 | goto label_25;
| }
0x0000f632 cmp r2, 4 |
| if (r2 == 4) {
0x0000f634 beq 0xf6e2 | goto label_26;
| }
0x0000f636 cmp r2, 9 |
| if (r2 != 9) {
0x0000f638 bne 0xf6f6 | goto label_27;
| }
0x0000f63a mov r0, r1 | r0 = r1;
0x0000f63c ldr r1, [pc, 0xcc] |
0x0000f63e add r1, pc | r1 = 0x1ed4e;
0x0000f640 blx 0x8154 | r0 = fcn_00008154 ();
0x0000f644 cmp r0, 0 |
| if (r0 != 0) {
0x0000f646 bne 0xf620 | goto label_4;
| }
| label_6:
0x0000f648 ldrb.w r0, [r8, 1] | r0 = *((r8 + 1));
0x0000f64c mov r1, r8 | r1 = r8;
0x0000f64e movs r2, 5 | r2 = 5;
0x0000f650 b 0xf4fe | goto label_0;
| label_12:
0x0000f652 sub.w r0, r4, 1 | r0 = r4 - 1;
0x0000f656 clz r0, r0 | r0 &= r0;
0x0000f65a lsrs r0, r0, 5 | r0 >>= 5;
0x0000f65c pop.w {r4, r5, r6, r7, r8, pc} |
0x0000f660 cmp r2, 3 |
| if (r2 == 3) {
0x0000f662 beq 0xf6ca | goto label_28;
| }
0x0000f664 cmp r2, 7 |
| if (r2 != 7) {
0x0000f666 bne 0xf620 | goto label_4;
| }
0x0000f668 mov r0, r1 | r0 = r1;
0x0000f66a ldr r1, [pc, 0xa4] |
0x0000f66c add r1, pc | r1 = 0x1ed82;
0x0000f66e blx 0x8154 | r0 = fcn_00008154 ();
0x0000f672 cmp r0, 0 |
| if (r0 != 0) {
0x0000f674 bne 0xf620 | goto label_4;
| }
0x0000f676 ldrb.w r0, [r8, 1] | r0 = *((r8 + 1));
0x0000f67a mov r1, r8 | r1 = r8;
0x0000f67c movs r2, 3 | r2 = 3;
0x0000f67e b 0xf4fe | goto label_0;
| label_24:
0x0000f680 mov r0, r1 | r0 = r1;
0x0000f682 ldr r1, [pc, 0x90] |
0x0000f684 add r1, pc | r1 = 0x1ed9e;
0x0000f686 blx 0x8154 | r0 = fcn_00008154 ();
0x0000f68a cmp r0, 0 |
| if (r0 != 0) {
0x0000f68c bne 0xf620 | goto label_4;
| }
0x0000f68e ldrb.w r0, [r8, 1] | r0 = *((r8 + 1));
0x0000f692 mov r1, r8 | r1 = r8;
0x0000f694 movs r2, 4 | r2 = 4;
0x0000f696 b 0xf4fe | goto label_0;
| label_25:
0x0000f698 mov r0, r1 | r0 = r1;
0x0000f69a ldr r1, [pc, 0x7c] |
0x0000f69c add r1, pc | r1 = 0x1edba;
0x0000f69e blx 0x8154 | r0 = fcn_00008154 ();
0x0000f6a2 cmp r0, 0 |
| if (r0 != 0) {
0x0000f6a4 bne 0xf620 | goto label_4;
| }
0x0000f6a6 ldrb.w r0, [r8, 1] | r0 = *((r8 + 1));
0x0000f6aa mov r1, r8 | r1 = r8;
0x0000f6ac movs r2, 6 | r2 = 6;
0x0000f6ae b 0xf4fe | goto label_0;
| label_22:
0x0000f6b0 cmp r3, 0x65 |
| if (r3 == 0x65) {
0x0000f6b2 beq 0xf6f2 | goto label_29;
| }
| if (r3 > 0x65) {
0x0000f6b4 bhi 0xf6c2 | goto label_30;
| }
0x0000f6b6 cmp r3, 0x45 |
| if (r3 == 0x45) {
0x0000f6b8 beq 0xf6f2 | goto label_29;
| }
0x0000f6ba cmp r3, 0x54 |
| if (r3 != 0x54) {
0x0000f6bc bne.w 0xf4fc | goto label_2;
| }
0x0000f6c0 b 0xf536 | goto label_5;
| label_30:
0x0000f6c2 cmp r3, 0x74 |
| if (r3 != 0x74) {
0x0000f6c4 bne.w 0xf4fc | goto label_2;
| }
0x0000f6c8 b 0xf536 | goto label_5;
| label_28:
0x0000f6ca mov r0, r1 | r0 = r1;
0x0000f6cc ldr r1, [pc, 0x4c] |
0x0000f6ce add r1, pc | r1 = 0x1edee;
0x0000f6d0 blx 0x8154 | r0 = fcn_00008154 ();
0x0000f6d4 cmp r0, 0 |
| if (r0 != 0) {
0x0000f6d6 bne 0xf620 | goto label_4;
| }
0x0000f6d8 ldrb.w r0, [r8, 1] | r0 = *((r8 + 1));
0x0000f6dc mov r1, r8 | r1 = r8;
0x0000f6de movs r2, 7 | r2 = 7;
0x0000f6e0 b 0xf4fe | goto label_0;
| label_26:
0x0000f6e2 mov r0, r1 | r0 = r1;
0x0000f6e4 ldr r1, [pc, 0x38] |
0x0000f6e6 add r1, pc | r1 = 0x1ee0a;
0x0000f6e8 blx 0x8154 | r0 = fcn_00008154 ();
0x0000f6ec cmp r0, 0 |
| if (r0 != 0) {
0x0000f6ee bne 0xf620 | goto label_4;
| }
0x0000f6f0 b 0xf648 | goto label_6;
| label_29:
0x0000f6f2 mov r8, r1 | r8 = r1;
0x0000f6f4 b 0xf620 | goto label_4;
| label_27:
0x0000f6f6 mov r1, r8 | r1 = r8;
0x0000f6f8 b 0xf536 | goto label_5;
| label_7:
0x0000f6fa mov r0, r3 | r0 = r3;
0x0000f6fc bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xb1460 */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_complete16 () | void sqlite3_complete16 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x000b1460 push {r4, r5, r6, lr} |
0x000b1462 sub sp, 8 |
0x000b1464 mov r6, r0 | r6 = r0;
0x000b1466 blx 0x89bc | r0 = fcn_000089bc ();
0x000b146a mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x000b146c cbz r0, 0xb1474 |
0x000b146e mov r0, r4 | r0 = r4;
0x000b1470 add sp, 8 |
0x000b1472 pop {r4, r5, r6, pc} |
| }
0x000b1474 movs r0, 0x28 | r0 = 0x28;
0x000b1476 movs r1, 0 | r1 = 0;
0x000b1478 bl 0x13558 | r0 = fcn_00013558 (r0);
0x000b147c mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x000b147e cbz r0, 0xb14e0 | goto label_3;
| }
0x000b1480 movs r2, 0x28 | r2 = 0x28;
0x000b1482 mov r1, r4 | r1 = r4;
0x000b1484 blx 0x839c | fcn_0000839c ();
0x000b1488 movs r3, 1 | r3 = 1;
0x000b148a movs r0, 2 | r0 = 2;
0x000b148c strh r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x000b148e mov.w r2, -1 | r2 = -1;
0x000b1492 mov.w r3, -1 | r3 = -1;
0x000b1496 str r0, [sp] | *(sp) = r0;
0x000b1498 mov r1, r6 | r1 = r6;
0x000b149a mov r0, r5 | r0 = r5;
0x000b149c str r4, [sp, 4] | var_4h = r4;
0x000b149e bl 0x29280 | fcn_00029280 (r0, r1, r2, r3, r4, r5, r6);
0x000b14a2 ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000b14a4 movw r2, 0x202 | r2 = 0x202;
0x000b14a8 bics r2, r3 | __asm ("bics r2, r3");
| if (r0 == 2) {
0x000b14aa beq 0xb14ee | goto label_4;
| }
| label_0:
0x000b14ac lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 < r3) {
0x000b14ae bmi 0xb14fa | goto label_5;
| }
0x000b14b0 movs r1, 1 | r1 = 1;
0x000b14b2 mov r0, r5 | r0 = r5;
0x000b14b4 bl 0x1f9f0 | r0 = fcn_0001f9f0 (r0, r1);
| if (r0 == 0) {
0x000b14b8 cbz r0, 0xb14e8 | goto label_6;
| }
| label_1:
0x000b14ba blx 0x874c | fcn_0000874c ();
0x000b14be ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000b14c0 uxtb r4, r0 | r4 = (int8_t) r0;
| do {
| label_2:
0x000b14c2 tst.w r3, 0x9000 |
| if ((r3 & 0x9000) == 0) {
0x000b14c6 bne 0xb14cc |
0x000b14c8 ldr r3, [r5, 0x18] | r3 = *((r5 + 0x18));
| if (r3 == 0) {
0x000b14ca cbz r3, 0xb14d2 | goto label_7;
| }
| }
0x000b14cc mov r0, r5 | r0 = r5;
0x000b14ce bl 0x16c50 | fcn_00016c50 (r0);
| label_7:
0x000b14d2 ldr r0, [r5, 0x14] | r0 = *((r5 + 0x14));
0x000b14d4 mov r1, r5 | r1 = r5;
0x000b14d6 bl 0x16808 | fcn_00016808 (r0, r1);
0x000b14da mov r0, r4 | r0 = r4;
0x000b14dc add sp, 8 |
0x000b14de pop {r4, r5, r6, pc} |
| label_3:
0x000b14e0 movs r4, 7 | r4 = 7;
0x000b14e2 mov r0, r4 | r0 = r4;
0x000b14e4 add sp, 8 |
0x000b14e6 pop {r4, r5, r6, pc} |
| label_6:
0x000b14e8 ldrh r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x000b14ea movs r4, 7 | r4 = 7;
0x000b14ec b 0xb14c2 |
| } while (1);
| label_4:
0x000b14ee ldrb r2, [r5, 0x12] | r2 = *((r5 + 0x12));
0x000b14f0 cmp r2, 1 |
| if (r2 != 1) {
0x000b14f2 bne 0xb14ac | goto label_0;
| }
0x000b14f4 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x000b14f6 cmp r0, 0 |
| if (r0 != 0) {
0x000b14f8 bne 0xb14ba | goto label_1;
| }
| label_5:
0x000b14fa movs r4, 7 | r4 = 7;
0x000b14fc b 0xb14c2 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x423d4 */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_create_filename () | void sqlite3_create_filename (int16_t arg_28h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000423d4 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000423d8 mov r6, r1 | r6 = r1;
0x000423da mov r7, r2 | r7 = r2;
0x000423dc mov r5, r3 | r5 = r3;
0x000423de mov r8, r0 | r8 = r0;
0x000423e0 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000423e4 mov r4, r0 | r4 = r0;
0x000423e6 mov r0, r6 | r0 = r6;
0x000423e8 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000423ec mov sb, r0 | sb = r0;
0x000423ee mov r0, r7 | r0 = r7;
0x000423f0 add r4, sb | r4 += sb;
0x000423f2 blx 0x85b4 | fcn_000085b4 ();
0x000423f6 adds r4, 0xa | r4 += 0xa;
0x000423f8 lsls r3, r5, 1 | r3 = r5 << 1;
0x000423fa add r0, r4 | r0 += r4;
0x000423fc movs r4, 0 | r4 = 0;
0x000423fe cmp r3, r4 |
| if (r3 <= r4) {
0x00042400 ble 0x424a6 | goto label_1;
| }
0x00042402 mov fp, r4 |
0x00042404 ldr r4, [sp, 0x28] | r4 = *(arg_28h);
0x00042406 mov sb, r0 | sb = r0;
0x00042408 mov sl, r4 | sl = r4;
0x0004240a add.w r5, r4, r5, lsl 3 | r5 = r4 + (r5 << 3);
| do {
0x0004240e ldr r0, [sl], 4 | r0 = *(sl);
| sl += 4;
0x00042412 blx 0x85b4 | fcn_000085b4 ();
0x00042416 adds r0, 1 | r0++;
0x00042418 adds.w r0, r0, sb | r0 += sb;
0x0004241c adc fp, fp, 0 | __asm ("adc fp, fp, 0");
0x00042420 cmp r5, sl |
0x00042422 mov sb, r0 | sb = r0;
0x00042424 bne 0x4240e |
| } while (r5 != sl);
0x00042426 mov r1, fp | r1 = fp;
0x00042428 blx 0x8240 | r0 = fcn_00008240 ();
0x0004242c mov sl, r0 | sl = r0;
| if (r0 == 0) {
0x0004242e cbz r0, 0x4249c | goto label_2;
| }
0x00042430 movs r3, 0 | r3 = 0;
0x00042432 mov r0, r8 | r0 = r8;
0x00042434 str r3, [sl], 4 | *(sl) = r3;
| sl += 4;
0x00042438 blx 0x85b4 | fcn_000085b4 ();
0x0004243c mov r1, r8 | r1 = r8;
0x0004243e adds r2, r0, 1 | r2 = r0 + 1;
0x00042440 mov r0, sl | r0 = sl;
0x00042442 add.w sb, sl, r2 | sb = sl + r2;
0x00042446 blx 0x8610 | fcn_00008610 ();
| do {
0x0004244a ldr fp, [r4], 4 | fp = *(r4);
| r4 += 4;
0x0004244e mov r0, fp | r0 = fp;
0x00042450 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00042454 add.w r8, r0, 1 | r8 = r0 + 1;
0x00042458 mov r1, fp | r1 = fp;
0x0004245a mov r0, sb | r0 = sb;
0x0004245c mov r2, r8 | r2 = r8;
0x0004245e blx 0x8610 | fcn_00008610 ();
0x00042462 cmp r4, r5 |
0x00042464 add sb, r8 | sb += r8;
0x00042466 bne 0x4244a |
| } while (r4 != r5);
| label_0:
0x00042468 movs r5, 0 | r5 = 0;
0x0004246a mov r0, r6 | r0 = r6;
0x0004246c strb r5, [sb], 1 | *(sb) = r5;
| sb++;
0x00042470 blx 0x85b4 | fcn_000085b4 ();
0x00042474 mov r1, r6 | r1 = r6;
0x00042476 adds r2, r0, 1 | r2 = r0 + 1;
0x00042478 mov r0, sb | r0 = sb;
0x0004247a add.w r6, sb, r2 | r6 = sb + r2;
0x0004247e blx 0x8610 | fcn_00008610 ();
0x00042482 mov r0, r7 | r0 = r7;
0x00042484 blx 0x85b4 | r0 = fcn_000085b4 ();
0x00042488 adds r4, r0, 1 | r4 = r0 + 1;
0x0004248a mov r1, r7 | r1 = r7;
0x0004248c mov r2, r4 | r2 = r4;
0x0004248e mov r0, r6 | r0 = r6;
0x00042490 blx 0x8610 | fcn_00008610 ();
0x00042494 mov r0, sl | r0 = sl;
0x00042496 strh r5, [r6, r4] | *((r6 + r4)) = r5;
0x00042498 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| do {
| label_2:
0x0004249c mov.w sl, 0 | sl = 0;
0x000424a0 mov r0, sl | r0 = sl;
0x000424a2 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x000424a6 mov r1, r4 | r1 = r4;
0x000424a8 blx 0x8240 | r0 = fcn_00008240 ();
0x000424ac mov sl, r0 | sl = r0;
0x000424ae cmp r0, 0 |
0x000424b0 beq 0x4249c |
| } while (r0 == 0);
0x000424b2 str r4, [sl], 4 | *(sl) = r4;
| sl += 4;
0x000424b6 mov r0, r8 | r0 = r8;
0x000424b8 blx 0x85b4 | fcn_000085b4 ();
0x000424bc mov r1, r8 | r1 = r8;
0x000424be adds r2, r0, 1 | r2 = r0 + 1;
0x000424c0 mov r0, sl | r0 = sl;
0x000424c2 add.w sb, sl, r2 | sb = sl + r2;
0x000424c6 blx 0x8610 | fcn_00008610 ();
0x000424ca b 0x42468 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x84820 */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_exec () | void sqlite3_exec (int16_t arg_58h, int16_t arg1, int16_t arg2, int16_t arg3, arithmetic arg4) {
| int16_t var_0h;
| arithmetic var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_24h;
| arithmetic x;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00084820 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00084824 mov r7, r2 | r7 = r2;
0x00084826 sub sp, 0x34 |
0x00084828 ldr r2, [pc, 0x360] |
0x0008482a mov r8, r0 | r8 = r0;
0x0008482c mov r5, r1 | r5 = r1;
0x0008482e str r3, [sp, 8] | var_8h = r3;
0x00084830 ldr r3, [pc, 0x35c] | r3 = *(0x84b90);
0x00084832 add r2, pc | r2 = 0x1093c2;
| label_21:
0x00084834 ldr r4, [sp, 0x58] | r4 = *(arg_58h);
0x00084836 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00084838 ldr r3, [r3] | r3 = *(r3);
0x0008483a str r3, [sp, 0x2c] | var_2ch = r3;
0x0008483c mov.w r3, 0 | r3 = 0;
0x00084840 movs r3, 0 | r3 = 0;
0x00084842 str r3, [sp, 0x28] | x = r3;
0x00084844 bl 0x25efc | r0 = fcn_00025efc (r0);
0x00084848 cmp r0, 0 |
| if (r0 == 0) {
0x0008484a beq.w 0x84ad6 | goto label_22;
| }
0x0008484e cmp r5, 0 |
| if (r5 == 0) {
0x00084850 beq.w 0x84ad0 | goto label_23;
| }
| label_10:
0x00084854 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00084858 blx 0x8b50 | fcn_00008b50 ();
0x0008485c ldr.w r3, [r8, 0x120] | r3 = *((r8 + 0x120));
0x00084860 movs r1, 0 | r1 = 0;
0x00084862 str.w r1, [r8, 0x40] | __asm ("str.w r1, [r8, 0x40]");
0x00084866 cmp r3, 0 |
| if (r3 == 0) {
0x00084868 beq.w 0x84ac6 | goto label_24;
| }
0x0008486c mov r0, r8 | r0 = r8;
0x0008486e bl 0x1771c | fcn_0001771c (r0, r1);
| label_9:
0x00084872 add r3, sp, 0x28 | r3 += x;
0x00084874 str r4, [sp, 0xc] | var_ch = r4;
0x00084876 mov r4, r7 | r4 = r7;
0x00084878 str r3, [sp, 0x14] | var_14h = r3;
0x0008487a add r3, sp, 0x24 | r3 += var_24h;
0x0008487c str r3, [sp, 0x18] | var_18h = r3;
| do {
| label_1:
0x0008487e ldrb r3, [r5] | r3 = *(r5);
0x00084880 cmp r3, 0 |
| if (r3 == 0) {
0x00084882 beq.w 0x84b62 | goto label_25;
| }
0x00084886 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00084888 mov r1, r5 | r1 = r5;
0x0008488a mov.w r2, -1 | r2 = -1;
0x0008488e mov r0, r8 | r0 = r8;
0x00084890 str r3, [sp] | *(sp) = r3;
0x00084892 movs r3, 0 | r3 = 0;
0x00084894 str r3, [sp, 0x28] | x = r3;
0x00084896 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00084898 blx 0x89e0 | fcn_000089e0 ();
0x0008489c str r0, [sp, 0x10] | var_10h = r0;
0x0008489e cmp r0, 0 |
| if (r0 != 0) {
0x000848a0 bne.w 0x84abe | goto label_26;
| }
0x000848a4 ldr r0, [sp, 0x28] | r0 = x;
0x000848a6 ldr r5, [sp, 0x24] | r5 = var_24h;
0x000848a8 cmp r0, 0 |
0x000848aa beq 0x8487e |
| } while (r0 == 0);
0x000848ac ldr.w sl, [sp, 0x10] | sl = var_10h;
0x000848b0 mov r6, sl | r6 = sl;
0x000848b2 mov r7, sl | r7 = sl;
0x000848b4 mov sb, sl | sb = sl;
| label_0:
0x000848b6 blx 0x8728 | r0 = fcn_00008728 ();
0x000848ba mov r5, r0 | r5 = r0;
0x000848bc cmp r4, 0 |
| if (r4 == 0) {
0x000848be beq 0x84978 | goto label_27;
| }
0x000848c0 cmp r0, 0x64 |
| if (r0 == 0x64) {
0x000848c2 beq.w 0x84a36 | goto label_28;
| }
0x000848c6 eor r7, r7, 1 | r7 ^= 1;
0x000848ca cmp r0, 0x65 |
0x000848cc ite ne |
| if (r0 == 0x65) {
0x000848ce movne r7, 0 | r7 = 0;
| }
| if (r0 != 0x65) {
0x000848d0 andeq r7, r7, 1 | r7 &= 1;
| }
0x000848d4 cmp r7, 0 |
| if (r7 == 0) {
0x000848d6 beq 0x84982 | goto label_29;
| }
0x000848d8 ldr.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x000848dc lsls r0, r3, 0x17 | r0 = r3 << 0x17;
| if (r0 >= r3) {
0x000848de bpl 0x84982 | goto label_29;
| }
| label_2:
0x000848e0 ldr r0, [sp, 0x28] | r0 = x;
0x000848e2 blx 0x8860 | r0 = fcn_00008860 ();
0x000848e6 lsls r2, r0, 3 | r2 = r0 << 3;
0x000848e8 mov r6, r0 | r6 = r0;
0x000848ea movs r3, 0 | r3 = 0;
0x000848ec adds r2, 4 | r2 += 4;
0x000848ee mov r0, r8 | r0 = r8;
0x000848f0 bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x000848f4 mov sl, r0 | sl = r0;
0x000848f6 cmp r0, 0 |
| if (r0 == 0) {
0x000848f8 beq.w 0x84b70 | goto label_30;
| }
0x000848fc cmp r6, 0 |
| if (r6 <= 0) {
0x000848fe ble.w 0x84b24 | goto label_31;
| }
0x00084902 subs r7, r0, 4 | r7 = r0 - 4;
0x00084904 mov.w fp, 0 |
| do {
0x00084908 mov r1, fp | r1 = fp;
0x0008490a ldr r0, [sp, 0x28] | r0 = x;
0x0008490c add.w fp, fp, 1 |
0x00084910 blx 0x88f4 | fcn_000088f4 ();
0x00084914 cmp r6, fp |
0x00084916 str r0, [r7, 4]! | *((r7 += 4)) = r0;
0x0008491a bne 0x84908 |
| } while (r6 != fp);
0x0008491c cmp r5, 0x64 |
| if (r5 == 0x64) {
0x0008491e beq.w 0x84b6a | goto label_32;
| }
| label_14:
0x00084922 ldr r0, [sp, 8] | r0 = var_8h;
0x00084924 mov r2, sb | r2 = sb;
0x00084926 mov r1, r6 | r1 = r6;
0x00084928 mov r3, sl | r3 = sl;
0x0008492a blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| if (r0 == 0) {
0x0008492c cbz r0, 0x84982 | goto label_29;
| }
| do {
| label_15:
0x0008492e ldr r5, [sp, 0x28] | r5 = x;
0x00084930 mov sb, sl | sb = sl;
0x00084932 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00084934 ldrb.w r3, [r5, 0x95] | r3 = *((r5 + 0x95));
0x00084938 cmp r3, 0 |
| if (r3 != 0) {
0x0008493a bne.w 0x84b5a | goto label_33;
| }
| label_17:
0x0008493e movs r6, 4 | r6 = 4;
0x00084940 mov r0, r5 | r0 = r5;
0x00084942 bl 0x1c934 | fcn_0001c934 (r0);
0x00084946 movs r3, 0 | r3 = 0;
0x00084948 mov r1, r6 | r1 = r6;
0x0008494a mov r0, r8 | r0 = r8;
0x0008494c str.w r6, [r8, 0x40] | __asm ("str.w r6, [r8, 0x40]");
0x00084950 mov fp, r6 |
0x00084952 str r3, [sp, 0x28] | x = r3;
0x00084954 bl 0x1771c | fcn_0001771c (r0, r1);
| label_5:
0x00084958 ldr r6, [sp, 0x28] | r6 = x;
0x0008495a movs r7, 1 | r7 = 1;
0x0008495c cmp r6, 0 |
| if (r6 != 0) {
0x0008495e bne 0x849dc | goto label_19;
| }
0x00084960 b 0x849ec | goto label_34;
| label_3:
0x00084962 movs r3, 0 | r3 = 0;
0x00084964 ldr r0, [sp, 8] | r0 = var_8h;
0x00084966 str.w r3, [sb, r6, lsl 2] | __asm ("str.w r3, [sb, r6, lsl 2]");
0x0008496a mov r2, sb | r2 = sb;
0x0008496c mov r3, sl | r3 = sl;
0x0008496e mov r1, r6 | r1 = r6;
0x00084970 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00084972 cmp r0, 0 |
0x00084974 bne 0x8492e |
| } while (r0 != 0);
0x00084976 movs r7, 1 | r7 = 1;
| label_27:
0x00084978 ldr r3, [sp, 0x28] | r3 = x;
0x0008497a cmp r5, 0x64 |
0x0008497c mov r0, r3 | r0 = r3;
| if (r5 == 0x64) {
0x0008497e beq 0x848b6 | goto label_0;
| }
0x00084980 b 0x84984 | goto label_35;
| label_29:
0x00084982 ldr r3, [sp, 0x28] | r3 = x;
| label_35:
0x00084984 ldrb.w r2, [r3, 0x95] | r2 = *((r3 + 0x95));
0x00084988 cmp r2, 0 |
| if (r2 != 0) {
0x0008498a bne.w 0x84afa | goto label_36;
| }
| label_12:
0x0008498e mov r0, r3 | r0 = r3;
0x00084990 bl 0x1c934 | fcn_0001c934 (r0);
0x00084994 ldr r5, [sp, 0x24] | r5 = var_24h;
0x00084996 movs r3, 0 | r3 = 0;
0x00084998 ldr r2, [pc, 0x1f8] |
0x0008499a str r3, [sp, 0x28] | x = r3;
0x0008499c ldrb r3, [r5] | r3 = *(r5);
0x0008499e add r2, pc | r2 = 0x109536;
0x000849a0 add r3, r2 | r3 += r2;
0x000849a2 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000849a6 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 >= r3) {
0x000849a8 bpl 0x849b8 | goto label_37;
| }
| do {
0x000849aa ldrb r3, [r5, 1]! | r3 = *((r5 += 1));
0x000849ae add r3, r2 | r3 += r2;
0x000849b0 ldrb.w r3, [r3, 0x40] | r3 = *((r3 + 0x40));
0x000849b4 lsls r3, r3, 0x1f | r3 <<= 0x1f;
0x000849b6 bmi 0x849aa |
| } while (r3 < r3);
| label_37:
0x000849b8 cmp.w sl, 0 |
| if (sl != 0) {
0x000849bc beq 0x849c6 |
0x000849be mov r1, sl | r1 = sl;
0x000849c0 mov r0, r8 | r0 = r8;
0x000849c2 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000849c6 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000849c8 cmp r3, 0 |
| if (r3 == 0) {
0x000849ca beq.w 0x8487e | goto label_1;
| }
0x000849ce ldr r4, [sp, 0xc] | r4 = var_ch;
0x000849d0 mov fp, r3 |
0x000849d2 movs r7, 1 | r7 = 1;
| label_8:
0x000849d4 ldr r6, [sp, 0x28] | r6 = x;
0x000849d6 movs r3, 0 | r3 = 0;
0x000849d8 mov sb, r3 | sb = r3;
| if (r6 != 0) {
0x000849da cbz r6, 0x849f8 |
| label_19:
0x000849dc ldrb.w r3, [r6, 0x95] | r3 = *((r6 + 0x95));
0x000849e0 cmp r3, 0 |
| if (r3 != 0) {
0x000849e2 bne.w 0x84b1c | goto label_38;
| }
| label_13:
0x000849e6 mov r0, r6 | r0 = r6;
0x000849e8 bl 0x1c934 | fcn_0001c934 (r0);
| label_34:
0x000849ec mov r3, sb | r3 = sb;
| if (r3 == 0) {
0x000849ee cbz r3, 0x849f8 | goto label_20;
| }
0x000849f0 mov r1, sb | r1 = sb;
0x000849f2 mov r0, r8 | r0 = r8;
0x000849f4 bl 0x16808 | fcn_00016808 (r0, r1);
| }
| label_20:
0x000849f8 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x000849fc cmp r3, 0 |
0x000849fe it ne |
| if (r3 == 0) {
0x00084a00 orrne r7, r7, 1 | r7 |= 1;
| }
0x00084a04 mov r5, r7 | r5 = r7;
0x00084a06 cmp r7, 0 |
| if (r7 != 0) {
0x00084a08 bne 0x84a82 | goto label_39;
| }
| if (r4 != 0) {
| label_6:
0x00084a0a cbz r4, 0x84a10 |
0x00084a0c movs r3, 0 | r3 = 0;
0x00084a0e str r3, [r4] | *(r4) = r3;
| }
| label_7:
0x00084a10 ldr.w r0, [r8, 0xc] | r0 = *((r8 + 0xc));
0x00084a14 blx 0x87c0 | fcn_000087c0 ();
| label_11:
0x00084a18 ldr r2, [pc, 0x17c] |
0x00084a1a ldr r3, [pc, 0x174] | r3 = *(0x84b92);
0x00084a1c add r2, pc | r2 = 0x1095b8;
0x00084a1e ldr r3, [r2, r3] | r3 = imp.sinh;
0x00084a20 ldr r2, [r3] | r2 = imp.sinh;
0x00084a22 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00084a24 eors r2, r3 | r2 ^= r3;
0x00084a26 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00084a2a bne.w 0x84b86 | goto label_40;
| }
0x00084a2e mov r0, r5 | r0 = r5;
0x00084a30 add sp, 0x34 |
0x00084a32 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_28:
0x00084a36 cmp r7, 0 |
| if (r7 == 0) {
0x00084a38 beq.w 0x848e0 | goto label_2;
| }
0x00084a3c cmp r6, 0 |
0x00084a3e add.w sb, sl, r6, lsl 2 | sb = sl + (r6 << 2);
0x00084a40 lsrs r6, r0, 6 | r6 = r0 >> 6;
| if (r6 <= r0) {
0x00084a42 ble 0x84b2e | goto label_41;
| }
0x00084a44 mov fp, r6 |
| label_18:
0x00084a46 sub.w r7, sb, 4 | r7 = sb - 4;
0x00084a4a movs r6, 0 | r6 = 0;
0x00084a4c b 0x84a54 | goto label_42;
| label_4:
0x00084a4e adds r6, 1 | r6++;
0x00084a50 cmp fp, r6 |
| if (fp == r6) {
0x00084a52 beq 0x84962 | goto label_3;
| }
| label_42:
0x00084a54 ldr r0, [sp, 0x28] | r0 = x;
0x00084a56 mov r1, r6 | r1 = r6;
0x00084a58 blx 0x8148 | fcn_00008148 ();
0x00084a5c str r0, [r7, 4]! | *((r7 += 4)) = r0;
0x00084a60 cmp r0, 0 |
| if (r0 != 0) {
0x00084a62 bne 0x84a4e | goto label_4;
| }
0x00084a64 ldr r0, [sp, 0x28] | r0 = x;
0x00084a66 mov r1, r6 | r1 = r6;
0x00084a68 blx 0x858c | r0 = fcn_0000858c ();
0x00084a6c cmp r0, 5 |
| if (r0 == 5) {
0x00084a6e beq 0x84a4e | goto label_4;
| }
0x00084a70 ldrb.w r3, [r8, 0x57] | r3 = *((r8 + 0x57));
0x00084a74 mov sb, sl | sb = sl;
0x00084a76 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00084a78 cmp r3, 0 |
| if (r3 == 0) {
0x00084a7a beq 0x84b4a | goto label_43;
| }
| label_16:
0x00084a7c mov.w fp, 0x64 |
0x00084a80 b 0x84958 | goto label_5;
| label_39:
0x00084a82 mov r1, fp | r1 = fp;
0x00084a84 mov r0, r8 | r0 = r8;
0x00084a86 bl 0x177a0 | r0 = fcn_000177a0 (r0, r1);
0x00084a8a cmp r0, 0 |
0x00084a8c it ne |
| if (r0 != 0) {
0x00084a8e cmpne r4, 0 | __asm ("cmpne r4, 0");
| }
0x00084a90 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x00084a92 beq 0x84a0a | goto label_6;
| }
0x00084a94 mov r0, r8 | r0 = r8;
0x00084a96 blx 0x88a0 | r0 = fcn_000088a0 ();
0x00084a9a mov r6, r0 | r6 = r0;
| if (r0 != 0) {
0x00084a9c cbz r0, 0x84b08 |
0x00084a9e blx 0x85b4 | r0 = fcn_000085b4 ();
0x00084aa2 add.w sb, r0, 1 | sb = r0 + 1;
0x00084aa6 movs r1, 0 | r1 = 0;
0x00084aa8 mov r0, sb | r0 = sb;
0x00084aaa bl 0x13558 | r0 = fcn_00013558 (r0);
0x00084aae mov r7, r0 | r7 = r0;
| if (r0 == 0) {
0x00084ab0 cbz r0, 0x84b08 | goto label_44;
| }
0x00084ab2 mov r2, sb | r2 = sb;
0x00084ab4 mov r1, r6 | r1 = r6;
0x00084ab6 blx 0x8610 | fcn_00008610 ();
0x00084aba str r7, [r4] | *(r4) = r7;
0x00084abc b 0x84a10 | goto label_7;
| label_26:
0x00084abe ldrd r4, fp, [sp, 0xc] | __asm ("ldrd r4, fp, [var_ch]");
0x00084ac2 movs r7, 1 | r7 = 1;
0x00084ac4 b 0x849d4 | goto label_8;
| label_24:
0x00084ac6 mov.w r3, -1 | r3 = -1;
0x00084aca str.w r3, [r8, 0x44] | __asm ("str.w r3, [r8, 0x44]");
0x00084ace b 0x84872 | goto label_9;
| label_23:
0x00084ad0 ldr r5, [pc, 0xc8] |
0x00084ad2 add r5, pc | r5 = 0x109672;
0x00084ad4 b 0x84854 | goto label_10;
| label_22:
0x00084ad6 blx 0x83b8 | strerror_r ();
0x00084ada ldr r2, [pc, 0xc4] |
0x00084adc add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x00084ae0 ldr r1, [pc, 0xc0] |
0x00084ae2 movw r3, 0xf995 |
0x00084ae6 movt r3, 1 | r3 = 0x1f995;
0x00084aea movs r0, 0x15 | r0 = 0x15;
0x00084aec add r2, pc | r2 = 0x109692;
0x00084aee str r4, [sp] | *(sp) = r4;
0x00084af0 add r1, pc | r1 = 0x109698;
0x00084af2 movs r5, 0x15 | r5 = 0x15;
0x00084af4 blx 0x8b60 | fcn_00008b60 ();
0x00084af8 b 0x84a18 | goto label_11;
| label_36:
0x00084afa mov r0, r3 | r0 = r3;
0x00084afc str r3, [sp, 0x1c] | var_1ch = r3;
0x00084afe bl 0x5e214 | fcn_0005e214 (r0);
0x00084b02 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00084b04 str r0, [sp, 0x10] | var_10h = r0;
0x00084b06 b 0x8498e | goto label_12;
| }
| label_44:
0x00084b08 movs r1, 7 | r1 = 7;
0x00084b0a movs r3, 0 | r3 = 0;
0x00084b0c str r3, [r4] | *(r4) = r3;
0x00084b0e mov r0, r8 | r0 = r8;
0x00084b10 str.w r1, [r8, 0x40] | __asm ("str.w r1, [r8, 0x40]");
0x00084b14 mov r5, r1 | r5 = r1;
0x00084b16 bl 0x1771c | fcn_0001771c (r0, r1);
0x00084b1a b 0x84a10 | goto label_7;
| label_38:
0x00084b1c mov r0, r6 | r0 = r6;
0x00084b1e bl 0x5e214 | fcn_0005e214 (r0);
0x00084b22 b 0x849e6 | goto label_13;
| label_31:
0x00084b24 cmp r5, 0x64 |
| if (r5 != 0x64) {
0x00084b26 bne.w 0x84922 | goto label_14;
| }
0x00084b2a add.w sb, r0, r6, lsl 2 | sb = r0 + (r6 << 2);
| label_41:
0x00084b2e movs r3, 0 | r3 = 0;
0x00084b30 ldr r0, [sp, 8] | r0 = var_8h;
0x00084b32 str.w r3, [sb] | __asm ("str.w r3, [sb]");
0x00084b36 mov r2, sb | r2 = sb;
0x00084b38 mov r3, sl | r3 = sl;
0x00084b3a mov r1, r6 | r1 = r6;
0x00084b3c blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00084b3e cmp r0, 0 |
| if (r0 != 0) {
0x00084b40 bne.w 0x8492e | goto label_15;
| }
0x00084b44 ldr r0, [sp, 0x28] | r0 = x;
0x00084b46 movs r7, 1 | r7 = 1;
0x00084b48 b 0x848b6 | goto label_0;
| label_43:
0x00084b4a ldrb.w r3, [r8, 0x58] | r3 = *((r8 + 0x58));
0x00084b4e cmp r3, 0 |
| if (r3 != 0) {
0x00084b50 bne 0x84a7c | goto label_16;
| }
0x00084b52 mov r0, r8 | r0 = r8;
0x00084b54 bl 0x21644 | fcn_00021644 (r0);
0x00084b58 b 0x84a7c | goto label_16;
| label_33:
0x00084b5a mov r0, r5 | r0 = r5;
0x00084b5c bl 0x5e214 | fcn_0005e214 (r0);
0x00084b60 b 0x8493e | goto label_17;
| label_25:
0x00084b62 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00084b64 mov r7, r3 | r7 = r3;
0x00084b66 mov fp, r3 |
0x00084b68 b 0x849d4 | goto label_8;
| label_32:
0x00084b6a add.w sb, sl, fp, lsl 2 | sb = sl + (fp << 2);
0x00084b6e b 0x84a46 | goto label_18;
| label_30:
0x00084b70 ldr r6, [sp, 0x28] | r6 = x;
0x00084b72 subs r7, r5, 0 | r7 = r5 - 0;
0x00084b74 ldr r4, [sp, 0xc] | r4 = var_ch;
0x00084b76 mov sb, r0 | sb = r0;
0x00084b78 it ne |
| if (r7 == r5) {
0x00084b7a movne r7, 1 | r7 = 1;
| }
0x00084b7c mov fp, r5 |
0x00084b7e cmp r6, 0 |
| if (r6 != 0) {
0x00084b80 bne.w 0x849dc | goto label_19;
| }
0x00084b84 b 0x849f8 | goto label_20;
| label_40:
0x00084b86 blx 0x883c | fcn_0000883c ();
0x00084b8a nop |
0x00084b8c add r6, ip | r6 += ip;
0x00084b8e movs r4, r0 | r4 = r0;
0x00084b90 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x00084b92 movs r0, r0 |
0x00084b94 strb r6, [r0, 0xb] | *((r0 + 0xb)) = r6;
0x00084b96 movs r3, r0 | r3 = r0;
0x00084b98 rsbs r4, r7, 0 | r4 = r7 - ;
0x00084b9a movs r4, r0 | r4 = r0;
0x00084b9c lsrs r6, r1, 0xb | r6 = r1 >> 0xb;
0x00084b9e movs r3, r0 | r3 = r0;
0x00084ba0 b 0x84834 | goto label_21;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x3eacc).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xb518 */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_limit () | uint32_t sqlite3_limit (int16_t arg1, uint32_t arg2, uint32_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000b518 cmp r1, 0xb |
| if (r1 <= 0xb) {
0x0000b51a bhi 0xb54e |
0x0000b51c lsl.w ip, r1, 2 |
0x0000b520 cmp r2, 0 |
0x0000b522 add.w r3, r0, ip | r3 = r0 + ip;
0x0000b526 ldr r0, [r3, 0x78] | r0 = *((r3 + 0x78));
| if (r2 >= 0) {
0x0000b528 blt 0xb54c |
0x0000b52a push {r4, lr} |
0x0000b52c ldr.w lr, [pc, 0x24] |
0x0000b530 add lr, pc | lr = 0x16a88;
0x0000b532 add ip, lr |
0x0000b534 ldr.w r4, [ip, 0x718] | r4 = *((ip + 0x718));
0x0000b538 cmp r4, r2 |
| if (r4 < r2) {
0x0000b53a bge 0xb540 |
0x0000b53c str r4, [r3, 0x78] | *((r3 + 0x78)) = r4;
0x0000b53e pop {r4, pc} |
| }
0x0000b540 orrs r1, r2 | r1 |= r2;
0x0000b542 ite ne |
| if (r1 == r2) {
0x0000b544 movne r4, r2 | r4 = r2;
| }
| if (r1 != r2) {
0x0000b546 moveq r4, 1 | r4 = 1;
| }
0x0000b548 str r4, [r3, 0x78] | *((r3 + 0x78)) = r4;
0x0000b54a pop {r4, pc} |
| }
0x0000b54c bx lr | return;
| }
0x0000b54e mov.w r0, -1 | r0 = -1;
0x0000b552 bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x4deec */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.sqlite3_load_extension () | void sqlite3_load_extension (int16_t arg_0h, int16_t arg_110h, int16_t arg_248h, int16_t arg_268h, int16_t arg_2b8h, int16_t arg_338h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h;
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0004deec push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0004def0 mov sb, r2 | sb = r2;
0x0004def2 ldr r2, [pc, 0x384] |
0x0004def4 mov r8, r3 | r8 = r3;
0x0004def6 sub sp, 0x24 |
0x0004def8 mov r6, r1 | r6 = r1;
0x0004defa ldr r3, [pc, 0x380] | r3 = *(0x4e27e);
0x0004defc mov r7, r0 | r7 = r0;
0x0004defe add r2, pc | r2 = 0x9c17c;
0x0004df00 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x0004df02 mov.w fp, 0 |
0x0004df06 ldr r3, [r2, r3] |
0x0004df08 ldr r3, [r3] | r3 = *(0x9c17c);
0x0004df0a str r3, [sp, 0x1c] | var_1ch = r3;
0x0004df0c mov.w r3, 0 | r3 = 0;
0x0004df10 blx 0x8b50 | fcn_00008b50 ();
0x0004df14 mov r0, r6 | r0 = r6;
0x0004df16 str.w fp, [sp, 0x18] | __asm ("str.w fp, [var_18h]");
0x0004df1a ldr r5, [r7] | r5 = *(r7);
0x0004df1c blx 0x85b4 | fcn_000085b4 ();
0x0004df20 str r0, [sp, 8] | var_8h = r0;
0x0004df22 cmp.w r8, 0 |
| if (r8 == 0) {
0x0004df26 beq 0x4dfe8 | goto label_23;
| }
0x0004df28 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0004df2a str.w fp, [r8] | __asm ("str.w fp, [r8]");
0x0004df2e lsls r4, r3, 0xf | r4 = r3 << 0xf;
| if (r4 >= r3) {
0x0004df30 bpl.w 0x4e06e | goto label_24;
| }
0x0004df34 ldr r3, [sp, 8] | r3 = var_8h;
0x0004df36 cmp.w sb, 0 |
| if (sb == 0) {
0x0004df3a beq.w 0x4e0c0 | goto label_25;
| }
0x0004df3e cmp.w r3, 0x1000 |
| if (r3 > 0x1000) {
0x0004df42 bhi.w 0x4e084 | goto label_2;
| }
0x0004df46 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0004df48 mov r1, r6 | r1 = r6;
0x0004df4a mov r0, r5 | r0 = r5;
0x0004df4c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0004df4e mov r4, r0 | r4 = r0;
0x0004df50 cmp r0, 0 |
| if (r0 != 0) {
0x0004df52 bne.w 0x4e254 | goto label_26;
| }
0x0004df56 str.w sb, [sp, 0xc] | __asm ("str.w sb, [var_ch]");
| do {
0x0004df5a ldr r2, [pc, 0x324] |
0x0004df5c mov r1, r6 | r1 = r6;
0x0004df5e ldr r0, [pc, 0x324] |
0x0004df60 add r2, pc | r2 = 0x9c1e6;
0x0004df62 add r0, pc | r0 = 0x9c1ec;
0x0004df64 blx 0x8644 | r0 = fcn_00008644 ();
0x0004df68 mov sl, r0 | sl = r0;
0x0004df6a cmp r0, 0 |
| if (r0 == 0) {
0x0004df6c beq 0x4e040 | goto label_4;
| }
0x0004df6e mov r1, r0 | r1 = r0;
0x0004df70 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0004df72 mov r0, r5 | r0 = r5;
0x0004df74 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0004df76 mov r4, r0 | r4 = r0;
0x0004df78 mov r0, sl | r0 = sl;
0x0004df7a blx 0x8404 | fcn_00008404 ();
0x0004df7e cmp r4, 0 |
| if (r4 == 0) {
0x0004df80 beq 0x4e07e | goto label_27;
| }
| label_0:
0x0004df82 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0004df84 mov r1, r4 | r1 = r4;
0x0004df86 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004df88 mov r0, r5 | r0 = r5;
0x0004df8a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0004df8c orrs.w lr, sb, r0 | lr = sb | r0;
0x0004df90 mov r3, r0 | r3 = r0;
0x0004df92 it ne |
| if (lr == sb) {
0x0004df94 movne sb, 0 | sb = 0;
| }
| if (lr == sb) {
0x0004df98 beq 0x4e012 | goto label_28;
| }
| label_8:
0x0004df9a cmp r3, 0 |
| if (r3 == 0) {
0x0004df9c beq.w 0x4e136 | goto label_29;
| }
| label_10:
0x0004dfa0 mov r0, sb | r0 = sb;
0x0004dfa2 str r3, [sp, 8] | var_8h = r3;
0x0004dfa4 blx 0x8404 | fcn_00008404 ();
0x0004dfa8 ldr r2, [pc, 0x2dc] |
0x0004dfaa add r1, sp, 0x18 | r1 += var_18h;
0x0004dfac ldr r3, [sp, 8] | r3 = var_8h;
0x0004dfae mov r0, r7 | r0 = r7;
0x0004dfb0 add r2, pc | r2 = 0x9c23c;
0x0004dfb2 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0004dfb4 mov r6, r0 | r6 = r0;
0x0004dfb6 cmp r0, 0 |
| if (r0 == 0) {
0x0004dfb8 beq.w 0x4e0ce | goto label_30;
| }
0x0004dfbc cmp.w r0, 0x100 |
| if (r0 == 0x100) {
0x0004dfc0 beq.w 0x4e120 | goto label_31;
| }
0x0004dfc4 cmp.w r8, 0 |
| if (r8 != 0) {
0x0004dfc8 beq 0x4dfd8 |
0x0004dfca ldr r0, [pc, 0x2c0] |
0x0004dfcc ldr r1, [sp, 0x18] | r1 = var_18h;
0x0004dfce add r0, pc | r0 = 0x9c260;
0x0004dfd0 blx 0x8644 | fcn_00008644 ();
0x0004dfd4 str.w r0, [r8] | __asm ("str.w r0, [r8]");
| }
0x0004dfd8 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0004dfda blx 0x8404 | fcn_00008404 ();
0x0004dfde ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0004dfe0 mov r1, r4 | r1 = r4;
0x0004dfe2 mov r0, r5 | r0 = r5;
0x0004dfe4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0004dfe6 b 0x4e07a | goto label_1;
| label_23:
0x0004dfe8 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0004dfea lsls r3, r3, 0xf | r3 <<= 0xf;
| if (r3 >= r3) {
0x0004dfec bpl 0x4e07a | goto label_1;
| }
0x0004dfee cmp.w sb, 0 |
| if (sb == 0) {
0x0004dff2 beq.w 0x4e12e | goto label_32;
| }
0x0004dff6 str.w sb, [sp, 0xc] | __asm ("str.w sb, [var_ch]");
| label_7:
0x0004dffa ldr r3, [sp, 8] | r3 = var_8h;
0x0004dffc cmp.w r3, 0x1000 |
| if (r3 > 0x1000) {
0x0004e000 bhi 0x4e07a | goto label_1;
| }
| label_3:
0x0004e002 ldr r3, [r5, 0x28] | r3 = *((r5 + 0x28));
0x0004e004 mov r1, r6 | r1 = r6;
0x0004e006 mov r0, r5 | r0 = r5;
0x0004e008 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0004e00a mov r4, r0 | r4 = r0;
0x0004e00c cmp r0, 0 |
0x0004e00e beq 0x4df5a |
| } while (r0 == 0);
0x0004e010 b 0x4df82 | goto label_0;
| label_28:
0x0004e012 mov r0, r6 | r0 = r6;
0x0004e014 str.w lr, [sp, 0x14] | __asm ("str.w lr, [var_14h]");
0x0004e018 blx 0x85b4 | r0 = fcn_000085b4 ();
0x0004e01c bic r3, r0, 0xc0000000 | r3 = BIT_MASK (r0, 0xc0000000);
0x0004e020 movs r1, 0 | r1 = 0;
0x0004e022 add.w r0, r3, 0x1e | r0 = r3 + 0x1e;
0x0004e026 str r3, [sp, 0x10] | var_10h = r3;
0x0004e028 blx 0x8240 | fcn_00008240 ();
0x0004e02c ldrd r3, lr, [sp, 0x10] | __asm ("ldrd r3, lr, [var_10h]");
0x0004e030 str r0, [sp, 0xc] | var_ch = r0;
0x0004e032 cmp r0, 0 |
| if (r0 != 0) {
0x0004e034 bne.w 0x4e196 | goto label_33;
| }
0x0004e038 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0004e03a mov r1, r4 | r1 = r4;
0x0004e03c mov r0, r5 | r0 = r5;
0x0004e03e blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_4:
0x0004e040 movs r1, 7 | r1 = 7;
| do {
| label_6:
0x0004e042 mov r0, r7 | r0 = r7;
0x0004e044 bl 0x177a0 | r0 = fcn_000177a0 (r0, r1);
0x0004e048 mov r4, r0 | r4 = r0;
| label_5:
0x0004e04a ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
0x0004e04c blx 0x87c0 | fcn_000087c0 ();
0x0004e050 ldr r2, [pc, 0x23c] |
0x0004e052 ldr r3, [pc, 0x228] | r3 = *(0x4e27e);
0x0004e054 add r2, pc | r2 = 0x9c2e8;
0x0004e056 ldr r3, [r2, r3] | r3 = *(0x9c2e8);
0x0004e058 ldr r2, [r3] | r2 = *(0x9c2e8);
0x0004e05a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0004e05c eors r2, r3 | r2 ^= r3;
0x0004e05e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004e062 bne.w 0x4e274 | goto label_34;
| }
0x0004e066 mov r0, r4 | r0 = r4;
0x0004e068 add sp, 0x24 |
0x0004e06a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_24:
0x0004e06e ldr r0, [pc, 0x224] |
0x0004e070 add r0, pc | r0 = 0x9c30a;
0x0004e072 blx 0x8644 | fcn_00008644 ();
0x0004e076 str.w r0, [r8] | __asm ("str.w r0, [r8]");
| label_1:
0x0004e07a movs r1, 1 | r1 = 1;
0x0004e07c b 0x4e042 |
| } while (1);
| label_27:
0x0004e07e cmp.w r8, 0 |
| if (r8 == 0) {
0x0004e082 beq 0x4e07a | goto label_1;
| }
| label_2:
0x0004e084 ldr r3, [sp, 8] | r3 = var_8h;
0x0004e086 adds.w r4, r3, 0x12c | r4 = r3 + 0x12c;
0x0004e08a adc r1, fp, 0 | __asm ("adc r1, arg_0h");
0x0004e08e mov r0, r4 | r0 = r4;
0x0004e090 blx 0x8240 | fcn_00008240 ();
0x0004e094 str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x0004e098 str r0, [sp, 0x18] | var_18h = r0;
0x0004e09a cmp r0, 0 |
| if (r0 == 0) {
0x0004e09c beq 0x4e07a | goto label_1;
| }
0x0004e09e ldr r2, [pc, 0x1f8] |
0x0004e0a0 mov r1, r0 | r1 = r0;
0x0004e0a2 mov.w r3, 0x1000 | r3 = 0x1000;
0x0004e0a6 mov r0, r4 | r0 = r4;
0x0004e0a8 str r6, [sp] | *(sp) = r6;
0x0004e0aa add r2, pc | r2 = 0x9c348;
0x0004e0ac blx 0x8968 | fcn_00008968 ();
0x0004e0b0 ldr r1, [sp, 8] | r1 = var_8h;
0x0004e0b2 mov r0, r5 | r0 = r5;
0x0004e0b4 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0004e0b6 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004e0b8 addw r1, r1, 0x12b | __asm ("addw r1, r1, aav.0x000000ff");
0x0004e0bc blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0004e0be b 0x4e07a | goto label_1;
| label_25:
0x0004e0c0 cmp.w r3, 0x1000 |
| if (r3 > 0x1000) {
0x0004e0c4 bhi 0x4e084 | goto label_2;
| }
0x0004e0c6 ldr r3, [pc, 0x1d4] |
0x0004e0c8 add r3, pc | r3 = 0x9c36a;
0x0004e0ca str r3, [sp, 0xc] | var_ch = r3;
0x0004e0cc b 0x4e002 | goto label_3;
| label_30:
0x0004e0ce ldr.w r3, [r7, 0xcc] | r3 = *((r7 + 0xcc));
0x0004e0d2 adds r3, 1 | r3++;
0x0004e0d4 lsls r5, r3, 2 | r5 = r3 << 2;
0x0004e0d6 mov r3, r0 | r3 = r0;
0x0004e0d8 mov r0, r7 | r0 = r7;
0x0004e0da mov r2, r5 | r2 = r5;
0x0004e0dc bl 0x21784 | r0 = fcn_00021784 (r0, r1);
0x0004e0e0 mov r8, r0 | r8 = r0;
0x0004e0e2 cmp r0, 0 |
| if (r0 == 0) {
0x0004e0e4 beq 0x4e040 | goto label_4;
| }
0x0004e0e6 mov r2, r5 | r2 = r5;
0x0004e0e8 mov r1, r6 | r1 = r6;
0x0004e0ea blx 0x839c | fcn_0000839c ();
0x0004e0ee ldr.w r2, [r7, 0xcc] | r2 = *((r7 + 0xcc));
0x0004e0f2 cmp r2, 0 |
| if (r2 > 0) {
0x0004e0f4 ble 0x4e102 |
0x0004e0f6 ldr.w r1, [r7, 0xd0] | r1 = *((r7 + 0xd0));
0x0004e0fa lsls r2, r2, 2 | r2 <<= 2;
0x0004e0fc mov r0, r8 | r0 = r8;
0x0004e0fe blx 0x8610 | fcn_00008610 ();
| }
0x0004e102 ldr.w r1, [r7, 0xd0] | r1 = *((r7 + 0xd0));
| if (r1 != 0) {
0x0004e106 cbz r1, 0x4e10e |
0x0004e108 mov r0, r7 | r0 = r7;
0x0004e10a bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x0004e10e ldr.w r3, [r7, 0xcc] | r3 = *((r7 + 0xcc));
0x0004e112 str.w r8, [r7, 0xd0] | __asm ("str.w r8, [r7, 0xd0]");
0x0004e116 adds r2, r3, 1 | r2 = r3 + 1;
0x0004e118 str.w r2, [r7, 0xcc] | __asm ("str.w r2, [r7, 0xcc]");
0x0004e11c str.w r4, [r8, r3, lsl 2] | __asm ("str.w r4, [r8, r3, lsl 2]");
| label_31:
0x0004e120 ldrb.w r3, [r7, 0x57] | r3 = *((r7 + 0x57));
0x0004e124 movs r4, 0 | r4 = 0;
0x0004e126 movs r1, 0 | r1 = 0;
0x0004e128 cmp r3, 0 |
| if (r3 == 0) {
0x0004e12a beq 0x4e04a | goto label_5;
| }
0x0004e12c b 0x4e042 | goto label_6;
| label_32:
0x0004e12e ldr r3, [pc, 0x170] |
0x0004e130 add r3, pc | r3 = 0x9c3d6;
0x0004e132 str r3, [sp, 0xc] | var_ch = r3;
0x0004e134 b 0x4dffa | goto label_7;
| label_29:
0x0004e136 cmp.w r8, 0 |
| if (r8 != 0) {
0x0004e13a beq 0x4e186 |
| label_11:
0x0004e13c ldr.w sl, [sp, 0xc] | sl = var_ch;
0x0004e140 mov r0, sl | r0 = sl;
0x0004e142 blx 0x85b4 | fcn_000085b4 ();
0x0004e146 ldr r1, [sp, 8] | r1 = var_8h;
0x0004e148 add.w r2, r0, 0x12c | r2 = r0 + 0x12c;
0x0004e14c str r2, [sp, 0xc] | var_ch = r2;
0x0004e14e adds r2, r2, r1 | r2 += r1;
0x0004e150 adc r1, fp, 0 | __asm ("adc r1, arg_0h");
0x0004e154 mov r0, r2 | r0 = r2;
0x0004e156 str r2, [sp, 0x10] | var_10h = r2;
0x0004e158 blx 0x8240 | fcn_00008240 ();
0x0004e15c str.w r0, [r8] | __asm ("str.w r0, [r8]");
0x0004e160 str r0, [sp, 0x18] | var_18h = r0;
| if (r0 == 0) {
0x0004e162 cbz r0, 0x4e186 | goto label_35;
| }
0x0004e164 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0004e166 mov r1, r0 | r1 = r0;
0x0004e168 mov r3, sl | r3 = sl;
0x0004e16a str r6, [sp] | *(sp) = r6;
0x0004e16c mov r0, r2 | r0 = r2;
0x0004e16e ldr r2, [pc, 0x134] |
0x0004e170 add r2, pc | r2 = 0x9c41a;
0x0004e172 blx 0x8968 | fcn_00008968 ();
0x0004e176 ldr r1, [sp, 8] | r1 = var_8h;
0x0004e178 mov r0, r5 | r0 = r5;
0x0004e17a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004e17c ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
0x0004e17e subs r1, 1 | r1--;
0x0004e180 add r1, r2 | r1 += r2;
0x0004e182 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0004e184 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| }
| label_35:
0x0004e186 mov r0, r5 | r0 = r5;
0x0004e188 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0004e18a mov r1, r4 | r1 = r4;
0x0004e18c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0004e18e mov r0, sb | r0 = sb;
0x0004e190 blx 0x8404 | fcn_00008404 ();
0x0004e194 b 0x4e07a | goto label_1;
| label_33:
0x0004e196 ldr.w ip, [pc, 0x110] |
0x0004e19a add.w sb, r3, -1 | sb = r3 + -1;
0x0004e19e ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004e1a0 add ip, pc | ip = 0x9c44e;
0x0004e1a2 ldm.w ip!, {r0, r1} | r0 = *(ip!);
| r1 = *((ip! + 4));
0x0004e1a6 str r0, [r2] | *(r2) = r0;
0x0004e1a8 str r1, [r2, 4] | *((r2 + 4)) = r1;
0x0004e1aa cmp r3, 0 |
| if (r3 == 0) {
0x0004e1ac beq 0x4e266 | goto label_36;
| }
0x0004e1ae add r3, r6 | r3 += r6;
0x0004e1b0 b 0x4e1b8 |
| while (r2 != 0x2f) {
0x0004e1b2 subs.w sb, sb, 1 | sb--;
| if (sb <= sb) {
0x0004e1b6 blo 0x4e246 | goto label_37;
| }
0x0004e1b8 ldrb r2, [r3, -0x1]! | r2 = *((r3 -= 0x1));
0x0004e1bc cmp r2, 0x2f |
0x0004e1be bne 0x4e1b2 |
| }
0x0004e1c0 add.w r3, sb, 1 | r3 = sb + 1;
0x0004e1c4 mov sl, r3 | sl = r3;
0x0004e1c6 adds r3, r6, r3 | r3 = r6 + r3;
| label_9:
0x0004e1c8 ldr r1, [pc, 0xe0] |
0x0004e1ca mov r0, r3 | r0 = r3;
0x0004e1cc movs r2, 3 | r2 = 3;
0x0004e1ce str r3, [sp, 0x10] | var_10h = r3;
0x0004e1d0 add r1, pc | r1 = 0x9c480;
0x0004e1d2 blx 0x8154 | fcn_00008154 ();
0x0004e1d6 ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r0 == 0) {
0x0004e1d8 cbnz r0, 0x4e1e2 |
0x0004e1da add.w r3, sb, 4 | r3 = sb + 4;
0x0004e1de mov sl, r3 | sl = r3;
0x0004e1e0 adds r3, r6, r3 | r3 = r6 + r3;
| }
0x0004e1e2 ldrb r3, [r3] | r3 = *(r3);
0x0004e1e4 cmp r3, 0 |
0x0004e1e6 it ne |
| if (r3 != 0) {
0x0004e1e8 cmpne r3, 0x2e | __asm ("cmpne r3, 0x2e");
| }
| if (r3 == 0) {
0x0004e1ea beq 0x4e24e | goto label_38;
| }
0x0004e1ec ldr.w ip, [pc, 0xc0] | ip = *(0x0004e2b0);
0x0004e1f0 mov r2, sl | r2 = sl;
0x0004e1f2 ldr.w lr, [sp, 0xc] | lr = var_ch;
0x0004e1f6 add r2, r6 | r2 += r6;
0x0004e1f8 movs r1, 8 | r1 = 8;
0x0004e1fa add ip, pc |
| do {
0x0004e1fc add r3, ip | r3 += ip;
0x0004e1fe ldrb.w r0, [r3, 0x40] | r0 = *((r3 + 0x40));
0x0004e202 lsls r0, r0, 0x1e | r0 <<= 0x1e;
0x0004e204 ittt mi |
| if (r0 >= r0) {
0x0004e206 ldrbmi r3, [r3, 0x140] | r3 = *((r3 + 0x140));
| }
| if (r0 >= r0) {
0x0004e20a strbmi r3, [lr, r1] | *((lr + r1)) = r3;
| }
| if (r0 < r0) {
0x0004e20e adds r1, 1 | r1++;
| }
0x0004e210 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0004e214 cmp r3, 0x2e |
0x0004e216 it ne |
| if (r3 != 0x2e) {
0x0004e218 cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
0x0004e21a bne 0x4e1fc |
| } while (r3 != 0x2e);
0x0004e21c mov ip, r1 |
| do {
0x0004e21e ldr r3, [pc, 0x94] |
0x0004e220 mov r1, r4 | r1 = r4;
0x0004e222 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0004e224 add r3, pc | r3 = 0x9c4de;
0x0004e226 str r3, [sp, 0x10] | var_10h = r3;
| label_12:
0x0004e228 add.w lr, r2, ip | lr = r2 + ip;
0x0004e22c ldr r0, [r3] | r0 = *(r3);
0x0004e22e mov sb, r2 | sb = r2;
0x0004e230 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0004e232 str.w r0, [r2, ip] | __asm ("str.w r0, [r2, ip]");
0x0004e236 mov r0, r5 | r0 = r5;
0x0004e238 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x0004e23a strh.w r3, [lr, 4] | *((lr + 4)) = r3;
0x0004e23e ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0004e240 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0004e242 mov r3, r0 | r3 = r0;
0x0004e244 b 0x4df9a | goto label_8;
| label_37:
0x0004e246 movs r2, 0 | r2 = 0;
0x0004e248 mov r3, r6 | r3 = r6;
0x0004e24a mov sl, r2 | sl = r2;
0x0004e24c b 0x4e1c8 | goto label_9;
| label_38:
0x0004e24e mov.w ip, 8 |
0x0004e252 b 0x4e21e |
| } while (1);
| label_26:
0x0004e254 ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
0x0004e256 mov r2, sb | r2 = sb;
0x0004e258 mov r1, r4 | r1 = r4;
0x0004e25a mov r0, r5 | r0 = r5;
0x0004e25c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0004e25e mov r3, r0 | r3 = r0;
| if (r0 != 0) {
0x0004e260 cbz r0, 0x4e26c |
0x0004e262 mov sb, fp | sb = fp;
0x0004e264 b 0x4dfa0 | goto label_10;
| label_36:
0x0004e266 mov sl, lr | sl = lr;
0x0004e268 mov r3, r6 | r3 = r6;
0x0004e26a b 0x4e1c8 | goto label_9;
| }
0x0004e26c str.w sb, [sp, 0xc] | __asm ("str.w sb, [var_ch]");
0x0004e270 mov sb, fp | sb = fp;
0x0004e272 b 0x4e13c | goto label_11;
| label_34:
0x0004e274 blx 0x883c | fcn_0000883c ();
0x0004e278 add r5, sp, 0x268 | r5 += arg_268h;
0x0004e27a movs r7, r0 | r7 = r0;
0x0004e27c lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0004e27e movs r0, r0 |
0x0004e280 ldr r0, [r0, 0x1c] | r0 = *((r0 + 0x1c));
0x0004e282 movs r6, r0 | r6 = r0;
0x0004e284 str r0, [sp, 0x2b8] | *(arg_2b8h) = r0;
0x0004e286 movs r6, r0 | r6 = r0;
0x0004e288 adr r7, 0x2d0 | r7 = 0x2d0;
0x0004e28a movs r7, r0 | r7 = r0;
0x0004e28c ldr r2, [r2, 0x18] | r2 = *((r2 + 0x18));
0x0004e28e movs r6, r0 | r6 = r0;
0x0004e290 add r4, sp, 0x110 | r4 += arg_110h;
0x0004e292 movs r7, r0 | r7 = r0;
0x0004e294 ldr r3, [pc, 0x280] | r3 = *(0x4e518);
0x0004e296 movs r6, r0 | r6 = r0;
0x0004e298 ldr r6, [r2, 0xc] | r6 = *((r2 + 0xc));
0x0004e29a movs r6, r0 | r6 = r0;
0x0004e29c ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x0004e29e movs r6, r0 | r6 = r0;
0x0004e2a0 str r0, [r3, 0x7c] | *((r3 + 0x7c)) = r0;
0x0004e2a2 movs r6, r0 | r6 = r0;
0x0004e2a4 str r4, [r0, 0x7c] | *((r0 + 0x7c)) = r4;
0x0004e2a6 movs r6, r0 | r6 = r0;
0x0004e2a8 str r4, [r0, 0x78] | *((r0 + 0x78)) = r4;
0x0004e2aa movs r6, r0 | r6 = r0;
0x0004e2ac str r0, [r4, 0x74] | *((r4 + 0x74)) = r0;
0x0004e2ae movs r6, r0 | r6 = r0;
| if (r6 >= r0) {
0x0004e2b0 bge 0x4e388 | goto label_39;
| }
0x0004e2b2 movs r6, r0 | r6 = r0;
| if (r6 >= r0) {
0x0004e2b4 bpl 0x4e228 | goto label_12;
| }
0x0004e2b6 movs r6, r0 | r6 = r0;
0x0004e2b8 push.w {r4, r5, r6, r7, r8, lr} |
0x0004e2bc mov r5, r0 | r5 = r0;
0x0004e2be mov r7, r2 | r7 = r2;
0x0004e2c0 ldr r0, [r2] | r0 = *(r2);
0x0004e2c2 sub sp, 8 |
0x0004e2c4 mov r8, r1 | r8 = r1;
0x0004e2c6 ldr r2, [pc, 0x8c] |
0x0004e2c8 ldr r3, [pc, 0x8c] | r3 = *(0x4e358);
0x0004e2ca add r2, pc | r2 = 0x9c624;
0x0004e2cc ldr r3, [r2, r3] |
0x0004e2ce ldr r3, [r3] | r3 = *(0x9c624);
0x0004e2d0 str r3, [sp, 4] | var_4h = r3;
0x0004e2d2 mov.w r3, 0 | r3 = 0;
0x0004e2d6 blx 0x82e8 | r0 = fcn_000082e8 ();
0x0004e2da mov r6, r0 | r6 = r0;
0x0004e2dc mov r0, r5 | r0 = r5;
0x0004e2de blx 0x8758 | fcn_00008758 ();
0x0004e2e2 ldr r3, [r0, 0x20] | r3 = *((r0 + 0x20));
0x0004e2e4 movs r2, 0 | r2 = 0;
0x0004e2e6 str r2, [sp] | *(sp) = r2;
0x0004e2e8 lsls r3, r3, 0xe | r3 <<= 0xe;
| if (r3 >= r3) {
0x0004e2ea bpl 0x4e31c | goto label_40;
| }
0x0004e2ec cmp.w r8, 2 |
0x0004e2f0 mov r4, r0 | r4 = r0;
| if (r8 == 2) {
0x0004e2f2 beq 0x4e32c | goto label_41;
| }
| if (r6 == 0) {
0x0004e2f4 cbz r6, 0x4e302 | goto label_14;
| }
| label_13:
0x0004e2f6 mov r3, sp | r3 = sp;
0x0004e2f8 mov r1, r6 | r1 = r6;
0x0004e2fa mov r0, r4 | r0 = r4;
0x0004e2fc blx 0x88ac | r0 = fcn_000088ac ();
| if (r0 != 0) {
0x0004e300 cbnz r0, 0x4e33a | goto label_42;
| }
| do {
| label_14:
0x0004e302 ldr r2, [pc, 0x58] |
0x0004e304 ldr r3, [pc, 0x50] | r3 = *(0x4e358);
0x0004e306 add r2, pc | r2 = 0x9c668;
0x0004e308 ldr r3, [r2, r3] | r3 = *(0x9c668);
0x0004e30a ldr r2, [r3] | r2 = *(0x9c668);
0x0004e30c ldr r3, [sp, 4] | r3 = var_4h;
0x0004e30e eors r2, r3 | r2 ^= r3;
0x0004e310 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0004e314 bne 0x4e34e | goto label_43;
| }
0x0004e316 add sp, 8 |
0x0004e318 pop.w {r4, r5, r6, r7, r8, pc} |
| label_40:
0x0004e31c ldr r1, [pc, 0x40] |
0x0004e31e mov.w r2, -1 | r2 = -1;
0x0004e322 mov r0, r5 | r0 = r5;
0x0004e324 add r1, pc | r1 = 0x9c688;
0x0004e326 blx 0x8798 | fcn_00008798 ();
0x0004e32a b 0x4e302 |
| } while (1);
| label_41:
0x0004e32c ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x0004e32e blx 0x82e8 | r0 = fcn_000082e8 ();
0x0004e332 mov r2, r0 | r2 = r0;
0x0004e334 cmp r6, 0 |
| if (r6 != 0) {
0x0004e336 bne 0x4e2f6 | goto label_13;
| }
0x0004e338 b 0x4e302 | goto label_14;
| label_42:
0x0004e33a mov r0, r5 | r0 = r5;
0x0004e33c ldr r1, [sp] | r1 = *(sp);
0x0004e33e mov.w r2, -1 | r2 = -1;
0x0004e342 blx 0x8798 | fcn_00008798 ();
0x0004e346 ldr r0, [sp] | r0 = *(sp);
0x0004e348 blx 0x8404 | fcn_00008404 ();
0x0004e34c b 0x4e302 | goto label_14;
| label_43:
0x0004e34e blx 0x883c | fcn_0000883c ();
0x0004e352 nop |
0x0004e354 add r1, sp, 0x338 | r1 += arg_338h;
0x0004e356 movs r7, r0 | r7 = r0;
0x0004e358 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x0004e35a movs r0, r0 |
0x0004e35c add r1, sp, 0x248 | r1 += arg_248h;
0x0004e35e movs r7, r0 | r7 = r0;
0x0004e360 ldr r0, [pc, 0x3b0] |
0x0004e362 movs r6, r0 | r6 = r0;
0x0004e364 push.w {r3, r4, r5, r6, r7, r8, sb, lr} |
0x0004e368 mov r4, r0 | r4 = r0;
0x0004e36a ldr r0, [r0, 0xc] | r0 = *(0x4e720);
0x0004e36c mov r7, r2 | r7 = r2;
0x0004e36e subs r2, 0 |
0x0004e370 mov r6, r1 | r6 = r1;
0x0004e372 it ne |
| if (r2 == 0) {
0x0004e374 movne r2, 1 | r2 = 1;
| }
0x0004e376 mov r8, r3 | r8 = r3;
0x0004e378 cmp r0, 0 |
0x0004e37a ldr r1, [r4, 0x14] | r1 = *((r4 + 0x14));
0x0004e37c it ne |
| if (r0 == 0) {
0x0004e37e movne r2, 0 | r2 = 0;
| }
0x0004e380 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0004e382 cmp r2, 0 |
| if (r2 != 0) {
0x0004e384 bne 0x4e448 | goto label_44;
| }
0x0004e386 add r1, r6 | r1 += r6;
| label_39:
0x0004e388 mov r2, r6 | r2 = r6;
0x0004e38a cmp r1, r3 |
| if (r1 > r3) {
0x0004e38c bhi 0x4e42a | goto label_17;
| }
| if (r0 == 0) {
0x0004e38e cbz r0, 0x4e3ea | goto label_16;
| }
| label_15:
0x0004e390 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0004e392 cmp r3, r6 |
| if (r3 != r6) {
0x0004e394 bne 0x4e45e | goto label_45;
| }
| if (r7 == 0) {
0x0004e396 cbz r7, 0x4e3e4 | goto label_21;
| }
0x0004e398 cmp r6, 0 |
| if (r6 <= 0) {
0x0004e39a ble 0x4e3e0 | goto label_19;
| }
| label_20:
0x0004e39c subs r7, 4 | r7 -= 4;
0x0004e39e mov.w r8, 0 | r8 = 0;
| do {
0x0004e3a2 ldr r5, [r7, 4]! | r5 = *((r7 += 4));
0x0004e3a6 add.w r8, r8, 1 | r8++;
0x0004e3aa mov r0, r5 | r0 = r5;
| if (r5 != 0) {
0x0004e3ac cbz r5, 0x4e3cc |
0x0004e3ae blx 0x85b4 | r0 = fcn_000085b4 ();
0x0004e3b2 bic r5, r0, 0xc0000000 | r5 = BIT_MASK (r0, 0xc0000000);
0x0004e3b6 movs r1, 0 | r1 = 0;
0x0004e3b8 adds r5, 1 | r5++;
0x0004e3ba mov r0, r5 | r0 = r5;
0x0004e3bc blx 0x8240 | fcn_00008240 ();
0x0004e3c0 mov r2, r5 | r2 = r5;
0x0004e3c2 mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x0004e3c4 cbz r0, 0x4e420 | goto label_46;
| }
0x0004e3c6 ldr r1, [r7] | r1 = *(r7);
0x0004e3c8 blx 0x8610 | fcn_00008610 ();
| }
0x0004e3cc ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0004e3ce cmp r6, r8 |
0x0004e3d0 ldr r2, [r4] | r2 = *(r4);
0x0004e3d2 add.w r1, r3, 1 | r1 = r3 + 1;
0x0004e3d6 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x0004e3d8 str.w r5, [r2, r3, lsl 2] | __asm ("str.w r5, [r2, r3, lsl 2]");
0x0004e3dc bne 0x4e3a2 |
| } while (r6 != r8);
0x0004e3de ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
| label_19:
0x0004e3e0 adds r0, 1 | r0++;
0x0004e3e2 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
| label_21:
0x0004e3e4 movs r0, 0 | r0 = 0;
0x0004e3e6 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_16:
0x0004e3ea cmp r6, 0 |
0x0004e3ec str r6, [r4, 0x10] | *((r4 + 0x10)) = r6;
| if (r6 <= 0) {
0x0004e3ee ble 0x4e472 | goto label_47;
| }
| label_18:
0x0004e3f0 ldr.w sb, [pc, 0x84] | sb = *(0x0004e478);
0x0004e3f4 sub.w r8, r8, 4 | r8 -= 4;
0x0004e3f8 movs r5, 0 | r5 = 0;
0x0004e3fa add sb, pc | sb += pc;
0x0004e3fc b 0x4e410 |
| while (r0 != 0) {
0x0004e3fe ldr r2, [r4, 0x14] | r2 = *((r4 + 0x14));
0x0004e400 cmp r6, r5 |
0x0004e402 ldr r3, [r4] | r3 = *(r4);
0x0004e404 add.w r1, r2, 1 | r1 = r2 + 1;
0x0004e408 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x0004e40a str.w r0, [r3, r2, lsl 2] | __asm ("str.w r0, [r3, r2, lsl 2]");
| if (r6 == r5) {
0x0004e40e beq 0x4e458 | goto label_48;
| }
0x0004e410 ldr r1, [r8, 4]! | r1 = *((r8 += 4));
0x0004e414 mov r0, sb | r0 = sb;
0x0004e416 adds r5, 1 | r5++;
0x0004e418 blx 0x8644 | r0 = fcn_00008644 ();
0x0004e41c cmp r0, 0 |
0x0004e41e bne 0x4e3fe |
| }
| do {
| label_46:
0x0004e420 movs r3, 7 | r3 = 7;
| label_22:
0x0004e422 movs r0, 1 | r0 = 1;
0x0004e424 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
0x0004e426 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_17:
0x0004e42a add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x0004e42e ldr r0, [r4] | r0 = *(r4);
0x0004e430 movs r3, 0 | r3 = 0;
0x0004e432 str r2, [r4, 8] | *((r4 + 8)) = r2;
0x0004e434 lsls r2, r2, 2 | r2 <<= 2;
0x0004e436 bl 0x1360c | r0 = fcn_0001360c (r0, r1, r2);
0x0004e43a cmp r0, 0 |
0x0004e43c beq 0x4e420 |
| } while (r0 == 0);
0x0004e43e str r0, [r4] | *(r4) = r0;
0x0004e440 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0004e442 cmp r0, 0 |
| if (r0 != 0) {
0x0004e444 bne 0x4e390 | goto label_15;
| }
0x0004e446 b 0x4e3ea | goto label_16;
| label_44:
0x0004e448 lsls r2, r6, 1 | r2 = r6 << 1;
0x0004e44a add r1, r2 | r1 += r2;
0x0004e44c cmp r1, r3 |
| if (r1 > r3) {
0x0004e44e bhi 0x4e42a | goto label_17;
| }
0x0004e450 cmp r6, 0 |
0x0004e452 str r6, [r4, 0x10] | *((r4 + 0x10)) = r6;
| if (r6 > 0) {
0x0004e454 bgt 0x4e3f0 | goto label_18;
| }
0x0004e456 b 0x4e3e0 | goto label_19;
| label_48:
0x0004e458 cmp r7, 0 |
| if (r7 != 0) {
0x0004e45a bne 0x4e39c | goto label_20;
| }
0x0004e45c b 0x4e3e4 | goto label_21;
| label_45:
0x0004e45e ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0004e460 blx 0x8404 | fcn_00008404 ();
0x0004e464 ldr r0, [pc, 0x14] |
0x0004e466 add r0, pc | r0 = 0x9c8e6;
0x0004e468 blx 0x8644 | fcn_00008644 ();
0x0004e46c movs r3, 1 | r3 = 1;
0x0004e46e str r0, [r4, 4] | *((r4 + 4)) = r0;
0x0004e470 b 0x4e422 | goto label_22;
| label_47:
0x0004e472 cmp r7, 0 |
| if (r7 == 0) {
0x0004e474 beq 0x4e3e4 | goto label_21;
| }
0x0004e476 b 0x4e3e0 | goto label_19;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x521f8 */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_randomness () | void sqlite3_randomness (int16_t arg1, int16_t arg2) {
| int16_t var_3h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_104h;
| r0 = arg1;
| r1 = arg2;
0x000521f8 ldr r2, [pc, 0x20c] |
0x000521fa ldr r3, [pc, 0x210] | r3 = *(0x5240e);
0x000521fc push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00052200 sub sp, 0x108 |
0x00052202 add r2, pc | r2 = 0xa460e;
0x00052204 mov r6, r0 | r6 = r0;
0x00052206 mov sl, r1 | sl = r1;
0x00052208 ldr r3, [r2, r3] |
0x0005220a ldr r3, [r3] | r3 = *(0xa460e);
0x0005220c str r3, [sp, 0x104] | var_104h = r3;
0x0005220e mov.w r3, 0 | r3 = 0;
0x00052212 blx 0x89bc | r0 = fcn_000089bc ();
0x00052216 cmp r0, 0 |
| if (r0 != 0) {
0x00052218 bne 0x522cc | goto label_3;
| }
0x0005221a ldr r3, [pc, 0x1f4] |
0x0005221c add r3, pc | r3 = 0xa4632;
0x0005221e ldrb r7, [r3, 4] | r7 = *((r3 + 4));
| if (r7 != 0) {
0x00052220 cbz r7, 0x5222a |
0x00052222 ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x00052224 movs r0, 5 | r0 = 5;
0x00052226 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00052228 mov r7, r0 | r7 = r0;
| }
0x0005222a mov r0, r7 | r0 = r7;
0x0005222c blx 0x8b50 | fcn_00008b50 ();
0x00052230 cmp.w sl, 0 |
0x00052234 it ne |
| if (sl != 0) {
0x00052236 cmpne r6, 0 | __asm ("cmpne r6, 0");
| }
| if (sl <= 0) {
0x00052238 ble.w 0x523b2 | goto label_4;
| }
0x0005223c ldr.w r8, [pc, 0x1d4] |
0x00052240 add r8, pc | r8 = 0xa4658;
0x00052242 ldrb.w r4, [r8, 0x2a0] | r4 = *((r8 + 0x2a0));
0x00052246 cmp r4, 0 |
| if (r4 == 0) {
0x00052248 beq 0x522e6 | goto label_5;
| }
0x0005224a ldrb.w r0, [r8, 0x2a1] | r0 = *((r8 + 0x2a1));
0x0005224e ldrb.w r4, [r8, 0x2a2] | r4 = *((r8 + 0x2a2));
| label_0:
0x00052252 ldr.w lr, [pc, 0x1c4] |
0x00052256 mov r1, sl | r1 = sl;
0x00052258 rsb.w sb, r1, 1 | sb = 1 - r1;
0x0005225c add sl, r6 | sl += r6;
0x0005225e add sb, r0 | sb += r0;
0x00052260 add lr, pc | lr = 0xa467e;
| do {
0x00052262 add.w r3, r1, sb | r3 = r1 + sb;
0x00052266 uxtb r3, r3 | r3 = (int8_t) r3;
0x00052268 add r3, lr | r3 += lr;
0x0005226a ldrb.w ip, [r3, 0x2a3] | ip = *((r3 + 0x2a3));
0x0005226e add r4, ip | r4 += ip;
0x00052270 uxtb r4, r4 | r4 = (int8_t) r4;
0x00052272 add.w r5, lr, r4 | r5 = lr + r4;
0x00052276 ldrb.w r8, [r5, 0x2a3] | r8 = *((r5 + 0x2a3));
0x0005227a strb.w r8, [r3, 0x2a3] | *((r3 + 0x2a3)) = r8;
0x0005227e strb.w ip, [r5, 0x2a3] | *((r5 + 0x2a3)) = ip;
0x00052282 ldrb.w r2, [r3, 0x2a3] | r2 = *((r3 + 0x2a3));
0x00052286 add r2, ip | r2 += ip;
0x00052288 uxtb r2, r2 | r2 = (int8_t) r2;
0x0005228a add r2, lr | r2 += lr;
0x0005228c ldrb.w r2, [r2, 0x2a3] | r2 = *((r2 + 0x2a3));
0x00052290 strb r2, [r1], 1 | *(r1) = r2;
| r1++;
0x00052294 cmp r1, sl |
0x00052296 bne 0x52262 |
| } while (r1 != sl);
0x00052298 ldr r2, [pc, 0x180] |
0x0005229a add r0, r6 | r0 += r6;
0x0005229c strb.w r8, [r3, 0x2a3] | *((r3 + 0x2a3)) = r8;
0x000522a0 ldr r3, [pc, 0x168] | r3 = *(0x5240c);
0x000522a2 add r2, pc | r2 = 0xa46c2;
0x000522a4 strb.w ip, [r5, 0x2a3] | *((r5 + 0x2a3)) = ip;
0x000522a8 strb.w r4, [lr, 0x2a2] | *((lr + 0x2a2)) = r4;
0x000522ac strb.w r0, [lr, 0x2a1] | *((lr + 0x2a1)) = r0;
0x000522b0 ldr r3, [r2, r3] | r3 = *(0xa46c2);
0x000522b2 ldr r2, [r3] | r2 = *(0xa46c2);
0x000522b4 ldr r3, [sp, 0x104] | r3 = var_104h;
0x000522b6 eors r2, r3 | r2 ^= r3;
0x000522b8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000522bc bne.w 0x523d2 | goto label_6;
| }
| label_1:
0x000522c0 mov r0, r7 | r0 = r7;
0x000522c2 add sp, 0x108 |
0x000522c4 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x000522c8 b.w 0x87bc | void (*0x87bc)() ();
| label_3:
0x000522cc ldr r2, [pc, 0x150] |
0x000522ce ldr r3, [pc, 0x13c] | r3 = *(0x5240e);
0x000522d0 add r2, pc | r2 = 0xa46f4;
0x000522d2 ldr r3, [r2, r3] | r3 = *(0xa46f4);
0x000522d4 ldr r2, [r3] | r2 = *(0xa46f4);
0x000522d6 ldr r3, [sp, 0x104] | r3 = var_104h;
0x000522d8 eors r2, r3 | r2 ^= r3;
0x000522da mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000522de bne 0x523d2 | goto label_6;
| }
0x000522e0 add sp, 0x108 |
0x000522e2 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_5:
0x000522e6 mov r0, r4 | r0 = r4;
0x000522e8 blx 0x8700 | fcn_00008700 ();
0x000522ec strh.w r4, [r8, 0x2a1] | *((r8 + 0x2a1)) = r4;
0x000522f0 cmp r0, 0 |
| if (r0 == 0) {
0x000522f2 beq 0x523d6 | goto label_7;
| }
0x000522f4 ldr r2, [pc, 0x12c] |
0x000522f6 add r2, pc | r2 = 0xa471e;
0x000522f8 ldr.w r5, [r2, 0x114] | r5 = *(0xa4832);
0x000522fc cmp r5, 0 |
| if (r5 != 0) {
0x000522fe bne 0x523e6 | goto label_8;
| }
0x00052300 ldr r3, [r0, 0x38] | r3 = *((r0 + 0x38));
0x00052302 add r2, sp, 4 | r2 += var_4h;
0x00052304 mov.w r1, 0x100 | r1 = 0x100;
0x00052308 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r1, r2, r3);
0x0005230a ldrb.w r4, [r8, 0x2a2] | r4 = *((r8 + 0x2a2));
0x0005230e ldrb.w r0, [r8, 0x2a1] | r0 = *((r8 + 0x2a1));
| label_2:
0x00052312 ldr r2, [pc, 0x114] |
0x00052314 vmov.i32 q2, 0x10 | __asm ("vmov.i32 q2, 0x10");
0x00052318 vmov.i32 q3, 4 | __asm ("vmov.i32 q3, 4");
0x0005231c add r2, pc | r2 = 0xa474a;
0x0005231e vmov.i32 q15, 8 | __asm ("vmov.i32 q15, 8");
0x00052322 vmov.i32 q14, 0xc | __asm ("vmov.i32 q14, 0xc");
0x00052326 add.w r8, r2, 0x2a0 | r8 = r2 + 0x2a0;
0x0005232a addw r3, r2, 0x2a3 | __asm ("addw r3, r2, aav.0x000000ff");
0x0005232e vldr d18, [pc, 0xc8] | __asm ("vldr d18, aav.0x000000ff");
0x00052332 vldr d19, [pc, 0xcc] | __asm ("vldr d19, aav.0x000000ff");
0x00052336 addw r2, r2, 0x3a3 | __asm ("addw r2, r2, aav.0x000000ff");
| do {
0x0005233a vorr q8, q9, q9 | __asm ("vorr q8, q9, q9");
0x0005233e vadd.i32 q9, q9, q2 | __asm ("vadd.i32 q9, q9, q2");
0x00052342 vadd.i32 q10, q8, q3 | __asm ("vadd.i32 q10, q8, q3");
0x00052346 vadd.i32 q13, q8, q15 | __asm ("vadd.i32 q13, q8, q15");
0x0005234a vadd.i32 q12, q8, q14 | __asm ("vadd.i32 q12, q8, q14");
0x0005234e vmovn.i32 d22, q8 | __asm ("vmovn.i32 d22, q8");
0x00052352 vmovn.i32 d23, q10 | __asm ("vmovn.i32 d23, q10");
0x00052356 vmovn.i32 d20, q13 | __asm ("vmovn.i32 d20, q13");
0x0005235a vmovn.i32 d21, q12 | __asm ("vmovn.i32 d21, q12");
0x0005235e vmovn.i16 d16, q11 | __asm ("vmovn.i16 d16, q11");
0x00052362 vmovn.i16 d17, q10 | __asm ("vmovn.i16 d17, q10");
0x00052366 vst1.8 {d16, d17}, [r3]! | __asm ("vst1.8 {d16, d17}, [r3]!");
0x0005236a cmp r3, r2 |
0x0005236c bne 0x5233a |
| } while (r3 != r2);
0x0005236e ldr.w lr, [pc, 0xbc] |
0x00052372 add.w r8, r8, 0x102 | r8 += 0x102;
0x00052376 add.w ip, sp, 3 |
0x0005237a add lr, pc | lr += pc;
0x0005237c addw r2, lr, 0x2a2 | __asm ("addw r2, lr, aav.0x000000ff");
| do {
0x00052380 ldrb r1, [r2, 1]! | r1 = *((r2 += 1));
0x00052384 ldrb r3, [ip, 1]! | r3 = var_4h;
0x00052388 cmp r2, r8 |
0x0005238a add r3, r1 | r3 += r1;
0x0005238c add r3, r4 | r3 += r4;
0x0005238e uxtb r4, r3 | r4 = (int8_t) r3;
0x00052390 add.w r3, lr, r4 | r3 = lr + r4;
0x00052394 ldrb.w sb, [r3, 0x2a3] | sb = *((r3 + 0x2a3));
0x00052398 strb.w r1, [r3, 0x2a3] | *((r3 + 0x2a3)) = r1;
0x0005239c strb.w sb, [r2] | *(r2) = sb;
0x000523a0 bne 0x52380 |
| } while (r2 != r8);
0x000523a2 strb.w r1, [r3, 0x2a3] | *((r3 + 0x2a3)) = r1;
0x000523a6 movs r3, 1 | r3 = 1;
0x000523a8 strb.w sb, [lr, 0x3a2] | *((lr + 0x3a2)) = sb;
0x000523ac strb.w r3, [lr, 0x2a0] | *((lr + 0x2a0)) = r3;
0x000523b0 b 0x52252 | goto label_0;
| label_4:
0x000523b2 ldr r3, [pc, 0x7c] |
0x000523b4 movs r2, 0 | r2 = 0;
0x000523b6 add r3, pc | r3 = 0xa47ec;
0x000523b8 strb.w r2, [r3, 0x2a0] | *((r3 + 0x2a0)) = r2;
0x000523bc ldr r2, [pc, 0x74] |
0x000523be ldr r3, [pc, 0x4c] | r3 = *(0x5240e);
0x000523c0 add r2, pc | r2 = 0xa47f8;
0x000523c2 ldr r3, [r2, r3] | r3 = *(0xa47f8);
0x000523c4 ldr r2, [r3] | r2 = *(0xa47f8);
0x000523c6 ldr r3, [sp, 0x104] | r3 = var_104h;
0x000523c8 eors r2, r3 | r2 ^= r3;
0x000523ca mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x000523ce beq.w 0x522c0 | goto label_1;
| }
| label_6:
0x000523d2 blx 0x883c | fcn_0000883c ();
| label_7:
0x000523d6 mov.w r2, 0x100 | r2 = 0x100;
0x000523da mov r1, r4 | r1 = r4;
0x000523dc add r0, sp, 4 | r0 += var_4h;
0x000523de blx 0x839c | fcn_0000839c ();
| do {
0x000523e2 movs r0, 0 | r0 = 0;
0x000523e4 b 0x52312 | goto label_2;
| label_8:
0x000523e6 movs r2, 0xfc | r2 = 0xfc;
0x000523e8 mov r1, r4 | r1 = r4;
0x000523ea add r0, sp, 8 | r0 += var_8h;
0x000523ec blx 0x839c | fcn_0000839c ();
0x000523f0 str r5, [sp, 4] | var_4h = r5;
0x000523f2 b 0x523e2 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x29acc */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_result_value () | void sqlite3_result_value (int16_t arg1) {
| r0 = arg1;
0x00029acc push {r3, r4, r5, lr} |
0x00029ace mov r5, r0 | r5 = r0;
0x00029ad0 ldr r4, [r0] | r4 = *(r0);
0x00029ad2 mov r0, r4 | r0 = r4;
0x00029ad4 bl 0x1f1ec | fcn_0001f1ec (r0, r1);
0x00029ad8 ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00029ada ldrb r1, [r5, 0x18] | r1 = *((r5 + 0x18));
0x00029adc lsls r2, r3, 0x1e | r2 = r3 << 0x1e;
0x00029ade it pl |
| if (r2 < r3) {
0x00029ae0 strbpl r1, [r4, 0x12] | *((r4 + 0x12)) = r1;
| }
| if (r2 < r3) {
0x00029ae2 bpl 0x29af2 |
0x00029ae4 ldrb r2, [r4, 0x12] | r2 = *((r4 + 0x12));
0x00029ae6 cmp r2, r1 |
| if (r2 == r1) {
0x00029ae8 beq 0x29af2 | goto label_0;
| }
0x00029aea mov r0, r4 | r0 = r4;
0x00029aec bl 0x23234 | fcn_00023234 (r0, r1);
0x00029af0 ldrh r3, [r4, 0x10] | r3 = *((r4 + 0x10));
| }
| label_0:
0x00029af2 tst.w r3, 0x12 |
0x00029af6 bne 0x29afa |
| while (r3 >= r2) {
0x00029af8 pop {r3, r4, r5, pc} |
0x00029afa lsls r3, r3, 0x15 | r3 <<= 0x15;
0x00029afc ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00029afe itt mi |
| if (r3 >= r3) {
0x00029b00 ldrmi r3, [r4] | r3 = *(r4);
| }
| if (r3 >= r3) {
0x00029b02 addmi r2, r2, r3 | r2 += r3;
| }
0x00029b04 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00029b06 ldr r3, [r3, 0x78] | r3 = *((r3 + 0x78));
0x00029b08 cmp r3, r2 |
0x00029b0a bge 0x29af8 |
| }
0x00029b0c mov r0, r5 | r0 = r5;
0x00029b0e pop.w {r3, r4, r5, lr} |
0x00029b12 b.w 0x87f0 | return void (*0x87f0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x83a04 */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_step () | void sqlite3_step (int16_t arg_0h, int16_t arg_4h, int16_t arg_24h, int16_t arg_3ch, uint32_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| arithmetic x;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_50h;
| int16_t var_54h;
| int16_t var_58h;
| int16_t var_6ch;
| int16_t var_b0h;
| int16_t var_144h;
| r0 = arg1;
0x00083a04 ldr.w r3, [pc, 0x948] | r3 = *(0x00084350);
0x00083a08 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00083a0c sub sp, 0x14c |
0x00083a0e ldr.w r2, [pc, 0x944] | r2 = *(0x00084354);
0x00083a12 add r3, pc | r3 += pc;
0x00083a14 str r3, [sp, 0x38] | var_38h = r3;
0x00083a16 ldr.w r3, [pc, 0x940] |
0x00083a1a add r2, pc | r2 += pc;
0x00083a1c ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00083a1e ldr r3, [r3] | r3 = *(0x8435a);
0x00083a20 str r3, [sp, 0x144] | var_144h = r3;
0x00083a22 mov.w r3, 0 | r3 = 0;
0x00083a26 cmp r0, 0 |
| if (arg_0h == ) {
0x00083a28 beq.w 0x84134 | goto label_54;
| }
0x00083a2c ldr r4, [r0] | r4 = *(r0);
0x00083a2e mov sb, r0 | sb = r0;
0x00083a30 cmp r4, 0 |
| if (r4 == 0) {
0x00083a32 beq.w 0x84162 | goto label_55;
| }
0x00083a36 movw r3, 0xf240 |
0x00083a3a movs r2, 0x33 | r2 = 0x33;
0x00083a3c movt r3, 0xffff | r3 = 0xfffff240;
0x00083a40 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00083a42 str r2, [sp, 0x14] | var_14h = r2;
0x00083a44 str r3, [sp, 0x34] | var_34h = r3;
0x00083a46 blx 0x8b50 | fcn_00008b50 ();
0x00083a4a str r4, [sp, 0x24] | var_24h = r4;
| label_3:
0x00083a4c ldrb.w r3, [sb, 0x95] | r3 = *((sb + 0x95));
0x00083a50 ldr.w r6, [sb] | r6 = *(sb);
0x00083a54 cmp r3, 2 |
| if (r3 == 2) {
0x00083a56 beq 0x83a72 | goto label_56;
| }
0x00083a58 cmp r3, 1 |
| if (r3 != 1) {
0x00083a5a bne 0x83a6e | goto label_57;
| }
0x00083a5c b 0x83ec2 | goto label_58;
| do {
0x00083a5e mov r0, sb | r0 = sb;
0x00083a60 blx 0x81f8 | fcn_000081f8 ();
0x00083a64 ldrb.w r3, [sb, 0x95] | r3 = *((sb + 0x95));
0x00083a68 cmp r3, 1 |
| if (r3 == 1) {
0x00083a6a beq.w 0x83ec2 | goto label_58;
| }
| label_57:
0x00083a6e cmp r3, 3 |
0x00083a70 beq 0x83a5e |
| } while (r3 == 3);
| label_56:
0x00083a72 ldrb.w r3, [sb, 0x96] | r3 = *((sb + 0x96));
| label_7:
0x00083a76 ands r3, r3, 0xc | r3 &= 0xc;
| if (r3 == r3) {
0x00083a7a beq.w 0x83dc4 | goto label_59;
| }
0x00083a7e ldr.w r2, [sb, 0x58] | r2 = *((sb + 0x58));
0x00083a82 cmp r3, 4 |
0x00083a84 ldr.w r1, [sb] | r1 = *(sb);
0x00083a88 str r2, [sp, 0x18] | var_18h = r2;
0x00083a8a add.w r2, r2, 0x28 | r2 += 0x28;
0x00083a8e str r1, [sp, 0x1c] | x = r1;
0x00083a90 mov.w r1, 8 | r1 = 8;
0x00083a94 str r2, [sp, 0x20] | var_20h = r2;
| if (r3 == 4) {
0x00083a96 beq.w 0x83c10 | goto label_60;
| }
0x00083a9a ldrd r3, r0, [sp, 0x1c] | __asm ("ldrd r3, r0, [x]");
0x00083a9e ldr r4, [r3, 0x20] | r4 = *((r3 + 0x20));
0x00083aa0 bl 0x17480 | fcn_00017480 (r0, r1);
0x00083aa4 movs r3, 0 | r3 = 0;
0x00083aa6 str.w r3, [sb, 0x78] | __asm ("str.w r3, [sb, 0x78]");
0x00083aaa ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x00083aae cmp r3, 7 |
| if (r3 == 7) {
0x00083ab0 beq.w 0x840e4 | goto label_61;
| }
0x00083ab4 ldr.w fp, [sb, 0x6c] | fp = *((sb + 0x6c));
0x00083ab8 and r4, r4, 0x1000000 | r4 &= 0x1000000;
0x00083abc ldrb.w r3, [sb, 0x96] | r3 = *((sb + 0x96));
0x00083ac0 mov r2, fp | r2 = fp;
0x00083ac2 and sl, r3, 0xc | sl = r3 & 0xc;
0x00083ac6 cmp r4, 0 |
| if (r4 != 0) {
0x00083ac8 bne.w 0x83c2e | goto label_62;
| }
0x00083acc mov r8, r4 | r8 = r4;
0x00083ace mov ip, r4 |
0x00083ad0 mov r2, r4 | r2 = r4;
| label_0:
0x00083ad2 ldr.w r5, [sb, 0x20] | r5 = *((sb + 0x20));
0x00083ad6 str r6, [sp, 0x28] | var_28h = r6;
| do {
0x00083ad8 mov r4, r5 | r4 = r5;
0x00083ada adds r5, 1 | r5++;
0x00083adc cmp r4, fp |
| if (r4 >= fp) {
0x00083ade bge.w 0x83f46 | goto label_63;
| }
0x00083ae2 ldr.w r3, [sb, 0x6c] | r3 = *((sb + 0x6c));
0x00083ae6 cmp r4, r3 |
| if (r4 >= r3) {
0x00083ae8 bge.w 0x83c6a | goto label_64;
| }
0x00083aec ldr.w r7, [sb, 0x68] | r7 = *((sb + 0x68));
| label_1:
0x00083af0 cmp.w r8, 0 |
| if (r8 != 0) {
0x00083af4 beq 0x83b08 |
0x00083af6 add.w r6, r4, r4, lsl 2 | r6 = r4 + (r4 << 2);
0x00083afa add.w r6, r7, r6, lsl 2 | r6 = r7 + (r6 << 2);
0x00083afe ldrsb.w r3, [r6, 1] | r3 = *((r6 + 1));
0x00083b02 adds r3, 4 | r3 += 4;
| if (r3 == 4) {
0x00083b04 beq.w 0x83c88 | goto label_65;
| }
| }
| label_2:
0x00083b08 cmp.w sl, 8 |
| if (sl != 8) {
0x00083b0c bne 0x83b30 | goto label_66;
| }
0x00083b0e add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x00083b12 ldrb.w r3, [r7, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r7 + offset_0));
0x00083b16 cmp r3, 0xb9 |
| if (r3 == 0xb9) {
0x00083b18 beq 0x83b30 | goto label_66;
| }
0x00083b1a sub.w r3, r3, 0x40 | r3 -= 0x40;
0x00083b1e cmp r5, 1 |
0x00083b20 clz r3, r3 | r3 &= r3;
0x00083b24 lsr.w r3, r3, 5 | r3 >>= 5;
0x00083b28 it le |
| if (r5 > 1) {
0x00083b2a movle r3, 0 | r3 = 0;
| }
0x00083b2c cmp r3, 0 |
0x00083b2e beq 0x83ad8 |
| } while (r3 == 0);
| label_66:
0x00083b30 ldr r3, [sp, 0x1c] | r3 = x;
0x00083b32 ldr r6, [sp, 0x28] | r6 = var_28h;
0x00083b34 str.w r5, [sb, 0x20] | __asm ("str.w r5, [sb, 0x20]");
0x00083b38 ldr.w r3, [r3, 0x128] | r3 = *((r3 + 0x128));
0x00083b3c cmp r3, 0 |
| if (r3 == 0) {
0x00083b3e beq.w 0x8409a | goto label_67;
| }
0x00083b42 ldr.w r1, [pc, 0x818] | r1 = *(0x0008435c);
0x00083b46 movs r3, 9 | r3 = 9;
0x00083b48 mov r0, sb | r0 = sb;
0x00083b4a str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x00083b4e add r1, pc | r1 += pc;
0x00083b50 bl 0x24e68 | fcn_00024e68 (r0);
| label_20:
0x00083b54 ldrd r2, r3, [sb, 0x88] | __asm ("ldrd r2, r3, [sb, 0x88]");
0x00083b58 cmp r2, 1 |
0x00083b5a sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r2 >= 1) {
0x00083b5e bge.w 0x84010 | goto label_68;
| }
| label_16:
0x00083b62 movs r4, 1 | r4 = 1;
| label_4:
0x00083b64 ldrsb.w r3, [sb, 0x94] | r3 = *((sb + 0x94));
0x00083b68 cmp r3, 0 |
| if (r3 < 0) {
0x00083b6a blt.w 0x83f3c | goto label_69;
| }
| label_9:
0x00083b6e ldr.w sl, [sb, 0x24] | sl = *((sb + 0x24));
0x00083b72 ldr.w r0, [sb] | r0 = *(sb);
0x00083b76 subs.w r3, sl, 0 | r3 = sl - 0;
0x00083b7a it ne |
| if (r3 == sl) {
0x00083b7c movne r3, 1 | r3 = 1;
| }
| label_5:
0x00083b7e str r4, [r6, 0x40] | *((r6 + 0x40)) = r4;
0x00083b80 ldrb.w r2, [r0, 0x57] | r2 = *((r0 + 0x57));
0x00083b84 cmp r2, 0 |
0x00083b86 it ne |
| if (r2 == 0) {
0x00083b88 orrne r3, r3, 1 | r3 |= 1;
| }
0x00083b8c cmp r3, 0 |
| if (r3 != 0) {
0x00083b8e bne.w 0x83e78 | goto label_70;
| }
| label_6:
0x00083b92 ldr r3, [r6, 0x48] | r3 = *((r6 + 0x48));
0x00083b94 ands r4, r3 | r4 &= r3;
0x00083b96 cmp r4, 0x11 |
| if (r4 != 0x11) {
0x00083b98 bne.w 0x8416e | goto label_71;
| }
0x00083b9c ldr r3, [sp, 0x14] | r3 = var_14h;
0x00083b9e subs r3, 1 | r3--;
0x00083ba0 str r3, [sp, 0x14] | var_14h = r3;
| if (r3 == 1) {
0x00083ba2 beq.w 0x8416e | goto label_71;
| }
0x00083ba6 mov r0, sb | r0 = sb;
0x00083ba8 ldr.w r5, [sb, 0x20] | r5 = *((sb + 0x20));
0x00083bac blx 0x825c | fcn_0000825c ();
0x00083bb0 ldr.w r7, [sb] | r7 = *(sb);
0x00083bb4 mov r1, r0 | r1 = r0;
0x00083bb6 add r4, sp, 0x40 | r4 += var_40h;
0x00083bb8 movs r0, 0 | r0 = 0;
0x00083bba ldrb.w r3, [sb, 0x94] | r3 = *((sb + 0x94));
0x00083bbe mov.w r2, -1 | r2 = -1;
0x00083bc2 strd r4, r0, [sp, 4] | __asm ("strd r4, r0, [var_4h]");
0x00083bc6 mov r0, r7 | r0 = r7;
0x00083bc8 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00083bcc bl 0x7bd30 | r0 = fcn_0007bd30 (r0, r1, r2, r3, r4, r5, r6);
0x00083bd0 mov r8, r0 | r8 = r0;
0x00083bd2 cmp r0, 0 |
| if (r0 == 0) {
0x00083bd4 beq.w 0x83cfc | goto label_72;
| }
0x00083bd8 cmp r0, 7 |
0x00083bda ldr r4, [sp, 0x24] | r4 = var_24h;
| if (r0 == 7) {
0x00083bdc beq.w 0x84026 | goto label_73;
| }
| label_17:
0x00083be0 ldr.w r0, [r4, 0x120] | r0 = *((r4 + 0x120));
0x00083be4 blx 0x82e8 | fcn_000082e8 ();
0x00083be8 ldr.w r1, [sb, 0x7c] | r1 = *((sb + 0x7c));
0x00083bec mov r5, r0 | r5 = r0;
| if (r1 != 0) {
0x00083bee cbz r1, 0x83bf6 |
0x00083bf0 mov r0, r4 | r0 = r4;
0x00083bf2 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x00083bf6 ldrb.w r3, [r4, 0x57] | r3 = *((r4 + 0x57));
0x00083bfa cmp r3, 0 |
| if (r3 == 0) {
0x00083bfc beq.w 0x84116 | goto label_74;
| }
0x00083c00 movs r3, 7 | r3 = 7;
0x00083c02 movs r2, 0 | r2 = 0;
0x00083c04 mov r5, r3 | r5 = r3;
0x00083c06 str.w r2, [sb, 0x7c] | __asm ("str.w r2, [sb, 0x7c]");
0x00083c0a str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x00083c0e b 0x83e9a | goto label_15;
| label_60:
0x00083c10 mov r0, r2 | r0 = r2;
0x00083c12 bl 0x17480 | fcn_00017480 (r0, r1);
0x00083c16 movs r3, 0 | r3 = 0;
0x00083c18 str.w r3, [sb, 0x78] | __asm ("str.w r3, [sb, 0x78]");
0x00083c1c ldr.w r3, [sb, 0x24] | r3 = *((sb + 0x24));
0x00083c20 cmp r3, 7 |
| if (r3 == 7) {
0x00083c22 beq.w 0x840e4 | goto label_61;
| }
0x00083c26 ldrb.w r3, [sb, 0x96] | r3 = *((sb + 0x96));
0x00083c2a ldr.w r2, [sb, 0x6c] | r2 = *((sb + 0x6c));
| label_62:
0x00083c2e and sl, r3, 0xc | sl = r3 & 0xc;
0x00083c32 ldr.w r3, [sb, 0x58] | r3 = *((sb + 0x58));
0x00083c36 mov fp, r2 |
0x00083c38 ldrh.w ip, [r3, 0x178] | ip = *((r3 + 0x178));
0x00083c3c add.w r8, r3, 0x168 | r8 = r3 + 0x168;
0x00083c40 ands ip, ip, 0x10 |
0x00083c44 it eq |
| if (ip == ip) {
0x00083c46 moveq r2, ip | r2 = ip;
| goto label_75;
| }
| if (ip == ip) {
| label_75:
0x00083c48 beq.w 0x83ad2 | goto label_0;
| }
0x00083c4c ldrd ip, r2, [r3, 0x170] | __asm ("ldrd ip, r2, aav.0x000000ff");
0x00083c50 lsrs r2, r2, 2 | r2 >>= 2;
| if (r2 == r2) {
0x00083c52 beq.w 0x83ad2 | goto label_0;
| }
0x00083c56 add.w r0, ip, r2, lsl 2 | r0 = ip + (r2 << 2);
0x00083c5a mov r3, ip | r3 = ip;
| do {
0x00083c5c ldr r1, [r3], 4 | r1 = *(r3);
| r3 += 4;
0x00083c60 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00083c62 cmp r0, r3 |
0x00083c64 add fp, r1 |
0x00083c66 bne 0x83c5c |
| } while (r0 != r3);
0x00083c68 b 0x83ad2 | goto label_0;
| label_64:
0x00083c6a ldr.w r1, [ip] | r1 = *(ip);
0x00083c6e subs r4, r4, r3 | r4 -= r3;
0x00083c70 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00083c72 cmp r3, r4 |
| if (r3 > r4) {
0x00083c74 bgt 0x83c84 | goto label_76;
| }
0x00083c76 mov r0, ip | r0 = ip;
| do {
0x00083c78 ldr r1, [r0, 4]! | r1 = *((r0 += 4));
0x00083c7c subs r4, r4, r3 | r4 -= r3;
0x00083c7e ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00083c80 cmp r3, r4 |
0x00083c82 ble 0x83c78 |
| } while (r3 <= r4);
| label_76:
0x00083c84 ldr r7, [r1] | r7 = *(r1);
0x00083c86 b 0x83af0 | goto label_1;
| label_65:
0x00083c88 cmp r2, 0 |
| if (r2 <= 0) {
0x00083c8a ble.w 0x84102 | goto label_77;
| }
0x00083c8e ldr.w lr, [r6, 0x10] |
0x00083c92 sub.w r1, ip, 4 | r1 = ip - 4;
0x00083c96 movs r3, 0 | r3 = 0;
0x00083c98 b 0x83ca0 |
| while (r0 != lr) {
0x00083c9a adds r3, 1 | r3++;
0x00083c9c cmp r2, r3 |
| if (r2 == r3) {
0x00083c9e beq 0x83cae | goto label_21;
| }
0x00083ca0 ldr r0, [r1, 4]! | r0 = *((r1 += 4));
0x00083ca4 cmp r0, lr |
0x00083ca6 bne 0x83c9a |
| }
0x00083ca8 cmp r2, r3 |
| if (r2 != r3) {
0x00083caa bne.w 0x83b08 | goto label_2;
| }
| label_21:
0x00083cae adds r3, r2, 1 | r3 = r2 + 1;
0x00083cb0 subs r2, 0 |
0x00083cb2 lsl.w r1, r3, 2 | r1 = r3 << 2;
0x00083cb6 it ne |
| if (r2 == 0) {
0x00083cb8 movne r2, 1 | r2 = 1;
| }
0x00083cba mov r0, r8 | r0 = r8;
0x00083cbc str r3, [sp, 0x30] | var_30h = r3;
0x00083cbe str r1, [sp, 0x2c] | var_2ch = r1;
0x00083cc0 bl 0x1ef80 | fcn_0001ef80 (r0, r1, r2);
0x00083cc4 str.w r0, [sb, 0x24] | __asm ("str.w r0, [sb, 0x24]");
0x00083cc8 cmp r0, 0 |
| if (r0 != 0) {
0x00083cca bne.w 0x83ffc | goto label_78;
| }
0x00083cce ldr r3, [sp, 0x30] | r3 = var_30h;
0x00083cd0 ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x00083cd2 ldrh.w r6, [r8, 0x10] | r6 = *((r8 + 0x10));
0x00083cd6 mov r2, r3 | r2 = r3;
0x00083cd8 ldr r3, [sp, 0x34] | r3 = var_34h;
0x00083cda ldr.w ip, [r8, 8] | ip = *((r8 + 8));
0x00083cdc stm r0!, {r3} | *(r0!) = r3;
0x00083cde ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00083ce0 ands r6, r3 | r6 &= r3;
0x00083ce2 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00083ce4 orr r6, r6, 0x10 | r6 |= 0x10;
0x00083ce8 add fp, r3 |
0x00083cea add.w r3, ip, r1 | r3 = ip + r1;
0x00083cee str r0, [r3, -0x4] | *((r3 - 0x4)) = r0;
0x00083cf2 strh.w r6, [r8, 0x10] | *((r8 + 0x10)) = r6;
0x00083cf6 str.w r1, [r8, 0xc] | __asm ("str.w r1, [r8, 0xc]");
0x00083cfa b 0x83b08 | goto label_2;
| label_72:
0x00083cfc ldr r4, [r4] | r4 = *(r4);
0x00083cfe add r6, sp, 0x58 | r6 += var_58h;
0x00083d00 movs r2, 0xe8 | r2 = 0xe8;
0x00083d02 mov r0, r6 | r0 = r6;
0x00083d04 mov r1, r4 | r1 = r4;
0x00083d06 blx 0x8610 | fcn_00008610 ();
0x00083d0a movs r2, 0xe8 | r2 = 0xe8;
0x00083d0c mov r1, sb | r1 = sb;
0x00083d0e mov r0, r4 | r0 = r4;
0x00083d10 blx 0x8610 | fcn_00008610 ();
0x00083d14 movs r2, 0xe8 | r2 = 0xe8;
0x00083d16 mov r1, r6 | r1 = r6;
0x00083d18 mov r0, sb | r0 = sb;
0x00083d1a blx 0x8610 | r0 = fcn_00008610 ();
0x00083d1e ldrd r1, r0, [r4, 4] | __asm ("ldrd r1, r0, [r4, 4]");
0x00083d22 add.w ip, r4, 0xc0 |
0x00083d26 ldr.w r3, [sb, 8] | r3 = *((sb + 8));
0x00083d2a ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x00083d2e str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00083d30 ldr.w r3, [r4, 0xc4] | r3 = *((r4 + 0xc4));
0x00083d34 str.w r0, [sb, 8] | __asm ("str.w r0, [sb, 8]");
0x00083d38 str r2, [r4, 4] | *((r4 + 4)) = r2;
0x00083d3a ldr.w r2, [sb, 0xc4] | r2 = *((sb + 0xc4));
0x00083d3e str.w r1, [sb, 4] | __asm ("str.w r1, [sb, 4]");
0x00083d42 ldr.w r1, [r4, 0xd8] | r1 = *((r4 + 0xd8));
0x00083d46 str.w r2, [r4, 0xc4] | __asm ("str.w r2, [r4, 0xc4]");
0x00083d4a add.w r2, sb, 0xa0 | r2 = sb + 0xa0;
0x00083d4e str.w r3, [sb, 0xc4] | __asm ("str.w r3, [sb, 0xc4]");
0x00083d52 add.w r3, r4, 0xa0 | r3 = r4 + 0xa0;
0x00083d56 str.w r1, [sb, 0xd8] | __asm ("str.w r1, [sb, 0xd8]");
0x00083d5a ldrb.w r1, [r4, 0x94] | r1 = *((r4 + 0x94));
0x00083d5e strb.w r1, [sb, 0x94] | *((sb + 0x94)) = r1;
| do {
0x00083d62 ldr r7, [r3] | r7 = *(r3);
0x00083d64 adds r3, 0x10 | r3 += 0x10;
0x00083d66 ldr r6, [r3, -0xc] | r6 = *((r3 - 0xc));
0x00083d6a adds r2, 0x10 | r2 += 0x10;
0x00083d6c ldr r0, [r3, -0x8] | r0 = *((r3 - 0x8));
0x00083d70 ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x00083d74 cmp r3, ip |
0x00083d76 str r7, [r2, -0x10] | *((r2 - 0x10)) = r7;
0x00083d7a str r6, [r2, -0xc] | *((r2 - 0xc)) = r6;
0x00083d7e str r0, [r2, -0x8] | *((r2 - 0x8)) = r0;
0x00083d82 str r1, [r2, -0x4] | *((r2 - 0x4)) = r1;
0x00083d86 bne 0x83d62 |
| } while (r3 != ip);
0x00083d88 ldr r3, [r3] | r3 = *(r3);
0x00083d8a mov r1, sb | r1 = sb;
0x00083d8c mov r0, r4 | r0 = r4;
0x00083d8e str r3, [r2] | *(r2) = r3;
0x00083d90 ldr.w r3, [sb, 0xb4] | r3 = *((sb + 0xb4));
0x00083d94 adds r3, 1 | r3++;
0x00083d96 str.w r3, [sb, 0xb4] | __asm ("str.w r3, [sb, 0xb4]");
0x00083d9a bl 0x16d0c | fcn_00016d0c (r0, r1, r2, r3, r4);
0x00083d9e ldrb.w r3, [r4, 0x95] | r3 = *((r4 + 0x95));
0x00083da2 movs r2, 0 | r2 = 0;
0x00083da4 str r2, [r4, 0x24] | *((r4 + 0x24)) = r2;
0x00083da6 cmp r3, 0 |
| if (r3 != 0) {
0x00083da8 bne.w 0x83f34 | goto label_79;
| }
| label_8:
0x00083dac mov r0, r4 | r0 = r4;
0x00083dae bl 0x1c934 | fcn_0001c934 (r0);
0x00083db2 mov r0, sb | r0 = sb;
0x00083db4 blx 0x81f8 | fcn_000081f8 ();
0x00083db8 cmp r5, 0 |
0x00083dba itt ge |
| if (r5 < 0) {
0x00083dbc movge r3, 0xfe | r3 = 0xfe;
| }
| if (r5 < 0) {
0x00083dbe strbge r3, [sb, 0x93] | *((sb + 0x93)) = r3;
| }
0x00083dc2 b 0x83a4c | goto label_3;
| label_59:
0x00083dc4 ldr.w r3, [r6, 0xc4] | r3 = *((r6 + 0xc4));
0x00083dc8 mov r0, sb | r0 = sb;
0x00083dca adds r3, 1 | r3++;
0x00083dcc str.w r3, [r6, 0xc4] | __asm ("str.w r3, [r6, 0xc4]");
0x00083dd0 bl 0x7cdd0 | fcn_0007cdd0 (r0, r1, r2, r3, r4);
0x00083dd4 ldr.w r3, [r6, 0xc4] | r3 = *((r6 + 0xc4));
0x00083dd8 cmp r0, 0x64 |
0x00083dda mov r4, r0 | r4 = r0;
0x00083ddc add.w r3, r3, -1 | r3 += -1;
0x00083de0 str.w r3, [r6, 0xc4] | __asm ("str.w r3, [r6, 0xc4]");
| if (r0 == 0x64) {
0x00083de4 beq.w 0x8401a | goto label_80;
| }
0x00083de8 ldrd r2, r3, [sb, 0x88] | __asm ("ldrd r2, r3, [sb, 0x88]");
0x00083dec cmp r2, 1 |
0x00083dee sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r2 >= 1) {
0x00083df2 blt 0x83dfc |
0x00083df4 mov r1, sb | r1 = sb;
0x00083df6 mov r0, r6 | r0 = r6;
0x00083df8 bl 0xecc0 | fcn_0000ecc0 (r0, r1, r2, r3);
| }
0x00083dfc cmp r4, 0x65 |
| if (r4 != 0x65) {
0x00083dfe bne.w 0x83b64 | goto label_4;
| }
| label_10:
0x00083e02 ldrb.w r3, [r6, 0x55] | r3 = *((r6 + 0x55));
0x00083e06 cmp r3, 0 |
| if (r3 != 0) {
0x00083e08 bne.w 0x83f72 | goto label_81;
| }
| label_11:
0x00083e0c ldr.w sl, [sb, 0x24] | sl = *((sb + 0x24));
0x00083e10 movs r4, 0x65 | r4 = 0x65;
0x00083e12 ldr.w r0, [sb] | r0 = *(sb);
0x00083e16 subs.w r3, sl, 0 | r3 = sl - 0;
0x00083e1a it ne |
| if (r3 == sl) {
0x00083e1c movne r3, 1 | r3 = 1;
| }
0x00083e1e b 0x83b7e | goto label_5;
| label_13:
0x00083e20 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00083e22 ldr r1, [r1] | r1 = *(r1);
0x00083e24 ldr.w r1, [r1, 0xe8] | r1 = *((r1 + 0xe8));
| if (r1 != 0) {
0x00083e28 cbz r1, 0x83e5c |
0x00083e2a ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x00083e2c str r3, [r1, 0xc] | *((r1 + 0xc)) = r3;
0x00083e2e mov fp, r2 |
| label_14:
0x00083e30 cmp.w fp, 0 |
| if (fp > 0) {
0x00083e34 ble 0x83e5a |
0x00083e36 ldr.w r4, [r6, 0x10c] | r4 = *((r6 + 0x10c));
0x00083e3a clz r3, sl | r3 &= sl;
0x00083e3e lsrs r3, r3, 5 | r3 >>= 5;
0x00083e40 cmp r4, 0 |
0x00083e42 it eq |
| if (r4 != 0) {
0x00083e44 moveq r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x00083e46 cbz r3, 0x83e5a | goto label_19;
| }
0x00083e48 ldr r2, [r6, 0x10] | r2 = *((r6 + 0x10));
0x00083e4a mov r3, fp | r3 = fp;
0x00083e4c ldr.w r0, [r6, 0x110] | r0 = *((r6 + 0x110));
0x00083e50 mov r1, r6 | r1 = r6;
0x00083e52 ldr.w r2, [r2, r8] | r2 = *((r2 + r8));
0x00083e56 blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00083e58 mov sl, r0 | sl = r0;
| }
| label_19:
0x00083e5a ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
| }
| label_12:
0x00083e5c adds r5, 1 | r5++;
0x00083e5e cmp r5, r2 |
| if (r5 < r2) {
0x00083e60 blt.w 0x83f84 | goto label_82;
| }
0x00083e64 ldr.w r0, [sb] | r0 = *(sb);
0x00083e68 str.w sl, [sb, 0x24] | __asm ("str.w sl, [sb, 0x24]");
0x00083e6c cmp.w sl, 0 |
| if (sl == 0) {
0x00083e70 beq.w 0x84092 | goto label_83;
| }
0x00083e74 movs r4, 1 | r4 = 1;
0x00083e76 str r4, [r6, 0x40] | *((r6 + 0x40)) = r4;
| label_70:
0x00083e78 mov r1, sl | r1 = sl;
0x00083e7a bl 0x177a0 | r0 = fcn_000177a0 (r0, r1);
0x00083e7e cmp r0, 7 |
| if (r0 != 7) {
0x00083e80 bne.w 0x83b92 | goto label_6;
| }
0x00083e84 ldrsb.w r3, [sb, 0x94] | r3 = *((sb + 0x94));
0x00083e88 str.w r0, [sb, 0x24] | __asm ("str.w r0, [sb, 0x24]");
0x00083e8c cmp r3, 0 |
| if (r3 >= 0) {
0x00083e8e bge.w 0x83b92 | goto label_6;
| }
0x00083e92 ldr r5, [r6, 0x48] | r5 = *((r6 + 0x48));
0x00083e94 ldr r4, [sp, 0x24] | r4 = var_24h;
0x00083e96 and r5, r5, 7 | r5 &= 7;
| label_15:
0x00083e9a ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x00083e9c blx 0x87c0 | fcn_000087c0 ();
| label_22:
0x00083ea0 ldr.w r2, [pc, 0x4bc] |
0x00083ea4 ldr.w r3, [pc, 0x4b0] | r3 = *(0x84358);
0x00083ea8 add r2, pc | r2 = 0x10820c;
0x00083eaa ldr r3, [r2, r3] | r3 = imp.sinh;
0x00083eac ldr r2, [r3] | r2 = imp.sinh;
0x00083eae ldr r3, [sp, 0x144] | r3 = var_144h;
0x00083eb0 eors r2, r3 | r2 ^= r3;
0x00083eb2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00083eb6 bne.w 0x845f8 | goto label_84;
| }
0x00083eba mov r0, r5 | r0 = r5;
0x00083ebc add sp, 0x14c |
0x00083ebe pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_58:
0x00083ec2 ldrb.w r3, [sb, 0x96] | r3 = *((sb + 0x96));
0x00083ec6 lsls r4, r3, 0x1e | r4 = r3 << 0x1e;
| if (r4 != r3) {
0x00083ec8 bne.w 0x83fe2 | goto label_85;
| }
0x00083ecc ldr.w r3, [r6, 0xb8] | r3 = *((r6 + 0xb8));
0x00083ed0 cmp r3, 0 |
| if (r3 == 0) {
0x00083ed2 beq.w 0x84064 | goto label_86;
| }
| label_18:
0x00083ed6 ldrb.w r3, [r6, 0x5e] | r3 = *((r6 + 0x5e));
0x00083eda tst.w r3, 0x82 |
| if ((r3 & 0x82) != 0) {
0x00083ede beq 0x83ef6 |
0x00083ee0 ldrb.w r3, [r6, 0xb1] | r3 = *((r6 + 0xb1));
| if (r3 != 0) {
0x00083ee4 cbnz r3, 0x83ef6 | goto label_87;
| }
0x00083ee6 ldr.w r3, [sb, 0xc4] | r3 = *((sb + 0xc4));
| if (r3 == 0) {
0x00083eea cbz r3, 0x83ef6 | goto label_87;
| }
0x00083eec ldr r0, [r6] | r0 = *(r6);
0x00083eee add.w r1, sb, 0x88 | r1 = sb + 0x88;
0x00083ef2 bl 0xec28 | fcn_0000ec28 (r0, r1, r2);
| }
| label_87:
0x00083ef6 ldrb.w r3, [sb, 0x96] | r3 = *((sb + 0x96));
0x00083efa ldr.w r2, [r6, 0xb8] | r2 = *((r6 + 0xb8));
0x00083efe lsls r0, r3, 0x19 | r0 = r3 << 0x19;
0x00083f00 add.w r2, r2, 1 | r2++;
0x00083f04 str.w r2, [r6, 0xb8] | __asm ("str.w r2, [r6, 0xb8]");
0x00083f08 ittt pl |
| if (r0 < r3) {
0x00083f0a ldrpl r2, [r6, 0xc0] | r2 = *((r6 + 0xc0));
| }
| if (r0 < r3) {
0x00083f0e addpl r2, 1 | r2++;
| }
| if (r0 >= r3) {
0x00083f10 str.w r2, [r6, 0xc0] | __asm ("str.w r2, [r6, 0xc0]");
| }
0x00083f14 lsls r1, r3, 0x18 | r1 = r3 << 0x18;
0x00083f16 it mi |
| if (r1 >= r3) {
0x00083f18 ldrmi r2, [r6, 0xbc] | r2 = *((r6 + 0xbc));
| }
0x00083f1c mov.w r1, 0 | r1 = 0;
0x00083f20 itt mi |
| if (r1 >= r3) {
0x00083f22 addmi r2, 1 | r2++;
| }
| if (r1 >= r3) {
0x00083f24 strmi r2, [r6, 0xbc] | *((r6 + 0xbc)) = r2;
| }
0x00083f28 movs r2, 2 | r2 = 2;
0x00083f2a str.w r1, [sb, 0x20] | __asm ("str.w r1, [sb, 0x20]");
0x00083f2e strb.w r2, [sb, 0x95] | *((sb + 0x95)) = r2;
0x00083f32 b 0x83a76 | goto label_7;
| label_79:
0x00083f34 mov r0, r4 | r0 = r4;
0x00083f36 bl 0x5e214 | fcn_0005e214 (r0);
0x00083f3a b 0x83dac | goto label_8;
| label_69:
0x00083f3c mov r0, sb | r0 = sb;
0x00083f3e bl 0x2bc40 | r0 = fcn_0002bc40 (r0, r1);
0x00083f42 mov r4, r0 | r4 = r0;
0x00083f44 b 0x83b6e | goto label_9;
| label_63:
0x00083f46 movs r3, 0 | r3 = 0;
0x00083f48 ldr r6, [sp, 0x28] | r6 = var_28h;
0x00083f4a str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x00083f4e ldrd r2, r3, [sb, 0x88] | __asm ("ldrd r2, r3, [sb, 0x88]");
0x00083f52 str.w r5, [sb, 0x20] | __asm ("str.w r5, [sb, 0x20]");
0x00083f56 cmp r2, 1 |
0x00083f58 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r2 < 1) {
0x00083f5c blt.w 0x83e02 | goto label_10;
| }
0x00083f60 mov r1, sb | r1 = sb;
0x00083f62 mov r0, r6 | r0 = r6;
0x00083f64 bl 0xecc0 | fcn_0000ecc0 (r0, r1, r2, r3);
0x00083f68 ldrb.w r3, [r6, 0x55] | r3 = *((r6 + 0x55));
0x00083f6c cmp r3, 0 |
| if (r3 == 0) {
0x00083f6e beq.w 0x83e0c | goto label_11;
| }
| label_81:
0x00083f72 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00083f74 cmp r2, 0 |
0x00083f76 ittt gt |
| if (r2 <= 0) {
0x00083f78 movgt sl, 0 | sl = 0;
| }
| if (r2 <= 0) {
0x00083f7c movgt r5, sl | r5 = sl;
| }
| if (r2 > 0) {
0x00083f7e mov r7, sl | r7 = sl;
| }
| if (r2 <= 0) {
0x00083f80 ble.w 0x84088 | goto label_88;
| }
| label_82:
0x00083f84 ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x00083f86 lsl.w r8, r5, 4 | r8 = r5 << 4;
0x00083f8a add r3, r8 | r3 += r8;
0x00083f8c ldr r4, [r3, 4] | r4 = *((r3 + 4));
0x00083f8e cmp r4, 0 |
| if (r4 == 0) {
0x00083f90 beq.w 0x83e5c | goto label_12;
| }
0x00083f94 ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x00083f96 cmp r3, 0 |
| if (r3 == 0) {
0x00083f98 beq.w 0x83e20 | goto label_13;
| }
0x00083f9c ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00083f9e ldrb.w fp, [r4, 0xa] | fp = *((r4 + 0xa));
0x00083fa2 adds r2, r1, 1 | r2 = r1 + 1;
0x00083fa4 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x00083fa6 cmp.w fp, 0 |
| if (fp != 0) {
0x00083faa bne 0x84042 | goto label_89;
| }
0x00083fac mov r0, r4 | r0 = r4;
0x00083fae bl 0x12e84 | fcn_00012e84 (r0);
0x00083fb2 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00083fb4 ldr r3, [r3] | r3 = *(r3);
0x00083fb6 ldr.w r3, [r3, 0xe8] | r3 = *((r3 + 0xe8));
0x00083fba cmp r3, 0 |
| if (r3 == 0) {
0x00083fbc beq 0x8406a | goto label_90;
| }
0x00083fbe ldrb r2, [r4, 9] | r2 = *((r4 + 9));
0x00083fc0 ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x00083fc2 str.w fp, [r3, 0xc] | __asm ("str.w fp, [r3, 0xc]");
0x00083fc6 mov fp, r1 |
0x00083fc8 cmp r2, 0 |
| if (r2 == 0) {
0x00083fca beq.w 0x83e30 | goto label_14;
| }
0x00083fce ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x00083fd0 subs r2, 1 | r2--;
0x00083fd2 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x00083fd4 cmp r2, 0 |
| if (r2 != 0) {
0x00083fd6 bne.w 0x83e30 | goto label_14;
| }
0x00083fda mov r0, r4 | r0 = r4;
0x00083fdc bl 0xa14c | fcn_0000a14c (r0);
0x00083fe0 b 0x83e30 | goto label_14;
| label_85:
0x00083fe2 ldrsb.w r3, [sb, 0x94] | r3 = *((sb + 0x94));
0x00083fe6 movs r2, 0x11 | r2 = 0x11;
0x00083fe8 str.w r2, [sb, 0x24] | __asm ("str.w r2, [sb, 0x24]");
0x00083fec cmp r3, 0 |
| if (r3 < 0) {
0x00083fee blt.w 0x8410c | goto label_91;
| }
0x00083ff2 ldr r5, [r6, 0x48] | r5 = *((r6 + 0x48));
0x00083ff4 ldr r4, [sp, 0x24] | r4 = var_24h;
0x00083ff6 and r5, r5, 1 | r5 &= 1;
0x00083ffa b 0x83e9a | goto label_15;
| label_78:
0x00083ffc ldrd r2, r3, [sb, 0x88] | __asm ("ldrd r2, r3, [sb, 0x88]");
0x00084000 ldr r6, [sp, 0x28] | r6 = var_28h;
0x00084002 str.w r5, [sb, 0x20] | __asm ("str.w r5, [sb, 0x20]");
0x00084006 cmp r2, 1 |
0x00084008 sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r2 < 1) {
0x0008400c blt.w 0x83b62 | goto label_16;
| }
| label_68:
0x00084010 mov r1, sb | r1 = sb;
0x00084012 mov r0, r6 | r0 = r6;
0x00084014 bl 0xecc0 | fcn_0000ecc0 (r0, r1, r2, r3);
0x00084018 b 0x83b62 | goto label_16;
| label_80:
0x0008401a ldr r4, [sp, 0x24] | r4 = var_24h;
0x0008401c mov r2, r6 | r2 = r6;
| label_28:
0x0008401e movs r3, 0x64 | r3 = 0x64;
0x00084020 mov r5, r3 | r5 = r3;
0x00084022 str r3, [r2, 0x40] | *((r2 + 0x40)) = r3;
0x00084024 lsls r1, r7, 4 | r1 = r7 << 4;
| label_73:
0x00084026 movs r0, r0 |
0x00084028 adds r0, 0 | r0 += 0;
0x0008402a cmp r3, 0 |
| if (r3 != 0) {
0x0008402c bne.w 0x83be0 | goto label_17;
| }
0x00084030 ldrb.w r3, [r7, 0x58] | r3 = *((r7 + 0x58));
0x00084034 cmp r3, 0 |
| if (r3 != 0) {
0x00084036 bne.w 0x83be0 | goto label_17;
| }
0x0008403a mov r0, r7 | r0 = r7;
0x0008403c bl 0x21644 | fcn_00021644 (r0);
0x00084040 b 0x83be0 | goto label_17;
| label_89:
0x00084042 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00084044 ldr r3, [r3] | r3 = *(r3);
0x00084046 ldr.w r3, [r3, 0xe8] | r3 = *((r3 + 0xe8));
| if (r3 == 0) {
0x0008404a cbz r3, 0x84076 | goto label_92;
| }
0x0008404c ldr r1, [r3, 0xc] | r1 = *((r3 + 0xc));
0x0008404e subs r2, 1 | r2--;
0x00084050 str r7, [r3, 0xc] | *((r3 + 0xc)) = r7;
0x00084052 str r2, [r4, 0xc] | *((r4 + 0xc)) = r2;
0x00084054 mov fp, r1 |
0x00084056 cmp r2, 0 |
| if (r2 != 0) {
0x00084058 bne.w 0x83e30 | goto label_14;
| }
0x0008405c mov r0, r4 | r0 = r4;
0x0008405e bl 0xa14c | fcn_0000a14c (r0);
0x00084062 b 0x83e30 | goto label_14;
| label_86:
0x00084064 str.w r3, [r6, 0x128] | __asm ("str.w r3, aav.0x000000ff");
0x00084068 b 0x83ed6 | goto label_18;
| label_90:
0x0008406a ldrb r3, [r4, 9] | r3 = *((r4 + 9));
0x0008406c cmp r3, 0 |
| if (r3 == 0) {
0x0008406e beq.w 0x83e5a | goto label_19;
| }
0x00084072 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00084074 subs r1, 1 | r1--;
| label_92:
0x00084076 str r1, [r4, 0xc] | *((r4 + 0xc)) = r1;
0x00084078 cmp r1, 0 |
| if (r1 != 0) {
0x0008407a bne.w 0x83e5a | goto label_19;
| }
0x0008407e mov r0, r4 | r0 = r4;
0x00084080 bl 0xa14c | fcn_0000a14c (r0);
0x00084084 ldr r2, [r6, 0x14] | r2 = *((r6 + 0x14));
0x00084086 b 0x83e5c | goto label_12;
| label_88:
0x00084088 ldr.w r0, [sb] | r0 = *(sb);
0x0008408c movs r3, 0 | r3 = 0;
0x0008408e str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
| label_83:
0x00084092 movs r3, 0 | r3 = 0;
0x00084094 movs r4, 0x65 | r4 = 0x65;
0x00084096 mov sl, r3 | sl = r3;
0x00084098 b 0x83b7e | goto label_5;
| label_67:
0x0008409a str r3, [sp, 0x50] | var_50h = r3;
0x0008409c add r5, sp, 0x40 | r5 += var_40h;
0x0008409e strh.w r3, [sp, 0x54] | var_54h = r3;
0x000840a2 add.w r3, r4, r4, lsl 2 | r3 = r4 + (r4 << 2);
0x000840a6 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000840aa add.w r8, r7, r3, lsl 2 | r8 = r7 + (r3 << 2);
0x000840ae vldr d17, [pc, 0x298] | __asm ("vldr d17, aav.0x000000ff");
0x000840b2 vstr d16, [sp, 0x40] | __asm ("vstr d16, [sp, 0x40]");
0x000840b6 vstr d17, [sp, 0x48] | __asm ("vstr d17, [sp, 0x48]");
0x000840ba ldrsb.w r3, [r8, 1] | r3 = *((r8 + 1));
0x000840be adds r3, 0xf | r3 += 0xf;
0x000840c0 cmp r3, 0xd |
| if (r3 > 0xd) {
0x000840c2 bhi 0x84174 | goto label_93;
| }
| /* switch table (15 cases) at 0x840c8 */
0x000840c4 tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
| label_61:
0x000840e4 ldr r3, [sp, 0x1c] | r3 = x;
0x000840e6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 87));
0x000840ea cmp r3, 0 |
| if (r3 != 0) {
0x000840ec bne.w 0x83b54 | goto label_20;
| }
0x000840f0 ldr r0, [sp, 0x1c] | r0 = x;
0x000840f2 ldrb.w r3, [r0, 0x58] | r3 = *((r0 + 0x58));
0x000840f6 cmp r3, 0 |
| if (r3 != 0) {
0x000840f8 bne.w 0x83b54 | goto label_20;
| }
0x000840fc bl 0x21644 | fcn_00021644 (r0);
0x00084100 b 0x83b54 | goto label_20;
| label_77:
0x00084102 movs r3, 0 | r3 = 0;
0x00084104 cmp r2, r3 |
| if (r2 != r3) {
0x00084106 bne.w 0x83b08 | goto label_2;
| }
0x0008410a b 0x83cae | goto label_21;
| label_91:
0x0008410c mov r0, sb | r0 = sb;
0x0008410e bl 0x2bc40 | r0 = fcn_0002bc40 (r0, r1);
0x00084112 mov r4, r0 | r4 = r0;
0x00084114 b 0x83b92 | goto label_6;
| label_74:
0x00084116 mov r1, r5 | r1 = r5;
0x00084118 mov r0, r4 | r0 = r4;
0x0008411a bl 0x22990 | r0 = fcn_00022990 (r0, r1);
0x0008411e mov r3, r0 | r3 = r0;
0x00084120 mov r1, r8 | r1 = r8;
0x00084122 mov r0, r4 | r0 = r4;
0x00084124 str.w r3, [sb, 0x7c] | __asm ("str.w r3, [sb, 0x7c]");
0x00084128 bl 0x177a0 | r0 = fcn_000177a0 (r0, r1);
0x0008412c mov r5, r0 | r5 = r0;
0x0008412e str.w r0, [sb, 0x24] | __asm ("str.w r0, [sb, 0x24]");
0x00084132 b 0x83e9a | goto label_15;
| label_54:
0x00084134 ldr r1, [pc, 0x22c] |
0x00084136 movs r0, 0x15 | r0 = 0x15;
0x00084138 add r1, pc | r1 = 0x1084a0;
0x0008413a blx 0x8b60 | fcn_00008b60 ();
| do {
0x0008413e blx 0x83b8 | strerror_r ();
0x00084142 ldr r2, [pc, 0x224] |
0x00084144 add.w r4, r0, 0x14 | r4 = r0 + 0x14;
0x00084148 ldr r1, [pc, 0x220] |
0x0008414a movw r3, 0x5304 |
0x0008414e movt r3, 1 | r3 = 0x15304;
0x00084152 movs r0, 0x15 | r0 = 0x15;
0x00084154 add r2, pc | r2 = 0x1084c2;
0x00084156 str r4, [sp] | *(sp) = r4;
0x00084158 add r1, pc | r1 = 0x1084c8;
0x0008415a movs r5, 0x15 | r5 = 0x15;
0x0008415c blx 0x8b60 | fcn_00008b60 ();
0x00084160 b 0x83ea0 | goto label_22;
| label_55:
0x00084162 ldr r1, [pc, 0x20c] |
0x00084164 movs r0, 0x15 | r0 = 0x15;
0x00084166 add r1, pc | r1 = 0x1084dc;
0x00084168 blx 0x8b60 | fcn_00008b60 ();
0x0008416c b 0x8413e |
| } while (1);
| label_71:
0x0008416e mov r5, r4 | r5 = r4;
0x00084170 ldr r4, [sp, 0x24] | r4 = var_24h;
0x00084172 b 0x83e9a | goto label_15;
| label_93:
0x00084174 ldr.w r1, [r8, 0x10] | r1 = *((r8 + 0x10));
| label_24:
0x00084178 cmp r1, 0 |
| if (r1 == 0) {
0x0008417a beq.w 0x84554 | goto label_94;
| }
| label_27:
0x0008417e mov r0, r5 | r0 = r5;
0x00084180 blx 0x8764 | fcn_00008764 ();
| label_23:
0x00084184 ldrb r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00084186 lsls r0, r3, 0x1d | r0 = r3 << 0x1d;
| if (r0 != r3) {
0x00084188 bne.w 0x84538 | goto label_95;
| }
| label_30:
0x0008418c ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0008418e cmp r3, 0 |
| if (r3 == 0) {
0x00084190 beq.w 0x84554 | goto label_94;
| }
0x00084194 ldr r2, [r5, 0x10] | r2 = *((r5 + 0x10));
0x00084196 movs r1, 0 | r1 = 0;
0x00084198 strb r1, [r3, r2] | *((r3 + r2)) = r1;
0x0008419a ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
| if (r3 != 0) {
0x0008419c cbz r3, 0x841a6 |
0x0008419e ldrb r3, [r5, 0x15] | r3 = *((r5 + 0x15));
0x000841a0 lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
| if (r1 >= r3) {
0x000841a2 bpl.w 0x845ca | goto label_96;
| }
| }
0x000841a6 ldr r5, [r5, 4] | r5 = *((r5 + 4));
| label_31:
0x000841a8 ldrb.w r3, [sb, 0x96] | r3 = *((sb + 0x96));
0x000841ac ldr r2, [sp, 0x18] | r2 = var_18h;
0x000841ae and r3, r3, 0xc | r3 &= 0xc;
0x000841b2 ldrh r2, [r2, 0x38] | r2 = *((r2 + 0x38));
0x000841b4 cmp r3, 8 |
0x000841b6 and r1, r2, 0x9000 | r1 = r2 & 0x9000;
| if (r3 == 8) {
0x000841ba beq.w 0x844c6 | goto label_97;
| }
0x000841be asrs r3, r4, 0x1f | r3 = r4 >> 0x1f;
0x000841c0 cmp r1, 0 |
| if (r1 != 0) {
0x000841c2 bne.w 0x84558 | goto label_98;
| }
0x000841c6 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000841c8 strd r4, r3, [r2, 0x28] | __asm ("strd r4, r3, [r2, 0x28]");
0x000841cc movs r3, 4 | r3 = 4;
0x000841ce strh r3, [r2, 0x38] | *((r2 + 0x38)) = r3;
| label_32:
0x000841d0 ldrb.w r2, [r8] | r2 = *(r8);
0x000841d4 ldr r3, [pc, 0x19c] |
0x000841d6 ldr r4, [sp, 0x18] | r4 = var_18h;
0x000841d8 add r3, pc | r3 = 0x108550;
0x000841da add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x000841de movs r2, 0 | r2 = 0;
0x000841e0 add.w r0, r4, 0x50 | r0 = r4 + 0x50;
0x000841e4 ldr.w r1, [r3, 0xd90] | r1 = *((r3 + 0xd90));
0x000841e8 movs r3, 1 | r3 = 1;
0x000841ea strd r3, r2, [sp] | __asm ("strd r3, r2, [sp]");
0x000841ee mov.w r2, -1 | r2 = -1;
0x000841f2 mov.w r3, -1 | r3 = -1;
0x000841f6 bl 0x29280 | fcn_00029280 (r0, r1, r2, r3, r4, r5, r6);
0x000841fa ldrh.w r1, [r4, 0x88] | r1 = *((r4 + 0x88));
0x000841fe ldr.w r2, [r8, 4] | r2 = *((r8 + 4));
0x00084202 tst.w r1, 0x9000 |
0x00084206 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00084208 asr.w r3, r2, 0x1f | r3 = r2 >> 0x1f;
| if ((r1 & 0x9000) != 0) {
0x0008420c bne.w 0x84590 | goto label_99;
| }
0x00084210 str r3, [r1, 0x7c] | *((r1 + 0x7c)) = r3;
0x00084212 movs r3, 4 | r3 = 4;
0x00084214 str r2, [r1, 0x78] | *((r1 + 0x78)) = r2;
0x00084216 strh.w r3, [r1, 0x88] | *((r1 + 0x88)) = r3;
| label_37:
0x0008421a ldr r3, [sp, 0x18] | r3 = var_18h;
0x0008421c ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
0x00084220 ldrh.w r1, [r3, 0xb0] | r1 = *((r3 + 0xb0));
0x00084224 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00084226 tst.w r1, 0x9000 |
0x0008422a ldr r1, [sp, 0x18] | r1 = var_18h;
| if ((r1 & 0x9000) != 0) {
0x0008422c bne.w 0x84586 | goto label_100;
| }
0x00084230 str.w r3, [r1, 0xa4] | __asm ("str.w r3, [r1, 0xa4]");
0x00084234 movs r3, 4 | r3 = 4;
0x00084236 str.w r2, [r1, 0xa0] | __asm ("str.w r2, [r1, 0xa0]");
0x0008423a strh.w r3, [r1, 0xb0] | *((r1 + 0xb0)) = r3;
| label_36:
0x0008423e ldr r3, [sp, 0x18] | r3 = var_18h;
0x00084240 ldr.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x00084244 ldrh.w r1, [r3, 0xd8] | r1 = *((r3 + 0xd8));
0x00084248 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x0008424a tst.w r1, 0x9000 |
0x0008424e ldr r1, [sp, 0x18] | r1 = var_18h;
| if ((r1 & 0x9000) != 0) {
0x00084250 bne.w 0x8457c | goto label_101;
| }
0x00084254 str.w r3, [r1, 0xcc] | __asm ("str.w r3, [r1, 0xcc]");
0x00084258 movs r3, 4 | r3 = 4;
0x0008425a str.w r2, [r1, 0xc8] | __asm ("str.w r2, [r1, 0xc8]");
0x0008425e strh.w r3, [r1, 0xd8] | *((r1 + 0xd8)) = r3;
| label_35:
0x00084262 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00084264 ldrh.w r2, [r8, 2] | r2 = *((r8 + 2));
0x00084268 ldrh.w r3, [r3, 0x128] | r3 = *((r3 + 0x128));
0x0008426c ands r3, r3, 0x9000 | r3 &= 0x9000;
| if (r3 != r3) {
0x00084270 bne.w 0x8456e | goto label_102;
| }
0x00084274 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00084276 str.w r3, [r1, 0x11c] | __asm ("str.w r3, aav.0x000000ff");
0x0008427a movs r3, 4 | r3 = 4;
0x0008427c str.w r2, [r1, 0x118] | __asm ("str.w r2, aav.0x000000ff");
0x00084280 strh.w r3, [r1, 0x128] | *((r1 + 0x128)) = r3;
| label_34:
0x00084284 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00084286 ldrh.w r3, [r3, 0x150] | r3 = *((r3 + 0x150));
0x0008428a tst.w r3, 0x9000 |
| if ((r3 & 0x9000) != 0) {
0x0008428e bne.w 0x84562 | goto label_103;
| }
0x00084292 ldr r2, [sp, 0x18] | r2 = var_18h;
0x00084294 movs r3, 1 | r3 = 1;
0x00084296 strh.w r3, [r2, 0x150] | *((r2 + 0x150)) = r3;
| label_33:
0x0008429a ldr r2, [sp, 0x38] | r2 = var_38h;
0x0008429c mov r1, r5 | r1 = r5;
0x0008429e ldr r3, [pc, 0xd8] | r3 = *(0x8437a);
0x000842a0 ldr r0, [sp, 0x18] | r0 = var_18h;
0x000842a2 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000842a4 mov.w r2, -1 | r2 = -1;
0x000842a8 adds r0, 0xf0 | r0 += 0xf0;
0x000842aa str r3, [sp, 4] | var_4h = r3;
0x000842ac movs r3, 1 | r3 = 1;
0x000842ae str r3, [sp] | *(sp) = r3;
0x000842b0 mov.w r3, -1 | r3 = -1;
0x000842b4 bl 0x29280 | fcn_00029280 (r0, r1, r2, r3, r4, r5, r6);
0x000842b8 movs r3, 8 | r3 = 8;
| label_29:
0x000842ba strh.w r3, [sb, 0x90] | *((sb + 0x90)) = r3;
0x000842be ldr r3, [sp, 0x20] | r3 = var_20h;
0x000842c0 str.w r3, [sb, 0x78] | __asm ("str.w r3, [sb, 0x78]");
0x000842c4 ldr r3, [sp, 0x1c] | r3 = x;
0x000842c6 ldrb.w r3, [r3, 0x57] | r3 = *((r3 + 0x57));
0x000842ca cmp r3, 0 |
| if (r3 == 0) {
0x000842cc beq.w 0x844bc | goto label_104;
| }
0x000842d0 ldrd r2, r3, [sb, 0x88] | __asm ("ldrd r2, r3, [sb, 0x88]");
0x000842d4 movs r1, 7 | r1 = 7;
0x000842d6 str.w r1, [sb, 0x24] | __asm ("str.w r1, [sb, 0x24]");
0x000842da cmp r2, 1 |
0x000842dc sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
| if (r2 < 1) {
0x000842e0 blt.w 0x83b62 | goto label_16;
| }
0x000842e4 mov r1, sb | r1 = sb;
0x000842e6 mov r0, r6 | r0 = r6;
0x000842e8 bl 0xecc0 | fcn_0000ecc0 (r0, r1, r2, r3);
0x000842ec b 0x83b62 | goto label_16;
0x000842ee ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000842f2 mov r0, r5 | r0 = r5;
0x000842f4 ldr r1, [pc, 0x84] |
0x000842f6 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000842f8 add r1, pc | r1 = 0x108678;
0x000842fa blx 0x8564 | fcn_00008564 ();
0x000842fe b 0x84184 | goto label_23;
0x00084300 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x00084304 ldrh r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00084306 lsls r0, r3, 0x1e | r0 = r3 << 0x1e;
| if (r0 >= r3) {
0x00084308 bpl.w 0x845d4 | goto label_105;
| }
0x0008430c ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x0008430e b 0x84178 | goto label_24;
0x00084310 ldr.w r7, [r8, 0x10] | r7 = *((r8 + 0x10));
0x00084314 mov r0, r5 | r0 = r5;
0x00084316 ldr r1, [pc, 0x68] |
0x00084318 ldrh r2, [r7, 6] | r2 = *((r7 + 6));
0x0008431a add r1, pc | r1 = 0x1086a0;
0x0008431c blx 0x8564 | fcn_00008564 ();
0x00084320 ldrh r3, [r7, 6] | r3 = *((r7 + 6));
0x00084322 cmp r3, 0 |
| if (r3 == 0) {
0x00084324 beq.w 0x845bc | goto label_106;
| }
0x00084328 ldr r3, [pc, 0x58] |
0x0008432a add.w fp, r7, 0x10 |
0x0008432e mov.w sl, 0 | sl = 0;
0x00084332 str r4, [sp, 0x3c] | var_3ch = r4;
0x00084334 add r3, pc | r3 = 0x1086bc;
0x00084336 str r3, [sp, 0x30] | var_30h = r3;
0x00084338 ldr r3, [pc, 0x4c] |
0x0008433a add r3, pc | r3 = 0x1086c6;
0x0008433c str r3, [sp, 0x28] | var_28h = r3;
0x0008433e ldr r3, [pc, 0x4c] |
0x00084340 add r3, pc | r3 = 0x1086d2;
0x00084342 str r3, [sp, 0x2c] | var_2ch = r3;
0x00084344 b 0x843b6 |
| while (r2 >= r1) {
0x00084390 ldr r2, [pc, 0x280] |
0x00084392 lsls r3, r1, 0x1e | r3 = r1 << 0x1e;
0x00084394 add r2, pc | r2 = 0x1089ac;
| if (r3 >= r1) {
0x00084396 bpl 0x843e4 | goto label_107;
| }
| label_25:
0x00084398 ldr r1, [pc, 0x27c] |
0x0008439a add r1, pc | r1 = 0x1089b6;
| label_26:
0x0008439c mov r3, r1 | r3 = r1;
0x0008439e ldr r1, [pc, 0x27c] |
0x000843a0 mov r0, r5 | r0 = r5;
0x000843a2 str r4, [sp] | *(sp) = r4;
0x000843a4 add.w sl, sl, 1 | sl++;
0x000843a8 add r1, pc | r1 = 0x1089ca;
0x000843aa blx 0x8564 | fcn_00008564 ();
0x000843ae ldrh r3, [r7, 6] | r3 = *((r7 + 6));
0x000843b0 cmp sl, r3 |
| if (sl >= r3) {
0x000843b2 bge.w 0x845ba | goto label_108;
| }
0x000843b6 ldr r3, [fp, 4]! | r3 = *(arg_4h);
0x000843ba cmp r3, 0 |
| if (r3 == 0) {
0x000843bc beq.w 0x8459a | goto label_109;
| }
0x000843c0 ldr r4, [r3] | r4 = *(r3);
0x000843c2 ldr r1, [sp, 0x28] | r1 = var_28h;
0x000843c4 mov r0, r4 | r0 = r4;
0x000843c6 blx 0x8ad0 | fcn_00008ad0 ();
0x000843ca ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000843cc cmp r0, 0 |
0x000843ce it eq |
| if (r0 != 0) {
0x000843d0 moveq r4, r3 | r4 = r3;
| }
| label_38:
0x000843d2 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x000843d4 ldrb.w r1, [r2, sl] | r1 = *((r2 + sl));
0x000843d8 lsls r2, r1, 0x1f | r2 = r1 << 0x1f;
0x000843da bpl 0x84390 |
| }
0x000843dc ldr r2, [pc, 0x240] |
0x000843de lsls r3, r1, 0x1e | r3 = r1 << 0x1e;
0x000843e0 add r2, pc | r2 = 0x108a04;
| if (r3 < r1) {
0x000843e2 bmi 0x84398 | goto label_25;
| }
| label_107:
0x000843e4 ldr r1, [pc, 0x23c] |
0x000843e6 add r1, pc | r1 = 0x108a0e;
0x000843e8 b 0x8439c | goto label_26;
0x000843ea ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x000843ee mov r0, r5 | r0 = r5;
0x000843f0 ldr r1, [pc, 0x234] |
0x000843f2 ldrsb.w r3, [r2] | r3 = *(r2);
0x000843f6 add r1, pc | r1 = 0x108a22;
0x000843f8 ldr r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x000843fa blx 0x8564 | fcn_00008564 ();
0x000843fe b 0x84184 | goto label_23;
0x00084400 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00084404 ldr r1, [r3] | r1 = *(r3);
0x00084406 b 0x84178 | goto label_24;
0x00084408 ldr r1, [pc, 0x220] |
0x0008440a add r1, pc | r1 = 0x108a3a;
0x0008440c b 0x8417e | goto label_27;
0x0008440e ldr r1, [pc, 0x220] |
0x00084410 mov r0, r5 | r0 = r5;
0x00084412 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x00084416 add r1, pc | r1 = 0x108a4c;
0x00084418 blx 0x8564 | fcn_00008564 ();
0x0008441c b 0x84184 | goto label_23;
0x0008441e ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x00084422 mov r0, r5 | r0 = r5;
0x00084424 ldr r3, [pc, 0x20c] |
0x00084426 ldr r1, [pc, 0x210] |
0x00084428 ldrb r7, [r2, 4] | r7 = *((r2 + 4));
0x0008442a add r3, pc | r3 = 0x108a62;
0x0008442c ldr r2, [r2] | r2 = *(r2);
0x0008442e add r1, pc | r1 = 0x108a6c;
0x00084430 add.w r3, r3, r7, lsl 2 | r3 += (r7 << 2);
0x00084434 ldr.w r3, [r3, 0xd80] | r3 = *((r3 + 0xd80));
0x00084438 blx 0x8564 | fcn_00008564 ();
0x0008443c b 0x84184 | goto label_23;
0x0008443e ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00084442 mov r0, r5 | r0 = r5;
0x00084444 ldr r1, [pc, 0x1f4] |
0x00084446 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00084448 add r1, pc | r1 = 0x108a88;
0x0008444a ldrsb.w r3, [r2] | r3 = *(r2);
0x0008444e ldr r2, [r2, 0x20] | r2 = *((r2 + 0x20));
0x00084450 blx 0x8564 | fcn_00008564 ();
0x00084454 b 0x84184 | goto label_23;
0x00084456 ldr.w r2, [r8, 0x10] | r2 = *((r8 + 0x10));
0x0008445a ldr.w fp, [r2] | fp = *(r2);
0x0008445e cmp.w fp, 0 |
| if (fp == 0) {
0x00084462 beq 0x84486 | goto label_110;
| }
0x00084464 ldr r3, [pc, 0x1d8] |
0x00084466 mov sl, r2 | sl = r2;
0x00084468 movs r7, 1 | r7 = 1;
0x0008446a movs r2, 0x5b | r2 = 0x5b;
0x0008446c add r3, pc | r3 = 0x108ab0;
0x0008446e str r3, [sp, 0x28] | var_28h = r3;
| do {
0x00084470 ldr r3, [sl, 4]! | r3 = *((sl += 4));
0x00084474 adds r7, 1 | r7++;
0x00084476 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00084478 mov r0, r5 | r0 = r5;
0x0008447a blx 0x8564 | fcn_00008564 ();
0x0008447e cmp fp, r7 |
0x00084480 mov.w r2, 0x2c | r2 = 0x2c;
0x00084484 bhs 0x84470 |
| } while (fp >= r7);
| label_110:
0x00084486 ldr r1, [pc, 0x1bc] |
0x00084488 movs r2, 1 | r2 = 1;
0x0008448a mov r0, r5 | r0 = r5;
0x0008448c add r1, pc | r1 = 0x108ad6;
0x0008448e blx 0x849c | fcn_0000849c ();
0x00084492 b 0x84184 | goto label_23;
0x00084494 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x00084498 mov r0, r5 | r0 = r5;
0x0008449a ldr r1, [pc, 0x1ac] |
0x0008449c ldrd r2, r3, [r3] | __asm ("ldrd r2, r3, [r3]");
0x000844a0 add r1, pc | r1 = 0x108aee;
0x000844a2 blx 0x8564 | fcn_00008564 ();
0x000844a6 b 0x84184 | goto label_23;
0x000844a8 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x000844ac mov r0, r5 | r0 = r5;
0x000844ae ldr r1, [pc, 0x19c] |
0x000844b0 ldrd r2, r3, [r3] | __asm ("ldrd r2, r3, [r3]");
0x000844b4 add r1, pc | r1 = 0x108b06;
0x000844b6 blx 0x8564 | fcn_00008564 ();
0x000844ba b 0x84184 | goto label_23;
| label_104:
0x000844bc ldr r4, [sp, 0x24] | r4 = var_24h;
0x000844be mov r2, r6 | r2 = r6;
0x000844c0 str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x000844c4 b 0x8401e | goto label_28;
| label_97:
0x000844c6 ldr.w r2, [r8, 4] | r2 = *((r8 + 4));
0x000844ca asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000844cc cmp r1, 0 |
| if (r1 != 0) {
0x000844ce bne 0x845b2 | goto label_111;
| }
0x000844d0 ldr r1, [sp, 0x18] | r1 = var_18h;
0x000844d2 str r3, [r1, 0x2c] | *((r1 + 0x2c)) = r3;
0x000844d4 movs r3, 4 | r3 = 4;
0x000844d6 str r2, [r1, 0x28] | *((r1 + 0x28)) = r2;
0x000844d8 strh r3, [r1, 0x38] | *((r1 + 0x38)) = r3;
| label_41:
0x000844da ldr r3, [sp, 0x18] | r3 = var_18h;
0x000844dc ldr.w r2, [r8, 8] | r2 = *((r8 + 8));
0x000844e0 ldrh.w r1, [r3, 0x60] | r1 = *((r3 + 0x60));
0x000844e4 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000844e6 tst.w r1, 0x9000 |
0x000844ea ldr r1, [sp, 0x18] | r1 = var_18h;
| if ((r1 & 0x9000) != 0) {
0x000844ec bne 0x845a8 | goto label_112;
| }
0x000844ee str r3, [r1, 0x54] | *((r1 + 0x54)) = r3;
0x000844f0 movs r3, 4 | r3 = 4;
0x000844f2 str r2, [r1, 0x50] | *((r1 + 0x50)) = r2;
0x000844f4 strh.w r3, [r1, 0x60] | *((r1 + 0x60)) = r3;
| label_40:
0x000844f8 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000844fa ldr.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x000844fe ldrh.w r1, [r3, 0x88] | r1 = *((r3 + 0x88));
0x00084502 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x00084504 tst.w r1, 0x9000 |
0x00084508 ldr r1, [sp, 0x18] | r1 = var_18h;
| if ((r1 & 0x9000) != 0) {
0x0008450a bne 0x8459e | goto label_113;
| }
0x0008450c str r3, [r1, 0x7c] | *((r1 + 0x7c)) = r3;
0x0008450e movs r3, 4 | r3 = 4;
0x00084510 str r2, [r1, 0x78] | *((r1 + 0x78)) = r2;
0x00084512 strh.w r3, [r1, 0x88] | *((r1 + 0x88)) = r3;
| label_39:
0x00084516 ldr r2, [sp, 0x38] | r2 = var_38h;
0x00084518 mov r1, r5 | r1 = r5;
0x0008451a ldr r3, [pc, 0x134] | r3 = *(0x84652);
0x0008451c ldr r0, [sp, 0x18] | r0 = var_18h;
0x0008451e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00084520 mov.w r2, -1 | r2 = -1;
0x00084524 adds r0, 0xa0 | r0 += 0xa0;
0x00084526 str r3, [sp, 4] | var_4h = r3;
0x00084528 movs r3, 1 | r3 = 1;
0x0008452a str r3, [sp] | *(sp) = r3;
0x0008452c mov.w r3, -1 | r3 = -1;
0x00084530 bl 0x29280 | fcn_00029280 (r0, r1, r2, r3, r4, r5, r6);
0x00084534 movs r3, 4 | r3 = 4;
0x00084536 b 0x842ba | goto label_29;
| label_95:
0x00084538 ldr r0, [sp, 0x1c] | r0 = x;
0x0008453a ldrb.w r3, [r0, 0x57] | r3 = *((r0 + 0x57));
0x0008453e cmp r3, 0 |
| if (r3 != 0) {
0x00084540 bne.w 0x8418c | goto label_30;
| }
0x00084544 ldrb.w r3, [r0, 0x58] | r3 = *((r0 + 0x58));
0x00084548 cmp r3, 0 |
| if (r3 != 0) {
0x0008454a bne.w 0x8418c | goto label_30;
| }
0x0008454e bl 0x21644 | fcn_00021644 (r0);
0x00084552 b 0x8418c | goto label_30;
| label_94:
0x00084554 movs r5, 0 | r5 = 0;
0x00084556 b 0x841a8 | goto label_31;
| label_98:
0x00084558 ldr r0, [sp, 0x20] | r0 = var_20h;
0x0008455a mov r2, r4 | r2 = r4;
0x0008455c bl 0x1699c | fcn_0001699c (r0, r1, r2);
0x00084560 b 0x841d0 | goto label_32;
| label_103:
0x00084562 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00084564 add.w r0, r3, 0x140 | r0 = r3 + 0x140;
0x00084568 bl 0x16944 | fcn_00016944 (r0);
0x0008456c b 0x8429a | goto label_33;
| label_102:
0x0008456e ldr r1, [sp, 0x18] | r1 = var_18h;
0x00084570 movs r3, 0 | r3 = 0;
0x00084572 add.w r0, r1, 0x118 | r0 = r1 + 0x118;
0x00084576 bl 0x1699c | fcn_0001699c (r0, r1, r2);
0x0008457a b 0x84284 | goto label_34;
| label_101:
0x0008457c add.w r0, r1, 0xc8 | r0 = r1 + 0xc8;
0x00084580 bl 0x1699c | fcn_0001699c (r0, r1, r2);
0x00084584 b 0x84262 | goto label_35;
| label_100:
0x00084586 add.w r0, r1, 0xa0 | r0 = r1 + 0xa0;
0x0008458a bl 0x1699c | fcn_0001699c (r0, r1, r2);
0x0008458e b 0x8423e | goto label_36;
| label_99:
0x00084590 add.w r0, r1, 0x78 | r0 = r1 + 0x78;
0x00084594 bl 0x1699c | fcn_0001699c (r0, r1, r2);
0x00084598 b 0x8421a | goto label_37;
| label_109:
0x0008459a ldr r4, [sp, 0x30] | r4 = var_30h;
0x0008459c b 0x843d2 | goto label_38;
| label_113:
0x0008459e add.w r0, r1, 0x78 | r0 = r1 + 0x78;
0x000845a2 bl 0x1699c | fcn_0001699c (r0, r1, r2);
0x000845a6 b 0x84516 | goto label_39;
| label_112:
0x000845a8 add.w r0, r1, 0x50 | r0 = r1 + 0x50;
0x000845ac bl 0x1699c | fcn_0001699c (r0, r1, r2);
0x000845b0 b 0x844f8 | goto label_40;
| label_111:
0x000845b2 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000845b4 bl 0x1699c | fcn_0001699c (r0, r1, r2);
0x000845b8 b 0x844da | goto label_41;
| label_108:
0x000845ba ldr r4, [sp, 0x3c] | r4 = var_3ch;
| label_106:
0x000845bc ldr r1, [pc, 0x94] |
0x000845be movs r2, 1 | r2 = 1;
0x000845c0 mov r0, r5 | r0 = r5;
0x000845c2 add r1, pc | r1 = 0x108c1a;
0x000845c4 blx 0x849c | fcn_0000849c ();
0x000845c8 b 0x84184 | goto label_23;
| label_96:
0x000845ca mov r0, r5 | r0 = r5;
0x000845cc bl 0x22b88 | r0 = fcn_00022b88 (r0);
0x000845d0 mov r5, r0 | r5 = r0;
0x000845d2 b 0x841a8 | goto label_31;
| label_105:
0x000845d4 tst.w r3, 0x24 |
| if ((r3 & 0x24) == 0) {
0x000845d8 bne 0x845e8 |
0x000845da lsls r1, r3, 0x1c | r1 = r3 << 0x1c;
| if (r1 < r3) {
0x000845dc bmi 0x84602 | goto label_114;
| }
0x000845de lsls r7, r3, 0x1f | r7 = r3 << 0x1f;
| if (r7 < r3) {
0x000845e0 bmi 0x845fc | goto label_115;
| }
0x000845e2 ldr r1, [pc, 0x74] |
0x000845e4 add r1, pc | r1 = 0x108c42;
0x000845e6 b 0x8417e | goto label_27;
| }
0x000845e8 ldr r1, [pc, 0x70] |
0x000845ea mov r0, r5 | r0 = r5;
0x000845ec ldrd r2, r3, [r2] | __asm ("ldrd r2, r3, [r2]");
0x000845f0 add r1, pc | r1 = 0x108c50;
0x000845f2 blx 0x8564 | fcn_00008564 ();
0x000845f6 b 0x84184 | goto label_23;
| label_84:
0x000845f8 blx 0x883c | fcn_0000883c ();
| label_115:
0x000845fc ldr r1, [pc, 0x60] |
0x000845fe add r1, pc | r1 = 0x108c62;
0x00084600 b 0x8417e | goto label_27;
| label_114:
0x00084602 ldr r1, [pc, 0x60] |
0x00084604 mov r0, r5 | r0 = r5;
0x00084606 ldrd r2, r3, [r2] | __asm ("ldrd r2, r3, [r2]");
0x0008460a add r1, pc | r1 = 0x108c74;
0x0008460c blx 0x8564 | fcn_00008564 ();
0x00084610 b 0x84184 | goto label_23;
0x000976d6 ldr r2, [sp, 0xb0] | r2 = var_b0h;
0x000976d8 str r2, [sp, 0x40] | var_40h = r2;
| if (r3 == 0) {
0x000976da cbnz r3, 0x976f4 |
0x000976dc cmp r5, 0 |
| if (r5 < 0) {
0x000976de blt.w 0x9785e | goto label_116;
| }
0x000976e2 add.w r3, r5, r5, lsl 1 | r3 = r5 + (r5 << 1);
0x000976e6 add.w r3, r1, r3, lsl 2 | r3 = r1 + (r3 << 2);
0x000976ea ldr r3, [r3, 0x1c] | r3 = *((r3 + 0x1c));
0x000976ec cmp r4, r3 |
0x000976ee it ge |
| if (r4 < r3) {
0x000976f0 movge r4, r3 | r4 = r3;
| }
0x000976f2 b 0x976f6 |
| } else {
0x000976f4 movs r4, 0 | r4 = 0;
| }
| label_42:
0x000976f6 mov r1, r4 | r1 = r4;
0x000976f8 mov r0, sl | r0 = sl;
0x000976fa bl 0x42654 | fcn_00042654 (r0, r1);
0x000976fe ldr r3, [sp, 0x40] | r3 = var_40h;
0x00097700 mov r7, r0 | r7 = r0;
0x00097702 str r0, [r3] | *(r3) = r0;
0x00097704 cmp r0, 0 |
| if (r0 == 0) {
0x00097706 beq.w 0x9783a | goto label_117;
| }
0x0009770a ldr r2, [sp, 0x30] | r2 = var_30h;
0x0009770c str r6, [r0, 0x28] | *((r0 + 0x28)) = r6;
0x0009770e ubfx r3, r2, 1, 1 | r3 = (r2 >> 1) & ((1 << 1) - 1);
0x00097712 str r3, [r0, 0x34] | *((r0 + 0x34)) = r3;
0x00097714 ubfx r3, r2, 4, 1 | r3 = (r2 >> 4) & ((1 << 1) - 1);
0x00097718 strb.w r3, [r0, 0x38] | *((r0 + 0x38)) = r3;
0x0009771c mov r3, r2 | r3 = r2;
0x0009771e lsls r3, r3, 0x1a | r3 <<= 0x1a;
0x00097720 and r2, r2, 2 | r2 &= 2;
0x00097724 str r2, [sp, 0x44] | var_44h = r2;
| if (r3 >= r3) {
0x00097726 bmi 0x9773a |
0x00097728 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x0009772c cmp r3, 0 |
| if (r3 != 0) {
0x0009772e bne 0x9782e | goto label_118;
| }
0x00097730 mov r1, r0 | r1 = r0;
0x00097732 add.w r0, sl, 0x24 | r0 = sl + 0x24;
0x00097736 bl 0x49b50 | fcn_00049b50 (r0, r1);
| }
0x0009773a ldr.w sb, [sl, 0x24] | sb = *((sl + 0x24));
0x0009773e cmp.w sb, 0 |
| if (sb != 0) {
0x00097742 bne 0x9782e | goto label_118;
| }
0x00097744 cmp r5, 0 |
| if (r5 < 0) {
0x00097746 blt.w 0x978a2 | goto label_119;
| }
0x0009774a subs r4, 1 | r4--;
| if (r4 < 1) {
0x0009774c bmi 0x97784 | goto label_44;
| }
0x0009774e add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x00097752 add.w r6, r8, r5, lsl 2 | r6 = r8 + (r5 << 2);
0x00097756 add.w r5, r4, r4, lsl 1 | r5 = r4 + (r4 << 1);
0x0009775a lsls r5, r5, 2 | r5 <<= 2;
0x0009775c add.w r8, r7, 0x50 | r8 = r7 + 0x50;
| do {
0x00097760 ldr r1, [r6, 0x20] | r1 = *((r6 + 0x20));
0x00097762 add r1, r5 | r1 += r5;
0x00097764 ldr r3, [r1, 4] | r3 = *((r1 + 4));
| if (r3 != 0) {
0x00097766 cbz r3, 0x97770 |
0x00097768 mov r2, r8 | r2 = r8;
0x0009776a mov r0, sl | r0 = sl;
0x0009776c bl 0x95468 | fcn_00095468 (r0, r1, r2);
| }
0x00097770 subs r4, 1 | r4--;
0x00097772 subs r5, 0xc | r5 -= 0xc;
0x00097774 adds r3, r4, 1 | r3 = r4 + 1;
0x00097776 add.w r8, r8, 0x60 | r8 += 0x60;
0x0009777a bne 0x97760 |
| } while (r3 != r4);
| label_43:
0x0009777c ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
0x00097780 cmp r3, 0 |
| if (r3 != 0) {
0x00097782 bne 0x9782e | goto label_118;
| }
| label_44:
0x00097784 ldr r5, [r7, 0x30] | r5 = *((r7 + 0x30));
0x00097786 subs r5, 1 | r5--;
0x00097788 cmp r5, 0 |
| if (r5 <= 0) {
0x0009778a ble 0x977c2 | goto label_120;
| }
| do {
0x0009778c mov r1, r5 | r1 = r5;
0x0009778e mov r0, r7 | r0 = r7;
0x00097790 bl 0x11d94 | r0 = fcn_00011d94 (r0, r1, r2);
0x00097794 mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00097796 cbz r0, 0x977be |
0x00097798 ldr.w r2, [sl, 0x24] | r2 = *((sl + 0x24));
| if (r2 == 0) {
0x0009779c cbnz r2, 0x977b2 |
0x0009779e add.w r3, r0, r0, lsl 1 | r3 = r0 + (r0 << 1);
0x000977a2 mov r0, sl | r0 = sl;
0x000977a4 lsls r3, r3, 5 | r3 <<= 5;
0x000977a6 add.w r1, r3, 0x50 | r1 = r3 + 0x50;
0x000977aa add r3, r7 | r3 += r7;
0x000977ac ldr r3, [r3, 0x70] | r3 = *((r3 + 0x70));
0x000977ae add r1, r7 | r1 += r7;
0x000977b0 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| }
0x000977b2 mov r3, r5 | r3 = r5;
0x000977b4 mov r2, r4 | r2 = r4;
0x000977b6 mov r1, r7 | r1 = r7;
0x000977b8 mov r0, sl | r0 = sl;
0x000977ba bl 0x11e74 | fcn_00011e74 (r0, r1, r2, r3);
| }
0x000977be subs r5, 1 | r5--;
0x000977c0 bne 0x9778c |
| } while (r5 != 1);
| label_120:
0x000977c2 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x000977c4 ldrb.w r5, [r7, 0x38] | r5 = *((r7 + 0x38));
0x000977c8 ldrh r0, [r3, 4] | r0 = *((r3 + 4));
0x000977ca lsls r1, r0, 1 | r1 = r0 << 1;
0x000977cc adds r3, r1, r0 | r3 = r1 + r0;
0x000977ce add.w r3, r7, r3, lsl 5 | r3 = r7 + (r3 << 5);
0x000977d2 ldr r4, [r3, 0x5c] | r4 = *((r3 + 0x5c));
0x000977d4 clz r2, r4 | r2 &= r4;
0x000977d8 lsrs r2, r2, 5 | r2 >>= 5;
0x000977da strb r2, [r7, 0x10] | *((r7 + 0x10)) = r2;
0x000977dc ldrd r8, sb, [r3, 0xa0] | __asm ("ldrd r8, sb, [r3, 0xa0]");
0x000977e0 strd r8, sb, [r7, 0x40] | __asm ("strd r8, sb, [r7, 0x40]");
0x000977e4 cmp r5, 0 |
| if (r5 == 0) {
0x000977e6 beq 0x9786c | goto label_121;
| }
0x000977e8 ldr.w r2, [sl, 0x24] | r2 = *((sl + 0x24));
0x000977ec cmp r2, 0 |
| if (r2 != 0) {
0x000977ee bne 0x9786c | goto label_121;
| }
| if (r4 == 0) {
0x000977f0 cbz r4, 0x9783a | goto label_117;
| }
| label_118:
0x0009782e mov r0, r7 | r0 = r7;
0x00097830 bl 0x17d50 | fcn_00017d50 (r0);
0x00097834 ldr r2, [sp, 0x40] | r2 = var_40h;
0x00097836 movs r3, 0 | r3 = 0;
0x00097838 str r3, [r2] | *(r2) = r3;
| do {
| label_117:
0x0009783a ldr.w r2, [pc, 0x8b0] | r2 = *(0x000980ec);
0x0009783e ldr.w r3, [pc, 0x8a4] | r3 = *(0x980e6);
0x00097842 add r2, pc | r2 += pc;
0x00097844 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00097846 ldr r2, [r3] | r2 = *(0x980e6);
0x00097848 ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x0009784a eors r2, r3 | r2 ^= r3;
0x0009784c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00097850 bne.w 0x980dc | goto label_122;
| }
0x00097854 add sp, 0x74 |
0x00097856 vpop {d8} | __asm ("vpop {d8}");
0x0009785a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_116:
0x0009785e ldr r4, [r1, 0x10] | r4 = *((r1 + 0x10));
0x00097860 ldr.w r3, [sl, 0xc] | r3 = *((sl + 0xc));
0x00097864 cmp r3, 0 |
0x00097866 it ne |
| if (r3 == 0) {
0x00097868 addne r4, 1 | r4++;
| }
0x0009786a b 0x976f6 | goto label_42;
| label_121:
0x0009786c cmp r4, 0 |
0x0009786e beq 0x9783a |
| } while (r4 == 0);
0x00097870 ldr.w r2, [pc, 0x87c] |
0x00097874 ldr.w r3, [pc, 0x86c] | r3 = *(0x980e4);
0x00097878 add r2, pc | r2 = 0x12f96c;
0x0009787a ldr r3, [r2, r3] | r3 = imp.sinh;
0x0009787c ldr r2, [r3] | r2 = imp.sinh;
0x0009787e ldr r3, [sp, 0x6c] | r3 = var_6ch;
0x00097880 eors r2, r3 | r2 ^= r3;
0x00097882 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00097886 bne.w 0x980dc | goto label_122;
| }
| label_119:
0x000978a2 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x000978a6 add.w r2, r8, 0x18 | r2 = r8 + 0x18;
0x000978aa ldr.w r4, [sl, 0xc] | r4 = *((sl + 0xc));
0x000978ae str r2, [sp, 8] | var_8h = r2;
0x000978b0 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000978b4 add.w r3, r8, r3, lsl 2 | r3 = r8 + (r3 << 2);
0x000978b8 adds r3, 0x18 | r3 += 0x18;
0x000978ba str r3, [sp, 0x48] | var_48h = r3;
0x000978bc cmp r4, 0 |
| if (r4 != 0) {
0x000978be beq 0x979ae |
0x000978c0 ldr r3, [sp, 0x14] | r3 = var_14h;
| if (r3 != 0) {
0x000978c2 cbz r3, 0x978cc |
0x000978c4 ldr r3, [sp, 0x30] | r3 = var_30h;
0x000978c6 lsls r6, r3, 0x1c | r6 = r3 << 0x1c;
| if (r6 >= r3) {
0x000978c8 bpl.w 0x97fcc | goto label_123;
| }
| }
0x000978cc add.w r3, r4, 0x10 | r3 = r4 + 0x10;
0x000978d0 mov r0, r4 | r0 = r4;
0x000978d2 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000978d4 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000978d6 bl 0x41b80 | fcn_00041b80 (r0, r1, r2, r3, r4, r5);
0x000978da ldr.w r5, [sl, 0xc] | r5 = *((sl + 0xc));
0x000978de str.w r0, [sl, 0x24] | __asm ("str.w r0, [sl, 0x24]");
0x000978e2 ldr r4, [r5, 0x10] | r4 = *((r5 + 0x10));
0x000978e4 cmp r4, 0 |
| if (r4 != 0) {
0x000978e6 beq 0x97982 |
0x000978e8 add.w sb, r4, 0x28 | sb = r4 + 0x28;
0x000978ec mov r0, sb | r0 = sb;
0x000978ee blx 0x85b4 | fcn_000085b4 ();
0x000978f2 movs r2, 0 | r2 = 0;
0x000978f4 mov r3, r0 | r3 = r0;
0x000978f6 mov r1, r4 | r1 = r4;
0x000978f8 mov r0, r5 | r0 = r5;
0x000978fa mov r5, r3 | r5 = r3;
0x000978fc bl 0x1dba0 | fcn_0001dba0 (r0, r1, r2);
0x00097900 ldr.w r6, [sl, 0x24] | r6 = *((sl + 0x24));
0x00097904 cmp r6, 0 |
| if (r6 != 0) {
0x00097906 bne 0x97982 | goto label_124;
| }
0x00097908 mov r0, sb | r0 = sb;
0x0009790a ldr r4, [r4, 0x10] | r4 = *((r4 + 0x10));
0x0009790c blx 0x85b4 | fcn_000085b4 ();
0x00097910 movs r1, 0 | r1 = 0;
0x00097912 str r0, [sp, 0xc] | var_ch = r0;
0x00097914 movs r0, 0xc | r0 = 0xc;
0x00097916 blx 0x8240 | r0 = fcn_00008240 ();
0x0009791a mov r8, r0 | r8 = r0;
0x0009791c cmp r0, 0 |
| if (r0 == 0) {
0x0009791e beq.w 0x980ce | goto label_125;
| }
0x00097922 subs r4, 0x29 | r4 -= 0x29;
0x00097924 adds r3, r5, 1 | r3 = r5 + 1;
0x00097926 str r6, [r0, 4] | *((r0 + 4)) = r6;
0x00097928 subs r4, r4, r5 | r4 -= r5;
0x0009792a str r6, [r0, 8] | *((r0 + 8)) = r6;
0x0009792c adds r6, r0, 4 | r6 = r0 + 4;
0x0009792e add r3, sb | r3 += sb;
0x00097930 str r3, [r0] | *(r0) = r3;
| label_51:
0x00097932 movs r5, 0 | r5 = 0;
0x00097934 vdup.32 d8, r4 | __asm ("vdup.32 d8, r4");
0x00097938 mov r3, sb | r3 = sb;
0x0009793a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0009793c add.w r1, r7, 0x94 | r1 = r7 + 0x94;
0x00097940 add.w r0, sl, 0x24 | r0 = sl + 0x24;
0x00097944 str.w r5, [r7, 0x98] | __asm ("str.w r5, [r7, 0x98]");
0x00097948 bl 0x4b3a0 | fcn_0004b3a0 (r0, r1, r2, r3);
0x0009794c add.w r1, r7, 0xa0 | r1 = r7 + 0xa0;
0x00097950 vst1.32 {d8}, [r6] | __asm ("vst1.32 {d8}, [r6]");
0x00097954 ldr.w r0, [r8] | r0 = *(r8);
0x00097958 str.w r8, [r7, 0x5c] | __asm ("str.w r8, [r7, 0x5c]");
0x0009795c bl 0xcb98 | fcn_0000cb98 (r0, r1);
0x00097960 ldr r3, [sp, 0x44] | r3 = var_44h;
0x00097962 add.w r1, r7, 0x50 | r1 = r7 + 0x50;
0x00097966 strd r0, r5, [r7, 0x68] | __asm ("strd r0, r5, [r7, 0x68]");
0x0009796a str.w r4, [r7, 0x80] | __asm ("str.w r4, [r7, 0x80]");
0x0009796e cmp r3, 0 |
| if (r3 != 0) {
0x00097970 bne.w 0x980a6 | goto label_126;
| }
0x00097974 ldr.w r3, [sl, 0x24] | r3 = *((sl + 0x24));
| if (r3 != 0) {
0x00097978 cbnz r3, 0x97982 | goto label_124;
| }
0x0009797a ldr.w r0, [sl] | r0 = *(sl);
0x0009797e bl 0x11ab8 | fcn_00011ab8 (r0, r1);
| }
| label_124:
0x00097982 ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
| label_52:
0x00097984 lsls r5, r3, 0x1e | r5 = r3 << 0x1e;
| if (r5 < r3) {
0x00097986 bmi.w 0x97fc0 | goto label_127;
| }
0x0009798a ldr.w r3, [sl] | r3 = *(sl);
0x0009798e ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x00097990 cmp r3, 1 |
| if (r3 == 1) {
0x00097992 beq.w 0x980b8 | goto label_128;
| }
0x00097996 ldr.w r3, [pc, 0x75c] | r3 = *(0x000980f4);
0x0009799a add r3, pc | r3 += pc;
| label_49:
0x0009799c ldr r2, [sp, 8] | r2 = var_8h;
0x0009799e str r3, [r7, 0x70] | *((r7 + 0x70)) = r3;
0x000979a0 ldr r3, [sp, 0x48] | r3 = var_48h;
0x000979a2 cmp r3, r2 |
0x000979a4 it hi |
| if (r3 <= r2) {
0x000979a6 movhi sb, 1 | sb = 1;
| }
| if (r3 > r2) {
0x000979aa bhi 0x979b8 | goto label_129;
| }
0x000979ac b 0x9777c | goto label_43;
| }
0x000979ae ldr r3, [sp, 0x48] | r3 = var_48h;
0x000979b0 ldr r2, [sp, 8] | r2 = var_8h;
0x000979b2 cmp r3, r2 |
| if (r3 < r2) {
0x000979b4 bls.w 0x97784 | goto label_44;
| }
| label_129:
0x000979b8 ldr.w r3, [pc, 0x73c] | r3 = *(0x000980f8);
0x000979bc mov r8, sb | r8 = sb;
0x000979be ldr.w ip, [sp, 8] | ip = var_8h;
0x000979c2 mov fp, sl |
0x000979c4 add r3, pc | r3 += pc;
0x000979c6 str r3, [sp, 0x4c] | var_4ch = r3;
0x000979c8 ldr.w r3, [pc, 0x730] | r3 = *(0x000980fc);
0x000979cc add r3, pc | r3 += pc;
0x000979ce strd r7, r3, [sp, 0x50] | __asm ("strd r7, r3, [sp, 0x50]");
| label_46:
0x000979d2 ldr.w r7, [ip, 4] | r7 = *((ip + 4));
0x000979d6 subs r3, r7, 1 | r3 = r7 - 1;
0x000979d8 str r3, [sp, 0xc] | var_ch = r3;
| if (r3 < r7) {
0x000979da bmi.w 0x97b62 | goto label_130;
| }
0x000979de ldr r2, [sp, 0x50] | r2 = var_50h;
0x000979e0 add.w r3, r8, r8, lsl 1 | r3 = r8 + (r8 << 1);
0x000979e4 str r7, [sp, 0x38] | var_38h = r7;
0x000979e6 str.w ip, [sp, 0x18] | __asm ("str.w ip, [var_18h]");
0x000979ea str.w r8, [sp, 0x3c] | __asm ("str.w r8, [var_3ch]");
0x000979ee add.w r3, r2, r3, lsl 5 | r3 = r2 + (r3 << 5);
0x000979f2 adds r3, 0xa0 | r3 += 0xa0;
0x000979f4 str r3, [sp, 8] | var_8h = r3;
| label_45:
0x000979f6 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000979f8 ldr r6, [r3, 8] | r6 = *((r3 + 8));
0x000979fa ldr r3, [sp, 0xc] | r3 = var_ch;
0x000979fc add.w sb, r3, r3, lsl 1 | sb = r3 + (r3 << 1);
0x00097a00 ldr r3, [sp, 8] | r3 = var_8h;
0x00097a02 add.w r4, r6, sb, lsl 2 | r4 = r6 + (sb << 2);
0x00097a06 sub.w r2, r3, 0x50 | r2 = r3 - 0x50;
0x00097a0a ldr r3, [sp, 0x14] | r3 = var_14h;
0x00097a0c str r2, [sp, 0x10] | var_10h = r2;
0x00097a0e cmp r3, 0 |
| if (r3 == 0) {
0x00097a10 beq.w 0x97b36 | goto label_131;
| }
0x00097a14 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00097a16 movs r2, 0x60 | r2 = 0x60;
0x00097a18 movs r1, 0 | r1 = 0;
0x00097a1a blx 0x839c | fcn_0000839c ();
0x00097a1e ldr.w r5, [fp, 0x3c] | r5 = *(arg_3ch);
0x00097a22 ldr r3, [sp, 8] | r3 = var_8h;
0x00097a24 str r4, [r3, -0x50] | *((r3 - 0x50)) = r4;
0x00097a28 cmp r5, 0 |
| if (r5 == 0) {
0x00097a2a beq.w 0x97d6e | goto label_132;
| }
| label_47:
0x00097a2e ldr.w sl, [fp, 0x24] | sl = *(arg_24h);
0x00097a32 cmp.w sl, 0 |
| if (sl != 0) {
0x00097a36 bne.w 0x97b42 | goto label_133;
| }
0x00097a3a ldr.w r2, [r6, sb, lsl 2] | offset_1 = sb << 2;
| r2 = *((r6 + offset_1));
0x00097a3e movs r1, 1 | r1 = 1;
0x00097a40 mov r0, r5 | r0 = r5;
0x00097a42 blx 0x8250 | fcn_00008250 ();
0x00097a46 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00097a48 movs r1, 2 | r1 = 2;
0x00097a4a ldr r2, [sp, 0x14] | r2 = var_14h;
0x00097a4c mov r0, r5 | r0 = r5;
0x00097a4e str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00097a52 blx 0x8a94 | fcn_00008a94 ();
0x00097a56 mov r0, r5 | r0 = r5;
0x00097a58 blx 0x8728 | r0 = fcn_00008728 ();
0x00097a5c cmp r0, 0x64 |
0x00097a5e itt ne |
| if (r0 == 0x64) {
0x00097a60 movne r6, 1 | r6 = 1;
| }
| if (r0 == 0x64) {
0x00097a62 strne sl, [sp, 0x20] | var_20h = sl;
| }
0x00097a64 adr r0, 0x80 | r0 = 0x80;
| if (r0 == 0x64) {
0x00097a66 beq.w 0x97db2 | goto label_134;
| }
| label_48:
0x00097a6a mov r0, r5 | r0 = r5;
0x00097a6c blx 0x81f8 | fcn_000081f8 ();
0x00097a70 movs r1, 2 | r1 = 2;
0x00097a72 str.w r0, [fp, 0x24] | __asm ("str.w r0, [arg_24h]");
0x00097a76 mov r0, r5 | r0 = r5;
0x00097a78 blx 0x8304 | fcn_00008304 ();
0x00097a7c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00097a7e mov r0, fp | r0 = fp;
0x00097a80 ldr r4, [sp, 8] | r4 = var_8h;
0x00097a82 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00097a84 cmp r3, r6 |
0x00097a86 it gt |
| if (r3 <= r6) {
0x00097a88 movgt r6, r3 | r6 = r3;
| }
0x00097a8a ldr r3, [sp, 0x20] | r3 = var_20h;
0x00097a8c add.w r6, r6, -1 | r6 += -1;
0x00097a90 it gt |
| if (r3 <= r6) {
0x00097a92 movgt r3, 0 | r3 = 0;
| }
0x00097a94 str r6, [r4, -0x48] | *((r4 - 0x48)) = r6;
0x00097a98 str r3, [sp, 0x20] | var_20h = r3;
0x00097a9a bl 0x94e40 | fcn_00094e40 (r0, r1);
0x00097a9e ldr r3, [r4, -0x44] | r3 = *((r4 - 0x44));
0x00097aa2 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00097aa4 str r3, [sp, 0x34] | var_34h = r3;
0x00097aa6 and r2, r2, 8 | r2 &= 8;
0x00097aaa str r2, [sp, 0x2c] | var_2ch = r2;
0x00097aac cmp r3, 0 |
| if (r3 == 0) {
0x00097aae beq.w 0x97cb8 | void (*0x97cb8)() ();
| }
| label_131:
0x00097b36 ldr r3, [r4, 4] | r3 = *((r4 + 4));
| if (r3 != 0) {
0x00097b38 cbz r3, 0x97b42 |
0x00097b3a mov r1, r4 | r1 = r4;
0x00097b3c mov r0, fp | r0 = fp;
0x00097b3e bl 0x95468 | fcn_00095468 (r0, r1, r2);
| }
| label_133:
0x00097b42 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00097b44 ldr r2, [sp, 8] | r2 = var_8h;
0x00097b46 subs r3, 1 | r3--;
0x00097b48 str r3, [sp, 0xc] | var_ch = r3;
0x00097b4a adds r3, 1 | r3++;
0x00097b4c add.w r2, r2, 0x60 | r2 += 0x60;
0x00097b50 str r2, [sp, 8] | var_8h = r2;
| if (r3 != 1) {
0x00097b52 bne.w 0x979f6 | goto label_45;
| }
0x00097b56 ldr r7, [sp, 0x38] | r7 = var_38h;
0x00097b58 ldr.w r8, [sp, 0x3c] | r8 = var_3ch;
0x00097b5c ldr.w ip, [sp, 0x18] | ip = var_18h;
0x00097b60 add r8, r7 | r8 += r7;
| label_130:
0x00097b62 ldr r3, [sp, 0x48] | r3 = var_48h;
0x00097b64 add.w ip, ip, 0xc |
0x00097b68 cmp r3, ip |
| if (r3 > ip) {
0x00097b6a bhi.w 0x979d2 | goto label_46;
| }
0x00097b6e ldr r7, [sp, 0x50] | r7 = var_50h;
0x00097b70 mov sl, fp | sl = fp;
0x00097b72 b 0x9777c | goto label_43;
| label_132:
0x00097d6e ldr.w r3, [fp] | r3 = *(fp);
0x00097d72 ldr r0, [pc, 0x38c] |
0x00097d74 ldrd r1, r2, [r3, 4] | __asm ("ldrd r1, r2, [r3, 4]");
0x00097d78 add r0, pc | r0 = 0x12fe7e;
0x00097d7a blx 0x8644 | fcn_00008644 ();
0x00097d7e ldr.w r2, [fp, 0x24] | r2 = *(arg_24h);
0x00097d82 mov r5, r0 | r5 = r0;
| if (r2 != 0) {
0x00097d84 cbnz r2, 0x97da6 | goto label_135;
| }
0x00097d86 cmp r0, 0 |
| if (r0 == 0) {
0x00097d88 beq 0x97e34 | goto label_136;
| }
0x00097d8a mov r1, fp | r1 = fp;
0x00097d8c movs r3, 5 | r3 = 5;
0x00097d8e ldr r0, [r1], 0x3c | r0 = *(r1);
| r1 += 0x3c;
0x00097d92 ldr r0, [r0] | r0 = *(r0);
0x00097d94 strd r1, r2, [sp] | __asm ("strd r1, r2, [sp]");
0x00097d98 mov.w r2, -1 | r2 = -1;
0x00097d9c mov r1, r5 | r1 = r5;
0x00097d9e blx 0x8280 | fcn_00008280 ();
0x00097da2 str.w r0, [fp, 0x24] | __asm ("str.w r0, [arg_24h]");
| do {
| label_135:
0x00097da6 mov r0, r5 | r0 = r5;
0x00097da8 blx 0x8404 | fcn_00008404 ();
0x00097dac ldr.w r5, [fp, 0x3c] | r5 = *(arg_3ch);
0x00097db0 b 0x97a2e | goto label_47;
| label_134:
0x00097db2 mov r1, sl | r1 = sl;
0x00097db4 mov r0, r5 | r0 = r5;
0x00097db6 blx 0x81b4 | r0 = fcn_000081b4 ();
0x00097dba asrs r3, r0, 0x1f | r3 = r0 >> 0x1f;
0x00097dbc lsrs r6, r0, 1 | r6 = r0 >> 1;
0x00097dbe orr.w r6, r6, r3, lsl 31 | r6 |= (r3 << 31);
0x00097dc2 and r3, r0, 1 | r3 = r0 & 1;
0x00097dc6 str r3, [sp, 0x20] | var_20h = r3;
0x00097dc8 b 0x97a6a | goto label_48;
| label_136:
0x00097e34 movs r3, 7 | r3 = 7;
0x00097e36 str.w r3, [fp, 0x24] | __asm ("str.w r3, [arg_24h]");
0x00097e3a b 0x97da6 |
| } while (1);
| label_127:
0x00097fc0 ldr r3, [pc, 0x144] |
0x00097fc2 add r3, pc | r3 = 0x1300ce;
0x00097fc4 b 0x9799c | goto label_49;
| label_123:
0x00097fcc ldr r3, [sp, 0x24] | r3 = var_24h;
0x00097fce ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x00097fd0 cmp r3, 0 |
| if (r3 <= 0) {
0x00097fd2 ble.w 0x980d8 | goto label_137;
| }
0x00097fd6 ldr r5, [sp, 0x14] | r5 = var_14h;
0x00097fd8 movs r0, 0xd | r0 = 0xd;
0x00097fda adds r2, r5, r3 | r2 = r5 + r3;
| do {
0x00097fdc ldrb r3, [r2, -0x1]! | r3 = *((r2 -= 0x1));
0x00097fe0 cmp r5, r2 |
0x00097fe2 eor.w r3, r3, r0, lsl 3 | r3 ^= (r0 << 3);
0x00097fe6 eor.w r0, r0, r3 | r0 ^= r3;
0x00097fea bne 0x97fdc |
| } while (r5 != r2);
| label_53:
0x00097fec bl 0xb1e8c | fcn_000b1e8c (r0, r1, r2);
0x00097ff0 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00097ff2 ldr.w r5, [r3, r1, lsl 2] | offset_2 = r1 << 2;
| r5 = *((r3 + offset_2));
0x00097ff6 cmp r5, 0 |
| if (r5 == 0) {
0x00097ff8 beq 0x980c4 | goto label_138;
| }
0x00097ffa ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x00097ffe ldr.w sb, [sp, 0x24] | sb = var_24h;
0x00098002 b 0x9800a |
| while (sb != r3) {
| label_50:
0x00098004 ldr r5, [r5] | r5 = *(r5);
0x00098006 cmp r5, 0 |
| if (r5 == 0) {
0x00098008 beq 0x980c4 | goto label_138;
| }
0x0009800a ldr r6, [r5, 0x14] | r6 = *((r5 + 0x14));
0x0009800c adds r3, r6, 1 | r3 = r6 + 1;
0x0009800e cmp sb, r3 |
0x00098010 bne 0x98004 |
| }
0x00098012 mov r2, sb | r2 = sb;
0x00098014 mov r1, r8 | r1 = r8;
0x00098016 add.w r0, r5, 0x28 | r0 = r5 + 0x28;
0x0009801a blx 0x8214 | r0 = sysconf ();
0x0009801e cmp r0, 0 |
| if (r0 != 0) {
0x00098020 bne 0x98004 | goto label_50;
| }
0x00098022 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00098024 adds r6, 0x2a | r6 += 0x2a;
0x00098026 ldr r2, [sp, 0x24] | r2 = var_24h;
0x00098028 mov fp, r0 |
0x0009802a subs r3, r3, r6 | r3 -= r6;
0x0009802c add.w r0, r3, 0x16 | r0 = r3 + 0x16;
0x00098030 str r3, [sp, 0x10] | var_10h = r3;
0x00098032 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x00098034 str r2, [sp, 0xc] | var_ch = r2;
0x00098036 blx 0x8240 | r0 = fcn_00008240 ();
0x0009803a mov r8, r0 | r8 = r0;
0x0009803c cmp r0, 0 |
| if (r0 == 0) {
0x0009803e beq 0x980be | goto label_139;
| }
0x00098040 add.w r3, r8, 0xc | r3 = r8 + 0xc;
0x00098044 adds r1, r5, r6 | r1 = r5 + r6;
0x00098046 mov r0, r3 | r0 = r3;
0x00098048 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0009804a mov sb, r3 | sb = r3;
0x0009804c blx 0x8610 | fcn_00008610 ();
0x00098050 rsb.w r2, r6, 0xc | r2 = 0xc - r6;
0x00098054 mov r0, r4 | r0 = r4;
0x00098056 add r2, r8 | r2 += r8;
0x00098058 mov r1, r5 | r1 = r5;
0x0009805a bl 0x1dba0 | fcn_0001dba0 (r0, r1, r2);
0x0009805e ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x00098060 mov r6, r8 | r6 = r8;
0x00098062 ldr r4, [sp, 0x10] | r4 = var_10h;
0x00098064 str.w fp, [sl, 0x24] | __asm ("str.w fp, [sl, 0x24]");
0x00098068 orr r3, r3, 1 | r3 |= 1;
0x0009806c str sb, [r6], 4 | *(r6) = sb;
| r6 += 4;
0x00098070 add r4, r0 | r4 += r0;
0x00098072 ldr.w sb, [sp, 0x14] | sb = var_14h;
| do {
0x00098076 str r3, [r7, 0x54] | *((r7 + 0x54)) = r3;
0x00098078 b 0x97932 | goto label_51;
| label_126:
0x000980a6 ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x000980a8 mov r0, sl | r0 = sl;
0x000980aa orr r3, r3, 2 | r3 |= 2;
0x000980ae str r3, [r7, 0x54] | *((r7 + 0x54)) = r3;
0x000980b0 bl 0x49bf8 | fcn_00049bf8 (r0, r1);
0x000980b4 ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x000980b6 b 0x97984 | goto label_52;
| label_128:
0x000980b8 ldr r3, [pc, 0x50] |
0x000980ba add r3, pc | r3 = 0x1301ca;
0x000980bc b 0x9799c | goto label_49;
| label_139:
0x000980be movs r3, 7 | r3 = 7;
0x000980c0 str.w r3, [sl, 0x24] | __asm ("str.w r3, [sl, 0x24]");
| label_138:
0x000980c4 ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x000980c6 orr r3, r3, 1 | r3 |= 1;
0x000980ca str r3, [r7, 0x54] | *((r7 + 0x54)) = r3;
0x000980cc b 0x97984 | goto label_52;
| label_125:
0x000980ce movs r3, 7 | r3 = 7;
0x000980d0 str.w r3, [sl, 0x24] | __asm ("str.w r3, [sl, 0x24]");
0x000980d4 ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x000980d6 b 0x97984 | goto label_52;
| label_137:
0x000980d8 movs r0, 0xd | r0 = 0xd;
0x000980da b 0x97fec | goto label_53;
| label_122:
0x000980dc blx 0x883c | fcn_0000883c ();
0x000980e0 asrs r4, r3, 0x17 | r4 = r3 >> 0x17;
0x000980e2 movs r3, r0 | r3 = r0;
0x000980e4 lsls r4, r2, 0xd | r4 = r2 << 0xd;
0x000980e6 movs r0, r0 |
0x000980e8 asrs r6, r2, 0x12 | r6 = r2 >> 0x12;
0x000980ea movs r3, r0 | r3 = r0;
0x000980ec asrs r6, r2, 0x11 | r6 = r2 >> 0x11;
0x000980ee movs r3, r0 | r3 = r0;
0x000980f0 asrs r0, r4, 0x10 | r0 = r4 >> 0x10;
0x000980f2 movs r3, r0 | r3 = r0;
0x000980f4 bvs 0x98076 | __asm ("bvs aav.0x000000ff");
| } while (1);
0x000980f6 vtbx.8 d29, {d31, fpinst2, mvfr0, mvfr1}, d13 | __asm ("vtbx.8 d29, {d31, fpinst2, mvfr0, mvfr1}, d13");
0x000980fa invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x1ed80 */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_str_appendchar () | void sqlite3_str_appendchar (int16_t arg1, int16_t arg2, int16_t arg3) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0001ed80 push {r3, r4, r5, r6, r7, lr} |
0x0001ed82 mov r6, r2 | r6 = r2;
0x0001ed84 ldr r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x0001ed86 asrs r5, r1, 0x1f | r5 = r1 >> 0x1f;
0x0001ed88 mov r4, r0 | r4 = r0;
0x0001ed8a ldr r7, [r0, 8] | r7 = *((r0 + 8));
0x0001ed8c adds.w ip, r2, r1 |
0x0001ed90 adc r5, r5, 0 | __asm ("adc r5, r5, 0");
0x0001ed94 cmp ip, r7 |
0x0001ed96 sbcs r5, r5, 0 | __asm ("sbcs r5, r5, 0");
| if (ip >= r7) {
0x0001ed9a bge 0x1edc4 | goto label_1;
| }
0x0001ed9c mov r3, r1 | r3 = r1;
0x0001ed9e subs r1, 1 | r1--;
0x0001eda0 cmp r3, 0 |
| if (r3 <= 0) {
0x0001eda2 ble 0x1edc2 | goto label_2;
| }
| label_0:
0x0001eda4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0001eda6 adds r0, r2, 1 | r0 = r2 + 1;
0x0001eda8 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x0001edaa strb r6, [r3, r2] | *((r3 + r2)) = r6;
0x0001edac subs r3, r1, 1 | r3 = r1 - 1;
| if (r1 == 0) {
0x0001edae cbz r1, 0x1edc2 | goto label_2;
| }
| do {
0x0001edb0 ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0001edb2 subs r3, 1 | r3--;
0x0001edb4 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0001edb6 adds r2, r3, 1 | r2 = r3 + 1;
0x0001edb8 add.w r5, r1, 1 | r5 = r1 + 1;
0x0001edbc str r5, [r4, 0x10] | *((r4 + 0x10)) = r5;
0x0001edbe strb r6, [r0, r1] | *((r0 + r1)) = r6;
0x0001edc0 bne 0x1edb0 |
| } while (r2 != r3);
| do {
| label_2:
0x0001edc2 pop {r3, r4, r5, r6, r7, pc} |
| label_1:
0x0001edc4 bl 0x1ec40 | r0 = fcn_0001ec40 (r0, r1);
0x0001edc8 cmp r0, 0 |
0x0001edca ble 0x1edc2 |
| } while (r0 <= 0);
0x0001edcc ldr r2, [r4, 0x10] | r2 = *((r4 + 0x10));
0x0001edce subs r1, r0, 1 | r1 = r0 - 1;
0x0001edd0 b 0x1eda4 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0x1ff64 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.sqlite3_str_vappendf () | void sqlite3_str_vappendf (int16_t arg_1h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_bp_4h;
| int16_t var_3h;
| int16_t var_1h;
| int16_t var_4h_4;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_10h_2;
| int16_t var_14h;
| int16_t var_18h_2;
| int16_t var_1ch_3;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_45h;
| int16_t var_46h;
| int16_t var_47h;
| int16_t var_0h;
| int16_t var_8ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0001ff64 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001ff68 mov r4, r1 | r4 = r1;
0x0001ff6a vpush {d8} | __asm ("vpush {d8}");
0x0001ff6e sub sp, 0x94 |
0x0001ff70 str r0, [sp, 0x14] | var_14h = r0;
0x0001ff72 ldrb r3, [r0, 0x15] | r3 = *((r0 + 0x15));
0x0001ff74 ldr.w r0, [pc, 0x698] |
0x0001ff78 ldr.w r1, [pc, 0x698] | r1 = *(0x20614);
0x0001ff7c add r0, pc | r0 = 0x40590;
0x0001ff7e ldr r1, [r0, r1] |
0x0001ff80 ldr r1, [r1] | r1 = *(0x40590);
0x0001ff82 str r1, [sp, 0x8c] | var_8ch = r1;
0x0001ff84 mov.w r1, 0 | r1 = 0;
0x0001ff88 ands r1, r3, 2 | r1 = r3 & 2;
0x0001ff8c str r2, [sp, 0xc] | var_ch = r2;
0x0001ff8e str r1, [sp, 0x20] | var_20h = r1;
| if (r1 == r3) {
0x0001ff90 beq.w 0x2096a | goto label_75;
| }
0x0001ff94 mov r3, r2 | r3 = r2;
0x0001ff96 ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0001ff9a str r3, [sp, 0xc] | var_ch = r3;
0x0001ff9c movs r3, 1 | r3 = 1;
0x0001ff9e str r2, [sp, 0x34] | var_34h = r2;
0x0001ffa0 str r3, [sp, 0x20] | var_20h = r3;
| label_19:
0x0001ffa2 ldrb r3, [r4] | r3 = *(r4);
0x0001ffa4 cmp r3, 0 |
| if (r3 == 0) {
0x0001ffa6 beq.w 0x20690 | goto label_8;
| }
0x0001ffaa ldr.w r2, [pc, 0x66c] | r2 = *(0x00020618);
0x0001ffae mov.w sl, 0 | sl = 0;
0x0001ffb2 add r2, pc | r2 += pc;
0x0001ffb4 str r2, [sp, 0x30] | var_30h = r2;
| label_6:
0x0001ffb6 cmp r3, 0x25 |
| if (r3 != 0x25) {
0x0001ffb8 bne.w 0x20742 | goto label_76;
| }
| label_9:
0x0001ffbc ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0001ffbe adds r4, 1 | r4++;
0x0001ffc0 cmp r3, 0 |
| if (r3 == 0) {
0x0001ffc2 beq.w 0x2076e | goto label_77;
| }
| label_10:
0x0001ffc6 movs r6, 0 | r6 = 0;
0x0001ffc8 mov.w r2, -1 | r2 = -1;
0x0001ffcc mov r7, r6 | r7 = r6;
0x0001ffce str r6, [sp, 0x24] | var_24h = r6;
0x0001ffd0 strd r6, r6, [sp, 0x18] | __asm ("strd r6, r6, [var_1ch_3]");
0x0001ffd4 str r6, [sp, 8] | var_8h_2 = r6;
0x0001ffd6 str r6, [sp, 0x10] | var_10h_2 = r6;
0x0001ffd8 str r2, [sp, 4] | var_4h_4 = r2;
| label_0:
0x0001ffda sub.w r2, r3, 0x20 | r2 = r3 - 0x20;
0x0001ffde cmp r2, 0x4c |
| if (r2 <= 0x4c) {
0x0001ffe0 bhi 0x20080 |
| /* switch table (78 cases) at 0x1ffe6 */
0x0001ffe2 tbh [pc, r2, lsl 1] | __asm ("tbh [pc, r2, lsl 1]");
| }
| label_3:
0x00020080 mov fp, r7 |
| label_13:
0x00020082 movs r0, 0 | r0 = 0;
| label_1:
0x00020084 ldr r2, [sp, 0x30] | r2 = var_30h;
0x00020086 movs r5, 0 | r5 = 0;
0x00020088 add.w r2, r2, 0x184 | r2 += 0x184;
0x0002008c b 0x20098 |
| while (r1 != r3) {
0x0002008e adds r5, 1 | r5++;
0x00020090 adds r2, 6 | r2 += 6;
0x00020092 cmp r5, 0x17 |
| if (r5 == 0x17) {
0x00020094 beq.w 0x20690 | goto label_8;
| }
0x00020098 ldrb r1, [r2] | r1 = *(r2);
0x0002009a cmp r1, r3 |
0x0002009c bne 0x2008e |
| }
0x0002009e ldr.w r3, [pc, 0x57c] |
0x000200a2 lsls r2, r5, 1 | r2 = r5 << 1;
0x000200a4 str r2, [sp, 0x28] | var_28h = r2;
0x000200a6 add r2, r5 | r2 += r5;
0x000200a8 add r3, pc | r3 = 0x406ca;
0x000200aa add.w r3, r3, r2, lsl 1 | r3 += (r2 << 1);
0x000200ae ldrb.w sb, [r3, 0x187] | sb = *((r3 + 0x187));
0x000200b2 cmp.w sb, 0x10 |
| if (sb > 0x10) {
0x000200b6 bhi.w 0x20690 | goto label_8;
| }
| /* switch table (18 cases) at 0x200be */
0x000200ba tbh [pc, sb, lsl 1] | __asm ("tbh [pc, sb, lsl 1]");
0x000200e0 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x000200e2 sub.w r7, r3, 0x30 | r7 = r3 - 48;
0x000200e6 mov r3, r7 | r3 = r7;
0x000200e8 adds r1, r4, 1 | r1 = r4 + 1;
0x000200ea sub.w r0, r2, 0x30 | r0 = r2 - 0x30;
0x000200ee cmp r0, 9 |
| if (r0 > 9) {
0x000200f0 bhi 0x20110 | goto label_78;
| }
| do {
0x000200f2 add.w r3, r3, r3, lsl 2 | r3 += (r3 << 2);
0x000200f6 mov r4, r1 | r4 = r1;
0x000200f8 add.w r2, r2, r3, lsl 1 | r2 += (r3 << 1);
0x000200fc sub.w r3, r2, 0x30 | r3 = r2 - 0x30;
0x00020100 ldrb r2, [r1, 1]! | r2 = *((r1 += 1));
0x00020104 sub.w r0, r2, 0x30 | r0 = r2 - 0x30;
0x00020108 cmp r0, 9 |
0x0002010a bls 0x200f2 |
| } while (r0 < 9);
0x0002010c bic r7, r3, 0x80000000 | r7 = BIT_MASK (r3, 0x80000000);
| label_78:
0x00020110 cmp r2, 0x2e |
0x00020112 it ne |
| if (r2 != 0x2e) {
0x00020114 cmpne r2, 0x6c | __asm ("cmpne r2, 0x6c");
| }
0x00020116 mov r3, r2 | r3 = r2;
| if (r2 != 0x2e) {
0x00020118 bne.w 0x207e8 | goto label_79;
| }
0x0002011c ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0002011e adds r4, 1 | r4++;
0x00020120 cmp r3, 0 |
| if (r3 != 0) {
0x00020122 bne.w 0x1ffda | goto label_0;
| }
| label_2:
0x00020126 mov fp, r7 |
0x00020128 mov r0, r3 | r0 = r3;
0x0002012a b 0x20084 | goto label_1;
0x0002012c ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0002012e movs r2, 1 | r2 = 1;
0x00020130 adds r4, 1 | r4++;
0x00020132 str r2, [sp, 0x24] | var_24h = r2;
0x00020134 cmp r3, 0 |
| if (r3 != 0) {
0x00020136 bne.w 0x1ffda | goto label_0;
| }
0x0002013a b 0x20126 | goto label_2;
0x0002013c ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0002013e movs r2, 1 | r2 = 1;
0x00020140 adds r4, 1 | r4++;
0x00020142 str r2, [sp, 0x10] | var_10h_2 = r2;
0x00020144 cmp r3, 0 |
| if (r3 != 0) {
0x00020146 bne.w 0x1ffda | goto label_0;
| }
0x0002014a b 0x20126 | goto label_2;
0x0002014c ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x0002014e movs r6, 0x2c | r6 = 0x2c;
0x00020150 adds r4, 1 | r4++;
0x00020152 cmp r3, 0 |
| if (r3 != 0) {
0x00020154 bne.w 0x1ffda | goto label_0;
| }
0x00020158 b 0x20126 | goto label_2;
0x0002015a ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x0002015e movs r2, 0x2b | r2 = 0x2b;
0x00020160 str r2, [sp, 8] | var_8h_2 = r2;
0x00020162 cmp r3, 0 |
| if (r3 != 0) {
0x00020164 bne.w 0x1ffda | goto label_0;
| }
0x00020168 b 0x20126 | goto label_2;
0x0002016a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0002016c cmp r3, 0 |
| if (r3 != 0) {
0x0002016e bne.w 0x207f0 | goto label_80;
| }
0x00020172 ldr r5, [sp, 0xc] | r5 = var_ch;
0x00020174 ldr r7, [r5], 4 | r7 = *(r5);
| r5 += 4;
| label_14:
0x00020178 cmp r7, 0 |
| if (r7 < 0) {
0x0002017a bge 0x2018a |
0x0002017c cmp.w r7, -0x80000000 |
| if (r7 == -0x80000000) {
0x00020180 beq.w 0x2080e | goto label_81;
| }
0x00020184 rsbs r7, r7, 0 | r7 -= ;
0x00020186 movs r3, 1 | r3 = 1;
0x00020188 str r3, [sp, 0x10] | var_10h_2 = r3;
| }
| label_15:
0x0002018a ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x0002018e cmp r3, 0x2e |
| if (r3 != 0x2e) {
0x00020190 bne.w 0x207ca | goto label_82;
| }
| label_21:
0x00020194 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x00020196 cmp r3, 0x2a |
| if (r3 != 0x2a) {
0x00020198 bne.w 0x2079e | goto label_83;
| }
0x0002019c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0002019e cmp r3, 0 |
| if (r3 != 0) {
0x000201a0 bne.w 0x20816 | goto label_84;
| }
0x000201a4 mov r3, r5 | r3 = r5;
0x000201a6 ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x000201aa str r2, [sp, 4] | var_4h_4 = r2;
0x000201ac str r3, [sp, 0xc] | var_ch = r3;
| label_17:
0x000201ae ldr r3, [sp, 4] | r3 = var_4h_4;
0x000201b0 cmp r3, 0 |
| if (r3 < 0) {
0x000201b2 bge 0x201c2 |
0x000201b4 cmp.w r3, -0x80000000 |
0x000201b8 ite ne |
| if (r3 != -0x80000000) {
0x000201ba rsbne r3, r3, 0 | __asm ("rsbne r3, r3, 0");
| }
| if (r3 != -0x80000000) {
0x000201bc moveq r3, -1 | r3 = -1;
| }
0x000201c0 str r3, [sp, 4] | var_4h_4 = r3;
| }
| label_16:
0x000201c2 ldrb r3, [r4, 2] | r3 = *((r4 + 2));
0x000201c4 adds r4, 2 | r4 += 2;
| label_12:
0x000201c6 cmp r3, 0x6c |
| if (r3 != 0x6c) {
0x000201c8 bne.w 0x20080 | goto label_3;
| }
0x000201cc ldrb r3, [r4] | r3 = *(r4);
0x000201ce cmp r3, 0 |
| if (r3 != 0) {
0x000201d0 bne.w 0x1ffda | goto label_0;
| }
0x000201d4 b 0x20126 | goto label_2;
0x000201d6 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000201d8 movs r2, 1 | r2 = 1;
0x000201da adds r4, 1 | r4++;
0x000201dc str r2, [sp, 0x18] | var_18h_2 = r2;
0x000201de cmp r3, 0 |
| if (r3 != 0) {
0x000201e0 bne.w 0x1ffda | goto label_0;
| }
0x000201e4 b 0x20126 | goto label_2;
0x000201e6 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000201e8 movs r2, 1 | r2 = 1;
0x000201ea adds r4, 1 | r4++;
0x000201ec str r2, [sp, 0x1c] | var_1ch_3 = r2;
0x000201ee cmp r3, 0 |
| if (r3 != 0) {
0x000201f0 bne.w 0x1ffda | goto label_0;
| }
0x000201f4 b 0x20126 | goto label_2;
0x000201f6 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000201f8 movs r2, 0x20 | r2 = 0x20;
0x000201fa adds r4, 1 | r4++;
0x000201fc str r2, [sp, 8] | var_8h_2 = r2;
0x000201fe cmp r3, 0 |
| if (r3 != 0) {
0x00020200 bne.w 0x1ffda | goto label_0;
| }
0x00020204 b 0x20126 | goto label_2;
0x00020206 cmp.w sb, 0xe |
0x0002020a ldr r3, [sp, 0x20] | r3 = var_20h;
| if (sb == 0xe) {
0x0002020c beq.w 0x209b0 | goto label_85;
| }
0x00020210 cmp r3, 0 |
| if (r3 != 0) {
0x00020212 bne.w 0x21214 | goto label_86;
| }
0x00020216 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00020218 movs r6, 0x27 | r6 = 0x27;
0x0002021a ldr r5, [r3], 4 | r5 = *(r3);
| r3 += 4;
0x0002021e str r3, [sp, 0xc] | var_ch = r3;
| label_46:
0x00020220 cmp r5, 0 |
| if (r5 == 0) {
0x00020222 beq.w 0x21222 | goto label_87;
| }
0x00020226 ldr r1, [sp, 4] | r1 = var_4h_4;
0x00020228 mov r3, r1 | r3 = r1;
0x0002022a asrs r2, r1, 0x1f | r2 = r1 >> 0x1f;
0x0002022c cmp r1, 0 |
| if (r1 == 0) {
0x0002022e beq.w 0x2145a | goto label_88;
| }
0x00020232 sub.w sb, sb, 0xa | sb -= 0xa;
0x00020236 clz sb, sb | sb &= sb;
0x0002023a lsr.w sb, sb, 5 | sb >>= 5;
| label_24:
0x0002023e movs r1, 0 | r1 = 0;
0x00020240 mov ip, r4 |
0x00020242 mov lr, r1 | lr = r1;
0x00020244 ldr r4, [sp, 0x1c] | r4 = var_1ch_3;
0x00020246 mov r7, r1 | r7 = r1;
0x00020248 mov r8, r1 | r8 = r1;
0x0002024a b 0x2026c |
| while (r6 != r0) {
| if (r4 != 0) {
0x0002024c cbz r4, 0x20258 |
0x0002024e and r0, r0, 0xc0 | r0 &= 0xc0;
0x00020252 cmp r0, 0xc0 |
| if (r0 == 0xc0) {
0x00020254 beq.w 0x20b4c | goto label_89;
| }
| }
| label_4:
0x00020258 adds r7, 1 | r7++;
0x0002025a adc r8, r8, 0 | __asm ("adc r8, r8, 0");
0x0002025e subs r3, 1 | r3--;
0x00020260 sbc r2, r2, 0 | __asm ("sbc r2, r2, 0");
0x00020264 orrs.w r0, r3, r2 | r0 = r3 | r2;
| if (r0 == r3) {
0x00020268 beq.w 0x20aac | goto label_90;
| }
0x0002026c ldrb r0, [r5, r7] | r0 = *((r5 + r7));
0x0002026e cmp r0, 0 |
| if (r0 == 0) {
0x00020270 beq.w 0x20aac | goto label_90;
| }
0x00020274 cmp r6, r0 |
0x00020276 bne 0x2024c |
| }
0x00020278 adds r1, 1 | r1++;
0x0002027a adc lr, lr, 0 | __asm ("adc lr, lr, 0");
0x0002027e b 0x20258 | goto label_4;
0x00020280 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00020282 cmp r3, 0 |
| if (r3 != 0) {
0x00020284 bne.w 0x20d8a | goto label_91;
| }
0x00020288 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0002028a adds r3, 7 | r3 += 7;
0x0002028c bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00020290 vldmia r3!, {d8} | __asm ("vldmia r3!, {d8}");
0x00020294 str r3, [sp, 0xc] | var_ch = r3;
| label_40:
0x00020296 ldr r3, [sp, 4] | r3 = var_4h_4;
0x00020298 adds r3, 1 | r3++;
0x0002029a itt eq |
| if (r3 != 1) {
0x0002029c moveq r0, 1 | r0 = 1;
| }
| if (r3 != 1) {
0x0002029e moveq r8, 6 | r8 = 6;
| }
| if (r3 != 1) {
0x000202a2 beq 0x202c0 |
| label_67:
0x000202a4 ldr r2, [sp, 4] | r2 = var_4h_4;
0x000202a6 mov.w r3, 0xe100 |
0x000202aa movt r3, 0x5f5 | r3 = 0x5f5e100;
0x000202ae cmp r2, r3 |
0x000202b0 mov r1, r2 | r1 = r2;
0x000202b2 it ge |
| if (r2 < r3) {
0x000202b4 movge r1, r3 | r1 = r3;
| }
0x000202b6 cmp r2, 0 |
0x000202b8 mov r8, r1 | r8 = r1;
0x000202ba ite le |
| if (r2 > 0) {
0x000202bc movle r0, 0 | r0 = 0;
| }
| if (r2 > 0) {
0x000202be movgt r0, 1 | r0 = 1;
| goto label_92;
| }
| }
| label_92:
0x000202c0 sub.w r2, sb, 3 | r2 = sb - 3;
0x000202c4 vcmpe.f64 d8, 0 | __asm ("vcmpe.f64 d8, 0");
0x000202c8 clz r2, r2 | r2 &= r2;
0x000202cc vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x000202d0 lsr.w r2, r2, 5 | r2 >>= 5;
0x000202d4 ittt mi |
| if (r2 >= 0) {
0x000202d6 movmi r3, 0x2d | r3 = 0x2d;
| }
| if (r2 < 0) {
0x000202d8 vnegmi d8, d8 | __asm ("vnegmi d8, d8");
| }
| if (r2 < 0) {
0x000202dc str r3, [sp, 8] | var_8h_2 = r3;
| }
0x000202de ands r0, r2 | r0 &= r2;
0x000202e0 vmov r6, s16 | __asm ("vmov r6, s16");
0x000202e4 vmov r1, s17 | __asm ("vmov r1, s17");
| if (r0 == r2) {
0x000202e8 beq.w 0x20c0c | goto label_93;
| }
0x000202ec add.w r8, r8, -1 | r8 += -1;
0x000202f0 movw r2, 0xcccd |
0x000202f4 ubfx r3, r8, 0, 0xc | r3 = (r8 >> 0) & ((1 << 0xc) - 1);
0x000202f8 movt r2, 0xcccc |
0x000202fc umull r7, r2, r2, r3 | r7:r2 = r2 * r3;
0x00020300 ldr r7, [pc, 0x31c] |
0x00020302 cmp r3, 9 |
0x00020304 add r7, pc | r7 = 0x40928;
0x00020306 lsr.w r2, r2, 3 | r2 >>= 3;
0x0002030a add.w r2, r2, r2, lsl 2 | r2 = 0xcccccccd;
0x0002030e sub.w r2, r3, r2, lsl 1 | r2 = r3 - (r2 << 1);
0x00020312 add.w r2, r7, r2, lsl 3 | r2 = r7 + (r2 << 3);
0x00020316 vldr d16, [r2, 0x250] | __asm ("vldr d16, aav.0x000000ff");
0x0002031a mov r2, r0 | r2 = r0;
| if (r3 <= 9) {
0x0002031c ble 0x20334 | goto label_38;
| }
| label_31:
0x0002031e vldr d17, [pc, 0x2e0] | __asm ("vldr d17, aav.0x000000ff");
| do {
0x00020322 subs r3, 0xa | r3 -= 0xa;
0x00020324 vmul.f64 d16, d16, d17 | __asm ("vmul.f64 d16, d16, d17");
0x00020328 cmp r3, 9 |
0x0002032a bgt 0x20322 |
| } while (r3 > 9);
| label_32:
0x0002032c cmp.w sb, 1 |
| if (sb == 1) {
0x00020330 beq.w 0x20c9a | goto label_94;
| }
| label_38:
0x00020334 movs r3, 0 | r3 = 0;
0x00020336 movs r0, 0 | r0 = 0;
0x00020338 movt r3, 0x7ff0 | r3 = (r3 & 0xFFFF) | 0x7ff00000;
0x0002033c bics r3, r1 | __asm ("bics r3, r1");
| if (r0 == 0) {
0x0002033e beq.w 0x20c80 | goto label_95;
| }
| label_37:
0x00020342 vcmpe.f64 d8, 0 | __asm ("vcmpe.f64 d8, 0");
0x00020346 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x0002034a it le |
| if (r0 > 0) {
0x0002034c movle r6, 0 | r6 = 0;
| }
| if (r0 > 0) {
0x0002034e bgt.w 0x20fd8 | goto label_96;
| }
| label_57:
0x00020352 cmp.w sb, 1 |
| if (sb == 1) {
0x00020356 beq.w 0x21194 | goto label_97;
| }
0x0002035a vadd.f64 d8, d8, d16 | __asm ("vadd.f64 d8, d8, d16");
0x0002035e vmov.f64 d16, 1.000000e+01 | __asm ("vmov.f64 d16, 1");
0x00020362 vcmpe.f64 d8, d16 | __asm ("vcmpe.f64 d8, d16");
0x00020366 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (sb >= 1) {
0x0002036a blt 0x20376 |
0x0002036c vldr d16, [pc, 0x298] | __asm ("vldr d16, aav.0x000000ff");
0x00020370 adds r6, 1 | r6++;
0x00020372 vmul.f64 d8, d8, d16 | __asm ("vmul.f64 d8, d8, d16");
| }
0x00020376 cmp r2, 0 |
| if (r2 != 0) {
0x00020378 bne.w 0x20e1a | goto label_98;
| }
0x0002037c ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x0002037e mov.w sb, 2 | sb = 2;
0x00020382 str r2, [sp, 4] | var_4h_4 = r2;
0x00020384 str r3, [sp, 0x38] | var_38h = r3;
0x00020386 mov r3, r2 | r3 = r2;
| label_44:
0x00020388 adds.w r2, r8, r2 | r2 = r8 + r2;
0x0002038c adc.w r1, r3, r8, asr 31 | __asm ("adc.w r1, r3, r8, asr 31");
0x00020390 adds.w r3, r2, fp | r3 = r2 + fp;
0x00020394 adc.w r1, r1, fp, asr 31 | __asm ("adc.w r1, r1, fp, asr 31");
0x00020398 adds.w r2, r3, 0xf | r2 = r3 + 0xf;
0x0002039c adc r3, r1, 0 | __asm ("adc r3, r1, 0");
0x000203a0 cmp r2, 0x47 |
0x000203a2 sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
0x000203a6 ittt lt |
| if (r2 >= 0x47) {
0x000203a8 movlt r3, 0 | r3 = 0;
| }
| if (r2 >= 0x47) {
0x000203aa addlt sl, sp, 0x44 | sl += var_44h;
| }
| if (r2 < 0x47) {
0x000203ae str r3, [sp, 0x2c] | var_2ch = r3;
| }
| if (r2 >= 0x47) {
0x000203b0 bge.w 0x21200 | goto label_99;
| }
| label_62:
0x000203b4 ldrd r3, r1, [sp, 0x18] | __asm ("ldrd r3, r1, [var_1ch_3]");
0x000203b8 movs r7, 0xa | r7 = 0xa;
0x000203ba movs r2, 0x10 | r2 = 0x10;
0x000203bc mov r0, sl | r0 = sl;
0x000203be orrs r3, r1 | r3 |= r1;
0x000203c0 cmp.w r8, 0 |
0x000203c4 it gt |
| if (r8 <= 0) {
0x000203c6 orrgt r3, r3, 1 | r3 |= 1;
| }
0x000203ca str r3, [sp, 0x18] | var_18h_2 = r3;
0x000203cc smlabb r7, r7, r1, r2 | __asm ("smlabb r7, r7, r1, r2");
0x000203d0 ldr r3, [sp, 8] | r3 = var_8h_2;
| if (r3 != 0) {
0x000203d2 cbz r3, 0x203d8 |
0x000203d4 strb r3, [r0], 1 | *(r0) = r3;
| r0++;
| }
0x000203d8 ldr r3, [sp, 4] | r3 = var_4h_4;
0x000203da cmp r3, 0 |
| if (r3 >= 0) {
0x000203dc bge.w 0x211b2 | goto label_100;
| }
0x000203e0 movs r2, 0x30 | r2 = 0x30;
0x000203e2 strb r2, [r0] | *(r0) = r2;
0x000203e4 adds r2, r3, 1 | r2 = r3 + 1;
0x000203e6 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x000203e8 cmp r3, 0 |
| if (r3 == 0) {
0x000203ea beq.w 0x211a4 | goto label_101;
| }
0x000203ee movs r1, 0x2e | r1 = 0x2e;
0x000203f0 adds r3, r0, 2 | r3 = r0 + 2;
0x000203f2 strb r1, [r0, 1] | *((r0 + 1)) = r1;
| if (r2 != 0) {
0x000203f4 cbz r2, 0x2040e |
| label_59:
0x000203f6 rsbs r2, r2, 0 | r2 -= ;
0x000203f8 mov r0, r3 | r0 = r3;
0x000203fa movs r1, 0x30 | r1 = 0x30;
0x000203fc add r3, r2 | r3 += r2;
0x000203fe str r3, [sp, 0x3c] | var_3ch = r3;
0x00020400 blx 0x839c | fcn_0000839c ();
0x00020404 ldr r2, [sp, 4] | r2 = var_4h_4;
0x00020406 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00020408 add r2, r8 | r2 += r8;
0x0002040a add.w r8, r2, 1 | r8 = r2 + 1;
| }
| label_61:
0x0002040e cmp.w r8, 0 |
| if (r8 <= 0) {
0x00020412 ble.w 0x2143e | goto label_102;
| }
0x00020416 add.w r0, r3, r8 | r0 = r3 + r8;
0x0002041a vmov.f64 d17, 1.000000e+01 | __asm ("vmov.f64 d17, 1");
0x0002041e add.w r8, r3, -1 | r8 = r3 + -1;
0x00020422 subs r1, r0, 1 | r1 = r0 - 1;
| do {
0x00020424 cmp r7, 0 |
0x00020426 it le |
| if (r7 > 0) {
0x00020428 movle r3, 0x30 | r3 = 0x30;
| }
| if (r7 > 0) {
0x0002042a ble 0x20446 |
0x0002042c vcvt.s32.f64 s15, d8 | __asm ("vcvt.s32.f64 s15, d8");
0x00020430 subs r7, 1 | r7--;
0x00020432 vcvt.f64.s32 d16, s15 | __asm ("vcvt.f64.s32 d16, s15");
0x00020436 vmov r3, s15 | __asm ("vmov r3, s15");
0x0002043a adds r3, 0x30 | r3 += 0x30;
0x0002043c uxtb r3, r3 | r3 = (int8_t) r3;
0x0002043e vsub.f64 d8, d8, d16 | __asm ("vsub.f64 d8, d8, d16");
0x00020442 vmul.f64 d8, d8, d17 | __asm ("vmul.f64 d8, d8, d17");
| }
0x00020446 strb r3, [r8, 1]! | *((r8 += 1)) = r3;
0x0002044a cmp r8, r1 |
0x0002044c bne 0x20424 |
| } while (r8 != r1);
0x0002044e mov r2, r0 | r2 = r0;
| label_73:
0x00020450 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x00020452 ldr r1, [sp, 0x38] | r1 = var_38h;
0x00020454 tst r3, r1 |
| if ((r3 & r1) != 0) {
0x00020456 bne.w 0x21242 | goto label_103;
| }
| label_60:
0x0002045a cmp.w sb, 2 |
| if (sb == 2) {
0x0002045e beq.w 0x21126 | goto label_104;
| }
| label_58:
0x00020462 movs r3, 0 | r3 = 0;
0x00020464 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00020466 strb r3, [r2] | *(r2) = r3;
0x00020468 sub.w r5, r2, sl | r5 = r2 - sl;
0x0002046c ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0002046e sub.w r6, fp, r5 | r6 = fp - r5;
0x00020472 eor r3, r3, 1 | r3 ^= 1;
0x00020476 tst r1, r3 |
| if ((r1 & r3) == 0) {
0x00020478 beq.w 0x20704 | goto label_18;
| }
0x0002047c cmp fp, r5 |
| if (fp > r5) {
0x0002047e bgt.w 0x21346 | goto label_105;
| }
0x00020482 cmp r6, 0 |
| if (r6 <= 0) {
0x00020484 ble.w 0x21374 | goto label_106;
| }
| label_7:
0x00020488 mov r1, r6 | r1 = r6;
0x0002048a ldr r6, [sp, 0x14] | r6 = var_14h;
0x0002048c movs r2, 0x20 | r2 = 0x20;
0x0002048e mov r0, r6 | r0 = r6;
0x00020490 blx 0x8824 | fcn_00008824 ();
0x00020494 mov r2, r5 | r2 = r5;
0x00020496 mov r1, sl | r1 = sl;
0x00020498 mov r0, r6 | r0 = r6;
0x0002049a blx 0x849c | fcn_0000849c ();
0x0002049e b 0x20728 | goto label_70;
0x000204a0 movs r6, 0 | r6 = 0;
0x000204a2 ldr r3, [pc, 0x180] |
0x000204a4 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000204a6 add r3, pc | r3 = 0x40ad0;
0x000204a8 add r2, r5 | r2 += r5;
0x000204aa add.w r3, r3, r2, lsl 1 | r3 += (r2 << 1);
0x000204ae ldrb.w r3, [r3, 0x186] | r3 = *((r3 + 0x186));
0x000204b2 tst.w r3, 1 |
0x000204b6 ldr r3, [sp, 0x20] | r3 = var_20h;
| if ((r3 & 1) == 0) {
0x000204b8 beq.w 0x2083c | goto label_107;
| }
0x000204bc cmp r3, 0 |
| if (r3 != 0) {
0x000204be bne.w 0x205e0 | goto label_108;
| }
0x000204c2 cmp r0, 0 |
| if (r0 != 0) {
0x000204c4 bne.w 0x212d6 | goto label_109;
| }
| do {
| label_68:
0x000204c8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000204ca ldr r7, [r3], 4 | r7 = *(r3);
| r3 += 4;
0x000204ce str r3, [sp, 0xc] | var_ch = r3;
0x000204d0 asrs r1, r7, 0x1f | r1 = r7 >> 0x1f;
| label_5:
0x000204d2 subs.w r8, r1, 0 | r8 = r1 - 0;
| if (r8 >= r1) {
0x000204d6 bge.w 0x20856 | goto label_22;
| }
0x000204da rsbs r7, r7, 0 | r7 -= ;
0x000204dc mov.w r3, 0x2d | r3 = 0x2d;
0x000204e0 sbc.w r8, r8, r8, lsl 1 | __asm ("sbc.w r8, r8, r8, lsl 1");
0x000204e4 str r3, [sp, 8] | var_8h_2 = r3;
0x000204e6 b 0x20862 | goto label_25;
0x000204e8 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000204ea cmp r3, 0 |
| if (r3 != 0) {
0x000204ec bne.w 0x20d2e | goto label_110;
| }
0x000204f0 ldr r7, [sp, 0xc] | r7 = var_ch;
0x000204f2 ldr r3, [r7], 4 | r3 = *(r7);
| r7 += 4;
0x000204f6 str r3, [sp, 0x2c] | var_2ch = r3;
0x000204f8 cmp r3, 0 |
| if (r3 == 0) {
0x000204fa beq.w 0x21272 | goto label_111;
| }
0x000204fe cmp.w sb, 6 |
| if (sb != 6) {
0x00020502 bne.w 0x20df2 | goto label_112;
| }
0x00020506 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00020508 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x0002050a cmp r3, 0 |
| if (r3 != 0) {
0x0002050c bne.w 0x20efc | goto label_113;
| }
0x00020510 ldr r3, [r2, 0xc] | r3 = *((r2 + 0xc));
0x00020512 cmp r3, 0 |
| if (r3 == 0) {
0x00020514 beq.w 0x20efc | goto label_113;
| }
0x00020518 ldr r3, [sp, 4] | r3 = var_4h_4;
0x0002051a lsrs r3, r3, 0x1f | r3 >>= 0x1f;
0x0002051c cmp.w fp, 0 |
0x00020520 ite ne |
| if (fp == 0) {
0x00020522 movne r3, 0 | r3 = 0;
| }
| if (fp != 0) {
0x00020524 andeq r3, r3, 1 | r3 &= 1;
| }
0x00020528 cmp r3, 0 |
| if (r3 == 0) {
0x0002052a beq.w 0x20efc | goto label_113;
| }
0x0002052e ldrb r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x00020530 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x00020534 cmp r3, 0 |
| if (r3 != 0) {
0x00020536 bne.w 0x20e00 | goto label_114;
| }
0x0002053a ldr r3, [r2] | r3 = *(r2);
0x0002053c ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x0002053e str r1, [r2, 4] | *((r2 + 4)) = r1;
| if (r3 != 0) {
0x00020540 cbz r3, 0x20564 |
0x00020542 ldr.w r2, [r3, 0x164] | r2 = *((r3 + 0x164));
0x00020546 cmp r2, r1 |
| if (r2 < r1) {
0x00020548 bls 0x20564 | goto label_115;
| }
0x0002054a ldr.w r2, [r3, 0x15c] | r2 = *((r3 + 0x15c));
0x0002054e cmp r2, r1 |
0x00020550 it ls |
| if (r2 > r1) {
0x00020552 movls r0, 0x80 | r0 = 0x80;
| }
| if (r2 < r1) {
0x00020554 bls 0x2056e | goto label_116;
| }
0x00020556 ldr.w r2, [r3, 0x160] | r2 = *((r3 + 0x160));
0x0002055a cmp r2, r1 |
0x0002055c it ls |
| if (r2 <= r1) {
0x0002055e ldrhls r0, [r3, 0x136] | __asm ("ldrhls r0, aav.0x000000ff");
| }
| if (r2 < r1) {
0x00020562 bls 0x2056e | goto label_116;
| }
| }
| label_115:
0x00020564 ldr r3, [pc, 0xc0] |
0x00020566 ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00020568 add r3, pc |
0x0002056a ldr r3, [r3, 0x2c] | r3 = *(0x40bc0);
0x0002056c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| label_116:
0x0002056e ldr r5, [sp, 0x14] | r5 = var_14h;
0x00020570 ldr r6, [sp, 0x2c] | r6 = var_2ch;
0x00020572 str r7, [sp, 0xc] | var_ch = r7;
0x00020574 str r0, [r5, 8] | *((r5 + 8)) = r0;
0x00020576 mov r0, r6 | r0 = r6;
0x00020578 mov sl, r6 | sl = r6;
0x0002057a blx 0x85b4 | fcn_000085b4 ();
0x0002057e ldrb r3, [r5, 0x15] | r3 = *((r5 + 0x15));
0x00020580 movs r2, 0 | r2 = 0;
0x00020582 str r0, [r5, 0x10] | *((r5 + 0x10)) = r0;
0x00020584 mov r1, r6 | r1 = r6;
0x00020586 mov r0, r5 | r0 = r5;
0x00020588 orr r3, r3, 4 | r3 |= 4;
0x0002058c strb r3, [r5, 0x15] | *((r5 + 0x15)) = r3;
0x0002058e blx 0x849c | fcn_0000849c ();
0x00020592 b 0x20734 | goto label_11;
0x00020594 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00020596 ldrb r3, [r3, 0x15] | r3 = *((r3 + 0x15));
0x00020598 lsls r1, r3, 0x1f | r1 = r3 << 0x1f;
| if (r1 >= r3) {
0x0002059a bpl 0x20690 | goto label_8;
| }
0x0002059c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0002059e ldr r5, [r3] | r5 = *(r3);
0x000205a0 ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x000205a2 cmp r3, 0 |
| if (r3 == 0) {
0x000205a4 beq.w 0x2099a | goto label_117;
| }
| if (r5 != 0) {
0x000205a8 cbz r5, 0x205b2 |
0x000205aa ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x000205ac lsls r2, r3, 0x14 | r2 = r3 << 0x14;
| if (r2 >= r3) {
0x000205ae bpl.w 0x20ed6 | goto label_118;
| }
| }
| label_47:
0x000205b2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000205b4 movs r2, 0 | r2 = 0;
0x000205b6 mov r1, sl | r1 = sl;
0x000205b8 blx 0x849c | fcn_0000849c ();
0x000205bc b 0x20680 | goto label_23;
0x000205be ldr r3, [pc, 0x6c] |
0x000205c0 ldr r2, [sp, 0x28] | r2 = var_28h;
0x000205c2 add r3, pc | r3 = 0x40bf4;
0x000205c4 add r2, r5 | r2 += r5;
0x000205c6 add.w r3, r3, r2, lsl 1 | r3 += (r2 << 1);
0x000205ca ldrb.w r6, [r3, 0x186] | r6 = *((r3 + 0x186));
0x000205ce ands r6, r6, 1 | r6 &= 1;
| if (r6 == r6) {
0x000205d2 beq.w 0x20986 | goto label_119;
| }
0x000205d6 ldr r6, [sp, 0x20] | r6 = var_20h;
0x000205d8 cmp r6, 0 |
0x000205da beq.w 0x204c8 |
| } while (r6 == 0);
0x000205de movs r6, 0 | r6 = 0;
| label_108:
0x000205e0 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000205e2 ldrd r2, r3, [r1] | __asm ("ldrd r2, r3, [r1]");
0x000205e6 cmp r2, r3 |
| if (r2 <= r3) {
0x000205e8 ble.w 0x2085c | goto label_120;
| }
0x000205ec ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x000205ee ldr.w r0, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r0 = *((r2 + offset_0));
0x000205f2 adds r3, 1 | r3++;
0x000205f4 str r3, [r1, 4] | *((r1 + 4)) = r3;
0x000205f6 blx 0x89d4 | r0 = fcn_000089d4 ();
0x000205fa mov r7, r0 | r7 = r0;
0x000205fc b 0x204d2 | goto label_5;
0x00020630 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00020632 ldrb r3, [r3, 0x15] | r3 = *((r3 + 0x15));
0x00020634 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00020636 bpl 0x20690 | goto label_8;
| }
0x00020638 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0002063a ldr r5, [r3] | r5 = *(r3);
0x0002063c ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x0002063e cmp r1, 0 |
| if (r1 == 0) {
0x00020640 beq.w 0x20dac | goto label_121;
| }
0x00020644 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
| if (r3 != 0) {
0x00020646 cbz r3, 0x2066e |
0x00020648 ldr r6, [r5, 8] | r6 = *((r5 + 8));
0x0002064a cmp r6, 0 |
| if (r6 == 0) {
0x0002064c beq.w 0x20e46 | goto label_122;
| }
| label_41:
0x00020650 ldr r1, [r5, 4] | r1 = *((r5 + 4));
| if (r1 != 0) {
0x00020652 cbz r1, 0x2066c |
0x00020654 ldr r6, [sp, 0x14] | r6 = var_14h;
0x00020656 mov r0, r6 | r0 = r6;
0x00020658 blx 0x8764 | fcn_00008764 ();
0x0002065c ldr.w r1, [pc, 0x920] |
0x00020660 mov r0, r6 | r0 = r6;
0x00020662 movs r2, 1 | r2 = 1;
0x00020664 add r1, pc | r1 = 0x415e8;
0x00020666 blx 0x849c | fcn_0000849c ();
0x0002066a ldr r6, [r5, 8] | r6 = *((r5 + 8));
| }
0x0002066c mov r1, r6 | r1 = r6;
| }
0x0002066e ldr r5, [sp, 0x14] | r5 = var_14h;
0x00020670 mov r0, r5 | r0 = r5;
0x00020672 blx 0x8764 | fcn_00008764 ();
0x00020676 movs r2, 0 | r2 = 0;
0x00020678 mov r1, sl | r1 = sl;
0x0002067a mov r0, r5 | r0 = r5;
0x0002067c blx 0x849c | fcn_0000849c ();
| label_23:
0x00020680 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00020682 adds r4, 1 | r4++;
0x00020684 adds r3, 4 | r3 += 4;
0x00020686 str r3, [sp, 0xc] | var_ch = r3;
0x00020688 ldrb r3, [r4] | r3 = *(r4);
0x0002068a cmp r3, 0 |
| if (r3 != 0) {
0x0002068c bne.w 0x1ffb6 | goto label_6;
| }
| label_8:
0x00020690 ldr.w r2, [pc, 0x8f0] |
0x00020694 ldr.w r3, [pc, 0x8f0] | r3 = *(0x20f88);
0x00020698 add r2, pc | r2 = 0x41620;
0x0002069a ldr r3, [r2, r3] | r3 = *(0x41620);
0x0002069c ldr r2, [r3] | r2 = *(0x41620);
0x0002069e ldr r3, [sp, 0x8c] | r3 = var_8ch;
0x000206a0 eors r2, r3 | r2 ^= r3;
0x000206a2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000206a6 bne.w 0x2147c | goto label_123;
| }
0x000206aa add sp, 0x94 |
0x000206ac vpop {d8} | __asm ("vpop {d8}");
0x000206b0 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x000206b4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x000206b6 cmp r3, 0 |
| if (r3 != 0) {
0x000206b8 bne.w 0x20cd0 | goto label_124;
| }
0x000206bc ldr r2, [sp, 0xc] | r2 = var_ch;
0x000206be ldr r3, [r2], 4 | r3 = *(r2);
| r2 += 4;
0x000206c2 cmp r3, 0x7f |
| if (r3 < 0x7f) {
0x000206c4 bls.w 0x20d82 | goto label_125;
| }
0x000206c8 cmp.w r3, 0x800 |
0x000206cc and r0, r3, 0x3f | r0 = r3 & 0x3f;
0x000206d0 orr r0, r0, 0x80 | r0 |= 0x80;
0x000206d4 ubfx r1, r3, 6, 8 | r1 = (r3 >> 6) & ((1 << 8) - 1);
| if (r3 >= 0x800) {
0x000206d8 bhs.w 0x2127a | goto label_126;
| }
0x000206dc subs r1, 0x40 | r1 -= 0x40;
0x000206de movs r5, 2 | r5 = 2;
0x000206e0 add.w sl, sp, 0x44 | sl += var_44h;
0x000206e4 strb.w r0, [sp, 0x45] | var_45h = r0;
0x000206e8 strb.w r1, [sp, 0x44] | var_44h = r1;
0x000206ec str r2, [sp, 0xc] | var_ch = r2;
0x000206ee b 0x20d12 | goto label_49;
0x000206f0 movs r3, 0x25 | r3 = 0x25;
0x000206f2 add.w r6, fp, -1 | r6 = fp + -1;
0x000206f6 movs r5, 1 | r5 = 1;
0x000206f8 add.w sl, sp, 0x44 | sl += var_44h;
0x000206fc strb.w r3, [sp, 0x44] | var_44h = r3;
0x00020700 movs r3, 0 | r3 = 0;
0x00020702 str r3, [sp, 0x2c] | var_2ch = r3;
| label_18:
0x00020704 cmp r6, 0 |
| if (r6 <= 0) {
0x00020706 ble.w 0x21374 | goto label_106;
| }
0x0002070a ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x0002070c cmp r3, 0 |
| if (r3 == 0) {
0x0002070e beq.w 0x20488 | goto label_7;
| }
0x00020712 mov r2, r5 | r2 = r5;
0x00020714 ldr r5, [sp, 0x14] | r5 = var_14h;
0x00020716 mov r1, sl | r1 = sl;
0x00020718 mov r0, r5 | r0 = r5;
0x0002071a blx 0x849c | fcn_0000849c ();
0x0002071e movs r2, 0x20 | r2 = 0x20;
0x00020720 mov r1, r6 | r1 = r6;
0x00020722 mov r0, r5 | r0 = r5;
0x00020724 blx 0x8824 | fcn_00008824 ();
| label_70:
0x00020728 ldr r1, [sp, 0x2c] | r1 = var_2ch;
| if (r1 != 0) {
0x0002072a cbz r1, 0x20734 |
0x0002072c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0002072e ldr r0, [r3] | r0 = *(r3);
0x00020730 bl 0x16808 | fcn_00016808 (r0, r1);
| }
| label_11:
0x00020734 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x00020736 adds r4, 1 | r4++;
0x00020738 cmp r3, 0 |
| if (r3 == 0) {
0x0002073a beq 0x20690 | goto label_8;
| }
0x0002073c cmp r3, 0x25 |
| if (r3 == 0x25) {
0x0002073e beq.w 0x1ffbc | goto label_9;
| }
| label_76:
0x00020742 mov r5, r4 | r5 = r4;
| do {
0x00020744 ldrb r3, [r5, 1]! | r3 = *((r5 += 1));
0x00020748 cmp r3, 0 |
0x0002074a it ne |
| if (r3 != 0) {
0x0002074c cmpne r3, 0x25 | __asm ("cmpne r3, 0x25");
| }
0x0002074e bne 0x20744 |
| } while (r3 != 0);
0x00020750 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00020752 subs r2, r5, r4 | r2 = r5 - r4;
0x00020754 mov r1, r4 | r1 = r4;
0x00020756 blx 0x849c | fcn_0000849c ();
0x0002075a ldrb r3, [r5] | r3 = *(r5);
0x0002075c cmp r3, 0 |
| if (r3 == 0) {
0x0002075e beq 0x20690 | goto label_8;
| }
0x00020760 mov sl, r4 | sl = r4;
0x00020762 mov r4, r5 | r4 = r5;
0x00020764 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x00020766 adds r4, 1 | r4++;
0x00020768 cmp r3, 0 |
| if (r3 != 0) {
0x0002076a bne.w 0x1ffc6 | goto label_10;
| }
| label_77:
0x0002076e ldr.w r1, [pc, 0x81c] | r1 = *(0x00020f8c);
0x00020772 movs r2, 1 | r2 = 1;
0x00020774 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00020776 add r1, pc | r1 += pc;
0x00020778 blx 0x849c | fcn_0000849c ();
0x0002077c b 0x20690 | goto label_8;
0x0002077e ldr r5, [sp, 0x20] | r5 = var_20h;
0x00020780 cmp r5, 0 |
| if (r5 != 0) {
0x00020782 bne.w 0x2097a | goto label_127;
| }
0x00020786 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00020788 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0002078a ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0002078e ldr r1, [r0, 0x10] | r1 = *((r0 + 0x10));
0x00020790 str r3, [sp, 0xc] | var_ch = r3;
0x00020792 str r1, [r2] | *(r2) = r1;
0x00020794 mov r2, r5 | r2 = r5;
0x00020796 mov r1, sl | r1 = sl;
0x00020798 blx 0x849c | fcn_0000849c ();
0x0002079c b 0x20734 | goto label_11;
| label_83:
0x0002079e sub.w r1, r3, 0x30 | r1 = r3 - 0x30;
0x000207a2 adds r4, 1 | r4++;
0x000207a4 cmp r1, 9 |
0x000207a6 mov.w r2, 0 | r2 = 0;
| if (r1 > 9) {
0x000207aa bhi 0x207c4 | goto label_128;
| }
| do {
0x000207ac ldrb r3, [r4, 1]! | r3 = *((r4 += 1));
0x000207b0 add.w r2, r2, r2, lsl 2 | r2 += (r2 << 2);
0x000207b4 add.w r2, r1, r2, lsl 1 | r2 = r1 + (r2 << 1);
0x000207b8 sub.w r1, r3, 0x30 | r1 = r3 - 0x30;
0x000207bc cmp r1, 9 |
0x000207be bls 0x207ac |
| } while (r1 < 9);
0x000207c0 bic r2, r2, 0x80000000 | r2 = BIT_MASK (r2, 0x80000000);
| label_128:
0x000207c4 str r2, [sp, 4] | var_4h_4 = r2;
0x000207c6 str r5, [sp, 0xc] | var_ch = r5;
0x000207c8 b 0x201c6 | goto label_12;
| label_82:
0x000207ca cmp r3, 0x6c |
0x000207cc mov fp, r7 |
0x000207ce str r5, [sp, 0xc] | var_ch = r5;
| if (r3 != 0x6c) {
0x000207d0 bne.w 0x20082 | goto label_13;
| }
| label_20:
0x000207d4 ldrb r3, [r4, 1] | r3 = *((r4 + 1));
0x000207d6 cmp r3, 0x6c |
0x000207d8 iteet eq |
| if (r3 != 0x6c) {
0x000207da ldrbeq r3, [r4, 2] | r3 = *((r4 + 2));
| }
| if (r3 == 0x6c) {
0x000207dc addne r4, 1 | r4++;
| }
| if (r3 == 0x6c) {
0x000207de movne r0, 1 | r0 = 1;
| }
| if (r3 != 0x6c) {
0x000207e0 addeq r4, 2 | r4 += 2;
| }
0x000207e2 it eq |
| if (r3 != 0x6c) {
0x000207e4 moveq r0, 2 | r0 = 2;
| }
0x000207e6 b 0x20084 | goto label_1;
| label_79:
0x000207e8 mov fp, r7 |
0x000207ea mov r4, r1 | r4 = r1;
0x000207ec movs r0, 0 | r0 = 0;
0x000207ee b 0x20084 | goto label_1;
| label_80:
0x000207f0 ldr r1, [sp, 0x34] | r1 = var_34h;
0x000207f2 ldr r5, [sp, 0xc] | r5 = var_ch;
0x000207f4 ldrd r2, r3, [r1] | __asm ("ldrd r2, r3, [r1]");
0x000207f8 cmp r2, r3 |
| if (r2 > r3) {
0x000207fa ble 0x20812 |
0x000207fc ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x000207fe ldr.w r0, [r2, r3, lsl 2] | offset_1 = r3 << 2;
| r0 = *((r2 + offset_1));
0x00020802 adds r3, 1 | r3++;
0x00020804 str r3, [r1, 4] | *((r1 + 4)) = r3;
0x00020806 blx 0x89d4 | r0 = fcn_000089d4 ();
0x0002080a mov r7, r0 | r7 = r0;
0x0002080c b 0x20178 | goto label_14;
| label_81:
0x0002080e movs r3, 1 | r3 = 1;
0x00020810 str r3, [sp, 0x10] | var_10h_2 = r3;
| }
0x00020812 movs r7, 0 | r7 = 0;
0x00020814 b 0x2018a | goto label_15;
| label_84:
0x00020816 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00020818 str r5, [sp, 0xc] | var_ch = r5;
0x0002081a ldrd r2, r3, [r1] | __asm ("ldrd r2, r3, [r1]");
0x0002081e cmp r2, r3 |
0x00020820 itt le |
| if (r2 > r3) {
0x00020822 movle r3, 0 | r3 = 0;
| }
| if (r2 <= r3) {
0x00020824 strle r3, [sp, 4] | var_4h_4 = r3;
| goto label_129;
| }
| if (r2 <= r3) {
| label_129:
0x00020826 ble.w 0x201c2 | goto label_16;
| }
0x0002082a ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x0002082c ldr.w r0, [r2, r3, lsl 2] | offset_2 = r3 << 2;
| r0 = *((r2 + offset_2));
0x00020830 adds r3, 1 | r3++;
0x00020832 str r3, [r1, 4] | *((r1 + 4)) = r3;
0x00020834 blx 0x89d4 | fcn_000089d4 ();
0x00020838 str r0, [sp, 4] | var_4h_4 = r0;
0x0002083a b 0x201ae | goto label_17;
| label_107:
0x0002083c cmp r3, 0 |
| if (r3 != 0) {
0x0002083e bne.w 0x209de | goto label_130;
| }
0x00020842 cmp r0, 0 |
| if (r0 != 0) {
0x00020844 bne.w 0x212a6 | goto label_131;
| }
0x00020848 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0002084a ldr r2, [sp, 0x20] | r2 = var_20h;
0x0002084c ldr r7, [r3], 4 | r7 = *(r3);
| r3 += 4;
0x00020850 mov r8, r2 | r8 = r2;
0x00020852 str r2, [sp, 8] | var_8h_2 = r2;
0x00020854 str r3, [sp, 0xc] | var_ch = r3;
| label_22:
0x00020856 orrs.w r3, r7, r8 | r3 = r7 | r8;
| if (r3 == r7) {
0x0002085a bne 0x20862 |
| label_120:
0x0002085c movs r7, 0 | r7 = 0;
0x0002085e mov r8, r7 | r8 = r7;
0x00020860 str r7, [sp, 0x18] | var_18h_2 = r7;
| }
| label_25:
0x00020862 ldr r3, [sp, 0x24] | r3 = var_24h;
| if (r3 != 0) {
0x00020864 cbz r3, 0x2087c |
0x00020866 ldr r3, [sp, 8] | r3 = var_8h_2;
0x00020868 ldr r2, [sp, 4] | r2 = var_4h_4;
0x0002086a cmp r3, 0 |
0x0002086c ite eq |
| if (r3 != 0) {
0x0002086e moveq r3, fp | r3 = fp;
| }
| if (r3 == 0) {
0x00020870 subne r3, fp, 1 | r3 = fp - 1;
| }
0x00020874 cmp r2, r3 |
0x00020876 it lt |
| if (r2 >= r3) {
0x00020878 movlt r2, r3 | r2 = r3;
| }
0x0002087a str r2, [sp, 4] | var_4h_4 = r2;
| }
0x0002087c ldr r0, [sp, 4] | r0 = var_4h_4;
0x0002087e cmp r0, 0x24 |
| if (r0 <= 0x24) {
0x00020880 ble.w 0x209f4 | goto label_132;
| }
0x00020884 asrs r1, r0, 0x1f | r1 = r0 >> 0x1f;
0x00020886 adds.w sl, r0, 0xa | sl = r0 + 0xa;
0x0002088a adc r3, r1, 0 | __asm ("adc r3, r1, 0");
| if (r6 != 0) {
0x0002088e cbz r6, 0x208a6 |
0x00020890 movw r2, 0x5556 |
| /* if there is a right shift of 0, then it's a division by 1/3 */
0x00020894 movt r2, 0x5555 | r2 = 0x55555556;
0x00020898 smull r0, r2, r2, r0 | r0:r2 = r2 * r0;
0x0002089c subs r2, r2, r1 | r2 -= r1;
0x0002089e adds.w sl, r2, sl | sl = r2 + sl;
0x000208a2 adc.w r3, r3, r2, asr 31 | __asm ("adc.w r3, r3, r2, asr 31");
| }
0x000208a6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000208a8 mov r2, sl | r2 = sl;
0x000208aa bl 0x22b18 | r0 = fcn_00022b18 (r0, r1, r2);
0x000208ae cmp r0, 0 |
| if (r0 == 0) {
0x000208b0 beq.w 0x20690 | goto label_8;
| }
0x000208b4 add.w sl, sl, -1 | sl += -1;
0x000208b8 str r0, [sp, 0x2c] | var_2ch = r0;
| label_26:
0x000208ba cmp.w sb, 0xf |
0x000208be add.w r3, r0, sl | r3 = r0 + sl;
0x000208c2 str r3, [sp, 0x1c] | var_1ch_3 = r3;
0x000208c4 it ne |
| if (sb == 0xf) {
0x000208c6 ldrne sl, [sp, 0x1c] | sl = var_1ch_3;
| }
| if (sb == 0xf) {
0x000208ca beq.w 0x20a00 | goto label_133;
| }
| label_27:
0x000208ce ldr.w r2, [pc, 0x6c0] | r2 = *(0x00020f90);
0x000208d2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000208d4 str r4, [sp, 0x24] | var_24h = r4;
0x000208d6 add r2, pc | r2 += pc;
0x000208d8 add r3, r5 | r3 += r5;
0x000208da mov r1, r2 | r1 = r2;
0x000208dc add.w r3, r2, r3, lsl 1 | r3 = r2 + (r3 << 1);
0x000208e0 ldrb.w r2, [r3, 0x188] | r2 = *((r3 + 0x188));
0x000208e4 ldrb.w sb, [r3, 0x185] | sb = *((r3 + 0x185));
0x000208e8 adds r2, r1, r2 | r2 = r1 + r2;
0x000208ea mov r4, r2 | r4 = r2;
| do {
0x000208ec mov r0, r7 | r0 = r7;
0x000208ee mov r1, r8 | r1 = r8;
0x000208f0 mov r2, sb | r2 = sb;
0x000208f2 movs r3, 0 | r3 = 0;
0x000208f4 bl 0xb278c | fcn_000b278c (r0, r1, r2, r3);
0x000208f8 add r2, r4 | r2 += r4;
0x000208fa ldrb.w r3, [r2, 0x220] | r3 = *((r2 + 0x220));
0x000208fe mov r2, r7 | r2 = r7;
0x00020900 cmp r2, sb |
0x00020902 mov r7, r0 | r7 = r0;
0x00020904 strb r3, [sl, -0x1]! | *((sl -= 0x1)) = r3;
0x00020908 mov r3, r8 | r3 = r8;
0x0002090a sbcs r3, r3, 0 | __asm ("sbcs r3, r3, 0");
0x0002090e mov r8, r1 | r8 = r1;
0x00020910 bhs 0x208ec |
| } while (r2 >= sb);
0x00020912 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x00020914 ldr r1, [sp, 4] | r1 = var_4h_4;
0x00020916 ldr r4, [sp, 0x24] | r4 = var_24h;
0x00020918 sub.w r2, r3, sl | r2 = r3 - sl;
0x0002091c cmp r1, r2 |
| if (r1 <= r2) {
0x0002091e ble.w 0x20f64 | goto label_134;
| }
0x00020922 subs r3, r2, r1 | r3 = r2 - r1;
0x00020924 subs r2, r1, r2 | r2 = r1 - r2;
0x00020926 add sl, r3 | sl += r3;
0x00020928 movs r1, 0x30 | r1 = 0x30;
0x0002092a mov r0, sl | r0 = sl;
0x0002092c blx 0x839c | fcn_0000839c ();
| label_53:
0x00020930 cmp r6, 0 |
| if (r6 != 0) {
0x00020932 bne.w 0x20b76 | goto label_135;
| }
| label_28:
0x00020936 ldr r3, [sp, 8] | r3 = var_8h_2;
| if (r3 != 0) {
0x00020938 cbz r3, 0x20942 |
0x0002093a strb r3, [sl, -0x1] | *((sl - 0x1)) = r3;
0x0002093e add.w sl, sl, -1 | sl += -1;
| }
0x00020942 ldr r3, [sp, 0x18] | r3 = var_18h_2;
| if (r3 != 0) {
0x00020944 cbz r3, 0x2095e |
0x00020946 ldr r2, [sp, 0x28] | r2 = var_28h;
0x00020948 ldr.w r3, [pc, 0x648] | r3 = *(0x00020f94);
0x0002094c add r2, r5 | r2 += r5;
0x0002094e add r3, pc | r3 += pc;
0x00020950 add.w r2, r3, r2, lsl 1 | r2 = r3 + (r2 << 1);
0x00020954 ldrb.w r2, [r2, 0x189] | r2 = *((r2 + 0x189));
0x00020958 cmp r2, 0 |
| if (r2 != 0) {
0x0002095a bne.w 0x20c60 | goto label_136;
| }
| }
| label_36:
0x0002095e ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x00020960 sub.w r5, r3, sl | r5 = r3 - sl;
0x00020964 sub.w r6, fp, r5 | r6 = fp - r5;
0x00020968 b 0x20704 | goto label_18;
| label_75:
0x0002096a ldr r3, [sp, 0x20] | r3 = var_20h;
0x0002096c str r3, [sp, 0x34] | var_34h = r3;
0x0002096e b.w 0x1ffa2 | goto label_19;
0x00020972 mov fp, r7 |
0x00020974 b 0x207d4 | goto label_20;
0x00020976 ldr r5, [sp, 0xc] | r5 = var_ch;
0x00020978 b 0x20194 | goto label_21;
| label_127:
0x0002097a ldr r0, [sp, 0x14] | r0 = var_14h;
0x0002097c movs r2, 0 | r2 = 0;
0x0002097e mov r1, sl | r1 = sl;
0x00020980 blx 0x849c | fcn_0000849c ();
0x00020984 b 0x20734 | goto label_11;
| label_119:
0x00020986 ldr r3, [sp, 0x20] | r3 = var_20h;
| if (r3 != 0) {
0x00020988 cbnz r3, 0x209de | goto label_130;
| }
| label_65:
0x0002098a ldr r3, [sp, 0xc] | r3 = var_ch;
0x0002098c mov.w r8, 0 | r8 = 0;
0x00020990 ldr r7, [r3], 4 | r7 = *(r3);
| r3 += 4;
0x00020994 strd r8, r3, [sp, 8] | __asm ("strd r8, r3, [var_ch]");
0x00020998 b 0x20856 | goto label_22;
| if (r5 != 0) {
| label_117:
0x0002099a cbz r5, 0x209a4 |
0x0002099c ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x0002099e cmp r2, 0 |
| if (r2 != 0) {
0x000209a0 bne.w 0x20e5a | goto label_137;
| }
| }
| label_45:
0x000209a4 ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x000209a6 mov r1, sl | r1 = sl;
0x000209a8 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000209aa blx 0x849c | fcn_0000849c ();
0x000209ae b 0x20680 | goto label_23;
| label_85:
0x000209b0 cmp r3, 0 |
| if (r3 != 0) {
0x000209b2 bne.w 0x20eb0 | goto label_138;
| }
0x000209b6 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000209b8 ldr r5, [r1], 4 | r5 = *(r1);
| r1 += 4;
0x000209bc cmp r5, 0 |
| if (r5 == 0) {
0x000209be beq.w 0x2142c | goto label_139;
| }
| label_72:
0x000209c2 ldr r3, [sp, 4] | r3 = var_4h_4;
0x000209c4 mov.w sb, 0 | sb = 0;
0x000209c8 movs r6, 0x22 | r6 = 0x22;
0x000209ca str r1, [sp, 0xc] | var_ch = r1;
0x000209cc asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x000209ce cmp r3, 0 |
| if (r3 != 0) {
0x000209d0 bne.w 0x2023e | goto label_24;
| }
| label_64:
0x000209d4 movs r5, 0 | r5 = 0;
0x000209d6 add r3, sp, 0x44 | r3 += var_44h;
0x000209d8 mov sl, r3 | sl = r3;
0x000209da str r5, [sp, 0x2c] | var_2ch = r5;
0x000209dc b 0x20b30 | goto label_140;
| label_130:
0x000209de ldr r1, [sp, 0x34] | r1 = var_34h;
0x000209e0 ldrd r2, r3, [r1] | __asm ("ldrd r2, r3, [r1]");
0x000209e4 cmp r2, r3 |
| if (r2 > r3) {
0x000209e6 bgt.w 0x20dda | goto label_141;
| }
0x000209ea movs r7, 0 | r7 = 0;
0x000209ec mov r8, r7 | r8 = r7;
0x000209ee str r7, [sp, 8] | var_8h_2 = r7;
0x000209f0 str r7, [sp, 0x18] | var_18h_2 = r7;
0x000209f2 b 0x20862 | goto label_25;
| label_132:
0x000209f4 movs r3, 0 | r3 = 0;
0x000209f6 mov.w sl, 0x45 | sl = 0x45;
0x000209fa add r0, sp, 0x44 | r0 += var_44h;
0x000209fc str r3, [sp, 0x2c] | var_2ch = r3;
0x000209fe b 0x208ba | goto label_26;
| label_133:
0x00020a00 adds.w r1, r7, r8 | r1 = r7 + r8;
0x00020a04 movw r0, 0xcccd |
0x00020a08 adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00020a0c movt r0, 0xcccc | r0 = 0xcccccccd;
0x00020a10 umull r3, ip, r0, r1 | r3:ip = r0 * r1;
0x00020a14 mov.w r2, -0x33333334 | r2 = -0x33333334;
0x00020a18 mov.w lr, 5 | lr = 5;
0x00020a1c bic r3, ip, 3 | r3 = BIT_MASK (ip, 3);
0x00020a20 add.w r3, r3, ip, lsr 2 | r3 += (ip >> 2);
0x00020a24 subs r1, r1, r3 | r1 -= r3;
0x00020a26 subs r3, r7, r1 | r3 = r7 - r1;
0x00020a28 mul ip, r2, r3 |
0x00020a2c sbc sl, r8, 0 | __asm ("sbc sl, r8, 0");
0x00020a30 umull r3, sb, r3, r0 | r3:sb = r3 * r0;
0x00020a34 mla ip, r0, sl, ip | __asm ("mla ip, r0, sl, ip");
0x00020a38 add sb, ip | sb += ip;
0x00020a3a and ip, r3, 1 |
0x00020a3e umull ip, lr, ip, lr | ip:lr = ip * lr;
0x00020a42 lsrs r3, r3, 1 | r3 >>= 1;
0x00020a44 orr.w r3, r3, sb, lsl 31 | r3 |= (sb << 31);
0x00020a48 lsr.w sb, sb, 1 | sb >>= 1;
0x00020a4c adds.w ip, ip, r1 |
0x00020a50 cmp.w ip, 3 |
| if (ip <= 3) {
0x00020a54 bgt 0x20a9c |
0x00020a56 mul r2, r3, r2 | r2 = r3 * r2;
0x00020a5a mla r2, r0, sb, r2 | __asm ("mla r2, r0, sb, r2");
0x00020a5e umull r3, r0, r3, r0 | r3:r0 = r3 * r0;
0x00020a62 adds.w r3, r3, 0x33333333 | r3 += 0x33333333;
0x00020a66 add r2, r0 | r2 += r0;
0x00020a68 lsr.w r1, r3, 1 | r1 = r3 >> 1;
0x00020a6c adc r2, r2, 0x33333333 | __asm ("adc r2, r2, aav.0x000000ff");
0x00020a70 mov.w r0, -0x66666667 | r0 = -0x66666667;
0x00020a74 orr.w r1, r1, r2, lsl 31 | r1 |= (r2 << 31);
0x00020a78 lsrs r2, r2, 1 | r2 >>= 1;
0x00020a7a orr.w r3, r2, r3, lsl 31 | r3 = r2 | (r3 << 31);
0x00020a7e movw r2, 0x9999 |
0x00020a82 movt r2, 0x1999 | r2 = 0x19999999;
0x00020a86 cmp r0, r1 |
0x00020a88 sbcs r2, r3 | __asm ("sbcs r2, r3");
| if (r0 < r1) {
0x00020a8a bhs 0x20a9c |
0x00020a8c ldr.w r3, [pc, 0x508] |
0x00020a90 add r3, pc | r3 = 0x41a2c;
0x00020a92 add.w r3, r3, ip, lsl 1 | r3 += (ip << 1);
0x00020a96 ldrh.w r3, [r3, 0x210] | r3 = *((r3 + 0x210));
0x00020a9a b 0x20aa0 |
| }
| } else {
0x00020a9c movw r3, 0x6874 | r3 = 0x6874;
| }
0x00020aa0 ldr r2, [sp, 0x1c] | r2 = var_1ch_3;
0x00020aa2 sub.w sl, r2, 2 | sl = r2 - 2;
0x00020aa6 strh r3, [r2, -0x2] | *((r2 - 0x2)) = r3;
0x00020aaa b 0x208ce | goto label_27;
| label_90:
0x00020aac adds r3, r7, 3 | r3 = r7 + 3;
0x00020aae mov r4, ip | r4 = ip;
0x00020ab0 adc r0, r8, 0 | __asm ("adc r0, r8, 0");
0x00020ab4 adds r2, r3, r1 | r2 = r3 + r1;
0x00020ab6 adc.w r3, lr, r0 | __asm ("adc.w r3, lr, r0");
0x00020aba cmp r2, 0x47 |
0x00020abc sbcs r1, r3, 0 | __asm ("sbcs r1, r3, 0");
| if (r2 < 0x47) {
0x00020ac0 blt.w 0x20c56 | goto label_142;
| }
0x00020ac4 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00020ac6 bl 0x22b18 | r0 = fcn_00022b18 (r0, r1, r2);
0x00020aca mov sl, r0 | sl = r0;
0x00020acc cmp r0, 0 |
| if (r0 == 0) {
0x00020ace beq.w 0x20690 | goto label_8;
| }
0x00020ad2 str r0, [sp, 0x2c] | var_2ch = r0;
| label_35:
0x00020ad4 cmp.w sb, 0 |
| if (sb != 0) {
0x00020ad8 bne.w 0x20c3e | goto label_143;
| }
0x00020adc orrs.w r3, r7, r8 | r3 = r7 | r8;
0x00020ae0 itt eq |
| if (r3 != r7) {
0x00020ae2 moveq r5, sb | r5 = sb;
| }
| if (r3 != r7) {
0x00020ae4 moveq r3, sl | r3 = sl;
| }
| if (r3 == r7) {
0x00020ae6 beq 0x20b30 | goto label_140;
| }
0x00020ae8 mov r2, sb | r2 = sb;
| label_33:
0x00020aea movs r3, 0 | r3 = 0;
0x00020aec subs r5, 1 | r5--;
0x00020aee mov r1, r3 | r1 = r3;
| do {
0x00020af0 ldrb r0, [r5, 1]! | r0 = *((r5 += 1));
0x00020af4 adds.w ip, r2, 1 |
0x00020af8 cmp r6, r0 |
0x00020afa strb.w r0, [sl, r2] | *((sl + r2)) = r0;
0x00020afe it ne |
| if (r6 == r0) {
0x00020b00 movne r2, ip | r2 = ip;
| }
| if (r6 == r0) {
0x00020b02 bne 0x20b0a |
0x00020b04 adds r2, 2 | r2 += 2;
0x00020b06 strb.w r6, [sl, ip] | *((sl + ip)) = r6;
| }
0x00020b0a adds r3, 1 | r3++;
0x00020b0c adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00020b10 cmp r3, r7 |
0x00020b12 sbcs.w r0, r1, r8 | __asm ("sbcs.w r0, r1, r8");
0x00020b16 blt 0x20af0 |
| } while (r3 < r7);
0x00020b18 mov r1, r2 | r1 = r2;
0x00020b1a add.w r3, sl, r2 | r3 = sl + r2;
0x00020b1e mov r5, r2 | r5 = r2;
0x00020b20 cmp.w sb, 0 |
| if (sb != 0) {
0x00020b24 beq 0x20b30 |
0x00020b26 adds r3, r2, 1 | r3 = r2 + 1;
0x00020b28 mov r5, r3 | r5 = r3;
| label_34:
0x00020b2a add r3, sl | r3 += sl;
0x00020b2c strb.w r6, [sl, r1] | *((sl + r1)) = r6;
| }
| label_140:
0x00020b30 ldr r2, [sp, 0x1c] | r2 = var_1ch_3;
0x00020b32 movs r1, 0 | r1 = 0;
0x00020b34 strb r1, [r3] | *(r3) = r1;
0x00020b36 cmp.w fp, 0 |
0x00020b3a ite le |
| if (fp > 0) {
0x00020b3c movle r2, 0 | r2 = 0;
| }
| if (fp <= 0) {
0x00020b3e andgt r2, r2, 1 | r2 &= 1;
| }
| label_43:
0x00020b42 cmp r2, 0 |
| if (r2 != 0) {
0x00020b44 bne 0x20bd8 | goto label_144;
| }
| label_30:
0x00020b46 sub.w r6, fp, r5 | r6 = fp - r5;
0x00020b4a b 0x20704 | goto label_18;
| label_89:
0x00020b4c adds r0, r5, r7 | r0 = r5 + r7;
0x00020b4e ldrb r0, [r0, 1] | r0 = *((r0 + 1));
0x00020b50 and r0, r0, 0xc0 | r0 &= 0xc0;
0x00020b54 cmp r0, 0x80 |
| if (r0 != 0x80) {
0x00020b56 bne.w 0x20258 | goto label_4;
| }
0x00020b5a adds.w sl, r7, 1 | sl = r7 + 1;
0x00020b5e add sl, r5 | sl += r5;
| do {
0x00020b60 ldrb r0, [sl, 1]! | r0 = *((sl += 1));
0x00020b64 adds r7, 1 | r7++;
0x00020b66 adc r8, r8, 0 | __asm ("adc r8, r8, 0");
0x00020b6a and r0, r0, 0xc0 | r0 &= 0xc0;
0x00020b6e cmp r0, 0x80 |
0x00020b70 beq 0x20b60 |
| } while (r0 == 0x80);
0x00020b72 b.w 0x20258 | goto label_4;
| label_135:
0x00020b76 ldr r3, [sp, 4] | r3 = var_4h_4;
0x00020b78 movw r2, 0x5556 |
| /* if there is a right shift of 0, then it's a division by 1/3 */
0x00020b7c movt r2, 0x5555 | r2 = 0x55555556;
0x00020b80 subs r3, 1 | r3--;
0x00020b82 smull r1, r2, r2, r3 | r1:r2 = r2 * r3;
0x00020b86 sub.w r1, r2, r3, asr 31 | r1 = r2 - (r3 >> 31);
0x00020b8a add.w r2, r1, r1, lsl 1 | r2 = r1 + (r1 << 1);
0x00020b8e sub.w sl, sl, r1 | sl -= r1;
0x00020b92 subs r3, r3, r2 | r3 -= r2;
0x00020b94 adds r2, r3, 1 | r2 = r3 + 1;
0x00020b96 cmp r1, 0 |
| if (r1 == 0) {
0x00020b98 beq.w 0x20936 | goto label_28;
| }
0x00020b9c movs r3, 0 | r3 = 0;
0x00020b9e add.w r7, sl, r1 | r7 = sl + r1;
| do {
| label_29:
0x00020ba2 ldrb r0, [r7, r3] | r0 = *((r7 + r3));
0x00020ba4 subs r2, 1 | r2--;
0x00020ba6 strb.w r0, [sl, r3] | *((sl + r3)) = r0;
0x00020baa it ne |
| if (r2 == 1) {
0x00020bac addne r3, 1 | r3++;
| }
0x00020bae bne 0x20ba2 |
| } while (r2 != 1);
0x00020bb0 subs r1, 1 | r1--;
0x00020bb2 add.w r2, sl, r3 | r2 = sl + r3;
0x00020bb6 strb r6, [r2, 1] | *((r2 + 1)) = r6;
| if (r1 == 1) {
0x00020bb8 beq.w 0x20936 | goto label_28;
| }
0x00020bbc adds r3, 2 | r3 += 2;
0x00020bbe movs r2, 3 | r2 = 3;
0x00020bc0 add.w r7, sl, r1 | r7 = sl + r1;
0x00020bc4 b 0x20ba2 | goto label_29;
| label_55:
0x00020bc6 sub.w r5, r5, sl | r5 -= sl;
| label_54:
0x00020bca cmp.w fp, 0 |
0x00020bce str r7, [sp, 0xc] | var_ch = r7;
0x00020bd0 it le |
| if (fp <= 0) {
0x00020bd2 movle fp, 0 | goto label_145;
| }
| if (fp <= 0) {
| label_145:
0x00020bd6 ble 0x20b46 | goto label_30;
| }
| label_144:
0x00020bd8 cmp r5, 0 |
| if (r5 <= 0) {
0x00020bda ble 0x20b46 | goto label_30;
| }
| label_52:
0x00020bdc add.w r2, sl, r5 | r2 = sl + r5;
| do {
0x00020be0 ldrb r3, [r2, -0x1]! | r3 = *((r2 -= 0x1));
0x00020be4 and r3, r3, 0xc0 | r3 &= 0xc0;
0x00020be8 cmp r3, 0x80 |
0x00020bea it eq |
| if (r3 != 0x80) {
0x00020bec addeq fp, fp, 1 |
| }
0x00020bf0 cmp r2, sl |
0x00020bf2 bne 0x20be0 |
| } while (r2 != sl);
0x00020bf4 b 0x20b46 | goto label_30;
| label_66:
0x00020bf6 cmp.w sb, 3 |
| if (sb == 3) {
0x00020bfa beq.w 0x21444 | goto label_146;
| }
0x00020bfe movs r6, 0 | r6 = 0;
0x00020c00 vmov.i64 d8, 0 | __asm ("vmov.i64 d8, 0");
0x00020c04 mov r1, r6 | r1 = r6;
0x00020c06 mov.w r8, 6 | r8 = 6;
0x00020c0a mov r2, r6 | r2 = r6;
| label_93:
0x00020c0c movw r0, 0xcccd |
0x00020c10 ubfx r3, r8, 0, 0xc | r3 = (r8 >> 0) & ((1 << 0xc) - 1);
0x00020c14 movt r0, 0xcccc |
0x00020c18 cmp r3, 9 |
0x00020c1a umull r7, r0, r0, r3 | r7:r0 = r0 * r3;
0x00020c1e ldr r7, [pc, 0x37c] |
0x00020c20 add r7, pc | r7 = 0x41bc2;
0x00020c22 lsr.w r0, r0, 3 | r0 >>= 3;
0x00020c26 add.w r0, r0, r0, lsl 2 | r0 = 0xcccccccd;
0x00020c2a sub.w r0, r3, r0, lsl 1 | r0 = r3 - (r0 << 1);
0x00020c2e add.w r0, r7, r0, lsl 3 | r0 = r7 + (r0 << 3);
0x00020c32 vldr d16, [r0, 0x250] | __asm ("vldr d16, aav.0x000000ff");
| if (r3 > 9) {
0x00020c36 bgt.w 0x2031e | goto label_31;
| }
0x00020c3a b.w 0x2032c | goto label_32;
| label_143:
0x00020c3e orrs.w r3, r7, r8 | r3 = r7 | r8;
0x00020c42 strb.w r6, [sl] | *(sl) = r6;
0x00020c46 it ne |
| if (r3 != r7) {
0x00020c48 movne r2, 1 | r2 = 1;
| goto label_147;
| }
| if (r3 != r7) {
| label_147:
0x00020c4a bne.w 0x20aea | goto label_33;
| }
| label_74:
0x00020c4e movs r5, 2 | r5 = 2;
0x00020c50 movs r1, 1 | r1 = 1;
0x00020c52 mov r3, r5 | r3 = r5;
0x00020c54 b 0x20b2a | goto label_34;
| label_142:
0x00020c56 movs r3, 0 | r3 = 0;
0x00020c58 add.w sl, sp, 0x44 | sl += var_44h;
0x00020c5c str r3, [sp, 0x2c] | var_2ch = r3;
0x00020c5e b 0x20ad4 | goto label_35;
| label_136:
0x00020c60 adds r1, r3, r2 | r1 = r3 + r2;
0x00020c62 add.w r3, r3, 0x244 | r3 += 0x244;
0x00020c66 add r3, r2 | r3 += r2;
0x00020c68 ldrb.w r2, [r1, 0x244] | r2 = *((r1 + 0x244));
0x00020c6c cmp r2, 0 |
| if (r2 == 0) {
0x00020c6e beq.w 0x2095e | goto label_36;
| }
| do {
0x00020c72 strb r2, [sl, -0x1]! | *((sl -= 0x1)) = r2;
0x00020c76 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x00020c7a cmp r2, 0 |
0x00020c7c bne 0x20c72 |
| } while (r2 != 0);
0x00020c7e b 0x2095e | goto label_36;
| label_95:
0x00020c80 ubfx r1, r1, 0, 0x14 | r1 = (r1 >> 0) & ((1 << 0x14) - 1);
0x00020c84 orrs r1, r6 | r1 |= r6;
| if (r1 == r6) {
0x00020c86 beq.w 0x20342 | goto label_37;
| }
0x00020c8a ldr.w sl, [pc, 0x314] | sl = *(0x00020fa0);
0x00020c8e sub.w r6, fp, 3 | r6 = fp - 3;
0x00020c92 movs r5, 3 | r5 = 3;
0x00020c94 str r0, [sp, 0x2c] | var_2ch = r0;
0x00020c96 add sl, pc | sl += pc;
0x00020c98 b 0x20704 | goto label_18;
| label_94:
0x00020c9a ubfx r1, r1, 0x14, 0xb | r1 = (r1 >> 0x14) & ((1 << 0xb) - 1);
0x00020c9e movw r3, 0x5556 |
0x00020ca2 subw r1, r1, 0x3ff | __asm ("subw r1, r1, aav.0x000000ff");
| /* if there is a right shift of 0, then it's a division by 1/3 */
0x00020ca6 movt r3, 0x5555 | r3 = 0x55555556;
0x00020caa smull r0, r3, r3, r1 | r0:r3 = r3 * r1;
0x00020cae sub.w r3, r3, r1, asr 31 | r3 -= (r1 >> 31);
0x00020cb2 add r3, r8 | r3 += r8;
0x00020cb4 cmp r3, 0xe |
| if (r3 <= 0xe) {
0x00020cb6 bgt 0x20cc0 |
0x00020cb8 vldr d17, [pc, 0x2bc] | __asm ("vldr d17, aav.0x000000ff");
0x00020cbc vmla.f64 d16, d8, d17 | __asm ("vmla.f64 d16, d8, d17");
| }
0x00020cc0 vadd.f64 d8, d8, d16 | __asm ("vadd.f64 d8, d8, d16");
0x00020cc4 vmov r6, s16 | __asm ("vmov r6, s16");
0x00020cc8 vmov r1, s17 | __asm ("vmov r1, s17");
0x00020ccc b.w 0x20334 | goto label_38;
| label_124:
0x00020cd0 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00020cd2 ldrd r2, r3, [r1] | __asm ("ldrd r2, r3, [r1]");
0x00020cd6 cmp r2, r3 |
| if (r2 <= r3) {
0x00020cd8 ble.w 0x21326 | goto label_148;
| }
0x00020cdc ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x00020cde ldr.w r0, [r2, r3, lsl 2] | offset_3 = r3 << 2;
| r0 = *((r2 + offset_3));
0x00020ce2 adds r3, 1 | r3++;
0x00020ce4 str r3, [r1, 4] | *((r1 + 4)) = r3;
0x00020ce6 blx 0x82e8 | r0 = fcn_000082e8 ();
0x00020cea mov r3, r0 | r3 = r0;
0x00020cec cmp r0, 0 |
| if (r0 == 0) {
0x00020cee beq.w 0x21326 | goto label_148;
| }
0x00020cf2 ldrb r2, [r0] | r2 = *(r0);
0x00020cf4 strb.w r2, [sp, 0x44] | var_44h = r2;
0x00020cf8 and r2, r2, 0xc0 | r2 &= 0xc0;
0x00020cfc cmp r2, 0xc0 |
0x00020cfe ittt eq |
| if (r2 != 0xc0) {
0x00020d00 addeq sl, sp, 0x44 | sl += var_44h;
| }
| if (r2 != 0xc0) {
0x00020d04 moveq r5, 1 | r5 = 1;
| }
| if (r2 == 0xc0) {
0x00020d06 mov r2, sl | r2 = sl;
| }
| if (r2 == 0xc0) {
0x00020d08 beq.w 0x20f02 | goto label_50;
| }
| label_39:
0x00020d0c movs r5, 1 | r5 = 1;
0x00020d0e add.w sl, sp, 0x44 | sl += var_44h;
| label_49:
0x00020d12 ldr r3, [sp, 4] | r3 = var_4h_4;
0x00020d14 cmp r3, 1 |
| if (r3 > 1) {
0x00020d16 bgt.w 0x20f1c | goto label_149;
| }
0x00020d1a cmp.w fp, 0 |
0x00020d1e ite le |
| if (fp > 0) {
0x00020d20 movle r7, 0 | r7 = 0;
| }
| if (fp <= 0) {
0x00020d22 movgt r7, 1 | r7 = 1;
| }
0x00020d24 cmp r7, 0 |
| if (r7 != 0) {
0x00020d26 bne.w 0x20f5e | goto label_150;
| }
| label_51:
0x00020d2a str r7, [sp, 0x2c] | var_2ch = r7;
0x00020d2c b 0x20b46 | goto label_30;
| label_110:
0x00020d2e ldr r1, [sp, 0x34] | r1 = var_34h;
0x00020d30 ldrd r2, r3, [r1] | __asm ("ldrd r2, r3, [r1]");
0x00020d34 cmp r2, r3 |
| if (r2 <= r3) {
0x00020d36 ble.w 0x21382 | goto label_151;
| }
0x00020d3a ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x00020d3c ldr.w r0, [r2, r3, lsl 2] | offset_4 = r3 << 2;
| r0 = *((r2 + offset_4));
0x00020d40 adds r3, 1 | r3++;
0x00020d42 str r3, [r1, 4] | *((r1 + 4)) = r3;
0x00020d44 blx 0x82e8 | r0 = fcn_000082e8 ();
0x00020d48 mov sl, r0 | sl = r0;
0x00020d4a cmp r0, 0 |
| if (r0 == 0) {
0x00020d4c beq.w 0x21382 | goto label_151;
| }
0x00020d50 ldr r7, [sp, 0xc] | r7 = var_ch;
0x00020d52 movs r3, 0 | r3 = 0;
0x00020d54 str r3, [sp, 0x2c] | var_2ch = r3;
| label_48:
0x00020d56 ldr r1, [sp, 4] | r1 = var_4h_4;
0x00020d58 adds r0, r1, 1 | r0 = r1 + 1;
| if (r0 == r1) {
0x00020d5a beq 0x20e00 | goto label_114;
| }
| label_42:
0x00020d5c ldr r5, [sp, 0x1c] | r5 = var_1ch_3;
0x00020d5e cmp r5, 0 |
| if (r5 != 0) {
0x00020d60 bne.w 0x20f68 | goto label_152;
| }
0x00020d64 cmp r1, 0 |
| if (r1 == 0) {
0x00020d66 beq.w 0x21472 | goto label_153;
| }
0x00020d6a add.w r3, sl, -1 | r3 = sl + -1;
0x00020d6e b 0x20d76 |
| while (r2 != 0) {
0x00020d70 adds r5, 1 | r5++;
0x00020d72 cmp r1, r5 |
| if (r1 == r5) {
0x00020d74 beq 0x20d7e | goto label_154;
| }
0x00020d76 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x00020d7a cmp r2, 0 |
0x00020d7c bne 0x20d70 |
| }
| label_154:
0x00020d7e str r7, [sp, 0xc] | var_ch = r7;
0x00020d80 b 0x20b46 | goto label_30;
| label_125:
0x00020d82 strb.w r3, [sp, 0x44] | var_44h = r3;
0x00020d86 str r2, [sp, 0xc] | var_ch = r2;
0x00020d88 b 0x20d0c | goto label_39;
| label_91:
0x00020d8a ldr r1, [sp, 0x34] | r1 = var_34h;
0x00020d8c ldrd r2, r3, [r1] | __asm ("ldrd r2, r3, [r1]");
0x00020d90 cmp r2, r3 |
| if (r2 <= r3) {
0x00020d92 ble.w 0x212c6 | goto label_155;
| }
0x00020d96 ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x00020d98 ldr.w r0, [r2, r3, lsl 2] | offset_5 = r3 << 2;
| r0 = *((r2 + offset_5));
0x00020d9c adds r3, 1 | r3++;
0x00020d9e str r3, [r1, 4] | *((r1 + 4)) = r3;
0x00020da0 blx 0x83dc | floor (r0);
0x00020da4 vmov.f64 d8, d0 | __asm ("vmov.f64 d8, d0");
0x00020da8 b.w 0x20296 | goto label_40;
| label_121:
0x00020dac ldr r6, [r5, 8] | r6 = *((r5 + 8));
0x00020dae cmp r6, 0 |
| if (r6 != 0) {
0x00020db0 bne.w 0x20650 | goto label_41;
| }
0x00020db4 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00020db6 ldr r5, [r3, 4] | r5 = *((r3 + 4));
0x00020db8 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00020dba ands r5, r5, 0x800 | r5 &= 0x800;
| if (r5 == r5) {
0x00020dbe beq.w 0x213ec | goto label_156;
| }
0x00020dc2 ldr r5, [sp, 0x14] | r5 = var_14h;
0x00020dc4 ldr r1, [pc, 0x1dc] |
0x00020dc6 mov r0, r5 | r0 = r5;
0x00020dc8 add r1, pc | r1 = 0x41d70;
0x00020dca blx 0x8564 | fcn_00008564 ();
0x00020dce mov r2, r6 | r2 = r6;
0x00020dd0 mov r1, sl | r1 = sl;
0x00020dd2 mov r0, r5 | r0 = r5;
0x00020dd4 blx 0x849c | fcn_0000849c ();
0x00020dd8 b 0x20680 | goto label_23;
| label_141:
0x00020dda ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x00020ddc ldr.w r0, [r2, r3, lsl 2] | offset_6 = r3 << 2;
| r0 = *((r2 + offset_6));
0x00020de0 adds r3, 1 | r3++;
0x00020de2 str r3, [r1, 4] | *((r1 + 4)) = r3;
0x00020de4 movs r3, 0 | r3 = 0;
0x00020de6 str r3, [sp, 8] | var_8h_2 = r3;
0x00020de8 blx 0x89d4 | r0 = fcn_000089d4 ();
0x00020dec mov r7, r0 | r7 = r0;
0x00020dee mov r8, r1 | r8 = r1;
0x00020df0 b 0x20856 | goto label_22;
| label_112:
0x00020df2 ldr r1, [sp, 4] | r1 = var_4h_4;
0x00020df4 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00020df6 ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x00020dfa adds r0, r1, 1 | r0 = r1 + 1;
0x00020dfc str r3, [sp, 0x2c] | var_2ch = r3;
| if (r0 != r1) {
0x00020dfe bne 0x20d5c | goto label_42;
| }
| label_114:
0x00020e00 mov r0, sl | r0 = sl;
0x00020e02 str r7, [sp, 0xc] | var_ch = r7;
0x00020e04 blx 0x85b4 | fcn_000085b4 ();
0x00020e08 ldr r2, [sp, 0x1c] | r2 = var_1ch_3;
0x00020e0a mov r5, r0 | r5 = r0;
0x00020e0c cmp.w fp, 0 |
0x00020e10 ite le |
| if (fp > 0) {
0x00020e12 movle r2, 0 | r2 = 0;
| }
| if (fp <= 0) {
0x00020e14 andgt r2, r2, 1 | r2 &= 1;
| }
0x00020e18 b 0x20b42 | goto label_43;
| label_98:
0x00020e1a adds r7, r6, 4 | r7 = r6 + 4;
0x00020e1c ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x00020e1e ite ge |
| if (r7 < r6) {
0x00020e20 movge r3, 0 | r3 = 0;
| }
| if (r7 >= r6) {
0x00020e22 movlt r3, 1 | r3 = 1;
| }
0x00020e24 cmp r6, r8 |
0x00020e26 it gt |
| if (r6 <= r8) {
0x00020e28 orrgt r3, r3, 1 | r3 |= 1;
| }
0x00020e2c eor r2, r2, 1 | r2 ^= 1;
0x00020e30 str r2, [sp, 0x38] | var_38h = r2;
0x00020e32 cmp r3, 0 |
| if (r3 == 0) {
0x00020e34 beq.w 0x213d8 | goto label_157;
| }
0x00020e38 movs r2, 0 | r2 = 0;
0x00020e3a mov.w sb, 2 | sb = 2;
0x00020e3e mov r3, r2 | r3 = r2;
0x00020e40 str r2, [sp, 4] | var_4h_4 = r2;
0x00020e42 b.w 0x20388 | goto label_44;
| label_122:
0x00020e46 ldr r5, [sp, 0x14] | r5 = var_14h;
0x00020e48 mov r0, r5 | r0 = r5;
0x00020e4a blx 0x8764 | fcn_00008764 ();
0x00020e4e mov r2, r6 | r2 = r6;
0x00020e50 mov r1, sl | r1 = sl;
0x00020e52 mov r0, r5 | r0 = r5;
0x00020e54 blx 0x849c | fcn_0000849c ();
0x00020e58 b 0x20680 | goto label_23;
| label_137:
0x00020e5a ldr r6, [sp, 0x14] | r6 = var_14h;
0x00020e5c ldr r1, [r5] | r1 = *(r5);
0x00020e5e mov r0, r6 | r0 = r6;
0x00020e60 blx 0x849c | fcn_0000849c ();
0x00020e64 str r6, [sp, 0x14] | var_14h = r6;
0x00020e66 ldr r6, [r6] | r6 = *(r6);
0x00020e68 ldr r5, [r5] | r5 = *(r5);
0x00020e6a cmp r6, 0 |
| if (r6 == 0) {
0x00020e6c beq.w 0x209a4 | goto label_45;
| }
0x00020e70 ldr r3, [r6, 0x44] | r3 = *((r6 + 0x44));
0x00020e72 adds r3, 2 | r3 += 2;
| if (r3 != 2) {
0x00020e74 bne.w 0x209a4 | goto label_45;
| }
0x00020e78 ldr.w r3, [r6, 0x108] | r3 = *((r6 + 0x108));
0x00020e7c cmp r3, 0 |
| if (r3 == 0) {
0x00020e7e beq.w 0x209a4 | goto label_45;
| }
0x00020e82 ldr.w r7, [r3, 0xe8] | r7 = *((r3 + 0xe8));
0x00020e86 cmp r7, 0 |
| if (r7 == 0) {
0x00020e88 beq.w 0x209a4 | goto label_45;
| }
0x00020e8c mov r0, r7 | r0 = r7;
0x00020e8e blx 0x85b4 | r0 = fcn_000085b4 ();
0x00020e92 adds r3, r7, r0 | r3 = r7 + r0;
0x00020e94 cmp r7, r5 |
0x00020e96 it ls |
| if (r7 > r5) {
0x00020e98 cmpls r5, r3 | __asm ("cmpls r5, r3");
| goto label_158;
| }
| if (r7 >= r5) {
| label_158:
0x00020e9a bhs.w 0x209a4 | goto label_45;
| }
0x00020e9e subs r5, r5, r7 | r5 -= r7;
0x00020ea0 ldr r2, [sp, 0x18] | r2 = var_18h_2;
0x00020ea2 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00020ea4 mov r1, sl | r1 = sl;
0x00020ea6 str r5, [r6, 0x44] | *((r6 + 0x44)) = r5;
0x00020ea8 blx 0x849c | fcn_0000849c ();
0x00020eac b.w 0x20680 | goto label_23;
| label_138:
0x00020eb0 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00020eb2 ldrd r2, r3, [r2] | __asm ("ldrd r2, r3, [r2]");
0x00020eb6 cmp r3, r2 |
0x00020eb8 it lt |
| if (r3 >= r2) {
0x00020eba movlt r6, 0x22 | r6 = 0x22;
| }
| if (r3 >= r2) {
0x00020ebc bge.w 0x21406 | goto label_159;
| }
| label_63:
0x00020ec0 ldr r1, [sp, 0x34] | r1 = var_34h;
0x00020ec2 ldr r2, [r1, 8] | r2 = *((r1 + 8));
0x00020ec4 ldr.w r0, [r2, r3, lsl 2] | offset_7 = r3 << 2;
| r0 = *((r2 + offset_7));
0x00020ec8 adds r3, 1 | r3++;
0x00020eca str r3, [r1, 4] | *((r1 + 4)) = r3;
0x00020ecc blx 0x82e8 | r0 = fcn_000082e8 ();
0x00020ed0 mov r5, r0 | r5 = r0;
0x00020ed2 b.w 0x20220 | goto label_46;
| label_118:
0x00020ed6 ldr r6, [sp, 0x14] | r6 = var_14h;
0x00020ed8 ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x00020eda mov r0, r6 | r0 = r6;
0x00020edc blx 0x8764 | fcn_00008764 ();
0x00020ee0 ldr r1, [r6] | r1 = *(r6);
| do {
0x00020ee2 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00020ee4 ands r2, r3, 3 | r2 = r3 & 3;
| if (r2 == r3) {
0x00020ee8 bne 0x20ef2 |
0x00020eea ldr r3, [r5, 0x24] | r3 = *((r5 + 0x24));
0x00020eec cmp r3, 0 |
| if (r3 > 0) {
0x00020eee bgt.w 0x213a2 | goto label_160;
| }
| }
0x00020ef2 ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x00020ef4 cmp r5, 0 |
0x00020ef6 bne 0x20ee2 |
| } while (r5 != 0);
0x00020ef8 b.w 0x205b2 | goto label_47;
| label_113:
0x00020efc ldr.w sl, [sp, 0x2c] | sl = var_2ch;
0x00020f00 b 0x20d56 | goto label_48;
| label_50:
0x00020f02 ldrb r1, [r3, 1]! | r1 = *((r3 += 1));
0x00020f06 and r0, r1, 0xc0 | r0 = r1 & 0xc0;
0x00020f0a cmp r0, 0x80 |
| if (r0 != 0x80) {
0x00020f0c bne.w 0x20d12 | goto label_49;
| }
0x00020f10 adds r5, 1 | r5++;
0x00020f12 strb r1, [r2, 1]! | *((r2 += 1)) = r1;
0x00020f16 cmp r5, 4 |
| if (r5 != 4) {
0x00020f18 bne 0x20f02 | goto label_50;
| }
0x00020f1a b 0x20d12 | goto label_49;
| label_149:
0x00020f1c ldr r3, [sp, 4] | r3 = var_4h_4;
0x00020f1e subs r6, r3, 1 | r6 = r3 - 1;
0x00020f20 ldr r3, [sp, 0x10] | r3 = var_10h_2;
0x00020f22 sub.w fp, fp, r6 |
0x00020f26 eor r3, r3, 1 | r3 ^= 1;
0x00020f2a cmp.w fp, 1 |
0x00020f2e ite le |
| if (fp > 1) {
0x00020f30 movle r3, 0 | r3 = 0;
| }
| if (fp <= 1) {
0x00020f32 andgt r3, r3, 1 | r3 &= 1;
| }
0x00020f36 cmp r3, 0 |
| if (r3 != 0) {
0x00020f38 bne.w 0x2132e | goto label_161;
| }
0x00020f3c ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x00020f40 cmp.w fp, 0 |
0x00020f44 ite le |
| if (fp > 0) {
0x00020f46 movle r7, 0 | r7 = 0;
| }
0x00020f48 movgt r7, 1 | r7 = 1;
| while (r6 != 1) {
| label_69:
0x00020f4a mov r2, r5 | r2 = r5;
0x00020f4c mov r1, sl | r1 = sl;
0x00020f4e mov r0, r8 | r0 = r8;
0x00020f50 blx 0x849c | fcn_0000849c ();
0x00020f54 subs r6, 1 | r6--;
0x00020f56 bne 0x20f4a |
| }
0x00020f58 cmp r7, 0 |
| if (r7 == 0) {
0x00020f5a beq.w 0x20d2a | goto label_51;
| }
| label_150:
0x00020f5e movs r3, 0 | r3 = 0;
0x00020f60 str r3, [sp, 0x2c] | var_2ch = r3;
0x00020f62 b 0x20bdc | goto label_52;
| label_134:
0x00020f64 str r2, [sp, 4] | var_4h_4 = r2;
0x00020f66 b 0x20930 | goto label_53;
| label_152:
0x00020f68 ldr r3, [sp, 4] | r3 = var_4h_4;
0x00020f6a mov r5, r3 | r5 = r3;
0x00020f6c cmp r3, 0 |
| if (r3 == 0) {
0x00020f6e beq.w 0x20bca | goto label_54;
| }
0x00020f72 ldr r1, [sp, 4] | r1 = var_4h_4;
0x00020f74 mov r5, sl | r5 = sl;
0x00020f76 b 0x20fb0 | goto label_162;
| label_56:
0x00020fa8 subs r1, 1 | r1--;
0x00020faa mov r5, r2 | r5 = r2;
| if (r1 == 1) {
0x00020fac beq.w 0x21320 | goto label_163;
| }
| label_162:
0x00020fb0 ldrb r3, [r5] | r3 = *(r5);
0x00020fb2 cmp r3, 0 |
| if (r3 == 0) {
0x00020fb4 beq.w 0x20bc6 | goto label_55;
| }
0x00020fb8 cmp r3, 0xbf |
0x00020fba add.w r2, r5, 1 | r2 = r5 + 1;
| if (r3 < 0xbf) {
0x00020fbe bls 0x20fa8 | goto label_56;
| }
0x00020fc0 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x00020fc2 and r3, r3, 0xc0 | r3 &= 0xc0;
0x00020fc6 cmp r3, 0x80 |
| if (r3 != 0x80) {
0x00020fc8 bne 0x20fa8 | goto label_56;
| }
| do {
0x00020fca ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00020fce and r3, r3, 0xc0 | r3 &= 0xc0;
0x00020fd2 cmp r3, 0x80 |
0x00020fd4 beq 0x20fca |
| } while (r3 == 0x80);
0x00020fd6 b 0x20fa8 | goto label_56;
| label_96:
0x00020fd8 vldr d17, [pc, 0x314] | __asm ("vldr d17, aav.0x000000ff");
0x00020fdc vcmpe.f64 d8, d17 | __asm ("vcmpe.f64 d8, d17");
0x00020fe0 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r3 < 0x80) {
0x00020fe4 blt.w 0x2141e | goto label_164;
| }
0x00020fe8 vmov.f64 d19, d17 | __asm ("vmov.f64 d19, d17");
0x00020fec movs r6, 0 | r6 = 0;
| do {
0x00020fee vmov.f64 d18, d17 | __asm ("vmov.f64 d18, d17");
0x00020ff2 adds r6, 0x64 | r6 += 0x64;
0x00020ff4 vmul.f64 d17, d17, d19 | __asm ("vmul.f64 d17, d17, d19");
0x00020ff8 cmp.w r6, 0x15e |
0x00020ffc ite gt |
| if (r6 <= 0x15e) {
0x00020ffe movgt r3, 0 | r3 = 0;
| }
| if (r6 > 0x15e) {
0x00021000 movle r3, 1 | r3 = 1;
| }
0x00021002 and r1, r3, 1 | r1 = r3 & 1;
0x00021006 vcmpe.f64 d17, d8 | __asm ("vcmpe.f64 d17, d8");
0x0002100a vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x0002100e it hi |
| if (r6 <= 0x15e) {
0x00021010 movhi r1, 0 | r1 = 0;
| }
0x00021012 cmp r1, 0 |
0x00021014 bne 0x20fee |
| } while (r1 != 0);
0x00021016 vldr d17, [pc, 0x2e0] | __asm ("vldr d17, aav.0x000000ff");
0x0002101a vmul.f64 d17, d18, d17 | __asm ("vmul.f64 d17, d18, d17");
| label_71:
0x0002101e vcmpe.f64 d8, d17 | __asm ("vcmpe.f64 d8, d17");
0x00021022 and r1, r3, 1 | r1 = r3 & 1;
0x00021026 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x0002102a it lt |
| if (r1 >= 0) {
0x0002102c movlt r1, 0 | r1 = 0;
| }
| if (r1 == 0) {
0x0002102e cbz r1, 0x2105c | goto label_165;
| }
0x00021030 vldr d19, [pc, 0x2c4] | __asm ("vldr d19, aav.0x000000ff");
| do {
0x00021034 vmov.f64 d18, d17 | __asm ("vmov.f64 d18, d17");
0x00021038 adds r6, 0xa | r6 += 0xa;
0x0002103a vmul.f64 d17, d17, d19 | __asm ("vmul.f64 d17, d17, d19");
0x0002103e cmp.w r6, 0x15e |
0x00021042 ite gt |
| if (r6 <= 0x15e) {
0x00021044 movgt r3, 0 | r3 = 0;
| }
| if (r6 > 0x15e) {
0x00021046 movle r3, 1 | r3 = 1;
| }
0x00021048 and r1, r3, 1 | r1 = r3 & 1;
0x0002104c vcmpe.f64 d17, d8 | __asm ("vcmpe.f64 d17, d8");
0x00021050 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x00021054 it hi |
| if (r6 <= 0x15e) {
0x00021056 movhi r1, 0 | r1 = 0;
| }
0x00021058 cmp r1, 0 |
0x0002105a bne 0x21034 |
| } while (r1 != 0);
| label_165:
0x0002105c vmov.f64 d19, 1.000000e+01 | __asm ("vmov.f64 d19, 1");
0x00021060 and r3, r3, 1 | r3 &= 1;
0x00021064 vmul.f64 d17, d18, d19 | __asm ("vmul.f64 d17, d18, d19");
0x00021068 vcmpe.f64 d8, d17 | __asm ("vcmpe.f64 d8, d17");
0x0002106c vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x00021070 it lt |
| if (r1 >= 0) {
0x00021072 movlt r3, 0 | r3 = 0;
| }
| if (r3 == 0) {
0x00021074 cbz r3, 0x2109e | goto label_166;
| }
| do {
0x00021076 vmov.f64 d18, d17 | __asm ("vmov.f64 d18, d17");
0x0002107a adds r6, 1 | r6++;
0x0002107c vmul.f64 d17, d17, d19 | __asm ("vmul.f64 d17, d17, d19");
0x00021080 vcmpe.f64 d17, d8 | __asm ("vcmpe.f64 d17, d8");
0x00021084 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x00021088 ite ls |
| if (r6 > 1) {
0x0002108a movls r3, 1 | r3 = 1;
| }
| if (r6 <= 1) {
0x0002108c movhi r3, 0 | r3 = 0;
| }
0x0002108e cmp.w r6, 0x15e |
0x00021092 ite gt |
| if (r6 <= 0x15e) {
0x00021094 movgt r3, 0 | r3 = 0;
| }
| if (r6 > 0x15e) {
0x00021096 andle r3, r3, 1 | r3 &= 1;
| }
0x0002109a cmp r3, 0 |
0x0002109c bne 0x21076 |
| } while (r3 != 0);
| label_166:
0x0002109e vdiv.f64 d8, d8, d18 | __asm ("vdiv.f64 d8, d8, d18");
0x000210a2 vldr d17, [pc, 0x25c] | __asm ("vldr d17, aav.0x000000ff");
0x000210a6 vcmpe.f64 d8, d17 | __asm ("vcmpe.f64 d8, d17");
0x000210aa vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r3 >= 0) {
0x000210ae bpl 0x210c4 | goto label_167;
| }
0x000210b0 vldr d18, [pc, 0x254] | __asm ("vldr d18, aav.0x000000ff");
| do {
0x000210b4 vmul.f64 d8, d8, d18 | __asm ("vmul.f64 d8, d8, d18");
0x000210b8 subs r6, 8 | r6 -= 8;
0x000210ba vcmpe.f64 d8, d17 | __asm ("vcmpe.f64 d8, d17");
0x000210be vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x000210c2 bmi 0x210b4 |
| } while (r6 < 8);
| label_167:
0x000210c4 vmov.f64 d17, 1.000000e+00 | __asm ("vmov.f64 d17, 1");
0x000210c8 vcmpe.f64 d8, d17 | __asm ("vcmpe.f64 d8, d17");
0x000210cc vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
| if (r6 >= 8) {
0x000210d0 bpl 0x210e6 | goto label_168;
| }
0x000210d2 vmov.f64 d18, 1.000000e+01 | __asm ("vmov.f64 d18, 1");
| do {
0x000210d6 vmul.f64 d8, d8, d18 | __asm ("vmul.f64 d8, d8, d18");
0x000210da subs r6, 1 | r6--;
0x000210dc vcmpe.f64 d8, d17 | __asm ("vcmpe.f64 d8, d17");
0x000210e0 vmrs apsr_nzcv, fpscr | __asm ("vmrs apsr_nzcv, fpscr");
0x000210e4 bmi 0x210d6 |
| } while (r6 < 1);
| label_168:
0x000210e6 cmp.w r6, 0x15e |
| if (r6 <= 0x15e) {
0x000210ea ble.w 0x20352 | goto label_57;
| }
0x000210ee ldr r3, [sp, 8] | r3 = var_8h_2;
0x000210f0 add.w sl, sp, 0x44 | sl += var_44h;
0x000210f4 cmp r3, 0 |
0x000210f6 strb.w r3, [sp, 0x44] | var_44h = r3;
0x000210fa ldr r3, [pc, 0x214] |
0x000210fc ittee ne |
| if (r3 == 0) {
0x000210fe subne r6, fp, 4 | r6 = fp - 4;
| }
| if (r3 != 0) {
0x00021102 moveq r5, 4 | r5 = 4;
| }
| if (r3 != 0) {
0x00021104 subeq r6, fp, 3 | r6 = fp - 3;
| }
| if (r3 == 0) {
0x00021108 movs r5, 3 | r5 = 3;
| }
0x0002110a add r3, pc | r3 = 0x42420;
0x0002110c ldr r0, [r3] | r0 = *(0x42420);
0x0002110e ite ne |
| if (r5 == 3) {
0x00021110 movne r3, 1 | r3 = 1;
| }
| if (r5 != 3) {
0x00021112 moveq r3, 0 | r3 = 0;
| }
0x00021114 str.w r0, [sl, r3] | __asm ("str.w r0, [sl, r3]");
0x00021118 itete ne |
| if (r5 == 3) {
0x0002111a movne r3, 0 | r3 = 0;
| }
| if (r5 != 3) {
0x0002111c ldreq r3, [sp, 8] | r3 = var_8h_2;
| }
| if (r5 == 3) {
0x0002111e strne r3, [sp, 0x2c] | var_2ch = r3;
| }
| if (r5 != 3) {
0x00021120 streq r3, [sp, 0x2c] | var_2ch = r3;
| }
0x00021122 b.w 0x20704 | goto label_18;
| label_104:
0x00021126 ldr r1, [sp, 0x28] | r1 = var_28h;
0x00021128 cmp r6, 0 |
0x0002112a ldr r3, [pc, 0x1e8] |
0x0002112c it lt |
| if (r6 < 0) {
0x0002112e rsblt r6, r6, 0 | __asm ("rsblt r6, r6, 0");
| }
0x00021130 add r1, r5 | r1 += r5;
0x00021132 add r3, pc | r3 = 0x4244c;
0x00021134 add.w r1, r3, r1, lsl 1 | r1 = r3 + (r1 << 1);
0x00021138 ldrb.w r1, [r1, 0x188] | r1 = *((r1 + 0x188));
0x0002113c add r3, r1 | r3 += r1;
0x0002113e ldrb.w r3, [r3, 0x220] | r3 = *((r3 + 0x220));
0x00021142 strb r3, [r2] | *(r2) = r3;
0x00021144 ite lt |
| if (r6 >= 0) {
0x00021146 movlt r3, 0x2d | r3 = 0x2d;
| }
| if (r6 < 0) {
0x00021148 movge r3, 0x2b | r3 = 0x2b;
| }
0x0002114a cmp r6, 0x63 |
0x0002114c it le |
| if (r6 > 0x63) {
0x0002114e addle r0, r2, 2 | r0 = r2 + 2;
| }
0x00021150 strb r3, [r2, 1] | *((r2 + 1)) = r3;
| if (r6 > 0x63) {
0x00021152 ble 0x2116e |
0x00021154 movw r3, 0x851f |
0x00021158 adds r0, r2, 3 | r0 = r2 + 3;
| /* if there is a right shift of 5, then it's a division by 1/100 */
0x0002115a movt r3, 0x51eb | r3 = 0x51eb851f;
0x0002115e umull r1, r3, r3, r6 | r1:r3 = r3 * r6;
0x00021162 movs r1, 0x64 | r1 = 0x64;
0x00021164 lsrs r3, r3, 5 | r3 >>= 5;
0x00021166 mls r6, r1, r3, r6 | __asm ("mls r6, r1, r3, r6");
0x0002116a adds r3, 0x30 | r3 += 0x30;
0x0002116c strb r3, [r2, 2] | *((r2 + 2)) = r3;
| }
0x0002116e movw r3, 0xcccd |
0x00021172 movt r3, 0xcccc | r3 = 0xcccccccd;
0x00021176 umull r2, r3, r3, r6 | r2:r3 = r3 * r6;
0x0002117a mov r2, r0 | r2 = r0;
0x0002117c lsrs r1, r3, 3 | r1 = r3 >> 3;
0x0002117e add.w r3, r1, r1, lsl 2 | r3 = r1 + (r1 << 2);
0x00021182 adds r1, 0x30 | r1 += 0x30;
0x00021184 strb r1, [r2], 2 | *(r2) = r1;
| r2 += 2;
0x00021188 sub.w r3, r6, r3, lsl 1 | r3 = r6 - (r3 << 1);
0x0002118c adds r3, 0x30 | r3 += 0x30;
0x0002118e strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x00021190 b.w 0x20462 | goto label_58;
| label_97:
0x00021194 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x00021196 bic.w r2, r6, r6, asr 31 | r2 = BIT_MASK (r6, r6);
0x0002119a str r6, [sp, 4] | var_4h_4 = r6;
0x0002119c str r3, [sp, 0x38] | var_38h = r3;
0x0002119e asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000211a0 b.w 0x20388 | goto label_44;
| label_101:
0x000211a4 adds r3, r0, 1 | r3 = r0 + 1;
0x000211a6 cmp r2, 0 |
| if (r2 != 0) {
0x000211a8 bne.w 0x203f6 | goto label_59;
| }
0x000211ac mov r2, r3 | r2 = r3;
0x000211ae b.w 0x2045a | goto label_60;
| label_100:
0x000211b2 ldr r3, [sp, 4] | r3 = var_4h_4;
0x000211b4 subs r1, r0, 1 | r1 = r0 - 1;
0x000211b6 vmov.f64 d17, 1.000000e+01 | __asm ("vmov.f64 d17, 1");
0x000211ba add.w ip, r0, r3 |
| do {
0x000211be cmp r7, 0 |
0x000211c0 it le |
| if (r7 > 0) {
0x000211c2 movle r3, 0x30 | r3 = 0x30;
| }
| if (r7 > 0) {
0x000211c4 ble 0x211e0 |
0x000211c6 vcvt.s32.f64 s15, d8 | __asm ("vcvt.s32.f64 s15, d8");
0x000211ca subs r7, 1 | r7--;
0x000211cc vcvt.f64.s32 d16, s15 | __asm ("vcvt.f64.s32 d16, s15");
0x000211d0 vmov r3, s15 | __asm ("vmov r3, s15");
0x000211d4 adds r3, 0x30 | r3 += 0x30;
0x000211d6 uxtb r3, r3 | r3 = (int8_t) r3;
0x000211d8 vsub.f64 d8, d8, d16 | __asm ("vsub.f64 d8, d8, d16");
0x000211dc vmul.f64 d8, d8, d17 | __asm ("vmul.f64 d8, d8, d17");
| }
0x000211e0 strb r3, [r1, 1]! | *((r1 += 1)) = r3;
0x000211e4 cmp r1, ip |
0x000211e6 bne 0x211be |
| } while (r1 != ip);
0x000211e8 ldr r1, [sp, 4] | r1 = var_4h_4;
0x000211ea ldr r3, [sp, 0x18] | r3 = var_18h_2;
0x000211ec adds r1, 1 | r1++;
0x000211ee adds r2, r0, r1 | r2 = r0 + r1;
0x000211f0 cmp r3, 0 |
| if (r3 == 0) {
0x000211f2 beq.w 0x2045a | goto label_60;
| }
0x000211f6 adds r3, r2, 1 | r3 = r2 + 1;
0x000211f8 movs r2, 0x2e | r2 = 0x2e;
0x000211fa strb r2, [r0, r1] | *((r0 + r1)) = r2;
0x000211fc b.w 0x2040e | goto label_61;
| label_99:
0x00021200 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00021202 bl 0x22b18 | r0 = fcn_00022b18 (r0, r1, r2);
0x00021206 mov sl, r0 | sl = r0;
0x00021208 cmp r0, 0 |
| if (r0 == 0) {
0x0002120a beq.w 0x20690 | goto label_8;
| }
0x0002120e str r0, [sp, 0x2c] | var_2ch = r0;
0x00021210 b.w 0x203b4 | goto label_62;
| label_86:
0x00021214 ldr r2, [sp, 0x34] | r2 = var_34h;
0x00021216 movs r6, 0x27 | r6 = 0x27;
0x00021218 ldrd r2, r3, [r2] | __asm ("ldrd r2, r3, [r2]");
0x0002121c cmp r2, r3 |
| if (r2 > r3) {
0x0002121e bgt.w 0x20ec0 | goto label_63;
| }
| label_87:
0x00021222 ldr r3, [sp, 4] | r3 = var_4h_4;
0x00021224 cmp.w sb, 0xa |
0x00021228 asr.w r2, r3, 0x1f | r2 = r3 >> 0x1f;
| if (sb != 0xa) {
0x0002122c bne.w 0x21390 | goto label_169;
| }
0x00021230 cmp r3, 0 |
| if (r3 == 0) {
0x00021232 beq.w 0x209d4 | goto label_64;
| }
0x00021236 ldr r5, [pc, 0xe0] |
0x00021238 mov.w sb, 0 | sb = 0;
0x0002123c add r5, pc | r5 = 0x4255a;
0x0002123e b.w 0x2023e | goto label_24;
| label_103:
0x00021242 ldrb r1, [r2, -0x1] | r1 = *((r2 - 0x1));
0x00021246 cmp r1, 0x30 |
| if (r1 != 0x30) {
0x00021248 bne 0x2125a | goto label_170;
| }
0x0002124a subs r3, r2, 1 | r3 = r2 - 1;
0x0002124c movs r0, 0 | r0 = 0;
| do {
0x0002124e mov r2, r3 | r2 = r3;
0x00021250 strb r0, [r3] | *(r3) = r0;
0x00021252 ldrb r1, [r3, -0x1]! | r1 = *((r3 -= 0x1));
0x00021256 cmp r1, 0x30 |
0x00021258 beq 0x2124e |
| } while (r1 == 0x30);
| label_170:
0x0002125a cmp r1, 0x2e |
| if (r1 != 0x2e) {
0x0002125c bne.w 0x2045a | goto label_60;
| }
0x00021260 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x00021262 cmp r3, 0 |
| if (r3 == 0) {
0x00021264 beq.w 0x21434 | goto label_171;
| }
0x00021268 movs r3, 0x30 | r3 = 0x30;
0x0002126a strb r3, [r2], 1 | *(r2) = r3;
| r2++;
0x0002126e b.w 0x2045a | goto label_60;
| label_111:
0x00021272 ldr.w sl, [pc, 0xa8] | sl = *(0x0002131c);
0x00021276 add sl, pc | sl += pc;
0x00021278 b 0x20d56 | goto label_48;
| label_126:
0x0002127a cmp.w r3, 0x10000 |
0x0002127e and r1, r1, 0x3f | r1 &= 0x3f;
0x00021282 orr r1, r1, 0x80 | r1 |= 0x80;
0x00021286 ubfx r5, r3, 0xc, 8 | r5 = (r3 >> 0xc) & ((1 << 8) - 1);
| if (r3 >= 0x10000) {
0x0002128a bhs.w 0x213b0 | goto label_172;
| }
0x0002128e subs r5, 0x20 | r5 -= 0x20;
0x00021290 add.w sl, sp, 0x44 | sl += var_44h;
0x00021294 strb.w r5, [sp, 0x44] | var_44h = r5;
0x00021298 movs r5, 3 | r5 = 3;
0x0002129a strb.w r1, [sp, 0x45] | var_45h = r1;
0x0002129e strb.w r0, [sp, 0x46] | var_46h = r0;
0x000212a2 str r2, [sp, 0xc] | var_ch = r2;
0x000212a4 b 0x20d12 | goto label_49;
| label_131:
0x000212a6 cmp r0, 2 |
| if (r0 != 2) {
0x000212a8 bne.w 0x2098a | goto label_65;
| }
0x000212ac ldr r3, [sp, 0xc] | r3 = var_ch;
0x000212ae ldr r2, [sp, 0x20] | r2 = var_20h;
0x000212b0 adds r3, 7 | r3 += 7;
0x000212b2 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x000212b6 str r2, [sp, 8] | var_8h_2 = r2;
0x000212b8 ldr.w r8, [r3, 4] | r8 = *((r3 + 4));
0x000212bc ldr r7, [r3], 8 | r7 = *(r3);
| r3 += 8;
0x000212c0 str r3, [sp, 0xc] | var_ch = r3;
0x000212c2 b.w 0x20856 | goto label_22;
| label_155:
0x000212c6 ldr r3, [sp, 4] | r3 = var_4h_4;
0x000212c8 adds r3, 1 | r3++;
| if (r3 == 1) {
0x000212ca beq.w 0x20bf6 | goto label_66;
| }
0x000212ce vmov.i64 d8, 0 | __asm ("vmov.i64 d8, 0");
0x000212d2 b.w 0x202a4 | goto label_67;
| label_109:
0x000212d6 cmp r0, 2 |
| if (r0 != 2) {
0x000212d8 bne.w 0x204c8 | goto label_68;
| }
0x000212dc ldr r3, [sp, 0xc] | r3 = var_ch;
0x000212de adds r3, 7 | r3 += 7;
0x000212e0 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x000212e4 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x000212e6 ldr r7, [r3], 8 | r7 = *(r3);
| r3 += 8;
0x000212ea str r3, [sp, 0xc] | var_ch = r3;
0x000212ec b.w 0x204d2 | goto label_5;
| label_163:
0x00021320 sub.w r5, r2, sl | r5 = r2 - sl;
0x00021324 b 0x20bca | goto label_54;
| label_148:
0x00021326 movs r3, 0 | r3 = 0;
0x00021328 strb.w r3, [sp, 0x44] | var_44h = r3;
0x0002132c b 0x20d0c | goto label_39;
| label_161:
0x0002132e ldr.w r8, [sp, 0x14] | r8 = var_14h;
0x00021332 add.w r1, fp, -1 | r1 = fp + -1;
0x00021336 movs r2, 0x20 | r2 = 0x20;
0x00021338 mov.w fp, 0 |
0x0002133c mov r7, fp | r7 = fp;
0x0002133e mov r0, r8 | r0 = r8;
0x00021340 blx 0x8824 | fcn_00008824 ();
0x00021344 b 0x20f4a | goto label_69;
| label_105:
0x00021346 ldr r3, [sp, 8] | r3 = var_8h_2;
0x00021348 subs r0, r3, 0 | r0 = r3 - 0;
0x0002134a it ne |
| if (r0 == r3) {
0x0002134c movne r0, 1 | r0 = 1;
| }
0x0002134e cmp fp, r6 |
0x00021350 itt ge |
| if (fp < r6) {
0x00021352 addge r1, fp, 1 | r1 += arg_1h;
| }
| if (fp >= r6) {
0x00021356 add r1, sl | r1 += sl;
| }
| if (fp < r6) {
0x00021358 blt 0x21368 | goto label_173;
| }
| do {
0x0002135a ldrb r3, [r2] | r3 = *(r2);
0x0002135c cmp r2, sl |
0x0002135e add.w r2, r2, -1 | r2 += -1;
0x00021362 strb r3, [r1, -0x1]! | *((r1 -= 0x1)) = r3;
0x00021366 bne 0x2135a |
| } while (r2 != sl);
| label_173:
0x00021368 mov r2, r6 | r2 = r6;
0x0002136a add r0, sl | r0 += sl;
0x0002136c movs r1, 0x30 | r1 = 0x30;
0x0002136e mov r5, fp | r5 = fp;
0x00021370 blx 0x839c | fcn_0000839c ();
| label_106:
0x00021374 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00021376 mov r2, r5 | r2 = r5;
0x00021378 mov r1, sl | r1 = sl;
0x0002137a blx 0x849c | fcn_0000849c ();
0x0002137e b.w 0x20728 | goto label_70;
| label_151:
0x00021382 ldr.w sl, [pc, 0x10c] |
0x00021386 movs r3, 0 | r3 = 0;
0x00021388 ldr r7, [sp, 0xc] | r7 = var_ch;
0x0002138a str r3, [sp, 0x2c] | var_2ch = r3;
0x0002138c add sl, pc | sl = 0x42822;
0x0002138e b 0x20d56 | goto label_48;
| label_169:
0x00021390 cmp r3, 0 |
| if (r3 == 0) {
0x00021392 beq.w 0x209d4 | goto label_64;
| }
0x00021396 ldr r5, [pc, 0xfc] |
0x00021398 mov.w sb, 0 | sb = 0;
0x0002139c add r5, pc | r5 = 0x42836;
0x0002139e b.w 0x2023e | goto label_24;
| label_160:
0x000213a2 str r3, [r1, 0x44] | *((r1 + 0x44)) = r3;
0x000213a4 mov r1, sl | r1 = sl;
0x000213a6 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000213a8 blx 0x849c | fcn_0000849c ();
0x000213ac b.w 0x20680 | goto label_23;
| label_172:
0x000213b0 ubfx r3, r3, 0x12, 3 | r3 = (r3 >> 0x12) & ((1 << 3) - 1);
0x000213b4 and r5, r5, 0x3f | r5 &= 0x3f;
0x000213b8 subs r3, 0x10 | r3 -= 0x10;
0x000213ba add.w sl, sp, 0x44 | sl += var_44h;
0x000213be strb.w r3, [sp, 0x44] | var_44h = r3;
0x000213c2 sub.w r3, r5, 0x80 | r3 = r5 - 0x80;
0x000213c6 strb.w r1, [sp, 0x46] | var_46h = r1;
0x000213ca movs r5, 4 | r5 = 4;
0x000213cc strb.w r0, [sp, 0x47] | var_47h = r0;
0x000213d0 str r2, [sp, 0xc] | var_ch = r2;
0x000213d2 strb.w r3, [sp, 0x45] | var_45h = r3;
0x000213d6 b 0x20d12 | goto label_49;
| label_157:
0x000213d8 bic.w r2, r6, r6, asr 31 | r2 = BIT_MASK (r6, r6);
0x000213dc sub.w r8, r8, r6 | r8 -= r6;
0x000213e0 mov.w sb, 1 | sb = 1;
0x000213e4 str r6, [sp, 4] | var_4h_4 = r6;
0x000213e6 asrs r3, r2, 0x1f | r3 = r2 >> 0x1f;
0x000213e8 b.w 0x20388 | goto label_44;
| label_156:
0x000213ec ldr r6, [sp, 0x14] | r6 = var_14h;
0x000213ee ldr r1, [pc, 0xa8] |
0x000213f0 mov r0, r6 | r0 = r6;
0x000213f2 add r1, pc | r1 = 0x42890;
0x000213f4 blx 0x8564 | fcn_00008564 ();
0x000213f8 mov r2, r5 | r2 = r5;
0x000213fa mov r1, sl | r1 = sl;
0x000213fc mov r0, r6 | r0 = r6;
0x000213fe blx 0x849c | fcn_0000849c ();
0x00021402 b.w 0x20680 | goto label_23;
| label_159:
0x00021406 ldr r3, [sp, 4] | r3 = var_4h_4;
0x00021408 asrs r2, r3, 0x1f | r2 = r3 >> 0x1f;
0x0002140a cmp r3, 0 |
| if (r3 == 0) {
0x0002140c beq.w 0x209d4 | goto label_64;
| }
0x00021410 ldr r5, [pc, 0x88] |
0x00021412 mov.w sb, 0 | sb = 0;
0x00021416 movs r6, 0x22 | r6 = 0x22;
0x00021418 add r5, pc | r5 = 0x428b8;
0x0002141a b.w 0x2023e | goto label_24;
| label_164:
0x0002141e vldr d17, [pc, 0x60] | __asm ("vldr d17, aav.0x000000ff");
0x00021422 movs r3, 1 | r3 = 1;
0x00021424 vmov.f64 d18, 1.000000e+00 | __asm ("vmov.f64 d18, 1");
0x00021428 movs r6, 0 | r6 = 0;
0x0002142a b 0x2101e | goto label_71;
| label_139:
0x0002142c ldr r5, [pc, 0x70] |
0x0002142e add r5, pc | r5 = 0x428d2;
0x00021430 b.w 0x209c2 | goto label_72;
| label_171:
0x00021434 ldr r3, [sp, 0x1c] | r3 = var_1ch_3;
0x00021436 subs r2, 1 | r2--;
0x00021438 strb r3, [r2] | *(r2) = r3;
0x0002143a b.w 0x2045a | goto label_60;
| label_102:
0x0002143e mov r2, r3 | r2 = r3;
0x00021440 b.w 0x20450 | goto label_73;
| label_146:
0x00021444 movs r6, 0 | r6 = 0;
0x00021446 vldr d16, [pc, 0x40] | __asm ("vldr d16, aav.0x000000ff");
0x0002144a vmov.i64 d8, 0 | __asm ("vmov.i64 d8, 0");
0x0002144e movs r2, 1 | r2 = 1;
0x00021450 mov r1, r6 | r1 = r6;
0x00021452 mov.w r8, 5 | r8 = 5;
0x00021456 b.w 0x20334 | goto label_38;
| label_88:
0x0002145a cmp.w sb, 0xa |
| if (sb != 0xa) {
0x0002145e bne.w 0x209d4 | goto label_64;
| }
0x00021462 ldr r3, [sp, 4] | r3 = var_4h_4;
0x00021464 add.w sl, sp, 0x44 | sl += var_44h;
0x00021468 strb.w r6, [sp, 0x44] | var_44h = r6;
0x0002146c str r3, [sp, 0x2c] | var_2ch = r3;
0x0002146e b.w 0x20c4e | goto label_74;
| label_153:
0x00021472 ldr r5, [sp, 4] | r5 = var_4h_4;
0x00021474 mov r6, fp | r6 = fp;
0x00021476 str r7, [sp, 0xc] | var_ch = r7;
0x00021478 b.w 0x20704 | goto label_18;
| label_123:
0x0002147c blx 0x883c | r0 = fcn_0000883c ();
0x00021480 movs r0, r0 |
0x00021482 movs r0, 0 | r0 = 0;
0x00021484 adr r0, 0x17c | r0 = 0x17c;
0x00021486 tst r2, r0 |
0x00021488 ldr r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x0002148a ldrh r3, [r4, 6] | r3 = *((r4 + 6));
0x0002148c ldrh.w r3, [r5, 0xed4] | r3 = *((r5 + 0xed4));
0x00021490 tst r4, r2 |
0x00021492 movs r1, r1 |
0x00021494 adds r4, r6, r0 | r4 = r6 + r0;
0x00021496 movs r1, r1 |
0x00021498 asrs r6, r7, 0x1f | r6 = r7 >> 0x1f;
0x0002149a movs r1, r1 |
0x0002149c asrs r0, r7, 0x1e | r0 = r7 >> 0x1e;
0x0002149e movs r1, r1 |
0x000214a0 asrs r2, r4, 0x1e | r2 = r4 >> 0x1e;
0x000214a2 movs r1, r1 |
0x0002f182 lsls r0, r0, 0xc | r0 <<= 0xc;
| if (r0 != r0) {
0x0002f184 bne 0x2f1ec | void (*0x2f1ec)() ();
| }
0x0002f186 mov r3, sb | r3 = sb;
0x0002f188 mov r2, r6 | r2 = r6;
0x0002f18a mov r1, r5 | r1 = r5;
0x0002f18c mov r0, r8 | r0 = r8;
0x0002f18e add sp, 0x24 |
0x0002f190 pop.w {r4, r5, r6, r7, r8, sb, lr} |
0x0002f194 b 0x2efd0 | return void (*0x2efd0)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libsqlite3.so.0.8.6 @ 0xa81d4 */
| #include <stdint.h>
|
; (fcn) sym.sqlite3_table_column_metadata () | void sqlite3_table_column_metadata (int16_t arg_58h, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_68h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int32_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int16_t var_2ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000a81d4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000a81d8 sub sp, 0x34 |
0x000a81da strd r2, r3, [sp, 0x14] | __asm ("strd r2, r3, [var_14h]");
0x000a81de mov r4, r0 | r4 = r0;
0x000a81e0 mov r5, r1 | r5 = r1;
0x000a81e2 ldr r2, [pc, 0x2d0] |
0x000a81e4 ldr r0, [sp, 0x58] | r0 = *(arg_58h);
0x000a81e6 ldr r3, [pc, 0x2d0] | r3 = *(0xa84ba);
0x000a81e8 add r2, pc | r2 = 0x1506a2;
0x000a81ea str r0, [sp] | *(sp) = r0;
0x000a81ec ldr r3, [r2, r3] |
0x000a81ee ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a81f0 ldr r3, [r3] | r3 = imp.sinh;
0x000a81f2 str r3, [sp, 0x2c] | var_2ch = r3;
0x000a81f4 mov.w r3, 0 | r3 = 0;
0x000a81f8 movs r3, 0 | r3 = 0;
0x000a81fa str r3, [sp, 0x28] | var_28h = r3;
0x000a81fc ldr r3, [sp, 0x5c] | r3 = *(arg_5ch);
0x000a81fe str r3, [sp, 4] | var_4h = r3;
0x000a8200 ldr r3, [sp, 0x60] | r3 = *(arg_60h);
0x000a8202 str r3, [sp, 8] | var_8h = r3;
0x000a8204 ldr r3, [sp, 0x64] | r3 = *(arg_64h);
0x000a8206 str r3, [sp, 0xc] | var_ch = r3;
0x000a8208 ldr r3, [sp, 0x68] | r3 = *(arg_68h);
0x000a820a str r3, [sp, 0x10] | var_10h = r3;
0x000a820c blx 0x8b50 | fcn_00008b50 ();
0x000a8210 ldrb.w r3, [r4, 0x5f] | r3 = *((r4 + 0x5f));
0x000a8214 cmp r3, 0 |
| if (r3 == 0) {
0x000a8216 beq.w 0xa83fe | goto label_9;
| }
| label_5:
0x000a821a add r1, sp, 0x28 | r1 += var_28h;
0x000a821c mov r0, r4 | r0 = r4;
0x000a821e bl 0x89ecc | r0 = fcn_00089ecc (r0, r1);
0x000a8222 mov r6, r0 | r6 = r0;
0x000a8224 cmp r0, 0 |
| if (r0 == 0) {
0x000a8226 beq 0xa82e8 | goto label_10;
| }
| label_0:
0x000a8228 movs r7, 0 | r7 = 0;
0x000a822a mov fp, r7 |
0x000a822c mov sl, r7 | sl = r7;
0x000a822e mov r5, r7 | r5 = r7;
0x000a8230 mov sb, r7 | sb = r7;
0x000a8232 mov r8, r7 | r8 = r7;
| label_2:
0x000a8234 ldrb.w r3, [r4, 0x5f] | r3 = *((r4 + 0x5f));
0x000a8238 cmp r3, 0 |
| if (r3 == 0) {
0x000a823a beq.w 0xa8406 | goto label_11;
| }
| label_6:
0x000a823e ldr r3, [sp] | r3 = *(sp);
| if (r3 != 0) {
0x000a8240 cbz r3, 0xa8246 |
0x000a8242 str.w sb, [r3] | __asm ("str.w sb, [r3]");
| }
0x000a8246 ldr r3, [sp, 4] | r3 = var_4h;
| if (r3 != 0) {
0x000a8248 cbz r3, 0xa824c |
0x000a824a str r5, [r3] | *(r3) = r5;
| }
0x000a824c ldr r3, [sp, 8] | r3 = var_8h;
| if (r3 != 0) {
0x000a824e cbz r3, 0xa8254 |
0x000a8250 str.w sl, [r3] | __asm ("str.w sl, [r3]");
| }
0x000a8254 ldr r3, [sp, 0xc] | r3 = var_ch;
| if (r3 != 0) {
0x000a8256 cbz r3, 0xa825c |
0x000a8258 str.w fp, [r3] | __asm ("str.w fp, [r3]");
| }
0x000a825c ldr r3, [sp, 0x10] | r3 = var_10h;
| if (r3 != 0) {
0x000a825e cbz r3, 0xa8262 |
0x000a8260 str r7, [r3] | *(r3) = r7;
| }
0x000a8262 orrs.w r8, r8, r6 | r8 |= r6;
0x000a8266 ldr r3, [sp, 0x28] | r3 = var_28h;
| if (r8 == r8) {
0x000a8268 beq 0xa82c6 | goto label_12;
| }
0x000a826a subs r5, r6, 0 | r5 = r6 - 0;
0x000a826c it ne |
0x000a826e movne r5, 1 | r5 = 1;
| while (1) {
0x000a8270 mov r2, r3 | r2 = r3;
| if (r3 != 0) {
0x000a8272 cbz r3, 0xa8278 |
0x000a8274 ldr r2, [pc, 0x244] |
0x000a8276 add r2, pc | r2 = 0x150736;
| }
0x000a8278 mov r1, r6 | r1 = r6;
0x000a827a mov r0, r4 | r0 = r4;
0x000a827c bl 0x2b81c | fcn_0002b81c (r0, r1);
0x000a8280 ldr r1, [sp, 0x28] | r1 = var_28h;
| if (r1 != 0) {
0x000a8282 cbz r1, 0xa828a |
0x000a8284 mov r0, r4 | r0 = r4;
0x000a8286 bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000a828a ldrb.w r3, [r4, 0x57] | r3 = *((r4 + 0x57));
0x000a828e cmp r3, 0 |
0x000a8290 it ne |
| if (r3 == 0) {
0x000a8292 orrne r5, r5, 1 | r5 |= 1;
| }
| if (r5 != 0) {
0x000a8296 cbz r5, 0xa82a2 |
0x000a8298 mov r1, r6 | r1 = r6;
0x000a829a mov r0, r4 | r0 = r4;
0x000a829c bl 0x177a0 | r0 = fcn_000177a0 (r0, r1);
0x000a82a0 mov r5, r0 | r5 = r0;
| }
0x000a82a2 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x000a82a4 blx 0x87c0 | fcn_000087c0 ();
0x000a82a8 ldr r2, [pc, 0x214] |
0x000a82aa ldr r3, [pc, 0x20c] | r3 = *(0xa84ba);
0x000a82ac add r2, pc | r2 = 0x150770;
0x000a82ae ldr r3, [r2, r3] | r3 = imp.sinh;
0x000a82b0 ldr r2, [r3] | r2 = imp.sinh;
0x000a82b2 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000a82b4 eors r2, r3 | r2 ^= r3;
0x000a82b6 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000a82ba bne.w 0xa849e | goto label_13;
| }
0x000a82be mov r0, r5 | r0 = r5;
0x000a82c0 add sp, 0x34 |
0x000a82c2 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| if (r3 != 0) {
| label_12:
0x000a82c6 cbz r3, 0xa82d0 |
0x000a82c8 mov r1, r3 | r1 = r3;
0x000a82ca mov r0, r4 | r0 = r4;
0x000a82cc bl 0x16808 | fcn_00016808 (r0, r1);
| }
0x000a82d0 ldr r1, [pc, 0x1f0] |
0x000a82d2 mov r0, r4 | r0 = r4;
0x000a82d4 ldrd r2, r3, [sp, 0x14] | __asm ("ldrd r2, r3, [var_14h]");
0x000a82d8 movs r5, 1 | r5 = 1;
0x000a82da mov r6, r5 | r6 = r5;
0x000a82dc add r1, pc | r1 = 0x1507a4;
0x000a82de bl 0x24ec8 | r0 = fcn_00024ec8 (r0);
0x000a82e2 mov r3, r0 | r3 = r0;
0x000a82e4 str r0, [sp, 0x28] | var_28h = r0;
0x000a82e6 b 0xa8270 |
| }
| label_10:
0x000a82e8 ldr r1, [sp, 0x14] | r1 = var_14h;
0x000a82ea mov r2, r5 | r2 = r5;
0x000a82ec mov r0, r4 | r0 = r4;
0x000a82ee bl 0x3e27c | r0 = fcn_0003e27c (r0, r1, r2, r3);
0x000a82f2 mov r8, r0 | r8 = r0;
0x000a82f4 cmp r0, 0 |
| if (r0 == 0) {
0x000a82f6 beq 0xa8228 | goto label_0;
| }
0x000a82f8 ldrb.w r3, [r0, 0x2b] | r3 = *((r0 + 0x2b));
0x000a82fc cmp r3, 2 |
| if (r3 == 2) {
0x000a82fe beq 0xa8228 | goto label_0;
| }
0x000a8300 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000a8302 cmp r3, 0 |
| if (r3 == 0) {
0x000a8304 beq.w 0xa840e | goto label_14;
| }
0x000a8308 ldrsh.w sb, [r0, 0x22] | sb = *((r0 + 0x22));
0x000a830c cmp.w sb, 0 |
| if (sb <= 0) {
0x000a8310 ble.w 0xa8482 | goto label_15;
| }
0x000a8314 ldr r1, [pc, 0x1b0] |
0x000a8316 mov r7, r6 | r7 = r6;
0x000a8318 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x000a831a add.w fp, r3, -1 |
0x000a831e add r1, pc | r1 = 0x1507ea;
| label_1:
0x000a8320 ldr r5, [r0] | r5 = *(r0);
0x000a8322 mov sl, r0 | sl = r0;
0x000a8324 mov lr, fp | lr = fp;
0x000a8326 add.w ip, r5, -1 |
| do {
| label_3:
0x000a832a ldrb r3, [ip, 1]! | r3 = *((ip += 1));
0x000a832e ldrb r2, [lr, 1]! | r2 = *((lr += 1));
0x000a8332 cmp r3, r2 |
| if (r3 == r2) {
0x000a8334 beq 0xa8398 | goto label_16;
| }
0x000a8336 add r3, r1 | r3 += r1;
0x000a8338 add r2, r1 | r2 += r1;
0x000a833a ldrb.w r3, [r3, 0x140] | r3 = *((r3 + 0x140));
0x000a833e ldrb.w r2, [r2, 0x140] | r2 = *((r2 + 0x140));
0x000a8342 cmp r3, r2 |
0x000a8344 beq 0xa832a |
| } while (r3 == r2);
0x000a8346 adds r7, 1 | r7++;
0x000a8348 adds r0, 0xc | r0 += 0xc;
0x000a834a cmp sb, r7 |
| if (sb != r7) {
0x000a834c bne 0xa8320 | goto label_1;
| }
| label_4:
0x000a834e ldr.w r5, [r8, 0x1c] | r5 = *((r8 + 0x1c));
0x000a8352 ands r5, r5, 0x80 | r5 &= 0x80;
| if (r5 != r5) {
0x000a8356 bne.w 0xa8228 | goto label_0;
| }
0x000a835a ldr r0, [sp, 0x18] | r0 = var_18h;
0x000a835c bl 0x1e510 | r0 = fcn_0001e510 (r0);
0x000a8360 cmp r0, 0 |
| if (r0 == 0) {
0x000a8362 beq.w 0xa8228 | goto label_0;
| }
0x000a8366 ldrsh.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
0x000a836a cmp r3, 0 |
0x000a836c mov r7, r3 | r7 = r3;
| if (r3 < 0) {
0x000a836e blt 0xa846a | goto label_17;
| }
0x000a8370 add.w r2, r3, r3, lsl 1 | r2 = r3 + (r3 << 1);
0x000a8374 ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x000a8378 lsls r2, r2, 2 | r2 <<= 2;
0x000a837a adds.w sl, r1, r2 | sl = r1 + r2;
| if (sl != r1) {
0x000a837e bne.w 0xa84a2 | goto label_18;
| }
0x000a8382 ldr r5, [pc, 0x148] |
0x000a8384 mov r7, sl | r7 = sl;
0x000a8386 ldr.w sb, [pc, 0x148] |
0x000a838a mov.w fp, 1 |
0x000a838e add r5, pc |
0x000a8390 add.w r5, r5, 0x2dc | r5 = 0x150b3c;
0x000a8394 add sb, pc | sb = 0x15086a;
0x000a8396 b 0xa8234 | goto label_2;
| label_16:
0x000a8398 cmp r3, 0 |
| if (r3 != 0) {
0x000a839a bne 0xa832a | goto label_3;
| }
0x000a839c cmp sb, r7 |
| if (sb == r7) {
0x000a839e beq 0xa834e | goto label_4;
| }
0x000a83a0 ldrsh.w r3, [r8, 0x20] | r3 = *((r8 + 0x20));
| label_8:
0x000a83a4 ldrh.w r2, [sl, 0xa] | r2 = *((sl + 0xa));
0x000a83a8 ldrb.w sl, [sl, 4] | sl = *((sl + 4));
0x000a83ac ands r1, r2, 4 | r1 = r2 & 4;
| if (r1 != r2) {
0x000a83b0 bne 0xa843a | goto label_19;
| }
0x000a83b2 cmp.w sl, 0xf |
0x000a83b6 it ls |
| if (sl > 0xf) {
0x000a83b8 movls sb, r1 | sb = r1;
| }
| if (sl > 0xf) {
0x000a83ba bhi 0xa8428 | goto label_20;
| }
| label_7:
0x000a83bc ands sl, sl, 0xf | sl &= 0xf;
0x000a83c0 and fp, r2, 1 |
0x000a83c4 it ne |
| if (sl == sl) {
0x000a83c6 movne sl, 1 | sl = 1;
| }
0x000a83ca ands r2, r2, 0x200 | r2 &= 0x200;
| if (r2 == r2) {
0x000a83ce beq 0xa8454 | goto label_21;
| }
0x000a83d0 ldrb r2, [r5] | r2 = *(r5);
| if (r2 == 0) {
0x000a83d2 cbz r2, 0xa83dc | goto label_22;
| }
| do {
0x000a83d4 ldrb r2, [r5, 1]! | r2 = *((r5 += 1));
0x000a83d8 cmp r2, 0 |
0x000a83da bne 0xa83d4 |
| } while (r2 != 0);
| if (r1 == 0) {
| label_22:
0x000a83dc cbz r1, 0xa83e6 | goto label_23;
| }
| do {
0x000a83de ldrb r2, [r5, 1]! | r2 = *((r5 += 1));
0x000a83e2 cmp r2, 0 |
0x000a83e4 bne 0xa83de |
| } while (r2 != 0);
| label_23:
0x000a83e6 cmp r3, r7 |
0x000a83e8 add.w r5, r5, 1 | r5++;
0x000a83ec it ne |
| if (r3 != r7) {
0x000a83ee movne r7, 0 | r7 = 0;
| goto label_24;
| }
| if (r3 != r7) {
| label_24:
0x000a83f0 bne.w 0xa8234 | goto label_2;
| }
0x000a83f4 ldr.w r7, [r8, 0x1c] | r7 = *((r8 + 0x1c));
0x000a83f8 ubfx r7, r7, 3, 1 | r7 = (r7 >> 3) & ((1 << 1) - 1);
0x000a83fc b 0xa8234 | goto label_2;
| label_9:
0x000a83fe mov r0, r4 | r0 = r4;
0x000a8400 bl 0x17560 | fcn_00017560 (r0);
0x000a8404 b 0xa821a | goto label_5;
| label_11:
0x000a8406 mov r0, r4 | r0 = r4;
0x000a8408 bl 0x161d8 | fcn_000161d8 (r0);
0x000a840c b 0xa823e | goto label_6;
| label_14:
0x000a840e ldr r5, [pc, 0xc4] |
0x000a8410 mov.w fp, 1 |
0x000a8414 ldr.w sb, [pc, 0xc0] | sb = *(0x000a84d8);
0x000a8418 ldr.w sl, [sp, 0x18] | sl = var_18h;
0x000a841c add r5, pc |
0x000a841e add.w r5, r5, 0x2dc | r5 = 0x150bd2;
0x000a8422 add sb, pc | sb += pc;
0x000a8424 mov r7, sl | r7 = sl;
0x000a8426 b 0xa8234 | goto label_2;
| label_20:
0x000a8428 ldr r0, [pc, 0xb0] |
0x000a842a lsr.w ip, sl, 4 |
0x000a842e add.w ip, ip, -1 |
0x000a8432 add r0, pc | r0 = 0x150912;
0x000a8434 ldr.w sb, [r0, ip, lsl 2] | sb = imp.sinh;
0x000a8438 b 0xa83bc | goto label_7;
| label_19:
0x000a843a mov r0, r5 | r0 = r5;
0x000a843c strd r1, r3, [sp, 0x20] | __asm ("strd r1, r3, [var_24h]");
0x000a8440 str r2, [sp, 0x1c] | var_1ch = r2;
0x000a8442 blx 0x85b4 | r0 = fcn_000085b4 ();
0x000a8446 add.w sb, r0, 1 | sb = r0 + 1;
0x000a844a ldrd r2, r1, [sp, 0x1c] | __asm ("ldrd r2, r1, [var_1ch]");
0x000a844e ldr r3, [sp, 0x24] | r3 = var_24h;
0x000a8450 add sb, r5 | sb += r5;
0x000a8452 b 0xa83bc | goto label_7;
| label_21:
0x000a8454 cmp r3, r7 |
| if (r3 != r7) {
0x000a8456 bne 0xa84a6 | goto label_25;
| }
0x000a8458 ldr r5, [pc, 0x84] |
0x000a845a ldr.w r7, [r8, 0x1c] | r7 = *((r8 + 0x1c));
0x000a845e add r5, pc |
0x000a8460 ubfx r7, r7, 3, 1 | r7 = (r7 >> 3) & ((1 << 1) - 1);
0x000a8464 add.w r5, r5, 0x2dc | r5 = 0x150c1e;
0x000a8468 b 0xa8234 | goto label_2;
| label_17:
0x000a846a mov r7, r5 | r7 = r5;
0x000a846c ldr r5, [pc, 0x74] |
0x000a846e ldr.w sb, [pc, 0x78] | sb = *(0x000a84e8);
0x000a8472 mov sl, r7 | sl = r7;
0x000a8474 mov.w fp, 1 |
0x000a8478 add r5, pc |
0x000a847a add.w r5, r5, 0x2dc | r5 = 0x150c3c;
0x000a847e add sb, pc | sb += pc;
0x000a8480 b 0xa8234 | goto label_2;
| if (r3 == r7) {
| label_15:
0x000a8482 beq.w 0xa834e | goto label_4;
| }
0x000a8486 ldr r5, [pc, 0x64] |
0x000a8488 mov r7, r6 | r7 = r6;
0x000a848a ldr.w sb, [pc, 0x64] | sb = *(0x000a84f0);
0x000a848e mov sl, r6 | sl = r6;
0x000a8490 mov.w fp, 1 |
0x000a8494 add r5, pc |
0x000a8496 add.w r5, r5, 0x2dc | r5 = 0x150c62;
0x000a849a add sb, pc | sb += pc;
0x000a849c b 0xa8234 | goto label_2;
| label_13:
0x000a849e blx 0x883c | fcn_0000883c ();
| label_18:
0x000a84a2 ldr r5, [r1, r2] | r5 = *((r1 + r2));
0x000a84a4 b 0xa83a4 | goto label_8;
| label_25:
0x000a84a6 ldr r5, [pc, 0x4c] |
0x000a84a8 mov r7, r2 | r7 = r2;
0x000a84aa add r5, pc |
0x000a84ac add.w r5, r5, 0x2dc | r5 = 0x150c80;
0x000a84b0 b 0xa8234 | goto label_2;
| }
[*] Function mmap used 1 times libsqlite3.so.0.8.6