asm volatile
(
"push %1 \n\t"
"call *%0 \n\t"
"add $4, %%esp \n\t"
:
: "r" ( &test ), "r" ( &x )
);
asm statements are not allowed to alter control flow
