|
From: <sv...@va...> - 2012-09-13 03:13:34
|
florian 2012-09-13 04:13:26 +0100 (Thu, 13 Sep 2012)
New Revision: 2527
Log:
s390: Handle S390_BFP_NABS correctly for 128-bit arguments.
Modified files:
trunk/priv/host_s390_isel.c
Modified: trunk/priv/host_s390_isel.c (+10 -2)
===================================================================
--- trunk/priv/host_s390_isel.c 2012-09-12 20:52:16 +01:00 (rev 2526)
+++ trunk/priv/host_s390_isel.c 2012-09-13 04:13:26 +01:00 (rev 2527)
@@ -1725,7 +1725,14 @@
f15 = make_fpr(15);
switch (expr->Iex.Unop.op) {
- case Iop_NegF128: bfpop = S390_BFP_NEG; goto float128_opnd;
+ case Iop_NegF128:
+ if (left->tag == Iex_Unop &&
+ (left->Iex.Unop.op == Iop_AbsF32 ||
+ left->Iex.Unop.op == Iop_AbsF64))
+ bfpop = S390_BFP_NABS;
+ else
+ bfpop = S390_BFP_NEG;
+ goto float128_opnd;
case Iop_AbsF128: bfpop = S390_BFP_ABS; goto float128_opnd;
case Iop_I32StoF128: conv = S390_BFP_I32_TO_F128; goto convert_int;
case Iop_I64StoF128: conv = S390_BFP_I64_TO_F128; goto convert_int;
@@ -2028,7 +2035,8 @@
case Iop_NegF32:
case Iop_NegF64:
if (left->tag == Iex_Unop &&
- (left->Iex.Unop.op == Iop_AbsF32 || left->Iex.Unop.op == Iop_AbsF64))
+ (left->Iex.Unop.op == Iop_AbsF32 ||
+ left->Iex.Unop.op == Iop_AbsF64))
bfpop = S390_BFP_NABS;
else
bfpop = S390_BFP_NEG;
|