~ubuntu-branches/ubuntu/trusty/gst-libav1.0/trusty-proposed

« back to all changes in this revision

Viewing changes to gst-libs/ext/libav/libavcodec/x86/h264_weight_10bit.asm

  • Committer: Package Import Robot
  • Author(s): Sebastian Dröge
  • Date: 2013-09-24 17:07:00 UTC
  • mfrom: (1.1.17) (7.1.9 experimental)
  • Revision ID: package-import@ubuntu.com-20130924170700-4dg62s3pwl0pdakz
Tags: 1.2.0-1
* New upstream stable release:
  + debian/control:
    - Build depend on GStreamer and gst-plugins-base >= 1.2.0.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
23
23
;******************************************************************************
24
24
 
25
 
%include "x86inc.asm"
26
 
%include "x86util.asm"
 
25
%include "libavutil/x86/x86util.asm"
27
26
 
28
27
SECTION_RODATA 32
29
28
 
40
39
;                  int weight, int offset);
41
40
;-----------------------------------------------------------------------------
42
41
%macro WEIGHT_PROLOGUE 0
43
 
.prologue
 
42
.prologue:
44
43
    PROLOGUE 0,6,8
45
44
    movifnidn  r0, r0mp
46
45
    movifnidn r1d, r1m
49
48
    movifnidn r5d, r5m
50
49
%endmacro
51
50
 
52
 
%macro WEIGHT_SETUP 1
 
51
%macro WEIGHT_SETUP 0
53
52
    mova       m0, [pw_1]
54
53
    movd       m2, r3m
55
54
    pslld      m0, m2       ; 1<<log2_denom
60
59
    pshufd     m3, m3, 0
61
60
    mova       m4, [pw_pixel_max]
62
61
    paddw      m2, [sq_1]   ; log2_denom+1
63
 
%ifnidn %1, sse4
 
62
%if notcpuflag(sse4)
64
63
    pxor       m7, m7
65
64
%endif
66
65
%endmacro
67
66
 
68
 
%macro WEIGHT_OP 2-3
69
 
%if %0==2
70
 
    mova        m5, [r0+%2]
 
67
%macro WEIGHT_OP 1-2
 
68
%if %0==1
 
69
    mova        m5, [r0+%1]
71
70
    punpckhwd   m6, m5, m0
72
71
    punpcklwd   m5, m0
73
72
%else
74
 
    movq        m5, [r0+%2]
75
 
    movq        m6, [r0+%3]
 
73
    movq        m5, [r0+%1]
 
74
    movq        m6, [r0+%2]
76
75
    punpcklwd   m5, m0
77
76
    punpcklwd   m6, m0
78
77
%endif
80
79
    pmaddwd     m6, m3
81
80
    psrad       m5, m2
82
81
    psrad       m6, m2
83
 
%ifidn %1, sse4
 
82
%if cpuflag(sse4)
84
83
    packusdw    m5, m6
85
84
    pminsw      m5, m4
86
85
%else
89
88
%endif
90
89
%endmacro
91
90
 
92
 
%macro WEIGHT_FUNC_DBL 1
93
 
cglobal h264_weight_16_10_%1
 
91
%macro WEIGHT_FUNC_DBL 0
 
92
cglobal h264_weight_16_10
94
93
    WEIGHT_PROLOGUE
95
 
    WEIGHT_SETUP %1
96
 
.nextrow
97
 
    WEIGHT_OP %1,  0
 
94
    WEIGHT_SETUP
 
95
.nextrow:
 
96
    WEIGHT_OP  0
98
97
    mova [r0   ], m5
99
 
    WEIGHT_OP %1, 16
 
98
    WEIGHT_OP 16
100
99
    mova [r0+16], m5
101
100
    add       r0, r1
102
101
    dec       r2d
104
103
    REP_RET
105
104
%endmacro
106
105
 
107
 
INIT_XMM
108
 
WEIGHT_FUNC_DBL sse2
109
 
WEIGHT_FUNC_DBL sse4
110
 
 
111
 
 
112
 
%macro WEIGHT_FUNC_MM 1
113
 
cglobal h264_weight_8_10_%1
 
106
INIT_XMM sse2
 
107
WEIGHT_FUNC_DBL
 
108
INIT_XMM sse4
 
