hotspot/src/cpu/x86/vm/frame_x86.cpp
changeset 5419 f2e8cc8c12ea
parent 4752 67a506670cd0
child 5426 470c15eda401
equal deleted inserted replaced
5418:c4955cb6ed33 5419:f2e8cc8c12ea
   500   assert(is_interpreted_frame(), "must be interpreter frame");
   500   assert(is_interpreted_frame(), "must be interpreter frame");
   501   methodOop method = interpreter_frame_method();
   501   methodOop method = interpreter_frame_method();
   502   // When unpacking an optimized frame the frame pointer is
   502   // When unpacking an optimized frame the frame pointer is
   503   // adjusted with:
   503   // adjusted with:
   504   int diff = (method->max_locals() - method->size_of_parameters()) *
   504   int diff = (method->max_locals() - method->size_of_parameters()) *
   505              Interpreter::stackElementWords();
   505              Interpreter::stackElementWords;
   506   return _fp == (fp - diff);
   506   return _fp == (fp - diff);
   507 }
   507 }
   508 
   508 
   509 void frame::pd_gc_epilog() {
   509 void frame::pd_gc_epilog() {
   510   // nothing done here now
   510   // nothing done here now
   540   // validate the method we'd find in this potential sender
   540   // validate the method we'd find in this potential sender
   541   if (!Universe::heap()->is_valid_method(m)) return false;
   541   if (!Universe::heap()->is_valid_method(m)) return false;
   542 
   542 
   543   // stack frames shouldn't be much larger than max_stack elements
   543   // stack frames shouldn't be much larger than max_stack elements
   544 
   544 
   545   if (fp() - sp() > 1024 + m->max_stack()*Interpreter::stackElementSize()) {
   545   if (fp() - sp() > 1024 + m->max_stack()*Interpreter::stackElementSize) {
   546     return false;
   546     return false;
   547   }
   547   }
   548 
   548 
   549   // validate bci/bcx
   549   // validate bci/bcx
   550 
   550 
   592     if (type == T_FLOAT || type == T_DOUBLE) {
   592     if (type == T_FLOAT || type == T_DOUBLE) {
   593     // QQQ seems like this code is equivalent on the two platforms
   593     // QQQ seems like this code is equivalent on the two platforms
   594 #ifdef AMD64
   594 #ifdef AMD64
   595       // This is times two because we do a push(ltos) after pushing XMM0
   595       // This is times two because we do a push(ltos) after pushing XMM0
   596       // and that takes two interpreter stack slots.
   596       // and that takes two interpreter stack slots.
   597       tos_addr += 2 * Interpreter::stackElementWords();
   597       tos_addr += 2 * Interpreter::stackElementWords;
   598 #else
   598 #else
   599       tos_addr += 2;
   599       tos_addr += 2;
   600 #endif // AMD64
   600 #endif // AMD64
   601     }
   601     }
   602   } else {
   602   } else {