Partager via


_mm_permute2_pd

Visual Studio 2010 SP1 est requis

Spécifique à Microsoft

Génère le vpermil2pd de l'instruction XMM XOP pour sélectionner des valeurs à virgule flottante de ses deux premières sources, avec remise à zéro facultative.

__m128d _mm_permute2_pd (
   __m128d src1,
   __m128d src2,
   __m128i selector,
   int control
);

Paramètres

  • [in] src1
    Paramètre de 128 bits qui contient deux valeurs à virgule flottante de 64 bits.

  • [in] src2
    Paramètre de 128 bits qui contient deux valeurs à virgule flottante de 64 bits.

  • [in] selector
    Paramètre de 128 bits qui contient deux valeurs du sélecteur de l'entier 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 128 bits qui contient deux valeurs à virgule flottante de 64 bits.

Chaque valeur dans le résultat est égale à zéro ou a une valeur sélectionnée parmi les quatre valeurs à virgule flottante de 64 bits dans src1 et src2.

Configuration requise

Intrinsèque

Architecture

_mm_permute2_pd

XOP

Fichier d'en-tête <intrin.h>

Notes

Chacun des deux mots quadruples dans 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 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.

Pour chaque mot quadruple dans 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 le moins significatif de chaque mot quadruple dans selector est ignoré.

Le bit suivant de chaque mot quadruple dans selector est appelé « bit correspondant » ci-après. 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()
{
    __m128d a, b, d;
    __m128i select;
    int i;
    a.m128d_f64[0] = 0.;
    a.m128d_f64[1] = 1.;
    b.m128d_f64[0] = 2.;
    b.m128d_f64[1] = 3.;
    select.m128i_i64[0] = 2 << 1;
    select.m128i_i64[1] = (1 << 1) + 8; // turn on match bit
    
    d = _mm_permute2_pd(a, b, select, 0); // just select, don't zero
    printf_s("%.3lf %.3lf\n", d.m128d_f64[0], d.m128d_f64[1]);
    d = _mm_permute2_pd(a, b, select, 2); // zero if match is 1
    printf_s("%.3lf %.3lf\n", d.m128d_f64[0], d.m128d_f64[1]);
    d = _mm_permute2_pd(a, b, select, 3); // zero if match is 0
    printf_s("%.3lf %.3lf\n", d.m128d_f64[0], d.m128d_f64[1]);
}
  

Voir aussi

Référence

__cpuid, __cpuidex

Autres ressources

_mm256_permute2_pd

_mm_permute2_ps

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.