PowerPC floating point little-endian [15 of 15]

http://sourceware.org/ml/libc-alpha/2013-07/msg00206.html

The union loses when little-endian.

	* sysdeps/powerpc/powerpc32/power4/hp-timing.h (HP_TIMING_NOW):
	Don't use a union to pack hi/low value.
This commit is contained in:
Alan Modra 2013-08-17 18:33:45 +09:30
parent 76a66d510a
commit fef13a78ea
2 changed files with 14 additions and 12 deletions

View File

@ -1,3 +1,8 @@
2013-10-04 Alan Modra <amodra@gmail.com>
* sysdeps/powerpc/powerpc32/power4/hp-timing.h (HP_TIMING_NOW):
Don't use a union to pack hi/low value.
2013-10-04 Anton Blanchard <anton@au1.ibm.com>
* sysdeps/powerpc/powerpc64/fpu/s_ceilf.S: Correct float constants

View File

@ -87,18 +87,15 @@ typedef unsigned long long int hp_timing_t;
#define HP_TIMING_NOW(Var) \
do { \
union { long long ll; long ii[2]; } _var; \
long tmp; \
__asm__ __volatile__ ( \
"1: mfspr %0,269;" \
" mfspr %1,268;" \
" mfspr %2,269;" \
" cmpw %0,%2;" \
" bne 1b;" \
: "=r" (_var.ii[0]), "=r" (_var.ii[1]) , "=r" (tmp) \
: : "cr0" \
); \
Var = _var.ll; \
unsigned int hi, lo, tmp; \
__asm__ __volatile__ ("1: mfspr %0,269;" \
" mfspr %1,268;" \
" mfspr %2,269;" \
" cmpw %0,%2;" \
" bne 1b;" \
: "=&r" (hi), "=&r" (lo), "=&r" (tmp) \
: : "cr0"); \
Var = ((hp_timing_t) hi << 32) | lo; \
} while (0)