From: Florian Krohm Date: Thu, 13 Sep 2012 03:13:26 +0000 (+0000) Subject: s390: Handle S390_BFP_NABS correctly for 128-bit arguments. X-Git-Tag: svn/VALGRIND_3_9_0^2~242 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=911c5bed5b1e938f4081b69c2d06711d4d8f9eb0;p=thirdparty%2Fvalgrind.git s390: Handle S390_BFP_NABS correctly for 128-bit arguments. git-svn-id: svn://svn.valgrind.org/vex/trunk@2527 --- diff --git a/VEX/priv/host_s390_isel.c b/VEX/priv/host_s390_isel.c index 0acf262c81..1c14749d8a 100644 --- a/VEX/priv/host_s390_isel.c +++ b/VEX/priv/host_s390_isel.c @@ -1725,7 +1725,14 @@ s390_isel_float128_expr_wrk(HReg *dst_hi, HReg *dst_lo, ISelEnv *env, 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 @@ s390_isel_float_expr_wrk(ISelEnv *env, IRExpr *expr) 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;