Changeset 48627ab in mainline for libc/arch/mips32/include/stackarg.h
- Timestamp:
- 2006-03-16T15:06:02Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 11eae82
- Parents:
- b81e7c6
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libc/arch/mips32/include/stackarg.h
rb81e7c6 r48627ab 35 35 #include <types.h> 36 36 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 46 37 /** 47 38 * va_arg macro for MIPS32 - problem is that 64 bit values must be aligned on an 8-byte boundary (32bit values not) 48 39 * To satisfy this, paddings must be sometimes inserted. 49 40 */ 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 42 typedef 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]) 52 49 53 50 #define va_end(ap) 54 51 55 56 57 52 #endif
Note:
See TracChangeset
for help on using the changeset viewer.