RtlpCopyLegacyContextArm64

VOID __fastcall RtlpCopyLegacyContextArm64(CHAR a1, INT64 a2, INT64 a3, INT64 a4){
  _OWORD *v4; 
  __int64 v5; 
  _OWORD *v6; 
  __int128 v7; 
  *(_DWORD *)a2 = a3 & 0x67FFFFFF;
  if( a1 )
  {
    if( (a3 & 0x40000000) != 0 )
      *(_DWORD *)a2 = a3 & 0x67FFFFFF | *(_DWORD *)a4 & 0x98000000;
    if( (a3 & 0x400001) == 4194305 )
    {
      *(_QWORD *)(a2 + 264) = *(_QWORD *)(a4 + 264);
      *(_QWORD *)(a2 + 256) = *(_QWORD *)(a4 + 256);
      *(_DWORD *)(a2 + 4) = *(_DWORD *)(a4 + 4);
    }
    if( (a3 & 0x400002) == 4194306 )
    {
      *(_OWORD *)(a2 + 8) = *(_OWORD *)(a4 + 8);
      *(_OWORD *)(a2 + 24) = *(_OWORD *)(a4 + 24);
      *(_OWORD *)(a2 + 40) = *(_OWORD *)(a4 + 40);
      *(_OWORD *)(a2 + 56) = *(_OWORD *)(a4 + 56);
      *(_OWORD *)(a2 + 72) = *(_OWORD *)(a4 + 72);
      *(_OWORD *)(a2 + 88) = *(_OWORD *)(a4 + 88);
      *(_OWORD *)(a2 + 104) = *(_OWORD *)(a4 + 104);
      *(_OWORD *)(a2 + 120) = *(_OWORD *)(a4 + 120);
      *(_OWORD *)(a2 + 136) = *(_OWORD *)(a4 + 136);
      *(_OWORD *)(a2 + 160) = *(_OWORD *)(a4 + 160);
      *(_OWORD *)(a2 + 176) = *(_OWORD *)(a4 + 176);
      *(_OWORD *)(a2 + 192) = *(_OWORD *)(a4 + 192);
      *(_OWORD *)(a2 + 208) = *(_OWORD *)(a4 + 208);
      *(_OWORD *)(a2 + 224) = *(_OWORD *)(a4 + 224);
      *(_QWORD *)(a2 + 240) = *(_QWORD *)(a4 + 240);
      *(_QWORD *)(a2 + 248) = *(_QWORD *)(a4 + 248);
    }
    if( (a3 & 0x400010) == 4194320 )
      *(_QWORD *)(a2 + 152) = *(_QWORD *)(a4 + 152);
    if( (a3 & 0x400004) == 4194308 )
    {
      v4 = (_OWORD *)(a4 + 272);
      *(_DWORD *)(a2 + 784) = *(_DWORD *)(a4 + 784);
      v5 = 4i64;
      *(_DWORD *)(a2 + 788) = *(_DWORD *)(a4 + 788);
      v6 = (_OWORD *)(a2 + 272);
      do
      {
        *v6 = *v4;
        v6[1] = v4[1];
        v6[2] = v4[2];
        v6[3] = v4[3];
        v6[4] = v4[4];
        v6[5] = v4[5];
        v6[6] = v4[6];
        v6 += 8;
        v7 = v4[7];
        v4 += 8;
        *(v6 - 1) = v7;
        --v5;
      }
      while( v5 );
    }
    if( (a3 & 0x400008) == 4194312 )
    {
      *(_OWORD *)(a2 + 824) = *(_OWORD *)(a4 + 824);
      *(_OWORD *)(a2 + 840) = *(_OWORD *)(a4 + 840);
      *(_OWORD *)(a2 + 856) = *(_OWORD *)(a4 + 856);
      *(_OWORD *)(a2 + 872) = *(_OWORD *)(a4 + 872);
      *(_OWORD *)(a2 + 792) = *(_OWORD *)(a4 + 792);
      *(_OWORD *)(a2 + 808) = *(_OWORD *)(a4 + 808);
      *(_OWORD *)(a2 + 896) = *(_OWORD *)(a4 + 896);
      *(_QWORD *)(a2 + 888) = *(_QWORD *)(a4 + 888);
    }
  }
}

Referenced by:

RtlpCopyExtendedContext
RtlpCopyLegacyContext