< prev index next >

src/hotspot/cpu/x86/x86_32.ad

Print this page




7298   format %{ "#checkcastPP of $dst" %}
7299   ins_encode( /*empty encoding*/ );
7300   ins_pipe( empty );
7301 %}
7302 
7303 instruct castPP( eRegP dst ) %{
7304   match(Set dst (CastPP dst));
7305   format %{ "#castPP of $dst" %}
7306   ins_encode( /*empty encoding*/ );
7307   ins_pipe( empty );
7308 %}
7309 
7310 instruct castII( rRegI dst ) %{
7311   match(Set dst (CastII dst));
7312   format %{ "#castII of $dst" %}
7313   ins_encode( /*empty encoding*/ );
7314   ins_cost(0);
7315   ins_pipe( empty );
7316 %}
7317 
7318 instruct castLL( rRegL dst ) %{
7319   match(Set dst (CastLL dst));
7320   format %{ "#castLL of $dst" %}
7321   ins_encode( /*empty encoding*/ );
7322   ins_cost(0);
7323   ins_pipe( empty );
7324 %}
7325 
7326 
7327 // Load-locked - same as a regular pointer load when used with compare-swap
7328 instruct loadPLocked(eRegP dst, memory mem) %{
7329   match(Set dst (LoadPLocked mem));
7330 
7331   ins_cost(125);
7332   format %{ "MOV    $dst,$mem\t# Load ptr. locked" %}
7333   opcode(0x8B);
7334   ins_encode( OpcP, RegMem(dst,mem));
7335   ins_pipe( ialu_reg_mem );
7336 %}
7337 
7338 // Conditional-store of the updated heap-top.
7339 // Used during allocation of the shared heap.
7340 // Sets flags (EQ) on success.  Implemented with a CMPXCHG on Intel.
7341 instruct storePConditional( memory heap_top_ptr, eAXRegP oldval, eRegP newval, eFlagsReg cr ) %{
7342   match(Set cr (StorePConditional heap_top_ptr (Binary oldval newval)));
7343   // EAX is killed if there is contention, but then it's also unused.
7344   // In the common case of no contention, EAX holds the new oop address.
7345   format %{ "CMPXCHG $heap_top_ptr,$newval\t# If EAX==$heap_top_ptr Then store $newval into $heap_top_ptr" %}




7298   format %{ "#checkcastPP of $dst" %}
7299   ins_encode( /*empty encoding*/ );
7300   ins_pipe( empty );
7301 %}
7302 
7303 instruct castPP( eRegP dst ) %{
7304   match(Set dst (CastPP dst));
7305   format %{ "#castPP of $dst" %}
7306   ins_encode( /*empty encoding*/ );
7307   ins_pipe( empty );
7308 %}
7309 
7310 instruct castII( rRegI dst ) %{
7311   match(Set dst (CastII dst));
7312   format %{ "#castII of $dst" %}
7313   ins_encode( /*empty encoding*/ );
7314   ins_cost(0);
7315   ins_pipe( empty );
7316 %}
7317 








7318 
7319 // Load-locked - same as a regular pointer load when used with compare-swap
7320 instruct loadPLocked(eRegP dst, memory mem) %{
7321   match(Set dst (LoadPLocked mem));
7322 
7323   ins_cost(125);
7324   format %{ "MOV    $dst,$mem\t# Load ptr. locked" %}
7325   opcode(0x8B);
7326   ins_encode( OpcP, RegMem(dst,mem));
7327   ins_pipe( ialu_reg_mem );
7328 %}
7329 
7330 // Conditional-store of the updated heap-top.
7331 // Used during allocation of the shared heap.
7332 // Sets flags (EQ) on success.  Implemented with a CMPXCHG on Intel.
7333 instruct storePConditional( memory heap_top_ptr, eAXRegP oldval, eRegP newval, eFlagsReg cr ) %{
7334   match(Set cr (StorePConditional heap_top_ptr (Binary oldval newval)));
7335   // EAX is killed if there is contention, but then it's also unused.
7336   // In the common case of no contention, EAX holds the new oop address.
7337   format %{ "CMPXCHG $heap_top_ptr,$newval\t# If EAX==$heap_top_ptr Then store $newval into $heap_top_ptr" %}


< prev index next >