RtlpWow64CtxToAmd64

__int64 __fastcall RtlpWow64CtxToAmd64(unsigned int a1, _DWORD *a2, __int64 a3){
  unsigned int v4; 
  __int64 v5; 
  _OWORD *v6; 
  _OWORD *v7; 
  __int128 v8; 
  _QWORD *v9; 
  __int64 v10; 
  unsigned int *v11; 
  __int64 v12; 

  v4 = a1;
  if( *(_WORD *)(a3 + 56) != 35 )
    v4 = a1 & 0xFFFEFFF8 | 0x10000;
  if( (v4 & 0x10001) == 65537 )
  {
    *(_WORD *)(a3 + 56) = 35;
    *(_WORD *)(a3 + 66) = 43;
    *(_QWORD *)(a3 + 248) = (unsigned int)a2[46];
    *(_QWORD *)(a3 + 160) = (unsigned int)a2[45];
    *(_QWORD *)(a3 + 152) = (unsigned int)a2[49];
    *(_DWORD *)(a3 + 68) = a2[48];
  }
  if( (v4 & 0x10002) == 65538 )
  {
    *(_QWORD *)(a3 + 176) = (unsigned int)a2[39];
    *(_QWORD *)(a3 + 168) = (unsigned int)a2[40];
    *(_QWORD *)(a3 + 144) = (unsigned int)a2[41];
    *(_QWORD *)(a3 + 136) = (unsigned int)a2[42];
    *(_QWORD *)(a3 + 128) = (unsigned int)a2[43];
    *(_QWORD *)(a3 + 120) = (unsigned int)a2[44];
  }
  if( (v4 & 0x10020) == 65568 )
  {
    v5 = 2i64;
    v6 = a2 + 51;
    v7 = (_OWORD *)(a3 + 256);
    do
    {
      *v7 = *v6;
      v7[1] = v6[1];
      v7[2] = v6[2];
      v7[3] = v6[3];
      v7[4] = v6[4];
      v7[5] = v6[5];
      v7[6] = v6[6];
      v7 += 8;
      v8 = v6[7];
      v6 += 8;
      *(v7 - 1) = v8;
      --v5;
    }
    while( v5 );
    *v7 = *v6;
    v7[1] = v6[1];
    *(_DWORD *)(a3 + 52) = *(_DWORD *)(a3 + 280);
  }
  if( (v4 & 0x10008) == 65544 )
    RtlFnToFxFrame(a3 + 256, (INT64)(a2 + 7));
  if( (v4 & 0x10010) == 65552 )
  {
    v9 = (_QWORD *)(a3 + 72);
    v10 = 6i64;
    v11 = a2 + 1;
    do
    {
      v12 = *v11++;
      *v9++ = v12;
      --v10;
    }
    while( v10 );
    if( (a2[6] & 0x55) == 0 && (a2[1] || a2[2] || a2[3] || a2[4]) )
      *(_QWORD *)(a3 + 112) |= 0x100ui64;
  }
  return 0i64;
}

Referenced by:

RtlpWow64SetContextOnAmd64