8 #if defined(__sh__) || defined(__m32c__) || defined(__RX__)
10 typedef __builtin_va_list va_list;
12 #define va_start(ap, parmN) __builtin_va_start(ap, parmN)
13 #define va_arg(ap, mode) __builtin_va_arg(ap, mode)
14 #define va_end(ap) __builtin_va_end(ap)
16 #else /*defined(__sh__) || defined(__m32c__)|| defined(__RX__) */
18 typedef void *va_list[1];
20 #if defined(__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)
22 #define STACK_ALIGNMENT 4
24 #else /*defined(__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)*/
26 //It will come here for H8300L
28 #define STACK_ALIGNMENT 2
30 #endif /*defined(__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)*/
32 #define ALIGNMENT_GAP(type)\
33 ((STACK_ALIGNMENT - (sizeof(type) % STACK_ALIGNMENT)) % STACK_ALIGNMENT)
35 #define va_start(ap, parmN)\
36 ap[0] = ((char *) &parmN) + sizeof(parmN)
38 #define va_arg(ap, mode)\
39 (ap[0] = ((char*)ap[0]) + sizeof(mode) + ALIGNMENT_GAP(mode) , \
40 (*((mode*) (((char*)ap[0]) - sizeof(mode)))))
42 #define va_end(ap) ((void)0)
44 #endif /*defined(__sh__) || defined(__m32c__) || defined(__RX__)*/
46 #endif /* _STDARG_H_ */