src/share/vm/c1/c1_LIRGenerator.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/c1/c1_LIRGenerator.cpp

src/share/vm/c1/c1_LIRGenerator.cpp

Print this page

        

*** 2067,2084 **** assert(!x->has_index() || idx.value() == x->index(), "should match"); LIR_Opr base_op = base.result(); LIR_Opr index_op = idx.result(); #ifndef _LP64 ! if (x->base()->type()->tag() == longTag) { base_op = new_register(T_INT); __ convert(Bytecodes::_l2i, base.result(), base_op); } if (x->has_index()) { ! if (x->index()->type()->tag() == longTag) { LIR_Opr long_index_op = index_op; ! if (x->index()->type()->is_constant()) { long_index_op = new_register(T_LONG); __ move(index_op, long_index_op); } index_op = new_register(T_INT); __ convert(Bytecodes::_l2i, long_index_op, index_op); --- 2067,2084 ---- assert(!x->has_index() || idx.value() == x->index(), "should match"); LIR_Opr base_op = base.result(); LIR_Opr index_op = idx.result(); #ifndef _LP64 ! if (base_op->type() == T_LONG) { base_op = new_register(T_INT); __ convert(Bytecodes::_l2i, base.result(), base_op); } if (x->has_index()) { ! if (index_op->type() == T_LONG) { LIR_Opr long_index_op = index_op; ! if (index_op->is_constant()) { long_index_op = new_register(T_LONG); __ move(index_op, long_index_op); } index_op = new_register(T_INT); __ convert(Bytecodes::_l2i, long_index_op, index_op);
*** 2089,2106 **** // At this point base and index should be all ints. assert(base_op->type() == T_INT && !base_op->is_constant(), "base should be an non-constant int"); assert(!x->has_index() || index_op->type() == T_INT, "index should be an int"); #else if (x->has_index()) { ! if (x->index()->type()->tag() == intTag) { ! if (!x->index()->type()->is_constant()) { index_op = new_register(T_LONG); __ convert(Bytecodes::_i2l, idx.result(), index_op); } } else { ! assert(x->index()->type()->tag() == longTag, "must be"); ! if (x->index()->type()->is_constant()) { index_op = new_register(T_LONG); __ move(idx.result(), index_op); } } } --- 2089,2106 ---- // At this point base and index should be all ints. assert(base_op->type() == T_INT && !base_op->is_constant(), "base should be an non-constant int"); assert(!x->has_index() || index_op->type() == T_INT, "index should be an int"); #else if (x->has_index()) { ! if (index_op->type() == T_INT) { ! if (!index_op->is_constant()) { index_op = new_register(T_LONG); __ convert(Bytecodes::_i2l, idx.result(), index_op); } } else { ! assert(index_op->type() == T_LONG, "must be"); ! if (index_op->is_constant()) { index_op = new_register(T_LONG); __ move(idx.result(), index_op); } } }
*** 2177,2202 **** LIR_Opr base_op = base.result(); LIR_Opr index_op = idx.result(); #ifndef _LP64 ! if (x->base()->type()->tag() == longTag) { base_op = new_register(T_INT); __ convert(Bytecodes::_l2i, base.result(), base_op); } if (x->has_index()) { ! if (x->index()->type()->tag() == longTag) { index_op = new_register(T_INT); __ convert(Bytecodes::_l2i, idx.result(), index_op); } } // At this point base and index should be all ints and not constants assert(base_op->type() == T_INT && !base_op->is_constant(), "base should be an non-constant int"); assert(!x->has_index() || (index_op->type() == T_INT && !index_op->is_constant()), "index should be an non-constant int"); #else if (x->has_index()) { ! if (x->index()->type()->tag() == intTag) { index_op = new_register(T_LONG); __ convert(Bytecodes::_i2l, idx.result(), index_op); } } // At this point base and index are long and non-constant --- 2177,2202 ---- LIR_Opr base_op = base.result(); LIR_Opr index_op = idx.result(); #ifndef _LP64 ! if (base_op->type() == T_LONG) { base_op = new_register(T_INT); __ convert(Bytecodes::_l2i, base.result(), base_op); } if (x->has_index()) { ! if (index_op->type() == T_LONG) { index_op = new_register(T_INT); __ convert(Bytecodes::_l2i, idx.result(), index_op); } } // At this point base and index should be all ints and not constants assert(base_op->type() == T_INT && !base_op->is_constant(), "base should be an non-constant int"); assert(!x->has_index() || (index_op->type() == T_INT && !index_op->is_constant()), "index should be an non-constant int"); #else if (x->has_index()) { ! if (index_op->type() == T_INT) { index_op = new_register(T_LONG); __ convert(Bytecodes::_i2l, idx.result(), index_op); } } // At this point base and index are long and non-constant
src/share/vm/c1/c1_LIRGenerator.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File