Advertisement
Guest User

Untitled

a guest
Jul 2nd, 2013
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. global sort64
  2.  
  3. sort64: start
  4. pushaq
  5.  
  6. mov rax, rdi ; float* x
  7. mov rbx, rsi ; int n
  8.  
  9. call sort
  10.  
  11. popaq
  12. stop
  13.  
  14. ; --------------------------------------------------
  15. ; Inserire qui il proprio algoritmo di ordinamento
  16. ; --------------------------------------------------
  17. ; rax = vector start address
  18. ; rbx = vector length
  19. ; --------------------------------------------------
  20.  
  21. sort:
  22. cmp rbx, 1
  23. jle endl
  24.  
  25. mov rdi, rbx ;contatore ciclo esterno
  26. sub rdi, 4
  27. mov rcx, 0 ;se 1 ci sono stati scambi, se 0 no
  28.  
  29. ciclo_esterno:
  30. mov rsi, 0 ;contatore ciclo interno
  31.  
  32. ciclo_interno:
  33.  
  34. vmovups ymm0, [rax+rsi*4]
  35.  
  36. vmovaps ymm2, ymm0
  37. vshufps ymm2, ymm2, 10010000b
  38. vcmpleps ymm2, ymm0
  39. vmovmskps rdx, ymm2
  40. cmp rdx, 255
  41. je incremento
  42.  
  43. mov rcx, 1
  44. vmovaps ymm1, ymm0
  45. vshufps ymm1, ymm1, 11101110b
  46.  
  47. vmovaps ymm2, ymm0
  48. vminps ymm0, ymm1
  49. vmaxps ymm1, ymm2
  50.  
  51. vshufps ymm1, ymm1, 11100001b
  52.  
  53. vmovaps ymm2, ymm0
  54. vminps ymm0, ymm1
  55. vmaxps ymm1, ymm2
  56.  
  57. vmovaps ymm2, ymm0
  58. vshufps ymm2, ymm2, 11100001b ; confronto la coppia dei minimi
  59.  
  60. vcmpltps ymm2, ymm0
  61. vmovmskps edx, xmm2
  62. cmp edx, 2
  63. je cmp_max
  64. vshufps ymm0, ymm0, 11100001b ; non sono ordinati all'interno quindi scambio
  65.  
  66. cmp_max:
  67.  
  68. vmovaps ymm2, ymm1
  69. vshufps ymm2, ymm2, 11100001b ; confronto la coppia dei minimi
  70.  
  71. vcmpltps ymm2, ymm1
  72. vmovmskps edx, xmm2
  73. cmp edx, 2
  74. je unisci
  75. vshufps ymm1, ymm1, 11100001b ; non sono ordinati all'interno quindi scambio
  76.  
  77. unisci:
  78.  
  79.  
  80. vshufps ymm0,ymm1, 01000100b
  81. vmovups [rax+rsi*4], xmm0
  82.  
  83. incremento:
  84.  
  85. inc rsi
  86. cmp rsi, rdi
  87. jg aggiorna_rdi
  88. jmp ciclo_interno
  89.  
  90. aggiorna_rdi:
  91.  
  92.  
  93. cmp rcx, 0
  94. je endl
  95. dec rdi
  96. cmp rdi, 0
  97. jl endl
  98. jmp ciclo_esterno
  99.  
  100.  
  101.  
  102. endl: ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement