2010-06-29 13 views

risposta

2

Come per il 80386 Instruction Manual, BUS LOCK è asserito per la durata dello scambio. Il prefisso LOCK non ha la precedenza per questa operazione e nemmeno il valore di I/O Privilege Level.

Il mio suggerimento è che, poiché la documentazione afferma che BUS LOCK è asserito indipendentemente dalla presenza del prefisso LOCK, LOCK XCHG EAX, mem sia altrimenti sicura. In caso di dubbi, aggiungi un LOCK.

12

Da 386 giorni, xchg asserirà il segnale di blocco anche se non si inserisce il prefisso di blocco su di esso. Intel's documentation copre questo chiaramente nel riferimento di istruzioni N-Z della serie IA-32.

17

La documentazione di Intel sembra abbastanza chiara che sia ridondante.

Manuale

IA-32 Architettura Intel® dello sviluppatore di software Volume 3A: sistema Programming Guide, Parte 1

7.1.2.1 dice:

Le operazioni su cui il processore segue automaticamente il blocco semantica come segue:

  • Quando si esegue un'istruzione XCHG che fa riferimento a m emory.

Allo stesso modo,

Intel® 64 e IA-32 Architetture Manuale dello sviluppatore di software Volume 2B: del set di istruzioni, NZ

XCHG:

Se un si fa riferimento all'operando della memoria, il protocollo di blocco del processore è automaticamente impl ementato per la durata dell'operazione di scambio, indipendentemente dalla presenza o meno del prefisso LOCK o del valore dello IOPL.

noti che questa realtà non significa che il segnale LOCK # è asserito o meno il prefisso LOCK è utilizzato, 7.1.4 descrive come su processori successivi semantica di bloccaggio sono conservato senza un BLOCCO # se la locazione di memoria è memorizzato nella cache. Intelligente, e decisamente sopra la mia testa.

+0

Anche l'opzione PrintAssembly su Oracle Hotspot JVM sembra essere d'accordo. Quando genera un assembly, non ha il prefisso di blocco sull'istruzione xchg su x86-64. –

Problemi correlati