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

Bits VALOR
0 - 5 31
6 - 10 RS
11 - 15 RA
16 - 20 RB
21 - 30 150
31 1
PowerPC® 
stwcx. RS, RA, RB

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

  1. 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. 
    
  2. El código siguiente realiza un "Comparar e intercambiar" comparando atómicamente un valor en un registro con una palabra en el almacenamiento:
    
    # 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.
    
    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.