HalpLaReserveRange

INT64 __fastcall HalpLaReserveRange(INT64 a1, UINT64 a2, INT64 a3){
  INT64 *v3; 
  UINT64 v4; 
  int v7; 
  INT64 v8; 
  INT64 *v9; 
  INT64 v10; 
  INT64 **v11; 
  INT64 v12; 
  INT64 **v13; 
  INT64 **v14; 
  INT64 v15; 
  INT64 v16; 
  UINT64 v17; 
  INT64 v18; 
  INT64 v19; 
  INT64 **v20; 
  INT64 *v21; 
  INT64 v22; 
  INT64 v23; 
  INT64 **v24; 
  INT64 *v25; 
  INT64 v26; 
  v3 = *(INT64 **)(a1 + 56);
  v4 = a2 + a3;
  v7 = 0;
  while( 1 )
  {
    v8 = v3[6];
    if( v8 == a2 && v8 + v3[8] == v4 )
      break;
    v9 = (INT64 *)v3[3];
    if( !v9 )
    {
      v7 = HalpLapSplitNode(a1, (INT64)v3);
      if( v7 < 0 )
        return(unsigned int)v7;
      v10 = *v3;
      if( *(INT64 **)(*v3 + 8) != v3 || (v11 = (INT64 **)v3[1], *v11 != v3) )
LABEL_40:
        __fastfail(3u);
      *v11 = (INT64 *)v10;
      *(_QWORD *)(v10 + 8) = v11;
      v3[1] = (INT64)v3;
      *v3 = (INT64)v3;
      HalpLaBltAdd((INT64 *)v3[4], a1);
      HalpLaBltAdd((INT64 *)v3[3], v12);
      v9 = (INT64 *)v3[3];
    }
    if( v4 > v9[6] + v9[8] )
    {
      if( a2 < *(_QWORD *)(v3[4] + 48) )
        break;
      v3 = (INT64 *)v3[4];
    }
    else
    {
      v3 = v9;
    }
  }
  v13 = (INT64 **)(v3 + 2);
LABEL_38:
  while( 1 )
  {
    v25 = *v13;
    if( v3 == *v13 )
      return(unsigned int)v7;
    v14 = (INT64 **)(v3 + 3);
    v15 = v3[3];
    if( v15 && a2 < *(_QWORD *)(v15 + 48) + *(_QWORD *)(v15 + 64) )
    {
      v3 = (INT64 *)v3[3];
    }
    else
    {
      v16 = v3[4];
      if( v16 && v4 > *(_QWORD *)(v16 + 48) )
      {
        v3 = (INT64 *)v3[4];
      }
      else
      {
        v17 = v3[6];
        if( (a2 <= v17 || a2 >= v17 + v3[8]) && ((v18 = v3[8], v4 >= v18 + v17) || v4 <= v17) )
        {
          if( a2 <= v17 && v4 >= v18 + v17 )
          {
            v3[5] = -1i64;
            *((_BYTE *)v3 + 56) = 1;
            v3[9] = v18;
            *(_QWORD *)(a1 + 48) += v18;
            v23 = *v3;
            if( *(INT64 **)(*v3 + 8) != v3 )
              goto LABEL_40;
            v24 = (INT64 **)v3[1];
            if( *v24 != v3 )
              goto LABEL_40;
            *v24 = (INT64 *)v23;
            *(_QWORD *)(v23 + 8) = v24;
            v3[1] = (INT64)v3;
            *v3 = (INT64)v3;
            v25 = *v13;
          }
          if( v3 != v25 )
          {
            while( 1 )
            {
              v26 = v3[2];
              if( *(INT64 **)(v26 + 24) == v3 )
                break;
              v3 = (INT64 *)v3[2];
              if( (INT64 *)v26 == v25 )
                goto LABEL_38;
            }
            v3 = *(INT64 **)(v26 + 32);
          }
        }
        else
        {
          v7 = HalpLapSplitNode(a1, (INT64)v3);
          if( v7 < 0 )
            return(unsigned int)v7;
          v19 = *v3;
          if( *(INT64 **)(*v3 + 8) != v3 )
            goto LABEL_40;
          v20 = (INT64 **)v3[1];
          if( *v20 != v3 )
            goto LABEL_40;
          *v20 = (INT64 *)v19;
          *(_QWORD *)(v19 + 8) = v20;
          v21 = (INT64 *)v3[4];
          v3[1] = (INT64)v3;
          *v3 = (INT64)v3;
          HalpLaBltAdd(v21, a1);
          HalpLaBltAdd(*v14, v22);
          v3 = *v14;
        }
      }
    }
  }
}

Referenced by:

HalpDmaAddReservedRangesToDomain
HalpLaInitializeState