* device/lib/pic/libdev/devices.txt: device list for mkall.sh
[fw/sdcc] / device / include / stdarg.h
index 85a7f5d9676d327cb2bdd788a1f22976ea5861ac..671b0e2bca8e888127330a77548881eb5ad8c132 100644 (file)
@@ -1,20 +1,36 @@
-/*-------------------------------------------------------------------------*/
-/* stdarg.h - ANSI macros for variable parameter list                     */
-/*-------------------------------------------------------------------------*/
+/*-----------------------------------------------------------------------------------*/
+/* stdarg.h - ANSI macros for variable parameter list                               */
+/*-----------------------------------------------------------------------------------*/
 
-#ifndef _STDARG_H
-#define _STDARG_H 1
+#ifndef __SDC51_STDARG_H
+#define __SDC51_STDARG_H 1
+
+#if defined(__z80) || defined(__gbz80) || defined(__hc08)
+
+typedef unsigned char * va_list;
+#define va_start(list, last)   list = (unsigned char *)&last + sizeof(last)
+#define va_arg(list, type)     *((type *)((list += sizeof(type)) - sizeof(type)))
+
+#elif defined(__ds390) || defined(__ds400)
+
+typedef        unsigned char * va_list ;
+#define va_arg(marker,type) *((type *)(marker -= sizeof(type)))
+#define        va_start(marker,first) { marker = &first; }
 
-#if defined(SDCC_MODEL_LARGE) || defined(SDCC_MODEL_FLAT24)
-typedef        unsigned char _xdata * va_list ;
 #elif defined(SDCC_USE_XSTACK)
-typedef        unsigned char _pdata * va_list ;
+
+typedef        unsigned char __pdata * va_list ;
+#define va_arg(marker,type) *((type __data *)(marker -= sizeof(type)))
+#define        va_start(marker,first) { marker = (va_list)((char __pdata *)&first); }
+
 #else
-typedef        unsigned char _data *  va_list ;
+
+typedef        unsigned char __data * va_list ;
+#define va_arg(marker,type) *((type __data * )(marker -= sizeof(type)))
+#define        va_start(marker,first) { marker = (va_list) ((char __data * )&first); }
+
 #endif
 
-#define va_arg(valist,type)   (*((type *)(valist -= sizeof(type))))
-#define        va_start(valist,first)  (valist = (va_list)&(first))
-#define va_end(valist) (valist = (va_list) 0)
+#define va_end(marker) marker = (va_list) 0;
 
 #endif