src/cpu/x86/vm/x86_64.ad

Print this page
rev 2892 : 7121140: Allocation paths require explicit memory synchronization operations for RMO systems
Summary: adds store store barrier after initialization of header and body of objects.
Reviewed-by:


7427     }
7428   %}
7429   ins_encode %{
7430     __ membar(Assembler::StoreLoad);
7431   %}
7432   ins_pipe(pipe_slow);
7433 %}
7434 
7435 instruct unnecessary_membar_volatile()
7436 %{
7437   match(MemBarVolatile);
7438   predicate(Matcher::post_store_load_barrier(n));
7439   ins_cost(0);
7440 
7441   size(0);
7442   format %{ "MEMBAR-volatile (unnecessary so empty encoding)" %}
7443   ins_encode();
7444   ins_pipe(empty);
7445 %}
7446 










7447 //----------Move Instructions--------------------------------------------------
7448 
7449 instruct castX2P(rRegP dst, rRegL src)
7450 %{
7451   match(Set dst (CastX2P src));
7452 
7453   format %{ "movq    $dst, $src\t# long->ptr" %}
7454   ins_encode(enc_copy_wide(dst, src));
7455   ins_pipe(ialu_reg_reg); // XXX
7456 %}
7457 
7458 instruct castP2X(rRegL dst, rRegP src)
7459 %{
7460   match(Set dst (CastP2X src));
7461 
7462   format %{ "movq    $dst, $src\t# ptr -> long" %}
7463   ins_encode(enc_copy_wide(dst, src));
7464   ins_pipe(ialu_reg_reg); // XXX
7465 %}
7466 




7427     }
7428   %}
7429   ins_encode %{
7430     __ membar(Assembler::StoreLoad);
7431   %}
7432   ins_pipe(pipe_slow);
7433 %}
7434 
7435 instruct unnecessary_membar_volatile()
7436 %{
7437   match(MemBarVolatile);
7438   predicate(Matcher::post_store_load_barrier(n));
7439   ins_cost(0);
7440 
7441   size(0);
7442   format %{ "MEMBAR-volatile (unnecessary so empty encoding)" %}
7443   ins_encode();
7444   ins_pipe(empty);
7445 %}
7446 
7447 instruct unnecessary_membar_storestore() %{
7448   match(MemBarStoreStore);
7449   ins_cost(0);
7450 
7451   size(0);
7452   format %{ "!MEMBAR-storestore (unnecessary so empty encoding)" %}
7453   ins_encode( );
7454   ins_pipe(empty);
7455 %}
7456 
7457 //----------Move Instructions--------------------------------------------------
7458 
7459 instruct castX2P(rRegP dst, rRegL src)
7460 %{
7461   match(Set dst (CastX2P src));
7462 
7463   format %{ "movq    $dst, $src\t# long->ptr" %}
7464   ins_encode(enc_copy_wide(dst, src));
7465   ins_pipe(ialu_reg_reg); // XXX
7466 %}
7467 
7468 instruct castP2X(rRegL dst, rRegP src)
7469 %{
7470   match(Set dst (CastP2X src));
7471 
7472   format %{ "movq    $dst, $src\t# ptr -> long" %}
7473   ins_encode(enc_copy_wide(dst, src));
7474   ins_pipe(ialu_reg_reg); // XXX
7475 %}
7476