#include long dynalib_alpha_excuse_for_asm(long a0, long a1, long a2, long a3, long a4, long a5, int (*func)(), long n_extra, long *p_extra) { long *lptr; if (n_extra > 0) { lptr = (long *) alloca(n_extra * sizeof (long)); while (n_extra > 0) { *lptr++ = *p_extra++; n_extra --; } } asm("ldt $f16, %0" : : "m"(a0)); asm("ldt $f17, %0" : : "m"(a1)); asm("ldt $f18, %0" : : "m"(a2)); asm("ldt $f19, %0" : : "m"(a3)); asm("ldt $f20, %0" : : "m"(a4)); asm("ldt $f21, %0" : : "m"(a5)); return (*((long (*)()) func))(a0, a1, a2, a3, a4, a5); }