提交 05f7efeb 编写于 作者: K kamg

Merge

...@@ -3643,6 +3643,7 @@ void MacroAssembler::store_heap_oop(Register d, const Address& a, int offset) { ...@@ -3643,6 +3643,7 @@ void MacroAssembler::store_heap_oop(Register d, const Address& a, int offset) {
void MacroAssembler::encode_heap_oop(Register src, Register dst) { void MacroAssembler::encode_heap_oop(Register src, Register dst) {
assert (UseCompressedOops, "must be compressed"); assert (UseCompressedOops, "must be compressed");
verify_oop(src);
Label done; Label done;
if (src == dst) { if (src == dst) {
// optimize for frequent case src == dst // optimize for frequent case src == dst
...@@ -3664,12 +3665,14 @@ void MacroAssembler::encode_heap_oop(Register src, Register dst) { ...@@ -3664,12 +3665,14 @@ void MacroAssembler::encode_heap_oop(Register src, Register dst) {
void MacroAssembler::encode_heap_oop_not_null(Register r) { void MacroAssembler::encode_heap_oop_not_null(Register r) {
assert (UseCompressedOops, "must be compressed"); assert (UseCompressedOops, "must be compressed");
verify_oop(r);
sub(r, G6_heapbase, r); sub(r, G6_heapbase, r);
srlx(r, LogMinObjAlignmentInBytes, r); srlx(r, LogMinObjAlignmentInBytes, r);
} }
void MacroAssembler::encode_heap_oop_not_null(Register src, Register dst) { void MacroAssembler::encode_heap_oop_not_null(Register src, Register dst) {
assert (UseCompressedOops, "must be compressed"); assert (UseCompressedOops, "must be compressed");
verify_oop(src);
sub(src, G6_heapbase, dst); sub(src, G6_heapbase, dst);
srlx(dst, LogMinObjAlignmentInBytes, dst); srlx(dst, LogMinObjAlignmentInBytes, dst);
} }
...@@ -3682,11 +3685,13 @@ void MacroAssembler::decode_heap_oop(Register src, Register dst) { ...@@ -3682,11 +3685,13 @@ void MacroAssembler::decode_heap_oop(Register src, Register dst) {
bpr(rc_nz, true, Assembler::pt, dst, done); bpr(rc_nz, true, Assembler::pt, dst, done);
delayed() -> add(dst, G6_heapbase, dst); // annuled if not taken delayed() -> add(dst, G6_heapbase, dst); // annuled if not taken
bind(done); bind(done);
verify_oop(dst);
} }
void MacroAssembler::decode_heap_oop_not_null(Register r) { void MacroAssembler::decode_heap_oop_not_null(Register r) {
// Do not add assert code to this unless you change vtableStubs_sparc.cpp // Do not add assert code to this unless you change vtableStubs_sparc.cpp
// pd_code_size_limit. // pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
assert (UseCompressedOops, "must be compressed"); assert (UseCompressedOops, "must be compressed");
sllx(r, LogMinObjAlignmentInBytes, r); sllx(r, LogMinObjAlignmentInBytes, r);
add(r, G6_heapbase, r); add(r, G6_heapbase, r);
...@@ -3695,6 +3700,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register r) { ...@@ -3695,6 +3700,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register r) {
void MacroAssembler::decode_heap_oop_not_null(Register src, Register dst) { void MacroAssembler::decode_heap_oop_not_null(Register src, Register dst) {
// Do not add assert code to this unless you change vtableStubs_sparc.cpp // Do not add assert code to this unless you change vtableStubs_sparc.cpp
// pd_code_size_limit. // pd_code_size_limit.
// Also do not verify_oop as this is called by verify_oop.
assert (UseCompressedOops, "must be compressed"); assert (UseCompressedOops, "must be compressed");
sllx(src, LogMinObjAlignmentInBytes, dst); sllx(src, LogMinObjAlignmentInBytes, dst);
add(dst, G6_heapbase, dst); add(dst, G6_heapbase, dst);
......
...@@ -2720,7 +2720,8 @@ nmethod *SharedRuntime::generate_dtrace_nmethod( ...@@ -2720,7 +2720,8 @@ nmethod *SharedRuntime::generate_dtrace_nmethod(
#endif /* ASSERT */ #endif /* ASSERT */
VMRegPair zero; 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; int c_arg, j_arg;
......
...@@ -5282,6 +5282,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register r) { ...@@ -5282,6 +5282,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register r) {
assert (UseCompressedOops, "should only be used for compressed headers"); assert (UseCompressedOops, "should only be used for compressed headers");
// Cannot assert, unverified entry point counts instructions (see .ad file) // Cannot assert, unverified entry point counts instructions (see .ad file)
// vtableStubs also counts instructions in pd_code_size_limit. // 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"); assert(Address::times_8 == LogMinObjAlignmentInBytes, "decode alg wrong");
leaq(r, Address(r12_heapbase, r, Address::times_8, 0)); leaq(r, Address(r12_heapbase, r, Address::times_8, 0));
} }
...@@ -5290,6 +5291,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register dst, Register src) { ...@@ -5290,6 +5291,7 @@ void MacroAssembler::decode_heap_oop_not_null(Register dst, Register src) {
assert (UseCompressedOops, "should only be used for compressed headers"); assert (UseCompressedOops, "should only be used for compressed headers");
// Cannot assert, unverified entry point counts instructions (see .ad file) // Cannot assert, unverified entry point counts instructions (see .ad file)
// vtableStubs also counts instructions in pd_code_size_limit. // 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"); assert(Address::times_8 == LogMinObjAlignmentInBytes, "decode alg wrong");
leaq(dst, Address(r12_heapbase, src, Address::times_8, 0)); leaq(dst, Address(r12_heapbase, src, Address::times_8, 0));
} }
......
...@@ -233,7 +233,7 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass, ...@@ -233,7 +233,7 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
assert(Rsub_klass != rcx, "rcx holds 2ndary super array length"); assert(Rsub_klass != rcx, "rcx holds 2ndary super array length");
assert(Rsub_klass != rdi, "rdi holds 2ndary super array scan ptr"); 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 the not-null value's klass.
profile_typecheck(rcx, Rsub_klass, rdi); // blows rcx, rdi profile_typecheck(rcx, Rsub_klass, rdi); // blows rcx, rdi
...@@ -272,12 +272,13 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass, ...@@ -272,12 +272,13 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
// and we store values in objArrays always encoded, thus we need to encode value // and we store values in objArrays always encoded, thus we need to encode value
// before repne // before repne
if (UseCompressedOops) { if (UseCompressedOops) {
pushq(rax);
encode_heap_oop(rax); encode_heap_oop(rax);
repne_scanl(); repne_scanl();
// Not equal? // Not equal?
jcc(Assembler::notEqual, not_subtype); jcc(Assembler::notEqual, not_subtype_pop);
// decode heap oop here for movq // restore heap oop here for movq
decode_heap_oop(rax); popq(rax);
} else { } else {
repne_scanq(); repne_scanq();
jcc(Assembler::notEqual, not_subtype); jcc(Assembler::notEqual, not_subtype);
...@@ -287,9 +288,10 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass, ...@@ -287,9 +288,10 @@ void InterpreterMacroAssembler::gen_subtype_check(Register Rsub_klass,
Klass::secondary_super_cache_offset_in_bytes()), rax); Klass::secondary_super_cache_offset_in_bytes()), rax);
jmp(ok_is_subtype); jmp(ok_is_subtype);
bind(not_subtype_pop);
// restore heap oop here for miss
if (UseCompressedOops) popq(rax);
bind(not_subtype); bind(not_subtype);
// decode heap oop here for miss
if (UseCompressedOops) decode_heap_oop(rax);
profile_typecheck_failed(rcx); // blows rcx profile_typecheck_failed(rcx); // blows rcx
} }
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
// Used for backward compatibility reasons: // Used for backward compatibility reasons:
// - to check for javac bug fixes that happened after 1.5 // - 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 #define JAVA_6_VERSION 50
...@@ -3507,9 +3508,11 @@ bool ClassFileParser::has_illegal_visibility(jint flags) { ...@@ -3507,9 +3508,11 @@ bool ClassFileParser::has_illegal_visibility(jint flags) {
} }
bool ClassFileParser::is_supported_version(u2 major, u2 minor) { 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) && return (major >= JAVA_MIN_SUPPORTED_VERSION) &&
(major <= JAVA_MAX_SUPPORTED_VERSION) && (major <= max_version) &&
((major != JAVA_MAX_SUPPORTED_VERSION) || ((major != max_version) ||
(minor <= JAVA_MAX_SUPPORTED_MINOR_VERSION)); (minor <= JAVA_MAX_SUPPORTED_MINOR_VERSION));
} }
......
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- <!--
6opyright 2006-2008 Sun Microsystems, Inc. All Rights Reserved. Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it 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 under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation. published by the Free Software Foundation.
This code is distributed in the hope that it will be useful, but WITHOUT This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 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 version 2 for more details (a copy is included in the LICENSE file that
accompanied this code). accompanied this code).
You should have received a copy of the GNU General Public License version 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, 2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
CA 95054 USA or visit www.sun.com if you need additional information or CA 95054 USA or visit www.sun.com if you need additional information or
have any questions. have any questions.
--> -->
<!DOCTYPE processcode [ <!DOCTYPE processcode [
<!ELEMENT processcode ANY> <!ELEMENT processcode ANY>
......
<?xml version="1.0"?> <?xml version="1.0"?>
<!-- <!--
Copyright 2006-2008 Sun Microsystems, Inc. All Rights Reserved. Copyright 1997-2000 Sun Microsystems, Inc. All Rights Reserved.
DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
This code is free software; you can redistribute it and/or modify it 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 under the terms of the GNU General Public License version 2 only, as
published by the Free Software Foundation. published by the Free Software Foundation.
This code is distributed in the hope that it will be useful, but WITHOUT This code is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 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 version 2 for more details (a copy is included in the LICENSE file that
accompanied this code). accompanied this code).
You should have received a copy of the GNU General Public License version 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, 2 along with this work; if not, write to the Free Software Foundation,
Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
CA 95054 USA or visit www.sun.com if you need additional information or CA 95054 USA or visit www.sun.com if you need additional information or
have any questions. have any questions.
--> -->
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
......
...@@ -68,8 +68,24 @@ class JDK_Version : AllStatic { ...@@ -68,8 +68,24 @@ class JDK_Version : AllStatic {
static bool is_jdk13x_version() { assert(is_jdk_version_initialized(), "must have been initialized"); return _jdk_version == 3; } 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_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_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; } static bool supports_thread_park_blocker() { return _version_info.thread_park_blocker; }
...@@ -85,14 +101,22 @@ class JDK_Version : AllStatic { ...@@ -85,14 +101,22 @@ class JDK_Version : AllStatic {
} }
static bool is_gte_jdk16x_version() { static bool is_gte_jdk16x_version() {
// Keep the semantics of this that the version number is >= 1.6 // Keep the semantics of this that the version number is >= 1.6
assert(is_jdk_version_initialized(), "Not initialized"); if (is_jdk_version_initialized()) {
return _jdk_version >= 6; return _jdk_version >= 6;
} else {
assert(is_pre_jdk16_version(), "Not initialized");
return false;
}
} }
static bool is_gte_jdk17x_version() { static bool is_gte_jdk17x_version() {
// Keep the semantics of this that the version number is >= 1.7 // Keep the semantics of this that the version number is >= 1.7
assert(is_jdk_version_initialized(), "Not initialized"); if (is_jdk_version_initialized()) {
return _jdk_version >= 7; return _jdk_version >= 7;
} else {
assert(is_pre_jdk16_version(), "Not initialized");
return false;
}
} }
static bool is_jdk_version_initialized() { static bool is_jdk_version_initialized() {
......
/* /*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * 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.
* *
*/ */
......
/* /*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * 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.
* *
*/ */
......
/* /*
* Copyright 2008 Sun Microsystems, Inc. All rights reserved. * Copyright 1997-2002 Sun Microsystems, Inc. All Rights Reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * 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.
* *
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册