_mm256_cmov_si256
Visual Studio 2010 SP1 est requis
Spécifique à Microsoft
Génère le vpcmov de l'instruction YMM XOP pour effectuer un déplacement conditionnel de bits de ses deux premières sources en fonction de la valeur de sa troisième source.
__m256i _mm256_cmov_si256 (
__m256i src1,
__m256i src2,
__m256i selector
);
Paramètres
[in] src1
Paramètre de 256 bits.[in] src2
Paramètre de 256 bits.[in] selector
Paramètre de 256 bits qui sélectionne les bits de src1 et src2.
Valeur de retour
Résultat r de 256 bits qui contient des bits de src1 et src2. Le bit choisi dépend de selector.
Configuration requise
Intrinsèque |
Architecture |
---|---|
_mm256_cmov_si256 |
XOP |
Fichier d'en-tête <intrin.h>
Notes
Chaque bit dans le résultat est sélectionné (copié) de la position des bits correspondante dans src1 ou src2, selon la valeur de cette position des bits dans selector. Si le bit dans selector est égal à 1, le bit de src1 est sélectionné ; sinon, le bit de src2 est sélectionné.
L'instruction vpcmov 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()
{
__m256i a, b, selector, d;
int i;
a.m256i_u64[3] = 0xffffffffffffffffll;
a.m256i_u64[2] = 0xeeeeeeeeeeeeeeeell;
a.m256i_u64[1] = 0xccccccccccccccccll;
a.m256i_u64[0] = 0x8888888888888888ll;
b.m256i_u64[3] = 0x0000000000000000ll;
b.m256i_u64[2] = 0x1111111111111111ll;
b.m256i_u64[1] = 0x3333333333333333ll;
b.m256i_u64[0] = 0x7777777777777777ll;
selector.m256i_u64[3] = 0xfedcba9876543210ll;
selector.m256i_u64[2] = 0x0123456789abcdefll;
selector.m256i_u64[1] = 0xfedcba9876543210ll;
selector.m256i_u64[0] = 0x0123456789abcdefll;
d = _mm256_cmov_si256(a, b, selector);
printf_s("a: %016I64x %016I64x\n",
a.m256i_u64[3], a.m256i_u64[2]);
printf_s(" %016I64x %016I64x\n",
a.m256i_u64[1], a.m256i_u64[0]);
printf_s("b: %016I64x %016I64x\n",
b.m256i_u64[3], b.m256i_u64[2]);
printf_s(" %016I64x %016I64x\n",
b.m256i_u64[1], b.m256i_u64[0]);
printf_s("selector %016I64x %016I64x\n",
selector.m256i_u64[3], selector.m256i_u64[2]);
printf_s(" %016I64x %016I64x\n",
selector.m256i_u64[1], selector.m256i_u64[0]);
printf_s("result: %016I64x %016I64x\n",
d.m256i_u64[3], d.m256i_u64[2]);
printf_s(" %016I64x %016I64x\n",
d.m256i_u64[1], d.m256i_u64[0]);
}
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. |