; ConvZone2 ; 2011.05.20 ; ConvZone¿¡ Zoneº° Dynamic Threshold Ãß°¡ ÀÛ¾÷Áß. ZoneDTH .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 ;szyMatch equ 1600 .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] 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] bUseUnpair equ qword ptr[rbp+ 118h] endLine equ qword ptr[rbp+ 120h] ThSuppress equ qword ptr[rbp+ 128h] 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 xxSupp equ xmm12 xxDStart equ xmm13 ; ÃʱâÄ¡ xxDSlide equ xmm14 ; ±â¿ï±â xxDMin equ xmm15 ; Àû¿ë ±¸°£ ÃÖ¼ÒÄ¡ ; ÆÄ¶ó¹ÌÅÍ ; ·ÎÄà º¯¼ö ConvZone2 PROC local maxDefect : qword local ImgAddrOri : qword local ZoneThAddr : qword local ZoneIdAddr : qword local ZoneAddAddr : qword local ZoneThAddr1 : qword local ZoneIdAddr1 : qword local ZoneAddAddr1 : qword local ZoneTableW2 : qword local pMatch1 : qword local exPtrn : qword local exPtrn1 : qword local eyPtrn : qword local pairLeft : qword local pairRight : qword local iPitchHUp : 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, 0a0h 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 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 mov rdx, ZoneAddAddrPr add rdx, rax mov ZoneAddAddr, rdx mov ZoneAddAddr1, 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 mov rax, ZoneAddAddr1 add rax, ZoneTablew2 mov ZoneAddAddr1, rax mov ZoneAddAddr, 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 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 mov rdx, ZoneAddAddrPr add rdx, rax mov ZoneAddAddr, rdx mov ZoneAddAddr1, 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 rdx, ZoneIdAddrPr add rdx, rax mov ZoneIdAddr, rdx mov rdx, ZoneAddAddrPr add rdx, rax mov ZoneAddAddr, rdx _return _return_CHECK_2_BOUND XMM_MAKE: movdqu xxSrc1, [rrImgAddr] movdqa xxSrc2, xxSrc1 ; PMOVZXBW xxSrc1,[rax] ; PMOVZXBW xxSrc2,[rax+ 8] punpcklbw xxSrc1, xmm0 ; Unpack punpckhbw xxSrc2, xmm0 mov rax, rrImgAddr add rax, iPitch ; Compare Buffer (iPitch*fSPR + iPitchNext*sSPR) - Suppress - Unpack - *SPR movdqu xxCmp1, [rax] movdqa xxCmp2, xxCmp1 punpcklbw xxCmp1, xmm0 ; Unpack punpckhbw xxCmp2, xmm0 pmullw xxCmp1, xxfSpr ; Compare SPR (fSPR, sSPR) pmullw xxCmp2, xxfSpr movdqu xxDMin, [rax+ 1] movdqa xxTemp, xxDMin punpcklbw xxTemp, xmm0 ; PMOVZXBW xxTemp,[rax+ 1] pmullw xxTemp, xxsSpr paddw xxCmp1, xxTemp movdqa xxTemp, xxDMin punpckhbw xxTemp, xmm0 ; PMOVZXBW xxTemp,[rax+ 9] 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 PAIRING inc ix add ZoneThAddr, 010h add ZoneIdAddr, 010h add ZoneAddAddr, 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 mov rbx, ZoneAddAddr movdqu xxTemp, [rax] movdqu xxDSlide, [rbx] 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, 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: cmp bUseUnpair, 1 jne LOOP_PAIR_NUM 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 movsx ecx, word ptr [rrToD+ 2*ix] inc ecx and ecx, 1 mov (astPair ptr [rax]).dtype, ecx movsx edx, word ptr[rrPoD+ 2*ix] mov (astPair ptr [rax]).peak, edx mov edx, [rrSrcD+ 4*ix] mov (astPair ptr [rax]).ref, edx mov edx, [rrCmpD+ 4*ix] mov (astPair ptr [rax]).src, 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: cmp bUseUnpair, 1 jne LOOP_PAIR_NUM 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: add iy32, 1 mov rax, endLine mov [rax], iy32 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 ConvZone2 ENDP end