~ubuntu-branches/ubuntu/oneiric/mplayer2/oneiric-proposed

« back to all changes in this revision

Viewing changes to ffmpeg-mt/libavutil/mips/intreadwrite.h

  • Committer: Bazaar Package Importer
  • Author(s): Reinhard Tartler
  • Date: 2011-03-20 22:48:03 UTC
  • Revision ID: james.westby@ubuntu.com-20110320224803-kc2nlrxz6pcphmf1
Tags: upstream-2.0~rc2
ImportĀ upstreamĀ versionĀ 2.0~rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Copyright (c) 2009 Mans Rullgard <mans@mansr.com>
 
3
 *
 
4
 * This file is part of FFmpeg.
 
5
 *
 
6
 * FFmpeg is free software; you can redistribute it and/or
 
7
 * modify it under the terms of the GNU Lesser General Public
 
8
 * License as published by the Free Software Foundation; either
 
9
 * version 2.1 of the License, or (at your option) any later version.
 
10
 *
 
11
 * FFmpeg is distributed in the hope that it will be useful,
 
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
14
 * Lesser General Public License for more details.
 
15
 *
 
16
 * You should have received a copy of the GNU Lesser General Public
 
17
 * License along with FFmpeg; if not, write to the Free Software
 
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
19
 */
 
20
 
 
21
#ifndef AVUTIL_MIPS_INTREADWRITE_H
 
22
#define AVUTIL_MIPS_INTREADWRITE_H
 
23
 
 
24
#include <stdint.h>
 
25
#include "config.h"
 
26
 
 
27
#define AV_RN32 AV_RN32
 
28
static av_always_inline uint32_t AV_RN32(const void *p)
 
29
{
 
30
    uint32_t v;
 
31
    __asm__ ("lwl %0, %1  \n\t"
 
32
             "lwr %0, %2  \n\t"
 
33
             : "=&r"(v)
 
34
             : "m"(*(const uint32_t *)((const uint8_t *)p+3*!HAVE_BIGENDIAN)),
 
35
               "m"(*(const uint32_t *)((const uint8_t *)p+3*HAVE_BIGENDIAN)));
 
36
    return v;
 
37
}
 
38
 
 
39
#define AV_WN32 AV_WN32
 
40
static av_always_inline void AV_WN32(void *p, uint32_t v)
 
41
{
 
42
    __asm__ ("swl %2, %0  \n\t"
 
43
             "swr %2, %1  \n\t"
 
44
             : "=m"(*(uint32_t *)((uint8_t *)p+3*!HAVE_BIGENDIAN)),
 
45
               "=m"(*(uint32_t *)((uint8_t *)p+3*HAVE_BIGENDIAN))
 
46
             : "r"(v));
 
47
}
 
48
 
 
49
#if ARCH_MIPS64
 
50
 
 
51
#define AV_RN64 AV_RN64
 
52
static av_always_inline uint64_t AV_RN64(const void *p)
 
53
{
 
54
    uint64_t v;
 
55
    __asm__ ("ldl %0, %1  \n\t"
 
56
             "ldr %0, %2  \n\t"
 
57
             : "=&r"(v)
 
58
             : "m"(*(const uint64_t *)((const uint8_t *)p+7*!HAVE_BIGENDIAN)),
 
59
               "m"(*(const uint64_t *)((const uint8_t *)p+7*HAVE_BIGENDIAN)));
 
60
    return v;
 
61
}
 
62
 
 
63
#define AV_WN64 AV_WN64
 
64
static av_always_inline void AV_WN64(void *p, uint64_t v)
 
65
{
 
66
    __asm__ ("sdl %2, %0  \n\t"
 
67
             "sdr %2, %1  \n\t"
 
68
             : "=m"(*(uint64_t *)((uint8_t *)p+7*!HAVE_BIGENDIAN)),
 
69
               "=m"(*(uint64_t *)((uint8_t *)p+7*HAVE_BIGENDIAN))
 
70
             : "r"(v));
 
71
}
 
72
 
 
73
#else
 
74
 
 
75
#define AV_RN64 AV_RN64
 
76
static av_always_inline uint64_t AV_RN64(const void *p)
 
77
{
 
78
    union { uint64_t v; uint32_t hl[2]; } v;
 
79
    v.hl[0] = AV_RN32(p);
 
80
    v.hl[1] = AV_RN32((const uint8_t *)p + 4);
 
81
    return v.v;
 
82
}
 
83
 
 
84
#define AV_WN64 AV_WN64
 
85
static av_always_inline void AV_WN64(void *p, uint64_t v)
 
86
{
 
87
    union { uint64_t v; uint32_t hl[2]; } vv = { v };
 
88
    AV_WN32(p, vv.hl[0]);
 
89
    AV_WN32((uint8_t *)p + 4, vv.hl[1]);
 
90
}
 
91
 
 
92
#endif /* ARCH_MIPS64 */
 
93
 
 
94
#endif /* AVUTIL_MIPS_INTREADWRITE_H */