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 |