|
From: <sv...@va...> - 2012-09-05 20:05:32
|
florian 2012-09-05 21:05:20 +0100 (Wed, 05 Sep 2012)
New Revision: 2515
Log:
s390: The load-rounded insns also need to issue an emulation
warning when the floating point extension is not present and
m3 != 0.
Modified files:
trunk/priv/guest_s390_toIR.c
Modified: trunk/priv/guest_s390_toIR.c (+12 -0)
===================================================================
--- trunk/priv/guest_s390_toIR.c 2012-09-05 20:54:08 +01:00 (rev 2514)
+++ trunk/priv/guest_s390_toIR.c 2012-09-05 21:05:20 +01:00 (rev 2515)
@@ -8668,6 +8668,10 @@
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 @@
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 @@
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)),
|