--- old/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp 2010-04-16 05:30:39.115843857 -0700 +++ new/src/cpu/sparc/vm/c1_LIRAssembler_sparc.cpp 2010-04-16 05:30:38.681845738 -0700 @@ -682,7 +682,8 @@ void LIR_Assembler::call(LIR_OpJavaCall* op, relocInfo::relocType rtype) { __ call(op->addr(), rtype); - // the peephole pass fills the delay slot + // The peephole pass fills the delay slot, add_call_info is done in + // LIR_Assembler::emit_delay. } @@ -691,7 +692,8 @@ __ set_oop((jobject)Universe::non_oop_word(), G5_inline_cache_reg); __ relocate(rspec); __ call(op->addr(), relocInfo::none); - // the peephole pass fills the delay slot + // The peephole pass fills the delay slot, add_call_info is done in + // LIR_Assembler::emit_delay. } @@ -712,16 +714,6 @@ } -void LIR_Assembler::preserve_SP(LIR_OpJavaCall* op) { - Unimplemented(); -} - - -void LIR_Assembler::restore_SP(LIR_OpJavaCall* op) { - Unimplemented(); -} - - // load with 32-bit displacement int LIR_Assembler::load(Register s, int disp, Register d, BasicType ld_type, CodeEmitInfo *info) { int load_offset = code_offset(); @@ -2877,7 +2869,7 @@ // we may also be emitting the call info for the instruction // which we are the delay slot of. - CodeEmitInfo * call_info = op->call_info(); + CodeEmitInfo* call_info = op->call_info(); if (call_info) { add_call_info(code_offset(), call_info); } @@ -3102,6 +3094,7 @@ tty->print_cr("delayed"); inst->at(i - 1)->print(); inst->at(i)->print(); + tty->cr(); } #endif continue; @@ -3117,8 +3110,8 @@ case lir_static_call: case lir_virtual_call: case lir_icvirtual_call: - case lir_optvirtual_call: { - LIR_Op* delay_op = NULL; + case lir_optvirtual_call: + case lir_dynamic_call: { LIR_Op* prev = inst->at(i - 1); if (LIRFillDelaySlots && prev && prev->code() == lir_move && prev->info() == NULL && (op->code() != lir_virtual_call || @@ -3135,15 +3128,14 @@ tty->print_cr("delayed"); inst->at(i - 1)->print(); inst->at(i)->print(); + tty->cr(); } #endif continue; } - if (!delay_op) { - delay_op = new LIR_OpDelay(new LIR_Op0(lir_nop), op->as_OpJavaCall()->info()); - inst->insert_before(i + 1, delay_op); - } + LIR_Op* delay_op = new LIR_OpDelay(new LIR_Op0(lir_nop), op->as_OpJavaCall()->info()); + inst->insert_before(i + 1, delay_op); break; } }