aboutsummaryrefslogtreecommitdiff
path: root/source/convert_from_argb.cc
diff options
context:
space:
mode:
authorFrank Barchard <fbarchard@google.com>2016-11-22 10:47:55 -0800
committerFrank Barchard <fbarchard@google.com>2016-11-22 10:47:55 -0800
commitda0c29dada64273a9610c0ace86d7a6382236c7d (patch)
treeb08046086c4d186acdb74bb7fa1b13904521af69 /source/convert_from_argb.cc
parentb1504a8e48acbb0d1fee6f1c0fe3851ab71348fb (diff)
downloadlibyuv-da0c29dada64273a9610c0ace86d7a6382236c7d.tar.gz
Add MSA optimized ARGBToRGB565Row_MSA, ARGBToARGB1555Row_MSA, ARGBToARGB4444Row_MSA, ARGBToUV444Row_MSA functions
R=fbarchard@google.com BUG=libyuv:634 Performance Gain (vs C vectorized) ARGBToRGB565Row_MSA - ~1.6x ARGBToRGB565Row_Any_MSA - ~1.6x ARGBToARGB1555Row_MSA - ~1.3x ARGBToARGB1555Row_Any_MSA - ~1.3x ARGBToARGB4444Row_MSA - ~3.8x ARGBToARGB4444Row_Any_MSA - ~3.8x ARGBToUV444Row_MSA - ~2.4x ARGBToUV444Row_Any_MSA - ~2.4x Performance Gain (vs C non-vectorized) ARGBToRGB565Row_MSA - ~2.8x ARGBToRGB565Row_Any_MSA - ~2.8x ARGBToARGB1555Row_MSA - ~2.2x ARGBToARGB1555Row_Any_MSA - ~2.2x ARGBToARGB4444Row_MSA - ~6.8x ARGBToARGB4444Row_Any_MSA - ~6.6x ARGBToUV444Row_MSA - ~6.7x ARGBToUV444Row_Any_MSA - ~6.7x Review URL: https://codereview.chromium.org/2520003004 .
Diffstat (limited to 'source/convert_from_argb.cc')
-rw-r--r--source/convert_from_argb.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/source/convert_from_argb.cc b/source/convert_from_argb.cc
index eb8bd445..41df216d 100644
--- a/source/convert_from_argb.cc
+++ b/source/convert_from_argb.cc
@@ -68,6 +68,14 @@ int ARGBToI444(const uint8* src_argb,
}
}
#endif
+#if defined(HAS_ARGBTOUV444ROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ ARGBToUV444Row = ARGBToUV444Row_Any_MSA;
+ if (IS_ALIGNED(width, 16)) {
+ ARGBToUV444Row = ARGBToUV444Row_MSA;
+ }
+ }
+#endif
#if defined(HAS_ARGBTOYROW_SSSE3)
if (TestCpuFlag(kCpuHasSSSE3)) {
ARGBToYRow = ARGBToYRow_Any_SSSE3;
@@ -1029,6 +1037,14 @@ int ARGBToRGB565(const uint8* src_argb,
}
}
#endif
+#if defined(HAS_ARGBTORGB565ROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ ARGBToRGB565Row = ARGBToRGB565Row_Any_MSA;
+ if (IS_ALIGNED(width, 8)) {
+ ARGBToRGB565Row = ARGBToRGB565Row_MSA;
+ }
+ }
+#endif
for (y = 0; y < height; ++y) {
ARGBToRGB565Row(src_argb, dst_rgb565, width);
@@ -1087,6 +1103,14 @@ int ARGBToARGB1555(const uint8* src_argb,
}
}
#endif
+#if defined(HAS_ARGBTOARGB1555ROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ ARGBToARGB1555Row = ARGBToARGB1555Row_Any_MSA;
+ if (IS_ALIGNED(width, 8)) {
+ ARGBToARGB1555Row = ARGBToARGB1555Row_MSA;
+ }
+ }
+#endif
for (y = 0; y < height; ++y) {
ARGBToARGB1555Row(src_argb, dst_argb1555, width);
@@ -1145,6 +1169,14 @@ int ARGBToARGB4444(const uint8* src_argb,
}
}
#endif
+#if defined(HAS_ARGBTOARGB4444ROW_MSA)
+ if (TestCpuFlag(kCpuHasMSA)) {
+ ARGBToARGB4444Row = ARGBToARGB4444Row_Any_MSA;
+ if (IS_ALIGNED(width, 8)) {
+ ARGBToARGB4444Row = ARGBToARGB4444Row_MSA;
+ }
+ }
+#endif
for (y = 0; y < height; ++y) {
ARGBToARGB4444Row(src_argb, dst_argb4444, width);