< prev index next >

src/hotspot/cpu/x86/x86_64.ad

Print this page

        

*** 896,909 **** void MachPrologNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const { Compile* C = ra_->C; MacroAssembler _masm(&cbuf); ! int framesize = C->frame_size_in_bytes(); ! int bangsize = C->bang_size_in_bytes(); ! ! __ verified_entry(framesize, C->need_stack_bang(bangsize)?bangsize:0, false); C->set_frame_complete(cbuf.insts_size()); if (C->has_mach_constant_base_node()) { // NOTE: We set the table base offset here because users might be --- 896,907 ---- void MachPrologNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const { Compile* C = ra_->C; MacroAssembler _masm(&cbuf); ! __ verified_entry(C); ! __ bind(*_verified_entry); C->set_frame_complete(cbuf.insts_size()); if (C->has_mach_constant_base_node()) { // NOTE: We set the table base offset here because users might be
*** 973,1005 **** // Clear upper bits of YMM registers when current compiled code uses // wide vectors to avoid AVX <-> SSE transition penalty during call. __ vzeroupper(); } ! int framesize = C->frame_size_in_bytes(); ! assert((framesize & (StackAlignmentInBytes-1)) == 0, "frame size not aligned"); ! // Remove word for return adr already pushed ! // and RBP ! framesize -= 2*wordSize; ! ! // Note that VerifyStackAtCalls' Majik cookie does not change the frame size popped here ! ! if (framesize) { ! emit_opcode(cbuf, Assembler::REX_W); ! if (framesize < 0x80) { ! emit_opcode(cbuf, 0x83); // addq rsp, #framesize ! emit_rm(cbuf, 0x3, 0x00, RSP_enc); ! emit_d8(cbuf, framesize); ! } else { ! emit_opcode(cbuf, 0x81); // addq rsp, #framesize ! emit_rm(cbuf, 0x3, 0x00, RSP_enc); ! emit_d32(cbuf, framesize); ! } ! } - // popq rbp - emit_opcode(cbuf, 0x58 | RBP_enc); if (StackReservedPages > 0 && C->has_reserved_stack_access()) { __ reserved_stack_check(); } --- 971,982 ---- // Clear upper bits of YMM registers when current compiled code uses // wide vectors to avoid AVX <-> SSE transition penalty during call. __ vzeroupper(); } ! __ restore_stack(C); if (StackReservedPages > 0 && C->has_reserved_stack_access()) { __ reserved_stack_check(); }
*** 1568,1577 **** --- 1545,1576 ---- return (offset < 0x80) ? 5 : 8; // REX } //============================================================================= #ifndef PRODUCT + void MachVVEPNode::format(PhaseRegAlloc* ra_, outputStream* st) const + { + st->print_cr("MachVVEPNode"); + } + #endif + + void MachVVEPNode::emit(CodeBuffer& cbuf, PhaseRegAlloc* ra_) const + { + // Unpack all value type args passed as oop and then jump to + // the verified entry point (skipping the unverified entry). + MacroAssembler masm(&cbuf); + masm.unpack_value_args(ra_->C); + masm.jmp(*_verified_entry); + } + + uint MachVVEPNode::size(PhaseRegAlloc* ra_) const + { + return MachNode::size(ra_); // too many variables; just compute it the hard way + } + + //============================================================================= + #ifndef PRODUCT void MachUEPNode::format(PhaseRegAlloc* ra_, outputStream* st) const { if (UseCompressedClassPointers) { st->print_cr("movl rscratch1, [j_rarg0 + oopDesc::klass_offset_in_bytes()]\t# compressed klass"); st->print_cr("\tdecode_klass_not_null rscratch1, rscratch1");
< prev index next >