~ubuntu-branches/ubuntu/jaunty/xvidcap/jaunty-proposed

« back to all changes in this revision

Viewing changes to ffmpeg/libavcodec/i386/dsputil_mmx_rnd.h

  • Committer: Bazaar Package Importer
  • Author(s): Lionel Le Folgoc, Andrew Starr-Bochicchio, Lionel Le Folgoc
  • Date: 2008-12-26 00:10:06 UTC
  • mfrom: (1.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20081226001006-2040ls9680bd1blt
Tags: 1.1.7-0.2ubuntu1
[ Andrew Starr-Bochicchio ]
* Merge from debian-multimedia (LP: #298547), Ubuntu Changes:
 - For ffmpeg-related build-deps, fix versionized dependencies
   as the ubuntu versioning is different than debian-multimedia's.

[ Lionel Le Folgoc ]
* LP: #311412 is fixed since the 1.1.7~rc1-0.1 revision.
* debian/patches/03_ffmpeg.diff: updated to fix FTBFS due to libswscale API
  change (cherry-pick from Gentoo #234383).

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
 * Copyright (c) 2000, 2001 Fabrice Bellard.
4
4
 * Copyright (c) 2003-2004 Michael Niedermayer <michaelni@gmx.at>
5
5
 *
 
6
 * MMX optimization by Nick Kurshev <nickols_k@mail.ru>
 
7
 * mostly rewritten by Michael Niedermayer <michaelni@gmx.at>
 
8
 * and improved by Zdenek Kabelac <kabi@users.sf.net>
 
9
 *
6
10
 * This file is part of FFmpeg.
7
11
 *
8
12
 * FFmpeg is free software; you can redistribute it and/or
18
22
 * You should have received a copy of the GNU Lesser General Public
19
23
 * License along with FFmpeg; if not, write to the Free Software
20
24
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
 
 *
22
 
 * MMX optimization by Nick Kurshev <nickols_k@mail.ru>
23
 
 * mostly rewritten by Michael Niedermayer <michaelni@gmx.at>
24
 
 * and improved by Zdenek Kabelac <kabi@users.sf.net>
25
25
 */
26
26
 
 
27
/* This header intentionally has no multiple inclusion guards. It is meant to
 
28
 * be included multiple times and generates different code depending on the
 
29
 * value of certain #defines. */
 
30
 
27
31
// put_pixels
28
32
static void DEF(put, pixels8_x2)(uint8_t *block, const uint8_t *pixels, int line_size, int h)
29
33
{
30
34
    MOVQ_BFE(mm6);
31
 
    __asm __volatile(
 
35
    asm volatile(
32
36
        "lea    (%3, %3), %%"REG_a"     \n\t"
33
37
        ASMALIGN(3)
34
38
        "1:                             \n\t"
57
61
        :REG_a, "memory");
58
62
}
59
63
 
60
 
static void attribute_unused DEF(put, pixels8_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
 
64
static void av_unused DEF(put, pixels8_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
61
65
{
62
66
    MOVQ_BFE(mm6);
63
 
    __asm __volatile(
 
67
    asm volatile(
64
68
        "testl $1, %0                   \n\t"
65
69
        " jz 1f                         \n\t"
66
70
        "movq   (%1), %%mm0             \n\t"
98
102
        "add    %5, %3                  \n\t"
99
103
        "subl   $4, %0                  \n\t"
100
104
        "jnz    1b                      \n\t"
101
 
#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
 
105
#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cannot be used
102
106
        :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
103
107
#else
104
108
        :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
110
114
static void DEF(put, pixels16_x2)(uint8_t *block, const uint8_t *pixels, int line_size, int h)
111
115
{
112
116
    MOVQ_BFE(mm6);
113
 
    __asm __volatile(
 
117
    asm volatile(
114
118
        "lea        (%3, %3), %%"REG_a" \n\t"
115
119
        ASMALIGN(3)
116
120
        "1:                             \n\t"
153
157
        :REG_a, "memory");
154
158
}
155
159
 
156
 
static void attribute_unused DEF(put, pixels16_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
 
160
static void av_unused DEF(put, pixels16_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
157
161
{
158
162
    MOVQ_BFE(mm6);
159
 
    __asm __volatile(
 
163
    asm volatile(
160
164
        "testl $1, %0                   \n\t"
161
165
        " jz 1f                         \n\t"
162
166
        "movq   (%1), %%mm0             \n\t"
193
197
        "add    $32, %2                 \n\t"
194
198
        "subl   $2, %0                  \n\t"
195
199
        "jnz    1b                      \n\t"
196
 
#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cant be used
 
200
#ifdef PIC //Note "+bm" and "+mb" are buggy too (with gcc 3.2.2 at least) and cannot be used
197
201
        :"+m"(h), "+a"(src1), "+c"(src2), "+d"(dst)
198
202
#else
199
203
        :"+b"(h), "+a"(src1), "+c"(src2), "+d"(dst)
205
209
static void DEF(put, pixels8_y2)(uint8_t *block, const uint8_t *pixels, int line_size, int h)
206
210
{
207
211
    MOVQ_BFE(mm6);
208
 
    __asm __volatile(
 
212
    asm volatile(
209
213
        "lea (%3, %3), %%"REG_a"        \n\t"
210
214
        "movq (%1), %%mm0               \n\t"
211
215
        ASMALIGN(3)
235
239
{
236
240
    MOVQ_ZERO(mm7);
237
241
    SET_RND(mm6); // =2 for rnd  and  =1 for no_rnd version
238
 
    __asm __volatile(
 
242
    asm volatile(
239
243
        "movq   (%1), %%mm0             \n\t"
240
244
        "movq   1(%1), %%mm4            \n\t"
241
245
        "movq   %%mm0, %%mm1            \n\t"
298
302
}
299
303
 
300
304
// avg_pixels
301
 
static void attribute_unused DEF(avg, pixels4)(uint8_t *block, const uint8_t *pixels, int line_size, int h)
 
305
static void av_unused DEF(avg, pixels4)(uint8_t *block, const uint8_t *pixels, int line_size, int h)
302
306
{
303
307
    MOVQ_BFE(mm6);
304
308
    JUMPALIGN();
305
309
    do {
306
 
        __asm __volatile(
 
310
        asm volatile(
307
311
             "movd  %0, %%mm0           \n\t"
308
312
             "movd  %1, %%mm1           \n\t"
309
313
             PAVGB(%%mm0, %%mm1, %%mm2, %%mm6)
323
327
    MOVQ_BFE(mm6);
324
328
    JUMPALIGN();
325
329
    do {
326
 
        __asm __volatile(
 
330
        asm volatile(
327
331
             "movq  %0, %%mm0           \n\t"
328
332
             "movq  %1, %%mm1           \n\t"
329
333
             PAVGB(%%mm0, %%mm1, %%mm2, %%mm6)
342
346
    MOVQ_BFE(mm6);
343
347
    JUMPALIGN();
344
348
    do {
345
 
        __asm __volatile(
 
349
        asm volatile(
346
350
             "movq  %0, %%mm0           \n\t"
347
351
             "movq  %1, %%mm1           \n\t"
348
352
             PAVGB(%%mm0, %%mm1, %%mm2, %%mm6)
365
369
    MOVQ_BFE(mm6);
366
370
    JUMPALIGN();
367
371
    do {
368
 
        __asm __volatile(
 
372
        asm volatile(
369
373
            "movq  %1, %%mm0            \n\t"
370
374
            "movq  1%1, %%mm1           \n\t"
371
375
            "movq  %0, %%mm3            \n\t"
380
384
    } while (--h);
381
385
}
382
386
 
383
 
static __attribute__((unused)) void DEF(avg, pixels8_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
 
387
static av_unused void DEF(avg, pixels8_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
384
388
{
385
389
    MOVQ_BFE(mm6);
386
390
    JUMPALIGN();
387
391
    do {
388
 
        __asm __volatile(
 
392
        asm volatile(
389
393
            "movq  %1, %%mm0            \n\t"
390
394
            "movq  %2, %%mm1            \n\t"
391
395
            "movq  %0, %%mm3            \n\t"
406
410
    MOVQ_BFE(mm6);
407
411
    JUMPALIGN();
408
412
    do {
409
 
        __asm __volatile(
 
413
        asm volatile(
410
414
            "movq  %1, %%mm0            \n\t"
411
415
            "movq  1%1, %%mm1           \n\t"
412
416
            "movq  %0, %%mm3            \n\t"
427
431
    } while (--h);
428
432
}
429
433
 
430
 
static __attribute__((unused)) void DEF(avg, pixels16_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
 
434
static av_unused void DEF(avg, pixels16_l2)(uint8_t *dst, uint8_t *src1, uint8_t *src2, int dstStride, int src1Stride, int h)
431
435
{
432
436
    MOVQ_BFE(mm6);
433
437
    JUMPALIGN();
434
438
    do {
435
 
        __asm __volatile(
 
439
        asm volatile(
436
440
            "movq  %1, %%mm0            \n\t"
437
441
            "movq  %2, %%mm1            \n\t"
438
442
            "movq  %0, %%mm3            \n\t"
457
461
static void DEF(avg, pixels8_y2)(uint8_t *block, const uint8_t *pixels, int line_size, int h)
458
462
{
459
463
    MOVQ_BFE(mm6);
460
 
    __asm __volatile(
 
464
    asm volatile(
461
465
        "lea    (%3, %3), %%"REG_a"     \n\t"
462
466
        "movq   (%1), %%mm0             \n\t"
463
467
        ASMALIGN(3)
498
502
{
499
503
    MOVQ_ZERO(mm7);
500
504
    SET_RND(mm6); // =2 for rnd  and  =1 for no_rnd version
501
 
    __asm __volatile(
 
505
    asm volatile(
502
506
        "movq   (%1), %%mm0             \n\t"
503
507
        "movq   1(%1), %%mm4            \n\t"
504
508
        "movq   %%mm0, %%mm1            \n\t"
588
592
    DEF(avg, pixels8_xy2)(block  , pixels  , line_size, h);
589
593
    DEF(avg, pixels8_xy2)(block+8, pixels+8, line_size, h);
590
594
}
591
 
 
592