// BitFieldMerge - addr:0xffdaef49
int __fastcall BitFieldMerge(int *a1, int a2, int a3, unsigned __int8 a4)
{
int *v4; // edi
int result; // eax
int v6; // esi
int v7; // ebx
int v8; // edi
int v9; // esi
int v10; // ecx
_BYTE *v11; // edx
char v12; // al
_BYTE v13[8]; // [esp+10h] [ebp-20h]
_BYTE v14[8]; // [esp+18h] [ebp-18h] BYREF
int v15; // [esp+20h] [ebp-10h]
int v16; // [esp+24h] [ebp-Ch]
int *v17; // [esp+28h] [ebp-8h]
int v18; // [esp+2Ch] [ebp-4h]
v18 = a2;
v4 = a1;
v17 = a1;
result = *a1;
v6 = a1[1];
v15 = *a1;
v16 = v6;
if ( a4 )
{
v7 = a4;
v8 = a2 - a3;
v9 = a3 - (_DWORD)v14;
v10 = 0;
do
{
if ( a2 )
{
v11 = &v14[v10];
v14[v10] = v14[v10 + v9 + v8];
}
else
{
v11 = &v14[v10];
v14[v10] = -1;
}
if ( a3 )
v13[v10] = v11[v9];
else
v13[v10] = 0;
v12 = v13[v10] | *((_BYTE *)&v15 + v10) & *v11;
a2 = v18;
*((_BYTE *)&v15 + v10++) = v12;
--v7;
}
while ( v7 );
v6 = v16;
result = v15;
v4 = v17;
}
v4[1] = v6;
*v4 = result;
return result;
}