mirror of
https://github.com/python/cpython.git
synced 2025-08-14 22:01:08 +00:00
Merged revisions 75982 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r75982 | mark.dickinson | 2009-10-31 10:11:28 +0000 (Sat, 31 Oct 2009) | 5 lines Issue #6603: Fix --with-tsc build failures on x86-64 that resulted from a gcc inline assembler peculiarity. (gcc's "A" constraint apparently means 'rax or rdx' in 64-bit mode, not edx:eax or rdx:rax as one might expect.) ........
This commit is contained in:
parent
a9792159ec
commit
648568fca8
2 changed files with 26 additions and 1 deletions
|
@ -41,6 +41,13 @@ Library
|
||||||
- Issue #7048: Force Decimal.logb to round its result when that result
|
- Issue #7048: Force Decimal.logb to round its result when that result
|
||||||
is too large to fit in the current precision.
|
is too large to fit in the current precision.
|
||||||
|
|
||||||
|
Build
|
||||||
|
-----
|
||||||
|
|
||||||
|
- Issue #6603: Change READ_TIMESTAMP macro in ceval.c so that it
|
||||||
|
compiles correctly under gcc on x86-64. This fixes a reported
|
||||||
|
problem with the --with-tsc build on x86-64.
|
||||||
|
|
||||||
Tests
|
Tests
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
|
@ -51,11 +51,29 @@ ppc_getcounter(uint64 *v)
|
||||||
((long*)(v))[1] = tb;
|
((long*)(v))[1] = tb;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* this is for linux/x86 (and probably any other GCC/x86 combo) */
|
#elif defined(__i386__)
|
||||||
|
|
||||||
|
/* this is for linux/x86 (and probably any other GCC/x86 combo) */
|
||||||
|
|
||||||
#define READ_TIMESTAMP(val) \
|
#define READ_TIMESTAMP(val) \
|
||||||
__asm__ __volatile__("rdtsc" : "=A" (val))
|
__asm__ __volatile__("rdtsc" : "=A" (val))
|
||||||
|
|
||||||
|
#elif defined(__x86_64__)
|
||||||
|
|
||||||
|
/* for gcc/x86_64, the "A" constraint in DI mode means *either* rax *or* rdx;
|
||||||
|
not edx:eax as it does for i386. Since rdtsc puts its result in edx:eax
|
||||||
|
even in 64-bit mode, we need to use "a" and "d" for the lower and upper
|
||||||
|
32-bit pieces of the result. */
|
||||||
|
|
||||||
|
#define READ_TIMESTAMP(val) \
|
||||||
|
__asm__ __volatile__("rdtsc" : \
|
||||||
|
"=a" (((int*)&(val))[0]), "=d" (((int*)&(val))[1]));
|
||||||
|
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
#error "Don't know how to implement timestamp counter for this architecture"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1,
|
void dump_tsc(int opcode, int ticked, uint64 inst0, uint64 inst1,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue