[*] Binary protection state of libscene_proto.so
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function system tear down of libscene_proto.so
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libscene_proto.so @ 0x2208 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
| #define SWAP32(n) ((uint32_t) (((n & 0x000000ff) << 24) | \
| ((n & 0x0000ff00) << 8) | \
| ((n & 0x00ff0000) >> 8) | \
| ((n & 0xff000000) >> 24)))
|
; (fcn) sym.scene_serialize_protobuf () | void scene_serialize_protobuf (int16_t arg_50h, uint32_t arg1, uint32_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_8h_3;
| int16_t var_8h_2;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_4h_2;
| int32_t var_4h_3;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_38h;
| int32_t var_3ch;
| int32_t var_40h;
| int32_t var_44h;
| int32_t var_48h;
| int32_t var_48h_2;
| int16_t var_64h;
| int32_t var_68h;
| int16_t var_6ch;
| int32_t var_74h;
| int32_t var_74h_2;
| int32_t var_7ch;
| int32_t var_80h;
| int32_t var_84h;
| int32_t var_88h;
| int32_t var_88h_2;
| int32_t var_90h;
| int32_t var_98h;
| int32_t var_98h_2;
| int32_t var_a4h;
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00002208 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x0000220c cmp r1, 0 |
0x0000220e it ne |
| if (r1 != 0) {
0x00002210 cmpne r0, 0 | __asm ("cmpne r0, 0");
| }
0x00002212 ldr.w r5, [pc, 0xcdc] | r5 = *(0x00002ef0);
0x00002216 ldr.w r4, [pc, 0xcdc] |
0x0000221a add r5, pc | r5 += pc;
0x0000221c vpush {d8} | __asm ("vpush {d8}");
0x00002220 sub sp, 0xb4 |
0x00002222 ldr r4, [r5, r4] | r4 = *((r5 + r4));
0x00002224 add r7, sp, 8 | r7 += var_8h;
0x00002226 ldr.w r5, [r7, 0xe4] | r5 = *((r7 + 0xe4));
0x0000222a ldr r4, [r4] | r4 = *(0x2ef6);
0x0000222c str.w r4, [r7, 0xa4] | __asm ("str.w r4, [var_a4h]");
0x00002230 mov.w r4, 0 | r4 = 0;
0x00002234 strd r2, r3, [r7, 0x48] | __asm ("strd r2, r3, [var_48h]");
0x00002238 ldr.w r3, [pc, 0xcbc] | r3 = *(0x00002ef8);
0x0000223c ldrb.w r4, [r7, 0xd8] | r4 = *((r7 + 0xd8));
0x00002240 str r1, [r7, 0x30] | var_30h = r1;
0x00002242 add r3, pc | r3 += pc;
0x00002244 str r4, [r7, 0x3c] | var_3ch = r4;
0x00002246 str r3, [r7, 0x44] | var_44h = r3;
0x00002248 ldrb.w r4, [r7, 0xdc] | r4 = *((r7 + 0xdc));
0x0000224c ldr.w r3, [r7, 0xe0] | r3 = *((r7 + 0xe0));
0x00002250 str r4, [r7, 0x38] | var_38h = r4;
0x00002252 ite eq |
| if (r1 != 0) {
0x00002254 moveq r4, 1 | r4 = 1;
| }
| if (r1 == 0) {
0x00002256 movne r4, 0 | r4 = 0;
| }
0x00002258 str r3, [r7, 0x24] | var_24h = r3;
| if (r1 == 0) {
0x0000225a beq.w 0x2360 | goto label_1;
| }
0x0000225e movs r2, 0x34 | r2 = 0x34;
0x00002260 mov sb, r0 | sb = r0;
0x00002262 mov r1, r4 | r1 = r4;
0x00002264 add.w r0, r7, 0x6c | r0 += var_6ch;
0x00002268 blx 0x1ff4 | fcn_00001ff4 ();
0x0000226c ldr.w r3, [pc, 0xc8c] | r3 = *(0x2efc);
0x00002270 ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002272 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002274 str r3, [r7, 0x68] | var_68h = r3;
0x00002276 cmp r5, 0 |
| if (r5 == 0) {
0x00002278 beq 0x22f2 | goto label_21;
| }
0x0000227a mov r0, r5 | r0 = r5;
0x0000227c ldr.w r5, [pc, 0xc80] |
0x00002280 blx 0x1ef8 | r0 = fcn_00001ef8 ();
0x00002284 mov r8, r0 | r8 = r0;
0x00002286 add r5, pc | r5 = 0x518a;
0x00002288 mov r1, r5 | r1 = r5;
0x0000228a blx 0x2054 | r0 = fcn_00002054 ();
0x0000228e cmp r0, 0 |
| if (r0 == 0) {
0x00002290 beq.w 0x2fa0 | goto label_29;
| }
0x00002294 ldr.w r6, [pc, 0xc6c] |
0x00002298 vmov.i32 d8, 0 | __asm ("vmov.i32 d8, 0");
0x0000229c add r6, pc | r6 = 0x51a4;
0x0000229e b 0x22d0 |
| while (r0 != 0) {
0x000022a0 adds r0, 0xa | r0 += 0xa;
0x000022a2 movs r2, 0xa | r2 = 0xa;
0x000022a4 add.w r1, r7, 0x64 | r1 += var_64h;
0x000022a8 blx 0x200c | fcn_0000200c ();
0x000022ac ldr r3, [r7, 0x64] | r3 = var_64h;
0x000022ae strd r0, r1, [r7, 0x98] | __asm ("strd r0, r1, [var_98h]");
0x000022b2 cmp r3, 0 |
| if (r3 == 0) {
0x000022b4 beq.w 0x23e8 | goto label_30;
| }
0x000022b8 ldrb r3, [r3] | r3 = *(r3);
0x000022ba cmp r3, 0 |
| if (r3 != 0) {
0x000022bc bne.w 0x23e8 | goto label_30;
| }
0x000022c0 movs r3, 2 | r3 = 2;
0x000022c2 str.w r3, [r7, 0x90] | __asm ("str.w r3, [var_90h]");
| label_3:
0x000022c6 mov r1, r5 | r1 = r5;
0x000022c8 movs r0, 0 | r0 = 0;
0x000022ca blx 0x2054 | r0 = fcn_00002054 ();
| if (r0 == 0) {
0x000022ce cbz r0, 0x22e8 | goto label_31;
| }
| label_0:
0x000022d0 mov r1, r6 | r1 = r6;
0x000022d2 blx 0x1e84 | r0 = strstr (r0, r1);
0x000022d6 cmp r0, 0 |
0x000022d8 bne 0x22a0 |
| }
0x000022da mov r1, r5 | r1 = r5;
0x000022dc movs r0, 0 | r0 = 0;
0x000022de adds r4, 1 | r4++;
0x000022e0 blx 0x2054 | r0 = fcn_00002054 ();
0x000022e4 cmp r0, 0 |
| if (r0 != 0) {
0x000022e6 bne 0x22d0 | goto label_0;
| }
| label_31:
0x000022e8 mov r0, r8 | r0 = r8;
0x000022ea blx 0x1ec8 | fcn_00001ec8 ();
0x000022ee cmp r4, 0 |
| if (r4 != 0) {
0x000022f0 bne 0x2360 | goto label_1;
| }
| label_21:
0x000022f2 movs r1, 0 | r1 = 0;
0x000022f4 mov r0, sb | r0 = sb;
0x000022f6 blx 0x2084 | r0 = fcn_00002084 ();
0x000022fa mov fp, r0 |
0x000022fc cmp r0, 0 |
| if (r0 == 0) {
0x000022fe beq.w 0x2fc6 | goto label_32;
| }
0x00002302 ldr r3, [r7, 0x48] | r3 = var_48h;
0x00002304 cmp r3, 0 |
| if (r3 != 0) {
0x00002306 bne 0x238c | goto label_33;
| }
0x00002308 ldr r3, [r7, 0x38] | r3 = var_38h;
0x0000230a cmp r3, 0 |
| if (r3 != 0) {
0x0000230c bne 0x23f0 | goto label_34;
| }
0x0000230e ldr r3, [r7, 0x4c] | r3 = var_48h_2;
0x00002310 vmov.f32 s16, 5.000000e-01 | __asm ("vmov.f32 s16, 5");
0x00002314 cmp r3, 0 |
| if (r3 == 0) {
0x00002316 beq.w 0x270c | goto label_35;
| }
0x0000231a ldr.w r8, [r7, 0x38] | r8 = var_38h;
0x0000231e movs r4, 1 | r4 = 1;
0x00002320 mov r1, r0 | r1 = r0;
0x00002322 b 0x235a |
| while (r5 < r3) {
0x00002324 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00002328 mov r0, sb | r0 = sb;
0x0000232a lsl.w r3, r4, r3 | r3 = r4 << r3;
0x0000232e vmov s15, r3 | __asm ("vmov s15, r3");
0x00002332 ldrsh.w r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x00002336 vcvt.f32.u32 s15, s15 | __asm ("vcvt.f32.u32 s15, s15");
0x0000233a vadd.f32 s15, s15, s16 | __asm ("vadd.f32 s15, s15, s16");
0x0000233e vcvt.s32.f32 s15, s15 | __asm ("vcvt.s32.f32 s15, s15");
0x00002342 vmov r2, s15 | __asm ("vmov r2, s15");
0x00002346 cmp r2, r3 |
0x00002348 it le |
| if (r2 > r3) {
0x0000234a addle r8, r8, 1 | r8++;
| }
0x0000234e blx 0x2084 | r0 = fcn_00002084 ();
0x00002352 mov r1, r0 | r1 = r0;
0x00002354 cmp r0, 0 |
| if (r0 == 0) {
0x00002356 beq.w 0x2468 | goto label_9;
| }
0x0000235a ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0000235c lsls r5, r3, 0x19 | r5 = r3 << 0x19;
0x0000235e bmi 0x2324 |
| }
| do {
| label_1:
0x00002360 mov.w r0, -1 | r0 = -1;
| label_8:
0x00002364 ldr.w r2, [pc, 0xba0] | r2 = *(0x00002f08);
0x00002368 ldr.w r3, [pc, 0xb88] | r3 = *(0x2ef4);
0x0000236c add r2, pc | r2 += pc;
0x0000236e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002370 ldr r2, [r3] | r2 = *(0x2ef4);
0x00002372 ldr.w r3, [r7, 0xa4] | r3 = var_a4h;
0x00002376 eors r2, r3 | r2 ^= r3;
0x00002378 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000237c bne.w 0x3046 | goto label_36;
| }
0x00002380 adds r7, 0xac | r7 += 0xac;
0x00002382 mov sp, r7 |
0x00002384 vpop {d8} | __asm ("vpop {d8}");
0x00002388 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_33:
0x0000238c ldr r3, [r7, 0x38] | r3 = var_38h;
0x0000238e cmp r3, 0 |
| if (r3 != 0) {
0x00002390 bne 0x2412 | goto label_37;
| }
0x00002392 ldr r3, [r7, 0x4c] | r3 = var_48h_2;
0x00002394 vmov.f32 s16, 5.000000e-01 | __asm ("vmov.f32 s16, 5");
0x00002398 cmp r3, 0 |
| if (r3 == 0) {
0x0000239a beq.w 0x2748 | goto label_38;
| }
0x0000239e ldr.w r8, [r7, 0x38] | r8 = var_38h;
0x000023a2 movs r4, 1 | r4 = 1;
0x000023a4 mov r1, r0 | r1 = r0;
0x000023a6 b 0x23e0 | goto label_39;
| label_2:
0x000023a8 lsls r6, r3, 0x19 | r6 = r3 << 0x19;
0x000023aa bpl 0x2360 |
| } while (r6 >= r3);
0x000023ac ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x000023b0 mov r0, sb | r0 = sb;
0x000023b2 lsl.w r3, r4, r3 | r3 = r4 << r3;
0x000023b6 vmov s15, r3 | __asm ("vmov s15, r3");
0x000023ba ldrsh.w r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x000023be vcvt.f32.u32 s15, s15 | __asm ("vcvt.f32.u32 s15, s15");
0x000023c2 vadd.f32 s15, s15, s16 | __asm ("vadd.f32 s15, s15, s16");
0x000023c6 vcvt.s32.f32 s15, s15 | __asm ("vcvt.s32.f32 s15, s15");
0x000023ca vmov r2, s15 | __asm ("vmov r2, s15");
0x000023ce cmp r2, r3 |
0x000023d0 it le |
| if (r2 > r3) {
0x000023d2 addle r8, r8, 1 | r8++;
| }
0x000023d6 blx 0x2084 | r0 = fcn_00002084 ();
0x000023da mov r1, r0 | r1 = r0;
0x000023dc cmp r0, 0 |
| if (r0 == 0) {
0x000023de beq 0x2468 | goto label_9;
| }
| label_39:
0x000023e0 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x000023e2 lsls r2, r3, 0x1a | r2 = r3 << 0x1a;
| if (r2 >= r3) {
0x000023e4 bpl 0x2360 | goto label_1;
| }
0x000023e6 b 0x23a8 | goto label_2;
| label_30:
0x000023e8 adds r4, 1 | r4++;
0x000023ea vstr d8, [r7, 0x98] | __asm ("vstr d8, [r7, 0x98]");
0x000023ee b 0x22c6 | goto label_3;
| label_34:
0x000023f0 ldr r3, [r7, 0x4c] | r3 = var_48h_2;
| if (r3 == 0) {
0x000023f2 cbz r3, 0x2454 | goto label_40;
| }
0x000023f4 ldr.w r8, [r7, 0x48] | r8 = var_48h;
0x000023f8 mov r1, r0 | r1 = r0;
0x000023fa b 0x240a | goto label_41;
| label_4:
0x000023fc mov r0, sb | r0 = sb;
0x000023fe add.w r8, r8, 1 | r8++;
0x00002402 blx 0x2084 | r0 = fcn_00002084 ();
0x00002406 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x00002408 cbz r0, 0x2468 | goto label_9;
| }
| label_41:
0x0000240a ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0000240c lsls r4, r3, 0x19 | r4 = r3 << 0x19;
| if (r4 >= r3) {
0x0000240e bpl 0x2360 | goto label_1;
| }
0x00002410 b 0x23fc | goto label_4;
| label_37:
0x00002412 ldr r3, [r7, 0x4c] | r3 = var_48h_2;
| if (r3 == 0) {
0x00002414 cbz r3, 0x2438 | goto label_42;
| }
0x00002416 mov.w r8, 0 | r8 = 0;
0x0000241a mov r1, r0 | r1 = r0;
0x0000241c b 0x2430 | goto label_43;
| label_5:
0x0000241e lsls r0, r3, 0x19 | r0 = r3 << 0x19;
| if (r0 >= r3) {
0x00002420 bpl 0x2360 | goto label_1;
| }
0x00002422 mov r0, sb | r0 = sb;
0x00002424 add.w r8, r8, 1 | r8++;
0x00002428 blx 0x2084 | r0 = fcn_00002084 ();
0x0000242c mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x0000242e cbz r0, 0x2468 | goto label_9;
| }
| label_43:
0x00002430 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x00002432 lsls r4, r3, 0x1a | r4 = r3 << 0x1a;
| if (r4 >= r3) {
0x00002434 bpl 0x2360 | goto label_1;
| }
0x00002436 b 0x241e | goto label_5;
| label_42:
0x00002438 mov r8, r3 | r8 = r3;
0x0000243a mov r1, r0 | r1 = r0;
0x0000243c b 0x244c | goto label_44;
| label_6:
0x0000243e mov r0, sb | r0 = sb;
0x00002440 add.w r8, r8, 1 | r8++;
0x00002444 blx 0x2084 | r0 = fcn_00002084 ();
0x00002448 mov r1, r0 | r1 = r0;
| if (r0 == 0) {
0x0000244a cbz r0, 0x2468 | goto label_9;
| }
| label_44:
0x0000244c ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x0000244e lsls r5, r3, 0x1a | r5 = r3 << 0x1a;
| if (r5 >= r3) {
0x00002450 bpl 0x2360 | goto label_1;
| }
0x00002452 b 0x243e | goto label_6;
| label_40:
0x00002454 mov r8, r3 | r8 = r3;
0x00002456 mov r1, r0 | r1 = r0;
| do {
0x00002458 mov r0, sb | r0 = sb;
0x0000245a add.w r8, r8, 1 | r8++;
0x0000245e blx 0x2084 | r0 = fcn_00002084 ();
0x00002462 mov r1, r0 | r1 = r0;
0x00002464 cmp r0, 0 |
0x00002466 bne 0x2458 |
| } while (r0 != 0);
| label_9:
0x00002468 ldr.w r2, [sb, 0x14] | r2 = *((sb + 0x14));
0x0000246c lsl.w r3, r8, 2 | r3 = r8 << 2;
0x00002470 str.w sp, [r7, 0x18] | __asm ("str.w sp, [var_18h]");
0x00002474 movs r4, 0 | r4 = 0;
0x00002476 adds r3, 0xb | r3 += 0xb;
0x00002478 mov fp, r8 |
0x0000247a str r2, [r7, 0x40] | var_40h = r2;
0x0000247c adds r2, 1 | r2++;
0x0000247e lsls r2, r2, 2 | r2 <<= 2;
0x00002480 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00002484 sub.w sp, sp, r3 |
0x00002488 str.w r8, [r7, 0x74] | __asm ("str.w r8, [var_74h]");
0x0000248c adds r3, r2, 7 | r3 = r2 + 7;
0x0000248e str r4, [sp, 8] | var_8h = r4;
0x00002490 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00002494 str r2, [r7, 0x10] | var_10h = r2;
0x00002496 add r2, sp, 8 | r2 += var_8h;
0x00002498 sub.w sp, sp, r3 |
0x0000249c movs r3, 1 | r3 = 1;
0x0000249e str r2, [r7, 0x1c] | var_1ch = r2;
0x000024a0 str.w r3, [r7, 0x84] | __asm ("str.w r3, [var_84h]");
0x000024a4 add r3, sp, 8 | r3 += var_8h;
0x000024a6 str r3, [r7, 0x20] | var_20h = r3;
0x000024a8 ldrd r2, r3, [sb, 0x28] | __asm ("ldrd r2, r3, [sb, 0x28]");
0x000024ac str r4, [r7, 0x78] | var_74h_2 = r4;
0x000024ae str r4, [sp, 8] | var_8h = r4;
0x000024b0 strd r2, r3, [r7, 0x88] | __asm ("strd r2, r3, [var_88h]");
0x000024b4 cmp.w r8, 0 |
| if (r8 != 0) {
0x000024b8 bne.w 0x2848 | goto label_45;
| }
| label_20:
0x000024bc ldr r3, [r7, 0x40] | r3 = var_40h;
0x000024be movs r4, 0 | r4 = 0;
0x000024c0 str.w r4, [r7, 0x80] | __asm ("str.w r4, [var_80h]");
0x000024c4 str r3, [r7, 0x7c] | var_7ch = r3;
0x000024c6 cmp r3, 0 |
| if (r3 == 0) {
0x000024c8 beq.w 0x282a | goto label_46;
| }
0x000024cc ldr r3, [r7, 0x10] | r3 = var_10h;
0x000024ce subs r0, r3, 4 | r0 = r3 - 4;
0x000024d0 blx 0x1f80 | fcn_00001f80 ();
0x000024d4 str r0, [r7, 0x48] | var_48h = r0;
0x000024d6 cmp r0, 0 |
| if (r0 == 0) {
0x000024d8 beq.w 0x2f6e | goto label_47;
| }
0x000024dc ldr r5, [r7, 0x20] | r5 = var_20h;
0x000024de mov sl, r4 | sl = r4;
0x000024e0 strd fp, r8, [r7, 0x38] | __asm ("strd fp, r8, [var_3ch]");
0x000024e4 mov fp, r0 |
0x000024e6 str r5, [r7, 0x4c] | var_48h_2 = r5;
| label_7:
0x000024e8 mov r1, r4 | r1 = r4;
0x000024ea mov r0, sb | r0 = sb;
0x000024ec blx 0x206c | r0 = fcn_0000206c ();
0x000024f0 mov r4, r0 | r4 = r0;
0x000024f2 ldr r0, [r0, 0x1c] | r0 = *((r0 + 0x1c));
0x000024f4 bic.w r0, r0, r0, asr 31 | r0 = BIT_MASK (r0, r0);
0x000024f8 blx 0x1fdc | r0 = fcn_00001fdc ();
0x000024fc mov r6, r0 | r6 = r0;
0x000024fe cmp r0, 0 |
| if (r0 == 0) {
0x00002500 beq.w 0x2f6a | goto label_48;
| }
0x00002504 blx 0x2060 | fcn_00002060 ();
0x00002508 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0000250a ldr r2, [r0, 0x14] | r2 = *((r0 + 0x14));
0x0000250c lsls r3, r3, 0x16 | r3 <<= 0x16;
0x0000250e itt mi |
| if (r3 >= r3) {
0x00002510 ldrmi r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| }
| if (r3 >= r3) {
0x00002512 strmi r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
| }
0x00002514 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00002516 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00002518 cmp r2, 0 |
| if (r2 == 0) {
0x0000251a beq 0x2590 | goto label_11;
| }
0x0000251c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0000251e add.w ip, r2, -1 |
0x00002522 ldr r1, [r0, 0x18] | r1 = *((r0 + 0x18));
0x00002524 adds r0, r3, 4 | r0 = r3 + 4;
0x00002526 subs r0, r1, r0 | r0 = r1 - r0;
0x00002528 cmp r0, 8 |
0x0000252a it hi |
| if (r0 > 8) {
0x0000252c cmphi ip, 5 | __asm ("cmphi ip, 5");
| }
0x00002530 ite hi |
| if (r0 <= 8) {
0x00002532 movhi r0, 1 | r0 = 1;
| }
| if (r0 > 8) {
0x00002534 movls r0, 0 | r0 = 0;
| }
| if (r0 < 8) {
0x00002536 bls.w 0x2790 | goto label_49;
| }
0x0000253a lsr.w lr, r2, 2 | lr = r2 >> 2;
0x0000253e ldr r5, [r7, 0x4c] | r5 = var_48h_2;
0x00002540 mov r0, r3 | r0 = r3;
0x00002542 add.w lr, r3, lr, lsl 4 | lr = r3 + (lr << 4);
0x00002546 mov ip, r1 |
| do {
0x00002548 vld1.32 {d16, d17}, [r0]! | __asm ("vld1.32 {d16, d17}, [r0]!");
0x0000254c cmp r0, lr |
0x0000254e vst1.32 {d16, d17}, [ip]! | __asm ("vst1.32 {d16, d17}, [ip]!");
0x00002552 bne 0x2548 |
| } while (r0 != lr);
0x00002554 bic r0, r2, 3 | r0 = BIT_MASK (r2, 3);
0x00002558 str r5, [r7, 0x4c] | var_48h_2 = r5;
0x0000255a cmp r2, r0 |
| if (r2 != r0) {
0x0000255c beq 0x2590 |
0x0000255e ldr.w r5, [r3, r0, lsl 2] | offset_0 = r0 << 2;
| r5 = *((r3 + offset_0));
0x00002562 add.w lr, r0, 1 | lr = r0 + 1;
0x00002566 cmp r2, lr |
0x00002568 lsl.w ip, r0, 2 |
0x0000256c str.w r5, [r1, r0, lsl 2] | __asm ("str.w r5, [r1, r0, lsl 2]");
| if (r2 < lr) {
0x00002570 bls 0x2590 | goto label_11;
| }
0x00002572 add.w lr, ip, 4 | lr = ip + 4;
0x00002576 adds r0, 2 | r0 += 2;
0x00002578 ldr.w r5, [r3, lr] | r5 = *((r3 + lr));
0x0000257c cmp r2, r0 |
0x0000257e str.w r5, [r1, lr] | __asm ("str.w r5, [r1, lr]");
| if (r2 < r0) {
0x00002582 bls 0x2590 | goto label_11;
| }
0x00002584 add.w ip, ip, 8 |
0x00002588 ldr.w r3, [r3, ip] | r3 = *((r3 + ip));
0x0000258c str.w r3, [r1, ip] | __asm ("str.w r3, [r1, ip]");
| }
| label_11:
0x00002590 mov r0, r6 | r0 = r6;
0x00002592 blx 0x2060 | fcn_00002060 ();
0x00002596 ldr r3, [r7, 0x4c] | r3 = var_48h_2;
0x00002598 str.w r0, [fp, sl, lsl 2] | __asm ("str.w r0, [fp, sl, lsl 2]");
0x0000259c add.w sl, sl, 1 | sl++;
0x000025a0 str r6, [r3, 4]! | *((r3 += 4)) = r6;
0x000025a4 str r3, [r7, 0x4c] | var_48h_2 = r3;
0x000025a6 ldr r3, [r7, 0x40] | r3 = var_40h;
0x000025a8 cmp sl, r3 |
| if (sl != r3) {
0x000025aa bne 0x24e8 | goto label_7;
| }
0x000025ac ldr r3, [r7, 0x48] | r3 = var_48h;
0x000025ae add.w r0, r7, 0x68 | r0 += var_68h;
0x000025b2 ldrd fp, r8, [r7, 0x38] | __asm ("ldrd fp, r8, [var_3ch]");
0x000025b6 str.w r3, [r7, 0x80] | __asm ("str.w r3, [var_80h]");
0x000025ba ldr r3, [r7, 0x30] | r3 = var_30h;
0x000025bc adds r1, r3, 4 | r1 = r3 + 4;
0x000025be blx 0x1fa4 | r0 = protobuf_c_message_unpack ();
0x000025c2 mov r6, r0 | r6 = r0;
0x000025c4 cmp.w r8, 0 |
| if (r8 == 0) {
0x000025c8 beq.w 0x2fb8 | goto label_50;
| }
0x000025cc movs r3, 0 | r3 = 0;
0x000025ce str r3, [r7, 0x4c] | var_48h_2 = r3;
| label_12:
0x000025d0 cmp.w r8, 8 |
| if (r8 < 8) {
0x000025d4 bls.w 0x2fb0 | goto label_51;
| }
0x000025d8 ldr r3, [r7, 0x1c] | r3 = var_1ch;
0x000025da sub.w sb, r8, 9 | sb = r8 - 9;
0x000025de bic sb, sb, 7 | sb = BIT_MASK (sb, 7);
0x000025e2 mov.w sl, 0 | sl = 0;
0x000025e6 add.w r5, r3, 0x3c | r5 = r3 + 0x3c;
0x000025ea add.w r3, sb, 8 | r3 = sb + 8;
0x000025ee str r3, [r7, 0x44] | var_44h = r3;
| do {
0x000025f0 ldr r0, [r5, -0x38] | r0 = *((r5 - 0x38));
0x000025f4 pld [r5] | __asm ("pld [r5]");
0x000025f8 adds r5, 0x20 | r5 += 0x20;
0x000025fa blx 0x20a8 | fcn_000020a8 ();
0x000025fe ldr r0, [r5, -0x54] | r0 = *((r5 - 0x54));
0x00002602 blx 0x20a8 | fcn_000020a8 ();
0x00002606 ldr r0, [r5, -0x50] | r0 = *((r5 - 0x50));
0x0000260a blx 0x20a8 | fcn_000020a8 ();
0x0000260e ldr r0, [r5, -0x4c] | r0 = *((r5 - 0x4c));
0x00002612 blx 0x20a8 | fcn_000020a8 ();
0x00002616 ldr r0, [r5, -0x48] | r0 = *((r5 - 0x48));
0x0000261a blx 0x20a8 | fcn_000020a8 ();
0x0000261e ldr r0, [r5, -0x44] | r0 = *((r5 - 0x44));
0x00002622 blx 0x20a8 | fcn_000020a8 ();
0x00002626 ldr r0, [r5, -0x40] | r0 = *((r5 - 0x40));
0x0000262a blx 0x20a8 | fcn_000020a8 ();
0x0000262e ldr r0, [r5, -0x3c] | r0 = *((r5 - 0x3c));
0x00002632 blx 0x20a8 | fcn_000020a8 ();
0x00002636 cmp sl, sb |
0x00002638 add.w sl, sl, 8 | sl += 8;
0x0000263c bne 0x25f0 |
| } while (sl != sb);
| label_23:
0x0000263e ldr r3, [r7, 0x44] | r3 = var_44h;
0x00002640 ldr r2, [r7, 0x1c] | r2 = var_1ch;
0x00002642 adds r4, r3, 1 | r4 = r3 + 1;
0x00002644 add.w r5, r2, r3, lsl 2 | r5 = r2 + (r3 << 2);
0x00002648 b 0x264c |
| while (r4 <= r8) {
0x0000264a adds r4, 1 | r4++;
0x0000264c ldr r0, [r5, 4]! | r0 = *((r5 += 4));
0x00002650 blx 0x20a8 | fcn_000020a8 ();
0x00002654 cmp r4, r8 |
0x00002656 blo 0x264a |
| }
0x00002658 mov r0, fp | r0 = fp;
0x0000265a blx 0x1ec8 | fcn_00001ec8 ();
0x0000265e ldr r3, [r7, 0x40] | r3 = var_40h;
0x00002660 cmp r3, 0 |
| if (r3 == 0) {
0x00002662 beq 0x26e2 | goto label_52;
| }
| label_24:
0x00002664 ldr r3, [r7, 0x40] | r3 = var_40h;
0x00002666 cmp r3, 8 |
0x00002668 sub.w sl, r3, 7 | sl = r3 - 7;
| if (r3 < 8) {
0x0000266c bls.w 0x2faa | goto label_53;
| }
0x00002670 ldr r3, [r7, 0x20] | r3 = var_20h;
0x00002672 movs r5, 0 | r5 = 0;
0x00002674 add.w r4, r3, 0x3c | r4 = r3 + 0x3c;
| do {
0x00002678 ldr r0, [r4, -0x38] | r0 = *((r4 - 0x38));
0x0000267c add.w r8, r5, 9 | r8 = r5 + 9;
0x00002680 pld [r4] | __asm ("pld [r4]");
0x00002684 adds r5, 8 | r5 += 8;
0x00002686 blx 0x1f40 | fcn_00001f40 ();
0x0000268a ldr r0, [r4, -0x34] | r0 = *((r4 - 0x34));
0x0000268e adds r4, 0x20 | r4 += 0x20;
0x00002690 blx 0x1f40 | fcn_00001f40 ();
0x00002694 ldr r0, [r4, -0x50] | r0 = *((r4 - 0x50));
0x00002698 blx 0x1f40 | fcn_00001f40 ();
0x0000269c ldr r0, [r4, -0x4c] | r0 = *((r4 - 0x4c));
0x000026a0 blx 0x1f40 | fcn_00001f40 ();
0x000026a4 ldr r0, [r4, -0x48] | r0 = *((r4 - 0x48));
0x000026a8 blx 0x1f40 | fcn_00001f40 ();
0x000026ac ldr r0, [r4, -0x44] | r0 = *((r4 - 0x44));
0x000026b0 blx 0x1f40 | fcn_00001f40 ();
0x000026b4 ldr r0, [r4, -0x40] | r0 = *((r4 - 0x40));
0x000026b8 blx 0x1f40 | fcn_00001f40 ();
0x000026bc ldr r0, [r4, -0x3c] | r0 = *((r4 - 0x3c));
0x000026c0 blx 0x1f40 | fcn_00001f40 ();
0x000026c4 cmp sl, r8 |
0x000026c6 bhi 0x2678 |
| } while (sl > r8);
| label_22:
0x000026c8 ldr r3, [r7, 0x20] | r3 = var_20h;
0x000026ca ldr r4, [r7, 0x40] | r4 = var_40h;
0x000026cc add.w sb, r3, r5, lsl 2 | sb = r3 + (r5 << 2);
0x000026d0 adds r5, 1 | r5++;
0x000026d2 b 0x26d6 |
| while (r5 <= r4) {
0x000026d4 adds r5, 1 | r5++;
0x000026d6 ldr r0, [sb, 4]! | r0 = *((sb += 4));
0x000026da blx 0x1f40 | fcn_00001f40 ();
0x000026de cmp r5, r4 |
0x000026e0 blo 0x26d4 |
| }
| label_52:
0x000026e2 ldr r0, [r7, 0x48] | r0 = var_48h;
0x000026e4 blx 0x1ec8 | fcn_00001ec8 ();
0x000026e8 ldr r3, [r7, 0x4c] | r3 = var_48h_2;
0x000026ea cmp r3, 0 |
| if (r3 != 0) {
0x000026ec bne.w 0x3024 | goto label_54;
| }
| label_28:
0x000026f0 cmp r6, 0 |
0x000026f2 ldr.w sp, [r7, 0x18] | sp = var_18h;
| if (r6 <= 0) {
0x000026f6 ble.w 0x3028 | goto label_55;
| }
0x000026fa ldr r3, [r7, 0x24] | r3 = var_24h;
0x000026fc adds r6, 4 | r6 += 4;
| if (r3 != 0) {
0x000026fe cbz r3, 0x2702 |
0x00002700 str r6, [r3] | *(r3) = r6;
| }
0x00002702 ldr r3, [r7, 0x30] | r3 = var_30h;
0x00002704 rev r6, r6 | r6 = SWAP32 (r6);
0x00002706 movs r0, 0 | r0 = 0;
0x00002708 str r6, [r3] | *(r3) = r6;
0x0000270a b 0x2364 | goto label_8;
| label_35:
0x0000270c mov r8, r3 | r8 = r3;
0x0000270e movs r4, 1 | r4 = 1;
0x00002710 mov r1, r0 | r1 = r0;
| do {
0x00002712 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00002716 mov r0, sb | r0 = sb;
0x00002718 lsl.w r3, r4, r3 | r3 = r4 << r3;
0x0000271c vmov s15, r3 | __asm ("vmov s15, r3");
0x00002720 ldrsh.w r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x00002724 vcvt.f32.u32 s15, s15 | __asm ("vcvt.f32.u32 s15, s15");
0x00002728 vadd.f32 s15, s15, s16 | __asm ("vadd.f32 s15, s15, s16");
0x0000272c vcvt.s32.f32 s15, s15 | __asm ("vcvt.s32.f32 s15, s15");
0x00002730 vmov r2, s15 | __asm ("vmov r2, s15");
0x00002734 cmp r2, r3 |
0x00002736 it le |
| if (r2 > r3) {
0x00002738 addle r8, r8, 1 | r8++;
| }
0x0000273c blx 0x2084 | r0 = fcn_00002084 ();
0x00002740 mov r1, r0 | r1 = r0;
0x00002742 cmp r0, 0 |
0x00002744 bne 0x2712 |
| } while (r0 != 0);
0x00002746 b 0x2468 | goto label_9;
| label_38:
0x00002748 mov r8, r3 | r8 = r3;
0x0000274a movs r4, 1 | r4 = 1;
0x0000274c mov r1, r0 | r1 = r0;
0x0000274e b 0x2786 | goto label_56;
| label_10:
0x00002750 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00002754 mov r0, sb | r0 = sb;
0x00002756 lsl.w r3, r4, r3 | r3 = r4 << r3;
0x0000275a vmov s15, r3 | __asm ("vmov s15, r3");
0x0000275e ldrsh.w r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x00002762 vcvt.f32.u32 s15, s15 | __asm ("vcvt.f32.u32 s15, s15");
0x00002766 vadd.f32 s15, s15, s16 | __asm ("vadd.f32 s15, s15, s16");
0x0000276a vcvt.s32.f32 s15, s15 | __asm ("vcvt.s32.f32 s15, s15");
0x0000276e vmov r2, s15 | __asm ("vmov r2, s15");
0x00002772 cmp r3, r2 |
0x00002774 it ge |
| if (r3 < r2) {
0x00002776 addge r8, r8, 1 | r8++;
| }
0x0000277a blx 0x2084 | r0 = fcn_00002084 ();
0x0000277e mov r1, r0 | r1 = r0;
0x00002780 cmp r0, 0 |
| if (r0 == 0) {
0x00002782 beq.w 0x2468 | goto label_9;
| }
| label_56:
0x00002786 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x00002788 lsls r0, r3, 0x1a | r0 = r3 << 0x1a;
| if (r0 >= r3) {
0x0000278a bpl.w 0x2360 | goto label_1;
| }
0x0000278e b 0x2750 | goto label_10;
| label_49:
0x00002790 cmp r2, 8 |
| if (r2 < 8) {
0x00002792 bls.w 0x3006 | goto label_57;
| }
0x00002796 sub.w ip, r2, 9 |
0x0000279a add.w lr, r3, 0x64 | lr = r3 + 0x64;
0x0000279e bic r5, ip, 7 | r5 = BIT_MASK (ip, 7);
0x000027a2 mov r8, r1 | r8 = r1;
0x000027a4 add.w ip, r5, 8 |
0x000027a8 str r5, [r7, 0x44] | var_44h = r5;
0x000027aa ldr r5, [r7, 0x4c] | r5 = var_48h_2;
0x000027ac str r4, [r7, 0x34] | var_34h = r4;
0x000027ae str r3, [r7, 0x2c] | var_2ch = r3;
| do {
0x000027b0 ldr r4, [lr, -0x64] | r4 = *((lr - 0x64));
0x000027b4 add.w r8, r8, 0x20 | r8 += 0x20;
0x000027b8 pld [lr] | __asm ("pld [lr]");
0x000027bc add.w lr, lr, 0x20 | lr += 0x20;
0x000027c0 ldr r3, [r7, 0x44] | r3 = var_44h;
0x000027c2 str r4, [r8, -0x20] | *((r8 - 0x20)) = r4;
0x000027c6 ldr r4, [lr, -0x80] | r4 = *((lr - 0x80));
0x000027ca cmp r0, r3 |
0x000027cc add.w r0, r0, 8 | r0 += 8;
0x000027d0 str r4, [r8, -0x1c] | *((r8 - 0x1c)) = r4;
0x000027d4 ldr r4, [lr, -0x7c] | r4 = *((lr - 0x7c));
0x000027d8 str r4, [r8, -0x18] | *((r8 - 0x18)) = r4;
0x000027dc ldr r4, [lr, -0x78] | r4 = *((lr - 0x78));
0x000027e0 str r4, [r8, -0x14] | *((r8 - 0x14)) = r4;
0x000027e4 ldr r4, [lr, -0x74] | r4 = *((lr - 0x74));
0x000027e8 str r4, [r8, -0x10] | *((r8 - 0x10)) = r4;
0x000027ec ldr r4, [lr, -0x70] | r4 = *((lr - 0x70));
0x000027f0 str r4, [r8, -0xc] | *((r8 - 0xc)) = r4;
0x000027f4 ldr r4, [lr, -0x6c] | r4 = *((lr - 0x6c));
0x000027f8 str r4, [r8, -0x8] | *((r8 - 0x8)) = r4;
0x000027fc ldr r4, [lr, -0x68] | r4 = *((lr - 0x68));
0x00002800 str r4, [r8, -0x4] | *((r8 - 0x4)) = r4;
0x00002804 bne 0x27b0 |
| } while (r0 != r3);
0x00002806 ldr r4, [r7, 0x34] | r4 = var_34h;
0x00002808 ldr r3, [r7, 0x2c] | r3 = var_2ch;
0x0000280a str r5, [r7, 0x4c] | var_48h_2 = r5;
| label_25:
0x0000280c lsl.w r0, ip, 2 | r0 = ip << 2;
0x00002810 ldr r5, [r7, 0x4c] | r5 = var_48h_2;
0x00002812 add r3, r0 | r3 += r0;
0x00002814 add r1, r0 | r1 += r0;
| do {
0x00002816 ldr r0, [r3], 4 | r0 = *(r3);
| r3 += 4;
0x0000281a add.w ip, ip, 1 |
0x0000281e cmp r2, ip |
0x00002820 str r0, [r1], 4 | *(r1) = r0;
| r1 += 4;
0x00002824 bhi 0x2816 |
| } while (r2 > ip);
0x00002826 str r5, [r7, 0x4c] | var_48h_2 = r5;
0x00002828 b 0x2590 | goto label_11;
| label_46:
0x0000282a ldr r3, [r7, 0x30] | r3 = var_30h;
0x0000282c add.w r0, r7, 0x68 | r0 += var_68h;
0x00002830 adds r1, r3, 4 | r1 = r3 + 4;
0x00002832 blx 0x1fa4 | r0 = protobuf_c_message_unpack ();
0x00002836 mov r6, r0 | r6 = r0;
0x00002838 cmp.w r8, 0 |
| if (r8 == 0) {
0x0000283c beq.w 0x303c | goto label_58;
| }
0x00002840 ldr r3, [r7, 0x40] | r3 = var_40h;
0x00002842 strd r3, r3, [r7, 0x48] | __asm ("strd r3, r3, [var_48h]");
0x00002846 b 0x25d0 | goto label_12;
| label_45:
0x00002848 lsl.w r1, r8, 2 | r1 = r8 << 2;
0x0000284c movs r0, 1 | r0 = 1;
0x0000284e blx 0x1e78 | r0 = calloc (r0, r1);
0x00002852 mov fp, r0 |
0x00002854 cmp r0, 0 |
| if (r0 == 0) {
0x00002856 beq.w 0x2f92 | goto label_59;
| }
0x0000285a ldr r3, [r7, 0x1c] | r3 = var_1ch;
0x0000285c str.w r8, [r7, 0x2c] | __asm ("str.w r8, [var_2ch]");
0x00002860 mov r8, r4 | r8 = r4;
0x00002862 vmov.f32 s16, 5.000000e-01 | __asm ("vmov.f32 s16, 5");
0x00002866 str r3, [r7, 0x34] | var_34h = r3;
0x00002868 str r0, [r7, 0x28] | var_28h = r0;
0x0000286a b 0x28ac |
| while (r3 == 0) {
| label_13:
0x0000286c ldr r3, [r7, 0x4c] | r3 = var_48h_2;
0x0000286e cmp r3, 0 |
| if (r3 != 0) {
0x00002870 bne.w 0x2a02 | goto label_60;
| }
| label_14:
0x00002874 ldr r3, [r7, 0x3c] | r3 = var_3ch;
0x00002876 cmp r3, 0 |
| if (r3 != 0) {
0x00002878 bne.w 0x2c1a | goto label_61;
| }
| label_15:
0x0000287c tst.w fp, 0x20000 |
| if ((fp & 0x20000) != 0) {
0x00002880 bne.w 0x2cc4 | goto label_62;
| }
| label_16:
0x00002884 tst.w fp, 0x100000 |
| if ((fp & 0x100000) != 0) {
0x00002888 bne.w 0x2d20 | goto label_63;
| }
| label_17:
0x0000288c mov r0, r6 | r0 = r6;
0x0000288e blx 0x1f10 | fcn_00001f10 ();
0x00002892 ldr r3, [r7, 0x28] | r3 = var_28h;
0x00002894 str.w r0, [r3, r8, lsl 2] | __asm ("str.w r0, [r3, r8, lsl 2]");
0x00002898 add.w r8, r8, 1 | r8++;
0x0000289c ldr r3, [r7, 0x34] | r3 = var_34h;
0x0000289e str r6, [r3, 4]! | *((r3 += 4)) = r6;
0x000028a2 str r3, [r7, 0x34] | var_34h = r3;
0x000028a4 ldr r3, [r7, 0x2c] | r3 = var_2ch;
0x000028a6 cmp r3, r8 |
| if (r3 == r8) {
0x000028a8 beq.w 0x2f80 | goto label_64;
| }
0x000028ac mov r1, r4 | r1 = r4;
0x000028ae mov r0, sb | r0 = sb;
0x000028b0 blx 0x2084 | fcn_00002084 ();
0x000028b4 ldr r3, [r7, 0x38] | r3 = var_38h;
0x000028b6 mov r4, r0 | r4 = r0;
0x000028b8 cmp r3, 0 |
| if (r3 == 0) {
0x000028ba beq.w 0x2e60 | goto label_65;
| }
| label_18:
0x000028be ldr r3, [r7, 0x4c] | r3 = var_48h_2;
0x000028c0 ldr r2, [r4, 8] | r2 = *((r4 + 8));
0x000028c2 mov r0, r3 | r0 = r3;
0x000028c4 ubfx r2, r2, 0x12, 1 | r2 = (r2 >> 0x12) & ((1 << 1) - 1);
| if (r3 != 0) {
0x000028c8 cbz r3, 0x28cc |
0x000028ca ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
| }
0x000028cc ldr r3, [r7, 0x3c] | r3 = var_3ch;
0x000028ce ldr r1, [r4, 0x60] | r1 = *((r4 + 0x60));
0x000028d0 str r3, [sp, 4] | var_4h = r3;
0x000028d2 ldr r3, [r7, 0x4c] | r3 = var_48h_2;
0x000028d4 str r3, [sp] | *(sp) = r3;
0x000028d6 ldr r3, [r7, 0x48] | r3 = var_48h;
0x000028d8 blx 0x2078 | r0 = fcn_00002078 ();
0x000028dc mov r6, r0 | r6 = r0;
0x000028de cmp r0, 0 |
| if (r0 == 0) {
0x000028e0 beq.w 0x2f8e | goto label_66;
| }
0x000028e4 ldr.w sl, [sb, 0x18] | sl = *((sb + 0x18));
0x000028e8 blx 0x1f10 | fcn_00001f10 ();
0x000028ec ldr.w fp, [r4, 8] | fp = *((r4 + 8));
0x000028f0 mov r5, r0 | r5 = r0;
0x000028f2 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x000028f4 tst.w fp, 0x8000 |
0x000028f8 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x000028fa mov.w r3, 1 | r3 = 1;
0x000028fe str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
| if ((fp & 0x8000) != 0) {
0x00002900 beq 0x292e |
0x00002902 ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002904 ldr.w r3, [pc, 0x604] | r3 = *(0x2f0c);
0x00002908 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0000290a ldrsh.w r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x0000290e vmov s15, r2 | __asm ("vmov s15, r2");
0x00002912 and r2, sl, 0x1f | r2 = sl & 0x1f;
0x00002916 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0000291a vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x0000291e vldr s14, [r3] | __asm ("vldr s14, [r3]");
0x00002922 movs r3, 2 | r3 = 2;
0x00002924 str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x00002926 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x0000292a vstr s15, [r0, 0x18] | __asm ("vstr s15, [r0, 0x18]");
| }
0x0000292e tst.w fp, 0x40000 |
| if ((fp & 0x40000) != 0) {
0x00002932 beq 0x293e |
0x00002934 ldr r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x00002936 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00002938 cmp r3, 1 |
| if (r3 == 1) {
0x0000293a beq.w 0x2ea2 | goto label_67;
| }
| }
| label_19:
0x0000293e tst.w fp, 0x80000 |
| if ((fp & 0x80000) != 0) {
0x00002942 beq 0x296c |
0x00002944 ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002946 ldr.w r3, [pc, 0x5c4] | r3 = *(0x2f0e);
0x0000294a vldr s15, [r4, 0x58] | __asm ("vldr s15, [r4, 0x58]");
0x0000294e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002950 and r2, sl, 0x1f | r2 = sl & 0x1f;
0x00002954 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002958 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x0000295c vldr s14, [r3] | __asm ("vldr s14, [r3]");
0x00002960 movs r3, 8 | r3 = 8;
0x00002962 str r3, [r5, 0x44] | *((r5 + 0x44)) = r3;
0x00002964 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002968 vstr s15, [r5, 0x48] | __asm ("vstr s15, [r5, 0x48]");
| }
0x0000296c ldr r3, [r7, 0x48] | r3 = var_48h;
0x0000296e cmp r3, 0 |
0x00002970 beq.w 0x286c |
| }
0x00002974 mov r0, r6 | r0 = r6;
0x00002976 blx 0x1eac | r0 = fcn_00001eac ();
0x0000297a cmp r0, 0 |
| if (r0 == 0) {
0x0000297c beq.w 0x286c | goto label_13;
| }
0x00002980 ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002982 adds r0, 0xc | r0 += 0xc;
0x00002984 ldr.w r3, [pc, 0x584] | r3 = *(0x2f0c);
0x00002988 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0000298a ldrsh.w r2, [r4, 0x1a] | r2 = *((r4 + 0x1a));
0x0000298e vmov s15, r2 | __asm ("vmov s15, r2");
0x00002992 ldrsh.w r2, [r4, 0x1c] | r2 = *((r4 + 0x1c));
0x00002996 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x0000299a vmov s14, r2 | __asm ("vmov s14, r2");
0x0000299e and r2, sl, 0x1f | r2 = sl & 0x1f;
0x000029a2 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x000029a6 vcvt.f32.s32 s14, s14 | __asm ("vcvt.f32.s32 s14, s14");
0x000029aa vldr s13, [r3] | __asm ("vldr s13, [r3]");
0x000029ae ldrsh.w r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x000029b2 vmul.f32 s14, s14, s13 | __asm ("vmul.f32 s14, s14, s13");
0x000029b6 vmov s12, r3 | __asm ("vmov s12, r3");
0x000029ba ldrsh.w r3, [r4, 0x1e] | r3 = *((r4 + 0x1e));
0x000029be vcvt.f32.s32 s12, s12 | __asm ("vcvt.f32.s32 s12, s12");
0x000029c2 vmov.f32 s11, s14 | __asm ("vmov.f32 s11, s14");
0x000029c6 vmul.f32 s15, s15, s13 | __asm ("vmul.f32 s15, s15, s13");
0x000029ca vstr s14, [r7, 0x5c] | __asm ("vstr s14, [r7, 0x5c]");
0x000029ce vmla.f32 s11, s12, s13 | __asm ("vmla.f32 s11, s12, s13");
0x000029d2 vmov s12, r3 | __asm ("vmov s12, r3");
0x000029d6 movs r3, 4 | r3 = 4;
0x000029d8 vstr s15, [r7, 0x50] | __asm ("vstr s15, [r7, 0x50]");
0x000029dc vcvt.f32.s32 s12, s12 | __asm ("vcvt.f32.s32 s12, s12");
0x000029e0 vmla.f32 s15, s12, s13 | __asm ("vmla.f32 s15, s12, s13");
0x000029e4 vstr s11, [r7, 0x54] | __asm ("vstr s11, [r7, 0x54]");
0x000029e8 vstr s15, [r7, 0x58] | __asm ("vstr s15, [r7, 0x58]");
0x000029ec vldr d16, [r7, 0x50] | __asm ("vldr d16, [r7, 0x50]");
0x000029f0 vldr d17, [r7, 0x58] | __asm ("vldr d17, [r7, 0x58]");
0x000029f4 vst1.32 {d16, d17}, [r0] | __asm ("vst1.32 {d16, d17}, [r0]");
0x000029f8 str r3, [r5, 0x24] | *((r5 + 0x24)) = r3;
0x000029fa ldr r3, [r7, 0x4c] | r3 = var_48h_2;
0x000029fc cmp r3, 0 |
| if (r3 == 0) {
0x000029fe beq.w 0x2874 | goto label_14;
| }
| label_60:
0x00002a02 mov r0, r6 | r0 = r6;
0x00002a04 blx 0x2090 | r0 = fcn_00002090 ();
0x00002a08 cmp r0, 0 |
| if (r0 == 0) {
0x00002a0a beq.w 0x2874 | goto label_14;
| }
0x00002a0e str r0, [r7, 0x14] | var_14h = r0;
0x00002a10 mov r0, r6 | r0 = r6;
0x00002a12 blx 0x1f64 | fcn_00001f64 ();
0x00002a16 str r0, [r7, 0xc] | var_ch = r0;
0x00002a18 cmp r0, 0 |
| if (r0 == 0) {
0x00002a1a beq.w 0x2874 | goto label_14;
| }
0x00002a1e ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002a20 ldr.w r3, [pc, 0x4e8] | r3 = *(0x2f0c);
0x00002a24 ldr r1, [r7, 0x14] | r1 = var_14h;
0x00002a26 ldr.w lr, [r4, 0x24] |
0x00002a2a ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002a2c and r2, sl, 0x1f | r2 = sl & 0x1f;
0x00002a30 cmp r1, 8 |
0x00002a32 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00002a36 vldr s13, [r3] | __asm ("vldr s13, [r3]");
| if (r1 < 8) {
0x00002a3a bls.w 0x301c | goto label_68;
| }
0x00002a3e sub.w r3, r1, 9 | r3 = r1 - 9;
0x00002a42 movs r2, 0 | r2 = 0;
0x00002a44 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00002a48 add.w ip, lr, 0x3a |
0x00002a4c str r3, [r7, 0x14] | var_14h = r3;
0x00002a4e adds r3, 8 | r3 += 8;
0x00002a50 strd r3, r1, [r7, 4] | __asm ("strd r3, r1, [var_4h_2]");
0x00002a54 adds r0, 0x38 | r0 += 0x38;
0x00002a56 mov r3, r2 | r3 = r2;
0x00002a58 mov r2, ip | r2 = ip;
| do {
0x00002a5a ldrsh r1, [r2, -0x3a] | r1 = *((r2 - 0x3a));
0x00002a5e ldr ip, [r0, -0x38] | ip = *((r0 - 0x38));
0x00002a62 pld [r0] | __asm ("pld [r0]");
0x00002a66 adds r0, 0x20 | r0 += 0x20;
0x00002a68 pld [r2] | __asm ("pld [r2]");
0x00002a6c adds r2, 0x20 | r2 += 0x20;
0x00002a6e vmov s3, r1 | __asm ("vmov s3, r1");
0x00002a72 ldrsh r1, [r2, -0x58] | r1 = *((r2 - 0x58));
0x00002a76 vcvt.f32.s32 s3, s3 | __asm ("vcvt.f32.s32 s3, s3");
0x00002a7a vmov s4, r1 | __asm ("vmov s4, r1");
0x00002a7e ldrsh r1, [r2, -0x56] | r1 = *((r2 - 0x56));
0x00002a82 vcvt.f32.s32 s4, s4 | __asm ("vcvt.f32.s32 s4, s4");
0x00002a86 vmul.f32 s3, s3, s13 | __asm ("vmul.f32 s3, s3, s13");
0x00002a8a vmov s5, r1 | __asm ("vmov s5, r1");
0x00002a8e ldrsh r1, [r2, -0x54] | r1 = *((r2 - 0x54));
0x00002a92 vcvt.f32.s32 s5, s5 | __asm ("vcvt.f32.s32 s5, s5");
0x00002a96 vmul.f32 s4, s4, s13 | __asm ("vmul.f32 s4, s4, s13");
0x00002a9a vmov s6, r1 | __asm ("vmov s6, r1");
0x00002a9e ldrsh r1, [r2, -0x52] | r1 = *((r2 - 0x52));
0x00002aa2 vcvt.f32.s32 s6, s6 | __asm ("vcvt.f32.s32 s6, s6");
0x00002aa6 vmul.f32 s5, s5, s13 | __asm ("vmul.f32 s5, s5, s13");
0x00002aaa vmov s7, r1 | __asm ("vmov s7, r1");
0x00002aae ldrsh r1, [r2, -0x50] | r1 = *((r2 - 0x50));
0x00002ab2 vcvt.f32.s32 s7, s7 | __asm ("vcvt.f32.s32 s7, s7");
0x00002ab6 vmul.f32 s6, s6, s13 | __asm ("vmul.f32 s6, s6, s13");
0x00002aba vmov s8, r1 | __asm ("vmov s8, r1");
0x00002abe ldrsh r1, [r2, -0x4e] | r1 = *((r2 - 0x4e));
0x00002ac2 vcvt.f32.s32 s8, s8 | __asm ("vcvt.f32.s32 s8, s8");
0x00002ac6 vmul.f32 s7, s7, s13 | __asm ("vmul.f32 s7, s7, s13");
0x00002aca vmov s9, r1 | __asm ("vmov s9, r1");
0x00002ace ldrsh r1, [r2, -0x4c] | r1 = *((r2 - 0x4c));
0x00002ad2 vcvt.f32.s32 s9, s9 | __asm ("vcvt.f32.s32 s9, s9");
0x00002ad6 vmul.f32 s8, s8, s13 | __asm ("vmul.f32 s8, s8, s13");
0x00002ada vmov s10, r1 | __asm ("vmov s10, r1");
0x00002ade ldrsh r1, [r2, -0x4a] | r1 = *((r2 - 0x4a));
0x00002ae2 vcvt.f32.s32 s10, s10 | __asm ("vcvt.f32.s32 s10, s10");
0x00002ae6 vmul.f32 s9, s9, s13 | __asm ("vmul.f32 s9, s9, s13");
0x00002aea vmov s11, r1 | __asm ("vmov s11, r1");
0x00002aee ldrsh r1, [r2, -0x48] | r1 = *((r2 - 0x48));
0x00002af2 vcvt.f32.s32 s11, s11 | __asm ("vcvt.f32.s32 s11, s11");
0x00002af6 vmul.f32 s10, s10, s13 | __asm ("vmul.f32 s10, s10, s13");
0x00002afa vmov s12, r1 | __asm ("vmov s12, r1");
0x00002afe ldrsh r1, [r2, -0x46] | r1 = *((r2 - 0x46));
0x00002b02 vcvt.f32.s32 s12, s12 | __asm ("vcvt.f32.s32 s12, s12");
0x00002b06 vmul.f32 s11, s11, s13 | __asm ("vmul.f32 s11, s11, s13");
0x00002b0a vmov s14, r1 | __asm ("vmov s14, r1");
0x00002b0e ldrsh r1, [r2, -0x44] | r1 = *((r2 - 0x44));
0x00002b12 vstr s3, [ip, 0xc] | __asm ("vstr s3, [ip, 0xc]");
0x00002b16 vstr s4, [ip, 0x10] | __asm ("vstr s4, [ip, 0x10]");
0x00002b1a ldr ip, [r0, -0x54] | ip = *((r0 - 0x54));
0x00002b1e vmov s15, r1 | __asm ("vmov s15, r1");
0x00002b22 vcvt.f32.s32 s14, s14 | __asm ("vcvt.f32.s32 s14, s14");
0x00002b26 vstr s5, [ip, 0xc] | __asm ("vstr s5, [ip, 0xc]");
0x00002b2a vstr s6, [ip, 0x10] | __asm ("vstr s6, [ip, 0x10]");
0x00002b2e ldr ip, [r0, -0x50] | ip = *((r0 - 0x50));
0x00002b32 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002b36 vmul.f32 s12, s12, s13 | __asm ("vmul.f32 s12, s12, s13");
0x00002b3a vstr s7, [ip, 0xc] | __asm ("vstr s7, [ip, 0xc]");
0x00002b3e vstr s8, [ip, 0x10] | __asm ("vstr s8, [ip, 0x10]");
0x00002b42 ldr ip, [r0, -0x4c] | ip = *((r0 - 0x4c));
0x00002b46 vmul.f32 s14, s14, s13 | __asm ("vmul.f32 s14, s14, s13");
0x00002b4a vmul.f32 s15, s15, s13 | __asm ("vmul.f32 s15, s15, s13");
0x00002b4e vstr s9, [ip, 0xc] | __asm ("vstr s9, [ip, 0xc]");
0x00002b52 vstr s10, [ip, 0x10] | __asm ("vstr s10, [ip, 0x10]");
0x00002b56 ldr ip, [r0, -0x48] | ip = *((r0 - 0x48));
0x00002b5a vstr s11, [ip, 0xc] | __asm ("vstr s11, [ip, 0xc]");
0x00002b5e vstr s12, [ip, 0x10] | __asm ("vstr s12, [ip, 0x10]");
0x00002b62 ldr ip, [r0, -0x44] | ip = *((r0 - 0x44));
0x00002b66 vstr s14, [ip, 0xc] | __asm ("vstr s14, [ip, 0xc]");
0x00002b6a vstr s15, [ip, 0x10] | __asm ("vstr s15, [ip, 0x10]");
0x00002b6e ldr ip, [r0, -0x40] | ip = *((r0 - 0x40));
0x00002b72 ldrsh r1, [r2, -0x42] | r1 = *((r2 - 0x42));
0x00002b76 vmov s15, r1 | __asm ("vmov s15, r1");
0x00002b7a ldrsh r1, [r2, -0x40] | r1 = *((r2 - 0x40));
0x00002b7e vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002b82 vmul.f32 s15, s15, s13 | __asm ("vmul.f32 s15, s15, s13");
0x00002b86 vstr s15, [ip, 0xc] | __asm ("vstr s15, [ip, 0xc]");
0x00002b8a vmov s15, r1 | __asm ("vmov s15, r1");
0x00002b8e ldrsh r1, [r2, -0x3e] | r1 = *((r2 - 0x3e));
0x00002b92 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002b96 vmov s14, r1 | __asm ("vmov s14, r1");
0x00002b9a vmul.f32 s15, s15, s13 | __asm ("vmul.f32 s15, s15, s13");
0x00002b9e ldrsh r1, [r2, -0x3c] | r1 = *((r2 - 0x3c));
0x00002ba2 vcvt.f32.s32 s14, s14 | __asm ("vcvt.f32.s32 s14, s14");
0x00002ba6 vstr s15, [ip, 0x10] | __asm ("vstr s15, [ip, 0x10]");
0x00002baa vmov s15, r1 | __asm ("vmov s15, r1");
0x00002bae ldr r1, [r7, 0x14] | r1 = var_14h;
0x00002bb0 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002bb4 vmul.f32 s14, s14, s13 | __asm ("vmul.f32 s14, s14, s13");
0x00002bb8 ldr ip, [r0, -0x3c] | ip = *((r0 - 0x3c));
0x00002bbc cmp r3, r1 |
0x00002bbe add.w r3, r3, 8 | r3 += 8;
0x00002bc2 vmul.f32 s15, s15, s13 | __asm ("vmul.f32 s15, s15, s13");
0x00002bc6 vstr s14, [ip, 0xc] | __asm ("vstr s14, [ip, 0xc]");
0x00002bca vstr s15, [ip, 0x10] | __asm ("vstr s15, [ip, 0x10]");
0x00002bce bne.w 0x2a5a |
| } while (r3 != r1);
0x00002bd2 ldrd r3, r1, [r7, 4] | __asm ("ldrd r3, r1, [var_4h_2]");
| label_26:
0x00002bd6 ldr r2, [r7, 0xc] | r2 = var_ch;
0x00002bd8 add.w ip, lr, 2 |
0x00002bdc add.w r0, r2, r3, lsl 2 | r0 = r2 + (r3 << 2);
| do {
0x00002be0 ldrsh.w r2, [lr, r3, lsl 2] | offset_1 = r3 << 2;
| r2 = *((lr + offset_1));
0x00002be4 vmov s14, r2 | __asm ("vmov s14, r2");
0x00002be8 ldrsh.w r2, [ip, r3, lsl 2] | offset_2 = r3 << 2;
| r2 = *((ip + offset_2));
0x00002bec adds r3, 1 | r3++;
0x00002bee vcvt.f32.s32 s14, s14 | __asm ("vcvt.f32.s32 s14, s14");
0x00002bf2 cmp r1, r3 |
0x00002bf4 vmov s15, r2 | __asm ("vmov s15, r2");
0x00002bf8 vmul.f32 s14, s14, s13 | __asm ("vmul.f32 s14, s14, s13");
0x00002bfc vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002c00 ldr r2, [r0], 4 | r2 = *(r0);
| r0 += 4;
0x00002c04 vmul.f32 s15, s15, s13 | __asm ("vmul.f32 s15, s15, s13");
0x00002c08 vstr s14, [r2, 0xc] | __asm ("vstr s14, [r2, 0xc]");
0x00002c0c vstr s15, [r2, 0x10] | __asm ("vstr s15, [r2, 0x10]");
0x00002c10 bhi 0x2be0 |
| } while (r1 > r3);
0x00002c12 ldr r3, [r7, 0x3c] | r3 = var_3ch;
0x00002c14 cmp r3, 0 |
| if (r3 == 0) {
0x00002c16 beq.w 0x287c | goto label_15;
| }
| label_61:
0x00002c1a mov r0, r6 | r0 = r6;
0x00002c1c blx 0x1ed4 | fcn_00001ed4 ();
0x00002c20 str r0, [r7, 0x14] | var_14h = r0;
0x00002c22 mov r0, r6 | r0 = r6;
0x00002c24 blx 0x1e90 | fcn_00001e90 ();
0x00002c28 ldr r1, [r7, 0x14] | r1 = var_14h;
0x00002c2a cmp r1, 0 |
| if (r1 == 0) {
0x00002c2c beq.w 0x2f10 | goto label_69;
| }
0x00002c30 and ip, fp, 0x80 |
0x00002c34 cmp r0, 0 |
| if (r0 == 0) {
0x00002c36 beq.w 0x2e20 | goto label_70;
| }
0x00002c3a tst.w fp, 0x10000 |
| if ((fp & 0x10000) == 0) {
0x00002c3e beq.w 0x2e20 | goto label_70;
| }
0x00002c42 ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002c44 ldr r3, [pc, 0x2c4] | r3 = *(0x2f0c);
0x00002c46 vldr s12, [r4, 0x3c] | __asm ("vldr s12, [r4, 0x3c]");
0x00002c4a vldr s14, [r4, 0x40] | __asm ("vldr s14, [r4, 0x40]");
0x00002c4e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002c50 and r2, sl, 0x1f | r2 = sl & 0x1f;
0x00002c54 vldr s15, [r4, 0x44] | __asm ("vldr s15, [r4, 0x44]");
0x00002c58 vcvt.f32.s32 s9, s12 | __asm ("vcvt.f32.s32 s9, s12");
0x00002c5c vcvt.f32.s32 s10, s14 | __asm ("vcvt.f32.s32 s10, s14");
0x00002c60 add.w lr, r3, r2, lsl 2 | lr = r3 + (r2 << 2);
0x00002c64 vcvt.f32.s32 s11, s15 | __asm ("vcvt.f32.s32 s11, s15");
0x00002c68 vldr s13, [lr] | __asm ("vldr s13, [lr]");
0x00002c6c vmul.f32 s9, s9, s13 | __asm ("vmul.f32 s9, s9, s13");
0x00002c70 vmul.f32 s10, s10, s13 | __asm ("vmul.f32 s10, s10, s13");
0x00002c74 vmul.f32 s11, s11, s13 | __asm ("vmul.f32 s11, s11, s13");
0x00002c78 cmp.w ip, 0 |
| if (ip == 0) {
0x00002c7c beq.w 0x2f34 | goto label_71;
| }
0x00002c80 vldr s15, [r4, 0x2c] | __asm ("vldr s15, [r4, 0x2c]");
0x00002c84 movs r3, 6 | r3 = 6;
0x00002c86 tst.w fp, 0x20000 |
0x00002c8a vcvt.f32.s32 s14, s15 | __asm ("vcvt.f32.s32 s14, s15");
0x00002c8e vldr s15, [r4, 0x30] | __asm ("vldr s15, [r4, 0x30]");
0x00002c92 str r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
0x00002c94 mov.w r3, 0xa | r3 = 0xa;
0x00002c98 str r3, [r5, 0x54] | *((r5 + 0x54)) = r3;
0x00002c9a mov.w r3, 3 | r3 = 3;
0x00002c9e vmul.f32 s14, s14, s13 | __asm ("vmul.f32 s14, s14, s13");
0x00002ca2 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002ca6 vstr s14, [r1, 0xc] | __asm ("vstr s14, [r1, 0xc]");
0x00002caa vmul.f32 s15, s15, s13 | __asm ("vmul.f32 s15, s15, s13");
0x00002cae vstr s15, [r1, 0x10] | __asm ("vstr s15, [r1, 0x10]");
0x00002cb2 vstr s9, [r0, 0xc] | __asm ("vstr s9, [r0, 0xc]");
0x00002cb6 vstr s10, [r0, 0x10] | __asm ("vstr s10, [r0, 0x10]");
0x00002cba vstr s11, [r0, 0x18] | __asm ("vstr s11, [r0, 0x18]");
0x00002cbe str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
| if ((fp & 0x20000) == 0) {
0x00002cc0 beq.w 0x2884 | goto label_16;
| }
| label_62:
0x00002cc4 mov r0, r6 | r0 = r6;
0x00002cc6 blx 0x1f28 | fcn_00001f28 ();
0x00002cca vldr s15, [r4, 0x48] | __asm ("vldr s15, [r4, 0x48]");
0x00002cce tst.w fp, 0x100000 |
0x00002cd2 ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002cd4 ldr r3, [pc, 0x234] | r3 = *(0x2f0c);
0x00002cd6 vcvt.f32.s32 s13, s15 | __asm ("vcvt.f32.s32 s13, s15");
0x00002cda vldr s15, [r4, 0x4c] | __asm ("vldr s15, [r4, 0x4c]");
0x00002cde ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002ce0 and r2, sl, 0x1f | r2 = sl & 0x1f;
0x00002ce4 vcvt.f32.s32 s14, s15 | __asm ("vcvt.f32.s32 s14, s15");
0x00002ce8 vldr s15, [r4, 0x50] | __asm ("vldr s15, [r4, 0x50]");
0x00002cec add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00002cf0 vldr s12, [r3] | __asm ("vldr s12, [r3]");
0x00002cf4 mov.w r3, 3 | r3 = 3;
0x00002cf8 str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x00002cfa mov.w r3, 7 | r3 = 7;
0x00002cfe vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002d02 vmul.f32 s13, s13, s12 | __asm ("vmul.f32 s13, s13, s12");
0x00002d06 vmul.f32 s14, s14, s12 | __asm ("vmul.f32 s14, s14, s12");
0x00002d0a vmul.f32 s15, s15, s12 | __asm ("vmul.f32 s15, s15, s12");
0x00002d0e vstr s13, [r0, 0xc] | __asm ("vstr s13, [r0, 0xc]");
0x00002d12 vstr s14, [r0, 0x10] | __asm ("vstr s14, [r0, 0x10]");
0x00002d16 vstr s15, [r0, 0x18] | __asm ("vstr s15, [r0, 0x18]");
0x00002d1a str r3, [r5, 0x3c] | *((r5 + 0x3c)) = r3;
| if ((fp & 0x100000) == 0) {
0x00002d1c beq.w 0x288c | goto label_17;
| }
| label_63:
0x00002d20 mov r0, r6 | r0 = r6;
0x00002d22 blx 0x209c | r0 = fcn_0000209c ();
0x00002d26 mov r5, r0 | r5 = r0;
0x00002d28 cmp r0, 0 |
| if (r0 == 0) {
0x00002d2a beq.w 0x288c | goto label_17;
| }
0x00002d2e mov r0, r6 | r0 = r6;
0x00002d30 blx 0x1f58 | r0 = fcn_00001f58 ();
0x00002d34 mov lr, r0 | lr = r0;
0x00002d36 cmp r0, 0 |
| if (r0 == 0) {
0x00002d38 beq.w 0x288c | goto label_17;
| }
0x00002d3c ldr r3, [pc, 0x1cc] | r3 = *(0x2f0c);
0x00002d3e and sl, sl, 0x1f | sl &= 0x1f;
0x00002d42 ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002d44 cmp r5, 8 |
0x00002d46 ldr.w fp, [r4, 0x5c] | fp = *((r4 + 0x5c));
0x00002d4a ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002d4c add.w r3, r3, sl, lsl 2 | r3 += (sl << 2);
0x00002d50 vldr s14, [r3] | __asm ("vldr s14, [r3]");
| if (r5 < 8) {
0x00002d54 bls.w 0x3020 | goto label_72;
| }
0x00002d58 sub.w r3, r5, 9 | r3 = r5 - 9;
0x00002d5c mov r1, r0 | r1 = r0;
0x00002d5e bic sl, r3, 7 | sl = BIT_MASK (r3, 7);
0x00002d62 add.w r2, fp, 0x50 | r2 += arg_50h;
0x00002d66 add.w r3, sl, 8 | r3 = sl + 8;
0x00002d6a movs r0, 0 | r0 = 0;
| do {
0x00002d6c vldr s15, [r2, -0x50] | __asm ("vldr s15, [r2, -0x50]");
0x00002d70 cmp r0, sl |
0x00002d72 pld [r2] | __asm ("pld [r2]");
0x00002d76 add.w r1, r1, 0x20 | r1 += 0x20;
0x00002d7a add.w r2, r2, 0x20 | r2 += 0x20;
0x00002d7e add.w r0, r0, 8 | r0 += 8;
0x00002d82 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002d86 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002d8a vstr s15, [r1, -0x20] | __asm ("vstr s15, [r1, -0x20]");
0x00002d8e vldr s15, [r2, -0x6c] | __asm ("vldr s15, [r2, -0x6c]");
0x00002d92 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002d96 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002d9a vstr s15, [r1, -0x1c] | __asm ("vstr s15, [r1, -0x1c]");
0x00002d9e vldr s15, [r2, -0x68] | __asm ("vldr s15, [r2, -0x68]");
0x00002da2 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002da6 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002daa vstr s15, [r1, -0x18] | __asm ("vstr s15, [r1, -0x18]");
0x00002dae vldr s15, [r2, -0x64] | __asm ("vldr s15, [r2, -0x64]");
0x00002db2 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002db6 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002dba vstr s15, [r1, -0x14] | __asm ("vstr s15, [r1, -0x14]");
0x00002dbe vldr s15, [r2, -0x60] | __asm ("vldr s15, [r2, -0x60]");
0x00002dc2 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002dc6 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002dca vstr s15, [r1, -0x10] | __asm ("vstr s15, [r1, -0x10]");
0x00002dce vldr s15, [r2, -0x5c] | __asm ("vldr s15, [r2, -0x5c]");
0x00002dd2 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002dd6 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002dda vstr s15, [r1, -0xc] | __asm ("vstr s15, [r1, -0xc]");
0x00002dde vldr s15, [r2, -0x58] | __asm ("vldr s15, [r2, -0x58]");
0x00002de2 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002de6 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002dea vstr s15, [r1, -8] | __asm ("vstr s15, [r1, -8]");
0x00002dee vldr s15, [r2, -0x54] | __asm ("vldr s15, [r2, -0x54]");
0x00002df2 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002df6 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002dfa vstr s15, [r1, -4] | __asm ("vstr s15, [r1, -4]");
0x00002dfe bne 0x2d6c |
| } while (r0 != sl);
| label_27:
0x00002e00 lsls r2, r3, 2 | r2 = r3 << 2;
0x00002e02 add.w r1, fp, r2 | r1 = fp + r2;
0x00002e06 add lr, r2 | lr += r2;
| do {
0x00002e08 vldmia r1!, {s15} | __asm ("vldmia r1!, {s15}");
0x00002e0c adds r3, 1 | r3++;
0x00002e0e cmp r5, r3 |
0x00002e10 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002e14 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002e18 vstmia lr!, {s15} | __asm ("vstmia lr!, {s15}");
0x00002e1c bhi 0x2e08 |
| } while (r5 > r3);
0x00002e1e b 0x288c | goto label_17;
| label_70:
0x00002e20 cmp.w ip, 0 |
| if (ip == 0) {
0x00002e24 beq.w 0x287c | goto label_15;
| }
0x00002e28 movs r2, 6 | r2 = 6;
0x00002e2a ldr r3, [pc, 0xe0] | r3 = *(0x2f0e);
0x00002e2c str r2, [r5, 0x34] | *((r5 + 0x34)) = r2;
0x00002e2e ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002e30 vldr s15, [r4, 0x2c] | __asm ("vldr s15, [r4, 0x2c]");
0x00002e34 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002e36 and r2, sl, 0x1f | r2 = sl & 0x1f;
0x00002e3a vcvt.f32.s32 s14, s15 | __asm ("vcvt.f32.s32 s14, s15");
0x00002e3e vldr s15, [r4, 0x30] | __asm ("vldr s15, [r4, 0x30]");
0x00002e42 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00002e46 vldr s13, [r3] | __asm ("vldr s13, [r3]");
0x00002e4a vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002e4e vmul.f32 s14, s14, s13 | __asm ("vmul.f32 s14, s14, s13");
0x00002e52 vmul.f32 s15, s15, s13 | __asm ("vmul.f32 s15, s15, s13");
0x00002e56 vstr s14, [r1, 0xc] | __asm ("vstr s14, [r1, 0xc]");
0x00002e5a vstr s15, [r1, 0x10] | __asm ("vstr s15, [r1, 0x10]");
0x00002e5e b 0x287c | goto label_15;
| label_65:
0x00002e60 cmp r0, 0 |
| if (r0 == 0) {
0x00002e62 beq.w 0x304a | goto label_73;
| }
0x00002e66 mov r1, r0 | r1 = r0;
0x00002e68 b 0x2e78 |
| while (r3 < r2) {
0x00002e6a mov r0, sb | r0 = sb;
0x00002e6c blx 0x2084 | r0 = fcn_00002084 ();
0x00002e70 mov r1, r0 | r1 = r0;
0x00002e72 cmp r0, 0 |
| if (r0 == 0) {
0x00002e74 beq.w 0x304a | goto label_73;
| }
0x00002e78 ldr.w r3, [sb, 0x18] | r3 = *((sb + 0x18));
0x00002e7c movs r2, 1 | r2 = 1;
0x00002e7e lsl.w r3, r2, r3 | r3 = r2 << r3;
0x00002e82 vmov s15, r3 | __asm ("vmov s15, r3");
0x00002e86 ldrsh.w r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x00002e8a vcvt.f32.u32 s15, s15 | __asm ("vcvt.f32.u32 s15, s15");
0x00002e8e vadd.f32 s15, s15, s16 | __asm ("vadd.f32 s15, s15, s16");
0x00002e92 vcvt.s32.f32 s15, s15 | __asm ("vcvt.s32.f32 s15, s15");
0x00002e96 vmov r2, s15 | __asm ("vmov r2, s15");
0x00002e9a cmp r3, r2 |
0x00002e9c blt 0x2e6a |
| }
0x00002e9e mov r4, r1 | r4 = r1;
0x00002ea0 b 0x28be | goto label_18;
| label_67:
0x00002ea2 movs r1, 0 | r1 = 0;
0x00002ea4 mov r0, r6 | r0 = r6;
0x00002ea6 str r3, [r7, 0x14] | var_14h = r3;
0x00002ea8 blx 0x2024 | r0 = fcn_00002024 ();
0x00002eac cmp r0, 0 |
| if (r0 == 0) {
0x00002eae beq.w 0x293e | goto label_19;
| }
0x00002eb2 ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x00002eb4 ldr r2, [r4, 0x54] | r2 = *((r4 + 0x54));
0x00002eb6 ldr r3, [r7, 0x14] | r3 = var_14h;
0x00002eb8 strd r3, r2, [r0, 0xc] | __asm ("strd r3, r2, [r0, 0xc]");
| if (r1 != 0) {
0x00002ebc cbz r1, 0x2ee8 |
0x00002ebe ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002ec0 ldr r3, [pc, 0x48] | r3 = *(0x2f0c);
0x00002ec2 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002ec4 ldrsh.w r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00002ec8 vmov s15, r2 | __asm ("vmov s15, r2");
0x00002ecc and r2, sl, 0x1f | r2 = sl & 0x1f;
0x00002ed0 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00002ed4 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002ed8 vldr s14, [r3] | __asm ("vldr s14, [r3]");
0x00002edc movs r3, 2 | r3 = 2;
0x00002ede str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x00002ee0 vmul.f32 s15, s15, s14 | __asm ("vmul.f32 s15, s15, s14");
0x00002ee4 vstr s15, [r0, 0x18] | __asm ("vstr s15, [r0, 0x18]");
| }
0x00002ee8 movs r3, 0 | r3 = 0;
0x00002eea str r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x00002eec b 0x293e | goto label_19;
| label_69:
0x00002f10 cmp r0, 0 |
| if (r0 == 0) {
0x00002f12 beq.w 0x287c | goto label_15;
| }
0x00002f16 tst.w fp, 0x10000 |
| if ((fp & 0x10000) == 0) {
0x00002f1a beq.w 0x287c | goto label_15;
| }
0x00002f1e ldr r2, [r7, 0x44] | r2 = var_44h;
0x00002f20 ldr r3, [pc, 0x130] | r3 = *(0x3054);
0x00002f22 vldr s12, [r4, 0x3c] | __asm ("vldr s12, [r4, 0x3c]");
0x00002f26 vldr s14, [r4, 0x40] | __asm ("vldr s14, [r4, 0x40]");
0x00002f2a vldr s15, [r4, 0x44] | __asm ("vldr s15, [r4, 0x44]");
0x00002f2e ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x00002f30 and r2, sl, 0x1f | r2 = sl & 0x1f;
| label_71:
0x00002f34 add.w r3, r3, r2, lsl 2 | r3 += (r2 << 2);
0x00002f38 vcvt.f32.s32 s13, s12 | __asm ("vcvt.f32.s32 s13, s12");
0x00002f3c vcvt.f32.s32 s14, s14 | __asm ("vcvt.f32.s32 s14, s14");
0x00002f40 vldr s11, [r3] | __asm ("vldr s11, [r3]");
0x00002f44 movs r3, 6 | r3 = 6;
0x00002f46 vcvt.f32.s32 s15, s15 | __asm ("vcvt.f32.s32 s15, s15");
0x00002f4a str r3, [r5, 0x34] | *((r5 + 0x34)) = r3;
0x00002f4c movs r3, 3 | r3 = 3;
0x00002f4e str r3, [r1, 0x14] | *((r1 + 0x14)) = r3;
0x00002f50 vmul.f32 s13, s13, s11 | __asm ("vmul.f32 s13, s13, s11");
0x00002f54 vmul.f32 s14, s14, s11 | __asm ("vmul.f32 s14, s14, s11");
0x00002f58 vmul.f32 s15, s15, s11 | __asm ("vmul.f32 s15, s15, s11");
0x00002f5c vstr s13, [r1, 0xc] | __asm ("vstr s13, [r1, 0xc]");
0x00002f60 vstr s14, [r1, 0x10] | __asm ("vstr s14, [r1, 0x10]");
0x00002f64 vstr s15, [r1, 0x18] | __asm ("vstr s15, [r1, 0x18]");
0x00002f68 b 0x287c | goto label_15;
| label_48:
0x00002f6a ldrd fp, r8, [r7, 0x38] | __asm ("ldrd fp, r8, [var_3ch]");
| label_47:
0x00002f6e cmp.w r8, 0 |
| if (r8 != 0) {
0x00002f72 beq 0x300a |
0x00002f74 mov.w r3, -1 | r3 = -1;
0x00002f78 movs r6, 0 | r6 = 0;
0x00002f7a str r3, [r7, 0x4c] | var_48h_2 = r3;
0x00002f7c b.w 0x25d0 | goto label_12;
| label_64:
0x00002f80 ldr.w fp, [r7, 0x28] | fp = var_28h;
0x00002f84 mov r8, r3 | r8 = r3;
0x00002f86 str.w fp, [r7, 0x78] | __asm ("str.w fp, [var_74h_2]");
0x00002f8a b.w 0x24bc | goto label_20;
| label_66:
0x00002f8e ldrd fp, r8, [r7, 0x28] | __asm ("ldrd fp, r8, [var_2ch]");
| label_59:
0x00002f92 movs r6, 0 | r6 = 0;
0x00002f94 mov.w r3, -1 | r3 = -1;
0x00002f98 strd r6, r3, [r7, 0x48] | __asm ("strd r6, r3, [var_48h]");
0x00002f9c b.w 0x25d0 | goto label_12;
| label_29:
0x00002fa0 mov r0, r8 | r0 = r8;
0x00002fa2 blx 0x1ec8 | fcn_00001ec8 ();
0x00002fa6 b.w 0x22f2 | goto label_21;
| label_53:
0x00002faa movs r5, 0 | r5 = 0;
0x00002fac b.w 0x26c8 | goto label_22;
| label_51:
0x00002fb0 movs r3, 0 | r3 = 0;
0x00002fb2 str r3, [r7, 0x44] | var_44h = r3;
0x00002fb4 b.w 0x263e | goto label_23;
| label_50:
0x00002fb8 mov r0, fp | r0 = fp;
0x00002fba blx 0x1ec8 | fcn_00001ec8 ();
0x00002fbe str.w r8, [r7, 0x4c] | __asm ("str.w r8, [var_48h_2]");
0x00002fc2 b.w 0x2664 | goto label_24;
| label_32:
0x00002fc6 ldr.w r3, [sb, 0x14] | r3 = *((sb + 0x14));
0x00002fca mov r8, r0 | r8 = r0;
0x00002fcc str.w sp, [r7, 0x18] | __asm ("str.w sp, [var_18h]");
0x00002fd0 sub sp, 8 |
0x00002fd2 str r0, [sp, 8] | var_8h_2 = r0;
0x00002fd4 str r3, [r7, 0x40] | var_40h = r3;
0x00002fd6 adds r3, 1 | r3++;
0x00002fd8 lsls r2, r3, 2 | r2 = r3 << 2;
0x00002fda add r3, sp, 8 | r3 += var_8h_2;
0x00002fdc str r3, [r7, 0x1c] | var_1ch = r3;
0x00002fde movs r3, 1 | r3 = 1;
0x00002fe0 str.w r3, [r7, 0x84] | __asm ("str.w r3, [var_84h]");
0x00002fe4 adds r3, r2, 7 | r3 = r2 + 7;
0x00002fe6 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00002fea str r2, [r7, 0x10] | var_10h = r2;
0x00002fec sub.w sp, sp, r3 |
0x00002ff0 strd r0, r0, [r7, 0x74] | __asm ("strd r0, r0, [var_74h]");
0x00002ff4 add r3, sp, 8 | r3 += var_8h_2;
0x00002ff6 str r0, [sp, 8] | var_8h_2 = r0;
0x00002ff8 str r3, [r7, 0x20] | var_20h = r3;
0x00002ffa ldrd r2, r3, [sb, 0x28] | __asm ("ldrd r2, r3, [sb, 0x28]");
0x00002ffe strd r2, r3, [r7, 0x88] | __asm ("strd r2, r3, [var_88h]");
0x00003002 b.w 0x24bc | goto label_20;
| label_57:
0x00003006 mov ip, r0 |
0x00003008 b 0x280c | goto label_25;
| }
0x0000300a mov r0, fp | r0 = fp;
0x0000300c mov r6, r8 | r6 = r8;
0x0000300e blx 0x1ec8 | fcn_00001ec8 ();
0x00003012 mov.w r3, -1 | r3 = -1;
0x00003016 str r3, [r7, 0x4c] | var_48h_2 = r3;
0x00003018 b.w 0x2664 | goto label_24;
| label_68:
0x0000301c movs r3, 0 | r3 = 0;
0x0000301e b 0x2bd6 | goto label_26;
| label_72:
0x00003020 movs r3, 0 | r3 = 0;
0x00003022 b 0x2e00 | goto label_27;
| label_54:
0x00003024 ldr.w sp, [r7, 0x18] | sp = var_18h;
| label_55:
0x00003028 ldr r2, [r7, 0x24] | r2 = var_24h;
0x0000302a cmp r2, 0 |
| if (r2 == 0) {
0x0000302c beq.w 0x2360 | goto label_1;
| }
0x0000302e add r1, sp, 0x260 | r1 = sp + 0x260;
0x00003030 movs r3, 0 | r3 = 0;
0x00003032 mov.w r0, -1 | r0 = -1;
0x00003036 str r3, [r2] | *(r2) = r3;
0x00003038 b.w 0x2364 | goto label_8;
| label_58:
0x0000303c mov r0, fp | r0 = fp;
0x0000303e blx 0x1ec8 | fcn_00001ec8 ();
0x00003042 b.w 0x26f0 | goto label_28;
| label_36:
0x00003046 blx 0x1f04 | fcn_00001f04 ();
| label_73:
0x0000304a movs r3, 0 | r3 = 0;
0x0000304c ldrd r2, r3, [r3, 8] | __asm ("ldrd r2, r3, [r3, 8]");
0x00003050 udf 0xff | __asm ("udf 0xff");
| }
[*] Function system used 1 times libscene_proto.so