MULX
未签名但不影响旗帜的倍数
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
VEX.LZ.F2.0F38.W0 F6 /r | MULX r32a, r32b, r/m32 | RVM | 有效 | 有效 | 未签名的r/m32与EDX的乘法不影响算术旗. |
VEX.LZ.F2.0F38.W1 F6 /r | MULX r64a, r64b, r/m64 | RVM | 有效 | 不可编码 | 未签名的r/m64与RDX的乘法不影响算术旗. |
操作数编码
每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。
RVM
modrm.regescrituraModRM 字节的 reg 字段(第 5-3 位)vex.vvvvescrituraVEX 前缀的 vvvv 字段(按位取反)modrm.rmlecturaModRM 字节的 r/m 字段(第 2-0 位);当 mod 字段要求时,还包括 SIB 字节和位移RDX/EDX is implied 64/32 bits
实测开销
正在从 arch-data 加载实测数据...
说明
进行隐式源操作数(EDX/RDX)和指定的源操作数(第三代操作数)的无符号乘法,并将结果的低半部分存储在第二目的地(第二代操作数),高半部分存储在第一代目标操作数(第一代操作数),不读写算旗. 这使得软件可以与载运操作和乘法互换的高效编程成为可能.
如果第一个和第二个操作数完全相同,它会包含乘法结果的高一半.
此指令不支持真实模式和 虚拟 8086 模式 。 操作数大小如果不是64位模式,总是32位. 在64位模式操作数大小 64中需要VEX.W1. VEX.W1在非64位模式中被忽略. 试图用不等于0的 VEX.L 执行此指令将导致 #UD.
行动
// DEST1: ModRM:reg
// DEST2: VEX.vvvv
IF (OperandSize = 32)
SRC1 := EDX;
DEST2 := (SRC1*SRC2)[31:0];
DEST1 := (SRC1*SRC2)[63:32];
ELSE IF (OperandSize = 64)
SRC1 := RDX;
DEST2 := (SRC1*SRC2)[63:0];
DEST1 := (SRC1*SRC2)[127:64];
FIIntel C/C++ 内在编译器
Auto-generated from high-level language when possible. unsigned int mulx_u32(unsigned int a, unsigned int b, unsigned int * hi);
unsigned __int64 mulx_u64(unsigned __int64 a, unsigned __int64 b, unsigned __int64 * hi);受影响的旗帜
None.
SIMD 浮点 例外
None.
其他例外
参见表2-29"十三类例外条件".