c1_Runtime1_sparc.cpp revision 3051
1472N/A * or visit www.oracle.com if you need additional information or have any
1879N/A#include "precompiled.hpp"
1879N/A#include "c1/c1_Defs.hpp"
1879N/A#include "c1/c1_MacroAssembler.hpp"
1879N/A#include "c1/c1_Runtime1.hpp"
1879N/A#include "interpreter/interpreter.hpp"
1879N/A#include "nativeInst_sparc.hpp"
1879N/A#include "oops/compiledICHolderOop.hpp"
1879N/A#include "oops/oop.inline.hpp"
1879N/A#include "prims/jvmtiExport.hpp"
1879N/A#include "register_sparc.hpp"
1879N/A#include "runtime/sharedRuntime.hpp"
1879N/A#include "runtime/signature.hpp"
1879N/A#include "runtime/vframeArray.hpp"
1879N/A#include "vmreg_sparc.inline.hpp"
0N/Aint StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry_point, int number_of_arguments) {
0N/A if (!VerifyThread) {
0N/A return call_offset;
0N/Aint StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1) {
0N/Aint StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2) {
0N/Aint StubAssembler::call_RT(Register oop_result1, Register oop_result2, address entry, Register arg1, Register arg2, Register arg3) {
0N/Astatic int reg_save_size_in_words;
0N/A if (save_fpu_registers) {
0N/A // Record volatile registers as callee-save values in an OopMap so their save locations will be
0N/A // propagated to the caller frame's RegisterMap during StackFrameStream construction (needed for
0N/A if (save_fpu_registers) {
0N/A if (restore_fpu_registers) {
0N/A // compute word offsets from SP at which live (non-windowed) registers are captured by stub routines
0N/AOopMapSet* Runtime1::generate_exception_throw(StubAssembler* sasm, address target, bool has_argument) {
0N/A int call_offset;
0N/A if (!has_argument) {
0N/A int call_offset;
0N/A const bool must_gc_arguments = true;
0N/A const bool dont_gc_arguments = false;
0N/A case forward_exception_id:
0N/A case new_instance_id:
0N/A case fast_new_instance_id:
2664N/A __ cmp_and_br_short(G3_t1, instanceKlass::fully_initialized, Assembler::notEqual, Assembler::pn, slow_path);
0N/A case counter_overflow_id:
1703N/A oop_maps = generate_stub_call(sasm, noreg, CAST_FROM_FN_PTR(address, counter_overflow), G4, G5);
0N/A case new_type_array_id:
0N/A case new_object_array_id:
2664N/A __ cmp_and_br_short(G4_length, G3_t1, Assembler::greaterUnsigned, Assembler::pn, slow_path);
0N/A oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_type_array), G5_klass, G4_length);
0N/A oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_object_array), G5_klass, G4_length);
0N/A case new_multi_array_id:
0N/A oop_maps = generate_stub_call(sasm, I0, CAST_FROM_FN_PTR(address, new_multi_array), I0, I1, I2);
0N/A case register_finalizer_id:
0N/A oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_range_check_exception), true);
0N/A case throw_index_exception_id:
0N/A oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_index_exception), true);
0N/A case throw_div0_exception_id:
0N/A oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_div0_exception), false);
0N/A oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_null_pointer_exception), false);
0N/A case handle_exception_id:
0N/A case unwind_exception_id:
0N/A __ call_VM_leaf(L7_thread_cache, CAST_FROM_FN_PTR(address, SharedRuntime::exception_handler_for_return_address),
1484N/A __ delayed()->movcc(Assembler::notZero, false, Assembler::icc, L7_mh_SP_save, SP); // Restore SP if required.
2053N/A oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_array_store_exception), true);
0N/A oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_class_cast_exception), true);
0N/A oop_maps = generate_exception_throw(sasm, CAST_FROM_FN_PTR(address, throw_incompatible_class_change_error), false);
0N/A case slow_subtype_check_id:
0N/A case monitorenter_nofpu_id:
0N/A case monitorenter_id:
0N/A case monitorexit_nofpu_id:
0N/A case monitorexit_id:
2886N/A case deoptimize_id:
0N/A case access_field_patching_id:
0N/A case load_klass_patching_id:
0N/A case dtrace_object_alloc_id:
342N/A case g1_pre_barrier_slow_id:
342N/A int satb_q_buf_byte_offset =
2168N/A case forward_exception_id:
2168N/A case handle_exception_id:
2168N/A default: ShouldNotReachHere();
0N/A int call_offset = __ call_RT(noreg, noreg, CAST_FROM_FN_PTR(address, exception_handler_for_pc));
2168N/A case forward_exception_id:
2168N/A case handle_exception_id:
2168N/A __ delayed()->movcc(Assembler::notZero, false, Assembler::icc, L7_mh_SP_save, SP); // Restore SP if required.
2168N/A default: ShouldNotReachHere();