22
23 #ifndef SHARE_GC_Z_ZBARRIERSET_HPP
24 #define SHARE_GC_Z_ZBARRIERSET_HPP
25
26 #include "gc/shared/barrierSet.hpp"
27
28 class ZBarrierSetAssembler;
29
30 class ZBarrierSet : public BarrierSet {
31 public:
32 ZBarrierSet();
33
34 static ZBarrierSetAssembler* assembler();
35 static bool barrier_needed(DecoratorSet decorators, BasicType type);
36
37 virtual void on_thread_create(Thread* thread);
38 virtual void on_thread_destroy(Thread* thread);
39 virtual void on_thread_attach(JavaThread* thread);
40 virtual void on_thread_detach(JavaThread* thread);
41
42 virtual void print_on(outputStream* st) const {}
43
44 template <DecoratorSet decorators, typename BarrierSetT = ZBarrierSet>
45 class AccessBarrier : public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
46 private:
47 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
48
49 template <DecoratorSet expected>
50 static void verify_decorators_present();
51
52 template <DecoratorSet expected>
53 static void verify_decorators_absent();
54
55 static oop* field_addr(oop base, ptrdiff_t offset);
56
57 template <typename T>
58 static oop load_barrier_on_oop_field_preloaded(T* addr, oop o);
59
60 template <typename T>
|
22
23 #ifndef SHARE_GC_Z_ZBARRIERSET_HPP
24 #define SHARE_GC_Z_ZBARRIERSET_HPP
25
26 #include "gc/shared/barrierSet.hpp"
27
28 class ZBarrierSetAssembler;
29
30 class ZBarrierSet : public BarrierSet {
31 public:
32 ZBarrierSet();
33
34 static ZBarrierSetAssembler* assembler();
35 static bool barrier_needed(DecoratorSet decorators, BasicType type);
36
37 virtual void on_thread_create(Thread* thread);
38 virtual void on_thread_destroy(Thread* thread);
39 virtual void on_thread_attach(JavaThread* thread);
40 virtual void on_thread_detach(JavaThread* thread);
41
42 // nmethod entry barrier support
43 virtual bool needs_nmethod_entry_barrier() const;
44 virtual int nmethod_entry_barrier_state() const;
45 virtual ByteSize nmethod_entry_barrier_state_thread_offset() const;
46 virtual bool on_nmethod_entry_barrier(nmethod* nm, nmethodBarrier* nmbarrier);
47
48 virtual void print_on(outputStream* st) const {}
49
50 template <DecoratorSet decorators, typename BarrierSetT = ZBarrierSet>
51 class AccessBarrier : public BarrierSet::AccessBarrier<decorators, BarrierSetT> {
52 private:
53 typedef BarrierSet::AccessBarrier<decorators, BarrierSetT> Raw;
54
55 template <DecoratorSet expected>
56 static void verify_decorators_present();
57
58 template <DecoratorSet expected>
59 static void verify_decorators_absent();
60
61 static oop* field_addr(oop base, ptrdiff_t offset);
62
63 template <typename T>
64 static oop load_barrier_on_oop_field_preloaded(T* addr, oop o);
65
66 template <typename T>
|