Facebook
From xx, 4 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 360
  1. global  main
  2. extern  printf
  3. extern  inicjuj_czas
  4. extern  drukuj_czas
  5.  
  6. size    equ      16*1048576
  7.  
  8. section .data
  9. zero:   dq      0.0
  10. align   16
  11. one:    dq      1.0, 1.0
  12. two:    dq      2.0, 2.0
  13. align   32
  14. four:   dq      4.0, 4.0, 4.0, 4.0
  15. init:   dq      1.0, 2.0, 3.0, 4.0
  16.  
  17. str:            db      '%lf %lf %lf',10,0
  18.  
  19. section .bss
  20. align 32       
  21. va:     resq    size
  22. vb:     resq    size
  23. vc:     resq    size
  24.  
  25. section .text
  26.  
  27. main:
  28. sub     rsp,8
  29.  
  30. call    fill3
  31.  
  32. call    inicjuj_czas
  33.  
  34. call    vv3
  35.  
  36. call    drukuj_czas
  37.  
  38. call    print_result3
  39.  
  40. add     rsp,8
  41. ret
  42.  
  43. vv1:
  44. mov r12,va
  45. mov r13,vb
  46. mov r14,vc
  47. mov r15d,size
  48. _petla:
  49. cmp r15d,0
  50. je _koniec
  51. movq xmm0,[r12]
  52. mulsd xmm0,xmm0
  53. movq xmm1,[r13]
  54. mulsd xmm1,xmm1
  55. addsd xmm1,xmm0
  56. sqrtsd xmm0,xmm1
  57. movq [r14],xmm0
  58. dec r15d
  59. add r12,8
  60. add r13,8
  61. add r14,8
  62. jmp _petla
  63. _koniec:
  64. ret
  65.  
  66. ;do uzupelnienia
  67.  
  68. ret
  69.  
  70. vv2:
  71. mov r12,va
  72. mov r15d,size
  73. _petla2:
  74. cmp r15d,0
  75. je _koniec2
  76. movq xmm0,[r12]
  77. mulsd xmm0,xmm0
  78. movq xmm1,[r12+8]
  79. mulsd xmm1,xmm1
  80. addsd xmm1,xmm0
  81. sqrtsd xmm0,xmm1
  82. movq [r12+16],xmm0
  83. dec r15d
  84. add r12,24
  85. jmp _petla2
  86. _koniec2:
  87. ret
  88.  
  89. ;do uzupelnienia
  90.  
  91. ret
  92.  
  93. vv3:
  94. mov r12,va
  95. mov r15d,size/2
  96. _petla3:
  97. cmp r15d,0
  98. je _koniec3
  99. movapd xmm0,[r12]
  100. mulpd xmm0,xmm0
  101. movapd xmm1,[r12+16]
  102. mulpd xmm1,xmm1
  103. addpd xmm1,xmm0
  104. sqrtpd xmm0,xmm1
  105. movapd [r12+32],xmm0
  106. dec r15d
  107. add r12,48
  108. jmp _petla3
  109. _koniec3:
  110. ret
  111.  
  112. ;do uzupelnienia
  113.  
  114. ret
  115.  
  116.  
  117. vv4:
  118. mov     r15d,size/4
  119. mov     rsi,va
  120. vv_loop4:
  121. vmovapd ymm0,[rsi]
  122. vmovapd ymm1,[rsi+32]
  123. vmulpd  ymm0,ymm0
  124. vmulpd  ymm1,ymm1
  125. vaddpd  ymm1,ymm0
  126. vsqrtpd ymm0,ymm1
  127. add     rsi,96
  128. vmovapd [rsi-32],ymm0
  129. dec     r15d
  130. jne     vv_loop4
  131. ret
  132.  
  133.  
  134. fill1:
  135. xor     r15d,r15d
  136. movq    xmm0,[zero]
  137. movq    xmm1,[one]
  138. fill_loop1:
  139. addsd   xmm0,xmm1
  140. movq    [va+8*r15d],xmm0
  141. movq    [vb+8*r15d],xmm0
  142. inc     r15d
  143. cmp     r15d,size
  144. jne     fill_loop1
  145. ret
  146.  
  147. fill2:
  148. mov     r15d,size
  149. mov     r13,va
  150. movq    xmm0,[zero]
  151. movq    xmm1,[one]
  152. fill_loop2:
  153. addsd   xmm0,xmm1
  154. movq    [r13],xmm0
  155. movq    [r13+8],xmm0
  156. add     r13,24
  157. dec     r15d
  158. jne     fill_loop2
  159. ret
  160.  
  161. fill3:
  162. mov     r15d,size/2
  163. mov     r13,va
  164. movapd  xmm0,[init]
  165. movapd  xmm1,[two]
  166. fill_loop3:
  167. movapd  [r13],xmm0
  168. movapd  [r13+16],xmm0
  169. addpd   xmm0,xmm1
  170. add     r13,48
  171. dec     r15d
  172. jne     fill_loop3
  173. ret
  174.  
  175. fill4:
  176. mov     r15d,size/4
  177. mov     r13,va
  178. vmovapd ymm0,[init]
  179. vmovapd ymm1,[four]
  180. fill_loop4:
  181. vmovapd [r13],ymm0
  182. vmovapd [r13+32],ymm0
  183. vaddpd  ymm0,ymm1
  184. add     r13,96
  185. dec     r15d
  186. jne     fill_loop4
  187. ret
  188.  
  189. print_result1:
  190. xor     r15d,r15d
  191. sub     rsp,8
  192. print_loop1:
  193. mov     rdi,str
  194. movq    xmm0,[va+8*r15d]
  195. movq    xmm1,[vb+8*r15d]
  196. movq    xmm2,[vc+8*r15d]
  197. mov     eax,3
  198. call    printf
  199. inc     r15d
  200. cmp     r15d,size
  201. jne     print_loop1
  202. add     rsp,8
  203. ret
  204.  
  205. print_result2:
  206. sub     rsp,8
  207. mov     r15d,size
  208. mov     r13,va
  209. print_loop2:
  210. mov     rdi,str
  211. movq    xmm0,[r13]
  212. movq    xmm1,[r13+8]
  213. movq    xmm2,[r13+16]
  214. mov     eax,3
  215. call    printf
  216. add     r13,24
  217. dec     r15d
  218. jne     print_loop2
  219. add     rsp,8
  220. ret
  221.  
  222. print_result3:
  223. sub     rsp,8
  224. mov     r15d,size/2
  225. mov     r13,va
  226. print_loop3:
  227. xor     r14d,r14d
  228. print_loop3a:
  229. mov     rdi,str
  230. movq    xmm0,[r13+r14]
  231. movq    xmm1,[r13+r14+16]
  232. movq    xmm2,[r13+r14+32]
  233. mov     eax,3
  234. call    printf
  235. add     r14d,8
  236. cmp     r14d,16
  237. jne     print_loop3a
  238. add     r13,48
  239. dec     r15d
  240. jne     print_loop3
  241. add     rsp,8
  242. ret
  243.  
  244. print_result4:
  245. sub     rsp,8
  246. mov     r15d,size/4
  247. mov     r13,va
  248. print_loop4:
  249. xor     r14d,r14d
  250. print_loop4a:
  251. mov     rdi,str
  252. movq    xmm0,[r13+r14]
  253. movq    xmm1,[r13+r14+32]
  254. movq    xmm2,[r13+r14+64]
  255. mov     eax,3
  256. call    printf
  257. add     r14d,8
  258. cmp     r14d,32
  259. jne     print_loop4a
  260. add     r13,96
  261. dec     r15d
  262. jne     print_loop4
  263. add     rsp,8
  264. ret
  265.