/* * See whether the ldr r2, [r3]; cfstrd mvd0,[r2] bug also affects ldm */ double d = 1.0; double *dp = &d; main() { double * dp2 = &d; foo(); printf("%g\n", *dp2); } foo() { register double **pp asm("r3") = &dp; register double *p asm("r2"); asm volatile ("cfsubd mvd0, mvd0,mvd0"); /* mvd0 == 0.0 */ asm volatile ("nop;nop;nop;nop;nop;nop"); asm volatile ("nop;nop;nop;nop;nop;nop"); /* asm("ldmia r3, {r2}"); /* p = &d, dpp++ */ asm volatile ("ldr r2, [r3]"); /* p = &d, dpp++ */ asm volatile ("cfstrd mvd0, [r2]"); /* d = 0.0 */ }