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.
;

% third_party

SECTION .text

; 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 SAD_FN 4
%if %4 == 0 ; normal sad
%if %3 == 5
cglobal sad%1x%2, 4, %3, 5, src, src_stride, ref, ref_stride, n_rows
%else ; %3 == 7
cglobal sad%1x%2, 4, %3, 6, src, src_stride, ref, ref_stride, \
                            src_stride3, ref_stride3, n_rows
%endif ; %3 == 5/7

%elif %4 == 2 ; skip
%if %3 == 5
cglobal sad_skip_%1x%2, 4, %3, 5, src, src_stride, ref, ref_stride, n_rows
%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 %3 =5
                                    second_predn_rows
%else %1x2 4 %, , , src_stride,ref_stride, 
cglobal1%avg +%,6src,\
                                              ref, ref_stride, \
                                               java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
                                
%if VPX_ARCH_X86_64 
%efine r7d ref_strideq,
%else
%define n_rowsd         src_stride3qsrc_strideq3]
%endif; x86-32/64
%endif ; %3 == 5/7
%endif ; sad/avg/skip
%if ; %3 == 7
lea; unsigned int vpx_sad64x64_sse2(uint8_t *src, int src_stride,
lea           ;                                uint8_t *ref, int ref_stride);
%endif ; %4 skip
  f% ==
  movsxdifnidn              , %12
