src/cpu/x86/vm/x86_32.ad
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File
*** old/src/cpu/x86/vm/x86_32.ad Wed Jun 4 12:01:43 2008
--- new/src/cpu/x86/vm/x86_32.ad Wed Jun 4 12:01:43 2008
*** 1167,1203 ****
--- 1167,1194 ----
//=============================================================================
#ifndef PRODUCT
void MachUEPNode::format( PhaseRegAlloc *ra_, outputStream* st ) const {
st->print_cr( "CMP EAX,[ECX+4]\t# Inline cache check");
st->print_cr("\tJNE SharedRuntime::handle_ic_miss_stub");
st->print_cr("\tNOP");
st->print_cr("\tNOP");
if( !OptoBreakpoint )
st->print_cr("\tNOP");
}
#endif
void MachUEPNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
MacroAssembler masm(&cbuf);
#ifdef ASSERT
uint code_size = cbuf.code_size();
#endif
masm.cmpl(rax, Address(rcx, oopDesc::klass_offset_in_bytes()));
masm.jump_cc(Assembler::notEqual,
RuntimeAddress(SharedRuntime::get_ic_miss_stub()));
/* WARNING these NOPs are critical so that verified entry point is properly
! aligned (4 bytes) for patching by NativeJump::patch_verified_entry() */
int nops_cnt = 2;
if( !OptoBreakpoint ) // Leave space for int3
nops_cnt += 1;
masm.nop(nops_cnt);
assert(cbuf.code_size() - code_size == size(ra_), "checking code size of inline cache node");
+ // C2 aligns Start block (verified entry point) to InteriorEntryAlignment
+ assert((InteriorEntryAlignment & 0x3) == 0, "verified entry point should be aligned to 4 bytes");
}
uint MachUEPNode::size(PhaseRegAlloc *ra_) const {
! return OptoBreakpoint ? 11 : 12;
! return MachNode::size(ra_); // too many variables; just compute it
+ // the hard way
}
//=============================================================================
uint size_exception_handler() {
src/cpu/x86/vm/x86_32.ad
Index
Unified diffs
Context diffs
Sdiffs
Wdiffs
Patch
New
Old
Previous File
Next File