Not sure, if this was only a gcc 4.3.3 bug or if I misunderstand something, but

gcc could apparently assume that the register assigned to the one in the
clobber list would keep its value (as can be observed when disassembling
add_debugger_command_etc()).
Using a dummy output register works around the problem and also avoids the
unnecessary initialization of the register.

Comments explaining the mystery welcome.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30909 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold 2009-05-29 01:17:53 +00:00
parent d9ea25c51d
commit 7515c32c1f

View File

@ -35,12 +35,12 @@ arch_int_restore_interrupts_inline(int oldstate)
int flags = oldstate ? 0x200 : 0;
asm volatile("pushfl;\n"
"popl %1;\n"
"andl $0xfffffdff,%1;\n"
"orl %0,%1;\n"
"pushl %1;\n"
"popl %0;\n"
"andl $0xfffffdff,%0;\n"
"orl %1,%0;\n"
"pushl %0;\n"
"popfl\n"
: : "r" (flags), "r" (0));
: "=&r"(flags) : "r"(flags));
}