# HG changeset patch # User kamg # Date 1212774216 14400 # Node ID 1f809e0101425b51b341632c5b11715dc9154b51 # Parent f2759c126e9ddd2ab3e7e2ad64835c3ede2a0951# Parent 6d172e3548cbb670c9d44c37805a9310e255512c Merge diff -r f2759c126e9d -r 1f809e010142 src/cpu/sparc/vm/assembler_sparc.cpp --- a/src/cpu/sparc/vm/assembler_sparc.cpp Tue Jun 03 15:38:31 2008 -0700 +++ b/src/cpu/sparc/vm/assembler_sparc.cpp Fri Jun 06 13:43:36 2008 -0400 @@ -3643,6 +3643,7 @@ void MacroAssembler::encode_heap_oop(Register src, Register dst) { assert (UseCompressedOops, "must be compressed"); + verify_oop(src); Label done; if (src == dst) { // optimize for frequent case src == dst @@ -3664,12 +3665,14 @@ void MacroAssembler::encode_heap_oop_not_null(Register r) { assert (UseCompressedOops, "must be compressed"); + verify_oop(r); sub(r, G6_heapbase, r); srlx(r, LogMinObjAlignmentInBytes, r); } void MacroAssembler::encode_heap_oop_not_null(Register src, Register dst) { assert (UseCompressedOops, "must be compressed"); + verify_oop(src); sub(src, G6_heapbase, dst); srlx(dst, LogMinObjAlignmentInBytes, dst); } @@ -3682,11 +3685,13 @@ bpr(rc_nz, true, Assembler::pt, dst, done); delayed() -> add(dst, G6_heapbase, dst); // annuled if not taken bind(done); + verify_oop(dst); } void MacroAssembler::decode_heap_oop_not_null(Register r) { // Do not add assert code to this unless you change vtableStubs_sparc.cpp // pd_code_size_limit. + // Also do not verify_oop as this is called by verify_oop. assert (UseCompressedOops, "must be compressed"); sllx(r, LogMinObjAlignmentInBytes, r); add(r, G6_heapbase, r); @@ -3695,6 +3700,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register src, Register dst) { // Do not add assert code to this unless you change vtableStubs_sparc.cpp // pd_code_size_limit. + // Also do not verify_oop as this is called by verify_oop. assert (UseCompressedOops, "must be compressed"); sllx(src, LogMinObjAlignmentInBytes, dst); add(dst, G6_heapbase, dst); diff -r f2759c126e9d -r 1f809e010142 src/cpu/sparc/vm/sharedRuntime_sparc.cpp --- a/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Tue Jun 03 15:38:31 2008 -0700 +++ b/src/cpu/sparc/vm/sharedRuntime_sparc.cpp Fri Jun 06 13:43:36 2008 -0400 @@ -2720,7 +2720,8 @@ #endif /* ASSERT */ VMRegPair zero; - zero.set2(G0->as_VMReg()); + const Register g0 = G0; // without this we get a compiler warning (why??) + zero.set2(g0->as_VMReg()); int c_arg, j_arg; diff -r f2759c126e9d -r 1f809e010142 src/cpu/x86/vm/assembler_x86_64.cpp --- a/src/cpu/x86/vm/assembler_x86_64.cpp Tue Jun 03 15:38:31 2008 -0700 +++ b/src/cpu/x86/vm/assembler_x86_64.cpp Fri Jun 06 13:43:36 2008 -0400 @@ -5282,6 +5282,7 @@ assert (UseCompressedOops, "should only be used for compressed headers"); // Cannot assert, unverified entry point counts instructions (see .ad file) // vtableStubs also counts instructions in pd_code_size_limit. + // Also do not verify_oop as this is called by verify_oop. assert(Address::times_8 == LogMinObjAlignmentInBytes, "decode alg wrong"); leaq(r, Address(r12_heapbase, r, Address::times_8, 0)); } @@ -5290,6 +5291,7 @@ assert (UseCompressedOops, "should only be used for compressed headers"); // Cannot assert, unverified entry point counts instructions (see .ad file) // vtableStubs also counts instructions in pd_code_size_limit. + // Also do not verify_oop as this is called by verify_oop. assert(Address::times_8 == LogMinObjAlignmentInBytes, "decode alg wrong"); leaq(dst, Address(r12_heapbase, src, Address::times_8, 0)); } diff -r f2759c126e9d -r 1f809e010142 src/cpu/x86/vm/interp_masm_x86_64.cpp --- a/src/cpu/x86/vm/interp_masm_x86_64.cpp Tue Jun 03 15:38:31 2008 -0700 +++ b/src/cpu/x86/vm/interp_masm_x86_64.cpp Fri Jun 06 13:43:36 2008 -0400 @@ -233,7 +233,7 @@ assert(Rsub_klass != rcx, "rcx holds 2ndary super array length"); assert(Rsub_klass != rdi, "rdi holds 2ndary super array scan ptr"); - Label not_subtype, loop; + Label not_subtype, not_subtype_pop, loop; // Profile the not-null value's klass. profile_typecheck(rcx, Rsub_klass, rdi); // blows rcx, rdi @@ -272,12 +272,13 @@ // and we store values in objArrays always encoded, thus we need to encode value // before repne if (UseCompressedOops) { + pushq(rax); encode_heap_oop(rax); repne_scanl(); // Not equal? - jcc(Assembler::notEqual, not_subtype); - // decode heap oop here for movq - decode_heap_oop(rax); + jcc(Assembler::notEqual, not_subtype_pop); + // restore heap oop here for movq + popq(rax); } else { repne_scanq(); jcc(Assembler::notEqual, not_subtype); @@ -287,9 +288,10 @@ Klass::secondary_super_cache_offset_in_bytes()), rax); jmp(ok_is_subtype); + bind(not_subtype_pop); + // restore heap oop here for miss + if (UseCompressedOops) popq(rax); bind(not_subtype); - // decode heap oop here for miss - if (UseCompressedOops) decode_heap_oop(rax); profile_typecheck_failed(rcx); // blows rcx } diff -r f2759c126e9d -r 1f809e010142 src/share/vm/classfile/classFileParser.cpp --- a/src/share/vm/classfile/classFileParser.cpp Tue Jun 03 15:38:31 2008 -0700 +++ b/src/share/vm/classfile/classFileParser.cpp Fri Jun 06 13:43:36 2008 -0400 @@ -44,6 +44,7 @@ // Used for backward compatibility reasons: // - to check for javac bug fixes that happened after 1.5 +// - also used as the max version when running in jdk6 #define JAVA_6_VERSION 50 @@ -3507,9 +3508,11 @@ } bool ClassFileParser::is_supported_version(u2 major, u2 minor) { + u2 max_version = JDK_Version::is_gte_jdk17x_version() ? + JAVA_MAX_SUPPORTED_VERSION : JAVA_6_VERSION; return (major >= JAVA_MIN_SUPPORTED_VERSION) && - (major <= JAVA_MAX_SUPPORTED_VERSION) && - ((major != JAVA_MAX_SUPPORTED_VERSION) || + (major <= max_version) && + ((major != max_version) || (minor <= JAVA_MAX_SUPPORTED_MINOR_VERSION)); } diff -r f2759c126e9d -r 1f809e010142 src/share/vm/interpreter/bytecodeInterpreterWithChecks.xml --- a/src/share/vm/interpreter/bytecodeInterpreterWithChecks.xml Tue Jun 03 15:38:31 2008 -0700 +++ b/src/share/vm/interpreter/bytecodeInterpreterWithChecks.xml Fri Jun 06 13:43:36 2008 -0400 @@ -1,25 +1,25 @@ diff -r f2759c126e9d -r 1f809e010142 src/share/vm/interpreter/bytecodeInterpreterWithChecks.xsl --- a/src/share/vm/interpreter/bytecodeInterpreterWithChecks.xsl Tue Jun 03 15:38:31 2008 -0700 +++ b/src/share/vm/interpreter/bytecodeInterpreterWithChecks.xsl Fri Jun 06 13:43:36 2008 -0400 @@ -1,25 +1,25 @@ diff -r f2759c126e9d -r 1f809e010142 src/share/vm/runtime/java.hpp --- a/src/share/vm/runtime/java.hpp Tue Jun 03 15:38:31 2008 -0700 +++ b/src/share/vm/runtime/java.hpp Fri Jun 06 13:43:36 2008 -0400 @@ -68,8 +68,24 @@ static bool is_jdk13x_version() { assert(is_jdk_version_initialized(), "must have been initialized"); return _jdk_version == 3; } static bool is_jdk14x_version() { assert(is_jdk_version_initialized(), "must have been initialized"); return _jdk_version == 4; } static bool is_jdk15x_version() { assert(is_jdk_version_initialized(), "must have been initialized"); return _jdk_version == 5; } - static bool is_jdk16x_version() { assert(is_jdk_version_initialized(), "must have been initialized"); return _jdk_version == 6; } - static bool is_jdk17x_version() { assert(is_jdk_version_initialized(), "must have been initialized"); return _jdk_version == 7; } + + static bool is_jdk16x_version() { + if (is_jdk_version_initialized()) { + return _jdk_version == 6; + } else { + assert(is_pre_jdk16_version(), "must have been initialized"); + return false; + } + } + + static bool is_jdk17x_version() { + if (is_jdk_version_initialized()) { + return _jdk_version == 7; + } else { + assert(is_pre_jdk16_version(), "must have been initialized"); + return false; + } + } static bool supports_thread_park_blocker() { return _version_info.thread_park_blocker; } @@ -85,14 +101,22 @@ } static bool is_gte_jdk16x_version() { // Keep the semantics of this that the version number is >= 1.6 - assert(is_jdk_version_initialized(), "Not initialized"); - return _jdk_version >= 6; + if (is_jdk_version_initialized()) { + return _jdk_version >= 6; + } else { + assert(is_pre_jdk16_version(), "Not initialized"); + return false; + } } static bool is_gte_jdk17x_version() { // Keep the semantics of this that the version number is >= 1.7 - assert(is_jdk_version_initialized(), "Not initialized"); - return _jdk_version >= 7; + if (is_jdk_version_initialized()) { + return _jdk_version >= 7; + } else { + assert(is_pre_jdk16_version(), "Not initialized"); + return false; + } } static bool is_jdk_version_initialized() { diff -r f2759c126e9d -r 1f809e010142 test/compiler/6659207/Test.java --- a/test/compiler/6659207/Test.java Tue Jun 03 15:38:31 2008 -0700 +++ b/test/compiler/6659207/Test.java Fri Jun 06 13:43:36 2008 -0400 @@ -1,23 +1,24 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - * + * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * - * - * - * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. * - * - * - * - * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. * */ diff -r f2759c126e9d -r 1f809e010142 test/compiler/6661247/Test.java --- a/test/compiler/6661247/Test.java Tue Jun 03 15:38:31 2008 -0700 +++ b/test/compiler/6661247/Test.java Fri Jun 06 13:43:36 2008 -0400 @@ -1,23 +1,24 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - * + * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * - * - * - * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. * - * - * - * - * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. * */ diff -r f2759c126e9d -r 1f809e010142 test/compiler/6663621/IVTest.java --- a/test/compiler/6663621/IVTest.java Tue Jun 03 15:38:31 2008 -0700 +++ b/test/compiler/6663621/IVTest.java Fri Jun 06 13:43:36 2008 -0400 @@ -1,23 +1,24 @@ /* - * Copyright 2008 Sun Microsystems, Inc. All rights reserved. - * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. - * + * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * - * - * - * - * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. * - * - * - * - * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). * - * - * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * - * - * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. * */