[*] Binary protection state of libzstd.so.1.5.0

  
  	Full RELRO     Canary found      NX enabled   DSO          No RPATH     No RUNPATH   No Symbols


[*] Function system tear down of libzstd.so.1.5.0

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libzstd.so.1.5.0 @ 0xff84 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0000ff84 ()                                      | void fcn_0000ff84 (int16_t arg_1h, int16_t arg_0h, int16_t arg1) {
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     r0 = arg1;
    0x0000ff84 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0000ff88 sub sp, 0x14                                      |     
    0x0000ff8a ldrd r3, r5, [r0, 0x14]                           |     __asm ("ldrd r3, r5, [r0, 0x14]");
    0x0000ff8e ldr r4, [r0]                                      |     r4 = *(r0);
    0x0000ff90 ldr r7, [r0, 4]                                   |     r7 = *((r0 + 4));
    0x0000ff92 str r3, [sp, 4]                                   |     var_4h = r3;
    0x0000ff94 ldr.w fp, [r0, 0x10]                              |     fp = *((r0 + 0x10));
    0x0000ff98 subs r3, r7, r4                                   |     r3 = r7 - r4;
    0x0000ff9a asrs r6, r3, 3                                    |     r6 = r3 >> 3;
    0x0000ff9c str r3, [sp, 0xc]                                 |     var_ch = r3;
                                                                 |     if (r3 == r7) {
    0x0000ff9e beq.w 0x102de                                     |         goto label_4;
                                                                 |     }
    0x0000ffa2 ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x0000ffa4 adds r2, r5, r6                                   |     r2 = r5 + r6;
    0x0000ffa6 add.w r3, fp, r6                                  |     r3 = fp + r6;
    0x0000ffaa str r2, [sp, 8]                                   |     var_8h = r2;
    0x0000ffac cmp fp, r2                                        |     
    0x0000ffae it lo                                             |     
                                                                 |     if (fp < r2) {
    0x0000ffb0 cmplo r5, r3                                      |         __asm ("cmplo r5, r3");
                                                                 |     }
    0x0000ffb2 add.w r8, r6, -1                                  |     r8 = r6 + -1;
    0x0000ffb6 add r1, r6                                        |     r1 += r6;
    0x0000ffb8 it hs                                             |     
                                                                 |     if (fp < r2) {
    0x0000ffba movhs r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x0000ffbc mov lr, r1                                        |     lr = r1;
    0x0000ffbe ldr r1, [sp, 4]                                   |     r1 = var_4h;
    0x0000ffc0 it lo                                             |     
                                                                 |     if (fp >= r2) {
    0x0000ffc2 movlo r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x0000ffc4 cmp fp, lr                                        |     
    0x0000ffc6 it lo                                             |     
                                                                 |     if (fp < lr) {
    0x0000ffc8 cmplo r1, r3                                      |         __asm ("cmplo r1, r3");
                                                                 |     }
    0x0000ffca ite hs                                            |     
                                                                 |     if (fp < lr) {
    0x0000ffcc movhs ip, 1                                       |         
                                                                 |     }
                                                                 |     if (fp < lr) {
    0x0000ffd0 mov.w ip, 0                                       |         
                                                                 |     }
    0x0000ffd4 cmp r4, r3                                        |     
    0x0000ffd6 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0000ffd8 and.w r2, r2, ip                                  |     r2 &= ip;
    0x0000ffdc ite lo                                            |     
                                                                 |     if (r4 >= r3) {
    0x0000ffde movlo ip, 0                                       |         
                                                                 |     }
                                                                 |     if (r4 >= r3) {
    0x0000ffe2 mov.w ip, 1                                       |         
                                                                 |     }
    0x0000ffe6 cmp r7, fp                                        |     
    0x0000ffe8 it ls                                             |     
                                                                 |     if (r7 > fp) {
    0x0000ffea orrls ip, ip, 1                                   |         
                                                                 |     }
    0x0000ffee cmp r5, lr                                        |     
    0x0000fff0 it lo                                             |     
                                                                 |     if (r5 < lr) {
    0x0000fff2 cmplo r1, r3                                      |         __asm ("cmplo r1, r3");
                                                                 |     }
    0x0000fff4 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x0000fff6 ite hs                                            |     
                                                                 |     if (r5 < lr) {
    0x0000fff8 movhs r3, 1                                       |         r3 = 1;
                                                                 |     }
                                                                 |     if (r5 >= lr) {
    0x0000fffa movlo r3, 0                                       |         r3 = 0;
                                                                 |     }
    0x0000fffc ands r3, r2                                       |     r3 &= r2;
    0x0000fffe add r2, sp, 0x88                                  |     r2 = sp + 0x88;
    0x00010000 movs r7, r0                                       |     r7 = r0;
    0x00010002 invalid                                           |     
    0x00010004 lsls r7, r7, 3                                    |     r7 <<= 3;
    0x00010006 cdp2 p0, 0, c0, c0, c0, 0                         |     __asm ("cdp2 p0, 0, c0, c0, c0, 0");
    0x0001000a invalid                                           |     
    0x0001000e lsrs r0, r0, 0x1c                                 |     r0 >>= 0x1c;
    0x00010010 lsls r0, r0, 4                                    |     r0 <<= 4;
    0x00010012 invalid                                           |     
    0x00010016 cdp2 p0, 0xf, c0, c15, c0, 0                      |     __asm ("cdp2 p0, 0xf, c0, c15, c0, 0");
    0x0001001a revsh r5, r2                                      |     __asm ("revsh r5, r2");
    0x0001001c invalid                                           |     
    0x00010020 cmp r6, 0x85                                      |     
    0x00010022 movs r2, 0xf7                                     |     r2 = 0xf7;
    0x00010024 movs r2, 0                                        |     r2 = 0;
    0x00010026 tst r3, r2                                        |     
                                                                 |     if ((r3 & r2) == 0) {
    0x00010028 beq.w 0x103a4                                     |         goto label_8;
                                                                 |     }
    0x0001002c ldr.w sb, [pc, 0x3f8]                             |     sb = fcn.000a6a40;
    0x00010030 add.w r1, fp, -1                                  |     r1 = fp + -1;
    0x00010034 mov ip, r4                                        |     
    0x00010036 add.w sl, r1, r6                                  |     sl = r1 + r6;
    0x0001003a mov lr, r4                                        |     lr = r4;
    0x0001003c add sb, pc                                        |     sb += pc;
                                                                 |     do {
                                                                 | label_2:
    0x0001003e ldrh.w r2, [lr, 4]                                |         r2 = *((lr + 4));
    0x00010042 clz r3, r2                                        |         r3 &= r2;
    0x00010046 cmp r2, 0x3f                                      |         
    0x00010048 eor r3, r3, 0x1f                                  |         r3 ^= 0x1f;
    0x0001004c add.w r7, sb, r2                                  |         r7 = sb + r2;
    0x00010050 add.w r3, r3, 0x13                                |         r3 += 0x13;
                                                                 |         if (r2 < 0x3f) {
    0x00010054 bls.w 0x10314                                     |             goto label_9;
                                                                 |         }
    0x00010058 strb r3, [r1, 1]!                                 |         *((r1 += 1)) = r3;
    0x0001005c cmp r1, sl                                        |         
    0x0001005e add.w lr, lr, 8                                   |         lr += 8;
    0x00010062 bne 0x1003e                                       |         
                                                                 |     } while (r1 != sl);
                                                                 | label_3:
    0x00010064 ldr r3, [sp, 4]                                   |     r3 = var_4h;
    0x00010066 ldr.w lr, [pc, 0x3c4]                             |     
    0x0001006a subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x0001006c add lr, pc                                        |     lr = 0x2049e;
    0x0001006e add.w sb, r1, r6                                  |     sb = r1 + r6;
                                                                 |     do {
                                                                 | label_0:
    0x00010072 ldrh.w r7, [ip, 6]                                |         r7 = *((ip + 6));
    0x00010076 clz r3, r7                                        |         r3 &= r7;
    0x0001007a cmp r7, 0x7f                                      |         
    0x0001007c eor r3, r3, 0x1f                                  |         r3 ^= 0x1f;
    0x00010080 add.w r2, lr, r7                                  |         r2 = lr + r7;
    0x00010084 add.w r3, r3, 0x24                                |         r3 += 0x24;
                                                                 |         if (r7 < 0x7f) {
    0x00010088 bls.w 0x10300                                     |             goto label_10;
                                                                 |         }
    0x0001008c strb r3, [r1, 1]!                                 |         *((r1 += 1)) = r3;
    0x00010090 cmp r1, sb                                        |         
    0x00010092 add.w ip, ip, 8                                   |         
    0x00010096 bne 0x10072                                       |         
                                                                 |     } while (r1 != sb);
                                                                 | label_1:
    0x00010098 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x0001009a subs r2, r3, 4                                    |     r2 = r3 - 4;
    0x0001009c ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x0001009e add r2, r4                                        |     r2 += r4;
    0x000100a0 cmp r4, r3                                        |     
    0x000100a2 it lo                                             |     
                                                                 |     if (r4 < r3) {
    0x000100a4 cmplo r5, r2                                      |         __asm ("cmplo r5, r2");
                                                                 |     }
    0x000100a6 ite hs                                            |     
                                                                 |     if (r4 < r3) {
    0x000100a8 movhs r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r4 >= r3) {
    0x000100aa movlo r2, 0                                       |         r2 = 0;
                                                                 |     }
    0x000100ac cmp.w r8, 7                                       |     
    0x000100b0 ite ls                                            |     
                                                                 |     if (r8 > 7) {
    0x000100b2 movls r2, 0                                       |         r2 = 0;
                                                                 |     }
                                                                 |     if (r8 <= 7) {
    0x000100b4 andhi r2, r2, 1                                   |         r2 &= 1;
                                                                 |     }
    0x000100b8 cmp r2, 0                                         |     
                                                                 |     if (r2 == 0) {
    0x000100ba beq.w 0x10326                                     |         goto label_11;
                                                                 |     }
    0x000100be cmp.w r8, 0xf                                     |     
    0x000100c2 bl 0x25101a                                       |     void (*0x25101a)() ();
    0x000100c6 invalid                                           |     
    0x000100ca invalid                                           |     
                                                                 |     if (r8 < 0xf) {
    0x000100ce bls.w 0x1041e                                     |         goto label_12;
                                                                 |     }
    0x000100d2 sub.w ip, r7, 3                                   |     
    0x000100d6 vmov.i8 q12, 0x1f                                 |     __asm ("vmov.i8 q12, 0x1f");
    0x000100da bic ip, ip, 1                                     |     ip = BIT_MASK (ip, 1);
    0x000100de mov r1, r5                                        |     r1 = r5;
    0x000100e0 add.w r2, ip, 2                                   |     r2 = ip + 2;
    0x000100e4 mov r3, r4                                        |     r3 = r4;
    0x000100e6 mov.w lr, 0                                       |     lr = 0;
                                                                 |     do {
    0x000100ea mov sb, r3                                        |         sb = r3;
    0x000100ec add.w sl, r3, 0x80                                |         sl = r3 + 0x80;
    0x000100f0 pld [r1, 0xc0]                                    |         __asm ("pld [r1, 0xc0]");
    0x000100f4 cmp lr, ip                                        |         
    0x000100f6 vld2.32 {d20, d21, d22, d23}, [sb]!               |         __asm ("vld2.32 {d20, d21, d22, d23}, [sb]!");
    0x000100fa add.w lr, lr, 2                                   |         lr += 2;
    0x000100fe vclz.i32 q10, q10                                 |         __asm ("vclz.i32 q10, q10");
    0x00010102 vld2.32 {d16, d17, d18, d19}, [sb]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [sb]");
    0x00010106 add.w sb, r3, 0x40                                |         sb = r3 + 0x40;
    0x0001010a vclz.i32 q8, q8                                   |         __asm ("vclz.i32 q8, q8");
    0x0001010e vmovn.i32 d22, q10                                |         __asm ("vmovn.i32 d22, q10");
    0x00010112 vmovn.i32 d23, q8                                 |         __asm ("vmovn.i32 d23, q8");
    0x00010116 vld2.32 {d16, d17, d18, d19}, [sb]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [sb]");
    0x0001011a add.w sb, r3, 0x60                                |         sb = r3 + 0x60;
    0x0001011e vclz.i32 q10, q8                                  |         __asm ("vclz.i32 q10, q8");
    0x00010122 vld2.32 {d16, d17, d18, d19}, [sb]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [sb]");
    0x00010126 mov sb, r1                                        |         sb = r1;
    0x00010128 vclz.i32 q8, q8                                   |         __asm ("vclz.i32 q8, q8");
    0x0001012c add.w r1, r1, 0x20                                |         r1 += 0x20;
    0x00010130 vmovn.i32 d18, q10                                |         __asm ("vmovn.i32 d18, q10");
    0x00010134 vmovn.i32 d19, q8                                 |         __asm ("vmovn.i32 d19, q8");
    0x00010138 vmovn.i16 d16, q11                                |         __asm ("vmovn.i16 d16, q11");
    0x0001013c vmovn.i16 d17, q9                                 |         __asm ("vmovn.i16 d17, q9");
    0x00010140 veor q8, q8, q12                                  |         __asm ("veor q8, q8, q12");
    0x00010144 vst1.8 {d16, d17}, [sb]!                          |         __asm ("vst1.8 {d16, d17}, [sb]!");
    0x00010148 vld2.32 {d20, d21, d22, d23}, [sl]                |         __asm ("vld2.32 {d20, d21, d22, d23}, [sl]");
    0x0001014c add.w sl, r3, 0xa0                                |         sl = r3 + 0xa0;
    0x00010150 vclz.i32 q10, q10                                 |         __asm ("vclz.i32 q10, q10");
    0x00010154 vld2.32 {d16, d17, d18, d19}, [sl]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [sl]");
    0x00010158 add.w sl, r3, 0xc0                                |         sl = r3 + 0xc0;
    0x0001015c vclz.i32 q8, q8                                   |         __asm ("vclz.i32 q8, q8");
    0x00010160 vmovn.i32 d22, q10                                |         __asm ("vmovn.i32 d22, q10");
    0x00010164 vmovn.i32 d23, q8                                 |         __asm ("vmovn.i32 d23, q8");
    0x00010168 vld2.32 {d16, d17, d18, d19}, [sl]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [sl]");
    0x0001016c add.w sl, r3, 0xe0                                |         sl = r3 + 0xe0;
    0x00010170 vclz.i32 q10, q8                                  |         __asm ("vclz.i32 q10, q8");
    0x00010174 add.w r3, r3, 0x100                               |         r3 += 0x100;
    0x00010178 vld2.32 {d16, d17, d18, d19}, [sl]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [sl]");
    0x0001017c vclz.i32 q8, q8                                   |         __asm ("vclz.i32 q8, q8");
    0x00010180 vmovn.i32 d18, q10                                |         __asm ("vmovn.i32 d18, q10");
    0x00010184 vmovn.i32 d19, q8                                 |         __asm ("vmovn.i32 d19, q8");
    0x00010188 vmovn.i16 d16, q11                                |         __asm ("vmovn.i16 d16, q11");
    0x0001018c vmovn.i16 d17, q9                                 |         __asm ("vmovn.i16 d17, q9");
    0x00010190 veor q8, q8, q12                                  |         __asm ("veor q8, q8, q12");
    0x00010194 vst1.8 {d16, d17}, [sb]                           |         __asm ("vst1.8 {d16, d17}, [sb]");
    0x00010198 bne 0x100ea                                       |         
                                                                 |     } while (lr != ip);
                                                                 | label_7:
    0x0001019a vmov.i8 q12, 0x1f                                 |     __asm ("vmov.i8 q12, 0x1f");
                                                                 |     do {
    0x0001019e mov ip, r3                                        |         
    0x000101a0 adds r2, 1                                        |         r2++;
    0x000101a2 cmp r7, r2                                        |         
    0x000101a4 vld2.32 {d20, d21, d22, d23}, [ip]!               |         __asm ("vld2.32 {d20, d21, d22, d23}, [ip]!");
    0x000101a8 vclz.i32 q10, q10                                 |         __asm ("vclz.i32 q10, q10");
    0x000101ac vld2.32 {d16, d17, d18, d19}, [ip]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [ip]");
    0x000101b0 add.w ip, r3, 0x40                                |         
    0x000101b4 vclz.i32 q8, q8                                   |         __asm ("vclz.i32 q8, q8");
    0x000101b8 vmovn.i32 d22, q10                                |         __asm ("vmovn.i32 d22, q10");
    0x000101bc vmovn.i32 d23, q8                                 |         __asm ("vmovn.i32 d23, q8");
    0x000101c0 vld2.32 {d16, d17, d18, d19}, [ip]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [ip]");
    0x000101c4 add.w ip, r3, 0x60                                |         
    0x000101c8 vclz.i32 q10, q8                                  |         __asm ("vclz.i32 q10, q8");
    0x000101cc add.w r3, r3, 0x80                                |         r3 += 0x80;
    0x000101d0 vld2.32 {d16, d17, d18, d19}, [ip]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [ip]");
    0x000101d4 vclz.i32 q8, q8                                   |         __asm ("vclz.i32 q8, q8");
    0x000101d8 vmovn.i32 d18, q10                                |         __asm ("vmovn.i32 d18, q10");
    0x000101dc vmovn.i32 d19, q8                                 |         __asm ("vmovn.i32 d19, q8");
    0x000101e0 vmovn.i16 d16, q11                                |         __asm ("vmovn.i16 d16, q11");
    0x000101e4 vmovn.i16 d17, q9                                 |         __asm ("vmovn.i16 d17, q9");
    0x000101e8 veor q8, q8, q12                                  |         __asm ("veor q8, q8, q12");
    0x000101ec vst1.8 {d16, d17}, [r1]!                          |         __asm ("vst1.8 {d16, d17}, [r1]!");
    0x000101f0 bhi 0x1019e                                       |         
                                                                 |     } while (r7 > r2);
    0x000101f2 bic r3, r8, 0xf                                   |     r3 = BIT_MASK (r8, 0xf);
    0x000101f6 sub.w r8, r8, r3                                  |     r8 -= r3;
    0x000101fa cmp.w r8, 7                                       |     
                                                                 |     if (r8 >= 7) {
    0x000101fe bls 0x1024c                                       |         
                                                                 | label_6:
    0x00010200 add.w r2, r4, r3, lsl 3                           |         r2 = r4 + (r3 << 3);
    0x00010204 vmov.i8 d22, 0x1f                                 |         __asm ("vmov.i8 d22, 0x1f");
    0x00010208 bic r8, r8, 7                                     |         r8 = BIT_MASK (r8, 7);
    0x0001020c mov r1, r2                                        |         r1 = r2;
    0x0001020e adds r7, r5, r3                                   |         r7 = r5 + r3;
    0x00010210 add r3, r8                                        |         r3 += r8;
    0x00010212 vld2.32 {d26, d27}, [r1]!                         |         __asm ("vld2.32 {d26, d27}, [r1]!");
    0x00010216 vclz.i32 d20, d26                                 |         __asm ("vclz.i32 d20, d26");
    0x0001021a vld2.32 {d24, d25}, [r1]                          |         __asm ("vld2.32 {d24, d25}, [r1]");
    0x0001021e add.w r1, r2, 0x20                                |         r1 = r2 + 0x20;
    0x00010222 vclz.i32 d21, d24                                 |         __asm ("vclz.i32 d21, d24");
    0x00010226 adds r2, 0x30                                     |         r2 += 0x30;
    0x00010228 vld2.32 {d24, d25}, [r1]                          |         __asm ("vld2.32 {d24, d25}, [r1]");
    0x0001022c vclz.i32 d18, d24                                 |         __asm ("vclz.i32 d18, d24");
    0x00010230 vmovn.i32 d16, q10                                |         __asm ("vmovn.i32 d16, q10");
    0x00010234 vld2.32 {d20, d21}, [r2]                          |         __asm ("vld2.32 {d20, d21}, [r2]");
    0x00010238 vclz.i32 d19, d20                                 |         __asm ("vclz.i32 d19, d20");
    0x0001023c vmovn.i32 d17, q9                                 |         __asm ("vmovn.i32 d17, q9");
    0x00010240 vmovn.i16 d16, q8                                 |         __asm ("vmovn.i16 d16, q8");
    0x00010244 veor d16, d16, d22                                |         __asm ("veor d16, d16, d22");
    0x00010248 vst1.8 {d16}, [r7]                                |         __asm ("vst1.8 {d16}, [r7]");
                                                                 |     }
    0x0001024c ldr.w r2, [r4, r3, lsl 3]                         |     offset_0 = r3 << 3;
                                                                 |     r2 = *((r4 + offset_0));
    0x00010250 adds r7, r3, 1                                    |     r7 = r3 + 1;
    0x00010252 cmp r6, r7                                        |     
    0x00010254 clz r2, r2                                        |     r2 &= r2;
    0x00010258 eor r2, r2, 0x1f                                  |     r2 ^= 0x1f;
    0x0001025c strb r2, [r5, r3]                                 |     *((r5 + r3)) = r2;
    0x0001025e lsl.w r2, r3, 3                                   |     r2 = r3 << 3;
                                                                 |     if (r6 >= r7) {
    0x00010262 bls 0x102de                                       |         
    0x00010264 add r2, r4                                        |         r2 += r4;
    0x00010266 adds r4, r3, 2                                    |         r4 = r3 + 2;
    0x00010268 ldr r1, [r2, 8]                                   |         r1 = *((r2 + 8));
    0x0001026a cmp r6, r4                                        |         
    0x0001026c clz r1, r1                                        |         r1 &= r1;
    0x00010270 eor r1, r1, 0x1f                                  |         r1 ^= 0x1f;
    0x00010274 strb r1, [r5, r7]                                 |         *((r5 + r7)) = r1;
                                                                 |         if (r6 < r4) {
    0x00010276 bls 0x102de                                       |             goto label_4;
                                                                 |         }
    0x00010278 ldr r1, [r2, 0x10]                                |         r1 = *((r2 + 0x10));
    0x0001027a clz r1, r1                                        |         r1 &= r1;
    0x0001027e eor r1, r1, 0x1f                                  |         r1 ^= 0x1f;
    0x00010282 strb r1, [r5, r4]                                 |         *((r5 + r4)) = r1;
    0x00010284 adds r4, r3, 3                                    |         r4 = r3 + 3;
    0x00010286 cmp r6, r4                                        |         
                                                                 |         if (r6 < r4) {
    0x00010288 bls 0x102de                                       |             goto label_4;
                                                                 |         }
    0x0001028a ldr r1, [r2, 0x18]                                |         r1 = *((r2 + 0x18));
    0x0001028c clz r1, r1                                        |         r1 &= r1;
    0x00010290 eor r1, r1, 0x1f                                  |         r1 ^= 0x1f;
    0x00010294 strb r1, [r5, r4]                                 |         *((r5 + r4)) = r1;
    0x00010296 adds r4, r3, 4                                    |         r4 = r3 + 4;
    0x00010298 cmp r6, r4                                        |         
                                                                 |         if (r6 < r4) {
    0x0001029a bls 0x102de                                       |             goto label_4;
                                                                 |         }
    0x0001029c ldr r1, [r2, 0x20]                                |         r1 = *((r2 + 0x20));
    0x0001029e clz r1, r1                                        |         r1 &= r1;
    0x000102a2 eor r1, r1, 0x1f                                  |         r1 ^= 0x1f;
    0x000102a6 strb r1, [r5, r4]                                 |         *((r5 + r4)) = r1;
    0x000102a8 adds r4, r3, 5                                    |         r4 = r3 + 5;
    0x000102aa cmp r6, r4                                        |         
                                                                 |         if (r6 < r4) {
    0x000102ac bls 0x102de                                       |             goto label_4;
                                                                 |         }
    0x000102ae ldr r1, [r2, 0x28]                                |         r1 = *((r2 + 0x28));
    0x000102b0 clz r1, r1                                        |         r1 &= r1;
    0x000102b4 eor r1, r1, 0x1f                                  |         r1 ^= 0x1f;
    0x000102b8 strb r1, [r5, r4]                                 |         *((r5 + r4)) = r1;
    0x000102ba adds r4, r3, 6                                    |         r4 = r3 + 6;
    0x000102bc cmp r6, r4                                        |         
                                                                 |         if (r6 < r4) {
    0x000102be bls 0x102de                                       |             goto label_4;
                                                                 |         }
    0x000102c0 ldr r1, [r2, 0x30]                                |         r1 = *((r2 + 0x30));
    0x000102c2 adds r3, 7                                        |         r3 += 7;
    0x000102c4 cmp r6, r3                                        |         
    0x000102c6 clz r1, r1                                        |         r1 &= r1;
    0x000102ca eor r1, r1, 0x1f                                  |         r1 ^= 0x1f;
    0x000102ce strb r1, [r5, r4]                                 |         *((r5 + r4)) = r1;
                                                                 |         if (r6 < r3) {
    0x000102d0 bls 0x102de                                       |             goto label_4;
                                                                 |         }
    0x000102d2 ldr r2, [r2, 0x38]                                |         r2 = *((r2 + 0x38));
    0x000102d4 clz r2, r2                                        |         r2 &= r2;
    0x000102d8 eor r2, r2, 0x1f                                  |         r2 ^= 0x1f;
    0x000102dc strb r2, [r5, r3]                                 |         *((r5 + r3)) = r2;
                                                                 |     }
                                                                 | label_4:
    0x000102de ldr r3, [r0, 0x24]                                |     r3 = *((r0 + 0x24));
    0x000102e0 cmp r3, 1                                         |     
                                                                 |     if (r3 == 1) {
    0x000102e2 bne 0x102ee                                       |         
    0x000102e4 ldr r3, [r0, 0x28]                                |         r3 = *((r0 + 0x28));
    0x000102e6 movs r2, 0x23                                     |         r2 = 0x23;
    0x000102e8 strb.w r2, [fp, r3]                               |         *((fp + r3)) = r2;
    0x000102ec ldr r3, [r0, 0x24]                                |         r3 = *((r0 + 0x24));
                                                                 |     }
    0x000102ee cmp r3, 2                                         |     
    0x000102f0 itttt eq                                          |     
                                                                 |     if (r3 != 2) {
    0x000102f2 ldreq r3, [r0, 0x28]                              |         r3 = *((r0 + 0x28));
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x000102f4 moveq r2, 0x34                                    |         r2 = 0x34;
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x000102f6 ldreq r1, [sp, 4]                                 |         r1 = var_4h;
                                                                 |     }
                                                                 |     if (r3 != 2) {
    0x000102f8 strbeq r2, [r1, r3]                               |         *((r1 + r3)) = r2;
                                                                 |     }
    0x000102fa add sp, 0x14                                      |     
    0x000102fc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_10:
    0x00010300 ldrb.w r3, [r2, 0x50]                             |     r3 = *((r2 + 0x50));
    0x00010304 add.w ip, ip, 8                                   |     
    0x00010308 strb r3, [r1, 1]!                                 |     *((r1 += 1)) = r3;
    0x0001030c cmp r1, sb                                        |     
                                                                 |     if (r1 != sb) {
    0x0001030e bne.w 0x10072                                     |         goto label_0;
                                                                 |     }
    0x00010312 b 0x10098                                         |     goto label_1;
                                                                 | label_9:
    0x00010314 ldrb r3, [r7, 0x10]                               |     r3 = *((r7 + 0x10));
    0x00010316 add.w lr, lr, 8                                   |     lr += 8;
    0x0001031a strb r3, [r1, 1]!                                 |     *((r1 += 1)) = r3;
    0x0001031e cmp r1, sl                                        |     
                                                                 |     if (r1 != sl) {
    0x00010320 bne.w 0x1003e                                     |         goto label_2;
                                                                 |     }
    0x00010324 b 0x10064                                         |     goto label_3;
                                                                 | label_11:
    0x00010326 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00010328 subs r7, r6, 3                                    |     r7 = r6 - 3;
    0x0001032a cmp r3, 0x20                                      |     
                                                                 |     if (r3 < 0x20) {
    0x0001032c bls 0x10388                                       |         goto label_13;
                                                                 |     }
    0x0001032e add.w r1, r4, 0xa0                                |     r1 = r4 + 0xa0;
    0x00010332 mov r3, r5                                        |     r3 = r5;
    0x00010334 rsb.w lr, r5, 4                                   |     lr = 4 - r5;
    0x00010338 rsb.w ip, r5, 1                                   |     
                                                                 |     do {
    0x0001033c ldr r2, [r1, -0xa0]                               |         r2 = *((r1 - 0xa0));
    0x00010340 pld [r1]                                          |         __asm ("pld [r1]");
    0x00010344 adds r1, 0x20                                     |         r1 += 0x20;
    0x00010346 clz r2, r2                                        |         r2 &= r2;
    0x0001034a eor r2, r2, 0x1f                                  |         r2 ^= 0x1f;
    0x0001034e strb r2, [r3]                                     |         *(r3) = r2;
    0x00010350 ldr r2, [r1, -0xb8]                               |         r2 = *((r1 - 0xb8));
    0x00010354 clz r2, r2                                        |         r2 &= r2;
    0x00010358 eor r2, r2, 0x1f                                  |         r2 ^= 0x1f;
    0x0001035c strb r2, [r3, 1]                                  |         *((r3 + 1)) = r2;
    0x0001035e ldr r2, [r1, -0xb0]                               |         r2 = *((r1 - 0xb0));
    0x00010362 clz r2, r2                                        |         r2 &= r2;
    0x00010366 eor r2, r2, 0x1f                                  |         r2 ^= 0x1f;
    0x0001036a strb r2, [r3, 2]                                  |         *((r3 + 2)) = r2;
    0x0001036c ldr r2, [r1, -0xa8]                               |         r2 = *((r1 - 0xa8));
    0x00010370 clz r2, r2                                        |         r2 &= r2;
    0x00010374 eor r2, r2, 0x1f                                  |         r2 ^= 0x1f;
    0x00010378 strb r2, [r3, 3]                                  |         *((r3 + 3)) = r2;
    0x0001037a add.w r2, lr, r3                                  |         r2 = lr + r3;
    0x0001037e adds r3, 4                                        |         r3 += 4;
    0x00010380 add.w r8, ip, r3                                  |         r8 = ip + r3;
    0x00010384 cmp r7, r8                                        |         
    0x00010386 bhi 0x1033c                                       |         
                                                                 |     } while (r7 > r8);
                                                                 | label_13:
    0x00010388 subs r1, r2, 1                                    |     r1 = r2 - 1;
    0x0001038a add r1, r5                                        |     r1 += r5;
                                                                 |     do {
    0x0001038c ldr.w r3, [r4, r2, lsl 3]                         |         offset_1 = r2 << 3;
                                                                 |         r3 = *((r4 + offset_1));
    0x00010390 adds r2, 1                                        |         r2++;
    0x00010392 cmp r6, r2                                        |         
    0x00010394 clz r3, r3                                        |         r3 &= r3;
    0x00010398 eor r3, r3, 0x1f                                  |         r3 ^= 0x1f;
    0x0001039c strb r3, [r1, 1]!                                 |         *((r1 += 1)) = r3;
    0x000103a0 bhi 0x1038c                                       |         
                                                                 |     } while (r6 > r2);
    0x000103a2 b 0x102de                                         |     goto label_4;
                                                                 | label_8:
    0x000103a4 ldr.w lr, [pc, 0x88]                              |     
    0x000103a8 subs r1, 1                                        |     r1--;
    0x000103aa ldr.w ip, [pc, 0x88]                              |     
    0x000103ae subs r5, 1                                        |     r5--;
    0x000103b0 add r6, r1                                        |     r6 += r1;
    0x000103b2 add.w r7, fp, -1                                  |     r7 = fp + -1;
    0x000103b6 add lr, pc                                        |     lr = 0x207ea;
    0x000103b8 add ip, pc                                        |     ip = 0x207f2;
                                                                 |     do {
                                                                 | label_5:
    0x000103ba ldrh.w r8, [r4, 4]                                |         r8 = *((r4 + 4));
    0x000103be ldrh r3, [r4, 6]                                  |         r3 = *((r4 + 6));
    0x000103c0 clz r2, r8                                        |         r2 &= r8;
    0x000103c4 cmp.w r8, 0x3f                                    |         
    0x000103c8 add.w sb, lr, r8                                  |         sb = lr + r8;
    0x000103cc eor r2, r2, 0x1f                                  |         r2 ^= 0x1f;
    0x000103d0 add.w r2, r2, 0x13                                |         r2 += 0x13;
    0x000103d4 it ls                                             |         
                                                                 |         if (r8 > 0x3f) {
    0x000103d6 ldrbls r2, [sb, 0x10]                             |             r2 = *((sb + 0x10));
                                                                 |         }
    0x000103da cmp r3, 0x7f                                      |         
    0x000103dc strb r2, [r7, 1]!                                 |         *((r7 += 1)) = r2;
    0x000103e0 ldr r2, [r4]                                      |         r2 = *(r4);
    0x000103e2 clz r2, r2                                        |         r2 &= r2;
    0x000103e6 eor r2, r2, 0x1f                                  |         r2 ^= 0x1f;
    0x000103ea strb r2, [r5, 1]!                                 |         *((r5 += 1)) = r2;
    0x000103ee add.w r2, ip, r3                                  |         r2 = ip + r3;
    0x000103f2 clz r3, r3                                        |         r3 &= r3;
    0x000103f6 eor r3, r3, 0x1f                                  |         r3 ^= 0x1f;
                                                                 |         if (r3 < 0x7f) {
    0x000103fa bls 0x1040a                                       |             goto label_14;
                                                                 |         }
    0x000103fc adds r3, 0x24                                     |         r3 += 0x24;
    0x000103fe adds r4, 8                                        |         r4 += 8;
    0x00010400 strb r3, [r1, 1]!                                 |         *((r1 += 1)) = r3;
    0x00010404 cmp r1, r6                                        |         
    0x00010406 bne 0x103ba                                       |         
                                                                 |     } while (r1 != r6);
    0x00010408 b 0x102de                                         |     goto label_4;
                                                                 | label_14:
    0x0001040a ldrb.w r3, [r2, 0x50]                             |     r3 = *((r2 + 0x50));
    0x0001040e adds r4, 8                                        |     r4 += 8;
    0x00010410 strb r3, [r1, 1]!                                 |     *((r1 += 1)) = r3;
    0x00010414 cmp r1, r6                                        |     
                                                                 |     if (r1 != r6) {
    0x00010416 bne 0x103ba                                       |         goto label_5;
                                                                 |     }
    0x00010418 b 0x102de                                         |     goto label_4;
    0x0001041a movs r3, 0                                        |     r3 = 0;
    0x0001041c b 0x10200                                         |     goto label_6;
                                                                 | label_12:
    0x0001041e mov r1, r5                                        |     r1 = r5;
    0x00010420 mov r3, r4                                        |     r3 = r4;
    0x00010422 movs r2, 0                                        |     r2 = 0;
    0x00010424 b 0x1019a                                         |     goto label_7;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libzstd.so.1.5.0 @ 0x5fc5c */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.0005fc5c ()                                      | void fcn_0005fc5c (int16_t arg_8h, int16_t arg_100h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int16_t var_48h;
                                                                 |     int16_t var_4ch;
                                                                 |     int16_t var_50h;
                                                                 |     int16_t var_54h;
                                                                 |     int16_t var_58h;
                                                                 |     int16_t var_5ch;
                                                                 |     int16_t var_60h;
                                                                 |     int16_t var_64h;
                                                                 |     int16_t var_68h;
                                                                 |     int16_t var_6ch;
                                                                 |     int16_t var_70h;
                                                                 |     int16_t var_74h;
                                                                 |     int16_t var_78h;
                                                                 |     int16_t var_7ch;
                                                                 |     int16_t var_80h;
                                                                 |     int16_t var_84h;
                                                                 |     int16_t var_88h;
                                                                 |     int16_t var_8ch;
                                                                 |     int16_t var_90h;
                                                                 |     int16_t var_94h;
                                                                 |     int16_t var_98h;
                                                                 |     int16_t var_9ch;
                                                                 |     int16_t var_a0h;
                                                                 |     int16_t var_a4h;
                                                                 |     int16_t var_a8h;
                                                                 |     int16_t var_ach;
                                                                 |     int16_t var_b0h;
                                                                 |     int16_t var_b4h;
                                                                 |     int16_t var_bch;
                                                                 |     int16_t var_c0h;
                                                                 |     int32_t var_c8h;
                                                                 |     int32_t var_c8h_2;
                                                                 |     int16_t var_d4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x0005fc5c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x0005fc60 sub sp, 0xdc                                      |     
    0x0005fc62 str r1, [sp, 0x4c]                                |     var_4ch = r1;
    0x0005fc64 mov r4, r2                                        |     r4 = r2;
    0x0005fc66 ldr.w r1, [pc, 0x8f8]                             |     
    0x0005fc6a str r2, [sp, 0x50]                                |     var_50h = r2;
    0x0005fc6c ldr.w r2, [pc, 0x8f4]                             |     r2 = *(0x60564);
    0x0005fc70 add r1, pc                                        |     r1 = 0xc01d6;
    0x0005fc72 str r0, [sp, 0x44]                                |     var_44h = r0;
    0x0005fc74 ldr r0, [sp, 0x100]                               |     r0 = *(arg_100h);
    0x0005fc76 ldr r2, [r1, r2]                                  |     
    0x0005fc78 ldr r1, [sp, 0x100]                               |     r1 = *(arg_100h);
    0x0005fc7a ubfx r0, r0, 0, 0x14                              |     r0 = (r0 >> 0) & ((1 << 0x14) - 1);
    0x0005fc7e ldr r2, [r2]                                      |     r2 = *(0xc01d6);
    0x0005fc80 str r2, [sp, 0xd4]                                |     var_d4h = r2;
    0x0005fc82 mov.w r2, 0                                       |     r2 = 0;
    0x0005fc86 ldr r2, [r4, 0x14]                                |     r2 = *((r4 + 0x14));
    0x0005fc88 lsrs r1, r1, 0x14                                 |     r1 >>= 0x14;
    0x0005fc8a cmp r0, 0                                         |     
    0x0005fc8c it ne                                             |     
                                                                 |     if (r0 == 0) {
    0x0005fc8e addne r1, 1                                       |         r1++;
                                                                 |     }
    0x0005fc90 mov r0, r1                                        |     r0 = r1;
    0x0005fc92 str r1, [sp, 0xb0]                                |     var_b0h = r1;
    0x0005fc94 movs r1, 1                                        |     r1 = 1;
    0x0005fc96 lsl.w r2, r1, r2                                  |     r2 = r1 << r2;
    0x0005fc9a str r2, [sp, 0xac]                                |     var_ach = r2;
    0x0005fc9c ldr r2, [sp, 0x100]                               |     r2 = *(arg_100h);
    0x0005fc9e adds r2, r3, r2                                   |     r2 = r3 + r2;
    0x0005fca0 str r2, [sp, 0xb4]                                |     var_b4h = r2;
    0x0005fca2 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0005fca4 beq.w 0x6018e                                     |         goto label_29;
                                                                 |     }
    0x0005fca8 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0005fcaa str r3, [sp, 0x8c]                                |     var_8ch = r3;
    0x0005fcac movs r3, 0                                        |     r3 = 0;
    0x0005fcae str r3, [sp, 0xa8]                                |     var_a8h = r3;
    0x0005fcb0 ldr r2, [r2, 0xc]                                 |     r2 = *((r2 + 0xc));
    0x0005fcb2 strd r3, r2, [sp, 0xa0]                           |     __asm ("strd r3, r2, [var_a0h]");
    0x0005fcb6 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x0005fcb8 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x0005fcba cmp r3, r2                                        |     
                                                                 |     if (r3 < r2) {
    0x0005fcbc bls.w 0x6018e                                     |         goto label_29;
                                                                 |     }
                                                                 | label_4:
    0x0005fcc0 ldr r2, [sp, 0xa0]                                |     r2 = var_a0h;
    0x0005fcc2 ldr r3, [sp, 0x100]                               |     r3 = *(arg_100h);
    0x0005fcc4 sub.w r3, r3, r2, lsl 20                          |     r3 -= (r2 << 20);
    0x0005fcc8 ldr r2, [sp, 0x8c]                                |     r2 = var_8ch;
    0x0005fcca cmp.w r3, 0x100000                                |     
    0x0005fcce str r3, [sp, 0x90]                                |     var_90h = r3;
    0x0005fcd0 mov fp, r2                                        |     
    0x0005fcd2 it hs                                             |     
                                                                 |     if (r3 < 0x100000) {
    0x0005fcd4 movhs r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x0005fcd6 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0005fcd8 itett hs                                          |     
                                                                 |     if (r3 < 0x100000) {
    0x0005fcda addhs r3, r3, 0x100000                            |         r3 += 0x100000;
                                                                 |     }
                                                                 |     if (r3 < 0x100000) {
    0x0005fcde ldrhs r3, [sp, 0xb4]                              |         r3 = var_b4h;
                                                                 |     }
                                                                 |     if (r3 < 0x100000) {
    0x0005fce0 strhs r3, [sp, 0x2c]                              |         var_2ch = r3;
                                                                 |     }
                                                                 |     if (r3 >= 0x100000) {
    0x0005fce2 mov.w r3, 0x100000                                |         r3 = 0x100000;
                                                                 |     }
    0x0005fce6 ldr r1, [r2, 0x10]                                |     r1 = *((r2 + 0x10));
    0x0005fce8 ite lo                                            |     
                                                                 |     if (r3 >= 0x100000) {
    0x0005fcea strlo r3, [sp, 0x2c]                              |         var_2ch = r3;
                                                                 |     }
                                                                 |     if (r3 < 0x100000) {
    0x0005fcec strhs r3, [sp, 0x90]                              |         var_90h = r3;
                                                                 |     }
    0x0005fcee str r1, [sp, 0x3c]                                |     var_3ch = r1;
    0x0005fcf0 ldr r1, [r2, 0xc]                                 |     r1 = *((r2 + 0xc));
    0x0005fcf2 ldr r3, [r2, 4]                                   |     r3 = *((r2 + 4));
    0x0005fcf4 str r1, [sp, 0x40]                                |     var_40h = r1;
    0x0005fcf6 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0005fcf8 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0005fcfa subs r3, r1, r3                                   |     r3 = r1 - r3;
    0x0005fcfc cmp.w r3, -0x60000000                             |     
                                                                 |     if (r3 > -0x60000000) {
    0x0005fd00 bhi.w 0x60436                                     |         goto label_30;
                                                                 |     }
    0x0005fd04 ldr r2, [r2, 0x1c]                                |     r2 = *((r2 + 0x1c));
    0x0005fd06 ldr r1, [sp, 0xac]                                |     r1 = var_ach;
    0x0005fd08 add r2, r1                                        |     r2 += r1;
                                                                 | label_26:
    0x0005fd0a cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0005fd0c bhi.w 0x603fe                                     |         goto label_31;
                                                                 |     }
    0x0005fd10 ldrd r3, r2, [sp, 0x3c]                           |     __asm ("ldrd r3, r2, [var_3ch]");
    0x0005fd14 cmp r3, r2                                        |     
    0x0005fd16 it hs                                             |     
                                                                 |     if (r3 < r2) {
    0x0005fd18 movhs r3, r2                                      |         r3 = r2;
                                                                 |     }
    0x0005fd1a str r3, [sp, 0x28]                                |     var_28h = r3;
                                                                 | label_24:
    0x0005fd1c ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0005fd1e ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x0005fd20 ldrd r6, r0, [r3, 4]                              |     __asm ("ldrd r6, r0, [r3, 4]");
    0x0005fd24 str r2, [sp, 0x38]                                |     var_38h = r2;
    0x0005fd26 ldrd r2, r3, [sp, 0x3c]                           |     __asm ("ldrd r2, r3, [var_3ch]");
    0x0005fd2a cmp r3, r2                                        |     
                                                                 |     if (r3 < r2) {
    0x0005fd2c bls.w 0x603d4                                     |         goto label_32;
                                                                 |     }
    0x0005fd30 ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x0005fd32 ldr r1, [sp, 0x28]                                |     r1 = var_28h;
    0x0005fd34 ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0005fd36 adds r3, r2, r3                                   |     r3 = r2 + r3;
    0x0005fd38 adds r1, r2, r1                                   |     r1 = r2 + r1;
    0x0005fd3a str r2, [sp, 0x80]                                |     var_80h = r2;
    0x0005fd3c str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x0005fd3e ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x0005fd40 ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x0005fd42 str r1, [sp, 0x58]                                |     var_58h = r1;
    0x0005fd44 cmp r2, r3                                        |     
                                                                 |     if (r2 > r3) {
    0x0005fd46 bhi.w 0x603e6                                     |         goto label_33;
                                                                 |     }
                                                                 | label_21:
    0x0005fd4a ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x0005fd4c cmp r2, 0x40                                      |     
    0x0005fd4e it hs                                             |     
                                                                 |     if (r2 < 0x40) {
    0x0005fd50 movhs r2, 0x40                                    |         r2 = 0x40;
                                                                 |     }
    0x0005fd52 vmov.i64 d16, 0xffffffff                          |     __asm ("vmov.i64 d16, aav.0x000000ff");
    0x0005fd56 mov r4, r2                                        |     r4 = r2;
    0x0005fd58 ldr r1, [r3, 0x10]                                |     r1 = *((r3 + 0x10));
    0x0005fd5a movs r3, 1                                        |     r3 = 1;
    0x0005fd5c vstr d16, [sp, 0xc0]                              |     __asm ("vstr d16, [sp, 0xc0]");
    0x0005fd60 sub.w r5, r1, 0x20                                |     r5 = r1 - 0x20;
    0x0005fd64 rsb.w r2, r1, 0x20                                |     r2 = 0x20 - r1;
    0x0005fd68 lsl.w r5, r3, r5                                  |     r5 = r3 << r5;
    0x0005fd6c lsr.w r2, r3, r2                                  |     r2 = r3 >> r2;
    0x0005fd70 lsls r3, r1                                       |     r3 <<= r1;
    0x0005fd72 orrs r2, r5                                       |     r2 |= r5;
    0x0005fd74 subs r3, 1                                        |     r3--;
    0x0005fd76 add.w r5, r1, -1                                  |     r5 = r1 + -1;
    0x0005fd7a adc r2, r2, -1                                    |     __asm ("adc r2, r2, -1");
    0x0005fd7e cmp r4, r5                                        |     
                                                                 |     if (r4 >= r5) {
    0x0005fd80 bls 0x5fd9c                                       |         
    0x0005fd82 subs r1, r4, r1                                   |         r1 = r4 - r1;
    0x0005fd84 sub.w r4, r1, 0x20                                |         r4 = r1 - 0x20;
    0x0005fd88 lsls r2, r1                                       |         r2 <<= r1;
    0x0005fd8a lsl.w r4, r3, r4                                  |         r4 = r3 << r4;
    0x0005fd8e orrs r2, r4                                       |         r2 |= r4;
    0x0005fd90 rsb.w r4, r1, 0x20                                |         r4 = 0x20 - r1;
    0x0005fd94 lsr.w r4, r3, r4                                  |         r4 = r3 >> r4;
    0x0005fd98 lsls r3, r1                                       |         r3 <<= r1;
    0x0005fd9a orrs r2, r4                                       |         r2 |= r4;
                                                                 |     }
    0x0005fd9c strd r3, r2, [sp, 0xc8]                           |     __asm ("strd r3, r2, [var_c8h]");
    0x0005fda0 ldr r1, [sp, 0x8c]                                |     r1 = var_8ch;
    0x0005fda2 ldr r2, [sp, 0x2c]                                |     r2 = var_2ch;
    0x0005fda4 ldr r4, [sp, 0x38]                                |     r4 = var_38h;
    0x0005fda6 sub.w r3, r2, 8                                   |     r3 = r2 - 8;
    0x0005fdaa add r1, r4                                        |     r1 += r4;
    0x0005fdac str r3, [sp, 0x84]                                |     var_84h = r3;
    0x0005fdae cmp r3, r1                                        |     
    0x0005fdb0 str r1, [sp, 0x48]                                |     var_48h = r1;
                                                                 |     if (r3 < r1) {
    0x0005fdb2 bls.w 0x6054c                                     |         goto label_34;
                                                                 |     }
    0x0005fdb6 subs r6, r6, r0                                   |     r6 -= r0;
    0x0005fdb8 mov.w r3, -1                                      |     r3 = -1;
    0x0005fdbc lsls r3, r6                                       |     r3 <<= r6;
    0x0005fdbe ldr r1, [sp, 0x40]                                |     r1 = var_40h;
    0x0005fdc0 mvns r3, r3                                       |     r3 = ~r3;
    0x0005fdc2 str r3, [sp, 0x68]                                |     var_68h = r3;
    0x0005fdc4 movs r3, 8                                        |     r3 = 8;
    0x0005fdc6 lsls r3, r0                                       |     r3 <<= r0;
    0x0005fdc8 str r3, [sp, 0x74]                                |     var_74h = r3;
    0x0005fdca ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0005fdcc add r3, r1                                        |     r3 += r1;
    0x0005fdce str r3, [sp, 0x7c]                                |     var_7ch = r3;
    0x0005fdd0 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005fdd2 adds r3, 0x24                                     |     r3 += 0x24;
    0x0005fdd4 str r3, [sp, 0x94]                                |     var_94h = r3;
    0x0005fdd6 add r3, sp, 0xc0                                  |     r3 += var_c0h;
    0x0005fdd8 str r3, [sp, 0x9c]                                |     var_9ch = r3;
    0x0005fdda add r3, sp, 0xbc                                  |     r3 += var_bch;
    0x0005fddc str r3, [sp, 0x98]                                |     var_98h = r3;
    0x0005fdde subs r3, r2, 1                                    |     r3 = r2 - 1;
    0x0005fde0 str r3, [sp, 0x70]                                |     var_70h = r3;
                                                                 | label_3:
    0x0005fde2 ldr r3, [sp, 0x98]                                |     r3 = var_98h;
    0x0005fde4 ldr r0, [sp, 0x84]                                |     r0 = var_84h;
    0x0005fde6 ldr r1, [sp, 0x48]                                |     r1 = var_48h;
    0x0005fde8 str r3, [sp]                                      |     *(sp) = r3;
    0x0005fdea movs r3, 0                                        |     r3 = 0;
    0x0005fdec str r3, [sp, 0xbc]                                |     var_bch = r3;
    0x0005fdee subs r2, r0, r1                                   |     r2 = r0 - r1;
    0x0005fdf0 ldr r3, [sp, 0x94]                                |     r3 = var_94h;
    0x0005fdf2 ldr r0, [sp, 0x9c]                                |     r0 = var_9ch;
    0x0005fdf4 bl 0x5f860                                        |     fcn_0005f860 (r0, r1, r2, r3, r4, r5);
    0x0005fdf8 ldr r3, [sp, 0xbc]                                |     r3 = var_bch;
    0x0005fdfa str r0, [sp, 0x78]                                |     var_78h = r0;
    0x0005fdfc str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0005fdfe cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0005fe00 beq.w 0x60428                                     |         goto label_35;
                                                                 |     }
    0x0005fe04 cmp r3, 2                                         |     
                                                                 |     if (r3 < 2) {
    0x0005fe06 bls.w 0x60432                                     |         goto label_36;
                                                                 |     }
    0x0005fe0a subs r3, 3                                        |     r3 -= 3;
    0x0005fe0c ldr.w sl, [sp, 0x38]                              |     sl = var_38h;
    0x0005fe10 bic sb, r3, 1                                     |     sb = BIT_MASK (r3, 1);
    0x0005fe14 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005fe16 add.w r6, sb, 2                                   |     r6 = sb + 2;
    0x0005fe1a mov.w r8, 0                                       |     r8 = 0;
    0x0005fe1e strd fp, r6, [sp, 0xc]                            |     __asm ("strd fp, r6, [var_ch]");
    0x0005fe22 ldr.w fp, [sp, 0x50]                              |     fp = var_50h;
    0x0005fe26 mov r7, r3                                        |     r7 = r3;
    0x0005fe28 add.w r4, r3, 0x188                               |     r4 = r3 + 0x188;
    0x0005fe2c mov r6, r3                                        |     r6 = r3;
                                                                 |     do {
    0x0005fe2e ldr r3, [r7, 0x24]                                |         r3 = *((r7 + 0x24));
    0x0005fe30 mov r1, sl                                        |         r1 = sl;
    0x0005fe32 ldr r2, [sp, 0x48]                                |         r2 = var_48h;
    0x0005fe34 adds r7, 8                                        |         r7 += 8;
    0x0005fe36 pld [r4]                                          |         __asm ("pld [r4]");
    0x0005fe3a adds r4, 0x20                                     |         r4 += 0x20;
    0x0005fe3c sub.w r3, r3, sl                                  |         r3 -= sl;
    0x0005fe40 adds r5, r2, r3                                   |         r5 = r2 + r3;
    0x0005fe42 movs r2, 0                                        |         r2 = 0;
    0x0005fe44 mov r0, r5                                        |         r0 = r5;
    0x0005fe46 movs r3, 0                                        |         r3 = 0;
    0x0005fe48 bl 0x6040                                         |         fcn_00006040 (r0, r1, r2, r3, r4);
    0x0005fe4c ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x0005fe4e str r1, [r4, -0x7c]                               |         *((r4 - 0x7c)) = r1;
    0x0005fe52 ldr r1, [sp, 0x48]                                |         r1 = var_48h;
    0x0005fe54 ands r3, r0                                       |         r3 &= r0;
    0x0005fe56 str r5, [r4, -0x84]                               |         *((r4 - 0x84)) = r5;
    0x0005fe5a str r3, [r4, -0x80]                               |         *((r4 - 0x80)) = r3;
    0x0005fe5e ldr r2, [r7, 0x20]                                |         r2 = *((r7 + 0x20));
    0x0005fe60 sub.w r2, r2, sl                                  |         r2 -= sl;
    0x0005fe64 adds r5, r1, r2                                   |         r5 = r1 + r2;
    0x0005fe66 ldr.w r2, [fp, 8]                                 |         r2 = *(arg_8h);
    0x0005fe6a mov r1, sl                                        |         r1 = sl;
    0x0005fe6c mov r0, r5                                        |         r0 = r5;
    0x0005fe6e lsls r3, r2                                       |         r3 <<= r2;
    0x0005fe70 ldr r2, [r6, 0x18]                                |         r2 = *((r6 + 0x18));
    0x0005fe72 add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x0005fe76 movs r2, 0                                        |         r2 = 0;
    0x0005fe78 pld [r3]                                          |         __asm ("pld [r3]");
    0x0005fe7c str r3, [r4, -0x78]                               |         *((r4 - 0x78)) = r3;
    0x0005fe80 movs r3, 0                                        |         r3 = 0;
    0x0005fe82 bl 0x6040                                         |         fcn_00006040 (r0, r1, r2, r3, r4);
    0x0005fe86 ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x0005fe88 cmp sb, r8                                        |         
    0x0005fe8a str r1, [r4, -0x6c]                               |         *((r4 - 0x6c)) = r1;
    0x0005fe8e add.w r8, r8, 2                                   |         r8 += 2;
    0x0005fe92 str r5, [r4, -0x74]                               |         *((r4 - 0x74)) = r5;
    0x0005fe96 and.w r3, r3, r0                                  |         r3 &= r0;
    0x0005fe9a str r3, [r4, -0x70]                               |         *((r4 - 0x70)) = r3;
    0x0005fe9e ldr.w r2, [fp, 8]                                 |         r2 = *(arg_8h);
    0x0005fea2 lsl.w r3, r3, r2                                  |         r3 <<= r2;
    0x0005fea6 ldr r2, [r6, 0x18]                                |         r2 = *((r6 + 0x18));
    0x0005fea8 add.w r3, r2, r3, lsl 3                           |         r3 = r2 + (r3 << 3);
    0x0005feac pld [r3]                                          |         __asm ("pld [r3]");
    0x0005feb0 str r3, [r4, -0x68]                               |         *((r4 - 0x68)) = r3;
    0x0005feb4 bne 0x5fe2e                                       |         
                                                                 |     } while (sb != r8);
    0x0005feb6 ldrd fp, r6, [sp, 0xc]                            |     __asm ("ldrd fp, r6, [var_ch]");
                                                                 | label_25:
    0x0005feba ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005febc str.w fp, [sp, 0xc]                               |     __asm ("str.w fp, [var_ch]");
    0x0005fec0 ldr.w r8, [sp, 0x38]                              |     r8 = var_38h;
    0x0005fec4 ldr.w sb, [sp, 0x54]                              |     sb = var_54h;
    0x0005fec8 mov sl, r3                                        |     sl = r3;
    0x0005feca add.w r7, r3, r6, lsl 2                           |     r7 = r3 + (r6 << 2);
    0x0005fece ldr.w fp, [sp, 0x50]                              |     fp = var_50h;
    0x0005fed2 add.w r5, r3, r6, lsl 4                           |     r5 = r3 + (r6 << 4);
    0x0005fed6 adds r7, 0x20                                     |     r7 += 0x20;
                                                                 |     do {
    0x0005fed8 ldr r4, [r7, 4]!                                  |         r4 = *((r7 += 4));
    0x0005fedc mov r1, r8                                        |         r1 = r8;
    0x0005fede ldr r3, [sp, 0x48]                                |         r3 = var_48h;
    0x0005fee0 movs r2, 0                                        |         r2 = 0;
    0x0005fee2 adds r5, 0x10                                     |         r5 += 0x10;
    0x0005fee4 adds r6, 1                                        |         r6++;
    0x0005fee6 sub.w r4, r4, r8                                  |         r4 -= r8;
    0x0005feea add r4, r3                                        |         r4 += r3;
    0x0005feec movs r3, 0                                        |         r3 = 0;
    0x0005feee mov r0, r4                                        |         r0 = r4;
    0x0005fef0 bl 0x6040                                         |         fcn_00006040 (r0, r1, r2, r3, r4);
    0x0005fef4 ldr r3, [sp, 0x68]                                |         r3 = var_68h;
    0x0005fef6 cmp sb, r6                                        |         
    0x0005fef8 str.w r1, [r5, 0x11c]                             |         __asm ("str.w r1, aav.0x000000ff");
    0x0005fefc str.w r4, [r5, 0x114]                             |         __asm ("str.w r4, aav.0x000000ff");
    0x0005ff00 and.w r0, r0, r3                                  |         r0 &= r3;
    0x0005ff04 str.w r0, [r5, 0x118]                             |         __asm ("str.w r0, aav.0x000000ff");
    0x0005ff08 ldr.w r3, [fp, 8]                                 |         r3 = *(arg_8h);
    0x0005ff0c lsl.w r0, r0, r3                                  |         r0 <<= r3;
    0x0005ff10 ldr.w r3, [sl, 0x18]                              |         r3 = *((sl + 0x18));
    0x0005ff14 add.w r3, r3, r0, lsl 3                           |         r3 += (r0 << 3);
    0x0005ff18 pld [r3]                                          |         __asm ("pld [r3]");
    0x0005ff1c str.w r3, [r5, 0x120]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x0005ff20 bhi 0x5fed8                                       |         
                                                                 |     } while (sb > r6);
    0x0005ff22 ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x0005ff24 ldr.w fp, [sp, 0xc]                               |     fp = var_ch;
    0x0005ff28 add.w sl, r3, 0x138                               |     sl = r3 + 0x138;
    0x0005ff2c movs r3, 0                                        |     r3 = 0;
    0x0005ff2e str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x0005ff30 b 0x5ff72                                         |     
                                                                 |     while (r0 <= fp) {
                                                                 | label_0:
    0x0005ff32 ldr r2, [sp, 0x44]                                |         r2 = var_44h;
    0x0005ff34 movs r7, 1                                        |         r7 = 1;
    0x0005ff36 ldr r3, [sp, 0x50]                                |         r3 = var_50h;
    0x0005ff38 ldr r6, [sp, 0x20]                                |         r6 = var_20h;
    0x0005ff3a ldr r5, [r2, 0x20]                                |         r5 = *((r2 + 0x20));
    0x0005ff3c ldr r3, [r3, 8]                                   |         r3 = *((r3 + 8));
    0x0005ff3e ldr r1, [r2, 0x18]                                |         r1 = *((r2 + 0x18));
    0x0005ff40 ldrb r2, [r5, r6]                                 |         r2 = *((r5 + r6));
    0x0005ff42 lsl.w r0, r6, r3                                  |         r0 = r6 << r3;
    0x0005ff46 lsl.w r3, r7, r3                                  |         r3 = r7 << r3;
    0x0005ff4a ldr r7, [sp, 0xc]                                 |         r7 = var_ch;
    0x0005ff4c add r0, r2                                        |         r0 += r2;
    0x0005ff4e subs r3, 1                                        |         r3--;
    0x0005ff50 adds r2, 1                                        |         r2++;
    0x0005ff52 str.w r7, [r1, r0, lsl 3]                         |         __asm ("str.w r7, [r1, r0, lsl 3]");
    0x0005ff56 add.w r1, r1, r0, lsl 3                           |         r1 += (r0 << 3);
    0x0005ff5a ands r3, r2                                       |         r3 &= r2;
    0x0005ff5c str r4, [r1, 4]                                   |         *((r1 + 4)) = r4;
    0x0005ff5e strb r3, [r5, r6]                                 |         *((r5 + r6)) = r3;
                                                                 | label_2:
    0x0005ff60 ldr r3, [sp, 0x1c]                                |         r3 = var_1ch;
    0x0005ff62 add.w sl, sl, 0x10                                |         sl += 0x10;
    0x0005ff66 ldr r2, [sp, 0x54]                                |         r2 = var_54h;
    0x0005ff68 adds r3, 1                                        |         r3++;
    0x0005ff6a cmp r3, r2                                        |         
    0x0005ff6c str r3, [sp, 0x1c]                                |         var_1ch = r3;
                                                                 |         if (r3 == r2) {
    0x0005ff6e beq.w 0x603b2                                     |             goto label_37;
                                                                 |         }
    0x0005ff72 sub.w r0, sl, 0x14                                |         r0 = sl - 0x14;
    0x0005ff76 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x0005ff78 ldm r0, {r0, r3, r4}                              |         r0 = *(r0);
                                                                 |         r3 = *((r0 + 4));
                                                                 |         r4 = *((r0 + 8));
    0x0005ff7a pld [sl]                                          |         __asm ("pld [sl]");
    0x0005ff7e cmp r0, fp                                        |         
    0x0005ff80 sub.w r2, r0, r2                                  |         r2 = r0 - r2;
    0x0005ff84 str r3, [sp, 0x20]                                |         var_20h = r3;
    0x0005ff86 str r2, [sp, 0xc]                                 |         var_ch = r2;
    0x0005ff88 ldr r3, [sl, -0x8]                                |         r3 = *((sl - 0x8));
    0x0005ff8c blo 0x5ff32                                       |         
                                                                 |     }
    0x0005ff8e ldr r2, [sp, 0x74]                                |     r2 = var_74h;
    0x0005ff90 add.w sb, r3, r2                                  |     sb = r3 + r2;
    0x0005ff94 cmp r3, sb                                        |     
                                                                 |     if (r3 >= sb) {
    0x0005ff96 bhs 0x5ff32                                       |         goto label_0;
                                                                 |     }
    0x0005ff98 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0005ff9a movs r2, 0                                        |     r2 = 0;
    0x0005ff9c str.w sl, [sp, 0x5c]                              |     __asm ("str.w sl, [var_5ch]");
    0x0005ffa0 ldr.w sl, [sp, 0x7c]                              |     sl = var_7ch;
    0x0005ffa4 subs r1, 3                                        |     r1 -= 3;
    0x0005ffa6 str r2, [sp, 0x10]                                |     var_10h = r2;
    0x0005ffa8 str r1, [sp, 0x30]                                |     var_30h = r1;
    0x0005ffaa adds r1, r0, 4                                    |     r1 = r0 + 4;
    0x0005ffac str r1, [sp, 0x60]                                |     var_60h = r1;
    0x0005ffae strd r2, r2, [sp, 0x14]                           |     __asm ("strd r2, r2, [var_14h]");
    0x0005ffb2 str r2, [sp, 0x34]                                |     var_34h = r2;
                                                                 | label_1:
    0x0005ffb4 ldr r2, [r3, 4]                                   |     r2 = *((r3 + 4));
    0x0005ffb6 pld [r3, 0xc]                                     |     __asm ("pld [r3, 0xc]");
    0x0005ffba cmp r4, r2                                        |     
                                                                 |     if (r4 != r2) {
    0x0005ffbc bne 0x6009a                                       |         goto label_5;
                                                                 |     }
    0x0005ffbe ldr r1, [r3]                                      |     r1 = *(r3);
    0x0005ffc0 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0005ffc2 cmp r1, r2                                        |     
                                                                 |     if (r1 < r2) {
    0x0005ffc4 bls 0x6009a                                       |         goto label_5;
                                                                 |     }
    0x0005ffc6 ldrd r5, r2, [sp, 0x3c]                           |     __asm ("ldrd r5, r2, [var_3ch]");
    0x0005ffca cmp r2, r5                                        |     
                                                                 |     if (r2 < r5) {
    0x0005ffcc bls.w 0x601ac                                     |         goto label_38;
                                                                 |     }
    0x0005ffd0 cmp r1, r2                                        |     
                                                                 |     if (r1 >= r2) {
    0x0005ffd2 bhs.w 0x60266                                     |         goto label_39;
                                                                 |     }
    0x0005ffd6 ldr r2, [sp, 0x80]                                |     r2 = var_80h;
    0x0005ffd8 ldr.w ip, [sp, 0x6c]                              |     ip = var_6ch;
    0x0005ffdc ldr r6, [sp, 0x58]                                |     r6 = var_58h;
    0x0005ffde add r2, r1                                        |     r2 += r1;
                                                                 | label_9:
    0x0005ffe0 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x0005ffe2 sub.w r5, ip, r2                                  |     r5 = ip - r2;
    0x0005ffe6 add r5, r0                                        |     r5 += r0;
    0x0005ffe8 cmp r5, r1                                        |     
    0x0005ffea it hs                                             |     
                                                                 |     if (r5 < r1) {
    0x0005ffec movhs r5, r1                                      |         r5 = r1;
                                                                 |     }
    0x0005ffee sub.w lr, r5, 3                                   |     lr = r5 - 3;
    0x0005fff2 cmp r0, lr                                        |     
                                                                 |     if (r0 >= lr) {
    0x0005fff4 bhs.w 0x6020a                                     |         goto label_40;
                                                                 |     }
    0x0005fff8 ldr r1, [r2]                                      |     r1 = *(r2);
    0x0005fffa ldr r7, [r0]                                      |     r7 = *(r0);
    0x0005fffc cmp r1, r7                                        |     
                                                                 |     if (r1 == r7) {
    0x0005fffe beq.w 0x602c2                                     |         goto label_41;
                                                                 |     }
    0x00060000 strh r0, [r4, 0xa]                                |     *((r4 + 0xa)) = r0;
    0x00060002 eor.w r5, r1, r7                                  |     r5 = r1 ^ r7;
    0x00060006 rbit r5, r5                                       |     __asm ("rbit r5, r5");
    0x00060008 bl 0xffe05576                                     |     void (*0xffe05576)(uint32_t) (r0);
    0x0006000c invalid                                           |     
                                                                 | label_12:
    0x00060010 adds r1, r2, r5                                   |     r1 = r2 + r5;
    0x00060012 cmp ip, r1                                        |     
                                                                 |     if (ip == r1) {
    0x00060014 beq.w 0x6023e                                     |         goto label_42;
                                                                 |     }
                                                                 | label_8:
    0x00060018 ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x0006001a cmp r1, r5                                        |     
                                                                 |     if (r1 > r5) {
    0x0006001c bhi 0x6009a                                       |         goto label_5;
                                                                 |     }
    0x0006001e cmp r6, r2                                        |     
    0x00060020 ite hs                                            |     
                                                                 |     if (r6 < r2) {
    0x00060022 movhs r7, 0                                       |         r7 = 0;
                                                                 |     }
                                                                 |     if (r6 >= r2) {
    0x00060024 movlo r7, 1                                       |         r7 = 1;
                                                                 |     }
    0x00060026 cmp r0, fp                                        |     
    0x00060028 it ls                                             |     
                                                                 |     if (r0 > fp) {
    0x0006002a movls r7, 0                                       |         r7 = 0;
                                                                 |     }
    0x0006002c mov r8, r7                                        |     r8 = r7;
    0x0006002e mov r1, r7                                        |     r1 = r7;
                                                                 |     if (r7 == 0) {
    0x00060030 cbz r7, 0x6005c                                   |         goto label_13;
                                                                 |     }
    0x00060032 mov ip, r0                                        |     
    0x00060034 mov r7, r2                                        |     r7 = r2;
    0x00060036 movs r1, 0                                        |     r1 = 0;
    0x00060038 b 0x6004a                                         |     
                                                                 |     while (r8 == lr) {
    0x0006003a cmp fp, ip                                        |         
    0x0006003c it lo                                             |         
                                                                 |         if (fp < ip) {
    0x0006003e cmplo r6, r7                                      |             __asm ("cmplo r6, r7");
                                                                 |         }
    0x00060040 add.w lr, r1, 1                                   |         lr = r1 + 1;
                                                                 |         if (fp >= ip) {
    0x00060044 bhs.w 0x602ec                                     |             goto label_43;
                                                                 |         }
    0x00060048 mov r1, lr                                        |         r1 = lr;
    0x0006004a ldrb r8, [ip, -0x1]!                              |         r8 = *((ip -= 0x1));
    0x0006004e ldrb lr, [r7, -0x1]!                              |         
    0x00060052 cmp r8, lr                                        |         
    0x00060054 beq 0x6003a                                       |         
                                                                 |     }
    0x00060056 subs r2, r2, r1                                   |     r2 -= r1;
    0x00060058 rsb.w r8, r1, 0                                   |     r8 = r1 - ;
                                                                 | label_13:
    0x0006005c ldr r7, [sp, 0x58]                                |     r7 = var_58h;
    0x0006005e subs r2, r6, r2                                   |     r2 = r6 - r2;
    0x00060060 it ne                                             |     
                                                                 |     if (r2 == r6) {
    0x00060062 movne r2, 1                                       |         r2 = 1;
                                                                 |     }
    0x00060064 cmp r6, r7                                        |     
    0x00060066 ite ne                                            |     
                                                                 |     if (r6 == r7) {
    0x00060068 movne ip, r2                                      |         
                                                                 |     }
                                                                 |     if (r6 != r7) {
    0x0006006a orreq ip, r2, 1                                   |         
                                                                 |     }
    0x0006006e cmp.w ip, 0                                       |     
                                                                 |     if (ip == 0) {
    0x00060072 beq.w 0x6032e                                     |         goto label_44;
                                                                 |     }
                                                                 | label_6:
    0x00060076 adds r2, r5, r1                                   |     r2 = r5 + r1;
                                                                 | label_20:
    0x00060078 ldr r6, [sp, 0x34]                                |     r6 = var_34h;
    0x0006007a cmp r6, r2                                        |     
    0x0006007c it hs                                             |     
                                                                 |     if (r6 < r2) {
    0x0006007e movhs r2, r6                                      |         r2 = r6;
                                                                 |     }
    0x00060080 str r2, [sp, 0x34]                                |     var_34h = r2;
    0x00060082 ldr r2, [sp, 0x18]                                |     r2 = var_18h;
    0x00060084 it lo                                             |     
                                                                 |     if (r6 >= r2) {
    0x00060086 movlo r2, r1                                      |         r2 = r1;
                                                                 |     }
    0x00060088 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x0006008a ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x0006008c it lo                                             |     
                                                                 |     if (r6 >= r2) {
    0x0006008e movlo r2, r5                                      |         r2 = r5;
                                                                 |     }
    0x00060090 str r2, [sp, 0x14]                                |     var_14h = r2;
    0x00060092 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00060094 it lo                                             |     
                                                                 |     if (r6 >= r2) {
    0x00060096 movlo r2, r3                                      |         r2 = r3;
                                                                 |     }
    0x00060098 str r2, [sp, 0x10]                                |     var_10h = r2;
                                                                 | label_5:
    0x0006009a adds r3, 8                                        |     r3 += 8;
    0x0006009c cmp r3, sb                                        |     
                                                                 |     if (r3 <= sb) {
    0x0006009e blo 0x5ffb4                                       |         goto label_1;
                                                                 |     }
    0x000600a0 ldr r3, [sp, 0x10]                                |     r3 = var_10h;
    0x000600a2 ldr.w sl, [sp, 0x5c]                              |     sl = var_5ch;
    0x000600a6 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x000600a8 beq.w 0x5ff32                                     |         goto label_0;
                                                                 |     }
    0x000600ac ldr r1, [r3]                                      |     r1 = *(r3);
    0x000600ae ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x000600b0 sub.w ip, r3, r1                                  |     
    0x000600b4 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x000600b6 ldr r6, [r3, 0x10]                                |     r6 = *((r3 + 0x10));
    0x000600b8 ldr r2, [r3, 0xc]                                 |     r2 = *((r3 + 0xc));
    0x000600ba ldr r5, [r3]                                      |     r5 = *(r3);
    0x000600bc mov r1, r6                                        |     r1 = r6;
    0x000600be ldrd r6, r7, [sp, 0x14]                           |     __asm ("ldrd r6, r7, [var_14h]");
    0x000600c2 cmp r2, r1                                        |     
    0x000600c4 add.w r3, r6, r7                                  |     r3 = r6 + r7;
    0x000600c8 add.w r6, r2, r2, lsl 1                           |     r6 = r2 + (r2 << 1);
    0x000600cc add.w r7, r5, r6, lsl 2                           |     r7 = r5 + (r6 << 2);
                                                                 |     if (r2 == r1) {
    0x000600d0 beq.w 0x60550                                     |         goto label_45;
                                                                 |     }
    0x000600d4 str r3, [r7, 8]                                   |     *((r7 + 8)) = r3;
    0x000600d6 adds r2, 1                                        |     r2++;
    0x000600d8 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x000600da subs r3, r0, r3                                   |     r3 = r0 - r3;
    0x000600dc sub.w r3, r3, fp                                  |     r3 -= fp;
    0x000600e0 str r3, [r7, 4]                                   |     *((r7 + 4)) = r3;
    0x000600e2 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x000600e4 str.w ip, [r5, r6, lsl 2]                         |     __asm ("str.w ip, [r5, r6, lsl 2]");
    0x000600e8 mov.w ip, 1                                       |     
    0x000600ec ldr r6, [sp, 0x14]                                |     r6 = var_14h;
    0x000600ee str r2, [r3, 0xc]                                 |     *((r3 + 0xc)) = r2;
    0x000600f0 ldr r2, [sp, 0x50]                                |     r2 = var_50h;
    0x000600f2 add r6, r0                                        |     r6 += r0;
    0x000600f4 ldr r7, [sp, 0x20]                                |     r7 = var_20h;
    0x000600f6 ldr r0, [sp, 0x78]                                |     r0 = var_78h;
    0x000600f8 mov fp, r6                                        |     
    0x000600fa ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x000600fc ldr r2, [sp, 0x44]                                |     r2 = var_44h;
    0x000600fe ldr r6, [r2, 0x20]                                |     r6 = *((r2 + 0x20));
    0x00060100 lsl.w ip, ip, r3                                  |     
    0x00060102 invalid                                           |     
    0x00060106 ldr r2, [sp, 0x48]                                |     r2 = var_48h;
    0x00060108 adds r5, r2, r0                                   |     r5 = r2 + r0;
    0x0006010a ldrb r2, [r6, r7]                                 |     r2 = *((r6 + r7));
    0x0006010c lsl.w r0, r7, r3                                  |     r0 = r7 << r3;
    0x00060110 ldr r3, [sp, 0xc]                                 |     r3 = var_ch;
    0x00060112 cmp fp, r5                                        |     
    0x00060114 add r0, r2                                        |     r0 += r2;
    0x00060116 add.w r2, r2, 1                                   |     r2++;
    0x0006011a str.w r3, [r1, r0, lsl 3]                         |     __asm ("str.w r3, [r1, r0, lsl 3]");
    0x0006011e add.w r1, r1, r0, lsl 3                           |     r1 += (r0 << 3);
    0x00060122 add.w r3, ip, -1                                  |     r3 = ip + -1;
    0x00060126 and.w r3, r3, r2                                  |     r3 &= r2;
    0x0006012a str r4, [r1, 4]                                   |     *((r1 + 4)) = r4;
    0x0006012c strb r3, [r6, r7]                                 |     *((r6 + r7)) = r3;
                                                                 |     if (fp < r5) {
    0x0006012e bls.w 0x5ff60                                     |         goto label_2;
                                                                 |     }
    0x00060132 mov r2, fp                                        |     r2 = fp;
    0x00060134 str.w fp, [sp, 0x48]                              |     __asm ("str.w fp, [var_48h]");
                                                                 | label_18:
    0x00060138 ldr r3, [sp, 0x84]                                |     r3 = var_84h;
    0x0006013a cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0006013c bhi.w 0x5fde2                                     |         goto label_3;
                                                                 |     }
    0x00060140 ldr r3, [sp, 0x2c]                                |     r3 = var_2ch;
    0x00060142 sub.w r0, r3, fp                                  |     r0 = r3 - fp;
    0x00060146 cmn.w r0, 0x78                                    |     
                                                                 |     if (r0 > 0x78) {
    0x0006014a bhi 0x60190                                       |         goto label_28;
                                                                 |     }
                                                                 | label_27:
    0x0006014c ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x0006014e ldr r1, [sp, 0xa4]                                |     r1 = var_a4h;
    0x00060150 ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x00060152 cmp r3, r1                                        |     
                                                                 |     if (r3 < r1) {
    0x00060154 bls.w 0x603f4                                     |         goto label_46;
                                                                 |     }
                                                                 | label_22:
    0x00060158 ldr r2, [r2]                                      |     r2 = *(r2);
    0x0006015a add.w r1, r1, r1, lsl 1                           |     r1 += (r1 << 1);
    0x0006015e ldr r4, [sp, 0xa8]                                |     r4 = var_a8h;
    0x00060160 str r0, [sp, 0xa8]                                |     var_a8h = r0;
    0x00060162 add.w r2, r2, r1, lsl 2                           |     r2 += (r1 << 2);
    0x00060166 ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x00060168 add r1, r4                                        |     r1 += r4;
    0x0006016a str r1, [r2, 4]                                   |     *((r2 + 4)) = r1;
                                                                 | label_23:
    0x0006016c ldr r1, [sp, 0x8c]                                |     r1 = var_8ch;
    0x0006016e ldr r2, [sp, 0xa0]                                |     r2 = var_a0h;
    0x00060170 add.w r1, r1, 0x100000                            |     r1 += 0x100000;
    0x00060174 str r1, [sp, 0x8c]                                |     var_8ch = r1;
    0x00060176 adds r2, 1                                        |     r2++;
    0x00060178 ldr r1, [sp, 0xb0]                                |     r1 = var_b0h;
    0x0006017a str r2, [sp, 0xa0]                                |     var_a0h = r2;
    0x0006017c cmp r1, r2                                        |     
                                                                 |     if (r1 == r2) {
    0x0006017e beq 0x6018e                                       |         goto label_29;
                                                                 |     }
    0x00060180 mov r2, r3                                        |     r2 = r3;
    0x00060182 str r3, [sp, 0xa4]                                |     var_a4h = r3;
    0x00060184 ldr r3, [sp, 0x4c]                                |     r3 = var_4ch;
    0x00060186 ldr r3, [r3, 0x10]                                |     r3 = *((r3 + 0x10));
    0x00060188 cmp r3, r2                                        |     
                                                                 |     if (r3 > r2) {
    0x0006018a bhi.w 0x5fcc0                                     |         goto label_4;
                                                                 |     }
                                                                 | label_29:
    0x0006018e movs r0, 0                                        |     r0 = 0;
                                                                 | label_28:
    0x00060190 ldr r2, [pc, 0x3d4]                               |     
    0x00060192 ldr r3, [pc, 0x3d0]                               |     r3 = *(0x60566);
    0x00060194 add r2, pc                                        |     r2 = 0xc0700;
    0x00060196 ldr r3, [r2, r3]                                  |     r3 = *(0xc0700);
    0x00060198 ldr r2, [r3]                                      |     r2 = *(0xc0700);
    0x0006019a ldr r3, [sp, 0xd4]                                |     r3 = var_d4h;
    0x0006019c eors r2, r3                                       |     r2 ^= r3;
    0x0006019e mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x000601a2 bne.w 0x6055a                                     |         goto label_47;
                                                                 |     }
    0x000601a6 add sp, 0xdc                                      |     
    0x000601a8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_38:
    0x000601ac ldr r6, [sp, 0x30]                                |     r6 = var_30h;
    0x000601ae ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x000601b0 cmp r0, r6                                        |     
    0x000601b2 add.w r2, r5, r1                                  |     r2 = r5 + r1;
                                                                 |     if (r0 >= r6) {
    0x000601b6 bhs 0x60272                                       |         goto label_48;
                                                                 |     }
    0x000601b8 ldr r1, [r5, r1]                                  |     r1 = *((r5 + r1));
    0x000601ba ldr r5, [r0]                                      |     r5 = *(r0);
    0x000601bc cmp r1, r5                                        |     
                                                                 |     if (r1 == r5) {
    0x000601be beq 0x6029c                                       |         goto label_49;
                                                                 |     }
    0x000601c0 eors r5, r1                                       |     r5 ^= r1;
    0x000601c2 rbit r5, r5                                       |     __asm ("rbit r5, r5");
    0x000601c6 clz r5, r5                                        |     r5 &= r5;
    0x000601ca asrs r5, r5, 3                                    |     r5 >>= 3;
                                                                 | label_10:
    0x000601cc ldr r1, [sp, 0x38]                                |     r1 = var_38h;
    0x000601ce cmp r1, r5                                        |     
                                                                 |     if (r1 > r5) {
    0x000601d0 bhi.w 0x6009a                                     |         goto label_5;
                                                                 |     }
    0x000601d4 cmp sl, r2                                        |     
    0x000601d6 ite hs                                            |     
                                                                 |     if (sl < r2) {
    0x000601d8 movhs r1, 0                                       |         r1 = 0;
                                                                 |     }
                                                                 |     if (sl >= r2) {
    0x000601da movlo r1, 1                                       |         r1 = 1;
                                                                 |     }
    0x000601dc cmp r0, fp                                        |     
    0x000601de it ls                                             |     
                                                                 |     if (r0 > fp) {
    0x000601e0 movls r1, 0                                       |         r1 = 0;
                                                                 |     }
    0x000601e2 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x000601e4 beq.w 0x603d0                                     |         goto label_50;
                                                                 |     }
    0x000601e8 mov r6, r0                                        |     r6 = r0;
    0x000601ea movs r1, 0                                        |     r1 = 0;
    0x000601ec b 0x601fc                                         |     goto label_51;
                                                                 | label_7:
    0x000601ee cmp fp, r6                                        |     
    0x000601f0 it lo                                             |     
                                                                 |     if (fp < r6) {
    0x000601f2 cmplo sl, r2                                      |         __asm ("cmplo sl, r2");
                                                                 |     }
    0x000601f4 add.w r1, r1, 1                                   |     r1++;
                                                                 |     if (fp >= r6) {
    0x000601f8 bhs.w 0x60076                                     |         goto label_6;
                                                                 |     }
                                                                 | label_51:
    0x000601fc ldrb ip, [r6, -0x1]!                              |     ip = *((r6 -= 0x1));
    0x00060200 ldrb r7, [r2, -0x1]!                              |     r7 = *((r2 -= 0x1));
    0x00060204 cmp ip, r7                                        |     
                                                                 |     if (ip == r7) {
    0x00060206 beq 0x601ee                                       |         goto label_7;
                                                                 |     }
    0x00060208 b 0x60076                                         |     goto label_6;
                                                                 | label_40:
    0x0006020a mov r8, r2                                        |     r8 = r2;
    0x0006020c mov r7, r0                                        |     r7 = r0;
                                                                 | label_11:
    0x0006020e subs r1, r5, 1                                    |     r1 = r5 - 1;
    0x00060210 cmp r7, r1                                        |     
                                                                 |     if (r7 < r1) {
    0x00060212 bhs 0x60224                                       |         
    0x00060214 ldrh.w lr, [r8]                                   |         
    0x00060218 ldrh r1, [r7]                                     |         r1 = *(r7);
    0x0006021a cmp lr, r1                                        |         
    0x0006021c itt eq                                            |         
                                                                 |         if (lr != r1) {
    0x0006021e addeq r7, 2                                       |             r7 += 2;
                                                                 |         }
                                                                 |         if (lr == r1) {
    0x00060220 addeq r8, r8, 2                                   |             r8 += 2;
                                                                 |             goto label_52;
                                                                 |         }
                                                                 |     }
                                                                 | label_52:
    0x00060224 cmp r5, r7                                        |     
                                                                 |     if (r5 >= r7) {
    0x00060226 bls 0x60234                                       |         
    0x00060228 ldrb r1, [r7]                                     |         r1 = *(r7);
    0x0006022a ldrb.w r5, [r8]                                   |         r5 = *(r8);
    0x0006022e cmp r5, r1                                        |         
    0x00060230 it eq                                             |         
                                                                 |         if (r5 == r1) {
    0x00060232 addeq r7, 1                                       |             r7++;
                                                                 |             goto label_53;
                                                                 |         }
                                                                 |     }
                                                                 | label_53:
    0x00060234 subs r5, r7, r0                                   |     r5 = r7 - r0;
    0x00060236 adds r1, r2, r5                                   |     r1 = r2 + r5;
    0x00060238 cmp ip, r1                                        |     
                                                                 |     if (ip != r1) {
    0x0006023a bne.w 0x60018                                     |         goto label_8;
                                                                 |     }
                                                                 | label_42:
    0x0006023e ldr r7, [sp, 0x30]                                |     r7 = var_30h;
    0x00060240 adds r1, r0, r5                                   |     r1 = r0 + r5;
    0x00060242 str r1, [sp, 0x64]                                |     var_64h = r1;
    0x00060244 cmp r1, r7                                        |     
                                                                 |     if (r1 >= r7) {
    0x00060246 bhs 0x602f6                                       |         goto label_54;
                                                                 |     }
    0x00060248 ldr.w ip, [sl]                                    |     ip = *(sl);
    0x0006024c ldr r7, [r0, r5]                                  |     r7 = *((r0 + r5));
    0x0006024e cmp ip, r7                                        |     
                                                                 |     if (ip == r7) {
    0x00060250 beq.w 0x6036e                                     |         goto label_55;
                                                                 |     }
    0x00060254 eor.w r1, ip, r7                                  |     r1 = ip ^ r7;
    0x00060258 rbit r1, r1                                       |     __asm ("rbit r1, r1");
    0x0006025c clz r1, r1                                        |     r1 &= r1;
    0x00060260 asrs r1, r1, 3                                    |     r1 >>= 3;
    0x00060262 add r5, r1                                        |     r5 += r1;
    0x00060264 b 0x60018                                         |     goto label_8;
                                                                 | label_39:
    0x00060266 ldr r2, [sp, 0x24]                                |     r2 = var_24h;
    0x00060268 mov r6, sl                                        |     r6 = sl;
    0x0006026a ldr.w ip, [sp, 0x2c]                              |     ip = var_2ch;
    0x0006026e add r2, r1                                        |     r2 += r1;
    0x00060270 b 0x5ffe0                                         |     goto label_9;
                                                                 | label_48:
    0x00060272 mov r6, r2                                        |     r6 = r2;
    0x00060274 mov r5, r0                                        |     r5 = r0;
                                                                 |     do {
                                                                 | label_15:
    0x00060276 ldr r1, [sp, 0x70]                                |         r1 = var_70h;
    0x00060278 cmp r5, r1                                        |         
                                                                 |         if (r5 < r1) {
    0x0006027a bhs 0x60288                                       |             
    0x0006027c ldrh r7, [r6]                                     |             r7 = *(r6);
    0x0006027e ldrh r1, [r5]                                     |             r1 = *(r5);
    0x00060280 cmp r7, r1                                        |             
    0x00060282 itt eq                                            |             
                                                                 |             if (r7 != r1) {
    0x00060284 addeq r5, 2                                       |                 r5 += 2;
                                                                 |             }
                                                                 |             if (r7 == r1) {
    0x00060286 addeq r6, 2                                       |                 r6 += 2;
                                                                 |                 goto label_56;
                                                                 |             }
                                                                 |         }
                                                                 | label_56:
    0x00060288 ldr r1, [sp, 0x2c]                                |         r1 = var_2ch;
    0x0006028a cmp r1, r5                                        |         
                                                                 |         if (r1 >= r5) {
    0x0006028c bls 0x60298                                       |             
    0x0006028e ldrb r1, [r5]                                     |             r1 = *(r5);
    0x00060290 ldrb r6, [r6]                                     |             r6 = *(r6);
    0x00060292 cmp r6, r1                                        |             
    0x00060294 it eq                                             |             
                                                                 |             if (r6 == r1) {
    0x00060296 addeq r5, 1                                       |                 r5++;
                                                                 |                 goto label_57;
                                                                 |             }
                                                                 |         }
                                                                 | label_57:
    0x00060298 subs r5, r5, r0                                   |         r5 -= r0;
    0x0006029a b 0x601cc                                         |         goto label_10;
                                                                 | label_49:
    0x0006029c ldr r1, [sp, 0x60]                                |         r1 = var_60h;
    0x0006029e mov r5, r6                                        |         r5 = r6;
    0x000602a0 adds r6, r2, 4                                    |         r6 = r2 + 4;
    0x000602a2 cmp r5, r1                                        |         
    0x000602a4 mov r5, r1                                        |         r5 = r1;
    0x000602a6 bls 0x60276                                       |         
                                                                 |     } while (r5 < r1);
                                                                 | label_14:
    0x000602a8 ldr r1, [r6]                                      |     r1 = *(r6);
    0x000602aa ldr r7, [r5]                                      |     r7 = *(r5);
    0x000602ac cmp r1, r7                                        |     
                                                                 |     if (r1 == r7) {
    0x000602ae beq 0x60362                                       |         goto label_58;
                                                                 |     }
    0x000602b0 eors r1, r7                                       |     r1 ^= r7;
    0x000602b2 rbit r1, r1                                       |     __asm ("rbit r1, r1");
    0x000602b6 clz r1, r1                                        |     r1 &= r1;
    0x000602ba add.w r1, r5, r1, lsr 3                           |     r1 = r5 + (r1 >> 3);
    0x000602be subs r5, r1, r0                                   |     r5 = r1 - r0;
    0x000602c0 b 0x601cc                                         |     goto label_10;
                                                                 | label_41:
    0x000602c2 ldr r1, [sp, 0x60]                                |     r1 = var_60h;
    0x000602c4 add.w r8, r2, 4                                   |     r8 = r2 + 4;
    0x000602c8 cmp lr, r1                                        |     
    0x000602ca mov r7, r1                                        |     r7 = r1;
                                                                 |     if (lr < r1) {
    0x000602cc bls 0x6020e                                       |         goto label_11;
                                                                 |     }
    0x000602ce str r5, [sp, 0x64]                                |     var_64h = r5;
                                                                 | label_17:
    0x000602d0 ldr.w r1, [r8]                                    |     r1 = *(r8);
    0x000602d4 ldr r5, [r7]                                      |     r5 = *(r7);
    0x000602d6 cmp r1, r5                                        |     
                                                                 |     if (r1 == r5) {
    0x000602d8 beq 0x603a4                                       |         goto label_59;
                                                                 |     }
    0x000602da eors r1, r5                                       |     r1 ^= r5;
    0x000602dc rbit r1, r1                                       |     __asm ("rbit r1, r1");
    0x000602e0 clz r1, r1                                        |     r1 &= r1;
    0x000602e4 add.w r1, r7, r1, lsr 3                           |     r1 = r7 + (r1 >> 3);
    0x000602e8 subs r5, r1, r0                                   |     r5 = r1 - r0;
    0x000602ea b 0x60010                                         |     goto label_12;
                                                                 | label_43:
    0x000602ec mvn.w r8, r1                                      |     r8 = ~r1;
    0x000602f0 mov r1, lr                                        |     r1 = lr;
    0x000602f2 add r2, r8                                        |     r2 += r8;
    0x000602f4 b 0x6005c                                         |     goto label_13;
                                                                 | label_54:
    0x000602f6 mov r7, r1                                        |     r7 = r1;
    0x000602f8 mov lr, sl                                        |     lr = sl;
                                                                 | label_16:
    0x000602fa ldr r1, [sp, 0x70]                                |     r1 = var_70h;
    0x000602fc cmp r7, r1                                        |     
                                                                 |     if (r7 < r1) {
    0x000602fe bhs 0x60312                                       |         
    0x00060300 ldrh.w r8, [lr]                                   |         r8 = *(lr);
    0x00060304 ldrh.w ip, [r7]                                   |         ip = *(r7);
    0x00060308 cmp r8, ip                                        |         
    0x0006030a itt eq                                            |         
                                                                 |         if (r8 != ip) {
    0x0006030c addeq r7, 2                                       |             r7 += 2;
                                                                 |         }
                                                                 |         if (r8 == ip) {
    0x0006030e addeq lr, lr, 2                                   |             lr += 2;
                                                                 |             goto label_60;
                                                                 |         }
                                                                 |     }
                                                                 | label_60:
    0x00060312 ldr r1, [sp, 0x2c]                                |     r1 = var_2ch;
    0x00060314 cmp r1, r7                                        |     
                                                                 |     if (r1 >= r7) {
    0x00060316 bls 0x60326                                       |         
    0x00060318 ldrb.w ip, [r7]                                   |         ip = *(r7);
    0x0006031c ldrb.w lr, [lr]                                   |         
    0x00060320 cmp lr, ip                                        |         
    0x00060322 it eq                                             |         
                                                                 |         if (lr == ip) {
    0x00060324 addeq r7, 1                                       |             r7++;
                                                                 |             goto label_61;
                                                                 |         }
                                                                 |     }
                                                                 | label_61:
    0x00060326 ldr r1, [sp, 0x64]                                |     r1 = var_64h;
    0x00060328 subs r1, r7, r1                                   |     r1 = r7 - r1;
    0x0006032a add r5, r1                                        |     r5 += r1;
    0x0006032c b 0x60018                                         |     goto label_8;
                                                                 | label_44:
    0x0006032e mov r2, r7                                        |     r2 = r7;
    0x00060330 ldr r7, [sp, 0x6c]                                |     r7 = var_6ch;
    0x00060332 add.w r6, r0, r8                                  |     r6 = r0 + r8;
    0x00060336 cmp r7, r2                                        |     
    0x00060338 it hi                                             |     
                                                                 |     if (r7 > r2) {
    0x0006033a cmphi r6, fp                                      |         __asm ("cmphi r6, fp");
                                                                 |     }
    0x0006033c itt hi                                            |     
                                                                 |     if (r7 <= r2) {
    0x0006033e movhi r8, r2                                      |         r8 = r2;
                                                                 |     }
                                                                 |     if (r7 <= r2) {
    0x00060340 movhi r2, ip                                      |         r2 = ip;
                                                                 |     }
                                                                 |     if (r7 > r2) {
    0x00060342 bhi 0x60352                                       |         goto label_62;
                                                                 |     }
    0x00060344 b 0x60076                                         |     goto label_6;
                                                                 |     do {
    0x00060346 cmp fp, r6                                        |         
    0x00060348 it lo                                             |         
                                                                 |         if (fp < r6) {
    0x0006034a cmplo r8, r7                                      |             __asm ("cmplo r8, r7");
                                                                 |         }
    0x0006034c add.w r2, r2, 1                                   |         r2++;
                                                                 |         if (fp >= r6) {
    0x00060350 bhs 0x6035e                                       |             goto label_63;
                                                                 |         }
                                                                 | label_62:
    0x00060352 ldrb lr, [r6, -0x1]!                              |         
    0x00060356 ldrb ip, [r7, -0x1]!                              |         ip = *((r7 -= 0x1));
    0x0006035a cmp lr, ip                                        |         
    0x0006035c beq 0x60346                                       |         
                                                                 |     } while (lr == ip);
                                                                 | label_63:
    0x0006035e add r1, r2                                        |     r1 += r2;
    0x00060360 b 0x60076                                         |     goto label_6;
                                                                 | label_58:
    0x00060362 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x00060364 adds r5, 4                                        |     r5 += 4;
    0x00060366 adds r6, 4                                        |     r6 += 4;
    0x00060368 cmp r1, r5                                        |     
                                                                 |     if (r1 > r5) {
    0x0006036a bhi 0x602a8                                       |         goto label_14;
                                                                 |     }
    0x0006036c b 0x60276                                         |     goto label_15;
                                                                 | label_55:
    0x0006036e adds r7, r1, 4                                    |     r7 = r1 + 4;
    0x00060370 ldr r1, [sp, 0x30]                                |     r1 = var_30h;
    0x00060372 add.w lr, sl, 4                                   |     lr = sl + 4;
    0x00060376 cmp r7, r1                                        |     
                                                                 |     if (r7 >= r1) {
    0x00060378 bhs 0x602fa                                       |         goto label_16;
                                                                 |     }
    0x0006037a ldr r1, [sp, 0x64]                                |     r1 = var_64h;
    0x0006037c str r3, [sp, 0x88]                                |     var_88h = r3;
                                                                 | label_19:
    0x0006037e ldr.w ip, [lr]                                    |     ip = *(lr);
    0x00060382 ldr.w r8, [r7]                                    |     r8 = *(r7);
    0x00060386 cmp ip, r8                                        |     
                                                                 |     if (ip == r8) {
    0x00060388 beq 0x603be                                       |         goto label_64;
                                                                 |     }
    0x0006038a eor.w ip, ip, r8                                  |     
    0x0006038e ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x00060390 rbit ip, ip                                       |     __asm ("rbit ip, ip");
    0x00060394 clz ip, ip                                        |     
    0x00060398 add.w ip, r7, ip, lsr 3                           |     
    0x0006039c sub.w r1, ip, r1                                  |     r1 = ip - r1;
    0x000603a0 add r5, r1                                        |     r5 += r1;
    0x000603a2 b 0x60018                                         |     goto label_8;
                                                                 | label_59:
    0x000603a4 adds r7, 4                                        |     r7 += 4;
    0x000603a6 add.w r8, r8, 4                                   |     r8 += 4;
    0x000603aa cmp lr, r7                                        |     
                                                                 |     if (lr > r7) {
    0x000603ac bhi 0x602d0                                       |         goto label_17;
                                                                 |     }
    0x000603ae ldr r5, [sp, 0x64]                                |     r5 = var_64h;
    0x000603b0 b 0x6020e                                         |     goto label_11;
                                                                 | label_37:
    0x000603b2 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x000603b4 ldr r2, [sp, 0x78]                                |     r2 = var_78h;
    0x000603b6 add r3, r2                                        |     r3 += r2;
    0x000603b8 mov r2, r3                                        |     r2 = r3;
    0x000603ba str r3, [sp, 0x48]                                |     var_48h = r3;
    0x000603bc b 0x60138                                         |     goto label_18;
                                                                 | label_64:
    0x000603be ldr r3, [sp, 0x30]                                |     r3 = var_30h;
    0x000603c0 adds r7, 4                                        |     r7 += 4;
    0x000603c2 add.w lr, lr, 4                                   |     lr += 4;
    0x000603c6 cmp r7, r3                                        |     
                                                                 |     if (r7 <= r3) {
    0x000603c8 blo 0x6037e                                       |         goto label_19;
                                                                 |     }
    0x000603ca ldr r3, [sp, 0x88]                                |     r3 = var_88h;
    0x000603cc str r1, [sp, 0x64]                                |     var_64h = r1;
    0x000603ce b 0x602fa                                         |     goto label_16;
                                                                 | label_50:
    0x000603d0 mov r2, r5                                        |     r2 = r5;
    0x000603d2 b 0x60078                                         |     goto label_20;
                                                                 | label_32:
    0x000603d4 movs r3, 0                                        |     r3 = 0;
    0x000603d6 ldr r2, [sp, 0x38]                                |     r2 = var_38h;
    0x000603d8 str r3, [sp, 0x58]                                |     var_58h = r3;
    0x000603da str r3, [sp, 0x80]                                |     var_80h = r3;
    0x000603dc str r3, [sp, 0x6c]                                |     var_6ch = r3;
    0x000603de ldr r3, [sp, 0x90]                                |     r3 = var_90h;
    0x000603e0 cmp r2, r3                                        |     
                                                                 |     if (r2 < r3) {
    0x000603e2 bls.w 0x5fd4a                                     |         goto label_21;
                                                                 |     }
                                                                 | label_33:
    0x000603e6 ldr r2, [sp, 0x4c]                                |     r2 = var_4ch;
    0x000603e8 mov r0, r3                                        |     r0 = r3;
    0x000603ea ldr r1, [sp, 0xa4]                                |     r1 = var_a4h;
    0x000603ec ldr r3, [r2, 0xc]                                 |     r3 = *((r2 + 0xc));
    0x000603ee cmp r3, r1                                        |     
                                                                 |     if (r3 > r1) {
    0x000603f0 bhi.w 0x60158                                     |         goto label_22;
                                                                 |     }
                                                                 | label_46:
    0x000603f4 ldr r2, [sp, 0xa8]                                |     r2 = var_a8h;
    0x000603f6 ldr r1, [sp, 0x90]                                |     r1 = var_90h;
    0x000603f8 add r2, r1                                        |     r2 += r1;
    0x000603fa str r2, [sp, 0xa8]                                |     var_a8h = r2;
    0x000603fc b 0x6016c                                         |     goto label_23;
                                                                 | label_31:
    0x000603fe ldr r2, [sp, 0xac]                                |     r2 = var_ach;
    0x00060400 subs r3, r3, r2                                   |     r3 -= r2;
    0x00060402 ldr r2, [sp, 0x3c]                                |     r2 = var_3ch;
    0x00060404 cmp r3, r2                                        |     
    0x00060406 ittt hi                                           |     
                                                                 |     if (r3 <= r2) {
    0x00060408 ldrhi r2, [sp, 0x44]                              |         r2 = var_44h;
                                                                 |     }
                                                                 |     if (r3 <= r2) {
    0x0006040a strhi r3, [sp, 0x3c]                              |         var_3ch = r3;
                                                                 |     }
                                                                 |     if (r3 <= r2) {
    0x0006040c strhi r3, [r2, 0x10]                              |         *((r2 + 0x10)) = r3;
                                                                 |     }
    0x0006040e ldrd r3, r2, [sp, 0x3c]                           |     __asm ("ldrd r3, r2, [var_3ch]");
    0x00060412 cmp r2, r3                                        |     
    0x00060414 ittt lo                                           |     
                                                                 |     if (r2 >= r3) {
    0x00060416 ldrlo r2, [sp, 0x44]                              |         r2 = var_44h;
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x00060418 strlo r3, [sp, 0x40]                              |         var_40h = r3;
                                                                 |     }
                                                                 |     if (r2 >= r3) {
    0x0006041a strlo r3, [r2, 0xc]                               |         *((r2 + 0xc)) = r3;
                                                                 |     }
    0x0006041c movs r2, 0                                        |     r2 = 0;
    0x0006041e ldr r3, [sp, 0x44]                                |     r3 = var_44h;
    0x00060420 str r2, [r3, 0x1c]                                |     *((r3 + 0x1c)) = r2;
    0x00060422 ldr r3, [sp, 0x3c]                                |     r3 = var_3ch;
    0x00060424 str r3, [sp, 0x28]                                |     var_28h = r3;
    0x00060426 b 0x5fd1c                                         |     goto label_24;
                                                                 | label_35:
    0x00060428 ldr r3, [sp, 0x48]                                |     r3 = var_48h;
    0x0006042a add r3, r0                                        |     r3 += r0;
    0x0006042c mov r2, r3                                        |     r2 = r3;
    0x0006042e str r3, [sp, 0x48]                                |     var_48h = r3;
    0x00060430 b 0x60138                                         |     goto label_18;
                                                                 | label_36:
    0x00060432 movs r6, 0                                        |     r6 = 0;
    0x00060434 b 0x5feba                                         |     goto label_25;
                                                                 | label_30:
    0x00060436 ldr r3, [sp, 0x50]                                |     r3 = var_50h;
    0x00060438 mov r4, r2                                        |     r4 = r2;
    0x0006043a ldr r5, [sp, 0x24]                                |     r5 = var_24h;
    0x0006043c ldr r2, [r2, 8]                                   |     r2 = *((r2 + 8));
    0x0006043e ldr r0, [r3, 4]                                   |     r0 = *((r3 + 4));
    0x00060440 ldr r3, [sp, 0x8c]                                |     r3 = var_8ch;
    0x00060442 subs r6, r3, r5                                   |     r6 = r3 - r5;
    0x00060444 ldr r3, [sp, 0xac]                                |     r3 = var_ach;
    0x00060446 adds r3, 1                                        |     r3++;
    0x00060448 subs r1, r6, r3                                   |     r1 = r6 - r3;
    0x0006044a add r5, r1                                        |     r5 += r1;
    0x0006044c add r2, r1                                        |     r2 += r1;
    0x0006044e strd r5, r2, [r4, 4]                              |     __asm ("strd r5, r2, [r4, 4]");
    0x00060452 movs r2, 1                                        |     r2 = 1;
    0x00060454 lsl.w ip, r2, r0                                  |     
    0x00060458 ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0006045a str r5, [sp, 0x24]                                |     var_24h = r5;
    0x0006045c add.w r5, ip, -1                                  |     r5 = ip + -1;
    0x00060460 cmp r1, r0                                        |     
    0x00060462 ittt lo                                           |     
                                                                 |     if (r1 >= r0) {
    0x00060464 movlo r2, r0                                      |         r2 = r0;
                                                                 |     }
                                                                 |     if (r1 >= r0) {
    0x00060466 addlo r2, r2, r3                                  |         r2 += r3;
                                                                 |     }
                                                                 |     if (r1 >= r0) {
    0x00060468 sublo r2, r2, r6                                  |         r2 -= r6;
                                                                 |     }
    0x0006046a str r2, [sp, 0x3c]                                |     var_3ch = r2;
    0x0006046c ldr r0, [sp, 0x3c]                                |     r0 = var_3ch;
    0x0006046e ldr r2, [sp, 0x40]                                |     r2 = var_40h;
    0x00060470 str r0, [r4, 0x10]                                |     *((r4 + 0x10)) = r0;
    0x00060472 cmp r1, r2                                        |     
    0x00060474 ldr r0, [sp, 0x44]                                |     r0 = var_44h;
    0x00060476 itet lo                                           |     
                                                                 |     if (r1 >= r2) {
    0x00060478 addlo r2, r2, r3                                  |         r2 += r3;
                                                                 |     }
                                                                 |     if (r1 < r2) {
    0x0006047a movhs r2, 1                                       |         r2 = 1;
                                                                 |     }
                                                                 |     if (r1 >= r2) {
    0x0006047c sublo r2, r2, r6                                  |         r2 -= r6;
                                                                 |     }
    0x0006047e cmp r5, 3                                         |     
    0x00060480 str r2, [sp, 0x40]                                |     var_40h = r2;
    0x00060482 str r2, [r0, 0xc]                                 |     *((r0 + 0xc)) = r2;
    0x00060484 ldr r2, [r0, 0x14]                                |     r2 = *((r0 + 0x14));
    0x00060486 add.w r2, r2, 1                                   |     r2++;
    0x0006048a str r2, [r0, 0x14]                                |     *((r0 + 0x14)) = r2;
    0x0006048c ldr r2, [r0, 0x18]                                |     r2 = *((r0 + 0x18));
                                                                 |     if (r5 < 3) {
    0x0006048e bls 0x60556                                       |         goto label_65;
                                                                 |     }
    0x00060490 lsrs r4, r5, 2                                    |     r4 = r5 >> 2;
    0x00060492 subs r0, r3, r6                                   |     r0 = r3 - r6;
    0x00060494 vmov.i32 q13, 0                                   |     __asm ("vmov.i32 q13, 0");
    0x00060498 add.w r4, r2, r4, lsl 5                           |     r4 = r2 + (r4 << 5);
    0x0006049c vdup.32 q11, r0                                   |     __asm ("vdup.32 q11, r0");
    0x000604a0 mov r0, r2                                        |     r0 = r2;
    0x000604a2 vdup.32 q12, r1                                   |     __asm ("vdup.32 q12, r1");
                                                                 |     do {
    0x000604a6 add.w r7, r0, 8                                   |         r7 = r0 + 8;
    0x000604aa vld2.32 {d16, d17, d18, d19}, [r0]                |         __asm ("vld2.32 {d16, d17, d18, d19}, [r0]");
    0x000604ae vadd.i32 q10, q11, q8                             |         __asm ("vadd.i32 q10, q11, q8");
    0x000604b2 vcge.u32 q8, q8, q12                              |         __asm ("vcge.u32 q8, q8, q12");
    0x000604b6 vbsl q8, q10, q13                                 |         __asm ("vbsl q8, q10, q13");
    0x000604ba vst1.32 {d16[0]}, [r0]                            |         __asm ("vst1.32 {d16[0]}, [r0]");
    0x000604be vst1.32 {d16[1]}, [r7]                            |         __asm ("vst1.32 {d16[1]}, [r7]");
    0x000604c2 add.w r7, r0, 0x10                                |         r7 = r0 + 0x10;
    0x000604c6 vst1.32 {d17[0]}, [r7]                            |         __asm ("vst1.32 {d17[0]}, [r7]");
    0x000604ca add.w r7, r0, 0x18                                |         r7 = r0 + 0x18;
    0x000604ce adds r0, 0x20                                     |         r0 += 0x20;
    0x000604d0 cmp r4, r0                                        |         
    0x000604d2 vst1.32 {d17[1]}, [r7]                            |         __asm ("vst1.32 {d17[1]}, [r7]");
    0x000604d6 bne 0x604a6                                       |         
                                                                 |     } while (r4 != r0);
    0x000604d8 bic r7, r5, 3                                     |     r7 = BIT_MASK (r5, 3);
                                                                 |     do {
    0x000604dc ldr.w r4, [r2, r7, lsl 3]                         |         offset_0 = r7 << 3;
                                                                 |         r4 = *((r2 + offset_0));
    0x000604e0 lsl.w lr, r7, 3                                   |         lr = r7 << 3;
    0x000604e4 cmp r1, r4                                        |         
    0x000604e6 itet ls                                           |         
                                                                 |         if (r1 > r4) {
    0x000604e8 subls r0, r3, r6                                  |             r0 = r3 - r6;
                                                                 |         }
                                                                 |         if (r1 <= r4) {
    0x000604ea movhi r0, 0                                       |             r0 = 0;
                                                                 |         }
                                                                 |         if (r1 > r4) {
    0x000604ec addls r0, r0, r4                                  |             r0 += r4;
                                                                 |         }
    0x000604ee str.w r0, [r2, lr]                                |         __asm ("str.w r0, [r2, lr]");
    0x000604f2 adds r0, r7, 1                                    |         r0 = r7 + 1;
    0x000604f4 cmp ip, r0                                        |         
                                                                 |         if (ip >= r0) {
    0x000604f6 bls 0x6053a                                       |             
    0x000604f8 add.w r4, lr, 8                                   |             r4 = lr + 8;
    0x000604fc ldr r5, [r2, r4]                                  |             r5 = *((r2 + r4));
    0x000604fe cmp r1, r5                                        |             
    0x00060500 itet ls                                           |             
                                                                 |             if (r1 > r5) {
    0x00060502 subls r0, r3, r6                                  |                 r0 = r3 - r6;
                                                                 |             }
                                                                 |             if (r1 <= r5) {
    0x00060504 movhi r0, 0                                       |                 r0 = 0;
                                                                 |             }
                                                                 |             if (r1 > r5) {
    0x00060506 addls r0, r0, r5                                  |                 r0 += r5;
                                                                 |             }
    0x00060508 str r0, [r2, r4]                                  |             *((r2 + r4)) = r0;
    0x0006050a adds r0, r7, 2                                    |             r0 = r7 + 2;
    0x0006050c cmp ip, r0                                        |             
                                                                 |             if (ip < r0) {
    0x0006050e bls 0x6053a                                       |                 goto label_66;
                                                                 |             }
    0x00060510 add.w r4, lr, 0x10                                |             r4 = lr + 0x10;
    0x00060514 adds r7, 3                                        |             r7 += 3;
    0x00060516 ldr r5, [r2, r4]                                  |             r5 = *((r2 + r4));
    0x00060518 cmp r1, r5                                        |             
    0x0006051a itet ls                                           |             
                                                                 |             if (r1 > r5) {
    0x0006051c subls r0, r3, r6                                  |                 r0 = r3 - r6;
                                                                 |             }
                                                                 |             if (r1 <= r5) {
    0x0006051e movhi r0, 0                                       |                 r0 = 0;
                                                                 |             }
                                                                 |             if (r1 > r5) {
    0x00060520 addls r0, r0, r5                                  |                 r0 += r5;
                                                                 |             }
    0x00060522 cmp ip, r7                                        |             
    0x00060524 str r0, [r2, r4]                                  |             *((r2 + r4)) = r0;
                                                                 |             if (ip < r7) {
    0x00060526 bls 0x6053a                                       |                 goto label_66;
                                                                 |             }
    0x00060528 add.w r0, lr, 0x18                                |             r0 = lr + 0x18;
    0x0006052c ldr r4, [r2, r0]                                  |             r4 = *((r2 + r0));
    0x0006052e cmp r1, r4                                        |             
    0x00060530 itet ls                                           |             
                                                                 |             if (r1 > r4) {
    0x00060532 subls r3, r3, r6                                  |                 r3 -= r6;
                                                                 |             }
                                                                 |             if (r1 <= r4) {
    0x00060534 movhi r3, 0                                       |                 r3 = 0;
                                                                 |             }
                                                                 |             if (r1 > r4) {
    0x00060536 addls r3, r3, r4                                  |                 r3 += r4;
                                                                 |             }
    0x00060538 str r3, [r2, r0]                                  |             *((r2 + r0)) = r3;
                                                                 |         }
                                                                 | label_66:
    0x0006053a ldr r3, [sp, 0x44]                                |         r3 = var_44h;
    0x0006053c movs r2, 0                                        |         r2 = 0;
    0x0006053e str r2, [r3, 0x1c]                                |         *((r3 + 0x1c)) = r2;
    0x00060540 ldr r2, [sp, 0x24]                                |         r2 = var_24h;
    0x00060542 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00060544 subs r3, r3, r2                                   |         r3 -= r2;
    0x00060546 ldr r2, [sp, 0xac]                                |         r2 = var_ach;
    0x00060548 b.w 0x5fd0a                                       |         goto label_26;
                                                                 | label_34:
    0x0006054c ldr r0, [sp, 0x90]                                |         r0 = var_90h;
    0x0006054e b 0x6014c                                         |         goto label_27;
                                                                 | label_45:
    0x00060550 mvn r0, 0x45                                      |         r0 = ~0x45;
    0x00060554 b 0x60190                                         |         goto label_28;
                                                                 | label_65:
    0x00060556 movs r7, 0                                        |         r7 = 0;
    0x00060558 b 0x604dc                                         |         
                                                                 |     } while (1);
                                                                 | label_47:
    0x0006055a blx 0x33c8                                        |     fcn_000033c8 ();
    0x0006055e nop                                               |     
                                                                 |     if (r7 != 0) {
    0x00060560 bne 0x6065c                                       |         void (*0x6065c)() ();
                                                                 |     }
    0x00060562 movs r6, r0                                       |     r6 = r0;
    0x00060564 lsls r0, r6, 7                                    |     r0 = r6 << 7;
    0x00060566 movs r0, r0                                       |     
    0x00060568 ldm r4, {r3, r4, r6}                              |     r3 = *(r4);
                                                                 |     r4 = *((r4 + 4));
                                                                 |     r6 = *((r4 + 8));
    0x0006056a movs r6, r0                                       |     r6 = 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/libzstd.so.1.5.0 @ 0x60cfc */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.00060cfc ()                      | void fcn_00060cfc (int16_t arg_10h, int16_t arg1, uint32_t arg2, int16_t arg3) {
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
                                                 |     r2 = arg3;
    0x00060cfc push {r4, r5, r6, lr}             |     
    0x00060cfe ldr r4, [r0, 0x40]                |     r4 = *(arg_10hx40);
    0x00060d00 cmp r4, 2                         |     
                                                 |     if (r4 == 2) {
    0x00060d02 beq 0x60d2c                       |         goto label_1;
                                                 |     }
                                                 |     if (r1 == 0) {
    0x00060d04 cbz r1, 0x60d24                   |         goto label_2;
                                                 |     }
    0x00060d06 ldr r4, [r0]                      |     r4 = *(r0);
    0x00060d08 adds r5, r2, r1                   |     r5 = r2 + r1;
    0x00060d0a add.w ip, r2, -1                  |     
    0x00060d0e subs r5, 1                        |     r5--;
                                                 |     do {
    0x00060d10 ldrb lr, [ip, 1]!                 |         
    0x00060d14 ldr.w r2, [r4, lr, lsl 2]         |         offset_0 = lr << 2;
                                                 |         r2 = *((r4 + offset_0));
    0x00060d18 cmp r5, ip                        |         
    0x00060d1a add.w r2, r2, 2                   |         r2 += 2;
    0x00060d1e str.w r2, [r4, lr, lsl 2]         |         __asm ("str.w r2, [r4, lr, lsl 2]");
    0x00060d22 bne 0x60d10                       |         
                                                 |     } while (r5 != ip);
                                                 | label_2:
    0x00060d24 ldr r2, [r0, 0x18]                |     r2 = *(arg_10hx18);
    0x00060d26 add.w r2, r2, r1, lsl 1           |     r2 += (r1 << 1);
    0x00060d2a str r2, [r0, 0x18]                |     *(arg_10hx18) = r2;
                                                 | label_1:
    0x00060d2c cmp r1, 0x3f                      |     
                                                 |     if (r1 < 0x3f) {
    0x00060d2e bls 0x60da0                       |         goto label_3;
                                                 |     }
    0x00060d30 clz r1, r1                        |     r1 &= r1;
    0x00060d34 eor r1, r1, 0x1f                  |     r1 ^= 0x1f;
    0x00060d38 adds r1, 0x13                     |     r1 += 0x13;
                                                 | label_0:
    0x00060d3a ldr r6, [r0, 4]                   |     r6 = *((r0 + 4));
    0x00060d3c adds r3, 1                        |     r3++;
    0x00060d3e ldr r5, [r0, 0xc]                 |     r5 = *(arg_10hxc);
    0x00060d40 clz r3, r3                        |     r3 &= r3;
    0x00060d44 eor r3, r3, 0x1f                  |     r3 ^= 0x1f;
    0x00060d48 ldr r2, [sp, 0x10]                |     r2 = *(arg_10h);
    0x00060d4a ldr.w r4, [r6, r1, lsl 2]         |     offset_1 = r1 << 2;
                                                 |     r4 = *((r6 + offset_1));
    0x00060d4e subs r2, 3                        |     r2 -= 3;
    0x00060d50 adds r4, 1                        |     r4++;
    0x00060d52 cmp r2, 0x7f                      |     
    0x00060d54 str.w r4, [r6, r1, lsl 2]         |     __asm ("str.w r4, [r6, r1, lsl 2]");
    0x00060d58 ldr r1, [r0, 0x1c]                |     r1 = *(arg_10hx1c);
    0x00060d5a add.w r1, r1, 1                   |     r1++;
    0x00060d5e str r1, [r0, 0x1c]                |     *(arg_10hx1c) = r1;
    0x00060d60 ldr.w r1, [r5, r3, lsl 2]         |     offset_2 = r3 << 2;
                                                 |     r1 = *((r5 + offset_2));
    0x00060d64 add.w r1, r1, 1                   |     r1++;
    0x00060d68 str.w r1, [r5, r3, lsl 2]         |     __asm ("str.w r1, [r5, r3, lsl 2]");
    0x00060d6c ldr r3, [r0, 0x24]                |     r3 = *(arg_10hx24);
    0x00060d6e add.w r3, r3, 1                   |     r3++;
    0x00060d72 str r3, [r0, 0x24]                |     *(arg_10hx24) = r3;
                                                 |     if (r2 < 0x7f) {
    0x00060d74 bls 0x60d94                       |         goto label_4;
                                                 |     }
    0x00060d76 clz r3, r2                        |     r3 &= r2;
    0x00060d7a eor r3, r3, 0x1f                  |     r3 ^= 0x1f;
    0x00060d7e adds r3, 0x24                     |     r3 += 0x24;
                                                 |     do {
    0x00060d80 ldr r1, [r0, 8]                   |         r1 = *((r0 + 8));
    0x00060d82 ldr.w r2, [r1, r3, lsl 2]         |         offset_3 = r3 << 2;
                                                 |         r2 = *((r1 + offset_3));
    0x00060d86 adds r2, 1                        |         r2++;
    0x00060d88 str.w r2, [r1, r3, lsl 2]         |         __asm ("str.w r2, [r1, r3, lsl 2]");
    0x00060d8c ldr r3, [r0, 0x20]                |         r3 = *(arg_10hx20);
    0x00060d8e adds r3, 1                        |         r3++;
    0x00060d90 str r3, [r0, 0x20]                |         *(arg_10hx20) = r3;
    0x00060d92 pop {r4, r5, r6, pc}              |         
                                                 | label_4:
    0x00060d94 ldr r3, [pc, 0x10]                |         
    0x00060d96 add r3, pc                        |         r3 = 0xc1b42;
    0x00060d98 add r3, r2                        |         r3 += r2;
    0x00060d9a ldrb.w r3, [r3, 0x40]             |         r3 = *((r3 + 0x40));
    0x00060d9e b 0x60d80                         |         
                                                 |     } while (1);
                                                 | label_3:
    0x00060da0 ldr r2, [pc, 8]                   |     
    0x00060da2 add r2, pc                        |     r2 = 0xc1b52;
    0x00060da4 ldrb r1, [r2, r1]                 |     r1 = *((r2 + r1));
    0x00060da6 b 0x60d3a                         |     goto label_0;
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libzstd.so.1.5.0 @ 0x60ebc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00060ebc ()                                      | void fcn_00060ebc (int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00060ebc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00060ec0 mov r4, r0                                        |     r4 = r0;
    0x00060ec2 ldr r6, [r0, 0x40]                                |     r6 = *((r0 + 0x40));
    0x00060ec4 mov fp, r3                                        |     
    0x00060ec6 sub sp, 0xc                                       |     
    0x00060ec8 ldr.w r0, [pc, 0x6cc]                             |     
    0x00060ecc ldr.w r3, [pc, 0x6cc]                             |     r3 = *(0x6159c);
    0x00060ed0 ldr r7, [r4, 0x1c]                                |     r7 = *((r4 + 0x1c));
    0x00060ed2 add r0, pc                                        |     r0 = 0xc246e;
    0x00060ed4 ldr r3, [r0, r3]                                  |     
    0x00060ed6 ldr r3, [r3]                                      |     r3 = *(0xc246e);
    0x00060ed8 str r3, [sp, 4]                                   |     var_4h = r3;
    0x00060eda mov.w r3, 0                                       |     r3 = 0;
    0x00060ede movs r3, 0                                        |     r3 = 0;
    0x00060ee0 str r3, [r4, 0x38]                                |     *((r4 + 0x38)) = r3;
    0x00060ee2 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x00060ee4 bne.w 0x61094                                     |         
    0x00060ee8 ldr r0, [r4, 0x3c]                                |         r0 = *((r4 + 0x3c));
    0x00060eea cmp.w r2, 0x400                                   |         
    0x00060eee itt ls                                            |         
                                                                 |         if (r2 > 0x400) {
    0x00060ef0 movls r3, 1                                       |             r3 = 1;
                                                                 |         }
                                                                 |         if (r2 > 0x400) {
    0x00060ef2 strls r3, [r4, 0x38]                              |             *((r4 + 0x38)) = r3;
                                                                 |         }
    0x00060ef4 ldr.w r3, [r0, 0x400]                             |         r3 = *((r0 + 0x400));
    0x00060ef8 cmp r3, 2                                         |         
                                                                 |         if (r3 == 2) {
    0x00060efa beq.w 0x613d4                                     |             goto label_10;
                                                                 |         }
    0x00060efe cmp r6, 2                                         |         
                                                                 |         if (r6 != 2) {
    0x00060f00 bne.w 0x614ec                                     |             goto label_11;
                                                                 |         }
                                                                 | label_1:
    0x00060f04 ldrd r0, r2, [r4, 4]                              |         __asm ("ldrd r0, r2, [r4, 4]");
    0x00060f08 movs r5, 0x24                                     |         r5 = 0x24;
    0x00060f0a vmov.i32 q8, 1                                    |         __asm ("vmov.i32 q8, 1");
    0x00060f0e movs r7, 1                                        |         r7 = 1;
    0x00060f10 ldr r1, [r4, 0xc]                                 |         r1 = *((r4 + 0xc));
    0x00060f12 mov r3, r0                                        |         r3 = r0;
    0x00060f14 add.w r8, r0, 0x20                                |         r8 = r0 + 0x20;
    0x00060f18 add.w sb, r0, 0x30                                |         sb = r0 + 0x30;
    0x00060f1c add.w lr, r0, 0x40                                |         lr = r0 + 0x40;
    0x00060f20 vst1.32 {d16, d17}, [r3]!                         |         __asm ("vst1.32 {d16, d17}, [r3]!");
    0x00060f24 mov r6, r2                                        |         r6 = r2;
    0x00060f26 add.w sl, r2, 0x20                                |         sl = r2 + 0x20;
    0x00060f2a add.w ip, r2, 0x90                                |         
    0x00060f2e vst1.32 {d16, d17}, [r3]                          |         __asm ("vst1.32 {d16, d17}, [r3]");
    0x00060f32 add.w r3, r0, 0x60                                |         r3 = r0 + 0x60;
    0x00060f36 vst1.32 {d16, d17}, [r8]                          |         __asm ("vst1.32 {d16, d17}, [r8]");
    0x00060f3a add.w r8, r0, 0x50                                |         r8 = r0 + 0x50;
    0x00060f3e vst1.32 {d16, d17}, [sb]                          |         __asm ("vst1.32 {d16, d17}, [sb]");
    0x00060f42 add.w sb, r2, 0x40                                |         sb = r2 + 0x40;
    0x00060f46 vst1.32 {d16, d17}, [lr]                          |         __asm ("vst1.32 {d16, d17}, [lr]");
    0x00060f4a add.w lr, r0, 0x70                                |         lr = r0 + 0x70;
    0x00060f4e adds r0, 0x80                                     |         r0 += 0x80;
    0x00060f50 vst1.32 {d16, d17}, [r8]                          |         __asm ("vst1.32 {d16, d17}, [r8]");
    0x00060f54 add.w r8, r2, 0x50                                |         r8 = r2 + 0x50;
    0x00060f58 vst1.32 {d16, d17}, [r3]                          |         __asm ("vst1.32 {d16, d17}, [r3]");
    0x00060f5c add.w r3, r2, 0x30                                |         r3 = r2 + 0x30;
    0x00060f60 vst1.32 {d16, d17}, [lr]                          |         __asm ("vst1.32 {d16, d17}, [lr]");
    0x00060f64 add.w lr, r2, 0x80                                |         lr = r2 + 0x80;
    0x00060f68 vst1.32 {d16, d17}, [r0]                          |         __asm ("vst1.32 {d16, d17}, [r0]");
    0x00060f6c add.w r0, r2, 0x60                                |         r0 = r2 + 0x60;
    0x00060f70 str r5, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r5;
    0x00060f72 movs r5, 0x35                                     |         r5 = 0x35;
    0x00060f74 vst1.32 {d16, d17}, [r6]!                         |         __asm ("vst1.32 {d16, d17}, [r6]!");
    0x00060f78 vst1.32 {d16, d17}, [r6]                          |         __asm ("vst1.32 {d16, d17}, [r6]");
    0x00060f7c add.w r6, r2, 0x70                                |         r6 = r2 + 0x70;
    0x00060f80 vst1.32 {d16, d17}, [sl]                          |         __asm ("vst1.32 {d16, d17}, [sl]");
    0x00060f84 mov.w sl, 0x500                                   |         sl = 0x500;
    0x00060f88 vst1.32 {d16, d17}, [r3]                          |         __asm ("vst1.32 {d16, d17}, [r3]");
    0x00060f8c add.w r3, r2, 0xa0                                |         r3 = r2 + 0xa0;
    0x00060f90 vst1.32 {d16, d17}, [sb]                          |         __asm ("vst1.32 {d16, d17}, [sb]");
    0x00060f94 add.w sb, r2, 0xb0                                |         sb = r2 + 0xb0;
    0x00060f98 vst1.32 {d16, d17}, [r8]                          |         __asm ("vst1.32 {d16, d17}, [r8]");
    0x00060f9c add.w r8, r2, 0xc0                                |         r8 = r2 + 0xc0;
    0x00060fa0 vst1.32 {d16, d17}, [r0]                          |         __asm ("vst1.32 {d16, d17}, [r0]");
    0x00060fa4 add.w r0, r1, 0x30                                |         r0 = r1 + 0x30;
    0x00060fa8 vst1.32 {d16, d17}, [r6]                          |         __asm ("vst1.32 {d16, d17}, [r6]");
    0x00060fac add.w r6, r1, 0x20                                |         r6 = r1 + 0x20;
    0x00060fb0 vst1.32 {d16, d17}, [lr]                          |         __asm ("vst1.32 {d16, d17}, [lr]");
    0x00060fb4 add.w lr, r1, 0x60                                |         lr = r1 + 0x60;
    0x00060fb8 vst1.32 {d16, d17}, [ip]                          |         __asm ("vst1.32 {d16, d17}, [ip]");
    0x00060fbc add.w ip, r1, 0x40                                |         
    0x00060fc0 vst1.32 {d16, d17}, [r3]                          |         __asm ("vst1.32 {d16, d17}, [r3]");
    0x00060fc4 add.w r3, r1, 0x70                                |         r3 = r1 + 0x70;
    0x00060fc8 vst1.32 {d16, d17}, [sb]                          |         __asm ("vst1.32 {d16, d17}, [sb]");
    0x00060fcc add.w sb, r1, 0x50                                |         sb = r1 + 0x50;
    0x00060fd0 vst1.32 {d16, d17}, [r8]                          |         __asm ("vst1.32 {d16, d17}, [r8]");
    0x00060fd4 mov.w r8, 5                                       |         r8 = 5;
    0x00060fd8 str.w r7, [r2, 0xd0]                              |         __asm ("str.w r7, [r2, 0xd0]");
    0x00060fdc movs r2, 0x21                                     |         r2 = 0x21;
    0x00060fde movs r7, 0x20                                     |         r7 = 0x20;
    0x00060fe0 str r5, [r4, 0x20]                                |         *((r4 + 0x20)) = r5;
    0x00060fe2 vst1.32 {d16, d17}, [r1]!                         |         __asm ("vst1.32 {d16, d17}, [r1]!");
    0x00060fe6 vst1.32 {d16, d17}, [r1]                          |         __asm ("vst1.32 {d16, d17}, [r1]");
    0x00060fea vst1.32 {d16, d17}, [r6]                          |         __asm ("vst1.32 {d16, d17}, [r6]");
    0x00060fee vst1.32 {d16, d17}, [r0]                          |         __asm ("vst1.32 {d16, d17}, [r0]");
    0x00060ff2 vst1.32 {d16, d17}, [ip]                          |         __asm ("vst1.32 {d16, d17}, [ip]");
    0x00060ff6 vst1.32 {d16, d17}, [sb]                          |         __asm ("vst1.32 {d16, d17}, [sb]");
    0x00060ffa vst1.32 {d16, d17}, [lr]                          |         __asm ("vst1.32 {d16, d17}, [lr]");
    0x00060ffe vst1.32 {d16, d17}, [r3]                          |         __asm ("vst1.32 {d16, d17}, [r3]");
    0x00061002 str r7, [r4, 0x24]                                |         *((r4 + 0x24)) = r7;
                                                                 | label_0:
    0x00061004 ldr r3, [r4, 0x40]                                |         r3 = *((r4 + 0x40));
    0x00061006 cmp r3, 2                                         |         
                                                                 |         if (r3 != 2) {
    0x00061008 beq 0x61026                                       |             
    0x0006100a ldr r3, [r4, 0x18]                                |             r3 = *((r4 + 0x18));
    0x0006100c adds r3, 1                                        |             r3++;
    0x0006100e clz r1, r3                                        |             r1 &= r3;
    0x00061012 eor r1, r1, 0x1f                                  |             r1 ^= 0x1f;
    0x00061016 lsls r0, r1, 8                                    |             r0 = r1 << 8;
    0x00061018 cmp.w fp, 0                                       |             
                                                                 |             if (fp != 0) {
    0x0006101c beq 0x61024                                       |                 
    0x0006101e lsls r3, r3, 8                                    |                 r3 <<= 8;
    0x00061020 lsrs r3, r1                                       |                 r3 >>= r1;
    0x00061022 add r0, r3                                        |                 r0 += r3;
                                                                 |             }
    0x00061024 str r0, [r4, 0x28]                                |             *((r4 + 0x28)) = r0;
                                                                 |         }
    0x00061026 add.w r3, r4, 0x1c                                |         r3 = r4 + 0x1c;
    0x0006102a vmov.i32 d17, 1                                   |         __asm ("vmov.i32 d17, 1");
    0x0006102e vmov.i32 d18, 0x1f                                |         __asm ("vmov.i32 d18, 0x1f");
    0x00061032 vld1.32 {d16}, [r3]                               |         __asm ("vld1.32 {d16}, [r3]");
    0x00061036 vadd.i32 d16, d16, d17                            |         __asm ("vadd.i32 d16, d16, d17");
    0x0006103a vclz.i32 d17, d16                                 |         __asm ("vclz.i32 d17, d16");
    0x0006103e vshl.i32 d16, d16, 8                              |         __asm ("vshl.i32 d16, d16, 8");
    0x00061042 veor d17, d17, d18                                |         __asm ("veor d17, d17, d18");
    0x00061046 vneg.s32 d18, d17                                 |         __asm ("vneg.s32 d18, d17");
    0x0006104a vshl.i32 d17, d17, 8                              |         __asm ("vshl.i32 d17, d17, 8");
    0x0006104e vshl.u32 d16, d16, d18                            |         __asm ("vshl.u32 d16, d16, d18");
    0x00061052 vadd.i32 d16, d16, d17                            |         __asm ("vadd.i32 d16, d16, d17");
    0x00061056 cmp.w fp, 0                                       |         
                                                                 |         if (fp != 0) {
    0x0006105a beq 0x61068                                       |             
    0x0006105c lsls r2, r2, 8                                    |             r2 <<= 8;
    0x0006105e vorr d17, d16, d16                                |             __asm ("vorr d17, d16, d16");
    0x00061062 lsr.w r2, r2, r8                                  |             r2 >>= r8;
    0x00061066 add sl, r2                                        |             sl += r2;
                                                                 |         }
    0x00061068 add.w r3, r4, 0x2c                                |         r3 = r4 + 0x2c;
    0x0006106c ldr.w r2, [pc, 0x530]                             |         
    0x00061070 vst1.32 {d17}, [r3]                               |         __asm ("vst1.32 {d17}, [r3]");
    0x00061074 ldr.w r3, [pc, 0x524]                             |         r3 = *(0x6159c);
    0x00061078 add r2, pc                                        |         r2 = 0xc261c;
    0x0006107a str.w sl, [r4, 0x34]                              |         __asm ("str.w sl, [r4, 0x34]");
    0x0006107e ldr r3, [r2, r3]                                  |         r3 = *(0xc261c);
    0x00061080 ldr r2, [r3]                                      |         r2 = *(0xc261c);
    0x00061082 ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x00061084 eors r2, r3                                       |         r2 ^= r3;
    0x00061086 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0006108a bne.w 0x61594                                     |             goto label_12;
                                                                 |         }
    0x0006108e add sp, 0xc                                       |         
    0x00061090 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 |     }
    0x00061094 cmp r6, 2                                         |     
                                                                 |     if (r6 == 2) {
    0x00061096 beq 0x610ce                                       |         goto label_13;
                                                                 |     }
    0x00061098 ldr r3, [r4]                                      |     r3 = *(r4);
    0x0006109a vmov.i32 q9, 0                                    |     __asm ("vmov.i32 q9, 0");
    0x0006109e vmov.i32 q10, 1                                   |     __asm ("vmov.i32 q10, 1");
    0x000610a2 add.w r2, r3, 0x400                               |     r2 = r3 + 0x400;
                                                                 |     do {
    0x000610a6 vld1.32 {d16, d17}, [r3]                          |         __asm ("vld1.32 {d16, d17}, [r3]");
    0x000610aa vshr.u32 q8, q8, 5                                |         __asm ("vshr.u32 q8, q8, 5");
    0x000610ae vadd.i32 q8, q8, q10                              |         __asm ("vadd.i32 q8, q8, q10");
    0x000610b2 vadd.i32 q9, q9, q8                               |         __asm ("vadd.i32 q9, q9, q8");
    0x000610b6 vst1.32 {d16, d17}, [r3]!                         |         __asm ("vst1.32 {d16, d17}, [r3]!");
    0x000610ba cmp r3, r2                                        |         
    0x000610bc bne 0x610a6                                       |         
                                                                 |     } while (r3 != r2);
    0x000610be vadd.i32 d18, d18, d19                            |     __asm ("vadd.i32 d18, d18, d19");
    0x000610c2 add.w r3, r4, 0x18                                |     r3 = r4 + 0x18;
    0x000610c6 vpadd.i32 d18, d18, d18                           |     __asm ("vpadd.i32 d18, d18, d18");
    0x000610ca vst1.32 {d18[0]}, [r3]                            |     __asm ("vst1.32 {d18[0]}, [r3]");
                                                                 | label_13:
    0x000610ce ldr r2, [r4, 4]                                   |     r2 = *((r4 + 4));
    0x000610d0 add.w r5, r4, 0x1c                                |     r5 = r4 + 0x1c;
    0x000610d4 vmov.i32 q9, 1                                    |     __asm ("vmov.i32 q9, 1");
    0x000610d8 ldr r3, [r4, 8]                                   |     r3 = *((r4 + 8));
    0x000610da add.w sl, r2, 0x20                                |     sl = r2 + 0x20;
    0x000610de add.w sb, r2, 0x30                                |     sb = r2 + 0x30;
    0x000610e2 vld1.32 {d16, d17}, [r2]                          |     __asm ("vld1.32 {d16, d17}, [r2]");
    0x000610e6 add.w r8, r2, 0x40                                |     r8 = r2 + 0x40;
    0x000610ea add.w lr, r2, 0x50                                |     lr = r2 + 0x50;
    0x000610ee add.w ip, r2, 0x60                                |     
    0x000610f2 vshr.u32 q8, q8, 4                                |     __asm ("vshr.u32 q8, q8, 4");
    0x000610f6 add.w r7, r2, 0x70                                |     r7 = r2 + 0x70;
    0x000610fa add.w r6, r2, 0x80                                |     r6 = r2 + 0x80;
    0x000610fe mov r1, r3                                        |     r1 = r3;
    0x00061100 vadd.i32 q8, q8, q9                               |     __asm ("vadd.i32 q8, q8, q9");
    0x00061104 add.w r0, r3, 0x20                                |     r0 = r3 + 0x20;
    0x00061108 vst1.32 {d16, d17}, [r2]!                         |     __asm ("vst1.32 {d16, d17}, [r2]!");
    0x0006110c vld1.32 {d20, d21}, [r2]                          |     __asm ("vld1.32 {d20, d21}, [r2]");
    0x00061110 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061114 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061118 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006111c vst1.32 {d20, d21}, [r2]                          |     __asm ("vst1.32 {d20, d21}, [r2]");
    0x00061120 add.w r2, r3, 0x60                                |     r2 = r3 + 0x60;
    0x00061124 vld1.32 {d20, d21}, [sl]                          |     __asm ("vld1.32 {d20, d21}, [sl]");
    0x00061128 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x0006112c vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061130 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x00061134 vst1.32 {d20, d21}, [sl]                          |     __asm ("vst1.32 {d20, d21}, [sl]");
    0x00061138 add.w sl, r3, 0x30                                |     sl = r3 + 0x30;
    0x0006113c vld1.32 {d20, d21}, [sb]                          |     __asm ("vld1.32 {d20, d21}, [sb]");
    0x00061140 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061144 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061148 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006114c vst1.32 {d20, d21}, [sb]                          |     __asm ("vst1.32 {d20, d21}, [sb]");
    0x00061150 add.w sb, r3, 0x40                                |     sb = r3 + 0x40;
    0x00061154 vld1.32 {d20, d21}, [r8]                          |     __asm ("vld1.32 {d20, d21}, [r8]");
    0x00061158 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x0006115c vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061160 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x00061164 vst1.32 {d20, d21}, [r8]                          |     __asm ("vst1.32 {d20, d21}, [r8]");
    0x00061168 add.w r8, r3, 0x50                                |     r8 = r3 + 0x50;
    0x0006116c vld1.32 {d20, d21}, [lr]                          |     __asm ("vld1.32 {d20, d21}, [lr]");
    0x00061170 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061174 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061178 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006117c vst1.32 {d20, d21}, [lr]                          |     __asm ("vst1.32 {d20, d21}, [lr]");
    0x00061180 add.w lr, r3, 0x70                                |     lr = r3 + 0x70;
    0x00061184 vld1.32 {d20, d21}, [ip]                          |     __asm ("vld1.32 {d20, d21}, [ip]");
    0x00061188 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x0006118c vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061190 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x00061194 vst1.32 {d20, d21}, [ip]                          |     __asm ("vst1.32 {d20, d21}, [ip]");
    0x00061198 add.w ip, r3, 0x80                                |     
    0x0006119c vld1.32 {d20, d21}, [r7]                          |     __asm ("vld1.32 {d20, d21}, [r7]");
    0x000611a0 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x000611a4 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x000611a8 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x000611ac vst1.32 {d20, d21}, [r7]                          |     __asm ("vst1.32 {d20, d21}, [r7]");
    0x000611b0 add.w r7, r3, 0x90                                |     r7 = r3 + 0x90;
    0x000611b4 vld1.32 {d20, d21}, [r6]                          |     __asm ("vld1.32 {d20, d21}, [r6]");
    0x000611b8 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x000611bc vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x000611c0 vadd.i32 q8, q10, q8                              |     __asm ("vadd.i32 q8, q10, q8");
    0x000611c4 vst1.32 {d20, d21}, [r6]                          |     __asm ("vst1.32 {d20, d21}, [r6]");
    0x000611c8 add.w r6, r3, 0xa0                                |     r6 = r3 + 0xa0;
    0x000611cc vadd.i32 d16, d16, d17                            |     __asm ("vadd.i32 d16, d16, d17");
    0x000611d0 vpadd.i32 d16, d16, d16                           |     __asm ("vpadd.i32 d16, d16, d16");
    0x000611d4 vst1.32 {d16[0]}, [r5]                            |     __asm ("vst1.32 {d16[0]}, [r5]");
    0x000611d8 vld1.32 {d16, d17}, [r3]                          |     __asm ("vld1.32 {d16, d17}, [r3]");
    0x000611dc vshr.u32 q8, q8, 4                                |     __asm ("vshr.u32 q8, q8, 4");
    0x000611e0 vadd.i32 q8, q8, q9                               |     __asm ("vadd.i32 q8, q8, q9");
    0x000611e4 vst1.32 {d16, d17}, [r1]!                         |     __asm ("vst1.32 {d16, d17}, [r1]!");
    0x000611e8 vld1.32 {d20, d21}, [r1]                          |     __asm ("vld1.32 {d20, d21}, [r1]");
    0x000611ec vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x000611f0 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x000611f4 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x000611f8 vst1.32 {d20, d21}, [r1]                          |     __asm ("vst1.32 {d20, d21}, [r1]");
    0x000611fc add.w r1, r3, 0xc0                                |     r1 = r3 + 0xc0;
    0x00061200 vld1.32 {d20, d21}, [r0]                          |     __asm ("vld1.32 {d20, d21}, [r0]");
    0x00061204 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061208 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x0006120c vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x00061210 vst1.32 {d20, d21}, [r0]                          |     __asm ("vst1.32 {d20, d21}, [r0]");
    0x00061214 add.w r0, r3, 0xb0                                |     r0 = r3 + 0xb0;
    0x00061218 vld1.32 {d20, d21}, [sl]                          |     __asm ("vld1.32 {d20, d21}, [sl]");
    0x0006121c vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061220 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061224 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x00061228 vst1.32 {d20, d21}, [sl]                          |     __asm ("vst1.32 {d20, d21}, [sl]");
    0x0006122c vld1.32 {d20, d21}, [sb]                          |     __asm ("vld1.32 {d20, d21}, [sb]");
    0x00061230 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061234 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061238 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006123c vst1.32 {d20, d21}, [sb]                          |     __asm ("vst1.32 {d20, d21}, [sb]");
    0x00061240 vld1.32 {d20, d21}, [r8]                          |     __asm ("vld1.32 {d20, d21}, [r8]");
    0x00061244 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061248 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x0006124c vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x00061250 vst1.32 {d20, d21}, [r8]                          |     __asm ("vst1.32 {d20, d21}, [r8]");
    0x00061254 ldr.w sb, [r4, 0xc]                               |     sb = *((r4 + 0xc));
    0x00061258 vld1.32 {d20, d21}, [r2]                          |     __asm ("vld1.32 {d20, d21}, [r2]");
    0x0006125c vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061260 add.w r8, sb, 0x20                                |     r8 = sb + 0x20;
    0x00061264 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061268 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006126c vst1.32 {d20, d21}, [r2]                          |     __asm ("vst1.32 {d20, d21}, [r2]");
    0x00061270 mov r2, sb                                        |     r2 = sb;
    0x00061272 vld1.32 {d20, d21}, [lr]                          |     __asm ("vld1.32 {d20, d21}, [lr]");
    0x00061276 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x0006127a vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x0006127e vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x00061282 vst1.32 {d20, d21}, [lr]                          |     __asm ("vst1.32 {d20, d21}, [lr]");
    0x00061286 add.w lr, sb, 0x30                                |     lr = sb + 0x30;
    0x0006128a vld1.32 {d20, d21}, [ip]                          |     __asm ("vld1.32 {d20, d21}, [ip]");
    0x0006128e vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061292 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061296 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006129a vst1.32 {d20, d21}, [ip]                          |     __asm ("vst1.32 {d20, d21}, [ip]");
    0x0006129e add.w ip, sb, 0x40                                |     
    0x000612a2 vld1.32 {d20, d21}, [r7]                          |     __asm ("vld1.32 {d20, d21}, [r7]");
    0x000612a6 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x000612aa vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x000612ae vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x000612b2 vst1.32 {d20, d21}, [r7]                          |     __asm ("vst1.32 {d20, d21}, [r7]");
    0x000612b6 add.w r7, sb, 0x50                                |     r7 = sb + 0x50;
    0x000612ba vld1.32 {d20, d21}, [r6]                          |     __asm ("vld1.32 {d20, d21}, [r6]");
    0x000612be vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x000612c2 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x000612c6 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x000612ca vst1.32 {d20, d21}, [r6]                          |     __asm ("vst1.32 {d20, d21}, [r6]");
    0x000612ce add.w r6, sb, 0x60                                |     r6 = sb + 0x60;
    0x000612d2 vld1.32 {d20, d21}, [r0]                          |     __asm ("vld1.32 {d20, d21}, [r0]");
    0x000612d6 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x000612da vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x000612de vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x000612e2 vst1.32 {d20, d21}, [r0]                          |     __asm ("vst1.32 {d20, d21}, [r0]");
    0x000612e6 add.w r0, sb, 0x70                                |     r0 = sb + 0x70;
    0x000612ea vld1.32 {d20, d21}, [r1]                          |     __asm ("vld1.32 {d20, d21}, [r1]");
    0x000612ee vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x000612f2 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x000612f6 vadd.i32 q8, q10, q8                              |     __asm ("vadd.i32 q8, q10, q8");
    0x000612fa vst1.32 {d20, d21}, [r1]                          |     __asm ("vst1.32 {d20, d21}, [r1]");
    0x000612fe ldr.w r1, [r3, 0xd0]                              |     r1 = *((r3 + 0xd0));
    0x00061302 vadd.i32 d16, d16, d17                            |     __asm ("vadd.i32 d16, d16, d17");
    0x00061306 lsrs r1, r1, 4                                    |     r1 >>= 4;
    0x00061308 vpadd.i32 d16, d16, d16                           |     __asm ("vpadd.i32 d16, d16, d16");
    0x0006130c adds r1, 1                                        |     r1++;
    0x0006130e str.w r1, [r3, 0xd0]                              |     __asm ("str.w r1, [r3, 0xd0]");
    0x00061312 vmov.32 r3, d16[0]                                |     __asm ("vmov.32 r3, d16[0]");
    0x00061316 add r1, r3                                        |     r1 += r3;
    0x00061318 str r1, [r4, 0x20]                                |     *((r4 + 0x20)) = r1;
    0x0006131a vld1.32 {d16, d17}, [sb]                          |     __asm ("vld1.32 {d16, d17}, [sb]");
    0x0006131e vshr.u32 q8, q8, 4                                |     __asm ("vshr.u32 q8, q8, 4");
    0x00061322 vadd.i32 q8, q8, q9                               |     __asm ("vadd.i32 q8, q8, q9");
    0x00061326 vst1.32 {d16, d17}, [r2]!                         |     __asm ("vst1.32 {d16, d17}, [r2]!");
    0x0006132a vld1.32 {d20, d21}, [r2]                          |     __asm ("vld1.32 {d20, d21}, [r2]");
    0x0006132e vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061332 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061336 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006133a vst1.32 {d20, d21}, [r2]                          |     __asm ("vst1.32 {d20, d21}, [r2]");
    0x0006133e vld1.32 {d20, d21}, [r8]                          |     __asm ("vld1.32 {d20, d21}, [r8]");
    0x00061342 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061346 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x0006134a vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006134e vst1.32 {d20, d21}, [r8]                          |     __asm ("vst1.32 {d20, d21}, [r8]");
    0x00061352 vld1.32 {d20, d21}, [lr]                          |     __asm ("vld1.32 {d20, d21}, [lr]");
    0x00061356 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x0006135a vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x0006135e vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x00061362 vst1.32 {d20, d21}, [lr]                          |     __asm ("vst1.32 {d20, d21}, [lr]");
    0x00061366 vld1.32 {d20, d21}, [ip]                          |     __asm ("vld1.32 {d20, d21}, [ip]");
    0x0006136a vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x0006136e vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061372 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x00061376 vst1.32 {d20, d21}, [ip]                          |     __asm ("vst1.32 {d20, d21}, [ip]");
    0x0006137a vld1.32 {d20, d21}, [r7]                          |     __asm ("vld1.32 {d20, d21}, [r7]");
    0x0006137e vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061382 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x00061386 vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006138a vst1.32 {d20, d21}, [r7]                          |     __asm ("vst1.32 {d20, d21}, [r7]");
    0x0006138c ldr r2, [pc, 0x23c]                               |     r2 = *(0x615cc);
    0x0006138e vld1.32 {d20, d21}, [r6]                          |     __asm ("vld1.32 {d20, d21}, [r6]");
    0x00061392 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x00061396 vadd.i32 q10, q10, q9                             |     __asm ("vadd.i32 q10, q10, q9");
    0x0006139a vadd.i32 q8, q8, q10                              |     __asm ("vadd.i32 q8, q8, q10");
    0x0006139e vst1.32 {d20, d21}, [r6]                          |     __asm ("vst1.32 {d20, d21}, [r6]");
    0x000613a2 vld1.32 {d20, d21}, [r0]                          |     __asm ("vld1.32 {d20, d21}, [r0]");
    0x000613a6 vshr.u32 q10, q10, 4                              |     __asm ("vshr.u32 q10, q10, 4");
    0x000613aa vadd.i32 q9, q10, q9                              |     __asm ("vadd.i32 q9, q10, q9");
    0x000613ae vadd.i32 q8, q9, q8                               |     __asm ("vadd.i32 q8, q9, q8");
    0x000613b2 vst1.32 {d18, d19}, [r0]                          |     __asm ("vst1.32 {d18, d19}, [r0]");
    0x000613b6 vadd.i32 d16, d16, d17                            |     __asm ("vadd.i32 d16, d16, d17");
    0x000613ba vpadd.i32 d16, d16, d16                           |     __asm ("vpadd.i32 d16, d16, d16");
    0x000613be vmov.32 r3, d16[0]                                |     __asm ("vmov.32 r3, d16[0]");
    0x000613c2 adds r2, r3, 1                                    |     r2 = r3 + 1;
    0x000613c4 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
    0x000613c6 clz r8, r2                                        |     r8 &= r2;
    0x000613ca eor r8, r8, 0x1f                                  |     r8 ^= 0x1f;
    0x000613ce lsl.w sl, r8, 8                                   |     sl = r8 << 8;
    0x000613d2 b 0x61004                                         |     goto label_0;
                                                                 | label_10:
    0x000613d4 cmp r6, 2                                         |     
    0x000613d6 mov.w r3, 0                                       |     r3 = 0;
    0x000613da str r3, [r4, 0x38]                                |     *((r4 + 0x38)) = r3;
                                                                 |     if (r6 == 2) {
    0x000613dc beq 0x6140c                                       |         goto label_3;
                                                                 |     }
    0x000613de movs r6, 1                                        |     r6 = 1;
    0x000613e0 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
                                                                 |     do {
                                                                 | label_2:
    0x000613e2 mov r1, r7                                        |         r1 = r7;
    0x000613e4 bl 0xa5fc                                         |         r0 = fcn_0000a5fc (r0, r1);
    0x000613e8 cmp r0, 0                                         |         
                                                                 |         if (r0 == 0) {
    0x000613ea beq.w 0x61534                                     |             goto label_14;
                                                                 |         }
    0x000613ee ldr r2, [r4]                                      |         r2 = *(r4);
    0x000613f0 rsb.w r0, r0, 0xb                                 |         r0 = 0xb - r0;
    0x000613f4 lsl.w r3, r6, r0                                  |         r3 = r6 << r0;
    0x000613f8 ldr r0, [r4, 0x3c]                                |         r0 = *((r4 + 0x3c));
    0x000613fa str.w r3, [r2, r7, lsl 2]                         |         __asm ("str.w r3, [r2, r7, lsl 2]");
    0x000613fe adds r7, 1                                        |         r7++;
    0x00061400 ldr r2, [r4, 0x18]                                |         r2 = *((r4 + 0x18));
    0x00061402 cmp.w r7, 0x100                                   |         
    0x00061406 add r2, r3                                        |         r2 += r3;
    0x00061408 str r2, [r4, 0x18]                                |         *((r4 + 0x18)) = r2;
    0x0006140a bne 0x613e2                                       |         
                                                                 |     } while (r7 != 0x100);
                                                                 | label_3:
    0x0006140c ldrh.w r3, [r0, 0xcb4]                            |     r3 = *((r0 + 0xcb4));
    0x00061410 movs r2, 8                                        |     r2 = 8;
                                                                 |     if (r3 != 0) {
    0x00061412 cbz r3, 0x6141c                                   |         
    0x00061414 subs r3, 1                                        |         r3--;
    0x00061416 movs r2, 4                                        |         r2 = 4;
    0x00061418 lsls r2, r3                                       |         r2 <<= r3;
    0x0006141a adds r2, 4                                        |         r2 += 4;
                                                                 |     }
    0x0006141c ldr r7, [r4, 4]                                   |     r7 = *((r4 + 4));
    0x0006141e add r2, r0                                        |     r2 += r0;
    0x00061420 movw ip, 0xffff                                   |     ip = 0xffff;
    0x00061424 movs r5, 1                                        |     r5 = 1;
    0x00061426 movs r3, 0                                        |     r3 = 0;
    0x00061428 subs r1, r7, 4                                    |     r1 = r7 - 4;
    0x0006142a adds r7, 0x8c                                     |     r7 += 0x8c;
    0x0006142c str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
                                                                 |     do {
                                                                 | label_6:
    0x0006142e ldr.w r3, [r2, 0xcb8]                             |         r3 = *((r2 + 0xcb8));
    0x00061432 add r3, ip                                        |         r3 += ip;
    0x00061434 lsrs r3, r3, 0x10                                 |         r3 >>= 0x10;
                                                                 |         if (r3 == r3) {
    0x00061436 beq.w 0x61566                                     |             goto label_15;
                                                                 |         }
    0x0006143a rsb.w r3, r3, 0xa                                 |         r3 = 0xa - r3;
    0x0006143e adds r2, 8                                        |         r2 += 8;
    0x00061440 lsl.w r3, r5, r3                                  |         r3 = r5 << r3;
    0x00061444 str r3, [r1, 4]!                                  |         *((r1 += 4)) = r3;
    0x00061448 cmp r1, r7                                        |         
    0x0006144a ldr r6, [r4, 0x1c]                                |         r6 = *((r4 + 0x1c));
    0x0006144c add r6, r3                                        |         r6 += r3;
    0x0006144e str r6, [r4, 0x1c]                                |         *((r4 + 0x1c)) = r6;
    0x00061450 bne 0x6142e                                       |         
                                                                 |     } while (r1 != r7);
                                                                 | label_7:
    0x00061452 ldrh.w r2, [r0, 0x708]                            |     r2 = *((r0 + 0x708));
    0x00061456 movs r3, 8                                        |     r3 = 8;
                                                                 |     if (r2 != 0) {
    0x00061458 cbz r2, 0x61462                                   |         
    0x0006145a subs r2, 1                                        |         r2--;
    0x0006145c movs r3, 4                                        |         r3 = 4;
    0x0006145e lsls r3, r2                                       |         r3 <<= r2;
    0x00061460 adds r3, 4                                        |         r3 += 4;
                                                                 |     }
    0x00061462 movs r2, 0                                        |     r2 = 0;
    0x00061464 add r3, r0                                        |     r3 += r0;
    0x00061466 str r2, [r4, 0x20]                                |     *((r4 + 0x20)) = r2;
    0x00061468 movw lr, 0xffff                                   |     lr = 0xffff;
    0x0006146c ldr r2, [r4, 8]                                   |     r2 = *((r4 + 8));
    0x0006146e movs r6, 1                                        |     r6 = 1;
    0x00061470 subs r1, r2, 4                                    |     r1 = r2 - 4;
    0x00061472 add.w ip, r2, 0xd0                                |     
                                                                 |     do {
                                                                 | label_4:
    0x00061476 ldr.w r2, [r3, 0x70c]                             |         r2 = *((r3 + 0x70c));
    0x0006147a add r2, lr                                        |         r2 += lr;
    0x0006147c lsrs r2, r2, 0x10                                 |         r2 >>= 0x10;
                                                                 |         if (r2 == r2) {
    0x0006147e beq 0x61550                                       |             goto label_16;
                                                                 |         }
    0x00061480 rsb.w r2, r2, 0xa                                 |         r2 = 0xa - r2;
    0x00061484 adds r3, 8                                        |         r3 += 8;
    0x00061486 lsl.w r2, r6, r2                                  |         r2 = r6 << r2;
    0x0006148a str r2, [r1, 4]!                                  |         *((r1 += 4)) = r2;
    0x0006148e cmp r1, ip                                        |         
    0x00061490 ldr r5, [r4, 0x20]                                |         r5 = *((r4 + 0x20));
    0x00061492 add r2, r5                                        |         r2 += r5;
    0x00061494 str r2, [r4, 0x20]                                |         *((r4 + 0x20)) = r2;
    0x00061496 bne 0x61476                                       |         
                                                                 |     } while (r1 != ip);
                                                                 | label_5:
    0x00061498 ldrh.w r3, [r0, 0x404]                            |     r3 = *((r0 + 0x404));
    0x0006149c movs r1, 8                                        |     r1 = 8;
                                                                 |     if (r3 != 0) {
    0x0006149e cbz r3, 0x614a8                                   |         
    0x000614a0 subs r3, 1                                        |         r3--;
    0x000614a2 movs r1, 4                                        |         r1 = 4;
    0x000614a4 lsls r1, r3                                       |         r1 <<= r3;
    0x000614a6 adds r1, 4                                        |         r1 += 4;
                                                                 |     }
    0x000614a8 ldr r6, [r4, 0xc]                                 |     r6 = *((r4 + 0xc));
    0x000614aa add r1, r0                                        |     r1 += r0;
    0x000614ac movw ip, 0xffff                                   |     ip = 0xffff;
    0x000614b0 movs r7, 1                                        |     r7 = 1;
    0x000614b2 movs r3, 0                                        |     r3 = 0;
    0x000614b4 subs r0, r6, 4                                    |     r0 = r6 - 4;
    0x000614b6 adds r6, 0x7c                                     |     r6 += 0x7c;
    0x000614b8 str r3, [r4, 0x24]                                |     *((r4 + 0x24)) = r3;
                                                                 |     do {
                                                                 | label_8:
    0x000614ba ldr.w r3, [r1, 0x408]                             |         r3 = *((r1 + 0x408));
    0x000614be add r3, ip                                        |         r3 += ip;
    0x000614c0 lsrs r3, r3, 0x10                                 |         r3 >>= 0x10;
                                                                 |         if (r3 == r3) {
    0x000614c2 beq 0x6157e                                       |             goto label_17;
                                                                 |         }
    0x000614c4 rsb.w r2, r3, 0xa                                 |         r2 = 0xa - r3;
    0x000614c8 adds r1, 8                                        |         r1 += 8;
    0x000614ca lsl.w r2, r7, r2                                  |         r2 = r7 << r2;
    0x000614ce str r2, [r0, 4]!                                  |         *((r0 += 4)) = r2;
    0x000614d2 cmp r6, r0                                        |         
    0x000614d4 ldr r3, [r4, 0x24]                                |         r3 = *((r4 + 0x24));
    0x000614d6 add r2, r3                                        |         r2 += r3;
    0x000614d8 str r2, [r4, 0x24]                                |         *((r4 + 0x24)) = r2;
    0x000614da bne 0x614ba                                       |         
                                                                 |     } while (r6 != r0);
                                                                 | label_9:
    0x000614dc adds r2, 1                                        |     r2++;
    0x000614de clz r8, r2                                        |     r8 &= r2;
    0x000614e2 eor r8, r8, 0x1f                                  |     r8 ^= 0x1f;
    0x000614e6 lsl.w sl, r8, 8                                   |     sl = r8 << 8;
    0x000614ea b 0x61004                                         |     goto label_0;
                                                                 | label_11:
    0x000614ec movs r0, 0xff                                     |     r0 = 0xff;
    0x000614ee mov r3, r2                                        |     r3 = r2;
    0x000614f0 str r0, [sp]                                      |     *(sp) = r0;
    0x000614f2 mov r2, r1                                        |     r2 = r1;
    0x000614f4 ldr r0, [r4]                                      |     r0 = *(r4);
    0x000614f6 mov r1, sp                                        |     r1 = sp;
    0x000614f8 bl 0x959c                                         |     fcn_0000959c (r0, r1, r2, r3);
    0x000614fc ldr r3, [r4]                                      |     r3 = *(r4);
    0x000614fe vmov.i32 q9, 0                                    |     __asm ("vmov.i32 q9, 0");
    0x00061502 vmov.i32 q10, 1                                   |     __asm ("vmov.i32 q10, 1");
    0x00061506 add.w r2, r3, 0x400                               |     r2 = r3 + 0x400;
                                                                 |     do {
    0x0006150a vld1.32 {d16, d17}, [r3]                          |         __asm ("vld1.32 {d16, d17}, [r3]");
    0x0006150e vshr.u32 q8, q8, 5                                |         __asm ("vshr.u32 q8, q8, 5");
    0x00061512 vadd.i32 q8, q8, q10                              |         __asm ("vadd.i32 q8, q8, q10");
    0x00061516 vadd.i32 q9, q9, q8                               |         __asm ("vadd.i32 q9, q9, q8");
    0x0006151a vst1.32 {d16, d17}, [r3]!                         |         __asm ("vst1.32 {d16, d17}, [r3]!");
    0x0006151e cmp r2, r3                                        |         
    0x00061520 bne 0x6150a                                       |         
                                                                 |     } while (r2 != r3);
    0x00061522 vadd.i32 d18, d18, d19                            |     __asm ("vadd.i32 d18, d18, d19");
    0x00061526 add.w r3, r4, 0x18                                |     r3 = r4 + 0x18;
    0x0006152a vpadd.i32 d18, d18, d18                           |     __asm ("vpadd.i32 d18, d18, d18");
    0x0006152e vst1.32 {d18[0]}, [r3]                            |     __asm ("vst1.32 {d18[0]}, [r3]");
    0x00061532 b 0x60f04                                         |     goto label_1;
                                                                 | label_14:
    0x00061534 ldr r3, [r4]                                      |     r3 = *(r4);
    0x00061536 ldr r0, [r4, 0x3c]                                |     r0 = *((r4 + 0x3c));
    0x00061538 str.w r6, [r3, r7, lsl 2]                         |     __asm ("str.w r6, [r3, r7, lsl 2]");
    0x0006153c adds r7, 1                                        |     r7++;
    0x0006153e ldr r3, [r4, 0x18]                                |     r3 = *((r4 + 0x18));
    0x00061540 cmp.w r7, 0x100                                   |     
    0x00061544 add.w r3, r3, 1                                   |     r3++;
    0x00061548 str r3, [r4, 0x18]                                |     *((r4 + 0x18)) = r3;
                                                                 |     if (r7 != 0x100) {
    0x0006154a bne.w 0x613e2                                     |         goto label_2;
                                                                 |     }
    0x0006154e b 0x6140c                                         |     goto label_3;
                                                                 | label_16:
    0x00061550 str r6, [r1, 4]!                                  |     *((r1 += 4)) = r6;
    0x00061554 cmp r1, ip                                        |     
    0x00061556 ldr r2, [r4, 0x20]                                |     r2 = *((r4 + 0x20));
    0x00061558 add.w r3, r3, 8                                   |     r3 += 8;
    0x0006155c add.w r2, r2, 1                                   |     r2++;
    0x00061560 str r2, [r4, 0x20]                                |     *((r4 + 0x20)) = r2;
                                                                 |     if (r1 != ip) {
    0x00061562 bne 0x61476                                       |         goto label_4;
                                                                 |     }
    0x00061564 b 0x61498                                         |     goto label_5;
                                                                 | label_15:
    0x00061566 str r5, [r1, 4]!                                  |     *((r1 += 4)) = r5;
    0x0006156a cmp r1, r7                                        |     
    0x0006156c ldr r3, [r4, 0x1c]                                |     r3 = *((r4 + 0x1c));
    0x0006156e add.w r2, r2, 8                                   |     r2 += 8;
    0x00061572 add.w r3, r3, 1                                   |     r3++;
    0x00061576 str r3, [r4, 0x1c]                                |     *((r4 + 0x1c)) = r3;
                                                                 |     if (r1 != r7) {
    0x00061578 bne.w 0x6142e                                     |         goto label_6;
                                                                 |     }
    0x0006157c b 0x61452                                         |     goto label_7;
                                                                 | label_17:
    0x0006157e str r7, [r0, 4]!                                  |     *((r0 += 4)) = r7;
    0x00061582 cmp r6, r0                                        |     
    0x00061584 ldr r2, [r4, 0x24]                                |     r2 = *((r4 + 0x24));
    0x00061586 add.w r1, r1, 8                                   |     r1 += 8;
    0x0006158a add.w r2, r2, 1                                   |     r2++;
    0x0006158e str r2, [r4, 0x24]                                |     *((r4 + 0x24)) = r2;
                                                                 |     if (r6 != r0) {
    0x00061590 bne 0x614ba                                       |         goto label_8;
                                                                 |     }
    0x00061592 b 0x614dc                                         |     goto label_9;
                                                                 | label_12:
    0x00061594 blx 0x33c8                                        |     fcn_000033c8 ();
    0x00061598 itte ne                                           |     
                                                                 |     if (r6 == r0) {
    0x0006159a movne r6, r0                                      |         r6 = r0;
                                                                 |     }
                                                                 |     if (r6 == r0) {
    0x0006159c lslne r0, r6, 7                                   |         r0 = r6 << 7;
                                                                 |     }
                                                                 |     if (r6 != r0) {
    0x0006159e moveq r0, r0                                      |         
                                                                 |     }
    0x000615a0 pop {r2, r4, r5, r6, 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/libzstd.so.1.5.0 @ 0x982a0 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000982a0 ()                                      | void fcn_000982a0 (int16_t arg1, int16_t arg2) {
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_18h_2;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h_2;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_50h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
    0x000982a0 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x000982a4 sub sp, 0x2c                                      |     
    0x000982a6 ldr.w r8, [r0]                                    |     r8 = *(r0);
    0x000982aa add r4, sp, 0x28                                  |     r4 += var_28h;
    0x000982ac mov r6, r1                                        |     r6 = r1;
    0x000982ae stmdb r4, {r1, r2, r3}                            |     __asm ("stmdb r4, {r1, r2, r3}");
    0x000982b2 mov r2, r0                                        |     r2 = r0;
    0x000982b4 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x000982b6 cmp.w r8, 1                                       |     
    0x000982ba ldr r1, [sp, 0x24]                                |     r1 = var_24h_2;
    0x000982bc str r0, [sp, 8]                                   |     var_8h = r0;
    0x000982be str r3, [sp, 0x10]                                |     var_10h = r3;
    0x000982c0 str r1, [sp, 0x14]                                |     var_14h_2 = r1;
    0x000982c2 add.w r1, r6, r3                                  |     r1 = r6 + r3;
    0x000982c6 ldrd sb, r0, [sp, 0x50]                           |     __asm ("ldrd sb, r0, [var_50h]");
    0x000982ca str r1, [sp, 0x18]                                |     var_18h_2 = r1;
                                                                 |     if (r8 < 1) {
    0x000982cc bls 0x983a2                                       |         goto label_3;
                                                                 |     }
    0x000982ce add.w r5, r2, 0xc                                 |     r5 = r2 + 0xc;
    0x000982d2 movs r4, 1                                        |     r4 = 1;
                                                                 |     do {
    0x000982d4 cmp sb, r4                                        |         
                                                                 |         if (sb != r4) {
    0x000982d6 beq 0x982ec                                       |             
    0x000982d8 ldr r3, [r5]                                      |             r3 = *(r5);
    0x000982da cmp r3, r6                                        |             
    0x000982dc ite hi                                            |             
                                                                 |             if (r3 <= r6) {
    0x000982de movhi r2, 1                                       |                 r2 = 1;
                                                                 |             }
                                                                 |             if (r3 > r6) {
    0x000982e0 movls r2, 0                                       |                 r2 = 0;
                                                                 |             }
    0x000982e2 cmp r3, r1                                        |             
    0x000982e4 it hi                                             |             
                                                                 |             if (r3 <= r1) {
    0x000982e6 movhi r2, 0                                       |                 r2 = 0;
                                                                 |             }
    0x000982e8 cmp r2, 0                                         |             
                                                                 |             if (r2 != 0) {
    0x000982ea bne 0x983ac                                       |                 goto label_4;
                                                                 |             }
                                                                 |         }
    0x000982ec adds r4, 1                                        |         r4++;
    0x000982ee adds r5, 0xc                                      |         r5 += 0xc;
    0x000982f0 cmp r8, r4                                        |         
    0x000982f2 bne 0x982d4                                       |         
                                                                 |     } while (r8 != r4);
    0x000982f4 ldr r3, [sp, 8]                                   |     r3 = var_8h;
    0x000982f6 adds r2, r0, r6                                   |     r2 = r0 + r6;
    0x000982f8 movs r4, 1                                        |     r4 = 1;
    0x000982fa str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x000982fc add.w sl, r2, r4                                  |     sl = r2 + r4;
    0x00098300 adds r3, 0x58                                     |     r3 += 0x58;
    0x00098302 b 0x9830c                                         |     
                                                                 |     while (sb == r4) {
                                                                 | label_0:
    0x00098304 adds r4, 1                                        |         r4++;
    0x00098306 adds r3, 0xc                                      |         r3 += 0xc;
    0x00098308 cmp r8, r4                                        |         
                                                                 |         if (r8 == r4) {
    0x0009830a beq 0x983a2                                       |             goto label_3;
                                                                 |         }
    0x0009830c cmp sb, r4                                        |         
    0x0009830e beq 0x98304                                       |         
                                                                 |     }
    0x00098310 ldrd r5, r7, [r3, -0x4c]                          |     __asm ("ldrd r5, r7, [r3, -0x4c]");
    0x00098314 sub.w r2, r3, 0x4c                                |     r2 = r3 - 0x4c;
    0x00098318 pld [r3]                                          |     __asm ("pld [r3]");
    0x0009831c str r2, [sp, 4]                                   |     var_4h = r2;
    0x0009831e cmp r5, r6                                        |     
    0x00098320 add.w r2, r5, r7                                  |     r2 = r5 + r7;
    0x00098324 ite lo                                            |     
                                                                 |     if (r5 >= r6) {
    0x00098326 movlo r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r5 < r6) {
    0x00098328 movhs r1, 0                                       |         r1 = 0;
                                                                 |     }
    0x0009832a cmp r2, r6                                        |     
    0x0009832c it lo                                             |     
                                                                 |     if (r2 >= r6) {
    0x0009832e movlo r1, 0                                       |         r1 = 0;
                                                                 |     }
    0x00098330 cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x00098332 bne 0x9841a                                       |         goto label_5;
                                                                 |     }
    0x00098334 adds r2, r0, r5                                   |     r2 = r0 + r5;
    0x00098336 ldr.w lr, [r0, r5]                                |     
    0x0009833a ldr r1, [r2, 4]                                   |     r1 = *((r2 + 4));
    0x0009833c ldr.w ip, [sl]                                    |     ip = *(sl);
    0x00098340 ldr.w r2, [sl, 4]                                 |     r2 = *((sl + 4));
    0x00098344 cmp r1, r2                                        |     
    0x00098346 it eq                                             |     
                                                                 |     if (r1 != r2) {
    0x00098348 cmpeq lr, ip                                      |         __asm ("cmpeq lr, ip");
                                                                 |         goto label_6;
                                                                 |     }
                                                                 |     if (r1 != r2) {
                                                                 | label_6:
    0x0009834a bne 0x98304                                       |         goto label_0;
                                                                 |     }
                                                                 |     if (r7 == 0) {
    0x0009834c cbz r7, 0x98374                                   |         goto label_7;
                                                                 |     }
    0x0009834e subs r2, r5, 1                                    |     r2 = r5 - 1;
    0x00098350 ldr r5, [sp, 0xc]                                 |     r5 = var_ch;
    0x00098352 add r2, r0                                        |     r2 += r0;
    0x00098354 mov r1, r5                                        |     r1 = r5;
    0x00098356 add.w fp, r5, r7                                  |     
                                                                 | label_1:
    0x0009835a ldrb ip, [r1, 1]!                                 |     ip = *((r1 += 1));
    0x0009835e ldrb lr, [r2, 1]!                                 |     
    0x00098362 subs r5, r1, r6                                   |     r5 = r1 - r6;
    0x00098364 cmp lr, ip                                        |     
    0x00098366 sub.w r5, r5, r0                                  |     r5 -= r0;
                                                                 |     if (lr != ip) {
    0x0009836a bne 0x98304                                       |         goto label_0;
                                                                 |     }
    0x0009836c cmp fp, r1                                        |     
                                                                 |     if (fp != r1) {
    0x0009836e bne 0x9835a                                       |         goto label_1;
                                                                 |     }
    0x00098370 cmp r7, r5                                        |     
                                                                 |     if (r7 != r5) {
    0x00098372 bne 0x98304                                       |         goto label_0;
                                                                 |     }
                                                                 | label_7:
    0x00098374 ldr r5, [sp, 4]                                   |     r5 = var_4h;
    0x00098376 ldr r2, [sp, 0x14]                                |     r2 = var_14h_2;
    0x00098378 str r6, [r5]                                      |     *(r5) = r6;
    0x0009837a ldr r6, [sp, 0x10]                                |     r6 = var_10h;
    0x0009837c subs r0, r6, r7                                   |     r0 = r6 - r7;
    0x0009837e mov r1, r6                                        |     r1 = r6;
    0x00098380 cmp r0, 1                                         |     
    0x00098382 add.w r7, r7, 1                                   |     r7++;
    0x00098386 it lt                                             |     
                                                                 |     if (r0 >= 1) {
    0x00098388 movlt r0, 1                                       |         r0 = 1;
                                                                 |     }
    0x0009838a mul r0, r2, r0                                    |     r0 = r2 * r0;
    0x0009838e bl 0xb5e10                                        |     fcn_000b5e10 (r0, r1, r2);
    0x00098392 ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x00098394 cmp r7, r6                                        |     
    0x00098396 it hs                                             |     
                                                                 |     if (r7 < r6) {
    0x00098398 movhs r7, r6                                      |         r7 = r6;
                                                                 |     }
    0x0009839a str r7, [r5, 4]                                   |     *((r5 + 4)) = r7;
    0x0009839c add r3, r0                                        |     r3 += r0;
    0x0009839e str r3, [r5, 8]                                   |     *((r5 + 8)) = r3;
    0x000983a0 b 0x983a4                                         |     goto label_8;
                                                                 | label_3:
    0x000983a2 movs r4, 0                                        |     r4 = 0;
                                                                 | label_8:
    0x000983a4 mov r0, r4                                        |     r0 = r4;
    0x000983a6 add sp, 0x2c                                      |     
    0x000983a8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_4:
    0x000983ac ldr r0, [sp, 0x14]                                |     r0 = var_14h_2;
    0x000983ae subs r3, r3, r6                                   |     r3 -= r6;
    0x000983b0 ldr r2, [r5, 4]                                   |     r2 = *((r5 + 4));
    0x000983b2 ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x000983b4 str r6, [r5]                                      |     *(r5) = r6;
    0x000983b6 adds r7, r3, r2                                   |     r7 = r3 + r2;
    0x000983b8 mul r0, r3, r0                                    |     r0 = r3 * r0;
    0x000983bc ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x000983be str r7, [r5, 4]                                   |     *((r5 + 4)) = r7;
    0x000983c0 add.w r8, r3, r1, lsr 3                           |     r8 = r3 + (r1 >> 3);
    0x000983c4 bl 0xb5e10                                        |     fcn_000b5e10 (r0, r1, r2);
    0x000983c8 cmp r4, 1                                         |     
    0x000983ca add.w lr, r8, r0                                  |     lr = r8 + r0;
    0x000983ce str.w lr, [r5, 8]                                 |     __asm ("str.w lr, [r5, 8]");
                                                                 |     if (r4 == 1) {
    0x000983d2 beq 0x9848c                                       |         goto label_9;
                                                                 |     }
    0x000983d4 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x000983d6 add.w r3, r4, r4, lsl 1                           |     r3 = r4 + (r4 << 1);
    0x000983da lsls r3, r3, 2                                    |     r3 <<= 2;
    0x000983dc sub.w ip, r2, 4                                   |     
    0x000983e0 sub.w r8, r2, 0xc                                 |     r8 = r2 - 0xc;
    0x000983e4 mov sb, r2                                        |     sb = r2;
    0x000983e6 b 0x983f8                                         |     
                                                                 |     while (lr > r1) {
    0x000983e8 ldm r2, {r0, r1, r2}                              |         r0 = *(r2);
                                                                 |         r1 = *((r2 + 4));
                                                                 |         r2 = *((r2 + 8));
    0x000983ea subs r4, 1                                        |         r4--;
    0x000983ec cmp r4, 1                                         |         
    0x000983ee sub.w r3, r3, 0xc                                 |         r3 -= 0xc;
    0x000983f2 stm.w r5, {r0, r1, r2}                            |         *(r5) = r0;
                                                                 |         *((r5 + 4)) = r1;
                                                                 |         *((r5 + 8)) = r2;
                                                                 |         if (r4 == 1) {
    0x000983f6 beq 0x9848c                                       |             goto label_9;
                                                                 |         }
    0x000983f8 ldr.w r1, [ip, r3]                                |         r1 = *((ip + r3));
    0x000983fc add.w r2, r8, r3                                  |         r2 = r8 + r3;
    0x00098400 add.w r5, sb, r3                                  |         r5 = sb + r3;
    0x00098404 cmp lr, r1                                        |         
    0x00098406 bhi 0x983e8                                       |         
                                                                 |     }
    0x00098408 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x0009840a str r6, [r2, r3]                                  |     *((r2 + r3)) = r6;
    0x0009840c add r3, r2                                        |     r3 += r2;
    0x0009840e strd r7, lr, [r3, 4]                              |     __asm ("strd r7, lr, [r3, 4]");
                                                                 | label_2:
    0x00098412 mov r0, r4                                        |     r0 = r4;
    0x00098414 add sp, 0x2c                                      |     
    0x00098416 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_5:
    0x0009841a ldr r3, [sp, 0x18]                                |     r3 = var_18h_2;
    0x0009841c ldr r1, [sp, 0x10]                                |     r1 = var_10h;
    0x0009841e subs r0, r3, r2                                   |     r0 = r3 - r2;
    0x00098420 ldr r2, [sp, 4]                                   |     r2 = var_4h;
    0x00098422 cmp r0, 0                                         |     
    0x00098424 ldr r3, [r2, 8]                                   |     r3 = *((r2 + 8));
    0x00098426 add.w r6, r3, r1, lsr 3                           |     r6 = r3 + (r1 >> 3);
    0x0009842a str r6, [r2, 8]                                   |     *((r2 + 8)) = r6;
                                                                 |     if (r0 > 0) {
    0x0009842c ble 0x98442                                       |         
    0x0009842e ldr r3, [sp, 0x14]                                |         r3 = var_14h_2;
    0x00098430 add r7, r0                                        |         r7 += r0;
    0x00098432 str r7, [r2, 4]                                   |         *((r2 + 4)) = r7;
    0x00098434 mul r0, r3, r0                                    |         r0 = r3 * r0;
    0x00098438 bl 0xb5e10                                        |         fcn_000b5e10 (r0, r1, r2);
    0x0009843c ldr r2, [sp, 4]                                   |         r2 = var_4h;
    0x0009843e add r6, r0                                        |         r6 += r0;
    0x00098440 str r6, [r2, 8]                                   |         *((r2 + 8)) = r6;
                                                                 |     }
    0x00098442 cmp r4, 1                                         |     
                                                                 |     if (r4 == 1) {
    0x00098444 beq 0x9849c                                       |         goto label_10;
                                                                 |     }
    0x00098446 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00098448 add.w r3, r4, r4, lsl 1                           |     r3 = r4 + (r4 << 1);
    0x0009844c lsls r3, r3, 2                                    |     r3 <<= 2;
    0x0009844e sub.w ip, r2, 4                                   |     
    0x00098452 sub.w r8, r2, 0xc                                 |     r8 = r2 - 0xc;
    0x00098456 mov sb, r2                                        |     sb = r2;
    0x00098458 b 0x9846a                                         |     
                                                                 |     while (r1 <= r6) {
    0x0009845a ldm r2, {r0, r1, r2}                              |         r0 = *(r2);
                                                                 |         r1 = *((r2 + 4));
                                                                 |         r2 = *((r2 + 8));
    0x0009845c subs r4, 1                                        |         r4--;
    0x0009845e cmp r4, 1                                         |         
    0x00098460 sub.w r3, r3, 0xc                                 |         r3 -= 0xc;
    0x00098464 stm.w lr, {r0, r1, r2}                            |         *(lr) = r0;
                                                                 |         *((lr + 4)) = r1;
                                                                 |         *((lr + 8)) = r2;
                                                                 |         if (r4 == 1) {
    0x00098468 beq 0x9849c                                       |             goto label_10;
                                                                 |         }
    0x0009846a ldr.w r1, [ip, r3]                                |         r1 = *((ip + r3));
    0x0009846e add.w r2, r8, r3                                  |         r2 = r8 + r3;
    0x00098472 add.w lr, sb, r3                                  |         lr = sb + r3;
    0x00098476 cmp r1, r6                                        |         
    0x00098478 blo 0x9845a                                       |         
                                                                 |     }
                                                                 |     do {
    0x0009847a ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x0009847c mov r0, r4                                        |         r0 = r4;
    0x0009847e str r5, [r2, r3]                                  |         *((r2 + r3)) = r5;
    0x00098480 add r3, r2                                        |         r3 += r2;
    0x00098482 strd r7, r6, [r3, 4]                              |         __asm ("strd r7, r6, [r3, 4]");
    0x00098486 add sp, 0x2c                                      |         
    0x00098488 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_9:
    0x0009848c ldr r2, [sp, 8]                                   |         r2 = var_8h;
    0x0009848e movs r3, 0xc                                      |         r3 = 0xc;
    0x00098490 movs r4, 1                                        |         r4 = 1;
    0x00098492 str r6, [r2, r3]                                  |         *((r2 + r3)) = r6;
    0x00098494 add r3, r2                                        |         r3 += r2;
    0x00098496 strd r7, lr, [r3, 4]                              |         __asm ("strd r7, lr, [r3, 4]");
    0x0009849a b 0x98412                                         |         goto label_2;
                                                                 | label_10:
    0x0009849c movs r3, 0xc                                      |         r3 = 0xc;
    0x0009849e movs r4, 1                                        |         r4 = 1;
    0x000984a0 b 0x9847a                                         |         
                                                                 |     } while (1);
                                                                 | }

[*] Function system used 1 times libzstd.so.1.5.0