arm: Implement VarHandle.get/set intrinsics.
Including Opaque, Acquire/Release and Volatile variants.
Refactor Unsafe.get/put operations to share code with the
new VarHandle intrinsics, fixing potentially non-atomic
64-bit "Ordered" operations in the process.
Using benchmarks provided by
https://android-review.googlesource.com/1420959
on blueline little cores with fixed frequency 1420800:
before after
GetStaticFieldInt 23.937 0.014
GetStaticFieldString 24.497 0.019
GetFieldInt 27.510 0.016
GetFieldString 28.000 0.021
GetAcquireStaticFieldInt 23.953 0.017
GetAcquireStaticFieldString 24.532 0.021
GetAcquireFieldInt 27.457 0.020
GetAcquireFieldString 28.137 0.023
GetOpaqueStaticFieldInt 23.955 0.014
GetOpaqueStaticFieldString 24.530 0.019
GetOpaqueFieldInt 27.461 0.016
GetOpaqueFieldString 28.164 0.021
GetVolatileStaticFieldInt 23.971 0.017
GetVolatileStaticFieldString 24.612 0.021
GetVolatileFieldInt 27.518 0.020
GetVolatileFieldString 28.178 0.023
SetStaticFieldInt 25.291 0.014
SetStaticFieldString 28.873 0.018
SetFieldInt 28.676 0.016
SetFieldString 32.286 0.021
SetVolatileStaticFieldInt 25.339 0.021
SetVolatileStaticFieldString 28.904 0.028
SetVolatileFieldInt 28.730 0.023
SetVolatileFieldString 32.322 0.030
SetOpaqueStaticFieldInt 25.343 0.014
SetOpaqueStaticFieldString 28.992 0.018
SetOpaqueFieldInt 28.749 0.016
SetOpaqueFieldString 32.317 0.022
SetReleaseStaticFieldInt 25.354 0.016
SetReleaseStaticFieldString 28.906 0.025
SetReleaseFieldInt 28.678 0.017
SetReleaseFieldString 32.262 0.027
Test: Covered by existing test 712-varhandle-invocations.
Test: testrunner.py --target --32 --optimizing
Test: Repeat with ART_USE_READ_BARRIER=false ART_HEAP_POISONING=true.
Test: Repeat with ART_READ_BARRIER_TYPE=TABLELOOKUP.
Bug: 71781600
Change-Id: I0ac6d0c154791d787d5c4abd8095e3c2eee9abbb
4 files changed