< prev index next >

src/cpu/x86/vm/x86_64.ad

Print this page




6386   ins_encode %{
6387     __ movl($dst$$Register, $src$$Register);
6388   %}
6389   ins_pipe(ialu_reg_reg); // XXX
6390 %}
6391 
6392 // Convert compressed oop into int for vectors alignment masking
6393 // in case of 32bit oops (heap < 4Gb).
6394 instruct convN2I(rRegI dst, rRegN src)
6395 %{
6396   predicate(Universe::narrow_oop_shift() == 0);
6397   match(Set dst (ConvL2I (CastP2X (DecodeN src))));
6398 
6399   format %{ "movl    $dst, $src\t# compressed ptr -> int" %}
6400   ins_encode %{
6401     __ movl($dst$$Register, $src$$Register);
6402   %}
6403   ins_pipe(ialu_reg_reg); // XXX
6404 %}
6405 



































6406 // Convert oop pointer into compressed form
6407 instruct encodeHeapOop(rRegN dst, rRegP src, rFlagsReg cr) %{
6408   predicate(n->bottom_type()->make_ptr()->ptr() != TypePtr::NotNull);
6409   match(Set dst (EncodeP src));
6410   effect(KILL cr);
6411   format %{ "encode_heap_oop $dst,$src" %}
6412   ins_encode %{
6413     Register s = $src$$Register;
6414     Register d = $dst$$Register;
6415     if (s != d) {
6416       __ movq(d, s);
6417     }
6418     __ encode_heap_oop(d);
6419   %}
6420   ins_pipe(ialu_reg_long);
6421 %}
6422 
6423 instruct encodeHeapOop_not_null(rRegN dst, rRegP src, rFlagsReg cr) %{
6424   predicate(n->bottom_type()->make_ptr()->ptr() == TypePtr::NotNull);
6425   match(Set dst (EncodeP src));




6386   ins_encode %{
6387     __ movl($dst$$Register, $src$$Register);
6388   %}
6389   ins_pipe(ialu_reg_reg); // XXX
6390 %}
6391 
6392 // Convert compressed oop into int for vectors alignment masking
6393 // in case of 32bit oops (heap < 4Gb).
6394 instruct convN2I(rRegI dst, rRegN src)
6395 %{
6396   predicate(Universe::narrow_oop_shift() == 0);
6397   match(Set dst (ConvL2I (CastP2X (DecodeN src))));
6398 
6399   format %{ "movl    $dst, $src\t# compressed ptr -> int" %}
6400   ins_encode %{
6401     __ movl($dst$$Register, $src$$Register);
6402   %}
6403   ins_pipe(ialu_reg_reg); // XXX
6404 %}
6405 
6406 instruct shenandoahRB(rRegP dst, rRegP src, rFlagsReg cr) %{
6407   match(Set dst (ShenandoahReadBarrier src));
6408   effect(DEF dst, USE src);
6409   ins_cost(125); // XXX
6410   format %{ "shenandoah_rb $dst,$src" %}
6411   ins_encode %{
6412     Register s = $src$$Register;
6413     Register d = $dst$$Register;
6414     __ movptr(d, Address(s, -8));
6415   %}
6416   ins_pipe(ialu_reg_mem);
6417 %}
6418 
6419 instruct shenandoahWB(rax_RegP dst, rdi_RegP src, rFlagsReg cr) %{
6420   match(Set dst (ShenandoahWriteBarrier src));
6421   effect(DEF dst, USE_KILL src, KILL cr);
6422   ins_cost(300); // XXX
6423   format %{ "shenandoah_wb $dst,$src" %}
6424   ins_encode %{
6425     Label done;
6426     Register s = $src$$Register;
6427     Register d = $dst$$Register;
6428     assert(s == rdi, "need rdi");
6429     assert(d == rax, "result in rax");
6430     Address evacuation_in_progress = Address(r15_thread, in_bytes(JavaThread::evacuation_in_progress_offset()));
6431     __ movptr(d, Address(s, -8));
6432     __ cmpb(evacuation_in_progress, 0);
6433     __ movptr(d, Address(s, -8));
6434     __ jcc(Assembler::equal, done);
6435     __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, StubRoutines::x86::shenandoah_wb())));
6436     __ bind(done);
6437   %}
6438   ins_pipe(pipe_slow);
6439 %}
6440 
6441 // Convert oop pointer into compressed form
6442 instruct encodeHeapOop(rRegN dst, rRegP src, rFlagsReg cr) %{
6443   predicate(n->bottom_type()->make_ptr()->ptr() != TypePtr::NotNull);
6444   match(Set dst (EncodeP src));
6445   effect(KILL cr);
6446   format %{ "encode_heap_oop $dst,$src" %}
6447   ins_encode %{
6448     Register s = $src$$Register;
6449     Register d = $dst$$Register;
6450     if (s != d) {
6451       __ movq(d, s);
6452     }
6453     __ encode_heap_oop(d);
6454   %}
6455   ins_pipe(ialu_reg_long);
6456 %}
6457 
6458 instruct encodeHeapOop_not_null(rRegN dst, rRegP src, rFlagsReg cr) %{
6459   predicate(n->bottom_type()->make_ptr()->ptr() == TypePtr::NotNull);
6460   match(Set dst (EncodeP src));


< prev index next >