< prev index next > src/hotspot/cpu/x86/x86_64.ad
Print this page
%}
// Register masks
source_hpp %{
-
extern RegMask _ANY_REG_mask;
extern RegMask _PTR_REG_mask;
extern RegMask _PTR_REG_NO_RBP_mask;
extern RegMask _PTR_NO_RAX_REG_mask;
extern RegMask _PTR_NO_RAX_RBX_REG_mask;
int framesize = C->output()->frame_size_in_bytes();
int bangsize = C->output()->bang_size_in_bytes();
if (C->clinit_barrier_on_entry()) {
assert(VM_Version::supports_fast_class_init_checks(), "sanity");
- assert(!C->method()->holder()->is_not_initialized(), "initialization should have been started");
+ assert(!C->method()->holder()->is_not_initialized() || C->do_clinit_barriers(), "initialization should have been started");
Label L_skip_barrier;
Register klass = rscratch1;
__ mov_metadata(klass, C->method()->holder()->constant_encoding());
assert(off1 - off0 == clear_avx_size(), "correct size prediction");
%}
enc_class Java_To_Runtime(method meth) %{
// No relocation needed
- __ mov64(r10, (int64_t) $meth$$method);
+ if (SCCache::is_on_for_write()) {
+ // Created runtime_call_type relocation when caching code
+ __ lea(r10, RuntimeAddress((address)$meth$$method));
+ } else {
+ __ mov64(r10, (int64_t) $meth$$method);
+ }
__ call(r10);
__ post_call_nop();
%}
enc_class Java_Static_Call(method meth)
format %{ %}
interface(CONST_INTER);
%}
+ // AOT Runtime Constants Address
+ operand immAOTRuntimeConstantsAddress()
+ %{
+ // Check if the address is in the range of AOT Runtime Constants
+ predicate(AOTRuntimeConstants::contains((address)(n->get_ptr())));
+ match(ConP);
+
+ op_cost(0);
+ format %{ %}
+ interface(CONST_INTER);
+ %}
+
operand kReg()
%{
constraint(ALLOC_IN_RC(vectmask_reg));
match(RegVectMask);
format %{%}
__ movdbl($dst$$XMMRegister, $mem$$Address);
%}
ins_pipe(pipe_slow); // XXX
%}
+ instruct loadAOTRCAddress(rRegP dst, immAOTRuntimeConstantsAddress con)
+ %{
+ match(Set dst con);
+
+ format %{ "leaq $dst, $con\t# AOT Runtime Constants Address" %}
+
+ ins_encode %{
+ __ load_aotrc_address($dst$$Register, (address)$con$$constant);
+ %}
+
+ ins_pipe(ialu_reg_fat);
+ %}
+
// max = java.lang.Math.max(float a, float b)
instruct maxF_reg(legRegF dst, legRegF a, legRegF b, legRegF tmp, legRegF atmp, legRegF btmp) %{
predicate(UseAVX > 0 && !VLoopReductions::is_reduction(n));
match(Set dst (MaxF a b));
effect(USE a, USE b, TEMP tmp, TEMP atmp, TEMP btmp);
< prev index next >