ARM64: Reimplement the UnsafeCASObject intrinsic.
For the UnsafeCASObject with Baker read barriers, drop the old code updating the field. Perform the main path CAS loop and redirect the flow for failure to a slow path that marks the old value and compares it with the expected value (if not marking, this is just a few instructions to determine that they differ). If it's the same, the old value is known to be the from-space reference to the expected object and the slow path performs a modified CAS loop checking for both expected object references (from-space and to-space). Test: Already covered by the 160-read-barrier-stress. Test: m test-art-host-gtest Test: Pixel 2 XL boots. Test: testrunner.py --target --optimizing --64 Test: ART_HEAP_POISONING=true testrunner.py --target --optimizing --64 Bug: 36141117 Change-Id: I175806dbc003640c9bb6759be6788311bcc9310c
Loading
Please sign in to comment