// // sub_180016A10 from 0x180016a10 to 0x180016bc9 (441 bytes) // // 5 xrefs: // > cocos2d::extension::CCTableView::_updateCellPositions @ 0x180015f60 // > @ 0x18002f02c // > @ 0x18002f048 // > @ 0x18002f058 // > @ 0x18004a95c // // This function is hookable on this platform! // // Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA // Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings // char *__fastcall sub_180016A10(__int64 a1, unsigned __int64 a2, _DWORD *a3) { __int64 v6; // r15 unsigned __int64 v7; // rcx __int64 v8; // r15 unsigned __int64 v9; // rdx unsigned __int64 v10; // rax unsigned __int64 v11; // r14 void *v12; // rax _QWORD *v13; // rdi _DWORD *v14; // rcx unsigned __int64 v15; // rdx unsigned __int64 v16; // r8 void *v17; // rcx if ( a2 > 0x3FFFFFFFFFFFFFFFLL ) sub_180003530(); v6 = *(_QWORD *)(a1 + 8) - *(_QWORD *)a1; v7 = (__int64)(*(_QWORD *)(a1 + 16) - *(_QWORD *)a1) >> 2; v8 = v6 >> 2; v9 = v7 >> 1; if ( v7 > 0x3FFFFFFFFFFFFFFFLL - (v7 >> 1) ) goto LABEL_28; v10 = v9 + v7; if ( v9 + v7 >= a2 ) { if ( v10 > 0x3FFFFFFFFFFFFFFFLL ) goto LABEL_28; } else { v10 = a2; } v11 = 4 * v10; if ( 4 * v10 < 0x1000 ) { if ( v11 ) v13 = operator new(4 * v10); else v13 = nullptr; goto LABEL_13; } if ( v11 + 39 < v11 ) LABEL_28: Concurrency::cancel_current_task(); v12 = operator new(v11 + 39); if ( !v12 ) goto LABEL_26; v13 = (_QWORD *)(((unsigned __int64)v12 + 39) & 0xFFFFFFFFFFFFFFE0uLL); *(v13 - 1) = v12; LABEL_13: v14 = (_DWORD *)v13 + v8; v15 = a2 - v8; if ( *a3 == _mm_cvtsi128_si32((__m128i)0LL) ) { memset(v14, 0, 4 * v15); } else { if ( v15 >= 4 ) { v16 = ((v15 - 4) >> 2) + 1; v15 += -4LL * v16; do { *v14 = *a3; v14[1] = *a3; v14[2] = *a3; v14[3] = *a3; v14 += 4; --v16; } while ( v16 ); } for ( ; v15; --v15 ) *v14++ = *a3; } memmove(v13, *(const void **)a1, *(_QWORD *)(a1 + 8) - *(_QWORD *)a1); v17 = *(void **)a1; if ( *(_QWORD *)a1 ) { if ( ((*(_QWORD *)(a1 + 16) - (_QWORD)v17) & 0xFFFFFFFFFFFFFFFCuLL) < 0x1000 ) { LABEL_24: j_j_free(v17); goto LABEL_25; } if ( (unsigned __int64)v17 - *((_QWORD *)v17 - 1) - 8 <= 0x1F ) { v17 = *((void **)v17 - 1); goto LABEL_24; } LABEL_26: invalid_parameter_noinfo_noreturn(); } LABEL_25: *(_QWORD *)a1 = v13; *(_QWORD *)(a1 + 8) = (char *)v13 + 4 * a2; *(_QWORD *)(a1 + 16) = (char *)v13 + v11; return (char *)v13 + v11; }