VPERM2F128
纯度 浮点值
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
VEX.256.66.0F3A.W0 06 /r ib | VPERM2F128 ymm1, ymm2, ymm3/m256, imm8 | RVMI | 有效 | 有效 | 在MI ymm2和ymm3/mem的Permute 128位浮点字段使用来自imm8的控制,存储结果为ymm1. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
RVMI
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)vex.vvvvlecturaVEX 前缀的 vvvv 字段(按位取反)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移imm8指令后的立即数字节
实测开销
正在从 arch-data 加载实测数据...
说明
Permute 128 bit 浮点 含有 第一源操作数(第二操作数)和 第二源操作数(第三操作数)的字段在8位直接使用位,存储结果在 目标操作数(第一操作数). 第一源操作数是一个YMM登记册,第二源操作数是一个YMM登记册或256位的内存位置登记册,目标操作数是一个YMM登记册.
SRC2 Y1 Y0 SRC1 X1 X0 DEST X0, X1, Y0, or Y1 X0, X1, Y0, or Y1Figure 5-21. VPERM2F128 Operation
Imm8[1:0]为第一个目的地128位域选择源,imm8[5:4]为第二个目的地域选择源. 如果 imm8 [3] 设置,则低128位字段 被清零. 如果 imm8 [7] 设置,则高128位字段 被清零. VEX.L必须是1,否则指令会#UD.
行动
VPERM2F128
CASE IMM8[1:0] of
0: DEST[127:0] := SRC1[127:0]
1: DEST[127:0] := SRC1[255:128]
2: DEST[127:0] := SRC2[127:0]
3: DEST[127:0] := SRC2[255:128]
ESAC
CASE IMM8[5:4] of
0: DEST[255:128] := SRC1[127:0]
1: DEST[255:128] := SRC1[255:128]
2: DEST[255:128] := SRC2[127:0]
3: DEST[255:128] := SRC2[255:128]
ESAC
IF (imm8[3])
DEST[127:0] := 0
FI
IF (imm8[7])
DEST[MAXVL-1:128] := 0
FIIntel C/C++ 内在编译器
VPERM2F128: __m256 _mm256_permute2f128_ps (__m256 a, __m256 b, int control) VPERM2F128: __m256d _mm256_permute2f128_pd (__m256d a, __m256d b, int control) VPERM2F128: __m256i _mm256_permute2f128_si256 (__m256i a, __m256i b, int control);SIMD 浮点 例外
None.
其他例外
参见表2-23"第6类例外条件".
Additionally:
#UD If VEX.L = 0If VEX.W = 1.