diff options
author | 2021-02-01 09:31:02 +0000 | |
---|---|---|
committer | 2021-02-05 10:48:17 +0000 | |
commit | ac27ac01490f53f9e2413dc9b66fbb2880904c96 (patch) | |
tree | 271018e1ef33667bee8d57c40ffa3f4d9f8cf930 /compiler/optimizing/intrinsics.cc | |
parent | 26bf47a60064fcc42e1b5e7b4b41deb8312d7330 (diff) |
Implement Reference.refersTo() intrinsic.
Test: Added tests to 122-npe and 160-read-barrier-stress
Test: m test-art-host-gtest
Test: testrunner.py --host --optimizing
Test: run-gtests.sh
Test: testrunner.py --target --optimizing
Bug: 172573708
Change-Id: I8342510565289058df218d3249ffac1eb993ca4f
Diffstat (limited to 'compiler/optimizing/intrinsics.cc')
-rw-r--r-- | compiler/optimizing/intrinsics.cc | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/compiler/optimizing/intrinsics.cc b/compiler/optimizing/intrinsics.cc index 10d0b8992c..16c3029770 100644 --- a/compiler/optimizing/intrinsics.cc +++ b/compiler/optimizing/intrinsics.cc @@ -392,6 +392,20 @@ void IntrinsicVisitor::CreateReferenceGetReferentLocations(HInvoke* invoke, locations->SetOut(Location::RequiresRegister()); } +void IntrinsicVisitor::CreateReferenceRefersToLocations(HInvoke* invoke) { + if (kEmitCompilerReadBarrier && !kUseBakerReadBarrier) { + // Unimplemented for non-Baker read barrier. + return; + } + + ArenaAllocator* allocator = invoke->GetBlock()->GetGraph()->GetAllocator(); + LocationSummary* locations = + new (allocator) LocationSummary(invoke, LocationSummary::kCallOnSlowPath, kIntrinsified); + locations->SetInAt(0, Location::RequiresRegister()); + locations->SetInAt(1, Location::RequiresRegister()); + locations->SetOut(Location::RequiresRegister()); +} + void IntrinsicVisitor::AssertNonMovableStringClass() { if (kIsDebugBuild) { ScopedObjectAccess soa(Thread::Current()); |