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'