Intel 80200 Computer Hardware User Manual


 
2-16 March, 2003 Developers Manual
Intel
®
80200 Processor based on Intel
®
XScale
Microarchitecture
Programming Model
Multiple Data Aborts
Multiple data aborts may be detected by hardware, but only the highest priority one is reported. If
the reported data abort is precise, software can correct the cause of the abort and re-execute the
aborted instruction. If the lower priority abort still exists, it is reported. Software can handle each
abort separately until the instruction successfully executes.
If the reported data abort is imprecise, software needs to check the SPSR to see if the previous
context was executing in abort mode. If this is the case, the link back to the current process has
been lost and the data abort is unrecoverable.
2.3.4.5 Events from Preload Instructions
A PLD instruction never causes the Data MMU to fault for any of the following reasons:
Domain Fault
Permission Fault
Translation Fault
If execution of the PLD would cause one of the above faults, then the PLD causes no effect.
This feature allows software to issue PLDs speculatively. For example, Example 2-3 on page 2-16
places a PLD instruction early in the loop. This PLD is used to fetch data for the next loop
iteration. In this example, the list is terminated with a node that has a null pointer. When execution
reaches the end of the list, the PLD on address 0x0 does not cause a fault. Rather, it is ignored and
the loop terminates normally.
2.3.4.6 Debug Events
Debug events are covered in Section 13.5, “Debug Exceptions” on page 13-6.
Example 2-3. Speculatively issuing PLD
;; R0 points to a node in a linked list. A node has the following layout:
;; Offset Contents
;;----------------------------------
;; 0 data
;; 4 pointer to next node
;; This code computes the sum of all nodes in a list. The sum is placed into R9.
;;
MOV R9, #0 ; Clear accumulator
sumList:
LDR R1, [R0, #4] ; R1 gets pointer to next node
LDR R3, [R0] ; R3 gets data from current node
PLD [R1] ; Speculatively start load of next node
ADD R9, R9, R3 ; Add into accumulator
MOVS R0, R1 ; Advance to next node. At end of list?
BNE sumList ; If not then loop