Sorunu çözdüm. AmigaOS4 için varargs kullanımı farklıymış (kafa hep 68k'ya gidiyor). Doğrusunu öğrenip uyguladım ama gel gör ki o da çalışmadı. Baktım bu iş sinir bozacak, OS4 kütüphane koçanından Sort() fonksiyonunu tamamen kaldırdım. Onun yerine inline makro ile tanımladım kendisini (MorphOS ve OS3'de zaten mecburen makro kullanıyorduk, OS4 de aynı oluversin n'olcak). [züğürt tesellisi] Hem binary'de bir kaç bayt küçülmüş oldu, güzel oldu. [/züğürt tesellisi].
Örnek kod bırakayım buraya, yarın öbür gün bir başka deli uğraşırsa bunlarla bir döküman olsun.
Olması gereken: (fakat nedense çalışmayan)
#ifdef __amigaos4__
LIBPROTOVA(Sort, LONG, REG(a6, __BASE_OR_IFACE), REG(a0, array), REG(d0, size), ...)
{
__gnuc_va_list ap;
struct TagItem *tags;
__builtin_va_start(ap, size);
tags = va_getlinearva(ap, struct TagItem *);
__builtin_va_end(ap);
return CALL_LFUNC(SortA, array, size, tags);
}
#endif
Benim yaptığım: (tıkır tıkır çalışan)
#define Sort(array, size, ...) ({_sfdc_vararg args[] = {__VA_ARGS__}; SortA((array), (size), args);})