xref: /OK3568_Linux_fs/buildroot/package/libmad/0001-mips-h-constraint-removal.patch (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyunhttp://patchwork.openembedded.org/patch/921/
2*4882a593Smuzhiyun
3*4882a593Smuzhiyundiff -ur libmad-0.15.1b-orig/fixed.h libmad-0.15.1b/fixed.h
4*4882a593Smuzhiyun--- libmad-0.15.1b-orig/fixed.h	2004-02-17 12:32:03.000000000 +1030
5*4882a593Smuzhiyun+++ libmad-0.15.1b/fixed.h	2009-08-05 10:46:30.000000000 +0930
6*4882a593Smuzhiyun@@ -299,6 +299,23 @@
7*4882a593Smuzhiyun
8*4882a593Smuzhiyun # elif defined(FPM_MIPS)
9*4882a593Smuzhiyun
10*4882a593Smuzhiyun+/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */
11*4882a593Smuzhiyun+#if defined (__GNUC__) && defined (__GNUC_MINOR__)
12*4882a593Smuzhiyun+#define __GNUC_PREREQ(maj, min) \
13*4882a593Smuzhiyun+	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
14*4882a593Smuzhiyun+#else
15*4882a593Smuzhiyun+#define __GNUC_PREREQ(maj, min)  0
16*4882a593Smuzhiyun+#endif
17*4882a593Smuzhiyun+
18*4882a593Smuzhiyun+#if __GNUC_PREREQ(4,4)
19*4882a593Smuzhiyun+  typedef unsigned int u64_di_t __attribute__ ((mode (DI)));
20*4882a593Smuzhiyun+# define MAD_F_MLX(hi, lo, x, y) \
21*4882a593Smuzhiyun+   do { \
22*4882a593Smuzhiyun+      u64_di_t __ll = (u64_di_t) (x) * (y); \
23*4882a593Smuzhiyun+      hi = __ll >> 32; \
24*4882a593Smuzhiyun+      lo = __ll; \
25*4882a593Smuzhiyun+   } while (0)
26*4882a593Smuzhiyun+#else
27*4882a593Smuzhiyun /*
28*4882a593Smuzhiyun  * This MIPS version is fast and accurate; the disposition of the least
29*4882a593Smuzhiyun  * significant bit depends on OPT_ACCURACY via mad_f_scale64().
30*4882a593Smuzhiyun@@ -328,6 +345,7 @@
31*4882a593Smuzhiyun 	 : "%r" ((x) >> 12), "r" ((y) >> 16))
32*4882a593Smuzhiyun #  define MAD_F_MLZ(hi, lo)  ((mad_fixed_t) (lo))
33*4882a593Smuzhiyun # endif
34*4882a593Smuzhiyun+#endif /* __GNU_PREREQ(4,4) */
35*4882a593Smuzhiyun
36*4882a593Smuzhiyun # if defined(OPT_SPEED)
37*4882a593Smuzhiyun #  define mad_f_scale64(hi, lo)  \
38*4882a593Smuzhiyundiff -ur libmad-0.15.1b-orig/mad.h libmad-0.15.1b/mad.h
39*4882a593Smuzhiyun--- libmad-0.15.1b-orig/mad.h	2004-02-17 13:25:44.000000000 +1030
40*4882a593Smuzhiyun+++ libmad-0.15.1b/mad.h	2009-08-05 10:42:40.000000000 +0930
41*4882a593Smuzhiyun@@ -344,6 +344,23 @@
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun # elif defined(FPM_MIPS)
44*4882a593Smuzhiyun
45*4882a593Smuzhiyun+/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */
46*4882a593Smuzhiyun+#if defined (__GNUC__) && defined (__GNUC_MINOR__)
47*4882a593Smuzhiyun+#define __GNUC_PREREQ(maj, min) \
48*4882a593Smuzhiyun+	((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
49*4882a593Smuzhiyun+#else
50*4882a593Smuzhiyun+#define __GNUC_PREREQ(maj, min)  0
51*4882a593Smuzhiyun+#endif
52*4882a593Smuzhiyun+
53*4882a593Smuzhiyun+#if __GNUC_PREREQ(4,4)
54*4882a593Smuzhiyun+  typedef unsigned int u64_di_t __attribute__ ((mode (DI)));
55*4882a593Smuzhiyun+# define MAD_F_MLX(hi, lo, x, y) \
56*4882a593Smuzhiyun+   do { \
57*4882a593Smuzhiyun+      u64_di_t __ll = (u64_di_t) (x) * (y); \
58*4882a593Smuzhiyun+      hi = __ll >> 32; \
59*4882a593Smuzhiyun+      lo = __ll; \
60*4882a593Smuzhiyun+   } while (0)
61*4882a593Smuzhiyun+#else
62*4882a593Smuzhiyun /*
63*4882a593Smuzhiyun  * This MIPS version is fast and accurate; the disposition of the least
64*4882a593Smuzhiyun  * significant bit depends on OPT_ACCURACY via mad_f_scale64().
65*4882a593Smuzhiyun@@ -373,6 +390,7 @@
66*4882a593Smuzhiyun 	 : "%r" ((x) >> 12), "r" ((y) >> 16))
67*4882a593Smuzhiyun #  define MAD_F_MLZ(hi, lo)  ((mad_fixed_t) (lo))
68*4882a593Smuzhiyun # endif
69*4882a593Smuzhiyun+#endif /* __GNU_PREREQ(4,4) */
70*4882a593Smuzhiyun
71*4882a593Smuzhiyun # if defined(OPT_SPEED)
72*4882a593Smuzhiyun #  define mad_f_scale64(hi, lo)  \
73