src/cpu/sparc/vm/sparc.ad

Print this page




2761 
2762     Register Roop  = reg_to_register_object($oop$$reg);
2763     Register Rbox  = reg_to_register_object($box$$reg);
2764     Register Rscratch = reg_to_register_object($scratch$$reg);
2765     Register Rmark =    reg_to_register_object($scratch2$$reg);
2766 
2767     assert(Roop  != Rscratch, "");
2768     assert(Roop  != Rmark, "");
2769     assert(Rbox  != Rscratch, "");
2770     assert(Rbox  != Rmark, "");
2771 
2772     __ compiler_unlock_object(Roop, Rmark, Rbox, Rscratch, UseBiasedLocking && !UseOptoBiasInlining);
2773   %}
2774 
2775   enc_class enc_cas( iRegP mem, iRegP old, iRegP new ) %{
2776     MacroAssembler _masm(&cbuf);
2777     Register Rmem = reg_to_register_object($mem$$reg);
2778     Register Rold = reg_to_register_object($old$$reg);
2779     Register Rnew = reg_to_register_object($new$$reg);
2780 
2781     // casx_under_lock picks 1 of 3 encodings:
2782     // For 32-bit pointers you get a 32-bit CAS
2783     // For 64-bit pointers you get a 64-bit CASX
2784     __ casn(Rmem, Rold, Rnew); // Swap(*Rmem,Rnew) if *Rmem == Rold
2785     __ cmp( Rold, Rnew );
2786   %}
2787 
2788   enc_class enc_casx( iRegP mem, iRegL old, iRegL new) %{
2789     Register Rmem = reg_to_register_object($mem$$reg);
2790     Register Rold = reg_to_register_object($old$$reg);
2791     Register Rnew = reg_to_register_object($new$$reg);
2792 
2793     MacroAssembler _masm(&cbuf);
2794     __ mov(Rnew, O7);
2795     __ casx(Rmem, Rold, O7);
2796     __ cmp( Rold, O7 );
2797   %}
2798 
2799   // raw int cas, used for compareAndSwap
2800   enc_class enc_casi( iRegP mem, iRegL old, iRegL new) %{
2801     Register Rmem = reg_to_register_object($mem$$reg);
2802     Register Rold = reg_to_register_object($old$$reg);
2803     Register Rnew = reg_to_register_object($new$$reg);
2804 




2761 
2762     Register Roop  = reg_to_register_object($oop$$reg);
2763     Register Rbox  = reg_to_register_object($box$$reg);
2764     Register Rscratch = reg_to_register_object($scratch$$reg);
2765     Register Rmark =    reg_to_register_object($scratch2$$reg);
2766 
2767     assert(Roop  != Rscratch, "");
2768     assert(Roop  != Rmark, "");
2769     assert(Rbox  != Rscratch, "");
2770     assert(Rbox  != Rmark, "");
2771 
2772     __ compiler_unlock_object(Roop, Rmark, Rbox, Rscratch, UseBiasedLocking && !UseOptoBiasInlining);
2773   %}
2774 
2775   enc_class enc_cas( iRegP mem, iRegP old, iRegP new ) %{
2776     MacroAssembler _masm(&cbuf);
2777     Register Rmem = reg_to_register_object($mem$$reg);
2778     Register Rold = reg_to_register_object($old$$reg);
2779     Register Rnew = reg_to_register_object($new$$reg);
2780 
2781     __ cas_ptr(Rmem, Rold, Rnew); // Swap(*Rmem,Rnew) if *Rmem == Rold



2782     __ cmp( Rold, Rnew );
2783   %}
2784 
2785   enc_class enc_casx( iRegP mem, iRegL old, iRegL new) %{
2786     Register Rmem = reg_to_register_object($mem$$reg);
2787     Register Rold = reg_to_register_object($old$$reg);
2788     Register Rnew = reg_to_register_object($new$$reg);
2789 
2790     MacroAssembler _masm(&cbuf);
2791     __ mov(Rnew, O7);
2792     __ casx(Rmem, Rold, O7);
2793     __ cmp( Rold, O7 );
2794   %}
2795 
2796   // raw int cas, used for compareAndSwap
2797   enc_class enc_casi( iRegP mem, iRegL old, iRegL new) %{
2798     Register Rmem = reg_to_register_object($mem$$reg);
2799     Register Rold = reg_to_register_object($old$$reg);
2800     Register Rnew = reg_to_register_object($new$$reg);
2801