Advertisement
T-D-K

Untitled

Jan 12th, 2019
678
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. int __cdecl memcmp(const void *Buf1, const void *Buf2, size_t Size)
  2. {
  3.   signed __int64 v3; // rdx
  4.   bool v4; // cf
  5.   size_t v6; // r9
  6.   unsigned __int64 v7; // rax
  7.   size_t v8; // r9
  8.  
  9.   v3 = Buf2 - Buf1;
  10.   if ( Size < 8 )
  11.     goto LABEL_6;
  12.   for ( ; Buf1 & 7; --Size )
  13.   {
  14.     v4 = *Buf1 < *(Buf1 + v3);
  15.     if ( *Buf1 != *(Buf1 + v3) )
  16.       return -v4 - (v4 - 1);
  17.     Buf1 = Buf1 + 1;
  18.   }
  19.   if ( !(Size >> 3) )
  20.   {
  21. LABEL_6:
  22.     if ( !Size )
  23.       return 0;
  24.     while ( 1 )
  25.     {
  26.       v4 = *Buf1 < *(Buf1 + v3);
  27.       if ( *Buf1 != *(Buf1 + v3) )
  28.         break;
  29.       Buf1 = Buf1 + 1;
  30.       if ( !--Size )
  31.         return 0;
  32.     }
  33.     return -v4 - (v4 - 1);
  34.   }
  35.   v6 = Size >> 5;
  36.   if ( Size >> 5 )
  37.   {
  38.     while ( 1 )
  39.     {
  40.       v7 = *Buf1;
  41.       if ( *Buf1 != *(Buf1 + v3) )
  42.         break;
  43.       v7 = *(Buf1 + 1);
  44.       if ( v7 != *(Buf1 + v3 + 8) )
  45.         goto LABEL_24;
  46.       v7 = *(Buf1 + 2);
  47.       if ( v7 != *(Buf1 + v3 + 16) )
  48.         goto LABEL_23;
  49.       v7 = *(Buf1 + 3);
  50.       if ( v7 != *(Buf1 + v3 + 24) )
  51.       {
  52.         Buf1 = Buf1 + 8;
  53. LABEL_23:
  54.         Buf1 = Buf1 + 8;
  55. LABEL_24:
  56.         Buf1 = Buf1 + 8;
  57.         break;
  58.       }
  59.       Buf1 = Buf1 + 32;
  60.       if ( !--v6 )
  61.       {
  62.         Size &= 0x1Fu;
  63.         goto LABEL_18;
  64.       }
  65.     }
  66.   }
  67.   else
  68.   {
  69. LABEL_18:
  70.     v8 = Size >> 3;
  71.     if ( !(Size >> 3) )
  72.       goto LABEL_6;
  73.     while ( 1 )
  74.     {
  75.       v7 = *Buf1;
  76.       if ( *Buf1 != *(Buf1 + v3) )
  77.         break;
  78.       Buf1 = Buf1 + 8;
  79.       if ( !--v8 )
  80.       {
  81.         Size &= 7u;
  82.         goto LABEL_6;
  83.       }
  84.     }
  85.   }
  86.   v4 = _byteswap_uint64(v7) < _byteswap_uint64(*(Buf1 + v3));
  87.   return -v4 - (v4 - 1);
  88. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement