1// Copyright (c) 2016, the R8 project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4package com.android.tools.r8.code;
5
6import com.android.tools.r8.graph.DexField;
7import com.android.tools.r8.graph.OffsetToObjectMapping;
8import com.android.tools.r8.graph.UseRegistry;
9import com.android.tools.r8.ir.code.MemberType;
10import com.android.tools.r8.ir.conversion.IRBuilder;
11
12public class IgetObject extends Format22c {
13
14  public static final int OPCODE = 0x54;
15  public static final String NAME = "IgetObject";
16  public static final String SMALI_NAME = "iget-object";
17
18  /*package*/ IgetObject(int high, BytecodeStream stream, OffsetToObjectMapping mapping) {
19    super(high, stream, mapping.getFieldMap());
20  }
21
22  public IgetObject(int destRegister, int objectRegister, DexField field) {
23    super(destRegister, objectRegister, field);
24  }
25
26  public String getName() {
27    return NAME;
28  }
29
30  public String getSmaliName() {
31    return SMALI_NAME;
32  }
33
34  public int getOpcode() {
35    return OPCODE;
36  }
37
38  @Override
39  public DexField getField() {
40    return (DexField) CCCC;
41  }
42
43  @Override
44  public void registerUse(UseRegistry registry) {
45    registry.registerInstanceFieldRead(getField());
46  }
47
48  @Override
49  public void buildIR(IRBuilder builder) {
50    builder.addInstanceGet(MemberType.OBJECT, A, B, getField());
51  }
52
53  @Override
54  public boolean canThrow() {
55    return true;
56  }
57}
58