stwcx. Instrucción (Almacenar palabra condicional indexada)
Finalidad
Se utiliza junto con una instrucción lwarx anterior para emular una operación de lectura-modificación-escritura en una ubicación de memoria especificada.
Nota: stwcx. la instrucción sólo está soportada en la arquitectura PowerPC® .
Sintaxis
Descripción
stwcx. y lwarx son instrucciones primitivas, o simples, que se utilizan para realizar una operación de lectura-modificación-escritura en el almacenamiento. Si se realiza la tienda, el uso de stwcx. y lwarx garantiza que ningún otro procesador o mecanismo ha modificado la ubicación de la memoria de destino entre el momento en que se ejecuta la instrucción lwarx y el momento en que se ejecuta stwcx. instrucción completa.
Tenga en cuenta lo siguiente cuando utilice stwcx. instrucción:
- Si el registro de propósito general (GPR) RA es 0, la dirección efectiva (EA) es el contenido del GPR RB, de lo contrario EA es la suma del contenido del GPR RA más el contenido del GPR RB.
- Si la reserva creada por una instrucción lwarx existe, el contenido de GPR RS se almacena en la palabra en almacenamiento y EA direcciona y la reserva se borra. De lo contrario, el almacenamiento no se modifica.
- Si se realiza la tienda, los bits 0-2 del campo de registro de condición 0 se establecen en 0b001; de lo contrario, se establecen en 0b000. El bit SO del XER se copia en el bit 4 del campo de registro de condición 0.
stwcx. la instrucción tiene un formato de sintaxis y no afecta al registro de excepciones de punto fijo. Si el EA no es un múltiplo de 4, los resultados no están definidos.
Parámetros
| Elemento | Descripción |
|---|---|
| RS | Especifica el registro de propósito general de origen de los datos almacenados. |
| RA | Especifica el registro de propósito general de origen para el cálculo de EA. |
| RB | Especifica el registro de propósito general de origen para el cálculo de EA. |
Ejemplos
- El código siguiente realiza una operación "Captar y almacenar" cargando y sustituyendo atómicamente una palabra en el almacenamiento:
# Assume that GPR 4 contains the new value to be stored. # Assume that GPR 3 contains the address of the word # to be loaded and replaced. loop: lwarx r5,0,r3 # Load and reserve stwcx. r4,0,r3 # Store new value if still # reserved bne- loop # Loop if lost reservation # The new value is now in storage. # The old value is returned to GPR 4. - El código siguiente realiza un "Comparar e intercambiar" comparando atómicamente un valor en un registro con una palabra en el almacenamiento:
Si el valor en el registro es igual a la palabra en el almacenamiento, el valor de un segundo registro se almacena en la palabra en el almacenamiento. Si son desiguales, la palabra del almacenamiento se carga en el primer registro y el bit EQ del Campo de registro de condición 0 se establece para indicar el resultado de la comparación.# Assume that GPR 5 contains the new value to be stored after # a successful match. # Assume that GPR 3 contains the address of the word # to be tested. # Assume that GPR 4 contains the value to be compared against # the value in memory. loop: lwarx r6,0,r3 # Load and reserve cmpw r4,r6 # Are the first two operands # equal? bne- exit # Skip if not equal stwcx. r5,0,r3 # Store new value if still # reserved bne- loop # Loop if lost reservation exit: mr r4,r6 # Return value from storage # The old value is returned to GPR 4. # If a match was made, storage contains the new value.