diff options
| author | Miro Hrončok <miro@hroncok.cz> | 2016-08-09 12:36:16 +0200 |
|---|---|---|
| committer | Miro Hrončok <miro@hroncok.cz> | 2016-09-26 10:20:04 +0200 |
| commit | e32ce18e762bfad63a243fa6dcb192b3e5ae9588 (patch) | |
| tree | 52df28be6fe15714554555c8bc772cb67f167dbc /00143-tsc-on-ppc.patch | |
| parent | f5845b442d5e3c252df4de7d56bbafe3e8737613 (diff) | |
| download | python34-e32ce18e762bfad63a243fa6dcb192b3e5ae9588.tar.gz python34-e32ce18e762bfad63a243fa6dcb192b3e5ae9588.tar.xz python34-e32ce18e762bfad63a243fa6dcb192b3e5ae9588.zip | |
Initial import of Fedora 23 package
Diffstat (limited to '00143-tsc-on-ppc.patch')
| -rw-r--r-- | 00143-tsc-on-ppc.patch | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/00143-tsc-on-ppc.patch b/00143-tsc-on-ppc.patch new file mode 100644 index 0000000..7d3e876 --- /dev/null +++ b/00143-tsc-on-ppc.patch @@ -0,0 +1,58 @@ +diff -up Python-2.7.2/Python/ceval.c.tsc-on-ppc Python-2.7.2/Python/ceval.c +--- Python-2.7.2/Python/ceval.c.tsc-on-ppc 2011-08-23 14:59:48.051300849 -0400 ++++ Python-2.7.2/Python/ceval.c 2011-08-23 15:33:25.412162902 -0400 +@@ -37,24 +37,42 @@ typedef unsigned long long uint64; + */ + #if defined(__ppc__) || defined (__powerpc__) + +-#define READ_TIMESTAMP(var) ppc_getcounter(&var) ++#if defined( __powerpc64__) || defined(__LP64__) ++/* 64-bit PowerPC */ ++#define READ_TIMESTAMP(var) ppc64_getcounter(&var) ++static void ++ppc64_getcounter(uint64 *v) ++{ ++ /* On 64-bit PowerPC we can read the 64-bit timebase directly into a ++ 64-bit register */ ++ uint64 timebase; ++#ifdef _ARCH_PWR4 ++ asm volatile ("mfspr %0,268" : "=r" (timebase)); ++#else ++ asm volatile ("mftb %0" : "=r" (timebase)); ++#endif ++ *v = timebase; ++} ++ ++#else ++/* 32-bit PowerPC */ ++#define READ_TIMESTAMP(var) ppc32_getcounter(&var) + + static void +-ppc_getcounter(uint64 *v) ++ppc32_getcounter(uint64 *v) + { +- unsigned long tbu, tb, tbu2; ++ union { long long ll; long ii[2]; } u; ++ long tmp; + + loop: +- asm volatile ("mftbu %0" : "=r" (tbu) ); +- asm volatile ("mftb %0" : "=r" (tb) ); +- asm volatile ("mftbu %0" : "=r" (tbu2)); +- if (__builtin_expect(tbu != tbu2, 0)) goto loop; +- +- /* The slightly peculiar way of writing the next lines is +- compiled better by GCC than any other way I tried. */ +- ((long*)(v))[0] = tbu; +- ((long*)(v))[1] = tb; ++ asm volatile ("mftbu %0" : "=r" (u.ii[0]) ); ++ asm volatile ("mftb %0" : "=r" (u.ii[1]) ); ++ asm volatile ("mftbu %0" : "=r" (tmp)); ++ if (__builtin_expect(u.ii[0] != tmp, 0)) goto loop; ++ ++ *v = u.ll; + } ++#endif /* powerpc 32/64 bit */ + + #elif defined(__i386__) + |
