RtlpWow64CtxFromAmd64

__int64 __fastcall RtlpWow64CtxFromAmd64(int a1, _DWORD *a2, int *a3){
  int v3; 
  unsigned __int16 *v6; 
  int *v7; 
  _OWORD *v8; 
  __int64 v9; 
  __int128 v10; 
  __int64 result; 

  v3 = a1;
  if( (a1 & 0x10001) == 65537 )
  {
    a3[45] = a2[40];
    a3[47] = 35;
    a3[46] = a2[62];
    a3[50] = 43;
    a3[49] = a2[38];
    a3[48] = a2[17];
  }
  if( (a1 & 0x10002) == 65538 )
  {
    a3[39] = a2[44];
    a3[40] = a2[42];
    a3[41] = a2[36];
    a3[42] = a2[34];
    a3[43] = a2[32];
    a3[44] = a2[30];
  }
  if( (a1 & 0x10004) == 65540 )
  {
    a3[35] = 43;
    a3[37] = 43;
    a3[38] = 43;
    a3[36] = 83;
  }
  v6 = (unsigned __int16 *)(a2 + 64);
  if( (a1 & 0x10020) == 65568 )
  {
    v7 = a3 + 51;
    v8 = a2 + 64;
    v9 = 2i64;
    do
    {
      *(_OWORD *)v7 = *v8;
      *((_OWORD *)v7 + 1) = v8[1];
      *((_OWORD *)v7 + 2) = v8[2];
      *((_OWORD *)v7 + 3) = v8[3];
      *((_OWORD *)v7 + 4) = v8[4];
      *((_OWORD *)v7 + 5) = v8[5];
      *((_OWORD *)v7 + 6) = v8[6];
      v7 += 32;
      v10 = v8[7];
      v8 += 8;
      *((_OWORD *)v7 - 1) = v10;
      --v9;
    }
    while( v9 );
    *(_OWORD *)v7 = *v8;
    *((_OWORD *)v7 + 1) = v8[1];
  }
  if( (v3 & 0x10008) == 65544 )
  {
    a3[34] = 0;
    RtlFxToFnFrame(a3 + 7, v6);
  }
  if( (v3 & 0x10010) == 65552 )
  {
    if( (a2[28] & 0x355i64) != 0 )
    {
      a3[1] = a2[18];
      a3[2] = a2[20];
      a3[3] = a2[22];
      a3[4] = a2[24];
      a3[5] = a2[26];
      a3[6] = a2[28] & 0xFFFF0155;
    }
    else
    {
      a3[1] = 0;
      a3[2] = 0;
      a3[3] = 0;
      a3[4] = 0;
      a3[5] = 0;
      a3[6] = 0;
    }
  }
  if( (v3 & 0x40000000) != 0 )
    v3 = a2[12] ^ (a2[12] ^ v3) & 0x67FFFFFF;
  result = 0i64;
  *a3 = v3;
  return result;
}

Referenced by:

RtlpWow64GetContextOnAmd64