POOL32C 011000 |
rt |
base |
LL32 0011 |
0 000 |
offset |
6 |
5 |
5 |
5 |
3 |
9 |
LL rt, offset(base) |
microMIPS |
Load Linked Word |
Load Linked Word
To load a word from memory for an atomic read-modify-write
GPR[rt] = memory[GPR[base] + offset]
The LL and SC instructions provide the primitives to implement atomic read-modify-write (RMW) operations for synchronizable memory locations.
The contents of the 32-bit word at the memory location specified by the aligned effective address are fetched, signextended to the GPR register length, and written into GPR rt. The 9-bit signed offset is added to the contents of
GPR base to form an effective address.
This begins a RMW sequence on the current processor. There can be only one active RMW sequence per processor.
When an LL is executed it starts an active RMW sequence replacing any other sequence that was active. The RMW sequence is completed by a subsequent SC instruction that either completes the RMW sequence atomically and succeeds, or does not and fails.
Executing LL on one processor does not cause an action that, by itself, causes an SC for the same block to fail on another processor.
An execution of LL does not have to be followed by execution of SC; a program is free to abandon the RMW sequence without attempting a write.
The addressed location must be synchronizable by all processors and I/O devices sharing the location; if it is not, the result is UNPREDICTABLE. Which storage is synchronizable is a function of both CPU and system implementations. See the documentation of the SC instruction for the formal definition.
The effective address must be naturally-aligned. If either of the 2 least-significant bits of the effective address is nonzero, an Address Error exception occurs.
Providing misaligned support for Release 6 is not a requirement for this instruction.
This instruction has been reallocated an opcode in Release 6.
Availability and Compatibility
This instruction has been recoded for Release 6.
vAddr = sign_extend(offset) + GPR[base] if vAddr1..0 != 02 then SignalException(AddressError) endif (pAddr, CCA) = AddressTranslation (vAddr, DATA, LOAD) pAddr = pAddrPSIZE-1..3 || (pAddr2..0 xor (ReverseEndian || 02)) memdoubleword = LoadMemory (CCA, WORD, pAddr, vAddr, DATA) byte = vAddr2..0 xor (BigEndianCPU || 02) GPR[rt] = sign_extend(memdoubleword31+8*byte..8*byte) LLbit = 1
TLB Refill, TLB Invalid, Address Error, Watch
There is no Load Linked Word Unsigned operation corresponding to Load Word Unsigned.
Release 6 implements a 9-bit offset, whereas all release levels lower than Release 6 implement a 16-bit offset.