OSDN Git Service

projects clean up 1
[pinoc/pinoc.git] / test / Standart_startup / lib / include / stdarg.h
1 /*
2  * stdarg.h
3 */
4
5 #ifndef _STDARG_H_
6 #define _STDARG_H_
7
8 #if defined(__sh__) || defined(__m32c__) || defined(__RX__)
9
10 typedef __builtin_va_list va_list;
11
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)
15
16 #else /*defined(__sh__) || defined(__m32c__)|| defined(__RX__) */
17
18 typedef void *va_list[1];
19
20 #if defined(__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)
21
22 #define STACK_ALIGNMENT 4
23
24 #else /*defined(__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)*/
25
26 //It will come here for H8300L
27
28 #define STACK_ALIGNMENT 2
29
30 #endif /*defined(__H8300H__) || defined(__H8300S__) || defined (__H8300SX__)*/
31
32 #define ALIGNMENT_GAP(type)\
33                 ((STACK_ALIGNMENT - (sizeof(type) % STACK_ALIGNMENT)) % STACK_ALIGNMENT)
34
35 #define va_start(ap, parmN)\
36                 ap[0] = ((char *) &parmN) + sizeof(parmN)
37         
38 #define va_arg(ap, mode)\
39                 (ap[0] = ((char*)ap[0]) + sizeof(mode) + ALIGNMENT_GAP(mode) , \
40                  (*((mode*) (((char*)ap[0]) - sizeof(mode)))))
41         
42 #define va_end(ap)      ((void)0) 
43
44 #endif /*defined(__sh__) || defined(__m32c__) || defined(__RX__)*/
45
46 #endif /* _STDARG_H_ */
47