From: Søren Sandmann Pedersen <ssp at redhat.com> GCC assumes that input variables in inline assembly are fully consumed before any output variable is written. This means it may allocate the variables in the same register unless the output variables are marked as early-clobber.