OSDN Git Service

(va_end): #undef before the declaration.
authorrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Nov 1992 23:06:23 +0000 (23:06 +0000)
committerrms <rms@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 30 Nov 1992 23:06:23 +0000 (23:06 +0000)
(va_arg): Alternative definition for big-endian machines.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@2820 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ginclude/stdarg.h

index 4ee9bb9..2b36068 100644 (file)
@@ -62,14 +62,26 @@ typedef void *__gnuc_va_list;
 #define va_start(AP, LASTARG)                                          \
  (AP = ((__gnuc_va_list) __builtin_next_arg ()))
 
+#undef va_end
 void va_end (__gnuc_va_list);          /* Defined in libgcc.a */
 #define va_end(AP)
 
 /* We cast to void * and then to TYPE * because this avoids
    a warning about increasing the alignment requirement.  */
+
+#if defined (__arm__) || defined (__i386__) || defined (__ns32000__) || defined (__vax__)
+/* This is for little-endian machines; small args are padded upward.  */
 #define va_arg(AP, TYPE)                                               \
  (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)),    \
   *((TYPE *) (void *) ((char *) (AP) - __va_rounded_size (TYPE))))
+#else /* big-endian */
+/* This is for big-endian machines; small args are padded downward.  */
+#define va_arg(AP, TYPE)                                               \
+ (AP = (__gnuc_va_list) ((char *) (AP) + __va_rounded_size (TYPE)),    \
+  *((TYPE *) (void *) ((char *) (AP) - ((sizeof (TYPE) < 4             \
+                                        ? sizeof (TYPE)                \
+                                        : __va_rounded_size (TYPE))))))
+#endif /* big-endian */
 #endif /* _STDARG_H */
 
 #endif /* not alpha */