hotspot/src/cpu/x86/vm/x86_64.ad
changeset 24018 77b156916bab
parent 23498 a0e67b766e5c
child 28954 7dda6c26cc98
equal deleted inserted replaced
24016:2927072ed5fb 24018:77b156916bab
   711 //=============================================================================
   711 //=============================================================================
   712 #ifndef PRODUCT
   712 #ifndef PRODUCT
   713 void MachPrologNode::format(PhaseRegAlloc* ra_, outputStream* st) const {
   713 void MachPrologNode::format(PhaseRegAlloc* ra_, outputStream* st) const {
   714   Compile* C = ra_->C;
   714   Compile* C = ra_->C;
   715 
   715 
   716   int framesize = C->frame_slots() << LogBytesPerInt;
   716   int framesize = C->frame_size_in_bytes();
       
   717   int bangsize = C->bang_size_in_bytes();
   717   assert((framesize & (StackAlignmentInBytes-1)) == 0, "frame size not aligned");
   718   assert((framesize & (StackAlignmentInBytes-1)) == 0, "frame size not aligned");
   718   // Remove wordSize for return addr which is already pushed.
   719   // Remove wordSize for return addr which is already pushed.
   719   framesize -= wordSize;
   720   framesize -= wordSize;
   720 
   721 
   721   if (C->need_stack_bang(framesize)) {
   722   if (C->need_stack_bang(bangsize)) {
   722     framesize -= wordSize;
   723     framesize -= wordSize;
   723     st->print("# stack bang");
   724     st->print("# stack bang (%d bytes)", bangsize);
   724     st->print("\n\t");
   725     st->print("\n\t");
   725     st->print("pushq   rbp\t# Save rbp");
   726     st->print("pushq   rbp\t# Save rbp");
   726     if (framesize) {
   727     if (framesize) {
   727       st->print("\n\t");
   728       st->print("\n\t");
   728       st->print("subq    rsp, #%d\t# Create frame",framesize);
   729       st->print("subq    rsp, #%d\t# Create frame",framesize);
   749 
   750 
   750 void MachPrologNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
   751 void MachPrologNode::emit(CodeBuffer &cbuf, PhaseRegAlloc *ra_) const {
   751   Compile* C = ra_->C;
   752   Compile* C = ra_->C;
   752   MacroAssembler _masm(&cbuf);
   753   MacroAssembler _masm(&cbuf);
   753 
   754 
   754   int framesize = C->frame_slots() << LogBytesPerInt;
   755   int framesize = C->frame_size_in_bytes();
   755 
   756   int bangsize = C->bang_size_in_bytes();
   756   __ verified_entry(framesize, C->need_stack_bang(framesize), false);
   757 
       
   758   __ verified_entry(framesize, C->need_stack_bang(bangsize)?bangsize:0, false);
   757 
   759 
   758   C->set_frame_complete(cbuf.insts_size());
   760   C->set_frame_complete(cbuf.insts_size());
   759 
   761 
   760   if (C->has_mach_constant_base_node()) {
   762   if (C->has_mach_constant_base_node()) {
   761     // NOTE: We set the table base offset here because users might be
   763     // NOTE: We set the table base offset here because users might be
   784   if (C->max_vector_size() > 16) {
   786   if (C->max_vector_size() > 16) {
   785     st->print("vzeroupper");
   787     st->print("vzeroupper");
   786     st->cr(); st->print("\t");
   788     st->cr(); st->print("\t");
   787   }
   789   }
   788 
   790 
   789   int framesize = C->frame_slots() << LogBytesPerInt;
   791   int framesize = C->frame_size_in_bytes();
   790   assert((framesize & (StackAlignmentInBytes-1)) == 0, "frame size not aligned");
   792   assert((framesize & (StackAlignmentInBytes-1)) == 0, "frame size not aligned");
   791   // Remove word for return adr already pushed
   793   // Remove word for return adr already pushed
   792   // and RBP
   794   // and RBP
   793   framesize -= 2*wordSize;
   795   framesize -= 2*wordSize;
   794 
   796 
   820     // wide vectors to avoid AVX <-> SSE transition penalty during call.
   822     // wide vectors to avoid AVX <-> SSE transition penalty during call.
   821     MacroAssembler _masm(&cbuf);
   823     MacroAssembler _masm(&cbuf);
   822     __ vzeroupper();
   824     __ vzeroupper();
   823   }
   825   }
   824 
   826 
   825   int framesize = C->frame_slots() << LogBytesPerInt;
   827   int framesize = C->frame_size_in_bytes();
   826   assert((framesize & (StackAlignmentInBytes-1)) == 0, "frame size not aligned");
   828   assert((framesize & (StackAlignmentInBytes-1)) == 0, "frame size not aligned");
   827   // Remove word for return adr already pushed
   829   // Remove word for return adr already pushed
   828   // and RBP
   830   // and RBP
   829   framesize -= 2*wordSize;
   831   framesize -= 2*wordSize;
   830 
   832