On 15/06/2010 11:17, pouly amaury wrote:
You convinced me that finally think that I should (or someone else !)
rewrite it in assembly to avoid any further problem. Any one against
that ?
This version seems to work correctly:
static inline void delay_loop(void)
{
asm volatile (" mov %[freq], %[freq], asr#22 \n\t"
"1: subs %[freq], %[freq], #1 \n\t"
" bne 1b"
: : [freq] "r" (cpu_frequency) : "memory");
}
By "correctly" I mean:
- it doesn't get optimized away using our default compiler flags
- it seems to generate the same code with both GCC versions
- the PMU driver works (with CPU boosted and unboosted)
- the touchscreen driver does not "lose" about 10% of presses
(this happens since r26850...)
I've tested this with the EABI compiler and all seems well. Once I've
committed it we can re-enable EABI for this target and we can all be
happy again :)
Rob.