@@ -74,11 +74,11 @@ static void write_barrier_post(MacroAssembler* masm,
74
74
75
75
%}
76
76
77
- instruct g1StoreP(indirect mem, iRegP src, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3)
77
+ instruct g1StoreP(indirect mem, iRegP src, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, rFlagsReg cr )
78
78
%{
79
79
predicate(UseG1GC && n->as_Store()->barrier_data() != 0);
80
80
match(Set mem (StoreP mem src));
81
- effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
81
+ effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
82
82
ins_cost(STORE_COST);
83
83
format %{ "sd $src, $mem\t# ptr" %}
84
84
ins_encode %{
@@ -99,11 +99,11 @@ instruct g1StoreP(indirect mem, iRegP src, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegP
99
99
ins_pipe(istore_reg_mem);
100
100
%}
101
101
102
- instruct g1StoreN(indirect mem, iRegN src, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3)
102
+ instruct g1StoreN(indirect mem, iRegN src, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, rFlagsReg cr )
103
103
%{
104
104
predicate(UseG1GC && n->as_Store()->barrier_data() != 0);
105
105
match(Set mem (StoreN mem src));
106
- effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
106
+ effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
107
107
ins_cost(STORE_COST);
108
108
format %{ "sw $src, $mem\t# compressed ptr" %}
109
109
ins_encode %{
@@ -131,11 +131,11 @@ instruct g1StoreN(indirect mem, iRegN src, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegP
131
131
ins_pipe(istore_reg_mem);
132
132
%}
133
133
134
- instruct g1EncodePAndStoreN(indirect mem, iRegP src, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3)
134
+ instruct g1EncodePAndStoreN(indirect mem, iRegP src, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, rFlagsReg cr )
135
135
%{
136
136
predicate(UseG1GC && n->as_Store()->barrier_data() != 0);
137
137
match(Set mem (StoreN mem (EncodeP src)));
138
- effect(TEMP tmp1, TEMP tmp2, TEMP tmp3);
138
+ effect(TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
139
139
ins_cost(STORE_COST);
140
140
format %{ "encode_heap_oop $tmp1, $src\n\t"
141
141
"sw $tmp1, $mem\t# compressed ptr" %}
@@ -162,11 +162,11 @@ instruct g1EncodePAndStoreN(indirect mem, iRegP src, iRegPNoSp tmp1, iRegPNoSp t
162
162
ins_pipe(istore_reg_mem);
163
163
%}
164
164
165
- instruct g1CompareAndExchangeP(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2)
165
+ instruct g1CompareAndExchangeP(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, rFlagsReg cr )
166
166
%{
167
167
predicate(UseG1GC && n->as_LoadStore()->barrier_data() != 0);
168
168
match(Set res (CompareAndExchangeP mem (Binary oldval newval)));
169
- effect(TEMP res, TEMP tmp1, TEMP tmp2);
169
+ effect(TEMP res, TEMP tmp1, TEMP tmp2, KILL cr );
170
170
ins_cost(2 * VOLATILE_REF_COST);
171
171
format %{ "cmpxchg $res = $mem, $oldval, $newval\t# ptr" %}
172
172
ins_encode %{
@@ -194,11 +194,11 @@ instruct g1CompareAndExchangeP(iRegPNoSp res, indirect mem, iRegP oldval, iRegP
194
194
ins_pipe(pipe_slow);
195
195
%}
196
196
197
- instruct g1CompareAndExchangePAcq(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2)
197
+ instruct g1CompareAndExchangePAcq(iRegPNoSp res, indirect mem, iRegP oldval, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, rFlagsReg cr )
198
198
%{
199
199
predicate(UseG1GC && needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
200
200
match(Set res (CompareAndExchangeP mem (Binary oldval newval)));
201
- effect(TEMP res, TEMP tmp1, TEMP tmp2);
201
+ effect(TEMP res, TEMP tmp1, TEMP tmp2, KILL cr );
202
202
ins_cost(VOLATILE_REF_COST);
203
203
format %{ "cmpxchg_acq $res = $mem, $oldval, $newval\t# ptr" %}
204
204
ins_encode %{
@@ -226,11 +226,11 @@ instruct g1CompareAndExchangePAcq(iRegPNoSp res, indirect mem, iRegP oldval, iRe
226
226
ins_pipe(pipe_slow);
227
227
%}
228
228
229
- instruct g1CompareAndExchangeN(iRegNNoSp res, indirect mem, iRegN oldval, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3)
229
+ instruct g1CompareAndExchangeN(iRegNNoSp res, indirect mem, iRegN oldval, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, rFlagsReg cr )
230
230
%{
231
231
predicate(UseG1GC && n->as_LoadStore()->barrier_data() != 0);
232
232
match(Set res (CompareAndExchangeN mem (Binary oldval newval)));
233
- effect(TEMP res, TEMP tmp1, TEMP tmp2, TEMP tmp3);
233
+ effect(TEMP res, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
234
234
ins_cost(2 * VOLATILE_REF_COST);
235
235
format %{ "cmpxchg $res = $mem, $oldval, $newval\t# narrow oop" %}
236
236
ins_encode %{
@@ -256,11 +256,11 @@ instruct g1CompareAndExchangeN(iRegNNoSp res, indirect mem, iRegN oldval, iRegN
256
256
ins_pipe(pipe_slow);
257
257
%}
258
258
259
- instruct g1CompareAndExchangeNAcq(iRegNNoSp res, indirect mem, iRegN oldval, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3)
259
+ instruct g1CompareAndExchangeNAcq(iRegNNoSp res, indirect mem, iRegN oldval, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, rFlagsReg cr )
260
260
%{
261
261
predicate(UseG1GC && needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
262
262
match(Set res (CompareAndExchangeN mem (Binary oldval newval)));
263
- effect(TEMP res, TEMP tmp1, TEMP tmp2, TEMP tmp3);
263
+ effect(TEMP res, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
264
264
ins_cost(VOLATILE_REF_COST);
265
265
format %{ "cmpxchg_acq $res = $mem, $oldval, $newval\t# narrow oop" %}
266
266
ins_encode %{
@@ -286,12 +286,12 @@ instruct g1CompareAndExchangeNAcq(iRegNNoSp res, indirect mem, iRegN oldval, iRe
286
286
ins_pipe(pipe_slow);
287
287
%}
288
288
289
- instruct g1CompareAndSwapP(iRegINoSp res, indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegP oldval)
289
+ instruct g1CompareAndSwapP(iRegINoSp res, indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegP oldval, rFlagsReg cr )
290
290
%{
291
291
predicate(UseG1GC && n->as_LoadStore()->barrier_data() != 0);
292
292
match(Set res (CompareAndSwapP mem (Binary oldval newval)));
293
293
match(Set res (WeakCompareAndSwapP mem (Binary oldval newval)));
294
- effect(TEMP res, TEMP tmp1, TEMP tmp2);
294
+ effect(TEMP res, TEMP tmp1, TEMP tmp2, KILL cr );
295
295
ins_cost(2 * VOLATILE_REF_COST);
296
296
format %{ "cmpxchg $mem, $oldval, $newval\t# (ptr)\n\t"
297
297
"mv $res, $res == $oldval" %}
@@ -318,12 +318,12 @@ instruct g1CompareAndSwapP(iRegINoSp res, indirect mem, iRegP newval, iRegPNoSp
318
318
ins_pipe(pipe_slow);
319
319
%}
320
320
321
- instruct g1CompareAndSwapPAcq(iRegINoSp res, indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegP oldval)
321
+ instruct g1CompareAndSwapPAcq(iRegINoSp res, indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegP oldval, rFlagsReg cr )
322
322
%{
323
323
predicate(UseG1GC && needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
324
324
match(Set res (CompareAndSwapP mem (Binary oldval newval)));
325
325
match(Set res (WeakCompareAndSwapP mem (Binary oldval newval)));
326
- effect(TEMP res, TEMP tmp1, TEMP tmp2);
326
+ effect(TEMP res, TEMP tmp1, TEMP tmp2, KILL cr );
327
327
ins_cost(VOLATILE_REF_COST);
328
328
format %{ "cmpxchg_acq $mem, $oldval, $newval\t# (ptr)\n\t"
329
329
"mv $res, $res == $oldval" %}
@@ -350,12 +350,12 @@ instruct g1CompareAndSwapPAcq(iRegINoSp res, indirect mem, iRegP newval, iRegPNo
350
350
ins_pipe(pipe_slow);
351
351
%}
352
352
353
- instruct g1CompareAndSwapN(iRegINoSp res, indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegN oldval)
353
+ instruct g1CompareAndSwapN(iRegINoSp res, indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegN oldval, rFlagsReg cr )
354
354
%{
355
355
predicate(UseG1GC && n->as_LoadStore()->barrier_data() != 0);
356
356
match(Set res (CompareAndSwapN mem (Binary oldval newval)));
357
357
match(Set res (WeakCompareAndSwapN mem (Binary oldval newval)));
358
- effect(TEMP res, TEMP tmp1, TEMP tmp2, TEMP tmp3);
358
+ effect(TEMP res, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
359
359
ins_cost(2 * VOLATILE_REF_COST);
360
360
format %{ "cmpxchg $mem, $oldval, $newval\t# (narrow oop)\n\t"
361
361
"mv $res, $res == $oldval" %}
@@ -383,12 +383,12 @@ instruct g1CompareAndSwapN(iRegINoSp res, indirect mem, iRegN newval, iRegPNoSp
383
383
ins_pipe(pipe_slow);
384
384
%}
385
385
386
- instruct g1CompareAndSwapNAcq(iRegINoSp res, indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegN oldval)
386
+ instruct g1CompareAndSwapNAcq(iRegINoSp res, indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegN oldval, rFlagsReg cr )
387
387
%{
388
388
predicate(UseG1GC && needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
389
389
match(Set res (CompareAndSwapN mem (Binary oldval newval)));
390
390
match(Set res (WeakCompareAndSwapN mem (Binary oldval newval)));
391
- effect(TEMP res, TEMP tmp1, TEMP tmp2, TEMP tmp3);
391
+ effect(TEMP res, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
392
392
ins_cost(VOLATILE_REF_COST);
393
393
format %{ "cmpxchg_acq $mem, $oldval, $newval\t# (narrow oop)\n\t"
394
394
"mv $res, $res == $oldval" %}
@@ -416,11 +416,11 @@ instruct g1CompareAndSwapNAcq(iRegINoSp res, indirect mem, iRegN newval, iRegPNo
416
416
ins_pipe(pipe_slow);
417
417
%}
418
418
419
- instruct g1GetAndSetP(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp preval)
419
+ instruct g1GetAndSetP(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp preval, rFlagsReg cr )
420
420
%{
421
421
predicate(UseG1GC && n->as_LoadStore()->barrier_data() != 0);
422
422
match(Set preval (GetAndSetP mem newval));
423
- effect(TEMP preval, TEMP tmp1, TEMP tmp2);
423
+ effect(TEMP preval, TEMP tmp1, TEMP tmp2, KILL cr );
424
424
ins_cost(2 * VOLATILE_REF_COST);
425
425
format %{ "atomic_xchg $preval, $newval, [$mem]" %}
426
426
ins_encode %{
@@ -442,11 +442,11 @@ instruct g1GetAndSetP(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2
442
442
ins_pipe(pipe_serial);
443
443
%}
444
444
445
- instruct g1GetAndSetPAcq(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp preval)
445
+ instruct g1GetAndSetPAcq(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp preval, rFlagsReg cr )
446
446
%{
447
447
predicate(UseG1GC && needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
448
448
match(Set preval (GetAndSetP mem newval));
449
- effect(TEMP preval, TEMP tmp1, TEMP tmp2);
449
+ effect(TEMP preval, TEMP tmp1, TEMP tmp2, KILL cr );
450
450
ins_cost(VOLATILE_REF_COST);
451
451
format %{ "atomic_xchg_acq $preval, $newval, [$mem]" %}
452
452
ins_encode %{
@@ -468,11 +468,11 @@ instruct g1GetAndSetPAcq(indirect mem, iRegP newval, iRegPNoSp tmp1, iRegPNoSp t
468
468
ins_pipe(pipe_serial);
469
469
%}
470
470
471
- instruct g1GetAndSetN(indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegNNoSp preval)
471
+ instruct g1GetAndSetN(indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegNNoSp preval, rFlagsReg cr )
472
472
%{
473
473
predicate(UseG1GC && n->as_LoadStore()->barrier_data() != 0);
474
474
match(Set preval (GetAndSetN mem newval));
475
- effect(TEMP preval, TEMP tmp1, TEMP tmp2, TEMP tmp3);
475
+ effect(TEMP preval, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
476
476
ins_cost(2 * VOLATILE_REF_COST);
477
477
format %{ "atomic_xchgwu $preval, $newval, [$mem]" %}
478
478
ins_encode %{
@@ -495,11 +495,11 @@ instruct g1GetAndSetN(indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2
495
495
ins_pipe(pipe_serial);
496
496
%}
497
497
498
- instruct g1GetAndSetNAcq(indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegNNoSp preval)
498
+ instruct g1GetAndSetNAcq(indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, iRegNNoSp preval, rFlagsReg cr )
499
499
%{
500
500
predicate(UseG1GC && needs_acquiring_load_reserved(n) && n->as_LoadStore()->barrier_data() != 0);
501
501
match(Set preval (GetAndSetN mem newval));
502
- effect(TEMP preval, TEMP tmp1, TEMP tmp2, TEMP tmp3);
502
+ effect(TEMP preval, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
503
503
ins_cost(VOLATILE_REF_COST);
504
504
format %{ "atomic_xchgwu_acq $preval, $newval, [$mem]" %}
505
505
ins_encode %{
@@ -522,11 +522,11 @@ instruct g1GetAndSetNAcq(indirect mem, iRegN newval, iRegPNoSp tmp1, iRegPNoSp t
522
522
ins_pipe(pipe_serial);
523
523
%}
524
524
525
- instruct g1LoadP(iRegPNoSp dst, indirect mem, iRegPNoSp tmp1, iRegPNoSp tmp2)
525
+ instruct g1LoadP(iRegPNoSp dst, indirect mem, iRegPNoSp tmp1, iRegPNoSp tmp2, rFlagsReg cr )
526
526
%{
527
527
predicate(UseG1GC && n->as_Load()->barrier_data() != 0);
528
528
match(Set dst (LoadP mem));
529
- effect(TEMP dst, TEMP tmp1, TEMP tmp2);
529
+ effect(TEMP dst, TEMP tmp1, TEMP tmp2, KILL cr );
530
530
ins_cost(LOAD_COST + BRANCH_COST);
531
531
format %{ "ld $dst, $mem\t# ptr" %}
532
532
ins_encode %{
@@ -541,11 +541,11 @@ instruct g1LoadP(iRegPNoSp dst, indirect mem, iRegPNoSp tmp1, iRegPNoSp tmp2)
541
541
ins_pipe(iload_reg_mem);
542
542
%}
543
543
544
- instruct g1LoadN(iRegNNoSp dst, indirect mem, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3)
544
+ instruct g1LoadN(iRegNNoSp dst, indirect mem, iRegPNoSp tmp1, iRegPNoSp tmp2, iRegPNoSp tmp3, rFlagsReg cr )
545
545
%{
546
546
predicate(UseG1GC && n->as_Load()->barrier_data() != 0);
547
547
match(Set dst (LoadN mem));
548
- effect(TEMP dst, TEMP tmp1, TEMP tmp2, TEMP tmp3);
548
+ effect(TEMP dst, TEMP tmp1, TEMP tmp2, TEMP tmp3, KILL cr );
549
549
ins_cost(LOAD_COST + BRANCH_COST);
550
550
format %{ "lwu $dst, $mem\t# compressed ptr" %}
551
551
ins_encode %{
0 commit comments