Changeset 48627ab in mainline for libc/arch/mips32/include/stackarg.h


Ignore:
Timestamp:
2006-03-16T15:06:02Z (19 years ago)
Author:
Josef Cejka <malyzelenyhnus@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
11eae82
Parents:
b81e7c6
Message:

New improved version of stackargs va_start and va_arg macros for mips32.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libc/arch/mips32/include/stackarg.h

    rb81e7c6 r48627ab  
    3535#include <types.h>
    3636
    37 typedef struct va_list {
    38         int pos;
    39         uint8_t *last;
    40 } va_list;
    41 
    42 #define va_start(ap, lst)               \
    43         (ap).pos = sizeof(lst);         \
    44         (ap).last = (uint8_t *) &(lst)
    45 
    4637/**
    4738 * va_arg macro for MIPS32 - problem is that 64 bit values must be aligned on an 8-byte boundary (32bit values not)
    4839 * To satisfy this, paddings must be sometimes inserted.
    4940 */
    50 #define va_arg(ap, type)                \
    51         (*((type *)((ap).last + ((ap).pos  += sizeof(type) + ((sizeof(type) == 8) && (((ap).pos)&4) ? 4 : 0)) - sizeof(type))))
     41
     42typedef uint8_t* va_list;
     43
     44#define va_start(ap, lst) \
     45        ((ap) = (va_list)&(lst) + sizeof(lst))
     46
     47#define va_arg(ap, type)        \
     48        (((type *)((ap) = (va_list)( (sizeof(type) <= 4) ? ((uint32_t)((ap) + 2*4 - 1) & (~3)) : ((uint32_t)((ap) + 2*8 -1) & (~7)) )))[-1])
    5249
    5350#define va_end(ap)
    5451
    55 
    56 
    5752#endif
Note: See TracChangeset for help on using the changeset viewer.