; ; 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.
%; This file should be assembled with NASM (Netwide Assembler) or Yasm.include".inc"
; -------------------------------------------------------------------------- ; ; 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)
%define original_ebp ebp + 0
%efineinput_buf( b 12; JSAMPARRAY input_buf ; ymmword wk[WK_NUM]
%WK_NUMjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
%wk) W -i)*
align
GLOBAL_FUNCTION(% 2
align32
mov eax, esp; eax = original ebp subesp, bytejava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
mov , java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
]
mov ebp, esp; ebp = aligned ebp e] eax
lea,[wk(]
PUSHPICPUSHPIC java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
; push ecx; need not be preserved ; push ecx ; need not be preserved ; push edx ; need not be preserved
pushedi
GET_GOT java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 24
java.lang.StringIndexOutOfBoundsException: Range [0, 7) out of bounds for length 0
, jz mov edi,[+0*]
pushecx
esi i)
mov , (]
mov edi, JSAMPARRAY [esi + 0 * SIZEOF_JSAMPARRAY] ediedi + ]
pop ALIGNX 16,
mov esi, JSAMPARRAY [input_buf
mov eax, INT [num_rows(eax)]
test eax, eax
jle mov edi, []; outptr0
ALIGNX 16, 7
.rowloop:
jae . edi
%if 3 ; col
mov java.lang.StringIndexOutOfBoundsException: Range [16, 8) out of bounds for length 19 edi [di ; outptr0
MOVPIC eax ,
%if RGB_PIXELSIZE.java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
.column_ld1sub,byte push eax
edx
lea ecx, [ecx + ecx *
test pop ed jz . subecx, byte xmmF java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 43
movzx eax, byte [esi + ecx]
.java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
test .
subecx, vmovq xmmB, XMM_MMWORD [esi + ecx]
,
WORD_BIT or eax:
.column_ld4:
cl
pop edx
pop eax
test , jz ymmA ,ymmA java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
,byte
vmovd .
vpslldq xmmA,
mmF
.column_ld8:
.java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 jz shortmov , subecx, ymmB
, [ ]
vpslldq xmmA, xmmA, java.lang.StringIndexOutOfBoundsException: Range [16, 11) out of bounds for length 56
vpor xmmA,xmmA,
.
: jz short .column_ld32 sub java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 56
vmovdqu xmmB, XMM_MMWORD [esi + ecx]
ymmA,, java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
vpor ymmA, ymmB;java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
.column_ld32:
test ; B5 C5 A7 B8 C8 C9 Ba jz short .column_ld64 subecx, byte ; Cq Ar Br Cr As Bs Cs CtAu BvCv)
ymmF ymmA
ymmA +0*]
.column_ld64:
test Ag CgBhCh Bj Ak CkAljava.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
jz short .rgb_gray_cnv
vmovdqajava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
vmovdqu ymmA;Cq Cr Bs Ct Bu CuBv )
vmovdqu vperm2i128 ymmF java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
ALIGNX java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
.columnloop;ymmA ( -- -- -- B0 A1 A2java.lang.StringIndexOutOfBoundsException: Range [73, 74) out of bounds for length 73
vmovdqu ymmA, ,ymmG,java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
vmovdqu ymmF, ; AjCjAkBk Al-- -- - --)
.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 ; B5 C5 A6 B6 C6 A7 B7 C7 A8 B8 C8 A9 B9 C9 Aa Ba) , ; ymmF = (Ca Ab Bb Cb Ac Bc Cc Ad Bd Cd Ae Be Ce Af Bf Cf
; 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)
ymmC,
vinserti128 ;java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 ; Ag Bg Cg Ah Bh Ch Ai Bi Ci Aj Bj Cj Ak Bk Ck Al) ; ymmA = (A0 A4 A8 Ac B0 B4 B8 Bc C0 C4 C8 Cc A1 A5 A9 Ad ; 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)
vinserti128 ymmB, ymmB, xmmF, 0 ; ymmB = (Ca Ab Bb Cb Ac Bc Cc Ad Bd Cd Ae Be Ce Af Bf Cf ; Cq Ar Br Cr As Bs Cs At Bt Ct Au Bu Cu Av Bv Cv)
vperm2i128 ymmF, ymmC ; ymmG = (C2 C6 Ca Ce A3 A7 Ab Af B3 B7 Bb Bf C3 C7 Cb Cf ; Bl Cl Am Bm Cm An Bn Cn Ao Bo Co Ap Bp Cp Aq Bq)
vmovdqa,
vpslldq ymmA, ymmA, 8
=( ---- -- -A0B0 A1 C1 B2 ; C2 A3 B3 C3 A4 B4 C4 A5 Ag Bg Cg Ah Bh Ch Ai Bi)
ymmG,,8 ; ymmG = (C2 A3 B3 C3 A4 B4 C4 A5 Ag Bg Cg Ah Bh Ch Ai Bi ; Ci Aj Bj Cj Ak Bk Ck Al -- -- -- -- -- -- -- --)
vpunpckhbw; Ag Ai Ak Am Ao Aq As Au Bg Bi Bk Bm Bo Bq Bs Bu) ; 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)
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)java.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 ; ymmF = (B5 Bd C5 Cd A6 Ae B6 Be C6 Ce A7 Af B7 Bf C7 Cf
BtCl Am Bu An Cn)
vmovdqa ymmD
, java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
B1 C9AaB2Ba AoBg Bo Ah)
vpsrldq ymmD, ymmD ; ymmD = (B1 B9 C1 C9 A2 Aa B2 Ba Ag Ao Bg Bo Cg Co Ah Ap
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
vpunpckhbw ymmA, ymmA, ymmG ; ymmA = (A0 A4 A8 Ac B0 B4 B8 Bc C0 C4 C8 Cc A1 A5 A9 Ad
java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74 8
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
; A4 A5Ad Cq ArBrCjCrjava.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
vpunpcklbw ymmD, ymmD esi+*] ; ymmD = (B1 B5 B9 Bd C1 C5 C9 Cd A2 A6 Aa Ae B2 B6 Ba Be
vpunpckhbw ymmG, ymmG, ymmF jz short .column_ld8 ; Ci Cm Cq Cu Aj An Ar Av Bj Bn Br Bv Cj Cn Cr Cv) /4
ymmE
vpslldq ymmA, ymmA, 8 ; ymmA = (-- -- -- -- -- -- -- -- A0 A4 A8 Ac B0 B4 B8 Bc
; C0 C8CcA1A5 A9 AgAkAo BkBoBs)
vpsrldq ymmE, ymmE, 8 ; ymmE = (C0 C4 C8 Cc A1 A5 A9 Ad Ag Ak Ao As Bg Bk Bo Bs
vpunpckhbw ymmA, ymmA, ymmD ; ymmA = (A0 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)
vpslldq ymmD, column_ld16java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 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 java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 56
Cm AjAnAr)
vpunpckhbw vmovdqu ymmA, YMMWORD [esi + 0 * SIZEOF_YMMWORD]
=B1B5 C3Cd vmovdqu ymmH, YMMWORD [esi + 3 * SIZEOF_YMMWORD]
vpxor ymmH, ; mapping of componentsC , java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
vmovdqa D8C9 CaBbCb Db
vpunpcklbw ymmA, ymmA, ymmH ; ymmA = (A0 A2 A4 A6 A8 Aa Ac Ae Ag Ai Ak Am Ao Aq As Au) = AE
, ; ymmC = (B0 B2 B4 B6 B8 Ba Bc Be Bg Bi Bk Bm Bo Bq Bs Bu) = BE
vmovdqa; ymmA =(A0 C0 D0 B1 D1A2C2D2 B3C3 D3
vpunpcklbw ymmE, Ag Dg Dh DiAjBj )
ymmE= C2 C6 Ce Cm Cs = CE
vpunpckhbw ymmB, ymmB, ymmH ; ymmB = (A1 A3 A5 A7 A9 Ab Ad Af Ah Aj Al An Ap Ar At Av) = AO
java.lang.StringIndexOutOfBoundsException: Range [20, 11) out of bounds for length 26
vpunpcklbw ymmD, ymmD, ymmH ; ymmD = (B1 B3 B5 B7 B9 Bb Bd Bf Bh Bj Bl Bn Bp Br Bt Bv) = BO
vpunpckhbw ymmF, ymmF, ymmH ; ymmF = (C1 C3 C5 C7 C9 Cb Cd Cf Ch Cj Cl Cn Cp Cr Ct Cv) = CO
%else ; RGB_PIXELSIZE == 4 ; -----------
.column_ld1:
jz short .column_ld2
/16
xmmA esi+*java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
.column_ld2 java.lang.StringIndexOutOfBoundsException: Range [28, 26) out of bounds for length 32
cl java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 38 jz short .column_ld4java.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 32 subecx, byte
xmmF java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 60
vpslldq xmmA, xmmA AkAoCgCo Do)
vpor xmmA, xmmA, xmmF
.java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
test cl, java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 0
c subecx, byte SIZEOF_XMMWORD ,java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32
java.lang.StringIndexOutOfBoundsException: Range [0, 11) out of bounds for length 0
ymmA=A0A6AaAeB4B8
vmovdqu xmmA, XMMWORD [esijava.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 32
vpor ymmA, ymmA, java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 0
.column_ld8
test ; AjAn At Bh Bl java.lang.StringIndexOutOfBoundsException: Range [68, 67) out of bounds for length 74 jz short .column_ld16 ecx java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 44
,java.lang.StringIndexOutOfBoundsException: Range [26, 27) out of bounds for length 26
vmovdqu ymmA, YMMWORD [esi + java.lang.StringIndexOutOfBoundsException: Range [20, 14) out of bounds for length 32
.java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 13
test cl, java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
mov ecx, SIZEOF_YMMWORD jz short .rgb_gray_cnv
vmovdqa ymmE, ymmA
,
java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 56
,e +1 java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 56
jmpjava.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 32
ALIGNX 16, 7
cjava.lang.StringIndexOutOfBoundsException: Range [12, 11) out of bounds for length 12 ; ymmF = (C1 C3 C5 C7 C9 Cb Cd Cf Ch Cj Cl Cn Cp Cr Ct Cv) = CO
vmovdqu
vmovdqu ymmE, YMMWORD-----
vmovdqu [+
.rgb_gray_cnv: ; NOTE: The values of RGB_RED, RGB_GREEN, and RGB_BLUE determine the ; mapping of components A, B, C, and D to 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) ; ymmF = (A8 B8 C8 D8 A9 B9 C9 D9 Aa Ba Ca Da Ab Bb Cb 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)
Co DpBrDr ; As Bs Cs Ds At Bt Ct Dt Au Bu Cu Du Av Bv Cv Dv)
vmovdqa ymmB, ymmA
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 ; ymmA = (A0 B0 C0 D0 A1 B1 C1 D1 A2 B2 C2 D2 A3 B3 C3 D3 ; Ag Bg Cg Dg Ah Bh Ch Dh Ai Bi Ci Di Aj Bj Cj Dj)java.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 32
vperm2i128 ymmE, ; ymmE = (A4 B4 C4 D4 A5 B5 C5 D5 A6 B6 C6 D6 A7 B7 C7 D7 [0]
AkBkDkBlClDl An )
vmovdqa ymmB, ymmF
vinserti128 ymmF, ymmF, xmmH, 1
;java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73 ; Ao Bo Co Do Ap Bp Cp Dp Aq Bq Cq Dq Ar Br Cr Dr)
vperm2i128 java.lang.StringIndexOutOfBoundsException: Range [22, 20) out of bounds for length 26 ; ymmH = (Ac Bc Cc Dc Ad Bd Cd Dd Ae Be Ce De Af Bf Cf Df ; ymm0 = BOL * FIX(0.114) + GOL * FIX(0.250)
vmovdqa
vpunpcklbw ymmA, ymmA, ymmE ; 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)java.lang.StringIndexOutOfBoundsException: Range [16, 10) out of bounds for length 32
vpunpckhbw ,java.lang.StringIndexOutOfBoundsException: Range [40, 37) out of bounds for length 52 ; ymmD = (A2 A6 B2 B6 C2 C6 D2 D6 A3 A7 B3 B7 C3 C7 D3 D7 ; Ai Am Bi Bm Ci Cm Di Dm Aj An Bj Bn Cj Cn Dj Dn)
vpunpcklbw ; *(114 *0.250java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
; Ao As Bo Bs Co Cs Do Ds Ap At Bp Bt Cp Ct Dp Dt)
java.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 32
; Aq Au Bq Bu Cq Cu Dq Du Ar Av Br Bv Cr Cv Dr Dv)
vpunpcklwd java.lang.StringIndexOutOfBoundsException: Range [40, 37) out of bounds for length 52 ; 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 Cg Ck Co Cs Dg Dk Do Ds) java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 50
, ; ymmB = (A1 A5 A9 Ad B1 B5 B9 Bd C1 C5 C9 Cd D1 D5 D9 Dd ; Ah Al Ap At Bh Bl Bp Bt Ch Cl Cp Ct Dh Dl Dp Dt)
vmovdqa ymmG, ymmD
vpunpcklwd ymmD, ymmD, ymmC
;ymmD( Ae BaC6 D2Dajava.lang.StringIndexOutOfBoundsException: Range [73, 74) out of bounds for length 73 ; Ai Am Aq Au Bi Bm Bq Bu Ci Cm Cq Cu Di Dm Dq Du)
vpunpckhwd ymmG, ymmG, ymmC pop esijava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
,java.lang.StringIndexOutOfBoundsException: Range [43, 41) out of bounds for length 54
jg java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 14 ; ymmA = (A0 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, pop esp
java.lang.StringIndexOutOfBoundsException: Range [7, 8) out of bounds for length 7 ; Cg Ci Ck Cm Co Cq Cs Cu Dg Di Dk Dm Do Dq Ds Du); segment unless we do this.
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 An Ap Ar At Av Bh Bj Bl Bn Bp 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, ymmF, ymmF
vmovdqa ymmC, 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 ymmD, ymmB
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
vmovdqa ymmG, ymmE
vpunpcklbw ymmE, ymmE, ymmF ; ymmE = (C0 C2 C4 C6 C8 Ca Cc Ce Cg Ci Ck Cm Co Cq Cs Cu) = CE
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, ymmH
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
%endif ; RGB_PIXELSIZE ; ---------------
; ymm0 = (R0 R2 R4 R6 R8 Ra Rc Re Rg Ri Rk Rm Ro Rq Rs Ru) = RE ; 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 ; ymm1 = (R1 R3 R5 R7 R9 Rb Rd Rf Rh Rj Rl Rn Rp Rr Rt Rv) = RO ; 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
vpsllw ymm0, ymm0, BYTE_BIT
vpor ymm6, ymm6, ymm0 ; ymm6 = Y
vmovdqu YMMWORD [edi], ymm6 ; Save Y
subecx, byte SIZEOF_YMMWORD
add esi, RGB_PIXELSIZE * SIZEOF_YMMWORD ; inptr
add edi, byte SIZEOF_YMMWORD ; outptr0 cmpecx, byte SIZEOF_YMMWORD
jae near .columnloop
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
dec eax ; num_rows jg 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
pop esp; 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. align32
Messung V0.5 in Prozent
¤ 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.0.7Bemerkung:
¤
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.