Annotation of researchv10dc/cmd/gcc/varargs-spur.h, revision 1.1

1.1     ! root        1: /*  varargs.h for SPUR */
        !             2: 
        !             3: /* NB.  This is NOT the definition needed for the new ANSI proposed
        !             4:    standard */
        !             5:  
        !             6: 
        !             7: struct va_struct { char regs[20]; };
        !             8: 
        !             9: #define va_alist va_regs, va_stack
        !            10: 
        !            11: #define va_dcl struct va_struct va_regs; int va_stack;
        !            12: 
        !            13: typedef int va_list;
        !            14: 
        !            15: #define va_start(pvar) ((pvar) = 0)
        !            16: 
        !            17: #define va_arg(pvar,type)  \
        !            18:     ({  type va_result; \
        !            19:         if ((pvar) >= 20) { \
        !            20:            va_result = *( (type *) (&va_stack + ((pvar) - 20)/4)); \
        !            21:           (pvar) += (sizeof(type) + 7) & ~7; \
        !            22:        } \
        !            23:        else if ((pvar) + sizeof(type) > 20) { \
        !            24:           va_result = * (type *) &va_stack; \
        !            25:           (pvar) = 20 + ( (sizeof(type) + 7) & ~7); \
        !            26:        } \
        !            27:        else if (sizeof(type) == 8) { \
        !            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; \
        !            32:           (pvar) += (sizeof(type) + 3) & ~3; \
        !            33:        } \
        !            34:        else { \
        !            35:           va_result = * (type *) (va_regs.regs + (pvar)); \
        !            36:           (pvar) += (sizeof(type) + 3) & ~3; \
        !            37:        } \
        !            38:        va_result; })

unix.superglobalmegacorp.com

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