/* DxeIplCreatePageTables @ 0xffc15d00 size=0x2b3 */
int DxeIplCreatePageTables()
{
int v0; // eax
int v1; // eax
int v2; // eax
int v3; // ecx
unsigned __int8 n36; // bl
int result; // eax
int n0x200_1; // esi
__int64 v7; // rax
__int64 n512_1; // rax
int n0x200_2; // edx
int v10; // eax
unsigned int v11; // edx
_DWORD *v12; // edi
int *v13; // eax
int n0x200_5; // ecx
int *v15; // esi
bool v16; // zf
int v17; // eax
int v18; // edi
int n512_6; // ecx
unsigned int v20; // kr00_4
_DWORD *v21; // edi
unsigned int n512_5; // edx
_DWORD *v23; // edi
_DWORD *v24; // edx
int v25; // eax
unsigned int v26; // ecx
int n512_4; // edi
unsigned __int64 v28; // kr08_8
unsigned int v29; // edi
int v30; // ebx
int v31; // [esp-4h] [ebp-54h]
int v32; // [esp-4h] [ebp-54h]
int v33; // [esp+14h] [ebp-3Ch]
int n0x200_4; // [esp+18h] [ebp-38h]
unsigned int n512_3; // [esp+1Ch] [ebp-34h]
int v36; // [esp+20h] [ebp-30h] BYREF
unsigned int n0x200; // [esp+24h] [ebp-2Ch]
int n0x200_3; // [esp+28h] [ebp-28h]
unsigned int n512_2; // [esp+2Ch] [ebp-24h]
int *v40; // [esp+30h] [ebp-20h]
unsigned int n512; // [esp+34h] [ebp-1Ch]
_DWORD *v42; // [esp+38h] [ebp-18h]
_DWORD *v43; // [esp+3Ch] [ebp-14h]
int v44; // [esp+40h] [ebp-10h]
int v45; // [esp+44h] [ebp-Ch]
unsigned int v46; // [esp+48h] [ebp-8h]
unsigned int n36_1; // [esp+4Ch] [ebp-4h] BYREF
LOBYTE(v45) = 0; /*0xffc15d0b*/
v0 = sub_FFC16386(); /*0xffc15d0e*/
if ( (*(unsigned __int8 (__cdecl **)(int))(v0 + 24))(4) ) /*0xffc15d15*/
{
sub_FFC15FC8(0x80000000, &n36_1, v31, v31, 0); /*0xffc15d2a*/
if ( n36_1 >= 0x80000001 ) /*0xffc15d38*/
{
sub_FFC15FC8(-2147483647, 0, -2147483647, -2147483647, &v36); /*0xffc15d42*/
if ( (v36 & 0x4000000) != 0 ) /*0xffc15d51*/
LOBYTE(v45) = 1; /*0xffc15d53*/
}
}
v1 = sub_FFC16008(); /*0xffc15d57*/
v2 = sub_FFC16033(6, v1); /*0xffc15d61*/
if ( v2 ) /*0xffc15d68*/
{
n36 = *(_BYTE *)(v2 + 8); /*0xffc15d6a*/
}
else
{
sub_FFC15FC8(0x80000000, &n36_1, v3, v3, 0); /*0xffc15d77*/
v3 = -2147483640; /*0xffc15d7c*/
if ( n36_1 < 0x80000008 ) /*0xffc15d87*/
{
n36 = 36; /*0xffc15d9c*/
}
else
{
sub_FFC15FC8(-2147483640, &n36_1, -2147483640, -2147483640, 0); /*0xffc15d8f*/
n36 = n36_1; /*0xffc15d94*/
}
}
LOBYTE(v46) = n36; /*0xffc15d9e*/
if ( n36 > 0x30u ) /*0xffc15da4*/
{
n36 = 48; /*0xffc15da6*/
LOBYTE(v46) = 48; /*0xffc15da8*/
}
if ( dword_FFC18E48 ) /*0xffc15db2*/
{
result = dword_FFC18E48(v46, v45); /*0xffc15dba*/
v3 = v32; /*0xffc15dbd*/
if ( result ) /*0xffc15dc0*/
return result; /*0xffc15dc0*/
}
if ( n36 > 0x27u ) /*0xffc15dcc*/
{
n0x200 = n36 - 39; /*0xffc15e12*/
LOBYTE(v3) = n36 - 39; /*0xffc15e15*/
n512_1 = 0x100000000LL; /*0xffc15e18*/
if ( ((n36 - 39) & 0x20) == 0 ) /*0xffc15e20*/
n512_1 = 1; /*0xffc15e22*/
n0x200_1 = n512_1 << (v3 & 0x1F); /*0xffc15e2c*/
n0x200 = n0x200_1; /*0xffc15e33*/
LODWORD(n512_1) = 512; /*0xffc15e36*/
n512 = 512; /*0xffc15e38*/
}
else
{
v3 = 1; /*0xffc15dd3*/
n0x200_3 = n36 - 30; /*0xffc15dd4*/
n0x200_1 = 1; /*0xffc15ddb*/
n0x200 = 1; /*0xffc15ddd*/
LOBYTE(v3) = n36 - 30; /*0xffc15de3*/
v7 = 0x100000000LL; /*0xffc15de6*/
if ( ((n36 - 30) & 0x20) == 0 ) /*0xffc15dee*/
v7 = 1; /*0xffc15df0*/
n512_1 = v7 << (v3 & 0x1F); /*0xffc15df8*/
n512 = n512_1; /*0xffc15dfa*/
}
if ( (_BYTE)v45 ) /*0xffc15e42*/
n0x200_2 = n0x200_1; /*0xffc15e4c*/
else
n0x200_2 = n0x200_1 * (n512_1 + 1); /*0xffc15e47*/
v10 = sub_FFC1632D(v3, n0x200_2 + 1); /*0xffc15e4f*/
v11 = 0; /*0xffc15e56*/
v44 = 0; /*0xffc15e58*/
v12 = (_DWORD *)v10; /*0xffc15e5b*/
v33 = v10; /*0xffc15e5d*/
v13 = (int *)(v10 + 4096); /*0xffc15e60*/
n0x200_5 = 0; /*0xffc15e65*/
v43 = (_DWORD *)v33; /*0xffc15e67*/
v46 = 0; /*0xffc15e6a*/
if ( !n0x200_1 ) /*0xffc15e6f*/
{
LABEL_44:
v30 = 512 - n0x200_5; /*0xffc15f95*/
do /*0xffc15fa7*/
{
DxeIplSetMem32(v12, 8); /*0xffc15f9a*/
v12 += 2; /*0xffc15fa0*/
--v30; /*0xffc15fa4*/
}
while ( v30 ); /*0xffc15fa7*/
return v33; /*0xffc15fa7*/
}
n0x200_3 = n0x200_1; /*0xffc15e75*/
n0x200_4 = n0x200_1; /*0xffc15e78*/
do /*0xffc15f87*/
{
v12[1] = 0; /*0xffc15e7b*/
v15 = v13; /*0xffc15e7f*/
*v12 = v13; /*0xffc15e86*/
*v12 |= 2u; /*0xffc15e88*/
*v12 |= 1u; /*0xffc15e8b*/
v16 = (_BYTE)v45 == 0; /*0xffc15e8e*/
v42 = v13 + 1024; /*0xffc15e92*/
v17 = v12[1]; /*0xffc15e95*/
v40 = v15; /*0xffc15e98*/
v12[1] = v17; /*0xffc15e9b*/
if ( v16 ) /*0xffc15e9e*/
{
n512_5 = 0; /*0xffc15edc*/
if ( n512 ) /*0xffc15ee0*/
{
v23 = v42; /*0xffc15ee2*/
n512_2 = n512; /*0xffc15ee5*/
n512_3 = n512; /*0xffc15ee8*/
do /*0xffc15f4c*/
{
v15[1] = 0; /*0xffc15eeb*/
v24 = v23; /*0xffc15eef*/
v25 = v15[1]; /*0xffc15ef1*/
v26 = v46; /*0xffc15efa*/
*v15 = (int)v23; /*0xffc15efd*/
*v15 |= 2u; /*0xffc15eff*/
*v15 |= 1u; /*0xffc15f02*/
v42 = v23 + 1024; /*0xffc15f05*/
n512_4 = 512; /*0xffc15f08*/
v15[1] = v25; /*0xffc15f0a*/
v28 = __PAIR64__(v44, v26); /*0xffc15f0d*/
do /*0xffc15f34*/
{
*v24 = v28 | 2; /*0xffc15f15*/
*v24 |= 1u; /*0xffc15f19*/
*v24 |= 0x80u; /*0xffc15f1c*/
v24[1] = HIDWORD(v28); /*0xffc15f28*/
v24 += 2; /*0xffc15f2b*/
v28 += 0x200000LL; /*0xffc15f2e*/
--n512_4; /*0xffc15f31*/
}
while ( n512_4 ); /*0xffc15f34*/
v23 = v42; /*0xffc15f36*/
v44 = HIDWORD(v28); /*0xffc15f39*/
v15 = v40 + 2; /*0xffc15f3f*/
v46 = v28; /*0xffc15f42*/
v16 = n512_2-- == 1; /*0xffc15f45*/
v40 += 2; /*0xffc15f49*/
}
while ( !v16 ); /*0xffc15f4c*/
v21 = v43; /*0xffc15f4e*/
if ( n512 >= 0x200 ) /*0xffc15f54*/
goto LABEL_40; /*0xffc15f54*/
n512_5 = n512_3; /*0xffc15f56*/
}
v29 = 512 - n512_5; /*0xffc15f60*/
do /*0xffc15f72*/
{
DxeIplSetMem32(v15, 8); /*0xffc15f65*/
v15 += 2; /*0xffc15f6b*/
--v29; /*0xffc15f6f*/
}
while ( v29 ); /*0xffc15f72*/
v21 = v43; /*0xffc15f74*/
LABEL_40:
v11 = v46; /*0xffc15f77*/
goto LABEL_41; /*0xffc15f77*/
}
v18 = v44; /*0xffc15ea0*/
n512_6 = 512; /*0xffc15ea3*/
do /*0xffc15ec9*/
{
*v15 = v11 | 2; /*0xffc15eaa*/
*v15 |= 1u; /*0xffc15eae*/
*v15 |= 0x80u; /*0xffc15eb1*/
v15[1] = v18; /*0xffc15ebd*/
v15 += 2; /*0xffc15ec0*/
v20 = v11 + 0x40000000; /*0xffc15ec3*/
v18 = (__PAIR64__(v18, v11) + 0x40000000) >> 32; /*0xffc15ec3*/
v11 += 0x40000000; /*0xffc15ec3*/
--n512_6; /*0xffc15ec6*/
}
while ( n512_6 ); /*0xffc15ec9*/
v44 = v18; /*0xffc15ecb*/
v21 = v43; /*0xffc15ece*/
v46 = v20; /*0xffc15ed1*/
LABEL_41:
v13 = v42; /*0xffc15f7a*/
v12 = v21 + 2; /*0xffc15f7d*/
v16 = n0x200_3-- == 1; /*0xffc15f80*/
v43 = v12; /*0xffc15f84*/
}
while ( !v16 ); /*0xffc15f87*/
if ( n0x200 < 0x200 ) /*0xffc15f90*/
{
n0x200_5 = n0x200_4; /*0xffc15f92*/
goto LABEL_44; /*0xffc15f92*/
}
return v33; /*0xffc15fac*/
}