sh4-linux-gcc (GCC) 4.2.4 [unfortunately the version is tied to the kernel build. ] In some kernel code where RAM is unavailable due to manipulation of the MMU, I wanted to place some 'got here' stops in the code so I could ^C break in gdb, reset a register value and allow execution to continue. Accordingly I tried: volatile register int stop_loop __asm("r5")__; ... stop_loop = 0x1234; (disable MMU) while (stop_loop != 0); ... which seemed to generate code that checks the value of r5 only once: xxxx08: mov r5,r1 xxxx0a: tst r1,r1 xxxx0c: bf xxxx0c ;r5 never tested again!! xxxx0e: (unrelated code) I also tried while ((volatile)stop_loop != 0); and while ((volatile)(stop_loop != 0)); which both gave the original asm code as above. So, in short, is there any way to persuade gcc to reload r5 - which could in other non-debug situations be a global register variable updated in an ISR, for example. Or perhaps this is 'fixed' in a later gcc ...