arm: Implement VarHandle GetAndUpdate intrinsics.

Using benchmarks provided by
    https://android-review.googlesource.com/1420959
on blueline little cores with fixed frequency 1420800:
                                      before after
GetAndAddStaticFieldInt               25.119 0.030
GetAndAddFieldInt                     28.785 0.031
GetAndAddStaticFieldFloat             25.195 0.033
GetAndAddFieldFloat                   28.924 0.034
GetAndAddAcquireStaticFieldInt        25.101 0.029
GetAndAddAcquireFieldInt              28.767 0.031
GetAndAddAcquireStaticFieldFloat      25.186 0.031
GetAndAddAcquireFieldFloat            28.948 0.034
GetAndAddReleaseStaticFieldInt        25.138 0.026
GetAndAddReleaseFieldInt              28.798 0.028
GetAndAddReleaseStaticFieldFloat      25.186 0.029
GetAndAddReleaseFieldFloat            28.937 0.031
GetAndBitwiseOrStaticFieldInt         25.134 0.030
GetAndBitwiseOrFieldInt               28.860 0.032
GetAndBitwiseOrAcquireStaticFieldInt  25.126 0.029
GetAndBitwiseOrAcquireFieldInt        28.801 0.031
GetAndBitwiseOrReleaseStaticFieldInt  25.129 0.026
GetAndBitwiseOrReleaseFieldInt        28.794 0.028
GetAndBitwiseXorStaticFieldInt        25.120 0.030
GetAndBitwiseXorFieldInt              28.778 0.031
GetAndBitwiseXorAcquireStaticFieldInt 25.111 0.029
GetAndBitwiseXorAcquireFieldInt       28.749 0.031
GetAndBitwiseXorReleaseStaticFieldInt 25.167 0.026
GetAndBitwiseXorReleaseFieldInt       28.804 0.028
GetAndBitwiseAndStaticFieldInt        25.194 0.030
GetAndBitwiseAndFieldInt              28.917 0.031
GetAndBitwiseAndAcquireStaticFieldInt 25.195 0.029
GetAndBitwiseAndAcquireFieldInt       28.843 0.031
GetAndBitwiseAndReleaseStaticFieldInt 25.187 0.026
GetAndBitwiseAndReleaseFieldInt       28.867 0.028
GetAndSetStaticFieldInt               24.912 0.030
GetAndSetStaticFieldString            29.681 0.040
GetAndSetFieldInt                     28.612 0.031
GetAndSetFieldString                  32.699 0.041
GetAndSetAcquireStaticFieldInt        24.875 0.029
GetAndSetAcquireStaticFieldString     29.692 0.036
GetAndSetAcquireFieldInt              28.604 0.031
GetAndSetAcquireFieldString           32.606 0.038
GetAndSetReleaseStaticFieldInt        24.872 0.026
GetAndSetReleaseStaticFieldString     29.691 0.037
GetAndSetReleaseFieldInt              28.699 0.028
GetAndSetReleaseFieldString           32.721 0.039

Test: Covered by existing tests.
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: I6c110de362c01f0f8e80960aae731038b35fda64
2 files changed