< prev index next >

src/cpu/x86/vm/frame_x86.cpp

Print this page
rev 12310 : [mq]: gcinterface.patch


 573       // and that takes two interpreter stack slots.
 574       tos_addr += 2 * Interpreter::stackElementWords;
 575 #else
 576       tos_addr += 2;
 577 #endif // AMD64
 578     }
 579   } else {
 580     tos_addr = (intptr_t*)interpreter_frame_tos_address();
 581   }
 582 
 583   switch (type) {
 584     case T_OBJECT  :
 585     case T_ARRAY   : {
 586       oop obj;
 587       if (method->is_native()) {
 588         obj = cast_to_oop(at(interpreter_frame_oop_temp_offset));
 589       } else {
 590         oop* obj_p = (oop*)tos_addr;
 591         obj = (obj_p == NULL) ? (oop)NULL : *obj_p;
 592       }
 593       assert(obj == NULL || Universe::heap()->is_in(obj), "sanity check");
 594       *oop_result = obj;
 595       break;
 596     }
 597     case T_BOOLEAN : value_result->z = *(jboolean*)tos_addr; break;
 598     case T_BYTE    : value_result->b = *(jbyte*)tos_addr; break;
 599     case T_CHAR    : value_result->c = *(jchar*)tos_addr; break;
 600     case T_SHORT   : value_result->s = *(jshort*)tos_addr; break;
 601     case T_INT     : value_result->i = *(jint*)tos_addr; break;
 602     case T_LONG    : value_result->j = *(jlong*)tos_addr; break;
 603     case T_FLOAT   : {
 604 #ifdef AMD64
 605         value_result->f = *(jfloat*)tos_addr;
 606 #else
 607       if (method->is_native()) {
 608         jdouble d = *(jdouble*)tos_addr;  // Result was in ST0 so need to convert to jfloat
 609         value_result->f = (jfloat)d;
 610       } else {
 611         value_result->f = *(jfloat*)tos_addr;
 612       }
 613 #endif // AMD64




 573       // and that takes two interpreter stack slots.
 574       tos_addr += 2 * Interpreter::stackElementWords;
 575 #else
 576       tos_addr += 2;
 577 #endif // AMD64
 578     }
 579   } else {
 580     tos_addr = (intptr_t*)interpreter_frame_tos_address();
 581   }
 582 
 583   switch (type) {
 584     case T_OBJECT  :
 585     case T_ARRAY   : {
 586       oop obj;
 587       if (method->is_native()) {
 588         obj = cast_to_oop(at(interpreter_frame_oop_temp_offset));
 589       } else {
 590         oop* obj_p = (oop*)tos_addr;
 591         obj = (obj_p == NULL) ? (oop)NULL : *obj_p;
 592       }
 593       assert(obj == NULL || GC::gc()->heap()->is_in(obj), "sanity check");
 594       *oop_result = obj;
 595       break;
 596     }
 597     case T_BOOLEAN : value_result->z = *(jboolean*)tos_addr; break;
 598     case T_BYTE    : value_result->b = *(jbyte*)tos_addr; break;
 599     case T_CHAR    : value_result->c = *(jchar*)tos_addr; break;
 600     case T_SHORT   : value_result->s = *(jshort*)tos_addr; break;
 601     case T_INT     : value_result->i = *(jint*)tos_addr; break;
 602     case T_LONG    : value_result->j = *(jlong*)tos_addr; break;
 603     case T_FLOAT   : {
 604 #ifdef AMD64
 605         value_result->f = *(jfloat*)tos_addr;
 606 #else
 607       if (method->is_native()) {
 608         jdouble d = *(jdouble*)tos_addr;  // Result was in ST0 so need to convert to jfloat
 609         value_result->f = (jfloat)d;
 610       } else {
 611         value_result->f = *(jfloat*)tos_addr;
 612       }
 613 #endif // AMD64


< prev index next >