~medibuntu-maintainers/mplayer/medibuntu.precise

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/x86/fmtconvert.asm

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-01-12 22:23:28 UTC
  • mfrom: (0.4.7 sid)
  • mto: This revision was merged to the branch mainline in revision 76.
  • Revision ID: package-import@ubuntu.com-20120112222328-8jqdyodym3p84ygu
Tags: 2:1.0~rc4.dfsg1+svn34540-1
* New upstream snapshot
* upload to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 
25
25
SECTION_TEXT
26
26
 
 
27
;---------------------------------------------------------------------------------
 
28
; void int32_to_float_fmul_scalar(float *dst, const int *src, float mul, int len);
 
29
;---------------------------------------------------------------------------------
 
30
%macro INT32_TO_FLOAT_FMUL_SCALAR 2
 
31
%ifdef UNIX64
 
32
cglobal int32_to_float_fmul_scalar_%1, 3,3,%2, dst, src, len
 
33
%else
 
34
cglobal int32_to_float_fmul_scalar_%1, 4,4,%2, dst, src, mul, len
 
35
%endif
 
36
%ifdef WIN64
 
37
    SWAP 0, 2
 
38
%elifdef ARCH_X86_32
 
39
    movss   m0, mulm
 
40
%endif
 
41
    SPLATD  m0
 
42
    shl     lenq, 2
 
43
    add     srcq, lenq
 
44
    add     dstq, lenq
 
45
    neg     lenq
 
46
.loop:
 
47
%ifidn %1, sse2
 
48
    cvtdq2ps  m1, [srcq+lenq   ]
 
49
    cvtdq2ps  m2, [srcq+lenq+16]
 
50
%else
 
51
    cvtpi2ps  m1, [srcq+lenq   ]
 
52
    cvtpi2ps  m3, [srcq+lenq+ 8]
 
53
    cvtpi2ps  m2, [srcq+lenq+16]
 
54
    cvtpi2ps  m4, [srcq+lenq+24]
 
55
    movlhps   m1, m3
 
56
    movlhps   m2, m4
 
57
%endif
 
58
    mulps     m1, m0
 
59
    mulps     m2, m0
 
60
    mova  [dstq+lenq   ], m1
 
61
    mova  [dstq+lenq+16], m2
 
62
    add     lenq, 32
 
63
    jl .loop
 
64
    REP_RET
 
65
%endmacro
 
66
 
 
67
INIT_XMM
 
68
%define SPLATD SPLATD_SSE
 
69
%define movdqa movaps
 
70
INT32_TO_FLOAT_FMUL_SCALAR sse, 5
 
71
%undef movdqa
 
72
%define SPLATD SPLATD_SSE2
 
73
INT32_TO_FLOAT_FMUL_SCALAR sse2, 3
 
74
%undef SPLATD
 
75
 
 
76
 
 
77
;------------------------------------------------------------------------------
 
78
; void ff_float_to_int16(int16_t *dst, const float *src, long len);
 
79
;------------------------------------------------------------------------------
 
80
%macro FLOAT_TO_INT16 2
 
81
cglobal float_to_int16_%1, 3,3,%2, dst, src, len
 
82
    add       lenq, lenq
 
83
    lea       srcq, [srcq+2*lenq]
 
84
    add       dstq, lenq
 
85
    neg       lenq
 
86
.loop:
 
87
%ifidn %1, sse2
 
88
    cvtps2dq    m0, [srcq+2*lenq   ]
 
89
    cvtps2dq    m1, [srcq+2*lenq+16]
 
90
    packssdw    m0, m1
 
91
    mova  [dstq+lenq], m0
 
92
%else
 
93
    cvtps2pi    m0, [srcq+2*lenq   ]
 
94
    cvtps2pi    m1, [srcq+2*lenq+ 8]
 
95
    cvtps2pi    m2, [srcq+2*lenq+16]
 
96
    cvtps2pi    m3, [srcq+2*lenq+24]
 
97
    packssdw    m0, m1
 
98
    packssdw    m2, m3
 
99
    mova  [dstq+lenq  ], m0
 
100
    mova  [dstq+lenq+8], m2
 
101
%endif
 
102
    add       lenq, 16
 
103
    js .loop
 
104
%ifnidn %1, sse2
 
105
    emms
 
106
%endif
 
107
    REP_RET
 
108
%endmacro
 
109
 
 
110
INIT_XMM
 
111
FLOAT_TO_INT16 sse2, 2
 
112
INIT_MMX
 
113
FLOAT_TO_INT16 sse, 0
 
114
%define cvtps2pi pf2id
 
115
FLOAT_TO_INT16 3dnow, 0
 
116
%undef cvtps2pi
 
117
 
 
118
 
 
119
;-------------------------------------------------------------------------------
 
120
; void ff_float_to_int16_interleave2(int16_t *dst, const float **src, long len);
 
121
;-------------------------------------------------------------------------------
 
122
%macro FLOAT_TO_INT16_INTERLEAVE2 1
 
123
cglobal float_to_int16_interleave2_%1, 3,4,2, dst, src0, src1, len
 
124
    lea      lenq, [4*r2q]
 
125
    mov     src1q, [src0q+gprsize]
 
126
    mov     src0q, [src0q]
 
127
    add      dstq, lenq
 
128
    add     src0q, lenq
 
129
    add     src1q, lenq
 
130
    neg      lenq
 
131
.loop:
 
132
%ifidn %1, sse2
 
133
    cvtps2dq   m0, [src0q+lenq]
 
134
    cvtps2dq   m1, [src1q+lenq]
 
135
    packssdw   m0, m1
 
136
    movhlps    m1, m0
 
137
    punpcklwd  m0, m1
 
138
    mova  [dstq+lenq], m0
 
139
%else
 
140
    cvtps2pi   m0, [src0q+lenq  ]
 
141
    cvtps2pi   m1, [src0q+lenq+8]
 
142
    cvtps2pi   m2, [src1q+lenq  ]
 
143
    cvtps2pi   m3, [src1q+lenq+8]
 
144
    packssdw   m0, m1
 
145
    packssdw   m2, m3
 
146
    mova       m1, m0
 
147
    punpcklwd  m0, m2
 
148
    punpckhwd  m1, m2
 
149
    mova  [dstq+lenq  ], m0
 
150
    mova  [dstq+lenq+8], m1
 
151
%endif
 
152
    add      lenq, 16
 
153
    js .loop
 
154
%ifnidn %1, sse2
 
155
    emms
 
156
%endif
 
157
    REP_RET
 
158
%endmacro
 
159
 
 
160
INIT_MMX
 
161
%define cvtps2pi pf2id
 
162
FLOAT_TO_INT16_INTERLEAVE2 3dnow
 
163
%undef cvtps2pi
 
164
%define movdqa movaps
 
165
FLOAT_TO_INT16_INTERLEAVE2 sse
 
166
%undef movdqa
 
167
INIT_XMM
 
168
FLOAT_TO_INT16_INTERLEAVE2 sse2
 
169
 
 
170
 
27
171
%macro PSWAPD_SSE 2
28
172
    pshufw %1, %2, 0x4e
29
173
%endmacro