Hi all
My question is not really related to Keil, but I didn't find any other forum to ask questions about ARM architecture, then I decided to ask it here.
I'm trying to write an emulator for ARM processors on x86. At first, I thought that it will be enough if I just run instructions(I want to support v4 to v5TE, v6 is something totally different from previous ones). But when I read more about it, I noticed that ARM pipeline structure has been changed from 3 step pipeline in ARM7TDMI to 5 step pipeline in ARM9E-S, and I guess this should heavily affect my code, because I didn't want to emulate ARM pipeline structure. I thought if I don't emulate ARM7TDMI pipeline, there will be not too much problem if I will be careful for accessing Program Counter(R15). ARM7TDMI has 3 step pipeline(Fetch/Decode/Execute) and execution step is the last step, then running current instruction will not depend on previous instruction. But in ARM9E-S, execution step is the 3rd step of a 5 step pipeline(Fetch/Decode/Execute/Memory access/Write Register), then I thought that running 2 instructions in these pipelines can effect each other. For example, I thought that these instructions should effect each other in this 5 step pipeline:
ldr r0,[r0] add r0,r0,#1
Because when 1st instruction in 4th step for reading value of [r0], its value is needed for next instruction that is in execution step, but needs r0 value from decoding step which is already passed. For testing this, I wrote these 2 lines of assembly code in Keil to make a problemistic situation, although it didn't work as I expected. Because I thought that after 2nd instruction, I should get incorrect value 1 at r0(because of pipeline), but I got [r0]+1 in it which is a correct value. What am I missing here? Can I really ignore pipeline steps in writing my emulator and just emulate instructions, or there are some cases which are affected by pipeline?
Regards
I'm trying to write an emulator for ARM processors on x86.
Why exactly would the world need yet another one of those?