From c4d4ef4faee171d690171fbf09e6ebfdb23783af Mon Sep 17 00:00:00 2001 From: Orion Hodson Date: Wed, 20 Dec 2017 15:09:40 +0000 Subject: dx: Extend descriptors used for signature polymorphic methods Refines the descriptor applied to signature polymorphic methods with new code points for VarHandle set methods and compareAndSet methods. Bug: 65872996 Test: art/tools/buildbot --host -j32 && dx/dalvik/tests/run-all-tests Change-Id: I89d93f234c7bc6cbaae88d6627c4d47f01ec7f83 --- dx/src/com/android/dx/dex/code/RopTranslator.java | 2 +- .../android/dx/rop/code/InvokePolymorphicInsn.java | 91 +++++++++++++++--- .../141-invoke-polymorphic-varhandles/expected.txt | 102 ++++++++++----------- 3 files changed, 131 insertions(+), 64 deletions(-) diff --git a/dx/src/com/android/dx/dex/code/RopTranslator.java b/dx/src/com/android/dx/dex/code/RopTranslator.java index 3630740d6..8375f9ee3 100644 --- a/dx/src/com/android/dx/dex/code/RopTranslator.java +++ b/dx/src/com/android/dx/dex/code/RopTranslator.java @@ -705,7 +705,7 @@ public final class RopTranslator { RegisterSpecList regs = insn.getSources(); Constant[] constants = new Constant[] { - insn.getInvokeMethod(), + insn.getPolymorphicMethod(), insn.getCallSiteProto() }; DalvInsn di = new MultiCstInsn(opcode, pos, regs, constants); diff --git a/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java b/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java index e5def1da4..ca5a3b8f4 100644 --- a/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java +++ b/dx/src/com/android/dx/rop/code/InvokePolymorphicInsn.java @@ -28,9 +28,18 @@ import com.android.dx.rop.type.TypeList; * multiple constants. */ public class InvokePolymorphicInsn extends Insn { - private static final CstString INVOKE_DESCRIPTOR = + /** Default descriptor for signature polymorphic methods. */ + private static final CstString DEFAULT_DESCRIPTOR = new CstString("([Ljava/lang/Object;)Ljava/lang/Object;"); + /** Descriptor for VarHandle set methods. */ + private static final CstString VARHANDLE_SET_DESCRIPTOR = + new CstString("([Ljava/lang/Object;)V"); + + /** Descriptor for VarHandle compare-and-set methods. */ + private static final CstString VARHANDLE_COMPARE_AND_SET_DESCRIPTOR = + new CstString("([Ljava/lang/Object;)Z"); + /** {@code non-null;} list of exceptions caught */ private final TypeList catches; @@ -42,10 +51,9 @@ public class InvokePolymorphicInsn extends Insn { private final CstMethodRef callSiteMethod; /** - * {@code non-null;} method to invoke, either {@code java.lang.invoke.MethodHandle.invoke} or - * {@code java.lang.invoke.MethodHandle.invokeExact}. + * {@code non-null;} signature polymorphic method. */ - private final CstMethodRef invokeMethod; + private final CstMethodRef polymorphicMethod; /** * {@code non-null;} the call site prototype. @@ -82,7 +90,7 @@ public class InvokePolymorphicInsn extends Insn { } this.callSiteMethod = callSiteMethod; - this.invokeMethod = makeInvokeMethod(callSiteMethod); + this.polymorphicMethod = makePolymorphicMethod(callSiteMethod); this.callSiteProto = makeCallSiteProto(callSiteMethod); } @@ -137,8 +145,8 @@ public class InvokePolymorphicInsn extends Insn { * * @return {@code non-null;} method reference to be invoked */ - public CstMethodRef getInvokeMethod() { - return invokeMethod; + public CstMethodRef getPolymorphicMethod() { + return polymorphicMethod; } /** @@ -155,15 +163,74 @@ public class InvokePolymorphicInsn extends Insn { /** {@inheritDoc} */ @Override public String getInlineString() { - return getInvokeMethod().toString() + " " + + return getPolymorphicMethod().toString() + " " + getCallSiteProto().toString() + " " + ThrowingInsn.toCatchString(catches); } - 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(callSiteMethod.getDefiningClass(), cstNat); + private static CstMethodRef makePolymorphicMethod(final CstMethodRef callSiteMethod) { + CstType definingClass= callSiteMethod.getDefiningClass(); + CstString cstMethodName = callSiteMethod.getNat().getName(); + String methodName = callSiteMethod.getNat().getName().getString(); + + if (definingClass.equals(CstType.METHOD_HANDLE)) { + if (methodName.equals("invoke") || methodName.equals("invokeExact")) { + CstNat cstNat = new CstNat(cstMethodName, DEFAULT_DESCRIPTOR); + return new CstMethodRef(definingClass, cstNat); + } + } + + if (definingClass.equals(CstType.VAR_HANDLE)) { + switch (methodName) { + case "compareAndExchange": + case "compareAndExchangeAcquire": + case "compareAndExchangeRelease": + 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": + { + CstNat cstNat = new CstNat(cstMethodName, DEFAULT_DESCRIPTOR); + return new CstMethodRef(definingClass, cstNat); + } + case "set": + case "setOpaque": + case "setRelease": + case "setVolatile": + { + CstNat cstNat = new CstNat(cstMethodName, VARHANDLE_SET_DESCRIPTOR); + return new CstMethodRef(definingClass, cstNat); + } + case "compareAndSet": + case "weakCompareAndSet": + case "weakCompareAndSetAcquire": + case "weakCompareAndSetPlain": + case "weakCompareAndSetRelease": + { + CstNat cstNat = new CstNat(cstMethodName, VARHANDLE_COMPARE_AND_SET_DESCRIPTOR); + return new CstMethodRef(definingClass, cstNat); + } + default: + break; + } + } + throw new IllegalArgumentException("Unknown signature polymorphic method: " + + callSiteMethod.toHuman()); } private static CstProtoRef makeCallSiteProto(final CstMethodRef callSiteMethod) { diff --git a/dx/tests/141-invoke-polymorphic-varhandles/expected.txt b/dx/tests/141-invoke-polymorphic-varhandles/expected.txt index 7488fb79d..12d3a9ee7 100644 --- a/dx/tests/141-invoke-polymorphic-varhandles/expected.txt +++ b/dx/tests/141-invoke-polymorphic-varhandles/expected.txt @@ -23,9 +23,9 @@ java.lang.invoke.VarHandle.compareAndExchangeRelease:(LVarHandleDexTest;Ljava/la 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/Object;)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; @@ -156,37 +156,37 @@ 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/Object;)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/Object;)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/Object;)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/Object;)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/Object;)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/Object;)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/Object;)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/Object;)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 @@ -194,16 +194,16 @@ invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndExchan 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.compareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z +invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z +invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z +invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z +invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z +invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z +invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z +invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z +invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, (LVarHandleDexTest;ZZ)Z +invoke-polymorphic {v1, v0, v5, v6}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, (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 @@ -242,26 +242,26 @@ invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/O 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, v6}, java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)V, (LVarHandleDexTest;Z)V +invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)V, (LVarHandleDexTest;Z)V +invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)V, (LVarHandleDexTest;Z)V +invoke-polymorphic {v1, v0, v6}, java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)V, (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.compareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z +invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.compareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z +invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z +invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetAcquire:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z +invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z +invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSet:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z +invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z +invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetPlain:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z +invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, (LVarHandleDexTest;Ljava/lang/Float;Ljava/lang/Float;)Z +invoke-polymorphic {v1, v0, v3, v2}, java.lang.invoke.VarHandle.weakCompareAndSetRelease:([Ljava/lang/Object;)Z, (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; @@ -300,26 +300,26 @@ invoke-polymorphic {v1, v0}, java.lang.invoke.VarHandle.getOpaque:([Ljava/lang/O 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, v2}, java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)V, (LVarHandleDexTest;Ljava/lang/Float;)V +invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)V, (LVarHandleDexTest;Ljava/lang/Float;)V +invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)V, (LVarHandleDexTest;Ljava/lang/Float;)V +invoke-polymorphic {v1, v0, v2}, java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)V, (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.compareAndSet:([Ljava/lang/Object;)Z, ([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;)Z, ([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;)Z, ([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;)Z, ([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;)Z, ([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;)Z, ([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;)Z, ([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;)Z, ([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;)Z, ([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;)Z, ([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; @@ -358,7 +358,7 @@ invoke-polymorphic {v1, v0, v7}, java.lang.invoke.VarHandle.getOpaque:([Ljava/la 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 +invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.set:([Ljava/lang/Object;)V, ([Ljava/lang/String;ILjava/lang/String;)V +invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.setOpaque:([Ljava/lang/Object;)V, ([Ljava/lang/String;ILjava/lang/String;)V +invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.setRelease:([Ljava/lang/Object;)V, ([Ljava/lang/String;ILjava/lang/String;)V +invoke-polymorphic {v1, v0, v7, v2}, java.lang.invoke.VarHandle.setVolatile:([Ljava/lang/Object;)V, ([Ljava/lang/String;ILjava/lang/String;)V -- cgit v1.2.3