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_sad16x16_ppc 1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .globl vp8_sad16x8_ppc 1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .globl vp8_sad8x16_ppc 1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .globl vp8_sad8x8_ppc 1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .globl vp8_sad4x4_ppc 1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro load_aligned_16 V R O 1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvsl v3, 0, \R ;# permutate value for alignment 2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v1, 0, \R 2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v2, \O, \R 2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vperm \V, v1, v2, v3 2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm 2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro prologue 2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mfspr r11, 256 ;# get old VRSAVE 2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber oris r12, r11, 0xffc0 3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtspr 256, r12 ;# set VRSAVE 3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stwu r1, -32(r1) ;# create space on the stack 3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber li r10, 16 ;# load offset and loop counter 3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vspltisw v8, 0 ;# zero out total to start 3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm 3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro epilogue 4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber addi r1, r1, 32 ;# recover stack 4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtspr 256, r11 ;# reset old VRSAVE 4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm 4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro SAD_16 4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# v6 = abs (v4 - v5) 4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsububs v6, v4, v5 4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsububs v7, v5, v4 4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vor v6, v6, v7 5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# v8 += abs (v4 - v5) 5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsum4ubs v8, v6, v8 5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm 5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro sad_16_loop loop_label 5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvsl v3, 0, r5 ;# only needs to be done once per block 5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# preload a line of data before getting into the loop 5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v4, 0, r3 6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v1, 0, r5 6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v2, r10, r5 6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r5, r5, r6 6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r3, r3, r4 6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vperm v5, v1, v2, v3 6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .align 4 6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber\loop_label: 7090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# compute difference on first row 7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsububs v6, v4, v5 7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsububs v7, v5, v4 7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# load up next set of data 7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v9, 0, r3 7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v1, 0, r5 7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v2, r10, r5 7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# perform abs() of difference 8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vor v6, v6, v7 8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r3, r3, r4 8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# add to the running tally 8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsum4ubs v8, v6, v8 8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# now onto the next line 8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vperm v5, v1, v2, v3 8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r5, r5, r6 8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v4, 0, r3 9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# compute difference on second row 9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsububs v6, v9, v5 9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v1, 0, r5 9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsububs v7, v5, v9 9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v2, r10, r5 9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vor v6, v6, v7 9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r3, r3, r4 9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsum4ubs v8, v6, v8 9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vperm v5, v1, v2, v3 10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r5, r5, r6 10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber bdnz \loop_label 10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vspltisw v7, 0 10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsumsws v8, v8, v7 10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stvx v8, 0, r1 10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lwz r3, 12(r1) 11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm 11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro sad_8_loop loop_label 11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .align 4 11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber\loop_label: 11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# only one of the inputs should need to be aligned. 11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber load_aligned_16 v4, r3, r10 11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber load_aligned_16 v5, r5, r10 11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# move onto the next line 12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r3, r3, r4 12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r5, r5, r6 12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# only one of the inputs should need to be aligned. 12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber load_aligned_16 v6, r3, r10 12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber load_aligned_16 v7, r5, r10 12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# move onto the next line 12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r3, r3, r4 12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add r5, r5, r6 13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v4, v4, v6 13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vmrghb v5, v5, v7 13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber SAD_16 13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber bdnz \loop_label 13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vspltisw v7, 0 13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsumsws v8, v8, v7 14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stvx v8, 0, r1 14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lwz r3, 12(r1) 14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm 14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .align 2 14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 unsigned char *src_ptr 14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r4 int src_stride 14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r5 unsigned char *ref_ptr 15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r6 int ref_stride 15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# 15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 return value 15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervp8_sad16x16_ppc: 15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prologue 15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber li r9, 8 15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtctr r9 15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber sad_16_loop sad16x16_loop 16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber epilogue 16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber blr 16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .align 2 16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 unsigned char *src_ptr 16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r4 int src_stride 16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r5 unsigned char *ref_ptr 17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r6 int ref_stride 17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# 17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 return value 17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervp8_sad16x8_ppc: 17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prologue 17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber li r9, 4 17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtctr r9 17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber sad_16_loop sad16x8_loop 18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber epilogue 18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber blr 18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .align 2 18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 unsigned char *src_ptr 18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r4 int src_stride 18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r5 unsigned char *ref_ptr 19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r6 int ref_stride 19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# 19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 return value 19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervp8_sad8x16_ppc: 19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prologue 19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber li r9, 8 19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtctr r9 19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber sad_8_loop sad8x16_loop 20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber epilogue 20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber blr 20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .align 2 20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 unsigned char *src_ptr 20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r4 int src_stride 20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r5 unsigned char *ref_ptr 21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r6 int ref_stride 21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# 21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 return value 21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervp8_sad8x8_ppc: 21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prologue 21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber li r9, 4 21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber mtctr r9 21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber sad_8_loop sad8x8_loop 22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber epilogue 22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber blr 22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.macro transfer_4x4 I P 22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lwz r0, 0(\I) 22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add \I, \I, \P 22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lwz r7, 0(\I) 23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add \I, \I, \P 23290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 23390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lwz r8, 0(\I) 23490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber add \I, \I, \P 23590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 23690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lwz r9, 0(\I) 23790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 23890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stw r0, 0(r1) 23990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stw r7, 4(r1) 24090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stw r8, 8(r1) 24190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stw r9, 12(r1) 24290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber.endm 24390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 24490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber .align 2 24590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 unsigned char *src_ptr 24690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r4 int src_stride 24790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r5 unsigned char *ref_ptr 24890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r6 int ref_stride 24990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# 25090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;# r3 return value 25190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubervp8_sad4x4_ppc: 25290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 25390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber prologue 25490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 25590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber transfer_4x4 r3, r4 25690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v4, 0, r1 25790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 25890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber transfer_4x4 r5, r6 25990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lvx v5, 0, r1 26090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 26190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vspltisw v8, 0 ;# zero out total to start 26290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 26390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# v6 = abs (v4 - v5) 26490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsububs v6, v4, v5 26590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsububs v7, v5, v4 26690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vor v6, v6, v7 26790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 26890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber ;# v8 += abs (v4 - v5) 26990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsum4ubs v7, v6, v8 27090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber vsumsws v7, v7, v8 27190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 27290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber stvx v7, 0, r1 27390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber lwz r3, 12(r1) 27490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 27590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber epilogue 27690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber 27790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber blr 278