From a67927c9946a005c67ef5f0ac9be29b223b707ee Mon Sep 17 00:00:00 2001 From: Frank Barchard Date: Mon, 14 Sep 2015 16:07:58 -0700 Subject: [PATCH] use struct instead of vectors TBR=harryjin@google.com BUG=libyuv:488 Review URL: https://codereview.chromium.org/1345623003 . --- source/row_neon.cc | 144 +++++++++++++++++++++------------------------ 1 file changed, 68 insertions(+), 76 deletions(-) diff --git a/source/row_neon.cc b/source/row_neon.cc index 7b95388e6..0387aee6c 100644 --- a/source/row_neon.cc +++ b/source/row_neon.cc @@ -163,14 +163,6 @@ YuvConstantsNEON SIMD_ALIGNED(kYuvConstantsNEON) = { { 0x0101 * YG, 0, 0, 0 } }; -// TODO(fbarchard): replace these with structure. -static uvec8 kUVToRB = { -UB, -UB, -UB, -UB, -VR, -VR, -VR, -VR, - 0, 0, 0, 0, 0, 0, 0, 0 }, -static uvec8 kUVToG = { UG, UG, UG, UG, VG, VG, VG, VG, - 0, 0, 0, 0, 0, 0, 0, 0 }; -static vec16 kUVBiasBGR = { BB, BG, BR, 0, 0, 0, 0, 0 }; -static vec32 kYToRgb = { 0x0101 * YG, 0, 0, 0 }; - #undef YG #undef YGB #undef UB @@ -201,10 +193,10 @@ void I444ToARGBRow_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_argb), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -260,10 +252,10 @@ void I411ToARGBRow_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_argb), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -290,10 +282,10 @@ void I422ToBGRARow_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_bgra), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -320,10 +312,10 @@ void I422ToABGRRow_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_abgr), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -349,10 +341,10 @@ void I422ToRGBARow_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_rgba), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -377,10 +369,10 @@ void I422ToRGB24Row_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_rgb24), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -406,10 +398,10 @@ void I422ToRAWRow_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_raw), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -447,10 +439,10 @@ void I422ToRGB565Row_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_rgb565), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -492,10 +484,10 @@ void I422ToARGB1555Row_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_argb1555), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -532,10 +524,10 @@ void I422ToARGB4444Row_NEON(const uint8* src_y, "+r"(src_v), // %2 "+r"(dst_argb4444), // %3 "+r"(width) // %4 - : [kUVToRB]"r"(&kUVToRB), // %5 - [kUVToG]"r"(&kUVToG), // %6 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %5 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %6 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -557,10 +549,10 @@ void I400ToARGBRow_NEON(const uint8* src_y, : "+r"(src_y), // %0 "+r"(dst_argb), // %1 "+r"(width) // %2 - : [kUVToRB]"r"(&kUVToRB), // %3 - [kUVToG]"r"(&kUVToG), // %4 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %3 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %4 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -606,10 +598,10 @@ void NV12ToARGBRow_NEON(const uint8* src_y, "+r"(src_uv), // %1 "+r"(dst_argb), // %2 "+r"(width) // %3 - : [kUVToRB]"r"(&kUVToRB), // %4 - [kUVToG]"r"(&kUVToG), // %5 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %4 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %5 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -633,10 +625,10 @@ void NV21ToARGBRow_NEON(const uint8* src_y, "+r"(src_uv), // %1 "+r"(dst_argb), // %2 "+r"(width) // %3 - : [kUVToRB]"r"(&kUVToRB), // %4 - [kUVToG]"r"(&kUVToG), // %5 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %4 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %5 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -660,10 +652,10 @@ void NV12ToRGB565Row_NEON(const uint8* src_y, "+r"(src_uv), // %1 "+r"(dst_rgb565), // %2 "+r"(width) // %3 - : [kUVToRB]"r"(&kUVToRB), // %4 - [kUVToG]"r"(&kUVToG), // %5 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %4 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %5 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -687,10 +679,10 @@ void NV21ToRGB565Row_NEON(const uint8* src_y, "+r"(src_uv), // %1 "+r"(dst_rgb565), // %2 "+r"(width) // %3 - : [kUVToRB]"r"(&kUVToRB), // %4 - [kUVToG]"r"(&kUVToG), // %5 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %4 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %5 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -712,10 +704,10 @@ void YUY2ToARGBRow_NEON(const uint8* src_yuy2, : "+r"(src_yuy2), // %0 "+r"(dst_argb), // %1 "+r"(width) // %2 - : [kUVToRB]"r"(&kUVToRB), // %3 - [kUVToG]"r"(&kUVToG), // %4 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %3 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %4 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" ); @@ -737,10 +729,10 @@ void UYVYToARGBRow_NEON(const uint8* src_uyvy, : "+r"(src_uyvy), // %0 "+r"(dst_argb), // %1 "+r"(width) // %2 - : [kUVToRB]"r"(&kUVToRB), // %3 - [kUVToG]"r"(&kUVToG), // %4 - [kUVBiasBGR]"r"(&kUVBiasBGR), - [kYToRgb]"r"(&kYToRgb) + : [kUVToRB]"r"(&kYuvConstantsNEON.kUVToRB), // %3 + [kUVToG]"r"(&kYuvConstantsNEON.kUVToG), // %4 + [kUVBiasBGR]"r"(&kYuvConstantsNEON.kUVBiasBGR), + [kYToRgb]"r"(&kYuvConstantsNEON.kYToRgb) : "cc", "memory", "q0", "q1", "q2", "q3", "q4", "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" );