media/libvpx/vp8/common/x86/iwalsh_mmx.asm

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 ;
     2 ;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
     3 ;
     4 ;  Use of this source code is governed by a BSD-style license
     5 ;  that can be found in the LICENSE file in the root of the source
     6 ;  tree. An additional intellectual property rights grant can be found
     7 ;  in the file PATENTS.  All contributing project authors may
     8 ;  be found in the AUTHORS file in the root of the source tree.
     9 ;
    12 %include "vpx_ports/x86_abi_support.asm"
    14 ;void vp8_short_inv_walsh4x4_mmx(short *input, short *output)
    15 global sym(vp8_short_inv_walsh4x4_mmx) PRIVATE
    16 sym(vp8_short_inv_walsh4x4_mmx):
    17     push        rbp
    18     mov         rbp, rsp
    19     SHADOW_ARGS_TO_STACK 2
    20     ; end prolog
    22     mov         rdx, arg(0)
    23     mov         rax, 30003h
    25     movq        mm0, [rdx + 0]    ;ip[0]
    26     movq        mm1, [rdx + 8]    ;ip[4]
    27     movq        mm7, rax
    29     movq        mm2, [rdx + 16]   ;ip[8]
    30     movq        mm3, [rdx + 24]   ;ip[12]
    31     punpcklwd   mm7, mm7          ;0003000300030003h
    32     mov         rdx, arg(1)
    34     movq        mm4, mm0
    35     movq        mm5, mm1
    37     paddw       mm4, mm3          ;ip[0] + ip[12] aka al
    38     paddw       mm5, mm2          ;ip[4] + ip[8] aka bl
    40     movq        mm6, mm4          ;temp al
    41     paddw       mm4, mm5          ;al + bl
    42     psubw       mm6, mm5          ;al - bl
    44     psubw       mm0, mm3          ;ip[0] - ip[12] aka d1
    45     psubw       mm1, mm2          ;ip[4] - ip[8] aka c1
    47     movq        mm5, mm0          ;temp dl
    48     paddw       mm0, mm1          ;dl + cl
    49     psubw       mm5, mm1          ;dl - cl
    51     ; 03 02 01 00
    52     ; 13 12 11 10
    53     ; 23 22 21 20
    54     ; 33 32 31 30
    56     movq        mm3, mm4          ; 03 02 01 00
    57     punpcklwd   mm4, mm0          ; 11 01 10 00
    58     punpckhwd   mm3, mm0          ; 13 03 12 02
    60     movq        mm1, mm6          ; 23 22 21 20
    61     punpcklwd   mm6, mm5          ; 31 21 30 20
    62     punpckhwd   mm1, mm5          ; 33 23 32 22
    64     movq        mm0, mm4          ; 11 01 10 00
    65     movq        mm2, mm3          ; 13 03 12 02
    67     punpckldq   mm0, mm6          ; 30 20 10 00 aka ip[0]
    68     punpckhdq   mm4, mm6          ; 31 21 11 01 aka ip[4]
    70     punpckldq   mm2, mm1          ; 32 22 12 02 aka ip[8]
    71     punpckhdq   mm3, mm1          ; 33 23 13 03 aka ip[12]
    72 ;~~~~~~~~~~~~~~~~~~~~~
    73     movq        mm1, mm0
    74     movq        mm5, mm4
    75     paddw       mm1, mm3          ;ip[0] + ip[12] aka al
    76     paddw       mm5, mm2          ;ip[4] + ip[8] aka bl
    78     movq        mm6, mm1          ;temp al
    79     paddw       mm1, mm5          ;al + bl
    80     psubw       mm6, mm5          ;al - bl
    81     paddw       mm1, mm7
    82     paddw       mm6, mm7
    83     psraw       mm1, 3
    84     psraw       mm6, 3
    86     psubw       mm0, mm3          ;ip[0] - ip[12] aka d1
    87     psubw       mm4, mm2          ;ip[4] - ip[8] aka c1
    89     movq        mm5, mm0          ;temp dl
    90     paddw       mm0, mm4          ;dl + cl
    91     psubw       mm5, mm4          ;dl - cl
    92     paddw       mm0, mm7
    93     paddw       mm5, mm7
    94     psraw       mm0, 3
    95     psraw       mm5, 3
    96 ;~~~~~~~~~~~~~~~~~~~~~
    98     movd        eax, mm1
    99     movd        ecx, mm0
   100     psrlq       mm0, 32
   101     psrlq       mm1, 32
   102     mov         word ptr[rdx+32*0], ax
   103     mov         word ptr[rdx+32*1], cx
   104     shr         eax, 16
   105     shr         ecx, 16
   106     mov         word ptr[rdx+32*4], ax
   107     mov         word ptr[rdx+32*5], cx
   108     movd        eax, mm1
   109     movd        ecx, mm0
   110     mov         word ptr[rdx+32*8], ax
   111     mov         word ptr[rdx+32*9], cx
   112     shr         eax, 16
   113     shr         ecx, 16
   114     mov         word ptr[rdx+32*12], ax
   115     mov         word ptr[rdx+32*13], cx
   117     movd        eax, mm6
   118     movd        ecx, mm5
   119     psrlq       mm5, 32
   120     psrlq       mm6, 32
   121     mov         word ptr[rdx+32*2], ax
   122     mov         word ptr[rdx+32*3], cx
   123     shr         eax, 16
   124     shr         ecx, 16
   125     mov         word ptr[rdx+32*6], ax
   126     mov         word ptr[rdx+32*7], cx
   127     movd        eax, mm6
   128     movd        ecx, mm5
   129     mov         word ptr[rdx+32*10], ax
   130     mov         word ptr[rdx+32*11], cx
   131     shr         eax, 16
   132     shr         ecx, 16
   133     mov         word ptr[rdx+32*14], ax
   134     mov         word ptr[rdx+32*15], cx
   136     ; begin epilog
   137     UNSHADOW_ARGS
   138     pop         rbp
   139     ret

mercurial