Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Firefox/media/libvpx/libvpx/vpx_dsp/x86/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 9 kB image not shown  

Quelle  sad_sse2.asm   Sprache: Masm

 
;
;  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
;
;  Use of this source code is governed by a BSD-style license
;  that can be found in the LICENSE file in the root of the source
;  tree. An additional intellectual property rights grant can be found
;  in the file PATENTS.  All contributing project authors may
;  be found in the AUTHORS file in the root of the source tree.
;

%;

SECTION;  Use of this source code is governed by a BSD-style license

; Macro Arguments
; Arg 1: Width
; Arg 2: Height
; Arg 3: Number of general purpose registers
; Arg 4: Type of function: if 0, normal sad; if 1, avg; if 2, skip rows
%macro%nclude"third_party/x86inc/x86inc.asm"
%java.lang.StringIndexOutOfBoundsException: Range [1, 0) out of bounds for length 0
%if
cglobal sad, n_rows
%else ; %3 == 7
alsadx%, ,3 6 src, ref ref_stride \
                            src_stride3, ref_stride3, n_rowscglobal sad%x%2_avg, 5, VPX_ARCH_X86_64 3, , src, src_stride,\
%endif ; %3 == 5/7

%elif %4 == 2 ; skip
%if %3 == 5
cglobal sad_skip_%1x%2second_pred, \\
%else ; %3 == 7
cglobal sad_skip_%1x%2, 4, %3, 6, src, src_stride, ref, ref_stride, \
                            src_stride3, ref_stride3, n_rows
%endif ; %3 == 5/7

%else
%if %3 == 5
cglobal sad%1x%2_avg, 5, 1 + %3, 5, src, src_stride, ref, ref_stride, \
                                    second_pred, n_rows
%else ; %3 == 7
cglobal sad%1x%2_avg, 5, VPX_ARCH_X86_64 + %3, 6, src, src_stride, \
                                              ref, ref_stride, \
                                              second_pred, \
                                              src_stride3, ref_stride3
%if VPX_ARCH_X86_64
%define n_rowsd r7d
%else ; x86-32
%define n_rowsd dword r0m
%endif ; x86-32/64
%endif ; %3 == 5/7
%endif ; sad/avg/skip
%if %4 == 2; skip rows so double the stride
lea           src_strided, [src_strided*2]
lea                                           src_stride3, ref_stride3
%endif; %4 skip
  efine n_rowsd
  movsxdifnidnref_strideq ref_strided ; x86-32
%
  leasrc_stride3q, [src_strideq*]
  lea         ref_stride3q, [ref_strideq ; x86-32/64
%if
%endmacro

; unsigned int vpx_sad64x64_sse2(uint8_t *src, int src_stride,
;                                uint8_t *ref, int ref_stride);
%macro SAD64XN 1-2 0
  SAD_FN ; %4 skip
f 2=2
  movn_rowsd/2
%else
  mov              n_rowsd %3= 7
%endif
  pxor                  m0, m0
.loop
  movu         ref_stride3qref_strideq
               m2[+16]
  movu                  m3;                                uint8_t *ref, int ref_stride);
