Revert "Revert "Revert "JIT JNI stubs."""
Still seeing occasional failures on 667-jit-jni-stub
Bug: 65574695
Bug: 69843562
This reverts commit e7441631a11e2e07ce863255a59ee4de29c6a56f.
Change-Id: I3db751679ef7bdf31c933208aaffe4fac749a14b
diff --git a/runtime/managed_stack.h b/runtime/managed_stack.h
index 07078ec..4f1984d 100644
--- a/runtime/managed_stack.h
+++ b/runtime/managed_stack.h
@@ -24,7 +24,6 @@
#include "base/logging.h"
#include "base/macros.h"
#include "base/mutex.h"
-#include "base/bit_utils.h"
namespace art {
@@ -43,9 +42,7 @@
class PACKED(4) ManagedStack {
public:
ManagedStack()
- : tagged_top_quick_frame_(TaggedTopQuickFrame::CreateNotTagged(nullptr)),
- link_(nullptr),
- top_shadow_frame_(nullptr) {}
+ : top_quick_frame_(nullptr), link_(nullptr), top_shadow_frame_(nullptr) {}
void PushManagedStackFragment(ManagedStack* fragment) {
// Copy this top fragment into given fragment.
@@ -66,36 +63,17 @@
return link_;
}
- ArtMethod** GetTopQuickFrameKnownNotTagged() const {
- return tagged_top_quick_frame_.GetSpKnownNotTagged();
- }
-
ArtMethod** GetTopQuickFrame() const {
- return tagged_top_quick_frame_.GetSp();
- }
-
- bool GetTopQuickFrameTag() const {
- return tagged_top_quick_frame_.GetTag();
- }
-
- bool HasTopQuickFrame() const {
- return tagged_top_quick_frame_.GetTaggedSp() != 0u;
+ return top_quick_frame_;
}
void SetTopQuickFrame(ArtMethod** top) {
DCHECK(top_shadow_frame_ == nullptr);
- DCHECK_ALIGNED(top, 4u);
- tagged_top_quick_frame_ = TaggedTopQuickFrame::CreateNotTagged(top);
+ top_quick_frame_ = top;
}
- void SetTopQuickFrameTagged(ArtMethod** top) {
- DCHECK(top_shadow_frame_ == nullptr);
- DCHECK_ALIGNED(top, 4u);
- tagged_top_quick_frame_ = TaggedTopQuickFrame::CreateTagged(top);
- }
-
- static size_t TaggedTopQuickFrameOffset() {
- return OFFSETOF_MEMBER(ManagedStack, tagged_top_quick_frame_);
+ static size_t TopQuickFrameOffset() {
+ return OFFSETOF_MEMBER(ManagedStack, top_quick_frame_);
}
ALWAYS_INLINE ShadowFrame* PushShadowFrame(ShadowFrame* new_top_frame);
@@ -105,12 +83,8 @@
return top_shadow_frame_;
}
- bool HasTopShadowFrame() const {
- return GetTopShadowFrame() != nullptr;
- }
-
void SetTopShadowFrame(ShadowFrame* top) {
- DCHECK_EQ(tagged_top_quick_frame_.GetTaggedSp(), 0u);
+ DCHECK(top_quick_frame_ == nullptr);
top_shadow_frame_ = top;
}
@@ -123,47 +97,7 @@
bool ShadowFramesContain(StackReference<mirror::Object>* shadow_frame_entry) const;
private:
- // Encodes the top quick frame (which must be at least 4-byte aligned)
- // and a flag that marks the GenericJNI trampoline.
- class TaggedTopQuickFrame {
- public:
- static TaggedTopQuickFrame CreateNotTagged(ArtMethod** sp) {
- DCHECK_ALIGNED(sp, 4u);
- return TaggedTopQuickFrame(reinterpret_cast<uintptr_t>(sp));
- }
-
- static TaggedTopQuickFrame CreateTagged(ArtMethod** sp) {
- DCHECK_ALIGNED(sp, 4u);
- return TaggedTopQuickFrame(reinterpret_cast<uintptr_t>(sp) | 1u);
- }
-
- // Get SP known to be not tagged and non-null.
- ArtMethod** GetSpKnownNotTagged() const {
- DCHECK(!GetTag());
- DCHECK_NE(tagged_sp_, 0u);
- return reinterpret_cast<ArtMethod**>(tagged_sp_);
- }
-
- ArtMethod** GetSp() const {
- return reinterpret_cast<ArtMethod**>(tagged_sp_ & ~static_cast<uintptr_t>(1u));
- }
-
- bool GetTag() const {
- return (tagged_sp_ & 1u) != 0u;
- }
-
- uintptr_t GetTaggedSp() const {
- return tagged_sp_;
- }
-
- private:
- explicit TaggedTopQuickFrame(uintptr_t tagged_sp) : tagged_sp_(tagged_sp) { }
-
- uintptr_t tagged_sp_;
- };
- static_assert(sizeof(TaggedTopQuickFrame) == sizeof(uintptr_t), "TaggedTopQuickFrame size check");
-
- TaggedTopQuickFrame tagged_top_quick_frame_;
+ ArtMethod** top_quick_frame_;
ManagedStack* link_;
ShadowFrame* top_shadow_frame_;
};