X86: Implement VarHandle.getAndAdd intrinsic
This commit implements VarHandle getAndAdd intrinsic. This also implied
adding xadd instruction and tests for it.
Test: art/test.py --host -r -t 712-varhandle-invocation --32
Test: m test-art-host-gtest
Bug: 65872996
Change-Id: I84dd95ba6464c8a73ace03a13817147c7099677a
diff --git a/compiler/utils/x86/assembler_x86_test.cc b/compiler/utils/x86/assembler_x86_test.cc
index d1c2cbe..ee0f8a1 100644
--- a/compiler/utils/x86/assembler_x86_test.cc
+++ b/compiler/utils/x86/assembler_x86_test.cc
@@ -351,6 +351,21 @@
"lock cmpxchg8b {mem}"), "lock_cmpxchg8b");
}
+TEST_F(AssemblerX86Test, LockXaddb) {
+ DriverStr(RepeatAw(&x86::X86Assembler::LockXaddb,
+ "lock xaddb %{reg}, {mem}"), "lock_xaddb");
+}
+
+TEST_F(AssemblerX86Test, LockXaddw) {
+ DriverStr(RepeatAr(&x86::X86Assembler::LockXaddw,
+ "lock xaddw %{reg}, {mem}"), "lock_xaddw");
+}
+
+TEST_F(AssemblerX86Test, LockXaddl) {
+ DriverStr(RepeatAR(&x86::X86Assembler::LockXaddl,
+ "lock xaddl %{reg}, {mem}"), "lock_xaddl");
+}
+
TEST_F(AssemblerX86Test, FPUIntegerLoadS) {
DriverStr(RepeatA(&x86::X86Assembler::filds, "fildl {mem}"), "fildd");
}