summaryrefslogtreecommitdiff
path: root/libavutil/ppc/cpu.c
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2015-05-31 22:47:29 +0200
committerMichael Niedermayer <michaelni@gmx.at>2015-05-31 22:47:50 +0200
commit58a420487337d50f19f73eeed0f2b15d2d727be4 (patch)
tree4d284f00a40460c183949291c2bbfd460f286d5d /libavutil/ppc/cpu.c
parent902ce2a6c4364fd27ae3f1db78cd275caf79c006 (diff)
parent7d07ee5a9bd170a06d26fd967cf8de5d3b1ce331 (diff)
Merge commit '7d07ee5a9bd170a06d26fd967cf8de5d3b1ce331'
* commit '7d07ee5a9bd170a06d26fd967cf8de5d3b1ce331': ppc: cpu: Add support for VSX and POWER8 extensions Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavutil/ppc/cpu.c')
-rw-r--r--libavutil/ppc/cpu.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/libavutil/ppc/cpu.c b/libavutil/ppc/cpu.c
index 77229630d3..49646b0aa4 100644
--- a/libavutil/ppc/cpu.c
+++ b/libavutil/ppc/cpu.c
@@ -88,6 +88,14 @@ int ff_get_cpu_flags_ppc(void)
if (buf[i] == AT_HWCAP) {
if (buf[i + 1] & PPC_FEATURE_HAS_ALTIVEC)
ret = AV_CPU_FLAG_ALTIVEC;
+#ifdef PPC_FEATURE_HAS_VSX
+ if (buf[i + 1] & PPC_FEATURE_HAS_VSX)
+ ret |= AV_CPU_FLAG_VSX;
+#endif
+#ifdef PPC_FEATURE_ARCH_2_07
+ if (buf[i + 1] & PPC_FEATURE_HAS_POWER8)
+ ret |= AV_CPU_FLAG_POWER8;
+#endif
goto out;
}
}
@@ -106,7 +114,7 @@ out:
#define PVR_POWER7 0x003F
#define PVR_POWER8 0x004B
#define PVR_CELL_PPU 0x0070
-
+ int ret = 0;
int proc_ver;
// Support of mfspr PVR emulation added in Linux 2.6.17.
__asm__ volatile("mfspr %0, 287" : "=r" (proc_ver));
@@ -121,8 +129,14 @@ out:
proc_ver == PVR_POWER7 ||
proc_ver == PVR_POWER8 ||
proc_ver == PVR_CELL_PPU)
- return AV_CPU_FLAG_ALTIVEC;
- return 0;
+ ret = AV_CPU_FLAG_ALTIVEC;
+ if (proc_ver == PVR_POWER7 ||
+ proc_ver == PVR_POWER8)
+ ret |= AV_CPU_FLAG_VSX;
+ if (proc_ver == PVR_POWER8)
+ ret |= AV_CPU_FLAG_POWER8;
+
+ return ret;
#else
// Since we were compiled for AltiVec, just assume we have it
// until someone comes up with a proper way (not involving signal hacks).