~ubuntu-branches/ubuntu/utopic/libav/utopic

« back to all changes in this revision

Viewing changes to libavutil/x86/float_dsp.asm

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-12-21 15:32:13 UTC
  • mto: (1.2.18)
  • mto: This revision was merged to the branch mainline in revision 34.
  • Revision ID: package-import@ubuntu.com-20121221153213-fudzrugjzivtv0wp
Tags: upstream-9~beta3
ImportĀ upstreamĀ versionĀ 9~beta3

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
19
;******************************************************************************
20
20
 
21
 
%include "x86inc.asm"
22
21
%include "x86util.asm"
23
22
 
24
23
SECTION .text
45
44
 
46
45
INIT_XMM sse
47
46
VECTOR_FMUL
48
 
%if HAVE_AVX_EXTERNAL
49
47
INIT_YMM avx
50
48
VECTOR_FMUL
51
 
%endif
52
49
 
53
50
;------------------------------------------------------------------------------
54
51
; void ff_vector_fmac_scalar(float *dst, const float *src, float mul, int len)
86
83
 
87
84
INIT_XMM sse
88
85
VECTOR_FMAC_SCALAR
 
86
INIT_YMM avx
 
87
VECTOR_FMAC_SCALAR
 
88
 
 
89
;------------------------------------------------------------------------------
 
90
; void ff_vector_fmul_scalar(float *dst, const float *src, float mul, int len)
 
91
;------------------------------------------------------------------------------
 
92
 
 
93
%macro VECTOR_FMUL_SCALAR 0
 
94
%if UNIX64
 
95
cglobal vector_fmul_scalar, 3,3,2, dst, src, len
 
96
%else
 
97
cglobal vector_fmul_scalar, 4,4,3, dst, src, mul, len
 
98
%endif
 
99
%if ARCH_X86_32
 
100
    movss    m0, mulm
 
101
%elif WIN64
 
102
    SWAP 0, 2
 
103
%endif
 
104
    shufps   m0, m0, 0
 
105
    lea    lenq, [lend*4-mmsize]
 
106
.loop:
 
107
    mova     m1, [srcq+lenq]
 
108
    mulps    m1, m0
 
109
    mova  [dstq+lenq], m1
 
110
    sub    lenq, mmsize
 
111
    jge .loop
 
112
    REP_RET
 
113
%endmacro
 
114
 
 
115
INIT_XMM sse
 
116
VECTOR_FMUL_SCALAR
 
117
 
 
118
;------------------------------------------------------------------------------
 
119
; void ff_vector_dmul_scalar(double *dst, const double *src, double mul,
 
120
;                            int len)
 
121
;------------------------------------------------------------------------------
 
122
 
 
123
%macro VECTOR_DMUL_SCALAR 0
 
124
%if ARCH_X86_32
 
125
cglobal vector_dmul_scalar, 3,4,3, dst, src, mul, len, lenaddr
 
126
    mov          lenq, lenaddrm
 
127
%elif UNIX64
 
128
cglobal vector_dmul_scalar, 3,3,3, dst, src, len
 
129
%else
 
130
cglobal vector_dmul_scalar, 4,4,3, dst, src, mul, len
 
131
%endif
 
132
%if ARCH_X86_32
 
133
    VBROADCASTSD   m0, mulm
 
134
%else
 
135
%if WIN64
 
136
    movlhps      xmm2, xmm2
 
137
%if cpuflag(avx)
 
138
    vinsertf128  ymm2, ymm2, xmm2, 1
 
139
%endif
 
140
    SWAP 0, 2
 
141
%else
 
142
    movlhps      xmm0, xmm0
 
143
%if cpuflag(avx)
 
144
    vinsertf128  ymm0, ymm0, xmm0, 1
 
145
%endif
 
146
%endif
 
147
%endif
 
148
    lea          lenq, [lend*8-2*mmsize]
 
149
.loop:
 
150
    mulpd          m1, m0, [srcq+lenq       ]
 
151
    mulpd          m2, m0, [srcq+lenq+mmsize]
 
152
    mova   [dstq+lenq       ], m1
 
153
    mova   [dstq+lenq+mmsize], m2
 
154
    sub          lenq, 2*mmsize
 
155
    jge .loop
 
156
    REP_RET
 
157
%endmacro
 
158
 
 
159
INIT_XMM sse2
 
160
VECTOR_DMUL_SCALAR
89
161
%if HAVE_AVX_EXTERNAL
90
162
INIT_YMM avx
91
 
VECTOR_FMAC_SCALAR
 
163
VECTOR_DMUL_SCALAR
92
164
%endif