Extensia AVX (Advanced Vector Extensions) extinde registrele la 256 de biți (registrele YMM0–YMM15, capabile de 8 float-uri simultane) și introduce codificarea VEX cu 3 operanzi, eliminând suprascrierea operandului sursă.
; În SSE vechi (distructiv, doar 2 operanzi):
; movaps xmm0, xmm1
; addps xmm0, xmm2 ; Valoarea originală din XMM0 este pierdută
; În AVX modern (non-distructiv, 3 operanzi independenți):
; Calculează YMM0 = YMM1 + YMM2 fără a modifica YMM1 sau YMM2!
vaddps ymm0, ymm1, ymm2
; Calcule paralele pe 8 numere float simultan:
vmovups ymm1, [rdi] ; Încarcă 8 valori float din memorie
vmulps ymm0, ymm1, ymm2 ; YMM0 = YMM1 * YMM2 (8 înmulțiri paralele)
vzeroupper ; Curăță starea superioară YMM pentru prevenirea penalizărilor SSE
Directiva VZEROUPPER: La trecerea de la instrucțiuni AVX la cod tradițional SSE sau înainte de RET, este obligatoriu apelul vzeroupper pentru a preveni penalizările de comutare de stare pe CPU-urile Intel.
Întrebări & Exemple de Cod:
Extensiile AVX și Prefixul VEX: Sintaxa cu Trei Operanzi Non-DistructivăAi o nelămurire despre utilizarea comenzii
Extensiile AVX și Prefixul VEX: Sintaxa cu Trei Operanzi Non-Distructivăsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.