EmonConfigureCounter

UINT64 __stdcall EmonConfigureCounter(UINT64 a1, CHAR a2, INT64 a3, UINT64 a4, CHAR a5){
  int v5; 
  __int64 v6; 
  char v7; 
  unsigned int v8; 
  __int64 v9; 
  UINT64 result; 
  unsigned int v11; 
  UINT64 v12; 
  UINT64 v13; 
  int v14; 
  unsigned __int64 v15; 
  unsigned __int64 v16; 
  __int64 v17; 

  v5 = a3;
  v6 = (unsigned int)a4;
  v7 = a1;
  if( (unsigned int)a1 >= *(&CmpDummyThreadEvent + 1223) )
  {
    v14 = a1 - *(&CmpDummyThreadEvent + 1223);
    v15 = __readmsr(0x38Fu);
    v16 = ~(15i64 << (4 * ((unsigned __int8)a1 - *(&CmpDummyThreadEvent + 4892)))) & __readmsr(0x38Du);
    if( a2 )
    {
      v16 |= v6;
      if( a5 )
        v16 |= 8i64 << (4 * (unsigned __int8)v14);
      if( *(&CmpDummyThreadEvent + 1236) < 0x40u )
        v17 = (1i64 << *(&CmpDummyThreadEvent + 4944)) - 1;
      else
        v17 = -1i64;
      __writemsr(v14 + 777, v17 & -(a5 != 0 ? a3 : 0));
      _bittestandset64((__int64 *)&v15, (unsigned int)(v14 + 32));
    }
    else
    {
      _bittestandreset64((__int64 *)&v15, (unsigned int)(v14 + 32));
    }
    __writemsr(0x38Fu, v15);
    v12 = v16;
    result = v16;
    v11 = 909;
    goto LABEL_18;
  }
  if( !a2 )
  {
    result = 0i64;
    v11 = a1 + 390;
    LODWORD(v13) = 0;
LABEL_19:
    __writemsr(v11, __PAIR64__(v13, result));
    return result;
  }
  v8 = a4 | (a5 != 0 ? 5242880 : 0x400000);
  if( *(&CmpDummyThreadEvent + 1231) < 0x40u )
    v9 = (1i64 << *(&CmpDummyThreadEvent + 4924)) - 1;
  else
    v9 = -1i64;
  __writemsr(a1 + 193, v9 & -(__int64)(v5 & (unsigned int)-(a5 != 0)));
  result = v8;
  __writemsr(a1 + 390, v8);
  if( *(&CmpDummyThreadEvent + 1216) >= 2u )
  {
    v11 = 911;
    result = __readmsr(0x38Fu) | (1i64 << v7);
    v12 = result;
LABEL_18:
    v13 = HIDWORD(v12);
    goto LABEL_19;
  }
  return result;
}

Referenced by:

EmonDisableMonitoring
EmonEnableMonitoring
EmonRestartProfiling