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
1490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber;void vp8_short_fdct4x4_mmx(short *input, short *output, int pitch)
1579f15823c34ae1e423108295e416213200bb280fAndreas Huberglobal sym(vp8_short_fdct4x4_mmx)
1690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Hubersym(vp8_short_fdct4x4_mmx):
1790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    push        rbp
1879f15823c34ae1e423108295e416213200bb280fAndreas Huber    mov         rbp,        rsp
1990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    SHADOW_ARGS_TO_STACK 3
2090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    GET_GOT     rbx
2179f15823c34ae1e423108295e416213200bb280fAndreas Huber    push        rsi
2279f15823c34ae1e423108295e416213200bb280fAndreas Huber    push        rdi
2390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ; end prolog
2490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2579f15823c34ae1e423108295e416213200bb280fAndreas Huber        mov         rsi,        arg(0)      ; input
2679f15823c34ae1e423108295e416213200bb280fAndreas Huber        mov         rdi,        arg(1)      ; output
2790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
2879f15823c34ae1e423108295e416213200bb280fAndreas Huber        movsxd      rax,        dword ptr arg(2) ;pitch
2990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3079f15823c34ae1e423108295e416213200bb280fAndreas Huber        lea         rcx,        [rsi + rax*2]
3190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ; read the input data
3279f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm0,        [rsi]
3379f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm1,        [rsi + rax]
3490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3579f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm2,        [rcx]
3679f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm4,        [rcx + rax]
3790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
3879f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; transpose for the first stage
3979f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm3,        mm0         ; 00 01 02 03
4079f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm5,        mm2         ; 20 21 22 23
4190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4279f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpcklwd   mm0,        mm1         ; 00 10 01 11
4379f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhwd   mm3,        mm1         ; 02 12 03 13
4490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4579f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpcklwd   mm2,        mm4         ; 20 30 21 31
4679f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhwd   mm5,        mm4         ; 22 32 23 33
4790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
4879f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm1,        mm0         ; 00 10 01 11
4979f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckldq   mm0,        mm2         ; 00 10 20 30
5090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5179f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhdq   mm1,        mm2         ; 01 11 21 31
5290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5379f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm2,        mm3         ; 02 12 03 13
5479f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckldq   mm2,        mm5         ; 02 12 22 32
5590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5679f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhdq   mm3,        mm5         ; 03 13 23 33
5790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
5879f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; mm0 0
5979f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; mm1 1
6079f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; mm2 2
6179f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; mm3 3
6290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ; first stage
6479f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm5,        mm0
6579f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm4,        mm1
6690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
6779f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddw       mm0,        mm3         ; a1 = 0 + 3
6879f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddw       mm1,        mm2         ; b1 = 1 + 2
6990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7079f15823c34ae1e423108295e416213200bb280fAndreas Huber        psubw       mm4,        mm2         ; c1 = 1 - 2
7179f15823c34ae1e423108295e416213200bb280fAndreas Huber        psubw       mm5,        mm3         ; d1 = 0 - 3
7290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7379f15823c34ae1e423108295e416213200bb280fAndreas Huber        psllw       mm5,        3
7479f15823c34ae1e423108295e416213200bb280fAndreas Huber        psllw       mm4,        3
7590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7679f15823c34ae1e423108295e416213200bb280fAndreas Huber        psllw       mm0,        3
7779f15823c34ae1e423108295e416213200bb280fAndreas Huber        psllw       mm1,        3
7890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
7979f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; output 0 and 2
8079f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm2,        mm0         ; a1
8190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8279f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddw       mm0,        mm1         ; op[0] = a1 + b1
8379f15823c34ae1e423108295e416213200bb280fAndreas Huber        psubw       mm2,        mm1         ; op[2] = a1 - b1
8490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
8590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ; output 1 and 3
8679f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; interleave c1, d1
8779f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm1,        mm5         ; d1
8879f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpcklwd   mm1,        mm4         ; c1 d1
8979f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhwd   mm5,        mm4         ; c1 d1
9090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9179f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm3,        mm1
9279f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm4,        mm5
9390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9479f15823c34ae1e423108295e416213200bb280fAndreas Huber        pmaddwd     mm1,        MMWORD PTR[GLOBAL (_5352_2217)]    ; c1*2217 + d1*5352
9579f15823c34ae1e423108295e416213200bb280fAndreas Huber        pmaddwd     mm4,        MMWORD PTR[GLOBAL (_5352_2217)]    ; c1*2217 + d1*5352
9690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
9779f15823c34ae1e423108295e416213200bb280fAndreas Huber        pmaddwd     mm3,        MMWORD PTR[GLOBAL(_2217_neg5352)]  ; d1*2217 - c1*5352
9879f15823c34ae1e423108295e416213200bb280fAndreas Huber        pmaddwd     mm5,        MMWORD PTR[GLOBAL(_2217_neg5352)]  ; d1*2217 - c1*5352
9990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10079f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddd       mm1,        MMWORD PTR[GLOBAL(_14500)]
10179f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddd       mm4,        MMWORD PTR[GLOBAL(_14500)]
10279f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddd       mm3,        MMWORD PTR[GLOBAL(_7500)]
10379f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddd       mm5,        MMWORD PTR[GLOBAL(_7500)]
10490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
10579f15823c34ae1e423108295e416213200bb280fAndreas Huber        psrad       mm1,        12          ; (c1 * 2217 + d1 * 5352 +  14500)>>12
10679f15823c34ae1e423108295e416213200bb280fAndreas Huber        psrad       mm4,        12          ; (c1 * 2217 + d1 * 5352 +  14500)>>12
10779f15823c34ae1e423108295e416213200bb280fAndreas Huber        psrad       mm3,        12          ; (d1 * 2217 - c1 * 5352 +   7500)>>12
10879f15823c34ae1e423108295e416213200bb280fAndreas Huber        psrad       mm5,        12          ; (d1 * 2217 - c1 * 5352 +   7500)>>12
10990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11079f15823c34ae1e423108295e416213200bb280fAndreas Huber        packssdw    mm1,        mm4         ; op[1]
11179f15823c34ae1e423108295e416213200bb280fAndreas Huber        packssdw    mm3,        mm5         ; op[3]
11290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ; done with vertical
11490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ; transpose for the second stage
11579f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm4,        mm0         ; 00 10 20 30
11679f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm5,        mm2         ; 02 12 22 32
11790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
11879f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpcklwd   mm0,        mm1         ; 00 01 10 11
11979f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhwd   mm4,        mm1         ; 20 21 30 31
12090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12179f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpcklwd   mm2,        mm3         ; 02 03 12 13
12279f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhwd   mm5,        mm3         ; 22 23 32 33
12390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12479f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm1,        mm0         ; 00 01 10 11
12579f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckldq   mm0,        mm2         ; 00 01 02 03
12690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12779f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhdq   mm1,        mm2         ; 01 22 12 13
12890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
12979f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm2,        mm4         ; 20 31 30 31
13079f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckldq   mm2,        mm5         ; 20 21 22 23
13190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13279f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhdq   mm4,        mm5         ; 30 31 32 33
13390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13479f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; mm0 0
13579f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; mm1 1
13679f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; mm2 2
13779f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; mm3 4
13890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
13979f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm5,        mm0
14079f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm3,        mm1
14190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14279f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddw       mm0,        mm4         ; a1 = 0 + 3
14379f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddw       mm1,        mm2         ; b1 = 1 + 2
14490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14579f15823c34ae1e423108295e416213200bb280fAndreas Huber        psubw       mm3,        mm2         ; c1 = 1 - 2
14679f15823c34ae1e423108295e416213200bb280fAndreas Huber        psubw       mm5,        mm4         ; d1 = 0 - 3
14790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
14879f15823c34ae1e423108295e416213200bb280fAndreas Huber        pxor        mm6,        mm6         ; zero out for compare
14990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15079f15823c34ae1e423108295e416213200bb280fAndreas Huber        pcmpeqw     mm6,        mm5         ; d1 != 0
15190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15279f15823c34ae1e423108295e416213200bb280fAndreas Huber        pandn       mm6,        MMWORD PTR[GLOBAL(_cmp_mask)]   ; clear upper,
15379f15823c34ae1e423108295e416213200bb280fAndreas Huber                                                                ; and keep bit 0 of lower
15490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ; output 0 and 2
15679f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm2,        mm0         ; a1
15790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
15879f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddw       mm0,        mm1         ; a1 + b1
15979f15823c34ae1e423108295e416213200bb280fAndreas Huber        psubw       mm2,        mm1         ; a1 - b1
16090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16179f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddw       mm0,        MMWORD PTR[GLOBAL(_7w)]
16279f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddw       mm2,        MMWORD PTR[GLOBAL(_7w)]
16390d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16479f15823c34ae1e423108295e416213200bb280fAndreas Huber        psraw       mm0,        4           ; op[0] = (a1 + b1 + 7)>>4
16579f15823c34ae1e423108295e416213200bb280fAndreas Huber        psraw       mm2,        4           ; op[8] = (a1 - b1 + 7)>>4
16690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
16779f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        MMWORD PTR[rdi + 0 ],  mm0
16879f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        MMWORD PTR[rdi + 16],  mm2
16990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber        ; output 1 and 3
17179f15823c34ae1e423108295e416213200bb280fAndreas Huber        ; interleave c1, d1
17279f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm1,        mm5         ; d1
17379f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpcklwd   mm1,        mm3         ; c1 d1
17479f15823c34ae1e423108295e416213200bb280fAndreas Huber        punpckhwd   mm5,        mm3         ; c1 d1
17590d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17679f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm3,        mm1
17779f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        mm4,        mm5
17890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
17979f15823c34ae1e423108295e416213200bb280fAndreas Huber        pmaddwd     mm1,        MMWORD PTR[GLOBAL (_5352_2217)]    ; c1*2217 + d1*5352
18079f15823c34ae1e423108295e416213200bb280fAndreas Huber        pmaddwd     mm4,        MMWORD PTR[GLOBAL (_5352_2217)]    ; c1*2217 + d1*5352
18190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18279f15823c34ae1e423108295e416213200bb280fAndreas Huber        pmaddwd     mm3,        MMWORD PTR[GLOBAL(_2217_neg5352)]  ; d1*2217 - c1*5352
18379f15823c34ae1e423108295e416213200bb280fAndreas Huber        pmaddwd     mm5,        MMWORD PTR[GLOBAL(_2217_neg5352)]  ; d1*2217 - c1*5352
18490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
18579f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddd       mm1,        MMWORD PTR[GLOBAL(_12000)]
18679f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddd       mm4,        MMWORD PTR[GLOBAL(_12000)]
18779f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddd       mm3,        MMWORD PTR[GLOBAL(_51000)]
18879f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddd       mm5,        MMWORD PTR[GLOBAL(_51000)]
18990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19079f15823c34ae1e423108295e416213200bb280fAndreas Huber        psrad       mm1,        16          ; (c1 * 2217 + d1 * 5352 +  14500)>>16
19179f15823c34ae1e423108295e416213200bb280fAndreas Huber        psrad       mm4,        16          ; (c1 * 2217 + d1 * 5352 +  14500)>>16
19279f15823c34ae1e423108295e416213200bb280fAndreas Huber        psrad       mm3,        16          ; (d1 * 2217 - c1 * 5352 +   7500)>>16
19379f15823c34ae1e423108295e416213200bb280fAndreas Huber        psrad       mm5,        16          ; (d1 * 2217 - c1 * 5352 +   7500)>>16
19490d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
19579f15823c34ae1e423108295e416213200bb280fAndreas Huber        packssdw    mm1,        mm4         ; op[4]
19679f15823c34ae1e423108295e416213200bb280fAndreas Huber        packssdw    mm3,        mm5         ; op[12]
19779f15823c34ae1e423108295e416213200bb280fAndreas Huber
19879f15823c34ae1e423108295e416213200bb280fAndreas Huber        paddw       mm1,        mm6         ; op[4] += (d1!=0)
19990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20079f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        MMWORD PTR[rdi + 8 ],  mm1
20179f15823c34ae1e423108295e416213200bb280fAndreas Huber        movq        MMWORD PTR[rdi + 24],  mm3
20290d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
20379f15823c34ae1e423108295e416213200bb280fAndreas Huber     ; begin epilog
20479f15823c34ae1e423108295e416213200bb280fAndreas Huber    pop         rdi
20579f15823c34ae1e423108295e416213200bb280fAndreas Huber    pop         rsi
20690d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    RESTORE_GOT
20790d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    UNSHADOW_ARGS
20890d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    pop         rbp
20990d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber    ret
21090d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas Huber
21190d3ed91ae9228e1c8bab561b6138d4cb8c1e4fdAndreas HuberSECTION_RODATA
21279f15823c34ae1e423108295e416213200bb280fAndreas Huberalign 8
21379f15823c34ae1e423108295e416213200bb280fAndreas Huber_5352_2217:
21479f15823c34ae1e423108295e416213200bb280fAndreas Huber    dw 5352
21579f15823c34ae1e423108295e416213200bb280fAndreas Huber    dw 2217
21679f15823c34ae1e423108295e416213200bb280fAndreas Huber    dw 5352
21779f15823c34ae1e423108295e416213200bb280fAndreas Huber    dw 2217
21879f15823c34ae1e423108295e416213200bb280fAndreas Huberalign 8
21979f15823c34ae1e423108295e416213200bb280fAndreas Huber_2217_neg5352:
22079f15823c34ae1e423108295e416213200bb280fAndreas Huber    dw 2217
22179f15823c34ae1e423108295e416213200bb280fAndreas Huber    dw -5352
22279f15823c34ae1e423108295e416213200bb280fAndreas Huber    dw 2217
22379f15823c34ae1e423108295e416213200bb280fAndreas Huber    dw -5352
22479f15823c34ae1e423108295e416213200bb280fAndreas Huberalign 8
22579f15823c34ae1e423108295e416213200bb280fAndreas Huber_cmp_mask:
22679f15823c34ae1e423108295e416213200bb280fAndreas Huber    times 4 dw 1
22779f15823c34ae1e423108295e416213200bb280fAndreas Huberalign 8
22879f15823c34ae1e423108295e416213200bb280fAndreas Huber_7w:
22979f15823c34ae1e423108295e416213200bb280fAndreas Huber    times 4 dw 7
23079f15823c34ae1e423108295e416213200bb280fAndreas Huberalign 8
23179f15823c34ae1e423108295e416213200bb280fAndreas Huber_14500:
23279f15823c34ae1e423108295e416213200bb280fAndreas Huber    times 2 dd 14500
23379f15823c34ae1e423108295e416213200bb280fAndreas Huberalign 8
23479f15823c34ae1e423108295e416213200bb280fAndreas Huber_7500:
23579f15823c34ae1e423108295e416213200bb280fAndreas Huber    times 2 dd 7500
23679f15823c34ae1e423108295e416213200bb280fAndreas Huberalign 8
23779f15823c34ae1e423108295e416213200bb280fAndreas Huber_12000:
23879f15823c34ae1e423108295e416213200bb280fAndreas Huber    times 2 dd 12000
23979f15823c34ae1e423108295e416213200bb280fAndreas Huberalign 8
24079f15823c34ae1e423108295e416213200bb280fAndreas Huber_51000:
24179f15823c34ae1e423108295e416213200bb280fAndreas Huber    times 2 dd 51000
242