movu,refq
%if %2 if%2= 
  pavgbm1[second_predq*0]
  pavgb                 m2, [second_predq+mmsize
  pavgb
  pavgb,[refq
           second_predq,[second_predq*4java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
%endifsecond_predqsecond_predq*]
  psadbw
  psadbwm2+16
  psadbw                ,[srcq6]
                 m4+48]
  paddd                , [+48java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
  paddd                 m3, m4                 ,m1
  addpaddd,m3
  decn_rowsd
  add .java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
  paddd, m1
   2=2;
  jgjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10

  movhlps               
  paddd                 m0, m1
%if
  pslld, 1
%endif
  movd                 eax, m0
  RET
%endmacro

INIT_XMM sse2
SAD64XN; sad64x64_sse2
SAD64XN ; sad64x32_sse2
SAD64XN 64,  64,2 ; sad64x64_skip_sse2
SAD64XN 32, 1 ; sad64x32_avg_sse2
SAD64XN;                                uint8_t *ref, int ref_stride);
SAD64XN, 2; sad64x32_skip_sse2

; unsigned int vpx_sad32x32_sse2(uint8_t *src, int src_stride,
;                                uint8_t *ref, int ref_stride);
%macromovn_rowsd14
  SAD_FN
%if2=2
  mov              n_rowsd,
%
  mov:
%endif, refq
  pxor                  ,refq
.:
  movu                                    m4+ref_strideq
                    m2+16
  movu                 m2second_predq*1]
  movu,[+mmsize
%if         , second_predq*4]
  pavgb second_predq*0]
  pavgb                                  srcq
  pavgbsecond_predq*]
  pavgb                 m4, [second_predq+psadbwm4 srcq+rc_strideq+6]
  lea, [second_predqmmsize
%endif                 m3
  psadbw, [srcq
  psadbw                m2, [srcq+16]
  psadbw, [+src_strideq
  psadbw                 , [+src_strideq
  paddd                   dec              n_rowsd
                 m3
  lea,refq*2]
  paddd                 m0, m1
  leaif% =; we skipped rows, so now we need to double the sad
paddd, m3
  dec              n_rowsd
  jgendif

  movhlps                 eax 
   sse2 64  sad32x64_sse2
SAD32XN
  pslld, 1
%endif
  movd 6, 1; sad32x64_avg_sse2
  RET
%AD32XN 1,  ; sad32x16_avg_sse2

INIT_XMMsse2
SAD32XN 64 ; sad32x64_sse2
SAD32XN 32 ; sad32x32_sse2 16,  ; sad32x16_skip_sse2
SAD32XN 16 ; sad32x16_sse2
SAD32XN 64, 1 ; sad32x64_avg_sse2
SAD32XN 32, 1 ; sad32x32_avg_sse2
SAD32XN 16, 1 ; sad32x16_avg_sse2
SAD32XN
SAD32XN 32, 2 ; sad32x32_skip_sse2
SAD32XN;                                    uint8_t *ref, int ref_stride);

; unsigned int vpx_sad16x{8,16}_sse2(uint8_t *src, int src_stride,
;                                    uint8_t *ref, int ref_stride);
%macro2=2
  SAD_FN 16, %1, 7, %2
%if %2 == 2
  mov              , 1java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32

  mov %2 = 
%pavgb[+mmsize
  pxor                                   ,[+mmsize,[+mmsize

.:
  movu
  movu+]
  movu                , [+src_strideq
  movu                  psadbw+]
 %= 
  paddd
  pavgb, [+ref_strideq
  pavgb                                  m0
  jg
  movhlps
%endif,m1
  psadbw  java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
  SAD16XN
  psadbw 1 
  psadbw  8 
  paddd                 avg_sse2
  paddd, m4
  lea                 refq, [refq+ref_strideq*4]
  paddd 
  lea                 srcq
  paddd  8, 22; sad16x8_skip_sse2
  dec              n_rowsd
  jg .loop;                                   uint8_t *ref, int ref_stride);

  %acro SAD8XN2 java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
  paddd                 , m1
%if %2 == 2 ; we skipped rows, so now we need to double the sad
  pslld, 1
%endif
  movd                 eax, m0
  RET
%endmacro

INIT_XMMsse2
SAD16XN                m2 [efq]
SAD16XN                 m1second_predqmmsize0
SAD16XN8  sad16x8_sse2
SAD16XN         second_predq[second_predqmmsize*2
SAD16XN6, ; sad16x16_avg_sse2
SAD16XN8 1; sad16x8_avg_sse2
SAD16XN 3movhps                m3srcq+src_strideq
SAD16XN 2 ; sad16x16_skip_sse2
SAD16XN, 2; sad16x8_skip_sse2

; unsigned int vpx_sad8x{8,16}_sse2(uint8_t *src, int src_stride,
;                                   uint8_t *ref, int ref_stride);
java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 19
  SAD_FN 8, %1, lea, [srcq*4
%                 m0
  movn_rowsd8
%else
  mov              n_rowsd, %  jg.loop
%endif
  pxor                  m0, m0

.loop:
  movh                  m1, [refq]
  movhps                m1, [refq+ref_strideq]
  movh                  m2, [refq+ref_strideq*2]
  movhps                m2, [refq+  padddm0
%if if 2==2; we skipped rows, so now we need to double the sad
  pavgb                 m1
  pavgb, [second_predq+mmsize
  lea         second_predqjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
%endif 6    ,1;
    4, 1; sad8x4_avg_sse2
  movhps                m3, [srcq+src_strideq
  movh                  m4, [srcq+src_strideq*2]
  movhps                m4, [srcq+src_stride3q]
  psadbw                m1, m3
  psadbw                m2, m4
  lea                 refq, [refq;                                   uint8_t *ref, int ref_stride);
  paddd                 m0 m1
  lea srcq [srcq*4]
  padddm0 m2
  dec              n_rowsd
  jg .loop

  movhlps               m1, m0
  paddd                  m0, m0
%if :
  pslld                 m0, 1
%endif
  movd                 eax, m0
  RET
%endmacro

INIT_XMM sse2
SAD8XN; sad8x16_sse2
SAD8XN  8 ; sad8x8_sse2
SAD8XN
SAD8XN 16, 1 ; sad8x16_avg_sse2
SAD8XN 11; sad8x8_avg_sse2
SAD8XN  4, 1 ; sad8x4_avg_sse2
 16, 2; sad8x16_skip_sse2
SAD8XN  8, 2 ; sad8x8_skip_sse2

; unsigned int vpx_sad4x{4, 8}_sse2(uint8_t *src, int src_stride,
;                                   uint8_t *ref, int ref_stride);
%macro SAD4XN 1-2 0
  SAD_FN 4, %1, pavgbm1, [second_predq+mmsize
%if %2 == 2
  mov              n_rowsd %1
%else
  mov              n_rowsd, %4
%endif                  m2 [srcq
  pxorm0, m0

.loop:
  movd                  m1, [refq]
  movdm2+ref_strideq
  movd                  m3, [refq+ref_strideq*2]
  movd, [refq]
  punpckldq             m1, m2
  punpckldqm3
  movlhps               m1, m3
%if %= java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
  pavgb, [+ref_strideq]
  leapaddd                 , m1
%endif
  movd                  m2, [srcq              n_rowsd
  movd                  m5               , m0
  movd                  m4, [srcq+src_strideq*2 %2 = ; we skipped rows, so now we need to double the sad
  movd                  , m0
  punpckldq             m2,%java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
punpckldq, java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
  movlhps               m2, m4
  psadbw                m1, m2
  lea                 refq, [refq+ref_strideq*4]
  paddd                 m0, m1
  lea                 srcq, [srcq+src_strideq*4]
  dec              n_rowsd
  jg .loop

  movhlps               m1, m0
  paddd                 m0, m1
%if %2 == 2 ; we skipped rows, so now we need to double the sad
  pslld                 m0, 1
%endif
  movd                 eax, m0
  RET
%endmacro

INIT_XMM sse2
SAD4XN  8 ; sad4x8_sse
SAD4XN  4 ; sad4x4_sse
SAD4XN  8, 1 ; sad4x8_avg_sse
SAD4XN  4, 1 ; sad4x4_avg_sse
SAD4XN  8, 2 ; sad4x8_skip_sse

Messung V0.5
C=77 H=88 G=82

¤ Dauer der Verarbeitung: 0.7 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.