src/share/vm/opto/mulnode.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/share/vm/opto/mulnode.cpp Mon May 5 12:29:47 2014
--- new/src/share/vm/opto/mulnode.cpp Mon May 5 12:29:47 2014
*** 233,259 ****
--- 233,259 ----
const Type *MulINode::mul_ring(const Type *t0, const Type *t1) const {
const TypeInt *r0 = t0->is_int(); // Handy access
const TypeInt *r1 = t1->is_int();
// Fetch endpoints of all ranges
! int32_t lo0 = r0->_lo;
double a = (double)lo0;
! int32_t hi0 = r0->_hi;
double b = (double)hi0;
! int32_t lo1 = r1->_lo;
double c = (double)lo1;
! int32_t hi1 = r1->_hi;
double d = (double)hi1;
// Compute all endpoints & check for overflow
! int32_t A = lo0*lo1;
if( (double)A != a*c ) return TypeInt::INT; // Overflow?
! int32_t B = lo0*hi1;
if( (double)B != a*d ) return TypeInt::INT; // Overflow?
! int32_t C = hi0*lo1;
if( (double)C != b*c ) return TypeInt::INT; // Overflow?
! int32_t D = hi0*hi1;
if( (double)D != b*d ) return TypeInt::INT; // Overflow?
if( A < B ) { lo0 = A; hi0 = B; } // Sort range endpoints
else { lo0 = B; hi0 = A; }
if( C < D ) {
*** 1226,1241 ****
--- 1226,1241 ----
//
// else if( t1->base() == Type::InstPtr ) {
//
// const TypeInstPtr *o = t1->is_instptr();
// if( t1->singleton() )
! // return TypeInt::make( ((uint32_t)o->const_oop() + o->_offset) >> shift );
// }
// else if( t1->base() == Type::KlassPtr ) {
// const TypeKlassPtr *o = t1->is_klassptr();
// if( t1->singleton() )
! // return TypeInt::make( ((uint32_t)o->const_oop() + o->_offset) >> shift );
// }
return TypeInt::INT;
}
src/share/vm/opto/mulnode.cpp
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File