GCC Inline Assembler "memory" Clobber don't prevent from re-arrange the code in ARM .

Sergey Organov sorganov@gmail.com
Fri Nov 3 04:18:00 GMT 2017


stephen lu <lumotuwe@gmail.com> writes:
[...]
> This is safe by adding "memory" Clobber .
> asm volatile("mrs r12, cpsr\n\t"
>     "orr r12, r12, #0xC0\n\t"
>     "msr cpsr_c, r12\n\t" :: : "r12", "cc", "memory");
> c *= b; /* This is safe. */
> asm volatile("mrs r12, cpsr\n"
>     "bic r12, r12, #0xC0\n"
>     "msr cpsr_c, r12" ::: "r12", "cc", "memory");

Try this:

asm volatile("mrs r12, cpsr\n\t"
    "orr r12, r12, #0xC0\n\t"
    "msr cpsr_c, r12\n\t" :: : "r12", "cc", "memory");

*(int volatile *) &c *= *(int volatile *) &b;

asm volatile("mrs r12, cpsr\n"
    "bic r12, r12, #0xC0\n"
    "msr cpsr_c, r12" ::: "r12", "cc", "memory");


HTH

-- Sergey



More information about the Gcc-help mailing list