.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 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] BuffWidth equ qword ptr[rbp+ 70h] iPitch equ qword ptr[rbp+ 78h] fSPR equ qword ptr[rbp+ 80h] sSPR equ qword ptr[rbp+ 88h] Threshold equ qword ptr[rbp+ 90h] Suppress equ qword ptr[rbp+ 98h] SPR equ qword ptr[rbp+ 0a0h] ShiftCnt equ qword ptr[rbp+ 0a8h] iPitch2 equ qword ptr[rbp+ 0b0h] fSPR2 equ qword ptr[rbp+ 0b8h] sSPR2 equ qword ptr[rbp+ 0c0h] ix equ rcx iy equ rdx rrImgAddr equ rsi rrNDefect equ rdi rrPeakFlag equ r8 rrBuffWidth equ r9 rrdx equ r10 rrdy equ r11 rrdt equ r12 rrdp equ r13 rrConAddr equ r15 xxTemp equ xmm1 xxPlus2 equ xmm8 xxMinus2 equ xmm9 xxSrc equ xmm4 xxCmp equ xmm5 xxMinus equ xmm6 xxPlus equ xmm7 xxPeak equ xmm2 xxPeak2 equ xmm3 xxfSPR equ xmm10 xxsSPR equ xmm11 xxfSpr2 equ xmm14 xxsSpr2 equ xmm15 xxThres equ xmm12 xxSupp equ xmm13 lShiftCnt equ 4 ConvVert2 PROC local ImgAddr : qword ; ÆÄ¶ó¹ÌÅÍ·Î ³Ñ¾î¿Â °ª local ImgAddrLeft : qword local ImgConLine : qword ; Conv Buffer ¸¸µé¶§ ½ÃÀÛ ÁÖ¼Ò local F_Y2Insp : qword local ShftSize : qword local maxDefect : qword local ConPitch : qword ; 8*iPitch local ConPitch2 : qword local ConvSize : qword local ConAddr : qword local ConOrigin : qword local InspTop1 : qword local InspTop2 : 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, 070h mov ConvSize, 4 mov rax, ShiftCnt mov ShftSize, 4 ; ÆÄ¶ó¹ÌÅÍ·Î ³Ñ¾î¿Â register°ª ¿Å±â±â mov ImgAddr , rcx mov ConOrigin , rdx mov maxDefect , r8 mov rrNDefect , r9 ; sub maxDefect, 16 ; mmx °ª ¸¸µé±â mov rax, Suppress mul SPR mul ConvSize movd xxSupp, rax ; supress movdqa xmm0, xxSupp punpcklwd xmm0, xxSupp pshufd xxSupp, xmm0, 0 mov rax, Threshold movd xxThres, rax ; Threshold movdqa xmm0, xxThres punpcklwd xmm0, xxThres pshufd xxThres, xmm0, 0 movd xxfSPR, fSpr ; fSpr movdqa xmm0, xxfSPR punpcklwd xmm0, xxfSPR pshufd xxfSPR, xmm0, 0 movd xxsSPR, sSpr ; sSpr movdqa xmm0, xxsSPR punpcklwd xmm0, xxsSPR pshufd xxsSPR, xmm0, 0 movd xxfSPR2, fSpr2 ; fSpr movdqa xmm0, xxfSPR2 punpcklwd xmm0, xxfSPR2 pshufd xxfSPR2, xmm0, 0 movd xxsSPR2, sSpr2 ; sSpr movdqa xmm0, xxsSPR2 punpcklwd xmm0, xxsSPR2 pshufd xxsSPR2, xmm0, 0 ; register ÇÒ´ç. mov ix, InspLeft mov iy, InspTop mov rrdx, DefectX mov rrdy, DefectY mov rrdt, DefectType mov rrdp, DefectVal mov rrBuffWidth, BuffWidth ; °Ë»ç ¿µ¿ª ¼³Á¤(width¸¦ pitch¸¸Å­ Àß¶ó¾ß ºñ±³ÇÑ´Ù) ; ÁÖ¼Ò°ª ¼³Á¤ mov rax, rrBuffWidth mul InspTop add rax, ImgAddr add rax, ix mov ImgAddrLeft, rax mov rax, 20h mul InspTop add rax, ConOrigin mov ConAddr, rax mov rax, InspRight sub rax, InspLeft sar rax, 4 sal rax, 4 add rax, InspLeft mov InspRight, rax ; ½ÇÁ¦ °Ë»ç ¿µ¿ª ³¡ÁöÁ¡ º¯°æ(8 byte align) mov rax, 20h mul iPitch mov ConPitch, rax mov rax, 20h mul iPitch2 mov ConPitch2, rax mov rax, InspTop add rax, iPitch add rax, 2 mov InspTop1, rax mov rax, InspBottom sub rax, iPitch sub rax, 2 mov InspTop2, rax pxor xmm0, xmm0 mov iy, InspTop sub ImgAddrLeft, 10h LOOP_X: cmp ix, InspRight jge LOOP_X_END add ImgAddrLeft, 10h mov rrImgAddr, ImgAddrLeft mov rrConAddr, ConAddr mov iy, InspTop ; Àӽà Conbuff ; mov rrImgAddr, ImgAddr ; add rrImgAddr, ix ; mov rrConAddr, ConOrigin ; mov iy, 0 ; Àӽà Conbuff ; Con ¹öÆÛ ¸¸µé±â LOOP_Y_CON_BUFF: movdqu xxSrc, [rrImgAddr] movdqa xxCmp, xxSrc punpcklbw xxSrc, xmm0 punpckhbw xxCmp, xmm0 movdqu xxPlus, [rrImgAddr+ 1] movdqa xxMinus, xxPlus punpcklbw xxPlus, xmm0 punpckhbw xxMinus, xmm0 paddw xxSrc, xxPlus paddw xxCmp, xxMinus movdqu [rrConAddr], xxSrc movdqu [rrConAddr+ 10h], xxCmp add rrImgAddr, rrBuffWidth add rrConAddr, 20h inc iy cmp iy, InspBottom jle LOOP_Y_CON_BUFF mov rrConAddr, ConAddr mov iy, InspTop mov F_Y2Insp, 0 LOOP_Y: cmp iy, InspBottom jge LOOP_Y_END cmp rrNDefect, maxDefect jge End_Buffer ; ¼Ò½º ¹öÆÛ movdqu xxSrc, [rrConAddr] movdqu xxTemp, [rrConAddr+ 20h] paddw xxSrc, xxTemp psllw xxSrc, lShiftCnt movdqa xxTemp, xxSrc ; suppress (2*2*SPR ÇØÁØ suppress) psubusw xxTemp, xxSupp psubusw xxSrc, xxTemp cmp iy, InspTop2 jg CaseCmpTop3 ; ºñ±³ ¹öÆÛ ÇÕ ¸¸µé±â mov rax, rrConAddr add rax, ConPitch movdqu xxCmp, [rax] pmullw xxCmp, xxfSPR movdqu xxTemp, [rax+ 20h] psllw xxTemp, lShiftCnt paddw xxCmp, xxTemp movdqu xxTemp, [rax+ 40h] pmullw xxTemp, xxsSPR paddw xxCmp, xxTemp jmp CaseCmpEnd CaseCmpTop3: mov rax, rrConAddr sub rax, ConPitch movdqu xxCmp, [rax+ 20h] pmullw xxCmp, xxfSPR movdqu xxTemp, [rax] psllw xxTemp, lShiftCnt paddw xxCmp, xxTemp movdqu xxTemp, [rax- 20h] pmullw xxTemp, xxsSPR paddw xxCmp, xxTemp CaseCmpEnd: movdqa xxTemp, xxCmp ; suppress (2*2*SPR ÇØÁØ suppress) psubusw xxTemp, xxSupp psubusw xxCmp, xxTemp movdqa xxMinus , xxCmp psubusw xxMinus , xxSrc movdqa xxPlus , xxSrc psubusw xxPlus , xxCmp Inspect_Black: movdqa xxPeak, xxMinus pcmpgtw xxPeak, xxThres pmovmskb rax, xxPeak Inspect_White: movdqa xxPeak2, xxPlus pcmpgtw xxPeak2, xxThres pmovmskb rbx, xxPeak2 add rax, rbx cmp rax, 0 je Defect_None cmp iy, InspTop2 jg CaseCmp2Top3 cmp iy, InspTop1 jg CaseCmp2Top2 ; °áÇÔ °ËÁõ CaseCmp2Top1: mov rax, rrConAddr add rax, ConPitch2 movdqu xxCmp, [rax] pmullw xxCmp, xxfSPR2 movdqu xxTemp, [rax+ 20h] psllw xxTemp, lShiftCnt paddw xxCmp, xxTemp movdqu xxTemp, [rax+ 40h] pmullw xxTemp, xxsSPR2 paddw xxCmp, xxTemp jmp Inspect_Black2 CaseCmp2Top2: mov rax, rrConAddr sub rax, ConPitch movdqu xxCmp, [rax+ 20h] pmullw xxCmp, xxfSPR movdqu xxTemp, [rax] psllw xxTemp, lShiftCnt paddw xxCmp, xxTemp movdqu xxTemp, [rax- 20h] pmullw xxTemp, xxsSPR paddw xxCmp, xxTemp jmp Inspect_Black2 CaseCmp2Top3: mov rax, rrConAddr sub rax, ConPitch2 movdqu xxCmp, [rax+ 20] pmullw xxCmp, xxfSPR2 movdqu xxTemp, [rax] psllw xxTemp, lShiftCnt paddw xxCmp, xxTemp movdqu xxTemp, [rax- 20h] pmullw xxTemp, xxsSPR2 paddw xxCmp, xxTemp Inspect_Black2: movdqa xxTemp, xxCmp ; suppress (2*2*SPR ÇØÁØ suppress) psubusw xxTemp, xxSupp psubusw xxCmp, xxTemp movdqa xxMinus2 , xxCmp psubusw xxMinus2 , xxSrc movdqa xxPlus2 , xxSrc psubusw xxPlus2 , xxCmp mov bx, 0 movdqa xxTemp, xxMinus2 pcmpgtw xxTemp, xxThres pand xxPeak, xxTemp movdqa xxTemp, xxMinus pmovmskb rax, xxPeak cmp rax, 0 jne DEFECT_00 Inspect_White2: mov bx, 1 movdqa xxPeak, xxPlus2 pcmpgtw xxPeak, xxThres pand xxPeak, xxPeak2 movdqa xxTemp, xxPlus pmovmskb rax, xxPeak cmp rax, 0 je Defect_None DEFECT_00: pextrw rax, xxPeak, 0 cmp rax, 0h je Defect_01 pextrw rax, xxTemp, 0 sar rax, 6 mov [rrdx+ 4*rrNDefect], ecx mov [rrdy+ 4*rrNDefect], edx mov [rrdt+ 2*rrNDefect], bx mov [rrdp+ 2*rrNDefect], ax inc rrNDefect DEFECT_01: inc ix pextrw rax, xxPeak, 1 cmp rax, 0h je Defect_02 pextrw rax, xxTemp, 1 sar rax, 6 mov [rrdx+ 4*rrNDefect], ecx mov [rrdy+ 4*rrNDefect], edx mov [rrdt+ 2*rrNDefect], bx mov [rrdp+ 2*rrNDefect], ax inc rrNDefect DEFECT_02: inc ix pextrw rax, xxPeak, 2 cmp rax, 0h je Defect_03 pextrw rax, xxTemp, 2 sar rax, 6 mov [rrdx+ 4*rrNDefect], ecx mov [rrdy+ 4*rrNDefect], edx mov [rrdt+ 2*rrNDefect], bx mov [rrdp+ 2*rrNDefect], ax inc rrNDefect DEFECT_03: inc ix pextrw rax, xxPeak, 3 cmp rax, 0h je Defect_04 pextrw rax, xxTemp, 3 sar rax, 6 mov [rrdx+ 4*rrNDefect], ecx mov [rrdy+ 4*rrNDefect], edx mov [rrdt+ 2*rrNDefect], bx mov [rrdp+ 2*rrNDefect], ax inc rrNDefect DEFECT_04: inc ix pextrw rax, xxPeak, 4 cmp rax, 0h je Defect_05 pextrw rax, xxTemp, 4 sar rax, 6 mov [rrdx+ 4*rrNDefect], ecx mov [rrdy+ 4*rrNDefect], edx mov [rrdt+ 2*rrNDefect], bx mov [rrdp+ 2*rrNDefect], ax inc rrNDefect DEFECT_05: inc ix pextrw rax, xxPeak, 5 cmp rax, 0h je Defect_06 pextrw rax, xxTemp, 5 sar rax, 6 mov [rrdx+ 4*rrNDefect], ecx mov [rrdy+ 4*rrNDefect], edx mov [rrdt+ 2*rrNDefect], bx mov [rrdp+ 2*rrNDefect], ax inc rrNDefect DEFECT_06: inc ix pextrw rax, xxPeak, 6 cmp rax, 0h je Defect_07 pextrw rax, xxTemp, 6 sar rax, 6 mov [rrdx+ 4*rrNDefect], ecx mov [rrdy+ 4*rrNDefect], edx mov [rrdt+ 2*rrNDefect], bx mov [rrdp+ 2*rrNDefect], ax inc rrNDefect DEFECT_07: inc ix pextrw rax, xxPeak, 7 cmp rax, 0h je Defect_End pextrw rax, xxTemp, 7 sar rax, 6 mov [rrdx+ 4*rrNDefect], ecx mov [rrdy+ 4*rrNDefect], edx mov [rrdt+ 2*rrNDefect], bx mov [rrdp+ 2*rrNDefect], ax inc rrNDefect Defect_End: sub ix, 7 cmp bx, 0 je Inspect_White2 Defect_None: mov [rrdx+ 4*rrNDefect], ecx mov [rrdy+ 4*rrNDefect], edx mov [rrdt+ 2*rrNDefect], bx inc iy add rrConAddr, 20h jmp LOOP_Y LOOP_Y_END: cmp F_Y2Insp, 1 je LOOP_Y_END2 add ix, 8 mov rrConAddr, ConAddr add rrConAddr, 10h mov iy, InspTop mov F_Y2Insp, 1 jmp LOOP_Y LOOP_Y_END2: add ix, 8h jmp LOOP_X LOOP_X_END: END_BUFFER: mov rax, rrNDefect ; return rrNDefect pop rbx pop rsi pop rdi pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop rbp RET ConvVert2 ENDP end