1afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath/*
2afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * Copyright 2012, Google Inc.
3afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * All rights reserved.
4afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath *
5afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * Redistribution and use in source and binary forms, with or without
6afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * modification, are permitted provided that the following conditions are
7afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * met:
8afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath *
9afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath *     * Redistributions of source code must retain the above copyright
10afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * notice, this list of conditions and the following disclaimer.
11afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath *     * Redistributions in binary form must reproduce the above
12afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * copyright notice, this list of conditions and the following disclaimer
13afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * in the documentation and/or other materials provided with the
14afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * distribution.
15afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath *     * Neither the name of Google Inc. nor the names of its
16afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * contributors may be used to endorse or promote products derived from
17afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * this software without specific prior written permission.
18afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath *
19afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
20afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
21afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
22afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
23afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
24afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
25afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
26afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
27afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
29afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath */
31afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath
32afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamathpackage org.jf.dexlib2.builder.instruction;
33afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath
34afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamathimport org.jf.dexlib2.Format;
35afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamathimport org.jf.dexlib2.Opcode;
36afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamathimport org.jf.dexlib2.builder.BuilderInstruction;
37afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamathimport org.jf.dexlib2.iface.instruction.formats.Instruction4rcc;
38afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamathimport org.jf.dexlib2.iface.reference.Reference;
39afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamathimport org.jf.dexlib2.util.Preconditions;
40afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath
41afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamathimport javax.annotation.Nonnull;
42afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath
43afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamathpublic class BuilderInstruction4rcc extends BuilderInstruction implements Instruction4rcc {
44afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    public static final Format FORMAT = Format.Format4rcc;
45afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath
46afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    protected final int startRegister;
47afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    protected final int registerCount;
48afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath
49afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    @Nonnull protected final Reference reference;
50afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    @Nonnull protected final Reference reference2;
51afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath
52afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    public BuilderInstruction4rcc(@Nonnull Opcode opcode,
53afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath                                  int startRegister,
54afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath                                  int registerCount,
55afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath                                  @Nonnull Reference reference,
56afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath                                  @Nonnull Reference reference2) {
57afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath        super(opcode);
58afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath        this.startRegister = Preconditions.checkShortRegister(startRegister);
59afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath        this.registerCount = Preconditions.checkRegisterRangeCount(registerCount);
60afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath        this.reference = reference;
61afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath        this.reference2 = reference2;
62afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    }
63afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath
64afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    @Override public int getStartRegister() { return startRegister; }
65afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    @Override public int getRegisterCount() { return registerCount; }
66afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    @Nonnull @Override public Reference getReference() { return reference; }
67afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    @Override public int getReferenceType() { return opcode.referenceType; }
68afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    @Nonnull @Override public Reference getReference2() { return reference2; }
69afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    @Override public int getReferenceType2() { return opcode.referenceType2; }
70afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath
71afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath    @Override public Format getFormat() { return FORMAT; }
72afc1f1593936326e1c99f8328bbce8b495865000Narayan Kamath}
73