As I wrote earlier, memory clobber didn't help, but there is an interesting thing: I replaced description of the third argument of spin_lock function from "rI" to "r" and it fixed my problem. AFAIK the only one thing "I" does and that is describing my argument as a constant in range 0 - 31. I don't understand why it so radically changes generated code.