Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void swap(int* a, int* b)
- {
- int tmp = *a;
- *a = *b;
- *b = tmp;
- }
- // c++ without assembly
- void quicksort(int numbers[], int left, size_t right) {
- if (left<right) {
- int i = left;
- int pivot=numbers[right];
- for (int j=left; j<right; j++) {
- if(numbers[j]<=pivot) {
- swap(numbers[i], numbers[j]);
- i++;
- }
- }
- swap(numbers[i], numbers[right]);
- quicksort(numbers, left, i-1);//, left);
- quicksort(numbers, i+1, right);//, i+1);
- }
- }
- // c++ with assembly
- void quicksort(int numbers[], int left, size_t right) {
- if (left<right){
- int i = left;
- asm volatile (
- "movl (%[numbers], %%rdx, 4), %%esi \n\t"
- "movl %%ebx, %%ecx \n\t"
- "for: \n\t"
- "cmp %%edx, %%ecx \n\t"
- "jge endfor \n\t"
- "if: \n\t"
- "movl (%[numbers], %%rcx, 4), %%edi \n\t"
- "cmp %%esi, %%edi \n\t"
- "jg endif \n\t"
- "movl (%[numbers], %%rax, 4), %%edi \n\t"
- "movl (%[numbers], %%rcx, 4), %%esp \n\t"
- "movl %%edi, (%[numbers], %%rcx, 4) \n\t"
- "movl %%esp, (%[numbers], %%rax, 4) \n\t"
- "incl %%eax \n\t"
- "endif: \n\t"
- "incl %%ecx \n\t"
- "jmp for \n\t"
- "endfor: \n\t"
- : "=b" (left), "=d" (right), "=a" (i)
- : [numbers] "r" (numbers), "b" (left), "d" (right), "a" (i)
- : "memory", "ecx", "esi", "esp", "edi"
- );
- swap(numbers[i], numbers[right]);
- quicksort(numbers, left, i-1);//, left);
- quicksort(numbers, i+1, right);//, i+1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement