Merge
This commit is contained in:
commit
e4b9b7a178
@ -169,6 +169,15 @@ suite = {
|
||||
|
||||
# ------------- JVMCI:HotSpot -------------
|
||||
|
||||
"jdk.vm.ci.aarch64" : {
|
||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||
"sourceDirs" : ["src"],
|
||||
"dependencies" : ["jdk.vm.ci.code"],
|
||||
"checkstyle" : "jdk.vm.ci.service",
|
||||
"javaCompliance" : "1.8",
|
||||
"workingSets" : "JVMCI,AArch64",
|
||||
},
|
||||
|
||||
"jdk.vm.ci.amd64" : {
|
||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||
"sourceDirs" : ["src"],
|
||||
@ -213,6 +222,21 @@ suite = {
|
||||
"workingSets" : "JVMCI,HotSpot",
|
||||
},
|
||||
|
||||
"jdk.vm.ci.hotspot.aarch64" : {
|
||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||
"sourceDirs" : ["src"],
|
||||
"dependencies" : [
|
||||
"jdk.vm.ci.aarch64",
|
||||
"jdk.vm.ci.hotspot",
|
||||
],
|
||||
"checkstyle" : "jdk.vm.ci.service",
|
||||
"annotationProcessors" : [
|
||||
"JVMCI_SERVICE_PROCESSOR",
|
||||
],
|
||||
"javaCompliance" : "1.8",
|
||||
"workingSets" : "JVMCI,HotSpot,AArch64",
|
||||
},
|
||||
|
||||
"jdk.vm.ci.hotspot.amd64" : {
|
||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||
"sourceDirs" : ["src"],
|
||||
@ -269,6 +293,7 @@ suite = {
|
||||
"jdk.vm.ci.inittimer",
|
||||
"jdk.vm.ci.runtime",
|
||||
"jdk.vm.ci.common",
|
||||
"jdk.vm.ci.aarch64",
|
||||
"jdk.vm.ci.amd64",
|
||||
"jdk.vm.ci.sparc",
|
||||
],
|
||||
@ -288,6 +313,7 @@ suite = {
|
||||
"JVMCI_HOTSPOT" : {
|
||||
"subDir" : "src/jdk.vm.ci/share/classes",
|
||||
"dependencies" : [
|
||||
"jdk.vm.ci.hotspot.aarch64",
|
||||
"jdk.vm.ci.hotspot.amd64",
|
||||
"jdk.vm.ci.hotspot.sparc",
|
||||
],
|
||||
@ -345,9 +371,11 @@ suite = {
|
||||
"jdk.vm.ci.inittimer",
|
||||
"jdk.vm.ci.runtime",
|
||||
"jdk.vm.ci.common",
|
||||
"jdk.vm.ci.aarch64",
|
||||
"jdk.vm.ci.amd64",
|
||||
"jdk.vm.ci.sparc",
|
||||
"jdk.vm.ci.hotspotvmconfig",
|
||||
"jdk.vm.ci.hotspot.aarch64",
|
||||
"jdk.vm.ci.hotspot.amd64",
|
||||
"jdk.vm.ci.hotspot.sparc",
|
||||
"jdk.vm.ci.options.processor",
|
||||
|
@ -107,8 +107,8 @@ ifeq ($(INCLUDE_NMT), false)
|
||||
memTracker.cpp nmtDCmd.cpp mallocSiteTable.cpp
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring $(Platform_arch_model), x86_64, sparc))
|
||||
# JVMCI is supported only on x86_64 and SPARC.
|
||||
ifneq (,$(findstring $(Platform_arch_model), aarch64, arm_64, sparc, x86_64))
|
||||
# JVMCI is supported
|
||||
else
|
||||
INCLUDE_JVMCI := false
|
||||
endif
|
||||
|
@ -57,6 +57,7 @@ $(eval $(call SetupJavaCompilation, BUILD_JVMCI_SERVICE, \
|
||||
|
||||
PROC_SRC_SUBDIRS := \
|
||||
jdk.vm.ci.hotspot \
|
||||
jdk.vm.ci.hotspot.aarch64 \
|
||||
jdk.vm.ci.hotspot.amd64 \
|
||||
jdk.vm.ci.hotspot.sparc \
|
||||
jdk.vm.ci.runtime \
|
||||
|
@ -454,11 +454,11 @@ frame frame::sender_for_interpreter_frame(RegisterMap* map) const {
|
||||
// This is the sp before any possible extension (adapter/locals).
|
||||
intptr_t* unextended_sp = interpreter_frame_sender_sp();
|
||||
|
||||
#ifdef COMPILER2
|
||||
#if defined(COMPILER2) || INCLUDE_JVMCI
|
||||
if (map->update_map()) {
|
||||
update_map_with_saved_link(map, (intptr_t**) addr_at(link_offset));
|
||||
}
|
||||
#endif // COMPILER2
|
||||
#endif // COMPILER2 || INCLUDE_JVMCI
|
||||
|
||||
return frame(sender_sp, unextended_sp, link(), sender_pc());
|
||||
}
|
||||
|
@ -40,14 +40,7 @@ define_pd_global(bool, ImplicitNullChecks, true); // Generate code for im
|
||||
define_pd_global(bool, TrapBasedNullChecks, false);
|
||||
define_pd_global(bool, UncommonNullCast, true); // Uncommon-trap NULLs past to check cast
|
||||
|
||||
// See 4827828 for this change. There is no globals_core_i486.hpp. I can't
|
||||
// assign a different value for C2 without touching a number of files. Use
|
||||
// #ifdef to minimize the change as it's late in Mantis. -- FIXME.
|
||||
// c1 doesn't have this problem because the fix to 4858033 assures us
|
||||
// the the vep is aligned at CodeEntryAlignment whereas c2 only aligns
|
||||
// the uep and the vep doesn't get real alignment but just slops on by
|
||||
// only assured that the entry instruction meets the 5 byte size requirement.
|
||||
#ifdef COMPILER2
|
||||
#if defined(COMPILER2) || INCLUDE_JVMCI
|
||||
define_pd_global(intx, CodeEntryAlignment, 64);
|
||||
#else
|
||||
define_pd_global(intx, CodeEntryAlignment, 16);
|
||||
|
@ -1060,13 +1060,39 @@ void InterpreterMacroAssembler::profile_virtual_call(Register receiver,
|
||||
bind(skip_receiver_profile);
|
||||
|
||||
// The method data pointer needs to be updated to reflect the new target.
|
||||
#if INCLUDE_JVMCI
|
||||
if (MethodProfileWidth == 0) {
|
||||
update_mdp_by_constant(mdp, in_bytes(VirtualCallData::virtual_call_data_size()));
|
||||
}
|
||||
#else // INCLUDE_JVMCI
|
||||
update_mdp_by_constant(mdp,
|
||||
in_bytes(VirtualCallData::
|
||||
virtual_call_data_size()));
|
||||
#endif // INCLUDE_JVMCI
|
||||
bind(profile_continue);
|
||||
}
|
||||
}
|
||||
|
||||
#if INCLUDE_JVMCI
|
||||
void InterpreterMacroAssembler::profile_called_method(Register method, Register mdp, Register reg2) {
|
||||
assert_different_registers(method, mdp, reg2);
|
||||
if (ProfileInterpreter && MethodProfileWidth > 0) {
|
||||
Label profile_continue;
|
||||
|
||||
// If no method data exists, go to profile_continue.
|
||||
test_method_data_pointer(mdp, profile_continue);
|
||||
|
||||
Label done;
|
||||
record_item_in_profile_helper(method, mdp, reg2, 0, done, MethodProfileWidth,
|
||||
&VirtualCallData::method_offset, &VirtualCallData::method_count_offset, in_bytes(VirtualCallData::nonprofiled_receiver_count_offset()));
|
||||
bind(done);
|
||||
|
||||
update_mdp_by_constant(mdp, in_bytes(VirtualCallData::virtual_call_data_size()));
|
||||
bind(profile_continue);
|
||||
}
|
||||
}
|
||||
#endif // INCLUDE_JVMCI
|
||||
|
||||
// This routine creates a state machine for updating the multi-row
|
||||
// type profile at a virtual call site (or other type-sensitive bytecode).
|
||||
// The machine visits each row (of receiver/count) until the receiver type
|
||||
@ -1086,14 +1112,36 @@ void InterpreterMacroAssembler::record_klass_in_profile_helper(
|
||||
if (is_virtual_call) {
|
||||
increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
|
||||
}
|
||||
return;
|
||||
}
|
||||
#if INCLUDE_JVMCI
|
||||
else if (EnableJVMCI) {
|
||||
increment_mdp_data_at(mdp, in_bytes(ReceiverTypeData::nonprofiled_receiver_count_offset()));
|
||||
}
|
||||
#endif // INCLUDE_JVMCI
|
||||
} else {
|
||||
int non_profiled_offset = -1;
|
||||
if (is_virtual_call) {
|
||||
non_profiled_offset = in_bytes(CounterData::count_offset());
|
||||
}
|
||||
#if INCLUDE_JVMCI
|
||||
else if (EnableJVMCI) {
|
||||
non_profiled_offset = in_bytes(ReceiverTypeData::nonprofiled_receiver_count_offset());
|
||||
}
|
||||
#endif // INCLUDE_JVMCI
|
||||
|
||||
int last_row = VirtualCallData::row_limit() - 1;
|
||||
record_item_in_profile_helper(receiver, mdp, reg2, 0, done, TypeProfileWidth,
|
||||
&VirtualCallData::receiver_offset, &VirtualCallData::receiver_count_offset, non_profiled_offset);
|
||||
}
|
||||
}
|
||||
|
||||
void InterpreterMacroAssembler::record_item_in_profile_helper(Register item, Register mdp,
|
||||
Register reg2, int start_row, Label& done, int total_rows,
|
||||
OffsetFunction item_offset_fn, OffsetFunction item_count_offset_fn,
|
||||
int non_profiled_offset) {
|
||||
int last_row = total_rows - 1;
|
||||
assert(start_row <= last_row, "must be work left to do");
|
||||
// Test this row for both the receiver and for null.
|
||||
// Test this row for both the item and for null.
|
||||
// Take any of three different outcomes:
|
||||
// 1. found receiver => increment count and goto done
|
||||
// 1. found item => increment count and goto done
|
||||
// 2. found null => keep looking for case 1, maybe allocate this cell
|
||||
// 3. found something else => keep looking for cases 1 and 2
|
||||
// Case 3 is handled by a recursive call.
|
||||
@ -1101,55 +1149,56 @@ void InterpreterMacroAssembler::record_klass_in_profile_helper(
|
||||
Label next_test;
|
||||
bool test_for_null_also = (row == start_row);
|
||||
|
||||
// See if the receiver is receiver[n].
|
||||
int recvr_offset = in_bytes(VirtualCallData::receiver_offset(row));
|
||||
test_mdp_data_at(mdp, recvr_offset, receiver,
|
||||
// See if the item is item[n].
|
||||
int item_offset = in_bytes(item_offset_fn(row));
|
||||
test_mdp_data_at(mdp, item_offset, item,
|
||||
(test_for_null_also ? reg2 : noreg),
|
||||
next_test);
|
||||
// (Reg2 now contains the receiver from the CallData.)
|
||||
// (Reg2 now contains the item from the CallData.)
|
||||
|
||||
// The receiver is receiver[n]. Increment count[n].
|
||||
int count_offset = in_bytes(VirtualCallData::receiver_count_offset(row));
|
||||
// The item is item[n]. Increment count[n].
|
||||
int count_offset = in_bytes(item_count_offset_fn(row));
|
||||
increment_mdp_data_at(mdp, count_offset);
|
||||
b(done);
|
||||
bind(next_test);
|
||||
|
||||
if (test_for_null_also) {
|
||||
Label found_null;
|
||||
// Failed the equality check on receiver[n]... Test for null.
|
||||
// Failed the equality check on item[n]... Test for null.
|
||||
if (start_row == last_row) {
|
||||
// The only thing left to do is handle the null case.
|
||||
if (is_virtual_call) {
|
||||
if (non_profiled_offset >= 0) {
|
||||
cbz(reg2, found_null);
|
||||
// Receiver did not match any saved receiver and there is no empty row for it.
|
||||
// Item did not match any saved item and there is no empty row for it.
|
||||
// Increment total counter to indicate polymorphic case.
|
||||
increment_mdp_data_at(mdp, in_bytes(CounterData::count_offset()));
|
||||
increment_mdp_data_at(mdp, non_profiled_offset);
|
||||
b(done);
|
||||
bind(found_null);
|
||||
} else {
|
||||
cbz(reg2, done);
|
||||
cbnz(reg2, done);
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Since null is rare, make it be the branch-taken case.
|
||||
cbz(reg2,found_null);
|
||||
cbz(reg2, found_null);
|
||||
|
||||
// Put all the "Case 3" tests here.
|
||||
record_klass_in_profile_helper(receiver, mdp, reg2, start_row + 1, done, is_virtual_call);
|
||||
record_item_in_profile_helper(item, mdp, reg2, start_row + 1, done, total_rows,
|
||||
item_offset_fn, item_count_offset_fn, non_profiled_offset);
|
||||
|
||||
// Found a null. Keep searching for a matching receiver,
|
||||
// Found a null. Keep searching for a matching item,
|
||||
// but remember that this is an empty (unused) slot.
|
||||
bind(found_null);
|
||||
}
|
||||
}
|
||||
|
||||
// In the fall-through case, we found no matching receiver, but we
|
||||
// observed the receiver[start_row] is NULL.
|
||||
// In the fall-through case, we found no matching item, but we
|
||||
// observed the item[start_row] is NULL.
|
||||
|
||||
// Fill in the receiver field and increment the count.
|
||||
int recvr_offset = in_bytes(VirtualCallData::receiver_offset(start_row));
|
||||
set_mdp_data_at(mdp, recvr_offset, receiver);
|
||||
int count_offset = in_bytes(VirtualCallData::receiver_count_offset(start_row));
|
||||
// Fill in the item field and increment the count.
|
||||
int item_offset = in_bytes(item_offset_fn(start_row));
|
||||
set_mdp_data_at(mdp, item_offset, item);
|
||||
int count_offset = in_bytes(item_count_offset_fn(start_row));
|
||||
mov(reg2, DataLayout::counter_increment);
|
||||
set_mdp_data_at(mdp, count_offset, reg2);
|
||||
if (start_row > 0) {
|
||||
|
@ -33,6 +33,7 @@
|
||||
|
||||
// This file specializes the assember with interpreter-specific macros
|
||||
|
||||
typedef ByteSize (*OffsetFunction)(uint);
|
||||
|
||||
class InterpreterMacroAssembler: public MacroAssembler {
|
||||
#ifndef CC_INTERP
|
||||
@ -248,6 +249,10 @@ class InterpreterMacroAssembler: public MacroAssembler {
|
||||
void record_klass_in_profile_helper(Register receiver, Register mdp,
|
||||
Register reg2, int start_row,
|
||||
Label& done, bool is_virtual_call);
|
||||
void record_item_in_profile_helper(Register item, Register mdp,
|
||||
Register reg2, int start_row, Label& done, int total_rows,
|
||||
OffsetFunction item_offset_fn, OffsetFunction item_count_offset_fn,
|
||||
int non_profiled_offset);
|
||||
|
||||
void update_mdp_by_offset(Register mdp_in, int offset_of_offset);
|
||||
void update_mdp_by_offset(Register mdp_in, Register reg, int offset_of_disp);
|
||||
@ -261,6 +266,7 @@ class InterpreterMacroAssembler: public MacroAssembler {
|
||||
void profile_virtual_call(Register receiver, Register mdp,
|
||||
Register scratch2,
|
||||
bool receiver_can_be_null = false);
|
||||
void profile_called_method(Register method, Register mdp, Register reg2) NOT_JVMCI_RETURN;
|
||||
void profile_ret(Register return_bci, Register mdp);
|
||||
void profile_null_seen(Register mdp);
|
||||
void profile_typecheck(Register mdp, Register klass, Register scratch);
|
||||
|
@ -417,7 +417,7 @@ class MacroAssembler: public Assembler {
|
||||
|
||||
#define WRAP(INSN) \
|
||||
void INSN(Register Rd, Register Rn, Register Rm, Register Ra) { \
|
||||
if ((VM_Version::cpu_cpuFeatures() & VM_Version::CPU_A53MAC) && Ra != zr) \
|
||||
if ((VM_Version::features() & VM_Version::CPU_A53MAC) && Ra != zr) \
|
||||
nop(); \
|
||||
Assembler::INSN(Rd, Rn, Rm, Ra); \
|
||||
}
|
||||
|
@ -62,7 +62,6 @@ class NativeInstruction VALUE_OBJ_CLASS_SPEC {
|
||||
inline bool is_jump_or_nop();
|
||||
inline bool is_cond_jump();
|
||||
bool is_safepoint_poll();
|
||||
inline bool is_mov_literal64();
|
||||
bool is_movz();
|
||||
bool is_movk();
|
||||
bool is_sigill_zombie_not_entrant();
|
||||
@ -98,6 +97,14 @@ class NativeInstruction VALUE_OBJ_CLASS_SPEC {
|
||||
static bool is_ldr_literal_at(address instr);
|
||||
static bool is_ldrw_to_zr(address instr);
|
||||
|
||||
static bool is_call_at(address instr) {
|
||||
const uint32_t insn = (*(uint32_t*)instr);
|
||||
return (insn >> 26) == 0b100101;
|
||||
}
|
||||
bool is_call() {
|
||||
return is_call_at(addr_at(0));
|
||||
}
|
||||
|
||||
static bool maybe_cpool_ref(address instr) {
|
||||
return is_adrp_at(instr) || is_ldr_literal_at(instr);
|
||||
}
|
||||
@ -157,11 +164,6 @@ class NativeCall: public NativeInstruction {
|
||||
inline friend NativeCall* nativeCall_at(address address);
|
||||
inline friend NativeCall* nativeCall_before(address return_address);
|
||||
|
||||
static bool is_call_at(address instr) {
|
||||
const uint32_t insn = (*(uint32_t*)instr);
|
||||
return (insn >> 26) == 0b100101;
|
||||
}
|
||||
|
||||
static bool is_call_before(address return_address) {
|
||||
return is_call_at(return_address - NativeCall::return_address_offset);
|
||||
}
|
||||
|
@ -39,10 +39,13 @@
|
||||
#ifdef COMPILER1
|
||||
#include "c1/c1_Runtime1.hpp"
|
||||
#endif
|
||||
#ifdef COMPILER2
|
||||
#if defined(COMPILER2) || INCLUDE_JVMCI
|
||||
#include "adfiles/ad_aarch64.hpp"
|
||||
#include "opto/runtime.hpp"
|
||||
#endif
|
||||
#if INCLUDE_JVMCI
|
||||
#include "jvmci/jvmciJavaClasses.hpp"
|
||||
#endif
|
||||
|
||||
#ifdef BUILTIN_SIM
|
||||
#include "../../../../../../simulator/simulator.hpp"
|
||||
@ -109,14 +112,14 @@ class RegisterSaver {
|
||||
};
|
||||
|
||||
OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_frame_words, int* total_frame_words, bool save_vectors) {
|
||||
#ifdef COMPILER2
|
||||
#if defined(COMPILER2) || INCLUDE_JVMCI
|
||||
if (save_vectors) {
|
||||
// Save upper half of vector registers
|
||||
int vect_words = 32 * 8 / wordSize;
|
||||
additional_frame_words += vect_words;
|
||||
}
|
||||
#else
|
||||
assert(!save_vectors, "vectors are generated only by C2");
|
||||
assert(!save_vectors, "vectors are generated only by C2 and JVMCI");
|
||||
#endif
|
||||
|
||||
int frame_size_in_bytes = round_to(additional_frame_words*wordSize +
|
||||
@ -166,7 +169,7 @@ OopMap* RegisterSaver::save_live_registers(MacroAssembler* masm, int additional_
|
||||
|
||||
void RegisterSaver::restore_live_registers(MacroAssembler* masm, bool restore_vectors) {
|
||||
#ifndef COMPILER2
|
||||
assert(!restore_vectors, "vectors are generated only by C2");
|
||||
assert(!restore_vectors, "vectors are generated only by C2 and JVMCI");
|
||||
#endif
|
||||
__ pop_CPU_state(restore_vectors);
|
||||
__ leave();
|
||||
@ -547,6 +550,18 @@ void SharedRuntime::gen_i2c_adapter(MacroAssembler *masm,
|
||||
// Pre-load the register-jump target early, to schedule it better.
|
||||
__ ldr(rscratch1, Address(rmethod, in_bytes(Method::from_compiled_offset())));
|
||||
|
||||
#if INCLUDE_JVMCI
|
||||
if (EnableJVMCI) {
|
||||
// check if this call should be routed towards a specific entry point
|
||||
__ ldr(rscratch2, Address(rthread, in_bytes(JavaThread::jvmci_alternate_call_target_offset())));
|
||||
Label no_alternative_target;
|
||||
__ cbz(rscratch2, no_alternative_target);
|
||||
__ mov(rscratch1, rscratch2);
|
||||
__ str(zr, Address(rthread, in_bytes(JavaThread::jvmci_alternate_call_target_offset())));
|
||||
__ bind(no_alternative_target);
|
||||
}
|
||||
#endif // INCLUDE_JVMCI
|
||||
|
||||
// Now generate the shuffle code.
|
||||
for (int i = 0; i < total_args_passed; i++) {
|
||||
if (sig_bt[i] == T_VOID) {
|
||||
@ -2237,7 +2252,13 @@ void SharedRuntime::generate_deopt_blob() {
|
||||
// Allocate space for the code
|
||||
ResourceMark rm;
|
||||
// Setup code generation tools
|
||||
CodeBuffer buffer("deopt_blob", 2048, 1024);
|
||||
int pad = 0;
|
||||
#if INCLUDE_JVMCI
|
||||
if (EnableJVMCI) {
|
||||
pad += 512; // Increase the buffer size when compiling for JVMCI
|
||||
}
|
||||
#endif
|
||||
CodeBuffer buffer("deopt_blob", 2048+pad, 1024);
|
||||
MacroAssembler* masm = new MacroAssembler(&buffer);
|
||||
int frame_size_in_words;
|
||||
OopMap* map = NULL;
|
||||
@ -2294,6 +2315,12 @@ void SharedRuntime::generate_deopt_blob() {
|
||||
__ b(cont);
|
||||
|
||||
int reexecute_offset = __ pc() - start;
|
||||
#if defined(INCLUDE_JVMCI) && !defined(COMPILER1)
|
||||
if (EnableJVMCI && UseJVMCICompiler) {
|
||||
// JVMCI does not use this kind of deoptimization
|
||||
__ should_not_reach_here();
|
||||
}
|
||||
#endif
|
||||
|
||||
// Reexecute case
|
||||
// return address is the pc describes what bci to do re-execute at
|
||||
@ -2304,6 +2331,44 @@ void SharedRuntime::generate_deopt_blob() {
|
||||
__ movw(rcpool, Deoptimization::Unpack_reexecute); // callee-saved
|
||||
__ b(cont);
|
||||
|
||||
#if INCLUDE_JVMCI
|
||||
Label after_fetch_unroll_info_call;
|
||||
int implicit_exception_uncommon_trap_offset = 0;
|
||||
int uncommon_trap_offset = 0;
|
||||
|
||||
if (EnableJVMCI) {
|
||||
implicit_exception_uncommon_trap_offset = __ pc() - start;
|
||||
|
||||
__ ldr(lr, Address(rthread, in_bytes(JavaThread::jvmci_implicit_exception_pc_offset())));
|
||||
__ str(zr, Address(rthread, in_bytes(JavaThread::jvmci_implicit_exception_pc_offset())));
|
||||
|
||||
uncommon_trap_offset = __ pc() - start;
|
||||
|
||||
// Save everything in sight.
|
||||
RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words);
|
||||
// fetch_unroll_info needs to call last_java_frame()
|
||||
Label retaddr;
|
||||
__ set_last_Java_frame(sp, noreg, retaddr, rscratch1);
|
||||
|
||||
__ ldrw(c_rarg1, Address(rthread, in_bytes(JavaThread::pending_deoptimization_offset())));
|
||||
__ movw(rscratch1, -1);
|
||||
__ strw(rscratch1, Address(rthread, in_bytes(JavaThread::pending_deoptimization_offset())));
|
||||
|
||||
__ movw(rcpool, (int32_t)Deoptimization::Unpack_reexecute);
|
||||
__ mov(c_rarg0, rthread);
|
||||
__ lea(rscratch1,
|
||||
RuntimeAddress(CAST_FROM_FN_PTR(address,
|
||||
Deoptimization::uncommon_trap)));
|
||||
__ blrt(rscratch1, 2, 0, MacroAssembler::ret_type_integral);
|
||||
__ bind(retaddr);
|
||||
oop_maps->add_gc_map( __ pc()-start, map->deep_copy());
|
||||
|
||||
__ reset_last_Java_frame(false, false);
|
||||
|
||||
__ b(after_fetch_unroll_info_call);
|
||||
} // EnableJVMCI
|
||||
#endif // INCLUDE_JVMCI
|
||||
|
||||
int exception_offset = __ pc() - start;
|
||||
|
||||
// Prolog for exception case
|
||||
@ -2395,7 +2460,13 @@ void SharedRuntime::generate_deopt_blob() {
|
||||
|
||||
__ reset_last_Java_frame(false, true);
|
||||
|
||||
// Load UnrollBlock* into rdi
|
||||
#if INCLUDE_JVMCI
|
||||
if (EnableJVMCI) {
|
||||
__ bind(after_fetch_unroll_info_call);
|
||||
}
|
||||
#endif
|
||||
|
||||
// Load UnrollBlock* into r5
|
||||
__ mov(r5, r0);
|
||||
|
||||
__ ldrw(rcpool, Address(r5, Deoptimization::UnrollBlock::unpack_kind_offset_in_bytes()));
|
||||
@ -2547,7 +2618,12 @@ void SharedRuntime::generate_deopt_blob() {
|
||||
|
||||
_deopt_blob = DeoptimizationBlob::create(&buffer, oop_maps, 0, exception_offset, reexecute_offset, frame_size_in_words);
|
||||
_deopt_blob->set_unpack_with_exception_in_tls_offset(exception_in_tls_offset);
|
||||
|
||||
#if INCLUDE_JVMCI
|
||||
if (EnableJVMCI) {
|
||||
_deopt_blob->set_uncommon_trap_offset(uncommon_trap_offset);
|
||||
_deopt_blob->set_implicit_exception_uncommon_trap_offset(implicit_exception_uncommon_trap_offset);
|
||||
}
|
||||
#endif
|
||||
#ifdef BUILTIN_SIM
|
||||
if (NotifySimulator) {
|
||||
unsigned char *base = _deopt_blob->code_begin();
|
||||
@ -2560,7 +2636,7 @@ uint SharedRuntime::out_preserve_stack_slots() {
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef COMPILER2
|
||||
#if defined(COMPILER2) || INCLUDE_JVMCI
|
||||
//------------------------------generate_uncommon_trap_blob--------------------
|
||||
void SharedRuntime::generate_uncommon_trap_blob() {
|
||||
// Allocate space for the code
|
||||
@ -2943,7 +3019,7 @@ RuntimeStub* SharedRuntime::generate_resolve_blob(address destination, const cha
|
||||
}
|
||||
|
||||
|
||||
#ifdef COMPILER2
|
||||
#if defined(COMPILER2) || INCLUDE_JVMCI
|
||||
// This is here instead of runtime_x86_64.cpp because it uses SimpleRuntimeFrame
|
||||
//
|
||||
//------------------------------generate_exception_blob---------------------------
|
||||
|
@ -225,6 +225,19 @@ address TemplateInterpreterGenerator::generate_deopt_entry_for(TosState state,
|
||||
__ restore_constant_pool_cache();
|
||||
__ get_method(rmethod);
|
||||
|
||||
#if INCLUDE_JVMCI
|
||||
// Check if we need to take lock at entry of synchronized method.
|
||||
if (UseJVMCICompiler) {
|
||||
Label L;
|
||||
__ ldr(rscratch1, Address(rthread, Thread::pending_exception_offset()));
|
||||
__ cbz(rscratch1, L);
|
||||
// Clear flag.
|
||||
__ strb(zr, Address(rthread, JavaThread::pending_monitorenter_offset()));
|
||||
// Take lock.
|
||||
lock_method();
|
||||
__ bind(L);
|
||||
}
|
||||
#endif
|
||||
// handle exceptions
|
||||
{
|
||||
Label L;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2010, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2014, Red Hat Inc. All rights reserved. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
@ -30,16 +30,8 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* JavaCallWrapper */ \
|
||||
/******************************/ \
|
||||
/******************************/ \
|
||||
/* JavaFrameAnchor */ \
|
||||
/******************************/ \
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _last_Java_fp, intptr_t*)
|
||||
|
||||
#define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _last_Java_fp, intptr_t*)
|
||||
|
||||
#define VM_TYPES_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type)
|
||||
|
||||
|
@ -67,8 +67,6 @@ int VM_Version::_model2;
|
||||
int VM_Version::_variant;
|
||||
int VM_Version::_revision;
|
||||
int VM_Version::_stepping;
|
||||
int VM_Version::_cpuFeatures;
|
||||
const char* VM_Version::_features_str = "";
|
||||
|
||||
static BufferBlob* stub_blob;
|
||||
static const int stub_size = 550;
|
||||
@ -129,7 +127,7 @@ void VM_Version::get_processor_features() {
|
||||
|
||||
char buf[512];
|
||||
|
||||
_cpuFeatures = auxv;
|
||||
_features = auxv;
|
||||
|
||||
int cpu_lines = 0;
|
||||
if (FILE *f = fopen("/proc/cpuinfo", "r")) {
|
||||
@ -154,12 +152,12 @@ void VM_Version::get_processor_features() {
|
||||
}
|
||||
|
||||
// Enable vendor specific features
|
||||
if (_cpu == CPU_CAVIUM && _variant == 0) _cpuFeatures |= CPU_DMB_ATOMICS;
|
||||
if (_cpu == CPU_ARM && (_model == 0xd03 || _model2 == 0xd03)) _cpuFeatures |= CPU_A53MAC;
|
||||
if (_cpu == CPU_CAVIUM && _variant == 0) _features |= CPU_DMB_ATOMICS;
|
||||
if (_cpu == CPU_ARM && (_model == 0xd03 || _model2 == 0xd03)) _features |= CPU_A53MAC;
|
||||
// If an olde style /proc/cpuinfo (cpu_lines == 1) then if _model is an A57 (0xd07)
|
||||
// we assume the worst and assume we could be on a big little system and have
|
||||
// undisclosed A53 cores which we could be swapped to at any stage
|
||||
if (_cpu == CPU_ARM && cpu_lines == 1 && _model == 0xd07) _cpuFeatures |= CPU_A53MAC;
|
||||
if (_cpu == CPU_ARM && cpu_lines == 1 && _model == 0xd07) _features |= CPU_A53MAC;
|
||||
|
||||
sprintf(buf, "0x%02x:0x%x:0x%03x:%d", _cpu, _variant, _model, _revision);
|
||||
if (_model2) sprintf(buf+strlen(buf), "(0x%03x)", _model2);
|
||||
@ -169,7 +167,7 @@ void VM_Version::get_processor_features() {
|
||||
if (auxv & HWCAP_SHA1) strcat(buf, ", sha1");
|
||||
if (auxv & HWCAP_SHA2) strcat(buf, ", sha256");
|
||||
|
||||
_features_str = os::strdup(buf);
|
||||
_features_string = os::strdup(buf);
|
||||
|
||||
if (FLAG_IS_DEFAULT(UseCRC32)) {
|
||||
UseCRC32 = (auxv & HWCAP_CRC32) != 0;
|
||||
@ -272,7 +270,7 @@ void VM_Version::get_processor_features() {
|
||||
}
|
||||
|
||||
if (FLAG_IS_DEFAULT(UseBarriersForVolatile)) {
|
||||
UseBarriersForVolatile = (_cpuFeatures & CPU_DMB_ATOMICS) != 0;
|
||||
UseBarriersForVolatile = (_features & CPU_DMB_ATOMICS) != 0;
|
||||
}
|
||||
|
||||
if (FLAG_IS_DEFAULT(UsePopCountInstruction)) {
|
||||
|
@ -30,7 +30,8 @@
|
||||
#include "runtime/vm_version.hpp"
|
||||
|
||||
class VM_Version : public Abstract_VM_Version {
|
||||
public:
|
||||
friend class JVMCIVMStructs;
|
||||
|
||||
protected:
|
||||
static int _cpu;
|
||||
static int _model;
|
||||
@ -38,9 +39,6 @@ protected:
|
||||
static int _variant;
|
||||
static int _revision;
|
||||
static int _stepping;
|
||||
static int _cpuFeatures; // features returned by the "cpuid" instruction
|
||||
// 0 if this instruction is not available
|
||||
static const char* _features_str;
|
||||
|
||||
static void get_processor_features();
|
||||
|
||||
@ -52,7 +50,7 @@ public:
|
||||
static void assert_is_initialized() {
|
||||
}
|
||||
|
||||
enum {
|
||||
enum Family {
|
||||
CPU_ARM = 'A',
|
||||
CPU_BROADCOM = 'B',
|
||||
CPU_CAVIUM = 'C',
|
||||
@ -64,9 +62,9 @@ public:
|
||||
CPU_QUALCOM = 'Q',
|
||||
CPU_MARVELL = 'V',
|
||||
CPU_INTEL = 'i',
|
||||
} cpuFamily;
|
||||
};
|
||||
|
||||
enum {
|
||||
enum Feature_Flag {
|
||||
CPU_FP = (1<<0),
|
||||
CPU_ASIMD = (1<<1),
|
||||
CPU_EVTSTRM = (1<<2),
|
||||
@ -77,16 +75,13 @@ public:
|
||||
CPU_CRC32 = (1<<7),
|
||||
CPU_A53MAC = (1 << 30),
|
||||
CPU_DMB_ATOMICS = (1 << 31),
|
||||
} cpuFeatureFlags;
|
||||
};
|
||||
|
||||
static const char* cpu_features() { return _features_str; }
|
||||
static int cpu_family() { return _cpu; }
|
||||
static int cpu_model() { return _model; }
|
||||
static int cpu_model2() { return _model2; }
|
||||
static int cpu_variant() { return _variant; }
|
||||
static int cpu_revision() { return _revision; }
|
||||
static int cpu_cpuFeatures() { return _cpuFeatures; }
|
||||
|
||||
};
|
||||
|
||||
#endif // CPU_AARCH64_VM_VM_VERSION_AARCH64_HPP
|
||||
|
@ -37,8 +37,6 @@
|
||||
|
||||
# include <sys/sysinfo.h>
|
||||
|
||||
int VM_Version::_features = VM_Version::unknown_m;
|
||||
const char* VM_Version::_features_str = "";
|
||||
bool VM_Version::_is_determine_features_test_running = false;
|
||||
|
||||
|
||||
@ -130,7 +128,7 @@ void VM_Version::initialize() {
|
||||
(has_tcheck() ? " tcheck" : "")
|
||||
// Make sure number of %s matches num_features!
|
||||
);
|
||||
_features_str = os::strdup(buf);
|
||||
_features_string = os::strdup(buf);
|
||||
if (Verbose) {
|
||||
print_features();
|
||||
}
|
||||
@ -323,7 +321,7 @@ bool VM_Version::use_biased_locking() {
|
||||
}
|
||||
|
||||
void VM_Version::print_features() {
|
||||
tty->print_cr("Version: %s L1_data_cache_line_size=%d", cpu_features(), L1_data_cache_line_size());
|
||||
tty->print_cr("Version: %s L1_data_cache_line_size=%d", features_string(), L1_data_cache_line_size());
|
||||
}
|
||||
|
||||
#ifdef COMPILER2
|
||||
@ -722,7 +720,7 @@ void VM_Version::config_dscr() {
|
||||
}
|
||||
}
|
||||
|
||||
static int saved_features = 0;
|
||||
static uint64_t saved_features = 0;
|
||||
|
||||
void VM_Version::allow_all() {
|
||||
saved_features = _features;
|
||||
|
@ -64,8 +64,7 @@ protected:
|
||||
tcheck_m = (1 << tcheck ),
|
||||
all_features_m = -1
|
||||
};
|
||||
static int _features;
|
||||
static const char* _features_str;
|
||||
|
||||
static bool _is_determine_features_test_running;
|
||||
|
||||
static void print_features();
|
||||
@ -96,8 +95,6 @@ public:
|
||||
static bool has_vpmsumb() { return (_features & vpmsumb_m) != 0; }
|
||||
static bool has_tcheck() { return (_features & tcheck_m) != 0; }
|
||||
|
||||
static const char* cpu_features() { return _features_str; }
|
||||
|
||||
// Assembler testing
|
||||
static void allow_all();
|
||||
static void revert();
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -29,21 +29,12 @@
|
||||
// constants required by the Serviceability Agent. This file is
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* JavaCallWrapper */ \
|
||||
/******************************/ \
|
||||
/******************************/ \
|
||||
/* JavaFrameAnchor */ \
|
||||
/******************************/ \
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _flags, int) \
|
||||
static_field(VM_Version, _features, int)
|
||||
#define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _flags, int)
|
||||
|
||||
#define VM_TYPES_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
declare_toplevel_type(VM_Version)
|
||||
|
||||
#define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \
|
||||
#define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \
|
||||
/******************************/ \
|
||||
/* Register numbers (C2 only) */ \
|
||||
/******************************/ \
|
||||
|
@ -30,13 +30,10 @@
|
||||
#include "runtime/stubCodeGenerator.hpp"
|
||||
#include "vm_version_sparc.hpp"
|
||||
|
||||
int VM_Version::_features = VM_Version::unknown_m;
|
||||
const char* VM_Version::_features_str = "";
|
||||
unsigned int VM_Version::_L2_data_cache_line_size = 0;
|
||||
|
||||
void VM_Version::initialize() {
|
||||
|
||||
assert(_features != VM_Version::unknown_m, "System pre-initialization is not complete.");
|
||||
assert(_features != 0, "System pre-initialization is not complete.");
|
||||
guarantee(VM_Version::has_v9(), "only SPARC v9 is supported");
|
||||
|
||||
PrefetchCopyIntervalInBytes = prefetch_copy_interval_in_bytes();
|
||||
@ -214,7 +211,7 @@ void VM_Version::initialize() {
|
||||
(!has_hardware_fsmuld() ? ", no-fsmuld" : ""));
|
||||
|
||||
// buf is started with ", " or is empty
|
||||
_features_str = os::strdup(strlen(buf) > 2 ? buf + 2 : buf);
|
||||
_features_string = os::strdup(strlen(buf) > 2 ? buf + 2 : buf);
|
||||
|
||||
// UseVIS is set to the smallest of what hardware supports and what
|
||||
// the command line requires. I.e., you cannot set UseVIS to 3 on
|
||||
@ -408,7 +405,7 @@ void VM_Version::initialize() {
|
||||
}
|
||||
|
||||
void VM_Version::print_features() {
|
||||
tty->print_cr("Version:%s", cpu_features());
|
||||
tty->print_cr("Version:%s", _features);
|
||||
}
|
||||
|
||||
int VM_Version::determine_features() {
|
||||
@ -444,7 +441,7 @@ int VM_Version::determine_features() {
|
||||
return features;
|
||||
}
|
||||
|
||||
static int saved_features = 0;
|
||||
static uint64_t saved_features = 0;
|
||||
|
||||
void VM_Version::allow_all() {
|
||||
saved_features = _features;
|
||||
|
@ -31,6 +31,7 @@
|
||||
class VM_Version: public Abstract_VM_Version {
|
||||
friend class VMStructs;
|
||||
friend class JVMCIVMStructs;
|
||||
|
||||
protected:
|
||||
enum Feature_Flag {
|
||||
v8_instructions = 0,
|
||||
@ -97,9 +98,6 @@ protected:
|
||||
niagara1_m = generic_v9_m | niagara1_unique_m
|
||||
};
|
||||
|
||||
static int _features;
|
||||
static const char* _features_str;
|
||||
|
||||
static unsigned int _L2_data_cache_line_size;
|
||||
static unsigned int L2_data_cache_line_size() { return _L2_data_cache_line_size; }
|
||||
|
||||
@ -175,8 +173,6 @@ public:
|
||||
// On T4 and newer Sparc BIS to the beginning of cache line always zeros it.
|
||||
static bool has_block_zeroing() { return has_blk_init() && is_T4(); }
|
||||
|
||||
static const char* cpu_features() { return _features_str; }
|
||||
|
||||
// default prefetch block size on sparc
|
||||
static intx prefetch_data_size() { return L2_data_cache_line_size(); }
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2001, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2001, 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -30,20 +30,9 @@
|
||||
// referenced by vmStructs.cpp.
|
||||
|
||||
#define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
\
|
||||
/******************************/ \
|
||||
/* JavaCallWrapper */ \
|
||||
/******************************/ \
|
||||
/******************************/ \
|
||||
/* JavaFrameAnchor */ \
|
||||
/******************************/ \
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _last_Java_fp, intptr_t*) \
|
||||
static_field(VM_Version, _cpuFeatures, uint64_t)
|
||||
|
||||
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _last_Java_fp, intptr_t*)
|
||||
|
||||
#define VM_TYPES_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
declare_toplevel_type(VM_Version)
|
||||
|
||||
#define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \
|
||||
LP64_ONLY(declare_constant(frame::arg_reg_save_area_bytes)) \
|
||||
|
@ -35,9 +35,7 @@
|
||||
int VM_Version::_cpu;
|
||||
int VM_Version::_model;
|
||||
int VM_Version::_stepping;
|
||||
uint64_t VM_Version::_cpuFeatures;
|
||||
const char* VM_Version::_features_str = "";
|
||||
VM_Version::CpuidInfo VM_Version::_cpuid_info = { 0, };
|
||||
VM_Version::CpuidInfo VM_Version::_cpuid_info = { 0, };
|
||||
|
||||
// Address of instruction which causes SEGV
|
||||
address VM_Version::_cpuinfo_segv_addr = 0;
|
||||
@ -468,7 +466,7 @@ void VM_Version::get_processor_features() {
|
||||
_cpu = 4; // 486 by default
|
||||
_model = 0;
|
||||
_stepping = 0;
|
||||
_cpuFeatures = 0;
|
||||
_features = 0;
|
||||
_logical_processors_per_package = 1;
|
||||
// i486 internal cache is both I&D and has a 16-byte line size
|
||||
_L1_data_cache_line_size = 16;
|
||||
@ -483,7 +481,7 @@ void VM_Version::get_processor_features() {
|
||||
_stepping = cpu_stepping();
|
||||
|
||||
if (cpu_family() > 4) { // it supports CPUID
|
||||
_cpuFeatures = feature_flags();
|
||||
_features = feature_flags();
|
||||
// Logical processors are only available on P4s and above,
|
||||
// and only if hyperthreading is available.
|
||||
_logical_processors_per_package = logical_processor_count();
|
||||
@ -522,24 +520,24 @@ void VM_Version::get_processor_features() {
|
||||
|
||||
// If the OS doesn't support SSE, we can't use this feature even if the HW does
|
||||
if (!os::supports_sse())
|
||||
_cpuFeatures &= ~(CPU_SSE|CPU_SSE2|CPU_SSE3|CPU_SSSE3|CPU_SSE4A|CPU_SSE4_1|CPU_SSE4_2);
|
||||
_features &= ~(CPU_SSE|CPU_SSE2|CPU_SSE3|CPU_SSSE3|CPU_SSE4A|CPU_SSE4_1|CPU_SSE4_2);
|
||||
|
||||
if (UseSSE < 4) {
|
||||
_cpuFeatures &= ~CPU_SSE4_1;
|
||||
_cpuFeatures &= ~CPU_SSE4_2;
|
||||
_features &= ~CPU_SSE4_1;
|
||||
_features &= ~CPU_SSE4_2;
|
||||
}
|
||||
|
||||
if (UseSSE < 3) {
|
||||
_cpuFeatures &= ~CPU_SSE3;
|
||||
_cpuFeatures &= ~CPU_SSSE3;
|
||||
_cpuFeatures &= ~CPU_SSE4A;
|
||||
_features &= ~CPU_SSE3;
|
||||
_features &= ~CPU_SSSE3;
|
||||
_features &= ~CPU_SSE4A;
|
||||
}
|
||||
|
||||
if (UseSSE < 2)
|
||||
_cpuFeatures &= ~CPU_SSE2;
|
||||
_features &= ~CPU_SSE2;
|
||||
|
||||
if (UseSSE < 1)
|
||||
_cpuFeatures &= ~CPU_SSE;
|
||||
_features &= ~CPU_SSE;
|
||||
|
||||
// first try initial setting and detect what we can support
|
||||
if (UseAVX > 0) {
|
||||
@ -557,25 +555,25 @@ void VM_Version::get_processor_features() {
|
||||
}
|
||||
|
||||
if (UseAVX < 3) {
|
||||
_cpuFeatures &= ~CPU_AVX512F;
|
||||
_cpuFeatures &= ~CPU_AVX512DQ;
|
||||
_cpuFeatures &= ~CPU_AVX512CD;
|
||||
_cpuFeatures &= ~CPU_AVX512BW;
|
||||
_cpuFeatures &= ~CPU_AVX512VL;
|
||||
_features &= ~CPU_AVX512F;
|
||||
_features &= ~CPU_AVX512DQ;
|
||||
_features &= ~CPU_AVX512CD;
|
||||
_features &= ~CPU_AVX512BW;
|
||||
_features &= ~CPU_AVX512VL;
|
||||
}
|
||||
|
||||
if (UseAVX < 2)
|
||||
_cpuFeatures &= ~CPU_AVX2;
|
||||
_features &= ~CPU_AVX2;
|
||||
|
||||
if (UseAVX < 1)
|
||||
_cpuFeatures &= ~CPU_AVX;
|
||||
_features &= ~CPU_AVX;
|
||||
|
||||
if (!UseAES && !FLAG_IS_DEFAULT(UseAES))
|
||||
_cpuFeatures &= ~CPU_AES;
|
||||
_features &= ~CPU_AES;
|
||||
|
||||
if (logical_processors_per_package() == 1) {
|
||||
// HT processor could be installed on a system which doesn't support HT.
|
||||
_cpuFeatures &= ~CPU_HT;
|
||||
_features &= ~CPU_HT;
|
||||
}
|
||||
|
||||
char buf[256];
|
||||
@ -611,7 +609,7 @@ void VM_Version::get_processor_features() {
|
||||
(supports_bmi2() ? ", bmi2" : ""),
|
||||
(supports_adx() ? ", adx" : ""),
|
||||
(supports_evex() ? ", evex" : ""));
|
||||
_features_str = os::strdup(buf);
|
||||
_features_string = os::strdup(buf);
|
||||
|
||||
// UseSSE is set to the smaller of what hardware supports and what
|
||||
// the command line requires. I.e., you cannot set UseSSE to 2 on
|
||||
|
@ -31,7 +31,8 @@
|
||||
class VM_Version : public Abstract_VM_Version {
|
||||
friend class VMStructs;
|
||||
friend class JVMCIVMStructs;
|
||||
public:
|
||||
|
||||
public:
|
||||
// cpuid result register layouts. These are all unions of a uint32_t
|
||||
// (in case anyone wants access to the register as a whole) and a bitfield.
|
||||
|
||||
@ -245,14 +246,11 @@ protected:
|
||||
static int _cpu;
|
||||
static int _model;
|
||||
static int _stepping;
|
||||
static uint64_t _cpuFeatures; // features returned by the "cpuid" instruction
|
||||
// 0 if this instruction is not available
|
||||
static const char* _features_str;
|
||||
|
||||
static address _cpuinfo_segv_addr; // address of instruction which causes SEGV
|
||||
static address _cpuinfo_cont_addr; // address of instruction after the one which causes SEGV
|
||||
|
||||
enum {
|
||||
enum Feature_Flag {
|
||||
CPU_CX8 = (1 << 0), // next bits are from cpuid 1 (EDX)
|
||||
CPU_CMOV = (1 << 1),
|
||||
CPU_FXSR = (1 << 2),
|
||||
@ -286,11 +284,11 @@ protected:
|
||||
CPU_AVX512ER = (1 << 29),
|
||||
CPU_AVX512CD = (1 << 30),
|
||||
CPU_AVX512BW = (1 << 31)
|
||||
} cpuFeatureFlags;
|
||||
};
|
||||
|
||||
#define CPU_AVX512VL UCONST64(0x100000000) // EVEX instructions with smaller vector length : enums are limited to 32bit
|
||||
|
||||
enum {
|
||||
enum Extended_Family {
|
||||
// AMD
|
||||
CPU_FAMILY_AMD_11H = 0x11,
|
||||
// Intel
|
||||
@ -308,7 +306,7 @@ protected:
|
||||
CPU_MODEL_HASWELL_E7 = 0x3f,
|
||||
CPU_MODEL_BROADWELL = 0x3d,
|
||||
CPU_MODEL_SKYLAKE = CPU_MODEL_HASWELL_E3
|
||||
} cpuExtendedFamily;
|
||||
};
|
||||
|
||||
// cpuid information block. All info derived from executing cpuid with
|
||||
// various function numbers is stored here. Intel and AMD info is
|
||||
@ -598,9 +596,9 @@ public:
|
||||
static void set_cpuinfo_cont_addr(address pc) { _cpuinfo_cont_addr = pc; }
|
||||
static address cpuinfo_cont_addr() { return _cpuinfo_cont_addr; }
|
||||
|
||||
static void clean_cpuFeatures() { _cpuFeatures = 0; }
|
||||
static void set_avx_cpuFeatures() { _cpuFeatures = (CPU_SSE | CPU_SSE2 | CPU_AVX); }
|
||||
static void set_evex_cpuFeatures() { _cpuFeatures = (CPU_AVX512F | CPU_SSE | CPU_SSE2 ); }
|
||||
static void clean_cpuFeatures() { _features = 0; }
|
||||
static void set_avx_cpuFeatures() { _features = (CPU_SSE | CPU_SSE2 | CPU_AVX); }
|
||||
static void set_evex_cpuFeatures() { _features = (CPU_AVX512F | CPU_SSE | CPU_SSE2 ); }
|
||||
|
||||
|
||||
// Initialization
|
||||
@ -688,36 +686,36 @@ public:
|
||||
//
|
||||
// Feature identification
|
||||
//
|
||||
static bool supports_cpuid() { return _cpuFeatures != 0; }
|
||||
static bool supports_cmpxchg8() { return (_cpuFeatures & CPU_CX8) != 0; }
|
||||
static bool supports_cmov() { return (_cpuFeatures & CPU_CMOV) != 0; }
|
||||
static bool supports_fxsr() { return (_cpuFeatures & CPU_FXSR) != 0; }
|
||||
static bool supports_ht() { return (_cpuFeatures & CPU_HT) != 0; }
|
||||
static bool supports_mmx() { return (_cpuFeatures & CPU_MMX) != 0; }
|
||||
static bool supports_sse() { return (_cpuFeatures & CPU_SSE) != 0; }
|
||||
static bool supports_sse2() { return (_cpuFeatures & CPU_SSE2) != 0; }
|
||||
static bool supports_sse3() { return (_cpuFeatures & CPU_SSE3) != 0; }
|
||||
static bool supports_ssse3() { return (_cpuFeatures & CPU_SSSE3)!= 0; }
|
||||
static bool supports_sse4_1() { return (_cpuFeatures & CPU_SSE4_1) != 0; }
|
||||
static bool supports_sse4_2() { return (_cpuFeatures & CPU_SSE4_2) != 0; }
|
||||
static bool supports_popcnt() { return (_cpuFeatures & CPU_POPCNT) != 0; }
|
||||
static bool supports_avx() { return (_cpuFeatures & CPU_AVX) != 0; }
|
||||
static bool supports_avx2() { return (_cpuFeatures & CPU_AVX2) != 0; }
|
||||
static bool supports_tsc() { return (_cpuFeatures & CPU_TSC) != 0; }
|
||||
static bool supports_aes() { return (_cpuFeatures & CPU_AES) != 0; }
|
||||
static bool supports_erms() { return (_cpuFeatures & CPU_ERMS) != 0; }
|
||||
static bool supports_clmul() { return (_cpuFeatures & CPU_CLMUL) != 0; }
|
||||
static bool supports_rtm() { return (_cpuFeatures & CPU_RTM) != 0; }
|
||||
static bool supports_bmi1() { return (_cpuFeatures & CPU_BMI1) != 0; }
|
||||
static bool supports_bmi2() { return (_cpuFeatures & CPU_BMI2) != 0; }
|
||||
static bool supports_adx() { return (_cpuFeatures & CPU_ADX) != 0; }
|
||||
static bool supports_evex() { return (_cpuFeatures & CPU_AVX512F) != 0; }
|
||||
static bool supports_avx512dq() { return (_cpuFeatures & CPU_AVX512DQ) != 0; }
|
||||
static bool supports_avx512pf() { return (_cpuFeatures & CPU_AVX512PF) != 0; }
|
||||
static bool supports_avx512er() { return (_cpuFeatures & CPU_AVX512ER) != 0; }
|
||||
static bool supports_avx512cd() { return (_cpuFeatures & CPU_AVX512CD) != 0; }
|
||||
static bool supports_avx512bw() { return (_cpuFeatures & CPU_AVX512BW) != 0; }
|
||||
static bool supports_avx512vl() { return (_cpuFeatures & CPU_AVX512VL) != 0; }
|
||||
static bool supports_cpuid() { return _features != 0; }
|
||||
static bool supports_cmpxchg8() { return (_features & CPU_CX8) != 0; }
|
||||
static bool supports_cmov() { return (_features & CPU_CMOV) != 0; }
|
||||
static bool supports_fxsr() { return (_features & CPU_FXSR) != 0; }
|
||||
static bool supports_ht() { return (_features & CPU_HT) != 0; }
|
||||
static bool supports_mmx() { return (_features & CPU_MMX) != 0; }
|
||||
static bool supports_sse() { return (_features & CPU_SSE) != 0; }
|
||||
static bool supports_sse2() { return (_features & CPU_SSE2) != 0; }
|
||||
static bool supports_sse3() { return (_features & CPU_SSE3) != 0; }
|
||||
static bool supports_ssse3() { return (_features & CPU_SSSE3)!= 0; }
|
||||
static bool supports_sse4_1() { return (_features & CPU_SSE4_1) != 0; }
|
||||
static bool supports_sse4_2() { return (_features & CPU_SSE4_2) != 0; }
|
||||
static bool supports_popcnt() { return (_features & CPU_POPCNT) != 0; }
|
||||
static bool supports_avx() { return (_features & CPU_AVX) != 0; }
|
||||
static bool supports_avx2() { return (_features & CPU_AVX2) != 0; }
|
||||
static bool supports_tsc() { return (_features & CPU_TSC) != 0; }
|
||||
static bool supports_aes() { return (_features & CPU_AES) != 0; }
|
||||
static bool supports_erms() { return (_features & CPU_ERMS) != 0; }
|
||||
static bool supports_clmul() { return (_features & CPU_CLMUL) != 0; }
|
||||
static bool supports_rtm() { return (_features & CPU_RTM) != 0; }
|
||||
static bool supports_bmi1() { return (_features & CPU_BMI1) != 0; }
|
||||
static bool supports_bmi2() { return (_features & CPU_BMI2) != 0; }
|
||||
static bool supports_adx() { return (_features & CPU_ADX) != 0; }
|
||||
static bool supports_evex() { return (_features & CPU_AVX512F) != 0; }
|
||||
static bool supports_avx512dq() { return (_features & CPU_AVX512DQ) != 0; }
|
||||
static bool supports_avx512pf() { return (_features & CPU_AVX512PF) != 0; }
|
||||
static bool supports_avx512er() { return (_features & CPU_AVX512ER) != 0; }
|
||||
static bool supports_avx512cd() { return (_features & CPU_AVX512CD) != 0; }
|
||||
static bool supports_avx512bw() { return (_features & CPU_AVX512BW) != 0; }
|
||||
static bool supports_avx512vl() { return (_features & CPU_AVX512VL) != 0; }
|
||||
static bool supports_avx512vlbw() { return (supports_avx512bw() && supports_avx512vl()); }
|
||||
static bool supports_avx512novl() { return (supports_evex() && !supports_avx512vl()); }
|
||||
static bool supports_avx512nobw() { return (supports_evex() && !supports_avx512bw()); }
|
||||
@ -746,17 +744,17 @@ public:
|
||||
}
|
||||
|
||||
// AMD features
|
||||
static bool supports_3dnow_prefetch() { return (_cpuFeatures & CPU_3DNOW_PREFETCH) != 0; }
|
||||
static bool supports_3dnow_prefetch() { return (_features & CPU_3DNOW_PREFETCH) != 0; }
|
||||
static bool supports_mmx_ext() { return is_amd() && _cpuid_info.ext_cpuid1_edx.bits.mmx_amd != 0; }
|
||||
static bool supports_lzcnt() { return (_cpuFeatures & CPU_LZCNT) != 0; }
|
||||
static bool supports_sse4a() { return (_cpuFeatures & CPU_SSE4A) != 0; }
|
||||
static bool supports_lzcnt() { return (_features & CPU_LZCNT) != 0; }
|
||||
static bool supports_sse4a() { return (_features & CPU_SSE4A) != 0; }
|
||||
|
||||
static bool is_amd_Barcelona() { return is_amd() &&
|
||||
extended_cpu_family() == CPU_FAMILY_AMD_11H; }
|
||||
|
||||
// Intel and AMD newer cores support fast timestamps well
|
||||
static bool supports_tscinv_bit() {
|
||||
return (_cpuFeatures & CPU_TSCINV) != 0;
|
||||
return (_features & CPU_TSCINV) != 0;
|
||||
}
|
||||
static bool supports_tscinv() {
|
||||
return supports_tscinv_bit() &&
|
||||
@ -770,8 +768,6 @@ public:
|
||||
|
||||
static bool supports_compare_and_exchange() { return true; }
|
||||
|
||||
static const char* cpu_features() { return _features_str; }
|
||||
|
||||
static intx allocate_prefetch_distance() {
|
||||
// This method should be called before allocate_prefetch_style().
|
||||
//
|
||||
|
@ -31,9 +31,6 @@
|
||||
|
||||
class VM_Version : public Abstract_VM_Version {
|
||||
public:
|
||||
static const char* cpu_features() {
|
||||
return "";
|
||||
}
|
||||
static void initialize();
|
||||
};
|
||||
|
||||
|
@ -0,0 +1,237 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
package jdk.vm.ci.aarch64;
|
||||
|
||||
import java.nio.ByteOrder;
|
||||
import java.util.EnumSet;
|
||||
|
||||
import jdk.vm.ci.code.Architecture;
|
||||
import jdk.vm.ci.code.Register;
|
||||
import jdk.vm.ci.code.Register.RegisterCategory;
|
||||
import jdk.vm.ci.meta.JavaKind;
|
||||
import jdk.vm.ci.meta.PlatformKind;
|
||||
|
||||
/**
|
||||
* Represents the AArch64 architecture.
|
||||
*/
|
||||
public class AArch64 extends Architecture {
|
||||
|
||||
public static final RegisterCategory CPU = new RegisterCategory("CPU");
|
||||
|
||||
// General purpose CPU registers
|
||||
public static final Register r0 = new Register(0, 0, "r0", CPU);
|
||||
public static final Register r1 = new Register(1, 1, "r1", CPU);
|
||||
public static final Register r2 = new Register(2, 2, "r2", CPU);
|
||||
public static final Register r3 = new Register(3, 3, "r3", CPU);
|
||||
public static final Register r4 = new Register(4, 4, "r4", CPU);
|
||||
public static final Register r5 = new Register(5, 5, "r5", CPU);
|
||||
public static final Register r6 = new Register(6, 6, "r6", CPU);
|
||||
public static final Register r7 = new Register(7, 7, "r7", CPU);
|
||||
public static final Register r8 = new Register(8, 8, "r8", CPU);
|
||||
public static final Register r9 = new Register(9, 9, "r9", CPU);
|
||||
public static final Register r10 = new Register(10, 10, "r10", CPU);
|
||||
public static final Register r11 = new Register(11, 11, "r11", CPU);
|
||||
public static final Register r12 = new Register(12, 12, "r12", CPU);
|
||||
public static final Register r13 = new Register(13, 13, "r13", CPU);
|
||||
public static final Register r14 = new Register(14, 14, "r14", CPU);
|
||||
public static final Register r15 = new Register(15, 15, "r15", CPU);
|
||||
public static final Register r16 = new Register(16, 16, "r16", CPU);
|
||||
public static final Register r17 = new Register(17, 17, "r17", CPU);
|
||||
public static final Register r18 = new Register(18, 18, "r18", CPU);
|
||||
public static final Register r19 = new Register(19, 19, "r19", CPU);
|
||||
public static final Register r20 = new Register(20, 20, "r20", CPU);
|
||||
public static final Register r21 = new Register(21, 21, "r21", CPU);
|
||||
public static final Register r22 = new Register(22, 22, "r22", CPU);
|
||||
public static final Register r23 = new Register(23, 23, "r23", CPU);
|
||||
public static final Register r24 = new Register(24, 24, "r24", CPU);
|
||||
public static final Register r25 = new Register(25, 25, "r25", CPU);
|
||||
public static final Register r26 = new Register(26, 26, "r26", CPU);
|
||||
public static final Register r27 = new Register(27, 27, "r27", CPU);
|
||||
public static final Register r28 = new Register(28, 28, "r28", CPU);
|
||||
public static final Register r29 = new Register(29, 29, "r29", CPU);
|
||||
public static final Register r30 = new Register(30, 30, "r30", CPU);
|
||||
public static final Register r31 = new Register(31, 31, "r31", CPU);
|
||||
|
||||
public static final Register lr = r30;
|
||||
public static final Register zr = r31;
|
||||
public static final Register sp = r31;
|
||||
|
||||
public static final Register[] cpuRegisters = {
|
||||
// @formatter:off
|
||||
r0, r1, r2, r3, r4, r5, r6, r7,
|
||||
r8, r9, r10, r11, r12, r13, r14, r15,
|
||||
r16, r17, r18, r19, r20, r21, r22, r23,
|
||||
r24, r25, r26, r27, r28, r29, r30, r31
|
||||
// @formatter:on
|
||||
};
|
||||
|
||||
public static final RegisterCategory SIMD = new RegisterCategory("SIMD");
|
||||
|
||||
// Simd registers
|
||||
public static final Register v0 = new Register(32, 0, "v0", SIMD);
|
||||
public static final Register v1 = new Register(33, 1, "v1", SIMD);
|
||||
public static final Register v2 = new Register(34, 2, "v2", SIMD);
|
||||
public static final Register v3 = new Register(35, 3, "v3", SIMD);
|
||||
public static final Register v4 = new Register(36, 4, "v4", SIMD);
|
||||
public static final Register v5 = new Register(37, 5, "v5", SIMD);
|
||||
public static final Register v6 = new Register(38, 6, "v6", SIMD);
|
||||
public static final Register v7 = new Register(39, 7, "v7", SIMD);
|
||||
public static final Register v8 = new Register(40, 8, "v8", SIMD);
|
||||
public static final Register v9 = new Register(41, 9, "v9", SIMD);
|
||||
public static final Register v10 = new Register(42, 10, "v10", SIMD);
|
||||
public static final Register v11 = new Register(43, 11, "v11", SIMD);
|
||||
public static final Register v12 = new Register(44, 12, "v12", SIMD);
|
||||
public static final Register v13 = new Register(45, 13, "v13", SIMD);
|
||||
public static final Register v14 = new Register(46, 14, "v14", SIMD);
|
||||
public static final Register v15 = new Register(47, 15, "v15", SIMD);
|
||||
public static final Register v16 = new Register(48, 16, "v16", SIMD);
|
||||
public static final Register v17 = new Register(49, 17, "v17", SIMD);
|
||||
public static final Register v18 = new Register(50, 18, "v18", SIMD);
|
||||
public static final Register v19 = new Register(51, 19, "v19", SIMD);
|
||||
public static final Register v20 = new Register(52, 20, "v20", SIMD);
|
||||
public static final Register v21 = new Register(53, 21, "v21", SIMD);
|
||||
public static final Register v22 = new Register(54, 22, "v22", SIMD);
|
||||
public static final Register v23 = new Register(55, 23, "v23", SIMD);
|
||||
public static final Register v24 = new Register(56, 24, "v24", SIMD);
|
||||
public static final Register v25 = new Register(57, 25, "v25", SIMD);
|
||||
public static final Register v26 = new Register(58, 26, "v26", SIMD);
|
||||
public static final Register v27 = new Register(59, 27, "v27", SIMD);
|
||||
public static final Register v28 = new Register(60, 28, "v28", SIMD);
|
||||
public static final Register v29 = new Register(61, 29, "v29", SIMD);
|
||||
public static final Register v30 = new Register(62, 30, "v30", SIMD);
|
||||
public static final Register v31 = new Register(63, 31, "v31", SIMD);
|
||||
|
||||
public static final Register[] simdRegisters = {
|
||||
// @formatter:off
|
||||
v0, v1, v2, v3, v4, v5, v6, v7,
|
||||
v8, v9, v10, v11, v12, v13, v14, v15,
|
||||
v16, v17, v18, v19, v20, v21, v22, v23,
|
||||
v24, v25, v26, v27, v28, v29, v30, v31
|
||||
// @formatter:on
|
||||
};
|
||||
|
||||
public static final Register[] allRegisters = {
|
||||
// @formatter:off
|
||||
r0, r1, r2, r3, r4, r5, r6, r7,
|
||||
r8, r9, r10, r11, r12, r13, r14, r15,
|
||||
r16, r17, r18, r19, r20, r21, r22, r23,
|
||||
r24, r25, r26, r27, r28, r29, r30, r31,
|
||||
|
||||
v0, v1, v2, v3, v4, v5, v6, v7,
|
||||
v8, v9, v10, v11, v12, v13, v14, v15,
|
||||
v16, v17, v18, v19, v20, v21, v22, v23,
|
||||
v24, v25, v26, v27, v28, v29, v30, v31
|
||||
// @formatter:on
|
||||
};
|
||||
|
||||
/**
|
||||
* Basic set of CPU features mirroring what is returned from the cpuid instruction. See:
|
||||
* {@code VM_Version::cpuFeatureFlags}.
|
||||
*/
|
||||
public static enum CPUFeature {
|
||||
FP,
|
||||
ASIMD,
|
||||
EVTSTRM,
|
||||
AES,
|
||||
PMULL,
|
||||
SHA1,
|
||||
SHA2,
|
||||
CRC32,
|
||||
A53MAC,
|
||||
DMB_ATOMICS
|
||||
}
|
||||
|
||||
private final EnumSet<CPUFeature> features;
|
||||
|
||||
/**
|
||||
* Set of flags to control code emission.
|
||||
*/
|
||||
public static enum Flag {
|
||||
UseBarriersForVolatile,
|
||||
UseCRC32,
|
||||
UseNeon
|
||||
}
|
||||
|
||||
private final EnumSet<Flag> flags;
|
||||
|
||||
public AArch64(EnumSet<CPUFeature> features, EnumSet<Flag> flags) {
|
||||
super("aarch64", AArch64Kind.QWORD, ByteOrder.LITTLE_ENDIAN, /* unalignedMemoryAccess */true, allRegisters, /* implicitMemoryBarriers */0, /* nativeCallDisplacementOffset */0,
|
||||
/* returnAddressSize */0);
|
||||
this.features = features;
|
||||
this.flags = flags;
|
||||
assert features.contains(CPUFeature.FP) : "minimum config for aarch64";
|
||||
}
|
||||
|
||||
public EnumSet<CPUFeature> getFeatures() {
|
||||
return features;
|
||||
}
|
||||
|
||||
public EnumSet<Flag> getFlags() {
|
||||
return flags;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PlatformKind getPlatformKind(JavaKind javaKind) {
|
||||
switch (javaKind) {
|
||||
case Boolean:
|
||||
case Byte:
|
||||
return AArch64Kind.BYTE;
|
||||
case Short:
|
||||
case Char:
|
||||
return AArch64Kind.WORD;
|
||||
case Int:
|
||||
return AArch64Kind.DWORD;
|
||||
case Long:
|
||||
case Object:
|
||||
return AArch64Kind.QWORD;
|
||||
case Float:
|
||||
return AArch64Kind.SINGLE;
|
||||
case Double:
|
||||
return AArch64Kind.DOUBLE;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canStoreValue(RegisterCategory category, PlatformKind platformKind) {
|
||||
AArch64Kind kind = (AArch64Kind) platformKind;
|
||||
if (kind.isInteger()) {
|
||||
return category.equals(CPU);
|
||||
} else if (kind.isSIMD()) {
|
||||
return category.equals(SIMD);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AArch64Kind getLargestStorableKind(RegisterCategory category) {
|
||||
if (category.equals(CPU)) {
|
||||
return AArch64Kind.QWORD;
|
||||
} else if (category.equals(SIMD)) {
|
||||
return AArch64Kind.V128_QWORD;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
package jdk.vm.ci.aarch64;
|
||||
|
||||
import jdk.vm.ci.meta.PlatformKind;
|
||||
|
||||
public enum AArch64Kind implements PlatformKind {
|
||||
|
||||
// scalar
|
||||
BYTE(1),
|
||||
WORD(2),
|
||||
DWORD(4),
|
||||
QWORD(8),
|
||||
SINGLE(4),
|
||||
DOUBLE(8),
|
||||
|
||||
// SIMD
|
||||
V32_BYTE(4, BYTE),
|
||||
V32_WORD(4, WORD),
|
||||
V64_BYTE(8, BYTE),
|
||||
V64_WORD(8, WORD),
|
||||
V64_DWORD(8, DWORD),
|
||||
V128_BYTE(16, BYTE),
|
||||
V128_WORD(16, WORD),
|
||||
V128_DWORD(16, DWORD),
|
||||
V128_QWORD(16, QWORD),
|
||||
V128_SINGLE(16, SINGLE),
|
||||
V128_DOUBLE(16, DOUBLE),
|
||||
|
||||
MASK8(1),
|
||||
MASK16(2),
|
||||
MASK32(4),
|
||||
MASK64(8);
|
||||
|
||||
private final int size;
|
||||
private final int vectorLength;
|
||||
|
||||
private final AArch64Kind scalar;
|
||||
private final EnumKey<AArch64Kind> key = new EnumKey<>(this);
|
||||
|
||||
private AArch64Kind(int size) {
|
||||
this.size = size;
|
||||
this.scalar = this;
|
||||
this.vectorLength = 1;
|
||||
}
|
||||
|
||||
private AArch64Kind(int size, AArch64Kind scalar) {
|
||||
this.size = size;
|
||||
this.scalar = scalar;
|
||||
|
||||
assert size % scalar.size == 0;
|
||||
this.vectorLength = size / scalar.size;
|
||||
}
|
||||
|
||||
public AArch64Kind getScalar() {
|
||||
return scalar;
|
||||
}
|
||||
|
||||
public int getSizeInBytes() {
|
||||
return size;
|
||||
}
|
||||
|
||||
public int getVectorLength() {
|
||||
return vectorLength;
|
||||
}
|
||||
|
||||
public Key getKey() {
|
||||
return key;
|
||||
}
|
||||
|
||||
public boolean isInteger() {
|
||||
switch (this) {
|
||||
case BYTE:
|
||||
case WORD:
|
||||
case DWORD:
|
||||
case QWORD:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isSIMD() {
|
||||
switch (this) {
|
||||
case SINGLE:
|
||||
case DOUBLE:
|
||||
case V32_BYTE:
|
||||
case V32_WORD:
|
||||
case V64_BYTE:
|
||||
case V64_WORD:
|
||||
case V64_DWORD:
|
||||
case V128_BYTE:
|
||||
case V128_WORD:
|
||||
case V128_DWORD:
|
||||
case V128_QWORD:
|
||||
case V128_SINGLE:
|
||||
case V128_DOUBLE:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isMask() {
|
||||
switch (this) {
|
||||
case MASK8:
|
||||
case MASK16:
|
||||
case MASK32:
|
||||
case MASK64:
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public char getTypeChar() {
|
||||
switch (this) {
|
||||
case BYTE:
|
||||
return 'b';
|
||||
case WORD:
|
||||
return 'w';
|
||||
case DWORD:
|
||||
return 'd';
|
||||
case QWORD:
|
||||
return 'q';
|
||||
case SINGLE:
|
||||
return 'S';
|
||||
case DOUBLE:
|
||||
return 'D';
|
||||
case V32_BYTE:
|
||||
case V32_WORD:
|
||||
case V64_BYTE:
|
||||
case V64_WORD:
|
||||
case V64_DWORD:
|
||||
case V128_BYTE:
|
||||
case V128_WORD:
|
||||
case V128_DWORD:
|
||||
case V128_QWORD:
|
||||
case V128_SINGLE:
|
||||
case V128_DOUBLE:
|
||||
return 'v';
|
||||
case MASK8:
|
||||
case MASK16:
|
||||
case MASK32:
|
||||
case MASK64:
|
||||
return 'k';
|
||||
default:
|
||||
return '-';
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
package jdk.vm.ci.hotspot.aarch64;
|
||||
|
||||
import static jdk.vm.ci.inittimer.InitTimer.timer;
|
||||
|
||||
import java.util.EnumSet;
|
||||
|
||||
import jdk.vm.ci.aarch64.AArch64;
|
||||
import jdk.vm.ci.code.Architecture;
|
||||
import jdk.vm.ci.code.RegisterConfig;
|
||||
import jdk.vm.ci.code.TargetDescription;
|
||||
import jdk.vm.ci.code.stack.StackIntrospection;
|
||||
import jdk.vm.ci.hotspot.HotSpotCodeCacheProvider;
|
||||
import jdk.vm.ci.hotspot.HotSpotConstantReflectionProvider;
|
||||
import jdk.vm.ci.hotspot.HotSpotJVMCIBackendFactory;
|
||||
import jdk.vm.ci.hotspot.HotSpotJVMCIRuntimeProvider;
|
||||
import jdk.vm.ci.hotspot.HotSpotMetaAccessProvider;
|
||||
import jdk.vm.ci.hotspot.HotSpotStackIntrospection;
|
||||
import jdk.vm.ci.hotspot.HotSpotVMConfig;
|
||||
import jdk.vm.ci.inittimer.InitTimer;
|
||||
import jdk.vm.ci.meta.ConstantReflectionProvider;
|
||||
import jdk.vm.ci.runtime.JVMCIBackend;
|
||||
import jdk.vm.ci.service.ServiceProvider;
|
||||
|
||||
@ServiceProvider(HotSpotJVMCIBackendFactory.class)
|
||||
public class AArch64HotSpotJVMCIBackendFactory implements HotSpotJVMCIBackendFactory {
|
||||
|
||||
protected EnumSet<AArch64.CPUFeature> computeFeatures(@SuppressWarnings("unused") HotSpotVMConfig config) {
|
||||
// Configure the feature set using the HotSpot flag settings.
|
||||
EnumSet<AArch64.CPUFeature> features = EnumSet.noneOf(AArch64.CPUFeature.class);
|
||||
return features;
|
||||
}
|
||||
|
||||
protected EnumSet<AArch64.Flag> computeFlags(@SuppressWarnings("unused") HotSpotVMConfig config) {
|
||||
EnumSet<AArch64.Flag> flags = EnumSet.noneOf(AArch64.Flag.class);
|
||||
return flags;
|
||||
}
|
||||
|
||||
protected TargetDescription createTarget(HotSpotVMConfig config) {
|
||||
final int stackFrameAlignment = 16;
|
||||
final int implicitNullCheckLimit = 4096;
|
||||
final boolean inlineObjects = true;
|
||||
Architecture arch = new AArch64(computeFeatures(config), computeFlags(config));
|
||||
return new TargetDescription(arch, true, stackFrameAlignment, implicitNullCheckLimit, inlineObjects);
|
||||
}
|
||||
|
||||
protected HotSpotConstantReflectionProvider createConstantReflection(HotSpotJVMCIRuntimeProvider runtime) {
|
||||
return new HotSpotConstantReflectionProvider(runtime);
|
||||
}
|
||||
|
||||
protected RegisterConfig createRegisterConfig(HotSpotJVMCIRuntimeProvider runtime, TargetDescription target) {
|
||||
return new AArch64HotSpotRegisterConfig(target.arch, runtime.getConfig());
|
||||
}
|
||||
|
||||
protected HotSpotCodeCacheProvider createCodeCache(HotSpotJVMCIRuntimeProvider runtime, TargetDescription target, RegisterConfig regConfig) {
|
||||
return new HotSpotCodeCacheProvider(runtime, runtime.getConfig(), target, regConfig);
|
||||
}
|
||||
|
||||
protected HotSpotMetaAccessProvider createMetaAccess(HotSpotJVMCIRuntimeProvider runtime) {
|
||||
return new HotSpotMetaAccessProvider(runtime);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getArchitecture() {
|
||||
return "aarch64";
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "JVMCIBackend:" + getArchitecture();
|
||||
}
|
||||
|
||||
@SuppressWarnings("try")
|
||||
public JVMCIBackend createJVMCIBackend(HotSpotJVMCIRuntimeProvider runtime, JVMCIBackend host) {
|
||||
|
||||
assert host == null;
|
||||
TargetDescription target = createTarget(runtime.getConfig());
|
||||
|
||||
RegisterConfig regConfig;
|
||||
HotSpotCodeCacheProvider codeCache;
|
||||
ConstantReflectionProvider constantReflection;
|
||||
HotSpotMetaAccessProvider metaAccess;
|
||||
StackIntrospection stackIntrospection;
|
||||
try (InitTimer t = timer("create providers")) {
|
||||
try (InitTimer rt = timer("create MetaAccess provider")) {
|
||||
metaAccess = createMetaAccess(runtime);
|
||||
}
|
||||
try (InitTimer rt = timer("create RegisterConfig")) {
|
||||
regConfig = createRegisterConfig(runtime, target);
|
||||
}
|
||||
try (InitTimer rt = timer("create CodeCache provider")) {
|
||||
codeCache = createCodeCache(runtime, target, regConfig);
|
||||
}
|
||||
try (InitTimer rt = timer("create ConstantReflection provider")) {
|
||||
constantReflection = createConstantReflection(runtime);
|
||||
}
|
||||
try (InitTimer rt = timer("create StackIntrospection provider")) {
|
||||
stackIntrospection = new HotSpotStackIntrospection(runtime);
|
||||
}
|
||||
}
|
||||
try (InitTimer rt = timer("instantiate backend")) {
|
||||
return createBackend(metaAccess, codeCache, constantReflection, stackIntrospection);
|
||||
}
|
||||
}
|
||||
|
||||
protected JVMCIBackend createBackend(HotSpotMetaAccessProvider metaAccess, HotSpotCodeCacheProvider codeCache, ConstantReflectionProvider constantReflection,
|
||||
StackIntrospection stackIntrospection) {
|
||||
return new JVMCIBackend(metaAccess, codeCache, constantReflection, stackIntrospection);
|
||||
}
|
||||
}
|
@ -0,0 +1,298 @@
|
||||
/*
|
||||
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
package jdk.vm.ci.hotspot.aarch64;
|
||||
|
||||
import static jdk.vm.ci.aarch64.AArch64.lr;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r0;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r1;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r12;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r2;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r27;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r28;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r29;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r3;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r4;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r5;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r6;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r7;
|
||||
import static jdk.vm.ci.aarch64.AArch64.r9;
|
||||
import static jdk.vm.ci.aarch64.AArch64.sp;
|
||||
import static jdk.vm.ci.aarch64.AArch64.v0;
|
||||
import static jdk.vm.ci.aarch64.AArch64.v1;
|
||||
import static jdk.vm.ci.aarch64.AArch64.v2;
|
||||
import static jdk.vm.ci.aarch64.AArch64.v3;
|
||||
import static jdk.vm.ci.aarch64.AArch64.v4;
|
||||
import static jdk.vm.ci.aarch64.AArch64.v5;
|
||||
import static jdk.vm.ci.aarch64.AArch64.v6;
|
||||
import static jdk.vm.ci.aarch64.AArch64.v7;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import jdk.vm.ci.aarch64.AArch64;
|
||||
import jdk.vm.ci.code.Architecture;
|
||||
import jdk.vm.ci.code.CallingConvention;
|
||||
import jdk.vm.ci.code.CallingConvention.Type;
|
||||
import jdk.vm.ci.code.Register;
|
||||
import jdk.vm.ci.code.RegisterAttributes;
|
||||
import jdk.vm.ci.code.RegisterConfig;
|
||||
import jdk.vm.ci.code.StackSlot;
|
||||
import jdk.vm.ci.code.TargetDescription;
|
||||
import jdk.vm.ci.common.JVMCIError;
|
||||
import jdk.vm.ci.hotspot.HotSpotVMConfig;
|
||||
import jdk.vm.ci.meta.AllocatableValue;
|
||||
import jdk.vm.ci.meta.JavaKind;
|
||||
import jdk.vm.ci.meta.JavaType;
|
||||
import jdk.vm.ci.meta.LIRKind;
|
||||
import jdk.vm.ci.meta.PlatformKind;
|
||||
import jdk.vm.ci.meta.Value;
|
||||
|
||||
public class AArch64HotSpotRegisterConfig implements RegisterConfig {
|
||||
|
||||
private final Architecture architecture;
|
||||
|
||||
private final Register[] allocatable;
|
||||
|
||||
private final int maxFrameSize;
|
||||
|
||||
/**
|
||||
* The caller saved registers always include all parameter registers.
|
||||
*/
|
||||
private final Register[] callerSaved;
|
||||
|
||||
private final boolean allAllocatableAreCallerSaved;
|
||||
|
||||
private final RegisterAttributes[] attributesMap;
|
||||
|
||||
public int getMaximumFrameSize() {
|
||||
return maxFrameSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Register[] getAllocatableRegisters() {
|
||||
return allocatable.clone();
|
||||
}
|
||||
|
||||
public Register[] filterAllocatableRegisters(PlatformKind kind, Register[] registers) {
|
||||
ArrayList<Register> list = new ArrayList<>();
|
||||
for (Register reg : registers) {
|
||||
if (architecture.canStoreValue(reg.getRegisterCategory(), kind)) {
|
||||
list.add(reg);
|
||||
}
|
||||
}
|
||||
|
||||
Register[] ret = list.toArray(new Register[list.size()]);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RegisterAttributes[] getAttributesMap() {
|
||||
return attributesMap.clone();
|
||||
}
|
||||
|
||||
private final Register[] javaGeneralParameterRegisters = {r1, r2, r3, r4, r5, r6, r7, r0};
|
||||
private final Register[] nativeGeneralParameterRegisters = {r0, r1, r2, r3, r4, r5, r6, r7};
|
||||
private final Register[] simdParameterRegisters = {v0, v1, v2, v3, v4, v5, v6, v7};
|
||||
|
||||
public static final Register inlineCacheRegister = r9;
|
||||
|
||||
/**
|
||||
* Vtable stubs expect the metaspace Method in r12.
|
||||
*/
|
||||
public static final Register metaspaceMethodRegister = r12;
|
||||
|
||||
public static final Register heapBaseRegister = r27;
|
||||
public static final Register threadRegister = r28;
|
||||
public static final Register fp = r29;
|
||||
|
||||
private static Register[] initAllocatable(Architecture arch, boolean reserveForHeapBase) {
|
||||
Register[] allRegisters = arch.getAvailableValueRegisters();
|
||||
Register[] registers = new Register[allRegisters.length - (reserveForHeapBase ? 5 : 4)];
|
||||
|
||||
int idx = 0;
|
||||
for (Register reg : allRegisters) {
|
||||
if (reg.equals(threadRegister) || reg.equals(fp) || reg.equals(lr) || reg.equals(sp)) {
|
||||
// skip thread register, frame pointer, link register and stack pointer
|
||||
continue;
|
||||
}
|
||||
if (reserveForHeapBase && reg.equals(heapBaseRegister)) {
|
||||
// skip heap base register
|
||||
continue;
|
||||
}
|
||||
|
||||
registers[idx++] = reg;
|
||||
}
|
||||
|
||||
assert idx == registers.length;
|
||||
return registers;
|
||||
}
|
||||
|
||||
public AArch64HotSpotRegisterConfig(Architecture architecture, HotSpotVMConfig config) {
|
||||
this(architecture, config, initAllocatable(architecture, config.useCompressedOops));
|
||||
assert callerSaved.length >= allocatable.length;
|
||||
}
|
||||
|
||||
public AArch64HotSpotRegisterConfig(Architecture architecture, HotSpotVMConfig config, Register[] allocatable) {
|
||||
this.architecture = architecture;
|
||||
this.maxFrameSize = config.maxFrameSize;
|
||||
|
||||
this.allocatable = allocatable.clone();
|
||||
Set<Register> callerSaveSet = new HashSet<>();
|
||||
Collections.addAll(callerSaveSet, allocatable);
|
||||
Collections.addAll(callerSaveSet, simdParameterRegisters);
|
||||
Collections.addAll(callerSaveSet, javaGeneralParameterRegisters);
|
||||
Collections.addAll(callerSaveSet, nativeGeneralParameterRegisters);
|
||||
callerSaved = callerSaveSet.toArray(new Register[callerSaveSet.size()]);
|
||||
|
||||
allAllocatableAreCallerSaved = true;
|
||||
attributesMap = RegisterAttributes.createMap(this, AArch64.allRegisters);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Register[] getCallerSaveRegisters() {
|
||||
return callerSaved;
|
||||
}
|
||||
|
||||
public Register[] getCalleeSaveRegisters() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean areAllAllocatableRegistersCallerSaved() {
|
||||
return allAllocatableAreCallerSaved;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Register getRegisterForRole(int index) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CallingConvention getCallingConvention(Type type, JavaType returnType, JavaType[] parameterTypes, TargetDescription target, boolean stackOnly) {
|
||||
if (type == Type.NativeCall) {
|
||||
return callingConvention(nativeGeneralParameterRegisters, returnType, parameterTypes, type, target, stackOnly);
|
||||
}
|
||||
// On x64, parameter locations are the same whether viewed
|
||||
// from the caller or callee perspective
|
||||
return callingConvention(javaGeneralParameterRegisters, returnType, parameterTypes, type, target, stackOnly);
|
||||
}
|
||||
|
||||
public Register[] getCallingConventionRegisters(Type type, JavaKind kind) {
|
||||
switch (kind) {
|
||||
case Boolean:
|
||||
case Byte:
|
||||
case Short:
|
||||
case Char:
|
||||
case Int:
|
||||
case Long:
|
||||
case Object:
|
||||
return type == Type.NativeCall ? nativeGeneralParameterRegisters : javaGeneralParameterRegisters;
|
||||
case Float:
|
||||
case Double:
|
||||
return simdParameterRegisters;
|
||||
default:
|
||||
throw JVMCIError.shouldNotReachHere();
|
||||
}
|
||||
}
|
||||
|
||||
private CallingConvention callingConvention(Register[] generalParameterRegisters, JavaType returnType, JavaType[] parameterTypes, Type type, TargetDescription target, boolean stackOnly) {
|
||||
AllocatableValue[] locations = new AllocatableValue[parameterTypes.length];
|
||||
|
||||
int currentGeneral = 0;
|
||||
int currentSIMD = 0;
|
||||
int currentStackOffset = 0;
|
||||
|
||||
for (int i = 0; i < parameterTypes.length; i++) {
|
||||
final JavaKind kind = parameterTypes[i].getJavaKind().getStackKind();
|
||||
|
||||
switch (kind) {
|
||||
case Byte:
|
||||
case Boolean:
|
||||
case Short:
|
||||
case Char:
|
||||
case Int:
|
||||
case Long:
|
||||
case Object:
|
||||
if (!stackOnly && currentGeneral < generalParameterRegisters.length) {
|
||||
Register register = generalParameterRegisters[currentGeneral++];
|
||||
locations[i] = register.asValue(target.getLIRKind(kind));
|
||||
}
|
||||
break;
|
||||
case Float:
|
||||
case Double:
|
||||
if (!stackOnly && currentSIMD < simdParameterRegisters.length) {
|
||||
Register register = simdParameterRegisters[currentSIMD++];
|
||||
locations[i] = register.asValue(target.getLIRKind(kind));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw JVMCIError.shouldNotReachHere();
|
||||
}
|
||||
|
||||
if (locations[i] == null) {
|
||||
LIRKind lirKind = target.getLIRKind(kind);
|
||||
locations[i] = StackSlot.get(lirKind, currentStackOffset, !type.out);
|
||||
currentStackOffset += Math.max(lirKind.getPlatformKind().getSizeInBytes(), target.wordSize);
|
||||
}
|
||||
}
|
||||
|
||||
JavaKind returnKind = returnType == null ? JavaKind.Void : returnType.getJavaKind();
|
||||
AllocatableValue returnLocation = returnKind == JavaKind.Void ? Value.ILLEGAL : getReturnRegister(returnKind).asValue(target.getLIRKind(returnKind.getStackKind()));
|
||||
return new CallingConvention(currentStackOffset, returnLocation, locations);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Register getReturnRegister(JavaKind kind) {
|
||||
switch (kind) {
|
||||
case Boolean:
|
||||
case Byte:
|
||||
case Char:
|
||||
case Short:
|
||||
case Int:
|
||||
case Long:
|
||||
case Object:
|
||||
return r0;
|
||||
case Float:
|
||||
case Double:
|
||||
return v0;
|
||||
case Void:
|
||||
case Illegal:
|
||||
return null;
|
||||
default:
|
||||
throw new UnsupportedOperationException("no return register for type " + kind);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Register getFrameRegister() {
|
||||
return sp;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return String.format("Allocatable: " + Arrays.toString(getAllocatableRegisters()) + "%n" + "CallerSave: " + Arrays.toString(getCallerSaveRegisters()) + "%n");
|
||||
}
|
||||
}
|
@ -49,79 +49,79 @@ public class AMD64HotSpotJVMCIBackendFactory implements HotSpotJVMCIBackendFacto
|
||||
protected EnumSet<AMD64.CPUFeature> computeFeatures(HotSpotVMConfig config) {
|
||||
// Configure the feature set using the HotSpot flag settings.
|
||||
EnumSet<AMD64.CPUFeature> features = EnumSet.noneOf(AMD64.CPUFeature.class);
|
||||
if ((config.x86CPUFeatures & config.cpu3DNOWPREFETCH) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd643DNOWPREFETCH) != 0) {
|
||||
features.add(AMD64.CPUFeature.AMD_3DNOW_PREFETCH);
|
||||
}
|
||||
assert config.useSSE >= 2 : "minimum config for x64";
|
||||
features.add(AMD64.CPUFeature.SSE);
|
||||
features.add(AMD64.CPUFeature.SSE2);
|
||||
if ((config.x86CPUFeatures & config.cpuSSE3) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64SSE3) != 0) {
|
||||
features.add(AMD64.CPUFeature.SSE3);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuSSSE3) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64SSSE3) != 0) {
|
||||
features.add(AMD64.CPUFeature.SSSE3);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuSSE4A) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64SSE4A) != 0) {
|
||||
features.add(AMD64.CPUFeature.SSE4A);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuSSE41) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64SSE41) != 0) {
|
||||
features.add(AMD64.CPUFeature.SSE4_1);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuSSE42) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64SSE42) != 0) {
|
||||
features.add(AMD64.CPUFeature.SSE4_2);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuPOPCNT) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64POPCNT) != 0) {
|
||||
features.add(AMD64.CPUFeature.POPCNT);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuLZCNT) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64LZCNT) != 0) {
|
||||
features.add(AMD64.CPUFeature.LZCNT);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuERMS) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64ERMS) != 0) {
|
||||
features.add(AMD64.CPUFeature.ERMS);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAVX) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AVX) != 0) {
|
||||
features.add(AMD64.CPUFeature.AVX);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAVX2) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AVX2) != 0) {
|
||||
features.add(AMD64.CPUFeature.AVX2);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAES) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AES) != 0) {
|
||||
features.add(AMD64.CPUFeature.AES);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpu3DNOWPREFETCH) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd643DNOWPREFETCH) != 0) {
|
||||
features.add(AMD64.CPUFeature.AMD_3DNOW_PREFETCH);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuBMI1) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64BMI1) != 0) {
|
||||
features.add(AMD64.CPUFeature.BMI1);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuBMI2) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64BMI2) != 0) {
|
||||
features.add(AMD64.CPUFeature.BMI2);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuRTM) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64RTM) != 0) {
|
||||
features.add(AMD64.CPUFeature.RTM);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuADX) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64ADX) != 0) {
|
||||
features.add(AMD64.CPUFeature.ADX);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAVX512F) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AVX512F) != 0) {
|
||||
features.add(AMD64.CPUFeature.AVX512F);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAVX512DQ) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AVX512DQ) != 0) {
|
||||
features.add(AMD64.CPUFeature.AVX512DQ);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAVX512PF) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AVX512PF) != 0) {
|
||||
features.add(AMD64.CPUFeature.AVX512PF);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAVX512ER) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AVX512ER) != 0) {
|
||||
features.add(AMD64.CPUFeature.AVX512ER);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAVX512CD) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AVX512CD) != 0) {
|
||||
features.add(AMD64.CPUFeature.AVX512CD);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAVX512BW) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AVX512BW) != 0) {
|
||||
features.add(AMD64.CPUFeature.AVX512BW);
|
||||
}
|
||||
if ((config.x86CPUFeatures & config.cpuAVX512VL) != 0) {
|
||||
if ((config.vmVersionFeatures & config.amd64AVX512VL) != 0) {
|
||||
features.add(AMD64.CPUFeature.AVX512VL);
|
||||
}
|
||||
return features;
|
||||
|
@ -60,73 +60,73 @@ public class SPARCHotSpotJVMCIBackendFactory implements HotSpotJVMCIBackendFacto
|
||||
|
||||
protected EnumSet<CPUFeature> computeFeatures(HotSpotVMConfig config) {
|
||||
EnumSet<CPUFeature> features = EnumSet.noneOf(CPUFeature.class);
|
||||
if ((config.sparcFeatures & config.vis1Instructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcVis1Instructions) != 0) {
|
||||
features.add(CPUFeature.VIS1);
|
||||
}
|
||||
if ((config.sparcFeatures & config.vis2Instructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcVis2Instructions) != 0) {
|
||||
features.add(CPUFeature.VIS2);
|
||||
}
|
||||
if ((config.sparcFeatures & config.vis3Instructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcVis3Instructions) != 0) {
|
||||
features.add(CPUFeature.VIS3);
|
||||
}
|
||||
if ((config.sparcFeatures & config.cbcondInstructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcCbcondInstructions) != 0) {
|
||||
features.add(CPUFeature.CBCOND);
|
||||
}
|
||||
if ((config.sparcFeatures & config.v8Instructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcV8Instructions) != 0) {
|
||||
features.add(CPUFeature.V8);
|
||||
}
|
||||
if ((config.sparcFeatures & config.hardwareMul32) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcHardwareMul32) != 0) {
|
||||
features.add(CPUFeature.HARDWARE_MUL32);
|
||||
}
|
||||
if ((config.sparcFeatures & config.hardwareDiv32) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcHardwareDiv32) != 0) {
|
||||
features.add(CPUFeature.HARDWARE_DIV32);
|
||||
}
|
||||
if ((config.sparcFeatures & config.hardwareFsmuld) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcHardwareFsmuld) != 0) {
|
||||
features.add(CPUFeature.HARDWARE_FSMULD);
|
||||
}
|
||||
if ((config.sparcFeatures & config.hardwarePopc) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcHardwarePopc) != 0) {
|
||||
features.add(CPUFeature.HARDWARE_POPC);
|
||||
}
|
||||
if ((config.sparcFeatures & config.v9Instructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcV9Instructions) != 0) {
|
||||
features.add(CPUFeature.V9);
|
||||
}
|
||||
if ((config.sparcFeatures & config.sun4v) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcSun4v) != 0) {
|
||||
features.add(CPUFeature.SUN4V);
|
||||
}
|
||||
if ((config.sparcFeatures & config.blkInitInstructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcBlkInitInstructions) != 0) {
|
||||
features.add(CPUFeature.BLK_INIT_INSTRUCTIONS);
|
||||
}
|
||||
if ((config.sparcFeatures & config.fmafInstructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcFmafInstructions) != 0) {
|
||||
features.add(CPUFeature.FMAF);
|
||||
}
|
||||
if ((config.sparcFeatures & config.fmauInstructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcFmauInstructions) != 0) {
|
||||
features.add(CPUFeature.FMAU);
|
||||
}
|
||||
if ((config.sparcFeatures & config.sparc64Family) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcSparc64Family) != 0) {
|
||||
features.add(CPUFeature.SPARC64_FAMILY);
|
||||
}
|
||||
if ((config.sparcFeatures & config.mFamily) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcMFamily) != 0) {
|
||||
features.add(CPUFeature.M_FAMILY);
|
||||
}
|
||||
if ((config.sparcFeatures & config.tFamily) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcTFamily) != 0) {
|
||||
features.add(CPUFeature.T_FAMILY);
|
||||
}
|
||||
if ((config.sparcFeatures & config.t1Model) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcT1Model) != 0) {
|
||||
features.add(CPUFeature.T1_MODEL);
|
||||
}
|
||||
if ((config.sparcFeatures & config.sparc5Instructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcSparc5Instructions) != 0) {
|
||||
features.add(CPUFeature.SPARC5);
|
||||
}
|
||||
if ((config.sparcFeatures & config.aesInstructions) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcAesInstructions) != 0) {
|
||||
features.add(CPUFeature.SPARC64_FAMILY);
|
||||
}
|
||||
if ((config.sparcFeatures & config.sha1Instruction) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcSha1Instruction) != 0) {
|
||||
features.add(CPUFeature.SHA1);
|
||||
}
|
||||
if ((config.sparcFeatures & config.sha256Instruction) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcSha256Instruction) != 0) {
|
||||
features.add(CPUFeature.SHA256);
|
||||
}
|
||||
if ((config.sparcFeatures & config.sha512Instruction) != 0) {
|
||||
if ((config.vmVersionFeatures & config.sparcSha512Instruction) != 0) {
|
||||
features.add(CPUFeature.SHA512);
|
||||
}
|
||||
return features;
|
||||
|
@ -907,67 +907,67 @@ public class HotSpotVMConfig {
|
||||
@HotSpotVMFlag(name = "UseSSE") @Stable public int useSSE;
|
||||
@HotSpotVMFlag(name = "UseAVX", archs = {"amd64"}) @Stable public int useAVX;
|
||||
|
||||
// X86 specific values
|
||||
@HotSpotVMField(name = "VM_Version::_cpuFeatures", type = "uint64_t", get = HotSpotVMField.Type.VALUE, archs = {"amd64"}) @Stable public long x86CPUFeatures;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_CX8", archs = {"amd64"}) @Stable public long cpuCX8;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_CMOV", archs = {"amd64"}) @Stable public long cpuCMOV;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_FXSR", archs = {"amd64"}) @Stable public long cpuFXSR;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_HT", archs = {"amd64"}) @Stable public long cpuHT;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_MMX", archs = {"amd64"}) @Stable public long cpuMMX;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_3DNOW_PREFETCH", archs = {"amd64"}) @Stable public long cpu3DNOWPREFETCH;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE", archs = {"amd64"}) @Stable public long cpuSSE;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE2", archs = {"amd64"}) @Stable public long cpuSSE2;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE3", archs = {"amd64"}) @Stable public long cpuSSE3;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSSE3", archs = {"amd64"}) @Stable public long cpuSSSE3;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE4A", archs = {"amd64"}) @Stable public long cpuSSE4A;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE4_1", archs = {"amd64"}) @Stable public long cpuSSE41;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE4_2", archs = {"amd64"}) @Stable public long cpuSSE42;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_POPCNT", archs = {"amd64"}) @Stable public long cpuPOPCNT;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_LZCNT", archs = {"amd64"}) @Stable public long cpuLZCNT;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_TSC", archs = {"amd64"}) @Stable public long cpuTSC;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_TSCINV", archs = {"amd64"}) @Stable public long cpuTSCINV;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX", archs = {"amd64"}) @Stable public long cpuAVX;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX2", archs = {"amd64"}) @Stable public long cpuAVX2;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AES", archs = {"amd64"}) @Stable public long cpuAES;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_ERMS", archs = {"amd64"}) @Stable public long cpuERMS;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_CLMUL", archs = {"amd64"}) @Stable public long cpuCLMUL;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_BMI1", archs = {"amd64"}) @Stable public long cpuBMI1;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_BMI2", archs = {"amd64"}) @Stable public long cpuBMI2;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_RTM", archs = {"amd64"}) @Stable public long cpuRTM;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_ADX", archs = {"amd64"}) @Stable public long cpuADX;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512F", archs = {"amd64"}) @Stable public long cpuAVX512F;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512DQ", archs = {"amd64"}) @Stable public long cpuAVX512DQ;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512PF", archs = {"amd64"}) @Stable public long cpuAVX512PF;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512ER", archs = {"amd64"}) @Stable public long cpuAVX512ER;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512CD", archs = {"amd64"}) @Stable public long cpuAVX512CD;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512BW", archs = {"amd64"}) @Stable public long cpuAVX512BW;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512VL", archs = {"amd64"}) @Stable public long cpuAVX512VL;
|
||||
@HotSpotVMField(name = "Abstract_VM_Version::_features", type = "uint64_t", get = HotSpotVMField.Type.VALUE) @Stable public long vmVersionFeatures;
|
||||
|
||||
// AMD64 specific values
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_CX8", archs = {"amd64"}) @Stable public long amd64CX8;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_CMOV", archs = {"amd64"}) @Stable public long amd64CMOV;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_FXSR", archs = {"amd64"}) @Stable public long amd64FXSR;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_HT", archs = {"amd64"}) @Stable public long amd64HT;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_MMX", archs = {"amd64"}) @Stable public long amd64MMX;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_3DNOW_PREFETCH", archs = {"amd64"}) @Stable public long amd643DNOWPREFETCH;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE", archs = {"amd64"}) @Stable public long amd64SSE;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE2", archs = {"amd64"}) @Stable public long amd64SSE2;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE3", archs = {"amd64"}) @Stable public long amd64SSE3;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSSE3", archs = {"amd64"}) @Stable public long amd64SSSE3;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE4A", archs = {"amd64"}) @Stable public long amd64SSE4A;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE4_1", archs = {"amd64"}) @Stable public long amd64SSE41;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_SSE4_2", archs = {"amd64"}) @Stable public long amd64SSE42;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_POPCNT", archs = {"amd64"}) @Stable public long amd64POPCNT;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_LZCNT", archs = {"amd64"}) @Stable public long amd64LZCNT;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_TSC", archs = {"amd64"}) @Stable public long amd64TSC;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_TSCINV", archs = {"amd64"}) @Stable public long amd64TSCINV;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX", archs = {"amd64"}) @Stable public long amd64AVX;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX2", archs = {"amd64"}) @Stable public long amd64AVX2;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AES", archs = {"amd64"}) @Stable public long amd64AES;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_ERMS", archs = {"amd64"}) @Stable public long amd64ERMS;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_CLMUL", archs = {"amd64"}) @Stable public long amd64CLMUL;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_BMI1", archs = {"amd64"}) @Stable public long amd64BMI1;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_BMI2", archs = {"amd64"}) @Stable public long amd64BMI2;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_RTM", archs = {"amd64"}) @Stable public long amd64RTM;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_ADX", archs = {"amd64"}) @Stable public long amd64ADX;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512F", archs = {"amd64"}) @Stable public long amd64AVX512F;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512DQ", archs = {"amd64"}) @Stable public long amd64AVX512DQ;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512PF", archs = {"amd64"}) @Stable public long amd64AVX512PF;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512ER", archs = {"amd64"}) @Stable public long amd64AVX512ER;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512CD", archs = {"amd64"}) @Stable public long amd64AVX512CD;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512BW", archs = {"amd64"}) @Stable public long amd64AVX512BW;
|
||||
@HotSpotVMConstant(name = "VM_Version::CPU_AVX512VL", archs = {"amd64"}) @Stable public long amd64AVX512VL;
|
||||
|
||||
// SPARC specific values
|
||||
@HotSpotVMField(name = "VM_Version::_features", type = "int", get = HotSpotVMField.Type.VALUE, archs = {"sparc"}) @Stable public int sparcFeatures;
|
||||
@HotSpotVMConstant(name = "VM_Version::vis3_instructions_m", archs = {"sparc"}) @Stable public int vis3Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::vis2_instructions_m", archs = {"sparc"}) @Stable public int vis2Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::vis1_instructions_m", archs = {"sparc"}) @Stable public int vis1Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::cbcond_instructions_m", archs = {"sparc"}) @Stable public int cbcondInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::v8_instructions_m", archs = {"sparc"}) @Stable public int v8Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::hardware_mul32_m", archs = {"sparc"}) @Stable public int hardwareMul32;
|
||||
@HotSpotVMConstant(name = "VM_Version::hardware_div32_m", archs = {"sparc"}) @Stable public int hardwareDiv32;
|
||||
@HotSpotVMConstant(name = "VM_Version::hardware_fsmuld_m", archs = {"sparc"}) @Stable public int hardwareFsmuld;
|
||||
@HotSpotVMConstant(name = "VM_Version::hardware_popc_m", archs = {"sparc"}) @Stable public int hardwarePopc;
|
||||
@HotSpotVMConstant(name = "VM_Version::v9_instructions_m", archs = {"sparc"}) @Stable public int v9Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::sun4v_m", archs = {"sparc"}) @Stable public int sun4v;
|
||||
@HotSpotVMConstant(name = "VM_Version::blk_init_instructions_m", archs = {"sparc"}) @Stable public int blkInitInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::fmaf_instructions_m", archs = {"sparc"}) @Stable public int fmafInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::fmau_instructions_m", archs = {"sparc"}) @Stable public int fmauInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::sparc64_family_m", archs = {"sparc"}) @Stable public int sparc64Family;
|
||||
@HotSpotVMConstant(name = "VM_Version::M_family_m", archs = {"sparc"}) @Stable public int mFamily;
|
||||
@HotSpotVMConstant(name = "VM_Version::T_family_m", archs = {"sparc"}) @Stable public int tFamily;
|
||||
@HotSpotVMConstant(name = "VM_Version::T1_model_m", archs = {"sparc"}) @Stable public int t1Model;
|
||||
@HotSpotVMConstant(name = "VM_Version::sparc5_instructions_m", archs = {"sparc"}) @Stable public int sparc5Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::aes_instructions_m", archs = {"sparc"}) @Stable public int aesInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::sha1_instruction_m", archs = {"sparc"}) @Stable public int sha1Instruction;
|
||||
@HotSpotVMConstant(name = "VM_Version::sha256_instruction_m", archs = {"sparc"}) @Stable public int sha256Instruction;
|
||||
@HotSpotVMConstant(name = "VM_Version::sha512_instruction_m", archs = {"sparc"}) @Stable public int sha512Instruction;
|
||||
@HotSpotVMConstant(name = "VM_Version::vis3_instructions_m", archs = {"sparc"}) @Stable public int sparcVis3Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::vis2_instructions_m", archs = {"sparc"}) @Stable public int sparcVis2Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::vis1_instructions_m", archs = {"sparc"}) @Stable public int sparcVis1Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::cbcond_instructions_m", archs = {"sparc"}) @Stable public int sparcCbcondInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::v8_instructions_m", archs = {"sparc"}) @Stable public int sparcV8Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::hardware_mul32_m", archs = {"sparc"}) @Stable public int sparcHardwareMul32;
|
||||
@HotSpotVMConstant(name = "VM_Version::hardware_div32_m", archs = {"sparc"}) @Stable public int sparcHardwareDiv32;
|
||||
@HotSpotVMConstant(name = "VM_Version::hardware_fsmuld_m", archs = {"sparc"}) @Stable public int sparcHardwareFsmuld;
|
||||
@HotSpotVMConstant(name = "VM_Version::hardware_popc_m", archs = {"sparc"}) @Stable public int sparcHardwarePopc;
|
||||
@HotSpotVMConstant(name = "VM_Version::v9_instructions_m", archs = {"sparc"}) @Stable public int sparcV9Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::sun4v_m", archs = {"sparc"}) @Stable public int sparcSun4v;
|
||||
@HotSpotVMConstant(name = "VM_Version::blk_init_instructions_m", archs = {"sparc"}) @Stable public int sparcBlkInitInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::fmaf_instructions_m", archs = {"sparc"}) @Stable public int sparcFmafInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::fmau_instructions_m", archs = {"sparc"}) @Stable public int sparcFmauInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::sparc64_family_m", archs = {"sparc"}) @Stable public int sparcSparc64Family;
|
||||
@HotSpotVMConstant(name = "VM_Version::M_family_m", archs = {"sparc"}) @Stable public int sparcMFamily;
|
||||
@HotSpotVMConstant(name = "VM_Version::T_family_m", archs = {"sparc"}) @Stable public int sparcTFamily;
|
||||
@HotSpotVMConstant(name = "VM_Version::T1_model_m", archs = {"sparc"}) @Stable public int sparcT1Model;
|
||||
@HotSpotVMConstant(name = "VM_Version::sparc5_instructions_m", archs = {"sparc"}) @Stable public int sparcSparc5Instructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::aes_instructions_m", archs = {"sparc"}) @Stable public int sparcAesInstructions;
|
||||
@HotSpotVMConstant(name = "VM_Version::sha1_instruction_m", archs = {"sparc"}) @Stable public int sparcSha1Instruction;
|
||||
@HotSpotVMConstant(name = "VM_Version::sha256_instruction_m", archs = {"sparc"}) @Stable public int sparcSha256Instruction;
|
||||
@HotSpotVMConstant(name = "VM_Version::sha512_instruction_m", archs = {"sparc"}) @Stable public int sparcSha512Instruction;
|
||||
|
||||
@HotSpotVMFlag(name = "UseBlockZeroing", archs = {"sparc"}) @Stable public boolean useBlockZeroing;
|
||||
@HotSpotVMFlag(name = "BlockZeroingLowLimit", archs = {"sparc"}) @Stable public int blockZeroingLowLimit;
|
||||
|
@ -1643,7 +1643,7 @@ void os::pd_print_cpu_info(outputStream* st, char* buf, size_t buflen) {
|
||||
st->print("total %d", os::processor_count());
|
||||
// It's not safe to query number of active processors after crash.
|
||||
// st->print("(active %d)", os::active_processor_count());
|
||||
st->print(" %s", VM_Version::cpu_features());
|
||||
st->print(" %s", VM_Version::features());
|
||||
st->cr();
|
||||
}
|
||||
|
||||
|
@ -74,6 +74,8 @@
|
||||
static_field(CompilerToVM::Data, cardtable_start_address, jbyte*) \
|
||||
static_field(CompilerToVM::Data, cardtable_shift, int) \
|
||||
\
|
||||
static_field(Abstract_VM_Version, _features, uint64_t) \
|
||||
\
|
||||
nonstatic_field(Array<int>, _length, int) \
|
||||
unchecked_nonstatic_field(Array<u1>, _data, sizeof(u1)) \
|
||||
unchecked_nonstatic_field(Array<u2>, _data, sizeof(u2)) \
|
||||
@ -586,11 +588,7 @@
|
||||
#ifdef TARGET_ARCH_x86
|
||||
|
||||
#define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _last_Java_fp, intptr_t*) \
|
||||
static_field(VM_Version, _cpuFeatures, uint64_t)
|
||||
|
||||
#define VM_TYPES_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
declare_toplevel_type(VM_Version)
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _last_Java_fp, intptr_t*)
|
||||
|
||||
#define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \
|
||||
LP64_ONLY(declare_constant(frame::arg_reg_save_area_bytes)) \
|
||||
@ -638,11 +636,7 @@
|
||||
#ifdef TARGET_ARCH_sparc
|
||||
|
||||
#define VM_STRUCTS_CPU(nonstatic_field, static_field, unchecked_nonstatic_field, volatile_nonstatic_field, nonproduct_nonstatic_field, c2_nonstatic_field, unchecked_c1_static_field, unchecked_c2_static_field) \
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _flags, int) \
|
||||
static_field(VM_Version, _features, int)
|
||||
|
||||
#define VM_TYPES_CPU(declare_type, declare_toplevel_type, declare_oop_type, declare_integer_type, declare_unsigned_integer_type, declare_c1_toplevel_type, declare_c2_type, declare_c2_toplevel_type) \
|
||||
declare_toplevel_type(VM_Version)
|
||||
volatile_nonstatic_field(JavaFrameAnchor, _flags, int)
|
||||
|
||||
#define VM_INT_CONSTANTS_CPU(declare_constant, declare_preprocessor_constant, declare_c1_constant, declare_c2_constant, declare_c2_preprocessor_constant) \
|
||||
declare_constant(VM_Version::vis1_instructions_m) \
|
||||
|
@ -1005,9 +1005,9 @@ WB_ENTRY(void, WB_ReadReservedMemory(JNIEnv* env, jobject o))
|
||||
WB_END
|
||||
|
||||
WB_ENTRY(jstring, WB_GetCPUFeatures(JNIEnv* env, jobject o))
|
||||
const char* cpu_features = VM_Version::cpu_features();
|
||||
const char* features = VM_Version::features_string();
|
||||
ThreadToNativeFromVM ttn(thread);
|
||||
jstring features_string = env->NewStringUTF(cpu_features);
|
||||
jstring features_string = env->NewStringUTF(features);
|
||||
|
||||
CHECK_JNI_EXCEPTION_(env, NULL);
|
||||
|
||||
|
@ -819,7 +819,7 @@ void os::print_cpu_info(outputStream* st, char* buf, size_t buflen) {
|
||||
st->print("total %d", os::processor_count());
|
||||
// It's not safe to query number of active processors after crash
|
||||
// st->print("(active %d)", os::active_processor_count());
|
||||
st->print(" %s", VM_Version::cpu_features());
|
||||
st->print(" %s", VM_Version::features_string());
|
||||
st->cr();
|
||||
pd_print_cpu_info(st, buf, buflen);
|
||||
}
|
||||
|
@ -1310,6 +1310,8 @@ typedef CompactHashtable<Symbol*, char> SymbolCompactHashTable;
|
||||
\
|
||||
static_field(Abstract_VM_Version, _s_vm_release, const char*) \
|
||||
static_field(Abstract_VM_Version, _s_internal_vm_info_string, const char*) \
|
||||
static_field(Abstract_VM_Version, _features, uint64_t) \
|
||||
static_field(Abstract_VM_Version, _features_string, const char*) \
|
||||
static_field(Abstract_VM_Version, _vm_major_version, int) \
|
||||
static_field(Abstract_VM_Version, _vm_minor_version, int) \
|
||||
static_field(Abstract_VM_Version, _vm_security_version, int) \
|
||||
|
@ -31,6 +31,10 @@
|
||||
|
||||
const char* Abstract_VM_Version::_s_vm_release = Abstract_VM_Version::vm_release();
|
||||
const char* Abstract_VM_Version::_s_internal_vm_info_string = Abstract_VM_Version::internal_vm_info_string();
|
||||
|
||||
uint64_t Abstract_VM_Version::_features = 0;
|
||||
const char* Abstract_VM_Version::_features_string = "";
|
||||
|
||||
bool Abstract_VM_Version::_supports_cx8 = false;
|
||||
bool Abstract_VM_Version::_supports_atomic_getset4 = false;
|
||||
bool Abstract_VM_Version::_supports_atomic_getset8 = false;
|
||||
|
@ -31,10 +31,17 @@
|
||||
// VM_Version provides information about the VM.
|
||||
|
||||
class Abstract_VM_Version: AllStatic {
|
||||
protected:
|
||||
friend class VMStructs;
|
||||
friend class JVMCIVMStructs;
|
||||
|
||||
protected:
|
||||
static const char* _s_vm_release;
|
||||
static const char* _s_internal_vm_info_string;
|
||||
|
||||
// CPU feature flags.
|
||||
static uint64_t _features;
|
||||
static const char* _features_string;
|
||||
|
||||
// These are set by machine-dependent initializations
|
||||
static bool _supports_cx8;
|
||||
static bool _supports_atomic_getset4;
|
||||
@ -100,6 +107,14 @@ class Abstract_VM_Version: AllStatic {
|
||||
static const char* jre_release_version();
|
||||
static const char* jdk_debug_level();
|
||||
|
||||
static uint64_t features() {
|
||||
return _features;
|
||||
}
|
||||
|
||||
static const char* features_string() {
|
||||
return _features_string;
|
||||
}
|
||||
|
||||
// does HW support an 8-byte compare-exchange operation?
|
||||
static bool supports_cx8() {
|
||||
#ifdef SUPPORTS_NATIVE_CX8
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /
|
||||
* @run main/othervm -XX:+UnlockExperimentalVMOptions
|
||||
* -Dcompiler.jvmci.JVM_GetJVMCIRuntimeTest.positive=true
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ./common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller jdk.vm.ci.hotspot.CompilerToVMHelper
|
||||
|
@ -24,7 +24,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build sun.hotspot.WhiteBox
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build sun.hotspot.WhiteBox
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib/
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller
|
||||
|
@ -25,7 +25,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @ignore 8139700
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build sun.hotspot.WhiteBox
|
||||
|
@ -21,7 +21,7 @@ import java.util.Map;
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build sun.hotspot.WhiteBox
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.FindUniqueConcreteMethodTest
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller jdk.vm.ci.hotspot.CompilerToVMHelper
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.GetClassInitializerTest
|
||||
|
@ -25,7 +25,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java ../common/PublicMetaspaceWrapperObject.java
|
||||
* @build sun.hotspot.WhiteBox
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller jdk.vm.ci.hotspot.CompilerToVMHelper
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib/
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.GetImplementorTest
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller jdk.vm.ci.hotspot.CompilerToVMHelper
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @clean compiler.jvmci.compilerToVM.*
|
||||
* @compile -g DummyInterface.java
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib/
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.GetMaxCallTargetOffsetTest
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller jdk.vm.ci.hotspot.CompilerToVMHelper
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* ../common/PublicMetaspaceWrapperObject.java
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* ../common/PublicMetaspaceWrapperObject.java
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller jdk.vm.ci.hotspot.CompilerToVMHelper
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.GetSymbolTest
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.GetVtableIndexForInterfaceTest
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build sun.hotspot.WhiteBox
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.HasFinalizableSubclassTest
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.InitializeConfigurationTest
|
||||
|
@ -25,7 +25,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @ignore 8139700
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build sun.hotspot.WhiteBox IsMatureTest
|
||||
|
@ -25,7 +25,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /
|
||||
* @run main/othervm -XX:+UnlockExperimentalVMOptions
|
||||
* -Dcompiler.jvmci.compilerToVM.JVM_RegisterJVMCINatives.positive=true
|
||||
|
@ -25,7 +25,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @summary Testing compiler.jvmci.CompilerToVM.lookupKlassInPool method
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.LookupTypeTest
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @ignore 8139703
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @run main ClassFileInstaller jdk.vm.ci.hotspot.CompilerToVMHelper
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib/
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.ReadUncompressedOopTest
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build sun.hotspot.WhiteBox
|
||||
|
@ -25,7 +25,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.ResolveConstantInPoolTest
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.ResolveMethodTest
|
||||
|
@ -25,7 +25,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @summary Testing compiler.jvmci.CompilerToVM.resolveTypeInPool method
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary /test/lib/
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.compilerToVM.ShouldDebugNonSafepointsTest
|
||||
|
@ -25,7 +25,7 @@
|
||||
/**
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /test/lib /
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build sun.hotspot.WhiteBox
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile CodeInstallerTest.java
|
||||
* @run junit/othervm -da:jdk.vm.ci... -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI compiler.jvmci.errors.TestInvalidCompilationResult
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile CodeInstallerTest.java
|
||||
* @run junit/othervm -da:jdk.vm.ci... -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI compiler.jvmci.errors.TestInvalidDebugInfo
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile CodeInstallerTest.java
|
||||
* @run junit/othervm -da:jdk.vm.ci... -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI compiler.jvmci.errors.TestInvalidOopMap
|
||||
*/
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary
|
||||
* @compile ./MetaAccessWrapper.java
|
||||
* @build compiler.jvmci.common.JVMCIHelpers
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library / /testlibrary
|
||||
* @compile ../common/CompilerToVMHelper.java
|
||||
* @build compiler.jvmci.common.JVMCIHelpers
|
||||
|
@ -24,7 +24,7 @@
|
||||
/*
|
||||
* @test
|
||||
* @bug 8136421
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @library /testlibrary /
|
||||
* @build compiler.jvmci.common.JVMCIHelpers
|
||||
* compiler.jvmci.events.JvmciShutdownEventListener
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @run junit jdk.vm.ci.options.test.NestedBooleanOptionValueTest
|
||||
*/
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @run junit jdk.vm.ci.options.test.TestOptionValue
|
||||
*/
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile ConstantTest.java FieldUniverse.java TypeUniverse.java TestMetaAccessProvider.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.ConstantTest
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile RedefineClassTest.java TypeUniverse.java TestMetaAccessProvider.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.RedefineClassTest
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.ResolvedJavaTypeResolveConcreteMethodTest
|
||||
*/
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.ResolvedJavaTypeResolveMethodTest
|
||||
*/
|
||||
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile TestConstantReflectionProvider.java TypeUniverse.java TestMetaAccessProvider.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestConstantReflectionProvider
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile TestJavaField.java FieldUniverse.java TypeUniverse.java TestMetaAccessProvider.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestJavaField
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile TestJavaMethod.java MethodUniverse.java TypeUniverse.java TestMetaAccessProvider.java NameAndSignature.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestJavaMethod
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile TestJavaType.java TypeUniverse.java TestMetaAccessProvider.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestJavaType
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile TestMetaAccessProvider.java TypeUniverse.java TestMetaAccessProvider.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestMetaAccessProvider
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile TestResolvedJavaField.java FieldUniverse.java TypeUniverse.java TestMetaAccessProvider.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestResolvedJavaField
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile TestResolvedJavaMethod.java MethodUniverse.java TypeUniverse.java TestMetaAccessProvider.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestResolvedJavaMethod
|
||||
*/
|
||||
|
@ -23,7 +23,7 @@
|
||||
|
||||
/**
|
||||
* @test
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9") & os.arch != "aarch64"
|
||||
* @requires (os.simpleArch == "x64" | os.simpleArch == "sparcv9" | os.simpleArch == "aarch64")
|
||||
* @compile TestResolvedJavaType.java TypeUniverse.java TestMetaAccessProvider.java NameAndSignature.java
|
||||
* @run junit/othervm -XX:+UnlockExperimentalVMOptions -XX:+EnableJVMCI jdk.vm.ci.runtime.test.TestResolvedJavaType
|
||||
*/
|
||||
|
Loading…
Reference in New Issue
Block a user