xref: /plan9-contrib/riscv/include/ape/stdarg.h (revision ce95e1b3727b9cb1c223ffbed69aff21a8ced255)
1*ce95e1b3SDavid du Colombier #ifndef __STDARG
2*ce95e1b3SDavid du Colombier #define __STDARG
3*ce95e1b3SDavid du Colombier 
4*ce95e1b3SDavid du Colombier typedef char *va_list;
5*ce95e1b3SDavid du Colombier 
6*ce95e1b3SDavid du Colombier #define va_start(list, start) list =\
7*ce95e1b3SDavid du Colombier 	(sizeof(start) < 4?\
8*ce95e1b3SDavid du Colombier 		(char*)((int*)&(start)+1):\
9*ce95e1b3SDavid du Colombier 		(char*)(&(start)+1))
10*ce95e1b3SDavid du Colombier #define va_end(list)
11*ce95e1b3SDavid du Colombier /* little-endian 32-bit */
12*ce95e1b3SDavid du Colombier #define va_arg(list, mode)\
13*ce95e1b3SDavid du Colombier 	((sizeof(mode) == 1)?\
14*ce95e1b3SDavid du Colombier 		((list += 4), (mode*)list)[-4]:\
15*ce95e1b3SDavid du Colombier 	(sizeof(mode) == 2)?\
16*ce95e1b3SDavid du Colombier 		((list += 4), (mode*)list)[-2]:\
17*ce95e1b3SDavid du Colombier 	(sizeof(mode) == 4)?\
18*ce95e1b3SDavid du Colombier 		((list += 4), (mode*)list)[-1]:\
19*ce95e1b3SDavid du Colombier 		((list = (char*)((unsigned long)(list+7) & ~7) + sizeof(mode)), (mode*)list)[-1])
20*ce95e1b3SDavid du Colombier #endif /* __STDARG */
21