src/cpu/aarch64/vm/aarch64.ad
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hotspot Sdiff src/cpu/aarch64/vm

src/cpu/aarch64/vm/aarch64.ad

Print this page




4640 
4641      Label miss;
4642      MacroAssembler _masm(&cbuf);
4643      __ check_klass_subtype_slow_path(sub_reg, super_reg, temp_reg, result_reg,
4644                                      NULL, &miss,
4645                                      /*set_cond_codes:*/ true);
4646      if ($primary) {
4647        __ mov(result_reg, zr);
4648      }
4649      __ bind(miss);
4650   %}
4651 
4652   enc_class aarch64_enc_java_static_call(method meth) %{
4653     MacroAssembler _masm(&cbuf);
4654 
4655     address addr = (address)$meth$$method;
4656     address call;
4657     if (!_method) {
4658       // A call to a runtime wrapper, e.g. new, new_typeArray_Java, uncommon_trap.
4659       call = __ trampoline_call(Address(addr, relocInfo::runtime_call_type), &cbuf);
4660     } else if (_optimized_virtual) {
4661       call = __ trampoline_call(Address(addr, relocInfo::opt_virtual_call_type), &cbuf);
4662     } else {
4663       call = __ trampoline_call(Address(addr, relocInfo::static_call_type), &cbuf);
4664     }
4665     if (call == NULL) {
4666       ciEnv::current()->record_failure("CodeCache is full"); 
4667       return;
4668     }
4669 
4670     if (_method) {
4671       // Emit stub for static call
4672       address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
4673       if (stub == NULL) {
4674         ciEnv::current()->record_failure("CodeCache is full"); 
4675         return;
4676       }
4677     }




4678   %}
4679 
4680   enc_class aarch64_enc_java_dynamic_call(method meth) %{
4681     MacroAssembler _masm(&cbuf);
4682     address call = __ ic_call((address)$meth$$method);

4683     if (call == NULL) {
4684       ciEnv::current()->record_failure("CodeCache is full"); 
4685       return;
4686     }
4687   %}
4688 
4689   enc_class aarch64_enc_call_epilog() %{
4690     MacroAssembler _masm(&cbuf);
4691     if (VerifyStackAtCalls) {
4692       // Check that stack depth is unchanged: find majik cookie on stack
4693       __ call_Unimplemented();
4694     }
4695   %}
4696 
4697   enc_class aarch64_enc_java_to_runtime(method meth) %{
4698     MacroAssembler _masm(&cbuf);
4699 
4700     // some calls to generated routines (arraycopy code) are scheduled
4701     // by C2 as runtime calls. if so we can call them using a br (they
4702     // will be in a reachable segment) otherwise we have to use a blrt




4640 
4641      Label miss;
4642      MacroAssembler _masm(&cbuf);
4643      __ check_klass_subtype_slow_path(sub_reg, super_reg, temp_reg, result_reg,
4644                                      NULL, &miss,
4645                                      /*set_cond_codes:*/ true);
4646      if ($primary) {
4647        __ mov(result_reg, zr);
4648      }
4649      __ bind(miss);
4650   %}
4651 
4652   enc_class aarch64_enc_java_static_call(method meth) %{
4653     MacroAssembler _masm(&cbuf);
4654 
4655     address addr = (address)$meth$$method;
4656     address call;
4657     if (!_method) {
4658       // A call to a runtime wrapper, e.g. new, new_typeArray_Java, uncommon_trap.
4659       call = __ trampoline_call(Address(addr, relocInfo::runtime_call_type), &cbuf);


4660     } else {
4661       int method_index = resolved_method_index(cbuf);
4662       RelocationHolder rspec = _optimized_virtual ? opt_virtual_call_Relocation::spec(method_index)
4663                                                   : static_call_Relocation::spec(method_index);
4664       call = __ trampoline_call(Address(addr, rspec), &cbuf);


4665 

4666       // Emit stub for static call
4667       address stub = CompiledStaticCall::emit_to_interp_stub(cbuf);
4668       if (stub == NULL) {
4669         ciEnv::current()->record_failure("CodeCache is full");
4670         return;
4671       }
4672     }
4673     if (call == NULL) {
4674       ciEnv::current()->record_failure("CodeCache is full");
4675       return;
4676     }
4677   %}
4678 
4679   enc_class aarch64_enc_java_dynamic_call(method meth) %{
4680     MacroAssembler _masm(&cbuf);
4681     int method_index = resolved_method_index(cbuf);
4682     address call = __ ic_call((address)$meth$$method, method_index);
4683     if (call == NULL) {
4684       ciEnv::current()->record_failure("CodeCache is full");
4685       return;
4686     }
4687   %}
4688 
4689   enc_class aarch64_enc_call_epilog() %{
4690     MacroAssembler _masm(&cbuf);
4691     if (VerifyStackAtCalls) {
4692       // Check that stack depth is unchanged: find majik cookie on stack
4693       __ call_Unimplemented();
4694     }
4695   %}
4696 
4697   enc_class aarch64_enc_java_to_runtime(method meth) %{
4698     MacroAssembler _masm(&cbuf);
4699 
4700     // some calls to generated routines (arraycopy code) are scheduled
4701     // by C2 as runtime calls. if so we can call them using a br (they
4702     // will be in a reachable segment) otherwise we have to use a blrt


src/cpu/aarch64/vm/aarch64.ad
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File