meiskam

Untitled

Nov 22nd, 2020
407
9 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. __int64 __fastcall memcpy2(unsigned __int8 *a1, unsigned __int8 *a2, unsigned __int64 a3)
  2. {
  3.   unsigned __int64 v3; // rax
  4.   unsigned __int64 v4; // r11
  5.   unsigned __int8 *v5; // rcx
  6.   unsigned __int8 *v6; // r8
  7.   unsigned __int64 v7; // r10
  8.   unsigned __int64 v8; // rdx
  9.   unsigned __int64 v9; // rbx
  10.   unsigned __int8 *v10; // rsi
  11.   unsigned __int8 *v11; // rdi
  12.   unsigned __int64 v12; // r11
  13.   __int64 result; // rax
  14.   unsigned __int8 *v14; // rdx
  15.  
  16.   if ( (a1 >= a2 + 16 || a2 >= a1 + 16) && a3 > 0x16 )
  17.   {
  18.     v3 = -(signed int)a2 & 0xF;
  19.     if ( v3 > a3 )
  20.       v3 = a3;
  21.     if ( v3 )
  22.     {
  23.       v4 = a3 - 1;
  24.       v5 = a1 + 1;
  25.       v6 = a2 + 1;
  26.       v7 = a3 - 1;
  27.       *a1 = *a2;
  28.       if ( v3 != 1 )
  29.       {
  30.         v5 = a1 + 2;
  31.         v6 = a2 + 2;
  32.         v7 = a3 - 2;
  33.         a1[1] = a2[1];
  34.         if ( v3 != 2 )
  35.         {
  36.           v5 = a1 + 3;
  37.           v6 = a2 + 3;
  38.           v7 = a3 - 3;
  39.           a1[2] = a2[2];
  40.           if ( v3 != 3 )
  41.           {
  42.             v5 = a1 + 4;
  43.             v6 = a2 + 4;
  44.             v7 = a3 - 4;
  45.             a1[3] = a2[3];
  46.             if ( v3 != 4 )
  47.             {
  48.               v5 = a1 + 5;
  49.               v6 = a2 + 5;
  50.               v7 = a3 - 5;
  51.               a1[4] = a2[4];
  52.               if ( v3 != 5 )
  53.               {
  54.                 v5 = a1 + 6;
  55.                 v6 = a2 + 6;
  56.                 v7 = a3 - 6;
  57.                 a1[5] = a2[5];
  58.                 if ( v3 != 6 )
  59.                 {
  60.                   v5 = a1 + 7;
  61.                   v6 = a2 + 7;
  62.                   v7 = a3 - 7;
  63.                   a1[6] = a2[6];
  64.                   if ( v3 != 7 )
  65.                   {
  66.                     v5 = a1 + 8;
  67.                     v6 = a2 + 8;
  68.                     v7 = a3 - 8;
  69.                     a1[7] = a2[7];
  70.                     if ( v3 != 8 )
  71.                     {
  72.                       v5 = a1 + 9;
  73.                       v6 = a2 + 9;
  74.                       v7 = a3 - 9;
  75.                       a1[8] = a2[8];
  76.                       if ( v3 != 9 )
  77.                       {
  78.                         v5 = a1 + 10;
  79.                         v6 = a2 + 10;
  80.                         v7 = a3 - 10;
  81.                         a1[9] = a2[9];
  82.                         if ( v3 != 10 )
  83.                         {
  84.                           v5 = a1 + 11;
  85.                           v6 = a2 + 11;
  86.                           v7 = a3 - 11;
  87.                           a1[10] = a2[10];
  88.                           if ( v3 != 11 )
  89.                           {
  90.                             v5 = a1 + 12;
  91.                             v6 = a2 + 12;
  92.                             v7 = a3 - 12;
  93.                             a1[11] = a2[11];
  94.                             if ( v3 != 12 )
  95.                             {
  96.                               v5 = a1 + 13;
  97.                               v6 = a2 + 13;
  98.                               v7 = a3 - 13;
  99.                               a1[12] = a2[12];
  100.                               if ( v3 != 13 )
  101.                               {
  102.                                 v5 = a1 + 14;
  103.                                 v6 = a2 + 14;
  104.                                 v7 = a3 - 14;
  105.                                 a1[13] = a2[13];
  106.                                 if ( v3 == 15 )
  107.                                 {
  108.                                   v5 = a1 + 15;
  109.                                   v6 = a2 + 15;
  110.                                   v7 = a3 - 15;
  111.                                   a1[14] = a2[14];
  112.                                 }
  113.                               }
  114.                             }
  115.                           }
  116.                         }
  117.                       }
  118.                     }
  119.                   }
  120.                 }
  121.               }
  122.             }
  123.           }
  124.         }
  125.       }
  126.     }
  127.     else
  128.     {
  129.       v7 = a3;
  130.       v6 = a2;
  131.       v5 = a1;
  132.       v4 = a3 - 1;
  133.     }
  134.     v8 = a3 - v3;
  135.     v9 = 16 * (((v8 - 16) >> 4) + 1);
  136.     if ( v4 - v3 <= 0xE )
  137.       goto LABEL_46;
  138.     v10 = &a2[v3];
  139.     v11 = &a1[v3];
  140.     v12 = 0LL;
  141.     result = 0LL;
  142.     do
  143.     {
  144.       ++v12;
  145.       *(__m128i *)&v11[result] = _mm_load_si128((const __m128i *)&v10[result]);
  146.       result += 16LL;
  147.     }
  148.     while ( v12 < ((v8 - 16) >> 4) + 1 );
  149.     v5 += v9;
  150.     v6 += v9;
  151.     v7 -= v9;
  152.     if ( v8 != v9 )
  153.     {
  154. LABEL_46:
  155.       result = *v6;
  156.       *v5 = result;
  157.       if ( v7 != 1 )
  158.       {
  159.         result = v6[1];
  160.         v5[1] = result;
  161.         if ( v7 != 2 )
  162.         {
  163.           result = v6[2];
  164.           v5[2] = result;
  165.           if ( v7 != 3 )
  166.           {
  167.             result = v6[3];
  168.             v5[3] = result;
  169.             if ( v7 != 4 )
  170.             {
  171.               result = v6[4];
  172.               v5[4] = result;
  173.               if ( v7 != 5 )
  174.               {
  175.                 result = v6[5];
  176.                 v5[5] = result;
  177.                 if ( v7 != 6 )
  178.                 {
  179.                   result = v6[6];
  180.                   v5[6] = result;
  181.                   if ( v7 != 7 )
  182.                   {
  183.                     result = v6[7];
  184.                     v5[7] = result;
  185.                     if ( v7 != 8 )
  186.                     {
  187.                       result = v6[8];
  188.                       v5[8] = result;
  189.                       if ( v7 != 9 )
  190.                       {
  191.                         result = v6[9];
  192.                         v5[9] = result;
  193.                         if ( v7 != 10 )
  194.                         {
  195.                           result = v6[10];
  196.                           v5[10] = result;
  197.                           if ( v7 != 11 )
  198.                           {
  199.                             result = v6[11];
  200.                             v5[11] = result;
  201.                             if ( v7 != 12 )
  202.                             {
  203.                               result = v6[12];
  204.                               v5[12] = result;
  205.                               if ( v7 != 13 )
  206.                               {
  207.                                 result = v6[13];
  208.                                 v5[13] = result;
  209.                                 if ( v7 != 14 )
  210.                                 {
  211.                                   result = v6[14];
  212.                                   v5[14] = result;
  213.                                 }
  214.                               }
  215.                             }
  216.                           }
  217.                         }
  218.                       }
  219.                     }
  220.                   }
  221.                 }
  222.               }
  223.             }
  224.           }
  225.         }
  226.       }
  227.     }
  228.   }
  229.   else
  230.   {
  231.     v14 = &a1[a3];
  232.     do
  233.     {
  234.       result = *(++a2 - 1);
  235.       *(++a1 - 1) = result;
  236.     }
  237.     while ( a1 != v14 );
  238.   }
  239.   return result;
  240. }
RAW Paste Data