< prev index next >

src/hotspot/cpu/aarch64/aarch64.ad

Print this page




9402   ins_cost(INSN_COST);
9403   format %{ "mov dst, $src\t# compressed ptr -> int" %}
9404   ins_encode %{
9405     __ movw($dst$$Register, $src$$Register);
9406   %}
9407 
9408   ins_pipe(ialu_reg);
9409 %}
9410 
9411 instruct shenandoahRB(iRegPNoSp dst, iRegP src, rFlagsReg cr) %{
9412   match(Set dst (ShenandoahReadBarrier src));
9413   format %{ "shenandoah_rb $dst,$src" %}
9414   ins_encode %{
9415     Register s = $src$$Register;
9416     Register d = $dst$$Register;
9417     __ ldr(d, Address(s, BrooksPointer::byte_offset()));
9418   %}
9419   ins_pipe(pipe_class_memory);
9420 %}
9421 
9422 instruct shenandoahWB(iRegP_R0 dst, iRegP src, rFlagsReg cr) %{
9423   match(Set dst (ShenandoahWriteBarrier src));
9424   effect(KILL cr);
9425 
9426   format %{ "shenandoah_wb $dst,$src" %}
9427   ins_encode %{
9428 #if INCLUDE_SHENANDOAHGC
9429     Label done;
9430     Register s = $src$$Register;
9431     Register d = $dst$$Register;
9432     assert(d == r0, "result in r0");
9433     __ block_comment("Shenandoah write barrier {");
9434     // We need that first read barrier in order to trigger a SEGV/NPE on incoming NULL.
9435     // Also, it brings s into d in preparation for the call to shenandoah_write_barrier().
9436     __ ldr(d, Address(s, BrooksPointer::byte_offset()));
9437     __ shenandoah_write_barrier(d);
9438     __ block_comment("} Shenandoah write barrier");
9439 #else
9440     ShouldNotReachHere();
9441 #endif
9442   %}
9443   ins_pipe(pipe_slow);
9444 %}
9445 
9446 
9447 // Convert oop pointer into compressed form
9448 instruct encodeHeapOop(iRegNNoSp dst, iRegP src, rFlagsReg cr) %{
9449   predicate(n->bottom_type()->make_ptr()->ptr() != TypePtr::NotNull);
9450   match(Set dst (EncodeP src));
9451   effect(KILL cr);
9452   ins_cost(INSN_COST * 3);
9453   format %{ "encode_heap_oop $dst, $src" %}
9454   ins_encode %{
9455     Register s = $src$$Register;
9456     Register d = $dst$$Register;
9457     __ encode_heap_oop(d, s);
9458   %}
9459   ins_pipe(ialu_reg);
9460 %}
9461 
9462 instruct encodeHeapOop_not_null(iRegNNoSp dst, iRegP src, rFlagsReg cr) %{
9463   predicate(n->bottom_type()->make_ptr()->ptr() == TypePtr::NotNull);
9464   match(Set dst (EncodeP src));
9465   ins_cost(INSN_COST * 3);




9402   ins_cost(INSN_COST);
9403   format %{ "mov dst, $src\t# compressed ptr -> int" %}
9404   ins_encode %{
9405     __ movw($dst$$Register, $src$$Register);
9406   %}
9407 
9408   ins_pipe(ialu_reg);
9409 %}
9410 
9411 instruct shenandoahRB(iRegPNoSp dst, iRegP src, rFlagsReg cr) %{
9412   match(Set dst (ShenandoahReadBarrier src));
9413   format %{ "shenandoah_rb $dst,$src" %}
9414   ins_encode %{
9415     Register s = $src$$Register;
9416     Register d = $dst$$Register;
9417     __ ldr(d, Address(s, BrooksPointer::byte_offset()));
9418   %}
9419   ins_pipe(pipe_class_memory);
9420 %}
9421 
























9422 
9423 // Convert oop pointer into compressed form
9424 instruct encodeHeapOop(iRegNNoSp dst, iRegP src, rFlagsReg cr) %{
9425   predicate(n->bottom_type()->make_ptr()->ptr() != TypePtr::NotNull);
9426   match(Set dst (EncodeP src));
9427   effect(KILL cr);
9428   ins_cost(INSN_COST * 3);
9429   format %{ "encode_heap_oop $dst, $src" %}
9430   ins_encode %{
9431     Register s = $src$$Register;
9432     Register d = $dst$$Register;
9433     __ encode_heap_oop(d, s);
9434   %}
9435   ins_pipe(ialu_reg);
9436 %}
9437 
9438 instruct encodeHeapOop_not_null(iRegNNoSp dst, iRegP src, rFlagsReg cr) %{
9439   predicate(n->bottom_type()->make_ptr()->ptr() == TypePtr::NotNull);
9440   match(Set dst (EncodeP src));
9441   ins_cost(INSN_COST * 3);


< prev index next >