CMPccXADD

Compare y agregue si Estado es Met

estableVMJITAOTinstruccion

Codificaciones

OpcodeInstruccionOp/En64 bitsCompat/LegacyDescripcion
VEX.128.66.0F38.W0 E6 !(11):rrr:bbbCMPBEXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si es inferior o igual (CF=1 o ZF=1), agregue valor de r32 (tercer operand) a m32 y escriba un nuevo valor en m32. El segundo operand siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 E6 !(11):rrr:bbbCMPBEXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si es inferior o igual (CF=1 o ZF=1), agregue valor de r64 (tercer operand) a m64 y escriba un nuevo valor en m64. El segundo operand siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 E2 !(11):rrr:bbbCMPBXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si debajo (CF=1), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 E2 !(11):rrr:bbbCMPBXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si debajo (CF=1), añadir valor de r64 (tercer operando) a m64 y escribir nuevo valor en m64. El segundo operando siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 EE !(11):rrr:bbbCMPLEXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si es menor o igual (ZF=1 o SFOF), añadir valor de r32 (tercer operand) a m32 y escribir nuevo valor en m32. El segundo operand siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 EE !(11):rrr:bbbCMPLEXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si es menor o igual (ZF=1 o SFOF), añadir valor de r64 (tercer operand) a m64 y escribir nuevo valor en m64. El segundo operand siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 EC !(11):rrr:bbbCMPLXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si menos (SFOF), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 EC !(11):rrr:bbbCMPLXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si menos (SFOF), añadir valor de r64 (tercer operando) a m64 y escribir nuevo valor en m64. El segundo operando siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 E7 !(11):rrr:bbbCMPNBEXADD m32, r32, r32 Opcode/ InstructionAValidoNo codificableValor de comparación enr32(segundooperando) con valor enm32. Si no es inferior o igual (CF=0 y ZF=0), añadir valorr32(terceroperando) am32y escribir nuevo valor enm32. El segundooperandosiempre se actualiza con el valor original dem32. O p/ 64/32 bitCPUIDCaracterísticas Descripción E n Modo Soporte Bandera
VEX.128.66.0F38.W1 E7 !(11):rrr:bbbCMPNBEXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si no es inferior o igual (CF=0 y ZF=0), añadir valor de r64 (tercer operand) a m64 y escribir nuevo valor en m64. El segundo operand siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 E3 !(11):rrr:bbbCMPNBXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si no es inferior (CF=0), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 E3 !(11):rrr:bbbCMPNBXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si no es inferior (CF=0), añadir valor de r64 (tercer operando) a m64 y escribir nuevo valor en m64. El segundo operando siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 EF !(11):rrr:bbbCMPNLEXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si no es menor o igual (ZF=0 y SF=OF), añadir valor de r32 (tercer operand) a m32 y escribir nuevo valor en m32. El segundo operand siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 EF !(11):rrr:bbbCMPNLEXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si no es menor o igual (ZF=0 y SF=OF), añadir valor de r64 (tercer operand) a m64 y escribir nuevo valor en m64. El segundo operand siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 ED !(11):rrr:bbbCMPNLXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si no menos (SF=OF), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 ED !(11):rrr:bbbCMPNLXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si no menos (SF=OF), añadir valor de r64 (tercer operando) a m64 y escribir nuevo valor en m64. El segundo operando siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 E1 !(11):rrr:bbbCMPNOXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si no desborda (OF=0), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 E1 !(11):rrr:bbbCMPNOXADD m64, r64, r64 Opcode/ InstructionAValidoNo codificableValor de comparación enr64(segundooperando) con valor enm64. Si no se desborda (OF=0), añadir valorr64(terceroperando) am64y escribir nuevo valor enm64. El segundooperandosiempre se actualiza con el valor original dem64. O p/ 64/32 bitCPUIDCaracterísticas Descripción E n Modo Soporte Bandera
VEX.128.66.0F38.W0 EB !(11):rrr:bbbCMPNPXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si no paridad (PF=0), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 EB !(11):rrr:bbbCMPNPXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si no paridad (PF=0), añadir valor de r64 (tercer operando) a m64 y escribir nuevo valor en m64. El segundo operando siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 E9 !(11):rrr:bbbCMPNSXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si no firma (SF=0), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 E9 !(11):rrr:bbbCMPNSXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si no firma (SF=0), añadir valor de r64 (tercer operando) a m64 y escribir nuevo valor en m64. El segundo operando siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 E5 !(11):rrr:bbbCMPNZXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si no es cero (ZF=0), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 E5 !(11):rrr:bbbCMPNZXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si no es cero (ZF=0), añadir valor de r64 (tercer operando) a m64 y escribir nuevo valor en m64. El segundo operando siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 E0 !(11):rrr:bbbCMPOXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si el desbordamiento (OF=1), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 E0 !(11):rrr:bbbCMPOXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si el desbordamiento (OF=1), añadir valor de r64 (tercer operando) a m64 y escribir nuevo valor en m64. El segundo operando siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 EA !(11):rrr:bbbCMPPXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si paridad (PF=1), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 EA !(11):rrr:bbbCMPPXADD m64, r64, r64 Opcode/ InstructionAValidoNo codificableValor de comparación enr64(segundooperando) con valor enm64. Si la paridad (PF=1), añadir valorr64(terceroperando) am64y escribir nuevo valor enm64. El segundooperandosiempre se actualiza con el valor original dem64. O p/ 64/32 bitCPUIDCaracterísticas Descripción E n Modo Soporte Bandera
VEX.128.66.0F38.W0 E8 !(11):rrr:bbbCMPSXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si signo (SF=1), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 E8 !(11):rrr:bbbCMPSXADD m64, r64, r64AValidoNo codificableValor de comparación en r64 (segundo operando) con valor en m64. Si signo (SF=1), añadir valor de r64 (tercer operando) a m64 y escribir nuevo valor en m64. El segundo operando siempre se actualiza con el valor original de m64.
VEX.128.66.0F38.W0 E4 !(11):rrr:bbbCMPZXADD m32, r32, r32AValidoNo codificableValor de comparación en r32 (segundo operando) con valor en m32. Si cero (ZF=1), añadir valor de r32 (tercer operando) a m32 y escribir nuevo valor en m32. El segundo operando siempre se actualiza con el valor original de m32.
VEX.128.66.0F38.W1 E4 !(11):rrr:bbbCMPZXADD m64, r64, r64 Op/En Tuple Type Operand 1 A N/A ModRM:r/m (r,AValidoNo codificableValor de comparación enr64(segundooperando) con valor enm64. Si cero (ZF=1), añadir valorr64(terceroperando) am64y escribir nuevo valor enm64. El segundooperandosiempre se actualiza con el valor original dem64. Instructio noperandoEncod ing1 Op erad 2operando 3 operando4 w) ModRM:reg (r, w)VEX.vvvv (r) N/A

Codificacion de operandos

Cada modo es un valor de la columna Op/En de arriba. Dice en que campo de la instruccion codificada va cada operando, en el orden en que se escriben, y si la instruccion lo lee, lo escribe o ambas cosas.

A

  1. modrm.rm lectura y escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pide
  2. modrm.reg lectura y escriturabyte ModRM, campo reg (bits 5-3)
  3. vex.vvvv lecturaprefijo VEX, campo vvvv (invertido)

Coste medido

Sin medir: no se ejecuta en procesadores de 64 bits.

Descripción

Esta instrucción compara el valor de la memoria con el valor del segundo operando. Si se cumple la condición especificada, el procesador añadirá el tercer operando al operando de memoria y lo escribirá en memoria, de lo contrario la memoria no se cambia por esta instrucción.

Esta instrucción debe tener MODRM.MOD igual a 0, 1, o 2. El valor 3 para MODRM.MOD está reservado y causará una excepción de código de operación no válido (#UD).

El segundo operando siempre se actualiza con el valor original del operando de memoria. Las condiciones EFLAGS se actualizan a partir de los resultados de la comparación.La instrucción utiliza un bloqueo implícito. Esta instrucción no permite el uso de un prefijo de bloqueo explícito.

Operación

CMPCCXADD srcdest1, srcdest2, src3
tmp1 := load lock srcdest1
tmp2 := tmp1 + src3
EFLAGS.CS,OF,SF,ZF,AF,PF := CMP tmp1, srcdest2
IF <condition>:

    srcdest1 := store unlock tmp2
ELSE

    srcdest1 := store unlock tmp1
srcdest2 :=tmp1

1. ModRM.MOD != 011B

Banderas afectadas

Las condiciones EFLAGS se actualizan a partir de los resultados de la comparación.

Intel C/C++ compilador intrínseco

CMPCCXADD int _cmpccxadd_epi32 (void* __A, int __B, int __C, const int __D);
CMPCCXADD __int64 _cmpccxadd_epi64 (void* __A, __int64 __B, __int64 __C, const int __D);

SIMD coma flotante Excepciones

None.

Excepciones Tipo 14; véase Tabla 2-31.

Fuentes