Hi, the makro defines for amd64 can't work this way as it include the parameter types in the function call (see buildd log).
To fix this it is simplest if on amd64 the original functions are called and on i386 the wrapper. To do this the OIL_DEFINE_IMPL_FULL makro has to be replaced by an extended version incorporating the wrapper code from the old patch like this: #if defined(__i386__) #define OIL_DEFINE_IMPL_FULL_WRAPPER(sse_name, name, flags, ret, ...) \ ret sse_name(__VA_ARGS__) __attribute__((used)); \ ret sse_name ## _wrap (__VA_ARGS__) { \ OIL_SSE_WRAPPER_CALL(sse_name); \ } \ OIL_DEFINE_IMPL_FULL(sse_name ## _wrap, name, flags); #define OIL_SSE_WRAPPER_CALL(name) \ asm volatile( \ "\n\t" \ "subl $0x10,%%esp\n\t" \ "andl $0xfffffff0,%%esp\n\t" \ \ "movdqu 8(%%ebp),%%xmm0\n\t" \ "movdqa %%xmm0,(%%esp)\n\t" \ \ "call " #name "\n\t" \ "movl %%ebp,%%esp\n\t" \ : : \ : "eax","ecx","edx","xmm0") #elif defined(__amd64__) /* Needed because we call *_wrap. Should get optimized away anyway */ #define OIL_DEFINE_IMPL_FULL_WRAPPER(sse_name, name, flags, ret, ...) \ OIL_DEFINE_IMPL_FULL(sse_name, name, flags); #else #error Can't use sse on !i386 and !amd64 #endif The usage then change as the the makros get compined into a signle call. This mean OIL_SSE_WRAPPER(composite_over_argb_const_src_sse, static void, uint32_t *dest, const uint32_t *src, int n) OIL_DEFINE_IMPL_FULL (composite_over_argb_const_src_sse_wrap, composite_over_argb_const_src, OIL_IMPL_FLAG_SSE2); becomes OIL_DEFINE_IMPL_FULL (composite_over_argb_const_src_sse, composite_over_argb_const_src, OIL_IMPL_FLAG_SSE2, static void, uint32_t *dest, const uint32_t *src, int n); Is that enough for you to fix this? MfG Goswin -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]