//------------------------------sub-------------------------------------------- // A subtract node differences it's two inputs. const Type *SubDNode::sub( const Type *t1, const Type *t2 ) const { // no folding if one of operands is infinity or NaN, do not do constant folding if( g_isfinite(t1->getd()) && g_isfinite(t2->getd()) ) { return TypeD::make( t1->getd() - t2->getd() ); } else if( g_isnan(t1->getd()) ) { return t1; } else if( g_isnan(t2->getd()) ) { return t2; } else { return Type::DOUBLE; } }
jlong double2long(jdouble f) { jlong tmp = (jlong) f; if (tmp != high_bit) { return tmp; } else { if (g_isnan(f)) { return 0; } if (f < 0) { return high_bit; } else { return other_bits; } } }