InstructionComparator.smali

.class public abstract Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;
.super Ljava/lang/Object;


# annotations
.annotation system Ldalvik/annotation/MemberClasses;
    value = {
        Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;,
        Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;,
        Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;,
        Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;
    }
.end annotation


# instance fields
.field private final insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

.field private final insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

.field private final insns1:[S

.field private final insns2:[S

.field private final visitedInsnAddrPairs:Ljava/util/Set;
    .annotation system Ldalvik/annotation/Signature;
        value = {
            "Ljava/util/Set",
            "<",
            "Ljava/lang/String;",
            ">;"
        }
    .end annotation
.end field


# direct methods
.method public constructor <init>([S[S)V
    .registers 6

    const/4 v2, 0x0

    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    iput-object p1, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insns1:[S

    iput-object p2, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insns2:[S

    if-eqz p1, :cond_2c

    new-instance v0, Lcom/tencent/tinker/android/dx/instruction/ShortArrayCodeInput;

    invoke-direct {v0, p1}, Lcom/tencent/tinker/android/dx/instruction/ShortArrayCodeInput;-><init>([S)V

    array-length v1, p1

    invoke-direct {p0, v0, v1}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->readInstructionsIntoHolders(Lcom/tencent/tinker/android/dx/instruction/ShortArrayCodeInput;I)[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    move-result-object v0

    iput-object v0, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    :goto_16
    if-eqz p2, :cond_2f

    new-instance v0, Lcom/tencent/tinker/android/dx/instruction/ShortArrayCodeInput;

    invoke-direct {v0, p2}, Lcom/tencent/tinker/android/dx/instruction/ShortArrayCodeInput;-><init>([S)V

    array-length v1, p2

    invoke-direct {p0, v0, v1}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->readInstructionsIntoHolders(Lcom/tencent/tinker/android/dx/instruction/ShortArrayCodeInput;I)[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    move-result-object v0

    iput-object v0, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    :goto_24
    new-instance v0, Ljava/util/HashSet;

    invoke-direct {v0}, Ljava/util/HashSet;-><init>()V

    iput-object v0, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->visitedInsnAddrPairs:Ljava/util/Set;

    return-void

    :cond_2c
    iput-object v2, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    goto :goto_16

    :cond_2f
    iput-object v2, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    goto :goto_24
.end method

.method private compareIndex(III)Z
    .registers 5

    invoke-static {p1}, Lcom/tencent/tinker/android/dx/instruction/InstructionCodec;->getInstructionIndexType(I)I

    move-result v0

    packed-switch v0, :pswitch_data_22

    if-ne p2, p3, :cond_1f

    const/4 v0, 0x1

    :goto_a
    return v0

    :pswitch_b
    invoke-virtual {p0, p2, p3}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->compareString(II)Z

    move-result v0

    goto :goto_a

    :pswitch_10
    invoke-virtual {p0, p2, p3}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->compareType(II)Z

    move-result v0

    goto :goto_a

    :pswitch_15
    invoke-virtual {p0, p2, p3}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->compareField(II)Z

    move-result v0

    goto :goto_a

    :pswitch_1a
    invoke-virtual {p0, p2, p3}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->compareMethod(II)Z

    move-result v0

    goto :goto_a

    :cond_1f
    const/4 v0, 0x0

    goto :goto_a

    nop

    :pswitch_data_22
    .packed-switch 0x2
        :pswitch_10
        :pswitch_b
        :pswitch_1a
        :pswitch_15
    .end packed-switch
.end method

.method private readInstructionsIntoHolders(Lcom/tencent/tinker/android/dx/instruction/ShortArrayCodeInput;I)[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;
    .registers 7

    invoke-virtual {p1}, Lcom/tencent/tinker/android/dx/instruction/ShortArrayCodeInput;->reset()V

    new-array v0, p2, [Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    new-instance v1, Lcom/tencent/tinker/android/dx/instruction/InstructionReader;

    invoke-direct {v1, p1}, Lcom/tencent/tinker/android/dx/instruction/InstructionReader;-><init>(Lcom/tencent/tinker/android/dx/instruction/ShortArrayCodeInput;)V

    :try_start_a
    new-instance v2, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$1;

    const/4 v3, 0x0

    invoke-direct {v2, p0, v3, v0}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$1;-><init>(Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;Lcom/tencent/tinker/android/dx/instruction/InstructionVisitor;[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;)V

    invoke-virtual {v1, v2}, Lcom/tencent/tinker/android/dx/instruction/InstructionReader;->accept(Lcom/tencent/tinker/android/dx/instruction/InstructionVisitor;)V
    :try_end_13
    .catch Ljava/io/EOFException; {:try_start_a .. :try_end_13} :catch_14

    return-object v0

    :catch_14
    move-exception v0

    new-instance v1, Ljava/lang/RuntimeException;

    invoke-direct {v1, v0}, Ljava/lang/RuntimeException;-><init>(Ljava/lang/Throwable;)V

    throw v1
.end method


# virtual methods
.method public final compare()Z
    .registers 15

    const/4 v6, 0x0

    const/16 v12, 0x1b

    const/16 v11, 0x1a

    const/4 v8, 0x1

    const/4 v1, 0x0

    iget-object v0, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->visitedInsnAddrPairs:Ljava/util/Set;

    invoke-interface {v0}, Ljava/util/Set;->clear()V

    iget-object v0, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    if-nez v0, :cond_16

    iget-object v0, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    if-nez v0, :cond_16

    move v1, v8

    :cond_15
    :goto_15
    return v1

    :cond_16
    iget-object v0, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    if-eqz v0, :cond_15

    iget-object v0, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    if-eqz v0, :cond_15

    move v0, v1

    move v2, v1

    move v3, v1

    move v4, v1

    :cond_22
    iget-object v5, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    array-length v5, v5

    if-ge v4, v5, :cond_90

    iget-object v5, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    array-length v5, v5

    if-ge v3, v5, :cond_90

    move-object v5, v6

    :goto_2d
    iget-object v7, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    array-length v7, v7

    if-ge v4, v7, :cond_3e

    if-nez v5, :cond_3e

    iget-object v7, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    add-int/lit8 v5, v4, 0x1

    aget-object v4, v7, v4

    move-object v13, v4

    move v4, v5

    move-object v5, v13

    goto :goto_2d

    :cond_3e
    if-eqz v5, :cond_90

    add-int/lit8 v2, v2, 0x1

    move-object v7, v6

    :goto_43
    iget-object v9, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    array-length v9, v9

    if-ge v3, v9, :cond_54

    if-nez v7, :cond_54

    iget-object v9, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    add-int/lit8 v7, v3, 0x1

    aget-object v3, v9, v3

    move-object v13, v3

    move v3, v7

    move-object v7, v13

    goto :goto_43

    :cond_54
    if-eqz v7, :cond_90

    add-int/lit8 v0, v0, 0x1

    iget v9, v5, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->opcode:I

    iget v10, v7, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->opcode:I

    if-eq v9, v10, :cond_84

    iget v9, v5, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->opcode:I

    if-ne v9, v11, :cond_71

    iget v9, v7, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->opcode:I

    if-ne v9, v12, :cond_71

    iget v5, v5, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->index:I

    iget v7, v7, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->index:I

    invoke-virtual {p0, v5, v7}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->compareString(II)Z

    move-result v5

    if-nez v5, :cond_22

    goto :goto_15

    :cond_71
    iget v9, v5, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->opcode:I

    if-ne v9, v12, :cond_15

    iget v9, v7, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->opcode:I

    if-ne v9, v11, :cond_15

    iget v5, v5, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->index:I

    iget v7, v7, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->index:I

    invoke-virtual {p0, v5, v7}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->compareString(II)Z

    move-result v5

    if-nez v5, :cond_22

    goto :goto_15

    :cond_84
    iget v5, v5, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->address:I

    iget v7, v7, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->address:I

    invoke-virtual {p0, v5, v7}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->isSameInstruction(II)Z

    move-result v5

    if-nez v5, :cond_22

    goto :goto_15

    :cond_8f
    move v4, v5

    :cond_90
    iget-object v5, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    array-length v5, v5

    if-ge v4, v5, :cond_a0

    iget-object v6, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    add-int/lit8 v5, v4, 0x1

    aget-object v4, v6, v4

    if-eqz v4, :cond_8f

    goto/16 :goto_15

    :cond_9f
    move v3, v4

    :cond_a0
    iget-object v4, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    array-length v4, v4

    if-ge v3, v4, :cond_af

    iget-object v5, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    add-int/lit8 v4, v3, 0x1

    aget-object v3, v5, v3

    if-eqz v3, :cond_9f

    goto/16 :goto_15

    :cond_af
    if-ne v2, v0, :cond_15

    move v1, v8

    goto/16 :goto_15
.end method

.method protected abstract compareField(II)Z
.end method

.method protected abstract compareMethod(II)Z
.end method

.method protected abstract compareString(II)Z
.end method

.method protected abstract compareType(II)Z
.end method

.method public isSameInstruction(II)Z
    .registers 11

    const/4 v2, 0x1

    const/4 v3, 0x0

    iget-object v0, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders1:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    aget-object v0, v0, p1

    iget-object v1, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->insnHolders2:[Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;

    aget-object v1, v1, p2

    if-nez v0, :cond_10

    if-nez v1, :cond_10

    move v3, v2

    :cond_f
    :goto_f
    return v3

    :cond_10
    if-eqz v0, :cond_f

    if-eqz v1, :cond_f

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->opcode:I

    iget v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->opcode:I

    if-ne v4, v5, :cond_f

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->opcode:I

    iget v5, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->insnFormat:I

    packed-switch v5, :pswitch_data_170

    :pswitch_21
    iget-wide v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->literal:J

    iget-wide v6, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->literal:J

    cmp-long v4, v4, v6

    if-nez v4, :cond_f

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->registerCount:I

    iget v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->registerCount:I

    if-ne v4, v5, :cond_f

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->a:I

    iget v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->a:I

    if-ne v4, v5, :cond_f

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->b:I

    iget v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->b:I

    if-ne v4, v5, :cond_f

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->c:I

    iget v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->c:I

    if-ne v4, v5, :cond_f

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->d:I

    iget v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->d:I

    if-ne v4, v5, :cond_f

    iget v0, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->e:I

    iget v1, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->e:I

    if-ne v0, v1, :cond_f

    move v3, v2

    goto :goto_f

    :pswitch_4f
    new-instance v3, Ljava/lang/StringBuilder;

    invoke-direct {v3}, Ljava/lang/StringBuilder;-><init>()V

    invoke-virtual {v3, p1}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v3

    const-string/jumbo v4, "-"

    invoke-virtual {v3, v4}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v3

    invoke-virtual {v3, p2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;

    move-result-object v3

    invoke-virtual {v3}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v3

    iget-object v4, p0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->visitedInsnAddrPairs:Ljava/util/Set;

    invoke-interface {v4, v3}, Ljava/util/Set;->add(Ljava/lang/Object;)Z

    move-result v3

    if-eqz v3, :cond_78

    iget v0, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->target:I

    iget v1, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->target:I

    invoke-virtual {p0, v0, v1}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->isSameInstruction(II)Z

    move-result v3

    goto :goto_f

    :cond_78
    move v3, v2

    goto :goto_f

    :pswitch_7a
    iget v0, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->index:I

    iget v1, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$InstructionHolder;->index:I

    invoke-direct {p0, v4, v0, v1}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->compareIndex(III)Z

    move-result v3

    goto :goto_f

    :pswitch_83
    check-cast v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;

    check-cast v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;->firstKey:I

    iget v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;->firstKey:I

    if-ne v4, v5, :cond_f

    iget-object v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;->targets:[I

    array-length v4, v4

    iget-object v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;->targets:[I

    array-length v5, v5

    if-ne v4, v5, :cond_f

    iget-object v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;->targets:[I

    array-length v5, v4

    move v4, v3

    :goto_99
    if-ge v4, v5, :cond_ac

    iget-object v6, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;->targets:[I

    aget v6, v6, v4

    iget-object v7, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$PackedSwitchPayloadInsntructionHolder;->targets:[I

    aget v7, v7, v4

    invoke-virtual {p0, v6, v7}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->isSameInstruction(II)Z

    move-result v6

    if-eqz v6, :cond_f

    add-int/lit8 v4, v4, 0x1

    goto :goto_99

    :cond_ac
    move v3, v2

    goto/16 :goto_f

    :pswitch_af
    check-cast v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;

    check-cast v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;

    iget-object v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;->keys:[I

    iget-object v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;->keys:[I

    invoke-static {v4, v5}, Lcom/tencent/tinker/android/dex/util/CompareUtils;->uArrCompare([I[I)I

    move-result v4

    if-nez v4, :cond_f

    iget-object v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;->targets:[I

    array-length v4, v4

    iget-object v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;->targets:[I

    array-length v5, v5

    if-ne v4, v5, :cond_f

    iget-object v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;->targets:[I

    array-length v5, v4

    move v4, v3

    :goto_c9
    if-ge v4, v5, :cond_dc

    iget-object v6, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;->targets:[I

    aget v6, v6, v4

    iget-object v7, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$SparseSwitchPayloadInsntructionHolder;->targets:[I

    aget v7, v7, v4

    invoke-virtual {p0, v6, v7}, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator;->isSameInstruction(II)Z

    move-result v6

    if-eqz v6, :cond_f

    add-int/lit8 v4, v4, 0x1

    goto :goto_c9

    :cond_dc
    move v3, v2

    goto/16 :goto_f

    :pswitch_df
    check-cast v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;

    check-cast v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->elementWidth:I

    iget v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->elementWidth:I

    if-ne v4, v5, :cond_f

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->size:I

    iget v5, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->size:I

    if-ne v4, v5, :cond_f

    iget v4, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->elementWidth:I

    packed-switch v4, :pswitch_data_1aa

    :pswitch_f4
    new-instance v0, Lcom/tencent/tinker/android/dex/DexException;

    new-instance v1, Ljava/lang/StringBuilder;

    invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V

    const-string/jumbo v2, "bogus element_width: "

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-static {v4}, Lcom/tencent/tinker/android/dx/util/Hex;->u2(I)Ljava/lang/String;

    move-result-object v2

    invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;

    move-result-object v1

    invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;

    move-result-object v1

    invoke-direct {v0, v1}, Lcom/tencent/tinker/android/dex/DexException;-><init>(Ljava/lang/String;)V

    throw v0

    :pswitch_112
    iget-object v0, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->data:Ljava/lang/Object;

    check-cast v0, [B

    check-cast v0, [B

    iget-object v1, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->data:Ljava/lang/Object;

    check-cast v1, [B

    check-cast v1, [B

    invoke-static {v0, v1}, Lcom/tencent/tinker/android/dex/util/CompareUtils;->uArrCompare([B[B)I

    move-result v0

    if-nez v0, :cond_128

    move v0, v2

    :goto_125
    move v3, v0

    goto/16 :goto_f

    :cond_128
    move v0, v3

    goto :goto_125

    :pswitch_12a
    iget-object v0, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->data:Ljava/lang/Object;

    check-cast v0, [S

    check-cast v0, [S

    iget-object v1, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->data:Ljava/lang/Object;

    check-cast v1, [S

    check-cast v1, [S

    invoke-static {v0, v1}, Lcom/tencent/tinker/android/dex/util/CompareUtils;->uArrCompare([S[S)I

    move-result v0

    if-nez v0, :cond_13f

    :goto_13c
    move v3, v2

    goto/16 :goto_f

    :cond_13f
    move v2, v3

    goto :goto_13c

    :pswitch_141
    iget-object v0, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->data:Ljava/lang/Object;

    check-cast v0, [I

    check-cast v0, [I

    iget-object v1, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->data:Ljava/lang/Object;

    check-cast v1, [I

    check-cast v1, [I

    invoke-static {v0, v1}, Lcom/tencent/tinker/android/dex/util/CompareUtils;->uArrCompare([I[I)I

    move-result v0

    if-nez v0, :cond_156

    :goto_153
    move v3, v2

    goto/16 :goto_f

    :cond_156
    move v2, v3

    goto :goto_153

    :pswitch_158
    iget-object v0, v0, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->data:Ljava/lang/Object;

    check-cast v0, [J

    check-cast v0, [J

    iget-object v1, v1, Lcom/tencent/tinker/android/dx/instruction/InstructionComparator$FillArrayDataPayloadInstructionHolder;->data:Ljava/lang/Object;

    check-cast v1, [J

    check-cast v1, [J

    invoke-static {v0, v1}, Lcom/tencent/tinker/android/dex/util/CompareUtils;->sArrCompare([J[J)I

    move-result v0

    if-nez v0, :cond_16d

    :goto_16a
    move v3, v2

    goto/16 :goto_f

    :cond_16d
    move v2, v3

    goto :goto_16a

    nop

    :pswitch_data_170
    .packed-switch 0x2
        :pswitch_4f
        :pswitch_21
        :pswitch_21
        :pswitch_21
        :pswitch_21
        :pswitch_4f
        :pswitch_7a
        :pswitch_21
        :pswitch_21
        :pswitch_4f
        :pswitch_21
        :pswitch_7a
        :pswitch_21
        :pswitch_4f
        :pswitch_21
        :pswitch_21
        :pswitch_4f
        :pswitch_7a
        :pswitch_21
        :pswitch_4f
        :pswitch_21
        :pswitch_7a
        :pswitch_7a
        :pswitch_21
        :pswitch_df
        :pswitch_83
        :pswitch_af
    .end packed-switch

    :pswitch_data_1aa
    .packed-switch 0x1
        :pswitch_112
        :pswitch_12a
        :pswitch_f4
        :pswitch_141
        :pswitch_f4
        :pswitch_f4
        :pswitch_f4
        :pswitch_158
    .end packed-switch
.end method