_mm_permute2_ps
Visual Studio 2010 SP1 est requis
Spécifique à Microsoft
Génère le vpermil2ps de l'instruction XMM XOP pour sélectionner des valeurs à virgule flottante de ses deux premières sources, avec remise à zéro facultative.
__m128 _mm_permute2_ps (
__m128 src1,
__m128 src2,
__m128i selector,
int control
);
Paramètres
[in] src1
Un paramètre de 128 bits qui contient quatre valeurs à virgule flottante 32 bits.[in] src2
Un paramètre de 128 bits qui contient quatre valeurs à virgule flottante 32 bits.[in] selector
Paramètre de 128 bits qui contient quatre valeurs du sélecteur de l'entier 32 bits.[in] control
Paramètre de l'entier de 32 bits qui contrôle la méthode permettant de décider si les valeurs du résultat doivent être remises à zéro.
Valeur de retour
Résultat r de 128 bits qui contient quatre valeurs à virgule flottante de 32 bits.
Chaque valeur dans le résultat est égale à zéro ou a une valeur sélectionnée parmi les huit valeurs à virgule flottante de 32 bits dans src1 et src2.
Configuration requise
Intrinsèque |
Architecture |
---|---|
_mm_permute2_ps |
XOP |
Fichier d'en-tête <intrin.h>
Notes
Chacun des quatre mots doubles dans selector sélectionne la valeur de son mot double correspondant du résultat de l'une des huit valeurs à virgule flottante de 32 bits dans src1 et src2. Cette valeur peut être remplacée par zéro avant d'être écrite dans le résultat, en fonction de la valeur de control et la valeur du bit 3 du mot double selector.
Pour chaque mot double dans selector, les trois bits de poids faible sélectionnent l'une des valeurs à virgule flottante dans src1 ou src2, avec les valeurs comprises entre 0 et 3 sélectionnant src1[0] à src1[3] et les valeurs comprises entre 4 et 7 sélectionnant src2[0] à src2[3].
Le bit suivant de chaque mot double dans selector est appelé « bit correspondant » ci-après. Les 28 bits de poids fort de chaque mot double dans selector sont ignorés.
La quatrième source, control, détermine les conditions sous lesquelles les valeurs du résultat ont la valeur 0. La valeur de control doit être 0, 1, 2 ou 3. Si control est 0 ou 1, la valeur à virgule flottante sélectionnée est écrite dans la destination. Si control a la valeur 2, la valeur à virgule flottante sélectionnée est écrite dans la destination si le bit correspondant dans selector a la valeur 0, mais la valeur zéro est écrite si le bit de correspondance a la valeur 1. If control a la valeur 3, la valeur à virgule flottante sélectionnée est écrite dans la destination si le bit correspondant a la valeur 1, mais la valeur zéro est écrite si le bit de correspondance a la valeur 0.
L'instruction vpermil2ps fait partie de la famille XOP des instructions. Avant d'utiliser cette fonction intrinsèque, vous devez vérifier que le processeur prend en charge cette instruction. Pour déterminer la prise en charge du matériel pour cette instruction, appelez la fonction intrinsèque __cpuid avec InfoType = 0x80000001 et vérifiez le bit 11 de CPUInfo[2] (ECX). Ce bit est égal à 1 lorsque l'instruction est prise en charge, sinon il est égal à 0.
Exemple
#include <stdio.h>
#include <intrin.h>
int main()
{
__m128 a, b, d;
__m128i select;
int i;
for (i = 0; i < 4; i++) {
a.m128_f32[i] = i;
b.m128_f32[i] = i+4;
}
select.m128i_i32[0] = 5;
select.m128i_i32[1] = 1 + 8; // turn on match bit
select.m128i_i32[2] = 2;
select.m128i_i32[3] = 6 + 8; // turn on match bit
d = _mm_permute2_ps(a, b, select, 0); // just select, don't zero
for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
printf_s("\n");
d = _mm_permute2_ps(a, b, select, 2); // zero if match is 1
for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
printf_s("\n");
d = _mm_permute2_ps(a, b, select, 3); // zero if match is 0
for (i = 0; i < 4; i++) printf_s(" %.3f", d.m128_f32[i]);
printf_s("\n");
}
Voir aussi
Référence
Autres ressources
Fonctions XOP intrinsèques ajoutées pour Visual Studio 2010 SP1
Historique des modifications
Date |
Historique |
Motif |
---|---|---|
Mars 2011 |
Ce contenu a été ajouté. |
Modifications de fonctionnalités dans le SP1. |