--- mstools/h/varargs.h 2018/08/09 18:20:01 1.1.1.1 +++ mstools/h/varargs.h 2018/08/09 18:23:08 1.1.1.3 @@ -25,6 +25,9 @@ typedef char *va_list; #define _VA_LIST_DEFINED #endif + + +#ifdef _X86_ /* * define a macro to compute the size of a type, variable or expression, * rounded up to the nearest multiple of sizeof(int). This number is its @@ -36,8 +39,26 @@ typedef char *va_list; #define va_dcl va_list va_alist; #define va_start(ap) ap = (va_list)&va_alist -#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) +#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) #define va_end(ap) ap = (va_list)0 +#endif + + +#if defined(_M_MRX000) +#define va_dcl int va_alist; +#define va_start(list) list = (char *) &va_alist +#define va_end(list) +#define va_arg(list, mode) ((mode *)(list =\ + (char *) ((((int)list + (__builtin_alignof(mode)<=4?3:7)) &\ + (__builtin_alignof(mode)<=4?-4:-8))+sizeof(mode))))[-1] +/* +++++++++++++++++++++++++++++++++++++++++++ + Because of parameter passing conventions in C: + use mode=int for char, and short types + use mode=double for float types + use a pointer for array types + +++++++++++++++++++++++++++++++++++++++++++ */ +#endif + #ifdef __cplusplus }