Arm Community
Site
Search
User
Site
Search
User
Support forums
Arm Development Studio forum
cycle penality before using a register as pointer
Jump...
Cancel
Locked
Locked
Replies
6 replies
Subscribers
119 subscribers
Views
4084 views
Users
0 members are here
Options
Share
More actions
Cancel
Related
How was your experience today?
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion
cycle penality before using a register as pointer
Etienne SOBOLE
over 12 years ago
Note: This was originally posted on 28th January 2011 at
http://forums.arm.com
Hi.
it seem's that you can't use a modified register as a load address directly in the next cycle (with the Cortex A8)
For example
ADD r0, r0, #16
LDR r1,[r0]
will not execute in 2 cycles but in 3 cycles.
I'm looking in the ARM documentation where this penality cycle is explain but I do not find !!!
If I simply use the cortex A8 cycle table:
ADD will write his result in E2
while LDR will need R0 in E1
So If I just apply those rules, the 2 instructions should execute in 2 cycles.
So !!! Does anybody can tell me where this pipeline-dependent latency is explain (or simply notify) ?
Thank's
Parents
Etienne SOBOLE
over 12 years ago
Note: This was originally posted on 28th January 2011 at
http://forums.arm.com
Ok.
I'm back, and this time I'm a little bit more sure about my purpose...
This code take 3 cycles
LDR r0, [r8]
ADD r1, r1, r0
LDR give is result in E3
ADD need r0 in E2
So this code should take 2 cycles
LDR r0, [r8]
MOV r1, r0
take 4 cycles while MOV need r0 in E1 !
It should take 3 cycles !!!
Why ???
I do not find case where those code take correct cycles.
It give more correct result if I say LDR give is result in E4 !
Cancel
Vote up
0
Vote down
Cancel
Reply
Etienne SOBOLE
over 12 years ago
Note: This was originally posted on 28th January 2011 at
http://forums.arm.com
Ok.
I'm back, and this time I'm a little bit more sure about my purpose...
This code take 3 cycles
LDR r0, [r8]
ADD r1, r1, r0
LDR give is result in E3
ADD need r0 in E2
So this code should take 2 cycles
LDR r0, [r8]
MOV r1, r0
take 4 cycles while MOV need r0 in E1 !
It should take 3 cycles !!!
Why ???
I do not find case where those code take correct cycles.
It give more correct result if I say LDR give is result in E4 !
Cancel
Vote up
0
Vote down
Cancel
Children
No data