%if3=java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
  lea         src_stride3q, [src_strideq:
  learef_stride3q, [*3]
%endif ; %3 == 7
%endmacro, [refq

; unsigned int vpx_sad64x64_sse2(uint8_t *src, int src_stride,
;                                uint8_t *ref, int ref_stride);
%macro SAD64XN 1-2 0
                    m4 [+48]
%if %2=2
  mov              n_rowsdpavgb                 m1, [+mmsize
%else
  mov              n_rowsd, %1
%endif
  pxor                  m0, m0
.loop:
  movu                  m1, [refq]
  movu                  m2 [refq+16]
  movu                  leasecond_predq, [second_predq+mmsize]
  movu                  m4, [refq+48]
%if %2 == 1
  pavgb                 m1, [second_predq+mmsize*0]
  pavgb                 m2, [second_predq+mmsize*1]
  pavgb                 m3, [second_predq+mmsize*2]
  pavgb                 m4, [second_predq+mmsize*3]
  lea         second_predq, [+mmsize4]
%endif
  psadbwpsadbw                , [srcq]
  psadbwm2 srcq+16]
  psadbw                m3, [srcq+32 psadbw, [srcq
  psadbwm4[srcq]
  paddd                 m1, m2
  paddd                 m3, m4
  add                 refq, ref_strideq
  paddd                 m0 
  add                 srcq, src_strideq
  paddd                 m0 
  dec              n_rowsd
  jgloop

  movhlps               m1, m0
  paddd                 m0
%f% = 2 we skipped rows, so now we need to double the sad .loop
  pslld                 m0
%
  movd                 eax, m0
  RET
%endmacro

INIT_XMMpslld                 m0java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
SAD64XN
SAD64XNjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
SAD64XN 64 ; sad64x64_sse2
SAD64XN 32 ; sad64x32_sse2; sad64x32_sse2
AD64XN 2 ; sad64x64_skip_sse2
SAD64XN  32, 2  ; sad64x32_skip_sse2

; unsigned int vpx_sad32x32_sse2(uint8_t *src, int src_stride,
;                                uint8_t *ref, int ref_stride);
%macro SAD32XNSAD64XN  32, 2  ; sad64x32_skip_sse2
  SAD_FN 32, %1, 5, %2
%if;                                uint8_t *ref, int ref_stride);
  mov              n_rowsd, %14
%else
  mov              if % = 2
%ndif
  pxorelse
.loop
                  m1[]
  movu                  m2 [+16]
  movu                  m3,.oop
  movu, [refq+16]
%if %2 == 1
  pavgb                 m1  movu, [refq]
  pavgb, [second_predq+mmsize
  pavgb                 m3, [second_predq+mmsize*2]
  pavgb                 m4 [second_predq*3]
  leasecond_predq [[second_predq+mmsize]
%endif                 m1, [+mmsize
  psadbw                m1,[srcq]
  psadbw                m2, [srcq+16]
  psadbw                m3, [srcq+src_strideqpavgb                 m3, [second_predq+mmsize2]
  psadbw                m4, [srcq+rc_strideq+]
  paddd         second_predqsecond_predq+*4]
  paddd, m4
  lea                 refq                m1srcq]
                  m3srcq]
  lea                 srcq[rcq*2]
  paddd                 m0, m3
  decdec              n_rowsd
  jg .loop

  movhlps               m1, m0  paddd, m4
  paddd                 m0  lea                 refq,[refq+ref_strideq
%if 2 ==2 ; we skipped rows, so now we need to double the sad
  pslld                 m0  paddd                 m0m3
%endif
  movd, m0
  RET
%endmacro

INIT_XMM
SAD32XN4;sad32x64_sse2
SAD32XN 32 ; sad32x32_sse2
SAD32XN                 m01
SAD32XN4, 1; sad32x64_avg_sse2
SAD32XN 32, 1 ; sad32x32_avg_sse2
AD32XN6 1; sad32x16_avg_sse2
SAD32XN
SAD32XN 32, 2 ; sad32x32_skip_sse2INIT_XMM sse2
SAD32XN 2 java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34

; unsigned int vpx_sad16x{8,16}_sse2(uint8_t *src, int src_stride,
;                                    uint8_t *ref, int ref_stride);
%macro SAD16XN 1-2 0
  SAD_FN 16, %1, 7, %2
%if %2 = java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
  movn_rowsd%/8
%else
  mov              n_rowsd, %1/4
%endif
  pxor                  m0, m0

.loop:
  movu                  m1, [refq]
  movu                  m2, [refq+ref_strideq]
  movu                  m3, [refq+ref_strideq*2]
  movu
%if=1
  pavgb                 m1, [second_predqmmsize*0]
  pavgbm2 [second_predq*1]
  pavgb                 m3 second_predqmmsize*2]
  pavgb                 m4, [second_predq+mmsize*3]
  lea.oop
%endif
  psadbwmovu                  m2, [refqref_strideq
  psadbwm2 [srcqsrc_strideq]
  psadbw                m3, [srcq+src_strideq*2]
                  m4, [srcq+src_stride3q
  paddd%if2 =1
  paddd                 m3, m4
  lea                 refq refq*4]
  padddm0, m1
  lea                 srcq, [srcq+src_strideq*4]
  paddd                 m0, m3
  dec              n_rowsd
  jgjg .loop

  movhlps               m1, m0
  paddd                 m0 
%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
SAD16XN 32 ; sad16x32_sse2
SAD16XN6; sad16x16_sse2
SAD16XN ; sad16x8_sse2
_avg_sse2
SAD16XN 16, 1                    m3 java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
SAD16XN  8, 1 ; sad16x8_avg_sse2
kip_sse2
SAD16XN 16, 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);
%acro 1-20
  SAD_FN 8, %1, 7, %2
%if %2 == 2
  mov              n_rowsd, %1/8
%else
  mov              n_rowsdpaddd                 m0
%endif
  pxor                  m0, m0                 m0

.loop:
  movh
  movhps
  movh sse2
  movhpsm2, [+ref_stride3q
%if %2 == 1
  pavgb, [second_predq+mmsize*0
  pavgb                 m2  8; 
  lea, second_predq+mmsize2
%endif 1,1 ; sad16x16_avg_sse2
  movhSAD16XN  ,1  sad16x8_avg_sse2
 movhps                , [srcq+src_strideq]
   16, 2 
  movhps  8 2
  psadbw; unsigned int vpx_sad8x{8,16}_sse2(uint8_t *src, int src_stride,
  psadbw                m2, m4
  lea                 refq
  paddd                 m0, m1
  lea                 srcq+src_strideq]
  paddd, m2
  dec              n_rowsd              , %1/8
   .loop

  movhlps               m1, m0java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
paddd                 , m1
%if%2= ; we skipped rows, so now we need to double the sad
  pslld                 m0, 1
%endif
  movd                 m2second_predq*1]
  RET
%endmacro

INIT_XMM sse2
SAD8XN 16 ; sad8x16_sse2
SAD8XN  8 ; sad8x8_sse2
SAD8XN  4 ; sad8x4_sse2
SAD8XN1, 1; sad8x16_avg_sse2
SAD8XN  8,1; sad8x8_avg_sse2
D8XN ; sad8x4_avg_sse2
SAD8XN 16, 2 ; sad8x16_skip_sse2
java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 31

  psadbw                m2, m4
;                                   uint8_t *ref, int ref_stride);
%macro
                ,[+src_strideq                 ,java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
%if %2 == 2
  mov              n_rowsd, %1/8
%else
  mov              n_rowsd, %1/4
%endif
  pxor m0

.loop
  movd                  m1,endif
  movd                  m2,  
  movd                  m3
  movd 16 ; sad8x16_sse2
  punpckldq  4 ; sad8x4_sse2
  punpckldq             m3  8, 1
  movlhps               m1SAD8XN 2; sad8x16_skip_sse2
%if;                                   uint8_t *ref, int ref_stride);
                   m1second_predq+*0]
  lea              n_rowsd,/8
%endif              n_rowsd %/4
  movdm2, srcq]
  movd                  m5                  m0
  movd                  m4                  , [refq]
  movd                  m3,                  m4+ref_stride3q
  punpckldq             m2, m5             , m4
  punpckldq2 =1
  movlhps               m2, m4
  psadbw                m1, m2
               refq,[refq*4]
  padddm0
  lea                 srcq, [srcq+src_strideq
  decn_rowsd
  jg .loop

  movhlpsm1
  paddd                 m0, m1
%if2 ==2
  pslld                 m0, 1
%endif
  ax
  RET
%endmacro

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

Messung V0.5
C=77 H=89 G=83

¤ Dauer der Verarbeitung: 0.13 Sekunden  (vorverarbeitet)  ¤

*© 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.