109
WEIGHT_FUNC_DBL
 
110
 
 
111
 
 
112
%macro WEIGHT_FUNC_MM 0
 
113
cglobal h264_weight_8_10
114
114
    WEIGHT_PROLOGUE
115
 
    WEIGHT_SETUP %1
116
 
.nextrow
117
 
    WEIGHT_OP  %1, 0
 
115
    WEIGHT_SETUP
 
116
.nextrow:
 
117
    WEIGHT_OP   0
118
118
    mova     [r0], m5
119
119
    add        r0, r1
120
120
    dec        r2d
122
122
    REP_RET
123
123
%endmacro
124
124
 
125
 
INIT_XMM
126
 
WEIGHT_FUNC_MM sse2
127
 
WEIGHT_FUNC_MM sse4
128
 
 
129
 
 
130
 
%macro WEIGHT_FUNC_HALF_MM 1
131
 
cglobal h264_weight_4_10_%1
 
125
INIT_XMM sse2
 
126
WEIGHT_FUNC_MM
 
127
INIT_XMM sse4
 
128
WEIGHT_FUNC_MM
 
129
 
 
130
 
 
131
%macro WEIGHT_FUNC_HALF_MM 0
 
132
cglobal h264_weight_4_10
132
133
    WEIGHT_PROLOGUE
133
134
    sar         r2d, 1
134
 
    WEIGHT_SETUP %1
 
135
    WEIGHT_SETUP
135
136
    lea         r3, [r1*2]
136
 
.nextrow
137
 
    WEIGHT_OP   %1, 0, r1
 
137
.nextrow:
 
138
    WEIGHT_OP    0, r1
138
139
    movh      [r0], m5
139
140
    movhps [r0+r1], m5
140
141
    add         r0, r3
143
144
    REP_RET
144
145
%endmacro
145
146
 
146
 
INIT_XMM
147
 
WEIGHT_FUNC_HALF_MM sse2
148
 
WEIGHT_FUNC_HALF_MM sse4
 
147
INIT_XMM sse2
 
148
WEIGHT_FUNC_HALF_MM
 
149
INIT_XMM sse4
 
150
WEIGHT_FUNC_HALF_MM
149
151
 
150
152
 
151
153
;-----------------------------------------------------------------------------
152
154
; void h264_biweight(uint8_t *dst, uint8_t *src, int stride, int height,
153
155
;                    int log2_denom, int weightd, int weights, int offset);
154
156
;-----------------------------------------------------------------------------
155
 
%ifdef ARCH_X86_32
 
157
%if ARCH_X86_32
156
158
DECLARE_REG_TMP 3
157
159
%else
158
 
DECLARE_REG_TMP 10
 
160
DECLARE_REG_TMP 7
159
161
%endif
160
162
 
161
163
%macro BIWEIGHT_PROLOGUE 0
162
 
.prologue
163
 
    PROLOGUE 0,7,8
 
164
.prologue:
 
165
    PROLOGUE 0,8,8
164
166
    movifnidn  r0, r0mp
165
167
    movifnidn  r1, r1mp
166
168
    movifnidn r2d, r2m
169
171
    movifnidn t0d, r7m
170
172
%endmacro
171
173
 
172
 
%macro BIWEIGHT_SETUP 1
 
174
%macro BIWEIGHT_SETUP 0
173
175
    lea        t0, [t0*4+1] ; (offset<<2)+1
174
176
    or         t0, 1
175
177
    shl        r6, 16
183
185
    pshufd     m5, m5, 0
184
186
    mova       m3, [pw_pixel_max]
185
187
    movifnidn r3d, r3m
186
 
%ifnidn %1, sse4
 
188
%if notcpuflag(sse4)
187
189
    pxor       m7, m7
188
190
%endif
189
191
%endmacro
190
192
 
191
 
%macro BIWEIGHT 2-3
192
 
%if %0==2
193
 
    mova       m0, [r0+%2]
194
 
    mova       m1, [r1+%2]
 
193
%macro BIWEIGHT 1-2
 
194
%if %0==1
 
195
    mova       m0, [r0+%1]
 
196
    mova       m1, [r1+%1]
195
197
    punpckhwd  m2, m0, m1
196
198
    punpcklwd  m0, m1
