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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Assembler syntax<br />

RFE{} {!}<br />

where:<br />

is one of:<br />

System Instructions<br />

DA Decrement After. <strong>ARM</strong> code only. The consecutive memory addresses end at<br />

the address in the base register. Encoded as P = 0, U = 0 in encoding A1.<br />

DB Decrement Before. The consecutive memory addresses end one word below the<br />

address in the base register. Encoding T1, or encoding A1 with P = 1, U = 0.<br />

IA Increment After. The consecutive memory addresses start at the address in the<br />

base register. This is the default, <strong>and</strong> is normally omitted. Encoding T2, or<br />

encoding A1 with P = 0, U = 1.<br />

IB Increment Before. <strong>ARM</strong> code only. The consecutive memory addresses start<br />

one word above the address in the base register. Encoded as P = 1, U = 1 in<br />

encoding A1.<br />

See St<strong>and</strong>ard assembler syntax fields on page A8-7. An <strong>ARM</strong> RFE instruction must be<br />

unconditional.<br />

The base register.<br />

! Causes the instruction to write a modified value back to . If ! is omitted, the instruction<br />

does not change .<br />

RFEFA, RFEEA, RFEFD, <strong>and</strong> RFEED are pseudo-instructions for RFEDA, RFEDB, RFEIA, <strong>and</strong> RFEIB respectively,<br />

referring to their use for popping data from Full Ascending, Empty Ascending, Full Descending, <strong>and</strong> Empty<br />

Descending stacks.<br />

Operation<br />

if ConditionPassed() then<br />

EncodingSpecificOperations();<br />

if !CurrentModeIsPrivileged() || CurrentInstrSet() == InstrSet_ThumbEE then<br />

UNPREDICTABLE;<br />

else<br />

address = if increment then R[n] else R[n]-8;<br />

if wordhigher then address = address+4;<br />

CPSRWriteByInstr(MemA[address+4,4], ‘1111’, TRUE);<br />

BranchWritePC(MemA[address,4]);<br />

if wback then R[n] = if increment then R[n]+8 else R[n]-8;<br />

Exceptions<br />

Data Abort.<br />

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

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

Saved successfully!

Ooh no, something went wrong!