_mm256_permute2_pd
Visual Studio 2010 SP1 est requis
Spécifique à Microsoft
Génère le vpermil2pd de l'instruction YMM XOP pour sélectionner des valeurs à virgule flottante de ses deux premières sources, avec remise à zéro facultative.
__m256 _mm_permute2_pd (
__m256d src1,
__m256d src2,
__m256i selector,
int control
);
Paramètres
[in] src1
Paramètre de 256 bits qui contient quatre valeurs à virgule flottante 64 bits.[in] src2
Paramètre de 256 bits qui contient quatre valeurs à virgule flottante 64 bits.[in] selector
Paramètre de 256 bits qui contient quatre valeurs à virgule flottante 64 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 256 bits qui contient quatre valeurs à virgule flottante de 64 bits.
Chaque valeur dans les 128 bits hauts du résultat est nulle ou a la valeur sélectionnée parmi les deux valeurs à virgule flottante de 64 bits dans les 128 bits de poids fort de src1 et src2. Chaque valeur dans les 128 bits de poids faible du résultat est nulle ou a la valeur sélectionnée parmi les deux valeurs à virgule flottante de 64 bits dans les 128 bits de poids faible de src1 et src2.
Configuration requise
Intrinsèque |
Architecture |
---|---|
_mm256_permute2_pd |
XOP |
Fichier d'en-tête <intrin.h>
Notes
Chacun des deux mots quadruples dans les 128 bits de poids fort de selector sélectionne la valeur de son mot quadruple correspondant du résultat de l'une des quatre valeurs à virgule flottante de 64 bits dans les 128 bits de poids fort de 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 quadruple selector. De la même façon, chacun des deux mots quadruples dans les 128 bits de poids faible de selector sélectionne une valeur parmi l'une des quatre valeurs à virgule flottante de 64 bits dans les 128 bits de poids faible de src1 et src2, et cette valeur peut également être remplacée par zéro.
Pour chaque mot quadruple dans les 128 bits de poids fort de selector, le deuxième et le troisième bits de poids faible sélectionnent l'une des valeurs à virgule flottante dans src1 ou src2, avec les valeurs comprises entre 0 et 1 sélectionnant src1[2] à src1[3] et les valeurs comprises entre 2 et 3 sélectionnant src2[2] à src2[3]. Pour chaque mot quadruple dans les 128 bits de poids faible de selector, le deuxième et le troisième bits de poids faible sélectionnent l'une des valeurs à virgule flottante dans src1 ou src2, avec les valeurs comprises entre 0 et 1 sélectionnant src1[0] à src1[1] et les valeurs comprises entre 2 et 3 sélectionnant src2[0] à src2[1].
Le bit suivant de chaque mot quadruple dans selector est appelé « bit correspondant » ci-après. Le bit de poids faible et les 60 bits de poids fort de chaque mot quadruple 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 vpermil2pd 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()
{
__m256d a, b, d;
__m256i select;
int i;
for (i = 0; i < 4; i++) {
a.m256d_f64[i] = i;
b.m256d_f64[i] = i + 4;
}
select.m256i_i64[0] = 2 << 1;
select.m256i_i64[1] = (1 << 1) + 8; // turn on match bit
select.m256i_i64[2] = 0 << 1;
select.m256i_i64[3] = (3 << 1) + 8; // turn on match bit
d = _mm256_permute2_pd(a, b, select, 0); // just select, don't zero
printf_s("%.3lf %.3lf %.3lf %.3lf\n", d.m256d_f64[0],
d.m256d_f64[1], d.m256d_f64[2], d.m256d_f64[3]);
d = _mm256_permute2_pd(a, b, select, 2); // zero if match is 1
printf_s("%.3lf %.3lf %.3lf %.3lf\n", d.m256d_f64[0],
d.m256d_f64[1], d.m256d_f64[2], d.m256d_f64[3]);
d = _mm256_permute2_pd(a, b, select, 3); // zero if match is 0
printf_s("%.3lf %.3lf %.3lf %.3lf\n", d.m256d_f64[0],
d.m256d_f64[1], d.m256d_f64[2], d.m256d_f64[3]);
}
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. |