1919 obj->long_field_put(field_offset, STACK_LONG(-1));
1920 } else if (tos_type == ctos) {
1921 obj->char_field_put(field_offset, STACK_INT(-1));
1922 } else if (tos_type == stos) {
1923 obj->short_field_put(field_offset, STACK_INT(-1));
1924 } else if (tos_type == ftos) {
1925 obj->float_field_put(field_offset, STACK_FLOAT(-1));
1926 } else {
1927 obj->double_field_put(field_offset, STACK_DOUBLE(-1));
1928 }
1929 }
1930
1931 UPDATE_PC_AND_TOS_AND_CONTINUE(3, count);
1932 }
1933
1934 CASE(_new): {
1935 u2 index = Bytes::get_Java_u2(pc+1);
1936 constantPoolOop constants = istate->method()->constants();
1937 if (!constants->tag_at(index).is_unresolved_klass()) {
1938 // Make sure klass is initialized and doesn't have a finalizer
1939 oop entry = (klassOop) *constants->obj_at_addr(index);
1940 assert(entry->is_klass(), "Should be resolved klass");
1941 klassOop k_entry = (klassOop) entry;
1942 assert(k_entry->klass_part()->oop_is_instance(), "Should be instanceKlass");
1943 instanceKlass* ik = (instanceKlass*) k_entry->klass_part();
1944 if ( ik->is_initialized() && ik->can_be_fastpath_allocated() ) {
1945 size_t obj_size = ik->size_helper();
1946 oop result = NULL;
1947 // If the TLAB isn't pre-zeroed then we'll have to do it
1948 bool need_zero = !ZeroTLAB;
1949 if (UseTLAB) {
1950 result = (oop) THREAD->tlab().allocate(obj_size);
1951 }
1952 if (result == NULL) {
1953 need_zero = true;
1954 // Try allocate in shared eden
1955 retry:
1956 HeapWord* compare_to = *Universe::heap()->top_addr();
1957 HeapWord* new_top = compare_to + obj_size;
1958 if (new_top <= *Universe::heap()->end_addr()) {
1959 if (Atomic::cmpxchg_ptr(new_top, Universe::heap()->top_addr(), compare_to) != compare_to) {
2009 //adjust pointer to start of stack element
2010 CALL_VM(InterpreterRuntime::multianewarray(THREAD, dimarray),
2011 handle_exception);
2012 SET_STACK_OBJECT(THREAD->vm_result(), -dims);
2013 THREAD->set_vm_result(NULL);
2014 UPDATE_PC_AND_TOS_AND_CONTINUE(4, -(dims-1));
2015 }
2016 CASE(_checkcast):
2017 if (STACK_OBJECT(-1) != NULL) {
2018 VERIFY_OOP(STACK_OBJECT(-1));
2019 u2 index = Bytes::get_Java_u2(pc+1);
2020 if (ProfileInterpreter) {
2021 // needs Profile_checkcast QQQ
2022 ShouldNotReachHere();
2023 }
2024 // Constant pool may have actual klass or unresolved klass. If it is
2025 // unresolved we must resolve it
2026 if (METHOD->constants()->tag_at(index).is_unresolved_klass()) {
2027 CALL_VM(InterpreterRuntime::quicken_io_cc(THREAD), handle_exception);
2028 }
2029 klassOop klassOf = (klassOop) *(METHOD->constants()->obj_at_addr(index));
2030 klassOop objKlassOop = STACK_OBJECT(-1)->klass(); //ebx
2031 //
2032 // Check for compatibilty. This check must not GC!!
2033 // Seems way more expensive now that we must dispatch
2034 //
2035 if (objKlassOop != klassOf &&
2036 !objKlassOop->klass_part()->is_subtype_of(klassOf)) {
2037 ResourceMark rm(THREAD);
2038 const char* objName = Klass::cast(objKlassOop)->external_name();
2039 const char* klassName = Klass::cast(klassOf)->external_name();
2040 char* message = SharedRuntime::generate_class_cast_message(
2041 objName, klassName);
2042 VM_JAVA_ERROR(vmSymbols::java_lang_ClassCastException(), message);
2043 }
2044 } else {
2045 if (UncommonNullCast) {
2046 // istate->method()->set_null_cast_seen();
2047 // [RGV] Not sure what to do here!
2048
2049 }
2050 }
2051 UPDATE_PC_AND_CONTINUE(3);
2052
2053 CASE(_instanceof):
2054 if (STACK_OBJECT(-1) == NULL) {
2055 SET_STACK_INT(0, -1);
2056 } else {
2057 VERIFY_OOP(STACK_OBJECT(-1));
2058 u2 index = Bytes::get_Java_u2(pc+1);
2059 // Constant pool may have actual klass or unresolved klass. If it is
2060 // unresolved we must resolve it
2061 if (METHOD->constants()->tag_at(index).is_unresolved_klass()) {
2062 CALL_VM(InterpreterRuntime::quicken_io_cc(THREAD), handle_exception);
2063 }
2064 klassOop klassOf = (klassOop) *(METHOD->constants()->obj_at_addr(index));
2065 klassOop objKlassOop = STACK_OBJECT(-1)->klass();
2066 //
2067 // Check for compatibilty. This check must not GC!!
2068 // Seems way more expensive now that we must dispatch
2069 //
2070 if ( objKlassOop == klassOf || objKlassOop->klass_part()->is_subtype_of(klassOf)) {
2071 SET_STACK_INT(1, -1);
2072 } else {
2073 SET_STACK_INT(0, -1);
2074 }
2075 }
2076 UPDATE_PC_AND_CONTINUE(3);
2077
2078 CASE(_ldc_w):
2079 CASE(_ldc):
2080 {
2081 u2 index;
2082 bool wide = false;
2083 int incr = 2; // frequent case
2084 if (opcode == Bytecodes::_ldc) {
|
1919 obj->long_field_put(field_offset, STACK_LONG(-1));
1920 } else if (tos_type == ctos) {
1921 obj->char_field_put(field_offset, STACK_INT(-1));
1922 } else if (tos_type == stos) {
1923 obj->short_field_put(field_offset, STACK_INT(-1));
1924 } else if (tos_type == ftos) {
1925 obj->float_field_put(field_offset, STACK_FLOAT(-1));
1926 } else {
1927 obj->double_field_put(field_offset, STACK_DOUBLE(-1));
1928 }
1929 }
1930
1931 UPDATE_PC_AND_TOS_AND_CONTINUE(3, count);
1932 }
1933
1934 CASE(_new): {
1935 u2 index = Bytes::get_Java_u2(pc+1);
1936 constantPoolOop constants = istate->method()->constants();
1937 if (!constants->tag_at(index).is_unresolved_klass()) {
1938 // Make sure klass is initialized and doesn't have a finalizer
1939 oop entry = constants->slot_at(index).get_oop();
1940 assert(entry->is_klass(), "Should be resolved klass");
1941 klassOop k_entry = (klassOop) entry;
1942 assert(k_entry->klass_part()->oop_is_instance(), "Should be instanceKlass");
1943 instanceKlass* ik = (instanceKlass*) k_entry->klass_part();
1944 if ( ik->is_initialized() && ik->can_be_fastpath_allocated() ) {
1945 size_t obj_size = ik->size_helper();
1946 oop result = NULL;
1947 // If the TLAB isn't pre-zeroed then we'll have to do it
1948 bool need_zero = !ZeroTLAB;
1949 if (UseTLAB) {
1950 result = (oop) THREAD->tlab().allocate(obj_size);
1951 }
1952 if (result == NULL) {
1953 need_zero = true;
1954 // Try allocate in shared eden
1955 retry:
1956 HeapWord* compare_to = *Universe::heap()->top_addr();
1957 HeapWord* new_top = compare_to + obj_size;
1958 if (new_top <= *Universe::heap()->end_addr()) {
1959 if (Atomic::cmpxchg_ptr(new_top, Universe::heap()->top_addr(), compare_to) != compare_to) {
2009 //adjust pointer to start of stack element
2010 CALL_VM(InterpreterRuntime::multianewarray(THREAD, dimarray),
2011 handle_exception);
2012 SET_STACK_OBJECT(THREAD->vm_result(), -dims);
2013 THREAD->set_vm_result(NULL);
2014 UPDATE_PC_AND_TOS_AND_CONTINUE(4, -(dims-1));
2015 }
2016 CASE(_checkcast):
2017 if (STACK_OBJECT(-1) != NULL) {
2018 VERIFY_OOP(STACK_OBJECT(-1));
2019 u2 index = Bytes::get_Java_u2(pc+1);
2020 if (ProfileInterpreter) {
2021 // needs Profile_checkcast QQQ
2022 ShouldNotReachHere();
2023 }
2024 // Constant pool may have actual klass or unresolved klass. If it is
2025 // unresolved we must resolve it
2026 if (METHOD->constants()->tag_at(index).is_unresolved_klass()) {
2027 CALL_VM(InterpreterRuntime::quicken_io_cc(THREAD), handle_exception);
2028 }
2029 klassOop klassOf = (klassOop) METHOD->constants()->slot_at(index).get_oop();
2030 klassOop objKlassOop = STACK_OBJECT(-1)->klass(); //ebx
2031 //
2032 // Check for compatibilty. This check must not GC!!
2033 // Seems way more expensive now that we must dispatch
2034 //
2035 if (objKlassOop != klassOf &&
2036 !objKlassOop->klass_part()->is_subtype_of(klassOf)) {
2037 ResourceMark rm(THREAD);
2038 const char* objName = Klass::cast(objKlassOop)->external_name();
2039 const char* klassName = Klass::cast(klassOf)->external_name();
2040 char* message = SharedRuntime::generate_class_cast_message(
2041 objName, klassName);
2042 VM_JAVA_ERROR(vmSymbols::java_lang_ClassCastException(), message);
2043 }
2044 } else {
2045 if (UncommonNullCast) {
2046 // istate->method()->set_null_cast_seen();
2047 // [RGV] Not sure what to do here!
2048
2049 }
2050 }
2051 UPDATE_PC_AND_CONTINUE(3);
2052
2053 CASE(_instanceof):
2054 if (STACK_OBJECT(-1) == NULL) {
2055 SET_STACK_INT(0, -1);
2056 } else {
2057 VERIFY_OOP(STACK_OBJECT(-1));
2058 u2 index = Bytes::get_Java_u2(pc+1);
2059 // Constant pool may have actual klass or unresolved klass. If it is
2060 // unresolved we must resolve it
2061 if (METHOD->constants()->tag_at(index).is_unresolved_klass()) {
2062 CALL_VM(InterpreterRuntime::quicken_io_cc(THREAD), handle_exception);
2063 }
2064 klassOop klassOf = (klassOop) METHOD->constants()->slot_at(index).get_oop();
2065 klassOop objKlassOop = STACK_OBJECT(-1)->klass();
2066 //
2067 // Check for compatibilty. This check must not GC!!
2068 // Seems way more expensive now that we must dispatch
2069 //
2070 if ( objKlassOop == klassOf || objKlassOop->klass_part()->is_subtype_of(klassOf)) {
2071 SET_STACK_INT(1, -1);
2072 } else {
2073 SET_STACK_INT(0, -1);
2074 }
2075 }
2076 UPDATE_PC_AND_CONTINUE(3);
2077
2078 CASE(_ldc_w):
2079 CASE(_ldc):
2080 {
2081 u2 index;
2082 bool wide = false;
2083 int incr = 2; // frequent case
2084 if (opcode == Bytecodes::_ldc) {
|