]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
s390: The load-rounded insns also need to issue an emulation
authorFlorian Krohm <florian@eich-krohm.de>
Wed, 5 Sep 2012 20:05:20 +0000 (20:05 +0000)
committerFlorian Krohm <florian@eich-krohm.de>
Wed, 5 Sep 2012 20:05:20 +0000 (20:05 +0000)
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

index aaf2cab74adf3b9183088866cdd913d008ca4045..0be82332916520527568d429c3acaf22da8af6c0 100644 (file)
@@ -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)),