x86_64: Implement VarHandle.getAnd* for arrays and byte array views.

Benchmarks improvements (using benchmarks provided by
https://android-review.googlesource.com/1420959):

  benchmark                                   before   after
  ----------------------------------------------------------
  GetAndSetArrayElementInt                    2.771    0.013
  GetAndSetArrayElementDouble                 2.709    0.011
  GetAndSetArrayElementString                 3.105    0.012
  GetAndAddArrayElementInt                    2.769    0.013
  GetAndAddArrayElementDouble                 2.713    0.011
  GetAndBitwiseXorArrayElementInt             2.767    0.011

  GetAndSetByteArrayViewInt                   2.819    0.013
  GetAndAddByteArrayViewInt                   2.830    0.013
  GetAndBitwiseXorByteArrayViewInt            2.822    0.012

  GetAndSetByteArrayViewBigEndianInt          2.829    0.012
  GetAndAddByteArrayViewBigEndianInt          2.826    0.012
  GetAndBitwiseXorByteArrayViewBigEndianInt   2.824    0.012

Bug: 71781600
Test: lunch aosp_cf_x86_64_phone-userdebug \
  && art/test.py --host -r -t 712-varhandle-invocations --64
Test: Repeat with ART_USE_READ_BARRIER=false.
Test: Repeat with ART_HEAP_POISONING=true.
Change-Id: Icdc066bb5cbef7b7afe5513842ec8e1ee1d8eb94
3 files changed