extern int foo(int); __attribute__((regparm(2))) int bar(int a, int b) { int x[1024]; x[0] = foo(a); x[1] = foo(b); return x[0] * x[1]; } int main() { int result; asm("mov %%esp, %%ebx\n" "push $0\n" "and $0xfffffff0, %%esp\n" "add $0x4, %%esp\n" "movl $0, -0x14(%%esp)\n" "call *%%ecx\n" "mov %%ebx, %%esp\n" : "=a" (result) : "c" (bar), "a" (2), "d" (3) : "ebx"); if (result == 6) { return 0; } else { return 1; } }