.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 .code TrapLeft equ qword ptr[rbp+ 30h] TrapRight equ qword ptr[rbp+ 38h] LeftTop equ qword ptr[rbp+ 40h] LeftBottom 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] PairAddr equ qword ptr[rbp+ 70h] nPair equ qword ptr[rbp+ 78h] maxPair equ qword ptr[rbp+ 80h] PairSize equ qword ptr[rbp+ 88h] BuffWidth equ qword ptr[rbp+ 90h] iPitch16 equ qword ptr[rbp+ 98h] Threshold equ qword ptr[rbp+ 0a0h] Suppress equ qword ptr[rbp+ 0a8h] i2Pitch16 equ qword ptr[rbp+ 0b0h] RightTop equ qword ptr[rbp+ 0b8h] RightBottom equ qword ptr[rbp+ 0c0h] PitchBuff equ qword ptr[rbp+ 0c8h] hPitch16 equ qword ptr[rbp+ 0d0h] bUseUnpair equ qword ptr[rbp+ 0d8h] ix equ rsi iy equ rdi ix32 equ esi iy32 equ edi rrBW equ r8 rrNoD equ r9 rrXoD equ r10 rrYoD equ r11 rrToD equ r12 rrPoD equ r13 rrImgAddr equ r14 rrConAddr equ r15 rdImgAddr equ r14d rwImgAddr equ r14w rdConAddr equ r15d rwConAddr equ r15w xxTemp equ xmm1 xxSrc equ xmm2 xxCmp equ xmm3 xxPeak equ xmm4 xxPeakEx equ xmm5 xxfSPR equ xmm6 xxsSPR equ xmm7 xxThres equ xmm8 xxSupp equ xmm9 xxSrc1 equ xmm10 ; EXTRA xxSrc2 equ xmm11 ; EXTRA xxSrc3 equ xmm12 ; EXTRA xxCmp1 equ xmm13 ; EXTRA xxCmp2 equ xmm14 ; EXTRA xxCmp3 equ xmm15 ; EXTRA ConvSprShift equ 6 ; shift 2 & shift 4 ConvShift equ 2 ConvMulti equ 4 SprShift equ 4 SprMulti equ 16 ConvTrapezium_Vert PROC local ImgAddr : qword ; ÆÄ¶ó¹ÌÅÍ·Î ³Ñ¾î¿Â °ª local InspRight : qword local F_Y2Insp : qword local maxPixelD : qword local ConAddr : qword local ConPitch : qword ; 8*iPitch local iPitch : qword local iPitch2 : qword local iPitchHUp : qword local yPlusPitch : qword local dxTrap : qword local dyTop : qword local dyBottom : qword local yStart : qword local yEnd : qword local yEndPitch : qword local pairTop : qword local pairBottom : qword local hPitch : qword local minInsp : qword 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, 0a8h ; ÆÄ¶ó¹ÌÅÍ·Î ³Ñ¾î¿Â register°ª ¿Å±â±â mov ImgAddr , rcx mov ConAddr , rdx add ConAddr, 20h mov maxPixelD , r8 ; register ÇÒ´ç. mov ix, TrapLeft mov iy, LeftTop mov rrXoD, DefectX mov rrYoD, DefectY mov rrToD, DefectType mov rrPoD, DefectVal mov rrBW, BuffWidth ;°è»ê °ª ¸¸µé±â mov rax, iPitch16 ; iPitch sar rax, SprShift mov iPitch, rax mov rax, hPitch16 sar rax, SprShift mov hPitch, rax sal rax, 1 ; iPitch2 mov iPitch2, rax add rax, iPitch ;;; Áö¿ª º¯¼ö ÇÒ´ç. mov minInsp, rax ; 3 pitch ÀÌ»ó µÇ¾î¾ß °Ë»ç. cmp rax, 10h jge MIN_INSP_SIZE2 mov minInsp, 48 MIN_INSP_SIZE2: mov rax, TrapRight ; Right Padding sub rax, TrapLeft sar rax, 4 sal rax, 4 add rax, TrapLeft mov InspRight, rax ; ½ÇÁ¦ °Ë»ç ¿µ¿ª ³¡ÁöÁ¡ º¯°æ(16 byte align) mov rax, 20h mul iPitch mov ConPitch, rax mov rax, TrapRight sub rax, TrapLeft mov dxTrap, rax mov rax, RightTop sub rax, LeftTop mov dyTop, rax mov rax, RightBottom sub rax, LeftBottom mov dyBottom, rax ; mmx °ª ¸¸µé±â mov rax, Threshold ; Threshold movd xxThres, rax movdqa xmm0, xxThres punpcklwd xmm0, xxThres pshufd xxThres, xmm0, 0 mov rax, Suppress ; supress sal rax, ConvSprShift movd xxSupp, rax movdqa xmm0, xxSupp punpcklwd xmm0, xxSupp pshufd xxSupp, xmm0, 0 mov rax, iPitch mov rcx, iPitch16 and rcx, 0fh cmp rcx, 8 jl PITCH_H_UP_PASS inc rax PITCH_H_UP_PASS: mov iPitchHUp, rax movd xxsSPR, rcx ; sSpr movdqa xmm0, xxsSPR punpcklwd xmm0, xxsSPR pshufd xxsSPR, xmm0, 0 mov rax, SprMulti ; fSpr sub rax, rcx movd xxfSPR, rax movdqa xmm0, xxfSPR punpcklwd xmm0, xxfSPr pshufd xxfSPr, xmm0, 0 START_FUNC: pxor xmm0, xmm0 jmp LOOP_X_CHECK LOOP_X_TAIL: jmp PAIRING_VERT PAIRING_VERT_RETURN: LOOP_X_CHECK: cmp ix, InspRight jge END_FUNC LOOP_X_BODY: cmp PitchBuff, 0 jne FPC_READ FPC_READ_RETURN: jmp FIND_CONBOX FIND_CONBOX_RETURN: mov iy, yStart mov rax, rrBW mul iy add rax, ix add rax, ImgAddr mov rrImgAddr, rax mov rrConAddr, ConAddr dec iy sub rrImgAddr, rrBW sub rrConAddr, 20h jmp MAKE_CONBUFF_BODY_TAIL_CHECK MAKE_CONBUFF_RETURN: mov iy, yStart mov rrConAddr, ConAddr mov F_Y2Insp, 0 jmp LOOP_Y_CHECK LOOP_Y_TAIL: inc iy add rrConAddr, 20h LOOP_Y_CHECK: cmp rrNoD, maxPixelD jge PAIRING_VERT cmp iy, yEndPitch jl LOOP_Y_BODY ; Y Double Check, YÃà Conv¸¦ 16 ¹ÙÀÌÆ® ´ÜÀ§·Î ¸¸µå´Âµ¥. °Ë»ç´Â 8¹ÙÀÌÆ®¾¿ ÇϹǷΠ2¹ø y·çÇÁ µ¹¸®±â. add ix, 8 cmp F_Y2Insp, 1 jge LOOP_X_TAIL ; y_end & goto x_tail mov F_Y2Insp, 1 mov iy, yStart mov rrConAddr, ConAddr add rrConAddr, 10h jmp LOOP_Y_BODY FPC_READ: mov rax, ix sar rax, 4 sal rax, 2 add rax, PitchBuff movsxd rax, dword ptr[rax] mov rcx, rax and rcx, 0fh shr rax, SprShift mov iPitch, rax shl rax, 1 mov iPitch2, rax mov rdx, 010h sub rdx, rcx mov rax, iPitch cmp rcx, 8 jl PITCH_HUP_PASS2 inc rax PITCH_HUP_PASS2: mov iPitchHUp, rax movd xxsSpr, rcx ; sSpr movdqa xmm1, xxsSpr punpcklwd xmm1, xxsSpr pshufd xxsSpr, xmm1, 0 movd xxfSpr, rdx ; fSpr movdqa xmm1, xxfSpr punpcklwd xmm1, xxfSpr pshufd xxfSpr, xmm1, 0 mov rax, 20h mul iPitch mov ConPitch, rax jmp FPC_READ_RETURN FIND_CONBOX: FIND_TOP: mov rax, ix cmp dyTop, 0 jg TOP_DIR_PLUS jmp FIND_TOP_PROC TOP_DIR_PLUS: add rax, 010h FIND_TOP_PROC: sub rax, TrapLeft mul dyTop mov rcx, dxTrap cdq idiv ecx movsxd rax, eax add rax, LeftTop mov yStart, rax FIND_BOTTOM: mov rax, ix cmp dyBottom, 0 jl BOT_DIR_MINUS jmp FIND_BOT_PROC BOT_DIR_MINUS: add rax, 010h FIND_BOT_PROC: sub rax, TrapLeft mul dyBottom mov rcx, dxTrap cdq idiv ecx movsxd rax, eax add rax, LeftBottom mov yEnd, rax sub rax, iPitch dec rax mov yEndPitch, rax sub rax, yStart ; 3Pitch Size Filtering cmp rax, minInsp jge FIND_CONBOX_RETURN mov rax, dyBottom cmp dyTop, rax jge END_FUNC inc ix cmp ix, InspRight jge END_FUNC jmp FIND_CONBOX ; Con ¹öÆÛ ¸¸µé±â MAKE_CONBUFF_BODY_TAIL_CHECK: movdqu xxSrc, [rrImgAddr] movdqa xxSrc1, xxSrc punpcklbw xxSrc, xmm0 punpckhbw xxSrc1, xmm0 movdqu xxCmp, [rrImgAddr+ 1] movdqa xxCmp1, xxCmp punpcklbw xxCmp, xmm0 punpckhbw xxCmp1, xmm0 paddw xxSrc, xxCmp paddw xxSrc1, xxCmp1 movdqu [rrConAddr], xxSrc movdqu [rrConAddr+ 10h], xxSrc1 add rrImgAddr, rrBW add rrConAddr, 20h inc iy cmp iy, yEnd jle MAKE_CONBUFF_BODY_TAIL_CHECK jmp MAKE_CONBUFF_RETURN LOOP_Y_BODY: movdqu xxSrc1, [rrConAddr] ; ¼Ò½º ¹öÆÛ movdqu xxSrc2, [rrConAddr+ 20h] movdqa xxSrc, xxSrc1 paddw xxSrc, xxSrc2 psllw xxSrc, SprShift ; movdqa xxTemp, xxSrc ; suppress (2*2*SPR ÇØÁØ suppress) ; psubusw xxTemp, xxSupp ; psubusw xxSrc, xxTemp pminuw xxSrc, xxSupp mov rax, rrConAddr ; ºñ±³ ¹öÆÛ ÇÕ ¸¸µé±â add rax, ConPitch movdqu xxCmp1, [rax] movdqa xxCmp, xxCmp1 pmullw xxCmp, xxfSPR movdqu xxCmp2, [rax+ 20h] movdqa xxTemp, xxCmp2 psllw xxTemp, SprShift paddw xxCmp, xxTemp movdqu xxTemp, [rax+ 40h] pmullw xxTemp, xxsSPR paddw xxCmp, xxTemp ; movdqa xxTemp, xxCmp ; suppress (2*2*SPR ÇØÁØ suppress) ; psubusw xxTemp, xxSupp ; psubusw xxCmp, xxTemp pminuw xxCmp, xxSupp JMP REINSPECT_PRE REINSPECT_RETURN: ; JMP ReReINSPECT_PRE ReReINSPECT_RETURN: INSPECT_BLACK: movdqa xxPeakEx, xxCmp psubusw xxPeakEx, xxSrc movdqa xxPeak, xxPeakEx pcmpgtw xxPeak, xxThres pmovmskb rax, xxPeak cmp rax, 0 je INSPECT_WHITE mov rbx, 0 jmp REINSPECT_BLACK INSPECT_WHITE: movdqa xxPeakEx , xxSrc psubusw xxPeakEx , xxCmp movdqa xxPeak, xxPeakEx pcmpgtw xxPeak, xxThres pmovmskb rax, xxPeak cmp rax, 0 je LOOP_Y_TAIL mov rbx, 1 jmp REINSPECT_WHITE REINSPECT_PRE: ;JMP REINSPECT_RETURN paddw xxCmp1, xxCmp2 ; ºñ±³ ¹öÆÛ 1+2 psllw xxCmp1, SprShift movdqu xxSrc3, [rrConAddr- 20h] ; »ó´ë ¹öÆÛ 1+ 2+ 3 pmullw xxSrc3, xxSSPR psllw xxSrc1, SprShift paddw xxSrc3, xxSrc1 pmullw xxSrc2, xxFSpr paddw xxSrc3, xxSrc2 JMP REINSPECT_RETURN REINSPECT_BLACK: movdqa xxTemp, xxCmp1 psubusw xxTemp, xxSrc3 ;psubusw xxPlus , xxCmp pcmpgtw xxTemp, xxThres pand xxPeak, xxTemp pmovmskb rcx, xxPeak cmp rcx, 0 je INSPECT_WHITE mov rbx, 0 jmp DEFECT_00 ;ReReINSPECT_BLACK REINSPECT_WHITE: movdqa xxTemp, xxSrc3 psubusw xxTemp, xxCmp1 ;psubusw xxMinus , xxSrc pcmpgtw xxTemp, xxThres pand xxPeak, xxTemp pmovmskb rcx, xxPeak cmp rcx, 0 je LOOP_Y_TAIL mov rbx, 1 jmp DEFECT_00 ;ReReINSPECT_WHITE ReReINSPECT_PRE: jmp ReReINSPECT_RETURN mov rax, rrBW mul iy add rax, ix add rax, hPitch add rax, ImgAddr movdqu xxSrc1, [rax] movdqu xxSrc2, [rax+ rrBW] movdqa xxCmp3, xxSrc1 punpcklbw xxCmp3, xmm0 movdqa xxTemp, xxSrc2 punpcklbw xxTemp, xmm0 paddw xxCmp3, xxTemp pmullw xxCmp3, xxFSpr psrldq xxSrc1, 1 psrldq xxSrc2, 1 movdqa xxTemp, xxSrc1 punpcklbw xxTemp, xmm0 movdqa xxCmp2, xxSrc2 punpcklbw xxCmp2, xmm0 paddw xxTemp, xxCmp2 psllw xxTemp, SprShift paddw xxCmp3, xxTemp psrldq xxSrc1, 1 psrldq xxSrc2, 1 movdqa xxTemp, xxSrc1 punpcklbw xxTemp, xmm0 movdqa xxCmp2, xxSrc2 punpcklbw xxCmp2, xmm0 paddw xxTemp, xxCmp2 pmullw xxTemp, xxSSpr paddw xxCmp3, xxTemp ; jmp ReReINSPECT_RETURN ReReINSPECT_BLACK: jmp DEFECT_00 movdqa xxTemp, xxCmp3 psubusw xxTemp, xxSrc pcmpgtw xxTemp, xxThres pand xxPeak, xxTemp pmovmskb rcx, xxPeak cmp rcx, 0 je INSPECT_WHITE mov rbx, 0 jmp DEFECT_P_0 ReReINSPECT_WHITE: jmp DEFECT_00 movdqa xxTemp, xxSrc psubusw xxTemp, xxCmp3 pcmpgtw xxTemp, xxThres pand xxPeak, xxTemp pmovmskb rcx, xxPeak cmp rcx, 0 je LOOP_Y_TAIL mov rbx, 1 jmp DEFECT_P_0 DEFECT_P_0: inc ix inc iy pextrw rax, xxPeak, 0 cmp rcx, 0h je DEFECT_P_1 pextrw rax, xxPeakEx, 0 sar rax, ConvSprShift mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ix32 mov (astPair ptr [rax]).y, iy32 mov (astPair ptr [rax]).dtype, ebx movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, ecx add rax, PairSize mov PairAddr, rax inc nPair DEFECT_P_1: inc ix pextrw rax, xxPeak, 1 cmp rcx, 0h je DEFECT_P_2 pextrw rax, xxPeakEx, 1 sar rax, ConvSprShift mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ix32 mov (astPair ptr [rax]).y, iy32 mov (astPair ptr [rax]).dtype, ebx movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, ecx add rax, PairSize mov PairAddr, rax inc nPair DEFECT_P_2: inc ix pextrw rax, xxPeak, 2 cmp rcx, 0h je DEFECT_P_3 pextrw rax, xxPeakEx, 2 sar rax, ConvSprShift mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ix32 mov (astPair ptr [rax]).y, iy32 mov (astPair ptr [rax]).dtype, ebx movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, ecx add rax, PairSize mov PairAddr, rax inc nPair DEFECT_P_3: inc ix pextrw rax, xxPeak, 3 cmp rcx, 0h je DEFECT_P_4 pextrw rax, xxPeakEx, 3 sar rax, ConvSprShift mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ix32 mov (astPair ptr [rax]).y, iy32 mov (astPair ptr [rax]).dtype, ebx movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, ecx add rax, PairSize mov PairAddr, rax inc nPair DEFECT_P_4: inc ix pextrw rax, xxPeak, 4 cmp rcx, 0h je DEFECT_P_5 pextrw rax, xxPeakEx, 4 sar rax, ConvSprShift mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ix32 mov (astPair ptr [rax]).y, iy32 mov (astPair ptr [rax]).dtype, ebx movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, ecx add rax, PairSize mov PairAddr, rax inc nPair DEFECT_P_5: inc ix pextrw rax, xxPeak, 5 cmp rcx, 0h je DEFECT_P_6 pextrw rax, xxPeakEx, 5 sar rax, ConvSprShift mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ix32 mov (astPair ptr [rax]).y, iy32 mov (astPair ptr [rax]).dtype, ebx movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, ecx add rax, PairSize mov PairAddr, rax inc nPair DEFECT_P_6: inc ix pextrw rax, xxPeak, 6 cmp rcx, 0h je DEFECT_P_7 pextrw rax, xxPeakEx, 6 sar rax, ConvSprShift mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ix32 mov (astPair ptr [rax]).y, iy32 mov (astPair ptr [rax]).dtype, ebx movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, ecx add rax, PairSize mov PairAddr, rax inc nPair DEFECT_P_7: inc ix pextrw rax, xxPeak, 7 cmp rcx, 0h je DEFECT_P_END pextrw rax, xxPeakEx, 7 sar rax, ConvSprShift mov rax, PairAddr mov (astPair ptr [rax]).pos, 1 mov (astPair ptr [rax]).pair, 1 mov (astPair ptr [rax]).x, ix32 mov (astPair ptr [rax]).y, iy32 mov (astPair ptr [rax]).dtype, ebx movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, ecx add rax, PairSize mov PairAddr, rax inc nPair DEFECT_P_END: sub ix, 8 dec iy cmp bx, 0 je INSPECT_WHITE jmp LOOP_Y_TAIL DEFECT_00: pextrw rax, xxPeak, 0 cmp rax, 0h je Defect_01 pextrw rax, xxPeakEx, 0 sar rax, ConvSprShift mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 mov [rrToD+ 2*rrNoD], bx mov [rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_01: inc ix pextrw rax, xxPeak, 1 cmp rax, 0h je Defect_02 pextrw rax, xxPeakEx, 1 sar rax, ConvSprShift mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 mov [rrToD+ 2*rrNoD], bx mov [rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_02: inc ix pextrw rax, xxPeak, 2 cmp rax, 0h je Defect_03 pextrw rax, xxPeakEx, 2 sar rax, ConvSprShift mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 mov [rrToD+ 2*rrNoD], bx mov [rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_03: inc ix pextrw rax, xxPeak, 3 cmp rax, 0h je Defect_04 pextrw rax, xxPeakEx, 3 sar rax, ConvSprShift mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 mov [rrToD+ 2*rrNoD], bx mov [rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_04: inc ix pextrw rax, xxPeak, 4 cmp rax, 0h je Defect_05 pextrw rax, xxPeakEx, 4 sar rax, ConvSprShift mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 mov [rrToD+ 2*rrNoD], bx mov [rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_05: inc ix pextrw rax, xxPeak, 5 cmp rax, 0h je Defect_06 pextrw rax, xxPeakEx, 5 sar rax, ConvSprShift mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 mov [rrToD+ 2*rrNoD], bx mov [rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_06: inc ix pextrw rax, xxPeak, 6 cmp rax, 0h je Defect_07 pextrw rax, xxPeakEx, 6 sar rax, ConvSprShift mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 mov [rrToD+ 2*rrNoD], bx mov [rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_07: inc ix pextrw rax, xxPeak, 7 cmp rax, 0h je DEFECT_END pextrw rax, xxPeakEx, 7 sar rax, ConvSprShift mov [rrXoD+ 4*rrNoD], ix32 mov [rrYoD+ 4*rrNoD], iy32 mov [rrToD+ 2*rrNoD], bx mov [rrPoD+ 2*rrNoD], ax inc rrNoD DEFECT_END: sub ix, 7 cmp bx, 0 je INSPECT_WHITE jmp LOOP_Y_TAIL PAIRING_VERT: ; JMP PAIRING_VERT_RETURN mov rax, yStart add rax, iPitch mov pairTop, rax mov rax, yEndPitch sub rax, iPitch mov pairBottom, rax 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 cmp word ptr [rrToD+ 2*iy], 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] 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] ; Filter_2_Pair_XPosition cmp rrImgAddr, rcx jne PAIR_TOP movzx rrConAddr, word ptr[rrToD+ 2*rbx] ; Filter_3_TYPE_DELETE cmp rrConAddr, 3 jge LOOP_PAIR_NUM ; jge PAIR_TOP ;Filte_1_ÀÇ Á¶°ÇÀÌ (+-1)·Î ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov ax, word ptr[rrToD+ 2*iy] ; Filter_4_TYPE_PAIR cmp ax, rwConAddr 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, rdConAddr movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, 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 movzx edx, word ptr[rrPoD+ 2*iy] mov (astPair ptr [rcx]).peak, 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 rcx, dword ptr[rrXoD+ 4*rbx] ; Filter_2_Pair_XPosition cmp rrImgAddr, rcx jne PAIR_CENTER movzx rrConAddr, word ptr[rrToD+ 2*rbx] ; Filter_3_TYPE_DELETE cmp rrConAddr, 3 jge LOOP_PAIR_NUM ; jge PAIR_CENTER ;Filte_1_ÀÇ Á¶°ÇÀÌ (+-1)·Î ¹Ù²ð °æ¿ì ¹Ù²¸¾ß ÇÑ´Ù. mov ax, word ptr[rrToD+ 2*iy] ; Filter_4_TYPE_PAIR cmp ax, rwConAddr 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, rdConAddr movzx edx, word ptr[rrPoD+ 2*rbx] mov (astPair ptr [rax]).peak, 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 movzx edx, word ptr[rrPoD+ 2*iy] mov (astPair ptr [rcx]).peak, edx add rcx, PairSize mov PairAddr, rcx inc nPair jmp LOOP_PAIR_NUM LOOP_PAIR_NUM_END: mov rrNoD, 0 jmp PAIRING_VERT_RETURN END_FUNC: mov rax, nPair ; return rrNoD ;mov rax, rrNoD pop rbx pop rsi pop rdi pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop rbp RET ConvTrapezium_Vert ENDP end