FUCOM, FUCOMP, FUCOMPP

Unordered Compare valores en coma flotante

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
DD E0+iFUCOM ST(i)ValidoValidoCompare ST(0) con ST(i).
DD E1FUCOMValidoValidoCompare ST(0) con ST(1).
DD E8+iFUCOMP ST(i)ValidoValidoCompare ST(0) con ST(i) y la pila de registro pop.
DD E9FUCOMPValidoValidoCompare ST(0) con ST(1) y la pila de registro pop.
DA E9FUCOMPPValidoValidoCompare ST(0) con ST(1) y la pila de registro pop dos veces.

Coste medido

Cargando las mediciones de arch-data...

Descripción

Realiza una comparación sin orden de los contenidos del registro ST(0) y ST(i) y establece banderas de código de condiciones C0, C2, y C3 en la palabra de estado FPU según los resultados (ver la tabla de abajo). Si no se especifica operando, se comparan los contenidos de los registros ST(0) y ST(1). El signo de cero es ignorado, por lo que 0.0 es igual a +0.0.

FUCOM/FUCOMP/FUCOMPP Resultados

Resultados de comparación*C3C2C0
ST0 > ST(i)000
ST0 < ST(i)001
ST0 = ST(i)100
Desordenadas111

Operación

CASE (relation of operands) OF

    ST > SRC:  C3, C2, C0 := 000;

    ST < SRC:  C3, C2, C0 := 001;

    ST = SRC:  C3, C2, C0 := 100;

ESAC;

IF ST(0) or SRC = QNaN, but not SNaN or unsupported format

    THEN
          C3, C2, C0 := 111;

    ELSE (* ST(0) or SRC is SNaN or unsupported format *)
           #IA;

        IF FPUControlWord.IM = 1

                THEN
                      C3, C2, C0 := 111;

          FI;
FI;

IF Instruction = FUCOMP

    THEN

          PopRegisterStack;

FI;

IF Instruction = FUCOMPP

    THEN

          PopRegisterStack;

FI;

FPU Flags Affected

C1                  Set to 0 if stack underflow occurred.

C0, C2, C3          See Table 3-43.

Excepciones coma flotante

#IS                 Stack underflow occurred.
#IA                 One or both operands are SNaN values or have unsupported formats. Detection of a QNaN

el valor por sí mismo no genera una excepción de operando no válido.

#D                  One or both operands are denormal values.

Excepciones

Modo protegido
#NMCR0.EM[bit 2] o CR0.TS[bit 3] = 1.
#MFSi hay una excepción x87 FPU pendiente.
#UDSi se utiliza el prefijo LOCK.
Modo real
Las mismas excepciones que en modo protegido.
Modo virtual-8086
Las mismas excepciones que en modo protegido.
Modo de compatibilidad
Las mismas excepciones que en modo protegido.
Modo de 64 bits
Las mismas excepciones que en modo protegido.

Fuentes