1*fb1b10abSAndroid Build Coastguard Worker; 2*fb1b10abSAndroid Build Coastguard Worker; Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker; 4*fb1b10abSAndroid Build Coastguard Worker; Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker; that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker; tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker; in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker; be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker; 10*fb1b10abSAndroid Build Coastguard Worker 11*fb1b10abSAndroid Build Coastguard Worker 12*fb1b10abSAndroid Build Coastguard Worker%include "vpx_ports/x86_abi_support.asm" 13*fb1b10abSAndroid Build Coastguard Worker 14*fb1b10abSAndroid Build Coastguard WorkerSECTION .text 15*fb1b10abSAndroid Build Coastguard Worker 16*fb1b10abSAndroid Build Coastguard Worker;void copy_mem8x8_mmx( 17*fb1b10abSAndroid Build Coastguard Worker; unsigned char *src, 18*fb1b10abSAndroid Build Coastguard Worker; int src_stride, 19*fb1b10abSAndroid Build Coastguard Worker; unsigned char *dst, 20*fb1b10abSAndroid Build Coastguard Worker; int dst_stride 21*fb1b10abSAndroid Build Coastguard Worker; ) 22*fb1b10abSAndroid Build Coastguard Workerglobalsym(vp8_copy_mem8x8_mmx) 23*fb1b10abSAndroid Build Coastguard Workersym(vp8_copy_mem8x8_mmx): 24*fb1b10abSAndroid Build Coastguard Worker push rbp 25*fb1b10abSAndroid Build Coastguard Worker mov rbp, rsp 26*fb1b10abSAndroid Build Coastguard Worker SHADOW_ARGS_TO_STACK 4 27*fb1b10abSAndroid Build Coastguard Worker push rsi 28*fb1b10abSAndroid Build Coastguard Worker push rdi 29*fb1b10abSAndroid Build Coastguard Worker ; end prolog 30*fb1b10abSAndroid Build Coastguard Worker 31*fb1b10abSAndroid Build Coastguard Worker mov rsi, arg(0) ;src; 32*fb1b10abSAndroid Build Coastguard Worker movq mm0, [rsi] 33*fb1b10abSAndroid Build Coastguard Worker 34*fb1b10abSAndroid Build Coastguard Worker movsxd rax, dword ptr arg(1) ;src_stride; 35*fb1b10abSAndroid Build Coastguard Worker mov rdi, arg(2) ;dst; 36*fb1b10abSAndroid Build Coastguard Worker 37*fb1b10abSAndroid Build Coastguard Worker movq mm1, [rsi+rax] 38*fb1b10abSAndroid Build Coastguard Worker movq mm2, [rsi+rax*2] 39*fb1b10abSAndroid Build Coastguard Worker 40*fb1b10abSAndroid Build Coastguard Worker movsxd rcx, dword ptr arg(3) ;dst_stride 41*fb1b10abSAndroid Build Coastguard Worker lea rsi, [rsi+rax*2] 42*fb1b10abSAndroid Build Coastguard Worker 43*fb1b10abSAndroid Build Coastguard Worker movq [rdi], mm0 44*fb1b10abSAndroid Build Coastguard Worker add rsi, rax 45*fb1b10abSAndroid Build Coastguard Worker 46*fb1b10abSAndroid Build Coastguard Worker movq [rdi+rcx], mm1 47*fb1b10abSAndroid Build Coastguard Worker movq [rdi+rcx*2], mm2 48*fb1b10abSAndroid Build Coastguard Worker 49*fb1b10abSAndroid Build Coastguard Worker 50*fb1b10abSAndroid Build Coastguard Worker lea rdi, [rdi+rcx*2] 51*fb1b10abSAndroid Build Coastguard Worker movq mm3, [rsi] 52*fb1b10abSAndroid Build Coastguard Worker 53*fb1b10abSAndroid Build Coastguard Worker add rdi, rcx 54*fb1b10abSAndroid Build Coastguard Worker movq mm4, [rsi+rax] 55*fb1b10abSAndroid Build Coastguard Worker 56*fb1b10abSAndroid Build Coastguard Worker movq mm5, [rsi+rax*2] 57*fb1b10abSAndroid Build Coastguard Worker movq [rdi], mm3 58*fb1b10abSAndroid Build Coastguard Worker 59*fb1b10abSAndroid Build Coastguard Worker lea rsi, [rsi+rax*2] 60*fb1b10abSAndroid Build Coastguard Worker movq [rdi+rcx], mm4 61*fb1b10abSAndroid Build Coastguard Worker 62*fb1b10abSAndroid Build Coastguard Worker movq [rdi+rcx*2], mm5 63*fb1b10abSAndroid Build Coastguard Worker lea rdi, [rdi+rcx*2] 64*fb1b10abSAndroid Build Coastguard Worker 65*fb1b10abSAndroid Build Coastguard Worker movq mm0, [rsi+rax] 66*fb1b10abSAndroid Build Coastguard Worker movq mm1, [rsi+rax*2] 67*fb1b10abSAndroid Build Coastguard Worker 68*fb1b10abSAndroid Build Coastguard Worker movq [rdi+rcx], mm0 69*fb1b10abSAndroid Build Coastguard Worker movq [rdi+rcx*2],mm1 70*fb1b10abSAndroid Build Coastguard Worker 71*fb1b10abSAndroid Build Coastguard Worker ; begin epilog 72*fb1b10abSAndroid Build Coastguard Worker pop rdi 73*fb1b10abSAndroid Build Coastguard Worker pop rsi 74*fb1b10abSAndroid Build Coastguard Worker UNSHADOW_ARGS 75*fb1b10abSAndroid Build Coastguard Worker pop rbp 76*fb1b10abSAndroid Build Coastguard Worker ret 77*fb1b10abSAndroid Build Coastguard Worker 78*fb1b10abSAndroid Build Coastguard Worker 79*fb1b10abSAndroid Build Coastguard Worker;void copy_mem8x4_mmx( 80*fb1b10abSAndroid Build Coastguard Worker; unsigned char *src, 81*fb1b10abSAndroid Build Coastguard Worker; int src_stride, 82*fb1b10abSAndroid Build Coastguard Worker; unsigned char *dst, 83*fb1b10abSAndroid Build Coastguard Worker; int dst_stride 84*fb1b10abSAndroid Build Coastguard Worker; ) 85*fb1b10abSAndroid Build Coastguard Workerglobalsym(vp8_copy_mem8x4_mmx) 86*fb1b10abSAndroid Build Coastguard Workersym(vp8_copy_mem8x4_mmx): 87*fb1b10abSAndroid Build Coastguard Worker push rbp 88*fb1b10abSAndroid Build Coastguard Worker mov rbp, rsp 89*fb1b10abSAndroid Build Coastguard Worker SHADOW_ARGS_TO_STACK 4 90*fb1b10abSAndroid Build Coastguard Worker push rsi 91*fb1b10abSAndroid Build Coastguard Worker push rdi 92*fb1b10abSAndroid Build Coastguard Worker ; end prolog 93*fb1b10abSAndroid Build Coastguard Worker 94*fb1b10abSAndroid Build Coastguard Worker mov rsi, arg(0) ;src; 95*fb1b10abSAndroid Build Coastguard Worker movq mm0, [rsi] 96*fb1b10abSAndroid Build Coastguard Worker 97*fb1b10abSAndroid Build Coastguard Worker movsxd rax, dword ptr arg(1) ;src_stride; 98*fb1b10abSAndroid Build Coastguard Worker mov rdi, arg(2) ;dst; 99*fb1b10abSAndroid Build Coastguard Worker 100*fb1b10abSAndroid Build Coastguard Worker movq mm1, [rsi+rax] 101*fb1b10abSAndroid Build Coastguard Worker movq mm2, [rsi+rax*2] 102*fb1b10abSAndroid Build Coastguard Worker 103*fb1b10abSAndroid Build Coastguard Worker movsxd rcx, dword ptr arg(3) ;dst_stride 104*fb1b10abSAndroid Build Coastguard Worker lea rsi, [rsi+rax*2] 105*fb1b10abSAndroid Build Coastguard Worker 106*fb1b10abSAndroid Build Coastguard Worker movq [rdi], mm0 107*fb1b10abSAndroid Build Coastguard Worker movq [rdi+rcx], mm1 108*fb1b10abSAndroid Build Coastguard Worker 109*fb1b10abSAndroid Build Coastguard Worker movq [rdi+rcx*2], mm2 110*fb1b10abSAndroid Build Coastguard Worker lea rdi, [rdi+rcx*2] 111*fb1b10abSAndroid Build Coastguard Worker 112*fb1b10abSAndroid Build Coastguard Worker movq mm3, [rsi+rax] 113*fb1b10abSAndroid Build Coastguard Worker movq [rdi+rcx], mm3 114*fb1b10abSAndroid Build Coastguard Worker 115*fb1b10abSAndroid Build Coastguard Worker ; begin epilog 116*fb1b10abSAndroid Build Coastguard Worker pop rdi 117*fb1b10abSAndroid Build Coastguard Worker pop rsi 118*fb1b10abSAndroid Build Coastguard Worker UNSHADOW_ARGS 119*fb1b10abSAndroid Build Coastguard Worker pop rbp 120*fb1b10abSAndroid Build Coastguard Worker ret 121