|
1 | 1 | diff -ruN opencv/3rdparty/openexr/IlmImf/ImfSystemSpecific.cpp opencv_patched/3rdparty/openexr/IlmImf/ImfSystemSpecific.cpp
|
2 |
| ---- opencv/3rdparty/openexr/IlmImf/ImfSystemSpecific.cpp 2019-08-22 20:02:54.769176800 +0300 |
3 |
| -+++ opencv_patched/3rdparty/openexr/IlmImf/ImfSystemSpecific.cpp 2019-08-23 14:31:17.103949100 +0300 |
4 |
| -@@ -1,138 +1,146 @@ |
5 |
| --/////////////////////////////////////////////////////////////////////////// |
6 |
| --// |
7 |
| --// Copyright (c) 2009-2014 DreamWorks Animation LLC. |
8 |
| --// |
9 |
| --// All rights reserved. |
10 |
| --// |
11 |
| --// Redistribution and use in source and binary forms, with or without |
12 |
| --// modification, are permitted provided that the following conditions are |
13 |
| --// met: |
14 |
| --// * Redistributions of source code must retain the above copyright |
15 |
| --// notice, this list of conditions and the following disclaimer. |
16 |
| --// * Redistributions in binary form must reproduce the above |
17 |
| --// copyright notice, this list of conditions and the following disclaimer |
18 |
| --// in the documentation and/or other materials provided with the |
19 |
| --// distribution. |
20 |
| --// * Neither the name of DreamWorks Animation nor the names of |
21 |
| --// its contributors may be used to endorse or promote products derived |
22 |
| --// from this software without specific prior written permission. |
23 |
| --// |
24 |
| --// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
25 |
| --// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
26 |
| --// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
27 |
| --// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
28 |
| --// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
29 |
| --// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
30 |
| --// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
31 |
| --// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
32 |
| --// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
33 |
| --// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
34 |
| --// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
35 |
| --// |
36 |
| --/////////////////////////////////////////////////////////////////////////// |
37 |
| -- |
38 |
| --#include "ImfSimd.h" |
39 |
| --#include "ImfSystemSpecific.h" |
40 |
| --#include "ImfNamespace.h" |
41 |
| --#include "OpenEXRConfig.h" |
42 |
| -- |
43 |
| --OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER |
44 |
| -- |
45 |
| --namespace { |
46 |
| --#if defined(IMF_HAVE_SSE2) && defined(__GNUC__) && !defined(__ANDROID__) |
47 |
| -- |
48 |
| -- // Helper functions for gcc + SSE enabled |
49 |
| -- void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx) |
50 |
| -- { |
| 2 | +--- opencv/3rdparty/openexr/IlmImf/ImfSystemSpecific.cpp 2019-08-23 08:11:43.536117200 -0400 |
| 3 | ++++ opencv_patched/3rdparty/openexr/IlmImf/ImfSystemSpecific.cpp 2019-08-23 08:16:58.337879800 -0400 |
| 4 | +@@ -44,11 +44,19 @@ |
| 5 | + // Helper functions for gcc + SSE enabled |
| 6 | + void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx) |
| 7 | + { |
51 | 8 | - __asm__ __volatile__ (
|
52 | 9 | - "cpuid"
|
53 | 10 | - : /* Output */ "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx)
|
54 | 11 | - : /* Input */ "a"(n)
|
55 | 12 | - : /* Clobber */);
|
56 |
| -- } |
57 |
| -- |
58 |
| --#else // IMF_HAVE_SSE2 && __GNUC__ |
59 |
| -- |
60 |
| -- // Helper functions for generic compiler - all disabled |
61 |
| -- void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx) |
62 |
| -- { |
63 |
| -- eax = ebx = ecx = edx = 0; |
64 |
| -- } |
65 |
| -- |
66 |
| --#endif // IMF_HAVE_SSE2 && __GNUC__ |
67 |
| -- |
68 |
| -- |
69 |
| --#ifdef OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX |
70 |
| -- |
71 |
| -- void xgetbv(int n, int &eax, int &edx) |
72 |
| -- { |
73 |
| -- __asm__ __volatile__ ( |
74 |
| -- "xgetbv" |
75 |
| -- : /* Output */ "=a"(eax), "=d"(edx) |
76 |
| -- : /* Input */ "c"(n) |
77 |
| -- : /* Clobber */); |
78 |
| -- } |
79 |
| -- |
80 |
| --#else // OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX |
81 |
| -- |
82 |
| -- void xgetbv(int n, int &eax, int &edx) |
83 |
| -- { |
84 |
| -- eax = edx = 0; |
85 |
| -- } |
86 |
| -- |
87 |
| --#endif // OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX |
88 |
| -- |
89 |
| --} // namespace |
90 |
| -- |
91 |
| --CpuId::CpuId(): |
92 |
| -- sse2(false), |
93 |
| -- sse3(false), |
94 |
| -- ssse3(false), |
95 |
| -- sse4_1(false), |
96 |
| -- sse4_2(false), |
97 |
| -- avx(false), |
98 |
| -- f16c(false) |
99 |
| --{ |
100 |
| -- bool osxsave = false; |
101 |
| -- int max = 0; |
102 |
| -- int eax, ebx, ecx, edx; |
103 |
| -- |
104 |
| -- cpuid(0, max, ebx, ecx, edx); |
105 |
| -- if (max > 0) |
106 |
| -- { |
107 |
| -- cpuid(1, eax, ebx, ecx, edx); |
108 |
| -- sse2 = ( edx & (1<<26) ); |
109 |
| -- sse3 = ( ecx & (1<< 0) ); |
110 |
| -- ssse3 = ( ecx & (1<< 9) ); |
111 |
| -- sse4_1 = ( ecx & (1<<19) ); |
112 |
| -- sse4_2 = ( ecx & (1<<20) ); |
113 |
| -- osxsave = ( ecx & (1<<27) ); |
114 |
| -- avx = ( ecx & (1<<28) ); |
115 |
| -- f16c = ( ecx & (1<<29) ); |
116 |
| -- |
117 |
| -- if (!osxsave) |
118 |
| -- { |
119 |
| -- avx = f16c = false; |
120 |
| -- } |
121 |
| -- else |
122 |
| -- { |
123 |
| -- xgetbv(0, eax, edx); |
124 |
| -- // eax bit 1 - SSE managed, bit 2 - AVX managed |
125 |
| -- if ((eax & 6) != 6) |
126 |
| -- { |
127 |
| -- avx = f16c = false; |
128 |
| -- } |
129 |
| -- } |
130 |
| -- } |
131 |
| -- |
132 |
| --#if defined(IMF_HAVE_SSE2) && defined(__ANDROID__) |
133 |
| -- sse2 = true; |
134 |
| -- sse3 = true; |
135 |
| --#ifdef __x86_64__ |
136 |
| -- ssse3 = true; |
137 |
| -- sse4_1 = true; |
138 |
| --#endif |
139 |
| --#endif |
140 |
| --} |
141 |
| -- |
142 |
| --OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT |
143 |
| -+/////////////////////////////////////////////////////////////////////////// |
144 |
| -+// |
145 |
| -+// Copyright (c) 2009-2014 DreamWorks Animation LLC. |
146 |
| -+// |
147 |
| -+// All rights reserved. |
148 |
| -+// |
149 |
| -+// Redistribution and use in source and binary forms, with or without |
150 |
| -+// modification, are permitted provided that the following conditions are |
151 |
| -+// met: |
152 |
| -+// * Redistributions of source code must retain the above copyright |
153 |
| -+// notice, this list of conditions and the following disclaimer. |
154 |
| -+// * Redistributions in binary form must reproduce the above |
155 |
| -+// copyright notice, this list of conditions and the following disclaimer |
156 |
| -+// in the documentation and/or other materials provided with the |
157 |
| -+// distribution. |
158 |
| -+// * Neither the name of DreamWorks Animation nor the names of |
159 |
| -+// its contributors may be used to endorse or promote products derived |
160 |
| -+// from this software without specific prior written permission. |
161 |
| -+// |
162 |
| -+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
163 |
| -+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
164 |
| -+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
165 |
| -+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
166 |
| -+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
167 |
| -+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
168 |
| -+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
169 |
| -+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
170 |
| -+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
171 |
| -+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
172 |
| -+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
173 |
| -+// |
174 |
| -+/////////////////////////////////////////////////////////////////////////// |
175 |
| -+ |
176 |
| -+#include "ImfSimd.h" |
177 |
| -+#include "ImfSystemSpecific.h" |
178 |
| -+#include "ImfNamespace.h" |
179 |
| -+#include "OpenEXRConfig.h" |
180 |
| -+ |
181 |
| -+OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_ENTER |
182 |
| -+ |
183 |
| -+namespace { |
184 |
| -+#if defined(IMF_HAVE_SSE2) && defined(__GNUC__) && !defined(__ANDROID__) |
185 |
| -+ |
186 |
| -+ // Helper functions for gcc + SSE enabled |
187 |
| -+ void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx) |
188 |
| -+ { |
189 |
| -+ #ifdef __i386__ |
190 |
| -+ __asm__ __volatile__ ( |
191 |
| -+ "pushl %%ebx; cpuid; movl %%ebx, %0; popl %%ebx" |
192 |
| -+ : /* Output */ "=m"(ebx), "=a"(eax), "=c"(ecx), "=d"(edx) |
193 |
| -+ : /* Input */ "a"(n) |
194 |
| -+ : /* Clobber */); |
195 |
| -+ #else |
196 |
| -+ __asm__ __volatile__ ( |
197 |
| -+ "cpuid" |
198 |
| -+ : /* Output */ "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) |
199 |
| -+ : /* Input */ "a"(n) |
200 |
| -+ : /* Clobber */); |
201 |
| -+ #endif |
202 |
| -+ } |
203 |
| -+ |
204 |
| -+#else // IMF_HAVE_SSE2 && __GNUC__ |
205 |
| -+ |
206 |
| -+ // Helper functions for generic compiler - all disabled |
207 |
| -+ void cpuid(int n, int &eax, int &ebx, int &ecx, int &edx) |
208 |
| -+ { |
209 |
| -+ eax = ebx = ecx = edx = 0; |
210 |
| -+ } |
211 |
| -+ |
212 |
| -+#endif // IMF_HAVE_SSE2 && __GNUC__ |
213 |
| -+ |
214 |
| -+ |
215 |
| -+#ifdef OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX |
216 |
| -+ |
217 |
| -+ void xgetbv(int n, int &eax, int &edx) |
218 |
| -+ { |
219 |
| -+ __asm__ __volatile__ ( |
220 |
| -+ "xgetbv" |
221 |
| -+ : /* Output */ "=a"(eax), "=d"(edx) |
222 |
| -+ : /* Input */ "c"(n) |
223 |
| -+ : /* Clobber */); |
224 |
| -+ } |
225 |
| -+ |
226 |
| -+#else // OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX |
227 |
| -+ |
228 |
| -+ void xgetbv(int n, int &eax, int &edx) |
229 |
| -+ { |
230 |
| -+ eax = edx = 0; |
231 |
| -+ } |
232 |
| -+ |
233 |
| -+#endif // OPENEXR_IMF_HAVE_GCC_INLINE_ASM_AVX |
234 |
| -+ |
235 |
| -+} // namespace |
236 |
| -+ |
237 |
| -+CpuId::CpuId(): |
238 |
| -+ sse2(false), |
239 |
| -+ sse3(false), |
240 |
| -+ ssse3(false), |
241 |
| -+ sse4_1(false), |
242 |
| -+ sse4_2(false), |
243 |
| -+ avx(false), |
244 |
| -+ f16c(false) |
245 |
| -+{ |
246 |
| -+ bool osxsave = false; |
247 |
| -+ int max = 0; |
248 |
| -+ int eax, ebx, ecx, edx; |
249 |
| -+ |
250 |
| -+ cpuid(0, max, ebx, ecx, edx); |
251 |
| -+ if (max > 0) |
252 |
| -+ { |
253 |
| -+ cpuid(1, eax, ebx, ecx, edx); |
254 |
| -+ sse2 = ( edx & (1<<26) ); |
255 |
| -+ sse3 = ( ecx & (1<< 0) ); |
256 |
| -+ ssse3 = ( ecx & (1<< 9) ); |
257 |
| -+ sse4_1 = ( ecx & (1<<19) ); |
258 |
| -+ sse4_2 = ( ecx & (1<<20) ); |
259 |
| -+ osxsave = ( ecx & (1<<27) ); |
260 |
| -+ avx = ( ecx & (1<<28) ); |
261 |
| -+ f16c = ( ecx & (1<<29) ); |
262 |
| -+ |
263 |
| -+ if (!osxsave) |
264 |
| -+ { |
265 |
| -+ avx = f16c = false; |
266 |
| -+ } |
267 |
| -+ else |
268 |
| -+ { |
269 |
| -+ xgetbv(0, eax, edx); |
270 |
| -+ // eax bit 1 - SSE managed, bit 2 - AVX managed |
271 |
| -+ if ((eax & 6) != 6) |
272 |
| -+ { |
273 |
| -+ avx = f16c = false; |
274 |
| -+ } |
275 |
| -+ } |
276 |
| -+ } |
277 |
| -+ |
278 |
| -+#if defined(IMF_HAVE_SSE2) && defined(__ANDROID__) |
279 |
| -+ sse2 = true; |
280 |
| -+ sse3 = true; |
281 |
| -+#ifdef __x86_64__ |
282 |
| -+ ssse3 = true; |
283 |
| -+ sse4_1 = true; |
284 |
| -+#endif |
285 |
| -+#endif |
286 |
| -+} |
287 |
| -+ |
288 |
| -+OPENEXR_IMF_INTERNAL_NAMESPACE_SOURCE_EXIT |
| 13 | ++ #ifdef __i386__ |
| 14 | ++ __asm__ __volatile__ ( |
| 15 | ++ "pushl %%ebx; cpuid; movl %%ebx, %0; popl %%ebx" |
| 16 | ++ : /* Output */ "=m"(ebx), "=a"(eax), "=c"(ecx), "=d"(edx) |
| 17 | ++ : /* Input */ "a"(n) |
| 18 | ++ : /* Clobber */); |
| 19 | ++ #else |
| 20 | ++ __asm__ __volatile__ ( |
| 21 | ++ "cpuid" |
| 22 | ++ : /* Output */ "=a"(eax), "=b"(ebx), "=c"(ecx), "=d"(edx) |
| 23 | ++ : /* Input */ "a"(n) |
| 24 | ++ : /* Clobber */); |
| 25 | ++ #endif |
| 26 | + } |
| 27 | + |
| 28 | + #else // IMF_HAVE_SSE2 && __GNUC__ |
0 commit comments