(va_arg): Copy both definitions from gstdarg.h.
authorRichard Stallman <rms@gnu.org>
Mon, 30 Nov 1992 23:07:11 +0000 (23:07 +0000)
committerRichard Stallman <rms@gnu.org>
Mon, 30 Nov 1992 23:07:11 +0000 (23:07 +0000)
From-SVN: r2821

gcc/ginclude/varargs.h

index b04dced5a79f07464172442d8b2ec2a4be710db8..a66c72ae597d4937d88b01226d1396fbaf68a169 100644 (file)
@@ -87,9 +87,19 @@ typedef void *__gnuc_va_list;
 #define __va_rounded_size(TYPE)  \
   (((sizeof (TYPE) + sizeof (int) - 1) / sizeof (int)) * sizeof (int))
 
+#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 += __va_rounded_size (TYPE),                                      \
-  *((TYPE *) (AP - __va_rounded_size (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 /* not alpha */
 #endif /* not i960 */