Newer
Older
AMI-Aptio-BIOS-Reversed / CpRcPkg / Universal / RegAccess / Pei / RegAccessPeim / decompiled / BitFieldMerge.c
@Ajax Dong Ajax Dong 2 days ago 1 KB Restructure the repo
// 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;
}