http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53735
zhuolin liu <zhuolin.liu at arm dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |zhuolin.liu at arm dot com --- Comment #3 from zhuolin liu <zhuolin.liu at arm dot com> 2012-07-24 09:04:15 UTC --- simple code fork() fails to assemble with -mthumb -Os, works with -O2 instead of -Os. register int aa5 __asm__ ("r4") ; register int aa6 __asm__ ("r5") ; struct pthread { int tid; int pid; int ss[128]; }; int add_lock; int fork (void) { int * meself = __builtin_thread_pointer () - 1; if (add_lock !=(int)meself) { __lll_lock_wait_private (0); } register int __a1 __asm__ ("a1")=1; register int _v3 __asm__ ("v3") = 1; int _v1tmp = (int) (&((struct pthread *)__builtin_thread_pointer () - 1)->tid); register int __a2 __asm__ ("a2") =1; register int __a3 __asm__ ("a3") =1; register int __a4 __asm__ ("a4") =1; register int _v1 __asm__ ("v1") = _v1tmp; __asm__ __volatile__ ( "\n" : :"r" (_v3) , "r" (__a1), "r" (__a2), "r" (__a3), "r" (__a4), "r" (_v1) :); }