hppa: Fix _FPU_GETCW and _FPU_SETCW.

The following patch fixes both _FPU_GETCW and
_FPU_SETCW for hppa. The initial implementation was
flawed and not well tested. We failed to set cw,
and passed in the value of a register to fldd.
This patch fixes both of those errors and allows
the libm tests to pass without failure.

Signed-off-by: Guy Martin <gmsoft@tuxicoman.be>
Signed-off-by: Carlos O'Donell <carlos@redhat.com>
---

2013-05-15  Guy Martin  <gmsoft@tuxicoman.be>
	    Carlos O'Donell  <carlos@redhat.com>

	[BZ# 15000]
	* ports/sysdeps/hppa/fpu/fpu_control.h (_FPU_GETCW): Set cw.
	(_FPU_SETCW): Pass address to fldd.
This commit is contained in:
Carlos O'Donell 2013-05-15 11:47:47 -04:00
parent 7abeee129e
commit b7f7d28b61
3 changed files with 15 additions and 8 deletions

12
NEWS
View File

@ -12,12 +12,12 @@ Version 2.18
2546, 2560, 5159, 6809, 10060, 10062, 10357, 11120, 11561, 12387, 12723,
13550, 13889, 13951, 13988, 14142, 14176, 14200, 14280, 14293, 14317,
14327, 14478, 14496, 14582, 14686, 14812, 14888, 14908, 14920, 14952,
14964, 14981, 14982, 14985, 14994, 14996, 15003, 15006, 15007, 15020,
15023, 15036, 15054, 15055, 15062, 15078, 15084, 15085, 15086, 15160,
15214, 15221, 15232, 15234, 15283, 15285, 15287, 15304, 15305, 15307,
15309, 15327, 15330, 15335, 15336, 15337, 15342, 15346, 15359, 15361,
15366, 15380, 15394, 15395, 15405, 15406, 15409, 15416, 15418, 15419,
15423, 15426, 15429, 15448.
14964, 14981, 14982, 14985, 14994, 14996, 15000, 15003, 15006, 15007,
15020, 15023, 15036, 15054, 15055, 15062, 15078, 15084, 15085, 15086,
15160, 15214, 15221, 15232, 15234, 15283, 15285, 15287, 15304, 15305,
15307, 15309, 15327, 15330, 15335, 15336, 15337, 15342, 15346, 15359,
15361, 15366, 15380, 15394, 15395, 15405, 15406, 15409, 15416, 15418,
15419, 15423, 15426, 15429, 15448.
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
#15078).

View File

@ -1,3 +1,10 @@
2013-05-15 Guy Martin <gmsoft@tuxicoman.be>
Carlos O'Donell <carlos@redhat.com>
[BZ# 15000]
* ports/sysdeps/hppa/fpu/fpu_control.h (_FPU_GETCW): Set cw.
(_FPU_SETCW): Pass address to fldd.
2013-04-02 Thomas Schwinge <thomas@codesourcery.com>
* sysdeps/hppa/math_private.h: New file.

View File

@ -49,7 +49,7 @@ typedef unsigned int fpu_control_t;
__asm__ ("fstd %%fr0,0(%1)\n\t" \
"fldd 0(%1),%%fr0\n\t" \
: "=m" (__fullfp.__fpreg) : "r" (&__fullfp.__fpreg) : "%r0"); \
__fullfp.__halfreg[0]; \
cw = __fullfp.__halfreg[0]; \
})
#define _FPU_SETCW(cw) \
@ -57,7 +57,7 @@ typedef unsigned int fpu_control_t;
union { __extension__ unsigned long long __fpreg; unsigned int __halfreg[2]; } __fullfp; \
__fullfp.__halfreg[0] = cw; \
__asm__ ("fldd 0(%1),%%fr0\n\t" \
: : "m" (__fullfp.__fpreg), "r" (__fullfp.__fpreg) : "%r0" ); \
: : "m" (__fullfp.__fpreg), "r" (&__fullfp.__fpreg) : "%r0" ); \
})
/* Default control word set at startup. */