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. */