printflocal.h.patch   [plain text]


--- printflocal.h.orig	2009-11-12 13:40:46.000000000 -0800
+++ printflocal.h	2009-11-12 23:06:25.000000000 -0800
@@ -32,6 +32,11 @@
  * $FreeBSD: src/lib/libc/stdio/printflocal.h,v 1.3 2009/03/02 04:07:58 das Exp $
  */
 
+/* 
+ * Defining here VECTORS for all files that include this header (<rdar://problem/8466056>)
+ */
+#define        VECTORS
+
 /*
  * Flags used during conversion.
  */
@@ -49,6 +49,9 @@
 #define	PTRDIFFT	0x800		/* ptrdiff_t */
 #define	INTMAXT		0x1000		/* intmax_t */
 #define	CHARINT		0x2000		/* print char using int format */
+#ifdef VECTORS
+#define VECTOR          0x4000          /* Altivec or SSE vector */
+#endif /* VECTORS */
 
 /*
  * Macros for converting digits to letters and vice versa
@@ -60,6 +63,13 @@
 /* Size of the static argument table. */
 #define STATIC_ARG_TBL_SIZE 8
 
+#ifdef VECTORS
+typedef __attribute__ ((vector_size(16))) unsigned char VECTORTYPE;
+#ifdef __SSE2__
+#define V64TYPE
+#endif /* __SSE2__ */
+#endif /* VECTORS */
+
 union arg {
 	int	intarg;
 	u_int	uintarg;
@@ -87,6 +97,21 @@ union arg {
 #endif
 	wint_t	wintarg;
 	wchar_t	*pwchararg;
+#ifdef VECTORS
+	VECTORTYPE		vectorarg;
+	unsigned char		vuchararg[16];
+	signed char		vchararg[16];
+	unsigned short		vushortarg[8];
+	signed short		vshortarg[8];
+	unsigned int		vuintarg[4];
+	signed int		vintarg[4];
+	float			vfloatarg[4];
+#ifdef V64TYPE
+	double			vdoublearg[2];
+	unsigned long long	vulonglongarg[2];
+	long long		vlonglongarg[2];
+#endif /* V64TYPE */
+#endif /* VECTORS */
 };
 
 /* Handle positional parameters. */