FFmpeg
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavutil
ppc
intreadwrite.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2008 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_PPC_INTREADWRITE_H
22
#define AVUTIL_PPC_INTREADWRITE_H
23
24
#include <stdint.h>
25
#include "config.h"
26
27
#if HAVE_XFORM_ASM
28
29
#define AV_RL16 AV_RL16
30
static
av_always_inline
uint16_t
AV_RL16
(
const
void
*p)
31
{
32
uint16_t v;
33
__asm__ (
"lhbrx %0, %y1"
:
"=r"
(v) :
"Z"
(*(
const
uint16_t*)p));
34
return
v;
35
}
36
37
#define AV_WL16 AV_WL16
38
static
av_always_inline
void
AV_WL16
(
void
*p, uint16_t v)
39
{
40
__asm__ (
"sthbrx %1, %y0"
:
"=Z"
(*(uint16_t*)p) :
"r"
(v));
41
}
42
43
#define AV_RL32 AV_RL32
44
static
av_always_inline
uint32_t
AV_RL32
(
const
void
*p)
45
{
46
uint32_t v;
47
__asm__ (
"lwbrx %0, %y1"
:
"=r"
(v) :
"Z"
(*(
const
uint32_t*)p));
48
return
v;
49
}
50
51
#define AV_WL32 AV_WL32
52
static
av_always_inline
void
AV_WL32
(
void
*p, uint32_t v)
53
{
54
__asm__ (
"stwbrx %1, %y0"
:
"=Z"
(*(uint32_t*)p) :
"r"
(v));
55
}
56
57
#if HAVE_LDBRX
58
59
#define AV_RL64 AV_RL64
60
static
av_always_inline
uint64_t
AV_RL64
(
const
void
*p)
61
{
62
uint64_t v;
63
__asm__ (
"ldbrx %0, %y1"
:
"=r"
(v) :
"Z"
(*(
const
uint64_t*)p));
64
return
v;
65
}
66
67
#define AV_WL64 AV_WL64
68
static
av_always_inline
void
AV_WL64
(
void
*p, uint64_t v)
69
{
70
__asm__ (
"stdbrx %1, %y0"
:
"=Z"
(*(uint64_t*)p) :
"r"
(v));
71
}
72
73
#else
74
75
#define AV_RL64 AV_RL64
76
static
av_always_inline
uint64_t
AV_RL64
(
const
void
*p)
77
{
78
union
{ uint64_t v; uint32_t hl[2]; } v;
79
__asm__ (
"lwbrx %0, %y2 \n\t"
80
"lwbrx %1, %y3 \n\t"
81
:
"=&r"
(v.hl[1]),
"=r"
(v.hl[0])
82
:
"Z"
(*(
const
uint32_t*)p),
"Z"
(*((
const
uint32_t*)p+1)));
83
return
v.v;
84
}
85
86
#define AV_WL64 AV_WL64
87
static
av_always_inline
void
AV_WL64
(
void
*p, uint64_t v)
88
{
89
union
{ uint64_t v; uint32_t hl[2]; } vv = { v };
90
__asm__ (
"stwbrx %2, %y0 \n\t"
91
"stwbrx %3, %y1 \n\t"
92
:
"=Z"
(*(uint32_t*)p),
"=Z"
(*((uint32_t*)p+1))
93
:
"r"
(vv.hl[1]),
"r"
(vv.hl[0]));
94
}
95
96
#endif
/* HAVE_LDBRX */
97
98
#endif
/* HAVE_XFORM_ASM */
99
100
/*
101
* GCC fails miserably on the packed struct version which is used by
102
* default, so we override it here.
103
*/
104
105
#define AV_RB64(p) (*(const uint64_t *)(p))
106
#define AV_WB64(p, v) (*(uint64_t *)(p) = (v))
107
108
#endif
/* AVUTIL_PPC_INTREADWRITE_H */
Generated on Sat May 25 2013 03:58:49 for FFmpeg by
1.8.2