Search code examples
armneon

Meaning of ARM operand [r0]!


I have just encountered the instruction:

vld1.16 {d0}, [r1]!

I am confused as to what the ! means when appended to the pointer [r1]. How is this different to the instruction:

vld1.16 {d0}, [r1]

Thanks for taking a look at this question.


Solution

  • The ! causes r1 to be updated after the memory access to the next address after the loaded memory.

    For example, VLD1.16 {d0}, [r1]! does the same thing as:

    VLD1.16 {d0}, [r1]
    ADD r1, r1, #8