Annotation of gcc/va-sparc.h, revision 1.1.1.2

1.1       root        1: /*  varargs.h for SPARC.  */
                      2: 
                      3: /* NB.  This is NOT the definition needed for the new ANSI proposed
                      4:    standard */
                      5:  
                      6: 
1.1.1.2 ! root        7: struct __va_struct { char regs[24]; };
1.1       root        8: 
1.1.1.2 ! root        9: #define va_alist __va_regs, __va_stack
1.1       root       10: 
1.1.1.2 ! root       11: #define va_dcl struct __va_struct __va_regs; int __va_stack;
1.1       root       12: 
                     13: typedef int va_list;
                     14: 
                     15: #define va_start(pvar) ((pvar) = 0)
                     16: 
                     17: #define va_arg(pvar,type)  \
1.1.1.2 ! root       18:     ({  type __va_result; \
1.1       root       19:         if ((pvar) >= 24) { \
1.1.1.2 ! root       20:            __va_result = *( (type *) (&__va_stack + ((pvar) - 24)/4)); \
1.1       root       21:           (pvar) += (sizeof(type) + 3) & ~3; \
                     22:        } \
                     23:        else if ((pvar) + sizeof(type) > 24) { \
1.1.1.2 ! root       24:           __va_result = * (type *) &__va_stack; \
1.1       root       25:           (pvar) = 24 + ( (sizeof(type) + 3) & ~3); \
                     26:        } \
                     27:        else if (sizeof(type) == 8) { \
1.1.1.2 ! root       28:           union {double d; int i[2];} __u; \
        !            29:           __u.i[0] = *(int *) (__va_regs.regs + (pvar)); \
        !            30:           __u.i[1] = *(int *) (__va_regs.regs + (pvar) + 4); \
        !            31:           __va_result = * (type *) &__u; \
1.1       root       32:           (pvar) += (sizeof(type) + 3) & ~3; \
                     33:        } \
                     34:        else { \
1.1.1.2 ! root       35:           __va_result = * (type *) (__va_regs.regs + (pvar)); \
1.1       root       36:           (pvar) += (sizeof(type) + 3) & ~3; \
                     37:        } \
1.1.1.2 ! root       38:        __va_result; })
1.1       root       39: 
                     40: #define va_end(pvar) (pvar)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.