2010-11-04 10 views
6

¿Cómo alcanzaría las operaciones atómicas de 128 bits en x86?x86 operaciones atómicas de 128 bits

Guía de programación del sistema Intel, Parte 1, 8.1 Operaciones atómicas bloqueadas especifica operaciones atómicas garantizadas de 16, 32 y 64 bits. Entonces, ¿puede lograr operaciones atómicas de 128 bits haciendo 2 operaciones de 64 bits con el prefijo LOCK? Algo así como ...

LOCK mov 64bits->addr 
LOCK mov 64bits->addr+64bits 

Aparently SSE tiene registros XMM de 128 bits. ¿Puedes hacer 128-bit compare-and-swap usando estos registros?

+9

Puede hacer una comparación de intercambio atómica de 16 bytes ('CMPXCHGB '). –

+0

¿Está tratando de hacer esto en 32 bits x86 o en x64? – user200783

+0

x86_64, modo de 64 bits – brooksbp

Respuesta

9

El prefijo LOCK no se puede utilizar en combinación con la instrucción MOV.

El prefijo LOCK es posible anteponer únicamente a las siguientes instrucciones y sólo a aquellas formas de las instrucciones en el operando destino es un operando de memoria: ADD, ADC, Y, BTC, BTR, BTS, cmpxchg, CMPXCH8B, DEC, INC, NEG, NO, O, SBB, SUB, XOR, XADD y XCHG. Intel Instruction Set Reference

Si lo hace, va a generar una excepción no válida código de operación. Así que LOCK CMPXCHG16B es la única manera aquí.

+0

¿Necesita el prefijo 'LOCK 'en un CMPXCHG? Parece innecesario. – brooksbp

+0

Con respecto a Intel Instruction Set Reference se requiere un 'LOCK'. "Esta instrucción se puede usar con un prefijo LOCK para permitir que la instrucción se ejecute atómicamente. Para simplificar la interfaz del bus del procesador, el operando de destino recibe un ciclo de escritura sin tener en cuenta el resultado de la comparación". – bkausbk

+0

@brooksbp: hay [casos de uso para 'cmpxchg' sin' lock'] (https://stackoverflow.com/a/44273130/224132), p. sistemas uniprocesador para uso en memoria que no sea un puerto MMIO. Eso también lo hace consistente con 'add' de destino de memoria y otras instrucciones que tienen usos obvios distintos de la concurrencia. –

Cuestiones relacionadas