1*795d594fSAndroid Build Coastguard Worker# 2*795d594fSAndroid Build Coastguard Worker# Copyright (C) 2018 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker# 4*795d594fSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker# You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker# 8*795d594fSAndroid Build Coastguard Worker# http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker# 10*795d594fSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker# distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker# limitations under the License. 15*795d594fSAndroid Build Coastguard Worker 16*795d594fSAndroid Build Coastguard Worker.source "VarHandleUnhappyAccessors.smali" 17*795d594fSAndroid Build Coastguard Worker 18*795d594fSAndroid Build Coastguard Worker.class public LVarHandleUnhappyAccessors; 19*795d594fSAndroid Build Coastguard Worker.super Ljava/lang/Object; 20*795d594fSAndroid Build Coastguard Worker 21*795d594fSAndroid Build Coastguard Worker.method public constructor <init>()V 22*795d594fSAndroid Build Coastguard Worker.registers 4 23*795d594fSAndroid Build Coastguard Worker invoke-direct {p0}, Ljava/lang/Object;-><init>()V 24*795d594fSAndroid Build Coastguard Worker invoke-static {}, LVarHandleUnhappyAccessors;->getVarHandle()Ljava/lang/invoke/VarHandle; 25*795d594fSAndroid Build Coastguard Worker move-result-object v0 26*795d594fSAndroid Build Coastguard Worker invoke-static {}, LVarHandleUnhappyAccessors;->getObjectArray()[Ljava/lang/Object; 27*795d594fSAndroid Build Coastguard Worker move-result-object v1 28*795d594fSAndroid Build Coastguard Worker invoke-static {v0, v1}, LVarHandleUnhappyAccessors;->compareAndExchange(Ljava/lang/invoke/VarHandle;[Ljava/lang/Object;)V 29*795d594fSAndroid Build Coastguard Worker invoke-static {v0}, LVarHandleUnhappyAccessors;->compareAndExchangeAcquire(Ljava/lang/invoke/VarHandle;)V 30*795d594fSAndroid Build Coastguard Worker invoke-static {v0}, LVarHandleUnhappyAccessors;->compareAndExchangeRelease(Ljava/lang/invoke/VarHandle;)V 31*795d594fSAndroid Build Coastguard Worker invoke-static {v0}, LVarHandleUnhappyAccessors;->compareAndSet(Ljava/lang/invoke/VarHandle;)V 32*795d594fSAndroid Build Coastguard Worker return-void 33*795d594fSAndroid Build Coastguard Worker.end method 34*795d594fSAndroid Build Coastguard Worker 35*795d594fSAndroid Build Coastguard Worker# The following methods all invoke VarHandle accessors but the targetted 36*795d594fSAndroid Build Coastguard Worker# accessor methods have the wrong signature. 37*795d594fSAndroid Build Coastguard Worker 38*795d594fSAndroid Build Coastguard Worker.method public static compareAndExchange(Ljava/lang/invoke/VarHandle;[Ljava/lang/Object;)V 39*795d594fSAndroid Build Coastguard Worker.registers 2 40*795d594fSAndroid Build Coastguard Worker invoke-polymorphic {p0, p1}, Ljava/lang/invoke/VarHandle;->compareAndExchange([Ljava/lang/Object;)Ljava/lang/Integer;, ([Ljava/lang/Object;)Ljava/lang/Object; 41*795d594fSAndroid Build Coastguard Worker.end method 42*795d594fSAndroid Build Coastguard Worker 43*795d594fSAndroid Build Coastguard Worker.method public static compareAndExchangeAcquire(Ljava/lang/invoke/VarHandle;)V 44*795d594fSAndroid Build Coastguard Worker.registers 2 45*795d594fSAndroid Build Coastguard Worker const/4 v0, 1 46*795d594fSAndroid Build Coastguard Worker invoke-polymorphic {p0, v0}, Ljava/lang/invoke/VarHandle;->compareAndExchangeAcquire(I)Ljava/lang/Object;, ([Ljava/lang/Object;)Ljava/lang/Object; 47*795d594fSAndroid Build Coastguard Worker.end method 48*795d594fSAndroid Build Coastguard Worker 49*795d594fSAndroid Build Coastguard Worker.method public static compareAndExchangeRelease(Ljava/lang/invoke/VarHandle;)V 50*795d594fSAndroid Build Coastguard Worker.registers 1 51*795d594fSAndroid Build Coastguard Worker invoke-polymorphic {p0}, Ljava/lang/invoke/VarHandle;->compareAndExchangeRelease()V, ([Ljava/lang/Object;)Ljava/lang/Object; 52*795d594fSAndroid Build Coastguard Worker.end method 53*795d594fSAndroid Build Coastguard Worker 54*795d594fSAndroid Build Coastguard Worker.method public static compareAndSet(Ljava/lang/invoke/VarHandle;)V 55*795d594fSAndroid Build Coastguard Worker.registers 2 56*795d594fSAndroid Build Coastguard Worker const/4 v0, 1 57*795d594fSAndroid Build Coastguard Worker invoke-polymorphic {p0, v0}, Ljava/lang/invoke/VarHandle;->compareAndSet(I)Z, ([Ljava/lang/Object;)Ljava/lang/Object; 58*795d594fSAndroid Build Coastguard Worker.end method 59*795d594fSAndroid Build Coastguard Worker 60*795d594fSAndroid Build Coastguard Worker.method public static getVarHandle()Ljava/lang/invoke/VarHandle; 61*795d594fSAndroid Build Coastguard Worker.registers 1 62*795d594fSAndroid Build Coastguard Worker const/4 v0, 0 63*795d594fSAndroid Build Coastguard Worker return-object v0 64*795d594fSAndroid Build Coastguard Worker.end method 65*795d594fSAndroid Build Coastguard Worker 66*795d594fSAndroid Build Coastguard Worker.method public static getObjectArray()[Ljava/lang/Object; 67*795d594fSAndroid Build Coastguard Worker.registers 1 68*795d594fSAndroid Build Coastguard Worker const/4 v0, 0 69*795d594fSAndroid Build Coastguard Worker return-object v0 70*795d594fSAndroid Build Coastguard Worker.end method 71