So I'm trying to write an emulator for Arm instructions in a special context and I would like to understand the full behavior of the program counter in an Arm processor. Specs have the statement below
The Program Counter (PC) is accessed as PC (or R15). It is incremented by the size of the instruction executed (which is always four bytes in ARM state). Branch instructions load the destination address into the PC. You can also load the PC directly using data processing instructions. For example, to branch to the address in a general purpose register, use: MOV PC, R0 During execution, the PC does not contain the address of the currently executing instruction. The address of the currently executing instruction is typically PC–8 for ARM, or PC–4 for Thumb.
From this, I understand that when the ADDS PC, #-4 was executed PC would be at +4 or +8, so if it's at +4 would the program go into an infinite loop?