Accueil🇫🇷Chercher

SSE4

SSE4 (pour Streaming SIMD Extensions version 4), aussi connu sous le nom de Nehalem New Instructions (NNI) est un jeu d’instructions supplĂ©mentaires pour l’architecture x86. Le jeu complet comprend 54 instructions.

L’annonce de ce nouveau jeu d’instruction fut faite le à l’Intel Developer Forum d’automne 2006. Ce jeu d’instruction devrait améliorer les performances multimédia, les algorithmes de recherche et de détection, la protection des données (checksum de type CRC) et la vectorisation.

Sous-ensembles SSE4

Le jeu d’instruction SSE4 est constitué de trois sous-ensembles. Deux sont particuliers aux processeurs Intel, et un aux processeurs AMD :

  • Le sous-ensemble SSE4.1, introduit dans la microarchitecture Intel Penryn, qui comprend 47 instructions.
  • Le sous-ensemble SSE4.2, introduit dans la microarchitecture Intel Nehalem, qui comprend 7 instructions.
  • Le sous-ensemble SSE4a qui comprend 4 instructions. Disponible uniquement chez certains processeurs AMD

Nouvelles instructions

À la différence des précédentes implémentations des jeux SSE, le jeu SSE4 présente des instructions n’étant pas spécifiquement dédiées aux applications multimédia.

Ce jeu voit la rĂ©apparition d’un opĂ©rande implicite pour certaines instructions (cet opĂ©rande Ă©tant le registre XMM0 en tant que troisième opĂ©rande) et la disparition de l’utilisation des opĂ©randes 64 bits (registres MMX) au profit d’opĂ©randes uniquement 128 bits, c’est-Ă -dire une utilisation exclusive des registres XMM.

Beaucoup de ces instructions profitent d’un atout majeur des architectures Penryn et Nehalem, à savoir le moteur de permutation à un seul cycle (single-cycle shuffle engine).

L’instruction CPUID permet de déterminer si le processeur supporte les instructions.

SSE4.1

Instruction Description
MPSADBW Calcule 8 sommes de diffĂ©rences absolues ( |x0-y0|+|x1-y1|+|x2-y2|+|x3-y3|, |x0-y1|+|x1-y2|+|x2-y3|+|x3-y4|, ...); Cette opĂ©ration est extrĂŞmement importante pour les codecs modernes HDTV[1] et permet de calculer un bloc de diffĂ©rence de 8Ă—8 en moins de 7 cycles. Un bit d’un opĂ©rande immĂ©diat de 3 bits indique si y0 .. y11 ou y4 .. y15 doit ĂŞtre utilisĂ© depuis l’opĂ©rande destination, les deux autres si x0..x3, x4..x7, x8..x11 ou x12..x15 doit ĂŞtre utilisĂ© depuis l’opĂ©rande source.
PHMINPOSUW Trouve le plus petit mot (16 bits) non signĂ© de l’opĂ©rande source et place le rĂ©sultat dans l’opĂ©rande destination (16 bits de poids faible). L’index du mot trouvĂ© dans l’opĂ©rande source est placĂ© dans le second mot de l’opĂ©rande destination aux bits 16 Ă  18. Les bits restants de l’opĂ©rande destination sont mis Ă  zĂ©ro.
PMULDQ Effectue deux multiplications signĂ©es de deux paires d’entiers (32 bits) et sauve le rĂ©sultat (deux produits de 64 bits) dans l’opĂ©rande de destination.
PMULLD Effectue une multiplication sur des nombres signĂ©s et packĂ©s : 4 entiers signĂ©s de 32 bits (opĂ©rande source) multipliĂ©s par 4 entiers signĂ©s de 32 bits (opĂ©rande destination). Le rĂ©sultat est placĂ© dans la destination.
DPPS, DPPD Effectue un produit scalaire conditionnel entre deux opĂ©randes de 128 bits. La condition est donnĂ©e par un troisième opĂ©rande de type immĂ©diat. Le produit est en simple prĂ©cision pour DPPS et en double pour DPPD.
BLENDPS, BLENDPD, BLENDVPS, BLENDVPD, PBLENDVB, PBLENDW Effectue une copie conditionnelle d’un registre XMM vers un autre. La copie est basée soit sur un masque binaire donné par un opérande immédiat (mnémoniques sans le 'v' dans le nom) soit sur un masque binaire donné par le registre XMM0 (mnémoniques avec 'v').
PMINSB, PMAXSB, PMINUW, PMAXUW, PMINUD, PMAXUD, PMINSD, PMAXSD Trouve le minimum ou maximum pour différents types d’opérandes entiers et packés.
ROUNDPS, ROUNDSS, ROUNDPD, ROUNDSD Arrondit les valeurs d’un registre à virgule flottante en entiers en utilisant un des quatre modes d’arrondi spécifié par un opérande immédiat.
INSERTPS, PINSRB, PINSRD/PINSRQ, EXTRACTPS, PEXTRB, PEXTRW, PEXTRD/PEXTRQ Extraction et insertion. L’extraction consiste à prendre une partie d’un registre XMM pour la mettre en mémoire, tandis que l’insertion consiste à prendre un contenu mémoire et l’insérer dans un registre XMM.
PMOVSXBW, PMOVZXBW, PMOVSXBD, PMOVZXBD, PMOVSXBQ, PMOVZXBQ, PMOVSXWD, PMOVZXWD, PMOVSXWQ, PMOVZXWQ, PMOVSXDQ, PMOVZXDQ Extension de signe ou extension à zéro pour des nombres packés vers un type plus grand (correspond peu ou prou à MOVSX ou MOVZX sur l’unité générale).
PTEST Même chose que l’instruction générale TEST, c’est-à-dire qu’elle change les drapeaux ZF et CF de RFLAGS en opérant une conjonction logique (AND) entre les opérandes. L’instruction arme le drapeau ZF si au moins un des bits est armé (résultat du AND), et le drapeau CF si tous les bits correspondent.
PCMPEQQ Compare des quadruples mots (QWORDs - 64 bits) en les testant pour une Ă©galitĂ©.
PACKUSDW Convertit des doubles mots (DWORDs - 32 bits) signĂ©s en mots (WORDs - 16 bits) non signĂ©s avec saturation.
MOVNTDQA DĂ©place un double quadruple mot (DQWORD - 128 bits) de la mĂ©moire vers un registre XMM en utilisant un non temporal hint. L’opĂ©ration n’est effectuĂ©e que si la mĂ©moire est de type WC (Write Combining). Cette instruction est par exemple utile pour retrouver un rĂ©sultat depuis des pĂ©riphĂ©riques attachĂ©s au bus mĂ©moire.

Voir aussi

Articles connexes

Liens externes

Références

Cet article est issu de wikipedia. Text licence: CC BY-SA 4.0, Des conditions supplémentaires peuvent s’appliquer aux fichiers multimédias.