diff options
author | Fred Shih <ffred@google.com> | 2014-07-11 09:59:27 -0700 |
---|---|---|
committer | Fred Shih <ffred@google.com> | 2014-07-15 15:45:21 -0700 |
commit | 4ee7a665e7f9cd2c5ace2d6304e33f64067b209f (patch) | |
tree | e8e6867c71fde6e37ec5597e8677ab807084f734 /runtime/mirror/reference.h | |
parent | 76e6773dfed9e9bf382bbb8d6c8654525fa44b0c (diff) | |
download | art-4ee7a665e7f9cd2c5ace2d6304e33f64067b209f.tar.gz art-4ee7a665e7f9cd2c5ace2d6304e33f64067b209f.tar.bz2 art-4ee7a665e7f9cd2c5ace2d6304e33f64067b209f.zip |
Revert "Revert "Revert "Revert "Add intrinsic for Reference.get()""""
Fixed TargetReg issue causing build failure for x86.
This reverts commit 9e82bd3f0ce9e5f5777bea2f752ff3e251d32f9f.
Change-Id: I7e6a526954467aaf68deeed999880dfe9aa5f06e
Diffstat (limited to 'runtime/mirror/reference.h')
-rw-r--r-- | runtime/mirror/reference.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/runtime/mirror/reference.h b/runtime/mirror/reference.h index 9c9d87be01..07d47d31e7 100644 --- a/runtime/mirror/reference.h +++ b/runtime/mirror/reference.h @@ -17,7 +17,11 @@ #ifndef ART_RUNTIME_MIRROR_REFERENCE_H_ #define ART_RUNTIME_MIRROR_REFERENCE_H_ +#include "class.h" #include "object.h" +#include "object_callbacks.h" +#include "read_barrier.h" +#include "thread.h" namespace art { @@ -36,6 +40,14 @@ namespace mirror { // C++ mirror of java.lang.ref.Reference class MANAGED Reference : public Object { public: + // Size of java.lang.ref.Reference.class. + static uint32_t ClassSize(); + + // Size of an instance of java.lang.ref.Reference. + static constexpr uint32_t InstanceSize() { + return sizeof(Reference); + } + static MemberOffset PendingNextOffset() { return OFFSET_OF_OBJECT_MEMBER(Reference, pending_next_); } @@ -80,6 +92,16 @@ class MANAGED Reference : public Object { bool IsEnqueuable() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); + template<ReadBarrierOption kReadBarrierOption = kWithReadBarrier> + static Class* GetJavaLangRefReference() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { + DCHECK(java_lang_ref_Reference_ != nullptr); + return ReadBarrier::BarrierForRoot<mirror::Class, kReadBarrierOption>( + &java_lang_ref_Reference_); + } + static void SetClass(Class* klass); + static void ResetClass(void); + static void VisitRoots(RootCallback* callback, void* arg); + private: // Note: This avoids a read barrier, it should only be used by the GC. HeapReference<Object>* GetReferentReferenceAddr() SHARED_LOCKS_REQUIRED(Locks::mutator_lock_) { @@ -92,6 +114,8 @@ class MANAGED Reference : public Object { HeapReference<Reference> queue_next_; // Note this is Java volatile: HeapReference<Object> referent_; // Note this is Java volatile: + static Class* java_lang_ref_Reference_; + friend struct art::ReferenceOffsets; // for verifying offset information friend class gc::ReferenceProcessor; friend class gc::ReferenceQueue; |