RtlNumberOfSetBits
NTSTATUS __fastcall RtlNumberOfSetBits(UINT64 *a1){
NTSTATUS v1;
UINT64 v2;
int v3;
int v4;
int v5;
int v6;
int v7;
int v8;
int v9;
int v10;
int v11;
int i;
char v13;
unsigned int v14;
__int64 v15;
unsigned __int64 v16;
char v18;
v1 = 0;
v2 = a1[1];
v3 = *(_DWORD *)a1 >> 3;
v4 = *(_DWORD *)a1;
v5 = *(_DWORD *)a1 & 7;
v6 = v2 & 7;
v7 = v3 + (v5 != 0);
if( 8 - (a1[1] & 7) > (unsigned __int64)*(unsigned int *)a1 >> 3 )
{
v8 = v3 + ((*(_DWORD *)a1 & 7) != 0);
v10 = 0;
v11 = 0;
}
else
{
v8 = 8 - v6;
v9 = ((_BYTE)v3 - (8 - (_BYTE)v6)) & 7;
v10 = v9 + 1;
if( !v5 )
v10 = v9;
v11 = v7 - v10 - v8;
}
for( i = 0; v8; --v8 )
{
v13 = *(_BYTE *)v2++;
if( i == v7 - 1 && v5 )
v13 &= byte_14001DA00[v4 & 7];
++i;
v1 += *((unsigned __int8 *)RtlpBitsClearTotal + (unsigned __int8)~v13);
}
if( v11 )
{
v14 = ((unsigned int)(v11 - 1) >> 3) + 1;
v15 = v14;
i += 8 * v14;
do
{
v16 = *(_QWORD *)v2;
v2 += 8i64;
v1 += (unsigned int)((0x101010101010101i64
* ((((v16 - ((v16 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v16 - ((v16 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)
+ ((((v16 - ((v16 >> 1) & 0x5555555555555555i64)) & 0x3333333333333333i64)
+ (((v16 - ((v16 >> 1) & 0x5555555555555555i64)) >> 2) & 0x3333333333333333i64)) >> 4)) & 0xF0F0F0F0F0F0F0Fi64)) >> 32) >> 24;
--v15;
}
while( v15 );
}
for( ; v10; --v10 )
{
v18 = *(_BYTE *)v2++;
if( i == v7 - 1 && v5 )
v18 &= byte_14001DA00[v4 & 7];
++i;
v1 += *((unsigned __int8 *)RtlpBitsClearTotal + (unsigned __int8)~v18);
}
return v1;
}Referenced by:
CmpFlushHive
CmpLoadHiveThread
CmpMountPreloadedHives
EtwQueryPerformanceTraceInformation
HalpDmaAllocateScatterPagesFromContiguousPoolV2
HalpDmaAllocateScatterPagesFromContiguousPoolV3
HvFoldBackUnreconciledData
HvFreeHivePartial
HvWriteHivePrimaryFile
HvpAddBin
HvpApplyLegacyLogFile
HvpGenerateLogEntry
HvpGenerateLogEntryDirtyData
HvpPerformLogFileRecovery
MiReleaseDriverPtes
PopEvaluateGlobalUserStatus
PspQueryRateControlHistory
RtlNumberOfClearBits
ST_STORE::StDmCleanup
ST_STORE::StGetStatsWorker
ST_STORE::StStart
SepAddLuidToIndexEntry
SepGetLowBoxNumberEntry