05.02.2013 Views

ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition

ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition

ARM Architecture Reference Manual ARMv7-A and ARMv7-R edition

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Block transfer operations<br />

<strong>ARM</strong>v6 Differences<br />

<strong>ARM</strong>v7 does not support CP15 register block transfer operations, <strong>and</strong> they are optional in <strong>ARM</strong>v6.<br />

Table G-8 summarizes block transfer operations. Permitted combinations of the block transfer operations<br />

are:<br />

all four operations<br />

clean, clean <strong>and</strong> invalidate, <strong>and</strong> invalidate operations<br />

none of the operations.<br />

If an operation is not implemented, then it must cause an Undefined Instruction exception.<br />

Operation<br />

Blocking a or<br />

non-blocking<br />

Instruction or<br />

data<br />

a. See Blocking <strong>and</strong> non-blocking behavior on page AppxG-42<br />

Table G-8 Block transfer operations<br />

User or<br />

privileged<br />

Prefetch range Non-blocking Instruction or data User or privileged None<br />

Exception<br />

Behavior<br />

Clean range Blocking Data only User or privileged Data Abort<br />

Clean <strong>and</strong> Invalidate range Blocking Data only Privileged Data Abort<br />

Invalidate range Blocking Instruction or data Privileged Data Abort<br />

An MCRR instruction starts each of the range operations. The data of the two registers specifies the Block start<br />

address <strong>and</strong> the Block end address. All block operations are performed on the cachelines that include the<br />

range of addresses between the Block start address <strong>and</strong> Block end address inclusive. If the Block start<br />

address is greater than the Block end address the effect is UNPREDICTABLE.<br />

<strong>ARM</strong>v6 supports only one block transfer at a time. Attempting to start a second block transfer while a block<br />

transfer is in progress causes the first block transfer to be ab<strong>and</strong>oned <strong>and</strong> starts the second block transfer.<br />

The Block Transfer Status Register indicates whether a block transfer is in progress. The register can be<br />

polled before starting a block transfer, to ensure any previous block transfer operation has completed.<br />

All block transfers are interruptible. When blocking transfers are interrupted, the LR value that is captured<br />

is (address of instruction that launched the block operation + 4). This enables the st<strong>and</strong>ard return mechanism<br />

for interrupts to restart the operation.<br />

For performance reasons, <strong>ARM</strong> recommends that implementations permit the following instructions to be<br />

executed while a non-blocking prefetch range instruction is being executed. In such an implementation, the<br />

LR value captured on an interrupt is determined by the instruction set state presented to the interrupt in the<br />

following instruction stream. However, implementations that treat a prefetch range instruction as a blocking<br />

operation must capture the LR value as described in the previous paragraph.<br />

If the FCSE PID is changed while a prefetch range operation is running, it is UNPREDICTABLE at which point<br />

this change is seen by the prefetch range. For information about changing the FCSE PID see c13, FCSE<br />

Process ID Register (FCSEIDR) on page B3-152.<br />

<strong>ARM</strong> DDI 0406B Copyright © 1996-1998, 2000, 2004-2008 <strong>ARM</strong> Limited. All rights reserved. AppxG-41

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!