21 // |
21 // |
22 // |
22 // |
23 |
23 |
24 source_hpp %{ |
24 source_hpp %{ |
25 #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp" |
25 #include "gc/shenandoah/shenandoahBarrierSetAssembler.hpp" |
26 %} |
26 #include "gc/shenandoah/c2/shenandoahSupport.hpp" |
27 |
|
28 instruct shenandoahRB(rRegP dst, rRegP src, rFlagsReg cr) %{ |
|
29 match(Set dst (ShenandoahReadBarrier src)); |
|
30 effect(DEF dst, USE src); |
|
31 ins_cost(125); // XXX |
|
32 format %{ "shenandoah_rb $dst, $src" %} |
|
33 ins_encode %{ |
|
34 Register d = $dst$$Register; |
|
35 Register s = $src$$Register; |
|
36 __ movptr(d, Address(s, ShenandoahBrooksPointer::byte_offset())); |
|
37 %} |
|
38 ins_pipe(ialu_reg_mem); |
|
39 %} |
|
40 |
|
41 instruct shenandoahRBNarrow(rRegP dst, rRegN src) %{ |
|
42 predicate(UseCompressedOops && (Universe::narrow_oop_shift() == 0)); |
|
43 match(Set dst (ShenandoahReadBarrier (DecodeN src))); |
|
44 effect(DEF dst, USE src); |
|
45 ins_cost(125); // XXX |
|
46 format %{ "shenandoah_rb $dst, $src" %} |
|
47 ins_encode %{ |
|
48 Register d = $dst$$Register; |
|
49 Register s = $src$$Register; |
|
50 __ movptr(d, Address(r12, s, Address::times_1, ShenandoahBrooksPointer::byte_offset())); |
|
51 %} |
|
52 ins_pipe(ialu_reg_mem); |
|
53 %} |
|
54 |
|
55 instruct shenandoahRBNarrowShift(rRegP dst, rRegN src) %{ |
|
56 predicate(UseCompressedOops && (Universe::narrow_oop_shift() == Address::times_8)); |
|
57 match(Set dst (ShenandoahReadBarrier (DecodeN src))); |
|
58 effect(DEF dst, USE src); |
|
59 ins_cost(125); // XXX |
|
60 format %{ "shenandoah_rb $dst, $src" %} |
|
61 ins_encode %{ |
|
62 Register d = $dst$$Register; |
|
63 Register s = $src$$Register; |
|
64 __ movptr(d, Address(r12, s, Address::times_8, ShenandoahBrooksPointer::byte_offset())); |
|
65 %} |
|
66 ins_pipe(ialu_reg_mem); |
|
67 %} |
27 %} |
68 |
28 |
69 instruct compareAndSwapP_shenandoah(rRegI res, |
29 instruct compareAndSwapP_shenandoah(rRegI res, |
70 memory mem_ptr, |
30 memory mem_ptr, |
71 rRegP tmp1, rRegP tmp2, |
31 rRegP tmp1, rRegP tmp2, |