Partager via


_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

__cpuid, __cpuidex

Autres ressources

_mm256_permute2_ps

_mm_permute2_pd

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.