Advertisement
Guest User

bubble sort sse3

a guest
Jul 1st, 2013
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.72 KB | None | 0 0
  1. global sort32
  2.  
  3. sort32: start
  4.  
  5. mov eax, [ebp+8] ; float* x
  6. mov ebx, [ebp+12] ; int n
  7.  
  8.  
  9. call sort
  10.  
  11. stop
  12.  
  13. ; --------------------------------------------------
  14. ; Inserire qui il proprio algoritmo di ordinamento
  15. ; --------------------------------------------------
  16. ; eax = vector start address
  17. ; ebx = vector length
  18. ; --------------------------------------------------
  19.  
  20. sort:
  21. mov edi, ebx ;contatore ciclo esterno
  22. sub edi, 4
  23.  
  24. ciclo_esterno:
  25. mov esi, 0 ;contatore ciclo interno
  26.  
  27. ciclo_interno:
  28. movups xmm0, [eax+esi*4]
  29. jmp verifica
  30.  
  31. ; controllo se l'array da 4 non è già ordinato
  32. verifica:
  33. movaps xmm4, xmm0
  34. shufps xmm4, xmm4, 10010000b
  35. cmpleps xmm4, xmm0
  36. movmskps edx, xmm4
  37. cmp edx, 15
  38. je incremento
  39.  
  40.  
  41. movaps xmm1, xmm0
  42. movhlps xmm1, xmm0
  43.  
  44. movaps xmm4, xmm0 ;confronto
  45. minps xmm0, xmm1
  46. maxps xmm1, xmm4
  47.  
  48. shufps xmm1, xmm1, 11100001b ;inverto i massimi e riconfronto
  49.  
  50. movaps xmm4, xmm0 ;confronto
  51. minps xmm0, xmm1
  52. maxps xmm1, xmm4
  53.  
  54. movaps xmm4, xmm0
  55. shufps xmm4, xmm4, 11100001b ; confronto la coppia dei minimi
  56.  
  57. cmpltps xmm4, xmm0
  58. movmskps edx, xmm4
  59. cmp edx, 2
  60. je cmp_max
  61. shufps xmm0, xmm0, 11100001b ; non sono ordinati all'interno quindi scambio
  62.  
  63. cmp_max:
  64. movaps xmm4, xmm1
  65. shufps xmm4, xmm4, 11100001b ; confronto la coppia dei massimi
  66.  
  67. cmpltps xmm4, xmm1
  68. movmskps edx, xmm4
  69. cmp edx, 2
  70. je unisci
  71. shufps xmm1, xmm1, 11100001b ; non sono ordinati all'interno quindi scambio
  72.  
  73. unisci:
  74. movlhps xmm0, xmm1
  75. movups [eax+esi*4], xmm0
  76.  
  77. incremento:
  78. inc esi
  79. cmp esi, edi
  80. jg aggiorna_edi
  81. jmp ciclo_interno
  82.  
  83. aggiorna_edi:
  84. dec edi
  85. cmp edi, 0
  86. jl endl
  87. jmp ciclo_esterno
  88.  
  89.  
  90. endl: ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement