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

Safe to use r13-r15 as general register?

Note: This was originally posted on 18th July 2011 at http://forums.arm.com

Hello, I am writting a function, which involves complicated algorithm, I want to have a lot of general purpose registers to keep the routine speed. I have read some article that r13-r15 are special registers, but can be used as general purpose registers.

Can I do it like this
   stmfd       sp!, {r4-r15,lr}
:
:
    ldmfd       sp!, {r4-r15,pc}

Thank you very much!
Parents
  • Note: This was originally posted on 19th July 2011 at http://forums.arm.com

    You can use r13 and r14.
    I used to do that

    To save and restore register you can do this:



    my_fct:
    movw        r12, #:lower16:.save_zone
    movt        r12, #:upper16:.save_zone
    stmia   r12, {r4 - r11, sp, lr}

    ...

    movw        r12, #:lower16:.save_zone
    movt        r12, #:upper16:.save_zone
    ldmia   r12, {r4 - r11, sp, pc}

    .data
    .save_zone:
    .word   0, 0, 0, 0, 0, 0, 0
    .word   0, 0, 0, 0, 0, 0, 0


    r12 can be used because it is a scratch register, but if you want, you can push it before changing it and restore it after having restored sp (r13) !

    Etienne
Reply
  • Note: This was originally posted on 19th July 2011 at http://forums.arm.com

    You can use r13 and r14.
    I used to do that

    To save and restore register you can do this:



    my_fct:
    movw        r12, #:lower16:.save_zone
    movt        r12, #:upper16:.save_zone
    stmia   r12, {r4 - r11, sp, lr}

    ...

    movw        r12, #:lower16:.save_zone
    movt        r12, #:upper16:.save_zone
    ldmia   r12, {r4 - r11, sp, pc}

    .data
    .save_zone:
    .word   0, 0, 0, 0, 0, 0, 0
    .word   0, 0, 0, 0, 0, 0, 0


    r12 can be used because it is a scratch register, but if you want, you can push it before changing it and restore it after having restored sp (r13) !

    Etienne
Children
No data