comparison src/cpu/x86/vm/c1_LIRAssembler_x86.cpp @ 1206:87684f1a88b5

6614597: Performance variability in jvm2008 xml.validation Summary: Fix incorrect marking of methods as not compilable. Reviewed-by: never
author kvn
date Mon, 01 Feb 2010 16:49:49 -0800
parents 18a389214829
children 7f8790caccb0 576e77447e3c
comparison
equal deleted inserted replaced
1205:5fcfaa1ad96f 1206:87684f1a88b5
3207 assert(data->is_CounterData(), "need CounterData for calls"); 3207 assert(data->is_CounterData(), "need CounterData for calls");
3208 assert(op->mdo()->is_single_cpu(), "mdo must be allocated"); 3208 assert(op->mdo()->is_single_cpu(), "mdo must be allocated");
3209 Register mdo = op->mdo()->as_register(); 3209 Register mdo = op->mdo()->as_register();
3210 __ movoop(mdo, md->constant_encoding()); 3210 __ movoop(mdo, md->constant_encoding());
3211 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset())); 3211 Address counter_addr(mdo, md->byte_offset_of_slot(data, CounterData::count_offset()));
3212 __ addl(counter_addr, DataLayout::counter_increment);
3213 Bytecodes::Code bc = method->java_code_at_bci(bci); 3212 Bytecodes::Code bc = method->java_code_at_bci(bci);
3214 // Perform additional virtual call profiling for invokevirtual and 3213 // Perform additional virtual call profiling for invokevirtual and
3215 // invokeinterface bytecodes 3214 // invokeinterface bytecodes
3216 if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) && 3215 if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) &&
3217 Tier1ProfileVirtualCalls) { 3216 Tier1ProfileVirtualCalls) {
3274 Address recv_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i))); 3273 Address recv_addr(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_offset(i)));
3275 __ cmpptr(recv_addr, (int32_t)NULL_WORD); 3274 __ cmpptr(recv_addr, (int32_t)NULL_WORD);
3276 __ jcc(Assembler::notEqual, next_test); 3275 __ jcc(Assembler::notEqual, next_test);
3277 __ movptr(recv_addr, recv); 3276 __ movptr(recv_addr, recv);
3278 __ movl(Address(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i))), DataLayout::counter_increment); 3277 __ movl(Address(mdo, md->byte_offset_of_slot(data, VirtualCallData::receiver_count_offset(i))), DataLayout::counter_increment);
3279 if (i < (VirtualCallData::row_limit() - 1)) { 3278 __ jmp(update_done);
3280 __ jmp(update_done);
3281 }
3282 __ bind(next_test); 3279 __ bind(next_test);
3283 } 3280 }
3281 // Receiver did not match any saved receiver and there is no empty row for it.
3282 // Increment total counter to indicate polimorphic case.
3283 __ addl(counter_addr, DataLayout::counter_increment);
3284 3284
3285 __ bind(update_done); 3285 __ bind(update_done);
3286 } 3286 }
3287 } else {
3288 // Static call
3289 __ addl(counter_addr, DataLayout::counter_increment);
3287 } 3290 }
3288 } 3291 }
3289 3292
3290 3293
3291 void LIR_Assembler::emit_delay(LIR_OpDelay*) { 3294 void LIR_Assembler::emit_delay(LIR_OpDelay*) {