OLD | NEW |
(Empty) | |
| 1 ; |
| 2 ; Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
| 3 ; |
| 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 |
| 6 ; tree. An additional intellectual property rights grant can be found |
| 7 ; in the file PATENTS. All contributing project authors may |
| 8 ; be found in the AUTHORS file in the root of the source tree. |
| 9 ; |
| 10 |
| 11 |
| 12 .globl copy_mem16x16_ppc |
| 13 |
| 14 ;# r3 unsigned char *src |
| 15 ;# r4 int src_stride |
| 16 ;# r5 unsigned char *dst |
| 17 ;# r6 int dst_stride |
| 18 |
| 19 ;# Make the assumption that input will not be aligned, |
| 20 ;# but the output will be. So two reads and a perm |
| 21 ;# for the input, but only one store for the output. |
| 22 copy_mem16x16_ppc: |
| 23 mfspr r11, 256 ;# get old VRSAVE |
| 24 oris r12, r11, 0xe000 |
| 25 mtspr 256, r12 ;# set VRSAVE |
| 26 |
| 27 li r10, 16 |
| 28 mtctr r10 |
| 29 |
| 30 cp_16x16_loop: |
| 31 lvsl v0, 0, r3 ;# permutate value for alignment |
| 32 |
| 33 lvx v1, 0, r3 |
| 34 lvx v2, r10, r3 |
| 35 |
| 36 vperm v1, v1, v2, v0 |
| 37 |
| 38 stvx v1, 0, r5 |
| 39 |
| 40 add r3, r3, r4 ;# increment source pointer |
| 41 add r5, r5, r6 ;# increment destination pointer |
| 42 |
| 43 bdnz cp_16x16_loop |
| 44 |
| 45 mtspr 256, r11 ;# reset old VRSAVE |
| 46 |
| 47 blr |
OLD | NEW |