; CheckPitchAsmVTD °³¹ß - 2011.08.31 ; CheckPitchAsmVTD ¿Ï·á - 2011.09.02 ; CheckPitchAsmVTD_BOE Âĸ¸ ¼öÁ¤ - 2015.05.04 .data .code rrImgAddr equ r8 rrPitch16 equ r9 rrConAddr equ r12 rrConAddr2 equ r13 rrTiltAddr equ r14 rrMaxAddr equ r15 rrMinAddr equ r10 rrResult equ r11 ix equ rsi iy equ rdi SprShift equ 4 SprMulti equ 16 InspLeft equ qword ptr[rbp+ 30h] InspRight equ qword ptr[rbp+ 38h] InspTop equ qword ptr[rbp+ 40h] InspBottom equ qword ptr[rbp+ 48h] MAXImgAddr equ qword ptr[rbp+ 50h] ResultAddr equ qword ptr[rbp+ 58h] ConAddr equ qword ptr[rbp+ 60h] ConAddr2 equ qword ptr[rbp+ 68h] xxOne equ xmm1 xxSrc equ xmm2 xxCmp equ xmm3 xxSrc2 equ xmm4 xxCmp2 equ xmm5 xxTmp equ xmm6 xxTmp2 equ xmm7 xxfSpr equ xmm10 xxsSpr equ xmm11 xxfSprt equ xmm12 xxsSprt equ xmm13 xxRslt equ xmm14 CheckPitchAsmVTD_BOE PROC local ImgAddr : qword local tilt16 : qword local BuffWidth : qword local ConEnd : qword local RefAdd : qword local fHalf : qword local CurAddr : 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, 08h add rbp, 38h mov BuffWidth, rcx mov ImgAddr, rrImgAddr ;------- Image Buffer Check -------(BOE) mov rcx, rrImgAddr mov rrMinAddr, rcx mov rcx, MAXImgAddr sub rcx, 11h mov rrMaxAddr, rcx mov rrResult, ResultAddr ;----------------------- tilt Spr mov rcx, rdx ; tilt Spr sar rdx, SprShift mov Tilt16, rdx and rcx, 0fh movd xxsSPRt, rcx ; sSpr movdqa xmm0, xxsSPRt punpcklwd xmm0, xxsSPRt pshufd xxsSPRt, xmm0, 0 mov rax, SprMulti ; fSpr sub rax, rcx movd xxfSPRt, rax movdqa xmm0, xxfSPRt punpcklwd xmm0, xxfSPrt pshufd xxfSPrt, xmm0, 0 ;----------------------- Pitch Spr mov rcx, rrPitch16 ; Pitch Spr sar rrPitch16, SprShift and rcx, 0fh 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 mov rax, rrPitch16 mul BuffWidth mov RefAdd, rax ;------- Image Buffer Check -------(BOE) mov rcx, MAXImgAddr sub rcx, RefAdd mov rrMaxAddr, rcx ;----------------------- ±âŸ ÃʱâÈ­ mov rax, 1 movd xxOne, rax ; 1·Î ä¿î´Ù.(word) movdqa xmm0, xxOne punpcklwd xmm0, xxOne pshufd xxOne, xmm0, 0 pxor xmm0, xmm0 pxor xxRslt, xxRslt mov rax, InspBottom add rax, 2 mov ConEnd, rax ;------------------------ PROC_START ;----------------------- ÁÖ¼Ò ÃʱâÈ­ mov rax, BuffWidth mul InspTop add rax, InspLeft add rax, ImgAddr mov ImgAddr, rax mov ix, InspLeft jmp LOOP_X_CHECK LOOP_X_TAIL: add ix, 10h add ImgAddr, 10h LOOP_X_CHECK: cmp ix, InspRight jge PROC_END LOOP_X: jmp LOOP_CON_HEAD LOOP_CON_RETURN: jmp LOOP_CMP_HEAD LOOP_CMP_RETURN: LOOP_X_END: jmp LOOP_X_TAIL ;---------------- Make Con Buff Loop ------------------ LOOP_CON_HEAD: mov iy, InspTop mov rrImgAddr, ImgAddr mov rrTiltAddr, rrImgAddr add rrTiltAddr, RefAdd add rrTiltAddr, tilt16 mov rrConAddr, ConAddr mov rrConAddr2, ConAddr2 jmp LOOP_CON_CHECK LOOP_CON_TAIL: inc iy add rrImgAddr, BuffWidth add rrTiltAddr, BuffWidth add rrConAddr, 20h add rrConAddr2, 20h LOOP_CON_CHECK: cmp iy, ConEnd jge LOOP_CON_RETURN LOOP_CON: ;------- Image Buffer Check -------(BOE) mov CurAddr, rrImgAddr cmp CurAddr, rrMaxAddr jl YJM_MIN_CHECK mov rcx, 1 mov [rrResult], rcx jmp PROC_END YJM_MIN_CHECK: cmp CurAddr, rrMinAddr jge YJM_IMAGE_CHECK_OK mov rcx, 2 mov [rrResult], rcx jmp PROC_END YJM_IMAGE_CHECK_OK: movdqu xxSrc, [rrImgAddr] ; ConBuff movdqu xxCmp, [rrImgAddr+ 1] movdqa xxSrc2, xxSrc movdqa xxCmp2, xxCmp punpcklbw xxSrc, xmm0 punpckhbw xxSrc2, xmm0 punpcklbw xxCmp, xmm0 punpckhbw xxCmp2, xmm0 paddw xxSrc, xxCmp paddw xxSrc2, xxCmp2 movdqu [rrConAddr], xxSrc movdqu [rrConAddr+ 10h], xxSrc2 movdqu xxSrc, [rrTiltAddr] ; ConBuff2 movdqu xxCmp, [rrTiltAddr+ 1] movdqu xxTmp, [rrTiltAddr+ 2] movdqa xxSrc2, xxSrc movdqa xxCmp2, xxCmp movdqa xxTmp2, xxTmp punpcklbw xxSrc, xmm0 punpckhbw xxSrc2, xmm0 punpcklbw xxCmp, xmm0 punpckhbw xxCmp2, xmm0 punpcklbw xxTmp, xmm0 punpckhbw xxTmp2, xmm0 pmullw xxSrc, xxfSprt pmullw xxSrc2, xxfSprt pmullw xxTmp, xxsSprt pmullw xxTmp2, xxsSprt paddw xxSrc, xxTmp paddw xxSrc2, xxTmp2 psrlw xxSrc, SprShift psrlw xxSrc2, SprShift paddw xxSrc, xxCmp paddw xxSrc2, xxCmp2 movdqu [rrConAddr2], xxSrc movdqu [rrConAddr2+ 10h], xxSrc2 jmp LOOP_CON_TAIL ;================== Make Con Buff Loop ================== ;---------------- Make Compare(subtract) Loop ------------------ LOOP_CMP_HEAD: mov fHalf, 0 mov iy, InspTop mov rrConAddr, ConAddr mov rrConAddr2, ConAddr2 jmp LOOP_CMP_CHECK LOOP_CMP_TAIL: mov fHalf, 0 inc iy add rrConAddr, 10h add rrConAddr2, 10h LOOP_CMP_CHECK: cmp iy, InspBottom jge LOOP_CMP_RETURN LOOP_CMP: movdqu xxSrc, [rrConAddr] movdqu xxSrc2, [rrConAddr+ 20h] movdqu xxCmp, [rrConAddr2] movdqu xxCmp2, [rrconAddr2+ 20h] movdqu xxTmp, [rrConAddr2+ 40h] paddw xxSrc, xxSrc2 psllw xxSrc, SprShift pmullw xxCmp, xxfSpr pmullw xxTmp, xxsSpr psllw xxCmp2, SprShift psubw xxSrc, xxCmp psubw xxSrc, xxTmp psubw xxSrc, xxCmp2 pabsw xxSrc, xxSrc pmaddwd xxSrc, xxOne movdqa xxCmp, xxSrc punpckldq xxSrc, xmm0 punpckhdq xxCmp, xmm0 paddq xxRslt, xxSrc paddq xxRslt, xxCmp cmp fHalf, 1 jge LOOP_CMP_TAIL mov fHalf, 1 add rrConAddr, 10h add rrConAddr2, 10h jmp LOOP_CMP ;================== Make Compare(subtract) Loop ================== PROC_END: pextrq rax, xxRslt, 0 pextrq rdx, xxRslt, 1 add rax, rdx pop rbx pop rsi pop rdi pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop rbp ret CheckPitchAsmVTD_BOE ENDP end