FCMOVcc
浮点 有条件移动
stableVMJITAOTinstruction
编码
| 操作码 | 指令 | Op/En | 64 位 | 兼容/传统 | 说明 |
|---|---|---|---|---|---|
DA C0+i | FCMOVB ST(0), ST(i) | 有效 | 有效 | 如果在下面移动( CF=1) 。 | |
DA C8+i | FCMOVE ST(0), ST(i) | 有效 | 有效 | 如果等于( ZF=1) 则移动 。 | |
DA D0+i | FCMOVBE ST(0), ST(i) | 有效 | 有效 | 如果下方或等值(CF=1或ZF=1),则移动. | |
DA D8+i | FCMOVU ST(0), ST(i) | 有效 | 有效 | 未按顺序移动( PF = 1) 。 | |
DB C0+i | FCMOVNB ST(0), ST(i) | 有效 | 有效 | 如不低于(CF=0)则移动。 | |
DB C8+i | FCMOVNE ST(0), ST(i) | 有效 | 有效 | 移动( ZF = 0) 。 | |
DB D0+i | FCMOVNBE ST(0), ST(i) | 有效 | 有效 | 如果不低于或等于(CF=0和ZF=0),则移动。 | |
DB D8+i | FCMOVNU ST(0), ST(i) | 有效 | 有效 | 如果不是无序移动( PF=0) 。 |
实测开销
正在从 arch-data 加载实测数据...
说明
测试EFLAGS寄存器中的状态标志,如果给定的测试条件属实,则将源操作数(第二次操作数)移动至目标操作数(第一次操作数). 上文描述栏和英特尔(R)64和IA-32架构软件开发者手册第1卷第8章给出的每个mnemonic os的条件. 源操作数总是在ST(i)注册,目标操作数总是ST(0).
FCMOVcc指令对优化IF小构件很有用. 它们还有助于消除IF业务的分支间接费用,以及处理器可能出现分支误测。
处理器可能不支持FCMOVcc指令. 软件可以通过使用CPUID指令(参见"COMISS-Compare 标量 Ordered 单精度浮点 values and Set EFLAGS")检查处理器的特性信息是否支持FCMOVcc指令. 如果同时设置了CMOV和FPU的特征位,则支持FCMOVcc指令.
此指令的操作在非64位模式和64位模式中是相同的.
IA-32 架构兼容性
FCMOVcc指令被引入到P6家庭处理器的IA-32架构中,在早期的IA-32处理器中并不存在.
行动
IF condition TRUE
THEN ST(0) := ST(i);
FI;
FPU Flags Affected
C1 Set to 0 if stack underflow occurred.
C0, C2, C3 Undefined.浮点 例外
#IS Stack underflow occurred.整数旗影响无.
异常
保护模式
#NM | CR0.EM[bit 2] 或 CR0.TS[bit 3] = 1. |
#UD | 如果使用 LOCK 前缀 。 |
实地址模式
| 与保护模式中的例外相同. |
虚拟 8086 模式
| 与保护模式中的例外相同. |
兼容模式
| 与保护模式中的例外相同. |
64 位模式
| 与保护模式中的例外相同. |