1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;
2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;
4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;  Use of this source code is governed by a BSD-style license
5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;  that can be found in the LICENSE file in the root of the source
6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;  tree. An additional intellectual property rights grant can be found
7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;  in the file PATENTS.  All contributing project authors may
8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;  be found in the AUTHORS file in the root of the source tree.
9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;
10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org%include "vpx_ports/x86_abi_support.asm"
13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void copy_mem8x8_mmx(
16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    unsigned char *src,
17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    int src_stride,
18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    unsigned char *dst,
19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    int dst_stride
20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    )
21f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_copy_mem8x8_mmx) PRIVATE
22474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_copy_mem8x8_mmx):
23474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push        rbp
24474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov         rbp, rsp
25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    SHADOW_ARGS_TO_STACK 4
26474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push        rsi
27474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push        rdi
28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; end prolog
29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mov         rsi,        arg(0) ;src;
31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm0,        [rsi]
32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movsxd      rax,        dword ptr arg(1) ;src_stride;
34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mov         rdi,        arg(2) ;dst;
35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm1,        [rsi+rax]
37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm2,        [rsi+rax*2]
38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movsxd      rcx,        dword ptr arg(3) ;dst_stride
40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rsi,        [rsi+rax*2]
41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi],      mm0
43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rsi,        rax
44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],      mm1
46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2],    mm2
47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rdi,        [rdi+rcx*2]
50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm3,        [rsi]
51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rdi,        rcx
53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm4,        [rsi+rax]
54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
55474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm5,        [rsi+rax*2]
56474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi],      mm3
57474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
58474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rsi,        [rsi+rax*2]
59474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],  mm4
60474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
61474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2],    mm5
62474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rdi,        [rdi+rcx*2]
63474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
64474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm0,        [rsi+rax]
65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm1,        [rsi+rax*2]
66474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],  mm0
68474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2],mm1
69474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
70474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; begin epilog
71474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop rdi
72474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop rsi
73474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    UNSHADOW_ARGS
74474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop         rbp
75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ret
76474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
77474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
78474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void copy_mem8x4_mmx(
79474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    unsigned char *src,
80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    int src_stride,
81474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    unsigned char *dst,
82474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    int dst_stride
83474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    )
84f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_copy_mem8x4_mmx) PRIVATE
85474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_copy_mem8x4_mmx):
86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push        rbp
87474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov         rbp, rsp
88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    SHADOW_ARGS_TO_STACK 4
89474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push        rsi
90474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push        rdi
91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; end prolog
92474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
93474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mov         rsi,        arg(0) ;src;
94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm0,        [rsi]
95474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
96474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movsxd      rax,        dword ptr arg(1) ;src_stride;
97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mov         rdi,        arg(2) ;dst;
98474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
99474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm1,        [rsi+rax]
100474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm2,        [rsi+rax*2]
101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
102474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movsxd      rcx,        dword ptr arg(3) ;dst_stride
103474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rsi,        [rsi+rax*2]
104474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
105474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi],      mm0
106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],      mm1
107474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
108474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2],    mm2
109474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rdi,        [rdi+rcx*2]
110474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm3,        [rsi+rax]
112474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],      mm3
113474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
114474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; begin epilog
115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop rdi
116474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop rsi
117474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    UNSHADOW_ARGS
118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop         rbp
119474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ret
120474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
122474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;void copy_mem16x16_mmx(
123474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    unsigned char *src,
124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    int src_stride,
125474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    unsigned char *dst,
126474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    int dst_stride
127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org;    )
128f18f5eb544bb35db231ced346e077907a8c61fc9hclam@chromium.orgglobal sym(vp8_copy_mem16x16_mmx) PRIVATE
129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgsym(vp8_copy_mem16x16_mmx):
130474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push        rbp
131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    mov         rbp, rsp
132474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    SHADOW_ARGS_TO_STACK 4
133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push        rsi
134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    push        rdi
135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; end prolog
136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mov         rsi,        arg(0) ;src;
138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movsxd      rax,        dword ptr arg(1) ;src_stride;
139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
140474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        mov         rdi,        arg(2) ;dst;
141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movsxd      rcx,        dword ptr arg(3) ;dst_stride
142474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
143474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm0,            [rsi]
144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm3,            [rsi+8];
145474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
146474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm1,            [rsi+rax]
147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm4,            [rsi+rax+8]
148474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
149474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm2,            [rsi+rax*2]
150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm5,            [rsi+rax*2+8]
151474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
152474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rsi,            [rsi+rax*2]
153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rsi,            rax
154474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi],          mm0
156474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+8],        mm3
157474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],      mm1
159474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx+8],    mm4
160474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2],    mm2
162474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2+8],  mm5
163474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rdi,            [rdi+rcx*2]
165474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rdi,            rcx
166474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm0,            [rsi]
168474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm3,            [rsi+8];
169474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm1,            [rsi+rax]
171474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm4,            [rsi+rax+8]
172474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm2,            [rsi+rax*2]
174474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm5,            [rsi+rax*2+8]
175474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rsi,            [rsi+rax*2]
177474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rsi,            rax
178474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi],          mm0
180474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+8],        mm3
181474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
182474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],      mm1
183474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx+8],    mm4
184474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2],    mm2
186474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2+8],  mm5
187474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rdi,            [rdi+rcx*2]
189474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rdi,            rcx
190474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm0,            [rsi]
192474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm3,            [rsi+8];
193474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm1,            [rsi+rax]
195474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm4,            [rsi+rax+8]
196474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm2,            [rsi+rax*2]
198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm5,            [rsi+rax*2+8]
199474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
200474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rsi,            [rsi+rax*2]
201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rsi,            rax
202474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
203474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi],          mm0
204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+8],        mm3
205474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
206474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],      mm1
207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx+8],    mm4
208474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
209474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2],    mm2
210474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2+8],  mm5
211474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
212474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rdi,            [rdi+rcx*2]
213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rdi,            rcx
214474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm0,            [rsi]
216474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm3,            [rsi+8];
217474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
218474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm1,            [rsi+rax]
219474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm4,            [rsi+rax+8]
220474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
221474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm2,            [rsi+rax*2]
222474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm5,            [rsi+rax*2+8]
223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rsi,            [rsi+rax*2]
225474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rsi,            rax
226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
227474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi],          mm0
228474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+8],        mm3
229474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
230474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],      mm1
231474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx+8],    mm4
232474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
233474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2],    mm2
234474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2+8],  mm5
235474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rdi,            [rdi+rcx*2]
237474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rdi,            rcx
238474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
239474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm0,            [rsi]
240474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm3,            [rsi+8];
241474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm1,            [rsi+rax]
243474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm4,            [rsi+rax+8]
244474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm2,            [rsi+rax*2]
246474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm5,            [rsi+rax*2+8]
247474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
248474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rsi,            [rsi+rax*2]
249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rsi,            rax
250474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
251474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi],          mm0
252474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+8],        mm3
253474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx],      mm1
255474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx+8],    mm4
256474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
257474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2],    mm2
258474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+rcx*2+8],  mm5
259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
260474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        lea         rdi,            [rdi+rcx*2]
261474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        add         rdi,            rcx
262474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
263474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm0,            [rsi]
264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        mm3,            [rsi+8];
265474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
266474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi],          mm0
267474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org        movq        [rdi+8],        mm3
268474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org
269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ; begin epilog
270474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop rdi
271474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop rsi
272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    UNSHADOW_ARGS
273474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    pop         rbp
274474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org    ret
275