HalpInterruptCreateGdtEntry32

NTSTATUS __stdcall HalpInterruptCreateGdtEntry32(INT64 a1, INT64 a2, INT64 a3, UINT64 a4, INT16 a5, CHAR a6){
  __int64 v6; 
  int v8; 
  unsigned int v9; 
  NTSTATUS result; 

  v6 = (unsigned int)a2 & 0xFFFFFFF0;
  *(_QWORD *)(v6 + a1) = 0i64;
  v8 = *(_DWORD *)(v6 + a1 + 4);
  if( (unsigned int)a4 > 0xFFFFF )
  {
    LODWORD(a4) = (unsigned int)a4 >> 12;
    v8 |= 0x800000u;
  }
  *(_WORD *)(v6 + a1) = a4;
  *(_DWORD *)(v6 + a1 + 4) = v8 ^ (a4 ^ v8) & 0xF0000;
  *(_BYTE *)(v6 + a1 + 4) = 0;
  *(_BYTE *)(v6 + a1 + 7) = 0;
  v9 = *(_DWORD *)(v6 + a1 + 4) & 0xFFFF1FFF | 0x8000;
  if( !a6 )
    v9 = *(_DWORD *)(v6 + a1 + 4) & 0xFFBF1FFF | 0x408000;
  result = v9 ^ ((unsigned __int16)v9 ^ (unsigned __int16)(a5 << 8)) & 0x1F00;
  *(_DWORD *)(v6 + a1 + 4) = result;
  if( a6 )
  {
    result |= 0x200000u;
    *(_DWORD *)(v6 + a1 + 4) = result;
  }
  return result;
}

Referenced by:

HalpInterruptBuildStartupStub