Advertisement
Guest User

Untitled

a guest
Apr 10th, 2020
190
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. pix: ; rdi, rsi, rdx
  2.     push rdx
  3.     push rdi
  4.     push rsi ; stack = 16 * k + 8
  5.  
  6.     rdtsc ; answer in edx:eax
  7.  
  8.     mov edi, edx
  9.     shl rdi, 32
  10.     add rdi, rax
  11.  
  12.     call pixtime
  13.  
  14.     pop rsi
  15.     pop rdi
  16.     pop rdx
  17.  
  18.     ; preserve registers
  19.     push rbx
  20.     push rbp
  21.     push r12
  22.     push r13
  23.     push r14
  24.     push r15
  25.  
  26.     sub rsp, 8 ; stack = 16 * k + 8
  27.    
  28. loop_pix:
  29.     mov rcx, 1
  30.     xadd [rsi], rcx ; rax will equal current [rsi]
  31.     cmp rcx, rdx ; rdx == max
  32.     jae exit
  33.  
  34.     mov r10, rcx
  35.  
  36.     push rdi
  37.     push rsi
  38.     push rdx
  39.  
  40.     lea rdi, [rcx * 8]
  41.     count_Pi rdi
  42.  
  43.     pop rdx
  44.     pop rsi
  45.     pop rdi
  46.  
  47.     shl r10, 2 ; multiply array index by 4
  48.     shr rax, 32
  49.  
  50.     mov [rdi + r10], eax
  51.  
  52.     jmp loop_pix
  53.  
  54. exit:
  55.     rdtsc ; answer in edx:eax
  56.  
  57.     mov edi, edx
  58.     shl rdi, 32
  59.     add rdi, rax
  60.  
  61.     call pixtime
  62.  
  63.     add rsp, 8
  64.    
  65.     pop r15
  66.     pop r14
  67.     pop r13
  68.     pop r12
  69.     pop rbp
  70.     pop rbx
  71.  
  72.     ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement