_mm_extract_si64, _mm_extracti_si64
Spécifique à Microsoft
Génère des instructions d' extrq de récupérer les bits spécifié des bits du bas 64 de son premier argument.
__m128i _mm_extract_si64(
__m128i Source,
__m128i Descriptor
);
__m128i _mm_extracti_si64(
__m128i Source,
int Length,
int Index
);
Paramètres
[in] Source
Un champ 128 bits avec les données d'entrée dans ses 64 bits inférieurs.[in] Descriptor
Un champ 128 bits qui décrit le champ de bits pour récupérer.[in] Length
Un entier qui spécifie la longueur du champ à récupérer.[in] Index
Un entier qui spécifie l'index du champ pour récupérer
Valeur de retour
Un champ 128 bits avec le champ extrait dans ses de modifier certains bits.
Configuration requise
Intrinsèque |
Architecture |
---|---|
_mm_extract_si64 |
SSE4a |
_mm_extracti_si64 |
SSE4a |
Fichier d'en-tête <intrin.h>
Notes
Cette intrinsèque génère des instructions d' extrq de récupérer des bits d' Source. Il existe deux versions de cette intrinsèque : _mm_extracti_si64 est la version immédiate, et _mm_extract_si64 est le non-immédiat. Chaque version extrait d' Source qu'un champ de bits a défini par sa longueur et l'index de son bit le moins significatif. Les valeurs de longueur et l'index sont le modèle pris 64, donc -1 et 127 sont interprètes comme 63. Si la somme de l'index (réduit) et la longueur du champ (réduite) est supérieure à 64, les résultats sont indéfinis. Une valeur zéro pour la taille du champ est interprétée comme 64. Si l'index de longueur de champ et de bits sont les deux zéro, 63:0 de bits d' Source sont récupérés. Si la taille du champ est zéro mais l'index de bit est différente de zéro, les résultats sont indéfinis.
Dans un appel à _mm_extract_si64, Descriptor contient l'index dans le de 13:8 bits et la taille du champ de données à récupérer dans le de 5:0 bits.
Si vous appelez _mm_extracti_si64 avec les arguments que le compilateur ne peut pas déterminer pour être des constantes entières le compilateur génère du code pour compacter ces valeurs dans un registre XMM (Descriptor) et appeler _mm_extract_si64.
Pour déterminer la prise en charge du matériel pour l'instruction d' extrq , appelez l'intrinsèque de __cpuid avec InfoType=0x80000001 et le bit de contrôle 6 d' CPUInfo[2] (ECX). Ce bit est 1 si l'instruction est prise en charge, et 0 sinon. Si vous exécutez le code qui utilise ces informations intrinsèque qui ne prend pas en charge l'instruction d' extrq , les résultats sont imprévisibles.
Exemple
// Compile this sample with: /EHsc
#include <iostream>
#include <intrin.h>
using namespace std;
union {
__m128i m;
unsigned __int64 ui64[2];
} source, descriptor, result1, result2, result3;
int
main()
{
source.ui64[0] = 0xfedcba9876543210ll;
descriptor.ui64[0] = 0x0000000000000b1bll;
result1.m = _mm_extract_si64 (source.m, descriptor.m);
result2.m = _mm_extracti_si64(source.m, 27, 11);
result3.ui64[0] = (source.ui64[0] >> 11) & 0x7ffffff;
cout << hex << "result1 = 0x" << result1.ui64[0] << endl;
cout << "result2 = 0x" << result2.ui64[0] << endl;
cout << "result3 = 0x" << result3.ui64[0] << endl;
}
TERMINEZ le détail de Microsoft
Copyright 2007 par Advanced Micro Devices, Inc tous droits réservés. Reproduit avec l'autorisation d'Advanced Micro Devices, Inc