< prev index next >

src/hotspot/share/c1/c1_Canonicalizer.cpp

Print this page
rev 56798 : [mq]: do_ShiftOp

*** 1,7 **** /* ! * Copyright (c) 1999, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 1999, 2019, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 352,380 **** case longTag : if (t->as_LongConstant()->value() == (jlong)0) { set_constant(jlong_cast(0)); return; } break; default : ShouldNotReachHere(); } if (t2->is_constant()) { if (t->tag() == intTag) { ! int value = t->as_IntConstant()->value(); ! int shift = t2->as_IntConstant()->value() & 31; ! jint mask = ~(~0 << (32 - shift)); ! if (shift == 0) mask = ~0; switch (x->op()) { ! case Bytecodes::_ishl: set_constant(value << shift); return; ! case Bytecodes::_ishr: set_constant(value >> shift); return; ! case Bytecodes::_iushr: set_constant((value >> shift) & mask); return; default: break; } } else if (t->tag() == longTag) { jlong value = t->as_LongConstant()->value(); ! int shift = t2->as_IntConstant()->value() & 63; ! jlong mask = ~(~jlong_cast(0) << (64 - shift)); ! if (shift == 0) mask = ~jlong_cast(0); switch (x->op()) { ! case Bytecodes::_lshl: set_constant(value << shift); return; ! case Bytecodes::_lshr: set_constant(value >> shift); return; ! case Bytecodes::_lushr: set_constant((value >> shift) & mask); return; default: break; } } } } --- 352,376 ---- case longTag : if (t->as_LongConstant()->value() == (jlong)0) { set_constant(jlong_cast(0)); return; } break; default : ShouldNotReachHere(); } if (t2->is_constant()) { if (t->tag() == intTag) { ! jint value = t->as_IntConstant()->value(); ! jint shift = t2->as_IntConstant()->value(); switch (x->op()) { ! case Bytecodes::_ishl: set_constant(java_shift_left(value, shift)); return; ! case Bytecodes::_ishr: set_constant(java_shift_right(value, shift)); return; ! case Bytecodes::_iushr: set_constant(java_shift_right_unsigned(value, shift)); return; default: break; } } else if (t->tag() == longTag) { jlong value = t->as_LongConstant()->value(); ! jint shift = t2->as_IntConstant()->value(); switch (x->op()) { ! case Bytecodes::_lshl: set_constant(java_shift_left(value, shift)); return; ! case Bytecodes::_lshr: set_constant(java_shift_right(value, shift)); return; ! case Bytecodes::_lushr: set_constant(java_shift_right_unsigned(value, shift)); return; default: break; } } } }
< prev index next >