Advertisement
sashachca

blet

Apr 3rd, 2018
226
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.21 KB | None | 0 0
  1. void swap(int* a, int* b)
  2. {
  3.     int tmp = *a;
  4.     *a = *b;
  5.     *b = tmp;
  6. }
  7.  
  8. // c++ without assembly
  9.  
  10. void quicksort(int numbers[], int left, size_t right) {
  11.    
  12.     if (left<right) {
  13.         int i = left;
  14.         int pivot=numbers[right];
  15.          for (int j=left; j<right; j++) {
  16.             if(numbers[j]<=pivot) {
  17.                 swap(numbers[i], numbers[j]);
  18.                 i++;
  19.             }
  20.          }
  21.    
  22.         swap(numbers[i], numbers[right]);
  23.    
  24.         quicksort(numbers, left, i-1);//, left);
  25.         quicksort(numbers, i+1, right);//, i+1);
  26.     }
  27.  
  28. }
  29.  
  30.  
  31. // c++ with assembly
  32.  
  33. void quicksort(int numbers[], int left, size_t right) {
  34.    
  35.     if (left<right){
  36.         int i = left;
  37.        
  38.         asm volatile (
  39.  
  40.                       "movl (%[numbers], %%rdx, 4), %%esi \n\t"
  41.                      
  42.                       "movl %%ebx, %%ecx \n\t"
  43.                       "for: \n\t"
  44.                       "cmp %%edx, %%ecx \n\t"
  45.                       "jge endfor \n\t"
  46.                      
  47.                           "if: \n\t"
  48.                           "movl (%[numbers], %%rcx, 4), %%edi \n\t"
  49.                           "cmp %%esi, %%edi \n\t"
  50.                           "jg endif \n\t"
  51.                      
  52.                               "movl (%[numbers], %%rax, 4), %%edi \n\t"
  53.                               "movl (%[numbers], %%rcx, 4), %%esp \n\t"
  54.                               "movl %%edi, (%[numbers], %%rcx, 4) \n\t"
  55.                               "movl %%esp, (%[numbers], %%rax, 4) \n\t"
  56.                      
  57.                      
  58.                               "incl %%eax \n\t"
  59.                      
  60.                             "endif: \n\t"
  61.                      
  62.                       "incl %%ecx \n\t"
  63.                       "jmp for \n\t"
  64.                       "endfor: \n\t"
  65.  
  66.                       : "=b" (left), "=d" (right), "=a" (i)
  67.                       : [numbers] "r" (numbers), "b" (left), "d" (right), "a" (i)
  68.                       : "memory", "ecx", "esi", "esp", "edi"
  69.                       );
  70.    
  71.         swap(numbers[i], numbers[right]);
  72.    
  73.         quicksort(numbers, left, i-1);//, left);
  74.         quicksort(numbers, i+1, right);//, i+1);
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement