CMPccXADD
Compare y agregue si Estado es Met
estableVMJITAOTinstruccion
Codificaciones
| Opcode | Instruccion | Op/En | 64 bits | Compat/Legacy | Descripcion |
|---|---|---|---|---|---|
VEX.128.66.0F38.W0 E6 !(11):rrr:bbb | CMPBEXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPBEXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPBXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPBXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPLEXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPLEXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPLXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPLXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPNBEXADD m32, r32, r32 Opcode/ Instruction | A | Valido | No codificable | Valor 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:bbb | CMPNBEXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPNBXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPNBXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPNLEXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPNLEXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPNLXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPNLXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPNOXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPNOXADD m64, r64, r64 Opcode/ Instruction | A | Valido | No codificable | Valor 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:bbb | CMPNPXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPNPXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPNSXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPNSXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPNZXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPNZXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPOXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPOXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPPXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPPXADD m64, r64, r64 Opcode/ Instruction | A | Valido | No codificable | Valor 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:bbb | CMPSXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPSXADD m64, r64, r64 | A | Valido | No codificable | Valor 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:bbb | CMPZXADD m32, r32, r32 | A | Valido | No codificable | Valor 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:bbb | CMPZXADD m64, r64, r64 Op/En Tuple Type Operand 1 A N/A ModRM:r/m (r, | A | Valido | No codificable | Valor 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
modrm.rmlectura y escriturabyte ModRM, campo r/m (bits 2-0); con el byte SIB y el desplazamiento cuando el campo mod los pidemodrm.reglectura y escriturabyte ModRM, campo reg (bits 5-3)vex.vvvvlecturaprefijo 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 != 011BBanderas 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.