Index: source/row_neon.cc |
diff --git a/source/row_neon.cc b/source/row_neon.cc |
index 7b95388e6a93407211ec87863c54c5dc4e361da3..0387aee6c6a0895dcab11c39c53eb844bd147759 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" |
); |