%include "x86inc.asm";void exam_1(char *pDst, char *refMain, int width, int deltaInt, int deltaFract, int refMainIndex, int l)
; {
; for (l = 0; l < width; l++)
; {
; refMainIndex = l + deltaInt + 1;
; pDst[l] = (char)(((32 - deltaFract) * refMain[refMainIndex] + deltaFract * refMain[refMainIndex + 1] + 16) >> 5);
; }
;}
;void exam_1(char *pDst, char *refMain, int deltaFract, int deltaInt, int width)
cglobal exam_1_asm, 2,7,0
mov r2d, r2m
mov r3d, r3m
mov r6d, r4m
lea r1, [r1 + r3 + 1]
mov r4d, 32
sub r4d, r2d
; ***** register map *****
; r0 = pDst
; r1 = &refMain[deltaInt + 1]
; r2 = deltaFract
; r4 = 32 - deltaFract
; r6 = width
; r3 = FREE
; r5 = FREE
.loop:
movzx r3d, byte [r1]
imul r3d, r4d ; r3d = (32 - deltaFract) * refMain[refMainIndex]
inc r1
movzx r5d, byte [r1] ; r5d = deltaFract * refMain[refMainIndex + 1]
imul r5d, r2d
lea r3, [r3 + r5 + 16] ; 可以使用'd'后缀的版本,会增加一字节代码长度
shr r3d, 5
mov byte [r0], r3b
inc r0 ; pDst++
dec r6d
jnz .loop
RET
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。