@@ -90,11 +90,11 @@ static void z_store_barrier(MacroAssembler* masm, const MachNode* node, Address
9090%}
9191
9292// Load Pointer
93- instruct zLoadP(iRegPNoSp dst, memory mem, iRegPNoSp tmp)
93+ instruct zLoadP(iRegPNoSp dst, memory mem, iRegPNoSp tmp, rFlagsReg cr )
9494%{
9595 match(Set dst (LoadP mem));
9696 predicate(UseZGC && ZGenerational && n->as_Load()->barrier_data() != 0);
97- effect(TEMP dst, TEMP tmp);
97+ effect(TEMP dst, TEMP tmp, KILL cr );
9898
9999 ins_cost(4 * DEFAULT_COST);
100100
@@ -110,11 +110,11 @@ instruct zLoadP(iRegPNoSp dst, memory mem, iRegPNoSp tmp)
110110%}
111111
112112// Store Pointer
113- instruct zStoreP(memory mem, iRegP src, iRegPNoSp tmp1, iRegPNoSp tmp2)
113+ instruct zStoreP(memory mem, iRegP src, iRegPNoSp tmp1, iRegPNoSp tmp2, rFlagsReg cr )
114114%{
115115 predicate(UseZGC && ZGenerational && n->as_Store()->barrier_data() != 0);
116116 match(Set mem (StoreP mem src));
117- effect(TEMP tmp1, TEMP tmp2);
117+ effect(TEMP tmp1, TEMP tmp2, KILL cr );
118118
119119 ins_cost(125); // XXX
120120 format %{ "sd $mem, $src\t# ptr" %}
@@ -127,11 +127,11 @@ instruct zStoreP(memory mem, iRegP src, iRegPNoSp tmp1, iRegPNoSp tmp2)
127127%}
128128
129129instruct zCompareAndSwapP(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval,
130- iRegPNoSp oldval_tmp, iRegPNoSp newval_tmp, iRegPNoSp tmp1) %{
130+ iRegPNoSp oldval_tmp, iRegPNoSp newval_tmp, iRegPNoSp tmp1, rFlagsReg cr ) %{
131131 match(Set res (CompareAndSwapP mem (Binary oldval newval)));
132132 match(Set res (WeakCompareAndSwapP mem (Binary oldval newval)));
133133 predicate(UseZGC && ZGenerational && !needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
134- effect(TEMP oldval_tmp, TEMP newval_tmp, TEMP tmp1, TEMP_DEF res);
134+ effect(TEMP oldval_tmp, TEMP newval_tmp, TEMP tmp1, TEMP_DEF res, KILL cr );
135135
136136 ins_cost(2 * VOLATILE_REF_COST);
137137
@@ -150,11 +150,11 @@ instruct zCompareAndSwapP(iRegINoSp res, indirect mem, iRegP oldval, iRegP newva
150150%}
151151
152152instruct zCompareAndSwapPAcq(iRegINoSp res, indirect mem, iRegP oldval, iRegP newval,
153- iRegPNoSp oldval_tmp, iRegPNoSp newval_tmp, iRegPNoSp tmp1) %{
153+ iRegPNoSp oldval_tmp, iRegPNoSp newval_tmp, iRegPNoSp tmp1, rFlagsReg cr ) %{
154154 match(Set res (CompareAndSwapP mem (Binary oldval newval)));
155155 match(Set res (WeakCompareAndSwapP mem (Binary oldval newval)));
156156 predicate(UseZGC && ZGenerational && needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
157- effect(TEMP oldval_tmp, TEMP newval_tmp, TEMP tmp1, TEMP_DEF res);
157+ effect(TEMP oldval_tmp, TEMP newval_tmp, TEMP tmp1, TEMP_DEF res, KILL cr );
158158
159159 ins_cost(2 * VOLATILE_REF_COST);
160160
@@ -173,10 +173,10 @@ instruct zCompareAndSwapPAcq(iRegINoSp res, indirect mem, iRegP oldval, iRegP ne
173173%}
174174
175175instruct zCompareAndExchangeP(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval,
176- iRegPNoSp oldval_tmp, iRegPNoSp newval_tmp, iRegPNoSp tmp1) %{
176+ iRegPNoSp oldval_tmp, iRegPNoSp newval_tmp, iRegPNoSp tmp1, rFlagsReg cr ) %{
177177 match(Set res (CompareAndExchangeP mem (Binary oldval newval)));
178178 predicate(UseZGC && ZGenerational && !needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
179- effect(TEMP oldval_tmp, TEMP newval_tmp, TEMP tmp1, TEMP_DEF res);
179+ effect(TEMP oldval_tmp, TEMP newval_tmp, TEMP tmp1, TEMP_DEF res, KILL cr );
180180
181181 ins_cost(2 * VOLATILE_REF_COST);
182182
@@ -195,10 +195,10 @@ instruct zCompareAndExchangeP(iRegPNoSp res, indirect mem, iRegP oldval, iRegP n
195195%}
196196
197197instruct zCompareAndExchangePAcq(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval,
198- iRegPNoSp oldval_tmp, iRegPNoSp newval_tmp, iRegPNoSp tmp1) %{
198+ iRegPNoSp oldval_tmp, iRegPNoSp newval_tmp, iRegPNoSp tmp1, rFlagsReg cr ) %{
199199 match(Set res (CompareAndExchangeP mem (Binary oldval newval)));
200200 predicate(UseZGC && ZGenerational && needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
201- effect(TEMP oldval_tmp, TEMP newval_tmp, TEMP tmp1, TEMP_DEF res);
201+ effect(TEMP oldval_tmp, TEMP newval_tmp, TEMP tmp1, TEMP_DEF res, KILL cr );
202202
203203 ins_cost(2 * VOLATILE_REF_COST);
204204
@@ -216,10 +216,10 @@ instruct zCompareAndExchangePAcq(iRegPNoSp res, indirect mem, iRegP oldval, iReg
216216 ins_pipe(pipe_slow);
217217%}
218218
219- instruct zGetAndSetP(indirect mem, iRegP newv, iRegPNoSp prev, iRegPNoSp tmp) %{
219+ instruct zGetAndSetP(indirect mem, iRegP newv, iRegPNoSp prev, iRegPNoSp tmp, rFlagsReg cr ) %{
220220 match(Set prev (GetAndSetP mem newv));
221221 predicate(UseZGC && ZGenerational && !needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
222- effect(TEMP_DEF prev, TEMP tmp);
222+ effect(TEMP_DEF prev, TEMP tmp, KILL cr );
223223
224224 ins_cost(2 * VOLATILE_REF_COST);
225225
@@ -234,10 +234,10 @@ instruct zGetAndSetP(indirect mem, iRegP newv, iRegPNoSp prev, iRegPNoSp tmp) %{
234234 ins_pipe(pipe_serial);
235235%}
236236
237- instruct zGetAndSetPAcq(indirect mem, iRegP newv, iRegPNoSp prev, iRegPNoSp tmp) %{
237+ instruct zGetAndSetPAcq(indirect mem, iRegP newv, iRegPNoSp prev, iRegPNoSp tmp, rFlagsReg cr ) %{
238238 match(Set prev (GetAndSetP mem newv));
239239 predicate(UseZGC && ZGenerational && needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
240- effect(TEMP_DEF prev, TEMP tmp);
240+ effect(TEMP_DEF prev, TEMP tmp, KILL cr );
241241
242242 ins_cost(2 * VOLATILE_REF_COST);
243243
0 commit comments