1233d2500723e5594f3e7c70896ffeeef32b9c950ywan; 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan; 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan; Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan; that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan; tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan; in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan; be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan; 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan .globl copy_mem16x16_ppc 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r3 unsigned char *src 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r4 int src_stride 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r5 unsigned char *dst 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# r6 int dst_stride 18233d2500723e5594f3e7c70896ffeeef32b9c950ywan 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# Make the assumption that input will not be aligned, 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# but the output will be. So two reads and a perm 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan;# for the input, but only one store for the output. 22233d2500723e5594f3e7c70896ffeeef32b9c950ywancopy_mem16x16_ppc: 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan mfspr r11, 256 ;# get old VRSAVE 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan oris r12, r11, 0xe000 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan mtspr 256, r12 ;# set VRSAVE 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan 27233d2500723e5594f3e7c70896ffeeef32b9c950ywan li r10, 16 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan mtctr r10 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan 30233d2500723e5594f3e7c70896ffeeef32b9c950ywancp_16x16_loop: 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvsl v0, 0, r3 ;# permutate value for alignment 32233d2500723e5594f3e7c70896ffeeef32b9c950ywan 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v1, 0, r3 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan lvx v2, r10, r3 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan vperm v1, v1, v2, v0 37233d2500723e5594f3e7c70896ffeeef32b9c950ywan 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan stvx v1, 0, r5 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r3, r3, r4 ;# increment source pointer 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan add r5, r5, r6 ;# increment destination pointer 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan bdnz cp_16x16_loop 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan mtspr 256, r11 ;# reset old VRSAVE 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan blr 48