[*] Binary protection state of ld-linux-armhf.so.3
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of ld-linux-armhf.so.3
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x2990 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00002990 () | void fcn_00002990 (int16_t arg_8h, int16_t arg_20h, int16_t arg_24h, int16_t arg_2ch, int16_t arg_30h, int16_t arg_34h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_44h, int16_t arg_58h, int16_t arg_5ch, int16_t arg_60h, int16_t arg_64h, int16_t arg_6ch, int16_t arg_70h, int16_t arg_74h, int16_t arg_78h, int16_t arg_7ch, int16_t arg_80h, int16_t arg_94h, int16_t arg_98h, int16_t arg_bch, int16_t arg_e8h, int16_t arg_134h, int16_t arg_138h, int16_t arg_140h, int16_t arg_150h, int16_t arg_154h, int16_t arg_15ch, int16_t arg_160h, int16_t arg_164h, int16_t arg_194h, int16_t arg_19ch, int16_t arg_1b4h, int16_t arg_1b8h, int16_t arg_1bch, int16_t arg_1d4h, int16_t arg_1f8h, int16_t arg_20ch, int16_t arg_210h, int16_t arg_230h, int16_t arg_23ch, int16_t arg_240h, int16_t arg_248h, int16_t arg_250h, int16_t arg_254h, int16_t arg_260h, int16_t arg_0h, int16_t arg_4h, int16_t arg_ch, int16_t arg_10h, int16_t arg_17h, int16_t arg_190h, int16_t arg_238h, int16_t arg3, int16_t arg4) {
| r2 = arg3;
| r3 = arg4;
| do {
0x00001a04 invalid |
0x00001a08 cmp r3, 6 |
| if (r3 != 6) {
0x00001a0a beq 0x1a1e |
0x00001a0c ldr.w r3, [pc, 0x938] | r3 = *(0x00002348);
0x00001a10 movs r2, 1 | r2 = 1;
0x00001a12 str.w r2, [sl, 0x164] | __asm ("str.w r2, [sl, 0x164]");
0x00001a16 mov.w r2, -1 | r2 = -1;
0x00001a1a add r3, pc | r3 += pc;
0x00001a1c str r2, [r3, 0x30] | *((r3 + 0x30)) = r2;
| }
0x00001a1e ldr.w r2, [pc, 0x92c] | r2 = *(0x0000234c);
0x00001a22 subs r4, 1 | r4--;
0x00001a24 adds r5, 4 | r5 += 4;
0x00001a26 add r2, pc | r2 += pc;
0x00001a28 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00001a2a adds r3, 1 | r3++;
0x00001a2c str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
| label_0:
0x00001a2e ldr.w r3, [pc, 0x920] | r3 = *(0x00002350);
0x00001a32 cmp r4, 1 |
0x00001a34 add r3, pc | r3 += pc;
0x00001a36 str r4, [r3] | *(r3) = r4;
0x00001a38 ldr.w r3, [pc, 0x918] | r3 = *(0x00002354);
0x00001a3c add r3, pc | r3 += pc;
0x00001a3e str r5, [r3] | *(r3) = r5;
| if (r4 == 1) {
0x00001a40 beq.w 0x1e0c | goto label_66;
| }
0x00001a44 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x00001a46 mov r1, r8 | r1 = r8;
0x00001a48 mov r0, r6 | r0 = r6;
0x00001a4a bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001a4e cmp r0, 0 |
0x00001a50 beq 0x1a04 |
| } while (r0 == 0);
0x00001a52 mov r1, fp | r1 = fp;
0x00001a54 mov r0, r6 | r0 = r6;
0x00001a56 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001a5a cmp r0, 0 |
| if (r0 == 0) {
0x00001a5c bne.w 0x1cf4 |
0x00001a60 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00001a64 subs r4, 1 | r4--;
0x00001a66 ldr.w r2, [pc, 0x8f0] | r2 = *(0x00002358);
0x00001a6a adds r5, 4 | r5 += 4;
0x00001a6c cmp r3, 6 |
0x00001a6e it ne |
| if (r3 == 6) {
0x00001a70 movne r3, 2 | r3 = 2;
| }
0x00001a72 add r2, pc | r2 += pc;
0x00001a74 it ne |
| if (r3 == 6) {
0x00001a76 strne r3, [sl, 0x164] | *((sl + 0x164)) = r3;
| }
0x00001a7a ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00001a7c adds r3, 1 | r3++;
0x00001a7e str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x00001a80 b 0x1a2e | goto label_0;
| }
0x00001cf4 ldr r1, [r7, 0x34] | r1 = *((r7 + 0x34));
0x00001cf6 mov r0, r6 | r0 = r6;
0x00001cf8 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
| if (r0 == 0) {
0x00001cfc cbnz r0, 0x1d1a |
0x00001cfe ldr.w r2, [pc, 0x6bc] | r2 = *(0x000023bc);
0x00001d02 movs r1, 1 | r1 = 1;
0x00001d04 ldr.w r3, [pc, 0x6b8] | r3 = *(0x000023c0);
0x00001d08 subs r4, 1 | r4--;
0x00001d0a adds r5, 4 | r5 += 4;
0x00001d0c add r2, pc | r2 += pc;
0x00001d0e add r3, pc | r3 += pc;
0x00001d10 str r1, [r3, 0x18] | *((r3 + 0x18)) = r1;
0x00001d12 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00001d14 add r3, r1 | r3 += r1;
0x00001d16 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x00001d18 b 0x1a2e | goto label_0;
| }
0x00001d1a ldr r1, [r7, 0x30] | r1 = *((r7 + 0x30));
0x00001d1c mov r0, r6 | r0 = r6;
0x00001d1e bl 0x14f30 | fcn_00014f30 (r0, r1, r2, r3);
0x00001d22 subs.w sb, r4, 2 | sb = r4 - 2;
0x00001d26 it ne |
| if (sb == r4) {
0x00001d28 movne sb, 1 | sb = 1;
| }
0x00001d2c cmp r0, 0 |
0x00001d2e ite ne |
| if (r0 == 0) {
0x00001d30 movne r1, 0 | r1 = 0;
| }
| if (r0 != 0) {
0x00001d32 andeq r1, sb, 1 | r1 = sb & 1;
| }
0x00001d36 cmp r1, 0 |
| if (r1 != 0) {
0x00001d38 bne.w 0x2e86 | goto label_67;
| }
0x00001d3c ldr r1, [r7, 0x28] | r1 = *((r7 + 0x28));
0x00001d3e mov r0, r6 | r0 = r6;
0x00001d40 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001d44 cmp r0, 0 |
0x00001d46 ite ne |
| if (r0 == 0) {
0x00001d48 movne r1, 0 | r1 = 0;
| }
| if (r0 != 0) {
0x00001d4a andeq r1, sb, 1 | r1 = sb & 1;
| }
0x00001d4e cmp r1, 0 |
| if (r1 != 0) {
0x00001d50 bne.w 0x3098 | goto label_68;
| }
0x00001d54 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x00001d56 mov r0, r6 | r0 = r6;
0x00001d58 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001d5c cmp r0, 0 |
0x00001d5e ite ne |
| if (r0 == 0) {
0x00001d60 movne r1, 0 | r1 = 0;
| }
| if (r0 != 0) {
0x00001d62 andeq r1, sb, 1 | r1 = sb & 1;
| }
0x00001d66 cmp r1, 0 |
| if (r1 != 0) {
0x00001d68 bne.w 0x35ce | goto label_69;
| }
0x00001d6c ldr r1, [r7, 0x10] | r1 = *((r7 + 0x10));
0x00001d6e mov r0, r6 | r0 = r6;
0x00001d70 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001d74 cmp r0, 0 |
0x00001d76 ite ne |
| if (r0 == 0) {
0x00001d78 movne r1, 0 | r1 = 0;
| }
| if (r0 != 0) {
0x00001d7a andeq r1, sb, 1 | r1 = sb & 1;
| }
0x00001d7e cmp r1, 0 |
| if (r1 != 0) {
0x00001d80 bne.w 0x3632 | goto label_70;
| }
0x00001d84 ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x00001d86 mov r0, r6 | r0 = r6;
0x00001d88 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001d8c cmp r0, 0 |
0x00001d8e ite ne |
| if (r0 == 0) {
0x00001d90 movne r1, 0 | r1 = 0;
| }
| if (r0 != 0) {
0x00001d92 andeq r1, sb, 1 | r1 = sb & 1;
| }
0x00001d96 cmp r1, 0 |
| if (r1 != 0) {
0x00001d98 bne.w 0x34d0 | goto label_71;
| }
0x00001d9c ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x00001d9e mov r0, r6 | r0 = r6;
0x00001da0 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001da4 cmp r0, 0 |
0x00001da6 ite ne |
| if (r0 == 0) {
0x00001da8 movne r1, 0 | r1 = 0;
| }
| if (r0 != 0) {
0x00001daa andeq r1, sb, 1 | r1 = sb & 1;
| }
0x00001dae cmp r1, 0 |
| if (r1 != 0) {
0x00001db0 bne.w 0x403c | goto label_72;
| }
0x00001db4 ldr.w r1, [pc, 0x60c] | r1 = *(0x000023c4);
0x00001db8 mov r0, r6 | r0 = r6;
0x00001dba add r1, pc | r1 += pc;
0x00001dbc bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001dc0 cmp r0, 0 |
0x00001dc2 ite ne |
| if (r0 == 0) {
0x00001dc4 movne r2, 0 | r2 = 0;
| }
| if (r0 != 0) {
0x00001dc6 andeq r2, sb, 1 | r2 = sb & 1;
| }
0x00001dca cmp r2, 0 |
| if (r2 != 0) {
0x00001dcc bne.w 0x4066 | goto label_73;
| }
0x00001dd0 ldr.w r1, [pc, 0x5f4] | r1 = *(0x000023c8);
0x00001dd4 mov r0, r6 | r0 = r6;
0x00001dd6 add r1, pc | r1 += pc;
0x00001dd8 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001ddc cmp r0, 0 |
| if (r0 == 0) {
0x00001dde beq.w 0x3bee | goto label_74;
| }
0x00001de2 ldr.w r1, [pc, 0x5e8] |
0x00001de6 mov r0, r6 | r0 = r6;
0x00001de8 add r1, pc | r1 = 0x41ba;
0x00001dea bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001dee cmp r0, 0 |
| if (r0 != 0) {
0x00001df0 bne.w 0x4206 | goto label_75;
| }
0x00001df4 ldr.w r2, [pc, 0x5d8] | r2 = *(0x000023d0);
0x00001df8 movs r3, 5 | r3 = 5;
0x00001dfa str.w r3, [sl, 0x164] | __asm ("str.w r3, [sl, 0x164]");
0x00001dfe subs r4, 1 | r4--;
0x00001e00 adds r5, 4 | r5 += 4;
0x00001e02 add r2, pc | r2 += pc;
0x00001e04 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00001e06 adds r3, 1 | r3++;
0x00001e08 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x00001e0a b 0x1a2e | goto label_0;
| label_66:
0x00001e0c ldr r6, [r7, 0x18] | r6 = *((r7 + 0x18));
| label_65:
0x00001e0e ldr.w r0, [sl, 0x164] | r0 = *((sl + 0x164));
0x00001e12 cmp r0, 4 |
| if (r0 == 4) {
0x00001e14 beq.w 0x3bbc | goto label_76;
| }
| label_41:
0x00001e18 cmp r0, 5 |
| if (r0 == 5) {
0x00001e1a beq.w 0x44b2 | goto label_77;
| }
0x00001e1e ldr.w r2, [pc, 0x5b4] | r2 = *(0x000023d4);
0x00001e22 add r2, pc | r2 += pc;
0x00001e24 ldr r3, [r2] | r3 = *(r2);
0x00001e26 cmp r3, 1 |
| if (r3 <= 1) {
0x00001e28 ble.w 0x33fa | goto label_78;
| }
0x00001e2c subs r3, 1 | r3--;
0x00001e2e ldr r1, [r7, 0x40] | r1 = *((r7 + 0x40));
0x00001e30 str r3, [r2] | *(r2) = r3;
0x00001e32 ldr.w r3, [pc, 0x5a4] | r3 = *(0x000023d8);
0x00001e36 add.w r1, r6, r1, lsl 5 | r1 = r6 + (r1 << 5);
0x00001e3a add r3, pc | r3 += pc;
0x00001e3c ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00001e3e cmp r6, r1 |
0x00001e40 ldr r4, [r3] | r4 = *(r3);
0x00001e42 add.w r2, r2, 1 | r2++;
0x00001e46 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x00001e48 add.w r2, r4, 4 | r2 = r4 + 4;
0x00001e4c str r2, [r3] | *(r3) = r2;
| if (r6 >= r1) {
0x00001e4e bhs 0x1e72 | goto label_79;
| }
0x00001e50 movw r2, 0xe551 |
0x00001e54 movt r2, 0x6474 | r2 = 0x6474e551;
0x00001e58 b 0x1e60 |
| while (r3 != r2) {
0x00001e5a adds r6, 0x20 | r6 += 0x20;
0x00001e5c cmp r6, r1 |
| if (r6 >= r1) {
0x00001e5e bhs 0x1e72 | goto label_79;
| }
0x00001e60 ldr r3, [r6] | r3 = *(r6);
0x00001e62 cmp r3, r2 |
0x00001e64 bne 0x1e5a |
| }
0x00001e66 ldr.w r3, [pc, 0x574] | r3 = *(0x000023dc);
0x00001e6a ldr r2, [r6, 0x18] | r2 = *((r6 + 0x18));
0x00001e6c add r3, pc | r3 += pc;
0x00001e6e str.w r2, [r3, 0x878] | __asm ("str.w r2, [r3, 0x878]");
| label_79:
0x00001e72 bic r0, r0, 4 | r0 = BIT_MASK (r0, 4);
0x00001e76 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00001e78 cmp r0, 2 |
| if (r0 == 2) {
0x00001e7a beq.w 0x40b6 | goto label_80;
| }
0x00001e7e movs r3, 0 | r3 = 0;
0x00001e80 mov.w r2, 0x20000000 | r2 = 0x20000000;
0x00001e84 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x00001e88 mov r0, r3 | r0 = r3;
0x00001e8a mov r2, r3 | r2 = r3;
0x00001e8c bl 0x684c | fcn_0000684c (r0, r1, r2, r3, r4, r5);
| label_50:
0x00001e90 ldr.w r3, [pc, 0x54c] | r3 = *(0x000023e0);
0x00001e94 ldr.w r2, [sl, 0x164] | r2 = *((sl + 0x164));
0x00001e98 add r3, pc | r3 += pc;
0x00001e9a ldr.w fp, [r3] | fp = *(r3);
| if (r2 == 0) {
0x00001e9e cbnz r2, 0x1eca |
0x00001ea0 ldr.w r2, [r3, 0x5f0] | r2 = *((r3 + 0x5f0));
| if (r2 == 0) {
0x00001ea4 cbz r2, 0x1eca | goto label_81;
| }
0x00001ea6 ldr.w r1, [fp, 0x58] | r1 = *(arg_58h);
| if (r1 == 0) {
0x00001eaa cbz r1, 0x1eca | goto label_81;
| }
0x00001eac ldr.w r0, [r3, 0x5cc] | r0 = *((r3 + 0x5cc));
0x00001eb0 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00001eb2 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x00001eb4 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x00001eb6 add r0, r2 | r0 += r2;
0x00001eb8 ldr.w r2, [fp, 0x34] | r2 = *(arg_34h);
0x00001ebc ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00001ebe add r1, r3 | r1 += r3;
0x00001ec0 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00001ec4 cmp r0, 0 |
| if (r0 == 0) {
0x00001ec6 beq.w 0x435e | goto label_82;
| }
| }
| label_81:
0x00001eca ldr.w r3, [pc, 0x518] | r3 = *(0x000023e4);
0x00001ece ldrh.w r2, [fp, 0x15c] | r2 = *(arg_15ch);
0x00001ed2 add r3, pc | r3 += pc;
0x00001ed4 str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x00001ed8 str r2, [r7, 0x40] | *((r7 + 0x40)) = r2;
0x00001eda ldrd r6, r3, [fp, 0x154] | __asm ("ldrd r6, r3, [arg_154h]");
0x00001ede ldr r2, [r7, 0x3c] | r2 = *((r7 + 0x3c));
0x00001ee0 str r3, [r2] | *(r2) = r3;
0x00001ee2 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x00001ee4 ldr r3, [r3] | r3 = *(r3);
0x00001ee6 cmp r3, 0 |
| if (r3 == 0) {
0x00001ee8 beq.w 0x2ed2 | goto label_11;
| }
0x00001eec ldr.w r1, [pc, 0x4f8] | r1 = *(0x000023e8);
0x00001ef0 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x00001ef2 ldrd r5, r4, [r7, 0x3c] | __asm ("ldrd r5, r4, [r7, 0x3c]");
0x00001ef6 add r1, pc | r1 += pc;
0x00001ef8 ldr r0, [r1] | r0 = *(r1);
| label_9:
0x00001efa subs r3, 3 | r3 -= 3;
0x00001efc cmp r3, 0x1c |
| if (r3 > 0x1c) {
0x00001efe bhi.w 0x2ec8 | goto label_83;
| }
| /* switch table (29 cases) at 0x1f06 */
0x00001f02 tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
| label_10:
0x00001f88 ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x00001f8a mov.w r1, -1 | r1 = -1;
0x00001f8e ldr.w r2, [fp, 0x194] | r2 = *(arg_194h);
0x00001f92 str.w r1, [fp, 0x1b4] | __asm ("str.w r1, [arg_1b4h]");
0x00001f96 lsls r3, r3, 5 | r3 <<= 5;
0x00001f98 adds r2, 1 | r2++;
0x00001f9a str.w r2, [fp, 0x194] | __asm ("str.w r2, [arg_194h]");
0x00001f9e movs r2, 0 | r2 = 0;
0x00001fa0 adds r4, r6, r3 | r4 = r6 + r3;
0x00001fa2 strd r2, r2, [fp, 0x1b8] | __asm ("strd r2, r2, [fp, 0x1b8]");
0x00001fa6 cmp r6, r4 |
| if (r6 >= r4) {
0x00001fa8 bhs.w 0x37f6 | goto label_84;
| }
0x00001fac ldr.w r3, [pc, 0x444] | r3 = *(0x000023f4);
0x00001fb0 movw r5, 0xe551 |
0x00001fb4 ldr.w r1, [pc, 0x440] | r1 = *(0x000023f8);
0x00001fb8 add.w r8, r4, 0x20 | r8 = r4 + 0x20;
0x00001fbc ldr.w r0, [pc, 0x43c] | r0 = *(0x000023fc);
0x00001fc0 movt r5, 0x6474 | r5 = 0x6474e551;
0x00001fc4 add r3, pc | r3 += pc;
0x00001fc6 ldr.w sb, [pc, 0x438] | sb = *(0x00002400);
0x00001fca ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x00001fcc add r1, pc | r1 += pc;
0x00001fce str r2, [r7, 0x40] | *((r7 + 0x40)) = r2;
0x00001fd0 movw r2, 0xe552 |
0x00001fd4 add r0, pc | r0 += pc;
0x00001fd6 str r1, [r7, 0x28] | *((r7 + 0x28)) = r1;
0x00001fd8 rsbs r3, r3, 0 | r3 -= ;
0x00001fda adds r1, 0x14 | r1 += 0x14;
0x00001fdc str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
0x00001fde add sb, pc | sb += pc;
0x00001fe0 ldr.w r3, [pc, 0x420] | r3 = *(0x00002404);
0x00001fe4 movt r2, 0x6474 | r2 = 0x6474e552;
0x00001fe8 str r1, [r7, 0x20] | *((r7 + 0x20)) = r1;
0x00001fea add.w r1, r0, 0x20 | r1 = r0 + 0x20;
0x00001fee str r0, [r7, 0x14] | *((r7 + 0x14)) = r0;
0x00001ff0 add r3, pc | r3 += pc;
0x00001ff2 str r1, [r7, 0x10] | *((r7 + 0x10)) = r1;
0x00001ff4 str r3, [r7, 0x2c] | *((r7 + 0x2c)) = r3;
0x00001ff6 ldr.w r3, [pc, 0x410] | r3 = *(0x00002408);
0x00001ffa str r4, [r7, 0x3c] | *((r7 + 0x3c)) = r4;
0x00001ffc add r3, pc | r3 += pc;
0x00001ffe str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x00002000 add.w r3, r6, 0x20 | r3 = r6 + 0x20;
| do {
| label_4:
0x00002004 ldr r1, [r3, -0x20] | r1 = *((r3 - 0x20));
0x00002008 cmp r1, 7 |
| if (r1 <= 7) {
0x0000200a bhi 0x2026 |
| if (r1 == 0) {
0x0000200c cbz r1, 0x2040 | goto label_3;
| }
0x0000200e subs r1, 1 | r1--;
0x00002010 cmp r1, 6 |
| if (r1 > 6) {
0x00002012 bhi 0x2040 | goto label_3;
| }
| /* switch table (8 cases) at 0x2018 */
0x00002014 tbh [pc, r1, lsl 1] | __asm ("tbh [pc, r1, lsl 1]");
| }
0x00002026 cmp r1, r5 |
| if (r1 == r5) {
0x00002028 beq.w 0x2e40 | goto label_85;
| }
0x0000202c cmp r1, r2 |
| if (r1 == r2) {
0x0000202e bne 0x2040 |
0x00002030 ldr r1, [r3, -0x18] | r1 = *((r3 - 0x18));
0x00002034 str.w r1, [fp, 0x250] | __asm ("str.w r1, [arg_250h]");
0x00002038 ldr r1, [r3, -0xc] | r1 = *((r3 - 0xc));
0x0000203c str.w r1, [fp, 0x254] | __asm ("str.w r1, [arg_254h]");
| }
| label_3:
0x00002040 adds r3, 0x20 | r3 += 0x20;
0x00002042 cmp r8, r3 |
0x00002044 bne 0x2004 |
| } while (r8 != r3);
| label_5:
0x00002046 ldr r4, [r7, 0x3c] | r4 = *((r7 + 0x3c));
| label_64:
0x00002048 movw r5, 0xe553 |
0x0000204c movt r5, 0x6474 | r5 = 0x6474e553;
0x00002050 b 0x2056 |
| while (r3 != r5) {
0x00002052 cmp r6, r4 |
| if (r6 == r4) {
0x00002054 beq 0x206e | goto label_86;
| }
| label_1:
0x00002056 ldr r3, [r4, -0x20]! | r3 = *((r4 -= 0x20));
0x0000205a cmp r3, r5 |
0x0000205c bne 0x2052 |
| }
0x0000205e mov r2, r4 | r2 = r4;
0x00002060 mov.w r1, -1 | r1 = -1;
0x00002064 mov r0, fp | r0 = fp;
0x00002066 bl 0x596c | fcn_0000596c (r0, r1);
0x0000206a cmp r6, r4 |
| if (r6 != r4) {
0x0000206c bne 0x2056 | goto label_1;
| }
| label_86:
0x0000206e ldr.w r3, [fp, 0x230] | r3 = *(arg_230h);
0x00002072 ldrd r2, r1, [fp, 0x1b8] | __asm ("ldrd r2, r1, [arg_1b8h]");
| if (r3 != 0) {
0x00002076 cbz r3, 0x2082 |
| label_28:
0x00002078 ldr.w r0, [fp] | r0 = *(fp);
0x0000207c add r3, r0 | r3 += r0;
0x0000207e str.w r3, [fp, 0x230] | __asm ("str.w r3, [arg_230h]");
| }
| if (r2 == 0) {
0x00002082 cbnz r2, 0x208c |
| label_49:
0x00002084 mov.w r3, -1 | r3 = -1;
0x00002088 str.w r3, [fp, 0x1b8] | __asm ("str.w r3, [arg_1b8h]");
| }
| if (r1 == 0) {
0x0000208c cbnz r1, 0x2096 |
0x0000208e mov.w r3, -1 | r3 = -1;
0x00002092 str.w r3, [fp, 0x1bc] | __asm ("str.w r3, [arg_1bch]");
| }
0x00002096 ldr r3, [pc, 0x374] |
0x00002098 add r3, pc | r3 = 0x44aa;
0x0000209a ldr.w r2, [r3, 0x5b4] | r2 = *(0x4a5e);
0x0000209e cmp r2, 0 |
| if (r2 == 0) {
0x000020a0 beq.w 0x323c | goto label_87;
| }
| label_12:
0x000020a4 ldr r3, [pc, 0x368] |
0x000020a6 add r3, pc | r3 = 0x44ba;
0x000020a8 ldr.w r2, [r3, 0x5f0] | r2 = *(0x4aaa);
| if (r2 != 0) {
0x000020ac cbz r2, 0x20e0 |
0x000020ae ldr.w r1, [r3, 0x5cc] | r1 = *((r3 + 0x5cc));
0x000020b2 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000020b4 ldr.w r5, [r3, 0x5b4] | r5 = *((r3 + 0x5b4));
0x000020b8 ldr r4, [r1, 4] | r4 = *((r1 + 4));
0x000020ba ldr r0, [r5] | r0 = *(r5);
0x000020bc add r4, r2 | r4 += r2;
0x000020be mov r1, r4 | r1 = r4;
0x000020c0 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
| if (r0 == 0) {
0x000020c4 cbz r0, 0x20e0 | goto label_88;
| }
0x000020c6 ldr r3, [pc, 0x34c] |
0x000020c8 movs r2, 0 | r2 = 0;
0x000020ca movs r1, 1 | r1 = 1;
0x000020cc add r3, pc | r3 = 0x44e6;
0x000020ce str r2, [r3, 0x30] | *((r3 + 0x30)) = r2;
0x000020d0 ldr r2, [r5, 4] | r2 = *((r5 + 4));
0x000020d2 str r4, [r3, 0x2c] | *((r3 + 0x2c)) = r4;
0x000020d4 str r1, [r3, 0x34] | *((r3 + 0x34)) = r1;
0x000020d6 cmp r2, 0 |
| if (r2 != 0) {
0x000020d8 bne.w 0x4476 | goto label_89;
| }
0x000020dc adds r3, 0x2c | r3 += 0x2c;
0x000020de str r3, [r5, 4] | *((r5 + 4)) = r3;
| }
| label_88:
0x000020e0 ldr r3, [pc, 0x334] |
0x000020e2 add r3, pc | r3 = 0x44fe;
0x000020e4 ldrb.w r3, [r3, 0x730] | r3 = *((r3 + 0x730));
0x000020e8 lsls r3, r3, 0x1d | r3 <<= 0x1d;
| if (r3 >= r3) {
0x000020ea bpl.w 0x4428 | goto label_90;
| }
0x000020ee ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x000020f0 cmp r3, 0 |
| if (r3 != 0) {
0x000020f2 bne.w 0x22a0 | goto label_91;
| }
0x000020f6 ldr.w r2, [fp, 8] | r2 = *(arg_8h);
0x000020fa cmp r2, 0 |
| if (r2 == 0) {
0x000020fc beq.w 0x227c | goto label_92;
| }
0x00002100 ldr r3, [r2] | r3 = *(r2);
0x00002102 add.w r1, fp, 0x20 | r1 += arg_20h;
| if (r3 == 0) {
0x00002106 cbz r3, 0x2174 | goto label_93;
| }
0x00002108 movw r6, 0xfdff |
0x0000210c movw lr, 0xfeff |
0x00002110 movw r8, 0xff41 |
0x00002114 movw ip, 0xfe35 |
0x00002118 movs r5, 0x22 | r5 = 0x22;
0x0000211a movt r6, 0x6fff | r6 = 0x6ffffdff;
0x0000211e movt lr, 0x6fff | lr = 0x6ffffeff;
0x00002122 movt r8, 0x6fff | r8 = 0x6fffff41;
0x00002126 movt ip, 0x6fff | ip = 0x6ffffe35;
0x0000212a movt r5, 0x7000 | r5 = (r5 & 0xFFFF) | 0x70000000;
0x0000212e mvn r4, 0x90000000 | r4 = ~0x90000000;
| do {
0x00002132 cmp r3, 0x22 |
| if (r3 >= 0x22) {
0x00002134 bls 0x2168 |
0x00002136 subs r0, r4, r3 | r0 = r4 - r3;
0x00002138 cmp r0, 0xf |
0x0000213a it ls |
| if (r0 > 0xf) {
0x0000213c subls r3, r5, r3 | r3 = r5 - r3;
| }
| if (r0 < 0xf) {
0x0000213e bls 0x2168 | goto label_94;
| }
0x00002140 sbfx r0, r3, 0, 0x1f | __asm ("sbfx r0, r3, 0, 0x1f");
0x00002144 cmn.w r0, 4 |
0x00002148 it hi |
| if (r0 > 4) {
0x0000214a rsbhi r3, r0, 0x32 | __asm ("rsbhi r3, r0, 0x32");
| }
| if (r0 > 4) {
0x0000214e bhi 0x2168 | goto label_94;
| }
0x00002150 subs r0, r6, r3 | r0 = r6 - r3;
0x00002152 cmp r0, 0xb |
0x00002154 it ls |
| if (r0 > 0xb) {
0x00002156 subls r3, ip, r3 | r3 = ip - r3;
| }
| if (r0 < 0xb) {
0x0000215a bls 0x2168 | goto label_94;
| }
0x0000215c sub.w r0, lr, r3 | r0 = lr - r3;
0x00002160 cmp r0, 0xa |
| if (r0 > 0xa) {
0x00002162 bhi 0x216c | goto label_95;
| }
0x00002164 sub.w r3, r8, r3 | r3 = r8 - r3;
| }
| label_94:
0x00002168 str.w r2, [r1, r3, lsl 2] | __asm ("str.w r2, [r1, r3, lsl 2]");
| label_95:
0x0000216c ldr r3, [r2, 8]! | r3 = *((r2 += 8));
0x00002170 cmp r3, 0 |
0x00002172 bne 0x2132 |
| } while (r3 != 0);
| label_93:
0x00002174 ldr.w r3, [fp] | r3 = *(fp);
0x00002178 cmp r3, 0 |
| if (r3 != 0) {
0x0000217a beq 0x21e8 |
0x0000217c ldr.w r2, [fp, 0x30] | r2 = *(arg_30h);
| if (r2 != 0) {
0x00002180 cbz r2, 0x2188 |
0x00002182 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00002184 add r1, r3 | r1 += r3;
0x00002186 str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
0x00002188 ldr.w r2, [fp, 0x2c] | r2 = *(arg_2ch);
| if (r2 != 0) {
0x0000218c cbz r2, 0x2194 |
0x0000218e ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x00002190 add r1, r3 | r1 += r3;
0x00002192 str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
0x00002194 ldr.w r2, [fp, 0x34] | r2 = *(arg_34h);
| if (r2 != 0) {
0x00002198 cbz r2, 0x21a0 |
0x0000219a ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0000219c add r1, r3 | r1 += r3;
0x0000219e str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
0x000021a0 ldr.w r2, [fp, 0x38] | r2 = *(arg_38h);
| if (r2 != 0) {
0x000021a4 cbz r2, 0x21ac |
0x000021a6 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000021a8 add r1, r3 | r1 += r3;
0x000021aa str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
0x000021ac ldr.w r2, [fp, 0x3c] | r2 = *(arg_3ch);
| if (r2 != 0) {
0x000021b0 cbz r2, 0x21b8 |
0x000021b2 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000021b4 add r1, r3 | r1 += r3;
0x000021b6 str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
0x000021b8 ldr.w r2, [fp, 0x64] | r2 = *(arg_64h);
| if (r2 != 0) {
0x000021bc cbz r2, 0x21c4 |
0x000021be ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000021c0 add r1, r3 | r1 += r3;
0x000021c2 str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
0x000021c4 ldr.w r2, [fp, 0x7c] | r2 = *(arg_7ch);
| if (r2 != 0) {
0x000021c8 cbz r2, 0x21d0 |
0x000021ca ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000021cc add r1, r3 | r1 += r3;
0x000021ce str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
0x000021d0 ldr.w r2, [fp, 0xe8] | r2 = *(arg_e8h);
| if (r2 != 0) {
0x000021d4 cbz r2, 0x21dc |
0x000021d6 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000021d8 add r1, r3 | r1 += r3;
0x000021da str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
0x000021dc ldr.w r2, [fp, 0x150] | r2 = *(arg_150h);
| if (r2 == 0) {
0x000021e0 cbz r2, 0x21e8 | goto label_96;
| }
0x000021e2 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000021e4 add r1, r3 | r1 += r3;
0x000021e6 str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
| label_96:
0x000021e8 ldr.w r3, [fp, 0x70] | r3 = *(arg_70h);
| if (r3 != 0) {
0x000021ec cbz r3, 0x21fa |
0x000021ee ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000021f0 cmp r3, 7 |
0x000021f2 it ne |
| if (r3 != 7) {
0x000021f4 cmpne r3, 0x11 | __asm ("cmpne r3, 0x11");
| }
| if (r3 != 7) {
0x000021f6 bne.w 0x43d6 | goto label_97;
| }
| }
0x000021fa ldr.w r3, [fp, 0x3c] | r3 = *(arg_3ch);
| if (r3 != 0) {
0x000021fe cbz r3, 0x220c |
0x00002200 ldr.w r3, [fp, 0x44] | r3 = *(arg_44h);
0x00002204 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00002206 cmp r3, 0xc |
| if (r3 != 0xc) {
0x00002208 bne.w 0x43b2 | goto label_98;
| }
| }
0x0000220c ldr.w r3, [fp, 0x64] | r3 = *(arg_64h);
| if (r3 != 0) {
0x00002210 cbz r3, 0x221e |
0x00002212 ldr.w r3, [fp, 0x6c] | r3 = *(arg_6ch);
0x00002216 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00002218 cmp r3, 8 |
| if (r3 != 8) {
0x0000221a bne.w 0x43c4 | goto label_99;
| }
| }
0x0000221e ldr.w r2, [fp, 0x98] | r2 = *(arg_98h);
| if (r2 != 0) {
0x00002222 cbz r2, 0x2242 |
0x00002224 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x00002226 lsls r0, r3, 0x1e | r0 = r3 << 0x1e;
0x00002228 str.w r3, [fp, 0x210] | __asm ("str.w r3, [arg_210h]");
0x0000222c it mi |
| if (r0 >= r3) {
0x0000222e strmi r2, [fp, 0x60] | *(arg_60h) = r2;
| }
0x00002232 lsls r1, r3, 0x1d | r1 = r3 << 0x1d;
0x00002234 it mi |
| if (r1 >= r3) {
0x00002236 strmi r2, [fp, 0x78] | *(arg_78h) = r2;
| }
0x0000223a lsls r6, r3, 0x1c | r6 = r3 << 0x1c;
0x0000223c it mi |
| if (r6 < r3) {
0x0000223e strmi r2, [fp, 0x80] | *(arg_80h) = r2;
| goto label_100;
| }
| }
| label_100:
0x00002242 ldr.w r3, [fp, 0xbc] | r3 = *(arg_bch);
| if (r3 != 0) {
0x00002246 cbz r3, 0x2270 |
0x00002248 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0000224a lsls r5, r3, 0x1c | r5 = r3 << 0x1c;
0x0000224c str.w r3, [fp, 0x20c] | __asm ("str.w r3, [arg_20ch]");
0x00002250 itt mi |
| if (r5 >= r3) {
0x00002252 movmi r2, 1 | r2 = 1;
| }
| if (r5 >= r3) {
0x00002254 strbmi r2, [fp, 0x19c] | *(arg_19ch) = r2;
| }
0x00002258 ldr r2, [pc, 0x1c0] |
0x0000225a add r2, pc |
0x0000225c ldr r2, [r2] | r2 = *(0x467a);
0x0000225e lsls r4, r2, 0x19 | r4 = r2 << 0x19;
| if (r4 < r2) {
0x00002260 bmi.w 0x410c | goto label_101;
| }
| label_53:
0x00002264 lsls r0, r3, 0x1f | r0 = r3 << 0x1f;
0x00002266 itt mi |
| if (r0 >= r3) {
0x00002268 ldrmi r3, [fp, 0xbc] | r3 = *(arg_bch);
| }
| if (r0 >= r3) {
0x0000226c str.w r3, [fp, 0x80] | __asm ("str.w r3, [arg_80h]");
| goto label_102;
| }
| }
| label_102:
0x00002270 ldr.w r3, [fp, 0x94] | r3 = *(arg_94h);
| if (r3 != 0) {
0x00002274 cbz r3, 0x227c |
0x00002276 movs r3, 0 | r3 = 0;
0x00002278 str.w r3, [fp, 0x5c] | __asm ("str.w r3, [arg_5ch]");
| }
| label_92:
0x0000227c ldr.w r3, [fp, 0x58] | r3 = *(arg_58h);
| if (r3 != 0) {
0x00002280 cbz r3, 0x229a |
0x00002282 ldr.w r2, [fp, 0x34] | r2 = *(arg_34h);
0x00002286 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00002288 ldr r1, [pc, 0x194] |
0x0000228a ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x0000228c add r1, pc | r1 = 0x46b0;
0x0000228e add r0, r3 | r0 += r3;
0x00002290 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00002294 cmp r0, 0 |
| if (r0 == 0) {
0x00002296 beq.w 0x3450 | goto label_103;
| }
| }
| label_19:
0x0000229a mov r0, fp | r0 = fp;
0x0000229c bl 0x8850 | fcn_00008850 (r0);
| label_91:
0x000022a0 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x000022a4 cmp r3, 2 |
| if (r3 == 2) {
0x000022a6 beq.w 0x3864 | goto label_104;
| }
| label_29:
0x000022aa ldr r4, [pc, 0x178] |
0x000022ac add r4, pc | r4 = 0x46d6;
0x000022ae ldr.w r3, [r4, 0x190] | r3 = *(0x4866);
0x000022b2 cmp r3, 0 |
| if (r3 == 0) {
0x000022b4 beq.w 0x2eaa | goto label_105;
| }
0x000022b8 ldr r1, [pc, 0x16c] |
0x000022ba movs r6, 0 | r6 = 0;
0x000022bc mov r3, r6 | r3 = r6;
0x000022be movs r2, 1 | r2 = 1;
0x000022c0 strd r6, r6, [sp] | __asm ("strd r6, r6, [sp]");
0x000022c4 add r1, pc | r1 = 0x46f0;
0x000022c6 mov r0, r1 | r0 = r1;
0x000022c8 bl 0x8950 | r0 = fcn_00008950 (r0, r1, r2, r3, r4, r5);
0x000022cc mov r5, r0 | r5 = r0;
0x000022ce cmp r0, 0 |
| if (r0 == 0) {
0x000022d0 beq.w 0x2eaa | goto label_105;
| }
0x000022d4 ldr.w r4, [r4, 0x190] | r4 = *((r4 + 0x190));
0x000022d8 mov r3, r6 | r3 = r6;
0x000022da ldr r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x000022dc add r2, r4 | r2 += r4;
0x000022de str.w r2, [r0, 0x154] | __asm ("str.w r2, [r0, 0x154]");
0x000022e2 ldrh r0, [r4, 0x2c] | r0 = *((r4 + 0x2c));
0x000022e4 strh.w r0, [r5, 0x15c] | *((r5 + 0x15c)) = r0;
0x000022e8 cmp r0, 0 |
| if (r0 != 0) {
0x000022ea bne.w 0x2440 | goto label_2;
| }
0x000022ee b 0x2460 | goto label_106;
| do {
0x0000242c cmp r1, 1 |
| if (r1 == 1) {
0x0000242e beq.w 0x2e56 | goto label_107;
| }
0x00002432 cmp r1, 7 |
| if (r1 == 7) {
0x00002434 beq.w 0x43f0 | goto label_108;
| }
| label_6:
0x00002438 adds r3, 1 | r3++;
0x0000243a adds r2, 0x20 | r2 += 0x20;
0x0000243c cmp r3, r0 |
| if (r3 == r0) {
0x0000243e beq 0x2460 | goto label_106;
| }
| label_2:
0x00002440 ldr r1, [r2] | r1 = *(r2);
0x00002442 cmp r1, 2 |
0x00002444 bne 0x242c |
| } while (r1 != 2);
0x00002446 ldr r1, [r2, 8] | r1 = *((r2 + 8));
0x00002448 adds r3, 1 | r3++;
0x0000244a cmp r3, r0 |
0x0000244c add.w r2, r2, 0x20 | r2 += 0x20;
0x00002450 str r1, [r5, 8] | *((r5 + 8)) = r1;
0x00002452 ldr r1, [r2, -0xc] | r1 = *((r2 - 0xc));
0x00002456 lsr.w r1, r1, 3 | r1 >>= 3;
0x0000245a strh.w r1, [r5, 0x15e] | *((r5 + 0x15e)) = r1;
| if (r3 != r0) {
0x0000245e bne 0x2440 | goto label_2;
| }
| label_106:
0x00002460 ldr r1, [r5] | r1 = *(r5);
0x00002462 ldr.w r3, [r5, 0x1b8] | r3 = *((r5 + 0x1b8));
0x00002466 ldr r0, [r5, 8] | r0 = *((r5 + 8));
0x00002468 subs r1, r4, r1 | r1 = r4 - r1;
0x0000246a str.w r4, [r5, 0x1b4] | __asm ("str.w r4, [r5, 0x1b4]");
0x0000246e add r3, r1 | r3 += r1;
0x00002470 str r1, [r5] | *(r5) = r1;
0x00002472 str.w r3, [r5, 0x1b8] | __asm ("str.w r3, [r5, 0x1b8]");
0x00002476 adds r2, r0, r1 | r2 = r0 + r1;
0x00002478 ldr.w r3, [r5, 0x1bc] | r3 = *((r5 + 0x1bc));
0x0000247c str r2, [r5, 8] | *((r5 + 8)) = r2;
0x0000247e add r3, r1 | r3 += r1;
0x00002480 str.w r3, [r5, 0x1bc] | __asm ("str.w r3, [r5, 0x1bc]");
0x00002484 cmp r2, 0 |
| if (r2 == 0) {
0x00002486 beq.w 0x26ba | goto label_109;
| }
0x0000248a ldr r3, [r0, r1] | r3 = *((r0 + r1));
0x0000248c add.w r0, r5, 0x20 | r0 = r5 + 0x20;
| if (r3 == 0) {
0x00002490 cbz r3, 0x2506 | goto label_110;
| }
0x00002492 movw lr, 0xfdff |
0x00002496 movw r8, 0xfeff |
0x0000249a movw sb, 0xfe35 |
0x0000249e mov.w ip, 0x22 |
0x000024a2 movw r4, 0xff41 |
0x000024a6 movt lr, 0x6fff | lr = 0x6ffffdff;
0x000024aa movt r8, 0x6fff | r8 = 0x6ffffeff;
0x000024ae movt sb, 0x6fff | sb = 0x6ffffe35;
0x000024b2 movt ip, 0x7000 |
0x000024b6 mvn r6, 0x90000000 | r6 = ~0x90000000;
0x000024ba movt r4, 0x6fff | r4 = 0x6fffff41;
0x000024be str r4, [r7, 0x40] | *((r7 + 0x40)) = r4;
| do {
0x000024c0 cmp r3, 0x22 |
| if (r3 >= 0x22) {
0x000024c2 bls 0x24fa |
0x000024c4 subs r4, r6, r3 | r4 = r6 - r3;
0x000024c6 cmp r4, 0xf |
0x000024c8 it ls |
| if (r4 > 0xf) {
0x000024ca subls r3, ip, r3 | r3 = ip - r3;
| }
| if (r4 < 0xf) {
0x000024ce bls 0x24fa | goto label_111;
| }
0x000024d0 sbfx r4, r3, 0, 0x1f | __asm ("sbfx r4, r3, 0, 0x1f");
0x000024d4 cmn.w r4, 4 |
0x000024d8 it hi |
| if (r4 > 4) {
0x000024da rsbhi r3, r4, 0x32 | __asm ("rsbhi r3, r4, 0x32");
| }
| if (r4 > 4) {
0x000024de bhi 0x24fa | goto label_111;
| }
0x000024e0 sub.w r4, lr, r3 | r4 = lr - r3;
0x000024e4 cmp r4, 0xb |
0x000024e6 it ls |
| if (r4 > 0xb) {
0x000024e8 subls r3, sb, r3 | r3 = sb - r3;
| }
| if (r4 < 0xb) {
0x000024ec bls 0x24fa | goto label_111;
| }
0x000024ee sub.w r4, r8, r3 | r4 = r8 - r3;
0x000024f2 cmp r4, 0xa |
| if (r4 > 0xa) {
0x000024f4 bhi 0x24fe | goto label_112;
| }
0x000024f6 ldr r4, [r7, 0x40] | r4 = *((r7 + 0x40));
0x000024f8 subs r3, r4, r3 | r3 = r4 - r3;
| }
| label_111:
0x000024fa str.w r2, [r0, r3, lsl 2] | __asm ("str.w r2, [r0, r3, lsl 2]");
| label_112:
0x000024fe ldr r3, [r2, 8]! | r3 = *((r2 += 8));
0x00002502 cmp r3, 0 |
0x00002504 bne 0x24c0 |
| } while (r3 != 0);
| label_110:
0x00002506 cmp r1, 0 |
| if (r1 != 0) {
0x00002508 beq.w 0x2634 |
0x0000250c ldr r3, [r5, 0x30] | r3 = *((r5 + 0x30));
| if (r3 != 0) {
0x0000250e cbz r3, 0x2526 |
0x00002510 ldr.w r2, [pc, 0xc08] | r2 = *(0x0000311c);
0x00002514 ldrd r3, r0, [r3] | __asm ("ldrd r3, r0, [r3]");
0x00002518 add r2, pc | r2 += pc;
0x0000251a str r3, [r2, 4] | *((r2 + 4)) = r3;
0x0000251c add r0, r1 | r0 += r1;
0x0000251e movs r3, 1 | r3 = 1;
0x00002520 str r0, [r2, 8] | *((r2 + 8)) = r0;
0x00002522 adds r2, 4 | r2 += 4;
0x00002524 str r2, [r5, 0x30] | *((r5 + 0x30)) = r2;
| }
0x00002526 ldr r4, [r5, 0x2c] | r4 = *((r5 + 0x2c));
| if (r4 != 0) {
0x00002528 cbz r4, 0x2546 |
0x0000252a ldr.w r2, [pc, 0xbf4] | r2 = *(0x00003120);
0x0000252e ldr r0, [r4] | r0 = *(r4);
0x00002530 add r2, pc | r2 += pc;
0x00002532 adds r2, 4 | r2 += 4;
0x00002534 str.w r0, [r2, r3, lsl 3] | __asm ("str.w r0, [r2, r3, lsl 3]");
0x00002538 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0000253c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000253e adds r3, 1 | r3++;
0x00002540 add r0, r1 | r0 += r1;
0x00002542 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x00002544 str r2, [r5, 0x2c] | *((r5 + 0x2c)) = r2;
| }
0x00002546 ldr r4, [r5, 0x34] | r4 = *((r5 + 0x34));
| if (r4 != 0) {
0x00002548 cbz r4, 0x2566 |
0x0000254a ldr.w r2, [pc, 0xbd8] | r2 = *(0x00003124);
0x0000254e ldr r0, [r4] | r0 = *(r4);
0x00002550 add r2, pc | r2 += pc;
0x00002552 adds r2, 4 | r2 += 4;
0x00002554 str.w r0, [r2, r3, lsl 3] | __asm ("str.w r0, [r2, r3, lsl 3]");
0x00002558 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0000255c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000255e adds r3, 1 | r3++;
0x00002560 add r0, r1 | r0 += r1;
0x00002562 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x00002564 str r2, [r5, 0x34] | *((r5 + 0x34)) = r2;
| }
0x00002566 ldr r4, [r5, 0x38] | r4 = *((r5 + 0x38));
| if (r4 != 0) {
0x00002568 cbz r4, 0x2586 |
0x0000256a ldr.w r2, [pc, 0xbbc] | r2 = *(0x00003128);
0x0000256e ldr r0, [r4] | r0 = *(r4);
0x00002570 add r2, pc | r2 += pc;
0x00002572 adds r2, 4 | r2 += 4;
0x00002574 str.w r0, [r2, r3, lsl 3] | __asm ("str.w r0, [r2, r3, lsl 3]");
0x00002578 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0000257c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000257e adds r3, 1 | r3++;
0x00002580 add r0, r1 | r0 += r1;
0x00002582 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x00002584 str r2, [r5, 0x38] | *((r5 + 0x38)) = r2;
| }
0x00002586 ldr r4, [r5, 0x3c] | r4 = *((r5 + 0x3c));
| if (r4 != 0) {
0x00002588 cbz r4, 0x25a6 |
0x0000258a ldr.w r2, [pc, 0xba0] | r2 = *(0x0000312c);
0x0000258e ldr r0, [r4] | r0 = *(r4);
0x00002590 add r2, pc | r2 += pc;
0x00002592 adds r2, 4 | r2 += 4;
0x00002594 str.w r0, [r2, r3, lsl 3] | __asm ("str.w r0, [r2, r3, lsl 3]");
0x00002598 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0000259c ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000259e adds r3, 1 | r3++;
0x000025a0 add r0, r1 | r0 += r1;
0x000025a2 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x000025a4 str r2, [r5, 0x3c] | *((r5 + 0x3c)) = r2;
| }
0x000025a6 ldr r4, [r5, 0x64] | r4 = *((r5 + 0x64));
| if (r4 != 0) {
0x000025a8 cbz r4, 0x25c6 |
0x000025aa ldr.w r2, [pc, 0xb84] | r2 = *(0x00003130);
0x000025ae ldr r0, [r4] | r0 = *(r4);
0x000025b0 add r2, pc | r2 += pc;
0x000025b2 adds r2, 4 | r2 += 4;
0x000025b4 str.w r0, [r2, r3, lsl 3] | __asm ("str.w r0, [r2, r3, lsl 3]");
0x000025b8 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x000025bc ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000025be adds r3, 1 | r3++;
0x000025c0 add r0, r1 | r0 += r1;
0x000025c2 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x000025c4 str r2, [r5, 0x64] | *((r5 + 0x64)) = r2;
| }
0x000025c6 ldr r4, [r5, 0x7c] | r4 = *((r5 + 0x7c));
| if (r4 != 0) {
0x000025c8 cbz r4, 0x25e6 |
0x000025ca ldr.w r2, [pc, 0xb68] | r2 = *(0x00003134);
0x000025ce ldr r0, [r4] | r0 = *(r4);
0x000025d0 add r2, pc | r2 += pc;
0x000025d2 adds r2, 4 | r2 += 4;
0x000025d4 str.w r0, [r2, r3, lsl 3] | __asm ("str.w r0, [r2, r3, lsl 3]");
0x000025d8 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x000025dc ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x000025de adds r3, 1 | r3++;
0x000025e0 add r0, r1 | r0 += r1;
0x000025e2 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x000025e4 str r2, [r5, 0x7c] | *((r5 + 0x7c)) = r2;
| }
0x000025e6 ldr.w r4, [r5, 0xe8] | r4 = *((r5 + 0xe8));
| if (r4 != 0) {
0x000025ea cbz r4, 0x260a |
0x000025ec ldr.w r2, [pc, 0xb48] | r2 = *(0x00003138);
0x000025f0 ldr r0, [r4] | r0 = *(r4);
0x000025f2 add r2, pc | r2 += pc;
0x000025f4 adds r2, 4 | r2 += 4;
0x000025f6 str.w r0, [r2, r3, lsl 3] | __asm ("str.w r0, [r2, r3, lsl 3]");
0x000025fa add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x000025fe ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00002600 adds r3, 1 | r3++;
0x00002602 add r0, r1 | r0 += r1;
0x00002604 str r0, [r2, 4] | *((r2 + 4)) = r0;
0x00002606 str.w r2, [r5, 0xe8] | __asm ("str.w r2, [r5, 0xe8]");
| }
0x0000260a ldr.w r4, [r5, 0x150] | r4 = *((r5 + 0x150));
| if (r4 == 0) {
0x0000260e cbz r4, 0x2634 | goto label_113;
| }
0x00002610 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x00002612 cmp r3, 8 |
0x00002614 ldr.w r2, [pc, 0xb24] | r2 = *(0x0000313c);
0x00002618 add r0, r1 | r0 += r1;
0x0000261a ldr r1, [r4] | r1 = *(r4);
0x0000261c add r2, pc | r2 += pc;
0x0000261e add.w r2, r2, 4 | r2 += 4;
0x00002622 str.w r1, [r2, r3, lsl 3] | __asm ("str.w r1, [r2, r3, lsl 3]");
0x00002626 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0000262a str r0, [r2, 4] | *((r2 + 4)) = r0;
0x0000262c str.w r2, [r5, 0x150] | __asm ("str.w r2, [r5, 0x150]");
| if (r3 == 8) {
0x00002630 beq.w 0x42a6 | goto label_114;
| }
| }
| label_113:
0x00002634 ldr r3, [r5, 0x70] | r3 = *((r5 + 0x70));
| if (r3 != 0) {
0x00002636 cbz r3, 0x2644 |
0x00002638 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0000263a cmp r3, 7 |
0x0000263c it ne |
| if (r3 != 7) {
0x0000263e cmpne r3, 0x11 | __asm ("cmpne r3, 0x11");
| }
| if (r3 != 7) {
0x00002640 bne.w 0x43d6 | goto label_97;
| }
| }
0x00002644 ldr r3, [r5, 0x3c] | r3 = *((r5 + 0x3c));
| if (r3 != 0) {
0x00002646 cbz r3, 0x2652 |
0x00002648 ldr r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x0000264a ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0000264c cmp r3, 0xc |
| if (r3 != 0xc) {
0x0000264e bne.w 0x43b2 | goto label_98;
| }
| }
0x00002652 ldr r3, [r5, 0x64] | r3 = *((r5 + 0x64));
| if (r3 != 0) {
0x00002654 cbz r3, 0x2660 |
0x00002656 ldr r3, [r5, 0x6c] | r3 = *((r5 + 0x6c));
0x00002658 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0000265a cmp r3, 8 |
| if (r3 != 8) {
0x0000265c bne.w 0x43c4 | goto label_99;
| }
| }
0x00002660 ldr.w r3, [r5, 0x98] | r3 = *((r5 + 0x98));
| if (r3 != 0) {
0x00002664 cbz r3, 0x2680 |
0x00002666 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00002668 lsls r1, r2, 0x1e | r1 = r2 << 0x1e;
0x0000266a str.w r2, [r5, 0x210] | __asm ("str.w r2, [r5, 0x210]");
0x0000266e it mi |
| if (r1 >= r2) {
0x00002670 strmi r3, [r5, 0x60] | *((r5 + 0x60)) = r3;
| }
0x00002672 lsls r6, r2, 0x1d | r6 = r2 << 0x1d;
0x00002674 it mi |
| if (r6 >= r2) {
0x00002676 strmi r3, [r5, 0x78] | *((r5 + 0x78)) = r3;
| }
0x00002678 lsls r4, r2, 0x1c | r4 = r2 << 0x1c;
0x0000267a it mi |
| if (r4 < r2) {
0x0000267c strmi r3, [r5, 0x80] | *((r5 + 0x80)) = r3;
| goto label_115;
| }
| }
| label_115:
0x00002680 ldr.w r3, [r5, 0xbc] | r3 = *((r5 + 0xbc));
| if (r3 != 0) {
0x00002684 cbz r3, 0x26b0 |
0x00002686 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00002688 lsls r0, r3, 0x1c | r0 = r3 << 0x1c;
0x0000268a str.w r3, [r5, 0x20c] | __asm ("str.w r3, [r5, 0x20c]");
0x0000268e itt mi |
| if (r0 >= r3) {
0x00002690 movmi r2, 1 | r2 = 1;
| }
| if (r0 >= r3) {
0x00002692 strbmi r2, [r5, 0x19c] | *((r5 + 0x19c)) = r2;
| }
0x00002696 ldr.w r2, [pc, 0xaa8] | r2 = *(0x00003140);
0x0000269a add r2, pc | r2 += pc;
0x0000269c ldr r2, [r2] | r2 = *(r2);
0x0000269e lsls r1, r2, 0x19 | r1 = r2 << 0x19;
| if (r1 < r2) {
0x000026a0 bmi.w 0x4084 | goto label_116;
| }
| label_48:
0x000026a4 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
0x000026a6 itt mi |
| if (r2 >= r3) {
0x000026a8 ldrmi r3, [r5, 0xbc] | r3 = *((r5 + 0xbc));
| }
| if (r2 >= r3) {
0x000026ac str.w r3, [r5, 0x80] | __asm ("str.w r3, [r5, 0x80]");
| goto label_117;
| }
| }
| label_117:
0x000026b0 ldr.w r3, [r5, 0x94] | r3 = *((r5 + 0x94));
| if (r3 != 0) {
0x000026b4 cbz r3, 0x26ba |
0x000026b6 movs r3, 0 | r3 = 0;
0x000026b8 str r3, [r5, 0x5c] | *((r5 + 0x5c)) = r3;
| }
| label_109:
0x000026ba mov r0, r5 | r0 = r5;
0x000026bc bl 0x8850 | fcn_00008850 (r0);
0x000026c0 ldrb.w r3, [r5, 0x198] | r3 = *((r5 + 0x198));
0x000026c4 movs r2, 1 | r2 = 1;
0x000026c6 ldr r1, [r5, 0x58] | r1 = *((r5 + 0x58));
0x000026c8 str.w r2, [r5, 0x204] | __asm ("str.w r2, [r5, 0x204]");
0x000026cc orr r3, r3, 4 | r3 |= 4;
0x000026d0 strb.w r3, [r5, 0x198] | *((r5 + 0x198)) = r3;
0x000026d4 ldr.w r3, [r5, 0x1d8] | r3 = *((r5 + 0x1d8));
0x000026d8 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x000026da add.w r2, r5, 0x14 | r2 = r5 + 0x14;
0x000026de str r2, [r3] | *(r3) = r2;
| if (r1 != 0) {
0x000026e0 cbz r1, 0x26f0 |
0x000026e2 ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x000026e4 ldr r2, [r1, 4] | r2 = *((r1 + 4));
0x000026e6 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000026e8 add r3, r2 | r3 += r2;
0x000026ea ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x000026ec str r3, [r2] | *(r2) = r3;
0x000026ee str r3, [r5, 4] | *((r5 + 4)) = r3;
| }
0x000026f0 movs r1, 0 | r1 = 0;
0x000026f2 mov r0, r5 | r0 = r5;
0x000026f4 bl 0x88cc | fcn_000088cc (r0, r1);
0x000026f8 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000026fa cmp r3, 0 |
| if (r3 != 0) {
0x000026fc bne.w 0x4416 | goto label_118;
| }
0x00002700 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00002702 cmp fp, r3 |
| if (fp != r3) {
0x00002704 bne.w 0x443c | goto label_119;
| }
0x00002708 ldr.w r3, [pc, 0xa38] | r3 = *(0x00003144);
0x0000270c add r3, pc | r3 += pc;
0x0000270e str.w r5, [r3, 0x5a4] | __asm ("str.w r5, [r3, 0x5a4]");
0x00002712 add.w r3, r3, 0x598 | r3 += 0x598;
0x00002716 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x00002718 ldr.w r3, [pc, 0xa2c] | r3 = *(0x00003148);
0x0000271c add r3, pc | r3 += pc;
0x0000271e str.w r5, [r3, 0x194] | __asm ("str.w r5, [r3, 0x194]");
0x00002722 add.w r3, r5, 0xc | r3 = r5 + 0xc;
0x00002726 str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
| label_8:
0x00002728 ldr.w r3, [pc, 0xa20] | r3 = *(0x0000314c);
0x0000272c movs r4, 0 | r4 = 0;
0x0000272e ldr r1, [r7, 0x44] | r1 = *((r7 + 0x44));
0x00002730 movs r2, 0x20 | r2 = 0x20;
0x00002732 add.w r6, r7, 0x64 | r6 = r7 + 0x64;
0x00002736 ldr.w sb, [pc, 0xa18] | sb = *(0x00003150);
0x0000273a add r3, pc | r3 += pc;
0x0000273c add.w r8, r7, 0x50 | r8 = r7 + 0x50;
0x00002740 str r4, [r1, 0xc] | *((r1 + 0xc)) = r4;
0x00002742 strd r4, r4, [r1] | __asm ("strd r4, r4, [r1]");
0x00002746 add sb, pc | sb += pc;
0x00002748 str r4, [r1, 8] | *((r1 + 8)) = r4;
0x0000274a strb r2, [r1, 0xc] | *((r1 + 0xc)) = r2;
0x0000274c str.w r1, [r8] | __asm ("str.w r1, [r8]");
0x00002750 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00002752 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x00002756 mov r2, r8 | r2 = r8;
0x00002758 ldr.w r0, [pc, 0x9f8] | r0 = *(0x00003154);
0x0000275c add.w r3, r5, 0x1d8 | r3 = r5 + 0x1d8;
0x00002760 mov r1, r5 | r1 = r5;
0x00002762 strd r4, r4, [sp, 8] | __asm ("strd r4, r4, [sp, 8]");
0x00002766 strd r6, r4, [sp] | __asm ("strd r6, r4, [sp]");
0x0000276a add r0, pc | r0 += pc;
0x0000276c ldr.w r4, [sb, 0x1b8] | r4 = *((sb + 0x1b8));
0x00002770 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00002772 ldr.w r2, [r8] | r2 = *(r8);
0x00002776 cmp r2, 0 |
| if (r2 == 0) {
0x00002778 beq.w 0x36ac | goto label_120;
| }
0x0000277c ldrh r3, [r2, 0xe] | r3 = *((r2 + 0xe));
0x0000277e movw r1, 0xfff1 | r1 = 0xfff1;
0x00002782 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00002784 cmp r3, r1 |
0x00002786 it ne |
| if (r3 != r1) {
0x00002788 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x0000278a itte ne |
| if (r3 == r1) {
0x0000278c movne r3, 1 | r3 = 1;
| }
| if (r3 == r1) {
0x0000278e ldrne r3, [r0] | r3 = *(r0);
| }
| if (r3 != r1) {
0x00002790 moveq r3, 0 | r3 = 0;
| }
0x00002792 add r3, r2 | r3 += r2;
0x00002794 ldr.w r2, [pc, 0x9c0] | r2 = *(0x00003158);
0x00002798 add r2, pc | r2 += pc;
0x0000279a ldr.w ip, [r2, 0x194] | ip = *((r2 + 0x194));
| label_27:
0x0000279e ldr.w r5, [pc, 0x9bc] | r5 = *(0x0000315c);
0x000027a2 add r5, pc | r5 += pc;
0x000027a4 str.w r3, [r5, 0x198] | __asm ("str.w r3, [r5, 0x198]");
0x000027a8 cmp.w ip, 0 |
| if (ip == 0) {
0x000027ac beq.w 0x35bc | goto label_121;
| }
0x000027b0 ldr.w r3, [pc, 0x9ac] | r3 = *(0x00003160);
0x000027b4 movs r4, 0 | r4 = 0;
0x000027b6 ldr r1, [r7, 0x44] | r1 = *((r7 + 0x44));
0x000027b8 movs r2, 0x20 | r2 = 0x20;
0x000027ba add r3, pc | r3 += pc;
0x000027bc str r4, [r1, 0xc] | *((r1 + 0xc)) = r4;
0x000027be strd r4, r4, [r1] | __asm ("strd r4, r4, [r1]");
0x000027c2 str r4, [r1, 8] | *((r1 + 8)) = r4;
0x000027c4 str.w r1, [r8] | __asm ("str.w r1, [r8]");
0x000027c8 strb r2, [r1, 0xc] | *((r1 + 0xc)) = r2;
0x000027ca ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x000027cc stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x000027d0 mov r2, r8 | r2 = r8;
0x000027d2 ldr.w r0, [pc, 0x990] |
0x000027d6 add.w r3, ip, 0x1d8 | r3 = ip + 0x1d8;
0x000027da mov r1, ip | r1 = ip;
0x000027dc strd r4, r4, [sp, 8] | __asm ("strd r4, r4, [sp, 8]");
0x000027e0 strd r6, r4, [sp] | __asm ("strd r6, r4, [sp]");
0x000027e4 add r0, pc | r0 = 0x594e;
0x000027e6 ldr.w r4, [r5, 0x1b8] | r4 = *((r5 + 0x1b8));
0x000027ea blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000027ec ldr.w r2, [r8] | r2 = *(r8);
0x000027f0 cmp r2, 0 |
| if (r2 == 0) {
0x000027f2 beq.w 0x36a2 | goto label_122;
| }
0x000027f6 ldrh r3, [r2, 0xe] | r3 = *((r2 + 0xe));
0x000027f8 movw r1, 0xfff1 | r1 = 0xfff1;
0x000027fc ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000027fe cmp r3, r1 |
0x00002800 it ne |
| if (r3 != r1) {
0x00002802 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x00002804 itte ne |
| if (r3 == r1) {
0x00002806 movne r3, 1 | r3 = 1;
| }
| if (r3 == r1) {
0x00002808 ldrne r3, [r0] | r3 = *(r0);
| }
| if (r3 != r1) {
0x0000280a moveq r3, 0 | r3 = 0;
| }
0x0000280c add r3, r2 | r3 += r2;
0x0000280e ldr.w r2, [pc, 0x958] | r2 = *(0x00003168);
0x00002812 add r2, pc | r2 += pc;
0x00002814 ldr.w r5, [r2, 0x194] | r5 = *((r2 + 0x194));
| label_26:
0x00002818 ldr.w ip, [pc, 0x950] | ip = *(0x0000316c);
0x0000281c add ip, pc |
0x0000281e str.w r3, [ip, 0x19c] | __asm ("str.w r3, [ip, 0x19c]");
0x00002820 adds r1, 0x9c | r1 += 0x9c;
0x00002822 cmp r5, 0 |
| if (r5 == 0) {
0x00002824 beq.w 0x35c8 | goto label_123;
| }
0x00002828 ldr.w r3, [pc, 0x944] | r3 = *(0x00003170);
0x0000282c movs r4, 0 | r4 = 0;
0x0000282e ldr r1, [r7, 0x44] | r1 = *((r7 + 0x44));
0x00002830 movs r2, 0x20 | r2 = 0x20;
0x00002832 add r3, pc | r3 += pc;
0x00002834 str r4, [r1, 0xc] | *((r1 + 0xc)) = r4;
0x00002836 strd r4, r4, [r1] | __asm ("strd r4, r4, [r1]");
0x0000283a str r4, [r1, 8] | *((r1 + 8)) = r4;
0x0000283c str.w r1, [r8] | __asm ("str.w r1, [r8]");
0x00002840 strb r2, [r1, 0xc] | *((r1 + 0xc)) = r2;
0x00002842 ldm r3, {r0, r1, r2, r3} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
0x00002844 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x00002848 mov r2, r8 | r2 = r8;
0x0000284a ldr.w r0, [pc, 0x928] | r0 = *(0x00003174);
0x0000284e add.w r3, r5, 0x1d8 | r3 = r5 + 0x1d8;
0x00002852 mov r1, r5 | r1 = r5;
0x00002854 str r6, [sp] | *(sp) = r6;
0x00002856 strd r4, r4, [sp, 8] | __asm ("strd r4, r4, [sp, 8]");
0x0000285a add r0, pc | r0 += pc;
0x0000285c str r4, [sp, 4] | *(arg_4h) = r4;
0x0000285e ldr.w r4, [ip, 0x1b8] | r4 = *((ip + 0x1b8));
0x00002862 blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00002864 ldr.w r2, [r8] | r2 = *(r8);
0x00002868 cmp r2, 0 |
| if (r2 == 0) {
0x0000286a beq.w 0x35c8 | goto label_123;
| }
0x0000286e ldrh r3, [r2, 0xe] | r3 = *((r2 + 0xe));
0x00002870 movw r1, 0xfff1 | r1 = 0xfff1;
0x00002874 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00002876 cmp r3, r1 |
0x00002878 it ne |
| if (r3 != r1) {
0x0000287a cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x0000287c itte ne |
| if (r3 == r1) {
0x0000287e movne r3, 1 | r3 = 1;
| }
| if (r3 == r1) {
0x00002880 ldrne r3, [r0] | r3 = *(r0);
| }
| if (r3 != r1) {
0x00002882 moveq r3, 0 | r3 = 0;
| }
0x00002884 add r3, r2 | r3 += r2;
| label_21:
0x00002886 ldr.w r4, [pc, 0x8f0] | r4 = *(0x00003178);
0x0000288a add r4, pc | r4 += pc;
0x0000288c str.w r3, [r4, 0x1a0] | __asm ("str.w r3, [r4, 0x1a0]");
0x00002890 bl 0x11af8 | r0 = fcn_00011af8 ();
0x00002894 cmp r0, 0 |
| if (r0 < 0) {
0x00002896 blt.w 0x380c | goto label_124;
| }
0x0000289a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0000289c cmp r3, 0 |
| if (r3 != 0) {
0x0000289e bne.w 0x387e | goto label_125;
| }
| label_31:
0x000028a2 ldr.w r3, [pc, 0x8d8] | r3 = *(0x0000317c);
0x000028a6 add r3, pc | r3 += pc;
0x000028a8 str r0, [r3, 4] | *((r3 + 4)) = r0;
| label_30:
0x000028aa movw r3, 0x1ff |
0x000028ae movt r3, 3 | r3 = 0x301ff;
0x000028b2 cmp r0, r3 |
| if (r0 <= r3) {
0x000028b4 ble.w 0x43e8 | goto label_126;
| }
0x000028b8 ldr.w r4, [pc, 0x8c4] | r4 = *(0x00003180);
0x000028bc ldrd r2, r3, [sl, 0x15c] | __asm ("ldrd r2, r3, [sl, 0x15c]");
0x000028c0 ldrd r0, r1, [sl, 0x14c] | __asm ("ldrd r0, r1, [sl, 0x14c]");
0x000028c4 add r4, pc | r4 += pc;
0x000028c6 bl 0x5714 | fcn_00005714 (r0, r1, r2, r3);
0x000028ca ldr.w r0, [r4, 0x598] | r0 = *((r4 + 0x598));
0x000028ce movs r1, 0 | r1 = 0;
0x000028d0 bl 0xbdf0 | fcn_0000bdf0 (r0);
0x000028d4 ldr.w r3, [r4, 0x59c] | r3 = *((r4 + 0x59c));
0x000028d8 movs r2, 0 | r2 = 0;
0x000028da str r0, [r7, 0x2c] | *((r7 + 0x2c)) = r0;
0x000028dc str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x000028de cmp r3, 0 |
| if (r3 == 0) {
0x000028e0 beq.w 0x33ec | goto label_127;
| }
| label_17:
0x000028e4 ldr.w r3, [pc, 0x89c] | r3 = *(0x00003184);
0x000028e8 movs r4, 1 | r4 = 1;
0x000028ea ldr.w r0, [pc, 0x89c] | r0 = *(0x00003188);
0x000028ee add r3, pc | r3 += pc;
0x000028f0 ldrb.w r1, [r3, 0x730] | r1 = *((r3 + 0x730));
0x000028f4 add r0, pc | r0 += pc;
0x000028f6 ldr.w r2, [r3, 0x578] | r2 = *((r3 + 0x578));
0x000028fa add.w r5, r3, 0x598 | r5 = r3 + 0x598;
0x000028fe bfi r1, r4, 0, 2 | value_0 = BIT_MASK (0, 2);
| value_1 = r4 & value_0;
| value_0 = ~value_0;
| r1 &= value_0;
| r1 |= value_1;
0x00002902 strb.w r1, [r3, 0x730] | *((r3 + 0x730)) = r1;
0x00002906 adds r2, r2, r4 | r2 += r4;
0x00002908 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0000290a add r1, r4 | r1 += r4;
0x0000290c ldr.w r4, [r0, 0x16c] | r4 = *((r0 + 0x16c));
0x00002910 str r1, [r3, 4] | *((r3 + 4)) = r1;
0x00002912 ldr.w r1, [r3, 0x57c] | r1 = *((r3 + 0x57c));
0x00002916 str.w r5, [fp, 0xc] | __asm ("str.w r5, [arg_ch]");
0x0000291a str.w r2, [r3, 0x578] | __asm ("str.w r2, [r3, 0x578]");
0x0000291e adc r1, r1, 0 | __asm ("adc r1, r1, 0");
0x00002922 adds r4, 2 | r4 += 2;
0x00002924 str.w r1, [r3, 0x57c] | __asm ("str.w r1, [r3, 0x57c]");
0x00002928 str.w fp, [r3, 0x5a8] | __asm ("str.w fp, [r3, 0x5a8]");
| if (r4 == 2) {
0x0000292c bne 0x293e |
0x0000292e ldr.w r3, [fp] | r3 = *(fp);
0x00002932 clz r3, r3 | r3 &= r3;
0x00002936 lsrs r3, r3, 5 | r3 >>= 5;
0x00002938 rsbs r3, r3, 0 | r3 -= ;
0x0000293a str.w r3, [r0, 0x16c] | __asm ("str.w r3, [r0, 0x16c]");
| }
0x0000293e ldr.w r1, [pc, 0x84c] | r1 = *(0x0000318c);
0x00002942 add r1, pc | r1 += pc;
0x00002944 ldrh r3, [r1, 0x28] | r3 = *((r1 + 0x28));
0x00002946 cmp r3, 0x34 |
| if (r3 != 0x34) {
0x00002948 bne.w 0x438a | goto label_128;
| }
0x0000294c ldrh r3, [r1, 0x2a] | r3 = *((r1 + 0x2a));
0x0000294e cmp r3, 0x20 |
| if (r3 != 0x20) {
0x00002950 bne.w 0x439e | goto label_129;
| }
0x00002954 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x00002956 movw r0, 0xe552 |
0x0000295a ldrh r2, [r1, 0x2c] | r2 = *((r1 + 0x2c));
0x0000295c movt r0, 0x6474 | r0 = 0x6474e552;
0x00002960 add r3, r1 | r3 += r1;
0x00002962 ldr.w r1, [pc, 0x82c] | r1 = *(0x00003190);
0x00002966 add r1, pc | r1 += pc;
0x00002968 str.w r3, [r1, 0x6ec] | __asm ("str.w r3, [r1, 0x6ec]");
0x0000296c add.w r3, r3, r2, lsl 5 | r3 += (r2 << 5);
0x00002970 strh.w r2, [r1, 0x6f4] | *((r1 + 0x6f4)) = r2;
| do {
| if (r2 == 0) {
0x00002974 cbz r2, 0x2994 | goto label_130;
| }
0x00002976 ldr r1, [r3, -0x20] | r1 = *((r3 - 0x20));
0x0000297a subs r2, 1 | r2--;
0x0000297c subs r3, 0x20 | r3 -= 0x20;
0x0000297e cmp r1, r0 |
0x00002980 bne 0x2974 |
| } while (r1 != r0);
0x00002982 ldr.w r2, [pc, 0x810] | r2 = *(0x00003194);
0x00002986 ldr r1, [r3, 8] | r1 = *((r3 + 8));
0x00002988 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0000298a add r2, pc | r2 += pc;
0x0000298c str.w r1, [r2, 0x7e8] | __asm ("str.w r1, [r2, 0x7e8]");
0x00002990 str.w r3, [r2, 0x7ec] | __asm ("str.w r3, [r2, 0x7ec]");
| label_130:
0x00002994 ldr.w r0, [pc, 0x800] | r0 = *(0x00003198);
0x00002998 add r0, pc | r0 += pc;
0x0000299a ldr.w r3, [r0, 0x7d0] | r3 = *((r0 + 0x7d0));
0x0000299e cmp r3, 0 |
| if (r3 != 0) {
0x000029a0 bne.w 0x3258 | goto label_131;
| }
| label_13:
0x000029a4 ldr.w r3, [fp, 0x134] | r3 = *(arg_134h);
0x000029a8 ldr.w r2, [fp, 0x34] | r2 = *(arg_34h);
0x000029ac ldr r4, [r2, 4] | r4 = *((r2 + 4));
| if (r3 != 0) {
0x000029ae cbz r3, 0x29d4 |
0x000029b0 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000029b2 ldrb r2, [r4, r3] | r2 = *((r4 + r3));
0x000029b4 add r3, r4 | r3 += r4;
| if (r2 == 0) {
0x000029b6 cbz r2, 0x29d4 | goto label_132;
| }
0x000029b8 ldr.w r2, [sl, 0x40] | r2 = *((sl + 0x40));
0x000029bc cmp r2, 0x10 |
| if (r2 == 0x10) {
0x000029be beq.w 0x4382 | goto label_133;
| }
0x000029c2 str.w r3, [sl, r2, lsl 2] | __asm ("str.w r3, [sl, r2, lsl 2]");
0x000029c6 adds r2, 1 | r2++;
0x000029c8 cmp r2, 1 |
0x000029ca str.w r2, [sl, 0x40] | __asm ("str.w r2, [sl, 0x40]");
0x000029ce it eq |
| if (r2 == 1) {
0x000029d0 streq r3, [sl, 0x48] | *((sl + 0x48)) = r3;
| goto label_132;
| }
| }
| label_132:
0x000029d4 ldr.w r3, [fp, 0x138] | r3 = *(arg_138h);
| if (r3 != 0) {
0x000029d8 cbz r3, 0x2a00 |
0x000029da ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000029dc ldrb r2, [r4, r3] | r2 = *((r4 + r3));
0x000029de add r4, r3 | r4 += r3;
| if (r2 == 0) {
0x000029e0 cbz r2, 0x2a00 | goto label_134;
| }
0x000029e2 ldr.w r3, [sl, 0x40] | r3 = *((sl + 0x40));
0x000029e6 cmp r3, 0x10 |
| if (r3 == 0x10) {
0x000029e8 beq.w 0x4382 | goto label_133;
| }
0x000029ec str.w r4, [sl, r3, lsl 2] | __asm ("str.w r4, [sl, r3, lsl 2]");
0x000029f0 adds r3, 1 | r3++;
0x000029f2 cmp r3, 1 |
0x000029f4 ldr.w r2, [sl, 0x164] | r2 = *((sl + 0x164));
0x000029f8 str.w r3, [sl, 0x40] | __asm ("str.w r3, [sl, 0x40]");
| if (r3 == 1) {
0x000029fc beq.w 0x3604 | goto label_135;
| }
| }
| label_134:
0x00002a00 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00002a04 cmp r3, 6 |
| if (r3 == 6) {
0x00002a06 beq.w 0x34c8 | goto label_22;
| }
0x00002a0a ldr.w r3, [sl, 0x40] | r3 = *((sl + 0x40));
0x00002a0e cmp r3, 0 |
| if (r3 != 0) {
0x00002a10 bne.w 0x3264 | goto label_136;
| }
0x00002a14 movs r3, 1 | r3 = 1;
0x00002a16 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
| label_16:
0x00002a18 bl 0xd498 | fcn_0000d498 ();
0x00002a1c ldr.w r3, [fp, 0x74] | r3 = *(arg_74h);
0x00002a20 str r0, [r7, 0x20] | *((r7 + 0x20)) = r0;
| if (r3 != 0) {
0x00002a22 cbz r3, 0x2a28 |
0x00002a24 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x00002a26 str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
0x00002a28 ldr.w r3, [pc, 0x770] | r3 = *(0x0000319c);
0x00002a2c add r3, pc | r3 += pc;
0x00002a2e ldr.w r3, [r3, 0x60c] | r3 = *((r3 + 0x60c));
| if (r3 != 0) {
0x00002a32 cbz r3, 0x2a38 |
0x00002a34 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x00002a36 str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
0x00002a38 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x00002a3a movs r3, 1 | r3 = 1;
0x00002a3c ldr.w r4, [pc, 0x760] | r4 = *(0x000031a0);
0x00002a40 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x00002a42 add r4, pc | r4 += pc;
0x00002a44 bl 0xbdec | dl_debug_state ();
0x00002a48 ldr.w r3, [r4, 0x1dc] | r3 = *((r4 + 0x1dc));
0x00002a4c cmp r3, 0 |
| if (r3 != 0) {
0x00002a4e bne.w 0x38f2 | goto label_137;
| }
| label_36:
0x00002a52 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00002a54 ldr r3, [r3] | r3 = *(r3);
0x00002a56 cmp r3, 0 |
| if (r3 != 0) {
0x00002a58 bne.w 0x436e | goto label_138;
| }
0x00002a5c ldr.w r4, [sl, 0x154] | r4 = *((sl + 0x154));
0x00002a60 cmp r4, 0 |
| if (r4 != 0) {
0x00002a62 bne.w 0x393c | goto label_139;
| }
| label_37:
0x00002a66 ldr.w r0, [sl, 0x158] | r0 = *((sl + 0x158));
0x00002a6a cmp r0, 0 |
| if (r0 != 0) {
0x00002a6c bne.w 0x3a6a | goto label_140;
| }
| label_39:
0x00002a70 ldr.w r5, [pc, 0x730] | r5 = *(0x000031a4);
0x00002a74 movs r1, 4 | r1 = 4;
0x00002a76 add r5, pc | r5 += pc;
0x00002a78 mov r0, r5 | r0 = r5;
0x00002a7a bl 0x146f8 | r0 = fcn_000146f8 ();
0x00002a7e cmp r0, 0 |
| if (r0 == 0) {
0x00002a80 beq.w 0x3950 | goto label_141;
| }
| label_38:
0x00002a84 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x00002a86 ldr r1, [r3] | r1 = *(r3);
0x00002a88 cmp r1, 0 |
| if (r1 != 0) {
0x00002a8a bne.w 0x38b0 | goto label_142;
| }
| label_35:
0x00002a8e ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00002a92 movs r0, 0 | r0 = 0;
0x00002a94 str r0, [sp] | *(sp) = r0;
0x00002a96 mov r2, r4 | r2 = r4;
0x00002a98 mov r0, fp | r0 = fp;
0x00002a9a sub.w r3, r3, 3 | r3 -= 3;
0x00002a9e clz r3, r3 | r3 &= r3;
0x00002aa2 lsrs r3, r3, 5 | r3 >>= 5;
0x00002aa4 bl 0xa720 | fcn_0000a720 (r0, r1, r2, r3, r4, r5, r6);
0x00002aa8 ldr.w r0, [fp, 0x164] | r0 = *(arg_164h);
0x00002aac cmp r0, 0 |
| if (r0 == 0) {
0x00002aae beq.w 0x3894 | goto label_143;
| }
0x00002ab2 ldr.w r4, [fp, 0x160] | r4 = *(arg_160h);
0x00002ab6 add.w r2, r4, r0, lsl 2 | r2 = r4 + (r0 << 2);
| do {
0x00002aba ldr r1, [r2, -0x4]! | r1 = *((r2 -= 0x4));
0x00002abe ldrb.w r3, [r1, 0x198] | r3 = *((r1 + 0x198));
0x00002ac2 cmp r2, r4 |
0x00002ac4 orr r3, r3, 0x10 | r3 |= 0x10;
0x00002ac8 strb.w r3, [r1, 0x198] | *((r1 + 0x198)) = r3;
0x00002acc bne 0x2aba |
| } while (r2 != r4);
0x00002ace ldr.w r3, [pc, 0x6d8] | r3 = *(0x000031a8);
0x00002ad2 add r3, pc | r3 += pc;
0x00002ad4 ldr.w r2, [r3, 0x5a8] | r2 = *((r3 + 0x5a8));
0x00002ad8 ldr.w r1, [r3, 0x5a4] | r1 = *((r3 + 0x5a4));
0x00002adc str r1, [r2, 0xc] | *((r2 + 0xc)) = r1;
0x00002ade ldr.w r3, [r3, 0x5a4] | r3 = *((r3 + 0x5a4));
| if (r3 != 0) {
0x00002ae2 cbz r3, 0x2ae6 |
| label_33:
0x00002ae4 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
| }
0x00002ae6 cmp r0, 1 |
0x00002ae8 ldr.w r5, [sl, 0x164] | r5 = *((sl + 0x164));
| if (r0 < 1) {
0x00002aec bls.w 0x2ea4 | goto label_144;
| }
0x00002af0 ldr.w ip, [pc, 0x6b8] | ip = *(0x000031ac);
0x00002af4 movs r3, 1 | r3 = 1;
0x00002af6 ldr.w r6, [fp, 0x160] | r6 = *(arg_160h);
0x00002afa add ip, pc |
0x00002afc mov r2, r6 | r2 = r6;
0x00002afe add.w r4, ip, 0x598 | r4 = ip + 0x598;
0x00002b02 b 0x2b0c |
| while (r1 != r4) {
0x00002b04 adds r3, 1 | r3++;
0x00002b06 cmp r0, r3 |
| if (r0 == r3) {
0x00002b08 beq.w 0x2ea4 | goto label_144;
| }
0x00002b0c ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x00002b10 cmp r1, r4 |
0x00002b12 bne 0x2b04 |
| }
0x00002b14 add.w r2, r3, 0x40000000 | r2 = r3 + 0x40000000;
0x00002b18 subs r2, 1 | r2--;
0x00002b1a ldr.w r1, [r6, r2, lsl 2] | offset_2 = r2 << 2;
| r1 = *((r6 + offset_2));
0x00002b1e lsls r2, r2, 2 | r2 <<= 2;
0x00002b20 str.w r1, [ip, 0x5a8] | __asm ("str.w r1, [ip, 0x5a8]");
0x00002b24 cmp r5, 0 |
| if (r5 != 0) {
0x00002b26 bne.w 0x3b5e | goto label_145;
| }
0x00002b2a adds r3, 1 | r3++;
0x00002b2c ldr.w r4, [pc, 0x680] | r4 = *(0x000031b0);
0x00002b30 cmp r3, r0 |
0x00002b32 ldr.w r3, [pc, 0x680] | r3 = *(0x000031b4);
0x00002b36 itet lo |
| if (r3 >= r0) {
0x00002b38 addlo r2, r2, r6 | r2 += r6;
| }
| if (r3 < r0) {
0x00002b3a movhs r0, r5 | r0 = r5;
| }
| if (r3 >= r0) {
0x00002b3c ldrlo r0, [r2, 8] | r0 = *((r2 + 8));
| }
0x00002b3e add r4, pc | r4 += pc;
0x00002b40 add r3, pc | r3 += pc;
0x00002b42 ldr.w r3, [r3, 0x194] | r3 = *((r3 + 0x194));
0x00002b46 str.w r0, [r4, 0x5a4] | __asm ("str.w r0, [r4, 0x5a4]");
0x00002b4a ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
| if (r3 != 0) {
0x00002b4c cbz r3, 0x2b64 |
0x00002b4e subs r6, r3, r2 | r6 = r3 - r2;
0x00002b50 cmp r3, r0 |
0x00002b52 clz r6, r6 | r6 &= r6;
0x00002b56 lsr.w r6, r6, 5 | r6 >>= 5;
0x00002b5a it eq |
| if (r3 != r0) {
0x00002b5c moveq r6, 0 | r6 = 0;
| }
0x00002b5e cmp r6, 0 |
| if (r6 != 0) {
0x00002b60 bne.w 0x3888 | goto label_146;
| }
| }
| label_32:
0x00002b64 cmp r2, r0 |
| if (r2 != r0) {
0x00002b66 bne.w 0x444e | goto label_147;
| }
0x00002b6a ldr.w r3, [pc, 0x64c] | r3 = *(0x000031b8);
0x00002b6e add r3, pc | r3 += pc;
0x00002b70 add.w r0, r3, 0x598 | r0 = r3 + 0x598;
0x00002b74 str r0, [r1, 0xc] | *((r1 + 0xc)) = r0;
0x00002b76 ldr.w r3, [r3, 0x5a4] | r3 = *((r3 + 0x5a4));
0x00002b7a cmp r3, 0 |
| if (r3 == 0) {
0x00002b7c beq.w 0x35a4 | goto label_148;
| }
0x00002b80 ldr r2, [r3, 0x10] | r2 = *((r3 + 0x10));
0x00002b82 cmp r2, r1 |
0x00002b84 ittt eq |
| if (r2 != r1) {
0x00002b86 streq r0, [r3, 0x10] | *((r3 + 0x10)) = r0;
| }
| if (r2 != r1) {
0x00002b88 moveq r3, 1 | r3 = 1;
| }
| if (r2 != r1) {
0x00002b8a streq r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
| }
| if (r2 != r1) {
0x00002b8c bne.w 0x4402 | goto label_149;
| }
| label_7:
0x00002b90 clz r3, r5 | r3 &= r5;
0x00002b94 sub.w r5, r5, 3 | r5 -= 3;
0x00002b98 ldr.w r1, [pc, 0x620] | r1 = *(0x000031bc);
0x00002b9c clz r5, r5 | r5 &= r5;
0x00002ba0 ldr.w r0, [pc, 0x61c] | r0 = *(0x000031c0);
0x00002ba4 lsrs r3, r3, 5 | r3 >>= 5;
0x00002ba6 lsrs r5, r5, 5 | r5 >>= 5;
0x00002ba8 add.w r6, r7, 0x64 | r6 = r7 + 0x64;
0x00002bac add r1, pc | r1 += pc;
0x00002bae strd r3, r5, [r6] | __asm ("strd r3, r5, [r6]");
0x00002bb2 add r0, pc | r0 += pc;
0x00002bb4 mov r2, r6 | r2 = r6;
0x00002bb6 bl 0x12578 | fcn_00012578 (r0, r1);
0x00002bba ldr.w r3, [pc, 0x608] | r3 = *(0x000031c4);
0x00002bbe add r3, pc | r3 += pc;
0x00002bc0 ldrb r3, [r3, 4] | r3 = *((r3 + 4));
0x00002bc2 str r3, [r7, 0x30] | *((r7 + 0x30)) = r3;
0x00002bc4 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00002bc6 cmp r3, 0 |
| if (r3 == 0) {
0x00002bc8 beq.w 0x3688 | goto label_150;
| }
| label_25:
0x00002bcc ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
| if (r3 != 0) {
0x00002bce cbz r3, 0x2bf6 |
0x00002bd0 ldr.w r3, [pc, 0x5f4] | r3 = *(0x000031c8);
0x00002bd4 movs r5, 0 | r5 = 0;
0x00002bd6 ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x00002bd8 ldr.w r2, [pc, 0x5f0] | r2 = *(0x31cc);
0x00002bdc add r3, pc | r3 += pc;
0x00002bde ldr.w r4, [pc, 0x5f0] | r4 = *(0x000031d0);
0x00002be2 ldr r0, [r3] | r0 = *(r3);
0x00002be4 ldr r2, [r1, r2] | r2 = *((r1 + r2));
0x00002be6 add r4, pc | r4 += pc;
0x00002be8 ldr r1, [r0] | r1 = *(r0);
0x00002bea str r5, [r3] | *(r3) = r5;
0x00002bec ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00002bee bic r1, r1, 0xff | r1 = BIT_MASK (r1, 0xff);
0x00002bf2 str r1, [r2] | *(r2) = r1;
0x00002bf4 str r3, [r4, 0x44] | *((r4 + 0x44)) = r3;
| }
0x00002bf6 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00002bfa cmp r3, 0 |
| if (r3 != 0) {
0x00002bfc bne.w 0x3a96 | goto label_151;
| }
| label_45:
0x00002c00 ldr.w r3, [fp, 0x140] | r3 = *(arg_140h);
0x00002c04 cmp r3, 0 |
| if (r3 == 0) {
0x00002c06 beq.w 0x2f14 | goto label_152;
| }
0x00002c0a ldr.w r2, [pc, 0x5c8] | r2 = *(0x000031d4);
0x00002c0e add r2, pc | r2 += pc;
0x00002c10 ldr.w r1, [r2, 0x17c] | r1 = *((r2 + 0x17c));
0x00002c14 cmp r1, 0 |
| if (r1 != 0) {
0x00002c16 bne.w 0x2f14 | goto label_152;
| }
0x00002c1a ldr r2, [r2, 0x38] | r2 = *((r2 + 0x38));
0x00002c1c cmp r2, 0 |
| if (r2 != 0) {
0x00002c1e bne.w 0x2f14 | goto label_152;
| }
0x00002d46 ldr r1, [r3, -0xc] | r1 = *((r3 - 0xc));
0x00002d4a cmp r1, 0 |
| if (r1 == 0) {
0x00002d4c beq.w 0x2040 | goto label_3;
| }
0x00002d50 str.w r1, [fp, 0x238] | __asm ("str.w r1, [arg_238h]");
0x00002d54 ldr r1, [r3, -0x4] | r1 = *((r3 - 0x4));
0x00002d58 str.w r1, [fp, 0x23c] | __asm ("str.w r1, [arg_23ch]");
0x00002d5c ldr r0, [r3, -0x18] | r0 = *((r3 - 0x18));
0x00002d60 cmp r1, 0 |
| if (r1 != 0) {
0x00002d62 bne.w 0x3406 | goto label_153;
| }
| label_18:
0x00002d66 str.w r1, [fp, 0x240] | __asm ("str.w r1, [arg_240h]");
0x00002d6a adds r3, 0x20 | r3 += 0x20;
0x00002d6c ldr r1, [r3, -0x30] | r1 = *((r3 - 0x30));
0x00002d70 cmp r8, r3 |
0x00002d72 strd r0, r1, [fp, 0x230] | __asm ("strd r0, r1, [fp, 0x230]");
0x00002d76 mov.w r1, 1 | r1 = 1;
0x00002d7a ldr r0, [r7, 0x18] | r0 = *((r7 + 0x18));
0x00002d7c str.w r1, [fp, 0x248] | __asm ("str.w r1, [arg_248h]");
0x00002d80 str.w r1, [r0, 0x880] | __asm ("str.w r1, [r0, 0x880]");
| if (r8 != r3) {
0x00002d84 bne.w 0x2004 | goto label_4;
| }
0x00002d88 b.w 0x2046 | goto label_5;
0x00002d8c ldr r1, [r3, -0x18] | r1 = *((r3 - 0x18));
0x00002d90 adds r3, 0x20 | r3 += 0x20;
0x00002d92 cmp r8, r3 |
0x00002d94 sub.w r1, r6, r1 | r1 = r6 - r1;
0x00002d98 str.w r1, [fp] | __asm ("str.w r1, [fp]");
| if (r8 != r3) {
0x00002d9c bne.w 0x2004 | goto label_4;
| }
0x00002da0 b.w 0x2046 | goto label_5;
0x00002da4 ldr r1, [r3, -0x18] | r1 = *((r3 - 0x18));
0x00002da8 adds r3, 0x20 | r3 += 0x20;
0x00002daa ldr.w r0, [fp] | r0 = *(fp);
0x00002dae cmp r8, r3 |
0x00002db0 add r1, r0 | r1 += r0;
0x00002db2 str.w r1, [fp, 8] | __asm ("str.w r1, [arg_8h]");
| if (r8 != r3) {
0x00002db6 bne.w 0x2004 | goto label_4;
| }
0x00002dba b.w 0x2046 | goto label_5;
0x00002dbe ldr r0, [r3, -0x18] | r0 = *((r3 - 0x18));
0x00002dc2 ldr r4, [r7, 0x34] | r4 = *((r7 + 0x34));
0x00002dc4 ldr.w r1, [fp] | r1 = *(fp);
0x00002dc8 and.w lr, r0, r4 | lr = r0 & r4;
0x00002dcc ldr.w r4, [fp, 0x1b4] | r4 = *(arg_1b4h);
0x00002dd0 add lr, r1 | lr += r1;
0x00002dd2 cmp r4, lr |
0x00002dd4 it hi |
| if (r4 <= lr) {
0x00002dd6 strhi lr, [fp, 0x1b4] |
| }
0x00002dda ldr r4, [r3, -0xc] | r4 = *((r3 - 0xc));
0x00002dde add r0, r4 | r0 += r4;
0x00002de0 add r0, r1 | r0 += r1;
0x00002de2 ldr.w r1, [fp, 0x1b8] | r1 = *(arg_1b8h);
0x00002de6 cmp r1, r0 |
0x00002de8 it lo |
| if (r1 >= r0) {
0x00002dea strlo r0, [fp, 0x1b8] | *(arg_1b8h) = r0;
| }
0x00002dee ldr r1, [r3, -0x8] | r1 = *((r3 - 0x8));
0x00002df2 lsls r1, r1, 0x1f | r1 <<= 0x1f;
| if (r1 >= r1) {
0x00002df4 bpl.w 0x2040 | goto label_3;
| }
0x00002df8 ldr.w r1, [fp, 0x1bc] | r1 = *(arg_1bch);
0x00002dfc adds r3, 0x20 | r3 += 0x20;
0x00002dfe cmp r1, r0 |
0x00002e00 it lo |
| if (r1 >= r0) {
0x00002e02 strlo r0, [fp, 0x1bc] | *(arg_1bch) = r0;
| }
0x00002e06 cmp r8, r3 |
| if (r8 != r3) {
0x00002e08 bne.w 0x2004 | goto label_4;
| }
0x00002e0c b.w 0x2046 | goto label_5;
0x00002e10 ldr lr, [r3, -0x18] |
0x00002e14 ldr.w ip, [fp] | ip = *(fp);
0x00002e18 ldr r1, [r7, 0x20] | r1 = *((r7 + 0x20));
0x00002e1a ldr.w r0, [sb, 0x5a0] | r0 = *((sb + 0x5a0));
0x00002e1e ldr r4, [r7, 0x28] | r4 = *((r7 + 0x28));
0x00002e20 str.w r1, [sb, 0x5b4] | __asm ("str.w r1, [sb, 0x5b4]");
0x00002e24 add.w r1, lr, ip | r1 = lr + ip;
0x00002e28 str r1, [r4, 0x14] | *((r4 + 0x14)) = r1;
0x00002e2a cmp r0, 0 |
| if (r0 == 0) {
0x00002e2c beq.w 0x364c | goto label_154;
| }
| label_24:
0x00002e30 adds r3, 0x20 | r3 += 0x20;
0x00002e32 movs r1, 1 | r1 = 1;
0x00002e34 cmp r8, r3 |
0x00002e36 str r1, [r7, 0x40] | *((r7 + 0x40)) = r1;
| if (r8 != r3) {
0x00002e38 bne.w 0x2004 | goto label_4;
| }
0x00002e3c b.w 0x2046 | goto label_5;
| label_85:
0x00002e40 ldr r1, [r3, -0x8] | r1 = *((r3 - 0x8));
0x00002e44 adds r3, 0x20 | r3 += 0x20;
0x00002e46 ldr r0, [r7, 0x2c] | r0 = *((r7 + 0x2c));
0x00002e48 cmp r8, r3 |
0x00002e4a str.w r1, [r0, 0x878] | __asm ("str.w r1, [r0, 0x878]");
| if (r8 != r3) {
0x00002e4e bne.w 0x2004 | goto label_4;
| }
0x00002e52 b.w 0x2046 | goto label_5;
| label_107:
0x00002e56 ldr r1, [r5] | r1 = *(r5);
0x00002e58 ldr r6, [r2, 8] | r6 = *((r2 + 8));
| if (r1 == 0) {
0x00002e5a cbnz r1, 0x2e5e |
0x00002e5c str r6, [r5] | *(r5) = r6;
| }
0x00002e5e ldr r1, [r2, 0x14] | r1 = *((r2 + 0x14));
0x00002e60 add r6, r1 | r6 += r1;
0x00002e62 ldr.w r1, [r5, 0x1b8] | r1 = *((r5 + 0x1b8));
0x00002e66 cmp r6, r1 |
0x00002e68 it hs |
| if (r6 < r1) {
0x00002e6a strhs r6, [r5, 0x1b8] | *((r5 + 0x1b8)) = r6;
| }
0x00002e6e ldr r1, [r2, 0x18] | r1 = *((r2 + 0x18));
0x00002e70 lsls r1, r1, 0x1f | r1 <<= 0x1f;
| if (r1 >= r1) {
0x00002e72 bpl.w 0x2438 | goto label_6;
| }
0x00002e76 ldr.w r1, [r5, 0x1bc] | r1 = *((r5 + 0x1bc));
0x00002e7a cmp r6, r1 |
0x00002e7c it hs |
| if (r6 < r1) {
0x00002e7e strhs r6, [r5, 0x1bc] | *((r5 + 0x1bc)) = r6;
| }
0x00002e82 b.w 0x2438 | goto label_6;
| label_67:
0x00002e86 ldr r3, [r5, 8]! | r3 = *((r5 += 8));
0x00002e8a subs r4, 2 | r4 -= 2;
0x00002e8c ldr r2, [pc, 0x354] |
0x00002e8e str.w r3, [sl, 0x14c] | __asm ("str.w r3, [sl, 0x14c]");
0x00002e92 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x00002e94 add r2, pc | r2 = 0x607c;
0x00002e96 str.w r3, [sl, 0x150] | __asm ("str.w r3, [sl, 0x150]");
0x00002e9a ldr r3, [r2, 0x10] | r3 = *(0x608c);
0x00002e9c adds r3, 2 | r3 += 2;
0x00002e9e str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x00002ea0 b.w 0x1a2e | goto label_0;
| label_144:
0x00002ea4 movs r3, 0 | r3 = 0;
0x00002ea6 str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
0x00002ea8 b 0x2b90 | goto label_7;
| label_105:
0x00002eaa ldr r3, [pc, 0x33c] |
0x00002eac add r3, pc | r3 = 0x609a;
0x00002eae ldr.w r5, [r3, 0x194] | r5 = *(0x622e);
0x00002eb2 cmp r5, 0 |
| if (r5 == 0) {
0x00002eb4 beq.w 0x35ac | goto label_155;
| }
0x00002eb8 ldr r3, [pc, 0x330] |
0x00002eba add r3, pc | r3 = 0x60aa;
0x00002ebc addw r3, r3, 0x5a4 | __asm ("addw r3, r3, 0x5a4");
0x00002ec0 str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
0x00002ec2 b 0x2728 | goto label_8;
0x00002ec4 ldr r3, [r5] | r3 = *(r5);
0x00002ec6 str r3, [r2, 4] | *((r2 + 4)) = r3;
| label_83:
0x00002ec8 ldr r3, [r2, 8]! | r3 = *((r2 += 8));
0x00002ecc cmp r3, 0 |
| if (r3 != 0) {
0x00002ece bne.w 0x1efa | goto label_9;
| }
| label_11:
0x00002ed2 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
| if (r3 != 0) {
0x00002ed4 cbz r3, 0x2ee0 |
0x00002ed6 ldr r3, [pc, 0x318] |
0x00002ed8 ldr r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x00002eda add r3, pc |
0x00002edc ldr r3, [r3] | r3 = *(0x60d0);
0x00002ede str r2, [r3] | *(r3) = r2;
| }
0x00002ee0 movs r3, 1 | r3 = 1;
0x00002ee2 str r3, [r7, 0x30] | *((r7 + 0x30)) = r3;
0x00002ee4 b.w 0x1f88 | goto label_10;
0x00002ee8 ldr r3, [r0] | r3 = *(r0);
0x00002eea str r3, [r2, 4] | *((r2 + 4)) = r3;
0x00002eec ldr r3, [r2, 8]! | r3 = *((r2 += 8));
0x00002ef0 cmp r3, 0 |
| if (r3 != 0) {
0x00002ef2 bne.w 0x1efa | goto label_9;
| }
0x00002ef6 b 0x2ed2 | goto label_11;
0x00002ef8 str r4, [r2, 4] | *((r2 + 4)) = r4;
0x00002efa ldr r3, [r2, 8]! | r3 = *((r2 += 8));
0x00002efe cmp r3, 0 |
| if (r3 != 0) {
0x00002f00 bne.w 0x1efa | goto label_9;
| }
0x00002f04 b 0x2ed2 | goto label_11;
0x00002f06 str r6, [r2, 4] | *((r2 + 4)) = r6;
0x00002f08 ldr r3, [r2, 8]! | r3 = *((r2 += 8));
0x00002f0c cmp r3, 0 |
| if (r3 != 0) {
0x00002f0e bne.w 0x1efa | goto label_9;
| }
0x00002f12 b 0x2ed2 | goto label_11;
| label_152:
0x00002f14 ldr r3, [pc, 0x2dc] |
0x00002f16 add r3, pc | r3 = 0x610e;
0x00002f18 ldr r4, [r3] | r4 = *(0x610e);
0x00002f1a ldr r2, [pc, 0x2dc] |
0x00002f1c add.w r1, fp, 0x160 | r1 += arg_160h;
0x00002f20 ldr r3, [pc, 0x2d8] |
0x00002f22 add r2, pc |
0x00002f24 str r1, [r2, 8] | *((r2 + 8)) = r1;
0x00002f26 add r3, pc | r3 = 0x6126;
0x00002f28 ldr.w r2, [r2, 0x590] | r2 = *(0x66b0);
0x00002f2c adds r3, 0x1c | r3 += 0x1c;
0x00002f2e ldm r1, {r0, r1} | r0 = *(r1);
| r1 = *((r1 + 4));
0x00002f30 str.w r2, [r3, 0x170] | __asm ("str.w r2, [r3, 0x170]");
0x00002f34 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x00002f38 lsls r1, r4, 0x16 | r1 = r4 << 0x16;
| if (r1 < r4) {
0x00002f3a bmi.w 0x34a4 | goto label_156;
| }
0x00002f3e ldr r3, [pc, 0x2c0] |
0x00002f40 ldr.w r1, [fp, 0x164] | r1 = *(arg_164h);
0x00002f44 add r3, pc | r3 = 0x614a;
0x00002f46 ldr.w r6, [r3, 0x17c] | r6 = *(0x62c6);
0x00002f4a subs r4, r1, 1 | r4 = r1 - 1;
0x00002f4c ldr r2, [r3, 0x30] | r2 = *(0x617a);
0x00002f4e subs r6, 0 |
0x00002f50 it ne |
| if (r6 == 0) {
0x00002f52 movne r6, 1 | r6 = 1;
| }
0x00002f54 orrs r2, r6 | r2 |= r6;
0x00002f56 str r2, [r3, 0x30] | *((r3 + 0x30)) = r2;
0x00002f58 cmp r1, 0 |
| if (r1 == 0) {
0x00002f5a beq 0x2fd0 | void (*0x2fd0)() ();
| }
| label_68:
0x00003098 ldr r2, [pc, 0x194] |
0x0000309a subs r4, 2 | r4 -= 2;
0x0000309c ldr r3, [pc, 0x194] |
0x0000309e ldr r1, [r5, 8]! | r1 = *((r5 += 8));
0x000030a2 add r2, pc | r2 = 0x62d6;
0x000030a4 add r3, pc | r3 = 0x62dc;
0x000030a6 str.w r1, [r3, 0x164] | __asm ("str.w r1, [r3, 0x164]");
0x000030aa ldr r3, [r2, 0x10] | r3 = *(0x62e6);
0x000030ac adds r3, 2 | r3 += 2;
0x000030ae str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x000030b0 b.w 0x1a2e | goto label_0;
| label_87:
0x0000323c ldr.w r1, [r3, 0x59c] | r1 = *((r3 + 0x59c));
0x00003240 cmp r1, 0 |
| if (r1 == 0) {
0x00003242 beq.w 0x3bda | goto label_157;
| }
0x00003246 ldr.w r2, [pc, 0xc5c] | r2 = *(0x00003ea4);
0x0000324a add r2, pc | r2 += pc;
0x0000324c str r1, [r2, 0x14]! | *((r2 += 0x14)) = r1;
0x00003250 str.w r2, [r3, 0x5b4] | __asm ("str.w r2, [r3, 0x5b4]");
0x00003254 b.w 0x20a4 | goto label_12;
| label_131:
0x00003258 add.w r0, r0, 0x598 | r0 += 0x598;
0x0000325c bl 0xd3e0 | fcn_0000d3e0 (r0);
0x00003260 b.w 0x29a4 | goto label_13;
| label_136:
0x00003264 ldr.w r3, [sl, 0x44] | r3 = *((sl + 0x44));
0x00003268 ldr.w r4, [sl, 0x48] | r4 = *((sl + 0x48));
0x0000326c str r3, [r7, 0x20] | *((r7 + 0x20)) = r3;
0x0000326e cmp r3, 0 |
| if (r3 != 0) {
0x00003270 bne.w 0x3618 | goto label_158;
| }
| if (r4 == 0) {
0x00003274 cbz r4, 0x328c | goto label_159;
| }
| label_23:
0x00003276 movs r5, 0 | r5 = 0;
| do {
0x00003278 mov r0, sl | r0 = sl;
0x0000327a bl 0x1064 | r0 = fcn_00001064 (r0);
| if (r0 == 0) {
0x0000327e cbz r0, 0x328a | goto label_160;
| }
0x00003280 ldr.w r3, [sl, 0x48] | r3 = *((sl + 0x48));
0x00003284 adds r5, 1 | r5++;
0x00003286 cmp r3, 0 |
0x00003288 bne 0x3278 |
| } while (r3 != 0);
| label_160:
0x0000328a str r5, [r7, 0x20] | *((r7 + 0x20)) = r5;
| label_159:
0x0000328c str.w r4, [sl, 0x48] | __asm ("str.w r4, [sl, 0x48]");
0x00003290 movs r4, 0 | r4 = 0;
0x00003292 ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x00003294 str.w r4, [sl, 0x44] | __asm ("str.w r4, [sl, 0x44]");
0x00003298 bl 0xec0 | fcn_00000ec0 ();
0x0000329c ldr.w r3, [pc, 0xc08] | r3 = *(0x00003ea8);
0x000032a0 ldr.w r2, [pc, 0xc08] | r2 = *(0x3eac);
0x000032a4 ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x000032a6 add r3, pc | r3 += pc;
0x000032a8 str r0, [r7, 0x1c] | *((r7 + 0x1c)) = r0;
0x000032aa ldr r0, [r3] | r0 = *(r3);
0x000032ac ldr r6, [r1, r2] | r6 = *((r1 + r2));
0x000032ae ldr.w r5, [pc, 0xc00] | r5 = *(0x00003eb0);
0x000032b2 ldr r2, [r0] | r2 = *(r0);
0x000032b4 ldr.w r1, [sl, 0x48] | r1 = *((sl + 0x48));
0x000032b8 str r4, [r3] | *(r3) = r4;
0x000032ba add r5, pc | r5 += pc;
0x000032bc ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000032be bic r2, r2, 0xff | r2 = BIT_MASK (r2, 0xff);
0x000032c2 str r2, [r6] | *(r6) = r2;
0x000032c4 str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x000032c6 cmp r1, 0 |
| if (r1 == 0) {
0x000032c8 beq.w 0x33d2 | goto label_161;
| }
0x000032cc ldr.w r3, [pc, 0xbe4] |
0x000032d0 ldr.w r2, [pc, 0xbe4] | r2 = *(0x00003eb8);
0x000032d4 str.w fp, [r7, 0x18] | __asm ("str.w fp, [r7, 0x18]");
0x000032d8 add r3, pc |
0x000032da ldr.w fp, [r7, 0x44] | fp = *((r7 + 0x44));
0x000032de add.w r3, r3, 0x380 |
0x000032e2 add r2, pc | r2 += pc;
0x000032e4 str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x000032e6 ldr.w r3, [pc, 0xbd4] | r3 = *(0x00003ebc);
0x000032ea str r2, [r7, 0x34] | *((r7 + 0x34)) = r2;
0x000032ec ldr.w r2, [pc, 0xbd0] | r2 = *(0x00003ec0);
0x000032f0 add r3, pc |
0x000032f2 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x000032f4 add.w r3, r3, 0x598 | r3 = 0xad9c;
0x000032f8 add r2, pc | r2 += pc;
0x000032fa str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x000032fc str r2, [r7, 0x30] | *((r7 + 0x30)) = r2;
0x000032fe b 0x3364 |
| while (r6 == 0) {
0x00003300 ldr.w r3, [pc, 0xbc0] | r3 = *(0x00003ec4);
0x00003304 add.w r6, r7, 0x64 | r6 = r7 + 0x64;
0x00003308 ldr.w r1, [pc, 0xbbc] | r1 = *(0x00003ec8);
0x0000330c mov r0, sb | r0 = sb;
0x0000330e ldr.w r2, [fp, 4] | r2 = *(arg_4h);
0x00003312 add r3, pc | r3 += pc;
0x00003314 add r1, pc | r1 += pc;
0x00003316 strd r3, r2, [r6] | __asm ("strd r3, r2, [r6]");
0x0000331a mov r3, r1 | r3 = r1;
0x0000331c str r1, [r7, 0x3c] | *((r7 + 0x3c)) = r1;
0x0000331e mov r2, r8 | r2 = r8;
0x00003320 mov r1, r4 | r1 = r4;
0x00003322 str r6, [sp] | *(sp) = r6;
0x00003324 blx 0xa04 | fcn_00000a04 ();
0x00003328 ldr r3, [r4] | r3 = *(r4);
0x0000332a cmp r3, 0 |
| if (r3 == 0) {
0x0000332c beq.w 0x3524 | goto label_162;
| }
0x00003330 ldr r1, [r7, 0x40] | r1 = *((r7 + 0x40));
0x00003332 ldr.w r0, [fp, 4] | r0 = *(arg_4h);
0x00003336 bl 0xfd4 | fcn_00000fd4 (r0, r1);
0x0000333a ldr r6, [r4] | r6 = *(r4);
0x0000333c mov r1, r5 | r1 = r5;
0x0000333e ldrb.w r4, [r8] | r4 = *(r8);
0x00003342 ldr.w r0, [pc, 0xb88] |
0x00003346 mov r2, r6 | r2 = r6;
0x00003348 add r0, pc | r0 = 0x721a;
0x0000334a bl 0xc284 | fcn_0000c284 ();
| if (r4 != 0) {
0x0000334e cbz r4, 0x335c |
0x00003350 ldr.w r3, [pc, 0xb7c] | r3 = *(0x00003ed0);
0x00003354 mov r0, r6 | r0 = r6;
0x00003356 add r3, pc | r3 += pc;
0x00003358 ldr r3, [r3] | r3 = *(r3);
0x0000335a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
| label_14:
0x0000335c ldr.w r3, [sl, 0x48] | r3 = *((sl + 0x48));
0x00003360 cmp r3, 0 |
| if (r3 == 0) {
0x00003362 beq 0x33ce | goto label_163;
| }
| label_15:
0x00003364 mov r0, sl | r0 = sl;
0x00003366 bl 0x1064 | r0 = fcn_00001064 (r0);
0x0000336a mov r5, r0 | r5 = r0;
| if (r0 == 0) {
0x0000336c cbz r0, 0x33ce | goto label_163;
| }
0x0000336e add.w r4, r7, 0x50 | r4 = r7 + 0x50;
0x00003372 movs r3, 0 | r3 = 0;
0x00003374 str.w r3, [fp, 4] | __asm ("str.w r3, [arg_4h]");
0x00003378 add.w r8, r7, 0x4b | r8 = r7 + 0x4b;
0x0000337c str r3, [r4] | *(r4) = r3;
0x0000337e add.w sb, r7, 0x4c | sb = r7 + 0x4c;
0x00003382 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
0x00003384 mov r2, r8 | r2 = r8;
0x00003386 str.w r0, [fp] | __asm ("str.w r0, [fp]");
0x0000338a mov r1, r4 | r1 = r4;
0x0000338c mov r0, sb | r0 = sb;
0x0000338e ldr.w r3, [r3, 0x880] | r3 = *((r3 + 0x880));
0x00003392 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x00003394 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00003398 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x0000339a blx 0xa04 | fcn_00000a04 ();
0x0000339e ldr r6, [r4] | r6 = *(r4);
0x000033a0 cmp r6, 0 |
0x000033a2 beq 0x3300 |
| }
0x000033a4 ldrb.w r4, [r8] | r4 = *(r8);
0x000033a8 mov r1, r5 | r1 = r5;
0x000033aa ldr.w r0, [pc, 0xb28] |
0x000033ae mov r2, r6 | r2 = r6;
0x000033b0 add r0, pc | r0 = 0x728a;
0x000033b2 bl 0xc284 | fcn_0000c284 ();
0x000033b6 cmp r4, 0 |
| if (r4 == 0) {
0x000033b8 beq 0x335c | goto label_14;
| }
0x000033ba ldr.w r3, [pc, 0xb1c] | r3 = *(0x00003ed8);
0x000033be mov r0, r6 | r0 = r6;
0x000033c0 add r3, pc | r3 += pc;
0x000033c2 ldr r3, [r3] | r3 = *(r3);
0x000033c4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000033c6 ldr.w r3, [sl, 0x48] | r3 = *((sl + 0x48));
0x000033ca cmp r3, 0 |
| if (r3 != 0) {
0x000033cc bne 0x3364 | goto label_15;
| }
| label_163:
0x000033ce ldr.w fp, [r7, 0x18] | fp = *((r7 + 0x18));
| label_161:
0x000033d2 ldr.w r4, [pc, 0xb08] | r4 = *(0x00003edc);
0x000033d6 add r4, pc | r4 += pc;
0x000033d8 ldr.w r3, [r4, 0x1dc] | r3 = *((r4 + 0x1dc));
0x000033dc cmp r3, 0 |
| if (r3 != 0) {
0x000033de bne.w 0x36b6 | goto label_164;
| }
0x000033e2 ldr r2, [r7, 0x1c] | r2 = *((r7 + 0x1c));
0x000033e4 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x000033e6 str r2, [r7, 0x38] | *((r7 + 0x38)) = r2;
0x000033e8 b.w 0x2a18 | goto label_16;
| label_127:
0x000033ec ldr.w r3, [r4, 0x5b4] | r3 = *((r4 + 0x5b4));
0x000033f0 ldr r3, [r3] | r3 = *(r3);
0x000033f2 str.w r3, [r4, 0x59c] | __asm ("str.w r3, [r4, 0x59c]");
0x000033f6 b.w 0x28e4 | goto label_17;
| label_78:
0x000033fa cmp r0, 6 |
| if (r0 == 6) {
0x000033fc beq 0x34c8 | goto label_22;
| }
0x000033fe ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x00003400 movs r1, 0 | r1 = 0;
0x00003402 bl 0x12f50 | fcn_00012f50 (r0, r1);
| label_153:
0x00003406 subs r1, 1 | r1--;
0x00003408 ands r1, r0 | r1 &= r0;
0x0000340a b 0x2d66 | goto label_18;
| label_103:
0x00003450 ldr.w r3, [pc, 0xa94] | r3 = *(0x00003ee8);
0x00003454 add r3, pc | r3 += pc;
0x00003456 str.w fp, [r3, 0x14] | __asm ("str.w fp, [r3, 0x14]");
0x0000345a b.w 0x229a | goto label_19;
| label_156:
0x000034a4 movs r4, 0 | r4 = 0;
0x000034a6 ldr.w r0, [pc, 0xa54] |
0x000034aa mov r5, fp | r5 = fp;
0x000034ac add r0, pc | r0 = 0x73ae;
0x000034ae bl 0xc1f0 | fcn_0000c1f0 ();
| do {
0x000034b2 mov r0, r5 | r0 = r5;
0x000034b4 movs r1, 0 | r1 = 0;
0x000034b6 bl 0xe51c | fcn_0000e51c (r0, r1, r2, r3);
0x000034ba ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x000034bc cmp r5, 0 |
0x000034be bne 0x34b2 |
| } while (r5 != 0);
| label_22:
0x000034c8 ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x000034ca mov r1, sl | r1 = sl;
0x000034cc bl 0x12fa0 | fcn_00012fa0 (r0, r1);
| label_71:
0x000034d0 ldr.w r2, [pc, 0xa2c] | r2 = *(0x00003f00);
0x000034d4 subs r4, 2 | r4 -= 2;
0x000034d6 ldr r3, [r5, 8]! | r3 = *((r5 += 8));
0x000034da add r2, pc | r2 += pc;
0x000034dc str r3, [r7, 0x20] | *((r7 + 0x20)) = r3;
0x000034de ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000034e0 adds r3, 2 | r3 += 2;
0x000034e2 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x000034e4 b.w 0x1a2e | goto label_0;
| label_162:
0x00003524 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00003526 cmp r2, 0 |
| if (r2 == 0) {
0x00003528 beq.w 0x44e4 | goto label_165;
| }
0x0000352c movs r0, 1 | r0 = 1;
0x0000352e str r3, [r7, 8] | *((r7 + 8)) = r3;
0x00003530 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r3);
0x00003532 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x00003534 mov r2, r0 | r2 = r0;
0x00003536 cmp r0, 0 |
| if (r0 == 0) {
0x00003538 beq.w 0x3a7c | goto label_166;
| }
0x0000353c cmp r0, 1 |
| if (r0 != 1) {
0x0000353e bne.w 0x4056 | goto label_167;
| }
0x00003542 ldr.w r2, [pc, 0x9c0] | r2 = *(0x00003f04);
0x00003546 movs r0, 0x24 | r0 = 0x24;
0x00003548 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x0000354a add r2, pc | r2 += pc;
0x0000354c ldr r2, [r2] | r2 = *(r2);
0x0000354e blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00003550 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x00003552 str r0, [r7, 0x40] | *((r7 + 0x40)) = r0;
0x00003554 cmp r0, 0 |
| if (r0 == 0) {
0x00003556 beq.w 0x4366 | goto label_168;
| }
0x0000355a ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x0000355c str.w fp, [r7, 8] | __asm ("str.w fp, [r7, 8]");
0x00003560 str.w sl, [r7, 4] | __asm ("str.w sl, [r7, 4]");
0x00003564 mov sl, r3 | sl = r3;
0x00003566 subs r2, 4 | r2 -= 4;
0x00003568 ldr r5, [r7, 0x14] | r5 = *((r7 + 0x14));
0x0000356a mov fp, r2 |
0x0000356c b 0x358a |
| while (r3 != 0) {
0x0000356e movs r3, 0 | r3 = 0;
| label_20:
0x00003570 mov r0, r5 | r0 = r5;
0x00003572 str r3, [fp, 4]! | *(arg_4h) = r3;
0x00003576 movs r1, 0 | r1 = 0;
0x00003578 add.w sl, sl, 1 | sl++;
0x0000357c bl 0x15e20 | void (*0x15e20)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00003580 ldrb r3, [r0, 1] | r3 = *((r0 + 1));
0x00003582 adds r5, r0, 1 | r5 = r0 + 1;
0x00003584 cmp r3, 0 |
| if (r3 == 0) {
0x00003586 beq.w 0x3816 | goto label_169;
| }
0x0000358a str r5, [r6] | *(r6) = r5;
0x0000358c mov r2, r8 | r2 = r8;
0x0000358e str r6, [sp] | *(sp) = r6;
0x00003590 mov r1, r4 | r1 = r4;
0x00003592 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00003594 mov r0, sb | r0 = sb;
0x00003596 blx 0xa04 | fcn_00000a04 ();
0x0000359a ldr r3, [r4] | r3 = *(r4);
0x0000359c cmp r3, 0 |
0x0000359e bne 0x356e |
| }
0x000035a0 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000035a2 b 0x3570 | goto label_20;
| label_148:
0x000035a4 movs r3, 1 | r3 = 1;
| label_34:
0x000035a6 str r3, [r7, 0x34] | *((r7 + 0x34)) = r3;
0x000035a8 b.w 0x2b90 | goto label_7;
| label_155:
0x000035ac str.w r5, [r3, 0x198] | __asm ("str.w r5, [r3, 0x198]");
0x000035b0 ldr.w r3, [pc, 0x954] | r3 = *(0x00003f08);
0x000035b4 add r3, pc | r3 += pc;
0x000035b6 addw r3, r3, 0x5a4 | __asm ("addw r3, r3, 0x5a4");
0x000035ba str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
| label_121:
0x000035bc ldr.w r3, [pc, 0x94c] | r3 = *(0x00003f0c);
0x000035c0 movs r2, 0 | r2 = 0;
0x000035c2 add r3, pc | r3 += pc;
0x000035c4 str.w r2, [r3, 0x19c] | __asm ("str.w r2, [r3, 0x19c]");
| label_123:
0x000035c8 movs r3, 0 | r3 = 0;
0x000035ca b.w 0x2886 | goto label_21;
| label_69:
0x000035ce ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x000035d0 ldrb r3, [r2] | r3 = *(r2);
| if (r3 != 0) {
0x000035d2 cbz r3, 0x35f0 |
0x000035d4 ldr.w r3, [sl, 0x40] | r3 = *((sl + 0x40));
0x000035d8 cmp r3, 0x10 |
| if (r3 == 0x10) {
0x000035da beq.w 0x4382 | goto label_133;
| }
0x000035de str.w r2, [sl, r3, lsl 2] | __asm ("str.w r2, [sl, r3, lsl 2]");
0x000035e2 adds r3, 1 | r3++;
0x000035e4 cmp r3, 1 |
0x000035e6 str.w r3, [sl, 0x40] | __asm ("str.w r3, [sl, 0x40]");
0x000035ea it eq |
| if (r3 == 1) {
0x000035ec streq r2, [sl, 0x48] | *((sl + 0x48)) = r2;
| goto label_170;
| }
| }
| label_170:
0x000035f0 ldr.w r2, [pc, 0x91c] | r2 = *(0x00003f10);
0x000035f4 subs r4, 2 | r4 -= 2;
0x000035f6 adds r5, 8 | r5 += 8;
0x000035f8 add r2, pc | r2 += pc;
0x000035fa ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x000035fc adds r3, 2 | r3 += 2;
0x000035fe str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x00003600 b.w 0x1a2e | goto label_0;
| label_135:
0x00003604 cmp r2, 6 |
0x00003606 str.w r4, [sl, 0x48] | __asm ("str.w r4, [sl, 0x48]");
| if (r2 == 6) {
0x0000360a beq.w 0x34c8 | goto label_22;
| }
0x0000360e ldr.w r3, [sl, 0x44] | r3 = *((sl + 0x44));
0x00003612 cmp r3, 0 |
| if (r3 == 0) {
0x00003614 beq.w 0x3276 | goto label_23;
| }
| label_158:
0x00003618 ldr.w r3, [pc, 0x8f8] |
0x0000361c mov.w r2, 0x116 | r2 = 0x116;
0x00003620 ldr.w r1, [pc, 0x8f4] | r1 = *(0x00003f18);
0x00003624 ldr.w r0, [pc, 0x8f4] |
0x00003628 add r3, pc | r3 = 0x7540;
0x0000362a add r1, pc | r1 += pc;
0x0000362c add r0, pc | r0 = 0x754c;
0x0000362e bl 0x11f30 | fcn_00011f30 (r0);
| label_70:
0x00003632 ldr.w r2, [pc, 0x8ec] | r2 = *(0x00003f20);
0x00003636 subs r4, 2 | r4 -= 2;
0x00003638 ldr r3, [r5, 8]! | r3 = *((r5 += 8));
0x0000363c add r2, pc | r2 += pc;
0x0000363e str.w r3, [sl, 0x158] | __asm ("str.w r3, [sl, 0x158]");
0x00003642 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00003644 adds r3, 2 | r3 += 2;
0x00003646 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x00003648 b.w 0x1a2e | goto label_0;
| label_154:
0x0000364c ldrb.w ip, [lr, ip] | ip = *((lr + ip));
0x00003650 cmp.w ip, 0 |
| if (ip == 0) {
0x00003654 beq.w 0x2e30 | goto label_24;
| }
0x00003658 ldr r4, [r7, 0x3c] | r4 = *((r7 + 0x3c));
0x0000365a mov lr, r3 | lr = r3;
0x0000365c mov r3, ip | r3 = ip;
0x0000365e mov ip, lr |
| do {
0x00003660 adds r1, 1 | r1++;
0x00003662 cmp r3, 0x2f |
0x00003664 it eq |
| if (r3 != 0x2f) {
0x00003666 moveq r0, r1 | r0 = r1;
| }
0x00003668 ldrb r3, [r1] | r3 = *(r1);
0x0000366a cmp r3, 0 |
0x0000366c bne 0x3660 |
| } while (r3 != 0);
0x0000366e mov r3, ip | r3 = ip;
0x00003670 str r4, [r7, 0x3c] | *((r7 + 0x3c)) = r4;
0x00003672 cmp r0, 0 |
| if (r0 == 0) {
0x00003674 beq.w 0x2e30 | goto label_24;
| }
0x00003678 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0000367a str r0, [r1, 0x20] | *((r1 + 0x20)) = r0;
0x0000367c ldr r0, [r7, 0x10] | r0 = *((r7 + 0x10));
0x0000367e str r0, [r1, 0x18] | *((r1 + 0x18)) = r0;
0x00003680 movs r1, 1 | r1 = 1;
0x00003682 str r1, [r7, 0x40] | *((r7 + 0x40)) = r1;
0x00003684 b.w 0x2040 | goto label_3;
| label_150:
0x00003688 mov r0, r3 | r0 = r3;
0x0000368a bl 0xec0 | fcn_00000ec0 ();
0x0000368e str r0, [r7, 0x38] | *((r7 + 0x38)) = r0;
0x00003690 b.w 0x2bcc | goto label_25;
| label_122:
0x000036a2 ldr.w r5, [r5, 0x194] | r5 = *((r5 + 0x194));
0x000036a6 mov r3, r2 | r3 = r2;
0x000036a8 b.w 0x2818 | goto label_26;
| label_120:
0x000036ac ldr.w ip, [sb, 0x194] | ip = *((sb + 0x194));
0x000036b0 mov r3, r2 | r3 = r2;
0x000036b2 b.w 0x279e | goto label_27;
| label_164:
0x000036b6 mov r0, fp | r0 = fp;
0x000036b8 bl 0xaf0 | fcn_00000af0 ();
0x000036bc ldr.w r0, [pc, 0x864] | r0 = *(0x00003f24);
0x000036c0 add r0, pc | r0 += pc;
0x000036c2 add.w r0, r0, 0x598 | r0 += 0x598;
0x000036c6 bl 0xaf0 | fcn_00000af0 ();
0x000036ca ldr.w r3, [r4, 0x1dc] | r3 = *((r4 + 0x1dc));
0x000036ce ldr r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x000036d0 cmp r3, r2 |
| if (r3 > r2) {
0x000036d2 bhi.w 0x44bc | goto label_171;
| }
0x000036d6 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x000036d8 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
0x000036da movs r3, 0 | r3 = 0;
0x000036dc str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x000036de b.w 0x2a18 | goto label_16;
| if (r3 != 0) {
| label_84:
0x000037f6 bne.w 0x4344 | goto label_172;
| }
0x000037fa ldr.w r3, [fp, 0x230] | r3 = *(arg_230h);
0x000037fe cmp r3, 0 |
| if (r3 == 0) {
0x00003800 beq.w 0x40ae | goto label_173;
| }
0x00003804 mov r1, r2 | r1 = r2;
0x00003806 str r2, [r7, 0x40] | *((r7 + 0x40)) = r2;
0x00003808 b.w 0x2078 | goto label_28;
| label_124:
0x0000380c ldr.w r0, [pc, 0x738] |
0x00003810 add r0, pc | r0 = 0x775c;
0x00003812 bl 0xc2a4 | dl_fatal_printf ()
| label_169:
0x00003816 mov r2, sl | r2 = sl;
0x00003818 ldrd sl, fp, [r7, 4] | __asm ("ldrd sl, fp, [r7, 4]");
0x0000381c cmp r2, 8 |
| if (r2 != 8) {
0x0000381e bne.w 0x4312 | goto label_174;
| }
0x00003822 ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x00003824 str r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
0x00003826 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00003828 cmp r3, 0 |
| if (r3 == 0) {
0x0000382a beq.w 0x412c | goto label_175;
| }
0x0000382e ldr r2, [r7, 0x38] | r2 = *((r7 + 0x38));
0x00003830 ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x00003832 str r3, [r2, 0x20] | *((r2 + 0x20)) = r3;
0x00003834 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
| label_54:
0x00003836 ldr.w r1, [pc, 0x714] | r1 = *(0x00003f4c);
0x0000383a ldr.w r2, [fp, 4] | r2 = *(arg_4h);
0x0000383e ldrd r5, r4, [r7, 0xc] | __asm ("ldrd r5, r4, [r7, 0xc]");
0x00003842 add r1, pc | r1 += pc;
0x00003844 ldr.w r3, [r1, 0x1dc] | r3 = *((r1 + 0x1dc));
0x00003848 add.w r0, r3, 0xff | r0 = r3 + 0xff;
0x0000384c adds r3, 1 | r3++;
0x0000384e str.w r5, [r4, r0, lsl 3] | __asm ("str.w r5, [r4, r0, lsl 3]");
0x00003852 str.w r3, [r1, 0x1dc] | __asm ("str.w r3, [r1, 0x1dc]");
0x00003856 ldrb.w r3, [r2, 0x199] | r3 = *((r2 + 0x199));
0x0000385a orr r3, r3, 8 | r3 |= 8;
0x0000385e strb.w r3, [r2, 0x199] | *((r2 + 0x199)) = r3;
0x00003862 b 0x335c | goto label_14;
| label_104:
0x00003864 ldr.w r3, [fp, 8] | r3 = *(arg_8h);
0x00003868 cmp r3, 0 |
| if (r3 == 0) {
0x0000386a beq.w 0x41c8 | goto label_176;
| }
| label_57:
0x0000386e ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x00003870 eor r0, r3, 1 | r0 = r3 ^ 1;
0x00003874 lsls r0, r0, 1 | r0 <<= 1;
0x00003876 bl 0x14c28 | fcn_00014c28 (r0);
0x0000387a b.w 0x22aa | goto label_29;
| label_125:
0x0000387e cmp r3, r0 |
| if (r3 < r0) {
0x00003880 bls.w 0x28aa | goto label_30;
| }
0x00003884 b.w 0x28a2 | goto label_31;
| label_146:
0x00003888 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0000388a mov r1, r3 | r1 = r3;
0x0000388c str.w r3, [r4, 0x5a8] | __asm ("str.w r3, [r4, 0x5a8]");
0x00003890 b.w 0x2b64 | goto label_32;
| label_143:
0x00003894 ldr.w r2, [pc, 0x6b8] | r2 = *(0x00003f50);
0x00003898 ldr.w r5, [sl, 0x164] | r5 = *((sl + 0x164));
0x0000389c add r2, pc | r2 += pc;
0x0000389e ldr.w r3, [r2, 0x5a4] | r3 = *((r2 + 0x5a4));
0x000038a2 ldr.w r2, [r2, 0x5a8] | r2 = *((r2 + 0x5a8));
0x000038a6 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x000038a8 cmp r3, 0 |
| if (r3 != 0) {
0x000038aa bne.w 0x2ae4 | goto label_33;
| }
0x000038ae b 0x35a6 | goto label_34;
| label_142:
0x000038b0 lsls r3, r4, 2 | r3 = r4 << 2;
0x000038b2 adds r3, 7 | r3 += 7;
0x000038b4 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x000038b8 sub.w sp, sp, r3 |
0x000038bc movs r3, 0 | r3 = 0;
0x000038be add r0, sp, 0x10 | r0 += arg_10h;
0x000038c0 add r2, sp, 0xc | r2 += arg_ch;
| do {
0x000038c2 str r1, [r2, 4]! | *((r2 += 4)) = r1;
0x000038c6 adds r3, 1 | r3++;
0x000038c8 ldr r1, [r1, 0xc] | r1 = *((r1 + 0xc));
0x000038ca cmp r1, 0 |
0x000038cc bne 0x38c2 |
| } while (r1 != 0);
0x000038ce cmp r4, r3 |
0x000038d0 it eq |
| if (r4 == r3) {
0x000038d2 moveq r1, r0 | r1 = r0;
| goto label_177;
| }
| if (r4 == r3) {
| label_177:
0x000038d4 beq.w 0x2a8e | goto label_35;
| }
0x000038d8 ldr.w r3, [pc, 0x678] |
0x000038dc movw r2, 0x77e | r2 = 0x77e;
0x000038e0 ldr.w r1, [pc, 0x674] | r1 = *(0x00003f58);
0x000038e4 ldr.w r0, [pc, 0x674] |
0x000038e8 add r3, pc | r3 = 0x7840;
0x000038ea add r1, pc | r1 += pc;
0x000038ec add r0, pc | r0 = 0x784c;
0x000038ee bl 0x11f30 | fcn_00011f30 (r0);
| label_137:
0x000038f2 ldr.w r8, [pc, 0x66c] | r8 = *(0x00003f60);
0x000038f6 add.w sb, fp, 0x260 | sb += arg_260h;
0x000038fa ldr.w r3, [pc, 0x668] | r3 = *(0x00003f64);
0x000038fe movs r5, 0 | r5 = 0;
0x00003900 ldr.w r6, [r4, 0x1d8] | r6 = *((r4 + 0x1d8));
0x00003904 add r8, pc | r8 += pc;
0x00003906 add r3, pc | r3 += pc;
0x00003908 add.w r8, r8, 0x7f8 | r8 += 0x7f8;
0x0000390c add.w r3, r3, 0x598 | r3 += 0x598;
0x00003910 str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
| do {
0x00003912 ldr r3, [r6] | r3 = *(r6);
| if (r3 != 0) {
0x00003914 cbz r3, 0x3924 |
0x00003916 ldr r2, [r7, 0x3c] | r2 = *((r7 + 0x3c));
0x00003918 movs r1, 1 | r1 = 1;
0x0000391a cmp fp, r2 |
0x0000391c ite ne |
| if (fp == r2) {
0x0000391e movne r0, sb | r0 = sb;
| }
| if (fp != r2) {
0x00003920 moveq r0, r8 | r0 = r8;
| }
0x00003922 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
0x00003924 ldr.w r3, [r4, 0x1dc] | r3 = *((r4 + 0x1dc));
0x00003928 adds r5, 1 | r5++;
0x0000392a ldr r6, [r6, 0x20] | r6 = *((r6 + 0x20));
0x0000392c add.w r8, r8, 8 | r8 += 8;
0x00003930 add.w sb, sb, 8 | sb += 8;
0x00003934 cmp r3, r5 |
0x00003936 bhi 0x3912 |
| } while (r3 > r5);
0x00003938 b.w 0x2a52 | goto label_36;
| label_139:
0x0000393c ldr.w r2, [pc, 0x628] |
0x00003940 mov r0, r4 | r0 = r4;
0x00003942 mov r1, fp | r1 = fp;
0x00003944 add r2, pc | r2 = 0x78b0;
0x00003946 bl 0x17b4 | r0 = fcn_000017b4 (r0, r1, r2);
0x0000394a mov r4, r0 | r4 = r0;
0x0000394c b.w 0x2a66 | goto label_37;
| label_141:
0x00003950 mov r0, r5 | r0 = r5;
0x00003952 ldr r1, [r7, 0x44] | r1 = *((r7 + 0x44));
0x00003954 movs r2, 3 | r2 = 3;
0x00003956 bl 0xc19c | r0 = fcn_0000c19c (r0, r1, r2);
0x0000395a adds r6, r0, 1 | r6 = r0 + 1;
0x0000395c mov r5, r0 | r5 = r0;
| if (r6 == r0) {
0x0000395e beq.w 0x2a84 | goto label_38;
| }
0x00003962 ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x00003964 add.w r6, r7, 0x64 | r6 = r7 + 0x64;
0x00003968 str r0, [r6] | *(r6) = r0;
0x0000396a ldr.w sb, [r3] | sb = *(r3);
0x0000396e cmp.w sb, 0 |
| if (sb == 0) {
0x00003972 beq.w 0x4326 | goto label_178;
| }
0x00003976 mov r3, r0 | r3 = r0;
0x00003978 mov.w r8, 0x20 | r8 = 0x20;
| label_47:
0x0000397c movs r1, 0x23 | r1 = 0x23;
0x0000397e mov r2, sb | r2 = sb;
0x00003980 mov r0, r3 | r0 = r3;
0x00003982 str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x00003984 bl 0x16420 | r0 = fcn_00016420 (r0, r1);
0x00003988 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x0000398a cbz r0, 0x39b6 | goto label_179;
| }
0x0000398c ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x0000398e subs r3, r0, r3 | r3 = r0 - r3;
0x00003990 sub.w r2, sb, r3 | r2 = sb - r3;
0x00003994 mov r3, r0 | r3 = r0;
0x00003996 subs r0, r2, 1 | r0 = r2 - 1;
0x00003998 add r1, r0 | r1 += r0;
0x0000399a subs r0, r3, 1 | r0 = r3 - 1;
0x0000399c add r0, r2 | r0 += r2;
0x0000399e b 0x39aa |
| while (r3 != r1) {
0x000039a0 ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x000039a4 cmp r2, 0xa |
| if (r2 == 0xa) {
0x000039a6 beq.w 0x4080 | goto label_180;
| }
0x000039aa cmp r3, r1 |
0x000039ac sub.w sb, r0, r3 | sb = r0 - r3;
0x000039b0 strb.w r8, [r3] | *(r3) = r8;
0x000039b4 bne 0x39a0 |
| }
| label_179:
0x000039b6 ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x000039b8 ldr r3, [r3] | r3 = *(r3);
0x000039ba subs r2, r3, 1 | r2 = r3 - 1;
0x000039bc ldrb r1, [r5, r2] | r1 = *((r5 + r2));
0x000039be add r2, r5 | r2 += r5;
0x000039c0 cmp r1, 0x20 |
0x000039c2 it ne |
| if (r1 != 0x20) {
0x000039c4 cmpne r1, 0x3a | __asm ("cmpne r1, 0x3a");
| }
0x000039c6 sub.w r1, r1, 9 | r1 -= 9;
0x000039ca ite ne |
| if (r1 == 0x20) {
0x000039cc movne r0, 1 | r0 = 1;
| }
| if (r1 != 0x20) {
0x000039ce moveq r0, 0 | r0 = 0;
| }
0x000039d0 cmp r1, 1 |
0x000039d2 ite ls |
| if (r1 > 1) {
0x000039d4 movls r0, 0 | r0 = 0;
| }
| if (r1 <= 1) {
0x000039d6 andhi r0, r0, 1 | r0 &= 1;
| }
0x000039da cmp r0, 0 |
| if (r0 != 0) {
0x000039dc bne.w 0x42c6 | goto label_181;
| }
| label_62:
0x000039e0 mov.w r8, 0 | r8 = 0;
0x000039e4 strb.w r8, [r2] | *(r2) = r8;
0x000039e8 cmp r5, 0 |
| if (r5 != 0) {
0x000039ea beq 0x3a5c |
| label_60:
0x000039ec ldr.w r3, [pc, 0x57c] | r3 = *(0x00003f6c);
0x000039f0 ldr.w sb, [pc, 0x57c] |
0x000039f4 str r5, [r6] | *(r6) = r5;
0x000039f6 add r3, pc | r3 += pc;
0x000039f8 add sb, pc | sb = 0x796c;
0x000039fa str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x000039fc b 0x3a06 | void (*0x3a06)() ();
| label_61:
0x00003a14 cmp.w r8, 0 |
| if (r8 == 0) {
0x00003a18 beq 0x3a5c | goto label_182;
| }
0x00003a1a ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x00003a1c mov r0, r8 | r0 = r8;
0x00003a1e movs r6, 0 | r6 = 0;
0x00003a20 ldr r1, [r3] | r1 = *(r3);
0x00003a22 sub.w r3, r8, r5 | r3 = r8 - r5;
0x00003a26 subs r1, r1, r3 | r1 -= r3;
0x00003a28 bl 0x1561c | r0 = fcn_0001561c (r0, r1);
0x00003a2c add.w r3, r0, 8 | r3 = r0 + 8;
0x00003a30 mov r2, r0 | r2 = r0;
0x00003a32 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00003a36 mov r1, r8 | r1 = r8;
0x00003a38 sub.w sp, sp, r3 |
0x00003a3c add.w r0, sp, 0x17 | r0 += arg_17h;
0x00003a40 lsrs r3, r0, 3 | r3 = r0 >> 3;
0x00003a42 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x00003a46 strb.w r6, [r2, r3, lsl 3] | offset_3 = r3 << 3;
| *((r2 + offset_3)) = r6;
0x00003a4a blx 0x15f40 | fcn_00015f40 (r0, r1);
0x00003a4e ldr.w r2, [pc, 0x524] | r2 = fcn.00014c70;
0x00003a52 mov r1, fp | r1 = fp;
0x00003a54 add r2, pc | r2 += pc;
0x00003a56 bl 0xc64 | r0 = fcn_00000c64 (r0);
0x00003a5a add r4, r0 | r4 += r0;
| }
| label_182:
0x00003a5c ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x00003a5e mov r0, r5 | r0 = r5;
0x00003a60 ldr r1, [r3] | r1 = *(r3);
0x00003a62 bl 0x14ae0 | fcn_00014ae0 (r0);
0x00003a66 b.w 0x2a84 | goto label_38;
| label_140:
0x00003a6a ldr.w r2, [pc, 0x50c] |
0x00003a6e mov r1, fp | r1 = fp;
0x00003a70 add r2, pc | r2 = 0x79ee;
0x00003a72 bl 0x17b4 | r0 = fcn_000017b4 (r0, r1, r2);
0x00003a76 add r4, r0 | r4 += r0;
0x00003a78 b.w 0x2a70 | goto label_39;
| label_166:
0x00003a7c ldr.w r3, [pc, 0x4fc] | r3 = *(0x00003f7c);
0x00003a80 add r3, pc | r3 += pc;
0x00003a82 ldr r3, [r3] | r3 = *(r3);
0x00003a84 lsls r3, r3, 0x19 | r3 <<= 0x19;
| if (r3 < r3) {
0x00003a86 bmi.w 0x3c92 | goto label_183;
| }
| label_43:
0x00003a8a ldr r1, [r7, 0x40] | r1 = *((r7 + 0x40));
0x00003a8c ldr.w r0, [fp, 4] | r0 = *(arg_4h);
0x00003a90 bl 0xfd4 | fcn_00000fd4 (r0, r1);
0x00003a94 b 0x335c | goto label_14;
| label_151:
0x00003a96 ldr.w r2, [pc, 0x4e8] | r2 = *(0x00003f80);
0x00003a9a add r2, pc | r2 += pc;
0x00003a9c ldr r1, [r2] | r1 = *(r2);
0x00003a9e lsls r0, r1, 0x14 | r0 = r1 << 0x14;
| if (r0 >= r1) {
0x00003aa0 bpl.w 0x3c0e | goto label_184;
| }
0x00003aa4 ldr.w r2, [fp, 0x164] | r2 = *(arg_164h);
0x00003aa8 cmp r2, 0 |
| if (r2 == 0) {
0x00003aaa beq.w 0x3cb8 | goto label_55;
| }
0x00003aae ldr.w r3, [pc, 0x4d4] | r3 = *(0x00003f84);
0x00003ab2 movs r5, 0 | r5 = 0;
0x00003ab4 ldr.w sb, [pc, 0x4d0] | sb = *(0x00003f88);
0x00003ab8 mov r8, r6 | r8 = r6;
0x00003aba add r3, pc | r3 += pc;
0x00003abc str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x00003abe add sb, pc | sb += pc;
0x00003ac0 ldr.w r3, [pc, 0x4c8] |
0x00003ac4 add r3, pc | r3 = 0x7a54;
0x00003ac6 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x00003ac8 b 0x3ae6 |
| while (r1 != 0) {
0x00003aca ldr.w r0, [pc, 0x4c4] |
0x00003ace mov r2, r6 | r2 = r6;
0x00003ad0 ldr.w r3, [r4, 0x244] | r3 = *((r4 + 0x244));
0x00003ad4 add r0, pc | r0 = 0x7a6a;
0x00003ad6 bl 0xc264 | fcn_0000c264 ();
| label_40:
0x00003ada ldr.w r3, [fp, 0x164] | r3 = *(arg_164h);
0x00003ade adds r5, 1 | r5++;
0x00003ae0 cmp r3, r5 |
| if (r3 < r5) {
0x00003ae2 bls.w 0x3cb2 | goto label_185;
| }
0x00003ae6 ldr.w r3, [fp, 0x160] | r3 = *(arg_160h);
0x00003aea ldr.w r4, [r3, r5, lsl 2] | offset_4 = r5 << 2;
| r4 = *((r3 + offset_4));
0x00003aee ldrb.w r3, [r4, 0x199] | r3 = *((r4 + 0x199));
0x00003af2 lsls r6, r3, 0x1e | r6 = r3 << 0x1e;
| if (r6 < r3) {
0x00003af4 bmi.w 0x3ca4 | goto label_186;
| }
0x00003af8 ldr r6, [r7, 0x44] | r6 = *((r7 + 0x44));
0x00003afa mov r1, r4 | r1 = r4;
0x00003afc ldr.w r0, [r6, 0x184] | r0 = *((r6 + 0x184));
0x00003b00 bl 0xc2c0 | r0 = fcn_0000c2c0 (r0, r1);
| if (r0 != 0) {
0x00003b04 cbz r0, 0x3b0a |
0x00003b06 str.w r4, [r6, 0x188] | __asm ("str.w r4, [r6, 0x188]");
| }
0x00003b0a ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00003b0c ldr r1, [r3] | r1 = *(r3);
0x00003b0e ldrb r3, [r1] | r3 = *(r1);
| if (r3 == 0) {
0x00003b10 cbnz r3, 0x3b22 |
0x00003b12 ldr.w r3, [pc, 0x480] | r3 = *(0x00003f94);
0x00003b16 add r3, pc | r3 += pc;
0x00003b18 ldr r3, [r3] | r3 = *(r3);
0x00003b1a ldr r1, [r3] | r1 = *(r3);
0x00003b1c cmp r1, 0 |
| if (r1 == 0) {
0x00003b1e beq.w 0x40fc | goto label_187;
| }
| }
| label_51:
0x00003b22 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00003b24 ldrb r3, [r2] | r3 = *(r2);
| if (r3 == 0) {
0x00003b26 cbnz r3, 0x3b38 |
0x00003b28 ldr.w r3, [pc, 0x46c] | r3 = *(0x00003f98);
0x00003b2c add r3, pc | r3 += pc;
0x00003b2e ldr r3, [r3] | r3 = *(r3);
0x00003b30 ldr r2, [r3] | r2 = *(r3);
0x00003b32 cmp r2, 0 |
| if (r2 == 0) {
0x00003b34 beq.w 0x4104 | goto label_188;
| }
| }
| label_52:
0x00003b38 ldr r3, [r4] | r3 = *(r4);
0x00003b3a movs r6, 8 | r6 = 8;
0x00003b3c str r6, [sp, 4] | *(arg_4h) = r6;
0x00003b3e mov r0, sb | r0 = sb;
0x00003b40 str r3, [sp, 8] | *(arg_8h) = r3;
0x00003b42 ldr.w r3, [r4, 0x1b4] | r3 = *((r4 + 0x1b4));
0x00003b46 str r3, [sp] | *(sp) = r3;
0x00003b48 mov r3, r6 | r3 = r6;
0x00003b4a bl 0xc264 | fcn_0000c264 ();
0x00003b4e ldr.w r1, [r4, 0x248] | r1 = *((r4 + 0x248));
0x00003b52 cmp r1, 0 |
0x00003b54 bne 0x3aca |
| }
0x00003b56 ldr r0, [r7, 0x40] | r0 = *((r7 + 0x40));
0x00003b58 bl 0xc264 | fcn_0000c264 ();
0x00003b5c b 0x3ada | goto label_40;
| label_145:
0x00003b5e ldr r0, [r1, 0xc] | r0 = *((r1 + 0xc));
0x00003b60 str.w r0, [ip, 0x5a4] | __asm ("str.w r0, [ip, 0x5a4]");
0x00003b64 ldr r2, [r1, 0xc] | r2 = *((r1 + 0xc));
0x00003b66 b.w 0x2b64 | goto label_32;
| label_76:
0x00003bbc bl 0x11280 | fcn_00011280 ();
0x00003bc0 movs r0, 0 | r0 = 0;
0x00003bc2 bl 0x14c28 | fcn_00014c28 (r0);
0x00003bc6 ldr.w r0, [sl, 0x164] | r0 = *((sl + 0x164));
0x00003bca b.w 0x1e18 | goto label_41;
| label_157:
0x00003bda ldr r3, [pc, 0x3cc] |
0x00003bdc movw r2, 0x637 | r2 = 0x637;
0x00003be0 ldr r1, [pc, 0x3c8] |
0x00003be2 ldr r0, [pc, 0x3cc] |
0x00003be4 add r3, pc | r3 = 0x7b92;
0x00003be6 add r1, pc | r1 = 0x7b96;
0x00003be8 add r0, pc | r0 = 0x7b9e;
0x00003bea bl 0x11f30 | fcn_00011f30 (r0);
| label_74:
0x00003bee ldr r2, [pc, 0x3c4] |
0x00003bf0 movs r3, 4 | r3 = 4;
0x00003bf2 str.w r3, [sl, 0x164] | __asm ("str.w r3, [sl, 0x164]");
0x00003bf6 subs r4, 1 | r4--;
0x00003bf8 adds r5, 4 | r5 += 4;
0x00003bfa add r2, pc | r2 = 0x7bb4;
0x00003bfc ldr r3, [r2, 0x10] | r3 = *(0x7bc4);
0x00003bfe adds r3, 1 | r3++;
0x00003c00 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x00003c02 b.w 0x1a2e | goto label_0;
| label_184:
0x00003c0e lsls r0, r1, 0x17 | r0 = r1 << 0x17;
| if (r0 >= r1) {
0x00003c10 bpl.w 0x4152 | goto label_189;
| }
0x00003c14 ldr r3, [r2, 0x30] | r3 = *((r2 + 0x30));
0x00003c16 mov r2, r6 | r2 = r6;
0x00003c18 ldr r1, [pc, 0x39c] |
0x00003c1a ldr r0, [pc, 0x3a0] |
0x00003c1c cmp r3, 0 |
0x00003c1e mov.w r3, 1 |
0x00003c22 movt r3, 0x200 | r3 = 0x2000001;
0x00003c26 it eq |
| if (r3 != 0) {
0x00003c28 moveq r3, 0x2000000 | r3 = 0x2000000;
| }
0x00003c2c add r0, pc | r0 = 0x7bee;
0x00003c2e add r1, pc | r1 = 0x7bea;
0x00003c30 str.w fp, [r6] | __asm ("str.w fp, [r6]");
0x00003c34 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00003c36 bl 0x12578 | fcn_00012578 (r0, r1);
0x00003c3a ldr.w r4, [fp, 8] | r4 = *(arg_8h);
0x00003c3e ldr r0, [r4] | r0 = *(r4);
0x00003c40 cmp r0, 0 |
| if (r0 == 0) {
0x00003c42 beq.w 0x4148 | goto label_190;
| }
0x00003c46 ldr r3, [pc, 0x378] |
0x00003c48 mov r5, fp | r5 = fp;
0x00003c4a ldr.w sb, [pc, 0x378] | sb = *(0x00003fc4);
0x00003c4e ldr.w r8, [pc, 0x378] |
0x00003c52 add r3, pc | r3 = 0x7c18;
0x00003c54 str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x00003c56 add sb, pc | sb += pc;
0x00003c58 add r8, pc | r8 = 0x7c26;
0x00003c5a movs r3, 1 | r3 = 1;
0x00003c5c b 0x3c68 |
| while (r0 != 1) {
| label_42:
0x00003c5e ldr r0, [r4, 8]! | r0 = *((r4 += 8));
0x00003c62 cmp r0, 0 |
| if (r0 == 0) {
0x00003c64 beq.w 0x4144 | goto label_191;
| }
0x00003c68 cmp r0, 1 |
0x00003c6a bne 0x3c5e |
| }
0x00003c6c ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x00003c6e ldr.w r2, [sb, 0x194] | r2 = *((sb + 0x194));
0x00003c72 cmp r2, r5 |
0x00003c74 it eq |
| if (r2 != r5) {
0x00003c76 ldreq r5, [r5, 0xc] | r5 = *((r5 + 0xc));
| }
0x00003c78 ldr.w r2, [r5, 0x204] | r2 = *((r5 + 0x204));
0x00003c7c cmp r2, 0 |
| if (r2 != 0) {
0x00003c7e bne 0x3c5e | goto label_42;
| }
0x00003c80 cmp r3, 0 |
| if (r3 != 0) {
0x00003c82 bne.w 0x4286 | goto label_192;
| }
| label_59:
0x00003c86 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x00003c88 mov r0, r8 | r0 = r8;
0x00003c8a bl 0xc264 | fcn_0000c264 ();
0x00003c8e movs r3, 0 | r3 = 0;
0x00003c90 b 0x3c5e | goto label_42;
| label_183:
0x00003c92 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x00003c96 ldr r0, [pc, 0x334] |
0x00003c98 ldr r2, [r3, 0x18] | r2 = *((r3 + 0x18));
0x00003c9a ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00003c9c add r0, pc | r0 = 0x7c6e;
0x00003c9e bl 0xc1f0 | fcn_0000c1f0 ();
0x00003ca2 b 0x3a8a | goto label_43;
| label_186:
0x00003ca4 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x00003ca6 ldr r0, [pc, 0x328] |
0x00003ca8 ldr r1, [r3] | r1 = *(r3);
0x00003caa add r0, pc | r0 = 0x7c80;
0x00003cac bl 0xc264 | fcn_0000c264 ();
0x00003cb0 b 0x3ada | goto label_40;
| label_185:
0x00003cb2 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00003cb6 mov r6, r8 | r6 = r8;
| label_55:
0x00003cb8 cmp r3, 3 |
| if (r3 != 3) {
0x00003cba bne.w 0x4224 | goto label_193;
| }
0x00003cbe ldr r2, [pc, 0x314] |
0x00003cc0 add r2, pc | r2 = 0x7c9a;
0x00003cc2 ldr r3, [r2, 0x30] | r3 = *(0x7cca);
0x00003cc4 cmp r3, 0 |
| if (r3 < 0) {
0x00003cc6 blt 0x3d54 | goto label_194;
| }
0x00003cc8 ldr r2, [r2, 0x28] | r2 = *((r2 + 0x28));
0x00003cca cmp r2, 0 |
| if (r2 == 0) {
0x00003ccc beq 0x3d54 | goto label_194;
| }
0x00003cce ldr.w r2, [fp, 0x164] | r2 = *(arg_164h);
0x00003cd2 cmp r3, 0 |
0x00003cd4 mov.w r3, 1 |
0x00003cd8 movt r3, 0x200 | r3 = 0x2000001;
0x00003cdc it eq |
| if (r3 != 0) {
0x00003cde moveq r3, 0x2000000 | r3 = 0x2000000;
| }
0x00003ce2 subs r4, r2, 1 | r4 = r2 - 1;
0x00003ce4 str r3, [r6, 4] | *((r6 + 4)) = r3;
| if (r2 == 0) {
0x00003ce6 cbz r2, 0x3d24 | goto label_195;
| }
0x00003ce8 ldr r5, [pc, 0x2ec] |
0x00003cea ldr.w sb, [pc, 0x2f0] | sb = *(0x00003fdc);
0x00003cee ldr.w r8, [pc, 0x2f0] | r8 = *(0x00003fe0);
0x00003cf2 add r5, pc |
0x00003cf4 add.w r5, r5, 0x598 | r5 = 0x8266;
0x00003cf8 add sb, pc | sb += pc;
0x00003cfa add r8, pc | r8 += pc;
0x00003cfc b 0x3d02 |
0x00003d02 ldr.w r3, [fp, 0x1f8] | r3 = *(arg_1f8h);
0x00003d06 ldr.w r3, [r3, r4, lsl 2] | offset_5 = r4 << 2;
| r3 = *((r3 + offset_5));
0x00003d0a cmp r3, r5 |
| if (r3 == r5) {
0x00003d0c beq 0x3cfe | void (*0x3cfe)() ();
| }
| label_195:
0x00003d24 ldr r3, [pc, 0x2bc] |
0x00003d26 ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x00003d28 add r3, pc |
0x00003d2a ldr r3, [r3] | r3 = *(0x7d10);
0x00003d2c ands.w r3, r2, r3, lsr 11 | r3 = r2 & (r3 >> 11);
| if (r3 != r2) {
0x00003d30 beq 0x3d54 |
0x00003d32 ldr r0, [pc, 0x2b4] |
0x00003d34 movs r3, 0 | r3 = 0;
0x00003d36 mov.w r2, 0x2000000 | r2 = 0x2000000;
0x00003d3a add r0, pc |
0x00003d3c ldrb.w r1, [r0, 0x730] | r1 = *((r0 + 0x730));
0x00003d40 add.w r0, r0, 0x598 | r0 = 0x82c0;
0x00003d44 bfc r1, 2, 1 | value_6 = BIT_MASK (1, );
| value_6 = ~value_6;
| r1 &= value_6;
0x00003d48 strb.w r1, [r0, 0x198] | *((r0 + 0x198)) = r1;
0x00003d4c ldr.w r1, [fp, 0x1d4] | r1 = *(arg_1d4h);
0x00003d50 bl 0x8e78 | fcn_00008e78 (r0, r1, r2, r3, r4, r5, r6);
| }
| label_194:
0x00003d54 ldrb.w r3, [sl, 0x169] | r3 = *((sl + 0x169));
0x00003d58 cmp r3, 0 |
| if (r3 == 0) {
0x00003d5a beq.w 0x3e98 | goto label_58;
| }
0x00003d5e ldr r3, [pc, 0x28c] |
0x00003d60 str.w fp, [r7, 0x2c] | __asm ("str.w fp, [r7, 0x2c]");
0x00003d64 str.w fp, [r7, 0x28] | __asm ("str.w fp, [r7, 0x28]");
0x00003d68 add r3, pc | r3 = 0x7d5a;
0x00003d6a str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x00003d6c ldr r3, [pc, 0x280] |
0x00003d6e add r3, pc | r3 = 0x7d62;
0x00003d70 str r3, [r7, 0x3c] | *((r7 + 0x3c)) = r3;
0x00003d72 movs r3, 1 | r3 = 1;
| label_44:
0x00003d74 ldr r0, [r7, 0x2c] | r0 = *((r7 + 0x2c));
0x00003d76 ldr.w r2, [r0, 0xb0] | r2 = *((r0 + 0xb0));
0x00003d7a cmp r2, 0 |
| if (r2 == 0) {
0x00003d7c beq.w 0x3e88 | goto label_196;
| }
0x00003d80 ldr r1, [r0, 0x34] | r1 = *((r0 + 0x34));
0x00003d82 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00003d84 ldr.w r8, [r1, 4] | r8 = *((r1 + 4));
0x00003d88 ldr r1, [r0] | r1 = *(r0);
0x00003d8a add.w sb, r1, r2 | sb = r1 + r2;
0x00003d8e cmp r3, 0 |
| if (r3 != 0) {
0x00003d90 bne.w 0x4014 | goto label_197;
| }
| label_46:
0x00003d94 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x00003d96 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00003d98 ldrb r3, [r1] | r3 = *(r1);
| if (r3 != 0) {
0x00003d9a cbnz r3, 0x3daa | void (*0x3daa)() ();
| }
| label_196:
0x00003e88 ldr r2, [r7, 0x2c] | r2 = *((r7 + 0x2c));
0x00003e8a ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00003e8c str r2, [r7, 0x2c] | *((r7 + 0x2c)) = r2;
0x00003e8e cmp r2, 0 |
| if (r2 != 0) {
0x00003e90 bne.w 0x3d74 | goto label_44;
| }
0x00003e94 ldr.w fp, [r7, 0x28] | fp = *((r7 + 0x28));
| label_58:
0x00003e98 movs r0, 0 | r0 = 0;
0x00003e9a bl 0x14c28 | fcn_00014c28 (r0);
0x00003e9e b.w 0x2c00 | goto label_45;
| label_197:
0x00004014 ldr.w r0, [pc, 0x510] |
0x00004018 add r0, pc | r0 = 0x8544;
0x0000401a bl 0xc264 | fcn_0000c264 ();
0x0000401e b 0x3d94 | goto label_46;
| label_72:
0x0000403c ldr.w r2, [pc, 0x4f0] | r2 = *(0x00004530);
0x00004040 subs r4, 2 | r4 -= 2;
0x00004042 ldr r3, [r5, 8]! | r3 = *((r5 += 8));
0x00004046 add r2, pc | r2 += pc;
0x00004048 str.w r3, [sl, 0x15c] | __asm ("str.w r3, [sl, 0x15c]");
0x0000404c ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x0000404e adds r3, 2 | r3 += 2;
0x00004050 str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x00004052 b.w 0x1a2e | goto label_0;
| label_167:
0x00004056 ldr.w r0, [pc, 0x4dc] | r0 = *(0x00004534);
0x0000405a mov r1, r5 | r1 = r5;
0x0000405c movs r3, 1 | r3 = 1;
0x0000405e add r0, pc | r0 += pc;
0x00004060 bl 0xc1f0 | fcn_0000c1f0 ();
0x00004064 b 0x3a8a | goto label_43;
| label_73:
0x00004066 ldr.w r2, [pc, 0x4d0] | r2 = *(0x00004538);
0x0000406a subs r4, 2 | r4 -= 2;
0x0000406c ldr r3, [r5, 8]! | r3 = *((r5 += 8));
0x00004070 add r2, pc | r2 += pc;
0x00004072 str.w r3, [sl, 0x160] | __asm ("str.w r3, [sl, 0x160]");
0x00004076 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x00004078 adds r3, 2 | r3 += 2;
0x0000407a str r3, [r2, 0x10] | *((r2 + 0x10)) = r3;
0x0000407c b.w 0x1a2e | goto label_0;
| label_180:
0x00004080 ldr r3, [r6] | r3 = *(r6);
0x00004082 b 0x397c | goto label_47;
| label_116:
0x00004084 bic r1, r3, 0x8000800 | r1 = BIT_MASK (r3, 0x8000800);
0x00004088 bic r1, r1, 0xe9 | r1 = BIT_MASK (r1, 0xe9);
0x0000408c cmp r1, 0 |
| if (r1 == 0) {
0x0000408e beq.w 0x26a4 | goto label_48;
| }
0x00004092 ldr.w r0, [pc, 0x4a8] | r0 = *(0x0000453c);
0x00004096 add r0, pc | r0 += pc;
0x00004098 bl 0xc1f0 | fcn_0000c1f0 ();
0x0000409c ldr.w r3, [r5, 0x20c] | r3 = *((r5 + 0x20c));
0x000040a0 b.w 0x26a4 | goto label_48;
| label_173:
0x000040ae mov r1, r3 | r1 = r3;
0x000040b0 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x000040b2 b.w 0x2084 | goto label_49;
| label_80:
0x000040b6 ldr r4, [r7, 0x44] | r4 = *((r7 + 0x44));
0x000040b8 movs r2, 0 | r2 = 0;
0x000040ba str r2, [r7, 0x68] | *((r7 + 0x68)) = r2;
0x000040bc add.w r3, r7, 0x64 | r3 = r7 + 0x64;
0x000040c0 str r1, [r7, 0x64] | *((r7 + 0x64)) = r1;
0x000040c2 add.w r0, r7, 0x50 | r0 = r7 + 0x50;
0x000040c6 str r2, [r4] | *(r4) = r2;
0x000040c8 mov.w r2, 0x20000000 | r2 = 0x20000000;
0x000040cc str r2, [r7, 0x6c] | *((r7 + 0x6c)) = r2;
0x000040ce mov r1, r4 | r1 = r4;
0x000040d0 str r3, [sp] | *(sp) = r3;
0x000040d2 add.w r2, r7, 0x4c | r2 = r7 + 0x4c;
0x000040d6 ldr.w r3, [pc, 0x468] | r3 = *(0x00004540);
0x000040da add r3, pc | r3 += pc;
0x000040dc blx 0xa04 | fcn_00000a04 ();
0x000040e0 ldr r3, [r4] | r3 = *(r4);
0x000040e2 cmp r3, 0 |
| if (r3 == 0) {
0x000040e4 beq.w 0x1e90 | goto label_50;
| }
0x000040e8 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x000040ec cmp r3, 6 |
| if (r3 == 6) {
0x000040ee beq.w 0x34c8 | goto label_22;
| }
0x000040f2 movs r0, 1 | r0 = 1;
0x000040f4 bl 0x14c28 | fcn_00014c28 (r0);
0x000040f8 b.w 0x1e90 | goto label_50;
| label_187:
0x000040fc ldr.w r1, [pc, 0x444] |
0x00004100 add r1, pc | r1 = 0x8648;
0x00004102 b 0x3b22 | goto label_51;
| label_188:
0x00004104 ldr.w r2, [pc, 0x440] |
0x00004108 add r2, pc | r2 = 0x8654;
0x0000410a b 0x3b38 | goto label_52;
| label_101:
0x0000410c bic r1, r3, 0x8000800 | r1 = BIT_MASK (r3, 0x8000800);
0x00004110 bic r1, r1, 0xe9 | r1 = BIT_MASK (r1, 0xe9);
0x00004114 cmp r1, 0 |
| if (r1 == 0) {
0x00004116 beq.w 0x2264 | goto label_53;
| }
0x0000411a ldr.w r0, [pc, 0x430] | r0 = *(0x0000454c);
0x0000411e add r0, pc | r0 += pc;
0x00004120 bl 0xc1f0 | fcn_0000c1f0 ();
0x00004124 ldr.w r3, [fp, 0x20c] | r3 = *(arg_20ch);
0x00004128 b.w 0x2264 | goto label_53;
| label_175:
0x0000412c ldr.w r3, [pc, 0x420] | r3 = *(0x00004550);
0x00004130 str r2, [r7, 0x38] | *((r7 + 0x38)) = r2;
0x00004132 add r3, pc | r3 += pc;
0x00004134 str.w r2, [r3, 0x1d8] | __asm ("str.w r2, [r3, 0x1d8]");
0x00004138 b.w 0x3836 | goto label_54;
| label_191:
0x00004144 eor r0, r3, 1 | r0 = r3 ^ 1;
| label_190:
0x00004148 bl 0x14c28 | fcn_00014c28 (r0);
0x0000414c ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x00004150 b 0x3cb8 | goto label_55;
| label_189:
0x00004152 ldr.w r2, [fp, 0x24] | r2 = *(arg_24h);
0x00004156 cmp r2, 0 |
| if (r2 == 0) {
0x00004158 beq.w 0x42b8 | goto label_198;
| }
0x0000415c ldr.w r4, [fp, 0xc] | r4 = *(arg_ch);
0x00004160 cmp r4, 0 |
| if (r4 == 0) {
0x00004162 beq.w 0x3cb8 | goto label_55;
| }
0x00004166 ldr r3, [pc, 0x3f0] |
0x00004168 ldr.w r8, [pc, 0x3f0] | r8 = *(0x0000455c);
0x0000416c ldr.w sb, [pc, 0x3f0] | sb = *(0x00004560);
0x00004170 add r3, pc | r3 = 0x86ce;
0x00004172 add r8, pc | r8 += pc;
0x00004174 str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x00004176 add sb, pc | sb += pc;
0x00004178 b 0x4188 |
| while (r0 == 0) {
0x0000417a mov r1, r5 | r1 = r5;
0x0000417c movs r2, 8 | r2 = 8;
0x0000417e mov r0, sb | r0 = sb;
0x00004180 bl 0xc264 | fcn_0000c264 ();
| label_56:
0x00004184 ldr r4, [r4, 0xc] | r4 = *((r4 + 0xc));
| if (r4 == 0) {
0x00004186 cbz r4, 0x41c2 | goto label_199;
| }
0x00004188 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0000418a ldr r5, [r3] | r5 = *(r3);
0x0000418c ldrb.w r3, [r4, 0x199] | r3 = *((r4 + 0x199));
0x00004190 lsls r1, r3, 0x1e | r1 = r3 << 0x1e;
| if (r1 < r3) {
0x00004192 bmi 0x41b8 | goto label_200;
| }
0x00004194 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00004196 mov r0, r5 | r0 = r5;
0x00004198 mov r1, r2 | r1 = r2;
0x0000419a str r2, [r7, 0x40] | *((r7 + 0x40)) = r2;
0x0000419c bl 0x14f30 | fcn_00014f30 (r0, r1, r2, r3);
0x000041a0 ldr.w r3, [r4, 0x1b4] | r3 = *((r4 + 0x1b4));
0x000041a4 ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x000041a6 cmp r0, 0 |
0x000041a8 beq 0x417a |
| }
0x000041aa str r3, [sp] | *(sp) = r3;
0x000041ac mov r1, r5 | r1 = r5;
0x000041ae movs r3, 8 | r3 = 8;
0x000041b0 mov r0, r8 | r0 = r8;
0x000041b2 bl 0xc264 | fcn_0000c264 ();
0x000041b6 b 0x4184 | goto label_56;
| label_200:
0x000041b8 ldr r0, [r7, 0x44] | r0 = *((r7 + 0x44));
0x000041ba mov r1, r5 | r1 = r5;
0x000041bc bl 0xc264 | fcn_0000c264 ();
0x000041c0 b 0x4184 | goto label_56;
| label_199:
0x000041c2 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x000041c6 b 0x3cb8 | goto label_55;
| label_176:
0x000041c8 movs r0, 1 | r0 = 1;
0x000041ca bl 0x14c28 | fcn_00014c28 (r0);
0x000041ce b.w 0x386e | goto label_57;
| label_75:
0x00004206 ldr r1, [pc, 0x368] |
0x00004208 mov r0, r6 | r0 = r6;
0x0000420a add r1, pc | r1 = 0x8780;
0x0000420c bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00004210 cmp r0, 0 |
| if (r0 != 0) {
0x00004212 bne.w 0x44f8 | goto label_201;
| }
0x00004216 movs r3, 6 | r3 = 6;
0x00004218 subs r4, 1 | r4--;
0x0000421a adds r5, 4 | r5 += 4;
0x0000421c str.w r3, [sl, 0x164] | __asm ("str.w r3, [sl, 0x164]");
0x00004220 b.w 0x1a2e | goto label_0;
| label_193:
0x00004224 ldr r3, [pc, 0x34c] |
0x00004226 add r3, pc |
0x00004228 ldr r3, [r3] | r3 = *(0x879e);
0x0000422a cmp r3, 1 |
| if (r3 < 1) {
0x0000422c bls.w 0x3e98 | goto label_58;
| }
0x00004230 ldr r5, [pc, 0x344] |
0x00004232 movs r4, 1 | r4 = 1;
0x00004234 ldr.w r8, [pc, 0x344] | r8 = *(0x0000457c);
0x00004238 add r5, pc | r5 = 0x87b4;
0x0000423a add r8, pc | r8 += pc;
| do {
0x0000423c ldr r3, [r5] | r3 = *(r5);
0x0000423e movs r2, 0 | r2 = 0;
0x00004240 mov r1, fp | r1 = fp;
0x00004242 ldr.w r0, [r3, r4, lsl 2] | offset_7 = r4 << 2;
| r0 = *((r3 + offset_7));
0x00004246 ldr.w r3, [fp, 0x1d4] | r3 = *(arg_1d4h);
0x0000424a str r2, [r6] | *(r6) = r2;
0x0000424c str r2, [sp, 0xc] | *(arg_ch) = r2;
0x0000424e str r2, [sp] | *(sp) = r2;
0x00004250 movs r2, 1 | r2 = 1;
0x00004252 strd r2, r2, [sp, 4] | __asm ("strd r2, r2, [sp, 4]");
0x00004256 mov r2, r6 | r2 = r6;
0x00004258 bl 0x7ac8 | fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
0x0000425c lsls r1, r4, 2 | r1 = r4 << 2;
0x0000425e mov r2, r0 | r2 = r0;
| if (r0 != 0) {
0x00004260 cbz r0, 0x4264 |
0x00004262 ldr r2, [r0] | r2 = *(r0);
| }
0x00004264 ldr r0, [r5] | r0 = *(r5);
0x00004266 adds r4, 1 | r4++;
0x00004268 ldr r3, [r6] | r3 = *(r6);
0x0000426a ldr r1, [r0, r1] | r1 = *((r0 + r1));
0x0000426c mov r0, r8 | r0 = r8;
0x0000426e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00004270 str r2, [sp, 4] | *(arg_4h) = r2;
0x00004272 movs r2, 8 | r2 = 8;
0x00004274 str r2, [sp] | *(sp) = r2;
0x00004276 bl 0xc264 | fcn_0000c264 ();
0x0000427a ldr r3, [pc, 0x304] |
0x0000427c add r3, pc |
0x0000427e ldr r3, [r3] | r3 = *(0x8802);
0x00004280 cmp r3, r4 |
0x00004282 bhi 0x423c |
| } while (r3 > r4);
0x00004284 b 0x3e98 | goto label_58;
| label_192:
0x00004286 ldr r0, [r7, 0x44] | r0 = *((r7 + 0x44));
0x00004288 bl 0xc264 | fcn_0000c264 ();
0x0000428c b 0x3c86 | goto label_59;
| label_114:
0x000042a6 ldr r3, [pc, 0x2dc] |
0x000042a8 movs r2, 0x6e | r2 = 0x6e;
0x000042aa ldr r1, [pc, 0x2dc] |
0x000042ac ldr r0, [pc, 0x2dc] |
0x000042ae add r3, pc | r3 = 0x8838;
0x000042b0 add r1, pc | r1 = 0x883e;
0x000042b2 add r0, pc | r0 = 0x8842;
0x000042b4 bl 0x11f30 | fcn_00011f30 (r0);
| label_198:
0x000042b8 ldr r0, [pc, 0x2d4] |
0x000042ba add r0, pc | r0 = 0x884e;
0x000042bc bl 0xc264 | fcn_0000c264 ();
0x000042c0 ldr.w r3, [sl, 0x164] | r3 = *((sl + 0x164));
0x000042c4 b 0x3cb8 | goto label_55;
| label_181:
0x000042c6 add r3, r5 | r3 += r5;
0x000042c8 cmp r5, r3 |
| if (r5 >= r3) {
0x000042ca bhs 0x4340 | goto label_202;
| }
0x000042cc mov r0, r3 | r0 = r3;
0x000042ce b 0x42d4 |
| while (r1 != 0) {
0x000042d0 cmp r5, r0 |
| if (r5 == r0) {
0x000042d2 beq 0x4340 | goto label_202;
| }
0x000042d4 ldrb r2, [r0, -0x1] | r2 = *((r0 - 0x1));
0x000042d8 mov r8, r0 | r8 = r0;
0x000042da subs r0, 1 | r0--;
0x000042dc mov r3, r0 | r3 = r0;
0x000042de cmp r2, 0x20 |
0x000042e0 it ne |
| if (r2 != 0x20) {
0x000042e2 cmpne r2, 0x3a | __asm ("cmpne r2, 0x3a");
| }
0x000042e4 sub.w r2, r2, 9 | r2 -= 9;
0x000042e8 ite ne |
| if (r2 == 0x20) {
0x000042ea movne r1, 1 | r1 = 1;
| }
| if (r2 != 0x20) {
0x000042ec moveq r1, 0 | r1 = 0;
| }
0x000042ee cmp r2, 1 |
0x000042f0 ite ls |
| if (r2 > 1) {
0x000042f2 movls r1, 0 | r1 = 0;
| }
| if (r2 <= 1) {
0x000042f4 andhi r1, r1, 1 | r1 &= 1;
| }
0x000042f8 cmp r1, 0 |
0x000042fa bne 0x42d0 |
| }
0x000042fc cmp r5, r8 |
0x000042fe it lo |
| if (r5 < r8) {
0x00004300 strblo r1, [r8, -0x1] | *((r8 - 0x1)) = r1;
| goto label_203;
| }
| if (r5 <= r8) {
| label_203:
0x00004304 blo.w 0x39ec | goto label_60;
| }
| label_63:
0x00004308 cmp r8, r5 |
| if (r8 == r5) {
0x0000430a beq.w 0x3a14 | goto label_61;
| }
0x0000430e b.w 0x39ec | goto label_60;
| label_174:
0x00004312 ldr r3, [pc, 0x280] |
0x00004314 movw r2, 0x414 | r2 = 0x414;
0x00004318 ldr r1, [pc, 0x27c] |
0x0000431a ldr r0, [pc, 0x280] |
0x0000431c add r3, pc | r3 = 0x88b6;
0x0000431e add r1, pc | r1 = 0x88ba;
0x00004320 add r0, pc | r0 = 0x88c2;
0x00004322 bl 0x11f30 | fcn_00011f30 (r0);
| label_178:
0x00004326 ldrb r3, [r0, -0x1] | r3 = *((r0 - 0x1));
0x0000432a subs r2, r0, 1 | r2 = r0 - 1;
0x0000432c cmp r3, 0x20 |
0x0000432e it ne |
| if (r3 == 0x20) {
0x00004330 cmpne r3, 0x3a | __asm ("cmpne r3, 0x3a");
| goto label_204;
| }
| if (r3 == 0x20) {
| label_204:
0x00004332 beq.w 0x39e0 | goto label_62;
| }
0x00004336 subs r3, 9 | r3 -= 9;
0x00004338 cmp r3, 1 |
| if (r3 < 1) {
0x0000433a bls.w 0x39e0 | goto label_62;
| }
0x0000433e mov r3, r5 | r3 = r5;
| label_202:
0x00004340 mov r8, r3 | r8 = r3;
0x00004342 b 0x4308 | goto label_63;
| label_172:
0x00004344 str r2, [r7, 0x40] | *((r7 + 0x40)) = r2;
0x00004346 b.w 0x2048 | goto label_64;
| label_82:
0x0000435e ldr r0, [pc, 0x24c] |
0x00004360 add r0, pc | r0 = 0x8912;
0x00004362 bl 0xc2a4 | dl_fatal_printf ()
| label_168:
0x00004366 ldr r0, [pc, 0x248] |
0x00004368 add r0, pc | r0 = 0x891e;
0x0000436a bl 0xc2a4 | dl_fatal_printf ()
| label_138:
0x0000436e ldr r3, [pc, 0x244] |
0x00004370 movw r2, 0x70a | r2 = 0x70a;
0x00004374 ldr r1, [pc, 0x240] |
0x00004376 ldr r0, [pc, 0x244] |
0x00004378 add r3, pc | r3 = 0x8932;
0x0000437a add r1, pc | r1 = 0x8936;
0x0000437c add r0, pc | r0 = 0x893e;
0x0000437e bl 0x11f30 | fcn_00011f30 (r0);
| label_133:
0x00004382 ldr r0, [pc, 0x23c] |
0x00004384 add r0, pc | r0 = 0x894a;
0x00004386 bl 0xc2a4 | dl_fatal_printf ()
| label_128:
0x0000438a ldr r3, [pc, 0x238] |
0x0000438c movw r2, 0x6a6 | r2 = 0x6a6;
0x00004390 ldr r1, [pc, 0x234] |
0x00004392 ldr r0, [pc, 0x238] |
0x00004394 add r3, pc | r3 = 0x895e;
0x00004396 add r1, pc | r1 = 0x8962;
0x00004398 add r0, pc | r0 = 0x896a;
0x0000439a bl 0x11f30 | fcn_00011f30 (r0);
| label_129:
0x0000439e ldr r3, [pc, 0x230] |
0x000043a0 movw r2, 0x6a7 | r2 = 0x6a7;
0x000043a4 ldr r1, [pc, 0x22c] |
0x000043a6 ldr r0, [pc, 0x230] |
0x000043a8 add r3, pc | r3 = 0x897e;
0x000043aa add r1, pc | r1 = 0x8982;
0x000043ac add r0, pc | r0 = 0x898a;
0x000043ae bl 0x11f30 | fcn_00011f30 (r0);
| label_98:
0x000043b2 ldr r3, [pc, 0x228] |
0x000043b4 movs r2, 0x7e | r2 = 0x7e;
0x000043b6 ldr r1, [pc, 0x228] |
0x000043b8 ldr r0, [pc, 0x228] |
0x000043ba add r3, pc | r3 = 0x899c;
0x000043bc add r1, pc | r1 = 0x89a2;
0x000043be add r0, pc | r0 = 0x89a6;
0x000043c0 bl 0x11f30 | fcn_00011f30 (r0);
| label_99:
0x000043c4 ldr r3, [pc, 0x220] |
0x000043c6 movs r2, 0x82 | r2 = 0x82;
0x000043c8 ldr r1, [pc, 0x220] |
0x000043ca ldr r0, [pc, 0x224] |
0x000043cc add r3, pc | r3 = 0x89b8;
0x000043ce add r1, pc | r1 = 0x89be;
0x000043d0 add r0, pc | r0 = 0x89c6;
0x000043d2 bl 0x11f30 | fcn_00011f30 (r0);
| label_97:
0x000043d6 ldr r3, [pc, 0x21c] |
0x000043d8 movs r2, 0x78 | r2 = 0x78;
0x000043da ldr r1, [pc, 0x21c] |
0x000043dc ldr r0, [pc, 0x21c] |
0x000043de add r3, pc | r3 = 0x89d8;
0x000043e0 add r1, pc | r1 = 0x89de;
0x000043e2 add r0, pc | r0 = 0x89e2;
0x000043e4 bl 0x11f30 | fcn_00011f30 (r0);
| label_126:
0x000043e8 ldr r0, [pc, 0x214] |
0x000043ea add r0, pc | r0 = 0x89ee;
0x000043ec bl 0xc2a4 | dl_fatal_printf ()
| label_108:
0x000043f0 ldr r3, [pc, 0x210] |
0x000043f2 movs r2, 0x3d | r2 = 0x3d;
0x000043f4 ldr r1, [pc, 0x210] |
0x000043f6 ldr r0, [pc, 0x214] |
0x000043f8 add r3, pc | r3 = 0x8a00;
0x000043fa add r1, pc | r1 = 0x8a06;
0x000043fc add r0, pc | r0 = 0x8a0e;
0x000043fe bl 0x11f30 | fcn_00011f30 (r0);
| label_149:
0x00004402 ldr r3, [pc, 0x20c] |
0x00004404 movw r2, 0x7bb | r2 = 0x7bb;
0x00004408 ldr r1, [pc, 0x208] |
0x0000440a ldr r0, [pc, 0x20c] |
0x0000440c add r3, pc | r3 = 0x8a22;
0x0000440e add r1, pc | r1 = 0x8a26;
0x00004410 add r0, pc | r0 = 0x8a2e;
0x00004412 bl 0x11f30 | fcn_00011f30 (r0);
| label_118:
0x00004416 ldr r3, [pc, 0x204] |
0x00004418 movs r2, 0x61 | r2 = 0x61;
0x0000441a ldr r1, [pc, 0x204] |
0x0000441c ldr r0, [pc, 0x204] |
0x0000441e add r3, pc | r3 = 0x8a40;
0x00004420 add r1, pc | r1 = 0x8a46;
0x00004422 add r0, pc | r0 = 0x8a4a;
0x00004424 bl 0x11f30 | fcn_00011f30 (r0);
| label_90:
0x00004428 ldr r3, [pc, 0x1fc] |
0x0000442a movw r2, 0x64b | r2 = 0x64b;
0x0000442e ldr r1, [pc, 0x1fc] |
0x00004430 ldr r0, [pc, 0x1fc] |
0x00004432 add r3, pc | r3 = 0x8a5e;
0x00004434 add r1, pc | r1 = 0x8a66;
0x00004436 add r0, pc | r0 = 0x8a6a;
0x00004438 bl 0x11f30 | fcn_00011f30 (r0);
| label_119:
0x0000443c ldr r3, [pc, 0x1f4] |
0x0000443e movs r2, 0x62 | r2 = 0x62;
0x00004440 ldr r1, [pc, 0x1f4] |
0x00004442 ldr r0, [pc, 0x1f8] |
0x00004444 add r3, pc | r3 = 0x8a7c;
0x00004446 add r1, pc | r1 = 0x8a82;
0x00004448 add r0, pc | r0 = 0x8a8a;
0x0000444a bl 0x11f30 | fcn_00011f30 (r0);
| label_147:
0x0000444e ldr r3, [pc, 0x1f0] |
0x00004450 movw r2, 0x7b7 | r2 = 0x7b7;
0x00004454 ldr r1, [pc, 0x1ec] |
0x00004456 ldr r0, [pc, 0x1f0] |
0x00004458 add r3, pc | r3 = 0x8a9e;
0x0000445a add r1, pc | r1 = 0x8aa2;
0x0000445c add r0, pc | r0 = 0x8aaa;
0x0000445e bl 0x11f30 | fcn_00011f30 (r0);
0x00004462 ldr r3, [pc, 0x1e8] |
0x00004464 movw r2, 0x58f | r2 = 0x58f;
0x00004468 ldr r1, [pc, 0x1e4] |
0x0000446a ldr r0, [pc, 0x1e8] |
0x0000446c add r3, pc | r3 = 0x8abe;
0x0000446e add r1, pc | r1 = 0x8ac2;
0x00004470 add r0, pc | r0 = 0x8aca;
0x00004472 bl 0x11f30 | fcn_00011f30 (r0);
| label_89:
0x00004476 ldr r3, [pc, 0x1e0] |
0x00004478 movw r2, 0x646 | r2 = 0x646;
0x0000447c ldr r1, [pc, 0x1dc] |
0x0000447e ldr r0, [pc, 0x1e0] |
0x00004480 add r3, pc | r3 = 0x8ade;
0x00004482 add r1, pc | r1 = 0x8ae2;
0x00004484 add r0, pc | r0 = 0x8aea;
0x00004486 bl 0x11f30 | fcn_00011f30 (r0);
0x0000448a ldr r3, [pc, 0x1d8] |
0x0000448c movw r2, 0x597 | r2 = 0x597;
0x00004490 ldr r1, [pc, 0x1d4] |
0x00004492 ldr r0, [pc, 0x1d8] |
0x00004494 add r3, pc | r3 = 0x8afe;
0x00004496 add r1, pc | r1 = 0x8b02;
0x00004498 add r0, pc | r0 = 0x8b0a;
0x0000449a bl 0x11f30 | fcn_00011f30 (r0);
0x0000449e ldr r3, [pc, 0x1d0] |
0x000044a0 movw r2, 0x8c7 | r2 = 0x8c7;
0x000044a4 ldr r1, [pc, 0x1cc] |
0x000044a6 ldr r0, [pc, 0x1d0] |
0x000044a8 add r3, pc | r3 = 0x8b1e;
0x000044aa add r1, pc | r1 = 0x8b22;
0x000044ac add r0, pc | r0 = 0x8b2a;
0x000044ae bl 0x11f30 | fcn_00011f30 (r0);
| label_77:
0x000044b2 ldr r3, [pc, 0x1c8] |
0x000044b4 add r3, pc | r3 = 0x8b36;
0x000044b6 ldr r0, [r3] | r0 = *(0x8b36);
0x000044b8 bl 0x134a8 | fcn_000134a8 (r0);
| label_171:
0x000044bc ldr r3, [pc, 0x1c0] |
0x000044be movw r2, 0x6db | r2 = 0x6db;
0x000044c2 ldr r1, [pc, 0x1c0] |
0x000044c4 ldr r0, [pc, 0x1c0] |
0x000044c6 add r3, pc | r3 = 0x8b4a;
0x000044c8 add r1, pc | r1 = 0x8b52;
0x000044ca add r0, pc | r0 = 0x8b56;
0x000044cc bl 0x11f30 | fcn_00011f30 (r0);
0x000044d0 ldr r3, [pc, 0x1b8] |
0x000044d2 movw r2, 0x983 | r2 = 0x983;
0x000044d6 ldr r1, [pc, 0x1b8] |
0x000044d8 ldr r0, [pc, 0x1b8] |
0x000044da add r3, pc | r3 = 0x8b6a;
0x000044dc add r1, pc | r1 = 0x8b72;
0x000044de add r0, pc | r0 = 0x8b76;
0x000044e0 bl 0x11f30 | fcn_00011f30 (r0);
| label_165:
0x000044e4 ldr r3, [pc, 0x1b0] |
0x000044e6 mov.w r2, 0x3d0 | r2 = 0x3d0;
0x000044ea ldr r1, [pc, 0x1b0] |
0x000044ec ldr r0, [pc, 0x1b0] |
0x000044ee add r3, pc | r3 = 0x8b8a;
0x000044f0 add r1, pc | r1 = 0x8b92;
0x000044f2 add r0, pc | r0 = 0x8b96;
0x000044f4 bl 0x11f30 | fcn_00011f30 (r0);
| label_201:
0x000044f8 ldr r1, [pc, 0x1a8] |
0x000044fa mov sb, r6 | sb = r6;
0x000044fc mov r0, sb | r0 = sb;
0x000044fe ldr r6, [r7, 0x18] | r6 = *((r7 + 0x18));
0x00004500 add r1, pc | r1 = 0x8ba8;
0x00004502 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
| if (r0 == 0) {
0x00004506 cbz r0, 0x4524 | goto label_205;
| }
0x00004508 ldrb.w r3, [sb] | r3 = *(sb);
0x0000450c cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x0000450e bne.w 0x1e0e | goto label_65;
| }
0x00004512 ldrb.w r3, [sb, 1] | r3 = *((sb + 1));
0x00004516 cmp r3, 0x2d |
| if (r3 != 0x2d) {
0x00004518 bne.w 0x1e0e | goto label_65;
| }
0x0000451c ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x0000451e mov r1, sb | r1 = sb;
0x00004520 bl 0x12f50 | r0 = fcn_00012f50 (r0, r1);
| label_205:
0x00004524 bl 0x12f8c | fcn_00012f8c ();
0x00004528 cmp r4, r3 |
0x0000452a movs r1, r0 | r1 = r0;
0x0000452c strh r0, [r3, 0x10] | *((r3 + 0x10)) = r0;
0x0000452e movs r2, r0 | r2 = r0;
0x00004530 ldr r0, [sp, 0x238] | r0 = *(arg_238h);
0x00004532 movs r2, r0 | r2 = r0;
0x00004534 cmp r2, r1 |
0x00004536 movs r1, r0 | r1 = r0;
0x00004538 ldr r0, [sp, 0x190] | r0 = *(arg_190h);
0x0000453a movs r2, r0 | r2 = r0;
0x0000453c subs r7, 0xe2 | r7 -= 0xe2;
0x0000453e movs r1, r0 | r1 = r0;
0x00004540 ldm r3, {r0, r1, r2, r3, r5, r6, r7} | r0 = *(r3);
| r1 = *((r3 + 4));
| r2 = *((r3 + 8));
| r3 = *((r3 + 12));
| r5 = *((r3 + 16));
| r6 = *((r3 + 20));
| r7 = *((r3 + 24));
0x00004542 invalid |
| do {
0x00009c2e ldr r1, [r5, 8] | r1 = *((r5 + 8));
0x00009c30 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00009c32 add r3, r1 | r3 += r1;
0x00009c34 add r3, r2 | r3 += r2;
0x00009c36 str.w r3, [sl, sb] | __asm ("str.w r3, [sl, sb]");
0x00009c3a b 0x9b44 | void (*0x9b44)() ();
0x0000a56a str r1, [r7, 0x44] | *((r7 + 0x44)) = r1;
0x0000a56c bl 0x8dbc | fcn_00008dbc (r0);
0x0000a570 ldr r1, [r7, 0x44] | r1 = *((r7 + 0x44));
0x0000a572 ldr r2, [r7, 0x54] | r2 = *((r7 + 0x54));
0x0000a574 ldr.w r3, [r1, 0x244] | r3 = *((r1 + 0x244));
0x0000a578 b.w 0x9c2e |
| } while (1);
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x7328).
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-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xc9b0 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000c9b0 () | void fcn_0000c9b0 (int16_t arg_10h, int16_t arg_17ch, int16_t arg_180h) {
| int16_t var_0h;
| int8_t var_8h_3;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_ch_2;
| int32_t var_10h_2;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int16_t var_2ch;
| int32_t var_2ch_2;
| int32_t var_34h;
| int32_t var_34h_2;
| int32_t var_3ch;
| int16_t var_40h;
| int32_t var_0h_2;
| int32_t var_8h_2;
| int32_t var_ch;
| int16_t var_50h;
| int32_t var_58h;
| int32_t var_5bh;
| int8_t var_1fh;
| int16_t var_60h;
| int32_t var_10h;
| int32_t var_28h;
| int32_t var_28h_2;
| int16_t var_d0h;
| int16_t var_264h;
0x0000c9b0 ldr.w r3, [pc, 0x4cc] | r3 = *(0x0000ce80);
0x0000c9b4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000c9b8 sub.w sp, sp, 0x26c |
0x0000c9bc add r7, sp, 8 | r7 += var_8h;
0x0000c9be add r3, pc | r3 += pc;
0x0000c9c0 ldr.w ip, [r3, 0x584] | ip = *((r3 + 0x584));
0x0000c9c4 ldrh.w r1, [ip, 0x15c] | r1 = *((ip + 0x15c));
0x0000c9c8 ldr.w r3, [ip, 0x154] | r3 = *((ip + 0x154));
0x0000c9cc lsls r1, r1, 5 | r1 <<= 5;
0x0000c9ce adds r2, r3, r1 | r2 = r3 + r1;
0x0000c9d0 cmp r3, r2 |
| if (r3 >= r2) {
0x0000c9d2 bhs.w 0xce1c | goto label_7;
| }
0x0000c9d6 ldr.w r2, [pc, 0x4ac] | r2 = *(0x0000ce84);
0x0000c9da add r1, r3 | r1 += r3;
0x0000c9dc adds r1, 0x20 | r1 += 0x20;
0x0000c9de adds r3, 0x20 | r3 += 0x20;
0x0000c9e0 movs r0, 0 | r0 = 0;
0x0000c9e2 mov.w r4, -1 | r4 = -1;
0x0000c9e6 add r2, pc | r2 += pc;
0x0000c9e8 ldr r5, [r2, 0x10] | r5 = *((r2 + 0x10));
0x0000c9ea rsb.w lr, r5, 0 | lr = r5 - ;
0x0000c9ee subs r5, 1 | r5--;
0x0000c9f0 b 0xc9f8 |
| while (r2 != 1) {
| label_0:
0x0000c9f2 adds r3, 0x20 | r3 += 0x20;
0x0000c9f4 cmp r1, r3 |
| if (r1 == r3) {
0x0000c9f6 beq 0xca2e | goto label_8;
| }
| label_1:
0x0000c9f8 ldr r2, [r3, -0x20] | r2 = *((r3 - 0x20));
0x0000c9fc cmp r2, 1 |
0x0000c9fe bne 0xc9f2 |
| }
0x0000ca00 ldr r2, [r3, -0x8] | r2 = *((r3 - 0x8));
0x0000ca04 lsls r2, r2, 0x1f | r2 <<= 0x1f;
| if (r2 >= r2) {
0x0000ca06 bpl 0xc9f2 | goto label_0;
| }
0x0000ca08 ldr r2, [r3, -0x18] | r2 = *((r3 - 0x18));
0x0000ca0c adds r3, 0x20 | r3 += 0x20;
0x0000ca0e and.w r6, r2, lr | r6 = r2 & lr;
0x0000ca12 cmp r4, r6 |
0x0000ca14 it hs |
| if (r4 < r6) {
0x0000ca16 movhs r4, r6 | r4 = r6;
| }
0x0000ca18 ldr r6, [r3, -0x2c] | r6 = *((r3 - 0x2c));
0x0000ca1c add r2, r6 | r2 += r6;
0x0000ca1e add r2, r5 | r2 += r5;
0x0000ca20 and.w r2, r2, lr | r2 &= lr;
0x0000ca24 cmp r0, r2 |
0x0000ca26 it lo |
| if (r0 >= r2) {
0x0000ca28 movlo r0, r2 | r0 = r2;
| }
0x0000ca2a cmp r1, r3 |
| if (r1 != r3) {
0x0000ca2c bne 0xc9f8 | goto label_1;
| }
| label_8:
0x0000ca2e mov r1, r4 | r1 = r4;
0x0000ca30 mov r2, r0 | r2 = r0;
| label_3:
0x0000ca32 ldr.w r3, [ip] | r3 = *(ip);
0x0000ca36 ldr.w r5, [pc, 0x450] | r5 = *(0x0000ce88);
0x0000ca3a add r4, r3 | r4 += r3;
0x0000ca3c adds r3, 3 | r3 += 3;
0x0000ca3e add r3, r0 | r3 += r0;
0x0000ca40 add r5, pc | r5 += pc;
0x0000ca42 bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x0000ca46 bic r4, r4, 3 | r4 = BIT_MASK (r4, 3);
0x0000ca4a str r3, [r7, 0x18] | var_18h = r3;
0x0000ca4c str r4, [r5, 4] | *((r5 + 4)) = r4;
0x0000ca4e subs r4, r3, r4 | r4 = r3 - r4;
0x0000ca50 movs r3, 0 | r3 = 0;
0x0000ca52 add.w r0, r4, r4, lsl 1 | r0 = r4 + (r4 << 1);
0x0000ca56 str r3, [r5] | *(r5) = r3;
0x0000ca58 movs r3, 4 | r3 = 4;
0x0000ca5a str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0000ca5c movw r3, 0x1387 | r3 = 0x1387;
0x0000ca60 cmp r0, r3 |
0x0000ca62 str r4, [r5, 8] | *((r5 + 8)) = r4;
| if (r0 > r3) {
0x0000ca64 bhi.w 0xcc04 | goto label_9;
| }
0x0000ca68 movs r3, 0x32 | r3 = 0x32;
0x0000ca6a str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0000ca6c mov.w r3, 0x190 | r3 = 0x190;
0x0000ca70 str r3, [r7, 0x1c] | var_1ch = r3;
0x0000ca72 mov.w r3, 0x1300 | r3 = 0x1300;
| do {
| label_6:
0x0000ca76 lsr.w ip, r4, 2 |
0x0000ca7a movw r6, 0x6d67 |
0x0000ca7e movw r0, 0xffff |
0x0000ca82 str r3, [r7, 0x24] | var_24h = r3;
0x0000ca84 mov.w sb, 0 | sb = 0;
0x0000ca88 add.w r3, r7, 0x2c | r3 += var_2ch;
0x0000ca8c add.w r5, r7, 0x40 | r5 += var_40h;
0x0000ca90 movt r6, 0x6e6f | r6 = 0x6e6f6d67;
0x0000ca94 movt r0, 1 | r0 = 0x1ffff;
0x0000ca98 str r3, [r7, 0x20] | var_20h = r3;
0x0000ca9a str.w ip, [r5, 8] | __asm ("str.w ip, [var_8h_2]");
0x0000ca9e strd r1, r2, [r5] | __asm ("strd r1, r2, [r5]");
0x0000caa2 strd r6, r0, [r7, 0x2c] | __asm ("strd r6, r0, [var_2ch]");
0x0000caa6 ldr.w fp, [pc, 0x3e4] | fp = *(0x0000ce8c);
0x0000caaa strd sb, sb, [r7, 0x34] | __asm ("strd sb, sb, [var_34h]");
0x0000caae str.w sb, [r7, 0x3c] | __asm ("str.w sb, [var_3ch]");
0x0000cab2 bl 0x14384 | fcn_00014384 ();
0x0000cab6 ldr r2, [pc, 0x3d8] |
0x0000cab8 add fp, pc |
0x0000caba ldr.w r6, [fp, 0x180] | r6 = *(arg_180h);
0x0000cabe str r0, [r5, 0xc] | var_ch = r0;
0x0000cac0 add r2, pc | r2 = 0x19956;
0x0000cac2 str.w sb, [r7, 0x58] | __asm ("str.w sb, [var_58h]");
0x0000cac4 str r0, [sp, 0x160] | *((sp + 0x160)) = r0;
0x0000cac6 ldm.w r2, {r0, r1} | r0 = *(r2);
| r1 = *((r2 + 4));
0x0000caca add.w r2, r7, 0x50 | r2 += var_50h;
0x0000cace str.w sb, [r7, 0x5b] | __asm ("str.w sb, [var_5bh]");
0x0000cad2 stm.w r2, {r0, r1} | *(r2) = r0;
| *((r2 + 4)) = r1;
0x0000cad6 movs r2, 0x73 | r2 = 0x73;
0x0000cad8 mov r0, r6 | r0 = r6;
0x0000cada strb r2, [r5, 0x1f] | var_1fh = r2;
0x0000cadc bl 0x15540 | fcn_00015540 (r0, r1);
0x0000cae0 ldr.w r8, [fp, 0x17c] | r8 = *(arg_17ch);
0x0000cae4 mov sl, r0 | sl = r0;
0x0000cae6 mov r0, r8 | r0 = r8;
0x0000cae8 bl 0x15540 | r0 = fcn_00015540 (r0, r1);
0x0000caec add sl, r0 | sl += r0;
0x0000caee mov r1, r6 | r1 = r6;
0x0000caf0 add.w sl, sl, 0x11 | sl += 0x11;
0x0000caf4 bic sl, sl, 7 | sl = BIT_MASK (sl, 7);
0x0000caf8 sub.w sp, sp, sl |
0x0000cafc add r6, sp, 8 | r6 += var_8h;
0x0000cafe mov r0, r6 | r0 = r6;
0x0000cb00 bl 0x15220 | fcn_00015220 ();
0x0000cb04 movs r2, 0x2f | r2 = 0x2f;
0x0000cb06 mov r1, r8 | r1 = r8;
0x0000cb08 strb r2, [r0], 1 | *(r0) = r2;
| r0++;
0x0000cb0c bl 0x15220 | fcn_00015220 ();
0x0000cb10 ldr.w lr, [pc, 0x380] |
0x0000cb14 mov ip, r0 |
0x0000cb16 mov.w r2, 0x1b6 | r2 = 0x1b6;
0x0000cb1a add lr, pc | lr += pc;
0x0000cb1c ldm.w lr!, {r0, r1} | r0 = *(lr!);
| r1 = *((lr! + 4));
0x0000cb20 str.w r1, [ip, 4] | __asm ("str.w r1, [ip, 4]");
0x0000cb24 ldrb.w r1, [lr] | r1 = *(lr);
0x0000cb28 str.w r0, [ip] | __asm ("str.w r0, [ip]");
0x0000cb2c mov r0, r6 | r0 = r6;
0x0000cb2e strb.w r1, [ip, 8] | var_8h_3 = r1;
0x0000cb32 movw r1, 0x8042 | r1 = 0x8042;
0x0000cb36 bl 0x1488c | r0 = fcn_0001488c (r0);
0x0000cb3a cmp.w r0, -1 |
0x0000cb3e ldr r3, [r7, 0x24] | r3 = var_24h;
0x0000cb40 mov sl, r0 | sl = r0;
| if (r0 == -1) {
0x0000cb42 beq 0xcc34 | goto label_10;
| }
0x0000cb44 add.w r8, r7, 0x60 | r8 += var_60h;
0x0000cb48 str r3, [r7, 0x24] | var_24h = r3;
0x0000cb4a mov r1, r8 | r1 = r8;
0x0000cb4c bl 0x143c8 | r0 = fcn_000143c8 (r0, r1);
0x0000cb50 cmp r0, 0 |
| if (r0 < 0) {
0x0000cb52 blt.w 0xce28 | goto label_11;
| }
0x0000cb56 ldr.w r2, [r8, 0x10] | r2 = var_10h;
0x0000cb5a and r2, r2, 0xf000 | r2 &= 0xf000;
0x0000cb5e cmp.w r2, 0x8000 |
| if (r2 != 0x8000) {
0x0000cb62 bne 0xcc60 | goto label_12;
| }
0x0000cb64 ldr r3, [r7, 0x24] | r3 = var_24h;
0x0000cb66 lsrs r0, r4, 1 | r0 = r4 >> 1;
0x0000cb68 ldrd r1, r2, [r8, 0x28] | __asm ("ldrd r1, r2, [var_28h]");
0x0000cb6c str r0, [r7, 0x14] | var_14h = r0;
0x0000cb6e adds r3, r0, r3 | r3 = r0 + r3;
0x0000cb70 str r3, [r7, 0x24] | var_24h = r3;
0x0000cb72 orrs.w r3, r1, r2 | r3 = r1 | r2;
| if (r3 == r1) {
0x0000cb76 beq.w 0xcdac | goto label_13;
| }
0x0000cb7a ldr r0, [r7, 0x24] | r0 = var_24h;
0x0000cb7c asrs r3, r0, 0x1f | r3 = r0 >> 0x1f;
0x0000cb7e cmp r2, r3 |
0x0000cb80 it eq |
| if (r2 == r3) {
0x0000cb82 cmpeq r1, r0 | __asm ("cmpeq r1, r0");
| }
| if (r2 != r3) {
0x0000cb84 bne 0xcc72 | goto label_14;
| }
| label_2:
0x0000cb86 mov.w fp, 0 |
0x0000cb8a str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x0000cb8e str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x0000cb92 movs r3, 1 | r3 = 1;
0x0000cb94 ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x0000cb96 movs r2, 3 | r2 = 3;
0x0000cb98 mov r0, fp | r0 = fp;
0x0000cb9a bl 0x14a98 | r0 = fcn_00014a98 (r0, r1);
0x0000cb9e cmp.w r0, -1 |
0x0000cba2 mov sb, r0 | sb = r0;
| if (r0 == -1) {
0x0000cba4 beq.w 0xce38 | goto label_15;
| }
0x0000cba8 mov r0, sl | r0 = sl;
0x0000cbaa bl 0x14720 | fcn_00014720 ();
0x0000cbae ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0000cbb0 add.w r3, sb, 0x38 | r3 = sb + 0x38;
0x0000cbb4 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x0000cbb6 ldr r2, [pc, 0x2e0] |
0x0000cbb8 add.w sl, r1, 4 | sl = r1 + 4;
0x0000cbbc add sl, r3 | sl += r3;
0x0000cbbe ldrd r3, r1, [r8, 0x28] | __asm ("ldrd r3, r1, [r8, 0x28]");
0x0000cbc2 add r2, pc | r2 = "%s: cannot map file: %s\n";
0x0000cbc4 add.w r0, sl, 4 | r0 = sl + 4;
0x0000cbc8 str.w sl, [r2, 0x14] | __asm ("str.w sl, [r2, 0x14]");
0x0000cbcc orrs r3, r1 | r3 |= r1;
0x0000cbce str r0, [r2, 0x18] | *((r2 + 0x18)) = r0;
| if (r3 == r1) {
0x0000cbd0 beq 0xcc94 | goto label_16;
| }
0x0000cbd2 ldr r1, [r7, 0x20] | r1 = *((r7 + 0x20));
0x0000cbd4 movs r2, 0x14 | r2 = 0x14;
0x0000cbd6 mov r0, sb | r0 = sb;
0x0000cbd8 bl 0x157dc | r0 = fcn_000157dc (r0, r1, r2);
| if (r0 == 0) {
0x0000cbdc cbnz r0, 0xcbfa |
0x0000cbde ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
| if (r3 != 0) {
0x0000cbe2 cbnz r3, 0xcbfa | goto label_17;
| }
0x0000cbe4 mov r1, r5 | r1 = r5;
0x0000cbe6 movs r2, 0x20 | r2 = 0x20;
0x0000cbe8 add.w r0, sb, 0x18 | r0 = sb + 0x18;
0x0000cbec bl 0x157dc | r0 = fcn_000157dc (r0, r1, r2);
| if (r0 != 0) {
0x0000cbf0 cbnz r0, 0xcbfa | goto label_17;
| }
0x0000cbf2 ldr r3, [sl, -0x4] | r3 = *((sl - 0x4));
0x0000cbf6 cmp r3, 1 |
| if (r3 == 1) {
0x0000cbf8 beq 0xccde | goto label_18;
| }
| }
| label_17:
0x0000cbfa ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x0000cbfc mov r0, sb | r0 = sb;
0x0000cbfe bl 0x14ae0 | fcn_00014ae0 (r0);
0x0000cc02 b 0xcc78 | goto label_19;
| label_9:
0x0000cc04 movw r3, 0x851f |
| /* if there is a right shift of 5, then it's a division by 1/100 */
0x0000cc08 movt r3, 0x51eb | r3 = 0x51eb851f;
0x0000cc0c umull r6, r3, r3, r0 | r6:r3 = r3 * r0;
0x0000cc10 movs r6, 0x63 |
0x0000cc12 movt r6, 0x640 | r6 = 0x6400063;
0x0000cc16 cmp r0, r6 |
0x0000cc18 lsr.w r3, r3, 5 | r3 >>= 5;
| if (r0 < r6) {
0x0000cc1c bls.w 0xce6e | goto label_20;
| }
0x0000cc20 mov.w r3, 0x100000 | r3 = 0x100000;
0x0000cc24 mov.w r0, 0x800000 | r0 = 0x800000;
0x0000cc28 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0000cc2a movs r3, 0x40 | r3 = 0x40;
0x0000cc2c str r0, [r7, 0x1c] | var_1ch = r0;
0x0000cc2e movt r3, 0x600 | r3 = (r3 & 0xFFFF) | 0x6000000;
0x0000cc32 b 0xca76 |
| } while (1);
| label_10:
0x0000cc34 ldr r3, [pc, 0x264] |
0x0000cc36 ldr r4, [pc, 0x268] |
0x0000cc38 add r3, pc | r3 = 0x19ad8;
0x0000cc3a ldr r5, [r3] | r5 = *(0x19ad8);
0x0000cc3c add r4, pc | r4 = 0x19ae2;
| do {
0x0000cc3e add.w r1, r7, 0xd0 | r1 += var_d0h;
0x0000cc42 mov r0, r5 | r0 = r5;
0x0000cc44 mov.w r2, 0x190 | r2 = 0x190;
0x0000cc48 bl 0x11e14 | fcn_00011e14 (r0, r1);
0x0000cc4c mov r1, r6 | r1 = r6;
0x0000cc4e mov r2, r0 | r2 = r0;
0x0000cc50 mov r0, r4 | r0 = r4;
0x0000cc52 bl 0xc284 | fcn_0000c284 ();
0x0000cc56 add.w r7, r7, 0x264 | r7 += var_264h;
0x0000cc5a mov sp, r7 |
0x0000cc5c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_12:
0x0000cc60 ldr r4, [pc, 0x240] |
0x0000cc62 add r4, pc | r4 = 0x19b0a;
| label_4:
0x0000cc64 ldr r3, [pc, 0x240] |
0x0000cc66 mov r0, sl | r0 = sl;
0x0000cc68 add r3, pc | r3 = 0x19b14;
0x0000cc6a ldr r5, [r3] | r5 = GLIBC_PRIVATE;
0x0000cc6c bl 0x14720 | fcn_00014720 ();
0x0000cc70 b 0xcc3e |
| } while (1);
| label_14:
0x0000cc72 mov r0, sl | r0 = sl;
0x0000cc74 bl 0x14720 | fcn_00014720 ();
| label_19:
0x0000cc78 ldr r3, [pc, 0x230] |
0x0000cc7a mov r1, r6 | r1 = r6;
0x0000cc7c ldr r0, [pc, 0x230] |
0x0000cc7e add r3, pc | r3 = 0x19b2e;
0x0000cc80 ldr.w r2, [r3, 0x17c] | r2 = *(0x19caa);
0x0000cc84 add r0, pc | r0 = 0x19b38;
0x0000cc86 bl 0xc284 | fcn_0000c284 ();
0x0000cc8a add.w r7, r7, 0x264 | r7 += 0x264;
0x0000cc8e mov sp, r7 |
0x0000cc90 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x0000cc94 ldr r6, [r7, 0x20] | r6 = *((r7 + 0x20));
0x0000cc96 mov.w ip, 1 |
0x0000cc9a str.w fp, [sb, 0x14] | __asm ("str.w fp, [sb, 0x14]");
0x0000cc9e ldm r6!, {r0, r1, r2, r3} | r0 = *(r6!);
| r1 = *((r6! + 4));
| r2 = *((r6! + 8));
| r3 = *((r6! + 12));
0x0000cca0 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0000cca4 ldr r0, [r6] | r0 = *(r6);
0x0000cca6 str.w r1, [sb, 4] | __asm ("str.w r1, [sb, 4]");
0x0000ccaa str.w r2, [sb, 8] | __asm ("str.w r2, [sb, 8]");
0x0000ccae str.w r3, [sb, 0xc] | __asm ("str.w r3, [sb, 0xc]");
0x0000ccb2 str.w r0, [sb, 0x10] | __asm ("str.w r0, [sb, 0x10]");
0x0000ccb6 ldm r5!, {r0, r1, r2, r3} | r0 = *(r5!);
| r1 = *((r5! + 4));
| r2 = *((r5! + 8));
| r3 = *((r5! + 12));
0x0000ccb8 str.w r0, [sb, 0x18] | __asm ("str.w r0, [sb, 0x18]");
0x0000ccbc str.w r1, [sb, 0x1c] | __asm ("str.w r1, [sb, 0x1c]");
0x0000ccc0 str.w r2, [sb, 0x20] | __asm ("str.w r2, [sb, 0x20]");
0x0000ccc4 str.w r3, [sb, 0x24] | __asm ("str.w r3, [sb, 0x24]");
0x0000ccc8 ldm r5!, {r0, r1, r2, r3} | r0 = *(r5!);
| r1 = *((r5! + 4));
| r2 = *((r5! + 8));
| r3 = *((r5! + 12));
0x0000ccca str.w r0, [sb, 0x28] | __asm ("str.w r0, [sb, 0x28]");
0x0000ccce str.w r1, [sb, 0x2c] | __asm ("str.w r1, [sb, 0x2c]");
0x0000ccd2 str.w r2, [sb, 0x30] | __asm ("str.w r2, [sb, 0x30]");
0x0000ccd6 str.w r3, [sb, 0x34] | __asm ("str.w r3, [sb, 0x34]");
0x0000ccda str ip, [sl, -0x4] | *((sl - 0x4)) = ip;
| label_18:
0x0000ccde ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0000cce0 movs r1, 1 | r1 = 1;
0x0000cce2 ldr r0, [r7, 0x1c] | r0 = *((r7 + 0x1c));
0x0000cce4 add r0, r3 | r0 += r3;
0x0000cce6 ldr r3, [pc, 0x1cc] |
0x0000cce8 add r3, pc |
0x0000ccea ldr r3, [r3] | r3 = *(0x19ba2);
0x0000ccec blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000ccee ldr r2, [pc, 0x1c8] |
0x0000ccf0 add r2, pc | r2 = 0x19bae;
0x0000ccf2 str r0, [r2, 0x1c] | *((r2 + 0x1c)) = r0;
0x0000ccf4 cmp r0, 0 |
| if (r0 == 0) {
0x0000ccf6 beq.w 0xce5e | goto label_21;
| }
0x0000ccfa ldr r5, [r7, 0x14] | r5 = *((r7 + 0x14));
0x0000ccfc movs r3, 0 | r3 = 0;
0x0000ccfe ldr r1, [r2, 0x14] | r1 = *((r2 + 0x14));
0x0000cd00 str r3, [r2, 0x24] | *((r2 + 0x24)) = r3;
0x0000cd02 add.w ip, r0, r5 |
0x0000cd06 ldr r3, [r2, 0x10] | r3 = *((r2 + 0x10));
0x0000cd08 str.w ip, [r2, 0x20] | __asm ("str.w ip, [r2, 0x20]");
0x0000cd0c ldr r2, [r1] | r2 = *(r1);
0x0000cd0e ldr r6, [pc, 0x1ac] |
0x0000cd10 cmp r2, r3 |
0x0000cd12 it lo |
| if (r2 >= r3) {
0x0000cd14 ldrlo r3, [r1] | r3 = *(r1);
| }
0x0000cd16 add r6, pc | r6 = 0x19bd8;
0x0000cd18 str r3, [r6, 0x28] | *((r6 + 0x28)) = r3;
| if (r3 == 0) {
0x0000cd1a cbz r3, 0xcd58 | goto label_22;
| }
0x0000cd1c ldr.w r8, [r6, 0x18] | r8 = *((r6 + 0x18));
0x0000cd20 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x0000cd24 add.w r2, r8, r3, lsl 2 | r2 = r8 + (r3 << 2);
0x0000cd28 subs r2, 0xc | r2 -= 0xc;
| do {
0x0000cd2a ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0000cd2c cmp r2, r8 |
0x0000cd2e ldr r3, [r6, 0x24] | r3 = *((r6 + 0x24));
0x0000cd30 lsr.w r1, r1, 2 | r1 >>= 2;
0x0000cd34 add.w lr, r3, 1 | lr = r3 + 1;
0x0000cd38 str.w lr, [r6, 0x24] | __asm ("str.w lr, [r6, 0x24]");
0x0000cd3c add.w lr, ip, r3, lsl 3 | lr = ip + (r3 << 3);
0x0000cd40 ldrh.w sb, [r0, r1, lsl 1] | offset_0 = r1 << 1;
| sb = *((r0 + offset_0));
0x0000cd44 str.w r2, [ip, r3, lsl 3] | __asm ("str.w r2, [ip, r3, lsl 3]");
0x0000cd48 uxth r3, r3 | r3 = (int16_t) r3;
0x0000cd4a sub.w r2, r2, 0xc | r2 -= 0xc;
0x0000cd4e strh.w sb, [lr, 4] | *((lr + 4)) = sb;
0x0000cd52 strh.w r3, [r0, r1, lsl 1] | offset_1 = r1 << 1;
| *((r0 + offset_1)) = r3;
0x0000cd56 bne 0xcd2a |
| } while (r2 != r8);
| label_22:
0x0000cd58 ldr r3, [pc, 0x164] |
0x0000cd5a add r3, pc | r3 = 0x19c1e;
0x0000cd5c ldr r6, [r3, 4] | r6 = *(0x19c22);
0x0000cd5e ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x0000cd60 subs r5, r3, r6 | r5 = r3 - r6;
0x0000cd62 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0000cd64 cmp r5, r3 |
0x0000cd66 it ls |
| if (r5 > r3) {
0x0000cd68 movls r3, 0x10000 | r3 = 0x10000;
| }
| if (r5 >= r3) {
0x0000cd6c bls 0xcd90 |
0x0000cd6e ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0000cd70 mov r0, r5 | r0 = r5;
0x0000cd72 bl 0x16608 | r0 = fcn_00016608 (r0, r1, r2);
0x0000cd76 cmp.w r0, 0x10000 |
0x0000cd7a it hs |
| if (r0 < 0x10000) {
0x0000cd7c movhs r3, 1 | r3 = 1;
| }
| if (r0 >= 0x10000) {
0x0000cd7e bhs 0xcd90 | goto label_5;
| }
0x0000cd80 cmp r0, 0xff |
| if (r0 < 0xff) {
0x0000cd82 bls 0xce3e | goto label_23;
| }
0x0000cd84 mov r1, r0 | r1 = r0;
0x0000cd86 mov.w r0, 0x10000 | r0 = 0x10000;
0x0000cd8a bl 0x16608 | r0 = fcn_00016608 (r0, r1, r2);
0x0000cd8e mov r3, r0 | r3 = r0;
| }
| label_5:
0x0000cd90 ldrd r0, r1, [r7, 0x10] | __asm ("ldrd r0, r1, [r7, 0x10]");
0x0000cd94 mov r2, r6 | r2 = r6;
0x0000cd96 bl 0x14304 | fcn_00014304 (r0, r1, r2, r3);
0x0000cd9a ldr r3, [pc, 0x128] |
0x0000cd9c movs r2, 1 | r2 = 1;
0x0000cd9e add.w r7, r7, 0x264 | r7 += 0x264;
0x0000cda2 add r3, pc | r3 = "listp->slotinfo[cnt].gen <= GL(dl_tls_generation)";
0x0000cda4 str r2, [r3] | *(r3) = r2;
0x0000cda6 mov sp, r7 |
0x0000cda8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_13:
0x0000cdac ldr.w r2, [fp, 0x10] | r2 = *(arg_10h);
0x0000cdb0 mov r1, sb | r1 = sb;
0x0000cdb2 str.w sp, [r7, 0x10] | __asm ("str.w sp, [var_10h_2]");
0x0000cdb6 adds r3, r2, 7 | r3 = r2 + 7;
0x0000cdb8 str r2, [r7, 0xc] | var_ch_2 = r2;
0x0000cdba bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0000cdbe sub.w sp, sp, r3 |
0x0000cdc2 add r3, sp, 8 | r3 += var_8h;
0x0000cdc4 mov r0, r3 | r0 = r3;
0x0000cdc6 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x0000cdc8 blx 0x15da0 | fcn_00015da0 (r0, r1);
0x0000cdcc ldr r2, [r7, 0xc] | r2 = *((r7 + 0xc));
0x0000cdce mov r0, sl | r0 = sl;
0x0000cdd0 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
0x0000cdd2 rsbs r1, r2, 0 | r1 = r2 - ;
0x0000cdd4 mov r2, sb | r2 = sb;
0x0000cdd6 ands r1, r3 | r1 &= r3;
0x0000cdd8 bl 0x146a8 | fcn_000146a8 (r0, r1);
0x0000cddc adds r0, 1 | r0++;
| if (r0 == 1) {
0x0000cdde beq 0xce2e | goto label_24;
| }
0x0000cde0 ldr.w sb, [pc, 0xe4] | sb = *(0x0000cec8);
0x0000cde4 str r4, [r7, 0xc] | *((r7 + 0xc)) = r4;
0x0000cde6 str r5, [r7, 4] | *((r7 + 4)) = r5;
0x0000cde8 add sb, pc | sb += pc;
0x0000cdea ldr r4, [r7, 0x24] | r4 = *((r7 + 0x24));
0x0000cdec mov r5, sb | r5 = sb;
0x0000cdee ldr.w sb, [r7, 8] | sb = *((r7 + 8));
0x0000cdf2 b 0xcdfa |
| while (r3 == r0) {
0x0000cdf4 ldr r2, [r5] | r2 = *(r5);
0x0000cdf6 cmp r2, 4 |
| if (r2 != 4) {
0x0000cdf8 bne 0xce2e | goto label_24;
| }
0x0000cdfa ldr.w r2, [fp, 0x10] | r2 = *(arg_10h);
0x0000cdfe mov r1, sb | r1 = sb;
0x0000ce00 mov r0, sl | r0 = sl;
0x0000ce02 subs r2, 1 | r2--;
0x0000ce04 ands r2, r4 | r2 &= r4;
0x0000ce06 bl 0x14940 | r0 = fcn_00014940 ();
0x0000ce0a adds r3, r0, 1 | r3 = r0 + 1;
0x0000ce0c beq 0xcdf4 |
| }
0x0000ce0e cmp r0, 0 |
0x0000ce10 ldr r4, [r7, 0xc] | r4 = *((r7 + 0xc));
0x0000ce12 ldr r5, [r7, 4] | r5 = *((r7 + 4));
| if (r0 >= 0) {
0x0000ce14 blt 0xce2e |
0x0000ce16 ldr.w sp, [r7, 0x10] | sp = *((r7 + 0x10));
0x0000ce1a b 0xcb86 | goto label_2;
| label_7:
0x0000ce1c movs r2, 0 | r2 = 0;
0x0000ce1e mov.w r1, -1 | r1 = -1;
0x0000ce22 mov r0, r2 | r0 = r2;
0x0000ce24 mov r4, r1 | r4 = r1;
0x0000ce26 b 0xca32 | goto label_3;
| label_11:
0x0000ce28 ldr r4, [pc, 0xa0] |
0x0000ce2a add r4, pc | r4 = 0x19cfa;
0x0000ce2c b 0xcc64 | goto label_4;
| }
| label_24:
0x0000ce2e ldr r4, [pc, 0xa0] |
0x0000ce30 ldr.w sp, [r7, 0x10] | sp = *((r7 + 0x10));
0x0000ce34 add r4, pc | r4 = 0x19d0a;
0x0000ce36 b 0xcc64 | goto label_4;
| label_15:
0x0000ce38 ldr r4, [pc, 0x98] |
0x0000ce3a add r4, pc | r4 = 0x19d12;
0x0000ce3c b 0xcc64 | goto label_4;
| label_23:
0x0000ce3e cmp.w r5, 0x1000000 |
0x0000ce42 itete lo |
| if (r5 >= 0x1000000) {
0x0000ce44 ldrlo r1, [r7, 0x14] | r1 = *((r7 + 0x14));
| }
| if (r5 < 0x1000000) {
0x0000ce46 lsrhs r1, r4, 9 | r1 = r4 >> 9;
| }
| if (r5 >= 0x1000000) {
0x0000ce48 lsllo r0, r5, 8 | r0 = r5 << 8;
| }
| if (r5 < 0x1000000) {
0x0000ce4a movhs r0, r5 | r0 = r5;
| }
0x0000ce4c bl 0x16608 | r0 = fcn_00016608 (r0, r1, r2);
0x0000ce50 mov r1, r0 | r1 = r0;
0x0000ce52 mov.w r0, 0x1000000 | r0 = 0x1000000;
0x0000ce56 bl 0x16608 | r0 = fcn_00016608 (r0, r1, r2);
0x0000ce5a mov r3, r0 | r3 = r0;
0x0000ce5c b 0xcd90 | goto label_5;
| label_21:
0x0000ce5e ldr r1, [r7, 0x24] | r1 = *((r7 + 0x24));
0x0000ce60 mov r0, sb | r0 = sb;
0x0000ce62 bl 0x14ae0 | fcn_00014ae0 (r0);
0x0000ce66 ldr r0, [pc, 0x70] |
0x0000ce68 add r0, pc | r0 = 0x19d46;
0x0000ce6a bl 0xc2a4 | dl_fatal_printf ()
| label_20:
0x0000ce6e movs r0, 0x60 | r0 = 0x60;
0x0000ce70 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x0000ce72 mul r0, r3, r0 | r0 = r3 * r0;
0x0000ce76 lsls r3, r3, 3 | r3 <<= 3;
0x0000ce78 str r3, [r7, 0x1c] | var_1ch = r3;
0x0000ce7a add.w r3, r0, 0x40 | r3 = r0 + 0x40;
0x0000ce7e b 0xca76 | goto label_6;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xd1e8 */
| #include <stdint.h>
|
; (fcn) fcn.0000d1e8 () | void fcn_0000d1e8 () {
0x0000d1e8 mul r5, r0, r5 | r5 = r0 * r5;
0x0000d1ec cmp r5, 0 |
| if (r5 != 0) {
0x0000d1ee beq 0xd2c6 |
0x0000d1f0 ldrd r1, r2, [r4, 0x230] | __asm ("ldrd r1, r2, [r4, 0x230]");
0x0000d1f4 mov r0, r5 | r0 = r5;
0x0000d1f6 blx 0x15f40 | fcn_00015f40 (r0, r1);
0x0000d1fa ldrd r3, r2, [r4, 0x234] | __asm ("ldrd r3, r2, [r4, 0x234]");
0x0000d1fe movs r1, 0 | r1 = 0;
0x0000d200 add r0, r3 | r0 += r3;
0x0000d202 subs r2, r2, r3 | r2 -= r3;
0x0000d204 blx 0x15da0 | fcn_00015da0 (r0, r1);
0x0000d208 ldr r3, [r7] | r3 = *(r7);
0x0000d20a str.w r5, [r6, r3, lsl 3] | __asm ("str.w r5, [r6, r3, lsl 3]");
0x0000d20e add.w r6, r6, r3, lsl 3 | r6 += (r3 << 3);
0x0000d212 str.w r8, [r6, 4] | __asm ("str.w r8, [r6, 4]");
0x0000d216 cmp.w r8, 0 |
| if (r8 != 0) {
0x0000d21a beq 0xd2b2 |
0x0000d21c ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x0000d21e add r0, r5 | r0 += r5;
0x0000d220 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| }
0x0000d2b2 ldr r3, [pc, 0x38] |
0x0000d2b4 movw r2, 0x382 | r2 = 0x382;
0x0000d2b8 ldr r1, [pc, 0x34] |
0x0000d2ba ldr r0, [pc, 0x38] |
0x0000d2bc add r3, pc | r3 = 0x1a5ae;
0x0000d2be add r1, pc | r1 = 0x1a5b2;
0x0000d2c0 add r0, pc | r0 = 0x1a5ba;
0x0000d2c2 bl 0x11f30 | fcn_00011f30 (r0);
| }
0x0000d2c6 ldr r0, [pc, 0x30] |
0x0000d2c8 add r0, pc | r0 = 0x1a5c6;
0x0000d2ca bl 0xc2a4 | dl_fatal_printf ()
0x0000d2ce nop |
0x0000d2d0 stc2 p0, c0, [r4, -4] | __asm ("stc2 p0, c0, [r4, -4]");
0x0000d2d4 stc2l p0, c0, [r4, 4]! | __asm ("stc2l p0, c0, [r4, 4]!");
0x0000d2d8 ldc2 p0, c0, [ip, 4]! | __asm ("ldc2 p0, c0, [ip, 4]!");
0x0000d2dc ldc2 p0, c0, [r6], {1} | __asm ("ldc2 p0, c0, [r6], {1}");
0x0000d2e0 ldc2l p0, c0, [ip], -4 | __asm ("ldc2l p0, c0, [ip], -4");
0x0000d2e4 mrrc2 p0, 0, r0, lr, c1 | __asm ("mrrc2 p0, 0, r0, lr, c1");
0x0000d2e8 stc2l p0, c0, [r0], -4 | __asm ("stc2l p0, c0, [r0], -4");
0x0000d2ec ldm r2, {r2, r6, r7} | r2 = *(r2);
| r6 = *((r2 + 4));
| r7 = *((r2 + 8));
0x0000d2ee movs r0, r0 |
0x0000d2f0 ldm r0!, {r1, r3, r6} | r1 = *(r0!);
| r3 = *((r0! + 4));
| r6 = *((r0! + 8));
0x0000d2f2 movs r0, r0 |
0x0000d2f4 ldm r0!, {r2, r4, r6} | r2 = *(r0!);
| r4 = *((r0! + 4));
| r6 = *((r0! + 8));
0x0000d2f6 movs r0, r0 |
0x0000d2f8 ldm r0!, {r2, r5, r6} | r2 = *(r0!);
| r5 = *((r0! + 4));
| r6 = *((r0! + 8));
0x0000d2fa movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xd2fc */
| #include <stdint.h>
|
; (fcn) fcn.0000d2fc () | void fcn_0000d2fc (uint32_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0000d2fc ldr r2, [pc, 0x64] |
0x0000d2fe push {r3, r4, r5, r6, r7, lr} |
0x0000d300 mov r4, r1 | r4 = r1;
0x0000d302 adds r1, 0x10 | r1 += 0x10;
0x0000d304 ldr r6, [r0, -0x8] | r6 = *((r0 - 0x8));
0x0000d308 add r2, pc | r2 = 0x1a670;
0x0000d30a lsls r1, r1, 3 | r1 <<= 3;
0x0000d30c ldr.w r7, [r2, 0x894] | r7 = *(0x1af04);
0x0000d310 add.w r5, r4, 0xe | r5 = r4 + 0xe;
0x0000d314 cmp r7, r0 |
| if (r7 == r0) {
0x0000d316 beq 0xd33e | goto label_0;
| }
0x0000d318 ldr r2, [pc, 0x4c] |
0x0000d31a subs r0, 8 | r0 -= 8;
0x0000d31c add r2, pc | r2 = 0x1a688;
0x0000d31e ldr r3, [r2] | r3 = *(0x1a688);
0x0000d320 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0000d322 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0000d324 cbz r0, 0xd35c | goto label_1;
| }
0x0000d326 adds r7, r6, 2 | r7 = r6 + 2;
0x0000d328 lsls r7, r7, 3 | r7 <<= 3;
| do {
0x0000d32a subs r2, r5, r6 | r2 = r5 - r6;
0x0000d32c str r5, [r4] | *(r4) = r5;
0x0000d32e lsls r2, r2, 3 | r2 <<= 3;
0x0000d330 movs r1, 0 | r1 = 0;
0x0000d332 adds r0, r4, r7 | r0 = r4 + r7;
0x0000d334 blx 0x15da0 | fcn_00015da0 (r0, r1);
0x0000d338 add.w r0, r4, 8 | r0 = r4 + 8;
0x0000d33c pop {r3, r4, r5, r6, r7, pc} |
| label_0:
0x0000d33e ldr r3, [pc, 0x2c] |
0x0000d340 mov r0, r1 | r0 = r1;
0x0000d342 add r3, pc |
0x0000d344 ldr r3, [r3] | r3 = "Operation not permitted";
0x0000d346 blx r3 | r0 = uint32_t (*r3)(uint32_t, char*) (r0, "Operation not permitted");
0x0000d348 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x0000d34a cbz r0, 0xd35c | goto label_1;
| }
0x0000d34c sub.w r1, r7, 8 | r1 = r7 - 8;
0x0000d350 adds r7, r6, 2 | r7 = r6 + 2;
0x0000d352 lsls r7, r7, 3 | r7 <<= 3;
0x0000d354 mov r2, r7 | r2 = r7;
0x0000d356 blx 0x15f40 | fcn_00015f40 (r0, r1);
0x0000d35a b 0xd32a |
| } while (1);
| label_1:
0x0000d35c ldr r0, [pc, 0x10] |
0x0000d35e add r0, pc | r0 = 0x1a6d2;
0x0000d360 bl 0xc2a4 | dl_fatal_printf ()
0x0000d364 stc2 p0, c0, [r4, -4] | __asm ("stc2 p0, c0, [r4, -4]");
0x0000d368 smlal r0, r0, r8, r1 | __asm ("smlal r0, r0, r8, r1");
0x0000d36c invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xfb40 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0000fb40 () | void fcn_0000fb40 (int16_t arg_18h, int16_t arg_28h, int16_t arg_40h, int16_t arg_58h, int16_t arg_60h, int16_t arg_70h, int16_t arg_98h, int16_t arg_188h, int16_t arg_1b0h, int16_t arg_1d0h, int16_t arg_1e0h, int16_t arg_208h, int16_t arg_250h, int16_t arg_268h, int16_t arg_2a0h, int16_t arg_2a8h, int16_t arg_308h, int16_t arg_338h, int16_t arg_390h, int16_t arg_398h, int16_t arg_3c0h, int16_t arg1) {
| r0 = arg1;
| label_10:
0x0000eefa ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0000eefc str.w sp, [r7, 0x18] | __asm ("str.w sp, [r7, 0x18]");
0x0000ef00 str.w fp, [r3] | __asm ("str.w fp, [r3]");
0x0000ef04 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x0000ef06 ldrd r3, sb, [r3] | __asm ("ldrd r3, sb, [r3]");
0x0000ef0a add.w r1, sb, 7 | r1 = sb + 7;
0x0000ef0e lsl.w r2, sb, 2 | r2 = sb << 2;
0x0000ef12 bic r1, r1, 7 | r1 = BIT_MASK (r1, 7);
0x0000ef16 sub.w sp, sp, r1 |
0x0000ef1a adds r2, 7 | r2 += 7;
0x0000ef1c mov r8, sp | r8 = sp;
0x0000ef1e bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0000ef22 sub.w sp, sp, r1 |
0x0000ef26 mov r4, sp | r4 = sp;
0x0000ef28 sub.w sp, sp, r2 |
0x0000ef2c mov r2, sp | r2 = sp;
0x0000ef2e str r2, [r7, 0x28] | *((r7 + 0x28)) = r2;
0x0000ef30 cmp r3, 0 |
| if (r3 == 0) {
0x0000ef32 beq.w 0xf742 | goto label_57;
| }
0x0000ef36 subs r1, r2, 4 | r1 = r2 - 4;
0x0000ef38 movs r2, 0 | r2 = 0;
| do {
0x0000ef3a str.w r2, [r3, 0x214] | __asm ("str.w r2, [r3, 0x214]");
0x0000ef3e adds r2, 1 | r2++;
0x0000ef40 str r3, [r1, 4]! | *((r1 += 4)) = r3;
0x0000ef44 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0000ef46 cmp r3, 0 |
0x0000ef48 bne 0xef3a |
| } while (r3 != 0);
| label_28:
0x0000ef4a cmp sb, r2 |
| if (sb != r2) {
0x0000ef4c bne.w 0xf9ce | goto label_58;
| }
0x0000ef50 movs r1, 0 | r1 = 0;
0x0000ef52 mov r2, sb | r2 = sb;
0x0000ef54 mov r0, r8 | r0 = r8;
0x0000ef56 blx 0x15da0 | fcn_00015da0 (r0, r1);
0x0000ef5a mov r2, sb | r2 = sb;
0x0000ef5c movs r1, 0 | r1 = 0;
0x0000ef5e mov r0, r4 | r0 = r4;
0x0000ef60 blx 0x15da0 | fcn_00015da0 (r0, r1);
0x0000ef64 cmp.w sb, 0 |
| if (sb == 0) {
0x0000ef68 beq.w 0xf8be | goto label_59;
| }
0x0000ef6c ldr.w lr, [r7, 0x28] |
0x0000ef70 movs r2, 0 | r2 = 0;
0x0000ef72 mov.w ip, -1 |
0x0000ef76 str.w sl, [r7, 0x5c] | __asm ("str.w sl, [r7, 0x5c]");
0x0000ef7a b 0xef8a | goto label_4;
| label_0:
0x0000ef7c ldr.w r0, [r5, 0x1fc] | r0 = *((r5 + 0x1fc));
0x0000ef80 cmp r0, 0 |
| if (r0 != 0) {
0x0000ef82 bne 0xf020 | goto label_60;
| }
| do {
| label_3:
0x0000ef84 adds r2, 1 | r2++;
0x0000ef86 cmp r2, sb |
| if (r2 >= sb) {
0x0000ef88 bhs 0xf06e | goto label_61;
| }
| label_4:
0x0000ef8a ldrb r3, [r4, r2] | r3 = *((r4 + r2));
0x0000ef8c ldr.w r5, [lr, r2, lsl 2] | offset_0 = r2 << 2;
| r5 = *((lr + offset_0));
0x0000ef90 cmp r3, 0 |
0x0000ef92 bne 0xef84 |
| } while (r3 != 0);
0x0000ef94 ldrb.w r3, [r5, 0x198] | r3 = *((r5 + 0x198));
0x0000ef98 and r3, r3, 3 | r3 &= 3;
0x0000ef9c cmp r3, 2 |
| if (r3 == 2) {
0x0000ef9e beq.w 0xf2e0 | goto label_62;
| }
| label_11:
0x0000efa2 strb.w fp, [r8, r2] | *((r8 + r2)) = fp;
0x0000efa6 ldr.w r1, [r5, 0x1f8] | r1 = *((r5 + 0x1f8));
0x0000efaa strb.w fp, [r4, r2] | *((r4 + r2)) = fp;
0x0000efae str.w ip, [r5, 0x214] | __asm ("str.w ip, [r5, 0x214]");
0x0000efb2 cmp r1, 0 |
| if (r1 == 0) {
0x0000efb4 beq 0xef7c | goto label_0;
| }
0x0000efb6 ldr r3, [r1, 4] | r3 = *((r1 + 4));
0x0000efb8 adds r1, 4 | r1 += 4;
| if (r3 != 0) {
0x0000efba cbnz r3, 0xefe2 | goto label_63;
| }
0x0000efbc b 0xef7c | goto label_0;
| label_2:
0x0000efbe cmp r3, sb |
| if (r3 >= sb) {
0x0000efc0 bhs 0xefee | goto label_64;
| }
0x0000efc2 ldrb.w r0, [r8, r3] | r0 = *((r8 + r3));
| if (r0 == 0) {
0x0000efc6 cbnz r0, 0xefda |
0x0000efc8 strb.w fp, [r8, r3] | *((r8 + r3)) = fp;
0x0000efcc ldr r3, [r1] | r3 = *(r1);
0x0000efce ldr.w r3, [r3, 0x214] | r3 = *((r3 + 0x214));
0x0000efd2 cmp r3, r2 |
0x0000efd4 it le |
| if (r3 <= r2) {
0x0000efd6 addle r2, r3, -1 | r2 = r3 + -1;
| goto label_1;
| }
| }
| label_1:
0x0000efda ldr r3, [r1, 4]! | r3 = *((r1 += 4));
0x0000efde cmp r3, 0 |
| if (r3 == 0) {
0x0000efe0 beq 0xef7c | goto label_0;
| }
| label_63:
0x0000efe2 ldr.w r3, [r3, 0x214] | r3 = *((r3 + 0x214));
0x0000efe6 adds r6, r3, 1 | r6 = r3 + 1;
| if (r6 == r3) {
0x0000efe8 beq 0xefda | goto label_1;
| }
0x0000efea cmp r3, 0 |
| if (r3 >= 0) {
0x0000efec bge 0xefbe | goto label_2;
| }
| label_64:
0x0000efee ldr.w r3, [pc, 0xa20] |
0x0000eff2 movs r2, 0xe2 | r2 = 0xe2;
0x0000eff4 ldr.w r1, [pc, 0xa1c] | r1 = *(0x0000fa14);
0x0000eff8 ldr.w r0, [pc, 0xa1c] |
0x0000effc add r3, pc | r3 = 0x1ea12;
0x0000effe add r1, pc | r1 += pc;
0x0000f000 add r0, pc | r0 = 0x1ea1c;
0x0000f002 bl 0x11f30 | fcn_00011f30 (r0);
0x0000f006 ldr r1, [r7, 0x14] | r1 = *((r7 + 0x14));
0x0000f008 str r3, [r1] | *(r1) = r3;
0x0000f00a ldr.w r3, [pc, 0xa10] | r3 = *(0x0000fa1c);
0x0000f00e add r3, pc | r3 += pc;
0x0000f010 ldr r3, [r3] | r3 = *(r3);
0x0000f012 lsls r3, r3, 0x19 | r3 <<= 0x19;
| if (r3 < r3) {
0x0000f014 bmi.w 0xf724 | goto label_65;
| }
| label_27:
0x0000f018 adds r7, 0x64 | r7 += 0x64;
0x0000f01a mov sp, r7 |
0x0000f01c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_60:
0x0000f020 ldr r3, [r0] | r3 = *(r0);
0x0000f022 cmp r3, 0 |
| if (r3 == 0) {
0x0000f024 beq 0xef84 | goto label_3;
| }
0x0000f026 movs r1, 0 | r1 = 0;
0x0000f028 mov sl, r4 | sl = r4;
| do {
0x0000f02a add.w r3, r0, r1, lsl 2 | r3 = r0 + (r1 << 2);
0x0000f02e ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x0000f030 ldr.w r3, [r6, 0x214] | r3 = *((r6 + 0x214));
0x0000f034 adds r4, r3, 1 | r4 = r3 + 1;
| if (r4 != r3) {
0x0000f036 beq 0xf05e |
0x0000f038 cmp r3, 0 |
| if (r3 < 0) {
0x0000f03a blt.w 0xf730 | goto label_66;
| }
0x0000f03e cmp r3, sb |
| if (r3 >= sb) {
0x0000f040 bhs.w 0xf730 | goto label_66;
| }
0x0000f044 ldrb.w r4, [r8, r3] | r4 = *((r8 + r3));
| if (r4 != 0) {
0x0000f048 cbnz r4, 0xf05e | goto label_67;
| }
0x0000f04a strb.w fp, [r8, r3] | *((r8 + r3)) = fp;
0x0000f04e ldr.w r3, [r6, 0x214] | r3 = *((r6 + 0x214));
0x0000f050 adds r2, 0x14 | r2 += 0x14;
0x0000f052 ldr.w r0, [r5, 0x1fc] | r0 = *((r5 + 0x1fc));
0x0000f056 cmp r3, r2 |
0x0000f058 it le |
| if (r3 <= r2) {
0x0000f05a addle r2, r3, -1 | r2 = r3 + -1;
| goto label_67;
| }
| }
| label_67:
0x0000f05e ldr r3, [r0] | r3 = *(r0);
0x0000f060 adds r1, 1 | r1++;
0x0000f062 cmp r3, r1 |
0x0000f064 bhi 0xf02a |
| } while (r3 > r1);
0x0000f066 adds r2, 1 | r2++;
0x0000f068 mov r4, sl | r4 = sl;
0x0000f06a cmp r2, sb |
| if (r2 <= sb) {
0x0000f06c blo 0xef8a | goto label_4;
| }
| label_61:
0x0000f06e ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x0000f070 movs r3, 1 | r3 = 1;
0x0000f072 ldr r0, [r7, 0x28] | r0 = *((r7 + 0x28));
0x0000f074 ldr r4, [r7, 0x10] | r4 = *((r7 + 0x10));
0x0000f076 add.w r2, r8, r1 | r2 = r8 + r1;
0x0000f07a sub.w r1, sb, r1 | r1 = sb - r1;
0x0000f07e ldr.w sl, [r7, 0x5c] | sl = *((r7 + 0x5c));
0x0000f082 add r0, r4 | r0 += r4;
0x0000f084 bl 0xff98 | fcn_0000ff98 (r0, r1, r2, r3);
0x0000f088 ldr.w r3, [pc, 0x994] | r3 = *(0x0000fa20);
0x0000f08c add r3, pc | r3 += pc;
0x0000f08e ldr.w r3, [r3, 0x1dc] | r3 = *((r3 + 0x1dc));
0x0000f092 cmp r3, 0 |
| if (r3 == 0) {
0x0000f094 beq.w 0xf400 | goto label_68;
| }
0x0000f098 ldr.w r3, [pc, 0x988] | r3 = *(0x0000fa24);
0x0000f09c ldr r2, [r7, 0x3c] | r2 = *((r7 + 0x3c));
0x0000f09e add r3, pc | r3 += pc;
0x0000f0a0 ldr r3, [r3, r2] | r3 = *((r3 + r2));
0x0000f0a2 ldrb.w r3, [r3, 0x199] | r3 = *((r3 + 0x199));
0x0000f0a6 eor r3, r3, 8 | r3 ^= 8;
0x0000f0aa ubfx r3, r3, 3, 1 | r3 = (r3 >> 3) & ((1 << 1) - 1);
0x0000f0ae str r3, [r7, 0x48] | *((r7 + 0x48)) = r3;
| label_19:
0x0000f0b0 ldr r3, [r7, 0x28] | r3 = *((r7 + 0x28));
0x0000f0b2 movs r6, 0 | r6 = 0;
0x0000f0b4 mov.w r2, -1 | r2 = -1;
0x0000f0b8 strd r6, sb, [r7, 0x50] | __asm ("strd r6, sb, [r7, 0x50]");
0x0000f0bc str r6, [r7, 0x4c] | *((r7 + 0x4c)) = r6;
0x0000f0be subs r3, 4 | r3 -= 4;
0x0000f0c0 str r2, [r7, 0x58] | *((r7 + 0x58)) = r2;
0x0000f0c2 str r3, [r7, 0x5c] | *((r7 + 0x5c)) = r3;
0x0000f0c4 add.w r3, r8, -1 | r3 = r8 + -1;
0x0000f0c8 mov sb, r3 | sb = r3;
0x0000f0ca str r6, [r7, 0x24] | *((r7 + 0x24)) = r6;
0x0000f0cc str.w r8, [r7, 4] | __asm ("str.w r8, [r7, 4]");
0x0000f0d0 b 0xf146 |
| while (r2 == 0) {
0x0000f0d2 cmp r1, 2 |
| if (r1 != 2) {
0x0000f0d4 bne.w 0xf8aa | goto label_69;
| }
0x0000f0d8 ldrb.w r2, [r4, 0x19b] | r2 = *((r4 + 0x19b));
0x0000f0dc cmp r2, 0 |
| if (r2 != 0) {
0x0000f0de bne.w 0xf8aa | goto label_69;
| }
0x0000f0e2 lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
| if (r2 < r3) {
0x0000f0e4 bpl 0xf10c |
0x0000f0e6 ldr.w r3, [pc, 0x940] | r3 = *(0x0000fa28);
0x0000f0ea add r3, pc | r3 += pc;
0x0000f0ec ldr r3, [r3] | r3 = *(r3);
0x0000f0ee lsls r3, r3, 0x1e | r3 <<= 0x1e;
| if (r3 < r3) {
0x0000f0f0 bmi.w 0xf38e | goto label_70;
| }
| label_15:
0x0000f0f4 ldr.w r3, [r4, 0x88] | r3 = *((r4 + 0x88));
0x0000f0f8 cmp r3, 0 |
| if (r3 == 0) {
0x0000f0fa beq.w 0xf30e | goto label_71;
| }
| label_12:
0x0000f0fe ldr.w r1, [pc, 0x92c] | r1 = *(0x0000fa2c);
0x0000f102 mov r2, r4 | r2 = r4;
0x0000f104 movs r0, 0 | r0 = 0;
0x0000f106 add r1, pc | r1 += pc;
0x0000f108 blx 0x9d0 | fcn_000009d0 ();
| }
0x0000f10c ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x0000f10e cmp r3, 0 |
| if (r3 != 0) {
0x0000f110 bne.w 0xf31e | goto label_72;
| }
| label_13:
0x0000f114 ldrb.w r3, [r4, 0x199] | r3 = *((r4 + 0x199));
0x0000f118 orr r3, r3, 0x20 | r3 |= 0x20;
0x0000f11c strb.w r3, [r4, 0x199] | *((r4 + 0x199)) = r3;
0x0000f120 ldrb.w r3, [r4, 0x198] | r3 = *((r4 + 0x198));
0x0000f124 lsls r5, r3, 0x1b | r5 = r3 << 0x1b;
| if (r5 < r3) {
0x0000f126 bpl 0xf12e |
0x0000f128 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x0000f12a adds r3, 1 | r3++;
0x0000f12c str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
| }
0x0000f12e ldr r3, [r7, 0x58] | r3 = *((r7 + 0x58));
0x0000f130 cmp r3, r6 |
0x0000f132 it hs |
| if (r3 < r6) {
0x0000f134 movhs r3, r6 | r3 = r6;
| }
0x0000f136 str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x0000f138 movs r3, 1 | r3 = 1;
0x0000f13a str r3, [r7, 0x50] | *((r7 + 0x50)) = r3;
| label_5:
0x0000f13c ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x0000f13e adds r6, 1 | r6++;
0x0000f140 cmp r3, r6 |
| if (r3 < r6) {
0x0000f142 bls.w 0xf2be | goto label_73;
| }
| label_9:
0x0000f146 ldr r3, [r7, 0x5c] | r3 = *((r7 + 0x5c));
0x0000f148 ldr r4, [r3, 4]! | r4 = *((r3 += 4));
0x0000f14c str r3, [r7, 0x5c] | *((r7 + 0x5c)) = r3;
0x0000f14e ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0000f150 cmp r3, sl |
| if (r3 != sl) {
0x0000f152 bne.w 0xf818 | goto label_74;
| }
0x0000f156 ldrb r2, [sb, 1]! | r2 = *((sb += 1));
0x0000f15a ldrb.w r3, [r4, 0x198] | r3 = *((r4 + 0x198));
0x0000f15e and r1, r3, 3 | r1 = r3 & 3;
0x0000f162 cmp r2, 0 |
0x0000f164 beq 0xf0d2 |
| }
0x0000f166 cmp r1, 2 |
| if (r1 != 2) {
0x0000f168 bne 0xf13c | goto label_5;
| }
0x0000f16a ldr.w r3, [r4, 0x160] | r3 = *((r4 + 0x160));
0x0000f16e cmp r3, 0 |
| if (r3 == 0) {
0x0000f170 beq.w 0xf39e | goto label_75;
| }
0x0000f174 ldr.w r3, [r4, 0x1d4] | r3 = *((r4 + 0x1d4));
0x0000f178 ldr r2, [r3] | r2 = *(r3);
0x0000f17a str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x0000f17c cmp r2, 0 |
| if (r2 == 0) {
0x0000f17e beq.w 0xf296 | goto label_14;
| }
0x0000f182 mov.w ip, 1 |
0x0000f186 movs r3, 0 | r3 = 0;
0x0000f188 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
| label_16:
0x0000f18a ldr r0, [r7, 0x40] | r0 = *((r7 + 0x40));
0x0000f18c add.w r5, r4, 0x168 | r5 = r4 + 0x168;
0x0000f190 mov r1, r2 | r1 = r2;
0x0000f192 mov.w r8, 0 | r8 = 0;
0x0000f196 b 0xf1b8 |
| while (r5 != r1) {
0x0000f198 sub.w r1, r1, 0x160 | r1 -= 0x160;
0x0000f19c ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x0000f19e cmp r3, sl |
| if (r3 != sl) {
0x0000f1a0 bne.w 0xf9f0 | goto label_37;
| }
0x0000f1a4 ldr.w r3, [r1, 0x214] | r3 = *((r1 + 0x214));
0x0000f1a8 adds r3, 1 | r3++;
0x0000f1aa it ne |
| if (r3 == 1) {
0x0000f1ac movne r8, 1 | r8 = 1;
| }
| if (r3 == 1) {
0x0000f1b0 beq 0xf1bc | goto label_76;
| }
0x0000f1b2 ldr r1, [r0, 4]! | r1 = *((r0 += 4));
| if (r1 == 0) {
0x0000f1b6 cbz r1, 0xf1c8 | goto label_77;
| }
| label_6:
0x0000f1b8 cmp r5, r1 |
0x0000f1ba bne 0xf198 |
| }
| label_76:
0x0000f1bc ldr r1, [r0, 4]! | r1 = *((r0 += 4));
0x0000f1c0 add.w ip, ip, 1 |
0x0000f1c4 cmp r1, 0 |
| if (r1 != 0) {
0x0000f1c6 bne 0xf1b8 | goto label_6;
| }
| label_77:
0x0000f1c8 cmp.w r8, 0 |
| if (r8 == 0) {
0x0000f1cc beq.w 0xf380 | goto label_78;
| }
0x0000f1d0 ldr r0, [r7, 0x40] | r0 = *((r7 + 0x40));
0x0000f1d2 add.w r3, r4, 0x1c0 | r3 = r4 + 0x1c0;
0x0000f1d6 mov r1, r3 | r1 = r3;
0x0000f1d8 cmp.w ip, 3 |
0x0000f1dc str r3, [r7, 0x2c] | *((r7 + 0x2c)) = r3;
0x0000f1de ite hi |
| if (ip <= 3) {
0x0000f1e0 movhi r3, 0 | r3 = 0;
| }
| if (ip > 3) {
0x0000f1e2 movls r3, 1 | r3 = 1;
| }
0x0000f1e4 cmp r1, r0 |
0x0000f1e6 it eq |
| if (r1 != r0) {
0x0000f1e8 moveq r3, 0 | r3 = 0;
| }
0x0000f1ea cmp r3, 0 |
| if (r3 != 0) {
0x0000f1ec bne.w 0xf3ba | goto label_79;
| }
0x0000f1f0 ldr.w r2, [r4, 0x1d0] | r2 = *((r4 + 0x1d0));
0x0000f1f4 ldr.w r3, [pc, 0x838] | r3 = *(0x0000fa30);
0x0000f1f8 str r2, [r7, 0x20] | *((r7 + 0x20)) = r2;
0x0000f1fa add r3, pc | r3 += pc;
0x0000f1fc lsls r0, r2, 2 | r0 = r2 << 2;
0x0000f1fe ldr r3, [r3] | r3 = *(r3);
0x0000f200 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0000f202 cmp r0, 0 |
| if (r0 == 0) {
0x0000f204 beq.w 0xf9e0 | goto label_80;
| }
0x0000f208 ldr.w r3, [r4, 0x1d4] | r3 = *((r4 + 0x1d4));
0x0000f20c ldr r2, [r3] | r2 = *(r3);
0x0000f20e str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x0000f210 cmp r2, 0 |
| if (r2 == 0) {
0x0000f212 beq.w 0xf720 | goto label_81;
| }
| label_17:
0x0000f216 movs r3, 0 | r3 = 0;
0x0000f218 str.w sb, [r7, 0x1c] | __asm ("str.w sb, [r7, 0x1c]");
0x0000f21c ldr.w lr, [r7, 0x40] |
0x0000f220 mov sb, r8 | sb = r8;
0x0000f222 mov ip, r3 |
0x0000f224 mov r8, r4 | r8 = r4;
0x0000f226 ldr r4, [r7, 0x38] | r4 = *((r7 + 0x38));
0x0000f228 str r6, [r7, 0x38] | *((r7 + 0x38)) = r6;
0x0000f22a b 0xf23e | goto label_8;
| if (r4 == 0) {
| label_7:
0x0000f22c cbz r4, 0xf238 | void (*0xf238)() ();
| }
| label_8:
0x0000f23e cmp r5, r2 |
0x0000f240 add.w r1, r0, ip | r1 = r0 + ip;
| if (r5 == r2) {
0x0000f244 beq 0xf24e | goto label_82;
| }
0x0000f246 ldr.w r6, [r2, 0xb4] | r6 = *((r2 + 0xb4));
0x0000f24a adds r6, 1 | r6++;
| if (r6 != 1) {
0x0000f24c bne 0xf22c | goto label_7;
| }
| label_82:
0x0000f24e str r2, [r1] | *(r1) = r2;
0x0000f250 adds r3, 1 | r3++;
0x0000f252 ldr r2, [lr, 4]! | r2 = *((lr += 4));
0x0000f256 lsl.w ip, r3, 2 |
0x0000f25a cmp r2, 0 |
| if (r2 != 0) {
0x0000f25c bne 0xf23e | goto label_8;
| }
0x0000f25e mov r4, r8 | r4 = r8;
0x0000f260 ldr r6, [r7, 0x38] | r6 = *((r7 + 0x38));
0x0000f262 mov r8, sb | r8 = sb;
0x0000f264 ldr.w sb, [r7, 0x1c] | sb = *((r7 + 0x1c));
0x0000f268 add ip, r0 |
| label_26:
0x0000f26a movs r3, 0 | r3 = 0;
0x0000f26c str.w r3, [ip] | __asm ("str.w r3, [ip]");
0x0000f270 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x0000f272 str.w r0, [r4, 0x1d4] | __asm ("str.w r0, [r4, 0x1d4]");
0x0000f276 ldr r0, [r7, 0x40] | r0 = *((r7 + 0x40));
0x0000f278 cmp r3, r0 |
0x0000f27a it eq |
| if (r3 == r0) {
0x0000f27c streq r8, [r7, 0x24] | *((r7 + 0x24)) = r8;
| goto label_83;
| }
| if (r3 == r0) {
| label_83:
0x0000f280 beq 0xf290 | void (*0xf290)() ();
| }
| label_14:
0x0000f296 ldr.w r3, [r4, 0x170] | r3 = *((r4 + 0x170));
| if (r3 != 0) {
0x0000f29a cbz r3, 0xf2aa |
0x0000f29c ldr.w r3, [r3, 0x214] | r3 = *((r3 + 0x214));
0x0000f2a0 adds r3, 1 | r3++;
0x0000f2a2 itt ne |
| if (r3 == 1) {
0x0000f2a4 movne r3, 0 | r3 = 0;
| }
| if (r3 != 1) {
0x0000f2a6 strne r3, [r4, 0x170] | *((r4 + 0x170)) = r3;
| goto label_84;
| }
| }
| label_84:
0x0000f2aa ldr r3, [r7, 0x58] | r3 = *((r7 + 0x58));
0x0000f2ac cmp r3, r6 |
0x0000f2ae it hs |
| if (r3 < r6) {
0x0000f2b0 movhs r3, r6 | r3 = r6;
| }
0x0000f2b2 adds r6, 1 | r6++;
0x0000f2b4 str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x0000f2b6 ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x0000f2b8 cmp r3, r6 |
| if (r3 > r6) {
0x0000f2ba bhi.w 0xf146 | goto label_9;
| }
| label_73:
0x0000f2be mov sb, r3 | sb = r3;
0x0000f2c0 ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x0000f2c2 ldr.w r8, [r7, 4] | r8 = *((r7 + 4));
0x0000f2c6 cmp r3, 0 |
| if (r3 != 0) {
0x0000f2c8 bne.w 0xf404 | goto label_85;
| }
| label_21:
0x0000f2cc ldr.w r3, [pc, 0x764] | r3 = *(0x0000fa34);
0x0000f2d0 add r3, pc | r3 += pc;
0x0000f2d2 ldr r2, [r3] | r2 = *(r3);
0x0000f2d4 cmp r2, 2 |
| if (r2 != 2) {
0x0000f2d6 bne.w 0xf89e | goto label_86;
| }
0x0000f2da ldr.w sp, [r7, 0x18] | sp = *((r7 + 0x18));
0x0000f2de b 0xeefa | goto label_10;
| label_62:
0x0000f2e0 ldr.w r3, [r5, 0x194] | r3 = *((r5 + 0x194));
0x0000f2e4 cmp r3, 0 |
| if (r3 != 0) {
0x0000f2e6 bne.w 0xefa2 | goto label_11;
| }
0x0000f2ea ldrb.w r3, [r5, 0x19b] | r3 = *((r5 + 0x19b));
0x0000f2ee cmp r3, 0 |
| if (r3 != 0) {
0x0000f2f0 bne.w 0xefa2 | goto label_11;
| }
0x0000f2f4 ldr.w r3, [r5, 0x24c] | r3 = *((r5 + 0x24c));
0x0000f2f8 dmb ish | __asm ("dmb ish");
0x0000f2fc cmp r3, 0 |
| if (r3 != 0) {
0x0000f2fe bne.w 0xefa2 | goto label_11;
| }
0x0000f302 ldrb.w r3, [r8, r2] | r3 = *((r8 + r2));
0x0000f306 cmp r3, 0 |
| if (r3 != 0) {
0x0000f308 bne.w 0xefa2 | goto label_11;
| }
0x0000f30c b 0xef84 | goto label_3;
| label_71:
0x0000f30e ldr r3, [r4, 0x54] | r3 = *((r4 + 0x54));
0x0000f310 cmp r3, 0 |
| if (r3 != 0) {
0x0000f312 bne.w 0xf0fe | goto label_12;
| }
0x0000f316 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x0000f318 cmp r3, 0 |
| if (r3 == 0) {
0x0000f31a beq.w 0xf114 | goto label_13;
| }
| label_72:
0x0000f31e ldr.w r2, [pc, 0x718] | r2 = *(0x0000fa38);
0x0000f322 add r2, pc | r2 += pc;
0x0000f324 ldrd r5, r3, [r2, 0x1d8] | __asm ("ldrd r5, r3, [r2, 0x1d8]");
0x0000f328 cmp r3, 0 |
| if (r3 == 0) {
0x0000f32a beq.w 0xf114 | goto label_13;
| }
0x0000f32e ldr.w r3, [pc, 0x70c] | r3 = *(0x0000fa3c);
0x0000f332 mov.w r8, 0 | r8 = 0;
0x0000f336 str.w sb, [r7, 0x50] | __asm ("str.w sb, [r7, 0x50]");
0x0000f33a str.w sl, [r7, 0x40] | __asm ("str.w sl, [r7, 0x40]");
0x0000f33e mov sl, r2 | sl = r2;
0x0000f340 add r3, pc | r3 += pc;
0x0000f342 str r6, [r7, 0x38] | *((r7 + 0x38)) = r6;
0x0000f344 add.w r1, r3, 0x7f8 | r1 = r3 + 0x7f8;
0x0000f348 add.w r3, r4, 0x260 | r3 = r4 + 0x260;
0x0000f34c mov sb, r1 | sb = r1;
0x0000f34e mov r6, r3 | r6 = r3;
| do {
0x0000f350 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
| if (r2 != 0) {
0x0000f352 cbz r2, 0xf360 |
0x0000f354 ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x0000f356 cmp r4, r3 |
0x0000f358 ite ne |
| if (r4 == r3) {
0x0000f35a movne r0, r6 | r0 = r6;
| }
| if (r4 != r3) {
0x0000f35c moveq r0, sb | r0 = sb;
| }
0x0000f35e blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r3);
| }
0x0000f360 ldr.w r2, [sl, 0x1dc] | r2 = *((sl + 0x1dc));
0x0000f364 add.w r8, r8, 1 | r8++;
0x0000f368 ldr r5, [r5, 0x20] | r5 = *((r5 + 0x20));
0x0000f36a add.w sb, sb, 8 | sb += 8;
0x0000f36e adds r6, 8 | r6 += 8;
0x0000f370 cmp r2, r8 |
0x0000f372 bhi 0xf350 |
| } while (r2 > r8);
0x0000f374 ldr.w sb, [r7, 0x50] | sb = *((r7 + 0x50));
0x0000f378 ldr.w sl, [r7, 0x40] | sl = *((r7 + 0x40));
0x0000f37c ldr r6, [r7, 0x38] | r6 = *((r7 + 0x38));
0x0000f37e b 0xf114 | goto label_13;
| label_78:
0x0000f380 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x0000f382 cmp r3, 0 |
| if (r3 == 0) {
0x0000f384 beq 0xf296 | goto label_14;
| }
| label_18:
0x0000f386 movs r3, 0 | r3 = 0;
0x0000f388 strd r3, r3, [r4, 0x160] | __asm ("strd r3, r3, [r4, 0x160]");
0x0000f38c b 0xf296 | goto label_14;
| label_70:
0x0000f38e ldr.w r0, [pc, 0x6b0] | r0 = *(0x0000fa40);
0x0000f392 mov r2, sl | r2 = sl;
0x0000f394 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0000f396 add r0, pc | r0 += pc;
0x0000f398 bl 0xc1f0 | fcn_0000c1f0 ();
0x0000f39c b 0xf0f4 | goto label_15;
| label_75:
0x0000f39e ldr.w r3, [r4, 0x1f8] | r3 = *((r4 + 0x1f8));
0x0000f3a2 str r3, [r7, 0x38] | *((r7 + 0x38)) = r3;
| if (r3 != 0) {
0x0000f3a4 cbnz r3, 0xf3c2 | goto label_87;
| }
0x0000f3a6 ldr.w r3, [r4, 0x1d4] | r3 = *((r4 + 0x1d4));
0x0000f3aa mov.w ip, 1 |
0x0000f3ae ldr r2, [r3] | r2 = *(r3);
0x0000f3b0 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x0000f3b2 cmp r2, 0 |
| if (r2 != 0) {
0x0000f3b4 bne.w 0xf18a | goto label_16;
| }
0x0000f3b8 b 0xf296 | goto label_14;
| label_79:
0x0000f3ba movs r3, 4 | r3 = 4;
0x0000f3bc ldr r0, [r7, 0x2c] | r0 = *((r7 + 0x2c));
0x0000f3be str r3, [r7, 0x20] | *((r7 + 0x20)) = r3;
0x0000f3c0 b 0xf216 | goto label_17;
| label_87:
0x0000f3c2 ldr r2, [r7, 0x38] | r2 = *((r7 + 0x38));
0x0000f3c4 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0000f3c6 cmp r3, 0 |
| if (r3 == 0) {
0x0000f3c8 beq.w 0xf812 | goto label_88;
| }
0x0000f3cc adds r2, 4 | r2 += 4;
0x0000f3ce movs r3, 1 | r3 = 1;
| do {
0x0000f3d0 ldr r1, [r2, 4]! | r1 = *((r2 += 4));
0x0000f3d4 mov r0, r3 | r0 = r3;
0x0000f3d6 adds r3, 1 | r3++;
0x0000f3d8 cmp r1, 0 |
0x0000f3da bne 0xf3d0 |
| } while (r1 != 0);
0x0000f3dc adds r2, r0, 2 | r2 = r0 + 2;
0x0000f3de lsls r2, r2, 2 | r2 <<= 2;
| label_32:
0x0000f3e0 ldr r1, [r7, 0x38] | r1 = *((r7 + 0x38));
0x0000f3e2 add r1, r2 | r1 += r2;
0x0000f3e4 add.w r2, r4, 0x160 | r2 = r4 + 0x160;
0x0000f3e8 strd r1, r3, [r4, 0x160] | __asm ("strd r1, r3, [r4, 0x160]");
0x0000f3ec ldr.w r3, [r4, 0x1d4] | r3 = *((r4 + 0x1d4));
0x0000f3f0 str r2, [r7, 0x38] | *((r7 + 0x38)) = r2;
0x0000f3f2 ldr r2, [r3] | r2 = *(r3);
0x0000f3f4 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x0000f3f6 cmp r2, 0 |
| if (r2 == 0) {
0x0000f3f8 beq 0xf386 | goto label_18;
| }
0x0000f3fa mov.w ip, 2 |
0x0000f3fe b 0xf18a | goto label_16;
| label_68:
0x0000f400 str r3, [r7, 0x48] | *((r7 + 0x48)) = r3;
0x0000f402 b 0xf0b0 | goto label_19;
| label_85:
0x0000f404 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x0000f406 cmp r3, 0 |
| if (r3 != 0) {
0x0000f408 bne.w 0xf904 | goto label_89;
| }
| label_35:
0x0000f40c mov r1, sl | r1 = sl;
0x0000f40e movs r0, 0 | r0 = 0;
0x0000f410 bl 0xbdf0 | fcn_0000bdf0 (r0);
0x0000f414 movs r3, 2 | r3 = 2;
0x0000f416 str r0, [r7, 0x40] | *((r7 + 0x40)) = r0;
0x0000f418 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0000f41a bl 0xbdec | dl_debug_state ();
0x0000f41e ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x0000f420 mrc p15, 0, lr, c13, c0, 3 | __asm ("mrc p15, 0, lr, c13, c0, 3");
0x0000f424 cmp r3, 0 |
| if (r3 != 0) {
0x0000f426 bne.w 0xf7b0 | goto label_90;
| }
0x0000f42a sub.w lr, lr, 0x540 | lr -= 0x540;
0x0000f42e ldr.w r3, [lr] | r3 = *(lr);
| if (r3 != 0) {
0x0000f432 cbz r3, 0xf45c |
0x0000f434 ldr r3, [r7, 0x24] | r3 = *((r7 + 0x24));
| if (r3 == 0) {
0x0000f436 cbnz r3, 0xf448 |
0x0000f438 ldr.w r3, [pc, 0x608] | r3 = *(0x0000fa44);
0x0000f43c add r3, pc | r3 += pc;
0x0000f43e ldr.w r3, [r3, 0x89c] | r3 = *((r3 + 0x89c));
| if (r3 == 0) {
0x0000f442 cbz r3, 0xf45c | goto label_29;
| }
| label_30:
0x0000f444 ldr r3, [r3] | r3 = *(r3);
| if (r3 == 0) {
0x0000f446 cbz r3, 0xf45c | goto label_29;
| }
| }
0x0000f448 bl 0x10308 | fcn_00010308 (r0);
0x0000f44c ldr.w r3, [pc, 0x5f8] | r3 = *(0x0000fa48);
0x0000f450 add r3, pc | r3 += pc;
0x0000f452 ldr.w r4, [r3, 0x89c] | r4 = *((r3 + 0x89c));
0x0000f456 cmp r4, 0 |
| if (r4 != 0) {
0x0000f458 bne.w 0xf78e | goto label_91;
| }
| }
| label_29:
0x0000f45c ldr.w r4, [pc, 0x5ec] | r4 = *(0x0000fa4c);
0x0000f460 ldr.w r3, [pc, 0x5ec] | r3 = *(0x0000fa50);
0x0000f464 add r4, pc | r4 += pc;
0x0000f466 addw r4, r4, 0x55c | __asm ("addw r4, r4, 0x55c");
0x0000f46a add r3, pc | r3 += pc;
0x0000f46c ldr r3, [r3] | r3 = *(r3);
0x0000f46e mov r0, r4 | r0 = r4;
0x0000f470 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000f472 ldr r3, [r7, 0x58] | r3 = *((r7 + 0x58));
0x0000f474 cmp r3, sb |
| if (r3 >= sb) {
0x0000f476 bhs.w 0xf99e | goto label_92;
| }
0x0000f47a ldr r2, [r7, 0x58] | r2 = *((r7 + 0x58));
0x0000f47c add.w r3, sb, -1 | r3 = sb + -1;
0x0000f480 ldr r1, [r7, 0x28] | r1 = *((r7 + 0x28));
0x0000f482 str.w sl, [r7, 0x38] | __asm ("str.w sl, [r7, 0x38]");
0x0000f486 subs r6, r2, 1 | r6 = r2 - 1;
0x0000f488 add r6, r8 | r6 += r8;
0x0000f48a add.w r5, r1, r2, lsl 2 | r5 = r1 + (r2 << 2);
0x0000f48e add.w r2, r8, r3 | r2 = r8 + r3;
0x0000f492 ldr.w r3, [pc, 0x5c0] | r3 = *(0x0000fa54);
0x0000f496 mov r8, r2 | r8 = r2;
0x0000f498 ldr r1, [r7, 0x3c] | r1 = *((r7 + 0x3c));
0x0000f49a add r3, pc | r3 += pc;
0x0000f49c add r3, r1 | r3 += r1;
0x0000f49e str r3, [r7, 0x2c] | *((r7 + 0x2c)) = r3;
0x0000f4a0 ldr.w r3, [pc, 0x5b4] | r3 = *(0x0000fa58);
0x0000f4a4 add r3, pc | r3 += pc;
0x0000f4a6 str r3, [r7, 0x5c] | *((r7 + 0x5c)) = r3;
0x0000f4a8 movs r3, 0 | r3 = 0;
0x0000f4aa str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x0000f4ac strd r3, r3, [r7, 0x54] | __asm ("strd r3, r3, [r7, 0x54]");
| label_20:
0x0000f4b0 ldrb r2, [r6, 1]! | r2 = *((r6 += 1));
0x0000f4b4 ldr r4, [r5], 4 | r4 = *(r5);
| r5 += 4;
0x0000f4b8 cmp r2, 0 |
| if (r2 != 0) {
0x0000f4ba bne.w 0xf60c | goto label_93;
| }
0x0000f4be ldrb.w r3, [r4, 0x198] | r3 = *((r4 + 0x198));
0x0000f4c2 and r1, r3, 3 | r1 = r3 & 3;
0x0000f4c6 cmp r1, 2 |
| if (r1 != 2) {
0x0000f4c8 bne.w 0xf98a | goto label_94;
| }
0x0000f4cc ldr.w r1, [r4, 0x238] | r1 = *((r4 + 0x238));
0x0000f4d0 cmp r1, 0 |
| if (r1 != 0) {
0x0000f4d2 bne.w 0xf6d6 | goto label_95;
| }
| label_25:
0x0000f4d6 ldr r3, [r7, 0x34] | r3 = *((r7 + 0x34));
| if (r3 != 0) {
0x0000f4d8 cbz r3, 0xf504 |
0x0000f4da ldr.w r3, [pc, 0x580] | r3 = *(0x0000fa5c);
0x0000f4de ldr r0, [r7, 0x30] | r0 = *((r7 + 0x30));
0x0000f4e0 add r3, pc | r3 += pc;
0x0000f4e2 ldr r3, [r3] | r3 = *(r3);
0x0000f4e4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000f4e6 ldr.w r2, [pc, 0x578] | r2 = *(0x0000fa60);
0x0000f4ea ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x0000f4ec add r2, pc | r2 += pc;
0x0000f4ee add r2, r3 | r2 += r3;
0x0000f4f0 ldr r3, [r2, 0x30] | r3 = *((r2 + 0x30));
0x0000f4f2 cmp r3, 0 |
| if (r3 != 0) {
0x0000f4f4 bne.w 0xf694 | goto label_96;
| }
| label_23:
0x0000f4f8 ldr.w r3, [pc, 0x568] | r3 = *(0x0000fa64);
0x0000f4fc ldr r0, [r7, 0x30] | r0 = *((r7 + 0x30));
0x0000f4fe add r3, pc | r3 += pc;
0x0000f500 ldr r3, [r3] | r3 = *(r3);
0x0000f502 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x0000f504 mov r0, r4 | r0 = r4;
0x0000f506 bl 0x115a0 | fcn_000115a0 (r0);
0x0000f50a ldr r1, [r4, 0x10] | r1 = *((r4 + 0x10));
0x0000f50c cmp r1, 0 |
| if (r1 == 0) {
0x0000f50e beq.w 0xf67a | goto label_97;
| }
0x0000f512 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0000f514 str r2, [r1, 0xc] | *((r1 + 0xc)) = r2;
| label_22:
0x0000f516 ldr r3, [r7, 0x5c] | r3 = *((r7 + 0x5c));
0x0000f518 ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
0x0000f51a adds r0, r3, r0 | r0 = r3 + r0;
0x0000f51c ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0000f51e subs r3, 1 | r3--;
0x0000f520 str r3, [r0, 4] | *((r0 + 4)) = r3;
| if (r2 != 0) {
0x0000f522 cbz r2, 0xf526 |
0x0000f524 str r1, [r2, 0x10] | *((r2 + 0x10)) = r1;
| }
0x0000f526 ldr.w sb, [pc, 0x540] | sb = *(0x0000fa68);
0x0000f52a ldr.w r0, [r4, 0x174] | r0 = *((r4 + 0x174));
0x0000f52e add sb, pc | sb += pc;
0x0000f530 ldr.w r2, [sb] | r2 = *(sb);
0x0000f534 blx r2 | uint32_t (*r2)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0000f536 ldr.w r0, [r4, 0x1b0] | r0 = *((r4 + 0x1b0));
0x0000f53a adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 != r0) {
0x0000f53c beq 0xf544 |
0x0000f53e ldr.w r3, [sb] | r3 = *(sb);
0x0000f542 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x0000f544 ldr.w r3, [pc, 0x524] | r3 = *(0x0000fa6c);
0x0000f548 ldr.w r0, [r4, 0x1fc] | r0 = *((r4 + 0x1fc));
0x0000f54c add r3, pc | r3 += pc;
0x0000f54e ldr r3, [r3] | r3 = *(r3);
0x0000f550 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000f552 ldr.w r3, [pc, 0x51c] | r3 = *(0x0000fa70);
0x0000f556 add r3, pc | r3 += pc;
0x0000f558 ldr r3, [r3] | r3 = *(r3);
0x0000f55a lsls r1, r3, 0x19 | r1 = r3 << 0x19;
| if (r1 < r3) {
0x0000f55c bmi.w 0xf6c8 | goto label_98;
| }
| label_24:
0x0000f560 ldr.w r3, [pc, 0x510] | r3 = *(0x0000fa74);
0x0000f564 ldr r0, [r4, 4] | r0 = *((r4 + 4));
0x0000f566 ldr.w sb, [pc, 0x510] | sb = *(0x0000fa78);
0x0000f56a add r3, pc | r3 += pc;
0x0000f56c ldr r3, [r3] | r3 = *(r3);
0x0000f56e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000f570 ldr.w sl, [r4, 0x1c] | sl = *((r4 + 0x1c));
0x0000f574 mov r3, r4 | r3 = r4;
0x0000f576 add sb, pc | sb += pc;
0x0000f578 mov r4, sl | r4 = sl;
0x0000f57a mov sl, r3 | sl = r3;
| do {
0x0000f57c mov r0, r4 | r0 = r4;
0x0000f57e ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x0000f580 ldr r3, [r0, 8] | r3 = *((r0 + 8));
| if (r3 == 0) {
0x0000f582 cbnz r3, 0xf58a |
0x0000f584 ldr.w r3, [sb] | r3 = *(sb);
0x0000f588 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x0000f58a cmp r4, 0 |
0x0000f58c bne 0xf57c |
| } while (r4 != 0);
0x0000f58e mov r4, sl | r4 = sl;
0x0000f590 ldr.w sl, [pc, 0x4e8] | sl = *(0x0000fa7c);
0x0000f594 ldr.w r0, [r4, 0x1f8] | r0 = *((r4 + 0x1f8));
0x0000f598 add sl, pc | sl += pc;
0x0000f59a ldr.w r2, [sl] | r2 = *(sl);
0x0000f59e blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r2);
0x0000f5a0 ldr.w r0, [r4, 0x1d4] | r0 = *((r4 + 0x1d4));
0x0000f5a4 add.w r2, r4, 0x1c0 | r2 = r4 + 0x1c0;
0x0000f5a8 cmp r0, r2 |
| if (r0 != r2) {
0x0000f5aa beq 0xf5b2 |
0x0000f5ac ldr.w r3, [sl] | r3 = *(sl);
0x0000f5b0 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x0000f5b2 ldrsb.w r3, [r4, 0x198] | r3 = *((r4 + 0x198));
0x0000f5b6 cmp r3, 0 |
| if (r3 < 0) {
0x0000f5b8 bge 0xf5c8 |
0x0000f5ba ldr.w r3, [pc, 0x4c4] | r3 = *(0x0000fa80);
0x0000f5be ldr.w r0, [r4, 0x154] | r0 = *((r4 + 0x154));
0x0000f5c2 add r3, pc | r3 += pc;
0x0000f5c4 ldr r3, [r3] | r3 = *(r3);
0x0000f5c6 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| }
0x0000f5c8 ldr.w r0, [r4, 0x1a0] | r0 = *((r4 + 0x1a0));
0x0000f5cc adds r2, r0, 1 | r2 = r0 + 1;
| if (r2 != r0) {
0x0000f5ce beq 0xf5da |
0x0000f5d0 ldr.w r3, [pc, 0x4b0] | r3 = *(0x0000fa84);
0x0000f5d4 add r3, pc | r3 += pc;
0x0000f5d6 ldr r3, [r3] | r3 = *(r3);
0x0000f5d8 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x0000f5da ldr.w r0, [r4, 0x1f0] | r0 = *((r4 + 0x1f0));
0x0000f5de adds r3, r0, 1 | r3 = r0 + 1;
| if (r3 != r0) {
0x0000f5e0 beq 0xf5ec |
0x0000f5e2 ldr.w r3, [pc, 0x4a4] | r3 = *(0x0000fa88);
0x0000f5e6 add r3, pc | r3 += pc;
0x0000f5e8 ldr r3, [r3] | r3 = *(r3);
0x0000f5ea blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x0000f5ec ldr.w r3, [pc, 0x49c] | r3 = *(0x0000fa8c);
0x0000f5f0 mov r0, r4 | r0 = r4;
0x0000f5f2 add r3, pc | r3 += pc;
0x0000f5f4 ldr.w r2, [r3, 0x580] | r2 = *((r3 + 0x580));
0x0000f5f8 cmp r2, r4 |
| label_55:
0x0000f5fa itt eq |
| if (r2 != r4) {
0x0000f5fc moveq r2, 0 | r2 = 0;
| }
| if (r2 != r4) {
0x0000f5fe streq r2, [r3, 0x580] | *((r3 + 0x580)) = r2;
| }
0x0000f602 ldr.w r3, [pc, 0x48c] | r3 = *(0x0000fa90);
0x0000f606 add r3, pc | r3 += pc;
0x0000f608 ldr r3, [r3] | r3 = *(r3);
0x0000f60a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
| label_93:
0x0000f60c cmp r8, r6 |
| if (r8 != r6) {
0x0000f60e bne.w 0xf4b0 | goto label_20;
| }
0x0000f612 ldr.w r4, [pc, 0x480] | r4 = *(0x0000fa94);
0x0000f616 ldr.w r3, [pc, 0x480] | r3 = *(0x0000fa98);
0x0000f61a ldr.w sl, [r7, 0x38] | sl = *((r7 + 0x38));
0x0000f61e add r4, pc | r4 += pc;
0x0000f620 add r3, pc | r3 += pc;
0x0000f622 addw r0, r4, 0x55c | __asm ("addw r0, r4, 0x55c");
0x0000f626 ldr r3, [r3] | r3 = *(r3);
0x0000f628 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000f62a ldr r3, [r7, 0x58] | r3 = *((r7 + 0x58));
| if (r3 != 0) {
0x0000f62c cbz r3, 0xf64c |
0x0000f62e ldr.w r3, [r4, 0x898] | r3 = *((r4 + 0x898));
0x0000f632 adds r3, 1 | r3++;
| if (r3 == 1) {
0x0000f634 beq.w 0xf896 | goto label_99;
| }
0x0000f638 ldr r2, [r7, 0x4c] | r2 = *((r7 + 0x4c));
0x0000f63a str.w r3, [r4, 0x898] | __asm ("str.w r3, [r4, 0x898]");
0x0000f63e ldr.w r3, [r4, 0x88c] | r3 = *((r4 + 0x88c));
0x0000f642 cmp r3, r2 |
0x0000f644 itt eq |
| if (r3 != r2) {
0x0000f646 ldreq r3, [r7, 0x54] | r3 = *((r7 + 0x54));
| }
| if (r3 == r2) {
0x0000f648 streq r3, [r4, 0x88c] | *((r4 + 0x88c)) = r3;
| goto label_36;
| }
| }
| label_36:
0x0000f64c ldr.w r1, [pc, 0x44c] | r1 = *(0x0000fa9c);
0x0000f650 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x0000f652 add r1, pc | r1 += pc;
0x0000f654 ldr r6, [r1, r3] | r6 = *((r1 + r3));
0x0000f656 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x0000f658 cmp r3, 0 |
| if (r3 != 0) {
0x0000f65a bne.w 0xf82c | goto label_100;
| }
| label_34:
0x0000f65e ldr.w r3, [pc, 0x440] | r3 = *(0x0000faa0);
0x0000f662 ldr r2, [r7, 0x3c] | r2 = *((r7 + 0x3c));
0x0000f664 add r3, pc | r3 += pc;
0x0000f666 ldr r3, [r3, r2] | r3 = *((r3 + r2));
0x0000f668 cmp r3, 0 |
| if (r3 == 0) {
0x0000f66a beq.w 0xf8d4 | goto label_101;
| }
| label_33:
0x0000f66e ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x0000f670 movs r3, 0 | r3 = 0;
0x0000f672 str r3, [r2, 0xc] | *((r2 + 0xc)) = r3;
0x0000f674 bl 0xbdec | dl_debug_state ();
0x0000f678 b 0xf2cc | goto label_21;
| label_97:
0x0000f67a ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x0000f67c cmp r3, 0 |
| if (r3 == 0) {
0x0000f67e beq.w 0xf9aa | goto label_102;
| }
0x0000f682 ldr.w r3, [pc, 0x420] | r3 = *(0x0000faa4);
0x0000f686 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0000f688 ldr r0, [r7, 0x3c] | r0 = *((r7 + 0x3c));
0x0000f68a add r3, pc | r3 += pc;
0x0000f68c str r2, [r3, r0] | *((r3 + r0)) = r2;
0x0000f68e ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x0000f690 str r2, [r3, 4] | *((r3 + 4)) = r2;
0x0000f692 b 0xf516 | goto label_22;
| label_96:
0x0000f694 ldr r1, [r2, 0x34] | r1 = *((r2 + 0x34));
0x0000f696 cmp r1, 0 |
| if (r1 == 0) {
0x0000f698 beq.w 0xf4f8 | goto label_23;
| }
0x0000f69c ldr.w ip, [r7, 0x2c] | ip = *((r7 + 0x2c));
0x0000f6a0 add.w r1, r3, r1, lsl 4 | r1 = r3 + (r1 << 4);
0x0000f6a4 movs r0, 0 | r0 = 0;
| do {
0x0000f6a6 ldr r2, [r3, 4] | r2 = *((r3 + 4));
| if (r2 != 0) {
0x0000f6a8 cbz r2, 0xf6c0 |
0x0000f6aa ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x0000f6ac cmp r2, r4 |
0x0000f6ae itttt eq |
| if (r2 == r4) {
0x0000f6b0 strdeq r0, r0, [r3] | __asm ("strdeq r0, r0, [r3]");
| }
| if (r2 != r4) {
0x0000f6b4 ldreq r2, [ip, 0x38] | r2 = *((ip + 0x38));
| }
| if (r2 == r4) {
0x0000f6b8 add.w r2, r2, -1 | r2 += -1;
| }
| if (r2 != r4) {
0x0000f6bc str.w r2, [ip, 0x38] | __asm ("str.w r2, [ip, 0x38]");
| goto label_103;
| }
| }
| label_103:
0x0000f6c0 adds r3, 0x10 | r3 += 0x10;
0x0000f6c2 cmp r1, r3 |
0x0000f6c4 bne 0xf6a6 |
| } while (r1 != r3);
0x0000f6c6 b 0xf4f8 | goto label_23;
| label_98:
0x0000f6c8 ldr r0, [pc, 0x3dc] |
0x0000f6ca ldr r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0000f6cc ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0000f6ce add r0, pc | r0 = 0x1f17a;
0x0000f6d0 bl 0xc1f0 | fcn_0000c1f0 ();
0x0000f6d4 b 0xf560 | goto label_24;
| label_95:
0x0000f6d6 ldr.w sb, [pc, 0x3d4] | sb = *(0x0000faac);
0x0000f6da add sb, pc | sb += pc;
0x0000f6dc ldr.w r1, [sb, 0x884] | r1 = *((sb + 0x884));
| if (r1 != 0) {
0x0000f6e0 cbz r1, 0xf6f8 |
0x0000f6e2 ldr.w r0, [r4, 0x248] | r0 = *((r4 + 0x248));
0x0000f6e6 ubfx r3, r3, 3, 1 | r3 = (r3 >> 3) & ((1 << 1) - 1);
0x0000f6ea bl 0xedcc | r0 = fcn_0000edcc (r0, r1, r2, r3);
| if (r0 != 0) {
0x0000f6ee cbnz r0, 0xf6f8 | goto label_104;
| }
0x0000f6f0 ldr.w r3, [sb, 0x888] | r3 = *((sb + 0x888));
0x0000f6f4 str.w r3, [sb, 0x880] | __asm ("str.w r3, [sb, 0x880]");
| }
| label_104:
0x0000f6f8 ldr.w r3, [r4, 0x244] | r3 = *((r4 + 0x244));
0x0000f6fc adds r2, r3, 1 | r2 = r3 + 1;
0x0000f6fe cmp r2, 1 |
| if (r2 < 1) {
0x0000f700 bls 0xf71a | goto label_105;
| }
0x0000f702 ldr r2, [r7, 0x54] | r2 = *((r7 + 0x54));
| if (r2 != 0) {
0x0000f704 cbnz r2, 0xf746 | goto label_106;
| }
0x0000f706 ldr.w r2, [r4, 0x238] | r2 = *((r4 + 0x238));
0x0000f70a add r3, r2 | r3 += r2;
0x0000f70c str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x0000f70e ldr.w r3, [r4, 0x240] | r3 = *((r4 + 0x240));
0x0000f712 str r3, [r7, 0x54] | *((r7 + 0x54)) = r3;
0x0000f714 ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x0000f716 str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x0000f718 b 0xf4d6 | goto label_25;
| do {
| label_105:
0x0000f71a ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x0000f71c str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x0000f71e b 0xf4d6 | goto label_25;
| label_81:
0x0000f720 mov ip, r0 |
0x0000f722 b 0xf26a | goto label_26;
| label_65:
0x0000f724 ldr r1, [r0, 4] | r1 = *((r0 + 4));
0x0000f726 ldr r0, [pc, 0x388] |
0x0000f728 add r0, pc | r0 = 0x1f1de;
0x0000f72a bl 0xc1f0 | fcn_0000c1f0 ();
0x0000f72e b 0xf018 | goto label_27;
| label_66:
0x0000f730 ldr r3, [pc, 0x380] |
0x0000f732 movs r2, 0xfb | r2 = 0xfb;
0x0000f734 ldr r1, [pc, 0x380] |
0x0000f736 ldr r0, [pc, 0x384] |
0x0000f738 add r3, pc | r3 = 0x1f1f0;
0x0000f73a add r1, pc | r1 = 0x1f1f6;
0x0000f73c add r0, pc | r0 = 0x1f1fe;
0x0000f73e bl 0x11f30 | fcn_00011f30 (r0);
| label_57:
0x0000f742 mov r2, r3 | r2 = r3;
0x0000f744 b 0xef4a | goto label_28;
| label_106:
0x0000f746 invalid |
| label_38:
0x0000f748 movs r2, 0x38 | r2 = 0x38;
0x0000f74a ldr r1, [r7, 0x4c] | r1 = *((r7 + 0x4c));
0x0000f74c add r3, r2 | r3 += r2;
0x0000f74e ldr.w r2, [r4, 0x240] | r2 = *((r4 + 0x240));
0x0000f752 cmp r2, r1 |
| if (r2 == r1) {
0x0000f754 beq 0xf786 | goto label_107;
| }
0x0000f756 ldr r1, [r7, 0x54] | r1 = *((r7 + 0x54));
0x0000f758 cmp r3, r1 |
| if (r3 == r1) {
0x0000f75a beq.w 0xf982 | goto label_108;
| }
0x0000f75e ldr.w ip, [pc, 0x360] | ip = *(0x0000fac0);
0x0000f762 add ip, pc |
0x0000f764 ldr.w r0, [ip, 0x88c] | r0 = *((ip + 0x88c));
0x0000f768 cmp r3, r0 |
| if (r3 == r0) {
0x0000f76a beq.w 0xf978 | goto label_109;
| }
0x0000f76e ldr r1, [r7, 0x4c] | r1 = *((r7 + 0x4c));
0x0000f770 cmp r0, r1 |
| if (r0 == r1) {
0x0000f772 beq.w 0xf9be | goto label_110;
| }
0x0000f776 ldr r1, [r7, 0x4c] | r1 = *((r7 + 0x4c));
0x0000f778 cmp r2, r1 |
0x0000f77a bls 0xf71a |
| } while (r2 < r1);
0x0000f77c str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x0000f77e ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x0000f780 str r2, [r7, 0x54] | *((r7 + 0x54)) = r2;
0x0000f782 str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x0000f784 b 0xf4d6 | goto label_25;
| label_107:
0x0000f786 str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x0000f788 ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x0000f78a str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x0000f78c b 0xf4d6 | goto label_25;
| label_91:
0x0000f78e ldr r3, [r4] | r3 = *(r4);
0x0000f790 cmp r3, 0 |
| if (r3 == 0) {
0x0000f792 beq.w 0xf45c | goto label_29;
| }
0x0000f796 ldr r5, [pc, 0x32c] |
0x0000f798 add r5, pc | r5 = 0x1f262;
| do {
0x0000f79a subs r3, 1 | r3--;
0x0000f79c str r3, [r4] | *(r4) = r3;
0x0000f79e add.w r3, r4, r3, lsl 2 | r3 = r4 + (r3 << 2);
0x0000f7a2 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0000f7a4 ldr r3, [r5] | r3 = *(r5);
0x0000f7a6 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000f7a8 ldr r3, [r4] | r3 = *(r4);
0x0000f7aa cmp r3, 0 |
0x0000f7ac bne 0xf79a |
| } while (r3 != 0);
0x0000f7ae b 0xf45c | goto label_29;
| label_90:
0x0000f7b0 ldr r3, [pc, 0x314] |
0x0000f7b2 ldr r2, [r7, 0x3c] | r2 = *((r7 + 0x3c));
0x0000f7b4 add r3, pc | r3 = 0x1f280;
0x0000f7b6 add r3, r2 | r3 += r2;
0x0000f7b8 ldr r6, [r3, 8] | r6 = *(0x1f288);
0x0000f7ba ldr r3, [r6, 4] | r3 = *(0x1f28c);
| if (r3 == 0) {
0x0000f7bc cbz r3, 0xf7e4 | goto label_31;
| }
0x0000f7be ldr r5, [r6] | r5 = *(r6);
0x0000f7c0 mov r2, r3 | r2 = r3;
0x0000f7c2 add.w r1, r5, r3, lsl 2 | r1 = r5 + (r3 << 2);
0x0000f7c6 b 0xf7cc |
| while (r0 != r0) {
| label_56:
0x0000f7c8 subs r2, 1 | r2--;
| if (r2 == 1) {
0x0000f7ca beq 0xf7e2 | goto label_111;
| }
0x0000f7cc ldr r0, [r1, -0x4]! | r0 = *((r1 -= 0x4));
0x0000f7d0 ldrb.w r0, [r0, 0x199] | r0 = *((r0 + 0x199));
0x0000f7d4 ands r0, r0, 0x20 | r0 &= 0x20;
0x0000f7d8 bne 0xf7c8 |
| }
0x0000f7da ldr r1, [r7, 0x4c] | r1 = *((r7 + 0x4c));
0x0000f7dc add r1, r2 | r1 += r2;
0x0000f7de cmp r1, r3 |
| if (r1 == r3) {
0x0000f7e0 bne 0xf7ec |
| label_111:
0x0000f7e2 mov r3, r2 | r3 = r2;
| label_31:
0x0000f7e4 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x0000f7e6 sub.w r3, lr, 0x540 | r3 = lr - 0x540;
0x0000f7ea b 0xf444 | goto label_30;
| }
0x0000f7ec mov r3, r0 | r3 = r0;
0x0000f7ee sub.w ip, r5, 4 |
0x0000f7f2 mov r1, r0 | r1 = r0;
| do {
0x0000f7f4 ldr r0, [ip, 4]! | r0 = *((ip += 4));
0x0000f7f8 ldrb.w r4, [r0, 0x199] | r4 = *((r0 + 0x199));
0x0000f7fc lsls r4, r4, 0x1a | r4 <<= 0x1a;
| if (r4 >= r4) {
0x0000f7fe bmi 0xf80a |
0x0000f800 cmp r3, r1 |
0x0000f802 it ne |
| if (r3 == r1) {
0x0000f804 strne r0, [r5, r3, lsl 2] | offset_1 = r3 << 2;
| *((r5 + offset_1)) = r0;
| }
0x0000f808 adds r3, 1 | r3++;
| }
0x0000f80a adds r1, 1 | r1++;
0x0000f80c cmp r1, r2 |
0x0000f80e bne 0xf7f4 |
| } while (r1 != r2);
0x0000f810 b 0xf7e4 | goto label_31;
| label_88:
0x0000f812 movs r2, 8 | r2 = 8;
0x0000f814 movs r3, 1 | r3 = 1;
0x0000f816 b 0xf3e0 | goto label_32;
| label_74:
0x0000f818 ldr r3, [pc, 0x2b0] |
0x0000f81a movw r2, 0x119 | r2 = 0x119;
0x0000f81e ldr r1, [pc, 0x2b0] |
0x0000f820 ldr r0, [pc, 0x2b0] |
0x0000f822 add r3, pc | r3 = 0x1f2f2;
0x0000f824 add r1, pc | r1 = 0x1f2fa;
0x0000f826 add r0, pc | r0 = 0x1f2fe;
0x0000f828 bl 0x11f30 | fcn_00011f30 (r0);
| label_100:
0x0000f82c cmp r6, 0 |
| if (r6 == 0) {
0x0000f82e beq 0xf8d4 | goto label_101;
| }
0x0000f830 ldrb.w r3, [r6, 0x199] | r3 = *((r6 + 0x199));
0x0000f834 ands r3, r3, 8 | r3 &= 8;
| if (r3 != r3) {
0x0000f838 bne.w 0xf66e | goto label_33;
| }
0x0000f83c ldr r5, [pc, 0x298] |
0x0000f83e add r5, pc | r5 = 0x1f31a;
0x0000f840 ldrd r8, r2, [r5, 0x1d8] | __asm ("ldrd r8, r2, [r5, 0x1d8]");
0x0000f844 cmp r2, 0 |
| if (r2 == 0) {
0x0000f846 beq.w 0xf66e | goto label_33;
| }
0x0000f84a mov r2, r3 | r2 = r3;
0x0000f84c ldr r3, [pc, 0x28c] |
0x0000f84e add.w r4, r6, 0x260 | r4 = r6 + 0x260;
0x0000f852 str.w sl, [r7, 0x58] | __asm ("str.w sl, [r7, 0x58]");
0x0000f856 add.w sb, r1, 0x7f8 | sb = r1 + 0x7f8;
0x0000f85a mov sl, r5 | sl = r5;
0x0000f85c add r3, pc |
0x0000f85e mov r5, r4 | r5 = r4;
0x0000f860 mov r4, r2 | r4 = r2;
0x0000f862 add.w r3, r3, 0x598 | r3 = 0x1f8d4;
0x0000f866 str r3, [r7, 0x5c] | *((r7 + 0x5c)) = r3;
| do {
0x0000f868 ldr.w r3, [r8] | r3 = *(r8);
| if (r3 != 0) {
0x0000f86c cbz r3, 0xf87c |
0x0000f86e ldr r2, [r7, 0x5c] | r2 = *((r7 + 0x5c));
0x0000f870 movs r1, 0 | r1 = 0;
0x0000f872 cmp r6, r2 |
0x0000f874 ite ne |
| if (r6 == r2) {
0x0000f876 movne r0, r5 | r0 = r5;
| }
| if (r6 != r2) {
0x0000f878 moveq r0, sb | r0 = sb;
| }
0x0000f87a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
0x0000f87c ldr.w r3, [sl, 0x1dc] | r3 = *((sl + 0x1dc));
0x0000f880 adds r4, 1 | r4++;
0x0000f882 ldr.w r8, [r8, 0x20] | r8 = *((r8 + 0x20));
0x0000f886 add.w sb, sb, 8 | sb += 8;
0x0000f88a adds r5, 8 | r5 += 8;
0x0000f88c cmp r3, r4 |
0x0000f88e bhi 0xf868 |
| } while (r3 > r4);
0x0000f890 ldr.w sl, [r7, 0x58] | sl = *((r7 + 0x58));
0x0000f894 b 0xf65e | goto label_34;
| label_99:
0x0000f896 ldr r0, [pc, 0x248] |
0x0000f898 add r0, pc | r0 = 0x1f37e;
0x0000f89a bl 0xc2a4 | dl_fatal_printf ()
0x0000f89c invalid |
| label_86:
0x0000f89e movs r2, 0 | r2 = 0;
0x0000f8a0 str r2, [r3] | *(r3) = r2;
0x0000f8a2 ldr.w sp, [r7, 0x18] | sp = *((r7 + 0x18));
0x0000f8a6 b.w 0xf018 | goto label_27;
| label_69:
0x0000f8aa ldr r3, [pc, 0x238] |
0x0000f8ac movw r2, 0x11d | r2 = 0x11d;
0x0000f8b0 ldr r1, [pc, 0x234] |
0x0000f8b2 ldr r0, [pc, 0x238] |
0x0000f8b4 add r3, pc | r3 = 0x1f39e;
0x0000f8b6 add r1, pc | r1 = 0x1f3a2;
0x0000f8b8 add r0, pc | r0 = 0x1f3aa;
0x0000f8ba bl 0x11f30 | fcn_00011f30 (r0);
| label_59:
0x0000f8be ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x0000f8c0 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0000f8c2 ldr r0, [r7, 0x28] | r0 = *((r7 + 0x28));
0x0000f8c4 add.w r2, r8, r1 | r2 = r8 + r1;
0x0000f8c8 rsbs r1, r1, 0 | r1 -= ;
0x0000f8ca add r0, r3 | r0 += r3;
0x0000f8cc movs r3, 1 | r3 = 1;
0x0000f8ce bl 0xff98 | fcn_0000ff98 (r0, r1, r2, r3);
0x0000f8d2 b 0xf2cc | goto label_21;
| label_101:
0x0000f8d4 ldr r3, [pc, 0x218] |
0x0000f8d6 add r3, pc | r3 = 0x1f3ca;
0x0000f8d8 ldr.w r2, [r3, 0x540] | r2 = *(0x1f90a);
0x0000f8da movs r5, 0x40 | r5 = 0x40;
0x0000f8dc subs r1, r2, 1 | r1 = r2 - 1;
0x0000f8de cmp r1, sl |
| if (r1 != sl) {
0x0000f8e0 bne.w 0xf66e | goto label_33;
| }
0x0000f8e4 movs r1, 0x54 | r1 = 0x54;
0x0000f8e6 mla r3, r1, r2, r3 | __asm ("mla r3, r1, r2, r3");
0x0000f8ea mov r2, sl | r2 = sl;
| do {
0x0000f8ec ldr r0, [r3, -0xa8] | r0 = *((r3 - 0xa8));
0x0000f8f0 mov r1, r2 | r1 = r2;
0x0000f8f2 subs r3, 0x54 | r3 -= 0x54;
0x0000f8f4 subs r2, 1 | r2--;
0x0000f8f6 cmp r0, 0 |
0x0000f8f8 beq 0xf8ec |
| } while (r0 == 0);
0x0000f8fa ldr r3, [pc, 0x1f8] |
0x0000f8fc add r3, pc | r3 = 0x1f3f6;
0x0000f8fe str.w r1, [r3, 0x540] | __asm ("str.w r1, [r3, 0x540]");
0x0000f902 b 0xf66e | goto label_33;
| label_89:
0x0000f904 ldr r1, [pc, 0x1f0] |
0x0000f906 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x0000f908 add r1, pc | r1 = 0x1f404;
0x0000f90a ldr r6, [r1, r3] | r6 = *(0x1f404);
0x0000f90c ldrb.w r3, [r6, 0x199] | r3 = *((r6 + 0x199));
0x0000f910 ands r3, r3, 8 | r3 &= 8;
| if (r3 != r3) {
0x0000f914 bne.w 0xf40c | goto label_35;
| }
0x0000f918 ldr r4, [pc, 0x1e0] |
0x0000f91a add r4, pc | r4 = 0x1f41a;
0x0000f91c ldr.w r2, [r4, 0x1dc] | r2 = *(0x1f5f6);
0x0000f920 cmp r2, 0 |
| if (r2 == 0) {
0x0000f922 beq.w 0xf40c | goto label_35;
| }
0x0000f926 add.w r2, r1, 0x7f8 | r2 = r1 + 0x7f8;
0x0000f92a str r3, [r7, 0x54] | *((r7 + 0x54)) = r3;
0x0000f92c str r2, [r7, 0x5c] | *((r7 + 0x5c)) = r2;
0x0000f92e add.w r5, r6, 0x260 | r5 = r6 + 0x260;
0x0000f932 ldr r3, [pc, 0x1cc] |
0x0000f934 ldr.w r2, [r4, 0x1d8] | r2 = *((r4 + 0x1d8));
0x0000f938 str.w r8, [r7, 0x38] | __asm ("str.w r8, [r7, 0x38]");
0x0000f93c mov r8, r4 | r8 = r4;
0x0000f93e add r3, pc |
0x0000f940 mov r4, r2 | r4 = r2;
0x0000f942 add.w r3, r3, 0x598 | r3 = 0x1f9dc;
0x0000f946 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
| do {
0x0000f948 ldr r3, [r4] | r3 = *(r4);
| if (r3 != 0) {
0x0000f94a cbz r3, 0xf95a |
0x0000f94c ldr r0, [r7, 0x5c] | r0 = *((r7 + 0x5c));
0x0000f94e movs r1, 2 | r1 = 2;
0x0000f950 ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x0000f952 cmp r6, r2 |
0x0000f954 it ne |
| if (r6 == r2) {
0x0000f956 movne r0, r5 | r0 = r5;
| }
0x0000f958 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
| }
0x0000f95a ldr r3, [r7, 0x5c] | r3 = *((r7 + 0x5c));
0x0000f95c adds r5, 8 | r5 += 8;
0x0000f95e ldr r2, [r7, 0x54] | r2 = *((r7 + 0x54));
0x0000f960 ldr r4, [r4, 0x20] | r4 = *((r4 + 0x20));
0x0000f962 adds r3, 8 | r3 += 8;
0x0000f964 str r3, [r7, 0x5c] | *((r7 + 0x5c)) = r3;
0x0000f966 adds r2, 1 | r2++;
0x0000f968 ldr.w r3, [r8, 0x1dc] | r3 = *((r8 + 0x1dc));
0x0000f96c str r2, [r7, 0x54] | *((r7 + 0x54)) = r2;
0x0000f96e cmp r3, r2 |
0x0000f970 bhi 0xf948 |
| } while (r3 > r2);
0x0000f972 ldr.w r8, [r7, 0x38] | r8 = *((r7 + 0x38));
0x0000f976 b 0xf40c | goto label_35;
| label_109:
0x0000f978 ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x0000f97a str.w r2, [ip, 0x88c] | __asm ("str.w r2, [ip, 0x88c]");
0x0000f97e str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x0000f980 b 0xf4d6 | goto label_25;
| label_108:
0x0000f982 ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x0000f984 str r2, [r7, 0x54] | *((r7 + 0x54)) = r2;
0x0000f986 str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x0000f988 b 0xf4d6 | goto label_25;
| label_94:
0x0000f98a ldr r3, [pc, 0x178] |
0x0000f98c movw r2, 0x232 | r2 = 0x232;
0x0000f990 ldr r1, [pc, 0x174] |
0x0000f992 ldr r0, [pc, 0x178] | r0 = *(0xfb0e);
0x0000f994 add r3, pc | r3 = 0x1f49e;
0x0000f996 add r1, pc | r1 = 0x1f4a2;
| label_44:
0x0000f998 add r0, pc | r0 += pc;
0x0000f99a bl 0x11f30 | fcn_00011f30 (r0);
| label_92:
0x0000f99e ldr r3, [pc, 0x170] | r3 = *(0xfb12);
| label_41:
0x0000f9a0 mov r0, r4 | r0 = r4;
0x0000f9a2 add r3, pc | r3 += pc;
| do {
0x0000f9a4 ldr r3, [r3] | r3 = *(r3);
0x0000f9a6 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000f9a8 b 0xf64c | goto label_36;
| label_102:
0x0000f9aa ldr r3, [pc, 0x168] | r3 = *(0xfb16);
| label_50:
0x0000f9ac movw r2, 0x2c5 | r2 = 0x2c5;
0x0000f9b0 ldr r1, [pc, 0x164] |
0x0000f9b2 ldr r0, [pc, 0x168] |
0x0000f9b4 add r3, pc | r3 += pc;
0x0000f9b6 add r1, pc | r1 = 0x1f4d2;
0x0000f9b8 add r0, pc | r0 = 0x1f4da;
0x0000f9ba bl 0x11f30 | fcn_00011f30 (r0);
| label_110:
0x0000f9be ldr r1, [r7, 0x54] | r1 = *((r7 + 0x54));
0x0000f9c0 str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x0000f9c2 ldr r3, [r7, 0x50] | r3 = *((r7 + 0x50));
| label_40:
0x0000f9c4 str.w r1, [ip, 0x88c] | __asm ("str.w r1, [ip, 0x88c]");
0x0000f9c8 str r2, [r7, 0x54] | *((r7 + 0x54)) = r2;
0x0000f9ca str r3, [r7, 0x58] | *((r7 + 0x58)) = r3;
0x0000f9cc b 0xf4d6 | goto label_25;
| label_58:
0x0000f9ce ldr r3, [pc, 0x150] | r3 = *(0xfb22);
| label_43:
0x0000f9d0 movs r2, 0xb8 | r2 = 0xb8;
0x0000f9d2 ldr r1, [pc, 0x150] |
0x0000f9d4 ldr r0, [pc, 0x150] |
0x0000f9d6 add r3, pc | r3 += pc;
0x0000f9d8 add r1, pc | r1 = 0x1f502;
0x0000f9da add r0, pc | r0 = 0x1f506;
0x0000f9dc bl 0x11f30 | fcn_00011f30 (r0);
| label_80:
0x0000f9e0 ldr r3, [pc, 0x148] | r3 = *(0xfb2c);
0x0000f9e2 mov r2, r0 | r2 = r0;
0x0000f9e4 ldr r1, [pc, 0x148] | r1 = *(0xfb30);
0x0000f9e6 movs r0, 0xc | r0 = 0xc;
| label_39:
0x0000f9e8 add r3, pc | r3 += pc;
0x0000f9ea add r1, pc | r1 += pc;
0x0000f9ec blx 0x9f4 | fcn_000009f4 ();
| label_37:
0x0000f9f0 ldr r3, [pc, 0x140] | r3 = *(0xfb34);
0x0000f9f2 invalid |
| label_49:
0x0000f9f4 asrs r7, r6, 9 | r7 = r6 >> 9;
0x0000f9f6 ldr r1, [pc, 0x140] |
0x0000f9f8 ldr r0, [pc, 0x140] |
0x0000f9fa add r3, pc | r3 += pc;
0x0000f9fc add r1, pc | r1 = 0x1f53a;
0x0000f9fe add r0, pc | r0 = 0x1f53e;
0x0000fa00 bl 0x11f30 | fcn_00011f30 (r0);
0x0000fa04 invalid |
| if (r6 == 0) {
| label_48:
0x0000fa14 cbz r6, 0xfa3e | goto label_112;
| }
0x0000fa16 movs r0, r0 |
| if (r4 == 0) {
| label_51:
0x0000fa18 cbz r4, 0xfa58 | goto label_113;
| }
0x0000fa1a movs r0, r0 |
| if (r0 >= r0) {
0x0000fa1c bhs 0xfa9c | goto label_114;
| }
0x0000fa1e movs r1, r0 | r1 = r0;
0x0000fa20 bne 0xf9a4 |
| } while (r1 != r0);
0x0000fa22 movs r1, r0 | r1 = r0;
0x0000fa24 svc 0x6e | __asm ("svc 0x6e");
0x0000fa26 movs r1, r0 | r1 = r0;
| if (r1 != r0) {
0x0000fa28 bne 0xfaf0 | goto label_115;
| }
0x0000fa2a movs r1, r0 | r1 = r0;
0x0000fa2c stc2 p15, c15, [r3], {0xff} | __asm ("stc2 p15, c15, [r3], {0xff}");
| if (r1 > r0) {
0x0000fa30 bgt 0xf9f0 | goto label_37;
| }
0x0000fa32 movs r1, r0 | r1 = r0;
| label_47:
0x0000fa34 b 0xf748 | goto label_38;
| label_112:
0x0000fa3e movs r1, r0 | r1 = r0;
| label_52:
0x0000fa40 adr r3, 0x2f8 | r3 = 0x2f8;
0x0000fa42 movs r0, r0 |
| if (r0 < r0) {
| label_42:
0x0000fa44 blt 0xf9e8 | goto label_39;
| }
0x0000fa46 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
| label_45:
0x0000fa48 blt 0xf9c4 | goto label_40;
| }
0x0000fa4a movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa4c blt 0xf9a0 | goto label_41;
| }
0x0000fa4e movs r1, r0 | r1 = r0;
| if (r1 >= r0) {
0x0000fa50 bge 0xfb50 | goto label_116;
| }
0x0000fa52 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa54 blt 0xfb3c | goto label_117;
| }
0x0000fa56 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
| label_113:
0x0000fa58 blt 0xfb2c | goto label_118;
| }
0x0000fa5a movs r1, r0 | r1 = r0;
| if (r1 >= r0) {
0x0000fa5c bge 0xfa70 | goto label_119;
| }
0x0000fa5e movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa60 blt 0xfaa4 | goto label_120;
| }
0x0000fa62 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa64 bls 0xfa44 | goto label_42;
| }
0x0000fa66 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa68 bls 0xf9d0 | goto label_43;
| }
0x0000fa6a movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa6c bls 0xf998 | goto label_44;
| }
0x0000fa6e movs r1, r0 | r1 = r0;
| label_119:
0x0000fa70 ldm r4, {r1, r2, r4, r5, r6, r7} | r1 = *(r4);
| r2 = *((r4 + 4));
| r4 = *((r4 + 8));
| r5 = *((r4 + 12));
| r6 = *((r4 + 16));
| r7 = *((r4 + 20));
0x0000fa72 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
| label_46:
0x0000fa74 bls 0xfb64 | goto label_121;
| }
0x0000fa76 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa78 bls 0xfb50 | goto label_116;
| }
0x0000fa7a movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa7c bls 0xfb10 | goto label_122;
| }
0x0000fa7e movs r1, r0 | r1 = r0;
| do {
| if (r1 < r0) {
0x0000fa80 bls 0xfac0 | goto label_123;
| }
0x0000fa82 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa84 bls 0xfaa0 | goto label_53;
| }
0x0000fa86 movs r1, r0 | r1 = r0;
0x0000fa88 bhi 0xfa80 |
| } while (r1 > r0);
0x0000fa8a movs r1, r0 | r1 = r0;
| if (r1 >= r0) {
0x0000fa8c bge 0xfac4 | goto label_124;
| }
0x0000fa8e movs r1, r0 | r1 = r0;
| if (r1 > r0) {
0x0000fa90 bhi 0xfa48 | goto label_45;
| }
0x0000fa92 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000fa94 bls 0xfa74 | goto label_46;
| }
0x0000fa96 movs r1, r0 | r1 = r0;
| if (r1 > r0) {
0x0000fa98 bhi 0xfa34 | goto label_47;
| }
0x0000fa9a movs r1, r0 | r1 = r0;
| if (r1 < r0) {
| label_114:
0x0000fa9c bls 0xfa14 | goto label_48;
| }
0x0000fa9e movs r1, r0 | r1 = r0;
| if (r1 < r0) {
| label_53:
0x0000faa0 bls 0xf9f4 | goto label_49;
| }
0x0000faa2 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
| label_120:
0x0000faa4 bls 0xf9ac | goto label_50;
| }
0x0000faa6 movs r1, r0 | r1 = r0;
0x0000faa8 add r4, sp, 0x58 | r4 += arg_58h;
0x0000faaa movs r0, r0 |
| if (r0 < r0) {
0x0000faac bls 0xfb14 | goto label_125;
| }
0x0000faae movs r1, r0 | r1 = r0;
0x0000fab0 add r2, sp, 0x250 | r2 += arg_250h;
0x0000fab2 movs r0, r0 |
0x0000fab4 add r4, sp, 0x1b0 | r4 += arg_1b0h;
0x0000fab6 movs r0, r0 |
0x0000fab8 add r2, sp, 0x188 | r2 += arg_188h;
0x0000faba movs r0, r0 |
0x0000fabc add r2, sp, 0x390 | r2 += arg_390h;
0x0000fabe movs r0, r0 |
| if (r0 > r0) {
| label_123:
0x0000fac0 bhi 0xfa18 | goto label_51;
| }
0x0000fac2 movs r1, r0 | r1 = r0;
| label_124:
0x0000fac4 bvc 0xfb58 | __asm ("bvc 0xfb58");
0x0000fac6 movs r1, r0 | r1 = r0;
| if (r1 > r0) {
0x0000fac8 bhi 0xfb7c | goto label_126;
| }
0x0000faca movs r1, r0 | r1 = r0;
0x0000facc add r3, sp, 0x208 | r3 += arg_208h;
0x0000face movs r0, r0 |
0x0000fad0 add r1, sp, 0x1e0 | r1 += arg_1e0h;
0x0000fad2 movs r0, r0 |
0x0000fad4 add r2, sp, 0x98 | r2 += arg_98h;
0x0000fad6 movs r0, r0 |
| label_54:
0x0000fad8 ldm r2, {r1, r2, r3} | r1 = *(r2);
| r2 = *((r2 + 4));
| r3 = *((r2 + 8));
0x0000fada movs r1, r0 | r1 = r0;
0x0000fadc bvc 0xfa40 | __asm ("bvc 0xfa40");
| goto label_52;
0x0000fade movs r1, r0 | r1 = r0;
0x0000fae0 add r2, sp, 0x1d0 | r2 += arg_1d0h;
0x0000fae2 movs r0, r0 |
0x0000fae4 add r2, sp, 0x3c0 | r2 += arg_3c0h;
0x0000fae6 movs r0, r0 |
0x0000fae8 add r0, sp, 0x398 | r0 += arg_398h;
0x0000faea movs r0, r0 |
0x0000faec add r1, sp, 0x2a0 | r1 += arg_2a0h;
0x0000faee movs r0, r0 |
| label_115:
0x0000faf0 bvc 0xfb60 | __asm ("bvc 0xfb60");
0x0000faf2 movs r1, r0 | r1 = r0;
0x0000faf4 bvc 0xfb18 | __asm ("bvc 0xfb18");
0x0000faf6 movs r1, r0 | r1 = r0;
0x0000faf8 bvc 0xfb04 | __asm ("bvc 0xfb04");
0x0000fafa movs r1, r0 | r1 = r0;
0x0000fafc ldm r1, {r1, r4, r5} | r1 = *(r1);
| r4 = *((r1 + 4));
| r5 = *((r1 + 8));
0x0000fafe movs r1, r0 | r1 = r0;
0x0000fb00 bvs 0xfaa0 | __asm ("bvs 0xfaa0");
| goto label_53;
0x0000fb02 movs r1, r0 | r1 = r0;
0x0000fb04 add r2, sp, 0x40 | r2 += arg_40h;
0x0000fb06 movs r0, r0 |
0x0000fb08 add r0, sp, 0x18 | r0 += arg_18h;
0x0000fb0a movs r0, r0 |
0x0000fb0c add r1, sp, 0x70 | r1 += arg_70h;
0x0000fb0e movs r0, r0 |
| if (r0 >= r0) {
| label_122:
0x0000fb10 bpl 0xfba8 | goto label_127;
| }
0x0000fb12 movs r1, r0 | r1 = r0;
| label_125:
0x0000fb14 add r1, sp, 0x3c0 | r1 += arg_3c0h;
0x0000fb16 movs r0, r0 |
0x0000fb18 adr r7, 0x398 | r7 = 0x398;
0x0000fb1a movs r0, r0 |
0x0000fb1c add r1, sp, 0x60 | r1 += arg_60h;
0x0000fb1e movs r0, r0 |
0x0000fb20 add r1, sp, 0x338 | r1 += arg_338h;
0x0000fb22 movs r0, r0 |
0x0000fb24 adr r7, 0x310 | r7 = 0x310;
0x0000fb26 movs r0, r0 |
| do {
0x0000fb28 add r0, sp, 0x28 | r0 += arg_28h;
0x0000fb2a movs r0, r0 |
| label_118:
0x0000fb2c adr r6, 0x1d0 | r6 = 0x1d0;
0x0000fb2e movs r0, r0 |
0x0000fb30 add r0, sp, 0x308 | r0 += arg_308h;
0x0000fb32 movs r0, r0 |
0x0000fb34 add r1, sp, 0x2a8 | r1 += arg_2a8h;
0x0000fb36 movs r0, r0 |
0x0000fb38 adr r7, 0x280 | r7 = 0x280;
0x0000fb3a movs r0, r0 |
| label_117:
0x0000fb3c add r0, sp, 0x268 | r0 += arg_268h;
0x0000fb3e movs r0, r0 |
0x0000fb40 push {r4, r5, r6, lr} |
0x0000fb42 mov r5, r0 | r5 = r0;
0x0000fb44 ldr r4, [pc, 0x54] |
0x0000fb46 ldr r3, [pc, 0x58] |
0x0000fb48 add r4, pc | r4 = 0x1f6e8;
0x0000fb4a addw r4, r4, 0x544 | __asm ("addw r4, r4, 0x544");
0x0000fb4e add r3, pc | r3 = 0x1f6f4;
| label_116:
0x0000fb50 mov r0, r4 | r0 = r4;
0x0000fb52 ldr r3, [r3] | r3 = *(r3);
0x0000fb54 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000fb56 invalid |
0x0000fb58 asrs r3, r3, 6 | r3 >>= 6;
| if (r1 == 0) {
0x0000fb5a cbnz r1, 0xfb76 |
0x0000fb5c ldr.w r6, [r5, 0x194] | r6 = *((r5 + 0x194));
| if (r6 == 0) {
0x0000fb60 cbz r6, 0xfb84 | goto label_128;
| }
0x0000fb62 mov r0, r5 | r0 = r5;
| label_121:
0x0000fb64 bl 0xee88 | fcn_0000ee88 (r0, r1);
0x0000fb68 ldr r3, [pc, 0x38] |
0x0000fb6a mov r0, r4 | r0 = r4;
0x0000fb6c pop.w {r4, r5, r6, lr} |
0x0000fb70 add r3, pc |
0x0000fb72 ldr r3, [r3] | r3 = *(0x1f718);
0x0000fb74 bx r3 | return uint32_t (*r3)() ();
| }
0x0000fb76 ldr r3, [pc, 0x30] | r3 = *(0xfbaa);
0x0000fb78 mov r0, r4 | r0 = r4;
0x0000fb7a invalid |
| label_126:
0x0000fb7c eors r0, r6 | r0 ^= r6;
0x0000fb7e add r3, pc | r3 += pc;
0x0000fb80 ldr r3, [r3] | r3 = *(r3);
0x0000fb82 bx r3 | return uint32_t (*r3)() ();
| label_128:
0x0000fb84 ldr r3, [pc, 0x24] |
0x0000fb86 mov r0, r4 | r0 = r4;
0x0000fb88 add r3, pc |
0x0000fb8a ldr r3, [r3] | r3 = *(0x1f738);
0x0000fb8c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000fb8e ldr r3, [pc, 0x20] |
0x0000fb90 mov r2, r6 | r2 = r6;
0x0000fb92 ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0000fb94 mov r0, r6 | r0 = r6;
0x0000fb96 add r3, pc | r3 = 0x1f74c;
0x0000fb98 blx 0x9f4 | fcn_000009f4 ();
0x0000fb9c bmi 0xfb28 |
| } while (r0 < r6);
0x0000fb9e movs r1, r0 | r1 = r0;
| if (r1 <= r0) {
0x0000fba0 blo 0xfad8 | goto label_54;
| }
0x0000fba2 movs r1, r0 | r1 = r0;
| if (r1 > r0) {
0x0000fba4 blo 0xfca0 |
0x0000fba6 movs r1, r0 | r1 = r0;
| if (r1 > r0) {
| label_127:
0x0000fba8 blo 0xfc88 |
0x0000fbaa movs r1, r0 | r1 = r0;
| if (r1 > r0) {
0x0000fbac blo 0xfc78 |
0x0000fbae movs r1, r0 | r1 = r0;
0x0000fbb0 adr r7, 0x398 | r7 = 0x398;
0x0000fbb2 movs r0, r0 |
0x0000fbb4 movs r7, r3 | r7 = r3;
0x0000fbb6 stmdb sp!, {r2} | __asm ("stmdb sp!, {r2}");
0x0000fbba b 0xf5fa | goto label_55;
| }
0x0000fc78 adds r0, 0 | r0 += 0;
0x0000fc7a b 0x1018c | goto label_129;
| }
0x0000fc88 strb r4, [r1, 4] | *((r1 + 4)) = r4;
0x0000fc8a b 0xf7c8 | goto label_56;
| }
0x0000fca0 mla pc, r1, r0, fp | __asm ("mla pc, r1, r0, fp");
0x0000fca4 adr r7, 0x70 | r7 = 0x70;
0x0000fca6 movs r0, r0 |
0x0000fca8 ldr r3, [pc, 0x10] |
0x0000fcaa add r3, pc | r3 = 0x1f96a;
0x0000fcac cmp r3, r0 |
| if (r3 != r0) {
0x0000fcae beq 0xfcb8 |
0x0000fcb0 ldr r3, [pc, 0xc] |
0x0000fcb2 add r3, pc |
0x0000fcb4 ldr r3, [r3] | r3 = *(0x1f976);
0x0000fcb6 bx r3 | return uint32_t (*r3)() ();
| }
0x0000fcb8 bx lr | return;
| do {
0x0001013a movw ip, 0xfb98 |
0x0001013e movt ip, 0xffff | ip = 0xfffffb98;
0x00010142 asr.w ip, ip, r3 |
0x00010146 ands r4, ip, 1 | r4 = ip & 1;
| if (r4 != ip) {
0x0001014a bne 0x1019c | goto label_130;
| }
0x0001014c ldr r3, [r5, 0x34] | r3 = *((r5 + 0x34));
0x0001014e ldr r2, [r0, r2] | r2 = *((r0 + r2));
0x00010150 ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x00010152 add r0, r2 | r0 += r2;
0x00010154 bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
| if (r0 != 0) {
0x00010158 cbnz r0, 0x1019c | goto label_130;
| }
0x0001015a ldr.w r3, [r5, 0x1ac] | r3 = *((r5 + 0x1ac));
0x0001015e ldrh.w r4, [r3, sb, lsl 1] | offset_2 = sb << 1;
| r4 = *((r3 + offset_2));
0x00010162 ldr.w r3, [r5, 0x174] | r3 = *((r5 + 0x174));
0x00010166 ubfx r4, r4, 0, 0xf | r4 = (r4 >> 0) & ((1 << 0xf) - 1);
0x0001016a lsls r4, r4, 4 | r4 <<= 4;
0x0001016c adds r2, r3, r4 | r2 = r3 + r4;
0x0001016e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00010170 cmp r2, r7 |
0x00010172 it ne |
| if (r2 == r7) {
0x00010174 movne r6, r0 | r6 = r0;
| }
| if (r2 == r7) {
0x00010176 bne 0x10186 |
0x00010178 ldr r0, [r3, r4] | r0 = *((r3 + r4));
0x0001017a mov r1, r8 | r1 = r8;
0x0001017c bl 0x14f30 | r0 = fcn_00014f30 (r0, r1, r2, r3);
0x00010180 cmp r0, 0 |
0x00010182 it ne |
| if (r0 != 0) {
0x00010184 movne r6, 0 | r6 = 0;
| goto label_131;
| }
| }
| label_131:
0x00010186 mov r0, r6 | r0 = r6;
0x00010188 pop.w {r3, r4, r5, r6, r7, r8, sb, pc} |
| label_129:
0x0001018c ldrh.w lr, [r6, 0xe] |
0x00010190 movw ip, 0xfff1 | ip = 0xfff1;
0x00010194 cmp lr, ip |
0x00010196 it ne |
| if (lr != ip) {
0x00010198 cmpne r3, 6 | __asm ("cmpne r3, 6");
| }
0x0001019a beq 0x1013a |
| } while (lr == ip);
| label_130:
0x0001019c movs r6, 0 | r6 = 0;
0x0001019e mov r0, r6 | r0 = r6;
0x000101a0 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-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xfc98 */
| #include <stdint.h>
|
; (fcn) fcn.0000fc98 () | void fcn_0000fc98 () {
0x0000fc98 ldr r0, [pc, 8] |
0x0000fc9a push {r3, lr} |
0x0000fc9c add r0, pc | r0 = 0x1f944;
0x0000fc9e bl 0xc2a4 | dl_fatal_printf ()
0x0000fca0 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x10e24 */
| #include <stdint.h>
|
; (fcn) fcn.00010e24 () | void fcn_00010e24 (int16_t arg_0h, int16_t arg_1h, int16_t arg1) {
| 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;
| int32_t var_30h_2;
| r0 = arg1;
0x00010e24 ldr.w r3, [pc, 0x418] | r3 = *(0x00011240);
0x00010e28 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00010e2c mov r8, r0 | r8 = r0;
0x00010e2e sub sp, 0x3c |
0x00010e30 add r3, pc | r3 += pc;
0x00010e32 ldr r3, [r3] | r3 = *(r3);
0x00010e34 cmp r3, 0 |
| if (r3 != 0) {
0x00010e36 bne.w 0x111fa | goto label_20;
| }
| label_15:
0x00010e3a ldr.w r3, [pc, 0x408] | r3 = *(0x00011244);
0x00010e3e mov fp, r8 |
0x00010e40 add r3, pc | r3 += pc;
0x00010e42 str r3, [sp, 0xc] | var_ch = r3;
0x00010e44 ldr.w r3, [pc, 0x400] | r3 = "path.rtld";
0x00010e48 add r3, pc | r3 += pc;
0x00010e4a str r3, [sp, 0x24] | var_24h = r3;
0x00010e4c ldr r3, [pc, 0x3fc] |
0x00010e4e add r3, pc | r3 = 0x2209e;
0x00010e50 str r3, [sp, 0x28] | var_28h = r3;
| label_1:
0x00010e52 mov r0, fp | r0 = fp;
| label_0:
0x00010e54 mov r7, r0 | r7 = r0;
0x00010e56 cmp r0, 0 |
| if (r0 == 0) {
0x00010e58 beq.w 0x11120 | goto label_21;
| }
0x00010e5c ldr r4, [r0], 4 | r4 = *(r0);
| r0 += 4;
0x00010e60 cmp r4, 0 |
| if (r4 == 0) {
0x00010e62 beq.w 0x11120 | goto label_21;
| }
0x00010e66 ldrb r6, [r4] | r6 = *(r4);
0x00010e68 mov fp, r0 |
0x00010e6a cmp r6, 0x3d |
0x00010e6c it ne |
| if (r6 != 0x3d) {
0x00010e6e cmpne r6, 0 | __asm ("cmpne r6, 0");
| }
0x00010e70 ite ne |
| if (r6 == 0x3d) {
0x00010e72 movne r5, 1 | r5 = 1;
| }
| if (r6 != 0x3d) {
0x00010e74 moveq r5, 0 | r5 = 0;
| }
| if (r6 == 0x3d) {
0x00010e76 beq.w 0x1111c | goto label_22;
| }
0x00010e7a mov r2, r4 | r2 = r4;
0x00010e7c rsb.w r1, r4, 1 | r1 = 1 - r4;
| do {
0x00010e80 adds r5, r1, r2 | r5 = r1 + r2;
0x00010e82 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00010e86 cmp r3, 0 |
0x00010e88 it ne |
| if (r3 != 0) {
0x00010e8a cmpne r3, 0x3d | __asm ("cmpne r3, 0x3d");
| }
0x00010e8c bne 0x10e80 |
| } while (r3 != 0);
| label_12:
0x00010e8e cmp r3, 0 |
| if (r3 == 0) {
0x00010e90 beq 0x10e54 | goto label_0;
| }
0x00010e92 mov r8, r4 | r8 = r4;
0x00010e94 ldr r4, [pc, 0x3b8] |
0x00010e96 adds r5, 1 | r5++;
0x00010e98 mov r0, r8 | r0 = r8;
0x00010e9a add.w r3, r8, r5 | r3 = r8 + r5;
0x00010e9e mov r1, r6 | r1 = r6;
0x00010ea0 add r4, pc | r4 = 0x220f4;
0x00010ea2 movs r2, 0x47 | r2 = 0x47;
0x00010ea4 str r7, [sp, 4] | var_4h = r7;
0x00010ea6 str r3, [sp, 8] | var_8h = r3;
0x00010ea8 b 0x10eb6 |
| while (r3 == 0) {
0x00010eaa ldrb r2, [r4, 1]! | r2 = *((r4 += 1));
0x00010eae ldrb r1, [r0, 1]! | r1 = *((r0 += 1));
0x00010eb2 cmp r2, 0 |
| if (r2 == 0) {
0x00010eb4 beq 0x10f6a | goto label_23;
| }
0x00010eb6 clz r3, r1 | r3 &= r1;
0x00010eba lsrs r3, r3, 5 | r3 >>= 5;
0x00010ebc cmp r1, r2 |
0x00010ebe it ne |
| if (r1 == r2) {
0x00010ec0 orrne r3, r3, 1 | r3 |= 1;
| }
0x00010ec4 cmp r3, 0 |
0x00010ec6 beq 0x10eaa |
| }
| label_4:
0x00010ec8 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00010eca movs r5, 0 | r5 = 0;
0x00010ecc ldr r7, [pc, 0x384] |
0x00010ece mov ip, r5 |
0x00010ed0 ldr.w sb, [r3] | sb = *(r3);
0x00010ed4 add r7, pc | r7 = 0x2212c;
0x00010ed6 b 0x10ee8 | goto label_24;
| label_2:
0x00010ed8 add.w ip, ip, 1 |
0x00010edc adds r7, 0x70 | r7 += 0x70;
0x00010ede cmp.w ip, 0x18 |
0x00010ee2 add.w r5, r5, 0x70 | r5 += 0x70;
| if (ip == 0x18) {
0x00010ee6 beq 0x10e52 | goto label_1;
| }
| label_24:
0x00010ee8 ldrb.w r3, [r7, 0x50] | r3 = *((r7 + 0x50));
0x00010eec cmp r3, 0 |
| if (r3 != 0) {
0x00010eee bne 0x10ed8 | goto label_2;
| }
0x00010ef0 ldrb.w r2, [r7, 0x58] | r2 = *((r7 + 0x58));
0x00010ef4 cmp r2, 0 |
| if (r2 == 0) {
0x00010ef6 beq 0x10ed8 | goto label_2;
| }
0x00010ef8 add.w lr, r7, 0x58 | lr = r7 + 0x58;
0x00010efc mov r4, r8 | r4 = r8;
0x00010efe mov r6, lr | r6 = lr;
0x00010f00 mov r0, r2 | r0 = r2;
| label_3:
0x00010f02 ldrb r1, [r4], 1 | r1 = *(r4);
| r4++;
0x00010f06 clz r3, r1 | r3 &= r1;
0x00010f0a lsrs r3, r3, 5 | r3 >>= 5;
0x00010f0c cmp r0, r1 |
0x00010f0e it ne |
| if (r0 == r1) {
0x00010f10 orrne r3, r3, 1 | r3 |= 1;
| }
0x00010f14 cmp r3, 0 |
| if (r3 != 0) {
0x00010f16 bne 0x10ed8 | goto label_2;
| }
0x00010f18 ldrb r0, [r6, 1]! | r0 = *((r6 += 1));
0x00010f1c cmp r0, 0 |
| if (r0 != 0) {
0x00010f1e bne 0x10f02 | goto label_3;
| }
0x00010f20 ldrb r3, [r4] | r3 = *(r4);
0x00010f22 cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x00010f24 bne 0x10ed8 | goto label_2;
| }
0x00010f26 cmp.w sb, 0 |
| if (sb == 0) {
0x00010f2a beq 0x10f38 | goto label_25;
| }
0x00010f2c ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x00010f2e cmp r3, 0 |
| if (r3 == 0) {
0x00010f30 beq.w 0x110ba | goto label_26;
| }
| label_11:
0x00010f34 cmp r3, 2 |
| if (r3 != 2) {
0x00010f36 bne 0x10ed8 | goto label_2;
| }
| label_25:
0x00010f38 ldr r3, [pc, 0x31c] |
0x00010f3a rsb ip, ip, ip, lsl 3 |
0x00010f3e add r3, pc | r3 = 0x2219a;
0x00010f40 add.w r3, r3, ip, lsl 4 | r3 += (ip << 4);
0x00010f44 ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x00010f46 cmp r3, 3 |
| if (r3 == 3) {
0x00010f48 beq.w 0x110b4 | goto label_27;
| }
0x00010f4c ldr r0, [sp, 8] | r0 = var_8h;
0x00010f4e movs r1, 0 | r1 = 0;
0x00010f50 bl 0xc338 | fcn_0000c338 (r0, r1);
0x00010f54 strd r0, r1, [sp, 0x30] | __asm ("strd r0, r1, [var_30h]");
| label_7:
0x00010f58 ldr r0, [pc, 0x300] |
0x00010f5a movs r3, 0 | r3 = 0;
0x00010f5c mov r2, r3 | r2 = r3;
0x00010f5e add r1, sp, 0x30 | r1 += var_30h;
0x00010f60 add r0, pc | r0 = 0x221c0;
0x00010f62 add r0, r5 | r0 += r5;
0x00010f64 bl 0x10d04 | fcn_00010d04 (r0, r1, r2, r3);
0x00010f68 b 0x10e52 | goto label_1;
| label_23:
0x00010f6a cmp r1, 0x3d |
| if (r1 != 0x3d) {
0x00010f6c bne 0x10ec8 | goto label_4;
| }
0x00010f6e mov r4, r2 | r4 = r2;
0x00010f70 mov r3, r8 | r3 = r8;
0x00010f72 b 0x10f7a |
| while (r6 != 0) {
0x00010f74 ldrb r6, [r3, 1]! | r6 = *((r3 += 1));
0x00010f78 mov r4, r0 | r4 = r0;
0x00010f7a adds r0, r4, 1 | r0 = r4 + 1;
0x00010f7c cmp r6, 0 |
0x00010f7e bne 0x10f74 |
| }
0x00010f80 bl 0x13a0c | r0 = fcn_00013a0c (r0);
0x00010f84 cmp.w r0, -1 |
0x00010f88 mov sb, r0 | sb = r0;
| if (r0 == -1) {
0x00010f8a beq.w 0x1122e | goto label_28;
| }
0x00010f8e add.w r3, r8, r4 | r3 = r8 + r4;
0x00010f92 adds r2, r0, r4 | r2 = r0 + r4;
| if (r4 == 0) {
0x00010f94 cbz r4, 0x10fa2 | goto label_29;
| }
| do {
0x00010f96 ldrb r1, [r3, -0x1]! | r1 = *((r3 -= 0x1));
0x00010f9a cmp r3, r8 |
0x00010f9c strb r1, [r2, -0x1]! | *((r2 -= 0x1)) = r1;
0x00010fa0 bne 0x10f96 |
| } while (r3 != r8);
| label_29:
0x00010fa2 cmp.w sb, 0 |
| if (sb == 0) {
0x00010fa6 beq.w 0x110ac | goto label_30;
| }
0x00010faa ldrb.w r0, [sb, r5] | r0 = *((sb + r5));
0x00010fae add.w r2, sb, r5 | r2 = sb + r5;
0x00010fb2 str r2, [sp, 0x10] | var_10h = r2;
0x00010fb4 cmp r0, 0 |
| if (r0 == 0) {
0x00010fb6 beq 0x110ac | goto label_30;
| }
0x00010fb8 ldr r3, [pc, 0x2a4] |
0x00010fba mov lr, r2 | lr = r2;
0x00010fbc mov ip, r0 |
0x00010fbe str.w fp, [sp, 0x20] | __asm ("str.w fp, [var_20h]");
0x00010fc2 add r3, pc |
0x00010fc4 ldr r3, [r3] | r3 = *(0x22226);
0x00010fc6 str r3, [sp, 0x14] | var_14h = r3;
0x00010fc8 ldr r3, [pc, 0x298] |
0x00010fca add r3, pc | r3 = 0x22232;
0x00010fcc str r3, [sp, 0x2c] | var_2ch = r3;
0x00010fce movs r3, 0 | r3 = 0;
0x00010fd0 strd r3, sb, [sp, 0x18] | __asm ("strd r3, sb, [var_1ch]");
| label_6:
0x00010fd4 cmp.w ip, 0x3d |
0x00010fd8 it ne |
| if (ip != 0x3d) {
0x00010fda cmpne ip, 0x3a | __asm ("cmpne ip, 0x3a");
| }
0x00010fde ite ne |
| if (ip == 0x3d) {
0x00010fe0 movne r1, 1 | r1 = 1;
| }
| if (ip != 0x3d) {
0x00010fe2 moveq r1, 0 | r1 = 0;
| }
| if (ip == 0x3d) {
0x00010fe4 beq.w 0x11226 | goto label_31;
| }
0x00010fe8 mov r2, lr | r2 = lr;
0x00010fea mov r3, ip | r3 = ip;
0x00010fec rsb.w r0, lr, 1 | r0 = 1 - lr;
| do {
0x00010ff0 cmp r3, 0 |
| if (r3 == 0) {
0x00010ff2 beq 0x1109a | goto label_32;
| }
0x00010ff4 adds r1, r0, r2 | r1 = r0 + r2;
0x00010ff6 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x00010ffa cmp r3, 0x3d |
0x00010ffc it ne |
| if (r3 != 0x3d) {
0x00010ffe cmpne r3, 0x3a | __asm ("cmpne r3, 0x3a");
| }
0x00011000 bne 0x10ff0 |
| } while (r3 != 0x3d);
| label_18:
0x00011002 cmp r3, 0 |
| if (r3 == 0) {
0x00011004 beq 0x1109a | goto label_32;
| }
0x00011006 cmp r3, 0x3a |
0x00011008 add.w r1, r1, 1 | r1++;
0x0001100c add.w r8, lr, r1 | r8 = lr + r1;
| if (r3 == 0x3a) {
0x00011010 beq 0x11092 | goto label_33;
| }
0x00011012 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00011014 ldrb.w r5, [lr, r1] | r5 = *((lr + r1));
0x00011018 sub.w fp, r8, r3 |
0x0001101c ldr r3, [sp, 8] | r3 = var_8h;
0x0001101e cmp r5, 0 |
0x00011020 it ne |
| if (r5 != 0) {
0x00011022 cmpne r5, 0x3a | __asm ("cmpne r5, 0x3a");
| }
0x00011024 ite ne |
| if (r5 == 0) {
0x00011026 movne r5, 1 | r5 = 1;
| }
| if (r5 != 0) {
0x00011028 moveq r5, 0 | r5 = 0;
| }
0x0001102a add fp, r3 |
| if (r5 == 0) {
0x0001102c beq.w 0x1121c | goto label_34;
| }
0x00011030 add.w r3, r8, 1 | r3 = r8 + 1;
0x00011034 movs r5, 0 | r5 = 0;
| do {
0x00011036 mov r7, r3 | r7 = r3;
0x00011038 ldrb r2, [r3], 1 | r2 = *(r3);
| r3++;
0x0001103c adds r5, 1 | r5++;
0x0001103e cmp r2, 0x3a |
0x00011040 it ne |
| if (r2 != 0x3a) {
0x00011042 cmpne r2, 0 | __asm ("cmpne r2, 0");
| }
0x00011044 bne 0x11036 |
| } while (r2 != 0x3a);
| label_16:
0x00011046 ldr r6, [pc, 0x220] |
0x00011048 mov.w sl, 0 | sl = 0;
0x0001104c add r6, pc | r6 = 0x222ba;
| label_5:
0x0001104e ldrb r0, [r6] | r0 = *(r6);
0x00011050 mov sb, r6 | sb = r6;
0x00011052 cmp r0, 0 |
| if (r0 == 0) {
0x00011054 beq 0x11126 | goto label_35;
| }
0x00011056 mov r4, lr | r4 = lr;
0x00011058 mov r2, ip | r2 = ip;
0x0001105a mov r1, r6 | r1 = r6;
0x0001105c mov r3, r0 | r3 = r0;
0x0001105e b 0x1106c |
| while (r3 == 0) {
0x00011060 ldrb r3, [r1, 1]! | r3 = *((r1 += 1));
0x00011064 ldrb r2, [r4, 1]! | r2 = *((r4 += 1));
0x00011068 cmp r3, 0 |
| if (r3 == 0) {
0x0001106a beq 0x11128 | goto label_36;
| }
0x0001106c subs r3, r3, r2 | r3 -= r2;
0x0001106e it ne |
| if (r3 == r3) {
0x00011070 movne r3, 1 | r3 = 1;
| }
0x00011072 cmp r2, 0 |
0x00011074 it eq |
| if (r2 != 0) {
0x00011076 orreq r3, r3, 1 | r3 |= 1;
| }
0x0001107a cmp r3, 0 |
0x0001107c beq 0x11060 |
| }
| label_13:
0x0001107e add.w sl, sl, 1 | sl++;
0x00011082 adds r6, 0x70 | r6 += 0x70;
0x00011084 cmp.w sl, 0x18 |
| if (sl != 0x18) {
0x00011088 bne 0x1104e | goto label_5;
| }
| label_14:
0x0001108a ldrb r3, [r7] | r3 = *(r7);
| if (r3 != 0) {
0x0001108c cbz r3, 0x11092 |
0x0001108e adds r5, 1 | r5++;
0x00011090 add r8, r5 | r8 += r5;
| }
| label_33:
0x00011092 ldrb.w ip, [r8] | ip = *(r8);
0x00011096 mov lr, r8 | lr = r8;
0x00011098 b 0x10fd4 | goto label_6;
| label_32:
0x0001109a ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001109c ldrd sb, fp, [sp, 0x1c] | __asm ("ldrd sb, fp, [var_1ch]");
| if (r3 != 0) {
0x000110a0 cbz r3, 0x110ac |
0x000110a2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x000110a4 mov.w r1, 0 | r1 = 0;
0x000110a8 ldr r2, [sp, 0x18] | r2 = var_18h;
0x000110aa strb r1, [r3, r2] | *((r3 + r2)) = r1;
| }
| label_30:
0x000110ac ldr r3, [sp, 4] | r3 = var_4h;
0x000110ae str.w sb, [r3] | __asm ("str.w sb, [r3]");
0x000110b0 str r0, [sp] | *(sp) = r0;
0x000110b2 b 0x10e52 | goto label_1;
| label_27:
0x000110b4 ldr r3, [sp, 8] | r3 = var_8h;
0x000110b6 str r3, [sp, 0x30] | var_30h = r3;
0x000110b8 b 0x10f58 | goto label_7;
| label_26:
0x000110ba ldr r3, [sp, 4] | r3 = var_4h;
0x000110bc ldr r1, [r3] | r1 = *(r3);
0x000110be mov fp, r3 |
0x000110c0 cmp r1, 0 |
| if (r1 == 0) {
0x000110c2 beq.w 0x10ed8 | goto label_2;
| }
0x000110c6 ldr r4, [sp, 4] | r4 = var_4h;
| if (r2 == 0) {
0x000110c8 cbz r2, 0x110fc | goto label_37;
| }
| label_8:
0x000110ca mov r3, r1 | r3 = r1;
0x000110cc mov r0, lr | r0 = lr;
0x000110ce b 0x110d8 |
| while (r2 == 0) {
0x000110d0 ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x000110d4 mov r1, r3 | r1 = r3;
| if (r2 == 0) {
0x000110d6 cbz r2, 0x110fc | goto label_37;
| }
0x000110d8 ldrb r1, [r3], 1 | r1 = *(r3);
| r3++;
0x000110dc subs r2, r1, r2 | r2 = r1 - r2;
0x000110de it ne |
| if (r2 == r1) {
0x000110e0 movne r2, 1 | r2 = 1;
| }
0x000110e2 cmp r1, 0 |
0x000110e4 it eq |
| if (r1 != 0) {
0x000110e6 orreq r2, r2, 1 | r2 |= 1;
| }
0x000110ea cmp r2, 0 |
0x000110ec beq 0x110d0 |
| }
| label_9:
0x000110ee ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x000110f0 adds r4, 4 | r4 += 4;
| if (r1 == 0) {
0x000110f2 cbz r1, 0x11114 | goto label_38;
| }
| label_10:
0x000110f4 ldrb.w r2, [r7, 0x58] | r2 = *((r7 + 0x58));
0x000110f8 cmp r2, 0 |
| if (r2 != 0) {
0x000110fa bne 0x110ca | goto label_8;
| }
| label_37:
0x000110fc ldrb r3, [r1] | r3 = *(r1);
0x000110fe cmp r3, 0x3d |
| if (r3 != 0x3d) {
0x00011100 bne 0x110ee | goto label_9;
| }
0x00011102 mov r3, r4 | r3 = r4;
| do {
0x00011104 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00011106 str r2, [r3], 4 | *(r3) = r2;
| r3 += 4;
0x0001110a cmp r2, 0 |
0x0001110c bne 0x11104 |
| } while (r2 != 0);
0x0001110e ldr r1, [r4] | r1 = *(r4);
0x00011110 cmp r1, 0 |
| if (r1 != 0) {
0x00011112 bne 0x110f4 | goto label_10;
| }
| label_38:
0x00011114 ldr r3, [r7, 0x54] | r3 = *((r7 + 0x54));
0x00011116 ldr.w fp, [sp, 4] | fp = var_4h;
0x0001111a b 0x10f34 | goto label_11;
| label_22:
0x0001111c mov r3, r6 | r3 = r6;
0x0001111e b 0x10e8e | goto label_12;
| label_21:
0x00011120 add sp, 0x3c |
0x00011122 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00011124 ldrh r0, [r6, 0x3e] | r0 = *((r6 + 0x3e));
| label_35:
0x00011126 mov r2, ip | r2 = ip;
| label_36:
0x00011128 cmp r2, 0x3d |
| if (r2 != 0x3d) {
0x0001112a bne 0x1107e | goto label_13;
| }
0x0001112c ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001112e lsl.w r2, sl, 3 | r2 = sl << 3;
0x00011132 cmp r3, 0 |
| if (r3 == 0) {
0x00011134 beq 0x111bc | goto label_39;
| }
0x00011136 ldr r1, [sp, 0x2c] | r1 = var_2ch;
0x00011138 sub.w r3, r2, sl | r3 = r2 - sl;
0x0001113c add.w r3, r1, r3, lsl 4 | r3 = r1 + (r3 << 4);
0x00011140 ldr r3, [r3, 0x54] | r3 = *((r3 + 0x54));
0x00011142 cmp r3, 0 |
| if (r3 == 0) {
0x00011144 beq 0x1108a | goto label_14;
| }
0x00011146 ldr r1, [sp, 0x18] | r1 = var_18h;
0x00011148 cmp r1, 0 |
| if (r1 == 0) {
0x0001114a beq 0x11220 | goto label_40;
| }
0x0001114c ldr r0, [sp, 0x10] | r0 = var_10h;
0x0001114e movs r3, 0x3a | r3 = 0x3a;
0x00011150 adds r4, r1, 1 | r4 = r1 + 1;
0x00011152 str r4, [sp, 0x18] | var_18h = r4;
0x00011154 strb r3, [r0, r1] | *((r0 + r1)) = r3;
0x00011156 adds r3, r1, 2 | r3 = r1 + 2;
0x00011158 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0001115a ldrb r0, [r6] | r0 = *(r6);
0x0001115c add r1, r4 | r1 += r4;
| label_17:
0x0001115e cmp r0, 0 |
| if (r0 == 0) {
0x00011160 beq 0x1122a | goto label_41;
| }
0x00011162 ldr r3, [sp, 0x18] | r3 = var_18h;
0x00011164 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00011166 subs r3, 1 | r3--;
0x00011168 add r3, r1 | r3 += r1;
0x0001116a rsb.w r4, r1, 2 | r4 = 2 - r1;
| do {
0x0001116e adds r1, r4, r3 | r1 = r4 + r3;
0x00011170 strb r0, [r3, 1]! | *((r3 += 1)) = r0;
0x00011174 ldrb r0, [r6, 1]! | r0 = *((r6 += 1));
0x00011178 cmp r0, 0 |
0x0001117a bne 0x1116e |
| } while (r0 != 0);
0x0001117c adds r3, r1, 1 | r3 = r1 + 1;
0x0001117e str r3, [sp, 0x18] | var_18h = r3;
0x00011180 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00011182 add r1, r3 | r1 += r3;
| label_19:
0x00011184 movs r3, 0x3d | r3 = 0x3d;
0x00011186 strb r3, [r1] | *(r1) = r3;
| if (r5 == 0) {
0x00011188 cbz r5, 0x111aa | goto label_42;
| }
0x0001118a ldr r1, [sp, 0x18] | r1 = var_18h;
0x0001118c add.w r3, fp, -1 | r3 = fp + -1;
0x00011190 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00011192 adds r4, r3, r5 | r4 = r3 + r5;
0x00011194 subs r1, 1 | r1--;
0x00011196 add r1, r0 | r1 += r0;
| do {
0x00011198 ldrb r0, [r3, 1]! | r0 = *((r3 += 1));
0x0001119c cmp r4, r3 |
0x0001119e strb r0, [r1, 1]! | *((r1 += 1)) = r0;
0x000111a2 bne 0x11198 |
| } while (r4 != r3);
0x000111a4 ldr r3, [sp, 0x18] | r3 = var_18h;
0x000111a6 add r3, r5 | r3 += r5;
0x000111a8 str r3, [sp, 0x18] | var_18h = r3;
| label_42:
0x000111aa ldr r3, [pc, 0xc0] |
0x000111ac sub.w r1, r2, sl | r1 = r2 - sl;
0x000111b0 add r3, pc | r3 = 0x22422;
0x000111b2 add.w r3, r3, r1, lsl 4 | r3 += (r1 << 4);
0x000111b6 ldr r3, [r3, 0x54] | r3 = *((r3 + 0x54));
0x000111b8 cmp r3, 2 |
| if (r3 != 2) {
0x000111ba bne 0x11236 | goto label_43;
| }
| label_39:
0x000111bc sub.w r3, r2, sl | r3 = r2 - sl;
0x000111c0 mov.w r2, 0 | r2 = 0;
0x000111c4 strb.w r2, [fp, r5] | *((fp + r5)) = r2;
0x000111c8 ldr r2, [sp, 0x24] | r2 = var_24h;
0x000111ca add.w r3, r2, r3, lsl 4 | r3 = r2 + (r3 << 4);
0x000111ce ldr r3, [r3, 0x30] | r3 = *((r3 + 0x30));
0x000111d0 cmp r3, 3 |
0x000111d2 it eq |
| if (r3 != 3) {
0x000111d4 streq fp, [sp, 0x30] | var_30h = fp;
| }
| if (r3 != 3) {
0x000111d8 beq 0x111e6 |
0x000111da mov r0, fp | r0 = fp;
0x000111dc movs r1, 0 | r1 = 0;
0x000111de bl 0xc338 | fcn_0000c338 (r0, r1);
0x000111e2 strd r0, r1, [sp, 0x30] | __asm ("strd r0, r1, [var_30h]");
| }
0x000111e6 movs r3, 0 | r3 = 0;
0x000111e8 mov r0, sb | r0 = sb;
0x000111ea mov r2, r3 | r2 = r3;
0x000111ec add r1, sp, 0x30 | r1 += var_30h;
0x000111ee bl 0x10d04 | fcn_00010d04 (r0, r1, r2, r3);
0x000111f2 ldr r3, [sp, 0x28] | r3 = var_28h;
0x000111f4 ldr r3, [r3] | r3 = *(r3);
0x000111f6 str r3, [sp, 0x14] | var_14h = r3;
0x000111f8 b 0x1108a | goto label_14;
| label_20:
0x000111fa ldr r0, [pc, 0x74] |
0x000111fc movs r1, 0 | r1 = 0;
0x000111fe mov.w ip, 0x21 |
0x00011202 add r0, pc | r0 = 0x22478;
0x00011204 bl 0x139d0 | r0 = fcn_000139d0 ();
0x00011208 cmn.w r0, 0x1000 |
| if (r0 > 0x1000) {
0x0001120c bhi.w 0x10e3a | goto label_15;
| }
0x00011210 ldr r3, [pc, 0x60] |
0x00011212 movs r2, 2 | r2 = 2;
0x00011214 add r3, pc | r3 = 0x2248c;
0x00011216 str.w r2, [r3, 0xa64] | __asm ("str.w r2, [r3, 0xa64]");
0x0001121a b 0x10e3a | goto label_15;
| label_34:
0x0001121c mov r7, r8 | r7 = r8;
0x0001121e b 0x11046 | goto label_16;
| label_40:
0x00011220 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00011222 movs r3, 1 | r3 = 1;
0x00011224 b 0x1115e | goto label_17;
| label_31:
0x00011226 mov r3, ip | r3 = ip;
0x00011228 b 0x11002 | goto label_18;
| label_41:
0x0001122a str r3, [sp, 0x18] | var_18h = r3;
0x0001122c b 0x11184 | goto label_19;
| label_28:
0x0001122e ldr r0, [pc, 0x48] |
0x00011230 add r0, pc | r0 = 0x224ae;
0x00011232 bl 0xc2a4 | dl_fatal_printf ()
| label_43:
0x00011236 ldr r3, [pc, 0x44] |
0x00011238 add r3, pc |
0x0001123a ldr r3, [r3] | r3 = *(0x224ba);
0x0001123c str r3, [sp, 0x14] | var_14h = r3;
0x0001123e b 0x1108a | goto label_14;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x11f18 */
| #include <stdint.h>
|
; (fcn) fcn.00011f18 () | void fcn_00011f18 (int16_t arg1) {
| r0 = arg1;
0x00011f18 mov r1, r0 | r1 = r0;
0x00011f1a ldr r0, [pc, 8] | r0 = *(0x00011f24);
0x00011f1c push {r3, lr} |
0x00011f1e add r0, pc | r0 += pc;
0x00011f20 bl 0xc2a4 | dl_fatal_printf ()
0x00011f24 ldr r6, [r4, 0x14] | r6 = *((r4 + 0x14));
0x00011f26 movs r0, r0 |
0x00011f28 movs r0, 0x7f | r0 = 0x7f;
0x00011f2a push {r3, lr} |
0x00011f2c bl 0x14c28 | fcn_00014c28 (r0);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x11f30 */
| #include <stdint.h>
|
; (fcn) fcn.00011f30 () | void fcn_00011f30 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
0x00011f30 push {lr} |
0x00011f32 sub sp, 0xc |
| if (r3 == 0) {
0x00011f34 cbz r3, 0x11f46 | goto label_0;
| }
0x00011f36 ldr r4, [pc, 0x18] |
0x00011f38 add r4, pc | r4 = 0x23e8e;
| do {
0x00011f3a str r0, [sp, 4] | var_4h = r0;
0x00011f3c ldr r0, [pc, 0x14] |
0x00011f3e str r4, [sp] | *(sp) = r4;
0x00011f40 add r0, pc | r0 = 0x23e98;
0x00011f42 bl 0xc2a4 | dl_fatal_printf ()
| label_0:
0x00011f46 ldr r3, [pc, 0x10] |
0x00011f48 add r3, pc | r3 = 0x23ea6;
0x00011f4a mov r4, r3 | r4 = r3;
0x00011f4c b 0x11f3a |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x122fc */
| #include <stdint.h>
|
; (fcn) fcn.000122fc () | void fcn_000122fc (int16_t arg_0h, int16_t arg_4h, int16_t arg_10h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x000122fc ldr.w ip, [pc, 0x68] |
0x00012300 mov r5, r1 | r5 = r1;
0x00012302 push {r7, lr} |
0x00012304 mov r4, r2 | r4 = r2;
0x00012306 sub.w sp, sp, 0x410 |
0x0001230a mov r6, r3 | r6 = r3;
0x0001230c add ip, pc | ip = 0x24678;
0x0001230e ldr.w r7, [ip] |
0x00012312 ldr r7, [r7] | r7 = *(0x24678);
| if (r7 == 0) {
0x00012314 cbz r7, 0x1235a | goto label_2;
| }
| if (r4 == 0) {
0x00012316 cbz r4, 0x12362 | goto label_3;
| }
| label_1:
0x00012318 ldrb r3, [r5] | r3 = *(r5);
| if (r3 != 0) {
0x0001231a cbnz r3, 0x12352 | goto label_4;
| }
0x0001231c ldr.w r8, [pc, 0x4c] |
0x00012320 add r8, pc | r8 = 0x24690;
| if (r0 == 0) {
| label_0:
0x00012322 cbz r0, 0x1234a | goto label_5;
| }
0x00012324 mov.w r2, 0x400 | r2 = 0x400;
0x00012328 add r1, sp, 0x10 | r1 += arg_10h;
0x0001232a bl 0x11e14 | fcn_00011e14 (r0, r1);
0x0001232e ldr r3, [pc, 0x40] |
0x00012330 add r3, pc | r3 = 0x246a6;
| do {
0x00012332 strd r3, r0, [sp, 8] | __asm ("strd r3, r0, [sp, 8]");
0x00012336 mov r2, r4 | r2 = r4;
0x00012338 ldr r0, [pc, 0x38] |
0x0001233a mov r3, r5 | r3 = r5;
0x0001233c mov r1, r7 | r1 = r7;
0x0001233e str r6, [sp, 4] | *(arg_4h) = r6;
0x00012340 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00012344 add r0, pc | r0 = 0x246bc;
0x00012346 bl 0xc2a4 | dl_fatal_printf ()
| label_5:
0x0001234a ldr r3, [pc, 0x2c] |
0x0001234c add r3, pc | r3 = 0x246ca;
0x0001234e mov r0, r3 | r0 = r3;
0x00012350 b 0x12332 |
| } while (1);
| label_4:
0x00012352 ldr.w r8, [pc, 0x28] | r8 = *(0x0001237c);
0x00012356 add r8, pc | r8 += pc;
0x00012358 b 0x12322 | goto label_0;
| label_2:
0x0001235a ldr r7, [pc, 0x24] |
0x0001235c add r7, pc | r7 = 0x246e2;
0x0001235e cmp r4, 0 |
| if (r4 != 0) {
0x00012360 bne 0x12318 | goto label_1;
| }
| label_3:
0x00012362 ldr r4, [pc, 0x20] |
0x00012364 add r4, pc | r4 = 0x246ee;
0x00012366 b 0x12318 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0x999c */
| #include <stdint.h>
|
; (fcn) switch.0x0000999c () | void switch_0x0000999c (int16_t arg_28h, int16_t arg_34h, int16_t arg_38h, int16_t arg_3ch, int16_t arg_40h, int16_t arg_70h, int16_t arg_7ch, int16_t arg_c4h, int16_t arg_e8h, int16_t arg_120h, int16_t arg_174h, int16_t arg_198h, int16_t arg_1a8h, int16_t arg_218h, int16_t arg_220h, int16_t arg_224h, int16_t arg_228h, int16_t arg_22ch, int16_t arg_254h, int16_t arg_0h, int16_t arg_4h, int16_t arg_8h, int16_t arg_ch, int16_t arg2) {
| r1 = arg2;
| label_24:
0x00008f64 adds r1, r2, r6 | r1 = r2 + r6;
0x00008f66 ldr r2, [r7, 0x30] | r2 = *((r7 + 0x30));
0x00008f68 ldr.w r4, [fp] | r4 = *(fp);
0x00008f6c str r1, [r7, 0x48] | *((r7 + 0x48)) = r1;
0x00008f6e ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x00008f70 cmp r3, 0 |
| if (r3 == 0) {
0x00008f72 beq.w 0x94e2 | goto label_73;
| }
0x00008f76 cmp r6, r1 |
| if (r6 >= r1) {
0x00008f78 bhs 0x9068 | goto label_10;
| }
0x00008f7a ldr.w r2, [pc, 0xab0] |
0x00008f7e ldr.w sl, [pc, 0xab0] | sl = *(0x00009a30);
0x00008f82 ldr.w sb, [pc, 0xab0] |
0x00008f86 add r2, pc | r2 = 0x129b8;
0x00008f88 add sl, pc | sl += pc;
0x00008f8a str r2, [r7, 0x44] | *((r7 + 0x44)) = r2;
0x00008f8c str.w sl, [r7, 0x48] | __asm ("str.w sl, [r7, 0x48]");
0x00008f90 add sb, pc | sb = 0x129ca;
0x00008f92 mov sl, r1 | sl = r1;
0x00008f94 b 0x8fac |
| while (r1 == 0x16) {
0x00008f96 ldr.w r3, [fp, 0x218] | r3 = *(arg_218h);
0x00008f9a cmp r3, 0 |
| if (r3 != 0) {
0x00008f9c bne.w 0x92a6 | goto label_74;
| }
0x00008fa0 ldr r3, [r4, r5] | r3 = *((r4 + r5));
0x00008fa2 add r3, r4 | r3 += r4;
0x00008fa4 str r3, [r4, r5] | *((r4 + r5)) = r3;
| label_1:
0x00008fa6 adds r6, 8 | r6 += 8;
0x00008fa8 cmp sl, r6 |
| if (sl < r6) {
0x00008faa bls 0x9068 | goto label_10;
| }
| label_0:
0x00008fac ldrd r5, r3, [r6] | __asm ("ldrd r5, r3, [r6]");
0x00008fb0 add.w r8, r4, r5 | r8 = r4 + r5;
0x00008fb4 uxtb r1, r3 | r1 = (int8_t) r3;
0x00008fb6 cmp r1, 0x16 |
0x00008fb8 beq 0x8f96 |
| }
0x00008fba cmp r1, 0xd |
| if (r1 != 0xd) {
0x00008fbc bne.w 0xa326 | goto label_75;
| }
0x00008fc0 ldr.w r2, [fp, 0x38] | r2 = *(arg_38h);
0x00008fc4 lsrs r3, r3, 8 | r3 >>= 8;
0x00008fc6 lsls r0, r3, 4 | r0 = r3 << 4;
0x00008fc8 ldr.w ip, [r2, 4] | ip = *((r2 + 4));
0x00008fcc ldr.w r2, [fp, 0xe8] | r2 = *(arg_e8h);
0x00008fd0 add.w r1, r0, ip | r1 = r0 + ip;
| if (r2 != 0) {
0x00008fd4 cbz r2, 0x8fe8 |
0x00008fd6 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00008fd8 ldrh.w r3, [r2, r3, lsl 1] | offset_0 = r3 << 1;
| r3 = *((r2 + offset_0));
0x00008fdc ldr.w r2, [fp, 0x174] | r2 = *(arg_174h);
0x00008fe0 ubfx r3, r3, 0, 0xf | r3 = (r3 >> 0) & ((1 << 0xf) - 1);
0x00008fe4 add.w r2, r2, r3, lsl 4 | r2 += (r3 << 4);
| }
0x00008fe8 str r1, [r7, 0x54] | *((r7 + 0x54)) = r1;
0x00008fea ldrb.w lr, [r1, 0xc] |
0x00008fee lsrs.w r3, lr, 4 | r3 = lr >> 4;
| if (r3 == lr) {
0x00008ff2 beq.w 0x985e | goto label_76;
| }
0x00008ff6 ldrb r3, [r1, 0xd] | r3 = *((r1 + 0xd));
0x00008ff8 and r3, r3, 3 | r3 &= 3;
0x00008ffc subs r3, 1 | r3--;
0x00008ffe cmp r3, 1 |
| if (r3 < 1) {
0x00009000 bls.w 0x985e | goto label_76;
| }
0x00009004 ldr.w r3, [fp, 0x220] | r3 = *(arg_220h);
0x00009008 cmp r1, r3 |
| if (r1 == r3) {
0x0000900a beq.w 0xa590 | goto label_77;
| }
| label_67:
0x0000900e movs r3, 1 | r3 = 1;
0x00009010 str.w r1, [fp, 0x220] | __asm ("str.w r1, [arg_220h]");
0x00009014 str.w r3, [fp, 0x224] | __asm ("str.w r3, [arg_224h]");
| if (r2 != 0) {
0x00009018 cbz r2, 0x9022 |
0x0000901a ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0000901c cmp r3, 0 |
0x0000901e it eq |
| if (r3 == 0) {
0x00009020 moveq r2, 0 | r2 = 0;
| goto label_78;
| }
| }
| label_78:
0x00009022 ldr.w r0, [r0, ip] | r0 = *((r0 + ip));
0x00009026 mov.w ip, 0 |
0x0000902a ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x0000902c mov r1, fp | r1 = fp;
0x0000902e str r2, [sp] | *(sp) = r2;
0x00009030 add.w r2, r7, 0x54 | r2 = r7 + 0x54;
0x00009034 add r0, r3 | r0 += r3;
0x00009036 movs r3, 9 | r3 = 9;
0x00009038 strd r3, ip, [sp, 8] | __asm ("strd r3, ip, [sp, 8]");
0x0000903c movs r3, 1 | r3 = 1;
0x0000903e str r3, [sp, 4] | *(arg_4h) = r3;
0x00009040 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00009042 bl 0x7ac8 | fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
0x00009046 ldr r1, [r7, 0x54] | r1 = *((r7 + 0x54));
0x00009048 mov r3, r0 | r3 = r0;
0x0000904a str.w r0, [fp, 0x228] | __asm ("str.w r0, [arg_228h]");
0x0000904e str.w r1, [fp, 0x22c] | __asm ("str.w r1, [arg_22ch]");
| label_68:
0x00009052 cmp r1, 0 |
| if (r1 != 0) {
0x00009054 bne.w 0xa3b4 | goto label_79;
| }
| label_63:
0x00009058 ldr.w r3, [pc, 0x9dc] |
0x0000905c add r3, pc | r3 = 0x12a98;
| label_18:
0x0000905e adds r6, 8 | r6 += 8;
0x00009060 str.w r3, [r8, 4] | __asm ("str.w r3, [r8, 4]");
0x00009064 cmp sl, r6 |
| if (sl > r6) {
0x00009066 bhi 0x8fac | goto label_0;
| }
| label_10:
0x00009068 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x0000906a ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x0000906c cmp r3, r2 |
| if (r3 != r2) {
0x0000906e bne.w 0x9a06 | goto label_80;
| }
0x00009072 ldr r0, [r7, 0x20] | r0 = *((r7 + 0x20));
0x00009074 movs r2, 0x20 | r2 = 0x20;
0x00009076 movs r1, 0 | r1 = 0;
0x00009078 blx 0x15da0 | fcn_00015da0 (r0, r1);
0x0000907c ldr.w r3, [fp, 0x3c] | r3 = *(arg_3ch);
0x00009080 cmp r3, 0 |
| if (r3 == 0) {
0x00009082 beq.w 0x9ff4 | goto label_81;
| }
0x00009086 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x00009088 ldr.w r3, [fp, 0x40] | r3 = *(arg_40h);
0x0000908c ldr.w r0, [fp, 0xc4] | r0 = *(arg_c4h);
0x00009090 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00009092 adds r3, r2, r1 | r3 = r2 + r1;
| if (r0 != 0) {
0x00009094 cbz r0, 0x909a |
0x00009096 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x00009098 str r0, [r7, 0x60] | *((r7 + 0x60)) = r0;
| }
| label_47:
0x0000909a ldr.w r0, [fp, 0x70] | r0 = *(arg_70h);
| if (r0 != 0) {
0x0000909e cbz r0, 0x90a8 |
0x000090a0 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x000090a2 cmp r0, 7 |
| if (r0 == 7) {
0x000090a4 beq.w 0xa2e8 | goto label_82;
| }
| }
| label_53:
0x000090a8 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x000090aa str r3, [r7, 0x30] | *((r7 + 0x30)) = r3;
0x000090ac ldr.w r3, [pc, 0x98c] | r3 = *(0x00009a3c);
0x000090b0 add r3, pc | r3 += pc;
0x000090b2 add.w r3, r3, 0x598 | r3 += 0x598;
0x000090b6 str r3, [r7, 0x20] | *((r7 + 0x20)) = r3;
0x000090b8 ldr.w r3, [pc, 0x984] | r3 = *(0x00009a40);
0x000090bc add r3, pc | r3 += pc;
0x000090be str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
0x000090c0 ldr.w r3, [pc, 0x980] | r3 = *(0x00009a44);
0x000090c4 add r3, pc | r3 += pc;
0x000090c6 str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x000090c8 ldr.w r3, [pc, 0x97c] |
0x000090cc add r3, pc | r3 = 0x12b18;
0x000090ce str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
| label_3:
0x000090d0 adds r3, r2, r1 | r3 = r2 + r1;
0x000090d2 ldr r1, [r7, 0x20] | r1 = *((r7 + 0x20));
0x000090d4 str r3, [r7, 0x48] | *((r7 + 0x48)) = r3;
0x000090d6 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x000090d8 cmp fp, r1 |
0x000090da ldr.w sl, [fp] | sl = *(fp);
0x000090de ldr r5, [r3, 8] | r5 = *((r3 + 8));
0x000090e0 ldr.w r3, [fp, 0x38] | r3 = *(arg_38h);
0x000090e4 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000090e6 add.w r5, r5, r5, lsl 1 | r5 += (r5 << 1);
0x000090ea add.w r5, r2, r5, lsl 2 | r5 = r2 + (r5 << 2);
0x000090ee str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x000090f0 mov r3, r2 | r3 = r2;
| if (fp != r1) {
0x000090f2 beq 0x9106 |
0x000090f4 cmp.w sl, 0 |
| if (sl != 0) {
0x000090f8 bne.w 0x98a4 | goto label_83;
| }
0x000090fc ldr.w r1, [fp, 0x120] | r1 = *(arg_120h);
0x00009100 cmp r1, 0 |
| if (r1 == 0) {
0x00009102 beq.w 0x98a4 | goto label_83;
| }
| }
| label_19:
0x00009106 ldr.w r3, [fp, 0xe8] | r3 = *(arg_e8h);
0x0000910a cmp r3, 0 |
| if (r3 == 0) {
0x0000910c beq.w 0x98c6 | goto label_84;
| }
| label_20:
0x00009110 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00009112 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x00009114 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009116 cmp r3, r5 |
| if (r3 < r5) {
0x00009118 bls.w 0x92ca | goto label_21;
| }
| do {
0x0000911c ldrd r8, r4, [r5] | __asm ("ldrd r8, r4, [r5]");
0x00009120 ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x00009122 ldr.w r0, [fp, 0x174] | r0 = *(arg_174h);
0x00009126 add.w r3, sl, r8 | r3 = sl + r8;
0x0000912a str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x0000912c lsrs r3, r4, 8 | r3 = r4 >> 8;
0x0000912e uxtb r4, r4 | r4 = (int8_t) r4;
0x00009130 ldrh.w r1, [r2, r3, lsl 1] | offset_1 = r3 << 1;
| r1 = *((r2 + offset_1));
0x00009134 lsl.w sb, r3, 4 | sb = r3 << 4;
0x00009138 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x0000913a cmp r4, 0x17 |
0x0000913c add.w r6, r3, sb | r6 = r3 + sb;
0x00009140 str r6, [r7, 0x54] | *((r7 + 0x54)) = r6;
| if (r4 == 0x17) {
0x00009142 beq.w 0x9404 | goto label_85;
| }
0x00009146 cmp r4, 0 |
| if (r4 != 0) {
0x00009148 beq.w 0x92c0 |
0x0000914c ldrb r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0000914e lsrs r3, r2, 4 | r3 = r2 >> 4;
| if (r3 == r2) {
0x00009150 beq.w 0x931a | goto label_86;
| }
0x00009154 ldrb r3, [r6, 0xd] | r3 = *((r6 + 0xd));
0x00009156 and r3, r3, 3 | r3 &= 3;
0x0000915a subs r3, 1 | r3--;
0x0000915c cmp r3, 1 |
| if (r3 < 1) {
0x0000915e bls.w 0x931a | goto label_86;
| }
0x00009162 sub.w r3, r4, 0x14 | r3 = r4 - 0x14;
0x00009166 ldr.w r2, [fp, 0x220] | r2 = *(arg_220h);
0x0000916a clz r3, r3 | r3 &= r3;
0x0000916e sub.w ip, r4, 0x15 |
0x00009172 lsrs r3, r3, 5 | r3 >>= 5;
0x00009174 clz ip, ip |
0x00009178 lsr.w ip, ip, 5 |
0x0000917c cmp r6, r2 |
0x0000917e lsl.w r3, r3, 1 | r3 <<= 1;
0x00009182 orr.w r3, r3, ip, lsl 2 | r3 |= (ip << 2);
0x00009186 sub.w ip, r4, 0xd |
| if (r6 == r2) {
0x0000918a beq.w 0x99cc | goto label_87;
| }
0x0000918e cmp.w ip, 9 |
| if (ip <= 9) {
0x00009192 bhi 0x91a0 |
| label_22:
0x00009194 ldr.w r2, [pc, 0x8b4] |
0x00009198 add r2, pc |
0x0000919a ldr.w r2, [r2, ip, lsl 2] | r2 = *(0x12be8);
0x0000919e orrs r3, r2 | r3 |= r2;
| }
| label_36:
0x000091a0 ubfx r2, r1, 0, 0xf | r2 = (r1 >> 0) & ((1 << 0xf) - 1);
0x000091a4 strd r6, r3, [fp, 0x220] | __asm ("strd r6, r3, [fp, 0x220]");
0x000091a8 adds.w r2, r0, r2, lsl 4 | r2 = r0 + (r2 << 4);
| if (r2 != r0) {
0x000091ac beq 0x91b6 |
0x000091ae ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000091b0 cmp r1, 0 |
0x000091b2 it eq |
| if (r1 == 0) {
0x000091b4 moveq r2, 0 | r2 = 0;
| goto label_88;
| }
| }
| label_88:
0x000091b6 ldr r1, [r7, 0x4c] | r1 = *((r7 + 0x4c));
0x000091b8 ldr.w r0, [r1, sb] | r0 = *((r1 + sb));
0x000091bc mov r1, fp | r1 = fp;
0x000091be strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x000091c2 movs r2, 0 | r2 = 0;
0x000091c4 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x000091c6 add r0, r3 | r0 += r3;
0x000091c8 movs r3, 9 | r3 = 9;
0x000091ca strd r3, r2, [sp, 8] | __asm ("strd r3, r2, [sp, 8]");
0x000091ce add.w r2, r7, 0x54 | r2 = r7 + 0x54;
0x000091d2 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x000091d4 bl 0x7ac8 | r0 = fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
0x000091d8 mov r1, r0 | r1 = r0;
0x000091da str.w r0, [fp, 0x228] | __asm ("str.w r0, [arg_228h]");
0x000091de ldr r0, [r7, 0x54] | r0 = *((r7 + 0x54));
0x000091e0 str.w r0, [fp, 0x22c] | __asm ("str.w r0, [arg_22ch]");
| label_23:
0x000091e4 cmp r0, 0 |
| if (r0 != 0) {
0x000091e6 bne.w 0x9400 | goto label_89;
| }
0x000091ea cmp r4, 0x16 |
| if (r4 > 0x16) {
0x000091ec bhi.w 0x92fc | goto label_6;
| }
0x000091f0 subs r3, r4, 1 | r3 = r4 - 1;
0x000091f2 cmp r3, 0x15 |
| if (r3 <= 0x15) {
0x000091f4 bhi 0x92aa |
| /* switch table (22 cases) at 0x91fa */
0x000091f6 tbb [pc, r3] | __asm ("tbb [0x000091fc]");
| label_2:
0x00009210 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x00009212 cmp r3, 0 |
| if (r3 != 0) {
0x00009214 bne.w 0xa4ec | goto label_90;
| }
| label_64:
0x00009218 ldrb.w r3, [fp, 0x198] | r3 = *(arg_198h);
0x0000921c movs r4, 2 |
0x0000921e movt r4, 0xf | r4 = 0xf0002;
0x00009222 orr r3, r3, 4 | r3 |= 4;
0x00009226 strb.w r3, [fp, 0x198] | *(arg_198h) = r3;
0x0000922a ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x0000922c mov r5, r3 | r5 = r3;
0x0000922e cmp r3, 0 |
| if (r3 != 0) {
0x00009230 bne.w 0x9e1e | goto label_41;
| }
| label_40:
0x00009234 ldr.w r3, [fp, 0x254] | r3 = *(arg_254h);
0x00009238 cmp r3, 0 |
| if (r3 != 0) {
0x0000923a bne.w 0x9daa | goto label_91;
| }
0x0000923e adds r7, 0x7c | r7 += 0x7c;
0x00009240 mov sp, r7 |
0x00009242 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_74:
0x000092a6 str r3, [r4, r5] | *((r4 + r5)) = r3;
0x000092a8 b 0x8fa6 | goto label_1;
| }
| label_5:
0x000092aa invalid |
| label_11:
0x000092ac movs r2, 0 | r2 = 0;
0x000092ae mov r1, sl | r1 = sl;
0x000092b0 mov r0, fp | r0 = fp;
0x000092b2 bl 0x8e34 | fcn_00008e34 (r0, r1, r2);
0x000092b6 movs r3, 0 | r3 = 0;
0x000092b8 invalid |
0x000092ba add r2, r3 | r2 += r3;
0x000092bc str.w r2, [sl, r8] | __asm ("str.w r2, [sl, r8]");
| }
| label_4:
0x000092c0 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x000092c2 adds r5, 0xc | r5 += 0xc;
0x000092c4 cmp r3, r5 |
0x000092c6 bhi.w 0x911c |
| } while (r3 > r5);
| label_21:
0x000092ca ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x000092cc ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x000092ce cmp r3, r2 |
| if (r3 == r2) {
0x000092d0 beq 0x9210 | goto label_2;
| }
0x000092d2 ldr r3, [r7, 0x30] | r3 = *((r7 + 0x30));
0x000092d4 ldrd r2, r1, [r3, 0x10] | __asm ("ldrd r2, r1, [r3, 0x10]");
0x000092d8 adds r3, 0x10 | r3 += 0x10;
0x000092da str r3, [r7, 0x30] | *((r7 + 0x30)) = r3;
0x000092dc b 0x90d0 | goto label_3;
0x000092de cmp r1, 0 |
| if (r1 == 0) {
0x000092e0 beq 0x92c0 | goto label_4;
| }
0x000092e2 ldr.w r3, [r1, 0x248] | r3 = *((r1 + 0x248));
0x000092e6 str.w r3, [sl, r8] | __asm ("str.w r3, [sl, r8]");
0x000092e8 adds r0, 8 | r0 += 8;
0x000092ea b 0x92c0 | goto label_4;
0x000092ec movs r3, 0 | r3 = 0;
0x000092ee mov r1, r3 | r1 = r3;
0x000092f0 ldr r2, [r7, 0x44] | r2 = *((r7 + 0x44));
0x000092f2 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000092f4 mov r0, fp | r0 = fp;
0x000092f6 bl 0x8bf8 | fcn_00008bf8 (r0, r1, r2, r3);
0x000092fa b 0x92c0 | goto label_4;
| label_6:
0x000092fc cmp r4, 0xa0 |
| if (r4 != 0xa0) {
0x000092fe bne 0x92aa | goto label_5;
| }
0x00009300 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00009302 ldr.w r3, [fp] | r3 = *(fp);
0x00009306 add r3, r2 | r3 += r2;
0x00009308 ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
| if (r2 == 0) {
0x0000930a cbnz r2, 0x9314 |
| label_9:
0x0000930c ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x0000930e ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x00009310 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
0x00009312 mov r3, r0 | r3 = r0;
| }
0x00009314 str.w r3, [sl, r8] | __asm ("str.w r3, [sl, r8]");
0x00009318 b 0x92c0 | goto label_4;
| label_86:
0x0000931a mov r1, fp | r1 = fp;
0x0000931c mov r0, r6 | r0 = r6;
| label_7:
0x0000931e ldrh.w ip, [r0, 0xe] | ip = *((r0 + 0xe));
0x00009322 movw r3, 0xfff1 | r3 = 0xfff1;
0x00009326 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x00009328 and r2, r2, 0xf | r2 &= 0xf;
0x0000932c cmp ip, r3 |
0x0000932e ite ne |
| if (ip == r3) {
0x00009330 ldrne r3, [r1] | r3 = *(r1);
| }
| if (ip != r3) {
0x00009332 moveq r3, 0 | r3 = 0;
| }
0x00009334 cmp r2, 0xa |
0x00009336 add r3, r0 | r3 += r0;
| if (r2 == 0xa) {
0x00009338 beq 0x9412 | goto label_92;
| }
| label_8:
0x0000933a cmp r4, 0x16 |
| if (r4 > 0x16) {
0x0000933c bhi 0x92fc | goto label_6;
| }
0x0000933e subs r2, r4, 1 | r2 = r4 - 1;
0x00009340 cmp r2, 0x15 |
| if (r2 > 0x15) {
0x00009342 bhi 0x92aa | goto label_5;
| }
0x00009344 adr r0, 8 | r0 = 8;
0x00009346 ldr.w r2, [r0, r2, lsl 2] | offset_2 = r2 << 2;
| r2 = *((r0 + offset_2));
0x00009348 movs r0, 0x22 | r0 = 0x22;
0x0000934a add r0, r2 | r0 += r2;
| /* switch table (22 cases) at 0x9350 */
0x0000934c bx r0 | return uint32_t (*r0)() ();
| label_89:
0x00009400 ldrb r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00009402 b 0x931e | goto label_7;
| label_85:
0x00009404 ldr.w r3, [fp] | r3 = *(fp);
0x00009408 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x0000940a add r3, r2 | r3 += r2;
0x0000940c str.w r3, [sl, r8] | __asm ("str.w r3, [sl, r8]");
0x00009410 b 0x92c0 | goto label_4;
| label_92:
0x00009412 ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x00009414 cmp.w ip, 0 |
0x00009418 clz r2, r2 | r2 &= r2;
0x0000941c lsr.w r2, r2, 5 | r2 >>= 5;
0x00009420 it eq |
| if (ip != 0) {
0x00009422 moveq r2, 0 | r2 = 0;
| }
0x00009424 cmp r2, 0 |
| if (r2 == 0) {
0x00009426 beq 0x933a | goto label_8;
| }
0x00009428 ldr.w r2, [pc, 0x634] | r2 = *(0x00009a60);
0x0000942c str r1, [r7, 0x18] | *((r7 + 0x18)) = r1;
0x0000942e add r2, pc | r2 += pc;
0x00009430 ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x00009432 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00009434 cmp r4, 0x16 |
0x00009436 mov r3, r0 | r3 = r0;
| if (r4 > 0x16) {
0x00009438 bhi 0x94d2 | goto label_93;
| }
0x0000943a subs r2, r4, 1 | r2 = r4 - 1;
0x0000943c ldr r1, [r7, 0x18] | r1 = *((r7 + 0x18));
0x0000943e cmp r2, 0x15 |
| if (r2 > 0x15) {
0x00009440 bhi.w 0x92aa | goto label_5;
| }
0x00009444 adr r0, 8 | r0 = 8;
0x00009446 ldr.w r2, [r0, r2, lsl 2] | offset_3 = r2 << 2;
| r2 = *((r0 + offset_3));
0x0000944a add r0, r2 | r0 += r2;
| /* switch table (22 cases) at 0x9450 */
0x0000944c bx r0 | return uint32_t (*r0)() ();
| label_93:
0x000094d2 cmp r4, 0xa0 |
| if (r4 != 0xa0) {
0x000094d4 bne.w 0x92aa | goto label_5;
| }
0x000094d8 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x000094da ldr.w r2, [fp] | r2 = *(fp);
0x000094de add r3, r2 | r3 += r2;
0x000094e0 b 0x930c | goto label_9;
| label_73:
0x000094e2 ldr.w r3, [pc, 0x580] | r3 = *(0x00009a64);
0x000094e6 add.w sl, r6, r2, lsl 3 | sl = r6 + (r2 << 3);
0x000094ea ldr.w r2, [fp, 0x38] | r2 = *(arg_38h);
0x000094ee add r3, pc | r3 += pc;
0x000094f0 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x000094f2 add.w r3, r3, 0x598 | r3 += 0x598;
0x000094f6 cmp r4, 0 |
0x000094f8 it ne |
| if (r4 != 0) {
0x000094fa cmpne fp, r3 | __asm ("cmpne fp, r3");
| }
0x000094fc str r2, [r7, 0x4c] | *((r7 + 0x4c)) = r2;
| if (r4 != 0) {
0x000094fe bne.w 0x9e88 | goto label_94;
| }
| label_44:
0x00009502 ldr.w r3, [fp, 0xe8] | r3 = *(arg_e8h);
0x00009506 cmp r3, 0 |
| if (r3 == 0) {
0x00009508 beq.w 0x9ea6 | goto label_95;
| }
| label_45:
0x0000950c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0000950e str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x00009510 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009512 cmp r3, sl |
| if (r3 < sl) {
0x00009514 bls.w 0x9068 | goto label_10;
| }
0x00009518 ldr.w r3, [pc, 0x54c] | r3 = *(0x00009a68);
0x0000951c mov sb, r4 | sb = r4;
0x0000951e add r3, pc | r3 += pc;
0x00009520 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
| do {
| label_13:
0x00009522 ldrd r4, r5, [sl] | __asm ("ldrd r4, r5, [sl]");
0x00009526 ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x00009528 ldr.w r0, [fp, 0x174] | r0 = *(arg_174h);
0x0000952c add.w r3, sb, r4 | r3 = sb + r4;
0x00009530 str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x00009532 lsrs r3, r5, 8 | r3 = r5 >> 8;
0x00009534 uxtb r5, r5 | r5 = (int8_t) r5;
0x00009536 ldrh.w r2, [r2, r3, lsl 1] | offset_4 = r3 << 1;
| r2 = *((r2 + offset_4));
0x0000953a lsl.w r8, r3, 4 | r8 = r3 << 4;
0x0000953e ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x00009540 cmp r5, 0x17 |
0x00009542 add.w r6, r3, r8 | r6 = r3 + r8;
0x00009546 str r6, [r7, 0x54] | *((r7 + 0x54)) = r6;
| if (r5 == 0x17) {
0x00009548 beq.w 0x9842 | goto label_96;
| }
0x0000954c cmp r5, 0 |
| if (r5 != 0) {
0x0000954e beq 0x9634 |
0x00009550 ldrb r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x00009552 lsrs r3, r1, 4 | r3 = r1 >> 4;
| if (r3 == r1) {
0x00009554 beq.w 0x967a | goto label_97;
| }
0x00009558 ldrb r3, [r6, 0xd] | r3 = *((r6 + 0xd));
0x0000955a and r3, r3, 3 | r3 &= 3;
0x0000955e subs r3, 1 | r3--;
0x00009560 cmp r3, 1 |
| if (r3 < 1) {
0x00009562 bls.w 0x967a | goto label_97;
| }
0x00009566 sub.w r3, r5, 0x15 | r3 = r5 - 0x15;
0x0000956a ldr.w r1, [fp, 0x220] | r1 = *(arg_220h);
0x0000956e clz r3, r3 | r3 &= r3;
0x00009572 sub.w ip, r5, 0x14 |
0x00009576 lsrs r3, r3, 5 | r3 >>= 5;
0x00009578 clz ip, ip |
0x0000957c lsr.w ip, ip, 5 |
0x00009580 cmp r6, r1 |
0x00009582 lsl.w r3, r3, 2 | r3 <<= 2;
0x00009586 orr.w r3, r3, ip, lsl 1 | r3 |= (ip << 1);
0x0000958a sub.w ip, r5, 0xd |
| if (r6 == r1) {
0x0000958e beq.w 0x9d6a | goto label_98;
| }
0x00009592 cmp.w ip, 9 |
| if (ip <= 9) {
0x00009596 bhi 0x95a4 |
| label_38:
0x00009598 ldr.w r1, [pc, 0x4d0] |
0x0000959c add r1, pc |
0x0000959e ldr.w r1, [r1, ip, lsl 2] | r1 = *(0x1300c);
0x000095a2 orrs r3, r1 | r3 |= r1;
| }
| label_34:
0x000095a4 ubfx r2, r2, 0, 0xf | r2 = (r2 >> 0) & ((1 << 0xf) - 1);
0x000095a8 strd r6, r3, [fp, 0x220] | __asm ("strd r6, r3, [fp, 0x220]");
0x000095ac adds.w r2, r0, r2, lsl 4 | r2 = r0 + (r2 << 4);
| if (r2 != r0) {
0x000095b0 beq 0x95ba |
0x000095b2 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x000095b4 cmp r1, 0 |
0x000095b6 it eq |
| if (r1 == 0) {
0x000095b8 moveq r2, 0 | r2 = 0;
| goto label_99;
| }
| }
| label_99:
0x000095ba ldr r1, [r7, 0x4c] | r1 = *((r7 + 0x4c));
0x000095bc mov.w ip, 0 |
0x000095c0 ldr.w r0, [r1, r8] | r0 = *((r1 + r8));
0x000095c4 mov r1, fp | r1 = fp;
0x000095c6 strd r2, r3, [sp] | __asm ("strd r2, r3, [sp]");
0x000095ca add.w r2, r7, 0x54 | r2 = r7 + 0x54;
0x000095ce ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x000095d0 add r0, r3 | r0 += r3;
0x000095d2 movs r3, 9 | r3 = 9;
0x000095d4 strd r3, ip, [sp, 8] | __asm ("strd r3, ip, [sp, 8]");
0x000095d8 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x000095da bl 0x7ac8 | r0 = fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
0x000095de mov r2, r0 | r2 = r0;
0x000095e0 str.w r0, [fp, 0x228] | __asm ("str.w r0, [arg_228h]");
0x000095e4 ldr r0, [r7, 0x54] | r0 = *((r7 + 0x54));
0x000095e6 str.w r0, [fp, 0x22c] | __asm ("str.w r0, [arg_22ch]");
| label_35:
0x000095ea cmp r0, 0 |
| if (r0 != 0) {
0x000095ec bne.w 0x983e | goto label_100;
| }
0x000095f0 cmp r5, 0x16 |
| if (r5 > 0x16) {
0x000095f2 bhi 0x965c | goto label_16;
| }
0x000095f4 subs r3, r5, 1 | r3 = r5 - 1;
0x000095f6 cmp r3, 0x15 |
| if (r3 <= 0x15) {
0x000095f8 bhi 0x962a |
| /* switch table (23 cases) at 0x95fe */
0x000095fa tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
| }
| label_14:
0x0000962a invalid |
0x0000962c b 0x92ac | goto label_11;
0x0000962e movs r3, 0 | r3 = 0;
| label_15:
0x00009630 invalid |
0x00009632 adds r0, 4 | r0 += 4;
| }
| label_12:
0x00009634 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009636 add.w sl, sl, 8 | sl += 8;
0x0000963a cmp r3, sl |
0x0000963c bhi.w 0x9522 |
| } while (r3 > sl);
0x00009640 b 0x9068 | goto label_10;
0x00009642 cmp r2, 0 |
| if (r2 == 0) {
0x00009644 beq 0x9634 | goto label_12;
| }
0x00009646 ldr.w r3, [r2, 0x248] | r3 = *((r2 + 0x248));
0x0000964a add.w sl, sl, 8 | sl += 8;
0x0000964e str.w r3, [sb, r4] | __asm ("str.w r3, [sb, r4]");
0x00009652 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009654 cmp r3, sl |
| if (r3 > sl) {
0x00009656 bhi.w 0x9522 | goto label_13;
| }
0x0000965a b 0x9068 | goto label_10;
| label_16:
0x0000965c cmp r5, 0xa0 |
| if (r5 != 0xa0) {
0x0000965e bne 0x962a | goto label_14;
| }
0x00009660 ldr.w r2, [sb, r4] | r2 = *((sb + r4));
0x00009664 ldr.w r3, [fp] | r3 = *(fp);
0x00009668 add r3, r2 | r3 += r2;
0x0000966a ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x0000966c cmp r2, 0 |
| if (r2 != 0) {
0x0000966e bne 0x9630 | goto label_15;
| }
| label_32:
0x00009670 ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x00009672 ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x00009674 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
0x00009676 mov r3, r0 | r3 = r0;
0x00009678 b 0x9630 | goto label_15;
| label_97:
0x0000967a mov r2, fp | r2 = fp;
0x0000967c mov r0, r6 | r0 = r6;
| label_17:
0x0000967e ldrh.w ip, [r0, 0xe] | ip = *((r0 + 0xe));
0x00009682 movw r3, 0xfff1 | r3 = 0xfff1;
0x00009686 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x00009688 and r1, r1, 0xf | r1 &= 0xf;
0x0000968c cmp ip, r3 |
0x0000968e ite ne |
| if (ip == r3) {
0x00009690 ldrne r3, [r2] | r3 = *(r2);
| }
| if (ip != r3) {
0x00009692 moveq r3, 0 | r3 = 0;
| }
0x00009694 cmp r1, 0xa |
0x00009696 add r3, r0 | r3 += r0;
| if (r1 == 0xa) {
0x00009698 beq.w 0x9a98 | goto label_101;
| }
| label_25:
0x0000969c cmp r5, 0x16 |
| if (r5 > 0x16) {
0x0000969e bhi 0x965c | goto label_16;
| }
0x000096a0 subs r1, r5, 1 | r1 = r5 - 1;
0x000096a2 cmp r1, 0x15 |
| if (r1 > 0x15) {
0x000096a4 bhi 0x962a | goto label_14;
| }
0x000096a6 adr r0, 8 | r0 = 8;
0x000096a8 ldr.w r1, [r0, r1, lsl 2] | offset_5 = r1 << 2;
| r1 = *((r0 + offset_5));
0x000096ac add r0, r1 | r0 += r1;
| /* switch table (22 cases) at 0x96b0 */
0x000096ae bx r0 | return uint32_t (*r0)() ();
0x00009708 movs r3, 0 | r3 = 0;
0x0000970a ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x0000970c cmp fp, r2 |
| if (fp == r2) {
0x0000970e beq.w 0x9fd8 | goto label_102;
| }
| label_46:
0x00009712 ldr.w r2, [sb, r4] | r2 = *((sb + r4));
0x00009716 add.w sl, sl, 8 | sl += 8;
0x0000971a add r3, r2 | r3 += r2;
0x0000971c str.w r3, [sb, r4] | __asm ("str.w r3, [sb, r4]");
0x00009720 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009722 cmp r3, sl |
| if (r3 > sl) {
0x00009724 bhi.w 0x9522 | goto label_13;
| }
0x00009728 b 0x9068 | goto label_10;
0x0000972a movs r3, 0 | r3 = 0;
0x0000972c ldr.w r0, [sb, r4] | r0 = *((sb + r4));
0x0000972e movs r4, r0 | r4 = r0;
0x00009730 mov r1, r3 | r1 = r3;
0x00009732 ldr r2, [r7, 0x44] | r2 = *((r7 + 0x44));
0x00009734 add.w sl, sl, 8 | sl += 8;
0x00009738 sbfx r3, r0, 0, 0x18 | __asm ("sbfx r3, r0, 0, 0x18");
0x0000973c mov r0, fp | r0 = fp;
0x0000973e lsls r3, r3, 2 | r3 <<= 2;
0x00009740 bl 0x8bf8 | fcn_00008bf8 (r0, r1, r2, r3);
0x00009744 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009746 cmp r3, sl |
| if (r3 > sl) {
0x00009748 bhi.w 0x9522 | goto label_13;
| }
0x0000974c b 0x9068 | goto label_10;
| label_100:
0x0000983e ldrb r1, [r0, 0xc] | r1 = *((r0 + 0xc));
0x00009840 b 0x967e | goto label_17;
| label_96:
0x00009842 ldr.w r3, [sb, r4] | r3 = *((sb + r4));
0x00009846 add.w sl, sl, 8 | sl += 8;
0x0000984a ldr.w r2, [fp] | r2 = *(fp);
0x0000984e add r3, r2 | r3 += r2;
0x00009850 str.w r3, [sb, r4] | __asm ("str.w r3, [sb, r4]");
0x00009854 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009856 cmp r3, sl |
| if (r3 > sl) {
0x00009858 bhi.w 0x9522 | goto label_13;
| }
0x0000985c b 0x9068 | goto label_10;
| label_76:
0x0000985e mov r3, fp | r3 = fp;
| label_60:
0x00009860 ldrh r2, [r1, 0xe] | r2 = *((r1 + 0xe));
0x00009862 movw r0, 0xfff1 | r0 = 0xfff1;
0x00009866 ldr r1, [r1, 4] | r1 = *((r1 + 4));
0x00009868 and lr, lr, 0xf | lr &= 0xf;
0x0000986c cmp r2, r0 |
0x0000986e ite ne |
| if (r2 == r0) {
0x00009870 ldrne r0, [r3] | r0 = *(r3);
| }
| if (r2 != r0) {
0x00009872 moveq r0, 0 | r0 = 0;
| }
0x00009874 cmp.w lr, 0xa |
0x00009878 str r1, [r7, 0x4c] | *((r7 + 0x4c)) = r1;
| if (lr == 0xa) {
0x0000987a beq.w 0xa4bc | goto label_103;
| }
| label_61:
0x0000987e ldr r2, [r7, 0x54] | r2 = *((r7 + 0x54));
| label_62:
0x00009880 ldr r1, [r6, 4] | r1 = *((r6 + 4));
0x00009882 lsrs r1, r1, 8 | r1 >>= 8;
0x00009884 ldr.w r1, [r3, 0x244] | r1 = *((r3 + 0x244));
0x00009888 ite eq |
| if (r1 != r1) {
0x0000988a ldreq r2, [r4, r5] | r2 = *((r4 + r5));
| }
| if (r1 == r1) {
0x0000988c ldrne r2, [r2, 4] | r2 = *((r2 + 4));
| }
0x0000988e adds r0, r1, 1 | r0 = r1 + 1;
| if (r0 == r1) {
0x00009890 beq.w 0xa558 | goto label_70;
| }
0x00009894 cmp r1, 0 |
| if (r1 == 0) {
0x00009896 beq.w 0xa614 | goto label_104;
| }
| label_71:
0x0000989a add r1, r2 | r1 += r2;
0x0000989c mov r3, sb | r3 = sb;
0x0000989e str r1, [r4, r5] | *((r4 + r5)) = r1;
0x000098a0 b.w 0x905e | goto label_18;
| label_83:
0x000098a4 cmp r2, r5 |
| if (r2 >= r5) {
0x000098a6 bhs.w 0x9106 | goto label_19;
| }
| do {
0x000098aa ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000098ac adds r3, 0xc | r3 += 0xc;
0x000098ae ldr r1, [r3, -0xc] | r1 = *((r3 - 0xc));
0x000098b2 cmp r5, r3 |
0x000098b4 add r2, sl | r2 += sl;
0x000098b6 str.w r2, [r1, sl] | __asm ("str.w r2, [r1, sl]");
0x000098ba bhi 0x98aa |
| } while (r5 > r3);
0x000098bc ldr.w r3, [fp, 0xe8] | r3 = *(arg_e8h);
0x000098c0 cmp r3, 0 |
| if (r3 != 0) {
0x000098c2 bne.w 0x9110 | goto label_20;
| }
| label_84:
0x000098c6 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x000098c8 cmp r3, r5 |
| if (r3 < r5) {
0x000098ca bls.w 0x92ca | goto label_21;
| }
0x000098ce ldr r3, [pc, 0x1b0] |
0x000098d0 add r3, pc | r3 = 0x13356;
0x000098d2 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x000098d4 ldr r3, [pc, 0x1ac] |
0x000098d6 add r3, pc | r3 = 0x1335e;
0x000098d8 str r3, [r7, 0x18] | *((r7 + 0x18)) = r3;
0x000098da ldr r3, [pc, 0x1ac] |
0x000098dc add r3, pc | r3 = 0x1336a;
0x000098de str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
| label_26:
0x000098e0 ldrd sb, r4, [r5] | __asm ("ldrd sb, r4, [r5]");
0x000098e4 add.w r3, sl, sb | r3 = sl + sb;
0x000098e8 lsr.w r8, r4, 8 | r8 = r4 >> 8;
0x000098ec str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x000098ee uxtb r4, r4 | r4 = (int8_t) r4;
0x000098f0 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x000098f2 lsl.w r8, r8, 4 | r8 <<= 4;
0x000098f4 adds r0, r1, r0 | r0 = r1 + r0;
0x000098f6 cmp r4, 0x17 |
0x000098f8 add.w r6, r3, r8 | r6 = r3 + r8;
0x000098fc str r6, [r7, 0x54] | *((r7 + 0x54)) = r6;
| if (r4 == 0x17) {
0x000098fe beq.w 0x9ca2 | goto label_105;
| }
0x00009902 cmp r4, 0 |
| if (r4 == 0) {
0x00009904 beq.w 0x9b44 | goto label_27;
| }
0x00009908 ldrb r2, [r6, 0xc] | r2 = *((r6 + 0xc));
0x0000990a lsrs r3, r2, 4 | r3 = r2 >> 4;
| if (r3 == r2) {
0x0000990c beq.w 0x9b7e | goto label_106;
| }
0x00009910 ldrb r3, [r6, 0xd] | r3 = *((r6 + 0xd));
0x00009912 and r3, r3, 3 | r3 &= 3;
0x00009916 subs r3, 1 | r3--;
0x00009918 cmp r3, 1 |
| if (r3 < 1) {
0x0000991a bls.w 0x9b7e | goto label_106;
| }
0x0000991e sub.w r3, r4, 0x14 | r3 = r4 - 0x14;
0x00009922 ldr.w r1, [fp, 0x220] | r1 = *(arg_220h);
0x00009926 clz r3, r3 | r3 &= r3;
0x0000992a sub.w r2, r4, 0x15 | r2 = r4 - 0x15;
0x0000992e lsrs r3, r3, 5 | r3 >>= 5;
0x00009930 clz r2, r2 | r2 &= r2;
0x00009934 lsrs r2, r2, 5 | r2 >>= 5;
0x00009936 cmp r6, r1 |
0x00009938 lsl.w r3, r3, 1 | r3 <<= 1;
0x0000993c orr.w r3, r3, r2, lsl 2 | r3 |= (r2 << 2);
0x00009940 sub.w r2, r4, 0xd | r2 = r4 - 0xd;
| if (r6 == r1) {
0x00009944 beq.w 0x9e46 | goto label_107;
| }
0x00009948 cmp r2, 9 |
| if (r2 <= 9) {
0x0000994a bhi 0x9956 |
| label_42:
0x0000994c ldr r1, [pc, 0x13c] |
0x0000994e add r1, pc | r1 = 0x133de;
0x00009950 ldr.w r2, [r1, r2, lsl 2] | r2 = *(0x133de);
0x00009954 orrs r3, r2 | r3 |= r2;
| }
| label_58:
0x00009956 ldr r2, [r7, 0x4c] | r2 = *((r7 + 0x4c));
0x00009958 mov r1, fp | r1 = fp;
0x0000995a strd r6, r3, [fp, 0x220] | __asm ("strd r6, r3, [fp, 0x220]");
0x0000995e ldr.w r0, [r2, r8] | r0 = *((r2 + r8));
0x00009962 add.w r2, r7, 0x54 | r2 = r7 + 0x54;
0x00009966 str r3, [sp, 4] | *(arg_4h) = r3;
0x00009968 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x0000996a add r0, r3 | r0 += r3;
| label_43:
0x00009988 cmp r0, 0 |
| if (r0 != 0) {
0x0000998a bne.w 0x9c9e | goto label_108;
| }
0x0000998e cmp r4, 0x16 |
| if (r4 > 0x16) {
0x00009990 bhi.w 0x9b60 | goto label_29;
| }
0x00009994 subs r3, r4, 1 | r3 = r4 - 1;
0x00009996 cmp r3, 0x15 |
| if (r3 > 0x15) {
0x00009998 bhi.w 0x9b30 | goto label_28;
| }
| /* switch table (23 cases) at 0x99a0 */
0x0000999c tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
| label_87:
0x000099cc cmp.w ip, 9 |
| if (ip > 9) {
0x000099d0 bhi.w 0x9d96 | goto label_109;
| }
0x000099d4 ldr r2, [pc, 0xb8] |
0x000099d6 add r2, pc |
0x000099d8 ldr.w r2, [r2, ip, lsl 2] | r2 = *(0x1346a);
0x000099dc orr.w lr, r3, r2 | lr = r3 | r2;
0x000099e0 ldr.w r2, [fp, 0x224] | r2 = *(arg_224h);
0x000099e4 cmp r2, lr |
| if (r2 != lr) {
0x000099e6 bne.w 0x9194 | goto label_22;
| }
| label_37:
0x000099ea ldr r2, [pc, 0xa8] |
0x000099ec ldr.w r0, [fp, 0x22c] | r0 = *(arg_22ch);
0x000099f0 ldr.w r1, [fp, 0x228] | r1 = *(arg_228h);
0x000099f4 add r2, pc | r2 = 0x1348e;
0x000099f6 ldr.w r3, [r2, 0x58c] | r3 = *(0x13a1a);
0x000099fa str r0, [r7, 0x54] | *((r7 + 0x54)) = r0;
0x000099fc adds r3, 1 | r3++;
0x000099fe str.w r3, [r2, 0x58c] | __asm ("str.w r3, [r2, 0x58c]");
0x00009a02 b.w 0x91e4 | goto label_23;
| label_80:
0x00009a06 ldr r1, [r7, 0x30] | r1 = *((r7 + 0x30));
0x00009a08 ldr r3, [r1, 0x1c] | r3 = *((r1 + 0x1c));
0x00009a0a ldrd r6, r2, [r1, 0x10] | __asm ("ldrd r6, r2, [r1, 0x10]");
0x00009a0e adds r1, 0x10 | r1 += 0x10;
0x00009a10 str r1, [r7, 0x30] | *((r7 + 0x30)) = r1;
0x00009a12 b.w 0x8f64 | goto label_24;
| label_101:
0x00009a98 ldr r1, [r7, 0x34] | r1 = *((r7 + 0x34));
0x00009a9a cmp.w ip, 0 |
0x00009a9e clz r1, r1 | r1 &= r1;
0x00009aa2 lsr.w r1, r1, 5 | r1 >>= 5;
0x00009aa6 it eq |
| if (ip != 0) {
0x00009aa8 moveq r1, 0 | r1 = 0;
| }
0x00009aaa cmp r1, 0 |
| if (r1 == 0) {
0x00009aac beq.w 0x969c | goto label_25;
| }
0x00009ab0 ldr.w r1, [pc, 0xba4] | r1 = *(0x0000a658);
0x00009ab4 str r2, [r7, 4] | *((r7 + 4)) = r2;
0x00009ab6 add r1, pc | r1 += pc;
0x00009ab8 ldr r0, [r1, 0x48] | r0 = *((r1 + 0x48));
0x00009aba blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00009abc cmp r5, 0x16 |
0x00009abe mov r3, r0 | r3 = r0;
| if (r5 > 0x16) {
0x00009ac0 bhi.w 0x9d48 | goto label_110;
| }
0x00009ac4 subs r1, r5, 1 | r1 = r5 - 1;
0x00009ac6 ldr r2, [r7, 4] | r2 = *((r7 + 4));
0x00009ac8 cmp r1, 0x15 |
| if (r1 > 0x15) {
0x00009aca bhi.w 0x962a | goto label_14;
| }
0x00009ace adr r0, 8 | r0 = 8;
0x00009ad0 ldr.w r1, [r0, r1, lsl 2] | offset_6 = r1 << 2;
| r1 = *((r0 + offset_6));
0x00009ad4 add r0, r1 | r0 += r1;
| /* switch table (22 cases) at 0x9ad8 */
0x00009ad6 bx r0 | return uint32_t (*r0)() ();
| label_28:
0x00009b30 invalid |
0x00009b32 mov r1, r4 | r1 = r4;
0x00009b34 mov r0, fp | r0 = fp;
0x00009b36 bl 0x8e34 | fcn_00008e34 (r0, r1, r2);
0x00009b3a movs r3, 0 | r3 = 0;
0x00009b3c invalid |
0x00009b3e add r2, r3 | r2 += r3;
0x00009b40 str.w r2, [sl, sb] | __asm ("str.w r2, [sl, sb]");
| label_27:
0x00009b44 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009b46 adds r5, 0xc | r5 += 0xc;
0x00009b48 cmp r3, r5 |
| if (r3 > r5) {
0x00009b4a bhi.w 0x98e0 | goto label_26;
| }
0x00009b4e b.w 0x92ca | goto label_21;
0x00009b52 invalid |
| if (r3 == r5) {
0x00009b54 beq 0x9b44 | goto label_27;
| }
0x00009b56 ldr.w r3, [r1, 0x248] | r3 = *((r1 + 0x248));
0x00009b5a str.w r3, [sl, sb] | __asm ("str.w r3, [sl, sb]");
0x00009b5e b 0x9b44 | goto label_27;
| label_29:
0x00009b60 cmp r4, 0xa0 |
| if (r4 != 0xa0) {
0x00009b62 bne 0x9b30 | goto label_28;
| }
0x00009b64 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00009b66 ldr.w r3, [fp] | r3 = *(fp);
0x00009b6a add r3, r2 | r3 += r2;
0x00009b6c ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
| if (r2 == 0) {
0x00009b6e cbnz r2, 0x9b78 |
| label_33:
0x00009b70 ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x00009b72 ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x00009b74 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
0x00009b76 mov r3, r0 | r3 = r0;
| }
0x00009b78 str.w r3, [sl, sb] | __asm ("str.w r3, [sl, sb]");
0x00009b7c b 0x9b44 | goto label_27;
| label_106:
0x00009b7e mov r1, fp | r1 = fp;
0x00009b80 mov r0, r6 | r0 = r6;
| label_30:
0x00009b82 ldrh.w ip, [r0, 0xe] | ip = *((r0 + 0xe));
0x00009b86 movw r3, 0xfff1 | r3 = 0xfff1;
0x00009b8a ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x00009b8c and r2, r2, 0xf | r2 &= 0xf;
0x00009b90 cmp ip, r3 |
0x00009b92 ite ne |
| if (ip == r3) {
0x00009b94 ldrne r3, [r1] | r3 = *(r1);
| }
| if (ip != r3) {
0x00009b96 moveq r3, 0 | r3 = 0;
| }
0x00009b98 cmp r2, 0xa |
0x00009b9a add r3, r0 | r3 += r0;
| if (r2 == 0xa) {
0x00009b9c beq.w 0x9cb0 | goto label_111;
| }
| label_31:
0x00009ba0 cmp r4, 0x16 |
| if (r4 > 0x16) {
0x00009ba2 bhi 0x9b60 | goto label_29;
| }
0x00009ba4 subs r2, r4, 1 | r2 = r4 - 1;
0x00009ba6 cmp r2, 0x15 |
| if (r2 > 0x15) {
0x00009ba8 bhi 0x9b30 | goto label_28;
| }
0x00009baa adr r0, 8 | r0 = 8;
0x00009bac ldr.w r2, [r0, r2, lsl 2] | offset_7 = r2 << 2;
| r2 = *((r0 + offset_7));
0x00009bb0 add r0, r2 | r0 += r2;
| /* switch table (22 cases) at 0x9bb4 */
0x00009bb2 bx r0 | return uint32_t (*r0)() ();
0x00009c0c movs r3, 0 | r3 = 0;
0x00009c0e invalid |
0x00009c10 ldr r2, [r7, 0x44] | r2 = *((r7 + 0x44));
0x00009c12 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00009c14 mov r0, fp | r0 = fp;
0x00009c16 bl 0x8bf8 | fcn_00008bf8 (r0, r1, r2, r3);
0x00009c1a b 0x9b44 | goto label_27;
| label_108:
0x00009c9e ldrb r2, [r0, 0xc] | r2 = *((r0 + 0xc));
0x00009ca0 b 0x9b82 | goto label_30;
| label_105:
0x00009ca2 ldr.w r3, [fp] | r3 = *(fp);
0x00009ca6 ldr r2, [r5, 8] | r2 = *((r5 + 8));
0x00009ca8 add r3, r2 | r3 += r2;
0x00009caa str.w r3, [sl, sb] | __asm ("str.w r3, [sl, sb]");
0x00009cae b 0x9b44 | goto label_27;
| label_111:
0x00009cb0 ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x00009cb2 cmp.w ip, 0 |
0x00009cb6 clz r2, r2 | r2 &= r2;
0x00009cba lsr.w r2, r2, 5 | r2 >>= 5;
0x00009cbe it eq |
| if (ip != 0) {
0x00009cc0 moveq r2, 0 | r2 = 0;
| }
0x00009cc2 cmp r2, 0 |
| if (r2 == 0) {
0x00009cc4 beq.w 0x9ba0 | goto label_31;
| }
0x00009cc8 ldr.w r2, [pc, 0x994] | r2 = *(0x0000a660);
0x00009ccc str r1, [r7, 8] | *((r7 + 8)) = r1;
0x00009cce add r2, pc | r2 += pc;
0x00009cd0 ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x00009cd2 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x00009cd4 cmp r4, 0x16 |
0x00009cd6 mov r3, r0 | r3 = r0;
| if (r4 > 0x16) {
0x00009cd8 bhi 0x9d5a | goto label_112;
| }
0x00009cda subs r2, r4, 1 | r2 = r4 - 1;
0x00009cdc ldr r1, [r7, 8] | r1 = *((r7 + 8));
0x00009cde cmp r2, 0x15 |
| if (r2 > 0x15) {
0x00009ce0 bhi.w 0x9b30 | goto label_28;
| }
0x00009ce4 adr r0, 8 | r0 = 8;
0x00009ce6 ldr.w r2, [r0, r2, lsl 2] | offset_8 = r2 << 2;
| r2 = *((r0 + offset_8));
0x00009cea add r0, r2 | r0 += r2;
| /* switch table (22 cases) at 0x9cf0 */
0x00009cec bx r0 | return uint32_t (*r0)() ();
| label_110:
0x00009d48 cmp r5, 0xa0 |
| if (r5 != 0xa0) {
0x00009d4a bne.w 0x962a | goto label_14;
| }
0x00009d4e ldr.w r3, [sb, r4] | r3 = *((sb + r4));
0x00009d52 ldr.w r2, [fp] | r2 = *(fp);
0x00009d56 add r3, r2 | r3 += r2;
0x00009d58 b 0x9670 | goto label_32;
| label_112:
0x00009d5a cmp r4, 0xa0 |
| if (r4 != 0xa0) {
0x00009d5c bne.w 0x9b30 | goto label_28;
| }
0x00009d60 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00009d62 ldr.w r2, [fp] | r2 = *(fp);
0x00009d66 add r3, r2 | r3 += r2;
0x00009d68 b 0x9b70 | goto label_33;
| label_98:
0x00009d6a cmp.w ip, 9 |
| if (ip < 9) {
0x00009d6e bls 0x9db8 | goto label_113;
| }
0x00009d70 ldr.w r1, [fp, 0x224] | r1 = *(arg_224h);
0x00009d74 cmp r1, r3 |
| if (r1 != r3) {
0x00009d76 bne.w 0x95a4 | goto label_34;
| }
| label_39:
0x00009d7a ldr.w r2, [pc, 0x8e8] | r2 = *(0x0000a664);
0x00009d7e ldr.w r0, [fp, 0x22c] | r0 = *(arg_22ch);
0x00009d82 add r2, pc | r2 += pc;
0x00009d84 ldr.w r3, [r2, 0x58c] | r3 = *((r2 + 0x58c));
0x00009d88 str r0, [r7, 0x54] | *((r7 + 0x54)) = r0;
0x00009d8a adds r3, 1 | r3++;
0x00009d8c str.w r3, [r2, 0x58c] | __asm ("str.w r3, [r2, 0x58c]");
0x00009d90 ldr.w r2, [fp, 0x228] | r2 = *(arg_228h);
0x00009d94 b 0x95ea | goto label_35;
| label_109:
0x00009d96 ldr.w r2, [fp, 0x224] | r2 = *(arg_224h);
0x00009d9a cmp r2, r3 |
| if (r2 != r3) {
0x00009d9c bne.w 0x91a0 | goto label_36;
| }
0x00009da0 b 0x99ea | goto label_37;
| label_91:
0x00009daa mov r0, fp | r0 = fp;
0x00009dac bl 0x8de4 | fcn_00008de4 (r0);
0x00009db0 adds r7, 0x7c | r7 += 0x7c;
0x00009db2 mov sp, r7 |
0x00009db4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_113:
0x00009db8 ldr.w r1, [pc, 0x8ac] |
0x00009dbc add r1, pc | r1 = 0x14428;
0x00009dbe add.w r1, r1, ip, lsl 2 | r1 += (ip << 2);
0x00009dc2 ldr r1, [r1, 0x40] | r1 = *((r1 + 0x40));
0x00009dc4 orr.w lr, r3, r1 | lr = r3 | r1;
0x00009dc8 ldr.w r1, [fp, 0x224] | r1 = *(arg_224h);
0x00009dcc cmp r1, lr |
| if (r1 != lr) {
0x00009dce bne.w 0x9598 | goto label_38;
| }
0x00009dd2 b 0x9d7a | goto label_39;
0x00009de8 ldr.w r3, [pc, 0x884] |
0x00009dec add.w sl, sl, 8 | sl += 8;
0x00009df0 ldr r2, [r7, 0x44] | r2 = *((r7 + 0x44));
0x00009df2 add r3, pc | r3 = 0x14466;
0x00009df4 str r3, [r2, 4] | *((r2 + 4)) = r3;
0x00009df6 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009df8 cmp r3, sl |
| if (r3 > sl) {
0x00009dfa bhi.w 0x9522 | goto label_13;
| }
0x00009dfe b.w 0x9068 | goto label_10;
| label_41:
0x00009e1e ldrd r1, r2, [r5, 4] | __asm ("ldrd r1, r2, [r5, 4]");
0x00009e22 ldr r0, [r5] | r0 = *(r5);
0x00009e24 bl 0x14b10 | r0 = fcn_00014b10 (r0);
0x00009e28 cmp r0, 0 |
| if (r0 < 0) {
0x00009e2a blt.w 0xa64c | goto label_114;
| }
0x00009e2e ldrd r0, r1, [r5] | __asm ("ldrd r0, r1, [r5]");
0x00009e32 movs r2, 0 | r2 = 0;
0x00009e34 mov ip, r4 |
0x00009e36 add r1, r0 | r1 += r0;
0x00009e38 bl 0x139d0 | fcn_000139d0 ();
0x00009e3c ldr r5, [r5, 0xc] | r5 = *((r5 + 0xc));
0x00009e3e cmp r5, 0 |
| if (r5 == 0) {
0x00009e40 beq.w 0x9234 | goto label_40;
| }
0x00009e44 b 0x9e1e | goto label_41;
| label_107:
0x00009e46 cmp r2, 9 |
| if (r2 > 9) {
0x00009e48 bhi.w 0xa3a8 | goto label_115;
| }
0x00009e4c ldr.w r1, [pc, 0x82c] |
0x00009e50 ldr.w r0, [fp, 0x224] | r0 = *(arg_224h);
0x00009e54 add r1, pc |
0x00009e56 ldr.w r1, [r1, r2, lsl 2] | r1 = *(0x144d4);
0x00009e5a orrs r1, r3 | r1 |= r3;
0x00009e5c cmp r1, r0 |
| if (r1 != r0) {
0x00009e5e bne.w 0x994c | goto label_42;
| }
| label_59:
0x00009e62 ldr.w r2, [pc, 0x81c] | r2 = *(0x0000a680);
0x00009e66 ldr.w r0, [fp, 0x22c] | r0 = *(arg_22ch);
0x00009e6a ldr.w r1, [fp, 0x228] | r1 = *(arg_228h);
0x00009e6e add r2, pc | r2 += pc;
0x00009e70 ldr.w r3, [r2, 0x58c] | r3 = *((r2 + 0x58c));
0x00009e74 str r0, [r7, 0x54] | *((r7 + 0x54)) = r0;
0x00009e76 adds r3, 1 | r3++;
0x00009e78 str.w r3, [r2, 0x58c] | __asm ("str.w r3, [r2, 0x58c]");
0x00009e7c b 0x9988 | goto label_43;
| label_94:
0x00009e88 cmp r6, sl |
| if (r6 >= sl) {
0x00009e8a bhs.w 0x9502 | goto label_44;
| }
| do {
0x00009e8e ldr r2, [r6], 8 | r2 = *(r6);
| r6 += 8;
0x00009e92 ldr r3, [r4, r2] | r3 = *((r4 + r2));
0x00009e94 cmp sl, r6 |
0x00009e96 add r3, r4 | r3 += r4;
0x00009e98 str r3, [r4, r2] | *((r4 + r2)) = r3;
0x00009e9a bhi 0x9e8e |
| } while (sl > r6);
0x00009e9c ldr.w r3, [fp, 0xe8] | r3 = *(arg_e8h);
0x00009ea0 cmp r3, 0 |
| if (r3 != 0) {
0x00009ea2 bne.w 0x950c | goto label_45;
| }
| label_95:
0x00009ea6 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x00009ea8 cmp r3, sl |
| if (r3 < sl) {
0x00009eaa bls.w 0x9068 | goto label_10;
| }
0x00009eae ldr.w r3, [pc, 0x7d8] | r3 = *(0x0000a688);
0x00009eb2 mov sb, r4 | sb = r4;
0x00009eb4 add r3, pc | r3 += pc;
0x00009eb6 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
| label_48:
0x00009eb8 ldrd r4, r5, [sl] | __asm ("ldrd r4, r5, [sl]");
0x00009ebc add.w r3, sb, r4 | r3 = sb + r4;
0x00009ec0 lsr.w r8, r5, 8 | r8 = r5 >> 8;
0x00009ec4 str r3, [r7, 0x44] | *((r7 + 0x44)) = r3;
0x00009ec6 uxtb r5, r5 | r5 = (int8_t) r5;
0x00009ec8 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x00009eca lsl.w r8, r8, 4 | r8 <<= 4;
0x00009ece cmp r5, 0x17 |
0x00009ed0 add.w r6, r3, r8 | r6 = r3 + r8;
0x00009ed4 str r6, [r7, 0x54] | *((r7 + 0x54)) = r6;
| if (r5 == 0x17) {
0x00009ed6 beq.w 0xa202 | goto label_116;
| }
0x00009eda cmp r5, 0 |
| if (r5 == 0) {
0x00009edc beq.w 0xa002 | goto label_117;
| }
0x00009ee0 ldrb r1, [r6, 0xc] | r1 = *((r6 + 0xc));
0x00009ee2 lsrs r3, r1, 4 | r3 = r1 >> 4;
| if (r3 == r1) {
0x00009ee4 beq.w 0xa062 | goto label_118;
| }
0x00009ee8 ldrb r3, [r6, 0xd] | r3 = *((r6 + 0xd));
0x00009eea and r3, r3, 3 | r3 &= 3;
0x00009eee subs r3, 1 | r3--;
0x00009ef0 cmp r3, 1 |
| if (r3 < 1) {
0x00009ef2 bls.w 0xa062 | goto label_118;
| }
0x00009ef6 sub.w r3, r5, 0x15 | r3 = r5 - 0x15;
0x00009efa ldr.w r1, [fp, 0x220] | r1 = *(arg_220h);
0x00009efe clz r3, r3 | r3 &= r3;
0x00009f02 sub.w r2, r5, 0x14 | r2 = r5 - 0x14;
0x00009f06 lsrs r3, r3, 5 | r3 >>= 5;
0x00009f08 clz r2, r2 | r2 &= r2;
0x00009f0c lsrs r2, r2, 5 | r2 >>= 5;
0x00009f0e cmp r6, r1 |
0x00009f10 lsl.w r3, r3, 2 | r3 <<= 2;
0x00009f14 orr.w r3, r3, r2, lsl 1 | r3 |= (r2 << 1);
0x00009f18 sub.w r2, r5, 0xd | r2 = r5 - 0xd;
| if (r6 == r1) {
0x00009f1c beq.w 0xa372 | goto label_119;
| }
0x00009f20 cmp r2, 9 |
| if (r2 <= 9) {
0x00009f22 bhi 0x9f30 |
| label_56:
0x00009f24 ldr.w r1, [pc, 0x764] |
0x00009f28 add r1, pc | r1 = 0x145b8;
0x00009f2a ldr.w r2, [r1, r2, lsl 2] | r2 = *(0x145b8);
0x00009f2e orrs r3, r2 | r3 |= r2;
| }
| label_65:
0x00009f30 ldr r2, [r7, 0x4c] | r2 = *((r7 + 0x4c));
0x00009f32 mov r1, fp | r1 = fp;
0x00009f34 strd r6, r3, [fp, 0x220] | __asm ("strd r6, r3, [fp, 0x220]");
0x00009f38 ldr.w r0, [r2, r8] | r0 = *((r2 + r8));
0x00009f3c add.w r2, r7, 0x54 | r2 = r7 + 0x54;
0x00009f40 str r3, [sp, 4] | *(arg_4h) = r3;
0x00009f42 ldr r3, [r7, 0x38] | r3 = *((r7 + 0x38));
0x00009f44 add r0, r3 | r0 += r3;
0x00009f46 movs r3, 0 | r3 = 0;
0x00009f48 str r3, [sp, 0xc] | *(arg_ch) = r3;
0x00009f4a str r3, [sp] | *(sp) = r3;
0x00009f4c movs r3, 9 | r3 = 9;
0x00009f4e str r3, [sp, 8] | *(arg_8h) = r3;
0x00009f50 ldr r3, [r7, 0x3c] | r3 = *((r7 + 0x3c));
0x00009f52 bl 0x7ac8 | r0 = fcn_00007ac8 (r0, r1, r2, r3, r4, r5, r6);
0x00009f56 mov r2, r0 | r2 = r0;
0x00009f58 str.w r0, [fp, 0x228] | __asm ("str.w r0, [arg_228h]");
0x00009f5c ldr r0, [r7, 0x54] | r0 = *((r7 + 0x54));
0x00009f5e str.w r0, [fp, 0x22c] | __asm ("str.w r0, [arg_22ch]");
| label_57:
0x00009f62 cmp r0, 0 |
| if (r0 != 0) {
0x00009f64 bne.w 0xa1fe | goto label_120;
| }
0x00009f68 cmp r5, 0x16 |
| if (r5 > 0x16) {
0x00009f6a bhi 0xa042 | goto label_50;
| }
0x00009f6c subs r3, r5, 1 | r3 = r5 - 1;
0x00009f6e cmp r3, 0x15 |
| if (r3 > 0x15) {
0x00009f70 bhi.w 0x962a | goto label_14;
| }
0x00009f74 adr r1, 8 | r1 = 8;
0x00009f76 ldr.w r3, [r1, r3, lsl 2] | offset_9 = r3 << 2;
| r3 = *((r1 + offset_9));
0x00009f7a add r1, r3 | r1 += r3;
| /* switch table (22 cases) at 0x9f80 */
0x00009f7c bx r1 | return uint32_t (*r1)() ();
| label_102:
0x00009fd8 ldrh r1, [r6, 0xe] | r1 = *((r6 + 0xe));
0x00009fda movw r2, 0xfff1 | r2 = 0xfff1;
0x00009fde cmp r1, r2 |
0x00009fe0 itet ne |
| if (r1 == r2) {
0x00009fe2 ldrne r2, [r7, 0xc] | r2 = *((r7 + 0xc));
| }
| if (r1 != r2) {
0x00009fe4 moveq r1, 0 | r1 = 0;
| }
| if (r1 == r2) {
0x00009fe6 ldrne r1, [r2, 0x598] | r1 = *((r2 + 0x598));
| }
0x00009fea ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x00009fec subs r3, r3, r2 | r3 -= r2;
0x00009fee subs r3, r3, r1 | r3 -= r1;
0x00009ff0 b.w 0x9712 | goto label_46;
| label_81:
0x00009ff4 mov r1, r3 | r1 = r3;
0x00009ff6 mov r2, r3 | r2 = r3;
0x00009ff8 b.w 0x909a | goto label_47;
| label_49:
0x00009ffe invalid |
0x0000a000 adds r0, 4 | r0 += 4;
| label_117:
0x0000a002 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x0000a004 add.w sl, sl, 8 | sl += 8;
0x0000a008 cmp r3, sl |
| if (r3 > sl) {
0x0000a00a bhi.w 0x9eb8 | goto label_48;
| }
0x0000a00e b.w 0x9068 | goto label_10;
| label_50:
0x0000a042 cmp r5, 0xa0 |
| if (r5 != 0xa0) {
0x0000a044 bne.w 0x962a | goto label_14;
| }
0x0000a048 ldr.w r2, [sb, r4] | r2 = *((sb + r4));
0x0000a04c ldr.w r3, [fp] | r3 = *(fp);
0x0000a050 add r3, r2 | r3 += r2;
0x0000a052 ldr r2, [r7, 0x34] | r2 = *((r7 + 0x34));
0x0000a054 cmp r2, 0 |
| if (r2 != 0) {
0x0000a056 bne 0x9ffe | goto label_49;
| }
| label_54:
0x0000a058 ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x0000a05a ldr r0, [r2, 0x48] | r0 = *((r2 + 0x48));
0x0000a05c blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r2);
0x0000a05e mov r3, r0 | r3 = r0;
0x0000a060 b 0x9ffe | goto label_49;
| label_118:
0x0000a062 mov r2, fp | r2 = fp;
0x0000a064 mov r0, r6 | r0 = r6;
| label_51:
0x0000a066 ldrh.w ip, [r0, 0xe] | ip = *((r0 + 0xe));
0x0000a06a movw r3, 0xfff1 | r3 = 0xfff1;
0x0000a06e ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x0000a070 and r1, r1, 0xf | r1 &= 0xf;
0x0000a074 cmp ip, r3 |
0x0000a076 ite ne |
| if (ip == r3) {
0x0000a078 ldrne r3, [r2] | r3 = *(r2);
| }
| if (ip != r3) {
0x0000a07a moveq r3, 0 | r3 = 0;
| }
0x0000a07c cmp r1, 0xa |
0x0000a07e add r3, r0 | r3 += r0;
| if (r1 == 0xa) {
0x0000a080 beq.w 0xa220 | goto label_121;
| }
| label_52:
0x0000a084 cmp r5, 0x16 |
| if (r5 > 0x16) {
0x0000a086 bhi 0xa042 | goto label_50;
| }
0x0000a088 subs r1, r5, 1 | r1 = r5 - 1;
0x0000a08a cmp r1, 0x15 |
| if (r1 > 0x15) {
0x0000a08c bhi.w 0x962a | goto label_14;
| }
0x0000a090 adr r0, 8 | r0 = 8;
0x0000a092 ldr.w r1, [r0, r1, lsl 2] | offset_10 = r1 << 2;
| r1 = *((r0 + offset_10));
0x0000a096 add r0, r1 | r0 += r1;
| /* switch table (22 cases) at 0xa09c */
0x0000a098 bx r0 | return uint32_t (*r0)() ();
| label_55:
0x0000a162 cmp r2, r1 |
0x0000a164 ldr r0, [r7, 0x44] | r0 = *((r7 + 0x44));
0x0000a166 it hs |
| if (r2 < r1) {
0x0000a168 movhs r2, r1 | r2 = r1;
| }
0x0000a16a mov r1, r3 | r1 = r3;
0x0000a16c blx 0x15f40 | fcn_00015f40 (r0, r1);
0x0000a170 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x0000a172 add.w sl, sl, 8 | sl += 8;
0x0000a176 cmp r3, sl |
| if (r3 > sl) {
0x0000a178 bhi.w 0x9eb8 | goto label_48;
| }
0x0000a17c b.w 0x9068 | goto label_10;
| label_120:
0x0000a1fe ldrb r1, [r0, 0xc] | r1 = *((r0 + 0xc));
0x0000a200 b 0xa066 | goto label_51;
| label_116:
0x0000a202 ldr.w r3, [sb, r4] | r3 = *((sb + r4));
0x0000a206 add.w sl, sl, 8 | sl += 8;
0x0000a20a ldr.w r2, [fp] | r2 = *(fp);
0x0000a20e add r3, r2 | r3 += r2;
0x0000a210 str.w r3, [sb, r4] | __asm ("str.w r3, [sb, r4]");
0x0000a214 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x0000a216 cmp r3, sl |
| if (r3 > sl) {
0x0000a218 bhi.w 0x9eb8 | goto label_48;
| }
0x0000a21c b.w 0x9068 | goto label_10;
| label_121:
0x0000a220 ldr r1, [r7, 0x34] | r1 = *((r7 + 0x34));
0x0000a222 cmp.w ip, 0 |
0x0000a226 clz r1, r1 | r1 &= r1;
0x0000a22a lsr.w r1, r1, 5 | r1 >>= 5;
0x0000a22e it eq |
| if (ip != 0) {
0x0000a230 moveq r1, 0 | r1 = 0;
| }
0x0000a232 cmp r1, 0 |
| if (r1 == 0) {
0x0000a234 beq.w 0xa084 | goto label_52;
| }
0x0000a238 ldr.w r1, [pc, 0x460] | r1 = *(0x0000a69c);
0x0000a23c str r2, [r7, 0x10] | *((r7 + 0x10)) = r2;
0x0000a23e add r1, pc | r1 += pc;
0x0000a240 ldr r0, [r1, 0x48] | r0 = *((r1 + 0x48));
0x0000a242 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0000a244 cmp r5, 0x16 |
0x0000a246 mov r3, r0 | r3 = r0;
| if (r5 > 0x16) {
0x0000a248 bhi 0xa314 | goto label_122;
| }
0x0000a24a subs r1, r5, 1 | r1 = r5 - 1;
0x0000a24c ldr r2, [r7, 0x10] | r2 = *((r7 + 0x10));
0x0000a24e cmp r1, 0x15 |
| if (r1 > 0x15) {
0x0000a250 bhi.w 0x962a | goto label_14;
| }
0x0000a254 adr r0, 8 | r0 = 8;
0x0000a256 ldr.w r1, [r0, r1, lsl 2] | offset_11 = r1 << 2;
| r1 = *((r0 + offset_11));
0x0000a25a add r0, r1 | r0 += r1;
| /* switch table (22 cases) at 0xa260 */
0x0000a25c bx r0 | return uint32_t (*r0)() ();
| label_82:
0x0000a2e8 ldr.w r0, [fp, 0x7c] | r0 = *(arg_7ch);
0x0000a2ec ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x0000a2ee ldr.w r0, [fp, 0x28] | r0 = *(arg_28h);
0x0000a2f2 ldr r0, [r0, 4] | r0 = *((r0 + 4));
0x0000a2f4 adds r5, r4, r0 | r5 = r4 + r0;
0x0000a2f6 cmp r5, r3 |
0x0000a2f8 ldr r5, [r7, 0x28] | r5 = *((r7 + 0x28));
0x0000a2fa itt eq |
| if (r5 != r3) {
0x0000a2fc subeq r1, r1, r0 | r1 -= r0;
| }
| if (r5 != r3) {
0x0000a2fe addeq r3, r1, r2 | r3 = r1 + r2;
| }
| if (r5 != 0) {
0x0000a300 cbnz r5, 0xa30c | goto label_123;
| }
0x0000a302 cmp r4, r3 |
0x0000a304 it eq |
| if (r4 == r3) {
0x0000a306 addeq r1, r1, r0 | r1 += r0;
| goto label_124;
| }
| if (r4 == r3) {
| label_124:
0x0000a308 beq.w 0x90a8 | goto label_53;
| }
| label_123:
0x0000a30c strd r4, r0, [r7, 0x68] | __asm ("strd r4, r0, [r7, 0x68]");
0x0000a310 b.w 0x90a8 | goto label_53;
| label_122:
0x0000a314 cmp r5, 0xa0 |
| if (r5 != 0xa0) {
0x0000a316 bne.w 0x962a | goto label_14;
| }
0x0000a31a ldr.w r3, [sb, r4] | r3 = *((sb + r4));
0x0000a31e ldr.w r2, [fp] | r2 = *(fp);
0x0000a322 add r3, r2 | r3 += r2;
0x0000a324 b 0xa058 | goto label_54;
| label_75:
0x0000a326 movs r2, 1 | r2 = 1;
0x0000a328 mov r0, fp | r0 = fp;
0x0000a32a bl 0x8e34 | fcn_00008e34 (r0, r1, r2);
0x0000a32e ldr r2, [pc, 0x370] |
0x0000a330 add r2, pc |
0x0000a332 ldr r2, [r2] | r2 = *(0x149d6);
0x0000a334 ldr r1, [r2] | r1 = *(0x149d6);
0x0000a336 ldr.w r2, [fp, 0x34] | r2 = *(arg_34h);
0x0000a33a ldr r0, [r2, 4] | r0 = *(0x149da);
0x0000a33c cmp r1, 0 |
| if (r1 == 0) {
0x0000a33e beq.w 0xa5d0 | goto label_125;
| }
| label_69:
0x0000a342 str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x0000a344 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x0000a346 ldr.w r2, [r3, r8] | r2 = *((r3 + r8));
0x0000a34a add r2, r0 | r2 += r0;
0x0000a34c ldr r0, [pc, 0x354] |
0x0000a34e add r0, pc | r0 = 0x149f6;
0x0000a350 bl 0xc284 | fcn_0000c284 ();
0x0000a354 ldr r2, [r7, 0x54] | r2 = *((r7 + 0x54));
0x0000a356 ldr r1, [r6, 8] | r1 = *((r6 + 8));
0x0000a358 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x0000a35a ldr r2, [r2, 8] | r2 = *((r2 + 8));
0x0000a35c b 0xa162 | goto label_55;
| label_119:
0x0000a372 cmp r2, 9 |
| if (r2 > 9) {
0x0000a374 bhi.w 0xa53a | goto label_126;
| }
0x0000a378 ldr r1, [pc, 0x32c] |
0x0000a37a ldr.w r0, [fp, 0x224] | r0 = *(arg_224h);
0x0000a37e add r1, pc | r1 = 0x14a2a;
0x0000a380 add.w r1, r1, r2, lsl 2 | r1 += (r2 << 2);
0x0000a384 ldr r1, [r1, 0x40] | r1 = *((r1 + 0x40));
0x0000a386 orrs r1, r3 | r1 |= r3;
0x0000a388 cmp r0, r1 |
| if (r0 != r1) {
0x0000a38a bne.w 0x9f24 | goto label_56;
| }
| label_66:
0x0000a38e ldr r2, [pc, 0x31c] |
0x0000a390 ldr.w r0, [fp, 0x22c] | r0 = *(arg_22ch);
0x0000a394 add r2, pc | r2 = 0x14a46;
0x0000a396 ldr.w r3, [r2, 0x58c] | r3 = *(0x14fd2);
0x0000a39a str r0, [r7, 0x54] | *((r7 + 0x54)) = r0;
0x0000a39c adds r3, 1 | r3++;
0x0000a39e str.w r3, [r2, 0x58c] | __asm ("str.w r3, [r2, 0x58c]");
0x0000a3a2 ldr.w r2, [fp, 0x228] | r2 = *(arg_228h);
0x0000a3a6 b 0x9f62 | goto label_57;
| label_115:
0x0000a3a8 ldr.w r2, [fp, 0x224] | r2 = *(arg_224h);
0x0000a3ac cmp r2, r3 |
| if (r2 != r3) {
0x0000a3ae bne.w 0x9956 | goto label_58;
| }
0x0000a3b2 b 0x9e62 | goto label_59;
| label_79:
0x0000a3b4 ldrb.w lr, [r1, 0xc] |
0x0000a3b8 b.w 0x9860 | goto label_60;
| label_103:
0x0000a4bc ldr r1, [r7, 0x34] | r1 = *((r7 + 0x34));
0x0000a4be cmp r2, 0 |
0x0000a4c0 clz r1, r1 | r1 &= r1;
0x0000a4c4 lsr.w r1, r1, 5 | r1 >>= 5;
0x0000a4c8 it eq |
| if (r2 != 0) {
0x0000a4ca moveq r1, 0 | r1 = 0;
| }
0x0000a4cc cmp r1, 0 |
| if (r1 == 0) {
0x0000a4ce beq.w 0x987e | goto label_61;
| }
0x0000a4d2 ldr r1, [r7, 0x4c] | r1 = *((r7 + 0x4c));
0x0000a4d4 str r3, [r7, 0x40] | *((r7 + 0x40)) = r3;
0x0000a4d6 ldr r3, [r7, 0x48] | r3 = *((r7 + 0x48));
0x0000a4d8 add r1, r0 | r1 += r0;
0x0000a4da ldr r0, [r3, 0x48] | r0 = *((r3 + 0x48));
0x0000a4dc blx r1 | uint32_t (*r1)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a4de ldr r2, [r7, 0x54] | r2 = *((r7 + 0x54));
0x0000a4e0 ldr r3, [r7, 0x40] | r3 = *((r7 + 0x40));
0x0000a4e2 cmp r2, 0 |
| if (r2 != 0) {
0x0000a4e4 bne.w 0x9880 | goto label_62;
| }
0x0000a4e8 b.w 0x9058 | goto label_63;
| label_90:
0x0000a4ec ldr.w r3, [fp, 0x28] | r3 = *(arg_28h);
0x0000a4f0 cmp r3, 0 |
| if (r3 == 0) {
0x0000a4f2 beq.w 0x9218 | goto label_64;
| }
0x0000a4f6 ldr.w r2, [fp, 0x70] | r2 = *(arg_70h);
0x0000a4fa ldr r0, [r3, 4] | r0 = *((r3 + 4));
0x0000a4fc ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0000a4fe cmp r3, 7 |
0x0000a500 ite eq |
| if (r3 != 7) {
0x0000a502 moveq r1, 0xc | r1 = 0xc;
| }
| if (r3 == 7) {
0x0000a504 movne r1, 8 | r1 = 8;
| }
0x0000a506 bl 0x16608 | fcn_00016608 (r0, r1, r2);
0x0000a50a ldr r3, [pc, 0x1bc] |
0x0000a50c mov r1, r0 | r1 = r0;
0x0000a50e movs r0, 0x18 | r0 = 0x18;
0x0000a510 add r3, pc |
0x0000a512 ldr r3, [r3] | r3 = *(0x14bde);
0x0000a514 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0000a516 str.w r0, [fp, 0x1a8] | __asm ("str.w r0, [arg_1a8h]");
0x0000a51a cmp r0, 0 |
| if (r0 != 0) {
0x0000a51c bne.w 0x9218 | goto label_64;
| }
0x0000a520 ldr r3, [pc, 0x1a8] |
0x0000a522 add r3, pc |
0x0000a524 ldr r3, [r3] | r3 = *(0x14bf2);
0x0000a526 ldr r1, [r3] | r1 = *(0x14bf2);
0x0000a528 cmp r1, 0 |
| if (r1 == 0) {
0x0000a52a beq.w 0xa652 | goto label_127;
| }
| label_72:
0x0000a52e ldr r0, [pc, 0x1a0] |
0x0000a530 ldr.w r2, [fp, 4] | r2 = *(arg_4h);
0x0000a534 add r0, pc | r0 = 0x14c0a;
0x0000a536 bl 0xc2a4 | dl_fatal_printf ()
| label_126:
0x0000a53a ldr.w r2, [fp, 0x224] | r2 = *(arg_224h);
0x0000a53e cmp r2, r3 |
| if (r2 != r3) {
0x0000a540 bne.w 0x9f30 | goto label_65;
| }
0x0000a544 b 0xa38e | goto label_66;
| label_70:
0x0000a558 mov r0, r3 | r0 = r3;
0x0000a55a mov r1, r2 | r1 = r2;
0x0000a55c bl 0x113cc | fcn_000113cc (r0, r1, r2);
0x0000a560 ldr r3, [r7, 0x44] | r3 = *((r7 + 0x44));
0x0000a562 str r0, [r4, r5] | *((r4 + r5)) = r0;
0x0000a564 b.w 0x905e | goto label_18;
| label_77:
0x0000a590 ldr.w r3, [fp, 0x224] | r3 = *(arg_224h);
0x0000a594 cmp r3, 1 |
| if (r3 != 1) {
0x0000a596 bne.w 0x900e | goto label_67;
| }
0x0000a59a ldr r2, [pc, 0x13c] |
0x0000a59c ldr.w r1, [fp, 0x22c] | r1 = *(arg_22ch);
0x0000a5a0 add r2, pc | r2 = 0x14c7e;
0x0000a5a2 ldr.w r3, [r2, 0x58c] | r3 = *(0x1520a);
0x0000a5a6 str r1, [r7, 0x54] | *((r7 + 0x54)) = r1;
0x0000a5a8 adds r3, 1 | r3++;
0x0000a5aa str.w r3, [r2, 0x58c] | __asm ("str.w r3, [r2, 0x58c]");
0x0000a5ae ldr.w r3, [fp, 0x228] | r3 = *(arg_228h);
0x0000a5b2 b.w 0x9052 | goto label_68;
| label_125:
0x0000a5d0 ldr r1, [pc, 0x108] |
0x0000a5d2 add r1, pc | r1 = 0x14cb2;
0x0000a5d4 b 0xa342 | goto label_69;
| label_104:
0x0000a614 mov r0, r3 | r0 = r3;
0x0000a616 movs r1, 1 | r1 = 1;
0x0000a618 str r2, [r7, 0x40] | *((r7 + 0x40)) = r2;
0x0000a61a str r3, [r7, 0x4c] | *((r7 + 0x4c)) = r3;
0x0000a61c bl 0x8d04 | fcn_00008d04 (r0);
0x0000a620 ldr r3, [r7, 0x4c] | r3 = *((r7 + 0x4c));
0x0000a622 ldr r2, [r7, 0x40] | r2 = *((r7 + 0x40));
0x0000a624 cmp r0, 0 |
| if (r0 != 0) {
0x0000a626 bne 0xa558 | goto label_70;
| }
0x0000a628 ldr.w r1, [r3, 0x244] | r1 = *((r3 + 0x244));
0x0000a62c b.w 0x989a | goto label_71;
| do {
0x0000a63c ldr r0, [pc, 0xa8] |
0x0000a63e movs r2, 0 | r2 = 0;
0x0000a640 ldr.w r1, [fp, 4] | r1 = *(arg_4h);
0x0000a644 add r0, pc |
0x0000a646 ldr r0, [r0] | r0 = *(0x14d30);
0x0000a648 blx 0x9f4 | fcn_000009f4 ();
| label_114:
0x0000a64c ldr r3, [pc, 0x9c] |
0x0000a64e add r3, pc | r3 = 0x14d3e;
0x0000a650 b 0xa63c |
| } while (1);
| label_127:
0x0000a652 ldr r1, [pc, 0x9c] |
0x0000a654 add r1, pc | r1 = 0x14d4a;
0x0000a656 b 0xa52e | goto label_72;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/ld-linux-armhf.so.3 @ 0xfd5c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym._dl_exception_create_format () | void dl_exception_create_format (int16_t arg_2h, int16_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_40h;
| int16_t var_44h;
| r0 = arg1;
| r1 = arg2;
0x0000fd5c push {r2, r3} |
0x0000fd5e push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000fd62 sub sp, 0x1c |
0x0000fd64 mov sb, r0 | sb = r0;
0x0000fd66 ldr r6, [sp, 0x40] | r6 = var_40h;
0x0000fd68 cmp r1, 0 |
| if (r1 == 0) {
0x0000fd6a beq.w 0xff4a | goto label_15;
| }
0x0000fd6e mov r0, r1 | r0 = r1;
0x0000fd70 mov sl, r1 | sl = r1;
0x0000fd72 bl 0x15540 | r0 = fcn_00015540 (r0, r1);
0x0000fd76 adds r7, r0, 2 | r7 = r0 + 2;
0x0000fd78 adds r3, r0, 1 | r3 = r0 + 1;
0x0000fd7a str r3, [sp, 0xc] | var_ch = r3;
| label_5:
0x0000fd7c ldrb r2, [r6] | r2 = *(r6);
0x0000fd7e add r5, sp, 0x44 | r5 += var_44h;
0x0000fd80 str r5, [sp, 0x14] | var_14h = r5;
| if (r2 == 0) {
0x0000fd82 cbz r2, 0xfdca | goto label_16;
| }
0x0000fd84 mov r3, r6 | r3 = r6;
0x0000fd86 b 0xfd8e |
| while (r2 != 0x25) {
| label_1:
0x0000fd88 ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x0000fd8a adds r3, r4, 1 | r3 = r4 + 1;
| if (r2 == 0) {
0x0000fd8c cbz r2, 0xfdc4 | goto label_17;
| }
| label_0:
0x0000fd8e cmp r2, 0x25 |
0x0000fd90 add.w r4, r3, 1 | r4 = r3 + 1;
0x0000fd94 itt ne |
| if (r2 == 0x25) {
0x0000fd96 addne r7, 1 | r7++;
| }
| if (r2 == 0x25) {
0x0000fd98 movne r4, r3 | r4 = r3;
| }
0x0000fd9a bne 0xfd88 |
| }
0x0000fd9c ldrb r2, [r3, 1] | r2 = *((r3 + 1));
0x0000fd9e ldrb r1, [r3, 2] | r1 = *((r3 + 2));
0x0000fda0 subs r2, 0x6c | r2 -= 0x6c;
0x0000fda2 cmp r2, 0xe |
| if (r2 <= 0xe) {
0x0000fda4 bhi 0xfdba |
| /* switch table (15 cases) at 0xfdaa */
0x0000fda6 tbb [pc, r2] | __asm ("tbb [0x0000fdac]");
| }
0x0000fdba ldrb r2, [r4, 1] | r2 = *((r4 + 1));
0x0000fdbc adds r7, 1 | r7++;
0x0000fdbe adds r3, r4, 1 | r3 = r4 + 1;
0x0000fdc0 cmp r2, 0 |
| if (r2 != 0) {
0x0000fdc2 bne 0xfd8e | goto label_0;
| }
| label_17:
0x0000fdc4 cmp r7, 0 |
| if (r7 < 0) {
0x0000fdc6 blt.w 0xff2e | goto label_18;
| }
| label_16:
0x0000fdca ldr r3, [pc, 0x198] |
0x0000fdcc mov r0, r7 | r0 = r7;
0x0000fdce add r3, pc |
0x0000fdd0 ldr r3, [r3] | r3 = *(0x1fd38);
0x0000fdd2 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0000fdd4 mov r4, r0 | r4 = r0;
0x0000fdd6 cmp r0, 0 |
| if (r0 == 0) {
0x0000fdd8 beq.w 0xff2e | goto label_18;
| }
0x0000fddc ldr r3, [pc, 0x188] |
0x0000fdde str.w r0, [sb, 4] | __asm ("str.w r0, [sb, 4]");
0x0000fde2 add r3, pc |
0x0000fde4 ldr r3, [r3] | r3 = *(0x1fd4e);
| if (r3 != 0) {
0x0000fde6 cbz r3, 0xfdf6 |
0x0000fde8 ldrb.w r3, [r3, 0x198] | r3 = *((r3 + 0x198));
0x0000fdec tst.w r3, 4 |
0x0000fdf0 ite ne |
| if ((r3 & 4) == 0) {
0x0000fdf2 movne r3, r0 | r3 = r0;
| }
| if ((r3 & 4) == 0) {
0x0000fdf4 moveq r3, 0 | r3 = 0;
| goto label_19;
| }
| }
| label_19:
0x0000fdf6 str.w r3, [sb, 8] | __asm ("str.w r3, [sb, 8]");
0x0000fdfa add r7, r4 | r7 += r4;
0x0000fdfc ldrb r3, [r6] | r3 = *(r6);
0x0000fdfe str r5, [sp, 0x14] | var_14h = r5;
0x0000fe00 cmp r3, 0 |
| if (r3 == 0) {
0x0000fe02 beq 0xfea8 | goto label_20;
| }
0x0000fe04 mov.w fp, 0 |
0x0000fe08 b 0xfe1e |
| while (r3 != 0x25) {
0x0000fe0a cmp r7, r4 |
| if (r7 == r4) {
0x0000fe0c beq.w 0xff2a | goto label_21;
| }
0x0000fe10 mov r5, r6 | r5 = r6;
| label_4:
0x0000fe12 strb r3, [r4], 1 | *(r4) = r3;
| r4++;
| label_3:
0x0000fe16 ldrb r3, [r5, 1] | r3 = *((r5 + 1));
0x0000fe18 adds r6, r5, 1 | r6 = r5 + 1;
0x0000fe1a cmp r3, 0 |
| if (r3 == 0) {
0x0000fe1c beq 0xfea8 | goto label_20;
| }
| label_2:
0x0000fe1e cmp r3, 0x25 |
0x0000fe20 bne 0xfe0a |
| }
0x0000fe22 ldrb r2, [r6, 1] | r2 = *((r6 + 1));
0x0000fe24 adds r5, r6, 1 | r5 = r6 + 1;
0x0000fe26 cmp r2, 0x25 |
| if (r2 == 0x25) {
0x0000fe28 beq 0xff24 | goto label_22;
| }
0x0000fe2a sub.w r3, r2, 0x6c | r3 = r2 - 0x6c;
0x0000fe2e uxtb r2, r3 | r2 = (int8_t) r3;
0x0000fe30 cmp r2, 0xe |
| if (r2 > 0xe) {
0x0000fe32 bhi.w 0xff5c | goto label_23;
| }
0x0000fe36 cmp r3, 0xe |
| if (r3 > 0xe) {
0x0000fe38 bhi.w 0xff5c | goto label_23;
| }
| /* switch table (15 cases) at 0xfe40 */
0x0000fe3c tbb [pc, r3] | __asm ("tbb [0x0000fe44]");
0x0000fe50 cmp r1, 0x78 |
0x0000fe52 itt eq |
| if (r1 != 0x78) {
0x0000fe54 addeq r7, 8 | r7 += 8;
| }
| if (r1 == 0x78) {
0x0000fe56 addeq r4, r3, 2 | r4 = r3 + 2;
| goto label_24;
| }
| if (r1 == 0x78) {
| label_24:
0x0000fe58 beq 0xfd88 | goto label_1;
| }
0x0000fe5a adds r7, 8 | r7 += 8;
0x0000fe5c b 0xfd88 | goto label_1;
0x0000fe5e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000fe60 adds r2, r3, 4 | r2 = r3 + 4;
0x0000fe62 ldr r0, [r3] | r0 = *(r3);
0x0000fe64 str r2, [sp, 0x14] | var_14h = r2;
0x0000fe66 bl 0x15540 | r0 = fcn_00015540 (r0, r1);
0x0000fe6a add r7, r0 | r7 += r0;
0x0000fe6c b 0xfd88 | goto label_1;
0x0000fe6e ldrb r3, [r6, 2] | r3 = *((r6 + 2));
0x0000fe70 cmp r3, 0x78 |
| if (r3 != 0x78) {
0x0000fe72 bne 0xff5c | goto label_23;
| }
0x0000fe74 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000fe76 add.w r8, r4, 8 | r8 = r4 + 8;
0x0000fe7a mov r2, r8 | r2 = r8;
0x0000fe7c movs r1, 0 | r1 = 0;
0x0000fe7e ldr r0, [r3] | r0 = *(r3);
0x0000fe80 adds r3, 4 | r3 += 4;
0x0000fe82 str r3, [sp, 0x14] | var_14h = r3;
0x0000fe84 movs r3, 0x10 | r3 = 0x10;
0x0000fe86 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0000fe8a bl 0x1223c | r0 = fcn_0001223c (r0, r1, r2, r3, r4);
0x0000fe8e cmp r0, r4 |
| if (r0 != r4) {
0x0000fe90 beq 0xfe9c |
0x0000fe92 subs r2, r0, r4 | r2 = r0 - r4;
0x0000fe94 movs r1, 0x30 | r1 = 0x30;
0x0000fe96 mov r0, r4 | r0 = r4;
0x0000fe98 blx 0x15da0 | fcn_00015da0 (r0, r1);
| }
0x0000fe9c ldrb r3, [r6, 3] | r3 = *((r6 + 3));
0x0000fe9e adds r5, r6, 2 | r5 = r6 + 2;
0x0000fea0 mov r4, r8 | r4 = r8;
0x0000fea2 adds r6, r5, 1 | r6 = r5 + 1;
0x0000fea4 cmp r3, 0 |
| if (r3 != 0) {
0x0000fea6 bne 0xfe1e | goto label_2;
| }
| label_20:
0x0000fea8 cmp r7, r4 |
| if (r7 == r4) {
0x0000feaa beq 0xff2a | goto label_21;
| }
0x0000feac mov r0, r4 | r0 = r4;
0x0000feae movs r3, 0 | r3 = 0;
0x0000feb0 strb r3, [r0], 1 | *(r0) = r3;
| r0++;
0x0000feb4 subs r7, r7, r0 | r7 -= r0;
0x0000feb6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0000feb8 cmp r7, r3 |
| if (r7 != r3) {
0x0000feba bne 0xff2a | goto label_21;
| }
0x0000febc mov r2, r3 | r2 = r3;
0x0000febe mov r1, sl | r1 = sl;
0x0000fec0 blx 0x15f40 | fcn_00015f40 (r0, r1);
0x0000fec4 str.w r0, [sb] | __asm ("str.w r0, [sb]");
0x0000fec8 add sp, 0x1c |
0x0000feca pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000fece add sp, 8 |
0x0000fed0 bx lr | return;
0x0000fed2 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000fed4 add.w r6, r4, 8 | r6 = r4 + 8;
0x0000fed8 mov r2, r6 | r2 = r6;
0x0000feda movs r1, 0 | r1 = 0;
0x0000fedc ldr r0, [r3] | r0 = *(r3);
0x0000fede adds r3, 4 | r3 += 4;
0x0000fee0 str r3, [sp, 0x14] | var_14h = r3;
0x0000fee2 movs r3, 0x10 | r3 = 0x10;
0x0000fee4 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x0000fee8 bl 0x1223c | r0 = fcn_0001223c (r0, r1, r2, r3, r4);
0x0000feec cmp r0, r4 |
| if (r0 == r4) {
0x0000feee beq 0xff58 | goto label_25;
| }
0x0000fef0 subs r2, r0, r4 | r2 = r0 - r4;
0x0000fef2 movs r1, 0x30 | r1 = 0x30;
0x0000fef4 mov r0, r4 | r0 = r4;
0x0000fef6 mov r4, r6 | r4 = r6;
0x0000fef8 blx 0x15da0 | fcn_00015da0 (r0, r1);
0x0000fefc b 0xfe16 | goto label_3;
0x0000fefe ldr r3, [sp, 0x14] | r3 = var_14h;
0x0000ff00 ldr.w r8, [r3] | r8 = *(r3);
0x0000ff04 adds r3, 4 | r3 += 4;
0x0000ff06 str r3, [sp, 0x14] | var_14h = r3;
0x0000ff08 mov r0, r8 | r0 = r8;
0x0000ff0a bl 0x15540 | fcn_00015540 (r0, r1);
0x0000ff0e subs r3, r7, r4 | r3 = r7 - r4;
0x0000ff10 mov r6, r0 | r6 = r0;
0x0000ff12 cmp r3, r0 |
| if (r3 <= r0) {
0x0000ff14 blo 0xff2a | goto label_21;
| }
0x0000ff16 mov r0, r4 | r0 = r4;
0x0000ff18 mov r2, r6 | r2 = r6;
0x0000ff1a mov r1, r8 | r1 = r8;
0x0000ff1c blx 0x15f40 | r0 = fcn_00015f40 (r0, r1);
0x0000ff20 adds r4, r0, r6 | r4 = r0 + r6;
0x0000ff22 b 0xfe16 | goto label_3;
| label_22:
0x0000ff24 cmp r7, r4 |
| if (r7 != r4) {
0x0000ff26 bne.w 0xfe12 | goto label_4;
| }
| label_21:
0x0000ff2a bl 0xfc98 | fcn_0000fc98 ();
| label_18:
0x0000ff2e ldr r2, [pc, 0x3c] |
0x0000ff30 movs r1, 0 | r1 = 0;
0x0000ff32 ldr r3, [pc, 0x3c] |
0x0000ff34 str.w r1, [sb, 8] | __asm ("str.w r1, [sb, 8]");
0x0000ff38 add r2, pc | r2 = 0x1feaa;
0x0000ff3a add r3, pc | r3 = 0x1feb0;
0x0000ff3c strd r2, r3, [sb] | __asm ("strd r2, r3, [sb]");
0x0000ff40 add sp, 0x1c |
0x0000ff42 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0000ff46 add sp, 8 |
0x0000ff48 bx lr | return;
| label_15:
0x0000ff4a ldr.w sl, [pc, 0x28] |
0x0000ff4e movs r3, 1 | r3 = 1;
0x0000ff50 movs r7, 2 | r7 = 2;
0x0000ff52 str r3, [sp, 0xc] | var_ch = r3;
0x0000ff54 add sl, pc | sl = 0x1fece;
0x0000ff56 b 0xfd7c | goto label_5;
| label_25:
0x0000ff58 mov r4, r6 | r4 = r6;
0x0000ff5a b 0xfe16 | goto label_3;
| label_23:
0x0000ff5c ldr r0, [pc, 0x18] |
0x0000ff5e add r0, pc | r0 = 0x1feda;
0x0000ff60 bl 0xc2a4 | dl_fatal_printf ()
| if (r7 != 2) {
0x0000ff64 bne 0xff7c | void (*0xff7c)() ();
| }
0x0000ff66 movs r1, r0 | r1 = r0;
| if (r1 < r0) {
0x0000ff68 bhs 0xffc0 |
0x0000ff6a movs r1, r0 | r1 = r0;
0x0000ff6c ldrh r4, [r5, 0x3a] | r4 = *((r5 + 0x3a));
0x0000ff6e movs r0, r0 |
0x0000ff70 adr r4, 0x3c8 | r4 = 0x3c8;
0x0000ff72 movs r0, r0 |
0x0000ff74 ldrh r0, [r2, 0x3a] | r0 = *((r2 + 0x3a));
0x0000ff76 movs r0, r0 |
0x0000ff78 adr r4, 0x268 | r4 = 0x268;
0x0000ff7a movs r0, r0 |
| }
0x0000ffc0 adds r3, r2, 7 | r3 = r2 + 7;
0x0000ffc2 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0000ffc6 mov r1, r6 | r1 = r6;
0x0000ffc8 sub.w sp, sp, r3 |
0x0000ffcc mov fp, r6 |
0x0000ffce mov sl, sp | sl = sp;
0x0000ffd0 mov.w sb, 1 | sb = 1;
0x0000ffd4 mov r0, sl | r0 = sl;
0x0000ffd6 str r6, [r7, 0x28] | *((r7 + 0x28)) = r6;
0x0000ffd8 blx 0x15da0 | fcn_00015da0 (r0, r1);
| label_6:
0x0000ffdc ldrh.w r3, [sl, fp] | r3 = *((sl + fp));
0x0000ffe0 add.w r2, sl, fp | r2 = sl + fp;
0x0000ffe4 str r2, [r7, 0x24] | *((r7 + 0x24)) = r2;
0x0000ffe6 ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x0000ffe8 adds r3, 1 | r3++;
0x0000ffea uxth r3, r3 | r3 = (int16_t) r3;
0x0000ffec str r3, [r7, 0x10] | *((r7 + 0x10)) = r3;
0x0000ffee strh.w r3, [sl, fp] | *((sl + fp)) = r3;
0x0000fff2 ldr r3, [r7, 0x20] | r3 = *((r7 + 0x20));
0x0000fff4 ldr r4, [r3, r2] | r4 = *((r3 + r2));
0x0000fff6 adds r0, r3, r2 | r0 = r3 + r2;
0x0000fff8 ldr r3, [r7, 0x2c] | r3 = *((r7 + 0x2c));
0x0000fffa cmp r3, 0 |
| if (r3 != 0) {
0x0000fffc bne 0x100f0 | goto label_26;
| }
| label_14:
0x0000fffe ldr r5, [r7, 0xc] | r5 = *((r7 + 0xc));
0x00010000 cmp r5, r6 |
| if (r5 < r6) {
0x00010002 bls 0x1001e | goto label_13;
| }
0x00010004 ldr r3, [r7, 8] | r3 = *((r7 + 8));
| do {
0x00010006 mov r8, r3 | r8 = r3;
0x00010008 ldr r2, [r3], -4 | r2 = *(r3);
| r3 += -4;
0x0001000c ldr.w r1, [r2, 0x1f8] | r1 = *((r2 + 0x1f8));
| if (r1 != 0) {
0x00010010 cbnz r1, 0x10048 | goto label_27;
| }
| label_7:
0x00010012 ldr r1, [r7, 0x2c] | r1 = *((r7 + 0x2c));
0x00010014 cmp r1, 0 |
| if (r1 != 0) {
0x00010016 bne 0x100aa | goto label_28;
| }
| label_10:
0x00010018 subs r5, 1 | r5--;
0x0001001a cmp r6, r5 |
0x0001001c bne 0x10006 |
| } while (r6 != r5);
| label_13:
0x0001001e ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x00010020 cmp r3, sb |
| if (r3 == sb) {
0x00010022 beq 0x10106 | goto label_29;
| }
| label_9:
0x00010024 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x00010026 lsl.w fp, sb, 1 |
0x0001002a movs r1, 0 | r1 = 0;
0x0001002c add.w r0, sl, fp | r0 = sl + fp;
0x00010030 mov r6, sb | r6 = sb;
0x00010032 sub.w r2, r3, sb | r2 = r3 - sb;
0x00010036 lsl.w r3, sb, 2 | r3 = sb << 2;
0x0001003a lsls r2, r2, 1 | r2 <<= 1;
0x0001003c add.w sb, sb, 1 | sb++;
0x00010040 str r3, [r7, 0x28] | *((r7 + 0x28)) = r3;
0x00010042 blx 0x15da0 | fcn_00015da0 (r0, r1);
0x00010046 b 0xffdc | goto label_6;
| label_27:
0x00010048 sub.w ip, r1, 4 |
| label_8:
0x0001004c ldr r1, [ip, 4]! | r1 = *((ip += 4));
0x00010050 cmp r1, 0 |
| if (r1 == 0) {
0x00010052 beq 0x10012 | goto label_7;
| }
0x00010054 cmp r1, r4 |
| if (r1 != r4) {
0x00010056 bne 0x1004c | goto label_8;
| }
| label_11:
0x00010058 ldr r2, [r7, 0x28] | r2 = *((r7 + 0x28));
0x0001005a subs r3, r5, r6 | r3 = r5 - r6;
0x0001005c str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x0001005e adds r1, r2, 4 | r1 = r2 + 4;
0x00010060 ldr r2, [r7, 0x20] | r2 = *((r7 + 0x20));
0x00010062 add r1, r2 | r1 += r2;
0x00010064 lsls r2, r3, 2 | r2 = r3 << 2;
0x00010066 blx 0x15a80 | fcn_00015a80 (r0, r1);
0x0001006a ldr r1, [r7, 0x1c] | r1 = *((r7 + 0x1c));
0x0001006c ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x0001006e str.w r4, [r8] | __asm ("str.w r4, [r8]");
| if (r1 != 0) {
0x00010072 cbz r1, 0x10088 |
0x00010074 mov r2, r3 | r2 = r3;
0x00010076 mov r3, r1 | r3 = r1;
0x00010078 ldrb r4, [r1, r6] | r4 = *((r1 + r6));
0x0001007a adds r0, r3, r6 | r0 = r3 + r6;
0x0001007c add r1, sb | r1 += sb;
0x0001007e blx 0x15a80 | fcn_00015a80 (r0, r1);
0x00010082 ldr r3, [r7, 0x1c] | r3 = *((r7 + 0x1c));
0x00010084 strb r4, [r3, r5] | *((r3 + r5)) = r4;
0x00010086 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
| }
0x00010088 ldr r2, [r7, 0x24] | r2 = *((r7 + 0x24));
0x0001008a ldrh r1, [r2, 2] | r1 = *((r2 + 2));
0x0001008c ldr r2, [r7, 0x18] | r2 = *((r7 + 0x18));
0x0001008e subs r2, r2, r6 | r2 -= r6;
0x00010090 cmp r1, r2 |
| if (r1 > r2) {
0x00010092 bhi 0x10024 | goto label_9;
| }
0x00010094 add.w r1, fp, 2 | r1 += arg_2h;
0x00010098 lsls r2, r3, 1 | r2 = r3 << 1;
0x0001009a ldr r0, [r7, 0x24] | r0 = *((r7 + 0x24));
0x0001009c add r1, sl | r1 += sl;
0x0001009e blx 0x15a80 | fcn_00015a80 (r0, r1);
0x000100a2 ldr r3, [r7, 0x10] | r3 = *((r7 + 0x10));
0x000100a4 strh.w r3, [sl, r5, lsl 1] | offset_0 = r5 << 1;
| *((sl + offset_0)) = r3;
0x000100a8 b 0xffdc | goto label_6;
| label_28:
0x000100aa ldr.w r1, [r2, 0x1fc] | r1 = *((r2 + 0x1fc));
0x000100ae cmp r1, 0 |
| if (r1 == 0) {
0x000100b0 beq 0x10018 | goto label_10;
| }
0x000100b2 ldr.w ip, [r1] | ip = *(r1);
0x000100b6 mov lr, r3 | lr = r3;
0x000100b8 str.w ip, [r7, 0x14] | __asm ("str.w ip, [r7, 0x14]");
0x000100bc add.w r1, r1, ip, lsl 2 | r1 += (ip << 2);
0x000100c0 mov ip, r2 |
0x000100c2 ldr r2, [r7, 0x14] | r2 = *((r7 + 0x14));
| do {
| if (r2 == 0) {
0x000100c4 cbz r2, 0x10112 | goto label_30;
| }
0x000100c6 ldr r3, [r1], -4 | r3 = *(r1);
| r1 += -4;
0x000100ca subs r2, 1 | r2--;
0x000100cc cmp r3, r4 |
0x000100ce bne 0x100c4 |
| } while (r3 != r4);
0x000100d0 ldr.w r1, [r4, 0x1f8] | r1 = *((r4 + 0x1f8));
0x000100d4 mov r2, ip | r2 = ip;
0x000100d6 mov r3, lr | r3 = lr;
0x000100d8 cmp r1, 0 |
| if (r1 == 0) {
0x000100da beq 0x10058 | goto label_11;
| }
0x000100dc sub.w ip, r1, 4 |
0x000100e0 b 0x100e6 | goto label_31;
| label_12:
0x000100e2 cmp r2, r1 |
| if (r2 == r1) {
0x000100e4 beq 0x10018 | goto label_10;
| }
| label_31:
0x000100e6 ldr r1, [ip, 4]! | r1 = *((ip += 4));
0x000100ea cmp r1, 0 |
| if (r1 != 0) {
0x000100ec bne 0x100e2 | goto label_12;
| }
0x000100ee b 0x10058 | goto label_11;
| label_26:
0x000100f0 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x000100f2 cmp r3, r4 |
| if (r3 != r4) {
0x000100f4 bne 0x1001e | goto label_13;
| }
0x000100f6 ldr.w r3, [r4, 0x214] | r3 = *((r4 + 0x214));
0x000100fa adds r3, 1 | r3++;
| if (r3 != 1) {
0x000100fc bne.w 0xfffe | goto label_14;
| }
0x00010100 ldr r3, [r7, 0x18] | r3 = *((r7 + 0x18));
0x00010102 cmp r3, sb |
| if (r3 != sb) {
0x00010104 bne 0x10024 | goto label_9;
| }
| label_29:
0x00010106 ldr.w sp, [r7, 4] | sp = *((r7 + 4));
0x0001010a adds r7, 0x34 | r7 += 0x34;
0x0001010c mov sp, r7 |
0x0001010e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_30:
0x00010112 mov r3, lr | r3 = lr;
0x00010114 b 0x10018 | goto label_10;
| }
[*] Function printf used 17 times ld-linux-armhf.so.3