c1_Runtime1_sparc.cpp revision 342
325N/A#include "incls/_c1_Runtime1_sparc.cpp.incl"
325N/Aint StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry_point, int number_of_arguments) {
325N/A if (!VerifyThread) {
bind(L);
return call_offset;
int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1) {
int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2) {
int StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2, Register arg3) {
static int reg_save_size_in_words;
r->as_VMReg());
if (save_fpu_registers) {
r->as_VMReg());
return oop_map;
if (save_fpu_registers) {
if (restore_fpu_registers) {
// compute word offsets from SP at which live (non-windowed) registers are captured by stub routines
sp_offset++;
sp_offset++;
OopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address target, bool has_argument) {
int call_offset;
if (!has_argument) {
return oop_maps;
int call_offset;
return oop_maps;
__ br(Assembler::always, false, Assembler::pt, deopt_blob->unpack_with_reexecution(), relocInfo::runtime_call_type);
return oop_maps;
const bool must_gc_arguments = true;
const bool dont_gc_arguments = false;
switch (id) {
case forward_exception_id:
case new_instance_id:
case fast_new_instance_id:
#ifdef ASSERT
__ ld(G5_klass, klassOopDesc::header_size() * HeapWordSize + Klass::layout_helper_offset_in_bytes(), G1_obj_size);
__ ld(G5_klass, klassOopDesc::header_size() * HeapWordSize + Klass::layout_helper_offset_in_bytes(), G1_obj_size);
#ifdef TIERED
case counter_overflow_id:
case new_type_array_id:
case new_object_array_id:
#ifdef ASSERT
oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_type_array), G5_klass, G4_length);
oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_object_array), G5_klass, G4_length);
case new_multi_array_id:
case register_finalizer_id:
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_range_check_exception), true);
case throw_index_exception_id:
case throw_div0_exception_id:
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_null_pointer_exception), false);
case handle_exception_id:
case unwind_exception_id:
__ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address),
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_array_store_exception), false);
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_class_cast_exception), true);
oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_incompatible_class_change_error), false);
case slow_subtype_check_id:
case monitorenter_nofpu_id:
case monitorenter_id:
case monitorexit_nofpu_id:
case monitorexit_id:
case access_field_patching_id:
case load_klass_patching_id:
case jvmti_exception_throw_id:
oop_maps = generate_stub_call(sasm, noreg, CAST_FROM_FN_PTR(address, Runtime1::post_jvmti_exception_throw), I0);
case dtrace_object_alloc_id:
#ifndef SERIALGC
case g1_pre_barrier_slow_id:
int satb_q_index_byte_offset =
int satb_q_buf_byte_offset =
case g1_post_barrier_slow_id:
#ifdef _LP64
return oop_maps;
void Runtime1::generate_handle_exception(StubAssembler* sasm, OopMapSet* oop_maps, OopMap* oop_map, bool) {