16.10. Single load and store instructions

This section describes the cycle timing behavior for LDR, LDRT,LDRB, LDRBT, LDRSB, LDRH, LDRSH, STR, STRT, STRB, STRBT, STRH, and PLD instructions.

Table 16.13 shows the cycle timing behavior for stores and loads, other than loads to the PC.

You can replace LDR with any of the above single load or store instructions. The following rules apply:

Table 16.13. Cycle timing behavior for stores and loads, other than loads to the PC

Example instructionCyclesMemory cyclesResult latencyComments
LDR <Rd>, <addr_md_1cycle>[1]113Legacy access / ARMv6 aligned access
LDR <Rd>, <addr_md_2cycle>[1]224Legacy access / ARMv6 aligned access
LDR <Rd>, <addr_md_1cycle>[1]123Potentially ARMv6 unaligned access
LDR <Rd>, <addr_md_2cycle>[1]234Potentially ARMv6 unaligned access
LDR <Rd>, <addr_md_1cycle>[1]124ARMv6 unaligned access
LDR <Rd>, <addr_md_2cycle>[1]124ARMv6 unaligned access

[1] See Table 16.15 for an explanation of <addr_md_1cycle> and <addr_md_2cycle>.

Table 16.14 shows the cycle timing behavior for loads to the PC.

Table 16.14. Cycle timing behavior for loads to the PC

Example instructionCyclesMemory cyclesResult latencyComments
LDR pc, [sp, #cns] (!)41-

Correctly return stack predicted

LDR pc, [sp], #cns41-

Correctly return stack predicted

LDR pc, [sp, #cns] (!)91-

Return stack mispredicted

LDR pc, [sp], #cns91-Return stack mispredicted
LDR <cond> pc, [sp, #cns] (!)81-Conditional return, or empty return stack
LDR <cond> pc, [sp], #cns81-Conditional return, or empty return stack
LDR pc, <addr_md_1cycle>[1]81--
LDR pc, <addr_md_2cycle>[1]92--

[1] See Table 16.15 for an explanation of <addr_md_1cycle> and <addr_md_2cycle>.

Only cycle times for aligned accesses are given because unaligned accesses to the PC are not supported.

ARM1136JF-S processor includes a three-entry return stack that can predict procedure returns. Any load to the PC with an immediate offset, and the stack pointer r13 as the base register is considered a procedure return.

For condition code failing cycle counts, you must use the cycles for the non-PC destination variants.

Table 16.15 shows the explanation of <addr_md_1cycle> and <addr_md_2cycle> used in Table 16.13 and Table 16.14.

Table 16.15. <addr_md_1cycle> and <addr_md_2cycle> LDR example instruction

Example instructionEarly RegComment
<addr_md_1cycle>  
 LDR <Rd>, [<Rn>, #cns] (!)<Rn>If an immediate offset, or a positive register offset with no shift or shift LSL #2, then one-issue cycle.
 LDR <Rd>, [<Rn>, <Rm>] (!)<Rn>, <Rm>
 LDR <Rd>, [<Rn>, <Rm>, LSL #2] (!)<Rn>, <Rm>
 LDR <Rd>, [<Rn>], #cns<Rn>
 LDR <Rd>, [<Rn>], <Rm><Rn>, <Rm>
 LDR <Rd>, [<Rn>], <Rm>, LSL #2<Rn>, <Rm>
<addr_md_2cycle>  
 LDR <Rd>, [<Rn>, -<Rm>] (!)<Rm>If negative register offset, or shift other than LSL #2 then two-issue cycles.
 LDR <Rd>, [Rm, -<Rm> <shf> <cns>] (!)<Rm>
 LDR <Rd>, [<Rn>], -<Rm><Rm>
 LDR <Rd>, [<Rn>], -<Rm> <shf> <cns><Rm>
Copyright © 2002-2005 ARM Limited. All rights reserved.ARM DDI 0211H
Non-Confidential