Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
c19a49e5
Commit
c19a49e5
authored
Aug 28, 2014
by
Luca Barbato
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ppc: Support little endian intreadwrite
parent
7968059e
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
40 additions
and
24 deletions
+40
-24
intreadwrite.h
libavutil/ppc/intreadwrite.h
+40
-24
No files found.
libavutil/ppc/intreadwrite.h
View file @
c19a49e5
...
@@ -24,56 +24,81 @@
...
@@ -24,56 +24,81 @@
#include <stdint.h>
#include <stdint.h>
#include "config.h"
#include "config.h"
/*
* -O0 would compile the packed struct version, which is used by
* default, in an overly verbose fashion, so we override it here.
*/
#if HAVE_BIGENDIAN
#define AV_RB64(p) (*(const uint64_t *)(p))
#define AV_WB64(p, v) (*(uint64_t *)(p) = (v))
#else
#define AV_RL64(p) (*(const uint64_t *)(p))
#define AV_WL64(p, v) (*(uint64_t *)(p) = (v))
#endif
#if HAVE_XFORM_ASM
#if HAVE_XFORM_ASM
#define AV_RL16 AV_RL16
#if HAVE_BIGENDIAN
static
av_always_inline
uint16_t
AV_RL16
(
const
void
*
p
)
#define AV_RL16 av_read_bswap16
#define AV_WL16 av_write_bswap16
#define AV_RL32 av_read_bswap32
#define AV_WL32 av_write_bswap32
#define AV_RL64 av_read_bswap64
#define AV_WL64 av_write_bswap64
#else
#define AV_RB16 av_read_bswap16
#define AV_WB16 av_write_bswap16
#define AV_RB32 av_read_bswap32
#define AV_WB32 av_write_bswap32
#define AV_RB64 av_read_bswap64
#define AV_WB64 av_write_bswap64
#endif
static
av_always_inline
uint16_t
av_read_bswap16
(
const
void
*
p
)
{
{
uint16_t
v
;
uint16_t
v
;
__asm__
(
"lhbrx %0, %y1"
:
"=r"
(
v
)
:
"Z"
(
*
(
const
uint16_t
*
)
p
));
__asm__
(
"lhbrx %0, %y1"
:
"=r"
(
v
)
:
"Z"
(
*
(
const
uint16_t
*
)
p
));
return
v
;
return
v
;
}
}
#define AV_WL16 AV_WL16
static
av_always_inline
void
av_write_bswap16
(
void
*
p
,
uint16_t
v
)
static
av_always_inline
void
AV_WL16
(
void
*
p
,
uint16_t
v
)
{
{
__asm__
(
"sthbrx %1, %y0"
:
"=Z"
(
*
(
uint16_t
*
)
p
)
:
"r"
(
v
));
__asm__
(
"sthbrx %1, %y0"
:
"=Z"
(
*
(
uint16_t
*
)
p
)
:
"r"
(
v
));
}
}
#define AV_RL32 AV_RL32
static
av_always_inline
uint32_t
av_read_bswap32
(
const
void
*
p
)
static
av_always_inline
uint32_t
AV_RL32
(
const
void
*
p
)
{
{
uint32_t
v
;
uint32_t
v
;
__asm__
(
"lwbrx %0, %y1"
:
"=r"
(
v
)
:
"Z"
(
*
(
const
uint32_t
*
)
p
));
__asm__
(
"lwbrx %0, %y1"
:
"=r"
(
v
)
:
"Z"
(
*
(
const
uint32_t
*
)
p
));
return
v
;
return
v
;
}
}
#define AV_WL32 AV_WL32
static
av_always_inline
void
av_write_bswap32
(
void
*
p
,
uint32_t
v
)
static
av_always_inline
void
AV_WL32
(
void
*
p
,
uint32_t
v
)
{
{
__asm__
(
"stwbrx %1, %y0"
:
"=Z"
(
*
(
uint32_t
*
)
p
)
:
"r"
(
v
));
__asm__
(
"stwbrx %1, %y0"
:
"=Z"
(
*
(
uint32_t
*
)
p
)
:
"r"
(
v
));
}
}
#if HAVE_LDBRX
#if HAVE_LDBRX
#define AV_RL64 AV_RL64
static
av_always_inline
uint64_t
av_read_bswap64
(
const
void
*
p
)
static
av_always_inline
uint64_t
AV_RL64
(
const
void
*
p
)
{
{
uint64_t
v
;
uint64_t
v
;
__asm__
(
"ldbrx %0, %y1"
:
"=r"
(
v
)
:
"Z"
(
*
(
const
uint64_t
*
)
p
));
__asm__
(
"ldbrx %0, %y1"
:
"=r"
(
v
)
:
"Z"
(
*
(
const
uint64_t
*
)
p
));
return
v
;
return
v
;
}
}
#define AV_WL64 AV_WL64
static
av_always_inline
void
av_write_bswap64
(
void
*
p
,
uint64_t
v
)
static
av_always_inline
void
AV_WL64
(
void
*
p
,
uint64_t
v
)
{
{
__asm__
(
"stdbrx %1, %y0"
:
"=Z"
(
*
(
uint64_t
*
)
p
)
:
"r"
(
v
));
__asm__
(
"stdbrx %1, %y0"
:
"=Z"
(
*
(
uint64_t
*
)
p
)
:
"r"
(
v
));
}
}
#else
#else
#define AV_RL64 AV_RL64
static
av_always_inline
uint64_t
av_read_bswap64
(
const
void
*
p
)
static
av_always_inline
uint64_t
AV_RL64
(
const
void
*
p
)
{
{
union
{
uint64_t
v
;
uint32_t
hl
[
2
];
}
v
;
union
{
uint64_t
v
;
uint32_t
hl
[
2
];
}
v
;
__asm__
(
"lwbrx %0, %y2
\n\t
"
__asm__
(
"lwbrx %0, %y2
\n\t
"
...
@@ -83,8 +108,7 @@ static av_always_inline uint64_t AV_RL64(const void *p)
...
@@ -83,8 +108,7 @@ static av_always_inline uint64_t AV_RL64(const void *p)
return
v
.
v
;
return
v
.
v
;
}
}
#define AV_WL64 AV_WL64
static
av_always_inline
void
av_write_bswap64
(
void
*
p
,
uint64_t
v
)
static
av_always_inline
void
AV_WL64
(
void
*
p
,
uint64_t
v
)
{
{
union
{
uint64_t
v
;
uint32_t
hl
[
2
];
}
vv
=
{
v
};
union
{
uint64_t
v
;
uint32_t
hl
[
2
];
}
vv
=
{
v
};
__asm__
(
"stwbrx %2, %y0
\n\t
"
__asm__
(
"stwbrx %2, %y0
\n\t
"
...
@@ -97,12 +121,4 @@ static av_always_inline void AV_WL64(void *p, uint64_t v)
...
@@ -97,12 +121,4 @@ static av_always_inline void AV_WL64(void *p, uint64_t v)
#endif
/* HAVE_XFORM_ASM */
#endif
/* HAVE_XFORM_ASM */
/*
* GCC fails miserably on the packed struct version which is used by
* default, so we override it here.
*/
#define AV_RB64(p) (*(const uint64_t *)(p))
#define AV_WB64(p, v) (*(uint64_t *)(p) = (v))
#endif
/* AVUTIL_PPC_INTREADWRITE_H */
#endif
/* AVUTIL_PPC_INTREADWRITE_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment