http://gcc.gnu.org/bugzilla/show_bug.cgi?id=56439
--- Comment #6 from Robert "Finny" Merrill <rfmerrill at berkeley dot edu> 2013-02-25 16:39:39 UTC --- Well other than the fact that it now uses two registers (the registers are 8-bit and ints are 16-bit), no, it does the same thing register int foo asm ("r30"); void baz(); void quux(); void bar() { foo = foo * 2; if (foo > 10) baz(); else quux(); } yields: bar: /* prologue: function */ /* frame size = 0 */ /* stack size = 0 */ .L__stack_usage = 0 mov r24,r30 mov r25,r31 lsl r24 rol r25 mov r30,r24 mov r31,r25 sbiw r24,11 brge .L4 rjmp quux .L4: rjmp baz