| OLD | NEW |
| (Empty) | |
| 1 ; Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 ; Use of this source code is governed by a BSD-style license that can be |
| 3 ; found in the LICENSE file. |
| 4 |
| 5 global mangle(SYMBOL) PRIVATE |
| 6 align function_align |
| 7 |
| 8 ; Non-PIC code is the fastest so use this if possible. |
| 9 %ifndef PIC |
| 10 mangle(SYMBOL): |
| 11 %assign stack_offset 0 |
| 12 PROLOGUE 5, 7, 3, Y, U, V, ARGB, WIDTH, TEMPU, TEMPV |
| 13 extern mangle(kCoefficientsRgbY) |
| 14 jmp .convertend |
| 15 |
| 16 .convertloop: |
| 17 movzx TEMPUd, BYTE [Uq] |
| 18 add Uq, 1 |
| 19 movzx TEMPVd, BYTE [Vq] |
| 20 add Vq, 1 |
| 21 movq mm0, [mangle(kCoefficientsRgbY) + 2048 + 8 * TEMPUq] |
| 22 movzx TEMPUd, BYTE [Yq] |
| 23 paddsw mm0, [mangle(kCoefficientsRgbY) + 4096 + 8 * TEMPVq] |
| 24 movzx TEMPVd, BYTE [Yq + 1] |
| 25 movq mm1, [mangle(kCoefficientsRgbY) + 8 * TEMPUq] |
| 26 add Yq, 2 |
| 27 movq mm2, [mangle(kCoefficientsRgbY) + 8 * TEMPVq] |
| 28 paddsw mm1, mm0 |
| 29 paddsw mm2, mm0 |
| 30 psraw mm1, 6 |
| 31 psraw mm2, 6 |
| 32 packuswb mm1, mm2 |
| 33 MOVQ [ARGBq], mm1 |
| 34 add ARGBq, 8 |
| 35 |
| 36 .convertend: |
| 37 sub WIDTHq, 2 |
| 38 jns .convertloop |
| 39 |
| 40 ; If number of pixels is odd then compute it. |
| 41 and WIDTHq, 1 |
| 42 jz .convertdone |
| 43 |
| 44 movzx TEMPUd, BYTE [Uq] |
| 45 movq mm0, [mangle(kCoefficientsRgbY) + 2048 + 8 * TEMPUq] |
| 46 movzx TEMPVd, BYTE [Vq] |
| 47 paddsw mm0, [mangle(kCoefficientsRgbY) + 4096 + 8 * TEMPVq] |
| 48 movzx TEMPUd, BYTE [Yq] |
| 49 movq mm1, [mangle(kCoefficientsRgbY) + 8 * TEMPUq] |
| 50 paddsw mm1, mm0 |
| 51 psraw mm1, 6 |
| 52 packuswb mm1, mm1 |
| 53 movd [ARGBq], mm1 |
| 54 |
| 55 .convertdone: |
| 56 RET |
| 57 %endif |
| 58 |
| 59 ; With PIC code we need to load the address of mangle(kCoefficientsRgbY). |
| 60 ; This code is slower than the above version. |
| 61 %ifdef PIC |
| 62 mangle(SYMBOL): |
| 63 %assign stack_offset 0 |
| 64 PROLOGUE 5, 7, 3, Y, U, V, ARGB, WIDTH, TEMP, TABLE |
| 65 |
| 66 extern mangle(kCoefficientsRgbY) |
| 67 LOAD_SYM TABLEq, mangle(kCoefficientsRgbY) |
| 68 |
| 69 jmp .convertend |
| 70 |
| 71 .convertloop: |
| 72 movzx TEMPd, BYTE [Uq] |
| 73 movq mm0, [TABLEq + 2048 + 8 * TEMPq] |
| 74 add Uq, 1 |
| 75 |
| 76 movzx TEMPd, BYTE [Vq] |
| 77 paddsw mm0, [TABLEq + 4096 + 8 * TEMPq] |
| 78 add Vq, 1 |
| 79 |
| 80 movzx TEMPd, BYTE [Yq] |
| 81 movq mm1, [TABLEq + 8 * TEMPq] |
| 82 |
| 83 movzx TEMPd, BYTE [Yq + 1] |
| 84 movq mm2, [TABLEq + 8 * TEMPq] |
| 85 add Yq, 2 |
| 86 |
| 87 ; Add UV components to Y component. |
| 88 paddsw mm1, mm0 |
| 89 paddsw mm2, mm0 |
| 90 |
| 91 ; Down shift and then pack. |
| 92 psraw mm1, 6 |
| 93 psraw mm2, 6 |
| 94 packuswb mm1, mm2 |
| 95 MOVQ [ARGBq], mm1 |
| 96 add ARGBq, 8 |
| 97 |
| 98 .convertend: |
| 99 sub WIDTHq, 2 |
| 100 jns .convertloop |
| 101 |
| 102 ; If number of pixels is odd then compute it. |
| 103 and WIDTHq, 1 |
| 104 jz .convertdone |
| 105 |
| 106 movzx TEMPd, BYTE [Uq] |
| 107 movq mm0, [TABLEq + 2048 + 8 * TEMPq] |
| 108 movzx TEMPd, BYTE [Vq] |
| 109 paddsw mm0, [TABLEq + 4096 + 8 * TEMPq] |
| 110 movzx TEMPd, BYTE [Yq] |
| 111 movq mm1, [TABLEq + 8 * TEMPq] |
| 112 paddsw mm1, mm0 |
| 113 psraw mm1, 6 |
| 114 packuswb mm1, mm1 |
| 115 movd [ARGBq], mm1 |
| 116 |
| 117 .convertdone: |
| 118 RET |
| 119 %endif |
| OLD | NEW |