Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1040)

Side by Side Diff: source/row_neon.cc

Issue 1724393002: Port ARGBToRGB565 from aarch64 neon to 32 bit (Closed) Base URL: https://chromium.googlesource.com/libyuv/libyuv@master
Patch Set: bump version Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « include/libyuv/version.h ('k') | source/row_neon64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2011 The LibYuv Project Authors. All rights reserved. 2 * Copyright 2011 The LibYuv Project Authors. All rights reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source 5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
310 : [kUVToRB]"r"(&yuvconstants->kUVToRB), 310 : [kUVToRB]"r"(&yuvconstants->kUVToRB),
311 [kUVToG]"r"(&yuvconstants->kUVToG), 311 [kUVToG]"r"(&yuvconstants->kUVToG),
312 [kUVBiasBGR]"r"(&yuvconstants->kUVBiasBGR), 312 [kUVBiasBGR]"r"(&yuvconstants->kUVBiasBGR),
313 [kYToRgb]"r"(&yuvconstants->kYToRgb) 313 [kYToRgb]"r"(&yuvconstants->kYToRgb)
314 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", 314 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
315 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 315 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
316 ); 316 );
317 } 317 }
318 318
319 #define ARGBTORGB565 \ 319 #define ARGBTORGB565 \
320 "vshr.u8 d20, d20, #3 \n" /* B */ \ 320 "vshll.u8 q0, d22, #8 \n" /* R */ \
321 "vshr.u8 d21, d21, #2 \n" /* G */ \ 321 "vshll.u8 q8, d21, #8 \n" /* G */ \
322 "vshr.u8 d22, d22, #3 \n" /* R */ \ 322 "vshll.u8 q9, d20, #8 \n" /* B */ \
323 "vmovl.u8 q8, d20 \n" /* B */ \ 323 "vsri.16 q0, q8, #5 \n" /* RG */ \
324 "vmovl.u8 q9, d21 \n" /* G */ \ 324 "vsri.16 q0, q9, #11 \n" /* RGB */
325 "vmovl.u8 q10, d22 \n" /* R */ \
326 "vshl.u16 q9, q9, #5 \n" /* G */ \
327 "vshl.u16 q10, q10, #11 \n" /* R */ \
328 "vorr q0, q8, q9 \n" /* BG */ \
329 "vorr q0, q0, q10 \n" /* BGR */
330 325
331 void I422ToRGB565Row_NEON(const uint8* src_y, 326 void I422ToRGB565Row_NEON(const uint8* src_y,
332 const uint8* src_u, 327 const uint8* src_u,
333 const uint8* src_v, 328 const uint8* src_v,
334 uint8* dst_rgb565, 329 uint8* dst_rgb565,
335 const struct YuvConstants* yuvconstants, 330 const struct YuvConstants* yuvconstants,
336 int width) { 331 int width) {
337 asm volatile ( 332 asm volatile (
338 YUVTORGB_SETUP 333 YUVTORGB_SETUP
339 "1: \n" 334 "1: \n"
(...skipping 12 matching lines...) Expand all
352 : [kUVToRB]"r"(&yuvconstants->kUVToRB), 347 : [kUVToRB]"r"(&yuvconstants->kUVToRB),
353 [kUVToG]"r"(&yuvconstants->kUVToG), 348 [kUVToG]"r"(&yuvconstants->kUVToG),
354 [kUVBiasBGR]"r"(&yuvconstants->kUVBiasBGR), 349 [kUVBiasBGR]"r"(&yuvconstants->kUVBiasBGR),
355 [kYToRgb]"r"(&yuvconstants->kYToRgb) 350 [kYToRgb]"r"(&yuvconstants->kYToRgb)
356 : "cc", "memory", "q0", "q1", "q2", "q3", "q4", 351 : "cc", "memory", "q0", "q1", "q2", "q3", "q4",
357 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15" 352 "q8", "q9", "q10", "q11", "q12", "q13", "q14", "q15"
358 ); 353 );
359 } 354 }
360 355
361 #define ARGBTOARGB1555 \ 356 #define ARGBTOARGB1555 \
362 "vshr.u8 q10, q10, #3 \n" /* B */ \ 357 "vshll.u8 q0, d23, #8 \n" /* A */ \
363 "vshr.u8 d22, d22, #3 \n" /* R */ \ 358 "vshll.u8 q8, d22, #8 \n" /* R */ \
364 "vshr.u8 d23, d23, #7 \n" /* A */ \ 359 "vshll.u8 q9, d21, #8 \n" /* G */ \
365 "vmovl.u8 q8, d20 \n" /* B */ \ 360 "vshll.u8 q10, d20, #8 \n" /* B */ \
366 "vmovl.u8 q9, d21 \n" /* G */ \ 361 "vsri.16 q0, q8, #1 \n" /* AR */ \
367 "vmovl.u8 q10, d22 \n" /* R */ \ 362 "vsri.16 q0, q9, #5 \n" /* ARG */ \
fbarchard1 2016/02/24 18:49:18 This shift should be 6. 1 for alpha + 5 for R.
fbarchard1 2016/02/24 18:57:01 Done.
368 "vmovl.u8 q11, d23 \n" /* A */ \ 363 "vsri.16 q0, q10, #11 \n" /* ARGB */
369 "vshl.u16 q9, q9, #5 \n" /* G */ \
370 "vshl.u16 q10, q10, #10 \n" /* R */ \
371 "vshl.u16 q11, q11, #15 \n" /* A */ \
372 "vorr q0, q8, q9 \n" /* BG */ \
373 "vorr q1, q10, q11 \n" /* RA */ \
374 "vorr q0, q0, q1 \n" /* BGRA */
375 364
376 void I422ToARGB1555Row_NEON(const uint8* src_y, 365 void I422ToARGB1555Row_NEON(const uint8* src_y,
377 const uint8* src_u, 366 const uint8* src_u,
378 const uint8* src_v, 367 const uint8* src_v,
379 uint8* dst_argb1555, 368 uint8* dst_argb1555,
380 const struct YuvConstants* yuvconstants, 369 const struct YuvConstants* yuvconstants,
381 int width) { 370 int width) {
382 asm volatile ( 371 asm volatile (
383 YUVTORGB_SETUP 372 YUVTORGB_SETUP
384 "1: \n" 373 "1: \n"
(...skipping 2445 matching lines...) Expand 10 before | Expand all | Expand 10 after
2830 "r"(6) // %5 2819 "r"(6) // %5
2831 : "cc", "memory", "q0", "q1" // Clobber List 2820 : "cc", "memory", "q0", "q1" // Clobber List
2832 ); 2821 );
2833 } 2822 }
2834 #endif // defined(__ARM_NEON__) && !defined(__aarch64__) 2823 #endif // defined(__ARM_NEON__) && !defined(__aarch64__)
2835 2824
2836 #ifdef __cplusplus 2825 #ifdef __cplusplus
2837 } // extern "C" 2826 } // extern "C"
2838 } // namespace libyuv 2827 } // namespace libyuv
2839 #endif 2828 #endif
OLDNEW
« no previous file with comments | « include/libyuv/version.h ('k') | source/row_neon64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698