------- Comment #1 from pinskia at gcc dot gnu dot org 2008-12-29 03:50 ------- >The output is not correct, it unconditionally returns the value from g_13.
No, it does not. You missed: setle %al movzbl %al, %eax subl $1, %eax Now it unconditionally reads from g_13 which is the real issue but you did not mention that. With -march=i686, I get a conditional move instead: movzwl _g_10, %eax cmpw $10, %ax movl $0, %eax cmovg _g_13, %eax -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35762