66 ins_pipe(ialu_reg_mem);
67 %}
68
69 instruct compareAndSwapP_shenandoah(rRegI res,
70 memory mem_ptr,
71 rRegP tmp1, rRegP tmp2,
72 rax_RegP oldval, rRegP newval,
73 rFlagsReg cr)
74 %{
75 predicate(VM_Version::supports_cx8());
76 match(Set res (ShenandoahCompareAndSwapP mem_ptr (Binary oldval newval)));
77 match(Set res (ShenandoahWeakCompareAndSwapP mem_ptr (Binary oldval newval)));
78 effect(TEMP tmp1, TEMP tmp2, KILL cr, KILL oldval);
79
80 format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
81
82 ins_encode %{
83 ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
84 $res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
85 false, // swap
86 false, $tmp1$$Register, $tmp2$$Register
87 );
88 %}
89 ins_pipe( pipe_cmpxchg );
90 %}
91
92 instruct compareAndSwapN_shenandoah(rRegI res,
93 memory mem_ptr,
94 rRegP tmp1, rRegP tmp2,
95 rax_RegN oldval, rRegN newval,
96 rFlagsReg cr) %{
97 match(Set res (ShenandoahCompareAndSwapN mem_ptr (Binary oldval newval)));
98 match(Set res (ShenandoahWeakCompareAndSwapN mem_ptr (Binary oldval newval)));
99 effect(TEMP tmp1, TEMP tmp2, KILL cr, KILL oldval);
100
101 format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
102
103 ins_encode %{
104 ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
105 $res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
106 false, // swap
107 false, $tmp1$$Register, $tmp2$$Register
108 );
109 %}
110 ins_pipe( pipe_cmpxchg );
111 %}
112
113 instruct compareAndExchangeN_shenandoah(memory mem_ptr,
114 rax_RegN oldval, rRegN newval,
115 rRegP tmp1, rRegP tmp2,
116 rFlagsReg cr) %{
117 match(Set oldval (ShenandoahCompareAndExchangeN mem_ptr (Binary oldval newval)));
118 effect(TEMP tmp1, TEMP tmp2, KILL cr);
119
120 format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
121
122 ins_encode %{
123 ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
124 NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
125 true, // exchange
126 false, $tmp1$$Register, $tmp2$$Register
127 );
128 %}
129 ins_pipe( pipe_cmpxchg );
130 %}
131
132 instruct compareAndExchangeP_shenandoah(memory mem_ptr,
133 rax_RegP oldval, rRegP newval,
134 rRegP tmp1, rRegP tmp2,
135 rFlagsReg cr)
136 %{
137 predicate(VM_Version::supports_cx8());
138 match(Set oldval (ShenandoahCompareAndExchangeP mem_ptr (Binary oldval newval)));
139 effect(KILL cr, TEMP tmp1, TEMP tmp2);
140 ins_cost(1000);
141
142 format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
143
144 ins_encode %{
145 ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
146 NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
147 true, // exchange
148 false, $tmp1$$Register, $tmp2$$Register
149 );
150 %}
151 ins_pipe( pipe_cmpxchg );
152 %}
|
66 ins_pipe(ialu_reg_mem);
67 %}
68
69 instruct compareAndSwapP_shenandoah(rRegI res,
70 memory mem_ptr,
71 rRegP tmp1, rRegP tmp2,
72 rax_RegP oldval, rRegP newval,
73 rFlagsReg cr)
74 %{
75 predicate(VM_Version::supports_cx8());
76 match(Set res (ShenandoahCompareAndSwapP mem_ptr (Binary oldval newval)));
77 match(Set res (ShenandoahWeakCompareAndSwapP mem_ptr (Binary oldval newval)));
78 effect(TEMP tmp1, TEMP tmp2, KILL cr, KILL oldval);
79
80 format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
81
82 ins_encode %{
83 ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
84 $res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
85 false, // swap
86 $tmp1$$Register, $tmp2$$Register
87 );
88 %}
89 ins_pipe( pipe_cmpxchg );
90 %}
91
92 instruct compareAndSwapN_shenandoah(rRegI res,
93 memory mem_ptr,
94 rRegP tmp1, rRegP tmp2,
95 rax_RegN oldval, rRegN newval,
96 rFlagsReg cr) %{
97 match(Set res (ShenandoahCompareAndSwapN mem_ptr (Binary oldval newval)));
98 match(Set res (ShenandoahWeakCompareAndSwapN mem_ptr (Binary oldval newval)));
99 effect(TEMP tmp1, TEMP tmp2, KILL cr, KILL oldval);
100
101 format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
102
103 ins_encode %{
104 ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
105 $res$$Register, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
106 false, // swap
107 $tmp1$$Register, $tmp2$$Register
108 );
109 %}
110 ins_pipe( pipe_cmpxchg );
111 %}
112
113 instruct compareAndExchangeN_shenandoah(memory mem_ptr,
114 rax_RegN oldval, rRegN newval,
115 rRegP tmp1, rRegP tmp2,
116 rFlagsReg cr) %{
117 match(Set oldval (ShenandoahCompareAndExchangeN mem_ptr (Binary oldval newval)));
118 effect(TEMP tmp1, TEMP tmp2, KILL cr);
119
120 format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
121
122 ins_encode %{
123 ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
124 NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
125 true, // exchange
126 $tmp1$$Register, $tmp2$$Register
127 );
128 %}
129 ins_pipe( pipe_cmpxchg );
130 %}
131
132 instruct compareAndExchangeP_shenandoah(memory mem_ptr,
133 rax_RegP oldval, rRegP newval,
134 rRegP tmp1, rRegP tmp2,
135 rFlagsReg cr)
136 %{
137 predicate(VM_Version::supports_cx8());
138 match(Set oldval (ShenandoahCompareAndExchangeP mem_ptr (Binary oldval newval)));
139 effect(KILL cr, TEMP tmp1, TEMP tmp2);
140 ins_cost(1000);
141
142 format %{ "shenandoah_cas_oop $mem_ptr,$newval" %}
143
144 ins_encode %{
145 ShenandoahBarrierSet::assembler()->cmpxchg_oop(&_masm,
146 NULL, $mem_ptr$$Address, $oldval$$Register, $newval$$Register,
147 true, // exchange
148 $tmp1$$Register, $tmp2$$Register
149 );
150 %}
151 ins_pipe( pipe_cmpxchg );
152 %}
|