I am using the following assembly where timer_intr is a function that I am calling within the assembly. __sync_synchronize(); asm volatile("": : :"memory") asm volatile ( "jl %%rp, %0\n" :: "r"(timer_intr) : "memory"); The issue that I am having is that, despite the use of the "memory" clobber or __sync_synchronize() or asm volatile("": : :"memory"), registers holding local variables are not flushed to memory; which causes them to have a different value after the assembly because the function timer_intr() modified them. Any idea ?