32 |
|
|
33 |
%macro cglobal 1 |
%macro cglobal 1 |
34 |
%ifdef PREFIX |
%ifdef PREFIX |
35 |
|
%ifdef MARK_FUNCS |
36 |
|
global _%1:function %1.endfunc-%1 |
37 |
|
%define %1 _%1:function %1.endfunc-%1 |
38 |
|
%else |
39 |
global _%1 |
global _%1 |
40 |
%define %1 _%1 |
%define %1 _%1 |
41 |
|
%endif |
42 |
|
%else |
43 |
|
%ifdef MARK_FUNCS |
44 |
|
global %1:function %1.endfunc-%1 |
45 |
%else |
%else |
46 |
global %1 |
global %1 |
47 |
%endif |
%endif |
48 |
|
%endif |
49 |
%endmacro |
%endmacro |
50 |
|
|
51 |
;============================================================================= |
;============================================================================= |
53 |
;============================================================================= |
;============================================================================= |
54 |
|
|
55 |
%ifdef FORMAT_COFF |
%ifdef FORMAT_COFF |
56 |
SECTION .rodata data |
SECTION .rodata |
57 |
%else |
%else |
58 |
SECTION .rodata data align=16 |
SECTION .rodata align=16 |
59 |
%endif |
%endif |
60 |
|
|
61 |
ALIGN 16 |
ALIGN 16 |
141 |
push esi |
push esi |
142 |
|
|
143 |
mov esi, [esp + 4 + 8] ; data |
mov esi, [esp + 4 + 8] ; data |
144 |
|
mov ecx,[esp + 4 + 16] ; dcscalar |
145 |
movsx eax, word [esi] ; data[0] |
movsx eax, word [esi] ; data[0] |
146 |
|
|
147 |
mov ecx,[esp + 4 + 16] ; dcscalar |
sar ecx,1 ; dcscalar /2 |
148 |
mov edx,eax |
mov edx,eax |
149 |
sar ecx,1 |
sar edx,31 ; sgn(data[0]) |
150 |
add eax,ecx |
xor ecx,edx ; *sgn(data[0]) |
151 |
sub edx,ecx |
sub eax,edx |
152 |
cmovl eax,edx ; +/- dcscalar/2 |
add eax,ecx ; + (dcscalar/2)*sgn(data[0]) |
153 |
|
|
154 |
mov ecx, [esp + 4 + 12] ; quant |
mov ecx, [esp + 4 + 12] ; quant |
155 |
cdq |
cdq |
156 |
idiv dword [esp + 4 + 16] ; dcscalar |
idiv dword [esp + 4 + 16] ; dcscalar |
234 |
|
|
235 |
pop esi |
pop esi |
236 |
ret |
ret |
237 |
|
.endfunc |
238 |
|
|
239 |
|
|
240 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
346 |
|
|
347 |
pop esi |
pop esi |
348 |
ret |
ret |
349 |
|
.endfunc |
350 |
|
|
351 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
352 |
; |
; |
450 |
jnz .q1loop |
jnz .q1loop |
451 |
|
|
452 |
jmp .done |
jmp .done |
453 |
|
.endfunc |
454 |
|
|
455 |
|
|
456 |
|
|
565 |
cmp ecx, 16 |
cmp ecx, 16 |
566 |
jnz .qes2_q1loop |
jnz .qes2_q1loop |
567 |
jmp .qes2_done |
jmp .qes2_done |
568 |
|
.endfunc |
569 |
|
|
570 |
|
|
571 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
638 |
|
|
639 |
; deal with DC |
; deal with DC |
640 |
mov eax, [esp+ 8] ; coeff |
mov eax, [esp+ 8] ; coeff |
641 |
movsx eax,word [eax] |
movd mm1,[esp+16] ; dcscalar |
642 |
mov ecx,2047 |
movd mm0,[eax] ; coeff[0] |
643 |
imul dword [esp+16] ; dcscalar |
pmullw mm0,mm1 ; * dcscalar |
644 |
mov edx, [esp+ 4] ; data |
mov edx, [esp+ 4] ; data |
645 |
cmp eax,ecx |
paddsw mm0, mm5 ; saturate + |
646 |
cmovg eax,ecx |
psubsw mm0, mm5 |
647 |
not ecx |
psubsw mm0, mm5 ; saturate - |
648 |
cmp eax,ecx |
paddsw mm0, mm5 |
649 |
cmovl eax,ecx |
movd eax,mm0 |
|
|
|
650 |
mov [edx], ax |
mov [edx], ax |
651 |
|
|
652 |
xor eax, eax ; return 0 |
xor eax, eax ; return 0 |
653 |
ret |
ret |
654 |
|
.endfunc |
655 |
|
|
656 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
657 |
; |
; |
725 |
|
|
726 |
; deal with DC |
; deal with DC |
727 |
mov eax, [esp+ 8] ; coeff |
mov eax, [esp+ 8] ; coeff |
728 |
mov edx, [esp+ 4] ; data |
movd mm1,[esp+16] ; dcscalar |
729 |
movd mm0, [eax] |
movd mm0, [eax] |
730 |
pmullw mm0, [esp+16] ; dcscalar |
pmullw mm0, mm1 |
731 |
|
mov edx, [esp+ 4] ; data |
732 |
pminsw mm0,mm4 |
pminsw mm0,mm4 |
733 |
pmaxsw mm0,mm5 |
pmaxsw mm0,mm5 |
734 |
movd eax, mm0 |
movd eax, mm0 |
736 |
|
|
737 |
xor eax, eax ; return 0 |
xor eax, eax ; return 0 |
738 |
ret |
ret |
739 |
|
.endfunc |
740 |
|
|
741 |
|
|
742 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
756 |
mov eax, [esp+ 8] ; coeff |
mov eax, [esp+ 8] ; coeff |
757 |
|
|
758 |
movd xmm6,ecx ; quant |
movd xmm6,ecx ; quant |
759 |
; shr ecx,1 |
|
760 |
shl ecx,31 |
shl ecx,31 |
761 |
pshuflw xmm6,xmm6,0 |
pshuflw xmm6,xmm6,0 |
762 |
pcmpeqw xmm0,xmm0 |
pcmpeqw xmm0,xmm0 |
825 |
|
|
826 |
xor eax, eax ; return 0 |
xor eax, eax ; return 0 |
827 |
ret |
ret |
828 |
|
.endfunc |
829 |
|
|
830 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
831 |
; |
; |
896 |
|
|
897 |
xor eax, eax ; return 0 |
xor eax, eax ; return 0 |
898 |
ret |
ret |
899 |
|
.endfunc |
900 |
|
|
901 |
|
|
902 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
965 |
|
|
966 |
xor eax, eax ; return 0 |
xor eax, eax ; return 0 |
967 |
ret |
ret |
968 |
|
.endfunc |
969 |
|
|
970 |
|
|
971 |
;----------------------------------------------------------------------------- |
;----------------------------------------------------------------------------- |
1037 |
|
|
1038 |
xor eax, eax ; return 0 |
xor eax, eax ; return 0 |
1039 |
ret |
ret |
1040 |
|
.endfunc |
1041 |
|
|