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.

Instruction Details<br />

The SP can be in the list in <strong>ARM</strong> code, but not in Thumb code. However, <strong>ARM</strong> instructions<br />

that include the SP in the list are deprecated.<br />

The PC can be in the list. If it is, the instruction branches to the address loaded to the PC. In<br />

<strong>ARM</strong>v5T <strong>and</strong> above, this is an interworking branch, see Pseudocode details of operations<br />

on <strong>ARM</strong> core registers on page A2-12. In Thumb code, if the PC is in the list:<br />

the LR must not be in the list<br />

the instruction must be either outside any IT block, or the last instruction in an IT<br />

block.<br />

<strong>ARM</strong> instructions that include both the LR <strong>and</strong> the PC in the list are deprecated.<br />

Instructions with the base register in the list <strong>and</strong> ! specified are only available in the <strong>ARM</strong><br />

instruction set before <strong>ARM</strong>v7, <strong>and</strong> the use of such instructions is deprecated. The value of<br />

the base register after such an instruction is UNKNOWN.<br />

LDMEA is a pseudo-instruction for LDMDB, referring to its use for popping data from Empty Ascending stacks.<br />

The pre-UAL syntaxes LDMDB <strong>and</strong> LDMEA are equivalent to LDMDB.<br />

Operation<br />

if ConditionPassed() then<br />

EncodingSpecificOperations(); NullCheckIfThumbEE(n);<br />

address = R[n] - 4*BitCount(registers);<br />

for i = 0 to 14<br />

if registers == ‘1’ then<br />

R[i] = MemA[address,4]; address = address + 4;<br />

if registers == ‘1’ then<br />

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

if wback && registers == ‘0’ then R[n] = R[n] - 4*BitCount(registers);<br />

if wback && registers == ‘1’ then R[n] = bits(32) UNKNOWN;<br />

Exceptions<br />

Data Abort.<br />

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

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

Saved successfully!

Ooh no, something went wrong!