Index: third_party/qcms/google.patch |
diff --git a/third_party/qcms/google.patch b/third_party/qcms/google.patch |
index 1084bfc267ef6c033a06770c0e082251c7f270da..67886c9d1a31fc577dd363c576807552caa75029 100644 |
--- a/third_party/qcms/google.patch |
+++ b/third_party/qcms/google.patch |
@@ -313,7 +313,7 @@ index 6a5faf9..fa7f2d1 100644 |
+ dest[b_out] = otdata_b[output[2]]; |
} |
diff --git a/third_party/qcms/src/transform.c b/third_party/qcms/src/transform.c |
-index 9a6562b..1f4e72b 100644 |
+index 9a6562b..7312ced 100644 |
--- a/third_party/qcms/src/transform.c |
+++ b/third_party/qcms/src/transform.c |
@@ -181,11 +181,20 @@ compute_chromatic_adaption(struct CIE_XYZ source_white_point, |
@@ -707,7 +707,7 @@ index 9a6562b..1f4e72b 100644 |
/* don't precache if we do not have the TRC curves */ |
if (!profile->redTRC || !profile->greenTRC || !profile->blueTRC) |
-@@ -1224,14 +1224,14 @@ |
+@@ -1157,14 +1224,14 @@ qcms_transform* qcms_transform_create( |
return NULL; |
} |
if (precache) { |
@@ -724,7 +724,25 @@ index 9a6562b..1f4e72b 100644 |
/* Microsoft Compiler for x64 doesn't support MMX. |
* SSE code uses MMX so that we disable on x64 */ |
} else |
-@@ -1262,7 +1329,17 @@ __attribute__((__force_align_arg_pointer__)) |
+@@ -1256,13 +1323,34 @@ qcms_transform* qcms_transform_create( |
+ return transform; |
+ } |
+ |
+-#if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__) |
++/* __force_align_arg_pointer__ is an x86-only attribute, and gcc/clang warns on unused |
++ * attributes. Don't use this on ARM or AMD64. __has_attribute can detect the presence |
++ * of the attribute but is currently only supported by clang */ |
++#if defined(__has_attribute) |
++#define HAS_FORCE_ALIGN_ARG_POINTER __has_attribute(__force_align_arg_pointer__) |
++#elif defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__) && !defined(__arm__) |
++#define HAS_FORCE_ALIGN_ARG_POINTER 1 |
++#else |
++#define HAS_FORCE_ALIGN_ARG_POINTER 0 |
++#endif |
++ |
++#if HAS_FORCE_ALIGN_ARG_POINTER |
+ /* we need this to avoid crashes when gcc assumes the stack is 128bit aligned */ |
+ __attribute__((__force_align_arg_pointer__)) |
#endif |
void qcms_transform_data(qcms_transform *transform, void *src, void *dest, size_t length) |
{ |
@@ -781,27 +799,3 @@ index e8447e5..f68699d 100644 |
} |
struct matrix build_colorant_matrix(qcms_profile *p) |
-diff --git a/third_party/qcms/src/transform.c b/third_party/qcms/src/transform.c |
-index 976c498..44ce9b5 100644 |
---- a/third_party/qcms/src/transform.c |
-+++ b/third_party/qcms/src/transform.c |
-@@ -1324,8 +1324,18 @@ qcms_transform* qcms_transform_create( |
- } |
- |
- #if defined(__GNUC__) && !defined(__x86_64__) && !defined(__amd64__) |
-+#if !defined(__has_attribute) |
-+/* Assume that the compiler supports the provided attribute. */ |
-+#define __has_attribute(x) 1 |
-+#endif |
-+#if __has_attribute(__force_align_arg_pointer__) |
- /* we need this to avoid crashes when gcc assumes the stack is 128bit aligned */ |
- __attribute__((__force_align_arg_pointer__)) |
-+#else |
-+/* __force_align_arg_pointer__ is an x86-only attribute, and clang warns on used |
-+ * attributes. Don't use this on ARM. |
-+ */ |
-+#endif |
- #endif |
- void qcms_transform_data(qcms_transform *transform, void *src, void *dest, size_t length) |
- { |
- |