Advertisement
Hinski2

Untitled

May 24th, 2024
12
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.30 KB | None | 0 0
  1. # zad5
  2.  
  3. ---
  4.  
  5. `eliminacji wspólnych podwyrażeń` - wykrywanie i eliminacja powtarzajacych się obliczeń
  6.  
  7. ```c
  8. long neigh(long a[], long n, long i, long j) {
  9. long ul = a[(i-1)*n + (j-1)];
  10. long ur = a[(i-1)*n + (j+1)];
  11. long dl = a[(i+1)*n - (j-1)];
  12. long dr = a[(i+1)*n - (j+1)];
  13.  
  14. return ul + ur + dl + dr;
  15. }
  16. ```
  17.  
  18. ```nasm
  19. argumenty:
  20. a[] - rdi
  21. n - rsi
  22. i - rdx
  23. j - rcx
  24.  
  25. neigh:
  26. decq %rdx ; rdx = i - 1
  27. leaq -1(%rcx), %r8 ; r8 = j - 1
  28. incq %rcx ; rcx = j + 1
  29. imulq %rsi, %rdx ; rdx = (i - 1) * n
  30. addq %rsi, %rsi ; rsi = 2n
  31. addq %rdx, %rsi ; rsi = 2n + (i - 1) * n = (i + 1) * n
  32. leaq (%rdx,%r8), %r9 ; r9 = (i - 1) * n + j - 1
  33. addq %rcx, %rdx ; rdx = (i - 1) * n + j + 1
  34. movq (%rdi,%rdx,8), %rax ; rax = a[(i - 1) * n + (j + 1)]
  35. movq %rsi, %rdx ; rdx = (i + 1) * n
  36. subq %rcx, %rsi ; rsi = (i + 1) * n - j - 1
  37. addq (%rdi,%r9,8), %rax ; rax += a[(i - 1) * n + (j - 1)]
  38. subq %r8, %rdx ; rdx = (i + 1) * n - j + 1
  39. addq (%rdi,%rdx,8), %rax ; rax += a[(i + 1) * n - (j - 1)]
  40. addq (%rdi,%rsi,8), %rax ; rax += a[(i + 1) * n - (j + 1)]
  41. ret
  42.  
  43. 2; r8 = j - 1
  44. 3; rcx = j + 1
  45. 4; rdx = (i - 1) * n
  46. 5; rsi = (i + 1) * n
  47.  
  48. decq %rdx ; rdx = i - 1
  49. leaq -1(%rcx), %r8 ; r8 = j - 1
  50. incq %rcx ; rcx = j + 1
  51. imulq %rsi, %rdx ; rdx = (i - 1) * n
  52. leaq (%rdx,%rsi,2), %rsi ; rsi = (i + 1) * n
  53. movq %rsi, %r9 ; r9 = (i + 1) * n
  54. addq %r8, %r9 ; r9 = (i + 1) * n + (j - 1)
  55. movq (%rdi, %r9, 8), %rax ; rax = [ul]
  56. addq $2, %r9 ; r9 = (i + 1) * n + (j + 1)
  57. addq (%rdi, %r9, 8), %rax ; rax = [ul] + [ur]
  58. subq %rcx, %rdx ; rdx = (i - 1) * n - (j + 1)
  59. addq (%rdi, %rdx, 8), rax ; rax = [ul] + [ur] + [dr]
  60. addq $2, %rdx ; rdx = (i - 1) * n - (j - 1)
  61. addq (%rdi, %rdx, 8), rax ; gg
  62. ret
  63. ```
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement