RtlpCopyLegacyContextX86

VOID __fastcall RtlpCopyLegacyContextX86(CHAR a1, INT64 a2, INT64 a3, INT64 a4){
  __int64 v4; 
  _OWORD *v5; 
  _OWORD *v6; 
  __int128 v7; 
  *(_DWORD *)a2 = a3 & 0x67FFFFFF;
  if( a1 )
  {
    if( (a3 & 0x40000000) != 0 )
      *(_DWORD *)a2 = a3 & 0x67FFFFFF | *(_DWORD *)a4 & 0x98000000;
    if( (a3 & 0x10001) == 65537 )
    {
      *(_DWORD *)(a2 + 180) = *(_DWORD *)(a4 + 180);
      *(_DWORD *)(a2 + 184) = *(_DWORD *)(a4 + 184);
      *(_DWORD *)(a2 + 188) = *(_DWORD *)(a4 + 188);
      *(_DWORD *)(a2 + 192) = *(_DWORD *)(a4 + 192);
      *(_DWORD *)(a2 + 196) = *(_DWORD *)(a4 + 196);
      *(_DWORD *)(a2 + 200) = *(_DWORD *)(a4 + 200);
    }
    if( (a3 & 0x10002) == 65538 )
    {
      *(_DWORD *)(a2 + 156) = *(_DWORD *)(a4 + 156);
      *(_DWORD *)(a2 + 160) = *(_DWORD *)(a4 + 160);
      *(_DWORD *)(a2 + 164) = *(_DWORD *)(a4 + 164);
      *(_DWORD *)(a2 + 172) = *(_DWORD *)(a4 + 172);
      *(_DWORD *)(a2 + 168) = *(_DWORD *)(a4 + 168);
      *(_DWORD *)(a2 + 176) = *(_DWORD *)(a4 + 176);
    }
    if( (a3 & 0x10004) == 65540 )
    {
      *(_DWORD *)(a2 + 140) = *(_DWORD *)(a4 + 140);
      *(_DWORD *)(a2 + 144) = *(_DWORD *)(a4 + 144);
      *(_DWORD *)(a2 + 148) = *(_DWORD *)(a4 + 148);
      *(_DWORD *)(a2 + 152) = *(_DWORD *)(a4 + 152);
    }
    if( (a3 & 0x10008) == 65544 )
    {
      *(_OWORD *)(a2 + 28) = *(_OWORD *)(a4 + 28);
      *(_OWORD *)(a2 + 44) = *(_OWORD *)(a4 + 44);
      *(_OWORD *)(a2 + 60) = *(_OWORD *)(a4 + 60);
      *(_OWORD *)(a2 + 76) = *(_OWORD *)(a4 + 76);
      *(_OWORD *)(a2 + 92) = *(_OWORD *)(a4 + 92);
      *(_OWORD *)(a2 + 108) = *(_OWORD *)(a4 + 108);
      *(_OWORD *)(a2 + 124) = *(_OWORD *)(a4 + 124);
    }
    if( (a3 & 0x10010) == 65552 )
    {
      *(_DWORD *)(a2 + 4) = *(_DWORD *)(a4 + 4);
      *(_DWORD *)(a2 + 8) = *(_DWORD *)(a4 + 8);
      *(_DWORD *)(a2 + 12) = *(_DWORD *)(a4 + 12);
      *(_DWORD *)(a2 + 16) = *(_DWORD *)(a4 + 16);
      *(_DWORD *)(a2 + 20) = *(_DWORD *)(a4 + 20);
      *(_DWORD *)(a2 + 24) = *(_DWORD *)(a4 + 24);
    }
    if( (a3 & 0x10020) == 65568 )
    {
      v4 = 2i64;
      v5 = (_OWORD *)(a2 + 204);
      v6 = (_OWORD *)(a4 + 204);
      do
      {
        *v5 = *v6;
        v5[1] = v6[1];
        v5[2] = v6[2];
        v5[3] = v6[3];
        v5[4] = v6[4];
        v5[5] = v6[5];
        v5[6] = v6[6];
        v5 += 8;
        v7 = v6[7];
        v6 += 8;
        *(v5 - 1) = v7;
        --v4;
      }
      while( v4 );
      *v5 = *v6;
      v5[1] = v6[1];
    }
  }
}

Referenced by:

RtlpCopyExtendedContext
RtlpCopyLegacyContext