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%include "vpx_ports/x86_abi_support.asm"
1390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;void vp8_recon2b_sse2(unsigned char *s, short *q, unsigned char *d, int stride)
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberglobal sym(vp8_recon2b_sse2)
1590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersym(vp8_recon2b_sse2):
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rbp
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov         rbp, rsp
1890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    SHADOW_ARGS_TO_STACK 4
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rsi
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rdi
2190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; end prolog
2290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mov         rsi,        arg(0) ;s
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mov         rdi,        arg(2) ;d
2590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mov         rdx,        arg(1) ;q
2690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movsxd      rax,        dword ptr arg(3) ;stride
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        pxor        xmm0,       xmm0
2890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movq        xmm1,       MMWORD PTR [rsi]
3090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpcklbw   xmm1,       xmm0
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm1,       XMMWORD PTR [rdx]
3290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        packuswb    xmm1,       xmm0              ; pack and unpack to saturate
3390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movq        MMWORD PTR [rdi],   xmm1
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movq        xmm2,       MMWORD PTR [rsi+8]
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpcklbw   xmm2,       xmm0
3890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm2,       XMMWORD PTR [rdx+16]
3990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        packuswb    xmm2,       xmm0              ; pack and unpack to saturate
4090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movq        MMWORD PTR [rdi+rax],   xmm2
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movq        xmm3,       MMWORD PTR [rsi+16]
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpcklbw   xmm3,       xmm0
4590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm3,       XMMWORD PTR [rdx+32]
4690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        packuswb    xmm3,       xmm0              ; pack and unpack to saturate
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movq        MMWORD PTR [rdi+rax*2], xmm3
4890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add         rdi, rax
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movq        xmm4,       MMWORD PTR [rsi+24]
5190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpcklbw   xmm4,       xmm0
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm4,       XMMWORD PTR [rdx+48]
5390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        packuswb    xmm4,       xmm0              ; pack and unpack to saturate
5490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movq        MMWORD PTR [rdi+rax*2], xmm4
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; begin epilog
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop rdi
5890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop rsi
5990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    UNSHADOW_ARGS
6090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop         rbp
6190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ret
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;void vp8_recon4b_sse2(unsigned char *s, short *q, unsigned char *d, int stride)
6590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberglobal sym(vp8_recon4b_sse2)
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersym(vp8_recon4b_sse2):
6790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rbp
6890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov         rbp, rsp
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    SHADOW_ARGS_TO_STACK 4
70f71323e297a928af368937089d3ed71239786f86Andreas Huber    SAVE_XMM
7190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rsi
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rdi
7390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; end prolog
7490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mov         rsi,        arg(0) ;s
7690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mov         rdi,        arg(2) ;d
7790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mov         rdx,        arg(1) ;q
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movsxd      rax,        dword ptr arg(3) ;stride
7990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        pxor        xmm0,       xmm0
8090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      xmm1,       XMMWORD PTR [rsi]
8290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      xmm5,       xmm1
8390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpcklbw   xmm1,       xmm0
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpckhbw   xmm5,       xmm0
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm1,       XMMWORD PTR [rdx]
8690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm5,       XMMWORD PTR [rdx+16]
8790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        packuswb    xmm1,       xmm5              ; pack and unpack to saturate
8890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      XMMWORD PTR [rdi],  xmm1
8990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      xmm2,       XMMWORD PTR [rsi+16]
9290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      xmm6,       xmm2
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpcklbw   xmm2,       xmm0
9490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpckhbw   xmm6,       xmm0
9590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm2,       XMMWORD PTR [rdx+32]
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm6,       XMMWORD PTR [rdx+48]
9790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        packuswb    xmm2,       xmm6              ; pack and unpack to saturate
9890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      XMMWORD PTR [rdi+rax],  xmm2
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      xmm3,       XMMWORD PTR [rsi+32]
10290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      xmm7,       xmm3
10390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpcklbw   xmm3,       xmm0
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpckhbw   xmm7,       xmm0
10590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm3,       XMMWORD PTR [rdx+64]
10690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm7,       XMMWORD PTR [rdx+80]
10790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        packuswb    xmm3,       xmm7              ; pack and unpack to saturate
10890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      XMMWORD PTR [rdi+rax*2],    xmm3
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add       rdi, rax
11190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      xmm4,       XMMWORD PTR [rsi+48]
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      xmm5,       xmm4
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpcklbw   xmm4,       xmm0
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        punpckhbw   xmm5,       xmm0
11590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm4,       XMMWORD PTR [rdx+96]
11690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        paddsw      xmm5,       XMMWORD PTR [rdx+112]
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        packuswb    xmm4,       xmm5              ; pack and unpack to saturate
11890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      XMMWORD PTR [rdi+rax*2],    xmm4
11990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; begin epilog
12190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop rdi
12290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop rsi
123f71323e297a928af368937089d3ed71239786f86Andreas Huber    RESTORE_XMM
12490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    UNSHADOW_ARGS
12590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop         rbp
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ret
12790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;void copy_mem16x16_sse2(
13090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;    unsigned char *src,
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;    int src_stride,
13290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;    unsigned char *dst,
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;    int dst_stride
13490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;    )
13590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huberglobal sym(vp8_copy_mem16x16_sse2)
13690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersym(vp8_copy_mem16x16_sse2):
13790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rbp
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    mov         rbp, rsp
13990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    SHADOW_ARGS_TO_STACK 4
14090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rsi
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rdi
14290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; end prolog
14390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mov         rsi,        arg(0) ;src;
14590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm0,       [rsi]
14690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movsxd      rax,        dword ptr arg(1) ;src_stride;
14890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        mov         rdi,        arg(2) ;dst;
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm1,       [rsi+rax]
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm2,       [rsi+rax*2]
15290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movsxd      rcx,        dword ptr arg(3) ;dst_stride
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rsi,        [rsi+rax*2]
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi],      xmm0
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add         rsi,        rax
15890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx],  xmm1
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx*2],xmm2
16190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rdi,        [rdi+rcx*2]
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm3,       [rsi]
16490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add         rdi,        rcx
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm4,       [rsi+rax]
16790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm5,       [rsi+rax*2]
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rsi,        [rsi+rax*2]
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi],  xmm3
17290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add         rsi,        rax
17390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx],  xmm4
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx*2],xmm5
17690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rdi,        [rdi+rcx*2]
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm0,       [rsi]
17990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add         rdi,        rcx
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm1,       [rsi+rax]
18290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm2,       [rsi+rax*2]
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rsi,        [rsi+rax*2]
18590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi],      xmm0
18790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add         rsi,        rax
18890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx],  xmm1
19090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx*2],    xmm2
19290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm3,       [rsi]
19390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm4,       [rsi+rax]
19590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rdi,        [rdi+rcx*2]
19690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add         rdi,        rcx
19890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm5,       [rsi+rax*2]
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rsi,        [rsi+rax*2]
20190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi],  xmm3
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add         rsi,        rax
20490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx],  xmm4
20590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx*2],xmm5
20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm0,       [rsi]
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rdi,        [rdi+rcx*2]
21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm1,       [rsi+rax]
21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        add         rdi,        rcx
21390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm2,       [rsi+rax*2]
21490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rsi,        [rsi+rax*2]
21690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi],      xmm0
21790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx],  xmm1
21990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx*2],xmm2
22090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqu      xmm3,       [rsi+rax]
22290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        lea         rdi,        [rdi+rcx*2]
22390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        movdqa      [rdi+rcx],  xmm3
22590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
22690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; begin epilog
22790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop rdi
22890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop rsi
22990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    UNSHADOW_ARGS
23090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop         rbp
23190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ret
232