.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 .code 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] piPitch equ qword ptr[rbp+ 98h] pfSPR equ qword ptr[rbp+ 0a0h] psSPR 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] bRFilter equ qword ptr[rbp+ 100h] iPitch equ qword ptr[rbp+ 108h] szyMatch equ qword ptr[rbp+ 110h] 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 xxSrc3 equ xmm12 xxSrc4 equ xmm13 xxCmp3 equ xmm14 xxCmp4 equ xmm15 xxSupp equ xmm12 xxDStart equ xmm13 ; ÃʱâÄ¡ xxDSlope equ xmm14 ; ±â¿ï±â xxDMin equ xmm15 ; Àû¿ë ±¸°£ ÃÖ¼ÒÄ¡ ; ÆÄ¶ó¹ÌÅÍ ; ·ÎÄà º¯¼ö ConvZoneDPC PROC local maxDefect : qword local ImgAddrOri : qword local ZoneThAddr : qword local ZoneIdAddr : qword local ZoneThAddr1 : qword ; First Loop ½ÃÀ۽à °áÁ¤, ´ÙÀ½ ·çÇÁÈÄ ¿øº¹¿£ Plus local ZoneIdAddr1 : qword ; First Loop ½ÃÀ۽à °áÁ¤, ´ÙÀ½ ·çÇÁÈÄ ¿øº¹¿£ Plus local ZoneTableW2 : qword ; 2Byte¸¦ °í·ÁÇÑ Width of Byte local pMatch1 : qword local exPtrn : qword local exPtrn1 : qword local eyPtrn : qword local pairLeft : qword local pairRight : qword local iPitchHUp : qword local iPitchDpc : 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, 098h mov ImgAddrOri, rcx mov maxDefect, r8 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 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 rax, InspRight sub rax, InspLeft sub rax, iPitch ; add rax, 15 sar rax, 4 sal rax, 4 add rax, InspLeft mov InspRight, rax sub rax, iPitch mov pairRight, rax mov rax, InspLeft add rax, iPitch mov pairLeft, rax mov rax, ZoneTableW add rax, rax mov ZoneTableW2, rax mov ix, InspLeft mov iy, InspTop mov rrXoD, DefectX mov rrYoD, DefectY mov rrToD, DefectType mov rrPoD, DefectVal mov rrSrcD, GraySrc mov rrCmpD, GrayCmp ; mov rrZIdD, ZoneID ; mov rrZThD, ZoneTh mov rcx, pMatch ; ´ÙÀ½ Zone offset±¸Çϱâ, pMatch, exPtrn, eyPtrn mov pMatch1, rcx ; ZoneThreshold Offset °è»ê(zOffset) add pMatch, szxMatch ; ZoneThreshold Offset °è»ê(zOffset) movsxd rbx, dword ptr[rcx+ 4] mov yMatch, ebx mov rdx, dyPtrn add rdx, rbx mov eyPtrn, rdx ; eyPtrn 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 exPtrn1, 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 ZoneThAddr1, rdx mov rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx mov ZoneIdAddr1, rdx pxor xmm0, xmm0 LOOP_1: jmp LOOP_1_CHECK LOOP_1_TAIL: jmp PAIRING _return_PAIRING: inc iy mov rax, exPtrn1 mov exPtrn, rax mov rax, pMatch1 mov pMatch, rax mov rax, ZoneThAddr1 add rax, ZoneTablew2 mov ZoneThAddr1, rax mov ZoneThAddr, rax mov rax, ZoneIdAddr1 add rax, ZoneTablew2 mov ZoneIdAddr1, rax mov ZoneIdAddr, rax LOOP_1_CHECK: cmp iy, InspBottom jge END_FUNC LOOP_1_BODY: mov ix, InspLeft mov rax, BuffWidth ; À̹ÌÁö ¾îµå·¹½º Set mul iy add rax, ix add rax, ImgAddrOri mov rrImgAddr, rax cmp iy, eyPtrn jge CHECK_1_BOUND _return_CHECK_1_BOUND: LOOP_2: jmp LOOP_2_CHECK LOOP_2_TAIL: add rrImgAddr, 010h LOOP_2_CHECK: cmp ix, InspRight jge LOOP_1_TAIL cmp ix, exPtrn jge CHECK_2_BOUND _return_CHECK_2_BOUND: LOOP_2_BODY: jmp DPC_MAKE _return_DPC_MAKE: jmp XMM_MAKE _return_XMM_MAKE: jmp XMM_COMPARE _return_XMM_COMPARE: jmp LOOP_2_TAIL ;;;;;;;================================================= CHECK_1_BOUND: ; ´ÙÀ½ Zone offset±¸Çϱâ, pMatch, exPtrn, eyPtrn mov rcx, szyMatch add pMatch1, rcx ; ZoneThreshold Offset °è»ê(zOffset) mov rcx, pMatch1 mov pMatch, rcx ; ZoneThreshold Offset °è»ê(zOffset) add pMatch, szxMatch movsxd rbx, dword ptr[rcx+ 4] mov yMatch, ebx mov rdx, dyPtrn add rdx, rbx mov rax, rdx add rax, dyPtrn cmp rax, InspBottom jle EXCESS_1_BOUND mov rdx, rax EXCESS_1_BOUND: mov eyPtrn, rdx ; eyPtrn 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 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 ZoneThAddr1, rdx mov rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx mov ZoneIdAddr1, rdx inc xMatch2 _return _return_CHECK_1_BOUND CHECK_2_BOUND: ; ´ÙÀ½ Zone offset±¸Çϱâ, pMatch, exPtrn, eyPtrn mov rcx, pMatch ; ZoneThreshold Offset °è»ê(zOffset) add pMatch, szxMatch movsxd rbx, dword ptr[rcx] mov xMatch2, ebx mov rdx, dxPtrn add rdx, rbx mov rax, rdx add rax, dxPtrn cmp rax, InspRight jl EXCESS_2_BOUND mov rdx, rax EXCESS_2_BOUND: mov exPtrn, rdx ; eyPtrn mov rdx, ix mov rdx, ix sub rdx, rbx movsxd rbx, dword ptr[rcx+ 4] mov yMatch2, ebx mov rax, iy sub rax, rbx mov rbx, rdx mul ZoneTableW ; y*width add rax, rbx ; offset= y*width+ x add rax, rax mov rdx, ZoneThAddrPr add rdx, rax mov ZoneThAddr, rdx ; mov ZoneThAddr1, rdx mov rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx ; mov ZoneIdAddr1, rdx _return _return_CHECK_2_BOUND DPC_MAKE: mov rax, ix sar rax, 4 sal rax, 5 ; mov ix2, rax mov rcx, piPitch add rcx, rax movsx rdx, word ptr[rcx] mov iPitchDpc, rdx ;iPitchDpc, rdx mov rcx, pfSPR add rcx, rax movdqu xxfSpr, [rcx] mov rcx, psSPR add rcx, rax movdqu xxsSpr, [rcx] _return _return_DPC_MAKE XMM_MAKE: movdqu xxSrc1, [rrImgAddr] movdqa xxSrc2, xxSrc1 punpcklbw xxSrc1, xmm0 ; Unpack punpckhbw xxSrc2, xmm0 mov rax, rrImgAddr add rax, iPitchDpc ; Compare Buffer (iPitch*fSPR + iPitchNext*sSPR) - Suppress - Unpack - *SPR movdqu xxCmp1, [rax] movdqa xxCmp4, xxCmp1 movdqa xxCmp2, xxCmp1 punpcklbw xxCmp1, xmm0 ; Unpack punpckhbw xxCmp2, xmm0 pmullw xxCmp1, xxfSpr ; Compare SPR (fSPR, sSPR) pmullw xxCmp2, xxfSpr movdqu xxCmp3, [rax+ 1] movdqu xxTemp, xxCmp3 punpcklbw xxTemp, xmm0 pmullw xxTemp, xxsSpr paddw xxCmp1, xxTemp movdqu xxTemp, xxCmp3 punpckhbw xxTemp, xmm0 pmullw xxTemp, xxsSpr paddw xxCmp2, xxTemp psrlw xxCmp1, SprShift psrlw xxCmp2, SprShift _return _return_XMM_MAKE XMM_COMPARE: mov c8Pixel, 0 jmp _XMM_COMPARE_8PIXEL _return_XMM_COMPARE_8PIXEL: cmp rrNoD, maxDefect ; BED Check jge END_FUNC inc ix add ZoneThAddr, 010h add ZoneIdAddr, 010h inc c8Pixel cmp c8Pixel, 2 je _return_XMM_COMPARE ; BE_RD CHECK movdqa xxSrc1, xxSrc2 movdqa xxCmp1, xxCmp2 ;jmp _XMM_COMPARE_8PIXEL ; RD _XMM_COMPARE_8PIXEL: mov rax, ZoneThAddr movdqu xxZTh, [rax] 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, 7 _return _return_XMM_COMPARE_8PIXEL _XMM_COMPARE_VERIFY: cmp bRFilter, 1 jne DEFECT_00 ; ¼öÁ¤ÇØ¾ß µÈ´Ù.. xxSrc3À» ·ÎµùÇØ¾ßÇÑ´Ù. movdqu xxSrc3, [rrImgAddr- 1] movdqa xxSrc4, xxSrc3 punpcklbw xxSrc3, xmm0 punpckhbw xxSrc4, xmm0 cmp c8Pixel, 1 jge COMPARE_VERIFY_LOAD_SECOND movdqa xxCmp3, xxCmp4 punpcklbw xxCmp3, xmm0 jmp COMPARE_VERIFY_LOAD_END COMPARE_VERIFY_LOAD_SECOND: movdqa xxSrc3, xxSrc4 movdqa xxCmp3, xxCmp4 punpckhbw xxCmp3, xmm0 COMPARE_VERIFY_LOAD_END: pmullw xxSrc3, xxsSpr movdqa xxZId, xxfSpr pmullw xxZId, xxSrc1 paddw xxSrc3, xxZId psrlw xxSrc3, SprShift psubsw xxSrc3, xxCmp3 pabsw xxSrc3, xxSrc3 pcmpgtw xxSrc3, xxZTh pand xxTemp, xxSrc3 pmovmskb rax, xxTemp cmp rax, 0 jne DEFECT_00 add ix, 7 _return _return_XMM_COMPARE_8PIXEL 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 rbx, 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 _return_XMM_COMPARE_8PIXEL 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 _return_XMM_COMPARE_8PIXEL WHITE_07: mov word ptr[rrToD+ 2*rrNoD], 1 sub rax, rbx mov word ptr[rrPoD+ 2*rrNoD], ax inc rrNoD _return _return_XMM_COMPARE_8PIXEL PAIRING: ;_return _return_PAIRING mov ix, -1 LOOP_PAIR_NUM: inc ix cmp ix, rrNoD jge LOOP_PAIR_NUM_END mov rax, nPair cmp rax, MaxPair jge END_FUNC cmp word ptr [rrToD+ 2*ix], 3 ; chek type DEFTYPE_NODEFECT= 3, DEFTYPE_DELETE= 4 jge LOOP_PAIR_NUM mov rbx, ix movsxd rdx, dword ptr[rrXoD+ 4*ix] ; Filter_2_Pair_XPosition mov rcx, rdx add rcx, iPitchHUp cmp rdx, pairLeft jl PAIR_LEFT cmp rdx, pairRight jle PAIR_CENTER PAIR_RIGHT: mov word ptr[rrToD+ 2*ix], 4 mov rax, PairAddr mov (astPair ptr [rax]).pos, 3 mov (astPair ptr [rax]).pair, 5 mov (astPair ptr [rax]).x, ecx mov ecx, dword ptr[rrYod+ 4*ix] mov (astPair ptr [rax]).y, ecx mov cx, word ptr [rrToD+ 2*ix] cmp cx, 0 je TYPE_1 mov (astPair ptr [rax]).dtype, 0 jmp TYPE_END TYPE_1: mov (astPair ptr [rax]).dtype, 1 TYPE_END: movsx edx, word ptr[rrPoD+ 2*ix] mov (astPair ptr [rax]).peak, edx mov edx, [rrSrcD+ 4*ix] mov (astPair ptr [rax]).src, edx mov edx, [rrCmpD+ 4*ix] mov (astPair ptr [rax]).ref, edx mov rdx, ZoneId mov edx, [rdx+ 4*ix] mov (astPair ptr [rax]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*ix] mov (astPair ptr [rax]).thre, edx add rax, PairSize mov PairAddr, rax inc nPair jmp LOOP_PAIR_NUM PAIR_LEFT: inc rbx cmp rbx, rrNoD jge PAIR_LEFT_UNPAIR mov eax, dword ptr[rrXoD+ 4*rbx] cmp eax, ecx jl PAIR_LEFT jg PAIR_LEFT_UNPAIR movzx edx, word ptr[rrToD+ 2*rbx] ; Filter_2_TYPE_DELETE cmp dx, 3 jge PAIR_LEFT mov ax, word ptr[rrToD+ 2*ix] ; Filter_3_TYPE_PAIR cmp ax, dx je PAIR_LEFT 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 ecx, dword ptr[rrYoD+ 4*rbx] mov (astPair ptr [rax]).y, ecx mov (astPair ptr [rax]).dtype, edx 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_LEFT_UNPAIR: mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 5 mov ecx, dword ptr[rrXoD+ 4*ix] ; Filter_2_Pair_XPosition mov (astPair ptr [rax]).x, ecx mov ecx, dword ptr[rrYoD+ 4*ix] mov (astPair ptr [rax]).y, ecx movsx edx, word ptr[rrToD+ 2*ix] ; Filter_3_TYPE_PAIR mov (astPair ptr [rax]).dtype, edx movsx edx, word ptr[rrPoD+ 2*ix] mov (astPair ptr [rax]).peak, edx mov edx, [rrSrcD+ 4*ix] mov (astPair ptr [rax]).src, edx mov edx, [rrCmpD+ 4*ix] mov (astPair ptr [rax]).ref, edx mov rdx, ZoneId mov edx, [rdx+ 4*ix] mov (astPair ptr [rax]).zone, edx mov rdx, ZoneTh mov edx, [rdx+ 4*ix] mov (astPair ptr [rax]).thre, edx add rax, PairSize mov PairAddr, rax inc nPair jmp LOOP_PAIR_NUM jmp LOOP_PAIR_NUM PAIR_CENTER: inc rbx cmp rbx, rrNoD jge LOOP_PAIR_NUM mov eax, dword ptr[rrXoD+ 4*rbx] cmp eax, ecx jl PAIR_CENTER jg PAIR_CENTER_UNPAIR movzx edx, word ptr[rrToD+ 2*rbx] ; Filter_2_TYPE_DELETE cmp dx, 3 jge PAIR_CENTER mov ax, word ptr[rrToD+ 2*ix] ; Filter_3_TYPE_PAIR cmp ax, dx je PAIR_CENTER 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 ecx, dword ptr[rrYoD+ 4*rbx] mov (astPair ptr [rax]).y, ecx mov (astPair ptr [rax]).dtype, edx movsx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, edx mov edx, dword ptr[rrSrcD+ 4*rbx] mov (astPair ptr [rax]).src, edx mov edx, dword ptr[rrCmpD+ 4*rbx] mov (astPair ptr [rax]).ref, edx mov rdx, ZoneId mov edx, dword ptr[rdx+ 4*rbx] mov (astPair ptr [rax]).zone, edx mov rdx, ZoneTh mov edx, dword ptr[rdx+ 4*rbx] mov (astPair ptr [rax]).thre, edx add rax, PairSize mov PairAddr, rax inc nPair jmp LOOP_PAIR_NUM PAIR_CENTER_UNPAIR: jmp LOOP_PAIR_NUM LOOP_PAIR_NUM_END: mov rrNoD, 0 _return _return_PAIRING END_FUNC: ;mov rax, rrNoD ; return rrNoD mov rax, nPair ; return rrNoD pop rbx pop rsi pop rdi pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop rbp RET ConvZoneDPC ENDP end