GxpAdjustRectangleToFrameBuffer

__int64 __fastcall GxpAdjustRectangleToFrameBuffer(
        unsigned int *a1,
        unsigned int *a2,
        __int64 a3,
        unsigned int *a4,
        _QWORD *a5,
        char a6){
  __int64 v6; 
  unsigned int v8; 
  unsigned int v10; 
  unsigned int v11; 
  int v12; 
  unsigned int v13; 
  unsigned __int64 v14; 
  unsigned int v15; 
  unsigned int v16; 
  unsigned int v17; 
  unsigned int v18; 
  unsigned int v19; 
  unsigned int v20; 
  __int64 v22; 
  unsigned __int64 v23; 
  int v25; 
  __int64 v26; 

  v6 = *(_QWORD *)a2;
  v8 = *a1;
  v10 = a1[1];
  v11 = *a1;
  v12 = *(_DWORD *)(a3 + 8);
  v13 = v10;
  v14 = *(_QWORD *)a3;
  v15 = *(_DWORD *)a3;
  v16 = *(_QWORD *)a2;
  v25 = v12;
  v17 = 0;
  v22 = *(_QWORD *)a2;
  v26 = *(_QWORD *)a2;
  v23 = v14;
  if( v15 < v16 )
    return(unsigned int)-1073741811;
  v18 = *(_DWORD *)(a3 + 4);
  if( v18 < HIDWORD(v6) )
    return(unsigned int)-1073741811;
  v19 = v14;
  if( v10 > (unsigned int)v14 - v16 )
  {
    if( !a6 )
      return(unsigned int)-1073741811;
    v13 = v14 - v16;
  }
  if( v8 > HIDWORD(v14) - HIDWORD(v6) )
  {
    if( a6 )
    {
      v11 = HIDWORD(v14) - HIDWORD(v6);
      goto LABEL_5;
    }
    return(unsigned int)-1073741811;
  }
LABEL_5:
  if( (unsigned __int8)(*(&SbiVmbusArrivalEvent + 258) - 2) <= 1u && *(&SbiVmbusArrivalEvent + 256) )
  {
    if( v13 < v10 && *(&SbiVmbusArrivalEvent + 258) == 2 )
    {
      v16 = 0;
      LODWORD(v26) = 0;
    }
    else
    {
      v16 = v15 - v13 - v16;
      LODWORD(v26) = v16;
    }
    if( v11 < v8 && *(&SbiVmbusArrivalEvent + 258) == 2 )
    {
      v20 = 0;
      HIDWORD(v26) = 0;
      goto LABEL_8;
    }
    v20 = v18 - v11 - HIDWORD(v26);
    HIDWORD(v26) = v20;
  }
  else
  {
    v20 = HIDWORD(*(_QWORD *)a2);
  }
  if( ((*(&SbiVmbusArrivalEvent + 258) - 1) & 0xFD) == 0 && *(&SbiVmbusArrivalEvent + 256) )
  {
    v19 = *(_DWORD *)(a3 + 4);
    v23 = __PAIR64__(v15, v19);
    if( *(&SbiVmbusArrivalEvent + 258) == 1 )
    {
      if( v13 >= v10 )
      {
        v20 = v15 - *a2 - v13;
        HIDWORD(v26) = v20;
      }
      else
      {
        v20 = 0;
        HIDWORD(v26) = 0;
      }
      v16 = a2[1];
      LODWORD(v26) = v16;
    }
    else
    {
      if( v11 >= v8 )
      {
        v16 = v18 - a2[1] - v11;
        LODWORD(v26) = v16;
      }
      else
      {
        v16 = 0;
        LODWORD(v26) = 0;
      }
      v20 = *a2;
      HIDWORD(v26) = *a2;
    }
  }
LABEL_8:
  if( v19 < v16 || HIDWORD(v23) < v20 )
    return(unsigned int)-1073741811;
  if( a4 )
  {
    a4[1] = v8;
    *a4 = v10;
  }
  if( a5 )
    *a5 = v22;
  *(_QWORD *)a3 = v23;
  *(_DWORD *)(a3 + 8) = v25;
  *(_QWORD *)a2 = v26;
  *a1 = v11;
  a1[1] = v13;
  return v17;
}

Referenced by:

GxpReadFrameBufferPixels
GxpWriteFrameBufferPixels