x86: Add missing variants for XCHG and tests for this instruction.

Add XCHG variants when both operands are registers. Handle the special
case when at least one of the register operands is EAX/AX. Add tests for
the new variants and for other variants that previously weren't tested.

Bug: 65872996
Test: m test-art-host-gtest
Change-Id: I1e80d1b86f3d2e804b90c2a181e4eabded30d8ae
diff --git a/compiler/utils/x86/assembler_x86_test.cc b/compiler/utils/x86/assembler_x86_test.cc
index b7b1d33..92ce788 100644
--- a/compiler/utils/x86/assembler_x86_test.cc
+++ b/compiler/utils/x86/assembler_x86_test.cc
@@ -331,19 +331,28 @@
   DriverStr(expected, "LoadLongConstant");
 }
 
-TEST_F(AssemblerX86Test, Xchgb) {
-  DriverStr(RepeatwA(&x86::X86Assembler::xchgb,
-                     "xchgb {mem}, %{reg}"), "xchgb");
+TEST_F(AssemblerX86Test, XchgbReg) {
+  DriverStr(Repeatww(&x86::X86Assembler::xchgb, "xchgb %{reg2}, %{reg1}"), "xchgb");
 }
 
-TEST_F(AssemblerX86Test, Xchgw) {
-  DriverStr(RepeatrA(&x86::X86Assembler::xchgw,
-                     "xchgw {mem}, %{reg}"), "xchgw");
+TEST_F(AssemblerX86Test, XchgbMem) {
+  DriverStr(RepeatwA(&x86::X86Assembler::xchgb, "xchgb {mem}, %{reg}"), "xchgb");
 }
 
-TEST_F(AssemblerX86Test, Xchgl) {
-  DriverStr(RepeatRA(&x86::X86Assembler::xchgl,
-                     "xchgl {mem}, %{reg}"), "xchgl");
+TEST_F(AssemblerX86Test, XchgwReg) {
+  DriverStr(Repeatrr(&x86::X86Assembler::xchgw, "xchgw %{reg2}, %{reg1}"), "xchgw");
+}
+
+TEST_F(AssemblerX86Test, XchgwMem) {
+  DriverStr(RepeatrA(&x86::X86Assembler::xchgw, "xchgw {mem}, %{reg}"), "xchgw");
+}
+
+TEST_F(AssemblerX86Test, XchglReg) {
+  DriverStr(RepeatRR(&x86::X86Assembler::xchgl, "xchgl %{reg2}, %{reg1}"), "xchgl");
+}
+
+TEST_F(AssemblerX86Test, XchglMem) {
+  DriverStr(RepeatRA(&x86::X86Assembler::xchgl, "xchgl {mem}, %{reg}"), "xchgl");
 }
 
 TEST_F(AssemblerX86Test, Cmpxchgb) {