forked from opencv/opencv
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge remote-tracking branch 'upstream/3.4' into merge-3.4
- Loading branch information
Showing
36 changed files
with
4,716 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
|
||
/* mips_init.c - MSA optimised filter functions | ||
* | ||
* Copyright (c) 2018 Cosmin Truta | ||
* Copyright (c) 2016 Glenn Randers-Pehrson | ||
* Written by Mandar Sahastrabuddhe, 2016. | ||
* | ||
* This code is released under the libpng license. | ||
* For conditions of distribution and use, see the disclaimer | ||
* and license in png.h | ||
*/ | ||
|
||
/* Below, after checking __linux__, various non-C90 POSIX 1003.1 functions are | ||
* called. | ||
*/ | ||
#define _POSIX_SOURCE 1 | ||
|
||
#include <stdio.h> | ||
#include "../pngpriv.h" | ||
|
||
#ifdef PNG_READ_SUPPORTED | ||
|
||
#if PNG_MIPS_MSA_OPT > 0 | ||
#ifdef PNG_MIPS_MSA_CHECK_SUPPORTED /* Do run-time checks */ | ||
/* WARNING: it is strongly recommended that you do not build libpng with | ||
* run-time checks for CPU features if at all possible. In the case of the MIPS | ||
* MSA instructions there is no processor-specific way of detecting the | ||
* presence of the required support, therefore run-time detection is extremely | ||
* OS specific. | ||
* | ||
* You may set the macro PNG_MIPS_MSA_FILE to the file name of file containing | ||
* a fragment of C source code which defines the png_have_msa function. There | ||
* are a number of implementations in contrib/mips-msa, but the only one that | ||
* has partial support is contrib/mips-msa/linux.c - a generic Linux | ||
* implementation which reads /proc/cpufino. | ||
*/ | ||
#ifndef PNG_MIPS_MSA_FILE | ||
# ifdef __linux__ | ||
# define PNG_MIPS_MSA_FILE "contrib/mips-msa/linux.c" | ||
# endif | ||
#endif | ||
|
||
#ifdef PNG_MIPS_MSA_FILE | ||
|
||
#include <signal.h> /* for sig_atomic_t */ | ||
static int png_have_msa(png_structp png_ptr); | ||
#include PNG_MIPS_MSA_FILE | ||
|
||
#else /* PNG_MIPS_MSA_FILE */ | ||
# error "PNG_MIPS_MSA_FILE undefined: no support for run-time MIPS MSA checks" | ||
#endif /* PNG_MIPS_MSA_FILE */ | ||
#endif /* PNG_MIPS_MSA_CHECK_SUPPORTED */ | ||
|
||
#ifndef PNG_ALIGNED_MEMORY_SUPPORTED | ||
# error "ALIGNED_MEMORY is required; set: -DPNG_ALIGNED_MEMORY_SUPPORTED" | ||
#endif | ||
|
||
void | ||
png_init_filter_functions_msa(png_structp pp, unsigned int bpp) | ||
{ | ||
/* The switch statement is compiled in for MIPS_MSA_API, the call to | ||
* png_have_msa is compiled in for MIPS_MSA_CHECK. If both are defined | ||
* the check is only performed if the API has not set the MSA option on | ||
* or off explicitly. In this case the check controls what happens. | ||
*/ | ||
|
||
#ifdef PNG_MIPS_MSA_API_SUPPORTED | ||
switch ((pp->options >> PNG_MIPS_MSA) & 3) | ||
{ | ||
case PNG_OPTION_UNSET: | ||
/* Allow the run-time check to execute if it has been enabled - | ||
* thus both API and CHECK can be turned on. If it isn't supported | ||
* this case will fall through to the 'default' below, which just | ||
* returns. | ||
*/ | ||
#ifdef PNG_MIPS_MSA_CHECK_SUPPORTED | ||
{ | ||
static volatile sig_atomic_t no_msa = -1; /* not checked */ | ||
|
||
if (no_msa < 0) | ||
no_msa = !png_have_msa(pp); | ||
|
||
if (no_msa) | ||
return; | ||
} | ||
#endif /* PNG_MIPS_MSA_CHECK_SUPPORTED */ | ||
break; | ||
|
||
default: /* OFF or INVALID */ | ||
return; | ||
|
||
case PNG_OPTION_ON: | ||
/* Option turned on */ | ||
break; | ||
} | ||
/* IMPORTANT: any new external functions used here must be declared using | ||
* PNG_INTERNAL_FUNCTION in ../pngpriv.h. This is required so that the | ||
* 'prefix' option to configure works: | ||
* | ||
* ./configure --with-libpng-prefix=foobar_ | ||
* | ||
* Verify you have got this right by running the above command, doing a build | ||
* and examining pngprefix.h; it must contain a #define for every external | ||
* function you add. (Notice that this happens automatically for the | ||
* initialization function.) | ||
*/ | ||
pp->read_filter[PNG_FILTER_VALUE_UP-1] = png_read_filter_row_up_msa; | ||
|
||
if (bpp == 3) | ||
{ | ||
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub3_msa; | ||
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_msa; | ||
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth3_msa; | ||
} | ||
else if (bpp == 4) | ||
{ | ||
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_msa; | ||
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_msa; | ||
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth4_msa; | ||
} | ||
#else | ||
(void)pp; | ||
(void)bpp; | ||
#endif /* PNG_MIPS_MSA_API_SUPPORTED */ | ||
} | ||
#endif /* PNG_MIPS_MSA_OPT > 0 */ | ||
#endif /* READ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
diff --git a/3rdparty/libpng/mips/mips_init.c b/3rdparty/libpng/mips/mips_init.c | ||
index 8dd283deef..6a061cccfa 100644 | ||
--- a/3rdparty/libpng/mips/mips_init.c | ||
+++ b/3rdparty/libpng/mips/mips_init.c | ||
@@ -73,7 +73,6 @@ png_init_filter_functions_msa(png_structp pp, unsigned int bpp) | ||
* this case will fall through to the 'default' below, which just | ||
* returns. | ||
*/ | ||
-#endif /* PNG_MIPS_MSA_API_SUPPORTED */ | ||
#ifdef PNG_MIPS_MSA_CHECK_SUPPORTED | ||
{ | ||
static volatile sig_atomic_t no_msa = -1; /* not checked */ | ||
@@ -84,12 +83,9 @@ png_init_filter_functions_msa(png_structp pp, unsigned int bpp) | ||
if (no_msa) | ||
return; | ||
} | ||
-#ifdef PNG_MIPS_MSA_API_SUPPORTED | ||
- break; | ||
-#endif | ||
#endif /* PNG_MIPS_MSA_CHECK_SUPPORTED */ | ||
+ break; | ||
|
||
-#ifdef PNG_MIPS_MSA_API_SUPPORTED | ||
default: /* OFF or INVALID */ | ||
return; | ||
|
||
@@ -97,8 +93,6 @@ png_init_filter_functions_msa(png_structp pp, unsigned int bpp) | ||
/* Option turned on */ | ||
break; | ||
} | ||
-#endif | ||
- | ||
/* IMPORTANT: any new external functions used here must be declared using | ||
* PNG_INTERNAL_FUNCTION in ../pngpriv.h. This is required so that the | ||
* 'prefix' option to configure works: | ||
@@ -118,13 +112,16 @@ png_init_filter_functions_msa(png_structp pp, unsigned int bpp) | ||
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg3_msa; | ||
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth3_msa; | ||
} | ||
- | ||
else if (bpp == 4) | ||
{ | ||
pp->read_filter[PNG_FILTER_VALUE_SUB-1] = png_read_filter_row_sub4_msa; | ||
pp->read_filter[PNG_FILTER_VALUE_AVG-1] = png_read_filter_row_avg4_msa; | ||
pp->read_filter[PNG_FILTER_VALUE_PAETH-1] = png_read_filter_row_paeth4_msa; | ||
} | ||
+#else | ||
+ (void)pp; | ||
+ (void)bpp; | ||
+#endif /* PNG_MIPS_MSA_API_SUPPORTED */ | ||
} | ||
#endif /* PNG_MIPS_MSA_OPT > 0 */ | ||
#endif /* READ */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
diff --git a/3rdparty/libwebp/src/dsp/msa_macro.h b/3rdparty/libwebp/src/dsp/msa_macro.h | ||
index de026a1d9e..a16c0bb300 100644 | ||
--- a/3rdparty/libwebp/src/dsp/msa_macro.h | ||
+++ b/3rdparty/libwebp/src/dsp/msa_macro.h | ||
@@ -73,7 +73,7 @@ | ||
static inline TYPE FUNC_NAME(const void* const psrc) { \ | ||
const uint8_t* const psrc_m = (const uint8_t*)psrc; \ | ||
TYPE val_m; \ | ||
- asm volatile ( \ | ||
+ __asm__ volatile ( \ | ||
"" #INSTR " %[val_m], %[psrc_m] \n\t" \ | ||
: [val_m] "=r" (val_m) \ | ||
: [psrc_m] "m" (*psrc_m)); \ | ||
@@ -86,7 +86,7 @@ | ||
static inline void FUNC_NAME(TYPE val, void* const pdst) { \ | ||
uint8_t* const pdst_m = (uint8_t*)pdst; \ | ||
TYPE val_m = val; \ | ||
- asm volatile ( \ | ||
+ __asm__ volatile ( \ | ||
" " #INSTR " %[val_m], %[pdst_m] \n\t" \ | ||
: [pdst_m] "=m" (*pdst_m) \ | ||
: [val_m] "r" (val_m)); \ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2,7 +2,7 @@ | |
|
||
static int test() | ||
{ | ||
std::atomic<int> x; | ||
std::atomic<long long> x; | ||
return x; | ||
} | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
#include <stdio.h> | ||
|
||
#if defined(__mips_msa) | ||
# include <msa.h> | ||
# define CV_MSA 1 | ||
#endif | ||
|
||
#if defined CV_MSA | ||
int test() | ||
{ | ||
const float src[] = { 0.0f, 0.0f, 0.0f, 0.0f }; | ||
v4f32 val = (v4f32)__msa_ld_w((const float*)(src), 0); | ||
return __msa_copy_s_w(__builtin_msa_ftint_s_w (val), 0); | ||
} | ||
#else | ||
#error "MSA is not supported" | ||
#endif | ||
|
||
int main() | ||
{ | ||
printf("%d\n", test()); | ||
return 0; | ||
} |
Oops, something went wrong.