Conditionally store the contents of a general purpose register into a storage location, based upon an existing reservation.
|stdcx.||RS, RA, RB|
If a reservation exists, and the memory address specified by the stdcx. instruction is the same as that specified by the load and reserve instruction that established the reservation, the contents of RS are stored into the double-word in memory addressed by the effective address (EA); the reservation is cleared.
If GPR RA is not 0, the EA is the sum of the contents of GPR RA and D, a 16-bit, signed two's complement integer, fullword-aligned, sign-extended to 64 bits. If GPR RA is 0, then the EA is D.
If a reservation exists, but the memory address specified by the stdcx. instruction is not the same as that specified by the load and reserve instruction that established the reservation, the reservation is cleared, and it is undefined whether the contents of RS are stored into the double word in memory addressed by the EA.
If no reservation exists, the instruction completes without altering memory.
If the store is performed successfully, bits 0-2 of Condition Register Field 0 are set to 0b001, otherwise, they are set to 0b000. The SO bit of the XER is copied to to bit 4 of Condition Register Field 0.
The EA must be a multiple of eight. If it is not, either the system alignment exception handler is invoked or the results are boundedly undefined.
Note that, when used correctly, the load and reserve and store conditional instructions can provide an atomic update function for a single aligned word (load word and reserve and store word conditional) or double word (load double word and reserve and store double word conditional) of memory.
In general, correct use requires that load word and reserve be paired with store word conditional, and load double word and reserve with store double word conditional, with the same memory address specified by both instructions of the pair. The only exception is that an unpaired store word conditional or store double word conditional instruction to any (scratch) EA can be used to clear any reservation held by the processor.A reservation is cleared if any of the following events occurs:
|RS||Specifies source general-purpose register of stored data.|
|RA||Specifies source general-purpose register for EA calculation.|
|RB||Specifies source general-purpose register for EA calculation.|
This instruction is defined only for 64-bit implementations. Using it on a 32-bit implementation will cause the system illegal instruction error handler to be invoked.