; Copyright (c) Microsoft Corporation. All rights reserved. ; Custom Build Step, including a listing file placed in intermediate directory ; but without Source Browser information ; debug: ; ml -c -Zi "-Fl$(IntDir)\$(InputName).lst" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)" ; release: ; ml -c "-Fl$(IntDir)\$(InputName).lst" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)" ; outputs: ; $(IntDir)\$(InputName).obj ; Custom Build Step, including a listing file placed in intermediate directory ; and Source Browser information also placed in intermediate directory ; debug: ; ml -c -Zi "-Fl$(IntDir)\$(InputName).lst" "-FR$(IntDir)\$(InputName).sbr" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)" ; release: ; ml -c "-Fl$(IntDir)\$(InputName).lst" "-FR$(IntDir)\$(InputName).sbr" "-Fo$(IntDir)\$(InputName).obj" "$(InputPath)" ; outputs: ; $(IntDir)\$(InputName).obj ; $(IntDir)\$(InputName).sbr ;.386 ;.MODEL FLAT, C PBYTE TYPEDEF PTR BYTE PWORD TYPEDEF PTR WORD PDWORD TYPEDEF PTR DWORD .data .code ImgAddr equ rsi nDefect equ rdi ; maxDefect equ r8 ; parameterr 3 ; nDefect equ r9 ; parameter 4 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] Suppress equ qword ptr[rbp+ 0b0h] DTH_StartTh equ qword ptr[rbp+ 0b8h]; StartTh x ÀýÆí xmm13 (±âÁ¸ À̸§ ADD) DTH_Gradient equ qword ptr[rbp+ 0c0h]; Gradient ±â¿ï±â xmm14 (±âÁ¸, °íÁ¤Ä¡) DTH_SectionStart equ qword ptr[rbp+ 0c8h]; SectionStart Àû¿ë ±¸°£ ÃÖ¼ÒÄ¡ xmm15 (±âÁ¸ À̸§ VAL) ShiftCount equ qword ptr[rbp+ 0d0h] ix equ rcx iy equ rdx ConvPixel PROC local ImgAddrAdd: qword local maxDefect: qword local Threshold: dword local ZoneID_Def: dword local Count2: dword local Suppress2[2] : qword mov maxDefect, r8 mov nDefect, r9 mov Threshold, edx mov ZoneID_Def, 0 mov ImgAddr, rcx mov rax, Suppress ; supress movd xmm12, eax movdqa xmm0, xmm12 punpcklbw xmm12, xmm0 movdqa xmm0, xmm12 punpcklbw xmm0, xmm12 pshufd xmm12, xmm0, 0 mov rax, Suppress ; Suppress2 sal rax, 4 movd xmm10, eax movdqa xmm0, xmm10 punpcklwd xmm0, xmm10 pshufd xmm10, xmm0, 0 lea rax, Suppress2 movdqu [rax], xmm10 mov rax, fSPR ; fSPR movd xmm10, eax movdqa xmm0, xmm10 punpcklwd xmm0, xmm10 pshufd xmm10, xmm0, 0 mov rax, sSPR ; sSPR movd xmm11, eax movdqa xmm0, xmm11 punpcklwd xmm0, xmm11 pshufd xmm11, xmm0, 0 movd xmm2, Threshold ; Threshold movdqa xmm0, xmm2 punpcklwd xmm0, xmm2 pshufd xmm2, xmm0, 0 mov rax, DTH_StartTh ; ÀýÆí movd xmm13, eax movdqa xmm0, xmm13 punpcklwd xmm0, xmm13 pshufd xmm13, xmm0, 0 mov rax, DTH_Gradient ; ±â¿ï±â movd xmm14, eax movdqa xmm0, xmm14 punpcklwd xmm0, xmm14 pshufd xmm14, xmm0, 0 mov rax, DTH_SectionStart ; Àû¿ë ±¸°£ ÃÖ¼ÒÄ¡ ( :110 À̻󿡼­ DTH Àû¿ë) movd xmm15, eax movdqa xmm0, xmm15 punpcklwd xmm0, xmm15 pshufd xmm15, xmm0, 0 ; mov rax, mov rax, BuffWidth ; ImgAddr= ImgAddr+ BuffWidth*InspTop + InspLeft; mul InspTop add rax, InspLeft add ImgAddr, rax ;jmp END_BUFFER mov ix, InspLeft mov iy, InspTop mov rax, InspRight sub rax, InspLeft sub rax, iPitch sar rax, 4 sal rax, 4 mov InspRight, rax mov rax, inspLeft add InspRight, rax mov rax, BuffWidth ; À̹ÌÁö Æ÷ÀÎÅÍ À̵¿°ª °è»ê(ÇÑÇà °Ë»ç ³¡³­ ÈÄ Æ÷ÀÎÅÍ À̵¿.) add rax, InspLeft sub rax, InspRight mov ImgAddrAdd, rax mov r8, DefectX mov r9, DefectY mov r10, DefectType mov r11, DefectVal mov r12, GraySrc mov r13, GrayCmp mov r14, ZoneID mov r15, ZoneTh LOOP_XY: ; START_16PIXEL: pxor xmm0, xmm0 movdqu xmm4, [ImgAddr] ; Src Buffer (Value*SPR) - Suppress - Unpack - *SPR movdqa xmm5, xmm4 ; Copy psubusb xmm4, xmm12 ; Suppress psubusb xmm5, xmm4 movdqa xmm4, xmm5 ; Src Buff punpcklbw xmm4, xmm0 ; Unpack punpckhbw xmm5, xmm0 psllw xmm4, ShiftCount ; Multiply psllw xmm5, ShiftCount mov rax, iPitch ; Compare Buffer (iPitch*fSPR + iPitchNext*sSPR) - Suppress - Unpack - *SPR movdqu xmm6, [ImgAddr+ rax] movdqa xmm7, xmm6 ; psubusb xmm6, xmm12 ; Suppress ; psubusb xmm7, xmm6 ; movdqa xmm6, xmm7 inc rax movdqu xmm8, [ImgAddr+ rax] movdqu xmm9, xmm8 ; psubusb xmm8, xmm12 ; Suppress ; psubusb xmm9, xmm8 ; movdqa xmm8, xmm9 punpcklbw xmm6, xmm0 ; Unpack punpckhbw xmm7, xmm0 punpcklbw xmm8, xmm0 punpckhbw xmm9, xmm0 pmullw xmm6, xmm10 ; Compare SPR (fSPR, sSPR) pmullw xmm7, xmm10 pmullw xmm8, xmm11 pmullw xmm9, xmm11 paddw xmm6, xmm8 paddw xmm7, xmm9 lea rax, Suppress2 movdqu xmm9, [rax] movdqa xmm1, xmm6 psubusw xmm1, xmm9 psubusw xmm6, xmm1 movdqa xmm1, xmm7 psubusw xmm1, xmm9 psubusw xmm7, xmm1 mov Count2, 2 INSPECT_FIRST8: pxor xmm1, xmm1 ; Dynamic Threshold ÃßÃâ pmaxsw xmm1, xmm4 ; ºñ±³ Çȼ¿Áß ¹àÀº Çȼ¿ °ª ã±â. pmaxsw xmm1, xmm6 psraw xmm1, ShiftCount ; *SPR movdqa xmm3, xmm1 pcmpgtw xmm3, xmm15 ; DTH_Start º¸´Ù ¹àÀº Çȼ¿ ã±â pand xmm1, xmm3 pmullw xmm1, xmm14 ; ±â¿ï±âÀû¿ë = *slide/256 psraw xmm1, 8 pand xmm3, xmm13 ; DTH_Val paddw xmm1, xmm3 ;DTH ÃßÃâ movdqa xmm8, xmm4 ; Peak xmm psubw xmm8, xmm6 psraw xmm8, ShiftCount movdqa xmm3, xmm2 ; Zone Threshold Àû¿ë pmaxsw xmm3, xmm1 pxor xmm9, xmm9 psubw xmm9, xmm8 pmaxsw xmm9, xmm8 movdqa xmm0, xmm9 pcmpgtw xmm0, xmm3 pmovmskb rax, xmm0 cmp rax, 0 jne DEFECT_0 add ix, 7 INSPECT_SECOND8: dec Count2 jz END_16_PIXEL inc ix pxor xmm1, xmm1 ; Dynamic Threshold ÃßÃâ pmaxsw xmm1, xmm5 ; ºñ±³ Çȼ¿Áß ¹àÀº Çȼ¿ °ª ã±â. pmaxsw xmm1, xmm7 psraw xmm1, ShiftCount ; *SPR movdqa xmm3, xmm1 pcmpgtw xmm3, xmm15 ; DTH_Start º¸´Ù ¹àÀº Çȼ¿ ã±â pand xmm1, xmm3 pmullw xmm1, xmm14 ; ±â¿ï±âÀû¿ë = *slide/256 psraw xmm1, 8 pand xmm3, xmm13 ; DTH_Val paddw xmm1, xmm3 ;DTH ÃßÃâ movdqa xmm4, xmm5 ; Defect Á¤º¸ ÃßÃâÀ» Àç»ç¿ë ÇϱâÀ§ÇØ(low, high) movdqa xmm6, xmm7 movdqa xmm8, xmm5 ; Peak xmm psubw xmm8, xmm7 psraw xmm8, ShiftCount movdqa xmm3, xmm2 ; Zone Threshold Àû¿ë pmaxsw xmm3, xmm1 pxor xmm9, xmm9 psubw xmm9, xmm8 pmaxsw xmm9, xmm8 movdqa xmm0, xmm9 pcmpgtw xmm0, xmm3 pmovmskb rax, xmm0 cmp rax, 0 jne DEFECT_0 add ix, 7 END_16_PIXEL: inc ix add ImgAddr, 16 cmp ix, InspRight jl LOOP_XY inc iy cmp iy, InspBottom jge END_BUFFER mov ix, InspLeft add ImgAddr, ImgAddrAdd jmp LOOP_XY DEFECT_0: cmp nDefect, maxDefect jge END_BUFFER psraw xmm4, ShiftCount psraw xmm6, ShiftCount pextrw rax, xmm0, 0h cmp rax, 0 je DEFECT_1 mov [r8+ 4*nDefect], ecx mov [r9+ 4*nDefect], edx pextrw eax, xmm4, 0h mov [r12+ 4*nDefect], eax pextrw eax, xmm6, 0h mov [r13+ 4*nDefect], eax mov dword ptr [r14+ 4*nDefect], 0 mov eax, Threshold mov dword ptr[r15+ 4*nDefect], eax pextrw rax, xmm8, 0h pextrw rbx, xmm9, 0h cmp ax, bx je POSITIVE_0 mov word ptr[r10+ 2*nDefect], 0 sub ebx, Threshold mov [r11+ 2*nDefect], bx inc nDefect jmp DEFECT_1 POSITIVE_0: mov word ptr[r10+ 2*nDefect], 1 sub eax, Threshold mov [r11+ 2*nDefect], ax inc nDefect DEFECT_1: inc ix cmp nDefect, maxDefect jge END_BUFFER pextrw rax, xmm0, 1h cmp rax, 0 je DEFECT_2 mov [r8+ 4*nDefect], ecx mov [r9+ 4*nDefect], edx pextrw eax, xmm4, 1h mov [r12+ 4*nDefect], eax pextrw eax, xmm6, 1h mov [r13+ 4*nDefect], eax mov dword ptr [r14+ 4*nDefect], 0 mov eax, Threshold mov dword ptr[r15+ 4*nDefect], eax pextrw eax, xmm8, 1h pextrw ebx, xmm9, 1h cmp eax, ebx je POSITIVE_1 mov word ptr[r10+ 2*nDefect], 0 sub ebx, Threshold mov [r11+ 2*nDefect], bx inc nDefect jmp DEFECT_2 POSITIVE_1: mov word ptr[r10+ 2*nDefect], 1 sub eax, Threshold mov [r11+ 2*nDefect], ax inc nDefect DEFECT_2: inc ix cmp nDefect, maxDefect jge END_BUFFER pextrw rax, xmm0, 2h cmp rax, 0 je DEFECT_3 mov [r8+ 4*nDefect], ecx mov [r9+ 4*nDefect], edx pextrw eax, xmm4, 2h mov [r12+ 4*nDefect], eax pextrw eax, xmm6, 2h mov [r13+ 4*nDefect], eax mov dword ptr [r14+ 4*nDefect], 0 mov eax, Threshold mov dword ptr[r15+ 4*nDefect], eax pextrw eax, xmm8, 2h pextrw ebx, xmm9, 2h cmp eax, ebx je POSITIVE_2 mov word ptr[r10+ 2*nDefect], 0 sub ebx, Threshold mov [r11+ 2*nDefect], bx inc nDefect jmp DEFECT_3 POSITIVE_2: mov word ptr[r10+ 2*nDefect], 1 sub eax, Threshold mov [r11+ 2*nDefect], ax inc nDefect DEFECT_3: inc ix cmp nDefect, maxDefect jge END_BUFFER pextrw rax, xmm0, 3h cmp rax, 0 je DEFECT_4 mov [r8+ 4*nDefect], ecx mov [r9+ 4*nDefect], edx pextrw eax, xmm4, 3h mov [r12+ 4*nDefect], eax pextrw eax, xmm6, 3h mov [r13+ 4*nDefect], eax mov dword ptr [r14+ 4*nDefect], 0 mov eax, Threshold mov dword ptr[r15+ 4*nDefect], eax pextrw eax, xmm8, 3h pextrw ebx, xmm9, 3h cmp eax, ebx je POSITIVE_3 mov word ptr[r10+ 2*nDefect], 0 sub ebx, Threshold mov [r11+ 2*nDefect], bx inc nDefect jmp DEFECT_4 POSITIVE_3: mov word ptr[r10+ 2*nDefect], 1 sub eax, Threshold mov [r11+ 2*nDefect], ax inc nDefect DEFECT_4: inc ix cmp nDefect, maxDefect jge END_BUFFER pextrw rax, xmm0, 4h cmp rax, 0 je DEFECT_5 mov [r8+ 4*nDefect], ecx mov [r9+ 4*nDefect], edx pextrw eax, xmm4, 4h mov [r12+ 4*nDefect], eax pextrw eax, xmm6, 4h mov [r13+ 4*nDefect], eax mov dword ptr [r14+ 4*nDefect], 0 mov eax, Threshold mov dword ptr[r15+ 4*nDefect], eax pextrw eax, xmm8, 4h pextrw ebx, xmm9, 4h cmp eax, ebx je POSITIVE_4 mov word ptr[r10+ 2*nDefect], 0 sub ebx, Threshold mov [r11+ 2*nDefect], bx inc nDefect jmp DEFECT_5 POSITIVE_4: mov word ptr[r10+ 2*nDefect], 1 sub eax, Threshold mov [r11+ 2*nDefect], ax inc nDefect DEFECT_5: inc ix cmp nDefect, maxDefect jge END_BUFFER pextrw rax, xmm0, 5h cmp rax, 0 je DEFECT_6 mov [r8+ 4*nDefect], ecx mov [r9+ 4*nDefect], edx pextrw eax, xmm4, 5h mov [r12+ 4*nDefect], eax pextrw eax, xmm6, 5h mov [r13+ 4*nDefect], eax mov dword ptr [r14+ 4*nDefect], 0 mov eax, Threshold mov dword ptr[r15+ 4*nDefect], eax pextrw eax, xmm8, 5h pextrw ebx, xmm9, 5h cmp eax, ebx je POSITIVE_5 mov word ptr[r10+ 2*nDefect], 0 sub ebx, Threshold mov [r11+ 2*nDefect], bx inc nDefect jmp DEFECT_6 POSITIVE_5: mov word ptr[r10+ 2*nDefect], 1 sub eax, Threshold mov [r11+ 2*nDefect], ax inc nDefect DEFECT_6: inc ix cmp nDefect, maxDefect jge END_BUFFER pextrw rax, xmm0, 6h cmp rax, 0 je DEFECT_7 mov [r8+ 4*nDefect], ecx mov [r9+ 4*nDefect], edx pextrw eax, xmm4, 6h mov [r12+ 4*nDefect], eax pextrw eax, xmm6, 6h mov [r13+ 4*nDefect], eax mov dword ptr [r14+ 4*nDefect], 0 mov eax, Threshold mov dword ptr[r15+ 4*nDefect], eax pextrw eax, xmm8, 6h pextrw ebx, xmm9, 6h cmp eax, ebx je POSITIVE_6 mov word ptr[r10+ 2*nDefect], 0 sub ebx, Threshold mov [r11+ 2*nDefect], bx inc nDefect jmp DEFECT_7 POSITIVE_6: mov word ptr[r10+ 2*nDefect], 1 sub eax, Threshold mov [r11+ 2*nDefect], ax inc nDefect DEFECT_7: inc ix cmp nDefect, maxDefect jge END_BUFFER pextrw rax, xmm0, 7h cmp rax, 0 je INSPECT_SECOND8 mov [r8+ 4*nDefect], ecx mov [r9+ 4*nDefect], edx pextrw eax, xmm4, 7h mov [r12+ 4*nDefect], eax pextrw eax, xmm6, 7h mov [r13+ 4*nDefect], eax mov dword ptr [r14+ 4*nDefect], 0 mov eax, Threshold mov dword ptr[r15+ 4*nDefect], eax pextrw eax, xmm8, 7h pextrw ebx, xmm9, 7h cmp eax, ebx je POSITIVE_7 mov word ptr[r10+ 2*nDefect], 0 sub ebx, Threshold mov [r11+ 2*nDefect], bx inc nDefect jmp INSPECT_SECOND8 POSITIVE_7: mov word ptr[r10+ 2*nDefect], 1 sub eax, Threshold mov [r11+ 2*nDefect], ax inc nDefect jmp INSPECT_SECOND8 END_BUFFER: mov rax, nDefect ; return nDefect RET ConvPixel ENDP end