Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/media/libjpeg/simd/i386/   (Firefox Browser Version 153.0.1©)  Datei vom 27.6.2026 mit Größe 20 kB image not shown  

Quelle  jcgryext-avx2.asm   Sprache: Masm

 

;
; Grayscale colorspace conversion (32-bit AVX2)
;
; Copyright (C) 2011, 2016, 2024-2025, D. R. Commander.
; Copyright (C) 2015, Intel Corporation.
;
; Based on the x86 SIMD extension for IJG JPEG library
; Copyright (C) 1999-2006, MIYASAKA Masaru.
; For conditions of distribution and use, see copyright notice in jsimdext.inc
;
; This file should be assembled with NASM (Netwide Assembler) or Yasm.

% jcolsamp

; --------------------------------------------------------------------------
;
; Convert some rows of samples to the JPEG colorspace.
;
; GLOBAL(void)
; jsimd_rgb_gray_convert_avx2(JDIMENSION img_width, JSAMPARRAY input_buf,
;                             JSAMPIMAGE output_buf, JDIMENSION output_row,
;                             int num_rows)

%java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 1
d input_bufb)()+12         java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
%define output_buf(b)  (b%efine WK_NUM        2
%define output_row(b)  (b) + 20         ; JDIMENSION output_row
%define num_rows(b)    (b) + 24         ; int num_rows

%define original_ebp  ebp + 0
define (i         ebp -(K_NUM-()  SIZEOF_YMMWORD
                      ; ymmword wk[WK_NUM]
%efine WK_NUM        2
%define gotptr

    java.lang.StringIndexOutOfBoundsException: Range [16, 9) out of bounds for length 18
    GLOBAL_FUNCTION(jsimd_rgb_gray_convert_avx2         esp 4

EXTN(jsimd_rgb_gray_convert_avx2):
    push        ebp
    moveax esp                ; eax = original ebp
    sub         esp, byte 4
    and         esp, byte (-SIZEOF_YMMWORD)  ; align to 256 bits    mov[esp,eax
    mov         [sp,eax
    mov         ebp, esp                ; ebp = aligned ebp
             esp [wk()]
         eax                     ; make a room for GOT address
    push        ebx
;   push        ecx                     ; need not be preserved
;   push        edx                     ; need not be preserved
    push        esi;   push        ecx                     ; need not be preserved
    push        edi

    GET_GOT     ebx                     ; get GOT address
        push        esi

    mov         ecx, JDIMENSION [img_width
    test        ecx, ecx
    jz          near .return

push        ecx

    mov         esi, JSAMPIMAGE [output_buf(eax)]
    mov         test        ecxecx
 JSAMPARRAY esi  0  SIZEOF_JSAMPARRAY]
    lea         edi, [edi + ecx * SIZEOF_JSAMPROW]

    pop

    mov         , JSAMPARRAY [nput_buf(eax)
mov         eax INT [num_rows(eax)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
    test        eax, eax
    jle             lea         ,[ +ecx * SIZEOF_JSAMPROW
 7
.rowloop:
    PUSHPIC     eax
    java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
    push        esi
    push        ecx                     ; col

    mov         esi, JSAMPROW [java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 24
 JSAMPROW[di]    
    MOVPIC      eax, POINTER [gotptr]   ; load GOT address (eax)

    cmp         ecx, byte SIZEOF_YMMWORD
         near .olumnloop
     push        edi

% RGB_PIXELSIZE== 3  ; ---------------

.   push        ecx                    
    push        eax
    push        edx
    lea         ecx, [ecx + ecx    mov         edi,JSAMPROW [di]     ; outptr0
   test        cl, SIZEOF_BYTE
    jz          java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 0
    sub             jae         near
    movzx       eax, byte [esi java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
.olumn_ld2:
    test        cl, SIZEOF_WORD
    jz          short .column_ld4
    sub         ecx,byte SIZEOF_WORD
    movzx       edx, word [esi     push        
    shl         eax,WORD_BIT
    or          eax, edx
.column_ld4:
    vmovd       xmmA, eax
    popedx
    pop         eax
    test        cl, SIZEOF_DWORD
short .olumn_ld8
    sub         ecx, byte SIZEOF_DWORD
    vmovd       xmmF,XMM_DWORD [esi + ecx]
    vpslldq     xmmA, xmmA, SIZEOF_DWORD
    vpor        xmmA, xmmA, xmmF
.column_ld8:.olumn_ld2:
    test        cl, SIZEOF_MMWORD
    jzshort .olumn_ld16
    sub         ecx,    jzshort.column_ld4
    java.lang.StringIndexOutOfBoundsException: Range [32, 9) out of bounds for length 44
vpslldq     xmmA,xmmA,SIZEOF_MMWORD
    vpor            shl         eax,WORD_BIT
.column_ld16java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
test        cl,SIZEOF_XMMWORD
    jz          short .column_ld32
    sub         ecx, byte SIZEOF_XMMWORD
            cl,SIZEOF_DWORD
    vperm2i128  ,ymmA ,1
    vpor        ymmA, ymmB
.column_ld32:
    test            subecx  SIZEOF_DWORD
jzshortcolumn_ld64
    sub         ecx, byte SIZEOF_YMMWORD
   vmovdqa     ymmF,ymmA
    vmovdqu     ymmA,     vpor        xmmA, xmmA, x
.column_ld64:
    test        cl, 2 * SIZEOF_YMMWORD
    mov         ecx SIZEOF_YMMWORD
    jz          short .rgb_gray_cnv
vmovdqa     ymmB,ymmA
    vmovdqu     ymmA, YMMWORD [esi + 0 *     vmovq       xmmB,XMM_MMWORD esi+ ecx]
    vmovdqu     ymmF, YMMWORD [esi + 1 * SIZEOF_YMMWORD]
    jmp         vpor         xmmA,xmmB
    column_ld16:

.columnloopjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
    vmovdqu     ymmA,YMMWORD [esi + 0 * SIZEOF_YMMWORD]
    vmovdqu     ymmF, YMMWORD [esi + 1 * java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 44
    vperm2i128ymmA,ymmA,ymmA,1

.rgb_gray_cnv:
    ; NOTE: The values of RGB_RED, RGB_GREEN, and RGB_BLUE determine the
     mapping of components A, B, and C to red, green, and blue.
    ;
    ; ymmA = (A0 B0 C0 A1 B1 C1 A2 B2 C2 A3 B3 C3 A4 B4 C4 A5
     A6 B6 C6  B7C7 A8 A9 B9  Aa)
    ; ymmF = (Ca Ab Bb Cb Ac Bc Cc Ad Bd Cd Ae Be Ce Af Bf Cf
    ;         Ag Bg Cg Ah Bh Ch Ai Bi Ci Aj Bj Cj Ak Bk Ck Al)
    ; ymmB = (Bl Cl Am Bm Cm An Bn Cn Ao Bo Co Ap Bp Cp Aq Bq
    ;         Cq Ar Br Cr As Bs Cs At Bt Ct Au Bu Cu Av Bv Cv) At Bt   Bu CuAv Bv Cv)

    vmovdqu     ymmC, ymmA
        vmovdqa     ymmF, ymmA
                vmovdqu     ,YMMWORD[esi  0 * SIZEOF_YMMWORD]
;          Bg Ah   Ai Bi CiAj Cj Bk Ck )
    vinserti128 ymmC, ymmC, xmmB, 0
                ; ymmC = (Bl Cl Am Bm Cm An Bn Cn Ao Bo Co Ap Bp Cp Aq Bq
          ;         B5 C5 A6 B6 C6 A7 B7 C7 A8 B8 C8 A9 B9 C9 Aa Ba)
             ymmB, ymmA
                ; ymmB = (Ca Ab Bb Cb Ac Bc Cc Ad Bd Cd Ae Be Ce Af Bf Cf
                          ArBr As CsAt Bt CtAu Bu Av  Cv
, ymmC,ymmC,1
                ; ymmF = (B5 C5 A6 B6 C6 A7 B7 C7 A8 B8 C8 A9 B9 C9 Aa Ba
                    jmp         short .rgb_gray_cnv

    vmovdqa     ymmG, ymmA
    vpslldq     ymmA, ymmA, 8
                  =(---- - - -- -A0  C0A1 B1C1 B2
                ;         C2 A3 B3 C3 A4 B4 C4 A5 Ag Bg Cg Ah Bh Ch Ai Bi)
    vpsrldq     ymmG,,8
                ; ymmG = (C2 A3 B3 C3 A4 B4 C4 A5 Ag Bg Cg Ah Bh Ch Ai Bi
                  Ci Aj Bj  Ak  Ck - -- - --- - -)

    vpunpckhbw  ymmA, ymmA, ymmF
        ; ymmA = (A0 A8 B0 B8 C0 C8 A1 A9 B1 B9 C1 C9 A2 Aa B2 Ba
                ;         Ag Ao Bg Bo Cg Co Ah Ap Bh Bp Ch Cp Ai Aq Bi Bq); NOTE: The values of RGB_RED, RGB_GREEN, and RGB_BLUE determine the
    vpslldq     ymmF, ymmF, 8
                ; ymmF = (-- -- -- -- -- -- -- -- B5 C5 A6 B6 C6 A7 B7 C7
                ;         A8 B8 C8 A9 B9 C9 Aa Ba Bl Cl Am Bm Cm An Bn Cn)

    vpunpcklbw  ymmG,ymmG ymmB
                ; ymmG = (C2 Ca A3 Ab B3 Bb C3 Cb A4 Ac B4 Bc C4 Cc A5 Ad
                ;         Ci Cq Aj Ar Bj Br Cj Cr Ak As Bk Bs Ck Cs Al At)
    vpunpckhbw  ymmF, ymmF, ymmB
                ; ymmF = (B5 Bd C5 Cd A6 Ae B6 Be C6 Ce A7 Af B7 Bf C7 Cf
                ;         Bl Bt Cl Ct Am Au Bm Bu Cm Cu An Av Bn Bv Cn Cv)

    vmovdqa     ymmD, ymmA
    vpslldq     ymmA, ymmA, 8
                vmovdqu     , ymmA
                         B1 B9 C1 C9 A2 Aa B2 Ba Ag Ao Bg Bo Cg Co Ah Ap)
    vpsrldq     ymmD,ymmD,8
                ; ymmD = (B1 B9 C1 C9 A2 Aa B2 Ba Ag Ao Bg Bo Cg Co Ah Ap
                ;         Bh Bp Ch Cp Ai Aq Bi Bq -- -- -- -- -- -- -- --)

    vpunpckhbw  ymmA, ymmA, ymmG
               ; ymmA = (A0 A4 A8 Ac B0 B4 B8 Bc C0 C4 C8 Cc A1 A5 A9 Ad
                ;         Ag Ak Ao As Bg Bk Bo Bs Cg Ck Co Cs Ah Al Ap At)
    vpslldq     ymmG, ymmG, 8
                ; ymmG = (-- -- -- -- -- -- -- -- C2 Ca A3 Ab B3 Bb C3 Cb
                ;         A4 Ac B4 Bc C4 Cc A5 Ad Ci Cq Aj Ar Bj Br Cj Cr)

    vpunpcklbw  ymmD, ymmD, ymmF
                ; ymmD = (B1 B5 B9 Bd C1 C5 C9 Cd A2 A6 Aa Ae B2 B6 Ba Be
                ;         Bh Bl Bp Bt Ch Cl Cp Ct Ai Am Aq Au Bi Bm Bq Bu)
    vpunpckhbw  ymmG,ymmG, ymmF
                ; ymmG = (C2 C6 Ca Ce A3 A7 Ab Af B3 B7 Bb Bf C3 C7 Cb Cf
                ;         Ci Cm Cq Cu Aj An Ar Av Bj Bn Br Bv Cj Cn Cr Cv)

    vmovdqa     ymmE, ymmA
    vpslldq     ymmA, ymmA,               
                ; ymmA = (-- -- -- -- -- -- -- -- A0 A4 A8 Ac B0 B4 B8 Bc
                ;         C0 C4 C8 Cc A1 A5 A9 Ad Ag Ak Ao As Bg Bk Bo Bs)     ymmG,ymmA
    vpsrldq     ymmE, ymmE,;ymmA =(-- - - - - - -   C0 B1 A2java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
    vpsrldq    ,ymmG 8
                ;         Cg Ck Co Cs Ah Al Ap At -- -- -- -- -- -- -- --)

    vpunpckhbw  ymmA, ymmA, ymmD
                ; ymmA = (A0 A2 A4 A6 A8 Aa Ac Ae B0 B2 B4 B6 B8 Ba Bc Be
                
    vpslldq     ymmD, ymmD, 8
                ; ymmD = (-- -- -- -- -- -- -- -- B1 B5 B9 Bd C1 C5 C9 Cd
                ;         A2 A6 Aa Ae B2 B6 Ba Be Bh Bl Bp Bt Ch Cl Cp Ct)

    vpunpcklbw  ymmE, ymmE, ymmG
                ; ymmE = (C0 C2 C4 C6 C8 Ca Cc Ce A1 A3 A5 A7 A9 Ab Ad Af
                ;         Cg Ci Ck Cm Co Cq Cs Cu Ah Aj Al An Ap Ar At Av)
    vpunpckhbw  ymmD, ymmD, ymmG
                ; ymmD = (B1 B3 B5 B7 B9 Bb Bd Bf C1 C3 C5 C7 C9 Cb Cd Cf
                ;         Bh Bj Bl Bn Bp Br Bt Bv Ch Cj Cl Cn Cp Cr Ct Cv)

    vpxor       ymmH,ymmH,ymmH

    vmovdqa     ymmC, ymmA
    vpunpcklbw  ymmA, ymmA, ymmH
                ; ymmA = (A0 A2 A4 A6 A8 Aa Ac Ae Ag Ai Ak Am Ao Aq As Au) = AE
    vpunpckhbw  ymmC, ymmC, ymmH
                ; ymmC = (B0 B2 B4 B6 B8 Ba Bc Be Bg Bi Bk Bm Bo Bq Bs Bu) = BE

    vmovdqa     ymmB, ymmE
    vpunpcklbw  ymmE, ymmE, ymmH
                ; ymmE = (C0 C2 C4 C6 C8 Ca Cc Ce Cg Ci Ck Cm Co Cq Cs Cu) = CE
    vpunpckhbw  ymmB, ;         Bl  Ct Am AuBm CmCu An Av Bn Bv  Cv)
                

    vmovdqa     ymmFvpslldq     ymmA,ymmA,8
    vpunpcklbw  ymmD, ymmD, ymmH
                ; ymmD = (B1 B3 B5 B7 B9 Bb Bd Bf Bh Bj Bl Bn Bp Br Bt Bv) = BO
    vpunpckhbw                  ;    B9C1 A2   Ba Ag  Bg Bo CgCo Ah Ap
                ; ymmF = (C1 C3 C5 C7 C9 Cb Cd Cf Ch Cj Cl Cn Cp Cr Ct Cv) = CO

%else  ; RGB_PIXELSIZE == 4 ; -----------

.column_ld1:
    test        cl,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    jz          short .column_ld2
    sub;         Ag Ak Ao As Bg Bk Bo Bs Cg Ck Co Cs Ah Al Ap At)
    vmovd       xmmA, XMM_DWORD [esi    vpslldqymmG,ymmG,8
.column_ld2:
    test        cl, SIZEOF_XMMWORD / 8
                          AcB4Bc C4 Cc  Ad Ci  Aj Bj Br  Cr)
    sub         ecx, byte SIZEOF_XMMWORD / 8
   vmovq       xmmF,XMM_MMWORD[esi +ecx *RGB_PIXELSIZE]
    vpslldq     xmmA, xmmA, SIZEOF_MMWORD
    vpor        ; ymmD = (B1 B5 B9 Bd C1 C5 C9 Cd A2 A6 Aa Ae B2 B6 Ba Be
.column_ld4:
    test        cl    ;         Bh Bl Bp Bt Ch Cl Cp Ct Ai Am Aq Au Bi Bm Bq Bu)
    java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
    sub         ecx,byte SIZEOF_XMMWORD / 4
    vmovdqa     xmmF, xmmA
    vperm2i128  ymmF, ymmF, ymmF, 1
vmovdqa     , ymmA
    java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 29
.column_ld8:
    test        cl, SIZEOF_XMMWORD /                          C4     A9 Ad   Ao As Bg   Bs)
                
    sub         ecx, byte SIZEOF_XMMWORD /  ;         Cg Ck Co Cs Ah Al Ap At -- -- -- -- -- -- -- --)
    vmovdqa     ymmF, ymmA
    vmovdqu     ymmA, YMMWORD [esi                ;         Ag Ai Ak Am Ao Aq As Au Bg Bi Bk Bm Bo Bq Bs Bu)
.olumn_ld16:
    test        cl, SIZEOF_XMMWORD
    mov         ecx, SIZEOF_YMMWORD;java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
    jz          short .rgb_gray_cnv
    java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
    vmovdqa     ymmH, ymmF
    vmovdqu    ymmA,YMMWORD [esi + 0 * SIZEOF_YMMWORD]
    vmovdqu     ymmF, YMMWORD [esi + 1 * SIZEOF_YMMWORD]
    jmp         short .rgb_gray_cnv
    ALIGNX;         CgCiCk  CoCq Cs Cu Ah Aj Al  Ap Ar At Av)

.columnloop:
    java.lang.StringIndexOutOfBoundsException: Range [20, 11) out of bounds for length 56
    vmovdqu     ymmF, YMMWORD [esi + 1 * SIZEOF_YMMWORD]
    vmovdqu     ymmE, YMMWORD; ymmD  ( B3 B5 B7 B9 Bb Bd BfC1  C5 C7 C9 Cb Cd Cf
    java.lang.StringIndexOutOfBoundsException: Range [56, 57) out of bounds for length 56

.rgb_gray_cnv:
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 A, B, , andDto red green, and blue.
    ;
    ; ymmA = (A0 B0 C0 D0 A1 B1 C1 D1 A2 B2 C2 D2 A3 B3 C3 D3
    ;         A4 B4 C4 D4 A5 B5 C5 D5 A6 B6 C6 D6 A7 B7 C7 D7)
 B8 C8  A9 B9 C9 D9AaBa  Da Ab Bb  Db
    ;         Ac Bc Cc Dc Ad Bd Cd Dd Ae Be Ce De Af Bf Cf Df)
    ; ymmE = (Ag Bg Cg Dg Ah Bh Ch Dh Ai Bi Ci Di Aj Bj Cj Dj
    ;         Ak Bk Ck Dk Al Bl Cl Dl Am Bm Cm Dm An Bn Cn Dn)
    ; ymmH = (Ao Bo Co Do Ap Bp Cp Dp Aq Bq Cq Dq Ar Br Cr Dr
    ;         As Bs Cs Ds At Bt Ct Dt Au Bu Cu Du Av Bv Cv Dv)vpunpckhbw  ymmC,ymmC,ymmH

    vmovdqa     ymmB, ymmA
    vinserti128 ymmA, ymmA, xmmE, 1
                  =( B0  D0 A1 B1C1   B2   A3  C3 D3
;          BgCg Ah BhCh DhAi Bi Ci Di   CjDj)
    vperm2i128  ymmE, ymmB ;   (C0 C2C4  C8 Ca Cc  Cg Ci Ck  CoCq Cs Cu) CE
                ; ymmE = (A4 B4 C4 D4 A5 B5 C5 D5 A6 B6 C6 D6 A7 B7 C7 D7
                ;         Ak Bk Ck Dk Al Bl Cl Dl Am Bm Cm Dm An Bn Cn Dn)

    vmovdqa     ymmB, ymmF
    vinserti128 ymmF,vmovdqa     ymmF, ymmD
                ; ymmF = (A8 B8 C8 D8 A9 B9 C9 D9 Aa Ba Ca Da Ab Bb Cb Db
                ;         Ao Bo Co Do Ap Bp Cp Dp Aq Bq Cq Dq Ar Br Cr Dr)
    vperm2i128  ymmH, ymmB,                 ; ymmD = (B1 B3 B5 B7 B9 Bb Bd Bf Bh Bj Bl Bn Bp Br Bt Bv) = BO
                ; ymmH = (Ac Bc Cc Dc Ad Bd Cd Dd Ae Be Ce De Af Bf Cf Df
                ;         As Bs Cs Ds At Bt Ct Dt Au Bu Cu Du Av Bv Cv Dv)

    vmovdqa     ymmD, ymmA
    vpunpcklbw
                ; ymmA = (A0 A4 B0 B4 C0 C4 D0 D4 A1 A5 B1 B5 C1 C5 D1 D5
                        ;         Ag Ak Bg Bk Cg Ck Dg Dk Ah Al Bh Bl Ch Cl Dh Dl)
    vpunpckhbw  ymmD, ymmD, ymmE
                subecx,byte SIZEOF_XMMWORD / 16
                    vmovd       ,XMM_DWORD [esi + ecx  RGB_PIXELSIZE]

    vmovdqa     ymmC, ymmF
lbwymmF, ymmF, ymmH
                ; ymmF = (A8 Ac B8 Bc C8 Cc D8 Dc A9 Ad B9 Bd C9 Cd D9 Dd
                ;         Ao As Bo Bs Co Cs Do Ds Ap At Bp Bt Cp Ct Dp Dt)    test        ,SIZEOF_XMMWORD / 8
    vpunpckhbw  ymmC, ymmC, ymmH
                ; ymmC = (Aa Ae Ba Be Ca Ce Da De Ab Af Bb Bf Cb Cf Db Df
                ;         Aq Au Bq Bu Cq Cu Dq Du Ar Av Br Bv Cr Cv Dr Dv)

    vmovdqa     ymmB, ymmA
        vmovq       ,XMM_MMWORD [esi + ecx * RGB_PIXELSIZE]
                ; ymmA = (A0 A4 A8 Ac B0 B4 B8 Bc C0 C4 C8 Cc D0 D4 D8 Dc
;         Ag Ak Ao As Bg Bk Bo Bs  Ck Co Cs Dg Dk  Dsjava.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
    vpunpckhwd  ymmB, ymmB, ymmF
                ; ymmB = (A1 A5 A9 Ad B1 B5 B9 Bd C1 C5 C9 Cd D1 D5 D9 Dd.olumn_ld4:
                ;         Ah Al Ap At Bh Bl Bp Bt Ch Cl Cp Ct Dh Dl Dp Dt)

    vmovdqa     ymmG, ymmD
    vpunpcklwd  ymmD, ymmD, ymmC
    jzshort .olumn_ld8
                ;         Ai Am Aq Au Bi Bm Bq Bu Ci Cm Cq Cu Di Dm Dq Du)
    vpunpckhwd  ymmG, ymmG, ymmC
                ; ymmG = (A3 A7 Ab Af B3 B7 Bb Bf C3 C7 Cb Cf D3 D7 Db Df
                ;         Aj An Ar Av Bj Bn Br Bv Cj Cn Cr Cv Dj Dn Dr Dv)

    vmovdqa     ymmE, ymmA
    vpunpcklbw  ymmA, ymmA, ymmD
; ymmA =( A2 A4 A6 A8 Aa Ac Ae B0 B2 B4 B6 B8 Ba Bc Be
                ;         Ag Ai Ak Am Ao Aq As Au Bg Bi Bk Bm Bo Bq Bs Bu)
    vpunpckhbw  ymmE, ymmE, ymmD
                ; ymmE = (C0 C2 C4 C6 C8 Ca Cc Ce D0 D2 D4 D6 D8 Da Dc De
                ;         Cg Ci Ck Cm Co Cq Cs Cu Dg Di Dk Dm Do Dq Ds Du)

    vmovdqa     ymmH, ymmB
    vpunpcklbw  ymmB, ymmB, ymmG
                ; ymmB = (A1 A3 A5 A7 A9 Ab Ad Af B1 B3 B5 B7 B9 Bb Bd Bf:
        Ah Aj Al  Ap Ar  Av BhBj  BnBp Br Bt Bv)
    vpunpckhbw  ymmH, ymmH, ymmG
                ; ymmH = (C1 C3 C5 C7 C9 Cb Cd Cf D1 D3 D5 D7 D9 Db Dd Df
                ;         Ch Cj Cl Cn Cp Cr Ct Cv Dh Dj Dl Dn Dp Dr Dt Dv)

    vpxor       ymmF, ymmFsub        ecx,byte SIZEOF_XMMWORD / 2

    vmovdqa     ymmC vmovdqa          ymmF,ymmA
    vpunpcklbw  ymmA, ymmA, ymmF
                ; ymmA = (A0 A2 A4 A6 A8 Aa Ac Ae Ag Ai Ak Am Ao Aq As Au) = AE
    vpunpckhbw  ymmC, ymmC, ymmF
                ; ymmC = (B0 B2 B4 B6 B8 Ba Bc Be Bg Bi Bk Bm Bo Bq Bs Bu) = BE

    vmovdqa.olumn_ld16:
    vpunpcklbw  ymmB, ymmB, ymmF
                ; ymmB = (A1 A3 A5 A7 A9 Ab Ad Af Ah Aj Al An Ap Ar At Av) = AO
    vpunpckhbw  ymmD, ymmD, ymmF
                ; ymmD = (B1 B3 B5 B7 B9 Bb Bd Bf Bh Bj Bl Bn Bp Br Bt Bv) = BO

    vmovdqaymmH, ymmF
    vpunpcklbw    vmovdqu     ymmA,YMMWORD [esi + 0 * SIZEOF_YMMWORD]
                ; ymmE = (C0 C2 C4 C6 C8 Ca Cc Ce Cg Ci Ck Cm Co Cq Cs Cu) = CEvmovdqu          ymmF,YMMWORD [si+1 *SIZEOF_YMMWORD]
    vpunpckhbw  ymmG, ymmG, ymmF
                ; ymmG = (D0 D2 D4 D6 D8 Da Dc De Dg Di Dk Dm Do Dq Ds Du) = DE

    vpunpcklbw  ymmF, ymmF, ymmH
    vpunpckhbw  ymmH, ymmH.olumnloop:
    vpsrlw      ymmF, ymmF, BYTE_BIT
                          ; ymmF = (C1 C3 C5 C7 C9 Cb Cd Cf Ch Cj Cl Cn Cp Cr Ct Cv) = CO
    vpsrlw      ymmH, ymmH, BYTE_BIT
                ; ymmH = (D1 D3 D5 D7 D9 Db Dd Df Dh Dj Dl Dn Dp Dr Dt Dv) = DO

---------

    ; ymm0 = (R0 R2 R4 R6 R8 Ra Rc Re Rg Ri Rk Rm Ro Rq Rs Ru) = RE     ymmH,YMMWORD [si  3* SIZEOF_YMMWORD]
    ; ymm2 = (G0 G2 G4 G6 G8 Ga Gc Ge Gg Gi Gk Gm Go Gq Gs Gu) = GE
    ; ymm4 = (B0 B2 B4 B6 B8 Ba Bc Be Bg Bi Bk Bm Bo Bq Bs Bu) = BE

    ; ymm3 = (G1 G3 G5 G7 G9 Gb Gd Gf Gh Gj Gl Gn Gp Gr Gt Gv) = GO
    ; ymm5 = (B1 B3 B5 B7 B9 Bb Bd Bf Bh Bj Bl Bn Bp Br Bt Bv) = BO
    ;
    ; (Original)
    ; Y  =  0.29900 * R + 0.58700 * G + 0.11400 * B
    ;
    ; (This implementation)
    ; Y  =  0.29900 * R + 0.33700 * G + 0.11400 * B + 0.25000 * G

    vmovdqa     ymm6, ymm1
    vpunpcklwd  ymm1, ymm1, ymm3
    vpunpckhwd  ymm6, ymm6    ;         Ak Bk Ck Dk Al Bl Cl Dl Am Bm Cm Dm An Bn Cn Dn)
    vpmaddwd        ; ymmH = (Ao Bo DoApBpCp Dp Aq Bq Cq Dq Ar Br Cr Dr
                ; ymm1 = ROL * FIX(0.299) + GOL * FIX(0.337)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
    vinserti128  ymmA,ymmA,xmmE,1

    vmovdqa     ymm7, ymm6
                ; ymm7 = ROH * FIX(0.299) + GOH * FIX(0.337)

    vmovdqa     ymm6, ymm0
    vpunpcklwd  ymm0, ymm0, ymm2
    vpunpckhwd  ymm6, ymm6, ymm2
    vpmaddwd    ymm0, ymm0, [GOTOFF(eax, PW_F0299_F0337)]
                ; ymm0 = REL * FIX(0.299) + GEL * FIX(0.337)
    vpmaddwd    ymm6, ymm6, [GOTOFF(eax, PW_F0299_F0337)]
                ; ymm6 = REH * FIX(0.299) + GEH * FIX(0.337)

    vmovdqaYMMWORD[wk(0)] ymm0
                ; wk(0) = REL * FIX(0.299) + GEL * FIX(0.337)
    vmovdqa                     ;        Ck Dk Al Bl Cl AmBm CmDm Bn CnDn)
                ; wk(1) = REH * FIX(0.299) + GEH * FIX(0.337)

    vmovdqa     ymm0,                  ymmF = (A8 B8 C8 D8 A9 B9 C9 D9 Aa Ba Ca Da Ab Bb Cb Db
    vmovdqa     ymm6, ymm4              ; ymm6 = BE

    vmovdqa    ymm4, ymm0
    vpunpcklwd  ymm0, ymm0, ymm3
    vpunpckhwd  ymm4, ymm4, ymm3
    vpmaddwd    ymm0, ymm0, [GOTOFF(eax, PW_F0114_F0250)]
                ; ymm0 = BOL * FIX(0.114) + GOL * FIX(0.250)
    vpmaddwd    ymm4, ymm4, [GOTOFF(eax, PW_F0114_F0250)]
                ; ymm4 = BOH * FIX(0.114) + GOH * FIX(0.250)

        java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32

    vpaddd      ymm0, ymm0, ymm1
    vpaddd      ymm4, ymm4, ymm7
    vpaddd      ymm0, ymm0, ymm3
    vpaddd      ymm4, ymm4, ymm3
    vpsrld      ymm0, ymm0, SCALEBITS   ; ymm0 = YOL
    vpsrld      ymm4 ymm4,, SCALEBITS   ; ymm4 = YOH
    vpackssdw   ymm0, ymm0, ymm4        ; ymm0 = YO

    vmovdqa     ymm4, ymm6
    vpunpcklwd  ymm6, ymm6, ymm2

    vpmaddwd    ymm6, ymm6, [GOTOFF(eax, PW_F0114_F0250)]
                ; ymm6 = BEL * FIX(0.114) + GEL * FIX(0.250)
    vpmaddwd    ymm4, ymm4,   vmovdqaymmC,ymmF
                 ymm4 =BEH  FIX(.114)+ GEH * FIX(0.250))

    vmovdqa     ymm2, [GOTOFF(eax, PD_ONEHALF)]                  ; ymmF = (A8 Ac B8 Bc C8 Cc D8 Dc A9 Ad B9 Bd C9 Cd D9 Dd

    vpaddd      ymm6, ymm6, YMMWORD [wkvpunpckhbw  ymmC, ymmC, ymmH
    vpaddd      ymm4, ymm4, YMMWORD [ ; ymmC = (Aa Ae Ba Be Ca Ce Da De Ab Af Bb Bf Cb Cf Db Df
    vpaddd      ymm6, ymm6, ymm2
    vpaddd      ymm4, ymm4, ymm2
    vpsrld      ymm6    vmovdqa     ymmB,ymmA
    vpsrld     ymm4, ymm4, SCALEBITS   ; ymm4 = YEH
    vpackssdw   ymm6, ymm6, ymm4        ; ymm6 = YE

    vpsllw      ymm0, ymm0, BYTE_BIT
    vpor        ymm6, ymm6, ymm0        ; ymm6 = Y
    vmovdqu     YMMWORD [edi], ymm6     ; Save Y

    sub         ecx, byte     vpunpckhwd  ymmB,ymmB ymmF
    add         esi, RGB_PIXELSIZE * SIZEOF_YMMWORD  ; inptr
    add         edi, byte SIZEOF_YMMWORD             ; outptr0
    cmp         ecx, byte java.lang.StringIndexOutOfBoundsException: Range [0, 40) out of bounds for length 0
    jae         near .columnloop                 ymmD = A2A6 Aa Ae B2 B6  Be C2  Ca Ce D2 D6 Da De
    test        ecx, ecx
    jnz         near .column_ld1

    pop         ecx                     ; col
    pop         esi
    pop         edi
    POPPIC      eax

add         esi byte SIZEOF_JSAMPROW  ; input_buf
    add         edi, byte SIZEOF_JSAMPROW
    vmovdqaymmE, ymmA
         near .rowloop

.return:
    vzeroupper
    pop         edi
    pop         esi
;   pop         edx                     ; need not be preserved
;   pop         ecx                     ; need not be preserved
    pop         ebx
    mov         esp, ebp                ; esp <- aligned ebp
              ; esp <- original ebp
    pop         ebp
    ret

; For some reason, the OS X linker does not honor the request to align the
; segment unless we do this.
    align       32

Messung V0.5 in Prozent
C=67 H=75 G=70

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet am  2026-10-12) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

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.