xref: /aosp_15_r20/external/libvpx/vp8/common/x86/recon_mmx.asm (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
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