~ubuntu-branches/ubuntu/edgy/gstreamer0.10-ffmpeg/edgy

« back to all changes in this revision

Viewing changes to gst-libs/ext/ffmpeg/libavutil/bswap.h

  • Committer: Bazaar Package Importer
  • Author(s): Sebastian Dröge
  • Date: 2006-04-01 16:13:43 UTC
  • mto: This revision was merged to the branch mainline in revision 5.
  • Revision ID: james.westby@ubuntu.com-20060401161343-n621cgjlujio0otg
Tags: upstream-0.10.1
Import upstream version 0.10.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
#if defined(ARCH_X86) || defined(ARCH_X86_64)
20
20
static always_inline uint16_t bswap_16(uint16_t x)
21
21
{
22
 
  __asm("rorw $8, %0"   :
23
 
        LEGACY_REGS (x) :
 
22
  __asm("rorw $8, %0"   :
 
23
        LEGACY_REGS (x) :
24
24
        "0" (x));
25
25
    return x;
26
26
}
28
28
static always_inline uint32_t bswap_32(uint32_t x)
29
29
{
30
30
#if __CPU__ > 386
31
 
 __asm("bswap   %0":
 
31
 __asm("bswap   %0":
32
32
      "=r" (x)     :
33
33
#else
34
 
 __asm("xchgb   %b0,%h0\n"
35
 
      " rorl    $16,%0\n"
36
 
      " xchgb   %b0,%h0":
37
 
      LEGACY_REGS (x)           :
 
34
 __asm("xchgb   %b0,%h0\n"
 
35
      "         rorl    $16,%0\n"
 
36
      "         xchgb   %b0,%h0":
 
37
      LEGACY_REGS (x)                :
38
38
#endif
39
39
      "0" (x));
40
40
  return x;
43
43
static inline uint64_t bswap_64(uint64_t x)
44
44
{
45
45
#ifdef ARCH_X86_64
46
 
  __asm("bswap  %0":
47
 
        "=r" (x)     :
 
46
  __asm("bswap  %0":
 
47
        "=r" (x)   :
48
48
        "0" (x));
49
49
  return x;
50
50
#else
51
 
    union { 
 
51
    union {
52
52
        uint64_t ll;
53
53
        struct {
54
54
           uint32_t l,h;
63
63
#elif defined(ARCH_SH4)
64
64
 
65
65
static always_inline uint16_t bswap_16(uint16_t x) {
66
 
        __asm__("swap.b %0,%0":"=r"(x):"0"(x));
67
 
        return x;
 
66
        __asm__("swap.b %0,%0":"=r"(x):"0"(x));
 
67
        return x;
68
68
}
69
69
 
70
70
static always_inline uint32_t bswap_32(uint32_t x) {
71
 
        __asm__(
72
 
        "swap.b %0,%0\n"
73
 
        "swap.w %0,%0\n"
74
 
        "swap.b %0,%0\n"
75
 
        :"=r"(x):"0"(x));
76
 
        return x;
 
71
        __asm__(
 
72
        "swap.b %0,%0\n"
 
73
        "swap.w %0,%0\n"
 
74
        "swap.b %0,%0\n"
 
75
        :"=r"(x):"0"(x));
 
76
        return x;
77
77
}
78
78
 
79
79
static inline uint64_t bswap_64(uint64_t x)
80
80
{
81
 
    union { 
 
81
    union {
82
82
        uint64_t ll;
83
83
        struct {
84
84
           uint32_t l,h;
119
119
    x= ((x<<16)&0xFFFF0000FFFF0000ULL) | ((x>>16)&0x0000FFFF0000FFFFULL);
120
120
    return (x>>32) | (x<<32);
121
121
#else
122
 
    union { 
 
122
    union {
123
123
        uint64_t ll;
124
 
        uint32_t l[2]; 
 
124
        uint32_t l[2];
125
125
    } w, r;
126
126
    w.ll = x;
127
127
    r.l[0] = bswap_32 (w.l[1]);
129
129
    return r.ll;
130
130
#endif
131
131
}
132
 
#endif  /* !ARCH_X86 */
 
132
#endif  /* !ARCH_X86 */
133
133
 
134
 
#endif  /* !HAVE_BYTESWAP_H */
 
134
#endif  /* !HAVE_BYTESWAP_H */
135
135
 
136
136
// be2me ... BigEndian to MachineEndian
137
137
// le2me ... LittleEndian to MachineEndian