197
199
%else
198
 
    movq       m0, [r0+%2]
 
200
    movq       m0, [r0+%1]
 
201
    movq       m1, [r1+%1]
 
202
    punpcklwd  m0, m1
 
203
    movq       m2, [r0+%2]
199
204
    movq       m1, [r1+%2]
200
 
    punpcklwd  m0, m1
201
 
    movq       m2, [r0+%3]
202
 
    movq       m1, [r1+%3]
203
205
    punpcklwd  m2, m1
204
206
%endif
205
207
    pmaddwd    m0, m4
208
210
    paddd      m2, m5
209
211
    psrad      m0, m6
210
212
    psrad      m2, m6
211
 
%ifidn %1, sse4
 
213
%if cpuflag(sse4)
212
214
    packusdw   m0, m2
213
215
    pminsw     m0, m3
214
216
%else
217
219
%endif
218
220
%endmacro
219
221
 
220
 
%macro BIWEIGHT_FUNC_DBL 1
221
 
cglobal h264_biweight_16_10_%1
 
222
%macro BIWEIGHT_FUNC_DBL 0
 
223
cglobal h264_biweight_16_10
222
224
    BIWEIGHT_PROLOGUE
223
 
    BIWEIGHT_SETUP %1
224
 
.nextrow
225
 
    BIWEIGHT  %1,  0
 
225
    BIWEIGHT_SETUP
 
226
.nextrow:
 
227
    BIWEIGHT   0
226
228
    mova [r0   ], m0
227
 
    BIWEIGHT  %1, 16
 
229
    BIWEIGHT  16
228
230
    mova [r0+16], m0
229
231
    add       r0, r2
230
232
    add       r1, r2
233
235
    REP_RET
234
236
%endmacro
235
237
 
236
 
INIT_XMM
237
 
BIWEIGHT_FUNC_DBL sse2
238
 
BIWEIGHT_FUNC_DBL sse4
 
238
INIT_XMM sse2
 
239
BIWEIGHT_FUNC_DBL
 
240
INIT_XMM sse4
 
241
BIWEIGHT_FUNC_DBL
239
242
 
240
 
%macro BIWEIGHT_FUNC 1
241
 
cglobal h264_biweight_8_10_%1
 
243
%macro BIWEIGHT_FUNC 0
 
244
cglobal h264_biweight_8_10
242
245
    BIWEIGHT_PROLOGUE
243
 
    BIWEIGHT_SETUP %1
244
 
.nextrow
245
 
    BIWEIGHT %1, 0
 
246
    BIWEIGHT_SETUP
 
247
.nextrow:
 
248
    BIWEIGHT  0
246
249
    mova   [r0], m0
247
250
    add      r0, r2
248
251
    add      r1, r2
251
254
    REP_RET
252
255
%endmacro
253
256
 
254
 
INIT_XMM
255
 
BIWEIGHT_FUNC sse2
256
 
BIWEIGHT_FUNC sse4
 
257
INIT_XMM sse2
 
258
BIWEIGHT_FUNC
 
259
INIT_XMM sse4
 
260
BIWEIGHT_FUNC
257
261
 
258
 
%macro BIWEIGHT_FUNC_HALF 1
259
 
cglobal h264_biweight_4_10_%1
 
262
%macro BIWEIGHT_FUNC_HALF 0
 
263
cglobal h264_biweight_4_10
260
264
    BIWEIGHT_PROLOGUE
261
 
    BIWEIGHT_SETUP %1
 
265
    BIWEIGHT_SETUP
262
266
    sar        r3d, 1
263
267
    lea        r4, [r2*2]
264
 
.nextrow
265
 
    BIWEIGHT    %1, 0, r2
 
268
.nextrow:
 
269
    BIWEIGHT     0, r2
266
270
    movh   [r0   ], m0
267
271
    movhps [r0+r2], m0
268
272
    add         r0, r4
272
276
    REP_RET
273
277
%endmacro
274
278
 
275
 
INIT_XMM
276
 
BIWEIGHT_FUNC_HALF sse2
277
 
BIWEIGHT_FUNC_HALF sse4
 
279
INIT_XMM sse2
 
280
BIWEIGHT_FUNC_HALF
 
281
INIT_XMM sse4
 
282
BIWEIGHT_FUNC_HALF