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

Program Counter update

Note: This was originally posted on 15th June 2009 at http://forums.arm.com

In the Architectural Reference Manual for ARMv7 the PC update is described such that it gets update with adding 8 to the current PC while executing an ARM instruction and adding 4 for Thumb instruction. ARM instructions are 32-bit, hence I'd expect the PC to be updated by adding 4 to it rather than 8. Does anyone knows what is the reason behind this? Am I missing something or is it a mistake?

Thanks
Parents
  • Note: This was originally posted on 25th June 2009 at http://forums.arm.com

    The modern microarchitectures are a lot more complex than the early ARM processors, so the value of PC + 8 for ARM and PC+ 4 for Thumb does not really reflect any feature of the microarchitecture any more, but you have to specify something so software can function in the same ways on all of the different processors and using the existing standard makes most sense (the old software still works).


    So you mean to say that regardless of architecture and whether we have 3 stage or 5 stage or any other kind of pipeline, the value in PC is always Current Instruction address +4 or +8 depending on whether we are in ARM mode or thumb mode ? Doesn't that also mean that it may be risky to do jumps by directly writing into PC like in the good old days because the PC may not exactly point to the instruction being fetched next ??
Reply
  • Note: This was originally posted on 25th June 2009 at http://forums.arm.com

    The modern microarchitectures are a lot more complex than the early ARM processors, so the value of PC + 8 for ARM and PC+ 4 for Thumb does not really reflect any feature of the microarchitecture any more, but you have to specify something so software can function in the same ways on all of the different processors and using the existing standard makes most sense (the old software still works).


    So you mean to say that regardless of architecture and whether we have 3 stage or 5 stage or any other kind of pipeline, the value in PC is always Current Instruction address +4 or +8 depending on whether we are in ARM mode or thumb mode ? Doesn't that also mean that it may be risky to do jumps by directly writing into PC like in the good old days because the PC may not exactly point to the instruction being fetched next ??
Children
No data