https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83292
--- Comment #4 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Andrew Church from comment #3) > I use __builtin_return(__builtin_apply(...)) in library function wrappers > for failure injection in tests, so that I don't need to explicitly write out > all the arguments multiple times for each wrapped function. As such, I > don't need the full functionality of __builtin_apply() in being able to save > and later return an arbitrary value, but it would be useful to have an > equivalent to the combination __builtin_return(__builtin_apply(...)) -- > perhaps something which restored the register/stack state to that at > function entry and jumped to the target function (e.g., jmp *%eax/rax on > x86). You can use __attribute__((__target__("no-mmx"))): (from gcc.target/i386/builtin-apply-mmx.c): --cut here-- double foo (double arg) { if (arg != 116.0) abort (); return arg + 1.0; } inline double __attribute__((__target__("no-mmx"))) bar (double arg) { foo (arg); __builtin_return (__builtin_apply ((void (*)()) foo, __builtin_apply_args (), 16)); } static void mmx_test (void) { if (bar (116.0) != 117.0) abort (); } --cut here--