src/share/vm/opto/divnode.cpp
Print this page
*** 708,722 ****
--- 708,729 ----
return TypeD::ONE;
if( t2 == TypeD::ONE )
return t1;
+ #if defined(IA32)
+ if (!phase->C->method()->is_strict())
+ // Can't trust native compilers to properly fold strict double
+ // multiplication with round-to-zero on this platform.
+ #endif
+ {
// If divisor is a constant and not zero, divide them numbers
if( t1->base() == Type::DoubleCon &&
t2->base() == Type::DoubleCon &&
t2->getd() != 0.0 ) // could be negative zero
return TypeD::make( t1->getd()/t2->getd() );
+ }
// If the dividend is a constant zero
// Note: if t1 and t2 are zero then result is NaN (JVMS page 213)
// Test TypeF::ZERO is not sufficient as it could be negative zero
if( t1 == TypeD::ZERO && !g_isnan(t2->getd()) && t2->getd() != 0.0 )