mrDarker
2025-08-16 5e802e47375cb399b91f0abdc95420d6cce0b18b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
 
; 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