190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 2f71323e297a928af368937089d3ed71239786f86Andreas Huber; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 4f71323e297a928af368937089d3ed71239786f86Andreas Huber; Use of this source code is governed by a BSD-style license 5f71323e297a928af368937089d3ed71239786f86Andreas Huber; that can be found in the LICENSE file in the root of the source 6f71323e297a928af368937089d3ed71239786f86Andreas Huber; tree. An additional intellectual property rights grant can be found 7f71323e297a928af368937089d3ed71239786f86Andreas Huber; in the file PATENTS. All contributing project authors may 8f71323e297a928af368937089d3ed71239786f86Andreas Huber; be found in the AUTHORS file in the root of the source tree. 990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber; 1090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .globl vp8_subtract_mbuv_ppc 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .globl vp8_subtract_mby_ppc 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 short *diff 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r4 unsigned char *usrc 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r5 unsigned char *vsrc 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r6 unsigned char *pred 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r7 int stride 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervp8_subtract_mbuv_ppc: 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mfspr r11, 256 ;# get old VRSAVE 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber oris r12, r11, 0xf000 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtspr 256, r12 ;# set VRSAVE 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber li r9, 256 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r3, r3, r9 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r3, r3, r9 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r6, r6, r9 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber li r10, 16 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber li r9, 4 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtctr r9 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vspltisw v0, 0 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubermbu_loop: 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvsl v5, 0, r4 ;# permutate value for alignment 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v1, 0, r4 ;# src 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v2, 0, r6 ;# pred 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r4, r4, r7 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber addi r6, r6, 16 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vperm v1, v1, v0, v5 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v3, v0, v1 ;# unpack high src to short 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v4, v0, v2 ;# unpack high pred to short 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvsl v5, 0, r4 ;# permutate value for alignment 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v1, 0, r4 ;# src 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r4, r4, r7 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsubshs v3, v3, v4 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stvx v3, 0, r3 ;# store out diff 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vperm v1, v1, v0, v5 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v3, v0, v1 ;# unpack high src to short 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrglb v4, v0, v2 ;# unpack high pred to short 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsubshs v3, v3, v4 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stvx v3, r10, r3 ;# store out diff 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber addi r3, r3, 32 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber bdnz mbu_loop 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtctr r9 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubermbv_loop: 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvsl v5, 0, r5 ;# permutate value for alignment 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v1, 0, r5 ;# src 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v2, 0, r6 ;# pred 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r5, r5, r7 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber addi r6, r6, 16 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vperm v1, v1, v0, v5 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v3, v0, v1 ;# unpack high src to short 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v4, v0, v2 ;# unpack high pred to short 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvsl v5, 0, r5 ;# permutate value for alignment 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v1, 0, r5 ;# src 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r5, r5, r7 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsubshs v3, v3, v4 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stvx v3, 0, r3 ;# store out diff 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vperm v1, v1, v0, v5 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v3, v0, v1 ;# unpack high src to short 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrglb v4, v0, v2 ;# unpack high pred to short 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsubshs v3, v3, v4 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stvx v3, r10, r3 ;# store out diff 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber addi r3, r3, 32 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber bdnz mbv_loop 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtspr 256, r11 ;# reset old VRSAVE 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber blr 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 short *diff 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r4 unsigned char *src 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r5 unsigned char *pred 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r6 int stride 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervp8_subtract_mby_ppc: 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mfspr r11, 256 ;# get old VRSAVE 11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber oris r12, r11, 0xf800 11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtspr 256, r12 ;# set VRSAVE 12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber li r10, 16 12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtctr r10 12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vspltisw v0, 0 12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubermby_loop: 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v1, 0, r4 ;# src 12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v2, 0, r5 ;# pred 12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r4, r4, r6 13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber addi r5, r5, 16 13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v3, v0, v1 ;# unpack high src to short 13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v4, v0, v2 ;# unpack high pred to short 13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsubshs v3, v3, v4 13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stvx v3, 0, r3 ;# store out diff 13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrglb v3, v0, v1 ;# unpack low src to short 14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrglb v4, v0, v2 ;# unpack low pred to short 14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsubshs v3, v3, v4 14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stvx v3, r10, r3 ;# store out diff 14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber addi r3, r3, 32 14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber bdnz mby_loop 15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtspr 256, r11 ;# reset old VRSAVE 15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber blr 154