FFmpeg
4.0
libavutil
arm
intreadwrite.h
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#ifndef AVUTIL_ARM_INTREADWRITE_H
20
#define AVUTIL_ARM_INTREADWRITE_H
21
22
#include <stdint.h>
23
#include "config.h"
24
#include "
libavutil/attributes.h
"
25
26
#if HAVE_FAST_UNALIGNED && HAVE_INLINE_ASM && AV_GCC_VERSION_AT_MOST(4,6)
27
28
#define AV_RN16 AV_RN16
29
static
av_always_inline
unsigned
AV_RN16
(
const
void
*p)
30
{
31
const
uint8_t
*q = p;
32
unsigned
v;
33
#if AV_GCC_VERSION_AT_MOST(4,5)
34
__asm__ (
"ldrh %0, %1"
:
"=r"
(v) :
"m"
(*(
const
uint16_t *)q));
35
#elif defined __thumb__
36
__asm__ (
"ldrh %0, %1"
:
"=r"
(v) :
"m"
(q[0]),
"m"
(q[1]));
37
#else
38
__asm__ (
"ldrh %0, %1"
:
"=r"
(v) :
"Uq"
(q[0]),
"m"
(q[1]));
39
#endif
40
return
v;
41
}
42
43
#define AV_WN16 AV_WN16
44
static
av_always_inline
void
AV_WN16
(
void
*p, uint16_t v)
45
{
46
__asm__ (
"strh %1, %0"
:
"=m"
(*(uint16_t *)p) :
"r"
(v));
47
}
48
49
#define AV_RN32 AV_RN32
50
static
av_always_inline
uint32_t
AV_RN32
(
const
void
*p)
51
{
52
const
struct
__attribute__((packed)) { uint32_t v; } *q = p;
53
uint32_t v;
54
__asm__ (
"ldr %0, %1"
:
"=r"
(v) :
"m"
(*q));
55
return
v;
56
}
57
58
#define AV_WN32 AV_WN32
59
static
av_always_inline
void
AV_WN32
(
void
*p, uint32_t v)
60
{
61
__asm__ (
"str %1, %0"
:
"=m"
(*(uint32_t *)p) :
"r"
(v));
62
}
63
64
#if HAVE_ASM_MOD_Q
65
66
#define AV_RN64 AV_RN64
67
static
av_always_inline
uint64_t
AV_RN64
(
const
void
*p)
68
{
69
const
struct
__attribute__((packed)) { uint32_t v; } *q = p;
70
uint64_t v;
71
__asm__ (
"ldr %Q0, %1 \n\t"
72
"ldr %R0, %2 \n\t"
73
:
"=&r"
(v)
74
:
"m"
(q[0]),
"m"
(q[1]));
75
return
v;
76
}
77
78
#define AV_WN64 AV_WN64
79
static
av_always_inline
void
AV_WN64
(
void
*p, uint64_t v)
80
{
81
__asm__ (
"str %Q2, %0 \n\t"
82
"str %R2, %1 \n\t"
83
:
"=m"
(*(uint32_t*)p),
"=m"
(*((uint32_t*)p+1))
84
:
"r"
(v));
85
}
86
87
#endif
/* HAVE_ASM_MOD_Q */
88
89
#endif
/* HAVE_INLINE_ASM */
90
91
#endif
/* AVUTIL_ARM_INTREADWRITE_H */
attributes.h
Macro definitions for various function/variable attributes.
uint8_t
uint8_t
Definition:
audio_convert.c:194
AV_RN16
#define AV_RN16(p)
Definition:
intreadwrite.h:360
AV_RN32
#define AV_RN32(p)
Definition:
intreadwrite.h:364
AV_WN32
#define AV_WN32(p, v)
Definition:
intreadwrite.h:376
AV_RN64
#define AV_RN64(p)
Definition:
intreadwrite.h:368
AV_WN16
#define AV_WN16(p, v)
Definition:
intreadwrite.h:372
av_always_inline
#define av_always_inline
Definition:
attributes.h:39
AV_WN64
#define AV_WN64(p, v)
Definition:
intreadwrite.h:380
Generated on Tue May 22 2018 07:06:59 for FFmpeg by
1.8.13