; ConvZoneVert2s ÀÇ Multi Dynamic Threshold ¹öÀü : Threshold¸¦ µÎ°³ÀÇ Á÷¼±À¸·Î ºÐ¸® ; ConvZoneVert2S ; S means SpeedUp ; ConvZoneVert2ÀÇ SpeedUp Version. ; Vertical Convolution Buffer ÀÇ µµÀÔÀ¸·Î ¸ðµâ ½ºÇǵå 35% °¡¼Ó .data astPair STRUCT pos dword ? pair dword ? dtype dword ? peak dword ? x dword ? y dword ? src dword ? ref dword ? zone dword ? Thre dword ? astPair ENDS SprShift equ 4 SprMulti equ 16 _return equ jmp szxMatch equ 8 ; x, y °¢ 4byte .code ix equ rsi iy equ rdi ix32 equ esi iy32 equ edi rrImgAddr equ r8 rdImgAddr equ r8d rwImgAddr equ r8w rrNoD equ r9 rrXoD equ r10 rrYoD equ r11 rrToD equ r12 rrPoD equ r13 rrSrcD equ r14 rrCmpD equ r15 xxTemp equ xmm1 xxZTh equ xmm2 xxZId equ xmm3 xxSrc1 equ xmm4 xxSrc2 equ xmm5 xxCmp1 equ xmm6 xxCmp2 equ xmm7 xxPeakS equ xmm8 xxPeakAbs equ xmm9 xxfSpr equ xmm10 xxsSpr equ xmm11 xxZTh2 equ xmm12 xxFlag equ xmm13 xxDSlide equ xmm14 ; ±â¿ï±â xxSupp equ xmm15 ; 2¹øÂ° Threshold ÀÇ ±âÁØ ; ÆÄ¶ó¹ÌÅÍ InspLeft equ qword ptr[rbp+ 30h] InspRight equ qword ptr[rbp+ 38h] InspTop equ qword ptr[rbp+ 40h] InspBottom equ qword ptr[rbp+ 48h] DefectX equ qword ptr[rbp+ 50h] DefectY equ qword ptr[rbp+ 58h] DefectType equ qword ptr[rbp+ 60h] DefectVal equ qword ptr[rbp+ 68h] GraySrc equ qword ptr[rbp+ 70h] GrayCmp equ qword ptr[rbp+ 78h] ZoneId equ qword ptr[rbp+ 80h] ZoneTh equ qword ptr[rbp+ 88h] BuffWidth equ qword ptr[rbp+ 90h] iPitch equ qword ptr[rbp+ 98h] fSPR equ qword ptr[rbp+ 0a0h] sSPR equ qword ptr[rbp+ 0a8h] ZoneThAddrPr equ qword ptr[rbp+ 0b0h] ZoneIdAddrPr equ qword ptr[rbp+ 0b8h] ZoneTableW equ qword ptr[rbp+ 0c0h] pMatch equ qword ptr[rbp+ 0c8h] PairAddr equ qword ptr[rbp+ 0d0h] ; ±âº»°Ë»ç WIDTH nPair equ qword ptr[rbp+ 0d8h] ; ±âº» °Ë»ç HEIGHT MaxPair equ qword ptr[rbp+ 0e0h] PairSize equ qword ptr[rbp+ 0e8h] dxPtrn equ qword ptr[rbp+ 0f0h] dyPtrn equ qword ptr[rbp+ 0f8h] szyMatch equ qword ptr[rbp+ 100h] bRFilter equ qword ptr[rbp+ 108h] ZoneAddAddrPr equ qword ptr[rbp+ 110h] ConAddr equ qword ptr[rbp+ 118h] bUseUnpair equ qword ptr[rbp+ 120h] endLine equ qword ptr[rbp+ 128h] ZoneMThMinPr equ qword ptr[rbp+ 130h] ZoneMThAddrPr equ qword ptr[rbp+ 138h] ZoneMAddAddrPr equ qword ptr[rbp+ 140h] ThSuppress equ qword ptr[rbp+ 148h] ; ·ÎÄà º¯¼ö ; Function Start ----------------------------------ConvZoneVert2-------- ConvZoneMVert2S PROC local maxDefect : qword local ImgAddrOri : qword local ZoneThAddr : qword local ZoneIdAddr : qword local ZoneAddAddr : qword local ZoneThAddrLine : qword local ZoneIdAddrLine : qword local ZoneAddAddrLine : qword local ZoneTableW2 : qword local pMatch1 : qword local exPtrn : qword local eyPtrn : qword local eyPtrn1 : qword local ConvPitch : qword local pairTop : qword local pairBottom : qword local iPitchHUp : qword local ConBottom : qword local ZoneMThAddr : qword local ZoneMAddAddr : qword local ZoneMThMinAddr : qword local ZoneMThMinLine : qword local ZoneMThAddrLine : qword local ZoneMAddAddrLine : qword local c8Pixel : dword local xMatch : dword local yMatch : dword local xMatch2 : dword local yMatch2 : dword ; push rbp ; mov rbp, rsp push r10 push r11 push r12 push r13 push r14 push r15 push rdi push rsi push rbx ; add rbp, 08h ; ADD rbp, 0a8h mov ImgAddrOri, rcx mov maxDefect, r8 mov rax, ThSuppress ; Suppress movd xxSupp, eax movdqa xxTemp, xxSupp punpcklwd xxTemp, xxSupp pshufd xxSupp, xxTemp, 0 mov rcx, iPitch and rcx, 0fh movd xxsSpr, ecx ; sSPR movdqa xxTemp, xxsSpr punpcklwd xxTemp, xxsSpr pshufd xxsSpr, xxTemp, 0 mov rax, SprMulti ; fSpr sub rax, rcx movd xxfSpr, eax movdqa xxTemp, xxfSpr punpcklwd xxTemp, xxfSpr pshufd xxfSpr, xxTemp, 0 mov xMatch2, 0 mov rax, iPitch ; iPitch sar rax, SprShift mov iPitch, rax cmp rcx, 8 jl PITCH_H_UP_PASS inc rax PITCH_H_UP_PASS: mov iPitchHUp, rax mov rcx, InspBottom sub rcx, iPitch sub rcx, 1 mov ConBottom, rcx sub rcx, iPitch mov pairBottom, rcx mov rax, InspTop add rax, iPitch mov pairTop, rax mov rax, iPitch sal rax, 5 mov ConvPitch, rax mov rax, ZoneTableW add rax, rax mov ZoneTableW2, rax mov ix, InspLeft mov iy, InspTop mov rax, InspRight sub rax, InspLeft ; add rax, 15 sar rax, 4 sal rax, 4 add rax, inspLeft mov InspRight, rax mov rrXoD, DefectX mov rrYoD, DefectY mov rrToD, DefectType mov rrPoD, DefectVal mov rrSrcD, GraySrc mov rrCmpD, GrayCmp mov rcx, pMatch ; ´ÙÀ½ Zone offset±¸Çϱâ, pMatch, exPtrn, eyPtrn mov pMatch1, rcx ; ZoneThreshold Offset °è»ê(zOffset) mov rcx, szyMatch add pMatch, rcx ; ZoneThreshold Offset °è»ê(zOffset) mov rcx, pMatch movsxd rbx, dword ptr[rcx+ 4] mov yMatch, ebx mov rdx, dyPtrn add rdx, rbx mov eyPtrn, rdx ; eyPtrn mov eyPtrn1, rdx mov rax, iy sub rax, rbx mul ZoneTableW ; y*width movsxd rbx, dword ptr[rcx] mov xMatch, ebx mov rdx, dxPtrn add rdx, rbx mov exPtrn, rdx ; exPtrn mov rdx, ix sub rdx, rbx add rax, rdx ; offset= y*width+ x add rax, rax mov rdx, ZoneThAddrPr add rdx, rax mov ZoneThAddr, rdx mov ZoneThAddrLine, rdx mov rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx mov ZoneIdAddrLine, rdx mov rdx, ZoneAddAddrPr add rdx, rax mov ZoneAddAddr, rdx mov ZoneAddAddrLine, rdx mov rdx, ZoneMThAddrPr add rdx, rax mov ZoneMThAddr, rdx mov ZoneMThAddrLine, rdx mov rdx, ZoneMAddAddrPr add rdx, rax mov ZoneMAddAddr, rdx mov ZoneMAddAddrLine, rdx mov rdx, ZoneMThMinPr add rdx, rax mov ZoneMThMinAddr, rdx mov ZoneMThMinLine, rdx pxor xmm0, xmm0 LOOP_1: jmp LOOP_1_CHECK LOOP_1_TAIL: jmp PAIRING_VERT _return_PAIRING_VERT: add ix, 010h mov rax, eyPtrn1 mov eyPtrn, rax mov rax, pMatch1 mov pMatch, rax add ZoneThAddrLine, 020h mov rax, ZoneThAddrLine mov ZoneThAddr, rax add ZoneIdAddrLine, 020h mov rax, ZoneIdAddrLine mov ZoneIdAddr, rax add ZoneAddAddrLine, 020h mov rax, ZoneAddAddrLine mov ZoneAddAddr, rax add ZoneMThAddrLine, 020h mov rax, ZoneMThAddrLine mov ZoneMThAddr, rax add ZoneMAddAddrLine, 020h mov rax, ZoneMAddAddrLine mov ZoneMAddAddr, rax add ZoneMThMinLine, 020h mov rax, ZoneMThMinLine mov ZoneMThMinAddr, rax LOOP_1_CHECK: cmp ix, InspRight ; xÃà BED Check jge END_FUNC LOOP_1_BODY: mov iy, InspTop mov rax, BuffWidth ; À̹ÌÁö ¾îµå·¹½º Set mul iy add rax, ix add rax, ImgAddrOri mov rrImgAddr, rax jmp MAKE_CONBUFF_HEAD _return_MAKE_CONBUFF: mov iy, InspTop mov rrImgAddr, ConAddr cmp ix, exPtrn ; ÆÐÅÏ °Ë»ç BD_RD Check jge CHECK_1_BOUND _return_CHECK_1_BOUND: LOOP_2: jmp LOOP_2_CHECK LOOP_2_TAIL: inc iy add rrImgAddr, 20h mov rax, ZoneTableW2 add ZoneThAddr, rax add ZoneIdAddr, rax add ZoneAddAddr, rax add ZoneMThAddr, rax add ZoneMAddAddr, rax add ZoneMThMinAddr, rax LOOP_2_CHECK: cmp iy, ConBottom ; BED Check jge LOOP_1_TAIL cmp iy, eyPtrn ; BD_AD Check jge CHECK_2_BOUND _return_CHECK_2_BOUND: LOOP_2_BODY: jmp XMM_MAKE _return_XMM_MAKE: jmp XMM_COMPARE _return_XMM_COMPARE: jmp LOOP_2_TAIL ;;;;;;;================================================= MAKE_CONBUFF_HEAD: mov rcx, BuffWidth mov rax, ConAddr MAKE_CONBUFF: movdqu xxSrc1, [rrImgAddr] movdqa xxSrc2, xxSrc1 punpcklbw xxSrc1, xmm0 punpckhbw xxSrc2, xmm0 movdqu [rax], xxSrc1 movdqu [rax+ 10h], xxSrc2 add rrImgAddr, rcx add rax, 20h inc iy cmp iy, InspBottom jle MAKE_CONBUFF jmp _return_MAKE_CONBUFF CHECK_1_BOUND: ; ´ÙÀ½ Zone offset±¸Çϱâ, pMatch, exPtrn, eyPtrn add pMatch1, szxMatch ; ZoneThreshold Offset °è»ê(zOffset) mov rcx, pMatch1 add rcx, szyMatch mov pMatch, rcx ; ZoneThreshold Offset °è»ê(zOffset) movsxd rbx, dword ptr[rcx+ 4] mov yMatch, ebx mov rdx, dyPtrn add rdx, rbx mov eyPtrn, rdx ; eyPtrn mov eyPtrn1, rdx mov rax, iy sub rax, rbx mul ZoneTableW ; y*width movsxd rbx, dword ptr[rcx] mov xMatch, ebx mov rdx, dxPtrn ; exPtrn add rdx, rbx mov rcx, rdx add rcx, dxPtrn cmp rcx, InspRight jl EXCESS_1_BOUND_PASS mov rdx, rcx EXCESS_1_BOUND_PASS: mov exPtrn, rdx mov rdx, ix sub rdx, rbx add rax, rdx ; offset= y*width+ x add rax, rax mov rdx, ZoneThAddrPr add rdx, rax mov ZoneThAddr, rdx mov ZoneThAddrLine, rdx mov rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx mov ZoneIdAddrLine, rdx mov rdx, ZoneAddAddrPr add rdx, rax mov ZoneAddAddr, rdx mov ZoneAddAddrLine, rdx mov rdx, ZoneMThAddrPr add rdx, rax mov ZoneMThAddr, rdx mov ZoneMThAddrLine, rdx mov rdx, ZoneMAddAddrPr add rdx, rax mov ZoneMAddAddr, rdx mov ZoneMAddAddrLine, rdx mov rdx, ZoneMThMinPr add rdx, rax mov ZoneMThMinAddr, rdx mov ZoneMThMinLine, rdx inc xMatch2 _return _return_CHECK_1_BOUND CHECK_2_BOUND: ; ´ÙÀ½ Zone offset±¸Çϱâ, eyPtrn, (exPtrnÀº LOOP_1 ¿¡¼­¸¸ ±¸ÇÔ) mov rcx, szyMatch add pMatch, rcx ; ZoneThreshold Offset °è»ê(zOffset) mov rcx, pMatch movsxd rbx, dword ptr[rcx+ 4] mov yMatch, ebx mov rdx, dyPtrn add rdx, rbx mov rax, rdx add rax, dyPtrn cmp rax, InspBottom jl EXCESS_2_BOUND_PASS mov rdx, rax EXCESS_2_BOUND_PASS: mov eyPtrn, rdx ; eyPtrn mov rax, iy sub rax, rbx mul ZoneTableW ; y*width movsxd rbx, dword ptr[rcx] mov xMatch, ebx mov rdx, ix sub rdx, rbx add rax, rdx ; offset= y*width+ x add rax, rax mov rdx, ZoneThAddrPr add rdx, rax mov ZoneThAddr, rdx mov rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx mov rdx, ZoneAddAddrPr add rdx, rax mov ZoneAddAddr, rdx mov rdx, ZoneMThAddrPr add rdx, rax mov ZoneMThAddr, rdx mov rdx, ZoneMAddAddrPr add rdx, rax mov ZoneMAddAddr, rdx mov rdx, ZoneMThMinPr add rdx, rax mov ZoneMThMinAddr, rdx _return _return_CHECK_2_BOUND XMM_MAKE: movdqu xxSrc1, [rrImgAddr] movdqu xxSrc2, [rrImgAddr+ 10h] mov rax, rrImgAddr add rax, ConvPitch movdqu xxCmp1, [rax] movdqu xxCmp2, [rax+ 10h] pmullw xxCmp1, xxfSpr ; Compare SPR (fSPR, sSPR) pmullw xxCmp2, xxfSpr movdqu xxTemp, [rax+ 20h] movdqu xxDSlide, [rax+ 30h] pmullw xxTemp, xxsSpr paddw xxCmp1, xxTemp pmullw xxDSlide, xxsSpr paddw xxCmp2, xxDSlide psrlw xxCmp1, SprShift psrlw xxCmp2, SprShift _return _return_XMM_MAKE XMM_COMPARE_END: sub ix, 10h sub ZoneThAddr, 010h sub ZoneIdAddr, 010h sub ZoneAddAddr, 010h sub ZoneMThAddr, 010h sub ZoneMAddAddr, 010h sub ZoneMThMinAddr, 010h _return _return_XMM_COMPARE XMM_COMPARE: mov c8Pixel, 0 ; jmp _XMM_COMPARE_8PIXEL jmp _XMM_COMPARE_MTH _return_XMM_COMPARE_8PIXEL: _return_XMM_COMPARE_MTH: cmp rrNoD, maxDefect ; BED Check jge PAIRING_VERT inc c8Pixel cmp c8Pixel, 2 je XMM_COMPARE_END ; BE_RD CHECK movdqa xxSrc1, xxSrc2 movdqa xxCmp1, xxCmp2 add ZoneThAddr, 010h add ZoneIdAddr, 010h add ZoneAddAddr, 010h add ZoneMThAddr, 010h add ZoneMAddAddr, 010h add ZoneMThMinAddr, 010h jmp _XMM_COMPARE_MTH ; RD _XMM_COMPARE_8PIXEL: mov rax, ZoneThAddr movdqu xxTemp, [rax] mov rax, ZoneAddAddr movdqu xxDSlide, [rax] pminuw xxSrc1, xxSupp pminuw xxCmp1, xxSupp movdqa xxZTh, xxSrc1 pmaxuw xxZTh, xxCmp1 pmullw xxZTh, xxDSlide psrlw xxZTh, 8 paddw xxZTh, xxTemp movdqa xxPeakS, xxSrc1 psubsw xxPeakS, xxCmp1 pabsw xxPeakAbs, xxPeakS movdqa xxTemp, xxPeakAbs pcmpgtw xxTemp, xxZTh pmovmskb rax, xxTemp cmp rax, 0 ; BD_E Check jne DEFECT_00 add ix, 8 _return _return_XMM_COMPARE_8PIXEL _XMM_COMPARE_MTH: mov rax, ZoneMThMinAddr movdqu xxTemp, [rax] movdqa xxZTh, xxSrc1 pmaxuw xxZTh, xxCmp1 movdqa xxZTh2, xxZTh movdqa xxFlag, xxZTh pcmpgtw xxFlag, xxTemp mov rax, ZoneMAddAddr ; Second Threshold Àû¿ë movdqu xxDSlide, [rax] pmullw xxZTh2, xxDSlide psrlw xxZTh2, 8 mov rax, ZoneMThAddr movdqu xxDSlide, [rax] paddw xxZTh2, xxDSlide pand xxZTh2, xxFlag pcmpeqw xxTemp, xxTemp pandn xxFlag, xxTemp mov rax, ZoneAddAddr ; First Threshold Àû¿ë movdqu xxDSlide, [rax] pmullw xxZTh, xxDSlide ; Overflow °¡´É¼º psrlw xxZTh, 8 mov rax, ZoneThAddr movdqu xxDSlide, [rax] paddw xxZTh, xxDSlide pand xxZTh, xxFlag por xxZTh, xxZTh2 movdqa xxPeakS, xxSrc1 psubsw xxPeakS, xxCmp1 pabsw xxPeakAbs, xxPeakS movdqa xxTemp, xxPeakAbs pcmpgtw xxTemp, xxZTh pmovmskb rax, xxTemp cmp rax, 0 jne DEFECT_00 add ix, 8 _return _return_XMM_COMPARE_MTH DEFECT_00: mov rax, ZoneIdAddr movdqu xxZId, [rax] pextrw rax, xxTemp, 0h cmp rax, 0 je DEFECT_01 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 0h mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 0h mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 0h mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw ebx, xxZTh, 0h mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 0h cmp ax, 0 jg WHITE_00 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 0h sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_01 WHITE_00: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_01: inc ix pextrw rax, xxTemp, 1 cmp rax, 0 je DEFECT_02 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 1 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 1 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 1 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 1 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 1 cmp ax, 0 jg WHITE_01 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_02 WHITE_01: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_02: inc ix pextrw rax, xxTemp, 2 cmp rax, 0 je DEFECT_03 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 2 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 2 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 2 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 2 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 2 cmp ax, 0 jg WHITE_02 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 2 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_03 WHITE_02: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_03: inc ix pextrw rax, xxTemp, 3 cmp rax, 0 je DEFECT_04 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 3 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 3 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 3 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 3 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 3 cmp ax, 0 jg WHITE_03 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 3 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_04 WHITE_03: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_04: inc ix pextrw rax, xxTemp, 4 cmp rax, 0 je DEFECT_05 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 4 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 4 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 4 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 4 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 4 cmp ax, 0 jg WHITE_04 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 4 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_05 WHITE_04: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_05: inc ix pextrw rax, xxTemp, 5 cmp rax, 0 je DEFECT_06 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 5 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 5 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 5 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 5 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 5 cmp ax, 0 jg WHITE_05 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 5 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_06 WHITE_05: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_06: inc ix pextrw rax, xxTemp, 6 cmp rax, 0 je DEFECT_07 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 6 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 6 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 6 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 6 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 6 cmp ax, 0 jg WHITE_06 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 6 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_07 WHITE_06: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_07: inc ix pextrw rax, xxTemp, 7 cmp rax, 0 je DEFECT_08 mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 pextrw eax, xxSrc1, 7 mov [rrSrcD+ 4*rrNoD], eax pextrw eax, xxCmp1, 7 mov [rrCmpD+ 4*rrNoD], eax mov rcx, ZoneId pextrw eax, xxZId, 7 mov dword ptr [rcx+ 4*rrNoD], eax mov rcx, ZoneTh pextrw rbx, xxZTh, 7 mov dword ptr[rcx+ 4*rrNoD], ebx pextrw rax, xxPeakS, 7 cmp ax, 0 jg WHITE_07 mov word ptr[rrToD+ 2*rrNoD], 0 pextrw rax, xxPeakAbs, 7 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD jmp DEFECT_08 WHITE_07: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_08: inc ix _return _return_XMM_COMPARE_8PIXEL PAIRING_VERT: ; JMP _return_PAIRING_VERT mov iy, -1 LOOP_PAIR_NUM: inc iy cmp iy, rrNoD jge LOOP_PAIR_NUM_END mov rax, nPair cmp rax, MaxPair jge END_FUNC movsx rdx, word ptr [rrToD+ 2*iy] cmp rdx, 3 ; check type DEFTYPE_NODEFECT= 3, DEFTYPE_DELETE= 4 jge LOOP_PAIR_NUM mov rbx, iy movsxd rcx, dword ptr [rrYoD+ 4*iy] mov rax, rcx add rax, iPitchHUp ; mov yPlusPitch, rax movsxd rrImgAddr, dword ptr[rrXoD+ 4*iy] ; Filter_2_Pair_XPosition cmp rcx, pairBottom jg PAIR_BOTTOM cmp rcx, pairTop jge PAIR_CENTER PAIR_TOP: inc rbx cmp rbx, rrNoD jge PAIR_TOP_UNPAIR movsxd rdx, dword ptr[rrYoD+ 4*rbx] ; Filter_1_Pair_YPosition cmp rdx, rax ; cmp rdx, yPlusPitch jl PAIR_TOP jg PAIR_TOP_UNPAIR movsxd rcx, dword ptr[rrXoD+ 4*rbx] cmp rrImgAddr, rcx jne PAIR_TOP movzx rrImgAddr, word ptr[rrToD+ 2*rbx] ; Filter_3_TYPE_DELETE cmp rrImgAddr, 3 jge LOOP_PAIR_NUM ; jge PAIR_TOP ;Filte_1_ÀÇ Á¶°ÇÀÌ (+-1)·Î ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov ax, word ptr[rrToD+ 2*iy] ; Filter_4_TYPE_PAIR cmp ax, rwImgAddr je LOOP_PAIR_NUM ; jge PAIR_TOP ;Filte_1_ÀÇ Á¶°ÇÀÌ ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov word ptr [rrToD+ 2*rbx], 4 mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ecx mov (astPair ptr [rax]).y, edx mov (astPair ptr [rax]).dtype, rdImgAddr movsx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, edx mov edx, [rrSrcD+ 4*rbx] mov (astPair ptr [rax]).src, edx mov edx, [rrCmpD+ 4*rbx] mov (astPair ptr [rax]).ref, edx mov rdx, ZoneId mov edx, [rdx+ 4*rbx] mov (astPair ptr [rax]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*rbx] mov (astPair ptr [rax]).thre, edx add rax, PairSize mov PairAddr, rax inc nPair jmp LOOP_PAIR_NUM PAIR_TOP_UNPAIR: cmp bUseUnpair, 1 jne LOOP_PAIR_NUM mov rcx, PairAddr mov (astPair ptr [rcx]).pos, 1 mov (astPair ptr [rcx]).pair, 5 mov (astPair ptr [rcx]).x, rdImgAddr sub rax, iPitchHUp mov (astPair ptr [rcx]).y, eax movzx edx, word ptr[rrToD+ 2*iy] mov (astPair ptr [rcx]).dtype, edx movsx edx, word ptr[rrPoD+ 2*iy] mov (astPair ptr [rcx]).peak, edx mov edx, [rrSrcD+ 4*iy] mov (astPair ptr [rcx]).src, edx mov edx, [rrCmpD+ 4*iy] mov (astPair ptr [rcx]).ref, edx mov rdx, ZoneId mov edx, [rdx+ 4*iy] mov (astPair ptr [rcx]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*iy] mov (astPair ptr [rcx]).thre, edx add rcx, PairSize mov PairAddr, rcx inc nPair jmp LOOP_PAIR_NUM PAIR_CENTER: inc rbx cmp rbx, rrNoD jge LOOP_PAIR_NUM movsxd rdx, dword ptr[rrYoD+ 4*rbx] ; Filter_1_Pair_YPosition cmp rdx, rax ; cmp rdx, yPlusPitch jl PAIR_CENTER jg LOOP_PAIR_NUM ; movsxd rrImgAddr, dword ptr[rrXoD+ 4*iy] ; Filter_2_Pair_XPosition movsxd rcx, dword ptr[rrXoD+ 4*rbx] cmp rrImgAddr, rcx jne PAIR_CENTER movzx rrImgAddr, word ptr[rrToD+ 2*rbx] ; Filter_3_TYPE_DELETE cmp rrImgAddr, 3 jge LOOP_PAIR_NUM ; jge PAIR_CENTER ;Filte_1_ÀÇ Á¶°ÇÀÌ (+-1)·Î ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov ax, word ptr[rrToD+ 2*iy] ; Filter_4_TYPE_PAIR cmp ax, rwImgAddr je LOOP_PAIR_NUM ; jge PAIR_CENTER ;Filte_1_ÀÇ Á¶°ÇÀÌ ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov word ptr [rrToD+ 2*rbx], 4 mov rax, PairAddr mov (astPair ptr [rax]).pos, 2 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ecx mov (astPair ptr [rax]).y, edx mov (astPair ptr [rax]).dtype, rdImgAddr movsx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, edx mov edx, [rrSrcD+ 4*rbx] mov (astPair ptr [rax]).src, edx mov edx, [rrCmpD+ 4*rbx] mov (astPair ptr [rax]).ref, edx mov rdx, ZoneId mov edx, [rdx+ 4*rbx] mov (astPair ptr [rax]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*rbx] mov (astPair ptr [rax]).thre, edx add rax, PairSize mov PairAddr, rax inc nPair jmp LOOP_PAIR_NUM PAIR_BOTTOM: ; ¾Õ¿¡¼­ pairingÀÌ µÇÁö ¾ÊÀ¸¸é ´õÀÌ»ó pairing ÇÒ ¼ö ¾ø´Ù. ¹«Á¶°Ç unpairÀÌ´Ù. cmp bUseUnpair, 1 jne LOOP_PAIR_NUM mov rcx, PairAddr mov (astPair ptr [rcx]).pos, 3 mov (astPair ptr [rcx]).pair, 5 mov (astPair ptr [rcx]).x, rdImgAddr mov (astPair ptr [rcx]).y, eax inc edx and edx, 1 mov (astPair ptr [rcx]).dtype, edx movsx edx, word ptr[rrPoD+ 2*iy] mov (astPair ptr [rcx]).peak, edx mov edx, [rrSrcD+ 4*iy] mov (astPair ptr [rcx]).ref, edx mov edx, [rrCmpD+ 4*iy] mov (astPair ptr [rcx]).src, edx mov rdx, ZoneId mov edx, [rdx+ 4*iy] mov (astPair ptr [rcx]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*iy] mov (astPair ptr [rcx]).thre, edx add rcx, PairSize mov PairAddr, rcx inc nPair jmp LOOP_PAIR_NUM LOOP_PAIR_NUM_END: mov rrNoD, 0 jmp _return_PAIRING_VERT END_FUNC: add ix32, 10h mov rax, endLine mov [rax], ix32 mov rax, nPair ; return rrNoD pop rbx pop rsi pop rdi pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 RET ConvZoneMVert2S ENDP ; Function End ----------------------------------ConvZoneVert2-------- end