mirror of
https://github.com/openjdk/jdk.git
synced 2025-09-22 12:04:39 +02:00
Merge
This commit is contained in:
commit
7ddc1c7f4e
638 changed files with 11715 additions and 3435 deletions
1
.hgtags
1
.hgtags
|
@ -254,3 +254,4 @@ b47e021195757f8f45582124ea7cad48ccf5f872 jdk9-b08
|
||||||
efe7dbc6088691757404e0c8745f894e3ca9c022 jdk9-b09
|
efe7dbc6088691757404e0c8745f894e3ca9c022 jdk9-b09
|
||||||
8c0bdeecd7c0f9ce3f3762a51991f755cb3a972c jdk9-b10
|
8c0bdeecd7c0f9ce3f3762a51991f755cb3a972c jdk9-b10
|
||||||
0809c9a4d36e6291f1c4384604c4bbf29e975722 jdk9-b11
|
0809c9a4d36e6291f1c4384604c4bbf29e975722 jdk9-b11
|
||||||
|
0d1f816217dce5e72187f167cc1816080cbeb453 jdk9-b12
|
||||||
|
|
|
@ -254,3 +254,4 @@ db045d8faa0924b7378102d24a1a0d850c1e3834 jdk9-b08
|
||||||
4a21dc7d57d1069a01f68e7182c074cb37349dfb jdk9-b09
|
4a21dc7d57d1069a01f68e7182c074cb37349dfb jdk9-b09
|
||||||
fa13f2b926f8426876ec03e7903f3ee0ee150f2e jdk9-b10
|
fa13f2b926f8426876ec03e7903f3ee0ee150f2e jdk9-b10
|
||||||
ab55a18a95e1990a588929d5d29db3eb9985fea0 jdk9-b11
|
ab55a18a95e1990a588929d5d29db3eb9985fea0 jdk9-b11
|
||||||
|
59f6350295f9681fe5956d8bc889bf341914c6cb jdk9-b12
|
||||||
|
|
|
@ -144,8 +144,10 @@ if [ "${command}" = "clone" -o "${command}" = "fclone" -o "${command}" = "tclone
|
||||||
repos="${repos} ${i}"
|
repos="${repos} ${i}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
pull_default_tail=`echo ${pull_default} | sed -e 's@^.*://[^/]*/\(.*\)@\1@'`
|
||||||
|
|
||||||
if [ "${command_args}" != "" ] ; then
|
if [ "${command_args}" != "" ] ; then
|
||||||
pull_default_tail=`echo ${pull_default} | sed -e 's@^.*://[^/]*/\(.*\)@\1@'`
|
|
||||||
if [ "x${pull_default}" = "x${pull_default_tail}" ] ; then
|
if [ "x${pull_default}" = "x${pull_default_tail}" ] ; then
|
||||||
echo "ERROR: Need initial clone from non-local source" > ${status_output}
|
echo "ERROR: Need initial clone from non-local source" > ${status_output}
|
||||||
exit 1
|
exit 1
|
||||||
|
@ -156,6 +158,16 @@ if [ "${command}" = "clone" -o "${command}" = "fclone" -o "${command}" = "tclone
|
||||||
repos_extra="${repos_extra} ${i}"
|
repos_extra="${repos_extra} ${i}"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
else
|
||||||
|
if [ "x${pull_default}" = "x${pull_default_tail}" ] ; then
|
||||||
|
# local source repo. Copy the extras ones that exist there.
|
||||||
|
for i in ${subrepos_extra} ; do
|
||||||
|
if [ -f ${pull_default}/${i}/.hg/hgrc -a ! -f ${i}/.hg/hgrc ] ; then
|
||||||
|
# sub-repo there in source but not here
|
||||||
|
repos_extra="${repos_extra} ${i}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
at_a_time=2
|
at_a_time=2
|
||||||
# Any repos to deal with?
|
# Any repos to deal with?
|
||||||
|
|
|
@ -254,3 +254,4 @@ a4bf701ac316946c2e5e83138ad8e687da6a4b30 jdk9-b06
|
||||||
1a3a4f48515dbf1cff37279691b2fb74f228298d jdk9-b09
|
1a3a4f48515dbf1cff37279691b2fb74f228298d jdk9-b09
|
||||||
3bd4039dfc632fd7fc8418a25a3dcc34d1cd4019 jdk9-b10
|
3bd4039dfc632fd7fc8418a25a3dcc34d1cd4019 jdk9-b10
|
||||||
77ea0a2503582a28e4e66be7239a49a0d1dd313f jdk9-b11
|
77ea0a2503582a28e4e66be7239a49a0d1dd313f jdk9-b11
|
||||||
|
e212cdcc8c11f0ba5acf6f5ddb596c4c545a93f9 jdk9-b12
|
||||||
|
|
|
@ -414,3 +414,4 @@ bdc5311e1db7598589b77015119b821bf8c828bd jdk9-b05
|
||||||
05e8f5242c26ba45d4fa947e4f4f54c058c9b522 jdk9-b09
|
05e8f5242c26ba45d4fa947e4f4f54c058c9b522 jdk9-b09
|
||||||
ebc44d040cd149d2120d69fe183a3dae7840f4b4 jdk9-b10
|
ebc44d040cd149d2120d69fe183a3dae7840f4b4 jdk9-b10
|
||||||
783309c3a1a629a452673399dcfa83ef7eca94d8 jdk9-b11
|
783309c3a1a629a452673399dcfa83ef7eca94d8 jdk9-b11
|
||||||
|
1c383bb39e2849ca62cb763f4e182a29b421d60a jdk9-b12
|
||||||
|
|
|
@ -34,19 +34,7 @@
|
||||||
#include "libproc_md.h"
|
#include "libproc_md.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(sparc) || defined(sparcv9)
|
#include <linux/ptrace.h>
|
||||||
/*
|
|
||||||
If _LP64 is defined ptrace.h should be taken from /usr/include/asm-sparc64
|
|
||||||
otherwise it should be from /usr/include/asm-sparc
|
|
||||||
These two files define pt_regs structure differently
|
|
||||||
*/
|
|
||||||
#ifdef _LP64
|
|
||||||
#include "asm-sparc64/ptrace.h"
|
|
||||||
#else
|
|
||||||
#include "asm-sparc/ptrace.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif //sparc or sparcv9
|
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
|
|
||||||
|
|
|
@ -136,8 +136,6 @@ include $(MAKEFILES_DIR)/dtrace.make
|
||||||
JVM = jvm
|
JVM = jvm
|
||||||
LIBJVM = lib$(JVM).so
|
LIBJVM = lib$(JVM).so
|
||||||
|
|
||||||
CFLAGS += -DALLOW_OPERATOR_NEW_USAGE
|
|
||||||
|
|
||||||
LIBJVM_DEBUGINFO = lib$(JVM).debuginfo
|
LIBJVM_DEBUGINFO = lib$(JVM).debuginfo
|
||||||
LIBJVM_DIZ = lib$(JVM).diz
|
LIBJVM_DIZ = lib$(JVM).diz
|
||||||
|
|
||||||
|
|
|
@ -146,9 +146,6 @@ JVM = jvm
|
||||||
ifeq ($(OS_VENDOR), Darwin)
|
ifeq ($(OS_VENDOR), Darwin)
|
||||||
LIBJVM = lib$(JVM).dylib
|
LIBJVM = lib$(JVM).dylib
|
||||||
CFLAGS += -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE
|
CFLAGS += -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE
|
||||||
ifeq (${VERSION}, $(filter ${VERSION}, debug fastdebug))
|
|
||||||
CFLAGS += -DALLOW_OPERATOR_NEW_USAGE
|
|
||||||
endif
|
|
||||||
|
|
||||||
LIBJVM_DEBUGINFO = lib$(JVM).dylib.dSYM
|
LIBJVM_DEBUGINFO = lib$(JVM).dylib.dSYM
|
||||||
LIBJVM_DIZ = lib$(JVM).diz
|
LIBJVM_DIZ = lib$(JVM).diz
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
||||||
|
@ -403,7 +404,7 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(Label& stack_ov
|
||||||
BLOCK_COMMENT("compute_interpreter_state {");
|
BLOCK_COMMENT("compute_interpreter_state {");
|
||||||
|
|
||||||
// access_flags = method->access_flags();
|
// access_flags = method->access_flags();
|
||||||
// TODO: PPC port: assert(4 == methodOopDesc::sz_access_flags(), "unexpected field size");
|
// TODO: PPC port: assert(4 == sizeof(AccessFlags), "unexpected field size");
|
||||||
__ lwa(access_flags, method_(access_flags));
|
__ lwa(access_flags, method_(access_flags));
|
||||||
|
|
||||||
// parameter_count = method->constMethod->size_of_parameters();
|
// parameter_count = method->constMethod->size_of_parameters();
|
||||||
|
@ -419,10 +420,8 @@ void CppInterpreterGenerator::generate_compute_interpreter_state(Label& stack_ov
|
||||||
// TODO: PPC port: assert(2 == ConstMethod::sz_max_stack(), "unexpected field size");
|
// TODO: PPC port: assert(2 == ConstMethod::sz_max_stack(), "unexpected field size");
|
||||||
__ lhz(max_stack, in_bytes(ConstMethod::max_stack_offset()), max_stack);
|
__ lhz(max_stack, in_bytes(ConstMethod::max_stack_offset()), max_stack);
|
||||||
|
|
||||||
if (EnableInvokeDynamic) {
|
// Take into account 'extra_stack_entries' needed by method handles (see method.hpp).
|
||||||
// Take into account 'extra_stack_entries' needed by method handles (see method.hpp).
|
|
||||||
__ addi(max_stack, max_stack, Method::extra_stack_entries());
|
__ addi(max_stack, max_stack, Method::extra_stack_entries());
|
||||||
}
|
|
||||||
|
|
||||||
// mem_stack_limit = thread->stack_limit();
|
// mem_stack_limit = thread->stack_limit();
|
||||||
__ ld(mem_stack_limit, thread_(stack_overflow_limit));
|
__ ld(mem_stack_limit, thread_(stack_overflow_limit));
|
||||||
|
@ -1055,7 +1054,7 @@ address CppInterpreterGenerator::generate_native_entry(void) {
|
||||||
assert(access_flags->is_nonvolatile(),
|
assert(access_flags->is_nonvolatile(),
|
||||||
"access_flags must be in a non-volatile register");
|
"access_flags must be in a non-volatile register");
|
||||||
// Type check.
|
// Type check.
|
||||||
// TODO: PPC port: assert(4 == methodOopDesc::sz_access_flags(), "unexpected field size");
|
// TODO: PPC port: assert(4 == sizeof(AccessFlags), "unexpected field size");
|
||||||
__ lwz(access_flags, method_(access_flags));
|
__ lwz(access_flags, method_(access_flags));
|
||||||
|
|
||||||
// We don't want to reload R19_method and access_flags after calls
|
// We don't want to reload R19_method and access_flags after calls
|
||||||
|
@ -1838,7 +1837,7 @@ address CppInterpreterGenerator::generate_normal_entry(void) {
|
||||||
// Interpreter state fields.
|
// Interpreter state fields.
|
||||||
const Register msg = R24_tmp4;
|
const Register msg = R24_tmp4;
|
||||||
|
|
||||||
// MethodOop fields.
|
// Method fields.
|
||||||
const Register parameter_count = R25_tmp5;
|
const Register parameter_count = R25_tmp5;
|
||||||
const Register result_index = R26_tmp6;
|
const Register result_index = R26_tmp6;
|
||||||
|
|
||||||
|
@ -2023,7 +2022,7 @@ address CppInterpreterGenerator::generate_normal_entry(void) {
|
||||||
__ add(R17_tos, R17_tos, parameter_count);
|
__ add(R17_tos, R17_tos, parameter_count);
|
||||||
|
|
||||||
// Result stub address array index
|
// Result stub address array index
|
||||||
// TODO: PPC port: assert(4 == methodOopDesc::sz_result_index(), "unexpected field size");
|
// TODO: PPC port: assert(4 == sizeof(AccessFlags), "unexpected field size");
|
||||||
__ lwa(result_index, method_(result_index));
|
__ lwa(result_index, method_(result_index));
|
||||||
|
|
||||||
__ li(msg, BytecodeInterpreter::method_resume);
|
__ li(msg, BytecodeInterpreter::method_resume);
|
||||||
|
@ -2709,7 +2708,7 @@ address CppInterpreterGenerator::generate_normal_entry(void) {
|
||||||
__ ld(R3_ARG1, state_(_result._osr._osr_buf));
|
__ ld(R3_ARG1, state_(_result._osr._osr_buf));
|
||||||
__ mtctr(R12_scratch2);
|
__ mtctr(R12_scratch2);
|
||||||
|
|
||||||
// Load method oop, gc may move it during execution of osr'd method.
|
// Load method, gc may move it during execution of osr'd method.
|
||||||
__ ld(R22_tmp2, state_(_method));
|
__ ld(R22_tmp2, state_(_method));
|
||||||
// Load message 'call_method'.
|
// Load message 'call_method'.
|
||||||
__ li(R23_tmp3, BytecodeInterpreter::call_method);
|
__ li(R23_tmp3, BytecodeInterpreter::call_method);
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#ifndef CPU_PPC_VM_FRAME_PPC_INLINE_HPP
|
#ifndef CPU_PPC_VM_FRAME_PPC_INLINE_HPP
|
||||||
#define CPU_PPC_VM_FRAME_PPC_INLINE_HPP
|
#define CPU_PPC_VM_FRAME_PPC_INLINE_HPP
|
||||||
|
|
||||||
|
#include "code/codeCache.hpp"
|
||||||
|
|
||||||
// Inline functions for ppc64 frames:
|
// Inline functions for ppc64 frames:
|
||||||
|
|
||||||
// Find codeblob and set deopt_state.
|
// Find codeblob and set deopt_state.
|
||||||
|
|
|
@ -380,7 +380,6 @@ void InterpreterMacroAssembler::get_cache_index_at_bcp(Register Rdst, int bcp_of
|
||||||
if (index_size == sizeof(u2)) {
|
if (index_size == sizeof(u2)) {
|
||||||
get_2_byte_integer_at_bcp(bcp_offset, Rdst, Unsigned);
|
get_2_byte_integer_at_bcp(bcp_offset, Rdst, Unsigned);
|
||||||
} else if (index_size == sizeof(u4)) {
|
} else if (index_size == sizeof(u4)) {
|
||||||
assert(EnableInvokeDynamic, "giant index used only for JSR 292");
|
|
||||||
get_4_byte_integer_at_bcp(bcp_offset, Rdst, Signed);
|
get_4_byte_integer_at_bcp(bcp_offset, Rdst, Signed);
|
||||||
assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line");
|
assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line");
|
||||||
nand(Rdst, Rdst, Rdst); // convert to plain index
|
nand(Rdst, Rdst, Rdst); // convert to plain index
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
#ifndef CPU_PPC_VM_INTERP_MASM_PPC_64_HPP
|
#ifndef CPU_PPC_VM_INTERP_MASM_PPC_64_HPP
|
||||||
#define CPU_PPC_VM_INTERP_MASM_PPC_64_HPP
|
#define CPU_PPC_VM_INTERP_MASM_PPC_64_HPP
|
||||||
|
|
||||||
#include "assembler_ppc.inline.hpp"
|
#include "asm/macroAssembler.hpp"
|
||||||
#include "interpreter/invocationCounter.hpp"
|
#include "interpreter/invocationCounter.hpp"
|
||||||
|
|
||||||
// This file specializes the assembler with interpreter-specific macros.
|
// This file specializes the assembler with interpreter-specific macros.
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "precompiled.hpp"
|
#include "precompiled.hpp"
|
||||||
|
#include "asm/assembler.inline.hpp"
|
||||||
#include "interpreter/interpreter.hpp"
|
#include "interpreter/interpreter.hpp"
|
||||||
#include "interpreter/interpreterRuntime.hpp"
|
#include "interpreter/interpreterRuntime.hpp"
|
||||||
#include "memory/allocation.inline.hpp"
|
#include "memory/allocation.inline.hpp"
|
||||||
|
|
|
@ -139,32 +139,16 @@ address AbstractInterpreterGenerator::generate_slow_signature_handler() {
|
||||||
// Signature is in R3_RET. Signature is callee saved.
|
// Signature is in R3_RET. Signature is callee saved.
|
||||||
__ mr(signature, R3_RET);
|
__ mr(signature, R3_RET);
|
||||||
|
|
||||||
// Reload method, it may have moved.
|
|
||||||
#ifdef CC_INTERP
|
|
||||||
__ ld(R19_method, state_(_method));
|
|
||||||
#else
|
|
||||||
__ ld(R19_method, 0, target_sp);
|
|
||||||
__ ld(R19_method, _ijava_state_neg(method), R19_method);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Get the result handler.
|
// Get the result handler.
|
||||||
__ call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::get_result_handler), R16_thread, R19_method);
|
__ call_VM_leaf(CAST_FROM_FN_PTR(address, InterpreterRuntime::get_result_handler), R16_thread, R19_method);
|
||||||
|
|
||||||
// Reload method, it may have moved.
|
|
||||||
#ifdef CC_INTERP
|
|
||||||
__ ld(R19_method, state_(_method));
|
|
||||||
#else
|
|
||||||
__ ld(R19_method, 0, target_sp);
|
|
||||||
__ ld(R19_method, _ijava_state_neg(method), R19_method);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
{
|
{
|
||||||
Label L;
|
Label L;
|
||||||
// test if static
|
// test if static
|
||||||
// _access_flags._flags must be at offset 0.
|
// _access_flags._flags must be at offset 0.
|
||||||
// TODO PPC port: requires change in shared code.
|
// TODO PPC port: requires change in shared code.
|
||||||
//assert(in_bytes(AccessFlags::flags_offset()) == 0,
|
//assert(in_bytes(AccessFlags::flags_offset()) == 0,
|
||||||
// "MethodOopDesc._access_flags == MethodOopDesc._access_flags._flags");
|
// "MethodDesc._access_flags == MethodDesc._access_flags._flags");
|
||||||
// _access_flags must be a 32 bit value.
|
// _access_flags must be a 32 bit value.
|
||||||
assert(sizeof(AccessFlags) == 4, "wrong size");
|
assert(sizeof(AccessFlags) == 4, "wrong size");
|
||||||
__ lwa(R11_scratch1/*access_flags*/, method_(access_flags));
|
__ lwa(R11_scratch1/*access_flags*/, method_(access_flags));
|
||||||
|
|
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
|
|
||||||
address JNI_FastGetField::generate_fast_get_int_field0(BasicType type) {
|
address JNI_FastGetField::generate_fast_get_int_field0(BasicType type) {
|
||||||
// we don't have fast jni accessors.
|
// We don't have fast jni accessors.
|
||||||
return (address) -1;
|
return (address) -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,12 +57,12 @@ address JNI_FastGetField::generate_fast_get_int_field() {
|
||||||
}
|
}
|
||||||
|
|
||||||
address JNI_FastGetField::generate_fast_get_long_field() {
|
address JNI_FastGetField::generate_fast_get_long_field() {
|
||||||
// we don't have fast jni accessors.
|
// We don't have fast jni accessors.
|
||||||
return (address) -1;
|
return (address) -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
address JNI_FastGetField::generate_fast_get_float_field0(BasicType type) {
|
address JNI_FastGetField::generate_fast_get_float_field0(BasicType type) {
|
||||||
// e don't have fast jni accessors.
|
// We don't have fast jni accessors.
|
||||||
return (address) -1;
|
return (address) -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -898,7 +898,7 @@ source_hpp %{
|
||||||
// To keep related declarations/definitions/uses close together,
|
// To keep related declarations/definitions/uses close together,
|
||||||
// we switch between source %{ }% and source_hpp %{ }% freely as needed.
|
// we switch between source %{ }% and source_hpp %{ }% freely as needed.
|
||||||
|
|
||||||
// Returns true if Node n is followed by a MemBar node that
|
// Returns true if Node n is followed by a MemBar node that
|
||||||
// will do an acquire. If so, this node must not do the acquire
|
// will do an acquire. If so, this node must not do the acquire
|
||||||
// operation.
|
// operation.
|
||||||
bool followed_by_acquire(const Node *n);
|
bool followed_by_acquire(const Node *n);
|
||||||
|
@ -908,7 +908,7 @@ source %{
|
||||||
|
|
||||||
// Optimize load-acquire.
|
// Optimize load-acquire.
|
||||||
//
|
//
|
||||||
// Check if acquire is unnecessary due to following operation that does
|
// Check if acquire is unnecessary due to following operation that does
|
||||||
// acquire anyways.
|
// acquire anyways.
|
||||||
// Walk the pattern:
|
// Walk the pattern:
|
||||||
//
|
//
|
||||||
|
@ -919,12 +919,12 @@ source %{
|
||||||
// Proj(ctrl) Proj(mem)
|
// Proj(ctrl) Proj(mem)
|
||||||
// | |
|
// | |
|
||||||
// MemBarRelease/Volatile
|
// MemBarRelease/Volatile
|
||||||
//
|
//
|
||||||
bool followed_by_acquire(const Node *load) {
|
bool followed_by_acquire(const Node *load) {
|
||||||
assert(load->is_Load(), "So far implemented only for loads.");
|
assert(load->is_Load(), "So far implemented only for loads.");
|
||||||
|
|
||||||
// Find MemBarAcquire.
|
// Find MemBarAcquire.
|
||||||
const Node *mba = NULL;
|
const Node *mba = NULL;
|
||||||
for (DUIterator_Fast imax, i = load->fast_outs(imax); i < imax; i++) {
|
for (DUIterator_Fast imax, i = load->fast_outs(imax); i < imax; i++) {
|
||||||
const Node *out = load->fast_out(i);
|
const Node *out = load->fast_out(i);
|
||||||
if (out->Opcode() == Op_MemBarAcquire) {
|
if (out->Opcode() == Op_MemBarAcquire) {
|
||||||
|
@ -937,7 +937,7 @@ bool followed_by_acquire(const Node *load) {
|
||||||
|
|
||||||
// Find following MemBar node.
|
// Find following MemBar node.
|
||||||
//
|
//
|
||||||
// The following node must be reachable by control AND memory
|
// The following node must be reachable by control AND memory
|
||||||
// edge to assure no other operations are in between the two nodes.
|
// edge to assure no other operations are in between the two nodes.
|
||||||
//
|
//
|
||||||
// So first get the Proj node, mem_proj, to use it to iterate forward.
|
// So first get the Proj node, mem_proj, to use it to iterate forward.
|
||||||
|
@ -1135,6 +1135,7 @@ class CallStubImpl {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// Emit call stub, compiled java to interpreter.
|
||||||
static void emit_trampoline_stub(MacroAssembler &_masm, int destination_toc_offset, int insts_call_instruction_offset);
|
static void emit_trampoline_stub(MacroAssembler &_masm, int destination_toc_offset, int insts_call_instruction_offset);
|
||||||
|
|
||||||
// Size of call trampoline stub.
|
// Size of call trampoline stub.
|
||||||
|
@ -2755,7 +2756,7 @@ encode %{
|
||||||
// inputs for new nodes
|
// inputs for new nodes
|
||||||
m1->add_req(NULL, n_toc);
|
m1->add_req(NULL, n_toc);
|
||||||
m2->add_req(NULL, m1);
|
m2->add_req(NULL, m1);
|
||||||
|
|
||||||
// operands for new nodes
|
// operands for new nodes
|
||||||
m1->_opnds[0] = new (C) iRegPdstOper(); // dst
|
m1->_opnds[0] = new (C) iRegPdstOper(); // dst
|
||||||
m1->_opnds[1] = op_src; // src
|
m1->_opnds[1] = op_src; // src
|
||||||
|
@ -2763,29 +2764,29 @@ encode %{
|
||||||
m2->_opnds[0] = new (C) iRegPdstOper(); // dst
|
m2->_opnds[0] = new (C) iRegPdstOper(); // dst
|
||||||
m2->_opnds[1] = op_src; // src
|
m2->_opnds[1] = op_src; // src
|
||||||
m2->_opnds[2] = new (C) iRegLdstOper(); // base
|
m2->_opnds[2] = new (C) iRegLdstOper(); // base
|
||||||
|
|
||||||
// Initialize ins_attrib TOC fields.
|
// Initialize ins_attrib TOC fields.
|
||||||
m1->_const_toc_offset = -1;
|
m1->_const_toc_offset = -1;
|
||||||
m2->_const_toc_offset_hi_node = m1;
|
m2->_const_toc_offset_hi_node = m1;
|
||||||
|
|
||||||
// Register allocation for new nodes.
|
// Register allocation for new nodes.
|
||||||
ra_->set_pair(m1->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
ra_->set_pair(m1->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
||||||
ra_->set_pair(m2->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
ra_->set_pair(m2->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
||||||
|
|
||||||
nodes->push(m1);
|
nodes->push(m1);
|
||||||
nodes->push(m2);
|
nodes->push(m2);
|
||||||
assert(m2->bottom_type()->isa_ptr(), "must be ptr");
|
assert(m2->bottom_type()->isa_ptr(), "must be ptr");
|
||||||
} else {
|
} else {
|
||||||
loadConPNode *m2 = new (C) loadConPNode();
|
loadConPNode *m2 = new (C) loadConPNode();
|
||||||
|
|
||||||
// inputs for new nodes
|
// inputs for new nodes
|
||||||
m2->add_req(NULL, n_toc);
|
m2->add_req(NULL, n_toc);
|
||||||
|
|
||||||
// operands for new nodes
|
// operands for new nodes
|
||||||
m2->_opnds[0] = new (C) iRegPdstOper(); // dst
|
m2->_opnds[0] = new (C) iRegPdstOper(); // dst
|
||||||
m2->_opnds[1] = op_src; // src
|
m2->_opnds[1] = op_src; // src
|
||||||
m2->_opnds[2] = new (C) iRegPdstOper(); // toc
|
m2->_opnds[2] = new (C) iRegPdstOper(); // toc
|
||||||
|
|
||||||
// Register allocation for new nodes.
|
// Register allocation for new nodes.
|
||||||
ra_->set_pair(m2->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
ra_->set_pair(m2->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
||||||
|
|
||||||
|
@ -2977,17 +2978,17 @@ encode %{
|
||||||
n_sub_base->_opnds[1] = op_crx;
|
n_sub_base->_opnds[1] = op_crx;
|
||||||
n_sub_base->_opnds[2] = op_src;
|
n_sub_base->_opnds[2] = op_src;
|
||||||
n_sub_base->_bottom_type = _bottom_type;
|
n_sub_base->_bottom_type = _bottom_type;
|
||||||
|
|
||||||
n_shift->add_req(n_region, n_sub_base);
|
n_shift->add_req(n_region, n_sub_base);
|
||||||
n_shift->_opnds[0] = op_dst;
|
n_shift->_opnds[0] = op_dst;
|
||||||
n_shift->_opnds[1] = op_dst;
|
n_shift->_opnds[1] = op_dst;
|
||||||
n_shift->_bottom_type = _bottom_type;
|
n_shift->_bottom_type = _bottom_type;
|
||||||
|
|
||||||
ra_->set_pair(n_shift->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
ra_->set_pair(n_shift->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
||||||
ra_->set_pair(n_compare->_idx, ra_->get_reg_second(n_crx), ra_->get_reg_first(n_crx));
|
ra_->set_pair(n_compare->_idx, ra_->get_reg_second(n_crx), ra_->get_reg_first(n_crx));
|
||||||
ra_->set_pair(n_sub_base->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
ra_->set_pair(n_sub_base->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
||||||
ra_->set_pair(n_move->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
ra_->set_pair(n_move->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
||||||
|
|
||||||
nodes->push(n_move);
|
nodes->push(n_move);
|
||||||
nodes->push(n_compare);
|
nodes->push(n_compare);
|
||||||
nodes->push(n_sub_base);
|
nodes->push(n_sub_base);
|
||||||
|
@ -3064,20 +3065,20 @@ encode %{
|
||||||
} else {
|
} else {
|
||||||
// before Power 7
|
// before Power 7
|
||||||
cond_add_baseNode *n_add_base = new (C) cond_add_baseNode();
|
cond_add_baseNode *n_add_base = new (C) cond_add_baseNode();
|
||||||
|
|
||||||
n_add_base->add_req(n_region, n_compare, n_shift);
|
n_add_base->add_req(n_region, n_compare, n_shift);
|
||||||
n_add_base->_opnds[0] = op_dst;
|
n_add_base->_opnds[0] = op_dst;
|
||||||
n_add_base->_opnds[1] = op_crx;
|
n_add_base->_opnds[1] = op_crx;
|
||||||
n_add_base->_opnds[2] = op_dst;
|
n_add_base->_opnds[2] = op_dst;
|
||||||
n_add_base->_bottom_type = _bottom_type;
|
n_add_base->_bottom_type = _bottom_type;
|
||||||
|
|
||||||
assert(ra_->is_oop(this) == true, "A decodeN node must produce an oop!");
|
assert(ra_->is_oop(this) == true, "A decodeN node must produce an oop!");
|
||||||
ra_->set_oop(n_add_base, true);
|
ra_->set_oop(n_add_base, true);
|
||||||
|
|
||||||
ra_->set_pair(n_shift->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
ra_->set_pair(n_shift->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
||||||
ra_->set_pair(n_compare->_idx, ra_->get_reg_second(n_crx), ra_->get_reg_first(n_crx));
|
ra_->set_pair(n_compare->_idx, ra_->get_reg_second(n_crx), ra_->get_reg_first(n_crx));
|
||||||
ra_->set_pair(n_add_base->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
ra_->set_pair(n_add_base->_idx, ra_->get_reg_second(this), ra_->get_reg_first(this));
|
||||||
|
|
||||||
nodes->push(n_compare);
|
nodes->push(n_compare);
|
||||||
nodes->push(n_shift);
|
nodes->push(n_shift);
|
||||||
nodes->push(n_add_base);
|
nodes->push(n_add_base);
|
||||||
|
@ -3634,11 +3635,11 @@ encode %{
|
||||||
// Req...
|
// Req...
|
||||||
for (uint i = 0; i < req(); ++i) {
|
for (uint i = 0; i < req(); ++i) {
|
||||||
// The expanded node does not need toc any more.
|
// The expanded node does not need toc any more.
|
||||||
// Add the inline cache constant here instead. This expresses the
|
// Add the inline cache constant here instead. This expresses the
|
||||||
// register of the inline cache must be live at the call.
|
// register of the inline cache must be live at the call.
|
||||||
// Else we would have to adapt JVMState by -1.
|
// Else we would have to adapt JVMState by -1.
|
||||||
if (i == mach_constant_base_node_input()) {
|
if (i == mach_constant_base_node_input()) {
|
||||||
call->add_req(loadConLNodes_IC._last);
|
call->add_req(loadConLNodes_IC._last);
|
||||||
} else {
|
} else {
|
||||||
call->add_req(in(i));
|
call->add_req(in(i));
|
||||||
}
|
}
|
||||||
|
@ -3666,6 +3667,8 @@ encode %{
|
||||||
%}
|
%}
|
||||||
|
|
||||||
// Compound version of call dynamic
|
// Compound version of call dynamic
|
||||||
|
// Toc is only passed so that it can be used in ins_encode statement.
|
||||||
|
// In the code we have to use $constanttablebase.
|
||||||
enc_class enc_java_dynamic_call(method meth, iRegLdst toc) %{
|
enc_class enc_java_dynamic_call(method meth, iRegLdst toc) %{
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
||||||
MacroAssembler _masm(&cbuf);
|
MacroAssembler _masm(&cbuf);
|
||||||
|
@ -3673,14 +3676,17 @@ encode %{
|
||||||
|
|
||||||
Register Rtoc = (ra_) ? $constanttablebase : R2_TOC;
|
Register Rtoc = (ra_) ? $constanttablebase : R2_TOC;
|
||||||
#if 0
|
#if 0
|
||||||
|
int vtable_index = this->_vtable_index;
|
||||||
if (_vtable_index < 0) {
|
if (_vtable_index < 0) {
|
||||||
// Must be invalid_vtable_index, not nonvirtual_vtable_index.
|
// Must be invalid_vtable_index, not nonvirtual_vtable_index.
|
||||||
assert(_vtable_index == Method::invalid_vtable_index, "correct sentinel value");
|
assert(_vtable_index == Method::invalid_vtable_index, "correct sentinel value");
|
||||||
Register ic_reg = as_Register(Matcher::inline_cache_reg_encode());
|
Register ic_reg = as_Register(Matcher::inline_cache_reg_encode());
|
||||||
AddressLiteral meta = __ allocate_metadata_address((Metadata *)Universe::non_oop_word());
|
|
||||||
|
|
||||||
|
// Virtual call relocation will point to ic load.
|
||||||
address virtual_call_meta_addr = __ pc();
|
address virtual_call_meta_addr = __ pc();
|
||||||
__ load_const_from_method_toc(ic_reg, meta, Rtoc);
|
// Load a clear inline cache.
|
||||||
|
AddressLiteral empty_ic((address) Universe::non_oop_word());
|
||||||
|
__ load_const_from_method_toc(ic_reg, empty_ic, Rtoc);
|
||||||
// CALL to fixup routine. Fixup routine uses ScopeDesc info
|
// CALL to fixup routine. Fixup routine uses ScopeDesc info
|
||||||
// to determine who we intended to call.
|
// to determine who we intended to call.
|
||||||
__ relocate(virtual_call_Relocation::spec(virtual_call_meta_addr));
|
__ relocate(virtual_call_Relocation::spec(virtual_call_meta_addr));
|
||||||
|
@ -3713,7 +3719,6 @@ encode %{
|
||||||
"Fix constant in ret_addr_offset()");
|
"Fix constant in ret_addr_offset()");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
guarantee(0, "Fix handling of toc edge: messes up derived/base pairs.");
|
|
||||||
Unimplemented(); // ret_addr_offset not yet fixed. Depends on compressed oops (load klass!).
|
Unimplemented(); // ret_addr_offset not yet fixed. Depends on compressed oops (load klass!).
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
@ -5439,7 +5444,7 @@ instruct loadI_ac(iRegIdst dst, memory mem) %{
|
||||||
ins_pipe(pipe_class_memory);
|
ins_pipe(pipe_class_memory);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
// Match loading integer and casting it to unsigned int in
|
// Match loading integer and casting it to unsigned int in
|
||||||
// long register.
|
// long register.
|
||||||
// LoadI + ConvI2L + AndL 0xffffffff.
|
// LoadI + ConvI2L + AndL 0xffffffff.
|
||||||
instruct loadUI2L(iRegLdst dst, memory mem, immL_32bits mask) %{
|
instruct loadUI2L(iRegLdst dst, memory mem, immL_32bits mask) %{
|
||||||
|
@ -6081,7 +6086,7 @@ instruct loadConNKlass_hi(iRegNdst dst, immNKlass src) %{
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
// This needs a match rule so that build_oop_map knows this is
|
// This needs a match rule so that build_oop_map knows this is
|
||||||
// not a narrow oop.
|
// not a narrow oop.
|
||||||
instruct loadConNKlass_lo(iRegNdst dst, immNKlass_NM src1, iRegNsrc src2) %{
|
instruct loadConNKlass_lo(iRegNdst dst, immNKlass_NM src1, iRegNsrc src2) %{
|
||||||
match(Set dst src1);
|
match(Set dst src1);
|
||||||
|
@ -6705,7 +6710,7 @@ instruct cond_set_0_oop(iRegNdst dst, flagsReg crx, iRegPsrc src1) %{
|
||||||
size(4);
|
size(4);
|
||||||
ins_encode %{
|
ins_encode %{
|
||||||
// This is a Power7 instruction for which no machine description exists.
|
// This is a Power7 instruction for which no machine description exists.
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
||||||
__ isel_0($dst$$Register, $crx$$CondRegister, Assembler::equal, $src1$$Register);
|
__ isel_0($dst$$Register, $crx$$CondRegister, Assembler::equal, $src1$$Register);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
|
@ -6850,7 +6855,7 @@ instruct cond_set_0_ptr(iRegPdst dst, flagsReg crx, iRegPsrc src1) %{
|
||||||
size(4);
|
size(4);
|
||||||
ins_encode %{
|
ins_encode %{
|
||||||
// This is a Power7 instruction for which no machine description exists.
|
// This is a Power7 instruction for which no machine description exists.
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
||||||
__ isel_0($dst$$Register, $crx$$CondRegister, Assembler::equal, $src1$$Register);
|
__ isel_0($dst$$Register, $crx$$CondRegister, Assembler::equal, $src1$$Register);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
|
@ -7067,7 +7072,7 @@ instruct decodeNKlass_notNull_addBase_Ex(iRegPdst dst, iRegLsrc base, iRegNsrc s
|
||||||
n1->_bottom_type = _bottom_type;
|
n1->_bottom_type = _bottom_type;
|
||||||
|
|
||||||
decodeNKlass_shiftNode *n2 = new (C) decodeNKlass_shiftNode();
|
decodeNKlass_shiftNode *n2 = new (C) decodeNKlass_shiftNode();
|
||||||
n2->add_req(n_region, n2);
|
n2->add_req(n_region, n1);
|
||||||
n2->_opnds[0] = op_dst;
|
n2->_opnds[0] = op_dst;
|
||||||
n2->_opnds[1] = op_dst;
|
n2->_opnds[1] = op_dst;
|
||||||
n2->_bottom_type = _bottom_type;
|
n2->_bottom_type = _bottom_type;
|
||||||
|
@ -7202,7 +7207,7 @@ instruct membar_volatile() %{
|
||||||
// inline_unsafe_load_store).
|
// inline_unsafe_load_store).
|
||||||
//
|
//
|
||||||
// Add this node again if we found a good solution for inline_unsafe_load_store().
|
// Add this node again if we found a good solution for inline_unsafe_load_store().
|
||||||
// Don't forget to look at the implementation of post_store_load_barrier again,
|
// Don't forget to look at the implementation of post_store_load_barrier again,
|
||||||
// we did other fixes in that method.
|
// we did other fixes in that method.
|
||||||
//instruct unnecessary_membar_volatile() %{
|
//instruct unnecessary_membar_volatile() %{
|
||||||
// match(MemBarVolatile);
|
// match(MemBarVolatile);
|
||||||
|
@ -7240,7 +7245,7 @@ instruct cmovI_reg_isel(cmpOp cmp, flagsReg crx, iRegIdst dst, iRegIsrc src) %{
|
||||||
// exists. Anyways, the scheduler should be off on Power7.
|
// exists. Anyways, the scheduler should be off on Power7.
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
||||||
int cc = $cmp$$cmpcode;
|
int cc = $cmp$$cmpcode;
|
||||||
__ isel($dst$$Register, $crx$$CondRegister,
|
__ isel($dst$$Register, $crx$$CondRegister,
|
||||||
(Assembler::Condition)(cc & 3), /*invert*/((~cc) & 8), $src$$Register);
|
(Assembler::Condition)(cc & 3), /*invert*/((~cc) & 8), $src$$Register);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
|
@ -7286,7 +7291,7 @@ instruct cmovL_reg_isel(cmpOp cmp, flagsReg crx, iRegLdst dst, iRegLsrc src) %{
|
||||||
// exists. Anyways, the scheduler should be off on Power7.
|
// exists. Anyways, the scheduler should be off on Power7.
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
||||||
int cc = $cmp$$cmpcode;
|
int cc = $cmp$$cmpcode;
|
||||||
__ isel($dst$$Register, $crx$$CondRegister,
|
__ isel($dst$$Register, $crx$$CondRegister,
|
||||||
(Assembler::Condition)(cc & 3), /*invert*/((~cc) & 8), $src$$Register);
|
(Assembler::Condition)(cc & 3), /*invert*/((~cc) & 8), $src$$Register);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
|
@ -7332,7 +7337,7 @@ instruct cmovN_reg_isel(cmpOp cmp, flagsReg crx, iRegNdst dst, iRegNsrc src) %{
|
||||||
// exists. Anyways, the scheduler should be off on Power7.
|
// exists. Anyways, the scheduler should be off on Power7.
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
||||||
int cc = $cmp$$cmpcode;
|
int cc = $cmp$$cmpcode;
|
||||||
__ isel($dst$$Register, $crx$$CondRegister,
|
__ isel($dst$$Register, $crx$$CondRegister,
|
||||||
(Assembler::Condition)(cc & 3), /*invert*/((~cc) & 8), $src$$Register);
|
(Assembler::Condition)(cc & 3), /*invert*/((~cc) & 8), $src$$Register);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
|
@ -7379,7 +7384,7 @@ instruct cmovP_reg_isel(cmpOp cmp, flagsReg crx, iRegPdst dst, iRegPsrc src) %{
|
||||||
// exists. Anyways, the scheduler should be off on Power7.
|
// exists. Anyways, the scheduler should be off on Power7.
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
||||||
int cc = $cmp$$cmpcode;
|
int cc = $cmp$$cmpcode;
|
||||||
__ isel($dst$$Register, $crx$$CondRegister,
|
__ isel($dst$$Register, $crx$$CondRegister,
|
||||||
(Assembler::Condition)(cc & 3), /*invert*/((~cc) & 8), $src$$Register);
|
(Assembler::Condition)(cc & 3), /*invert*/((~cc) & 8), $src$$Register);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
|
@ -7525,8 +7530,8 @@ instruct compareAndSwapI_regP_regI_regI(iRegIdst res, iRegPdst mem_ptr, iRegIsrc
|
||||||
ins_encode %{
|
ins_encode %{
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
||||||
// CmpxchgX sets CCR0 to cmpX(src1, src2) and Rres to 'true'/'false'.
|
// CmpxchgX sets CCR0 to cmpX(src1, src2) and Rres to 'true'/'false'.
|
||||||
__ cmpxchgw(CCR0, R0, $src1$$Register, $src2$$Register, $mem_ptr$$Register,
|
__ cmpxchgw(CCR0, R0, $src1$$Register, $src2$$Register, $mem_ptr$$Register,
|
||||||
MacroAssembler::MemBarFenceAfter, MacroAssembler::cmpxchgx_hint_atomic_update(),
|
MacroAssembler::MemBarFenceAfter, MacroAssembler::cmpxchgx_hint_atomic_update(),
|
||||||
$res$$Register, true);
|
$res$$Register, true);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
|
@ -7932,7 +7937,23 @@ instruct subL_reg_imm16(iRegLdst dst, iRegLsrc src1, immL16 src2) %{
|
||||||
|
|
||||||
// Turn the sign-bit of a long into a 64-bit mask, 0x0...0 for
|
// Turn the sign-bit of a long into a 64-bit mask, 0x0...0 for
|
||||||
// positive longs and 0xF...F for negative ones.
|
// positive longs and 0xF...F for negative ones.
|
||||||
instruct signmask64I_regI(iRegIdst dst, iRegIsrc src) %{
|
instruct signmask64I_regL(iRegIdst dst, iRegLsrc src) %{
|
||||||
|
// no match-rule, false predicate
|
||||||
|
effect(DEF dst, USE src);
|
||||||
|
predicate(false);
|
||||||
|
|
||||||
|
format %{ "SRADI $dst, $src, #63" %}
|
||||||
|
size(4);
|
||||||
|
ins_encode %{
|
||||||
|
// TODO: PPC port $archOpcode(ppc64Opcode_sradi);
|
||||||
|
__ sradi($dst$$Register, $src$$Register, 0x3f);
|
||||||
|
%}
|
||||||
|
ins_pipe(pipe_class_default);
|
||||||
|
%}
|
||||||
|
|
||||||
|
// Turn the sign-bit of a long into a 64-bit mask, 0x0...0 for
|
||||||
|
// positive longs and 0xF...F for negative ones.
|
||||||
|
instruct signmask64L_regL(iRegLdst dst, iRegLsrc src) %{
|
||||||
// no match-rule, false predicate
|
// no match-rule, false predicate
|
||||||
effect(DEF dst, USE src);
|
effect(DEF dst, USE src);
|
||||||
predicate(false);
|
predicate(false);
|
||||||
|
@ -8896,7 +8917,7 @@ instruct andI_reg_immIpowerOf2(iRegIdst dst, iRegIsrc src1, immIpowerOf2 src2) %
|
||||||
size(4);
|
size(4);
|
||||||
ins_encode %{
|
ins_encode %{
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_rlwinm);
|
// TODO: PPC port $archOpcode(ppc64Opcode_rlwinm);
|
||||||
__ rlwinm($dst$$Register, $src1$$Register, 0,
|
__ rlwinm($dst$$Register, $src1$$Register, 0,
|
||||||
(31-log2_long((jlong) $src2$$constant)) & 0x1f, (31-log2_long((jlong) $src2$$constant)) & 0x1f);
|
(31-log2_long((jlong) $src2$$constant)) & 0x1f, (31-log2_long((jlong) $src2$$constant)) & 0x1f);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
|
@ -9622,14 +9643,14 @@ instruct cmpLTMask_reg_reg_Ex(iRegIdst dst, iRegIsrc src1, iRegIsrc src2) %{
|
||||||
ins_cost(DEFAULT_COST*4);
|
ins_cost(DEFAULT_COST*4);
|
||||||
|
|
||||||
expand %{
|
expand %{
|
||||||
iRegIdst src1s;
|
iRegLdst src1s;
|
||||||
iRegIdst src2s;
|
iRegLdst src2s;
|
||||||
iRegIdst diff;
|
iRegLdst diff;
|
||||||
sxtI_reg(src1s, src1); // ensure proper sign extention
|
convI2L_reg(src1s, src1); // Ensure proper sign extension.
|
||||||
sxtI_reg(src2s, src2); // ensure proper sign extention
|
convI2L_reg(src2s, src2); // Ensure proper sign extension.
|
||||||
subI_reg_reg(diff, src1s, src2s);
|
subL_reg_reg(diff, src1s, src2s);
|
||||||
// Need to consider >=33 bit result, therefore we need signmaskL.
|
// Need to consider >=33 bit result, therefore we need signmaskL.
|
||||||
signmask64I_regI(dst, diff);
|
signmask64I_regL(dst, diff);
|
||||||
%}
|
%}
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
@ -10866,7 +10887,7 @@ instruct partialSubtypeCheck(iRegPdst result, iRegP_N2P subklass, iRegP_N2P supe
|
||||||
format %{ "PartialSubtypeCheck $result = ($subklass instanceOf $superklass) tmp: $tmp_klass, $tmp_arrayptr" %}
|
format %{ "PartialSubtypeCheck $result = ($subklass instanceOf $superklass) tmp: $tmp_klass, $tmp_arrayptr" %}
|
||||||
ins_encode %{
|
ins_encode %{
|
||||||
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
// TODO: PPC port $archOpcode(ppc64Opcode_compound);
|
||||||
__ check_klass_subtype_slow_path($subklass$$Register, $superklass$$Register, $tmp_arrayptr$$Register,
|
__ check_klass_subtype_slow_path($subklass$$Register, $superklass$$Register, $tmp_arrayptr$$Register,
|
||||||
$tmp_klass$$Register, NULL, $result$$Register);
|
$tmp_klass$$Register, NULL, $result$$Register);
|
||||||
%}
|
%}
|
||||||
ins_pipe(pipe_class_default);
|
ins_pipe(pipe_class_default);
|
||||||
|
@ -11181,18 +11202,18 @@ instruct minI_reg_reg_Ex(iRegIdst dst, iRegIsrc src1, iRegIsrc src2) %{
|
||||||
ins_cost(DEFAULT_COST*6);
|
ins_cost(DEFAULT_COST*6);
|
||||||
|
|
||||||
expand %{
|
expand %{
|
||||||
iRegIdst src1s;
|
iRegLdst src1s;
|
||||||
iRegIdst src2s;
|
iRegLdst src2s;
|
||||||
iRegIdst diff;
|
iRegLdst diff;
|
||||||
iRegIdst sm;
|
iRegLdst sm;
|
||||||
iRegIdst doz; // difference or zero
|
iRegLdst doz; // difference or zero
|
||||||
sxtI_reg(src1s, src1); // Ensure proper sign extention.
|
convI2L_reg(src1s, src1); // Ensure proper sign extension.
|
||||||
sxtI_reg(src2s, src2); // Ensure proper sign extention.
|
convI2L_reg(src2s, src2); // Ensure proper sign extension.
|
||||||
subI_reg_reg(diff, src2s, src1s);
|
subL_reg_reg(diff, src2s, src1s);
|
||||||
// Need to consider >=33 bit result, therefore we need signmaskL.
|
// Need to consider >=33 bit result, therefore we need signmaskL.
|
||||||
signmask64I_regI(sm, diff);
|
signmask64L_regL(sm, diff);
|
||||||
andI_reg_reg(doz, diff, sm); // <=0
|
andL_reg_reg(doz, diff, sm); // <=0
|
||||||
addI_reg_reg(dst, doz, src1s);
|
addI_regL_regL(dst, doz, src1s);
|
||||||
%}
|
%}
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
@ -11201,19 +11222,18 @@ instruct maxI_reg_reg_Ex(iRegIdst dst, iRegIsrc src1, iRegIsrc src2) %{
|
||||||
ins_cost(DEFAULT_COST*6);
|
ins_cost(DEFAULT_COST*6);
|
||||||
|
|
||||||
expand %{
|
expand %{
|
||||||
immI_minus1 m1 %{ -1 %}
|
iRegLdst src1s;
|
||||||
iRegIdst src1s;
|
iRegLdst src2s;
|
||||||
iRegIdst src2s;
|
iRegLdst diff;
|
||||||
iRegIdst diff;
|
iRegLdst sm;
|
||||||
iRegIdst sm;
|
iRegLdst doz; // difference or zero
|
||||||
iRegIdst doz; // difference or zero
|
convI2L_reg(src1s, src1); // Ensure proper sign extension.
|
||||||
sxtI_reg(src1s, src1); // Ensure proper sign extention.
|
convI2L_reg(src2s, src2); // Ensure proper sign extension.
|
||||||
sxtI_reg(src2s, src2); // Ensure proper sign extention.
|
subL_reg_reg(diff, src2s, src1s);
|
||||||
subI_reg_reg(diff, src2s, src1s);
|
|
||||||
// Need to consider >=33 bit result, therefore we need signmaskL.
|
// Need to consider >=33 bit result, therefore we need signmaskL.
|
||||||
signmask64I_regI(sm, diff);
|
signmask64L_regL(sm, diff);
|
||||||
andcI_reg_reg(doz, sm, m1, diff); // >=0
|
andcL_reg_reg(doz, diff, sm); // >=0
|
||||||
addI_reg_reg(dst, doz, src1s);
|
addI_regL_regL(dst, doz, src1s);
|
||||||
%}
|
%}
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
|
|
@ -81,24 +81,18 @@ address TemplateInterpreterGenerator::generate_ArrayIndexOutOfBounds_handler(con
|
||||||
#if 0
|
#if 0
|
||||||
// Call special ClassCastException constructor taking object to cast
|
// Call special ClassCastException constructor taking object to cast
|
||||||
// and target class as arguments.
|
// and target class as arguments.
|
||||||
address TemplateInterpreterGenerator::generate_ClassCastException_verbose_handler(const char* name) {
|
address TemplateInterpreterGenerator::generate_ClassCastException_verbose_handler() {
|
||||||
address entry = __ pc();
|
address entry = __ pc();
|
||||||
|
|
||||||
// Target class oop is in register R6_ARG4 by convention!
|
|
||||||
|
|
||||||
// Expression stack must be empty before entering the VM if an
|
// Expression stack must be empty before entering the VM if an
|
||||||
// exception happened.
|
// exception happened.
|
||||||
__ empty_expression_stack();
|
__ empty_expression_stack();
|
||||||
// Setup parameters.
|
|
||||||
// Thread will be loaded to R3_ARG1.
|
// Thread will be loaded to R3_ARG1.
|
||||||
__ load_const_optimized(R4_ARG2, (address) name);
|
// Target class oop is in register R5_ARG3 by convention!
|
||||||
__ mr(R5_ARG3, R17_tos);
|
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_ClassCastException_verbose, R17_tos, R5_ARG3));
|
||||||
// R6_ARG4 contains specified class.
|
|
||||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_ClassCastException_verbose));
|
|
||||||
#ifdef ASSERT
|
|
||||||
// Above call must not return here since exception pending.
|
// Above call must not return here since exception pending.
|
||||||
__ should_not_reach_here();
|
DEBUG_ONLY(__ should_not_reach_here();)
|
||||||
#endif
|
|
||||||
return entry;
|
return entry;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -1538,14 +1532,32 @@ void TemplateInterpreterGenerator::generate_throw_exception() {
|
||||||
__ stw(R0, in_bytes(JavaThread::popframe_condition_offset()), R16_thread);
|
__ stw(R0, in_bytes(JavaThread::popframe_condition_offset()), R16_thread);
|
||||||
|
|
||||||
// Get out of the current method and re-execute the call that called us.
|
// Get out of the current method and re-execute the call that called us.
|
||||||
__ merge_frames(/*top_frame_sp*/ R21_sender_SP, /*return_pc*/ return_pc, R11_scratch1, R12_scratch2);
|
__ merge_frames(/*top_frame_sp*/ R21_sender_SP, /*return_pc*/ noreg, R11_scratch1, R12_scratch2);
|
||||||
__ restore_interpreter_state(R11_scratch1);
|
__ restore_interpreter_state(R11_scratch1);
|
||||||
__ ld(R12_scratch2, _ijava_state_neg(top_frame_sp), R11_scratch1);
|
__ ld(R12_scratch2, _ijava_state_neg(top_frame_sp), R11_scratch1);
|
||||||
__ resize_frame_absolute(R12_scratch2, R11_scratch1, R0);
|
__ resize_frame_absolute(R12_scratch2, R11_scratch1, R0);
|
||||||
__ mtlr(return_pc);
|
|
||||||
if (ProfileInterpreter) {
|
if (ProfileInterpreter) {
|
||||||
__ set_method_data_pointer_for_bcp();
|
__ set_method_data_pointer_for_bcp();
|
||||||
}
|
}
|
||||||
|
#if INCLUDE_JVMTI
|
||||||
|
Label L_done;
|
||||||
|
|
||||||
|
__ lbz(R11_scratch1, 0, R14_bcp);
|
||||||
|
__ cmpwi(CCR0, R11_scratch1, Bytecodes::_invokestatic);
|
||||||
|
__ bne(CCR0, L_done);
|
||||||
|
|
||||||
|
// The member name argument must be restored if _invokestatic is re-executed after a PopFrame call.
|
||||||
|
// Detect such a case in the InterpreterRuntime function and return the member name argument, or NULL.
|
||||||
|
__ ld(R4_ARG2, 0, R18_locals);
|
||||||
|
__ call_VM(R11_scratch1, CAST_FROM_FN_PTR(address, InterpreterRuntime::member_name_arg_or_null),
|
||||||
|
R4_ARG2, R19_method, R14_bcp);
|
||||||
|
|
||||||
|
__ cmpdi(CCR0, R11_scratch1, 0);
|
||||||
|
__ beq(CCR0, L_done);
|
||||||
|
|
||||||
|
__ std(R11_scratch1, wordSize, R15_esp);
|
||||||
|
__ bind(L_done);
|
||||||
|
#endif // INCLUDE_JVMTI
|
||||||
__ dispatch_next(vtos);
|
__ dispatch_next(vtos);
|
||||||
}
|
}
|
||||||
// end of JVMTI PopFrame support
|
// end of JVMTI PopFrame support
|
||||||
|
|
|
@ -64,7 +64,7 @@ static void do_oop_store(InterpreterMacroAssembler* _masm,
|
||||||
assert_different_registers(Rtmp1, Rtmp2, Rtmp3, Rval, Rbase);
|
assert_different_registers(Rtmp1, Rtmp2, Rtmp3, Rval, Rbase);
|
||||||
|
|
||||||
switch (barrier) {
|
switch (barrier) {
|
||||||
#ifndef SERIALGC
|
#if INCLUDE_ALL_GCS
|
||||||
case BarrierSet::G1SATBCT:
|
case BarrierSet::G1SATBCT:
|
||||||
case BarrierSet::G1SATBCTLogging:
|
case BarrierSet::G1SATBCTLogging:
|
||||||
{
|
{
|
||||||
|
@ -104,7 +104,7 @@ static void do_oop_store(InterpreterMacroAssembler* _masm,
|
||||||
__ bind(Ldone);
|
__ bind(Ldone);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
#endif // SERIALGC
|
#endif // INCLUDE_ALL_GCS
|
||||||
case BarrierSet::CardTableModRef:
|
case BarrierSet::CardTableModRef:
|
||||||
case BarrierSet::CardTableExtension:
|
case BarrierSet::CardTableExtension:
|
||||||
{
|
{
|
||||||
|
@ -259,17 +259,17 @@ void TemplateTable::fconst(int value) {
|
||||||
switch (value) {
|
switch (value) {
|
||||||
default: ShouldNotReachHere();
|
default: ShouldNotReachHere();
|
||||||
case 0: {
|
case 0: {
|
||||||
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0);
|
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0, true);
|
||||||
__ lfs(F15_ftos, simm16_offset, R11_scratch1);
|
__ lfs(F15_ftos, simm16_offset, R11_scratch1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1: {
|
case 1: {
|
||||||
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0);
|
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0, true);
|
||||||
__ lfs(F15_ftos, simm16_offset, R11_scratch1);
|
__ lfs(F15_ftos, simm16_offset, R11_scratch1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 2: {
|
case 2: {
|
||||||
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&two, R0);
|
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&two, R0, true);
|
||||||
__ lfs(F15_ftos, simm16_offset, R11_scratch1);
|
__ lfs(F15_ftos, simm16_offset, R11_scratch1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -282,12 +282,12 @@ void TemplateTable::dconst(int value) {
|
||||||
static double one = 1.0;
|
static double one = 1.0;
|
||||||
switch (value) {
|
switch (value) {
|
||||||
case 0: {
|
case 0: {
|
||||||
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0);
|
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&zero, R0, true);
|
||||||
__ lfd(F15_ftos, simm16_offset, R11_scratch1);
|
__ lfd(F15_ftos, simm16_offset, R11_scratch1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 1: {
|
case 1: {
|
||||||
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0);
|
int simm16_offset = __ load_const_optimized(R11_scratch1, (address*)&one, R0, true);
|
||||||
__ lfd(F15_ftos, simm16_offset, R11_scratch1);
|
__ lfd(F15_ftos, simm16_offset, R11_scratch1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3453,16 +3453,6 @@ void TemplateTable::invokedynamic(int byte_no) {
|
||||||
Rscratch1 = R11_scratch1,
|
Rscratch1 = R11_scratch1,
|
||||||
Rscratch2 = R12_scratch2;
|
Rscratch2 = R12_scratch2;
|
||||||
|
|
||||||
if (!EnableInvokeDynamic) {
|
|
||||||
// We should not encounter this bytecode if !EnableInvokeDynamic.
|
|
||||||
// The verifier will stop it. However, if we get past the verifier,
|
|
||||||
// this will stop the thread in a reasonable way, without crashing the JVM.
|
|
||||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::throw_IncompatibleClassChangeError));
|
|
||||||
// The call_VM checks for exception, so we should never return here.
|
|
||||||
__ should_not_reach_here();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare_invoke(byte_no, Rmethod, Rret_addr, Rscratch1, noreg, Rflags, Rscratch2);
|
prepare_invoke(byte_no, Rmethod, Rret_addr, Rscratch1, noreg, Rflags, Rscratch2);
|
||||||
|
|
||||||
// Profile this call.
|
// Profile this call.
|
||||||
|
@ -3486,12 +3476,6 @@ void TemplateTable::invokehandle(int byte_no) {
|
||||||
Rscratch1 = R11_scratch1,
|
Rscratch1 = R11_scratch1,
|
||||||
Rscratch2 = R12_scratch2;
|
Rscratch2 = R12_scratch2;
|
||||||
|
|
||||||
if (!EnableInvokeDynamic) {
|
|
||||||
// Rewriter does not generate this bytecode.
|
|
||||||
__ should_not_reach_here();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare_invoke(byte_no, Rmethod, Rret_addr, Rscratch1, Rrecv, Rflags, Rscratch2);
|
prepare_invoke(byte_no, Rmethod, Rret_addr, Rscratch1, Rrecv, Rflags, Rscratch2);
|
||||||
__ verify_method_ptr(Rmethod);
|
__ verify_method_ptr(Rmethod);
|
||||||
__ null_check_throw(Rrecv, -1, Rscratch2);
|
__ null_check_throw(Rrecv, -1, Rscratch2);
|
||||||
|
@ -3728,9 +3712,9 @@ void TemplateTable::checkcast() {
|
||||||
transition(atos, atos);
|
transition(atos, atos);
|
||||||
|
|
||||||
Label Ldone, Lis_null, Lquicked, Lresolved;
|
Label Ldone, Lis_null, Lquicked, Lresolved;
|
||||||
Register Roffset = R5_ARG3,
|
Register Roffset = R6_ARG4,
|
||||||
RobjKlass = R4_ARG2,
|
RobjKlass = R4_ARG2,
|
||||||
RspecifiedKlass = R6_ARG4, // Generate_ClassCastException_verbose_handler will expect this register.
|
RspecifiedKlass = R5_ARG3, // Generate_ClassCastException_verbose_handler will read value from this register.
|
||||||
Rcpool = R11_scratch1,
|
Rcpool = R11_scratch1,
|
||||||
Rtags = R12_scratch2;
|
Rtags = R12_scratch2;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. All rights reserved.
|
||||||
* Copyright 2012, 2014 SAP AG. All rights reserved.
|
* Copyright 2012, 2014 SAP AG. 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.
|
||||||
*
|
*
|
||||||
|
@ -149,7 +149,7 @@ void VM_Version::initialize() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void VM_Version::print_features() {
|
void VM_Version::print_features() {
|
||||||
tty->print_cr("Version: %s cache_line_size = %d", cpu_features(), get_cache_line_size());
|
tty->print_cr("Version: %s cache_line_size = %d", cpu_features(), (int) get_cache_line_size());
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef COMPILER2
|
#ifdef COMPILER2
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -123,8 +123,13 @@ class Assembler : public AbstractAssembler {
|
||||||
fpop2_op3 = 0x35,
|
fpop2_op3 = 0x35,
|
||||||
impdep1_op3 = 0x36,
|
impdep1_op3 = 0x36,
|
||||||
aes3_op3 = 0x36,
|
aes3_op3 = 0x36,
|
||||||
|
alignaddr_op3 = 0x36,
|
||||||
|
faligndata_op3 = 0x36,
|
||||||
flog3_op3 = 0x36,
|
flog3_op3 = 0x36,
|
||||||
|
edge_op3 = 0x36,
|
||||||
|
fsrc_op3 = 0x36,
|
||||||
impdep2_op3 = 0x37,
|
impdep2_op3 = 0x37,
|
||||||
|
stpartialf_op3 = 0x37,
|
||||||
jmpl_op3 = 0x38,
|
jmpl_op3 = 0x38,
|
||||||
rett_op3 = 0x39,
|
rett_op3 = 0x39,
|
||||||
trap_op3 = 0x3a,
|
trap_op3 = 0x3a,
|
||||||
|
@ -175,17 +180,23 @@ class Assembler : public AbstractAssembler {
|
||||||
|
|
||||||
enum opfs {
|
enum opfs {
|
||||||
// selected opfs
|
// selected opfs
|
||||||
|
edge8n_opf = 0x01,
|
||||||
|
|
||||||
fmovs_opf = 0x01,
|
fmovs_opf = 0x01,
|
||||||
fmovd_opf = 0x02,
|
fmovd_opf = 0x02,
|
||||||
|
|
||||||
fnegs_opf = 0x05,
|
fnegs_opf = 0x05,
|
||||||
fnegd_opf = 0x06,
|
fnegd_opf = 0x06,
|
||||||
|
|
||||||
|
alignaddr_opf = 0x18,
|
||||||
|
|
||||||
fadds_opf = 0x41,
|
fadds_opf = 0x41,
|
||||||
faddd_opf = 0x42,
|
faddd_opf = 0x42,
|
||||||
fsubs_opf = 0x45,
|
fsubs_opf = 0x45,
|
||||||
fsubd_opf = 0x46,
|
fsubd_opf = 0x46,
|
||||||
|
|
||||||
|
faligndata_opf = 0x48,
|
||||||
|
|
||||||
fmuls_opf = 0x49,
|
fmuls_opf = 0x49,
|
||||||
fmuld_opf = 0x4a,
|
fmuld_opf = 0x4a,
|
||||||
fdivs_opf = 0x4d,
|
fdivs_opf = 0x4d,
|
||||||
|
@ -348,6 +359,8 @@ class Assembler : public AbstractAssembler {
|
||||||
ASI_PRIMARY = 0x80,
|
ASI_PRIMARY = 0x80,
|
||||||
ASI_PRIMARY_NOFAULT = 0x82,
|
ASI_PRIMARY_NOFAULT = 0x82,
|
||||||
ASI_PRIMARY_LITTLE = 0x88,
|
ASI_PRIMARY_LITTLE = 0x88,
|
||||||
|
// 8x8-bit partial store
|
||||||
|
ASI_PST8_PRIMARY = 0xC0,
|
||||||
// Block initializing store
|
// Block initializing store
|
||||||
ASI_ST_BLKINIT_PRIMARY = 0xE2,
|
ASI_ST_BLKINIT_PRIMARY = 0xE2,
|
||||||
// Most-Recently-Used (MRU) BIS variant
|
// Most-Recently-Used (MRU) BIS variant
|
||||||
|
@ -585,6 +598,9 @@ class Assembler : public AbstractAssembler {
|
||||||
// instruction only in VIS1
|
// instruction only in VIS1
|
||||||
static void vis1_only() { assert( VM_Version::has_vis1(), "This instruction only works on SPARC with VIS1"); }
|
static void vis1_only() { assert( VM_Version::has_vis1(), "This instruction only works on SPARC with VIS1"); }
|
||||||
|
|
||||||
|
// instruction only in VIS2
|
||||||
|
static void vis2_only() { assert( VM_Version::has_vis2(), "This instruction only works on SPARC with VIS2"); }
|
||||||
|
|
||||||
// instruction only in VIS3
|
// instruction only in VIS3
|
||||||
static void vis3_only() { assert( VM_Version::has_vis3(), "This instruction only works on SPARC with VIS3"); }
|
static void vis3_only() { assert( VM_Version::has_vis3(), "This instruction only works on SPARC with VIS3"); }
|
||||||
|
|
||||||
|
@ -1164,6 +1180,20 @@ public:
|
||||||
inline void wrfprs( Register d) { v9_only(); emit_int32( op(arith_op) | rs1(d) | op3(wrreg_op3) | u_field(6, 29, 25)); }
|
inline void wrfprs( Register d) { v9_only(); emit_int32( op(arith_op) | rs1(d) | op3(wrreg_op3) | u_field(6, 29, 25)); }
|
||||||
|
|
||||||
|
|
||||||
|
// VIS1 instructions
|
||||||
|
|
||||||
|
void alignaddr( Register s1, Register s2, Register d ) { vis1_only(); emit_int32( op(arith_op) | rd(d) | op3(alignaddr_op3) | rs1(s1) | opf(alignaddr_opf) | rs2(s2)); }
|
||||||
|
|
||||||
|
void faligndata( FloatRegister s1, FloatRegister s2, FloatRegister d ) { vis1_only(); emit_int32( op(arith_op) | fd(d, FloatRegisterImpl::D) | op3(faligndata_op3) | fs1(s1, FloatRegisterImpl::D) | opf(faligndata_opf) | fs2(s2, FloatRegisterImpl::D)); }
|
||||||
|
|
||||||
|
void fsrc2( FloatRegisterImpl::Width w, FloatRegister s2, FloatRegister d ) { vis1_only(); emit_int32( op(arith_op) | fd(d, w) | op3(fsrc_op3) | opf(0x7A - w) | fs2(s2, w)); }
|
||||||
|
|
||||||
|
void stpartialf( Register s1, Register s2, FloatRegister d, int ia = -1 ) { vis1_only(); emit_int32( op(ldst_op) | fd(d, FloatRegisterImpl::D) | op3(stpartialf_op3) | rs1(s1) | imm_asi(ia) | rs2(s2)); }
|
||||||
|
|
||||||
|
// VIS2 instructions
|
||||||
|
|
||||||
|
void edge8n( Register s1, Register s2, Register d ) { vis2_only(); emit_int32( op(arith_op) | rd(d) | op3(edge_op3) | rs1(s1) | opf(edge8n_opf) | rs2(s2)); }
|
||||||
|
|
||||||
// VIS3 instructions
|
// VIS3 instructions
|
||||||
|
|
||||||
void movstosw( FloatRegister s, Register d ) { vis3_only(); emit_int32( op(arith_op) | rd(d) | op3(mftoi_op3) | opf(mstosw_opf) | fs2(s, FloatRegisterImpl::S)); }
|
void movstosw( FloatRegister s, Register d ) { vis3_only(); emit_int32( op(arith_op) | rd(d) | op3(mftoi_op3) | opf(mstosw_opf) | fs2(s, FloatRegisterImpl::S)); }
|
||||||
|
|
|
@ -259,8 +259,8 @@
|
||||||
|
|
||||||
// next two fns read and write Lmonitors value,
|
// next two fns read and write Lmonitors value,
|
||||||
private:
|
private:
|
||||||
BasicObjectLock* interpreter_frame_monitors() const { return *interpreter_frame_monitors_addr(); }
|
BasicObjectLock* interpreter_frame_monitors() const;
|
||||||
void interpreter_frame_set_monitors(BasicObjectLock* monitors) { *interpreter_frame_monitors_addr() = monitors; }
|
void interpreter_frame_set_monitors(BasicObjectLock* monitors);
|
||||||
#else
|
#else
|
||||||
public:
|
public:
|
||||||
inline interpreterState get_interpreterState() const {
|
inline interpreterState get_interpreterState() const {
|
||||||
|
|
|
@ -226,6 +226,13 @@ inline Method** frame::interpreter_frame_method_addr() const {
|
||||||
return (Method**)sp_addr_at( Lmethod->sp_offset_in_saved_window());
|
return (Method**)sp_addr_at( Lmethod->sp_offset_in_saved_window());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline BasicObjectLock* frame::interpreter_frame_monitors() const {
|
||||||
|
return *interpreter_frame_monitors_addr();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void frame::interpreter_frame_set_monitors(BasicObjectLock* monitors) {
|
||||||
|
*interpreter_frame_monitors_addr() = monitors;
|
||||||
|
}
|
||||||
|
|
||||||
// Constant pool cache
|
// Constant pool cache
|
||||||
|
|
||||||
|
|
|
@ -727,7 +727,6 @@ void InterpreterMacroAssembler::get_cache_index_at_bcp(Register temp, Register i
|
||||||
if (index_size == sizeof(u2)) {
|
if (index_size == sizeof(u2)) {
|
||||||
get_2_byte_integer_at_bcp(bcp_offset, temp, index, Unsigned);
|
get_2_byte_integer_at_bcp(bcp_offset, temp, index, Unsigned);
|
||||||
} else if (index_size == sizeof(u4)) {
|
} else if (index_size == sizeof(u4)) {
|
||||||
assert(EnableInvokeDynamic, "giant index used only for JSR 292");
|
|
||||||
get_4_byte_integer_at_bcp(bcp_offset, temp, index);
|
get_4_byte_integer_at_bcp(bcp_offset, temp, index);
|
||||||
assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line");
|
assert(ConstantPool::decode_invokedynamic_index(~123) == 123, "else change next line");
|
||||||
xor3(index, -1, index); // convert to plain index
|
xor3(index, -1, index); // convert to plain index
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -41,7 +41,7 @@ static bool returns_to_call_stub(address return_pc) {
|
||||||
enum /* platform_dependent_constants */ {
|
enum /* platform_dependent_constants */ {
|
||||||
// %%%%%%%% May be able to shrink this a lot
|
// %%%%%%%% May be able to shrink this a lot
|
||||||
code_size1 = 20000, // simply increase if too small (assembler will crash if too small)
|
code_size1 = 20000, // simply increase if too small (assembler will crash if too small)
|
||||||
code_size2 = 20000 // simply increase if too small (assembler will crash if too small)
|
code_size2 = 22000 // simply increase if too small (assembler will crash if too small)
|
||||||
};
|
};
|
||||||
|
|
||||||
class Sparc {
|
class Sparc {
|
||||||
|
|
|
@ -1888,7 +1888,7 @@ void TemplateInterpreterGenerator::generate_throw_exception() {
|
||||||
}
|
}
|
||||||
|
|
||||||
#if INCLUDE_JVMTI
|
#if INCLUDE_JVMTI
|
||||||
if (EnableInvokeDynamic) {
|
{
|
||||||
Label L_done;
|
Label L_done;
|
||||||
|
|
||||||
__ ldub(Address(Lbcp, 0), G1_scratch); // Load current bytecode
|
__ ldub(Address(Lbcp, 0), G1_scratch); // Load current bytecode
|
||||||
|
|
|
@ -3209,12 +3209,6 @@ void TemplateTable::invokehandle(int byte_no) {
|
||||||
transition(vtos, vtos);
|
transition(vtos, vtos);
|
||||||
assert(byte_no == f1_byte, "use this argument");
|
assert(byte_no == f1_byte, "use this argument");
|
||||||
|
|
||||||
if (!EnableInvokeDynamic) {
|
|
||||||
// rewriter does not generate this bytecode
|
|
||||||
__ should_not_reach_here();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Register Rret = Lscratch;
|
const Register Rret = Lscratch;
|
||||||
const Register G4_mtype = G4_scratch;
|
const Register G4_mtype = G4_scratch;
|
||||||
const Register O0_recv = O0;
|
const Register O0_recv = O0;
|
||||||
|
@ -3240,17 +3234,6 @@ void TemplateTable::invokedynamic(int byte_no) {
|
||||||
transition(vtos, vtos);
|
transition(vtos, vtos);
|
||||||
assert(byte_no == f1_byte, "use this argument");
|
assert(byte_no == f1_byte, "use this argument");
|
||||||
|
|
||||||
if (!EnableInvokeDynamic) {
|
|
||||||
// We should not encounter this bytecode if !EnableInvokeDynamic.
|
|
||||||
// The verifier will stop it. However, if we get past the verifier,
|
|
||||||
// this will stop the thread in a reasonable way, without crashing the JVM.
|
|
||||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
|
|
||||||
InterpreterRuntime::throw_IncompatibleClassChangeError));
|
|
||||||
// the call_VM checks for exception, so we should never return here.
|
|
||||||
__ should_not_reach_here();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Register Rret = Lscratch;
|
const Register Rret = Lscratch;
|
||||||
const Register G4_callsite = G4_scratch;
|
const Register G4_callsite = G4_scratch;
|
||||||
const Register Rscratch = G3_scratch;
|
const Register Rscratch = G3_scratch;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -266,9 +266,9 @@ void VM_Version::initialize() {
|
||||||
if (!has_vis1()) // Drop to 0 if no VIS1 support
|
if (!has_vis1()) // Drop to 0 if no VIS1 support
|
||||||
UseVIS = 0;
|
UseVIS = 0;
|
||||||
|
|
||||||
// T2 and above should have support for AES instructions
|
// SPARC T4 and above should have support for AES instructions
|
||||||
if (has_aes()) {
|
if (has_aes()) {
|
||||||
if (UseVIS > 0) { // AES intrinsics use FXOR instruction which is VIS1
|
if (UseVIS > 2) { // AES intrinsics use MOVxTOd/MOVdTOx which are VIS3
|
||||||
if (FLAG_IS_DEFAULT(UseAES)) {
|
if (FLAG_IS_DEFAULT(UseAES)) {
|
||||||
FLAG_SET_DEFAULT(UseAES, true);
|
FLAG_SET_DEFAULT(UseAES, true);
|
||||||
}
|
}
|
||||||
|
@ -282,7 +282,7 @@ void VM_Version::initialize() {
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (UseAES || UseAESIntrinsics) {
|
if (UseAES || UseAESIntrinsics) {
|
||||||
warning("SPARC AES intrinsics require VIS1 instruction support. Intrinsics will be disabled.");
|
warning("SPARC AES intrinsics require VIS3 instruction support. Intrinsics will be disabled.");
|
||||||
if (UseAES) {
|
if (UseAES) {
|
||||||
FLAG_SET_DEFAULT(UseAES, false);
|
FLAG_SET_DEFAULT(UseAES, false);
|
||||||
}
|
}
|
||||||
|
@ -318,22 +318,22 @@ void VM_Version::initialize() {
|
||||||
tty->print("BIS");
|
tty->print("BIS");
|
||||||
}
|
}
|
||||||
if (AllocatePrefetchLines > 1) {
|
if (AllocatePrefetchLines > 1) {
|
||||||
tty->print_cr(" at distance %d, %d lines of %d bytes", AllocatePrefetchDistance, AllocatePrefetchLines, AllocatePrefetchStepSize);
|
tty->print_cr(" at distance %d, %d lines of %d bytes", (int) AllocatePrefetchDistance, (int) AllocatePrefetchLines, (int) AllocatePrefetchStepSize);
|
||||||
} else {
|
} else {
|
||||||
tty->print_cr(" at distance %d, one line of %d bytes", AllocatePrefetchDistance, AllocatePrefetchStepSize);
|
tty->print_cr(" at distance %d, one line of %d bytes", (int) AllocatePrefetchDistance, (int) AllocatePrefetchStepSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (PrefetchCopyIntervalInBytes > 0) {
|
if (PrefetchCopyIntervalInBytes > 0) {
|
||||||
tty->print_cr("PrefetchCopyIntervalInBytes %d", PrefetchCopyIntervalInBytes);
|
tty->print_cr("PrefetchCopyIntervalInBytes %d", (int) PrefetchCopyIntervalInBytes);
|
||||||
}
|
}
|
||||||
if (PrefetchScanIntervalInBytes > 0) {
|
if (PrefetchScanIntervalInBytes > 0) {
|
||||||
tty->print_cr("PrefetchScanIntervalInBytes %d", PrefetchScanIntervalInBytes);
|
tty->print_cr("PrefetchScanIntervalInBytes %d", (int) PrefetchScanIntervalInBytes);
|
||||||
}
|
}
|
||||||
if (PrefetchFieldsAhead > 0) {
|
if (PrefetchFieldsAhead > 0) {
|
||||||
tty->print_cr("PrefetchFieldsAhead %d", PrefetchFieldsAhead);
|
tty->print_cr("PrefetchFieldsAhead %d", (int) PrefetchFieldsAhead);
|
||||||
}
|
}
|
||||||
if (ContendedPaddingWidth > 0) {
|
if (ContendedPaddingWidth > 0) {
|
||||||
tty->print_cr("ContendedPaddingWidth %d", ContendedPaddingWidth);
|
tty->print_cr("ContendedPaddingWidth %d", (int) ContendedPaddingWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // PRODUCT
|
#endif // PRODUCT
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -522,11 +522,11 @@ address Assembler::locate_operand(address inst, WhichOperand which) {
|
||||||
// these asserts are somewhat nonsensical
|
// these asserts are somewhat nonsensical
|
||||||
#ifndef _LP64
|
#ifndef _LP64
|
||||||
assert(which == imm_operand || which == disp32_operand,
|
assert(which == imm_operand || which == disp32_operand,
|
||||||
err_msg("which %d is_64_bit %d ip " INTPTR_FORMAT, which, is_64bit, ip));
|
err_msg("which %d is_64_bit %d ip " INTPTR_FORMAT, which, is_64bit, p2i(ip)));
|
||||||
#else
|
#else
|
||||||
assert((which == call32_operand || which == imm_operand) && is_64bit ||
|
assert((which == call32_operand || which == imm_operand) && is_64bit ||
|
||||||
which == narrow_oop_operand && !is_64bit,
|
which == narrow_oop_operand && !is_64bit,
|
||||||
err_msg("which %d is_64_bit %d ip " INTPTR_FORMAT, which, is_64bit, ip));
|
err_msg("which %d is_64_bit %d ip " INTPTR_FORMAT, which, is_64bit, p2i(ip)));
|
||||||
#endif // _LP64
|
#endif // _LP64
|
||||||
return ip;
|
return ip;
|
||||||
|
|
||||||
|
@ -1766,7 +1766,7 @@ void Assembler::movdqu(Address dst, XMMRegister src) {
|
||||||
|
|
||||||
// Move Unaligned 256bit Vector
|
// Move Unaligned 256bit Vector
|
||||||
void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) {
|
void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) {
|
||||||
assert(UseAVX, "");
|
assert(UseAVX > 0, "");
|
||||||
bool vector256 = true;
|
bool vector256 = true;
|
||||||
int encode = vex_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_F3, vector256);
|
int encode = vex_prefix_and_encode(dst, xnoreg, src, VEX_SIMD_F3, vector256);
|
||||||
emit_int8(0x6F);
|
emit_int8(0x6F);
|
||||||
|
@ -1774,7 +1774,7 @@ void Assembler::vmovdqu(XMMRegister dst, XMMRegister src) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::vmovdqu(XMMRegister dst, Address src) {
|
void Assembler::vmovdqu(XMMRegister dst, Address src) {
|
||||||
assert(UseAVX, "");
|
assert(UseAVX > 0, "");
|
||||||
InstructionMark im(this);
|
InstructionMark im(this);
|
||||||
bool vector256 = true;
|
bool vector256 = true;
|
||||||
vex_prefix(dst, xnoreg, src, VEX_SIMD_F3, vector256);
|
vex_prefix(dst, xnoreg, src, VEX_SIMD_F3, vector256);
|
||||||
|
@ -1783,7 +1783,7 @@ void Assembler::vmovdqu(XMMRegister dst, Address src) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Assembler::vmovdqu(Address dst, XMMRegister src) {
|
void Assembler::vmovdqu(Address dst, XMMRegister src) {
|
||||||
assert(UseAVX, "");
|
assert(UseAVX > 0, "");
|
||||||
InstructionMark im(this);
|
InstructionMark im(this);
|
||||||
bool vector256 = true;
|
bool vector256 = true;
|
||||||
// swap src<->dst for encoding
|
// swap src<->dst for encoding
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -95,7 +95,7 @@ void LinearScan::allocate_fpu_stack() {
|
||||||
|
|
||||||
#ifndef PRODUCT
|
#ifndef PRODUCT
|
||||||
if (TraceFPURegisterUsage) {
|
if (TraceFPURegisterUsage) {
|
||||||
tty->print("FPU regs for block %d, LIR instr %d): ", b->block_id(), id); regs.print_on(tty); tty->print_cr("");
|
tty->print("FPU regs for block %d, LIR instr %d): ", b->block_id(), id); regs.print_on(tty); tty->cr();
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -122,7 +122,7 @@ void CompiledStaticCall::set_to_interpreted(methodHandle callee, address entry)
|
||||||
if (TraceICs) {
|
if (TraceICs) {
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
tty->print_cr("CompiledStaticCall@" INTPTR_FORMAT ": set_to_interpreted %s",
|
tty->print_cr("CompiledStaticCall@" INTPTR_FORMAT ": set_to_interpreted %s",
|
||||||
instruction_address(),
|
p2i(instruction_address()),
|
||||||
callee->name_and_sig_as_C_string());
|
callee->name_and_sig_as_C_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -48,6 +48,7 @@ void RegisterMap::check_location_valid() {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
// Profiling/safepoint support
|
// Profiling/safepoint support
|
||||||
|
|
||||||
|
|
|
@ -207,7 +207,6 @@ void InterpreterMacroAssembler::get_cache_index_at_bcp(Register reg, int bcp_off
|
||||||
if (index_size == sizeof(u2)) {
|
if (index_size == sizeof(u2)) {
|
||||||
load_unsigned_short(reg, Address(rsi, bcp_offset));
|
load_unsigned_short(reg, Address(rsi, bcp_offset));
|
||||||
} else if (index_size == sizeof(u4)) {
|
} else if (index_size == sizeof(u4)) {
|
||||||
assert(EnableInvokeDynamic, "giant index used only for JSR 292");
|
|
||||||
movl(reg, Address(rsi, bcp_offset));
|
movl(reg, Address(rsi, bcp_offset));
|
||||||
// Check if the secondary index definition is still ~x, otherwise
|
// Check if the secondary index definition is still ~x, otherwise
|
||||||
// we have to change the following assembler code to calculate the
|
// we have to change the following assembler code to calculate the
|
||||||
|
|
|
@ -205,7 +205,6 @@ void InterpreterMacroAssembler::get_cache_index_at_bcp(Register index,
|
||||||
if (index_size == sizeof(u2)) {
|
if (index_size == sizeof(u2)) {
|
||||||
load_unsigned_short(index, Address(r13, bcp_offset));
|
load_unsigned_short(index, Address(r13, bcp_offset));
|
||||||
} else if (index_size == sizeof(u4)) {
|
} else if (index_size == sizeof(u4)) {
|
||||||
assert(EnableInvokeDynamic, "giant index used only for JSR 292");
|
|
||||||
movl(index, Address(r13, bcp_offset));
|
movl(index, Address(r13, bcp_offset));
|
||||||
// Check if the secondary index definition is still ~x, otherwise
|
// Check if the secondary index definition is still ~x, otherwise
|
||||||
// we have to change the following assembler code to calculate the
|
// we have to change the following assembler code to calculate the
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -51,6 +51,7 @@
|
||||||
|
|
||||||
#define __ _masm->
|
#define __ _masm->
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
#ifdef _WIN64
|
#ifdef _WIN64
|
||||||
address AbstractInterpreterGenerator::generate_slow_signature_handler() {
|
address AbstractInterpreterGenerator::generate_slow_signature_handler() {
|
||||||
|
|
|
@ -26,8 +26,14 @@
|
||||||
#ifndef _JAVASOFT_JNI_MD_H_
|
#ifndef _JAVASOFT_JNI_MD_H_
|
||||||
#define _JAVASOFT_JNI_MD_H_
|
#define _JAVASOFT_JNI_MD_H_
|
||||||
|
|
||||||
#if defined(SOLARIS) || defined(LINUX) || defined(_ALLBSD_SOURCE)
|
#if defined(_WIN32)
|
||||||
|
#define JNIEXPORT __declspec(dllexport)
|
||||||
|
#define JNIIMPORT __declspec(dllimport)
|
||||||
|
#define JNICALL __stdcall
|
||||||
|
|
||||||
|
typedef int jint;
|
||||||
|
typedef __int64 jlong;
|
||||||
|
#else
|
||||||
|
|
||||||
// Note: please do not change these without also changing jni_md.h in the JDK
|
// Note: please do not change these without also changing jni_md.h in the JDK
|
||||||
// repository
|
// repository
|
||||||
|
@ -50,13 +56,6 @@
|
||||||
typedef long long jlong;
|
typedef long long jlong;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#else
|
|
||||||
#define JNIEXPORT __declspec(dllexport)
|
|
||||||
#define JNIIMPORT __declspec(dllimport)
|
|
||||||
#define JNICALL __stdcall
|
|
||||||
|
|
||||||
typedef int jint;
|
|
||||||
typedef __int64 jlong;
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef signed char jbyte;
|
typedef signed char jbyte;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -55,6 +55,7 @@
|
||||||
|
|
||||||
#define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
|
#define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
bool AbstractAssembler::pd_check_instruction_mark() { return true; }
|
bool AbstractAssembler::pd_check_instruction_mark() { return true; }
|
||||||
|
@ -3152,10 +3153,12 @@ void MacroAssembler::fast_pow() {
|
||||||
// if fast computation is not possible, result is NaN. Requires
|
// if fast computation is not possible, result is NaN. Requires
|
||||||
// fallback from user of this macro.
|
// fallback from user of this macro.
|
||||||
// increase precision for intermediate steps of the computation
|
// increase precision for intermediate steps of the computation
|
||||||
|
BLOCK_COMMENT("fast_pow {");
|
||||||
increase_precision();
|
increase_precision();
|
||||||
fyl2x(); // Stack: (Y*log2(X)) ...
|
fyl2x(); // Stack: (Y*log2(X)) ...
|
||||||
pow_exp_core_encoding(); // Stack: exp(X) ...
|
pow_exp_core_encoding(); // Stack: exp(X) ...
|
||||||
restore_precision();
|
restore_precision();
|
||||||
|
BLOCK_COMMENT("} fast_pow");
|
||||||
}
|
}
|
||||||
|
|
||||||
void MacroAssembler::fast_exp() {
|
void MacroAssembler::fast_exp() {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -29,6 +29,8 @@
|
||||||
#include "memory/allocation.inline.hpp"
|
#include "memory/allocation.inline.hpp"
|
||||||
#include "prims/methodHandles.hpp"
|
#include "prims/methodHandles.hpp"
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
#define __ _masm->
|
#define __ _masm->
|
||||||
|
|
||||||
#ifdef PRODUCT
|
#ifdef PRODUCT
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -35,6 +35,8 @@
|
||||||
#include "c1/c1_Runtime1.hpp"
|
#include "c1/c1_Runtime1.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
void NativeInstruction::wrote(int offset) {
|
void NativeInstruction::wrote(int offset) {
|
||||||
ICache::invalidate_word(addr_at(offset));
|
ICache::invalidate_word(addr_at(offset));
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,12 +76,7 @@ void AbstractInterpreter::layout_activation(Method* method,
|
||||||
Interpreter::stackElementWords;
|
Interpreter::stackElementWords;
|
||||||
|
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
if (!EnableInvokeDynamic) {
|
assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable");
|
||||||
// @@@ FIXME: Should we correct interpreter_frame_sender_sp in the calling sequences?
|
|
||||||
// Probably, since deoptimization doesn't work yet.
|
|
||||||
assert(caller->unextended_sp() == interpreter_frame->interpreter_frame_sender_sp(), "Frame not properly walkable");
|
|
||||||
}
|
|
||||||
assert(caller->sp() == interpreter_frame->sender_sp(), "Frame not properly walkable(2)");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
interpreter_frame->interpreter_frame_set_method(method);
|
interpreter_frame->interpreter_frame_set_method(method);
|
||||||
|
|
|
@ -1831,7 +1831,7 @@ void TemplateInterpreterGenerator::generate_throw_exception() {
|
||||||
__ movl(Address(thread, JavaThread::popframe_condition_offset()), JavaThread::popframe_inactive);
|
__ movl(Address(thread, JavaThread::popframe_condition_offset()), JavaThread::popframe_inactive);
|
||||||
|
|
||||||
#if INCLUDE_JVMTI
|
#if INCLUDE_JVMTI
|
||||||
if (EnableInvokeDynamic) {
|
{
|
||||||
Label L_done;
|
Label L_done;
|
||||||
const Register local0 = rdi;
|
const Register local0 = rdi;
|
||||||
|
|
||||||
|
|
|
@ -1848,7 +1848,7 @@ void TemplateInterpreterGenerator::generate_throw_exception() {
|
||||||
JavaThread::popframe_inactive);
|
JavaThread::popframe_inactive);
|
||||||
|
|
||||||
#if INCLUDE_JVMTI
|
#if INCLUDE_JVMTI
|
||||||
if (EnableInvokeDynamic) {
|
{
|
||||||
Label L_done;
|
Label L_done;
|
||||||
const Register local0 = r14;
|
const Register local0 = r14;
|
||||||
|
|
||||||
|
|
|
@ -3128,12 +3128,6 @@ void TemplateTable::invokehandle(int byte_no) {
|
||||||
const Register rcx_recv = rcx;
|
const Register rcx_recv = rcx;
|
||||||
const Register rdx_flags = rdx;
|
const Register rdx_flags = rdx;
|
||||||
|
|
||||||
if (!EnableInvokeDynamic) {
|
|
||||||
// rewriter does not generate this bytecode
|
|
||||||
__ should_not_reach_here();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare_invoke(byte_no, rbx_method, rax_mtype, rcx_recv);
|
prepare_invoke(byte_no, rbx_method, rax_mtype, rcx_recv);
|
||||||
__ verify_method_ptr(rbx_method);
|
__ verify_method_ptr(rbx_method);
|
||||||
__ verify_oop(rcx_recv);
|
__ verify_oop(rcx_recv);
|
||||||
|
@ -3156,17 +3150,6 @@ void TemplateTable::invokedynamic(int byte_no) {
|
||||||
transition(vtos, vtos);
|
transition(vtos, vtos);
|
||||||
assert(byte_no == f1_byte, "use this argument");
|
assert(byte_no == f1_byte, "use this argument");
|
||||||
|
|
||||||
if (!EnableInvokeDynamic) {
|
|
||||||
// We should not encounter this bytecode if !EnableInvokeDynamic.
|
|
||||||
// The verifier will stop it. However, if we get past the verifier,
|
|
||||||
// this will stop the thread in a reasonable way, without crashing the JVM.
|
|
||||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
|
|
||||||
InterpreterRuntime::throw_IncompatibleClassChangeError));
|
|
||||||
// the call_VM checks for exception, so we should never return here.
|
|
||||||
__ should_not_reach_here();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Register rbx_method = rbx;
|
const Register rbx_method = rbx;
|
||||||
const Register rax_callsite = rax;
|
const Register rax_callsite = rax;
|
||||||
|
|
||||||
|
|
|
@ -3179,12 +3179,6 @@ void TemplateTable::invokehandle(int byte_no) {
|
||||||
const Register rcx_recv = rcx;
|
const Register rcx_recv = rcx;
|
||||||
const Register rdx_flags = rdx;
|
const Register rdx_flags = rdx;
|
||||||
|
|
||||||
if (!EnableInvokeDynamic) {
|
|
||||||
// rewriter does not generate this bytecode
|
|
||||||
__ should_not_reach_here();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
prepare_invoke(byte_no, rbx_method, rax_mtype, rcx_recv);
|
prepare_invoke(byte_no, rbx_method, rax_mtype, rcx_recv);
|
||||||
__ verify_method_ptr(rbx_method);
|
__ verify_method_ptr(rbx_method);
|
||||||
__ verify_oop(rcx_recv);
|
__ verify_oop(rcx_recv);
|
||||||
|
@ -3207,17 +3201,6 @@ void TemplateTable::invokedynamic(int byte_no) {
|
||||||
transition(vtos, vtos);
|
transition(vtos, vtos);
|
||||||
assert(byte_no == f1_byte, "use this argument");
|
assert(byte_no == f1_byte, "use this argument");
|
||||||
|
|
||||||
if (!EnableInvokeDynamic) {
|
|
||||||
// We should not encounter this bytecode if !EnableInvokeDynamic.
|
|
||||||
// The verifier will stop it. However, if we get past the verifier,
|
|
||||||
// this will stop the thread in a reasonable way, without crashing the JVM.
|
|
||||||
__ call_VM(noreg, CAST_FROM_FN_PTR(address,
|
|
||||||
InterpreterRuntime::throw_IncompatibleClassChangeError));
|
|
||||||
// the call_VM checks for exception, so we should never return here.
|
|
||||||
__ should_not_reach_here();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Register rbx_method = rbx;
|
const Register rbx_method = rbx;
|
||||||
const Register rax_callsite = rax;
|
const Register rax_callsite = rax;
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -263,6 +263,10 @@ class VM_Version_StubGenerator: public StubCodeGenerator {
|
||||||
// and check upper YMM bits after it.
|
// and check upper YMM bits after it.
|
||||||
//
|
//
|
||||||
VM_Version::set_avx_cpuFeatures(); // Enable temporary to pass asserts
|
VM_Version::set_avx_cpuFeatures(); // Enable temporary to pass asserts
|
||||||
|
intx saved_useavx = UseAVX;
|
||||||
|
intx saved_usesse = UseSSE;
|
||||||
|
UseAVX = 1;
|
||||||
|
UseSSE = 2;
|
||||||
|
|
||||||
// load value into all 32 bytes of ymm7 register
|
// load value into all 32 bytes of ymm7 register
|
||||||
__ movl(rcx, VM_Version::ymm_test_value());
|
__ movl(rcx, VM_Version::ymm_test_value());
|
||||||
|
@ -292,6 +296,8 @@ class VM_Version_StubGenerator: public StubCodeGenerator {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
VM_Version::clean_cpuFeatures();
|
VM_Version::clean_cpuFeatures();
|
||||||
|
UseAVX = saved_useavx;
|
||||||
|
UseSSE = saved_usesse;
|
||||||
|
|
||||||
//
|
//
|
||||||
// cpuid(0x7) Structured Extended Features
|
// cpuid(0x7) Structured Extended Features
|
||||||
|
@ -919,16 +925,16 @@ void VM_Version::get_processor_features() {
|
||||||
if (PrintMiscellaneous && Verbose) {
|
if (PrintMiscellaneous && Verbose) {
|
||||||
tty->print_cr("Logical CPUs per core: %u",
|
tty->print_cr("Logical CPUs per core: %u",
|
||||||
logical_processors_per_package());
|
logical_processors_per_package());
|
||||||
tty->print("UseSSE=%d",UseSSE);
|
tty->print("UseSSE=%d", (int) UseSSE);
|
||||||
if (UseAVX > 0) {
|
if (UseAVX > 0) {
|
||||||
tty->print(" UseAVX=%d",UseAVX);
|
tty->print(" UseAVX=%d", (int) UseAVX);
|
||||||
}
|
}
|
||||||
if (UseAES) {
|
if (UseAES) {
|
||||||
tty->print(" UseAES=1");
|
tty->print(" UseAES=1");
|
||||||
}
|
}
|
||||||
#ifdef COMPILER2
|
#ifdef COMPILER2
|
||||||
if (MaxVectorSize > 0) {
|
if (MaxVectorSize > 0) {
|
||||||
tty->print(" MaxVectorSize=%d", MaxVectorSize);
|
tty->print(" MaxVectorSize=%d", (int) MaxVectorSize);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
tty->cr();
|
tty->cr();
|
||||||
|
@ -951,23 +957,23 @@ void VM_Version::get_processor_features() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (AllocatePrefetchLines > 1) {
|
if (AllocatePrefetchLines > 1) {
|
||||||
tty->print_cr(" at distance %d, %d lines of %d bytes", AllocatePrefetchDistance, AllocatePrefetchLines, AllocatePrefetchStepSize);
|
tty->print_cr(" at distance %d, %d lines of %d bytes", (int) AllocatePrefetchDistance, (int) AllocatePrefetchLines, (int) AllocatePrefetchStepSize);
|
||||||
} else {
|
} else {
|
||||||
tty->print_cr(" at distance %d, one line of %d bytes", AllocatePrefetchDistance, AllocatePrefetchStepSize);
|
tty->print_cr(" at distance %d, one line of %d bytes", (int) AllocatePrefetchDistance, (int) AllocatePrefetchStepSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PrefetchCopyIntervalInBytes > 0) {
|
if (PrefetchCopyIntervalInBytes > 0) {
|
||||||
tty->print_cr("PrefetchCopyIntervalInBytes %d", PrefetchCopyIntervalInBytes);
|
tty->print_cr("PrefetchCopyIntervalInBytes %d", (int) PrefetchCopyIntervalInBytes);
|
||||||
}
|
}
|
||||||
if (PrefetchScanIntervalInBytes > 0) {
|
if (PrefetchScanIntervalInBytes > 0) {
|
||||||
tty->print_cr("PrefetchScanIntervalInBytes %d", PrefetchScanIntervalInBytes);
|
tty->print_cr("PrefetchScanIntervalInBytes %d", (int) PrefetchScanIntervalInBytes);
|
||||||
}
|
}
|
||||||
if (PrefetchFieldsAhead > 0) {
|
if (PrefetchFieldsAhead > 0) {
|
||||||
tty->print_cr("PrefetchFieldsAhead %d", PrefetchFieldsAhead);
|
tty->print_cr("PrefetchFieldsAhead %d", (int) PrefetchFieldsAhead);
|
||||||
}
|
}
|
||||||
if (ContendedPaddingWidth > 0) {
|
if (ContendedPaddingWidth > 0) {
|
||||||
tty->print_cr("ContendedPaddingWidth %d", ContendedPaddingWidth);
|
tty->print_cr("ContendedPaddingWidth %d", (int) ContendedPaddingWidth);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // !PRODUCT
|
#endif // !PRODUCT
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -118,7 +118,7 @@ VtableStub* VtableStubs::create_vtable_stub(int vtable_index) {
|
||||||
|
|
||||||
if (PrintMiscellaneous && (WizardMode || Verbose)) {
|
if (PrintMiscellaneous && (WizardMode || Verbose)) {
|
||||||
tty->print_cr("vtable #%d at "PTR_FORMAT"[%d] left over: %d",
|
tty->print_cr("vtable #%d at "PTR_FORMAT"[%d] left over: %d",
|
||||||
vtable_index, s->entry_point(),
|
vtable_index, p2i(s->entry_point()),
|
||||||
(int)(s->code_end() - s->entry_point()),
|
(int)(s->code_end() - s->entry_point()),
|
||||||
(int)(s->code_end() - __ pc()));
|
(int)(s->code_end() - __ pc()));
|
||||||
}
|
}
|
||||||
|
@ -199,7 +199,7 @@ VtableStub* VtableStubs::create_itable_stub(int itable_index) {
|
||||||
|
|
||||||
if (PrintMiscellaneous && (WizardMode || Verbose)) {
|
if (PrintMiscellaneous && (WizardMode || Verbose)) {
|
||||||
tty->print_cr("itable #%d at "PTR_FORMAT"[%d] left over: %d",
|
tty->print_cr("itable #%d at "PTR_FORMAT"[%d] left over: %d",
|
||||||
itable_index, s->entry_point(),
|
itable_index, p2i(s->entry_point()),
|
||||||
(int)(s->code_end() - s->entry_point()),
|
(int)(s->code_end() - s->entry_point()),
|
||||||
(int)(s->code_end() - __ pc()));
|
(int)(s->code_end() - __ pc()));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -35,6 +35,8 @@
|
||||||
#include "opto/runtime.hpp"
|
#include "opto/runtime.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
// machine-dependent part of VtableStubs: create VtableStub of correct size and
|
// machine-dependent part of VtableStubs: create VtableStub of correct size and
|
||||||
// initialize its code
|
// initialize its code
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,7 @@
|
||||||
#include "runtime/deoptimization.hpp"
|
#include "runtime/deoptimization.hpp"
|
||||||
#include "runtime/frame.inline.hpp"
|
#include "runtime/frame.inline.hpp"
|
||||||
#include "runtime/interfaceSupport.hpp"
|
#include "runtime/interfaceSupport.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
#include "runtime/stubRoutines.hpp"
|
#include "runtime/stubRoutines.hpp"
|
||||||
#include "runtime/synchronizer.hpp"
|
#include "runtime/synchronizer.hpp"
|
||||||
|
|
|
@ -55,6 +55,7 @@
|
||||||
#include "runtime/javaCalls.hpp"
|
#include "runtime/javaCalls.hpp"
|
||||||
#include "runtime/mutexLocker.hpp"
|
#include "runtime/mutexLocker.hpp"
|
||||||
#include "runtime/objectMonitor.hpp"
|
#include "runtime/objectMonitor.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/osThread.hpp"
|
#include "runtime/osThread.hpp"
|
||||||
#include "runtime/perfMemory.hpp"
|
#include "runtime/perfMemory.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
|
@ -1870,7 +1871,7 @@ public:
|
||||||
// properties.
|
// properties.
|
||||||
|
|
||||||
// ShmBkBlock: base class for all blocks in the shared memory bookkeeping
|
// ShmBkBlock: base class for all blocks in the shared memory bookkeeping
|
||||||
class ShmBkBlock {
|
class ShmBkBlock : public CHeapObj<mtInternal> {
|
||||||
|
|
||||||
ShmBkBlock* _next;
|
ShmBkBlock* _next;
|
||||||
|
|
||||||
|
|
|
@ -26,12 +26,9 @@
|
||||||
#ifndef OS_AIX_VM_OS_AIX_INLINE_HPP
|
#ifndef OS_AIX_VM_OS_AIX_INLINE_HPP
|
||||||
#define OS_AIX_VM_OS_AIX_INLINE_HPP
|
#define OS_AIX_VM_OS_AIX_INLINE_HPP
|
||||||
|
|
||||||
#include "runtime/atomic.hpp"
|
#include "runtime/atomic.inline.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
#ifdef TARGET_OS_ARCH_aix_ppc
|
|
||||||
# include "atomic_aix_ppc.inline.hpp"
|
|
||||||
# include "orderAccess_aix_ppc.inline.hpp"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// System includes
|
// System includes
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "asm/assembler.hpp"
|
#include "asm/assembler.hpp"
|
||||||
|
#include "memory/allocation.hpp"
|
||||||
#include "loadlib_aix.hpp"
|
#include "loadlib_aix.hpp"
|
||||||
#include "porting_aix.hpp"
|
#include "porting_aix.hpp"
|
||||||
#include "utilities/debug.hpp"
|
#include "utilities/debug.hpp"
|
||||||
|
@ -67,7 +68,7 @@ inline char* align_ptr_up(char* ptr, intptr_t alignment) {
|
||||||
// a primitive string map. Should this turn out to be a performance
|
// a primitive string map. Should this turn out to be a performance
|
||||||
// problem, a better hashmap has to be used.
|
// problem, a better hashmap has to be used.
|
||||||
class fixed_strings {
|
class fixed_strings {
|
||||||
struct node {
|
struct node : public CHeapObj<mtInternal> {
|
||||||
char* v;
|
char* v;
|
||||||
node* next;
|
node* next;
|
||||||
};
|
};
|
||||||
|
|
|
@ -26,13 +26,10 @@
|
||||||
#ifndef OS_AIX_VM_THREAD_AIX_INLINE_HPP
|
#ifndef OS_AIX_VM_THREAD_AIX_INLINE_HPP
|
||||||
#define OS_AIX_VM_THREAD_AIX_INLINE_HPP
|
#define OS_AIX_VM_THREAD_AIX_INLINE_HPP
|
||||||
|
|
||||||
#include "runtime/atomic.hpp"
|
|
||||||
#include "runtime/prefetch.hpp"
|
#include "runtime/prefetch.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/threadLocalStorage.hpp"
|
#include "runtime/threadLocalStorage.hpp"
|
||||||
|
|
||||||
#include "atomic_aix_ppc.inline.hpp"
|
|
||||||
#include "orderAccess_aix_ppc.inline.hpp"
|
|
||||||
#include "prefetch_aix_ppc.inline.hpp"
|
#include "prefetch_aix_ppc.inline.hpp"
|
||||||
|
|
||||||
// Contains inlined functions for class Thread and ThreadLocalStorage
|
// Contains inlined functions for class Thread and ThreadLocalStorage
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -53,7 +53,7 @@ bool MachODecoder::decode(address addr, char *buf,
|
||||||
struct symtab_command * symt = (struct symtab_command *)
|
struct symtab_command * symt = (struct symtab_command *)
|
||||||
mach_find_command((struct mach_header_64 *)mach_base, LC_SYMTAB);
|
mach_find_command((struct mach_header_64 *)mach_base, LC_SYMTAB);
|
||||||
if (symt == NULL) {
|
if (symt == NULL) {
|
||||||
DEBUG_ONLY(tty->print_cr("no symtab in mach file at 0x%lx", mach_base));
|
DEBUG_ONLY(tty->print_cr("no symtab in mach file at 0x%lx", p2i(mach_base)));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
uint32_t off = symt->symoff; /* symbol table offset (within this mach file) */
|
uint32_t off = symt->symoff; /* symbol table offset (within this mach file) */
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
#include "runtime/javaCalls.hpp"
|
#include "runtime/javaCalls.hpp"
|
||||||
#include "runtime/mutexLocker.hpp"
|
#include "runtime/mutexLocker.hpp"
|
||||||
#include "runtime/objectMonitor.hpp"
|
#include "runtime/objectMonitor.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/osThread.hpp"
|
#include "runtime/osThread.hpp"
|
||||||
#include "runtime/perfMemory.hpp"
|
#include "runtime/perfMemory.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
|
@ -123,6 +124,9 @@
|
||||||
#define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF)
|
#define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF)
|
||||||
|
|
||||||
#define LARGEPAGES_BIT (1 << 6)
|
#define LARGEPAGES_BIT (1 << 6)
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// global variables
|
// global variables
|
||||||
julong os::Bsd::_physical_memory = 0;
|
julong os::Bsd::_physical_memory = 0;
|
||||||
|
@ -2393,7 +2397,6 @@ char* os::reserve_memory_special(size_t bytes, size_t alignment, char* req_addr,
|
||||||
(!FLAG_IS_DEFAULT(UseLargePages) ||
|
(!FLAG_IS_DEFAULT(UseLargePages) ||
|
||||||
!FLAG_IS_DEFAULT(LargePageSizeInBytes)
|
!FLAG_IS_DEFAULT(LargePageSizeInBytes)
|
||||||
);
|
);
|
||||||
char msg[128];
|
|
||||||
|
|
||||||
// Create a large shared memory region to attach to based on size.
|
// Create a large shared memory region to attach to based on size.
|
||||||
// Currently, size is the total size of the heap
|
// Currently, size is the total size of the heap
|
||||||
|
@ -2414,8 +2417,7 @@ char* os::reserve_memory_special(size_t bytes, size_t alignment, char* req_addr,
|
||||||
// coalesce into large pages. Try to reserve large pages when
|
// coalesce into large pages. Try to reserve large pages when
|
||||||
// the system is still "fresh".
|
// the system is still "fresh".
|
||||||
if (warn_on_failure) {
|
if (warn_on_failure) {
|
||||||
jio_snprintf(msg, sizeof(msg), "Failed to reserve shared memory (errno = %d).", errno);
|
warning("Failed to reserve shared memory (errno = %d).", errno);
|
||||||
warning(msg);
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -2432,8 +2434,7 @@ char* os::reserve_memory_special(size_t bytes, size_t alignment, char* req_addr,
|
||||||
|
|
||||||
if ((intptr_t)addr == -1) {
|
if ((intptr_t)addr == -1) {
|
||||||
if (warn_on_failure) {
|
if (warn_on_failure) {
|
||||||
jio_snprintf(msg, sizeof(msg), "Failed to attach shared memory (errno = %d).", err);
|
warning("Failed to attach shared memory (errno = %d).", err);
|
||||||
warning(msg);
|
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -3809,6 +3810,7 @@ bool os::check_heap(bool force) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ATTRIBUTE_PRINTF(3, 0)
|
||||||
int local_vsnprintf(char* buf, size_t count, const char* format, va_list args) {
|
int local_vsnprintf(char* buf, size_t count, const char* format, va_list args) {
|
||||||
return ::vsnprintf(buf, count, format, args);
|
return ::vsnprintf(buf, count, format, args);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,15 +26,9 @@
|
||||||
#define OS_BSD_VM_OS_BSD_INLINE_HPP
|
#define OS_BSD_VM_OS_BSD_INLINE_HPP
|
||||||
|
|
||||||
#include "runtime/atomic.inline.hpp"
|
#include "runtime/atomic.inline.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
|
|
||||||
#ifdef TARGET_OS_ARCH_bsd_x86
|
|
||||||
# include "orderAccess_bsd_x86.inline.hpp"
|
|
||||||
#endif
|
|
||||||
#ifdef TARGET_OS_ARCH_bsd_zero
|
|
||||||
# include "orderAccess_bsd_zero.inline.hpp"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// System includes
|
// System includes
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -925,7 +925,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor
|
||||||
|
|
||||||
if (PerfTraceMemOps) {
|
if (PerfTraceMemOps) {
|
||||||
tty->print("mapped " SIZE_FORMAT " bytes for vmid %d at "
|
tty->print("mapped " SIZE_FORMAT " bytes for vmid %d at "
|
||||||
INTPTR_FORMAT "\n", size, vmid, (void*)mapAddress);
|
INTPTR_FORMAT "\n", size, vmid, p2i((void*)mapAddress));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,18 +29,12 @@
|
||||||
#error "This file should only be included from thread.inline.hpp"
|
#error "This file should only be included from thread.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "runtime/atomic.hpp"
|
|
||||||
#include "runtime/prefetch.hpp"
|
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/threadLocalStorage.hpp"
|
#include "runtime/threadLocalStorage.hpp"
|
||||||
#ifdef TARGET_OS_ARCH_bsd_x86
|
#ifdef TARGET_OS_ARCH_bsd_x86
|
||||||
# include "atomic_bsd_x86.inline.hpp"
|
|
||||||
# include "orderAccess_bsd_x86.inline.hpp"
|
|
||||||
# include "prefetch_bsd_x86.inline.hpp"
|
# include "prefetch_bsd_x86.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
#ifdef TARGET_OS_ARCH_bsd_zero
|
#ifdef TARGET_OS_ARCH_bsd_zero
|
||||||
# include "atomic_bsd_zero.inline.hpp"
|
|
||||||
# include "orderAccess_bsd_zero.inline.hpp"
|
|
||||||
# include "prefetch_bsd_zero.inline.hpp"
|
# include "prefetch_bsd_zero.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
#include "runtime/javaCalls.hpp"
|
#include "runtime/javaCalls.hpp"
|
||||||
#include "runtime/mutexLocker.hpp"
|
#include "runtime/mutexLocker.hpp"
|
||||||
#include "runtime/objectMonitor.hpp"
|
#include "runtime/objectMonitor.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/osThread.hpp"
|
#include "runtime/osThread.hpp"
|
||||||
#include "runtime/perfMemory.hpp"
|
#include "runtime/perfMemory.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
|
@ -101,6 +102,8 @@
|
||||||
# include <inttypes.h>
|
# include <inttypes.h>
|
||||||
# include <sys/ioctl.h>
|
# include <sys/ioctl.h>
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
// if RUSAGE_THREAD for getrusage() has not been defined, do it here. The code calling
|
// if RUSAGE_THREAD for getrusage() has not been defined, do it here. The code calling
|
||||||
// getrusage() is prepared to handle the associated failure.
|
// getrusage() is prepared to handle the associated failure.
|
||||||
#ifndef RUSAGE_THREAD
|
#ifndef RUSAGE_THREAD
|
||||||
|
@ -2137,7 +2140,7 @@ void os::print_os_info(outputStream* st) {
|
||||||
// Print warning if unsafe chroot environment detected
|
// Print warning if unsafe chroot environment detected
|
||||||
if (unsafe_chroot_detected) {
|
if (unsafe_chroot_detected) {
|
||||||
st->print("WARNING!! ");
|
st->print("WARNING!! ");
|
||||||
st->print_cr(unstable_chroot_error);
|
st->print_cr("%s", unstable_chroot_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
os::Linux::print_libversion_info(st);
|
os::Linux::print_libversion_info(st);
|
||||||
|
@ -2198,8 +2201,8 @@ void os::Linux::print_distro_info(outputStream* st) {
|
||||||
void os::Linux::print_libversion_info(outputStream* st) {
|
void os::Linux::print_libversion_info(outputStream* st) {
|
||||||
// libc, pthread
|
// libc, pthread
|
||||||
st->print("libc:");
|
st->print("libc:");
|
||||||
st->print(os::Linux::glibc_version()); st->print(" ");
|
st->print("%s ", os::Linux::glibc_version());
|
||||||
st->print(os::Linux::libpthread_version()); st->print(" ");
|
st->print("%s ", os::Linux::libpthread_version());
|
||||||
if (os::Linux::is_LinuxThreads()) {
|
if (os::Linux::is_LinuxThreads()) {
|
||||||
st->print("(%s stack)", os::Linux::is_floating_stack() ? "floating" : "fixed");
|
st->print("(%s stack)", os::Linux::is_floating_stack() ? "floating" : "fixed");
|
||||||
}
|
}
|
||||||
|
@ -3416,7 +3419,7 @@ char* os::Linux::reserve_memory_special_shm(size_t bytes, size_t alignment, char
|
||||||
// the system is still "fresh".
|
// the system is still "fresh".
|
||||||
if (warn_on_failure) {
|
if (warn_on_failure) {
|
||||||
jio_snprintf(msg, sizeof(msg), "Failed to reserve shared memory (errno = %d).", errno);
|
jio_snprintf(msg, sizeof(msg), "Failed to reserve shared memory (errno = %d).", errno);
|
||||||
warning(msg);
|
warning("%s", msg);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -3434,7 +3437,7 @@ char* os::Linux::reserve_memory_special_shm(size_t bytes, size_t alignment, char
|
||||||
if ((intptr_t)addr == -1) {
|
if ((intptr_t)addr == -1) {
|
||||||
if (warn_on_failure) {
|
if (warn_on_failure) {
|
||||||
jio_snprintf(msg, sizeof(msg), "Failed to attach shared memory (errno = %d).", err);
|
jio_snprintf(msg, sizeof(msg), "Failed to attach shared memory (errno = %d).", err);
|
||||||
warning(msg);
|
warning("%s", msg);
|
||||||
}
|
}
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -3454,7 +3457,7 @@ static void warn_on_large_pages_failure(char* req_addr, size_t bytes, int error)
|
||||||
char msg[128];
|
char msg[128];
|
||||||
jio_snprintf(msg, sizeof(msg), "Failed to reserve large pages memory req_addr: "
|
jio_snprintf(msg, sizeof(msg), "Failed to reserve large pages memory req_addr: "
|
||||||
PTR_FORMAT " bytes: " SIZE_FORMAT " (errno = %d).", req_addr, bytes, error);
|
PTR_FORMAT " bytes: " SIZE_FORMAT " (errno = %d).", req_addr, bytes, error);
|
||||||
warning(msg);
|
warning("%s", msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,24 +26,9 @@
|
||||||
#define OS_LINUX_VM_OS_LINUX_INLINE_HPP
|
#define OS_LINUX_VM_OS_LINUX_INLINE_HPP
|
||||||
|
|
||||||
#include "runtime/atomic.inline.hpp"
|
#include "runtime/atomic.inline.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
|
|
||||||
#ifdef TARGET_OS_ARCH_linux_x86
|
|
||||||
# include "orderAccess_linux_x86.inline.hpp"
|
|
||||||
#endif
|
|
||||||
#ifdef TARGET_OS_ARCH_linux_sparc
|
|
||||||
# include "orderAccess_linux_sparc.inline.hpp"
|
|
||||||
#endif
|
|
||||||
#ifdef TARGET_OS_ARCH_linux_zero
|
|
||||||
# include "orderAccess_linux_zero.inline.hpp"
|
|
||||||
#endif
|
|
||||||
#ifdef TARGET_OS_ARCH_linux_arm
|
|
||||||
# include "orderAccess_linux_arm.inline.hpp"
|
|
||||||
#endif
|
|
||||||
#ifdef TARGET_OS_ARCH_linux_ppc
|
|
||||||
# include "orderAccess_linux_ppc.inline.hpp"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// System includes
|
// System includes
|
||||||
|
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
|
@ -931,7 +931,7 @@ static void mmap_attach_shared(const char* user, int vmid, PerfMemory::PerfMemor
|
||||||
|
|
||||||
if (PerfTraceMemOps) {
|
if (PerfTraceMemOps) {
|
||||||
tty->print("mapped " SIZE_FORMAT " bytes for vmid %d at "
|
tty->print("mapped " SIZE_FORMAT " bytes for vmid %d at "
|
||||||
INTPTR_FORMAT "\n", size, vmid, (void*)mapAddress);
|
INTPTR_FORMAT "\n", size, vmid, p2i((void*)mapAddress));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,33 +29,22 @@
|
||||||
#error "This file should only be included from thread.inline.hpp"
|
#error "This file should only be included from thread.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "runtime/atomic.hpp"
|
|
||||||
#include "runtime/prefetch.hpp"
|
#include "runtime/prefetch.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/threadLocalStorage.hpp"
|
#include "runtime/threadLocalStorage.hpp"
|
||||||
#ifdef TARGET_OS_ARCH_linux_x86
|
#ifdef TARGET_OS_ARCH_linux_x86
|
||||||
# include "atomic_linux_x86.inline.hpp"
|
|
||||||
# include "orderAccess_linux_x86.inline.hpp"
|
|
||||||
# include "prefetch_linux_x86.inline.hpp"
|
# include "prefetch_linux_x86.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
#ifdef TARGET_OS_ARCH_linux_sparc
|
#ifdef TARGET_OS_ARCH_linux_sparc
|
||||||
# include "atomic_linux_sparc.inline.hpp"
|
|
||||||
# include "orderAccess_linux_sparc.inline.hpp"
|
|
||||||
# include "prefetch_linux_sparc.inline.hpp"
|
# include "prefetch_linux_sparc.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
#ifdef TARGET_OS_ARCH_linux_zero
|
#ifdef TARGET_OS_ARCH_linux_zero
|
||||||
# include "atomic_linux_zero.inline.hpp"
|
|
||||||
# include "orderAccess_linux_zero.inline.hpp"
|
|
||||||
# include "prefetch_linux_zero.inline.hpp"
|
# include "prefetch_linux_zero.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
#ifdef TARGET_OS_ARCH_linux_arm
|
#ifdef TARGET_OS_ARCH_linux_arm
|
||||||
# include "atomic_linux_arm.inline.hpp"
|
|
||||||
# include "orderAccess_linux_arm.inline.hpp"
|
|
||||||
# include "prefetch_linux_arm.inline.hpp"
|
# include "prefetch_linux_arm.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
#ifdef TARGET_OS_ARCH_linux_ppc
|
#ifdef TARGET_OS_ARCH_linux_ppc
|
||||||
# include "atomic_linux_ppc.inline.hpp"
|
|
||||||
# include "orderAccess_linux_ppc.inline.hpp"
|
|
||||||
# include "prefetch_linux_ppc.inline.hpp"
|
# include "prefetch_linux_ppc.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,8 @@
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
// Todo: provide a os::get_max_process_id() or similar. Number of processes
|
// Todo: provide a os::get_max_process_id() or similar. Number of processes
|
||||||
// may have been configured, can be read more accurately from proc fs etc.
|
// may have been configured, can be read more accurately from proc fs etc.
|
||||||
#ifndef MAX_PID
|
#ifndef MAX_PID
|
||||||
|
@ -192,10 +194,10 @@ void os::Posix::print_uname_info(outputStream* st) {
|
||||||
st->print("uname:");
|
st->print("uname:");
|
||||||
struct utsname name;
|
struct utsname name;
|
||||||
uname(&name);
|
uname(&name);
|
||||||
st->print(name.sysname); st->print(" ");
|
st->print("%s ", name.sysname);
|
||||||
st->print(name.release); st->print(" ");
|
st->print("%s ", name.release);
|
||||||
st->print(name.version); st->print(" ");
|
st->print("%s ", name.version);
|
||||||
st->print(name.machine);
|
st->print("%s", name.machine);
|
||||||
st->cr();
|
st->cr();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -682,7 +684,7 @@ const char* os::Posix::describe_signal_set_short(const sigset_t* set, char* buff
|
||||||
void os::Posix::print_signal_set_short(outputStream* st, const sigset_t* set) {
|
void os::Posix::print_signal_set_short(outputStream* st, const sigset_t* set) {
|
||||||
char buf[NUM_IMPORTANT_SIGS + 1];
|
char buf[NUM_IMPORTANT_SIGS + 1];
|
||||||
os::Posix::describe_signal_set_short(set, buf, sizeof(buf));
|
os::Posix::describe_signal_set_short(set, buf, sizeof(buf));
|
||||||
st->print(buf);
|
st->print("%s", buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Writes one-line description of a combination of sigaction.sa_flags into a user
|
// Writes one-line description of a combination of sigaction.sa_flags into a user
|
||||||
|
@ -742,7 +744,7 @@ const char* os::Posix::describe_sa_flags(int flags, char* buffer, size_t size) {
|
||||||
void os::Posix::print_sa_flags(outputStream* st, int flags) {
|
void os::Posix::print_sa_flags(outputStream* st, int flags) {
|
||||||
char buffer[0x100];
|
char buffer[0x100];
|
||||||
os::Posix::describe_sa_flags(flags, buffer, sizeof(buffer));
|
os::Posix::describe_sa_flags(flags, buffer, sizeof(buffer));
|
||||||
st->print(buffer);
|
st->print("%s", buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Helper function for os::Posix::print_siginfo_...():
|
// Helper function for os::Posix::print_siginfo_...():
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
#include "runtime/javaCalls.hpp"
|
#include "runtime/javaCalls.hpp"
|
||||||
#include "runtime/mutexLocker.hpp"
|
#include "runtime/mutexLocker.hpp"
|
||||||
#include "runtime/objectMonitor.hpp"
|
#include "runtime/objectMonitor.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/osThread.hpp"
|
#include "runtime/osThread.hpp"
|
||||||
#include "runtime/perfMemory.hpp"
|
#include "runtime/perfMemory.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
|
|
|
@ -26,15 +26,9 @@
|
||||||
#define OS_SOLARIS_VM_OS_SOLARIS_INLINE_HPP
|
#define OS_SOLARIS_VM_OS_SOLARIS_INLINE_HPP
|
||||||
|
|
||||||
#include "runtime/atomic.inline.hpp"
|
#include "runtime/atomic.inline.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
|
|
||||||
#ifdef TARGET_OS_ARCH_solaris_x86
|
|
||||||
# include "orderAccess_solaris_x86.inline.hpp"
|
|
||||||
#endif
|
|
||||||
#ifdef TARGET_OS_ARCH_solaris_sparc
|
|
||||||
# include "orderAccess_solaris_sparc.inline.hpp"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// System includes
|
// System includes
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
|
|
@ -29,18 +29,14 @@
|
||||||
#error "This file should only be included from thread.inline.hpp"
|
#error "This file should only be included from thread.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "runtime/atomic.hpp"
|
#include "runtime/atomic.inline.hpp"
|
||||||
#include "runtime/prefetch.hpp"
|
#include "runtime/prefetch.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/threadLocalStorage.hpp"
|
#include "runtime/threadLocalStorage.hpp"
|
||||||
#ifdef TARGET_OS_ARCH_solaris_x86
|
#ifdef TARGET_OS_ARCH_solaris_x86
|
||||||
# include "atomic_solaris_x86.inline.hpp"
|
|
||||||
# include "orderAccess_solaris_x86.inline.hpp"
|
|
||||||
# include "prefetch_solaris_x86.inline.hpp"
|
# include "prefetch_solaris_x86.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
#ifdef TARGET_OS_ARCH_solaris_sparc
|
#ifdef TARGET_OS_ARCH_solaris_sparc
|
||||||
# include "atomic_solaris_sparc.inline.hpp"
|
|
||||||
# include "orderAccess_solaris_sparc.inline.hpp"
|
|
||||||
# include "prefetch_solaris_sparc.inline.hpp"
|
# include "prefetch_solaris_sparc.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -51,6 +51,7 @@
|
||||||
#include "runtime/javaCalls.hpp"
|
#include "runtime/javaCalls.hpp"
|
||||||
#include "runtime/mutexLocker.hpp"
|
#include "runtime/mutexLocker.hpp"
|
||||||
#include "runtime/objectMonitor.hpp"
|
#include "runtime/objectMonitor.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/osThread.hpp"
|
#include "runtime/osThread.hpp"
|
||||||
#include "runtime/perfMemory.hpp"
|
#include "runtime/perfMemory.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
|
|
|
@ -26,12 +26,9 @@
|
||||||
#define OS_WINDOWS_VM_OS_WINDOWS_INLINE_HPP
|
#define OS_WINDOWS_VM_OS_WINDOWS_INLINE_HPP
|
||||||
|
|
||||||
#include "runtime/atomic.inline.hpp"
|
#include "runtime/atomic.inline.hpp"
|
||||||
|
#include "runtime/orderAccess.inline.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
|
|
||||||
#ifdef TARGET_OS_ARCH_windows_x86
|
|
||||||
# include "orderAccess_windows_x86.inline.hpp"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
inline const char* os::file_separator() { return "\\"; }
|
inline const char* os::file_separator() { return "\\"; }
|
||||||
inline const char* os::line_separator() { return "\r\n"; }
|
inline const char* os::line_separator() { return "\r\n"; }
|
||||||
inline const char* os::path_separator() { return ";"; }
|
inline const char* os::path_separator() { return ";"; }
|
||||||
|
|
|
@ -29,13 +29,10 @@
|
||||||
#error "This file should only be included from thread.inline.hpp"
|
#error "This file should only be included from thread.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "runtime/atomic.hpp"
|
|
||||||
#include "runtime/prefetch.hpp"
|
#include "runtime/prefetch.hpp"
|
||||||
#include "runtime/thread.hpp"
|
#include "runtime/thread.hpp"
|
||||||
#include "runtime/threadLocalStorage.hpp"
|
#include "runtime/threadLocalStorage.hpp"
|
||||||
#ifdef TARGET_OS_ARCH_windows_x86
|
#ifdef TARGET_OS_ARCH_windows_x86
|
||||||
# include "atomic_windows_x86.inline.hpp"
|
|
||||||
# include "orderAccess_windows_x86.inline.hpp"
|
|
||||||
# include "prefetch_windows_x86.inline.hpp"
|
# include "prefetch_windows_x86.inline.hpp"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#ifndef OS_CPU_AIX_OJDKPPC_VM_ATOMIC_AIX_PPC_INLINE_HPP
|
#ifndef OS_CPU_AIX_OJDKPPC_VM_ATOMIC_AIX_PPC_INLINE_HPP
|
||||||
#define OS_CPU_AIX_OJDKPPC_VM_ATOMIC_AIX_PPC_INLINE_HPP
|
#define OS_CPU_AIX_OJDKPPC_VM_ATOMIC_AIX_PPC_INLINE_HPP
|
||||||
|
|
||||||
#include "orderAccess_aix_ppc.inline.hpp"
|
|
||||||
#include "runtime/atomic.hpp"
|
#include "runtime/atomic.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
#include "vm_version_ppc.hpp"
|
#include "vm_version_ppc.hpp"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -276,6 +276,8 @@
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
address os::current_stack_pointer() {
|
address os::current_stack_pointer() {
|
||||||
#if defined(__clang__) || defined(__llvm__)
|
#if defined(__clang__) || defined(__llvm__)
|
||||||
register void *esp;
|
register void *esp;
|
||||||
|
|
|
@ -26,7 +26,6 @@
|
||||||
#ifndef OS_CPU_LINUX_PPC_VM_ATOMIC_LINUX_PPC_INLINE_HPP
|
#ifndef OS_CPU_LINUX_PPC_VM_ATOMIC_LINUX_PPC_INLINE_HPP
|
||||||
#define OS_CPU_LINUX_PPC_VM_ATOMIC_LINUX_PPC_INLINE_HPP
|
#define OS_CPU_LINUX_PPC_VM_ATOMIC_LINUX_PPC_INLINE_HPP
|
||||||
|
|
||||||
#include "orderAccess_linux_ppc.inline.hpp"
|
|
||||||
#include "runtime/atomic.hpp"
|
#include "runtime/atomic.hpp"
|
||||||
#include "runtime/os.hpp"
|
#include "runtime/os.hpp"
|
||||||
#include "vm_version_ppc.hpp"
|
#include "vm_version_ppc.hpp"
|
||||||
|
@ -53,41 +52,41 @@ inline void Atomic::store_ptr(void* store_value, volatile void* dest) { *
|
||||||
|
|
||||||
inline jlong Atomic::load(volatile jlong* src) { return *src; }
|
inline jlong Atomic::load(volatile jlong* src) { return *src; }
|
||||||
|
|
||||||
/*
|
//
|
||||||
machine barrier instructions:
|
// machine barrier instructions:
|
||||||
|
//
|
||||||
- sync two-way memory barrier, aka fence
|
// - sync two-way memory barrier, aka fence
|
||||||
- lwsync orders Store|Store,
|
// - lwsync orders Store|Store,
|
||||||
Load|Store,
|
// Load|Store,
|
||||||
Load|Load,
|
// Load|Load,
|
||||||
but not Store|Load
|
// but not Store|Load
|
||||||
- eieio orders memory accesses for device memory (only)
|
// - eieio orders memory accesses for device memory (only)
|
||||||
- isync invalidates speculatively executed instructions
|
// - isync invalidates speculatively executed instructions
|
||||||
From the POWER ISA 2.06 documentation:
|
// From the POWER ISA 2.06 documentation:
|
||||||
"[...] an isync instruction prevents the execution of
|
// "[...] an isync instruction prevents the execution of
|
||||||
instructions following the isync until instructions
|
// instructions following the isync until instructions
|
||||||
preceding the isync have completed, [...]"
|
// preceding the isync have completed, [...]"
|
||||||
From IBM's AIX assembler reference:
|
// From IBM's AIX assembler reference:
|
||||||
"The isync [...] instructions causes the processor to
|
// "The isync [...] instructions causes the processor to
|
||||||
refetch any instructions that might have been fetched
|
// refetch any instructions that might have been fetched
|
||||||
prior to the isync instruction. The instruction isync
|
// prior to the isync instruction. The instruction isync
|
||||||
causes the processor to wait for all previous instructions
|
// causes the processor to wait for all previous instructions
|
||||||
to complete. Then any instructions already fetched are
|
// to complete. Then any instructions already fetched are
|
||||||
discarded and instruction processing continues in the
|
// discarded and instruction processing continues in the
|
||||||
environment established by the previous instructions."
|
// environment established by the previous instructions."
|
||||||
|
//
|
||||||
semantic barrier instructions:
|
// semantic barrier instructions:
|
||||||
(as defined in orderAccess.hpp)
|
// (as defined in orderAccess.hpp)
|
||||||
|
//
|
||||||
- release orders Store|Store, (maps to lwsync)
|
// - release orders Store|Store, (maps to lwsync)
|
||||||
Load|Store
|
// Load|Store
|
||||||
- acquire orders Load|Store, (maps to lwsync)
|
// - acquire orders Load|Store, (maps to lwsync)
|
||||||
Load|Load
|
// Load|Load
|
||||||
- fence orders Store|Store, (maps to sync)
|
// - fence orders Store|Store, (maps to sync)
|
||||||
Load|Store,
|
// Load|Store,
|
||||||
Load|Load,
|
// Load|Load,
|
||||||
Store|Load
|
// Store|Load
|
||||||
*/
|
//
|
||||||
|
|
||||||
#define strasm_sync "\n sync \n"
|
#define strasm_sync "\n sync \n"
|
||||||
#define strasm_lwsync "\n lwsync \n"
|
#define strasm_lwsync "\n lwsync \n"
|
||||||
|
|
|
@ -78,12 +78,12 @@ inline intptr_t Atomic::add_ptr(intptr_t add_value, volatile intptr_t* dest) {
|
||||||
__asm__ volatile(
|
__asm__ volatile(
|
||||||
"1: \n\t"
|
"1: \n\t"
|
||||||
" ldx [%2], %%o2\n\t"
|
" ldx [%2], %%o2\n\t"
|
||||||
" add %0, %%o2, %%o3\n\t"
|
" add %1, %%o2, %%o3\n\t"
|
||||||
" casx [%2], %%o2, %%o3\n\t"
|
" casx [%2], %%o2, %%o3\n\t"
|
||||||
" cmp %%o2, %%o3\n\t"
|
" cmp %%o2, %%o3\n\t"
|
||||||
" bne %%xcc, 1b\n\t"
|
" bne %%xcc, 1b\n\t"
|
||||||
" nop\n\t"
|
" nop\n\t"
|
||||||
" add %0, %%o2, %0\n\t"
|
" add %1, %%o2, %0\n\t"
|
||||||
: "=r" (rv)
|
: "=r" (rv)
|
||||||
: "r" (add_value), "r" (dest)
|
: "r" (add_value), "r" (dest)
|
||||||
: "memory", "o2", "o3");
|
: "memory", "o2", "o3");
|
||||||
|
|
|
@ -302,29 +302,30 @@ void os::print_register_info(outputStream *st, void *context) {
|
||||||
if (context == NULL) return;
|
if (context == NULL) return;
|
||||||
|
|
||||||
ucontext_t *uc = (ucontext_t*)context;
|
ucontext_t *uc = (ucontext_t*)context;
|
||||||
|
sigcontext* sc = (sigcontext*)context;
|
||||||
intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc);
|
intptr_t *sp = (intptr_t *)os::Linux::ucontext_get_sp(uc);
|
||||||
|
|
||||||
st->print_cr("Register to memory mapping:");
|
st->print_cr("Register to memory mapping:");
|
||||||
st->cr();
|
st->cr();
|
||||||
|
|
||||||
// this is only for the "general purpose" registers
|
// this is only for the "general purpose" registers
|
||||||
st->print("G1="); print_location(st, SIG_REGS(sc).u_regs[CON__G1]);
|
st->print("G1="); print_location(st, SIG_REGS(sc).u_regs[CON_G1]);
|
||||||
st->print("G2="); print_location(st, SIG_REGS(sc).u_regs[CON__G2]);
|
st->print("G2="); print_location(st, SIG_REGS(sc).u_regs[CON_G2]);
|
||||||
st->print("G3="); print_location(st, SIG_REGS(sc).u_regs[CON__G3]);
|
st->print("G3="); print_location(st, SIG_REGS(sc).u_regs[CON_G3]);
|
||||||
st->print("G4="); print_location(st, SIG_REGS(sc).u_regs[CON__G4]);
|
st->print("G4="); print_location(st, SIG_REGS(sc).u_regs[CON_G4]);
|
||||||
st->print("G5="); print_location(st, SIG_REGS(sc).u_regs[CON__G5]);
|
st->print("G5="); print_location(st, SIG_REGS(sc).u_regs[CON_G5]);
|
||||||
st->print("G6="); print_location(st, SIG_REGS(sc).u_regs[CON__G6]);
|
st->print("G6="); print_location(st, SIG_REGS(sc).u_regs[CON_G6]);
|
||||||
st->print("G7="); print_location(st, SIG_REGS(sc).u_regs[CON__G7]);
|
st->print("G7="); print_location(st, SIG_REGS(sc).u_regs[CON_G7]);
|
||||||
st->cr();
|
st->cr();
|
||||||
|
|
||||||
st->print("O0="); print_location(st, SIG_REGS(sc).u_regs[CON__O0]);
|
st->print("O0="); print_location(st, SIG_REGS(sc).u_regs[CON_O0]);
|
||||||
st->print("O1="); print_location(st, SIG_REGS(sc).u_regs[CON__O1]);
|
st->print("O1="); print_location(st, SIG_REGS(sc).u_regs[CON_O1]);
|
||||||
st->print("O2="); print_location(st, SIG_REGS(sc).u_regs[CON__O2]);
|
st->print("O2="); print_location(st, SIG_REGS(sc).u_regs[CON_O2]);
|
||||||
st->print("O3="); print_location(st, SIG_REGS(sc).u_regs[CON__O3]);
|
st->print("O3="); print_location(st, SIG_REGS(sc).u_regs[CON_O3]);
|
||||||
st->print("O4="); print_location(st, SIG_REGS(sc).u_regs[CON__O4]);
|
st->print("O4="); print_location(st, SIG_REGS(sc).u_regs[CON_O4]);
|
||||||
st->print("O5="); print_location(st, SIG_REGS(sc).u_regs[CON__O5]);
|
st->print("O5="); print_location(st, SIG_REGS(sc).u_regs[CON_O5]);
|
||||||
st->print("O6="); print_location(st, SIG_REGS(sc).u_regs[CON__O6]);
|
st->print("O6="); print_location(st, SIG_REGS(sc).u_regs[CON_O6]);
|
||||||
st->print("O7="); print_location(st, SIG_REGS(sc).u_regs[CON__O7]);
|
st->print("O7="); print_location(st, SIG_REGS(sc).u_regs[CON_O7]);
|
||||||
st->cr();
|
st->cr();
|
||||||
|
|
||||||
st->print("L0="); print_location(st, sp[L0->sp_offset_in_saved_window()]);
|
st->print("L0="); print_location(st, sp[L0->sp_offset_in_saved_window()]);
|
||||||
|
@ -516,7 +517,7 @@ inline static bool checkICMiss(sigcontext* uc, address* pc, address* stub) {
|
||||||
if (nativeInstruction_at(*pc)->is_ic_miss_trap()) {
|
if (nativeInstruction_at(*pc)->is_ic_miss_trap()) {
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
#ifdef TIERED
|
#ifdef TIERED
|
||||||
CodeBlob* cb = CodeCache::find_blob_unsafe(pc);
|
CodeBlob* cb = CodeCache::find_blob_unsafe(*pc);
|
||||||
assert(cb->is_compiled_by_c2(), "Wrong compiler");
|
assert(cb->is_compiled_by_c2(), "Wrong compiler");
|
||||||
#endif // TIERED
|
#endif // TIERED
|
||||||
#endif // ASSERT
|
#endif // ASSERT
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -89,6 +89,8 @@
|
||||||
#define SPELL_REG_FP "ebp"
|
#define SPELL_REG_FP "ebp"
|
||||||
#endif // AMD64
|
#endif // AMD64
|
||||||
|
|
||||||
|
PRAGMA_FORMAT_MUTE_WARNINGS_FOR_GCC
|
||||||
|
|
||||||
address os::current_stack_pointer() {
|
address os::current_stack_pointer() {
|
||||||
#ifdef SPARC_WORKS
|
#ifdef SPARC_WORKS
|
||||||
register void *esp;
|
register void *esp;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -1322,7 +1322,7 @@ void InstructForm::rep_var_format(FILE *fp, const char *rep_var) {
|
||||||
OperandForm* oper = form->is_operand();
|
OperandForm* oper = form->is_operand();
|
||||||
if (oper != NULL && oper->is_bound_register()) {
|
if (oper != NULL && oper->is_bound_register()) {
|
||||||
const RegDef* first = oper->get_RegClass()->find_first_elem();
|
const RegDef* first = oper->get_RegClass()->find_first_elem();
|
||||||
fprintf(fp, " st->print(\"%s\");\n", first->_regname);
|
fprintf(fp, " st->print_raw(\"%s\");\n", first->_regname);
|
||||||
} else {
|
} else {
|
||||||
globalAD->syntax_err(_linenum, "In %s can't find format for %s %s", _ident, opc->_ident, rep_var);
|
globalAD->syntax_err(_linenum, "In %s can't find format for %s %s", _ident, opc->_ident, rep_var);
|
||||||
}
|
}
|
||||||
|
@ -2530,7 +2530,7 @@ void OperandForm::format_constant(FILE *fp, uint const_index, uint const_type) {
|
||||||
case Form::idealP: fprintf(fp," if (_c%d) _c%d->dump_on(st);\n", const_index, const_index); break;
|
case Form::idealP: fprintf(fp," if (_c%d) _c%d->dump_on(st);\n", const_index, const_index); break;
|
||||||
case Form::idealNKlass:
|
case Form::idealNKlass:
|
||||||
case Form::idealN: fprintf(fp," if (_c%d) _c%d->dump_on(st);\n", const_index, const_index); break;
|
case Form::idealN: fprintf(fp," if (_c%d) _c%d->dump_on(st);\n", const_index, const_index); break;
|
||||||
case Form::idealL: fprintf(fp," st->print(\"#%%lld\", _c%d);\n", const_index); break;
|
case Form::idealL: fprintf(fp," st->print(\"#\" INT64_FORMAT, (int64_t)_c%d);\n", const_index); break;
|
||||||
case Form::idealF: fprintf(fp," st->print(\"#%%f\", _c%d);\n", const_index); break;
|
case Form::idealF: fprintf(fp," st->print(\"#%%f\", _c%d);\n", const_index); break;
|
||||||
case Form::idealD: fprintf(fp," st->print(\"#%%f\", _c%d);\n", const_index); break;
|
case Form::idealD: fprintf(fp," st->print(\"#%%f\", _c%d);\n", const_index); break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1998, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1998, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -386,14 +386,14 @@ static void defineConstructor(FILE *fp, const char *name, uint num_consts,
|
||||||
static void defineCCodeDump(OperandForm* oper, FILE *fp, int i) {
|
static void defineCCodeDump(OperandForm* oper, FILE *fp, int i) {
|
||||||
assert(oper != NULL, "what");
|
assert(oper != NULL, "what");
|
||||||
CondInterface* cond = oper->_interface->is_CondInterface();
|
CondInterface* cond = oper->_interface->is_CondInterface();
|
||||||
fprintf(fp, " if( _c%d == BoolTest::eq ) st->print(\"%s\");\n",i,cond->_equal_format);
|
fprintf(fp, " if( _c%d == BoolTest::eq ) st->print_raw(\"%s\");\n",i,cond->_equal_format);
|
||||||
fprintf(fp, " else if( _c%d == BoolTest::ne ) st->print(\"%s\");\n",i,cond->_not_equal_format);
|
fprintf(fp, " else if( _c%d == BoolTest::ne ) st->print_raw(\"%s\");\n",i,cond->_not_equal_format);
|
||||||
fprintf(fp, " else if( _c%d == BoolTest::le ) st->print(\"%s\");\n",i,cond->_less_equal_format);
|
fprintf(fp, " else if( _c%d == BoolTest::le ) st->print_raw(\"%s\");\n",i,cond->_less_equal_format);
|
||||||
fprintf(fp, " else if( _c%d == BoolTest::ge ) st->print(\"%s\");\n",i,cond->_greater_equal_format);
|
fprintf(fp, " else if( _c%d == BoolTest::ge ) st->print_raw(\"%s\");\n",i,cond->_greater_equal_format);
|
||||||
fprintf(fp, " else if( _c%d == BoolTest::lt ) st->print(\"%s\");\n",i,cond->_less_format);
|
fprintf(fp, " else if( _c%d == BoolTest::lt ) st->print_raw(\"%s\");\n",i,cond->_less_format);
|
||||||
fprintf(fp, " else if( _c%d == BoolTest::gt ) st->print(\"%s\");\n",i,cond->_greater_format);
|
fprintf(fp, " else if( _c%d == BoolTest::gt ) st->print_raw(\"%s\");\n",i,cond->_greater_format);
|
||||||
fprintf(fp, " else if( _c%d == BoolTest::overflow ) st->print(\"%s\");\n",i,cond->_overflow_format);
|
fprintf(fp, " else if( _c%d == BoolTest::overflow ) st->print_raw(\"%s\");\n",i,cond->_overflow_format);
|
||||||
fprintf(fp, " else if( _c%d == BoolTest::no_overflow ) st->print(\"%s\");\n",i,cond->_no_overflow_format);
|
fprintf(fp, " else if( _c%d == BoolTest::no_overflow ) st->print_raw(\"%s\");\n",i,cond->_no_overflow_format);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Output code that dumps constant values, increment "i" if type is constant
|
// Output code that dumps constant values, increment "i" if type is constant
|
||||||
|
@ -416,8 +416,8 @@ static uint dump_spec_constant(FILE *fp, const char *ideal_type, uint i, Operand
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ideal_type, "ConL")) {
|
else if (!strcmp(ideal_type, "ConL")) {
|
||||||
fprintf(fp," st->print(\"#\" INT64_FORMAT, _c%d);\n", i);
|
fprintf(fp," st->print(\"#\" INT64_FORMAT, (int64_t)_c%d);\n", i);
|
||||||
fprintf(fp," st->print(\"/\" PTR64_FORMAT, _c%d);\n", i);
|
fprintf(fp," st->print(\"/\" PTR64_FORMAT, (uint64_t)_c%d);\n", i);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ideal_type, "ConF")) {
|
else if (!strcmp(ideal_type, "ConF")) {
|
||||||
|
@ -429,7 +429,7 @@ static uint dump_spec_constant(FILE *fp, const char *ideal_type, uint i, Operand
|
||||||
else if (!strcmp(ideal_type, "ConD")) {
|
else if (!strcmp(ideal_type, "ConD")) {
|
||||||
fprintf(fp," st->print(\"#%%f\", _c%d);\n", i);
|
fprintf(fp," st->print(\"#%%f\", _c%d);\n", i);
|
||||||
fprintf(fp," jlong _c%dl = JavaValue(_c%d).get_jlong();\n", i, i);
|
fprintf(fp," jlong _c%dl = JavaValue(_c%d).get_jlong();\n", i, i);
|
||||||
fprintf(fp," st->print(\"/\" PTR64_FORMAT, _c%dl);\n", i);
|
fprintf(fp," st->print(\"/\" PTR64_FORMAT, (uint64_t)_c%dl);\n", i);
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
else if (!strcmp(ideal_type, "Bool")) {
|
else if (!strcmp(ideal_type, "Bool")) {
|
||||||
|
@ -471,7 +471,7 @@ void gen_oper_format(FILE *fp, FormDict &globals, OperandForm &oper, bool for_c_
|
||||||
if ( string != NameList::_signal ) {
|
if ( string != NameList::_signal ) {
|
||||||
// Normal string
|
// Normal string
|
||||||
// Pass through to st->print
|
// Pass through to st->print
|
||||||
fprintf(fp," st->print(\"%s\");\n", string);
|
fprintf(fp," st->print_raw(\"%s\");\n", string);
|
||||||
} else {
|
} else {
|
||||||
// Replacement variable
|
// Replacement variable
|
||||||
const char *rep_var = oper._format->_rep_vars.iter();
|
const char *rep_var = oper._format->_rep_vars.iter();
|
||||||
|
@ -542,7 +542,7 @@ void gen_oper_format(FILE *fp, FormDict &globals, OperandForm &oper, bool for_c_
|
||||||
if ( string != NameList::_signal ) {
|
if ( string != NameList::_signal ) {
|
||||||
// Normal string
|
// Normal string
|
||||||
// Pass through to st->print
|
// Pass through to st->print
|
||||||
fprintf(fp," st->print(\"%s\");\n", string);
|
fprintf(fp," st->print_raw(\"%s\");\n", string);
|
||||||
} else {
|
} else {
|
||||||
// Replacement variable
|
// Replacement variable
|
||||||
const char *rep_var = oper._format->_rep_vars.iter();
|
const char *rep_var = oper._format->_rep_vars.iter();
|
||||||
|
@ -669,7 +669,7 @@ void gen_inst_format(FILE *fp, FormDict &globals, InstructForm &inst, bool for_c
|
||||||
} else if( string == NameList::_signal2 ) // Raw program text
|
} else if( string == NameList::_signal2 ) // Raw program text
|
||||||
fputs(inst._format->_strings.iter(), fp);
|
fputs(inst._format->_strings.iter(), fp);
|
||||||
else
|
else
|
||||||
fprintf(fp,"st->print(\"%s\");\n", string);
|
fprintf(fp,"st->print_raw(\"%s\");\n", string);
|
||||||
} // Done with all format strings
|
} // Done with all format strings
|
||||||
} // Done generating the user-defined portion of the format
|
} // Done generating the user-defined portion of the format
|
||||||
|
|
||||||
|
@ -696,13 +696,13 @@ void gen_inst_format(FILE *fp, FormDict &globals, InstructForm &inst, bool for_c
|
||||||
default:
|
default:
|
||||||
assert(0,"ShouldNotReachHere");
|
assert(0,"ShouldNotReachHere");
|
||||||
}
|
}
|
||||||
fprintf(fp, " st->print_cr(\"\");\n" );
|
fprintf(fp, " st->cr();\n" );
|
||||||
fprintf(fp, " if (_jvms) _jvms->format(ra, this, st); else st->print_cr(\" No JVM State Info\");\n" );
|
fprintf(fp, " if (_jvms) _jvms->format(ra, this, st); else st->print_cr(\" No JVM State Info\");\n" );
|
||||||
fprintf(fp, " st->print(\" # \");\n" );
|
fprintf(fp, " st->print(\" # \");\n" );
|
||||||
fprintf(fp, " if( _jvms && _oop_map ) _oop_map->print_on(st);\n");
|
fprintf(fp, " if( _jvms && _oop_map ) _oop_map->print_on(st);\n");
|
||||||
}
|
}
|
||||||
else if(inst.is_ideal_safepoint()) {
|
else if(inst.is_ideal_safepoint()) {
|
||||||
fprintf(fp, " st->print(\"\");\n" );
|
fprintf(fp, " st->print_raw(\"\");\n" );
|
||||||
fprintf(fp, " if (_jvms) _jvms->format(ra, this, st); else st->print_cr(\" No JVM State Info\");\n" );
|
fprintf(fp, " if (_jvms) _jvms->format(ra, this, st); else st->print_cr(\" No JVM State Info\");\n" );
|
||||||
fprintf(fp, " st->print(\" # \");\n" );
|
fprintf(fp, " st->print(\" # \");\n" );
|
||||||
fprintf(fp, " if( _jvms && _oop_map ) _oop_map->print_on(st);\n");
|
fprintf(fp, " if( _jvms && _oop_map ) _oop_map->print_on(st);\n");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -988,7 +988,7 @@ void CodeSection::dump() {
|
||||||
for (csize_t step; ptr < end(); ptr += step) {
|
for (csize_t step; ptr < end(); ptr += step) {
|
||||||
step = end() - ptr;
|
step = end() - ptr;
|
||||||
if (step > jintSize * 4) step = jintSize * 4;
|
if (step > jintSize * 4) step = jintSize * 4;
|
||||||
tty->print(PTR_FORMAT ": ", ptr);
|
tty->print(INTPTR_FORMAT ": ", p2i(ptr));
|
||||||
while (step > 0) {
|
while (step > 0) {
|
||||||
tty->print(" " PTR32_FORMAT, *(jint*)ptr);
|
tty->print(" " PTR32_FORMAT, *(jint*)ptr);
|
||||||
ptr += jintSize;
|
ptr += jintSize;
|
||||||
|
@ -1098,7 +1098,7 @@ void CodeStrings::print_block_comment(outputStream* stream, intptr_t offset) con
|
||||||
while (c && c->offset() == offset) {
|
while (c && c->offset() == offset) {
|
||||||
stream->bol();
|
stream->bol();
|
||||||
stream->print(" ;; ");
|
stream->print(" ;; ");
|
||||||
stream->print_cr(c->string());
|
stream->print_cr("%s", c->string());
|
||||||
c = c->next_comment();
|
c = c->next_comment();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1154,10 +1154,10 @@ void CodeBuffer::decode_all() {
|
||||||
void CodeSection::print(const char* name) {
|
void CodeSection::print(const char* name) {
|
||||||
csize_t locs_size = locs_end() - locs_start();
|
csize_t locs_size = locs_end() - locs_start();
|
||||||
tty->print_cr(" %7s.code = " PTR_FORMAT " : " PTR_FORMAT " : " PTR_FORMAT " (%d of %d)%s",
|
tty->print_cr(" %7s.code = " PTR_FORMAT " : " PTR_FORMAT " : " PTR_FORMAT " (%d of %d)%s",
|
||||||
name, start(), end(), limit(), size(), capacity(),
|
name, p2i(start()), p2i(end()), p2i(limit()), size(), capacity(),
|
||||||
is_frozen()? " [frozen]": "");
|
is_frozen()? " [frozen]": "");
|
||||||
tty->print_cr(" %7s.locs = " PTR_FORMAT " : " PTR_FORMAT " : " PTR_FORMAT " (%d of %d) point=%d",
|
tty->print_cr(" %7s.locs = " PTR_FORMAT " : " PTR_FORMAT " : " PTR_FORMAT " (%d of %d) point=%d",
|
||||||
name, locs_start(), locs_end(), locs_limit(), locs_size, locs_capacity(), locs_point_off());
|
name, p2i(locs_start()), p2i(locs_end()), p2i(locs_limit()), locs_size, locs_capacity(), locs_point_off());
|
||||||
if (PrintRelocations) {
|
if (PrintRelocations) {
|
||||||
RelocIterator iter(this);
|
RelocIterator iter(this);
|
||||||
iter.print();
|
iter.print();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1997, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -173,7 +173,7 @@ class CodeSection VALUE_OBJ_CLASS_SPEC {
|
||||||
bool allocates(address pc) const { return pc >= _start && pc < _limit; }
|
bool allocates(address pc) const { return pc >= _start && pc < _limit; }
|
||||||
bool allocates2(address pc) const { return pc >= _start && pc <= _limit; }
|
bool allocates2(address pc) const { return pc >= _start && pc <= _limit; }
|
||||||
|
|
||||||
void set_end(address pc) { assert(allocates2(pc), err_msg("not in CodeBuffer memory: " PTR_FORMAT " <= " PTR_FORMAT " <= " PTR_FORMAT, _start, pc, _limit)); _end = pc; }
|
void set_end(address pc) { assert(allocates2(pc), err_msg("not in CodeBuffer memory: " INTPTR_FORMAT " <= " INTPTR_FORMAT " <= " INTPTR_FORMAT, p2i(_start), p2i(pc), p2i(_limit))); _end = pc; }
|
||||||
void set_mark(address pc) { assert(contains2(pc), "not in codeBuffer");
|
void set_mark(address pc) { assert(contains2(pc), "not in codeBuffer");
|
||||||
_mark = pc; }
|
_mark = pc; }
|
||||||
void set_mark_off(int offset) { assert(contains2(offset+_start),"not in codeBuffer");
|
void set_mark_off(int offset) { assert(contains2(offset+_start),"not in codeBuffer");
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -118,8 +118,8 @@ inline void assert_different_registers(
|
||||||
) {
|
) {
|
||||||
assert(
|
assert(
|
||||||
a != b,
|
a != b,
|
||||||
err_msg_res("registers must be different: a=%d, b=%d",
|
err_msg_res("registers must be different: a=" INTPTR_FORMAT ", b=" INTPTR_FORMAT "",
|
||||||
a, b)
|
p2i(a), p2i(b))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -132,8 +132,9 @@ inline void assert_different_registers(
|
||||||
assert(
|
assert(
|
||||||
a != b && a != c
|
a != b && a != c
|
||||||
&& b != c,
|
&& b != c,
|
||||||
err_msg_res("registers must be different: a=%d, b=%d, c=%d",
|
err_msg_res("registers must be different: a=" INTPTR_FORMAT ", b=" INTPTR_FORMAT
|
||||||
a, b, c)
|
", c=" INTPTR_FORMAT "",
|
||||||
|
p2i(a), p2i(b), p2i(c))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,8 +149,9 @@ inline void assert_different_registers(
|
||||||
a != b && a != c && a != d
|
a != b && a != c && a != d
|
||||||
&& b != c && b != d
|
&& b != c && b != d
|
||||||
&& c != d,
|
&& c != d,
|
||||||
err_msg_res("registers must be different: a=%d, b=%d, c=%d, d=%d",
|
err_msg_res("registers must be different: a=" INTPTR_FORMAT ", b=" INTPTR_FORMAT
|
||||||
a, b, c, d)
|
", c=" INTPTR_FORMAT ", d=" INTPTR_FORMAT "",
|
||||||
|
p2i(a), p2i(b), p2i(c), p2i(d))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -166,8 +168,9 @@ inline void assert_different_registers(
|
||||||
&& b != c && b != d && b != e
|
&& b != c && b != d && b != e
|
||||||
&& c != d && c != e
|
&& c != d && c != e
|
||||||
&& d != e,
|
&& d != e,
|
||||||
err_msg_res("registers must be different: a=%d, b=%d, c=%d, d=%d, e=%d",
|
err_msg_res("registers must be different: a=" INTPTR_FORMAT ", b=" INTPTR_FORMAT
|
||||||
a, b, c, d, e)
|
", c=" INTPTR_FORMAT ", d=" INTPTR_FORMAT ", e=" INTPTR_FORMAT "",
|
||||||
|
p2i(a), p2i(b), p2i(c), p2i(d), p2i(e))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,8 +189,10 @@ inline void assert_different_registers(
|
||||||
&& c != d && c != e && c != f
|
&& c != d && c != e && c != f
|
||||||
&& d != e && d != f
|
&& d != e && d != f
|
||||||
&& e != f,
|
&& e != f,
|
||||||
err_msg_res("registers must be different: a=%d, b=%d, c=%d, d=%d, e=%d, f=%d",
|
err_msg_res("registers must be different: a=" INTPTR_FORMAT ", b=" INTPTR_FORMAT
|
||||||
a, b, c, d, e, f)
|
", c=" INTPTR_FORMAT ", d=" INTPTR_FORMAT ", e=" INTPTR_FORMAT
|
||||||
|
", f=" INTPTR_FORMAT "",
|
||||||
|
p2i(a), p2i(b), p2i(c), p2i(d), p2i(e), p2i(f))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -208,8 +213,10 @@ inline void assert_different_registers(
|
||||||
&& d != e && d != f && d != g
|
&& d != e && d != f && d != g
|
||||||
&& e != f && e != g
|
&& e != f && e != g
|
||||||
&& f != g,
|
&& f != g,
|
||||||
err_msg_res("registers must be different: a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d",
|
err_msg_res("registers must be different: a=" INTPTR_FORMAT ", b=" INTPTR_FORMAT
|
||||||
a, b, c, d, e, f, g)
|
", c=" INTPTR_FORMAT ", d=" INTPTR_FORMAT ", e=" INTPTR_FORMAT
|
||||||
|
", f=" INTPTR_FORMAT ", g=" INTPTR_FORMAT "",
|
||||||
|
p2i(a), p2i(b), p2i(c), p2i(d), p2i(e), p2i(f), p2i(g))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -232,8 +239,10 @@ inline void assert_different_registers(
|
||||||
&& e != f && e != g && e != h
|
&& e != f && e != g && e != h
|
||||||
&& f != g && f != h
|
&& f != g && f != h
|
||||||
&& g != h,
|
&& g != h,
|
||||||
err_msg_res("registers must be different: a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d",
|
err_msg_res("registers must be different: a=" INTPTR_FORMAT ", b=" INTPTR_FORMAT
|
||||||
a, b, c, d, e, f, g, h)
|
", c=" INTPTR_FORMAT ", d=" INTPTR_FORMAT ", e=" INTPTR_FORMAT
|
||||||
|
", f=" INTPTR_FORMAT ", g=" INTPTR_FORMAT ", h=" INTPTR_FORMAT "",
|
||||||
|
p2i(a), p2i(b), p2i(c), p2i(d), p2i(e), p2i(f), p2i(g), p2i(h))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,8 +267,11 @@ inline void assert_different_registers(
|
||||||
&& f != g && f != h && f != i
|
&& f != g && f != h && f != i
|
||||||
&& g != h && g != i
|
&& g != h && g != i
|
||||||
&& h != i,
|
&& h != i,
|
||||||
err_msg_res("registers must be different: a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d, i=%d",
|
err_msg_res("registers must be different: a=" INTPTR_FORMAT ", b=" INTPTR_FORMAT
|
||||||
a, b, c, d, e, f, g, h, i)
|
", c=" INTPTR_FORMAT ", d=" INTPTR_FORMAT ", e=" INTPTR_FORMAT
|
||||||
|
", f=" INTPTR_FORMAT ", g=" INTPTR_FORMAT ", h=" INTPTR_FORMAT
|
||||||
|
", i=" INTPTR_FORMAT "",
|
||||||
|
p2i(a), p2i(b), p2i(c), p2i(d), p2i(e), p2i(f), p2i(g), p2i(h), p2i(i))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -50,7 +50,7 @@ class CFGPrinterOutput : public CHeapObj<mtCompiler> {
|
||||||
|
|
||||||
void inc_indent();
|
void inc_indent();
|
||||||
void dec_indent();
|
void dec_indent();
|
||||||
void print(const char* format, ...);
|
void print(const char* format, ...) ATTRIBUTE_PRINTF(2, 3);
|
||||||
void print_begin(const char* tag);
|
void print_begin(const char* tag);
|
||||||
void print_end(const char* tag);
|
void print_end(const char* tag);
|
||||||
|
|
||||||
|
@ -161,7 +161,7 @@ void CFGPrinterOutput::print_compilation() {
|
||||||
|
|
||||||
print("name \"%s\"", method_name(_compilation->method(), true));
|
print("name \"%s\"", method_name(_compilation->method(), true));
|
||||||
print("method \"%s\"", method_name(_compilation->method()));
|
print("method \"%s\"", method_name(_compilation->method()));
|
||||||
print("date "INT64_FORMAT, os::javaTimeMillis());
|
print("date "INT64_FORMAT, (int64_t) os::javaTimeMillis());
|
||||||
|
|
||||||
print_end("compilation");
|
print_end("compilation");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1701,6 +1701,15 @@ Values* GraphBuilder::args_list_for_profiling(ciMethod* target, int& start, bool
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GraphBuilder::check_args_for_profiling(Values* obj_args, int expected) {
|
||||||
|
#ifdef ASSERT
|
||||||
|
bool ignored_will_link;
|
||||||
|
ciSignature* declared_signature = NULL;
|
||||||
|
ciMethod* real_target = method()->get_method_at_bci(bci(), ignored_will_link, &declared_signature);
|
||||||
|
assert(expected == obj_args->length() || real_target->is_method_handle_intrinsic(), "missed on arg?");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
// Collect arguments that we want to profile in a list
|
// Collect arguments that we want to profile in a list
|
||||||
Values* GraphBuilder::collect_args_for_profiling(Values* args, ciMethod* target, bool may_have_receiver) {
|
Values* GraphBuilder::collect_args_for_profiling(Values* args, ciMethod* target, bool may_have_receiver) {
|
||||||
int start = 0;
|
int start = 0;
|
||||||
|
@ -1709,13 +1718,14 @@ Values* GraphBuilder::collect_args_for_profiling(Values* args, ciMethod* target,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
int s = obj_args->size();
|
int s = obj_args->size();
|
||||||
for (int i = start, j = 0; j < s; i++) {
|
// if called through method handle invoke, some arguments may have been popped
|
||||||
|
for (int i = start, j = 0; j < s && i < args->length(); i++) {
|
||||||
if (args->at(i)->type()->is_object_kind()) {
|
if (args->at(i)->type()->is_object_kind()) {
|
||||||
obj_args->push(args->at(i));
|
obj_args->push(args->at(i));
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assert(s == obj_args->length(), "missed on arg?");
|
check_args_for_profiling(obj_args, s);
|
||||||
return obj_args;
|
return obj_args;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3847,14 +3857,7 @@ bool GraphBuilder::try_inline_full(ciMethod* callee, bool holder_known, Bytecode
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#ifdef ASSERT
|
check_args_for_profiling(obj_args, s);
|
||||||
{
|
|
||||||
bool ignored_will_link;
|
|
||||||
ciSignature* declared_signature = NULL;
|
|
||||||
ciMethod* real_target = method()->get_method_at_bci(bci(), ignored_will_link, &declared_signature);
|
|
||||||
assert(s == obj_args->length() || real_target->is_method_handle_intrinsic(), "missed on arg?");
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
profile_call(callee, recv, holder_known ? callee->holder() : NULL, obj_args, true);
|
profile_call(callee, recv, holder_known ? callee->holder() : NULL, obj_args, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -392,6 +392,7 @@ class GraphBuilder VALUE_OBJ_CLASS_SPEC {
|
||||||
|
|
||||||
Values* args_list_for_profiling(ciMethod* target, int& start, bool may_have_receiver);
|
Values* args_list_for_profiling(ciMethod* target, int& start, bool may_have_receiver);
|
||||||
Values* collect_args_for_profiling(Values* args, ciMethod* target, bool may_have_receiver);
|
Values* collect_args_for_profiling(Values* args, ciMethod* target, bool may_have_receiver);
|
||||||
|
void check_args_for_profiling(Values* obj_args, int expected);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
NOT_PRODUCT(void print_stats();)
|
NOT_PRODUCT(void print_stats();)
|
||||||
|
|
|
@ -263,8 +263,7 @@ int CodeEmitInfo::interpreter_frame_size() const {
|
||||||
// Implementation of IR
|
// Implementation of IR
|
||||||
|
|
||||||
IR::IR(Compilation* compilation, ciMethod* method, int osr_bci) :
|
IR::IR(Compilation* compilation, ciMethod* method, int osr_bci) :
|
||||||
_locals_size(in_WordSize(-1))
|
_num_loops(0) {
|
||||||
, _num_loops(0) {
|
|
||||||
// setup IR fields
|
// setup IR fields
|
||||||
_compilation = compilation;
|
_compilation = compilation;
|
||||||
_top_scope = new IRScope(compilation, NULL, -1, method, osr_bci, true);
|
_top_scope = new IRScope(compilation, NULL, -1, method, osr_bci, true);
|
||||||
|
|
|
@ -293,7 +293,6 @@ class IR: public CompilationResourceObj {
|
||||||
private:
|
private:
|
||||||
Compilation* _compilation; // the current compilation
|
Compilation* _compilation; // the current compilation
|
||||||
IRScope* _top_scope; // the root of the scope hierarchy
|
IRScope* _top_scope; // the root of the scope hierarchy
|
||||||
WordSize _locals_size; // the space required for all locals
|
|
||||||
int _num_loops; // Total number of loops
|
int _num_loops; // Total number of loops
|
||||||
BlockList* _code; // the blocks in code generation order w/ use counts
|
BlockList* _code; // the blocks in code generation order w/ use counts
|
||||||
|
|
||||||
|
@ -310,8 +309,6 @@ class IR: public CompilationResourceObj {
|
||||||
BlockBegin* start() const { return top_scope()->start(); }
|
BlockBegin* start() const { return top_scope()->start(); }
|
||||||
BlockBegin* std_entry() const { return start()->end()->as_Base()->std_entry(); }
|
BlockBegin* std_entry() const { return start()->end()->as_Base()->std_entry(); }
|
||||||
BlockBegin* osr_entry() const { return start()->end()->as_Base()->osr_entry(); }
|
BlockBegin* osr_entry() const { return start()->end()->as_Base()->osr_entry(); }
|
||||||
WordSize locals_size() const { return _locals_size; }
|
|
||||||
int locals_size_in_words() const { return in_words(_locals_size); }
|
|
||||||
BlockList* code() const { return _code; }
|
BlockList* code() const { return _code; }
|
||||||
int num_loops() const { return _num_loops; }
|
int num_loops() const { return _num_loops; }
|
||||||
int max_stack() const { return top_scope()->max_stack(); } // expensive
|
int max_stack() const { return top_scope()->max_stack(); } // expensive
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -134,23 +134,23 @@ void InstructionPrinter::print_object(Value obj) {
|
||||||
if (value->is_null_object()) {
|
if (value->is_null_object()) {
|
||||||
output()->print("null");
|
output()->print("null");
|
||||||
} else if (!value->is_loaded()) {
|
} else if (!value->is_loaded()) {
|
||||||
output()->print("<unloaded object " PTR_FORMAT ">", value);
|
output()->print("<unloaded object " INTPTR_FORMAT ">", p2i(value));
|
||||||
} else {
|
} else {
|
||||||
output()->print("<object " PTR_FORMAT " klass=", value->constant_encoding());
|
output()->print("<object " INTPTR_FORMAT " klass=", p2i(value->constant_encoding()));
|
||||||
print_klass(value->klass());
|
print_klass(value->klass());
|
||||||
output()->print(">");
|
output()->print(">");
|
||||||
}
|
}
|
||||||
} else if (type->as_InstanceConstant() != NULL) {
|
} else if (type->as_InstanceConstant() != NULL) {
|
||||||
ciInstance* value = type->as_InstanceConstant()->value();
|
ciInstance* value = type->as_InstanceConstant()->value();
|
||||||
if (value->is_loaded()) {
|
if (value->is_loaded()) {
|
||||||
output()->print("<instance " PTR_FORMAT " klass=", value->constant_encoding());
|
output()->print("<instance " INTPTR_FORMAT " klass=", p2i(value->constant_encoding()));
|
||||||
print_klass(value->klass());
|
print_klass(value->klass());
|
||||||
output()->print(">");
|
output()->print(">");
|
||||||
} else {
|
} else {
|
||||||
output()->print("<unloaded instance " PTR_FORMAT ">", value);
|
output()->print("<unloaded instance " INTPTR_FORMAT ">", p2i(value));
|
||||||
}
|
}
|
||||||
} else if (type->as_ArrayConstant() != NULL) {
|
} else if (type->as_ArrayConstant() != NULL) {
|
||||||
output()->print("<array " PTR_FORMAT ">", type->as_ArrayConstant()->value()->constant_encoding());
|
output()->print("<array " INTPTR_FORMAT ">", p2i(type->as_ArrayConstant()->value()->constant_encoding()));
|
||||||
} else if (type->as_ClassConstant() != NULL) {
|
} else if (type->as_ClassConstant() != NULL) {
|
||||||
ciInstanceKlass* klass = type->as_ClassConstant()->value();
|
ciInstanceKlass* klass = type->as_ClassConstant()->value();
|
||||||
if (!klass->is_loaded()) {
|
if (!klass->is_loaded()) {
|
||||||
|
@ -268,7 +268,7 @@ void InstructionPrinter::print_inline_level(BlockBegin* block) {
|
||||||
|
|
||||||
|
|
||||||
void InstructionPrinter::print_unsafe_op(UnsafeOp* op, const char* name) {
|
void InstructionPrinter::print_unsafe_op(UnsafeOp* op, const char* name) {
|
||||||
output()->print(name);
|
output()->print("%s", name);
|
||||||
output()->print(".(");
|
output()->print(".(");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -479,7 +479,7 @@ void InstructionPrinter::do_TypeCast(TypeCast* x) {
|
||||||
if (x->declared_type()->is_klass())
|
if (x->declared_type()->is_klass())
|
||||||
print_klass(x->declared_type()->as_klass());
|
print_klass(x->declared_type()->as_klass());
|
||||||
else
|
else
|
||||||
output()->print(type2name(x->declared_type()->basic_type()));
|
output()->print("%s", type2name(x->declared_type()->basic_type()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -1563,15 +1563,15 @@ void LIR_OprDesc::print(outputStream* out) const {
|
||||||
} else if (is_virtual()) {
|
} else if (is_virtual()) {
|
||||||
out->print("R%d", vreg_number());
|
out->print("R%d", vreg_number());
|
||||||
} else if (is_single_cpu()) {
|
} else if (is_single_cpu()) {
|
||||||
out->print(as_register()->name());
|
out->print("%s", as_register()->name());
|
||||||
} else if (is_double_cpu()) {
|
} else if (is_double_cpu()) {
|
||||||
out->print(as_register_hi()->name());
|
out->print("%s", as_register_hi()->name());
|
||||||
out->print(as_register_lo()->name());
|
out->print("%s", as_register_lo()->name());
|
||||||
#if defined(X86)
|
#if defined(X86)
|
||||||
} else if (is_single_xmm()) {
|
} else if (is_single_xmm()) {
|
||||||
out->print(as_xmm_float_reg()->name());
|
out->print("%s", as_xmm_float_reg()->name());
|
||||||
} else if (is_double_xmm()) {
|
} else if (is_double_xmm()) {
|
||||||
out->print(as_xmm_double_reg()->name());
|
out->print("%s", as_xmm_double_reg()->name());
|
||||||
} else if (is_single_fpu()) {
|
} else if (is_single_fpu()) {
|
||||||
out->print("fpu%d", fpu_regnr());
|
out->print("fpu%d", fpu_regnr());
|
||||||
} else if (is_double_fpu()) {
|
} else if (is_double_fpu()) {
|
||||||
|
@ -1583,9 +1583,9 @@ void LIR_OprDesc::print(outputStream* out) const {
|
||||||
out->print("d%d", fpu_regnrLo() >> 1);
|
out->print("d%d", fpu_regnrLo() >> 1);
|
||||||
#else
|
#else
|
||||||
} else if (is_single_fpu()) {
|
} else if (is_single_fpu()) {
|
||||||
out->print(as_float_reg()->name());
|
out->print("%s", as_float_reg()->name());
|
||||||
} else if (is_double_fpu()) {
|
} else if (is_double_fpu()) {
|
||||||
out->print(as_double_reg()->name());
|
out->print("%s", as_double_reg()->name());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
} else if (is_illegal()) {
|
} else if (is_illegal()) {
|
||||||
|
@ -1611,9 +1611,9 @@ void LIR_Const::print_value_on(outputStream* out) const {
|
||||||
case T_LONG: out->print("lng:" JLONG_FORMAT, as_jlong()); break;
|
case T_LONG: out->print("lng:" JLONG_FORMAT, as_jlong()); break;
|
||||||
case T_FLOAT: out->print("flt:%f", as_jfloat()); break;
|
case T_FLOAT: out->print("flt:%f", as_jfloat()); break;
|
||||||
case T_DOUBLE: out->print("dbl:%f", as_jdouble()); break;
|
case T_DOUBLE: out->print("dbl:%f", as_jdouble()); break;
|
||||||
case T_OBJECT: out->print("obj:0x%x", as_jobject()); break;
|
case T_OBJECT: out->print("obj:" INTPTR_FORMAT, p2i(as_jobject())); break;
|
||||||
case T_METADATA: out->print("metadata:0x%x", as_metadata());break;
|
case T_METADATA: out->print("metadata:" INTPTR_FORMAT, p2i(as_metadata()));break;
|
||||||
default: out->print("%3d:0x%x",type(), as_jdouble()); break;
|
default: out->print("%3d:0x" UINT64_FORMAT_X, type(), (uint64_t)as_jlong()); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1629,7 +1629,7 @@ void LIR_Address::print_value_on(outputStream* out) const {
|
||||||
case times_8: out->print(" * 8"); break;
|
case times_8: out->print(" * 8"); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
out->print(" Disp: %d", _disp);
|
out->print(" Disp: " INTX_FORMAT, _disp);
|
||||||
}
|
}
|
||||||
|
|
||||||
// debug output of block header without InstructionPrinter
|
// debug output of block header without InstructionPrinter
|
||||||
|
@ -1703,7 +1703,7 @@ void LIR_Op::print_on(outputStream* out) const {
|
||||||
} else {
|
} else {
|
||||||
out->print(" ");
|
out->print(" ");
|
||||||
}
|
}
|
||||||
out->print(name()); out->print(" ");
|
out->print("%s ", name());
|
||||||
print_instr(out);
|
print_instr(out);
|
||||||
if (info() != NULL) out->print(" [bci:%d]", info()->stack()->bci());
|
if (info() != NULL) out->print(" [bci:%d]", info()->stack()->bci());
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
|
@ -1833,7 +1833,7 @@ const char * LIR_Op::name() const {
|
||||||
// LIR_OpJavaCall
|
// LIR_OpJavaCall
|
||||||
void LIR_OpJavaCall::print_instr(outputStream* out) const {
|
void LIR_OpJavaCall::print_instr(outputStream* out) const {
|
||||||
out->print("call: ");
|
out->print("call: ");
|
||||||
out->print("[addr: 0x%x]", address());
|
out->print("[addr: " INTPTR_FORMAT "]", p2i(address()));
|
||||||
if (receiver()->is_valid()) {
|
if (receiver()->is_valid()) {
|
||||||
out->print(" [recv: "); receiver()->print(out); out->print("]");
|
out->print(" [recv: "); receiver()->print(out); out->print("]");
|
||||||
}
|
}
|
||||||
|
@ -1844,7 +1844,7 @@ void LIR_OpJavaCall::print_instr(outputStream* out) const {
|
||||||
|
|
||||||
// LIR_OpLabel
|
// LIR_OpLabel
|
||||||
void LIR_OpLabel::print_instr(outputStream* out) const {
|
void LIR_OpLabel::print_instr(outputStream* out) const {
|
||||||
out->print("[label:0x%x]", _label);
|
out->print("[label:" INTPTR_FORMAT "]", p2i(_label));
|
||||||
}
|
}
|
||||||
|
|
||||||
// LIR_OpArrayCopy
|
// LIR_OpArrayCopy
|
||||||
|
@ -1911,7 +1911,7 @@ void LIR_Op1::print_instr(outputStream* out) const {
|
||||||
// LIR_Op1
|
// LIR_Op1
|
||||||
void LIR_OpRTCall::print_instr(outputStream* out) const {
|
void LIR_OpRTCall::print_instr(outputStream* out) const {
|
||||||
intx a = (intx)addr();
|
intx a = (intx)addr();
|
||||||
out->print(Runtime1::name_for_address(addr()));
|
out->print("%s", Runtime1::name_for_address(addr()));
|
||||||
out->print(" ");
|
out->print(" ");
|
||||||
tmp()->print(out);
|
tmp()->print(out);
|
||||||
}
|
}
|
||||||
|
@ -1934,10 +1934,10 @@ void LIR_OpBranch::print_instr(outputStream* out) const {
|
||||||
} else if (stub() != NULL) {
|
} else if (stub() != NULL) {
|
||||||
out->print("[");
|
out->print("[");
|
||||||
stub()->print_name(out);
|
stub()->print_name(out);
|
||||||
out->print(": 0x%x]", stub());
|
out->print(": " INTPTR_FORMAT "]", p2i(stub()));
|
||||||
if (stub()->info() != NULL) out->print(" [bci:%d]", stub()->info()->stack()->bci());
|
if (stub()->info() != NULL) out->print(" [bci:%d]", stub()->info()->stack()->bci());
|
||||||
} else {
|
} else {
|
||||||
out->print("[label:0x%x] ", label());
|
out->print("[label:" INTPTR_FORMAT "] ", p2i(label()));
|
||||||
}
|
}
|
||||||
if (ublock() != NULL) {
|
if (ublock() != NULL) {
|
||||||
out->print("unordered: [B%d] ", ublock()->block_id());
|
out->print("unordered: [B%d] ", ublock()->block_id());
|
||||||
|
@ -2004,7 +2004,7 @@ void LIR_OpAllocObj::print_instr(outputStream* out) const {
|
||||||
tmp4()->print(out); out->print(" ");
|
tmp4()->print(out); out->print(" ");
|
||||||
out->print("[hdr:%d]", header_size()); out->print(" ");
|
out->print("[hdr:%d]", header_size()); out->print(" ");
|
||||||
out->print("[obj:%d]", object_size()); out->print(" ");
|
out->print("[obj:%d]", object_size()); out->print(" ");
|
||||||
out->print("[lbl:0x%x]", stub()->entry());
|
out->print("[lbl:" INTPTR_FORMAT "]", p2i(stub()->entry()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void LIR_OpRoundFP::print_instr(outputStream* out) const {
|
void LIR_OpRoundFP::print_instr(outputStream* out) const {
|
||||||
|
@ -2037,7 +2037,7 @@ void LIR_OpAllocArray::print_instr(outputStream* out) const {
|
||||||
tmp3()->print(out); out->print(" ");
|
tmp3()->print(out); out->print(" ");
|
||||||
tmp4()->print(out); out->print(" ");
|
tmp4()->print(out); out->print(" ");
|
||||||
out->print("[type:0x%x]", type()); out->print(" ");
|
out->print("[type:0x%x]", type()); out->print(" ");
|
||||||
out->print("[label:0x%x]", stub()->entry());
|
out->print("[label:" INTPTR_FORMAT "]", p2i(stub()->entry()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2074,7 +2074,7 @@ void LIR_OpLock::print_instr(outputStream* out) const {
|
||||||
if (_scratch->is_valid()) {
|
if (_scratch->is_valid()) {
|
||||||
_scratch->print(out); out->print(" ");
|
_scratch->print(out); out->print(" ");
|
||||||
}
|
}
|
||||||
out->print("[lbl:0x%x]", stub()->entry());
|
out->print("[lbl:" INTPTR_FORMAT "]", p2i(stub()->entry()));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ASSERT
|
#ifdef ASSERT
|
||||||
|
@ -2082,7 +2082,7 @@ void LIR_OpAssert::print_instr(outputStream* out) const {
|
||||||
print_condition(out, condition()); out->print(" ");
|
print_condition(out, condition()); out->print(" ");
|
||||||
in_opr1()->print(out); out->print(" ");
|
in_opr1()->print(out); out->print(" ");
|
||||||
in_opr2()->print(out); out->print(", \"");
|
in_opr2()->print(out); out->print(", \"");
|
||||||
out->print(msg()); out->print("\"");
|
out->print("%s", msg()); out->print("\"");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -2636,8 +2636,10 @@ ciKlass* LIRGenerator::profile_type(ciMethodData* md, int md_base_offset, int md
|
||||||
// LIR_Assembler::emit_profile_type() from emitting useless code
|
// LIR_Assembler::emit_profile_type() from emitting useless code
|
||||||
profiled_k = ciTypeEntries::with_status(result, profiled_k);
|
profiled_k = ciTypeEntries::with_status(result, profiled_k);
|
||||||
}
|
}
|
||||||
if (exact_signature_k != NULL && exact_klass != exact_signature_k) {
|
// exact_klass and exact_signature_k can be both non NULL but
|
||||||
assert(exact_klass == NULL, "obj and signature disagree?");
|
// different if exact_klass is loaded after the ciObject for
|
||||||
|
// exact_signature_k is created.
|
||||||
|
if (exact_klass == NULL && exact_signature_k != NULL && exact_klass != exact_signature_k) {
|
||||||
// sometimes the type of the signature is better than the best type
|
// sometimes the type of the signature is better than the best type
|
||||||
// the compiler has
|
// the compiler has
|
||||||
exact_klass = exact_signature_k;
|
exact_klass = exact_signature_k;
|
||||||
|
@ -2648,8 +2650,7 @@ ciKlass* LIRGenerator::profile_type(ciMethodData* md, int md_base_offset, int md
|
||||||
if (improved_klass == NULL) {
|
if (improved_klass == NULL) {
|
||||||
improved_klass = comp->cha_exact_type(callee_signature_k);
|
improved_klass = comp->cha_exact_type(callee_signature_k);
|
||||||
}
|
}
|
||||||
if (improved_klass != NULL && exact_klass != improved_klass) {
|
if (exact_klass == NULL && improved_klass != NULL && exact_klass != improved_klass) {
|
||||||
assert(exact_klass == NULL, "obj and signature disagree?");
|
|
||||||
exact_klass = exact_signature_k;
|
exact_klass = exact_signature_k;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -62,10 +62,10 @@ RangeCheckEliminator::RangeCheckEliminator(IR *ir) :
|
||||||
_optimistic = ir->compilation()->is_optimistic();
|
_optimistic = ir->compilation()->is_optimistic();
|
||||||
|
|
||||||
TRACE_RANGE_CHECK_ELIMINATION(
|
TRACE_RANGE_CHECK_ELIMINATION(
|
||||||
tty->print_cr("");
|
tty->cr();
|
||||||
tty->print_cr("Range check elimination");
|
tty->print_cr("Range check elimination");
|
||||||
ir->method()->print_name(tty);
|
ir->method()->print_name(tty);
|
||||||
tty->print_cr("");
|
tty->cr();
|
||||||
);
|
);
|
||||||
|
|
||||||
TRACE_RANGE_CHECK_ELIMINATION(
|
TRACE_RANGE_CHECK_ELIMINATION(
|
||||||
|
@ -1024,7 +1024,7 @@ void RangeCheckEliminator::dump_condition_stack(BlockBegin *block) {
|
||||||
tty->print("i%d", phi->id());
|
tty->print("i%d", phi->id());
|
||||||
tty->print(": ");
|
tty->print(": ");
|
||||||
bound->print();
|
bound->print();
|
||||||
tty->print_cr("");
|
tty->cr();
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -1039,7 +1039,7 @@ void RangeCheckEliminator::dump_condition_stack(BlockBegin *block) {
|
||||||
tty->print("i%d", instr->id());
|
tty->print("i%d", instr->id());
|
||||||
tty->print(": ");
|
tty->print(": ");
|
||||||
bound->print();
|
bound->print();
|
||||||
tty->print_cr("");
|
tty->cr();
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1400,7 +1400,7 @@ Value RangeCheckEliminator::Bound::lower_instr() {
|
||||||
|
|
||||||
// print
|
// print
|
||||||
void RangeCheckEliminator::Bound::print() {
|
void RangeCheckEliminator::Bound::print() {
|
||||||
tty->print("");
|
tty->print("%s", "");
|
||||||
if (this->_lower_instr || this->_lower != min_jint) {
|
if (this->_lower_instr || this->_lower != min_jint) {
|
||||||
if (this->_lower_instr) {
|
if (this->_lower_instr) {
|
||||||
tty->print("i%d", this->_lower_instr->id());
|
tty->print("i%d", this->_lower_instr->id());
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -532,8 +532,8 @@ JRT_ENTRY_NO_ASYNC(static address, exception_handler_for_pc_helper(JavaThread* t
|
||||||
if (TraceExceptions) {
|
if (TraceExceptions) {
|
||||||
ttyLocker ttyl;
|
ttyLocker ttyl;
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
tty->print_cr("Exception <%s> (0x%x) thrown in compiled method <%s> at PC " PTR_FORMAT " for thread 0x%x",
|
tty->print_cr("Exception <%s> (" INTPTR_FORMAT ") thrown in compiled method <%s> at PC " INTPTR_FORMAT " for thread " INTPTR_FORMAT "",
|
||||||
exception->print_value_string(), (address)exception(), nm->method()->print_value_string(), pc, thread);
|
exception->print_value_string(), p2i((address)exception()), nm->method()->print_value_string(), p2i(pc), p2i(thread));
|
||||||
}
|
}
|
||||||
// for AbortVMOnException flag
|
// for AbortVMOnException flag
|
||||||
NOT_PRODUCT(Exceptions::debug_check_abort(exception));
|
NOT_PRODUCT(Exceptions::debug_check_abort(exception));
|
||||||
|
@ -563,7 +563,7 @@ JRT_ENTRY_NO_ASYNC(static address, exception_handler_for_pc_helper(JavaThread* t
|
||||||
ttyLocker ttyl;
|
ttyLocker ttyl;
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
tty->print_cr("Thread " PTR_FORMAT " continuing at PC " PTR_FORMAT " for exception thrown at PC " PTR_FORMAT,
|
tty->print_cr("Thread " PTR_FORMAT " continuing at PC " PTR_FORMAT " for exception thrown at PC " PTR_FORMAT,
|
||||||
thread, continuation, pc);
|
p2i(thread), p2i(continuation), p2i(pc));
|
||||||
}
|
}
|
||||||
|
|
||||||
return continuation;
|
return continuation;
|
||||||
|
@ -988,8 +988,8 @@ JRT_ENTRY(void, Runtime1::patch_code(JavaThread* thread, Runtime1::StubID stub_i
|
||||||
address copy_buff = stub_location - *byte_skip - *byte_count;
|
address copy_buff = stub_location - *byte_skip - *byte_count;
|
||||||
address being_initialized_entry = stub_location - *being_initialized_entry_offset;
|
address being_initialized_entry = stub_location - *being_initialized_entry_offset;
|
||||||
if (TracePatching) {
|
if (TracePatching) {
|
||||||
tty->print_cr(" Patching %s at bci %d at address 0x%x (%s)", Bytecodes::name(code), bci,
|
tty->print_cr(" Patching %s at bci %d at address " INTPTR_FORMAT " (%s)", Bytecodes::name(code), bci,
|
||||||
instr_pc, (stub_id == Runtime1::access_field_patching_id) ? "field" : "klass");
|
p2i(instr_pc), (stub_id == Runtime1::access_field_patching_id) ? "field" : "klass");
|
||||||
nmethod* caller_code = CodeCache::find_nmethod(caller_frame.pc());
|
nmethod* caller_code = CodeCache::find_nmethod(caller_frame.pc());
|
||||||
assert(caller_code != NULL, "nmethod not found");
|
assert(caller_code != NULL, "nmethod not found");
|
||||||
|
|
||||||
|
@ -1448,7 +1448,7 @@ JRT_ENTRY(void, Runtime1::predicate_failed_trap(JavaThread* thread))
|
||||||
methodHandle inlinee = methodHandle(vfst.method());
|
methodHandle inlinee = methodHandle(vfst.method());
|
||||||
inlinee->print_short_name(&ss1);
|
inlinee->print_short_name(&ss1);
|
||||||
m->print_short_name(&ss2);
|
m->print_short_name(&ss2);
|
||||||
tty->print_cr("Predicate failed trap in method %s at bci %d inlined in %s at pc %x", ss1.as_string(), vfst.bci(), ss2.as_string(), caller_frame.pc());
|
tty->print_cr("Predicate failed trap in method %s at bci %d inlined in %s at pc " INTPTR_FORMAT, ss1.as_string(), vfst.bci(), ss2.as_string(), p2i(caller_frame.pc()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -175,7 +175,7 @@ class ValueType: public CompilationResourceObj {
|
||||||
ValueType* join(ValueType* y) const;
|
ValueType* join(ValueType* y) const;
|
||||||
|
|
||||||
// debugging
|
// debugging
|
||||||
void print(outputStream* s = tty) { s->print(name()); }
|
void print(outputStream* s = tty) { s->print("%s", name()); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2005, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -1287,10 +1287,10 @@ void BCEscapeAnalyzer::compute_escape_info() {
|
||||||
tty->print_cr("class of method is not initialized.");
|
tty->print_cr("class of method is not initialized.");
|
||||||
else if (_level > MaxBCEAEstimateLevel)
|
else if (_level > MaxBCEAEstimateLevel)
|
||||||
tty->print_cr("level (%d) exceeds MaxBCEAEstimateLevel (%d).",
|
tty->print_cr("level (%d) exceeds MaxBCEAEstimateLevel (%d).",
|
||||||
_level, MaxBCEAEstimateLevel);
|
_level, (int) MaxBCEAEstimateLevel);
|
||||||
else if (method()->code_size() > MaxBCEAEstimateSize)
|
else if (method()->code_size() > MaxBCEAEstimateSize)
|
||||||
tty->print_cr("code size (%d) exceeds MaxBCEAEstimateSize.",
|
tty->print_cr("code size (%d) exceeds MaxBCEAEstimateSize (%d).",
|
||||||
method()->code_size(), MaxBCEAEstimateSize);
|
method()->code_size(), (int) MaxBCEAEstimateSize);
|
||||||
else
|
else
|
||||||
ShouldNotReachHere();
|
ShouldNotReachHere();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -48,7 +48,7 @@ void ciConstant::print() {
|
||||||
tty->print("%d", _value._int);
|
tty->print("%d", _value._int);
|
||||||
break;
|
break;
|
||||||
case T_LONG:
|
case T_LONG:
|
||||||
tty->print(INT64_FORMAT, _value._long);
|
tty->print(INT64_FORMAT, (int64_t)(_value._long));
|
||||||
break;
|
break;
|
||||||
case T_FLOAT:
|
case T_FLOAT:
|
||||||
tty->print("%f", _value._float);
|
tty->print("%f", _value._float);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -51,6 +51,7 @@
|
||||||
#include "runtime/init.hpp"
|
#include "runtime/init.hpp"
|
||||||
#include "runtime/reflection.hpp"
|
#include "runtime/reflection.hpp"
|
||||||
#include "runtime/sharedRuntime.hpp"
|
#include "runtime/sharedRuntime.hpp"
|
||||||
|
#include "runtime/thread.inline.hpp"
|
||||||
#include "utilities/dtrace.hpp"
|
#include "utilities/dtrace.hpp"
|
||||||
#include "utilities/macros.hpp"
|
#include "utilities/macros.hpp"
|
||||||
#ifdef COMPILER1
|
#ifdef COMPILER1
|
||||||
|
@ -1249,8 +1250,7 @@ void ciEnv::dump_replay_data(int compile_id) {
|
||||||
if (replay_data_file != NULL) {
|
if (replay_data_file != NULL) {
|
||||||
fileStream replay_data_stream(replay_data_file, /*need_close=*/true);
|
fileStream replay_data_stream(replay_data_file, /*need_close=*/true);
|
||||||
dump_replay_data(&replay_data_stream);
|
dump_replay_data(&replay_data_stream);
|
||||||
tty->print("# Compiler replay data is saved as: ");
|
tty->print_cr("# Compiler replay data is saved as: %s", buffer);
|
||||||
tty->print_cr(buffer);
|
|
||||||
} else {
|
} else {
|
||||||
tty->print_cr("# Can't open file to dump replay data.");
|
tty->print_cr("# Can't open file to dump replay data.");
|
||||||
}
|
}
|
||||||
|
@ -1273,7 +1273,7 @@ void ciEnv::dump_inline_data(int compile_id) {
|
||||||
)
|
)
|
||||||
replay_data_stream.flush();
|
replay_data_stream.flush();
|
||||||
tty->print("# Compiler inline data is saved as: ");
|
tty->print("# Compiler inline data is saved as: ");
|
||||||
tty->print_cr(buffer);
|
tty->print_cr("%s", buffer);
|
||||||
} else {
|
} else {
|
||||||
tty->print_cr("# Can't open file to dump inline data.");
|
tty->print_cr("# Can't open file to dump inline data.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -292,7 +292,7 @@ bool ciInstanceKlass::is_in_package_impl(const char* packagename, int len) {
|
||||||
// Implementation of the print method.
|
// Implementation of the print method.
|
||||||
void ciInstanceKlass::print_impl(outputStream* st) {
|
void ciInstanceKlass::print_impl(outputStream* st) {
|
||||||
ciKlass::print_impl(st);
|
ciKlass::print_impl(st);
|
||||||
GUARDED_VM_ENTRY(st->print(" loader=0x%x", (address)loader());)
|
GUARDED_VM_ENTRY(st->print(" loader=" INTPTR_FORMAT, p2i((address)loader()));)
|
||||||
if (is_loaded()) {
|
if (is_loaded()) {
|
||||||
st->print(" loaded=true initialized=%s finalized=%s subklass=%s size=%d flags=",
|
st->print(" loaded=true initialized=%s finalized=%s subklass=%s size=%d flags=",
|
||||||
bool_to_str(is_initialized()),
|
bool_to_str(is_initialized()),
|
||||||
|
@ -618,7 +618,7 @@ class StaticFinalFieldPrinter : public FieldClosure {
|
||||||
case T_SHORT: _out->print_cr("%d", mirror->short_field(fd->offset())); break;
|
case T_SHORT: _out->print_cr("%d", mirror->short_field(fd->offset())); break;
|
||||||
case T_CHAR: _out->print_cr("%d", mirror->char_field(fd->offset())); break;
|
case T_CHAR: _out->print_cr("%d", mirror->char_field(fd->offset())); break;
|
||||||
case T_INT: _out->print_cr("%d", mirror->int_field(fd->offset())); break;
|
case T_INT: _out->print_cr("%d", mirror->int_field(fd->offset())); break;
|
||||||
case T_LONG: _out->print_cr(INT64_FORMAT, mirror->long_field(fd->offset())); break;
|
case T_LONG: _out->print_cr(INT64_FORMAT, (int64_t)(mirror->long_field(fd->offset()))); break;
|
||||||
case T_FLOAT: {
|
case T_FLOAT: {
|
||||||
float f = mirror->float_field(fd->offset());
|
float f = mirror->float_field(fd->offset());
|
||||||
_out->print_cr("%d", *(int*)&f);
|
_out->print_cr("%d", *(int*)&f);
|
||||||
|
@ -626,7 +626,7 @@ class StaticFinalFieldPrinter : public FieldClosure {
|
||||||
}
|
}
|
||||||
case T_DOUBLE: {
|
case T_DOUBLE: {
|
||||||
double d = mirror->double_field(fd->offset());
|
double d = mirror->double_field(fd->offset());
|
||||||
_out->print_cr(INT64_FORMAT, *(jlong*)&d);
|
_out->print_cr(INT64_FORMAT, *(int64_t*)&d);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case T_ARRAY: {
|
case T_ARRAY: {
|
||||||
|
@ -656,7 +656,7 @@ class StaticFinalFieldPrinter : public FieldClosure {
|
||||||
_out->print_cr("\"");
|
_out->print_cr("\"");
|
||||||
} else {
|
} else {
|
||||||
const char* klass_name = value->klass()->name()->as_quoted_ascii();
|
const char* klass_name = value->klass()->name()->as_quoted_ascii();
|
||||||
_out->print_cr(klass_name);
|
_out->print_cr("%s", klass_name);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ShouldNotReachHere();
|
ShouldNotReachHere();
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -38,7 +38,7 @@
|
||||||
void ciMetadata::print(outputStream* st) {
|
void ciMetadata::print(outputStream* st) {
|
||||||
st->print("<%s", type_string());
|
st->print("<%s", type_string());
|
||||||
GUARDED_VM_ENTRY(print_impl(st);)
|
GUARDED_VM_ENTRY(print_impl(st);)
|
||||||
st->print(" ident=%d address=0x%x>", ident(), (address)this);
|
st->print(" ident=%d address=" INTPTR_FORMAT ">", ident(), p2i((address)this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2001, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -557,7 +557,7 @@ void ciMethodData::dump_replay_data(outputStream* out) {
|
||||||
if (round == 0) {
|
if (round == 0) {
|
||||||
count++;
|
count++;
|
||||||
} else {
|
} else {
|
||||||
out->print(" %d %s", dp_to_di(vdata->dp() + in_bytes(vdata->receiver_offset(i))) / sizeof(intptr_t), k->name()->as_quoted_ascii());
|
out->print(" %d %s", (int)(dp_to_di(vdata->dp() + in_bytes(vdata->receiver_offset(i))) / sizeof(intptr_t)), k->name()->as_quoted_ascii());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -569,7 +569,7 @@ void ciMethodData::dump_replay_data(outputStream* out) {
|
||||||
if (round == 0) {
|
if (round == 0) {
|
||||||
count++;
|
count++;
|
||||||
} else {
|
} else {
|
||||||
out->print(" %d %s", dp_to_di(vdata->dp() + in_bytes(vdata->receiver_offset(i))) / sizeof(intptr_t), k->name()->as_quoted_ascii());
|
out->print(" %d %s", (int)(dp_to_di(vdata->dp() + in_bytes(vdata->receiver_offset(i))) / sizeof(intptr_t)), k->name()->as_quoted_ascii());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -181,9 +181,8 @@ bool ciObject::should_be_constant() {
|
||||||
if (klass() == env->String_klass() || klass() == env->Class_klass()) {
|
if (klass() == env->String_klass() || klass() == env->Class_klass()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (EnableInvokeDynamic &&
|
if (klass()->is_subclass_of(env->MethodHandle_klass()) ||
|
||||||
(klass()->is_subclass_of(env->MethodHandle_klass()) ||
|
klass()->is_subclass_of(env->CallSite_klass())) {
|
||||||
klass()->is_subclass_of(env->CallSite_klass()))) {
|
|
||||||
assert(ScavengeRootsInCode >= 1, "must be");
|
assert(ScavengeRootsInCode >= 1, "must be");
|
||||||
// We want to treat these aggressively.
|
// We want to treat these aggressively.
|
||||||
return true;
|
return true;
|
||||||
|
@ -214,9 +213,9 @@ void ciObject::init_flags_from(oop x) {
|
||||||
void ciObject::print(outputStream* st) {
|
void ciObject::print(outputStream* st) {
|
||||||
st->print("<%s", type_string());
|
st->print("<%s", type_string());
|
||||||
GUARDED_VM_ENTRY(print_impl(st);)
|
GUARDED_VM_ENTRY(print_impl(st);)
|
||||||
st->print(" ident=%d %s address=0x%x>", ident(),
|
st->print(" ident=%d %s address=" INTPTR_FORMAT ">", ident(),
|
||||||
is_scavengable() ? "SCAVENGABLE" : "",
|
is_scavengable() ? "SCAVENGABLE" : "",
|
||||||
(address)this);
|
p2i((address)this));
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------
|
// ------------------------------------------------------------------
|
||||||
|
|
|
@ -376,11 +376,15 @@ class CompileReplay : public StackObj {
|
||||||
int c = getc(_stream);
|
int c = getc(_stream);
|
||||||
while(c != EOF) {
|
while(c != EOF) {
|
||||||
c = get_line(c);
|
c = get_line(c);
|
||||||
process_command(CHECK);
|
process_command(THREAD);
|
||||||
if (had_error()) {
|
if (had_error()) {
|
||||||
tty->print_cr("Error while parsing line %d: %s\n", line_no, _error_message);
|
tty->print_cr("Error while parsing line %d: %s\n", line_no, _error_message);
|
||||||
tty->print_cr("%s", _buffer);
|
if (ReplayIgnoreInitErrors) {
|
||||||
return;
|
CLEAR_PENDING_EXCEPTION;
|
||||||
|
_error_message = NULL;
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
line_no++;
|
line_no++;
|
||||||
}
|
}
|
||||||
|
@ -565,10 +569,14 @@ class CompileReplay : public StackObj {
|
||||||
void process_ciMethodData(TRAPS) {
|
void process_ciMethodData(TRAPS) {
|
||||||
Method* method = parse_method(CHECK);
|
Method* method = parse_method(CHECK);
|
||||||
if (had_error()) return;
|
if (had_error()) return;
|
||||||
/* jsut copied from Method, to build interpret data*/
|
/* just copied from Method, to build interpret data*/
|
||||||
if (InstanceRefKlass::owns_pending_list_lock((JavaThread*)THREAD)) {
|
if (InstanceRefKlass::owns_pending_list_lock((JavaThread*)THREAD)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// To be properly initialized, some profiling in the MDO needs the
|
||||||
|
// method to be rewritten (number of arguments at a call for
|
||||||
|
// instance)
|
||||||
|
method->method_holder()->link_class(CHECK);
|
||||||
// methodOopDesc::build_interpreter_method_data(method, CHECK);
|
// methodOopDesc::build_interpreter_method_data(method, CHECK);
|
||||||
{
|
{
|
||||||
// Grab a lock here to prevent multiple
|
// Grab a lock here to prevent multiple
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1999, 2011, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 1999, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -148,5 +148,5 @@ void ciSignature::print() {
|
||||||
print_signature();
|
print_signature();
|
||||||
tty->print(" accessing_klass=");
|
tty->print(" accessing_klass=");
|
||||||
_accessing_klass->print();
|
_accessing_klass->print();
|
||||||
tty->print(" address=0x%x>", (address)this);
|
tty->print(" address=" INTPTR_FORMAT ">", p2i((address)this));
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2000, 2014, Oracle and/or its affiliates. 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
|
||||||
|
@ -87,7 +87,7 @@ void ciType::print_impl(outputStream* st) {
|
||||||
// Print the name of this type
|
// Print the name of this type
|
||||||
void ciType::print_name_on(outputStream* st) {
|
void ciType::print_name_on(outputStream* st) {
|
||||||
ResourceMark rm;
|
ResourceMark rm;
|
||||||
st->print(name());
|
st->print("%s", name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue