dx: Extend recognized set of signature-polymorphic methods

Adds the VarHandle access methods.

Bug: 65872996
Test: dx/tests/run-test 141
Test: dx/tests/run-all-tests
Change-Id: I9cca3a45218d0d74314587937c78790571fc698f
diff --git a/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java b/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java
index 5033aed..e5def1d 100644
--- a/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java
+++ b/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java
@@ -163,7 +163,7 @@
     private static CstMethodRef makeInvokeMethod(final CstMethodRef callSiteMethod) {
         // The name is either invoke or invokeExact. The INVOKE_DESCRIPTOR is fixed.
         CstNat cstNat = new CstNat(callSiteMethod.getNat().getName(), INVOKE_DESCRIPTOR);
-        return new CstMethodRef(CstType.METHOD_HANDLE, cstNat);
+        return new CstMethodRef(callSiteMethod.getDefiningClass(), cstNat);
     }
 
     private static CstProtoRef makeCallSiteProto(final CstMethodRef callSiteMethod) {
diff --git a/dx/src/com/android/dx/rop/cst/CstBaseMethodRef.java b/dx/src/com/android/dx/rop/cst/CstBaseMethodRef.java
index c964a49..76f3a30 100644
--- a/dx/src/com/android/dx/rop/cst/CstBaseMethodRef.java
+++ b/dx/src/com/android/dx/rop/cst/CstBaseMethodRef.java
@@ -168,7 +168,49 @@
      * signature polymorphic method.
      */
     public final boolean isSignaturePolymorphic() {
-        return (getDefiningClass().equals(CstType.METHOD_HANDLE) &&
-                getNat().isSignaturePolymorphic());
+        CstType definingClass = getDefiningClass();
+        if (definingClass.equals(CstType.METHOD_HANDLE)) {
+            switch (getNat().getName().getString()) {
+                case "invoke":
+                case "invokeExact":
+                    return true;
+            }
+        } else if (definingClass.equals(CstType.VAR_HANDLE)) {
+            switch (getNat().getName().getString()) {
+                case "compareAndExchange":
+                case "compareAndExchangeAcquire":
+                case "compareAndExchangeRelease":
+                case "compareAndSet":
+                case "get":
+                case "getAcquire":
+                case "getAndAdd":
+                case "getAndAddAcquire":
+                case "getAndAddRelease":
+                case "getAndBitwiseAnd":
+                case "getAndBitwiseAndAcquire":
+                case "getAndBitwiseAndRelease":
+                case "getAndBitwiseOr":
+                case "getAndBitwiseOrAcquire":
+                case "getAndBitwiseOrRelease":
+                case "getAndBitwiseXor":
+                case "getAndBitwiseXorAcquire":
+                case "getAndBitwiseXorRelease":
+                case "getAndSet":
+                case "getAndSetAcquire":
+                case "getAndSetRelease":
+                case "getOpaque":
+                case "getVolatile":
+                case "set":
+                case "setOpaque":
+                case "setRelease":
+                case "setVolatile":
+                case "weakCompareAndSet":
+                case "weakCompareAndSetAcquire":
+                case "weakCompareAndSetPlain":
+                case "weakCompareAndSetRelease":
+                    return true;
+            }
+        }
+        return false;
     }
 }
diff --git a/dx/src/com/android/dx/rop/cst/CstNat.java b/dx/src/com/android/dx/rop/cst/CstNat.java
index dbb682c..e149fdc 100644
--- a/dx/src/com/android/dx/rop/cst/CstNat.java
+++ b/dx/src/com/android/dx/rop/cst/CstNat.java
@@ -168,24 +168,4 @@
     public final boolean isClassInit() {
         return name.getString().equals("<clinit>");
     }
-
-    /**
-     * Gets whether this instance has the name of a signature
-     * polymorphic method.
-     *
-     * @return {@code true} iff the name suggest it could be
-     * signature polymorphic method.
-     */
-    public final boolean isSignaturePolymorphic() {
-        final String INVOKE = "invoke";
-        final String INVOKE_EXACT = "invokeExact";
-
-        int nameLength = name.getUtf8Size();
-        if (nameLength == INVOKE.length()) {
-            return name.getString().equals(INVOKE);
-        } else if (nameLength == INVOKE_EXACT.length()) {
-            return name.getString().equals(INVOKE_EXACT);
-        }
-        return false;
-    }
 }
diff --git a/dx/src/com/android/dx/rop/cst/CstType.java b/dx/src/com/android/dx/rop/cst/CstType.java
index 553ad30..e1e2ad9 100644
--- a/dx/src/com/android/dx/rop/cst/CstType.java
+++ b/dx/src/com/android/dx/rop/cst/CstType.java
@@ -92,6 +92,11 @@
      */
     public static final CstType METHOD_HANDLE = new CstType(Type.METHOD_HANDLE);
 
+    /**
+     * {@code non-null;} instance corresponding to the type {@code java.lang.invoke.VarHandle}
+     */
+    public static final CstType VAR_HANDLE = new CstType(Type.VAR_HANDLE);
+
     static {
         initInterns();
     }
diff --git a/dx/src/com/android/dx/rop/type/Type.java b/dx/src/com/android/dx/rop/type/Type.java
index 3284bec..a8c0b3b 100644
--- a/dx/src/com/android/dx/rop/type/Type.java
+++ b/dx/src/com/android/dx/rop/type/Type.java
@@ -122,6 +122,9 @@
     /** {@code non-null;} instance representing {@code java.lang.invoke.MethodHandle} */
     public static final Type METHOD_HANDLE = new Type("Ljava/lang/invoke/MethodHandle;", BT_OBJECT);
 
+    /** {@code non-null;} instance representing {@code java.lang.invoke.VarHandle} */
+    public static final Type VAR_HANDLE = new Type("Ljava/lang/invoke/VarHandle;", BT_OBJECT);
+
     /** {@code non-null;} instance representing {@code java.lang.Object} */
     public static final Type OBJECT = new Type("Ljava/lang/Object;", BT_OBJECT);
 
@@ -251,6 +254,7 @@
         putIntern(CLASS);
         putIntern(CLONEABLE);
         putIntern(METHOD_HANDLE);
+        putIntern(VAR_HANDLE);
         putIntern(OBJECT);
         putIntern(SERIALIZABLE);
         putIntern(STRING);
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.class b/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.class
new file mode 100644
index 0000000..f65495e
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.class
Binary files differ
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.java b/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.java
new file mode 100644
index 0000000..577531d
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/VarHandleDexTest.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2017 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandles.Lookup;
+import java.lang.invoke.VarHandle;
+
+public class VarHandleDexTest {
+
+    // A static field to access.
+    private static boolean bsValue = false;
+
+    // An instance field to access.
+    private Float fValue = Float.valueOf(99.9f);
+
+    public static void main(String[] args) throws Throwable {
+        // This code is entirely nonsense. It is just to exercise
+        // signature polymorphic methods in dx.
+        VarHandleDexTest t = new VarHandleDexTest();
+        {
+            VarHandle vb = MethodHandles.lookup().findStaticVarHandle(t.getClass(), "bsValue", boolean.class);
+            boolean newValue = true;
+            boolean expectedValue = false;
+
+            boolean b0 = (boolean) vb.compareAndExchangeAcquire(t, expectedValue, newValue);
+            vb.compareAndExchangeAcquire(t, expectedValue, newValue);
+            boolean b1 = (boolean) vb.compareAndExchange(t, expectedValue, newValue);
+            vb.compareAndExchange(t, expectedValue, newValue);
+            boolean b2 = (boolean) vb.compareAndExchangeRelease(t, expectedValue, newValue);
+            vb.compareAndExchangeRelease(t, expectedValue, newValue);
+
+            boolean r0 = vb.compareAndSet(t, expectedValue, newValue);
+            vb.compareAndSet(t, expectedValue, newValue);
+            boolean r1 = vb.weakCompareAndSetAcquire(t, expectedValue, newValue);
+            vb.weakCompareAndSetAcquire(t, expectedValue, newValue);
+            boolean r2 = vb.weakCompareAndSet(t, expectedValue, newValue);
+            vb.weakCompareAndSet(t, expectedValue, newValue);
+            boolean r3 = vb.weakCompareAndSetPlain(t, expectedValue, newValue);
+            vb.weakCompareAndSetPlain(t, expectedValue, newValue);
+            boolean r4 = vb.weakCompareAndSetRelease(t, expectedValue, newValue);
+            vb.weakCompareAndSetRelease(t, expectedValue, newValue);
+
+            boolean b3 = (boolean) vb.getAndAddAcquire(t, expectedValue, newValue);
+            vb.getAndAddAcquire(t, expectedValue, newValue);
+            boolean b4 = (boolean) vb.getAndAdd(t, expectedValue, newValue);
+            vb.getAndAdd(t, expectedValue, newValue);
+            boolean b5 = (boolean) vb.getAndAddRelease(t, expectedValue, newValue);
+            vb.getAndAddRelease(t, expectedValue, newValue);
+            boolean b6 = (boolean) vb.getAndBitwiseAndAcquire(t, expectedValue, newValue);
+            vb.getAndBitwiseAndAcquire(t, expectedValue, newValue);
+            boolean b7 = (boolean) vb.getAndBitwiseAnd(t, expectedValue, newValue);
+            vb.getAndBitwiseAnd(t, expectedValue, newValue);
+            boolean b8 = (boolean) vb.getAndBitwiseAndRelease(t, expectedValue, newValue);
+            vb.getAndBitwiseAndRelease(t, expectedValue, newValue);
+            boolean b9 = (boolean) vb.getAndBitwiseOrAcquire(t, expectedValue, newValue);
+            vb.getAndBitwiseOrAcquire(t, expectedValue, newValue);
+            boolean b10 = (boolean) vb.getAndBitwiseOr(t, expectedValue, newValue);
+            vb.getAndBitwiseOr(t, expectedValue, newValue);
+            boolean b11 = (boolean) vb.getAndBitwiseOrRelease(t, expectedValue, newValue);
+            vb.getAndBitwiseOrRelease(t, expectedValue, newValue);
+            boolean b12 = (boolean) vb.getAndBitwiseXorAcquire(t, expectedValue, newValue);
+            vb.getAndBitwiseXorAcquire(t, expectedValue, newValue);
+            boolean b13 = (boolean) vb.getAndBitwiseXor(t, expectedValue, newValue);
+            vb.getAndBitwiseXor(t, expectedValue, newValue);
+            boolean b14 = (boolean) vb.getAndBitwiseXorRelease(t, expectedValue, newValue);
+            vb.getAndBitwiseXorRelease(t, expectedValue, newValue);
+
+            boolean b15 = (boolean) vb.getAndSetAcquire(t, newValue);
+            vb.getAndSetAcquire(t, newValue);
+            boolean b16 = (boolean) vb.getAndSet(t, newValue);
+            vb.getAndSet(t, newValue);
+            boolean b17 = (boolean) vb.getAndSetRelease(t, newValue);
+            vb.getAndSetRelease(t, newValue);
+
+            boolean b18 = (boolean) vb.get(t);
+            vb.get(t);
+            boolean b19 = (boolean) vb.getAcquire(t);
+            vb.getAcquire(t);
+            boolean b20 = (boolean) vb.getOpaque(t);
+            vb.getOpaque(t);
+            boolean b21 = (boolean) vb.getVolatile(t);
+            vb.getVolatile(t);
+
+            vb.set(t, newValue);
+            vb.setOpaque(t, newValue);
+            vb.setRelease(t, newValue);
+            vb.setVolatile(t, newValue);
+        }
+        {
+            VarHandle vf = MethodHandles.lookup().findStaticVarHandle(t.getClass(), "fValue", Float.class);
+            Float newValue = Float.valueOf(1.1f);
+            Float expectedValue = Float.valueOf(2.2e-6f);
+
+            Float f0 = (Float) vf.compareAndExchangeAcquire(t, expectedValue, newValue);
+            vf.compareAndExchangeAcquire(t, expectedValue, newValue);
+            Float f1 = (Float) vf.compareAndExchange(t, expectedValue, newValue);
+            vf.compareAndExchange(t, expectedValue, newValue);
+            Float f2 = (Float) vf.compareAndExchangeRelease(t, expectedValue, newValue);
+            vf.compareAndExchangeRelease(t, expectedValue, newValue);
+
+            boolean r0 = vf.compareAndSet(t, expectedValue, newValue);
+            vf.compareAndSet(t, expectedValue, newValue);
+            boolean r1 = vf.weakCompareAndSetAcquire(t, expectedValue, newValue);
+            vf.weakCompareAndSetAcquire(t, expectedValue, newValue);
+            boolean r2 = vf.weakCompareAndSet(t, expectedValue, newValue);
+            vf.weakCompareAndSet(t, expectedValue, newValue);
+            boolean r3 = vf.weakCompareAndSetPlain(t, expectedValue, newValue);
+            vf.weakCompareAndSetPlain(t, expectedValue, newValue);
+            boolean r4 = vf.weakCompareAndSetRelease(t, expectedValue, newValue);
+            vf.weakCompareAndSetRelease(t, expectedValue, newValue);
+
+            Float f3 = (Float) vf.getAndAddAcquire(t, expectedValue, newValue);
+            vf.getAndAddAcquire(t, expectedValue, newValue);
+            Float f4 = (Float) vf.getAndAdd(t, expectedValue, newValue);
+            vf.getAndAdd(t, expectedValue, newValue);
+            Float f5 = (Float) vf.getAndAddRelease(t, expectedValue, newValue);
+            vf.getAndAddRelease(t, expectedValue, newValue);
+            Float f6 = (Float) vf.getAndBitwiseAndAcquire(t, expectedValue, newValue);
+            vf.getAndBitwiseAndAcquire(t, expectedValue, newValue);
+            Float f7 = (Float) vf.getAndBitwiseAnd(t, expectedValue, newValue);
+            vf.getAndBitwiseAnd(t, expectedValue, newValue);
+            Float f8 = (Float) vf.getAndBitwiseAndRelease(t, expectedValue, newValue);
+            vf.getAndBitwiseAndRelease(t, expectedValue, newValue);
+            Float f9 = (Float) vf.getAndBitwiseOrAcquire(t, expectedValue, newValue);
+            vf.getAndBitwiseOrAcquire(t, expectedValue, newValue);
+            Float f10 = (Float) vf.getAndBitwiseOr(t, expectedValue, newValue);
+            vf.getAndBitwiseOr(t, expectedValue, newValue);
+            Float f11 = (Float) vf.getAndBitwiseOrRelease(t, expectedValue, newValue);
+            vf.getAndBitwiseOrRelease(t, expectedValue, newValue);
+            Float f12 = (Float) vf.getAndBitwiseXorAcquire(t, expectedValue, newValue);
+            vf.getAndBitwiseXorAcquire(t, expectedValue, newValue);
+            Float f13 = (Float) vf.getAndBitwiseXor(t, expectedValue, newValue);
+            vf.getAndBitwiseXor(t, expectedValue, newValue);
+            Float f14 = (Float) vf.getAndBitwiseXorRelease(t, expectedValue, newValue);
+            vf.getAndBitwiseXorRelease(t, expectedValue, newValue);
+
+            Float f15 = (Float) vf.getAndSetAcquire(t, newValue);
+            vf.getAndSetAcquire(t, newValue);
+            Float f16 = (Float) vf.getAndSet(t, newValue);
+            vf.getAndSet(t, newValue);
+            Float f17 = (Float) vf.getAndSetRelease(t, newValue);
+            vf.getAndSetRelease(t, newValue);
+
+            Float f18 = (Float) vf.get(t);
+            vf.get(t);
+            Float f19 = (Float) vf.getAcquire(t);
+            vf.getAcquire(t);
+            Float f20 = (Float) vf.getOpaque(t);
+            vf.getOpaque(t);
+            Float f21 = (Float) vf.getVolatile(t);
+            vf.getVolatile(t);
+
+            vf.set(t, newValue);
+            vf.setOpaque(t, newValue);
+            vf.setRelease(t, newValue);
+            vf.setVolatile(t, newValue);
+        }
+        {
+            String[] words = { "okay", "stevie", "bring", "your", "three", "friends", "up" };
+            VarHandle vw = MethodHandles.arrayElementVarHandle(words.getClass());
+            String newValue = "four";
+            String expectedValue = "three";
+            int index = 4;
+
+            String s0 = (String) vw.compareAndExchangeAcquire(words, index, expectedValue, newValue);
+            vw.compareAndExchangeAcquire(words, index, expectedValue, newValue);
+            String s1 = (String) vw.compareAndExchange(words, index, expectedValue, newValue);
+            vw.compareAndExchange(words, index, expectedValue, newValue);
+            String s2 = (String) vw.compareAndExchangeRelease(words, index, expectedValue, newValue);
+            vw.compareAndExchangeRelease(words, index, expectedValue, newValue);
+
+            boolean r0 = vw.compareAndSet(words, index, expectedValue, newValue);
+            vw.compareAndSet(words, index, expectedValue, newValue);
+            boolean r1 = vw.weakCompareAndSetAcquire(words, index, expectedValue, newValue);
+            vw.weakCompareAndSetAcquire(words, index, expectedValue, newValue);
+            boolean r2 = vw.weakCompareAndSet(words, index, expectedValue, newValue);
+            vw.weakCompareAndSet(words, index, expectedValue, newValue);
+            boolean r3 = vw.weakCompareAndSetPlain(words, index, expectedValue, newValue);
+            vw.weakCompareAndSetPlain(words, index, expectedValue, newValue);
+            boolean r4 = vw.weakCompareAndSetRelease(words, index, expectedValue, newValue);
+            vw.weakCompareAndSetRelease(words, index, expectedValue, newValue);
+
+            String s3 = (String) vw.getAndAddAcquire(words, index, expectedValue, newValue);
+            vw.getAndAddAcquire(words, index, expectedValue, newValue);
+            String s4 = (String) vw.getAndAdd(words, index, expectedValue, newValue);
+            vw.getAndAdd(words, index, expectedValue, newValue);
+            String s5 = (String) vw.getAndAddRelease(words, index, expectedValue, newValue);
+            vw.getAndAddRelease(words, index, expectedValue, newValue);
+            String s6 = (String) vw.getAndBitwiseAndAcquire(words, index, expectedValue, newValue);
+            vw.getAndBitwiseAndAcquire(words, index, expectedValue, newValue);
+            String s7 = (String) vw.getAndBitwiseAnd(words, index, expectedValue, newValue);
+            vw.getAndBitwiseAnd(words, index, expectedValue, newValue);
+            String s8 = (String) vw.getAndBitwiseAndRelease(words, index, expectedValue, newValue);
+            vw.getAndBitwiseAndRelease(words, index, expectedValue, newValue);
+            String s9 = (String) vw.getAndBitwiseOrAcquire(words, index, expectedValue, newValue);
+            vw.getAndBitwiseOrAcquire(words, index, expectedValue, newValue);
+            String s10 = (String) vw.getAndBitwiseOr(words, index, expectedValue, newValue);
+            vw.getAndBitwiseOr(words, index, expectedValue, newValue);
+            String s11 = (String) vw.getAndBitwiseOrRelease(words, index, expectedValue, newValue);
+            vw.getAndBitwiseOrRelease(words, index, expectedValue, newValue);
+            String s12 = (String) vw.getAndBitwiseXorAcquire(words, index, expectedValue, newValue);
+            vw.getAndBitwiseXorAcquire(words, index, expectedValue, newValue);
+            String s13 = (String) vw.getAndBitwiseXor(words, index, expectedValue, newValue);
+            vw.getAndBitwiseXor(words, index, expectedValue, newValue);
+            String s14 = (String) vw.getAndBitwiseXorRelease(words, index, expectedValue, newValue);
+            vw.getAndBitwiseXorRelease(words, index, expectedValue, newValue);
+
+            String s15 = (String) vw.getAndSetAcquire(words, index, newValue);
+            vw.getAndSetAcquire(words, index, newValue);
+            String s16 = (String) vw.getAndSet(words, index, newValue);
+            vw.getAndSet(words, index, newValue);
+            String s17 = (String) vw.getAndSetRelease(words, index, newValue);
+            vw.getAndSetRelease(words, index, newValue);
+
+            String s18 = (String) vw.get(words, index);
+            vw.get(words, index);
+            String s19 = (String) vw.getAcquire(words, index);
+            vw.getAcquire(words, index);
+            String s20 = (String) vw.getOpaque(words, index);
+            vw.getOpaque(words, index);
+            String s21 = (String) vw.getVolatile(words, index);
+            vw.getVolatile(words, index);
+
+            vw.set(words, index, newValue);
+            vw.setOpaque(words, index, newValue);
+            vw.setRelease(words, index, newValue);
+            vw.setVolatile(words, index, newValue);
+        }
+    }
+}
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/expected.txt b/dx/tests/141-invoke-polymorphic-varhandles/expected.txt
new file mode 100644
index 0000000..84ebc07
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/expected.txt
@@ -0,0 +1,364 @@
+Trying SDK version 20 with invoke-polymorphic.
+com.android.dx.cf.code.SimException: signature-polymorphic method called without --min-sdk-version >= 26
+java.lang.invoke.VarHandle proto(java.lang.Class)
+java.lang.invoke.VarHandle proto(java.lang.Class, java.lang.String, java.lang.Class)
+java.lang.invoke.VarHandle.compareAndExchange:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.compareAndExchange:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.compareAndExchange:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.compareAndExchange:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.compareAndExchangeAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.compareAndExchangeRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.compareAndExchangeRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.compareAndExchangeRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.compareAndExchangeRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.compareAndSet:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.compareAndSet:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+java.lang.invoke.VarHandle.get:(LVarHandleDexTest;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.get:([Ljava/lang/String;I)Ljava/lang/String;
+java.lang.invoke.VarHandle.get:(LVarHandleDexTest;)V
+java.lang.invoke.VarHandle.get:([Ljava/lang/String;I)V
+java.lang.invoke.VarHandle.get:(LVarHandleDexTest;)Z
+java.lang.invoke.VarHandle.getAcquire:(LVarHandleDexTest;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/String;I)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAcquire:(LVarHandleDexTest;)V
+java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/String;I)V
+java.lang.invoke.VarHandle.getAcquire:(LVarHandleDexTest;)Z
+java.lang.invoke.VarHandle.getAndAdd:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndAdd:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndAdd:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndAdd:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndAddAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndAddAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndAddAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndAddAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndAddRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndAddRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndAddRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndAddRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseAnd:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseAnd:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseAnd:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseAnd:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseAndRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseOr:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseOr:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseOr:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseOr:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseOrRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseXor:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseXor:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseXor:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseXor:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:(LVarHandleDexTest;ZZ)V
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+java.lang.invoke.VarHandle.getAndBitwiseXorRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.getAndSet:(LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndSet:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndSet:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.getAndSet:(LVarHandleDexTest;Z)Z
+java.lang.invoke.VarHandle.getAndSetAcquire:(LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndSetAcquire:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndSetAcquire:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.getAndSetAcquire:(LVarHandleDexTest;Z)Z
+java.lang.invoke.VarHandle.getAndSetRelease:(LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+java.lang.invoke.VarHandle.getAndSetRelease:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.getAndSetRelease:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.getAndSetRelease:(LVarHandleDexTest;Z)Z
+java.lang.invoke.VarHandle.getOpaque:(LVarHandleDexTest;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/String;I)Ljava/lang/String;
+java.lang.invoke.VarHandle.getOpaque:(LVarHandleDexTest;)V
+java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/String;I)V
+java.lang.invoke.VarHandle.getOpaque:(LVarHandleDexTest;)Z
+java.lang.invoke.VarHandle.getVolatile:(LVarHandleDexTest;)Ljava/lang/Float;
+java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/String;I)Ljava/lang/String;
+java.lang.invoke.VarHandle.getVolatile:(LVarHandleDexTest;)V
+java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/String;I)V
+java.lang.invoke.VarHandle.getVolatile:(LVarHandleDexTest;)Z
+java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.set:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.set:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.set:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.setOpaque:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.setOpaque:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.setRelease:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.setRelease:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.setRelease:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.setVolatile:(LVarHandleDexTest;Ljava/lang/Float;)V
+java.lang.invoke.VarHandle.setVolatile:(LVarHandleDexTest;Z)V
+java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/String;ILjava/lang/String;)V
+java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.weakCompareAndSet:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.weakCompareAndSet:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.weakCompareAndSetAcquire:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetAcquire:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.weakCompareAndSetPlain:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetPlain:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;
+java.lang.invoke.VarHandle.weakCompareAndSetRelease:(LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+java.lang.invoke.VarHandle.weakCompareAndSetRelease:(LVarHandleDexTest;ZZ)Z
+java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)Z
+invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;ZZ)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)Z
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)Z
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)Z
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Z
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Z
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Z
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Z
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Z)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)Ljava/lang/Float;
+invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, (LVarHandleDexTest;Ljava/lang/Float;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchange:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndExchangeRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Z
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAddAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAdd:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndAddRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAnd:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseAndRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOr:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseOrRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXor:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v3, v2}, java.lang.invoke.VarHandle.getAndBitwiseXorRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSetAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSet:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.getAndSetRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.get:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)V
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getAcquire:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)V
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)V
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)Ljava/lang/String;
+invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;I)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
+invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)Ljava/lang/Object;, ([Ljava/lang/String;ILjava/lang/String;)V
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/info.txt b/dx/tests/141-invoke-polymorphic-varhandles/info.txt
new file mode 100644
index 0000000..b3613e8
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/info.txt
@@ -0,0 +1,2 @@
+This test checks the conversion of signature-polymorphic methods
+in the java.lang.invoke.VarHandle class.
diff --git a/dx/tests/141-invoke-polymorphic-varhandles/run b/dx/tests/141-invoke-polymorphic-varhandles/run
new file mode 100644
index 0000000..b0b134d
--- /dev/null
+++ b/dx/tests/141-invoke-polymorphic-varhandles/run
@@ -0,0 +1,32 @@
+#!/bin/bash
+#
+# Copyright (C) 2017 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+UNSUPPORTED_SDK_VERSION=20
+SUPPORTED_SDK_VERSION=27
+
+# Compilation requires Java 9 compiler.
+# $JAVAC javac --release 9 -d . VarHandleDexTest.java
+
+echo Trying SDK version $UNSUPPORTED_SDK_VERSION with invoke-polymorphic.
+dx --min-sdk-version=$UNSUPPORTED_SDK_VERSION --debug --dex --dump-to=- --dump-width=1000 VarHandleDexTest.class 2>&1 | grep "SimException"
+if [ $? != 0 ] ; then
+    echo Unexpected success with SDK version $UNSUPPORTED_SDK_VERSION
+    exit 1
+fi
+
+# Run dx and capture cleaned-up lines refering to invoke.VarHandle.
+dx --min-sdk-version=$SUPPORTED_SDK_VERSION --debug --dex --dump-to=- --dump-width=1000 VarHandleDexTest.class | \
+    sed -n -e 's/.*] *//' -e 's/.*\(invoke-polymorphic\)/\1/' -e 's@ *//.*@@' -e '/invoke[.]VarHandle/p'