Assembleur 80x86 | VPERMB |
---|---|
INTEL AVX-512 | Permute Packed Bytes Elements |
Syntaxe
VPERMT2PD Xmm1 {k1}{z}, Xmm2, Xmm3 |
Description
Cette instruction permet de permuter les valeurs 64 bits de réel de double précision dans le premier opérande et le troisième opérande (le second opérande source) en utilisant un indice dans le second opérande (le premier opérande source) vers les éléments sélectionné du premier et troisième opérande. Les éléments sélectionnés sont écrits dans l'opérande de destination (le premier opérande) conformément au masque d'écriture k1. Les premier et second opérandes sont des registres ZMM/YMM/XMM. Le deuxième opérande contient des index d'entrée permettant de sélectionner des éléments parmi les 2 tables d'entrée des opérandes 1 et 3. Le premier opérande est également la destination du résultat.
Remarque
- Versions d'éléments D/Q/PS/PD : le deuxième opérande source peut être un registre ZMM/YMM/XMM, un emplacement mémoire de 512, 256 ou 128 bits ou un vecteur de 512, 256 ou 128 bits diffusé à partir d'un emplacement mémoire de 32 ou 64 bits. La diffusion à partir de l'emplacement mémoire de 32 ou 64 bits le plus bas est effectuée si EVEX.b et le bit d'identification pour la sélection de table sont définis.
- Versions DWORD/PS : le bit d'identification pour la sélection de table est le bit 4, 3 et 2, en fonction de VL = 512, 256, 128. Les bits [3:0]/[2:0]/[1:0] de chaque élément dans le vecteur d'index d'entrée, sélectionnez un élément dans les 2 opérandes source. Si le bit d'identification est 0, la table_1 (la première source) est sélectionnée; sinon, le second opérande source est sélectionné.
- Versions QWORD/PD : le bit d'identification pour la sélection de table est le bit 3, 2 et 1, et les bits[2:0]/[1:0]/bit 0 sélectionnent un élément dans chaque table d'entrée.
- Versions d'éléments WORD : le deuxième opérande source peut être un registre ZMM/YMM/XMM ou un emplacement de mémoire de 512, 256 ou 128 bits. Le bit d'identification pour la sélection de table est le bit 5, 4 et 3, et les bits [4:0]/[3:0]/[2:0] sélectionnent un élément dans chaque table d'entrée.
- Les instructions VPERMT2PD permettent de copier une valeur de 16 bits, 32 bits ou 64 bits dans les opérandes source dans plusieurs emplacements de l'opérande de destination.
- Le même index peut être réutilisé, par exemple, pour une seconde itération, tandis que les éléments de la table permutés sont remplacés.
- Les bits (MAXVL-1:256/128) de la destination sont mis à zéro pour VL = 256,128.
Algorithme
(KL, VL) = (2, 128), (4, 256), (8 512) SI VL = 128 ALORS id ← 0 FIN SI SI VL = 256 ALORS id ← 1 FIN SI SI VL = 512 ALORS id ← 2 FIN SI TMP_DEST ← DEST BOUCLE POUR j ← 0 JUSQU'A KL-1 i ← j x 64 off ← 64 x SRC1[i + id:i] SI k1[j] OU *pas de masque d'écriture* ALORS SI (EVEX.b = 1) ET (SRC2 *est en mémoire*) ALORS DEST[i + 63:i] ← SRC1[i + id + 1] ? SRC2[63:0] : TMP_DEST[off + 63:off] SINON DEST[i + 63:i] ← SRC1[i + id + 1] ? SRC2[off + 63:off] : TMP_DEST[off + 63:off] FIN SI SINON SI *masque fusionné* ALORS DEST[i+63:i] reste inchangé SINON DEST[i+63:i] ← 0 FIN SI FIN SI FIN BOUCLE POUR DEST[MAXVL-1:VL] ← 0 |
Mnémonique
Instruction | Opcode | Description |
---|---|---|
VPERMT2PD xmm1 {k1}{z}, xmm2, xmm3/m128/m64bcst | EVEX.DDS.128.66.0F38.W1 7F /r | Cette instruction permet de permuter les valeurs 64 bits de réel de double précision dans le premier opérande et le troisième opérande (le second opérande source) en utilisant un indice dans le second opérande (le premier opérande source) vers les éléments sélectionné du premier et troisième opérande. |
VPERMT2PD ymm1 {k1}{z}, ymm2, ymm3/m256/m64bcst | EVEX.DDS.256.66.0F38.W1 7F /r | Cette instruction permet de permuter les valeurs 64 bits de réel de double précision dans le premier opérande et le troisième opérande (le second opérande source) en utilisant un indice dans le second opérande (le premier opérande source) vers les éléments sélectionné du premier et troisième opérande. |
VPERMT2PD zmm1 {k1}{z}, zmm2, zmm3/m512/m64bcst | EVEX.DDS.512.66.0F38.W1 7F /r | Cette instruction permet de permuter les valeurs 64 bits de réel de double précision dans le premier opérande et le troisième opérande (le second opérande source) en utilisant un indice dans le second opérande (le premier opérande source) vers les éléments sélectionné du premier et troisième opérande. |
Dernière mise à jour : Dimanche, le 21 octobre 2018