From 8ff61ff7d9355729500652f78508b7fe8195e98f Mon Sep 17 00:00:00 2001 From: Florian Krohm Date: Wed, 5 Sep 2012 20:05:20 +0000 Subject: [PATCH] s390: The load-rounded insns also need to issue an emulation warning when the floating point extension is not present and m3 != 0. git-svn-id: svn://svn.valgrind.org/vex/trunk@2515 --- VEX/priv/guest_s390_toIR.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/VEX/priv/guest_s390_toIR.c b/VEX/priv/guest_s390_toIR.c index aaf2cab74a..0be8233291 100644 --- a/VEX/priv/guest_s390_toIR.c +++ b/VEX/priv/guest_s390_toIR.c @@ -8668,6 +8668,10 @@ static HChar * s390_irgen_LEDBR(UChar m3, UChar m4 __attribute__((unused)), UChar r1, UChar r2) { + if (! s390_host_has_fpext && m3 != S390_ROUND_PER_FPC) { + emulation_warning(EmWarn_S390X_fpext_rounding); + m3 = S390_ROUND_PER_FPC; + } IRTemp op = newTemp(Ity_F64); assign(op, get_fpr_dw0(r2)); @@ -10652,6 +10656,10 @@ static HChar * s390_irgen_LDXBR(UChar m3, UChar m4 __attribute__((unused)), UChar r1, UChar r2) { + if (! s390_host_has_fpext && m3 != S390_ROUND_PER_FPC) { + emulation_warning(EmWarn_S390X_fpext_rounding); + m3 = S390_ROUND_PER_FPC; + } IRTemp result = newTemp(Ity_F64); assign(result, binop(Iop_F128toF64, mkexpr(encode_bfp_rounding_mode(m3)), @@ -10665,6 +10673,10 @@ static HChar * s390_irgen_LEXBR(UChar m3, UChar m4 __attribute__((unused)), UChar r1, UChar r2) { + if (! s390_host_has_fpext && m3 != S390_ROUND_PER_FPC) { + emulation_warning(EmWarn_S390X_fpext_rounding); + m3 = S390_ROUND_PER_FPC; + } IRTemp result = newTemp(Ity_F32); assign(result, binop(Iop_F128toF32, mkexpr(encode_bfp_rounding_mode(m3)), -- 2.47.2