416 // subtract two words to account for return address and link |
416 // subtract two words to account for return address and link |
417 return (frame_map()->framesize() - (2*VMRegImpl::slots_per_word)) * VMRegImpl::stack_slot_size; |
417 return (frame_map()->framesize() - (2*VMRegImpl::slots_per_word)) * VMRegImpl::stack_slot_size; |
418 } |
418 } |
419 |
419 |
420 |
420 |
421 void LIR_Assembler::emit_exception_handler() { |
421 int LIR_Assembler::emit_exception_handler() { |
422 // if the last instruction is a call (typically to do a throw which |
422 // if the last instruction is a call (typically to do a throw which |
423 // is coming at the end after block reordering) the return address |
423 // is coming at the end after block reordering) the return address |
424 // must still point into the code area in order to avoid assertion |
424 // must still point into the code area in order to avoid assertion |
425 // failures when searching for the corresponding bci => add a nop |
425 // failures when searching for the corresponding bci => add a nop |
426 // (was bug 5/14/1999 - gri) |
426 // (was bug 5/14/1999 - gri) |
427 |
|
428 __ nop(); |
427 __ nop(); |
429 |
428 |
430 // generate code for exception handler |
429 // generate code for exception handler |
431 address handler_base = __ start_a_stub(exception_handler_size); |
430 address handler_base = __ start_a_stub(exception_handler_size); |
432 if (handler_base == NULL) { |
431 if (handler_base == NULL) { |
433 // not enough space left for the handler |
432 // not enough space left for the handler |
434 bailout("exception handler overflow"); |
433 bailout("exception handler overflow"); |
435 return; |
434 return -1; |
436 } |
435 } |
437 #ifdef ASSERT |
436 |
438 int offset = code_offset(); |
437 int offset = code_offset(); |
439 #endif // ASSERT |
|
440 |
|
441 compilation()->offsets()->set_value(CodeOffsets::Exceptions, code_offset()); |
|
442 |
438 |
443 // if the method does not have an exception handler, then there is |
439 // if the method does not have an exception handler, then there is |
444 // no reason to search for one |
440 // no reason to search for one |
445 if (compilation()->has_exception_handlers() || compilation()->env()->jvmti_can_post_on_exceptions()) { |
441 if (compilation()->has_exception_handlers() || compilation()->env()->jvmti_can_post_on_exceptions()) { |
446 // the exception oop and pc are in rax, and rdx |
442 // the exception oop and pc are in rax, and rdx |
472 } |
468 } |
473 |
469 |
474 // unwind activation and forward exception to caller |
470 // unwind activation and forward exception to caller |
475 // rax,: exception |
471 // rax,: exception |
476 __ jump(RuntimeAddress(Runtime1::entry_for(Runtime1::unwind_exception_id))); |
472 __ jump(RuntimeAddress(Runtime1::entry_for(Runtime1::unwind_exception_id))); |
477 |
|
478 assert(code_offset() - offset <= exception_handler_size, "overflow"); |
473 assert(code_offset() - offset <= exception_handler_size, "overflow"); |
479 |
|
480 __ end_a_stub(); |
474 __ end_a_stub(); |
481 } |
475 |
482 |
476 return offset; |
483 void LIR_Assembler::emit_deopt_handler() { |
477 } |
|
478 |
|
479 |
|
480 int LIR_Assembler::emit_deopt_handler() { |
484 // if the last instruction is a call (typically to do a throw which |
481 // if the last instruction is a call (typically to do a throw which |
485 // is coming at the end after block reordering) the return address |
482 // is coming at the end after block reordering) the return address |
486 // must still point into the code area in order to avoid assertion |
483 // must still point into the code area in order to avoid assertion |
487 // failures when searching for the corresponding bci => add a nop |
484 // failures when searching for the corresponding bci => add a nop |
488 // (was bug 5/14/1999 - gri) |
485 // (was bug 5/14/1999 - gri) |
489 |
|
490 __ nop(); |
486 __ nop(); |
491 |
487 |
492 // generate code for exception handler |
488 // generate code for exception handler |
493 address handler_base = __ start_a_stub(deopt_handler_size); |
489 address handler_base = __ start_a_stub(deopt_handler_size); |
494 if (handler_base == NULL) { |
490 if (handler_base == NULL) { |
495 // not enough space left for the handler |
491 // not enough space left for the handler |
496 bailout("deopt handler overflow"); |
492 bailout("deopt handler overflow"); |
497 return; |
493 return -1; |
498 } |
494 } |
499 #ifdef ASSERT |
495 |
500 int offset = code_offset(); |
496 int offset = code_offset(); |
501 #endif // ASSERT |
|
502 |
|
503 compilation()->offsets()->set_value(CodeOffsets::Deopt, code_offset()); |
|
504 |
|
505 InternalAddress here(__ pc()); |
497 InternalAddress here(__ pc()); |
506 __ pushptr(here.addr()); |
498 __ pushptr(here.addr()); |
507 |
|
508 __ jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); |
499 __ jump(RuntimeAddress(SharedRuntime::deopt_blob()->unpack())); |
509 |
|
510 assert(code_offset() - offset <= deopt_handler_size, "overflow"); |
500 assert(code_offset() - offset <= deopt_handler_size, "overflow"); |
511 |
|
512 __ end_a_stub(); |
501 __ end_a_stub(); |
513 |
502 |
|
503 return offset; |
514 } |
504 } |
515 |
505 |
516 |
506 |
517 // This is the fast version of java.lang.String.compare; it has not |
507 // This is the fast version of java.lang.String.compare; it has not |
518 // OSR-entry and therefore, we generate a slow version for OSR's |
508 // OSR-entry and therefore, we generate a slow version for OSR's |
3217 assert(data->is_CounterData(), "need CounterData for calls"); |
3207 assert(data->is_CounterData(), "need CounterData for calls"); |
3218 assert(op->mdo()->is_single_cpu(), "mdo must be allocated"); |
3208 assert(op->mdo()->is_single_cpu(), "mdo must be allocated"); |
3219 Register mdo = op->mdo()->as_register(); |
3209 Register mdo = op->mdo()->as_register(); |
3220 __ movoop(mdo, md->constant_encoding()); |
3210 __ movoop(mdo, md->constant_encoding()); |
3221 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())); |
3222 __ addl(counter_addr, DataLayout::counter_increment); |
|
3223 Bytecodes::Code bc = method->java_code_at_bci(bci); |
3212 Bytecodes::Code bc = method->java_code_at_bci(bci); |
3224 // Perform additional virtual call profiling for invokevirtual and |
3213 // Perform additional virtual call profiling for invokevirtual and |
3225 // invokeinterface bytecodes |
3214 // invokeinterface bytecodes |
3226 if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) && |
3215 if ((bc == Bytecodes::_invokevirtual || bc == Bytecodes::_invokeinterface) && |
3227 Tier1ProfileVirtualCalls) { |
3216 Tier1ProfileVirtualCalls) { |
3284 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))); |
3285 __ cmpptr(recv_addr, (int32_t)NULL_WORD); |
3274 __ cmpptr(recv_addr, (int32_t)NULL_WORD); |
3286 __ jcc(Assembler::notEqual, next_test); |
3275 __ jcc(Assembler::notEqual, next_test); |
3287 __ movptr(recv_addr, recv); |
3276 __ movptr(recv_addr, recv); |
3288 __ 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); |
3289 if (i < (VirtualCallData::row_limit() - 1)) { |
3278 __ jmp(update_done); |
3290 __ jmp(update_done); |
|
3291 } |
|
3292 __ bind(next_test); |
3279 __ bind(next_test); |
3293 } |
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); |
3294 |
3284 |
3295 __ bind(update_done); |
3285 __ bind(update_done); |
3296 } |
3286 } |
|
3287 } else { |
|
3288 // Static call |
|
3289 __ addl(counter_addr, DataLayout::counter_increment); |
3297 } |
3290 } |
3298 } |
3291 } |
3299 |
3292 |
3300 |
3293 |
3301 void LIR_Assembler::emit_delay(LIR_OpDelay*) { |
3294 void LIR_Assembler::emit_delay(LIR_OpDelay*) { |