// RegAccessValidateRange - addr:0xffdaf121
unsigned int __usercall RegAccessValidateRange@<eax>(unsigned int n0xC@<edx>, __int64 a2, int a3, int a4)
{
int v5; // edi
unsigned int v6; // esi
bool v7; // cc
int n4; // eax
unsigned __int64 v9; // rax
__int64 v10; // rax
if ( !a4 || n0xC >= 0xC )
return -2147483646;
if ( n0xC - 4 > 3 )
v5 = a3;
else
v5 = 1;
v6 = n0xC & 3;
if ( (a2 & ((unsigned __int8)byte_FFDB05E0[v6] - 1)) != 0 )
return -2147483645;
if ( !v5 )
{
if ( !HIDWORD(a2) )
{
v7 = 1;
goto LABEL_12;
}
return -2147483645;
}
v9 = InternalRShift64(0xFFFFFFFF);
if ( v9 < (unsigned int)(v5 - 1) )
return -2147483645;
v10 = InternalLShift64(v9 - (unsigned int)v5 + 1);
if ( HIDWORD(a2) < HIDWORD(v10) )
goto LABEL_13;
if ( HIDWORD(a2) > HIDWORD(v10) )
return -2147483645;
v7 = (unsigned int)a2 <= (unsigned int)v10;
LABEL_12:
if ( !v7 )
return -2147483645;
LABEL_13:
LOBYTE(n4) = byte_FFDB05E0[v6];
if ( (unsigned __int8)n4 <= 4u )
n4 = (unsigned __int8)n4;
else
n4 = 4;
return (a4 & (n4 - 1)) != 0 ? 0x80000003 : 0;
}