1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/*
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License.
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project *
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License.
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage com.android.dx.rop.code;
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.Constant;
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.CstBaseMethodRef;
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.CstMethodRef;
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.cst.CstType;
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.Prototype;
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.StdTypeList;
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.Type;
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.TypeBearer;
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport com.android.dx.rop.type.TypeList;
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/**
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Standard instances of {@link Rop}.
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic final class Rops {
3399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code nop()} */
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NOP =
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NOP, Type.VOID, StdTypeList.EMPTY, "nop");
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: int :: r = x;} */
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_INT =
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE, Type.INT, StdTypeList.INT, "move-int");
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: long :: r = x;} */
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_LONG =
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE, Type.LONG, StdTypeList.LONG, "move-long");
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: float :: r = x;} */
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_FLOAT =
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE, Type.FLOAT, StdTypeList.FLOAT, "move-float");
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
4999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: double :: r = x;} */
50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_DOUBLE =
51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE, Type.DOUBLE, StdTypeList.DOUBLE, "move-double");
52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
5399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: Object :: r = x;} */
54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_OBJECT =
55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE, Type.OBJECT, StdTypeList.OBJECT, "move-object");
56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
5899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r,x: ReturnAddress :: r = x;}
59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Note that this rop-form instruction has no dex-form equivilent and
61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * must be removed before the dex conversion.
62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_RETURN_ADDRESS =
64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE, Type.RETURN_ADDRESS,
65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                StdTypeList.RETURN_ADDRESS, "move-return-address");
66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,param(x): int :: r = param(x);} */
68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_PARAM_INT =
69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE_PARAM, Type.INT, StdTypeList.EMPTY,
70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "move-param-int");
71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,param(x): long :: r = param(x);} */
73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_PARAM_LONG =
74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE_PARAM, Type.LONG, StdTypeList.EMPTY,
75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "move-param-long");
76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
7799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,param(x): float :: r = param(x);} */
78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_PARAM_FLOAT =
79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE_PARAM, Type.FLOAT, StdTypeList.EMPTY,
80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "move-param-float");
81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,param(x): double :: r = param(x);} */
83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_PARAM_DOUBLE =
84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE_PARAM, Type.DOUBLE, StdTypeList.EMPTY,
85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "move-param-double");
86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,param(x): Object :: r = param(x);} */
88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MOVE_PARAM_OBJECT =
89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MOVE_PARAM, Type.OBJECT, StdTypeList.EMPTY,
90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "move-param-object");
91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
9299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r, literal: int :: r = literal;} */
93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONST_INT =
94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONST, Type.INT, StdTypeList.EMPTY, "const-int");
95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
9699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r, literal: long :: r = literal;} */
97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONST_LONG =
98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONST, Type.LONG, StdTypeList.EMPTY, "const-long");
99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
10099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r, literal: float :: r = literal;} */
101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONST_FLOAT =
102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONST, Type.FLOAT, StdTypeList.EMPTY, "const-float");
103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
10499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r, literal: double :: r = literal;} */
105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONST_DOUBLE =
106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONST, Type.DOUBLE, StdTypeList.EMPTY, "const-double");
107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
10899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r, literal: Object :: r = literal;} */
109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONST_OBJECT =
110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONST, Type.OBJECT, StdTypeList.EMPTY,
111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "const-object");
112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r, literal: Object :: r = literal;} */
114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONST_OBJECT_NOTHROW =
115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONST, Type.OBJECT, StdTypeList.EMPTY,
116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "const-object-nothrow");
117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
11899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code goto label} */
119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GOTO =
120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GOTO, Type.VOID, StdTypeList.EMPTY, Rop.BRANCH_GOTO,
121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "goto");
122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: int :: if (x == 0) goto label} */
124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_EQZ_INT =
125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-eqz-int");
127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
12899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: int :: if (x != 0) goto label} */
129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_NEZ_INT =
130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-nez-int");
132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: int :: if (x < 0) goto label} */
134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_LTZ_INT =
135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_LT, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-ltz-int");
137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
13899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: int :: if (x >= 0) goto label} */
139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_GEZ_INT =
140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_GE, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-gez-int");
142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: int :: if (x <= 0) goto label} */
144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_LEZ_INT =
145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_LE, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-lez-int");
147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: int :: if (x > 0) goto label} */
149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_GTZ_INT =
150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_GT, Type.VOID, StdTypeList.INT, Rop.BRANCH_IF,
151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-gtz-int");
152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
15399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Object :: if (x == null) goto label} */
154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_EQZ_OBJECT =
155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.OBJECT, Rop.BRANCH_IF,
156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-eqz-object");
157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
15899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Object :: if (x != null) goto label} */
159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_NEZ_OBJECT =
160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.OBJECT, Rop.BRANCH_IF,
161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-nez-object");
162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
16399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x,y: int :: if (x == y) goto label} */
164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_EQ_INT =
165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-eq-int");
167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
16899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x,y: int :: if (x != y) goto label} */
169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_NE_INT =
170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-ne-int");
172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x,y: int :: if (x < y) goto label} */
174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_LT_INT =
175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_LT, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-lt-int");
177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
17899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x,y: int :: if (x >= y) goto label} */
179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_GE_INT =
180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_GE, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-ge-int");
182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x,y: int :: if (x <= y) goto label} */
184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_LE_INT =
185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_LE, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-le-int");
187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
18899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x,y: int :: if (x > y) goto label} */
189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_GT_INT =
190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_GT, Type.VOID, StdTypeList.INT_INT, Rop.BRANCH_IF,
191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "if-gt-int");
192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x,y: Object :: if (x == y) goto label} */
194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_EQ_OBJECT =
195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_EQ, Type.VOID, StdTypeList.OBJECT_OBJECT,
196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Rop.BRANCH_IF, "if-eq-object");
197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
19899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x,y: Object :: if (x != y) goto label} */
199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop IF_NE_OBJECT =
200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.IF_NE, Type.VOID, StdTypeList.OBJECT_OBJECT,
201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Rop.BRANCH_IF, "if-ne-object");
202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: int :: goto switchtable[x]} */
204de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop SWITCH =
205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SWITCH, Type.VOID, StdTypeList.INT, Rop.BRANCH_SWITCH,
206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "switch");
207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
20899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x + y;} */
209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop ADD_INT =
210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.ADD, Type.INT, StdTypeList.INT_INT, "add-int");
211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
21299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: long :: r = x + y;} */
213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop ADD_LONG =
214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.ADD, Type.LONG, StdTypeList.LONG_LONG, "add-long");
215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
21699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: float :: r = x + y;} */
217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop ADD_FLOAT =
218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.ADD, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "add-float");
219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: double :: r = x + y;} */
221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop ADD_DOUBLE =
222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.ADD, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Rop.BRANCH_NONE, "add-double");
224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x - y;} */
226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SUB_INT =
227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SUB, Type.INT, StdTypeList.INT_INT, "sub-int");
228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: long :: r = x - y;} */
230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SUB_LONG =
231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SUB, Type.LONG, StdTypeList.LONG_LONG, "sub-long");
232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: float :: r = x - y;} */
234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SUB_FLOAT =
235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SUB, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "sub-float");
236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
23799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: double :: r = x - y;} */
238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SUB_DOUBLE =
239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SUB, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Rop.BRANCH_NONE, "sub-double");
241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x * y;} */
243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MUL_INT =
244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MUL, Type.INT, StdTypeList.INT_INT, "mul-int");
245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
24699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: long :: r = x * y;} */
247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MUL_LONG =
248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MUL, Type.LONG, StdTypeList.LONG_LONG, "mul-long");
249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: float :: r = x * y;} */
251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MUL_FLOAT =
252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MUL, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "mul-float");
253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: double :: r = x * y;} */
255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MUL_DOUBLE =
256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MUL, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Rop.BRANCH_NONE, "mul-double");
258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
25999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x / y;} */
260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop DIV_INT =
261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.DIV, Type.INT, StdTypeList.INT_INT,
262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_ArithmeticException, "div-int");
263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: long :: r = x / y;} */
265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop DIV_LONG =
266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.DIV, Type.LONG, StdTypeList.LONG_LONG,
267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_ArithmeticException, "div-long");
268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
26999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: float :: r = x / y;} */
270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop DIV_FLOAT =
271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.DIV, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "div-float");
272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: double :: r = x / y;} */
274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop DIV_DOUBLE =
275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.DIV, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "div-double");
277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x % y;} */
279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop REM_INT =
280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.REM, Type.INT, StdTypeList.INT_INT,
281f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_ArithmeticException, "rem-int");
282f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
28399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: long :: r = x % y;} */
284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop REM_LONG =
285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.REM, Type.LONG, StdTypeList.LONG_LONG,
286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_ArithmeticException, "rem-long");
287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
28899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: float :: r = x % y;} */
289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop REM_FLOAT =
290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.REM, Type.FLOAT, StdTypeList.FLOAT_FLOAT, "rem-float");
291f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: double :: r = x % y;} */
293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop REM_DOUBLE =
294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.REM, Type.DOUBLE, StdTypeList.DOUBLE_DOUBLE,
295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "rem-double");
296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
29799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: int :: r = -x;} */
298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEG_INT =
299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEG, Type.INT, StdTypeList.INT, "neg-int");
300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
30199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: long :: r = -x;} */
302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEG_LONG =
303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEG, Type.LONG, StdTypeList.LONG, "neg-long");
304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
30599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: float :: r = -x;} */
306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEG_FLOAT =
307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEG, Type.FLOAT, StdTypeList.FLOAT, "neg-float");
308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
30999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: double :: r = -x;} */
310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEG_DOUBLE =
311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEG, Type.DOUBLE, StdTypeList.DOUBLE, "neg-double");
312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
31399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x & y;} */
314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop AND_INT =
315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AND, Type.INT, StdTypeList.INT_INT, "and-int");
316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
31799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: long :: r = x & y;} */
318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop AND_LONG =
319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AND, Type.LONG, StdTypeList.LONG_LONG, "and-long");
320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x | y;} */
322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop OR_INT =
323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.OR, Type.INT, StdTypeList.INT_INT, "or-int");
324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: long :: r = x | y;} */
326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop OR_LONG =
327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.OR, Type.LONG, StdTypeList.LONG_LONG, "or-long");
328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
32999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x ^ y;} */
330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop XOR_INT =
331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.XOR, Type.INT, StdTypeList.INT_INT, "xor-int");
332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
33399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: long :: r = x ^ y;} */
334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop XOR_LONG =
335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.XOR, Type.LONG, StdTypeList.LONG_LONG, "xor-long");
336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
33799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x << y;} */
338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SHL_INT =
339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SHL, Type.INT, StdTypeList.INT_INT, "shl-int");
340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
34199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: long; y: int :: r = x << y;} */
342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SHL_LONG =
343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SHL, Type.LONG, StdTypeList.LONG_INT, "shl-long");
344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
34599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x >> y;} */
346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SHR_INT =
347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SHR, Type.INT, StdTypeList.INT_INT, "shr-int");
348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
34999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: long; y: int :: r = x >> y;} */
350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SHR_LONG =
351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SHR, Type.LONG, StdTypeList.LONG_INT, "shr-long");
352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,y: int :: r = x >>> y;} */
354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop USHR_INT =
355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.USHR, Type.INT, StdTypeList.INT_INT, "ushr-int");
356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: long; y: int :: r = x >>> y;} */
358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop USHR_LONG =
359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.USHR, Type.LONG, StdTypeList.LONG_INT, "ushr-long");
360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
36199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: int :: r = ~x;} */
362f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NOT_INT =
363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NOT, Type.INT, StdTypeList.INT, "not-int");
364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
36599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: long :: r = ~x;} */
366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NOT_LONG =
367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NOT, Type.LONG, StdTypeList.LONG, "not-long");
368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
36999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x + c;} */
370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop ADD_CONST_INT =
371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.ADD, Type.INT, StdTypeList.INT, "add-const-int");
372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
37399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: long :: r = x + c;} */
374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop ADD_CONST_LONG =
375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.ADD, Type.LONG, StdTypeList.LONG, "add-const-long");
376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
37799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: float :: r = x + c;} */
378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop ADD_CONST_FLOAT =
379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.ADD, Type.FLOAT, StdTypeList.FLOAT, "add-const-float");
380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
38199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: double :: r = x + c;} */
382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop ADD_CONST_DOUBLE =
383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.ADD, Type.DOUBLE, StdTypeList.DOUBLE,
384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "add-const-double");
385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
38699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x - c;} */
387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SUB_CONST_INT =
388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SUB, Type.INT, StdTypeList.INT, "sub-const-int");
389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: long :: r = x - c;} */
391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SUB_CONST_LONG =
392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SUB, Type.LONG, StdTypeList.LONG, "sub-const-long");
393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: float :: r = x - c;} */
395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SUB_CONST_FLOAT =
396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SUB, Type.FLOAT, StdTypeList.FLOAT, "sub-const-float");
397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: double :: r = x - c;} */
399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SUB_CONST_DOUBLE =
400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SUB, Type.DOUBLE, StdTypeList.DOUBLE,
401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "sub-const-double");
402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x * c;} */
404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MUL_CONST_INT =
405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MUL, Type.INT, StdTypeList.INT, "mul-const-int");
406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
40799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: long :: r = x * c;} */
408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MUL_CONST_LONG =
409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MUL, Type.LONG, StdTypeList.LONG, "mul-const-long");
410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: float :: r = x * c;} */
412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MUL_CONST_FLOAT =
413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MUL, Type.FLOAT, StdTypeList.FLOAT, "mul-const-float");
414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
41599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: double :: r = x * c;} */
416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MUL_CONST_DOUBLE =
417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MUL, Type.DOUBLE, StdTypeList.DOUBLE,
418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "mul-const-double");
419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x / c;} */
421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop DIV_CONST_INT =
422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.DIV, Type.INT, StdTypeList.INT,
423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_ArithmeticException, "div-const-int");
424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
42599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: long :: r = x / c;} */
426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop DIV_CONST_LONG =
427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.DIV, Type.LONG, StdTypeList.LONG,
428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_ArithmeticException, "div-const-long");
429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
43099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: float :: r = x / c;} */
431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop DIV_CONST_FLOAT =
432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.DIV, Type.FLOAT, StdTypeList.FLOAT, "div-const-float");
433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
43499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: double :: r = x / c;} */
435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop DIV_CONST_DOUBLE =
436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.DIV, Type.DOUBLE, StdTypeList.DOUBLE,
437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "div-const-double");
438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
43999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x % c;} */
440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop REM_CONST_INT =
441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.REM, Type.INT, StdTypeList.INT,
442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_ArithmeticException, "rem-const-int");
443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: long :: r = x % c;} */
445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop REM_CONST_LONG =
446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.REM, Type.LONG, StdTypeList.LONG,
447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_ArithmeticException, "rem-const-long");
448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: float :: r = x % c;} */
450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop REM_CONST_FLOAT =
451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.REM, Type.FLOAT, StdTypeList.FLOAT, "rem-const-float");
452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
45399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: double :: r = x % c;} */
454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop REM_CONST_DOUBLE =
455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.REM, Type.DOUBLE, StdTypeList.DOUBLE,
456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "rem-const-double");
457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
45899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x & c;} */
459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop AND_CONST_INT =
460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AND, Type.INT, StdTypeList.INT, "and-const-int");
461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
46299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: long :: r = x & c;} */
463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop AND_CONST_LONG =
464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AND, Type.LONG, StdTypeList.LONG, "and-const-long");
465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
46699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x | c;} */
467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop OR_CONST_INT =
468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.OR, Type.INT, StdTypeList.INT, "or-const-int");
469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: long :: r = x | c;} */
471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop OR_CONST_LONG =
472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.OR, Type.LONG, StdTypeList.LONG, "or-const-long");
473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x ^ c;} */
475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop XOR_CONST_INT =
476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.XOR, Type.INT, StdTypeList.INT, "xor-const-int");
477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
47899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: long :: r = x ^ c;} */
479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop XOR_CONST_LONG =
480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.XOR, Type.LONG, StdTypeList.LONG, "xor-const-long");
481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x << c;} */
483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SHL_CONST_INT =
484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SHL, Type.INT, StdTypeList.INT, "shl-const-int");
485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
48699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: long; c: int :: r = x << c;} */
487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SHL_CONST_LONG =
488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SHL, Type.LONG, StdTypeList.INT, "shl-const-long");
489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x >> c;} */
491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SHR_CONST_INT =
492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SHR, Type.INT, StdTypeList.INT, "shr-const-int");
493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: long; c: int :: r = x >> c;} */
495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop SHR_CONST_LONG =
496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.SHR, Type.LONG, StdTypeList.INT, "shr-const-long");
497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
49899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x,c: int :: r = x >>> c;} */
499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop USHR_CONST_INT =
500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.USHR, Type.INT, StdTypeList.INT, "ushr-const-int");
501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
50299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,x: long; c: int :: r = x >>> c;} */
503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop USHR_CONST_LONG =
504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.USHR, Type.LONG, StdTypeList.INT, "ushr-const-long");
505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
50699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int; x,y: long :: r = cmp(x, y);} */
507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CMPL_LONG =
508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CMPL, Type.INT, StdTypeList.LONG_LONG, "cmpl-long");
509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
51099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int; x,y: float :: r = cmpl(x, y);} */
511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CMPL_FLOAT =
512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CMPL, Type.INT, StdTypeList.FLOAT_FLOAT, "cmpl-float");
513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
51499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int; x,y: double :: r = cmpl(x, y);} */
515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CMPL_DOUBLE =
516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CMPL, Type.INT, StdTypeList.DOUBLE_DOUBLE,
517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "cmpl-double");
518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
51999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int; x,y: float :: r = cmpg(x, y);} */
520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CMPG_FLOAT =
521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CMPG, Type.INT, StdTypeList.FLOAT_FLOAT, "cmpg-float");
522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
52399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int; x,y: double :: r = cmpg(x, y);} */
524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CMPG_DOUBLE =
525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CMPG, Type.INT, StdTypeList.DOUBLE_DOUBLE,
526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "cmpg-double");
527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
52899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int; x: long :: r = (int) x} */
529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_L2I =
530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.INT, StdTypeList.LONG, "conv-l2i");
531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int; x: float :: r = (int) x} */
533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_F2I =
534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.INT, StdTypeList.FLOAT, "conv-f2i");
535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
53699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int; x: double :: r = (int) x} */
537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_D2I =
538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.INT, StdTypeList.DOUBLE, "conv-d2i");
539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: long; x: int :: r = (long) x} */
541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_I2L =
542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.LONG, StdTypeList.INT, "conv-i2l");
543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: long; x: float :: r = (long) x} */
545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_F2L =
546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.LONG, StdTypeList.FLOAT, "conv-f2l");
547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
54899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: long; x: double :: r = (long) x} */
549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_D2L =
550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.LONG, StdTypeList.DOUBLE, "conv-d2l");
551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: float; x: int :: r = (float) x} */
553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_I2F =
554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.FLOAT, StdTypeList.INT, "conv-i2f");
555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
55699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: float; x: long :: r = (float) x} */
557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_L2F =
558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.FLOAT, StdTypeList.LONG, "conv-l2f");
559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: float; x: double :: r = (float) x} */
561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_D2F =
562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.FLOAT, StdTypeList.DOUBLE, "conv-d2f");
563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: double; x: int :: r = (double) x} */
565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_I2D =
566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.DOUBLE, StdTypeList.INT, "conv-i2d");
567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
56899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: double; x: long :: r = (double) x} */
569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_L2D =
570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.DOUBLE, StdTypeList.LONG, "conv-l2d");
571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
57299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: double; x: float :: r = (double) x} */
573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop CONV_F2D =
574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CONV, Type.DOUBLE, StdTypeList.FLOAT, "conv-f2d");
575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
57799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r,x: int :: r = (x << 24) >> 24} (Java-style
578de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * convert int to byte)
579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
580de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop TO_BYTE =
581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.TO_BYTE, Type.INT, StdTypeList.INT, "to-byte");
582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
58499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r,x: int :: r = x & 0xffff} (Java-style
585de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * convert int to char)
586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop TO_CHAR =
588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.TO_CHAR, Type.INT, StdTypeList.INT, "to-char");
589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
59199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r,x: int :: r = (x << 16) >> 16} (Java-style
592de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * convert int to short)
593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop TO_SHORT =
595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.TO_SHORT, Type.INT, StdTypeList.INT, "to-short");
596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
59799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code return void} */
598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop RETURN_VOID =
599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.EMPTY, Rop.BRANCH_RETURN,
600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "return-void");
601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
60299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: int; return x} */
603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop RETURN_INT =
604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.INT, Rop.BRANCH_RETURN,
605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "return-int");
606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
60799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: long; return x} */
608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop RETURN_LONG =
609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.LONG, Rop.BRANCH_RETURN,
610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "return-long");
611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: float; return x} */
613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop RETURN_FLOAT =
614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.FLOAT, Rop.BRANCH_RETURN,
615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "return-float");
616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
61799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: double; return x} */
618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop RETURN_DOUBLE =
619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.DOUBLE,
620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Rop.BRANCH_RETURN, "return-double");
621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Object; return x} */
623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop RETURN_OBJECT =
624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.RETURN, Type.VOID, StdTypeList.OBJECT,
625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Rop.BRANCH_RETURN, "return-object");
626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
62799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code T: any type; r: int; x: T[]; :: r = x.length} */
628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop ARRAY_LENGTH =
629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.ARRAY_LENGTH, Type.INT, StdTypeList.OBJECT,
630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException, "array-length");
631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Throwable :: throw(x)} */
633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop THROW =
634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.THROW, Type.VOID, StdTypeList.THROWABLE,
635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                StdTypeList.THROWABLE, "throw");
636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
63799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Object :: monitorenter(x)} */
638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MONITOR_ENTER =
639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MONITOR_ENTER, Type.VOID, StdTypeList.OBJECT,
640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException, "monitor-enter");
641f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
64299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Object :: monitorexit(x)} */
643f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MONITOR_EXIT =
644f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.MONITOR_EXIT, Type.VOID, StdTypeList.OBJECT,
645f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_IllegalMonitorStateException,
646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "monitor-exit");
647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
64899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r,y: int; x: int[] :: r = x[y]} */
649de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop AGET_INT =
650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AGET, Type.INT, StdTypeList.INTARR_INT,
651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aget-int");
653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
65499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: long; x: long[]; y: int :: r = x[y]} */
655de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop AGET_LONG =
656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AGET, Type.LONG, StdTypeList.LONGARR_INT,
657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aget-long");
659f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
66099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: float; x: float[]; y: int :: r = x[y]} */
661de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop AGET_FLOAT =
662f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AGET, Type.FLOAT, StdTypeList.FLOATARR_INT,
663f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aget-float");
665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
66699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: double; x: double[]; y: int :: r = x[y]} */
667de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop AGET_DOUBLE =
668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AGET, Type.DOUBLE, StdTypeList.DOUBLEARR_INT,
669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aget-double");
671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
67299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: Object; x: Object[]; y: int :: r = x[y]} */
673de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop AGET_OBJECT =
674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AGET, Type.OBJECT, StdTypeList.OBJECTARR_INT,
675f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aget-object");
677f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
67899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: boolean; x: boolean[]; y: int :: r = x[y]} */
679de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop AGET_BOOLEAN =
680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AGET, Type.INT, StdTypeList.BOOLEANARR_INT,
681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aget-boolean");
683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
68499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: byte; x: byte[]; y: int :: r = x[y]} */
685de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop AGET_BYTE =
686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AGET, Type.INT, StdTypeList.BYTEARR_INT,
687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aget-byte");
688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
68999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: char; x: char[]; y: int :: r = x[y]} */
690de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop AGET_CHAR =
691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AGET, Type.INT, StdTypeList.CHARARR_INT,
692f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aget-char");
693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
69499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: short; x: short[]; y: int :: r = x[y]} */
695de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop AGET_SHORT =
696f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.AGET, Type.INT, StdTypeList.SHORTARR_INT,
697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aget-short");
699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
70099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x,z: int; y: int[] :: y[z] = x} */
701de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop APUT_INT =
702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_INTARR_INT,
703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aput-int");
704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
70599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: long; y: long[]; z: int :: y[z] = x} */
706de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop APUT_LONG =
707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.APUT, Type.VOID, StdTypeList.LONG_LONGARR_INT,
708f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds, "aput-long");
709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
71099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: float; y: float[]; z: int :: y[z] = x} */
711de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop APUT_FLOAT =
712f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.APUT, Type.VOID, StdTypeList.FLOAT_FLOATARR_INT,
713f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aput-float");
715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
71699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: double; y: double[]; z: int :: y[z] = x} */
717de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop APUT_DOUBLE =
718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.APUT, Type.VOID, StdTypeList.DOUBLE_DOUBLEARR_INT,
719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndexOutOfBounds,
720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aput-double");
721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Object; y: Object[]; z: int :: y[z] = x} */
723de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop APUT_OBJECT =
724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.APUT, Type.VOID, StdTypeList.OBJECT_OBJECTARR_INT,
725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore,
726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aput-object");
727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
72899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: boolean; y: boolean[]; z: int :: y[z] = x} */
729de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop APUT_BOOLEAN =
730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_BOOLEANARR_INT,
731f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore,
732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aput-boolean");
733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
73499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: byte; y: byte[]; z: int :: y[z] = x} */
735de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop APUT_BYTE =
736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_BYTEARR_INT,
737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore, "aput-byte");
738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
73999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: char; y: char[]; z: int :: y[z] = x} */
740de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop APUT_CHAR =
741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_CHARARR_INT,
742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore, "aput-char");
743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
74499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: short; y: short[]; z: int :: y[z] = x} */
745de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop APUT_SHORT =
746f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.APUT, Type.VOID, StdTypeList.INT_SHORTARR_INT,
747f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_Null_ArrayIndex_ArrayStore,
748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "aput-short");
749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
75199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code T: any non-array object type :: r =
752de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * alloc(T)} (allocate heap space for an object)
753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEW_INSTANCE =
755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEW_INSTANCE, Type.OBJECT, StdTypeList.EMPTY,
756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "new-instance");
757f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
75899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int[]; x: int :: r = new int[x]} */
759f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEW_ARRAY_INT =
760f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEW_ARRAY, Type.INT_ARRAY, StdTypeList.INT,
761f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NegativeArraySizeException,
762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "new-array-int");
763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
76499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: long[]; x: int :: r = new long[x]} */
765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEW_ARRAY_LONG =
766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEW_ARRAY, Type.LONG_ARRAY, StdTypeList.INT,
767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NegativeArraySizeException,
768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "new-array-long");
769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
77099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: float[]; x: int :: r = new float[x]} */
771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEW_ARRAY_FLOAT =
772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEW_ARRAY, Type.FLOAT_ARRAY, StdTypeList.INT,
773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NegativeArraySizeException,
774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "new-array-float");
775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
77699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: double[]; x: int :: r = new double[x]} */
777f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEW_ARRAY_DOUBLE =
778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEW_ARRAY, Type.DOUBLE_ARRAY, StdTypeList.INT,
779f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NegativeArraySizeException,
780f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "new-array-double");
781f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
78299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: boolean[]; x: int :: r = new boolean[x]} */
783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEW_ARRAY_BOOLEAN =
784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEW_ARRAY, Type.BOOLEAN_ARRAY, StdTypeList.INT,
785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NegativeArraySizeException,
786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "new-array-boolean");
787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
78899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: byte[]; x: int :: r = new byte[x]} */
789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEW_ARRAY_BYTE =
790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEW_ARRAY, Type.BYTE_ARRAY, StdTypeList.INT,
791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NegativeArraySizeException,
792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "new-array-byte");
793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
79499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: char[]; x: int :: r = new char[x]} */
795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEW_ARRAY_CHAR =
796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEW_ARRAY, Type.CHAR_ARRAY, StdTypeList.INT,
797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NegativeArraySizeException,
798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "new-array-char");
799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
80099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: short[]; x: int :: r = new short[x]} */
801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop NEW_ARRAY_SHORT =
802f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.NEW_ARRAY, Type.SHORT_ARRAY, StdTypeList.INT,
803f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NegativeArraySizeException,
804f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "new-array-short");
805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
80799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code T: any non-array object type; x: Object :: (T) x} (can
808de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * throw {@code ClassCastException})
809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
810de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro    public static final Rop CHECK_CAST =
811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.CHECK_CAST, Type.VOID, StdTypeList.OBJECT,
812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_ClassCastException, "check-cast");
813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
81599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code T: any non-array object type; x: Object :: x instanceof
81699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * T}. Note: This is listed as throwing {@code Error}
817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * explicitly because the op <i>can</i> throw, but there are no
818de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * other predefined exceptions for it.
819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop INSTANCE_OF =
821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.INSTANCE_OF, Type.INT, StdTypeList.OBJECT,
822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "instance-of");
823f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
82599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r: int; x: Object; f: instance field spec of
826de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * type int :: r = x.f}
827f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_FIELD_INT =
829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException, "get-field-int");
831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
83399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r: long; x: Object; f: instance field spec of
834de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * type long :: r = x.f}
835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_FIELD_LONG =
837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_FIELD, Type.LONG, StdTypeList.OBJECT,
838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException, "get-field-long");
839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
84199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r: float; x: Object; f: instance field spec of
842de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * type float :: r = x.f}
843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_FIELD_FLOAT =
845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_FIELD, Type.FLOAT, StdTypeList.OBJECT,
846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "get-field-float");
848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
85099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r: double; x: Object; f: instance field spec of
851de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * type double :: r = x.f}
852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
853f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_FIELD_DOUBLE =
854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_FIELD, Type.DOUBLE, StdTypeList.OBJECT,
855f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
856f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "get-field-double");
857f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
858f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
85999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r: Object; x: Object; f: instance field spec of
860de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * type Object :: r = x.f}
861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_FIELD_OBJECT =
863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_FIELD, Type.OBJECT, StdTypeList.OBJECT,
864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "get-field-object");
866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
86899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r: boolean; x: Object; f: instance field spec of
869de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * type boolean :: r = x.f}
870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_FIELD_BOOLEAN =
872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "get-field-boolean");
875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
87799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r: byte; x: Object; f: instance field spec of
878de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * type byte :: r = x.f}
879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_FIELD_BYTE =
881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "get-field-byte");
884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
885f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
88699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r: char; x: Object; f: instance field spec of
887de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * type char :: r = x.f}
888f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
889f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_FIELD_CHAR =
890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "get-field-char");
893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
89599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code r: short; x: Object; f: instance field spec of
896de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * type short :: r = x.f}
897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_FIELD_SHORT =
899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_FIELD, Type.INT, StdTypeList.OBJECT,
900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "get-field-short");
902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
90399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: int; f: static field spec of type int :: r = f} */
904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_STATIC_INT =
905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "get-static-int");
907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
90899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: long; f: static field spec of type long :: r = f} */
909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_STATIC_LONG =
910f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_STATIC, Type.LONG, StdTypeList.EMPTY,
911f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "get-static-long");
912f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
91399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: float; f: static field spec of type float :: r = f} */
914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_STATIC_FLOAT =
915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_STATIC, Type.FLOAT, StdTypeList.EMPTY,
916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "get-static-float");
917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
91899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: double; f: static field spec of type double :: r = f} */
919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_STATIC_DOUBLE =
920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_STATIC, Type.DOUBLE, StdTypeList.EMPTY,
921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "get-static-double");
922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
92399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: Object; f: static field spec of type Object :: r = f} */
924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_STATIC_OBJECT =
925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_STATIC, Type.OBJECT, StdTypeList.EMPTY,
926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "get-static-object");
927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
92899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: boolean; f: static field spec of type boolean :: r = f} */
929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_STATIC_BOOLEAN =
930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
931f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "get-field-boolean");
932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
93399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: byte; f: static field spec of type byte :: r = f} */
934f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_STATIC_BYTE =
935f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "get-field-byte");
937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
93899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: char; f: static field spec of type char :: r = f} */
939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_STATIC_CHAR =
940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "get-field-char");
942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
94399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code r: short; f: static field spec of type short :: r = f} */
944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop GET_STATIC_SHORT =
945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.GET_STATIC, Type.INT, StdTypeList.EMPTY,
946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "get-field-short");
947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
94999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code x: int; y: Object; f: instance field spec of type
950de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * int :: y.f = x}
951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_FIELD_INT =
953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
954f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException, "put-field-int");
955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
956f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
95799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code x: long; y: Object; f: instance field spec of type
958de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * long :: y.f = x}
959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_FIELD_LONG =
961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.LONG_OBJECT,
962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException, "put-field-long");
963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
96599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code x: float; y: Object; f: instance field spec of type
966de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * float :: y.f = x}
967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_FIELD_FLOAT =
969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.FLOAT_OBJECT,
970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "put-field-float");
972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
97499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code x: double; y: Object; f: instance field spec of type
975de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * double :: y.f = x}
976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
977f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_FIELD_DOUBLE =
978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.DOUBLE_OBJECT,
979f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
980f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "put-field-double");
981f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
98399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code x: Object; y: Object; f: instance field spec of type
984de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * Object :: y.f = x}
985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_FIELD_OBJECT =
987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.OBJECT_OBJECT,
988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "put-field-object");
990f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
99299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code x: int; y: Object; f: instance field spec of type
993de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * boolean :: y.f = x}
994f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
995f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_FIELD_BOOLEAN =
996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "put-field-boolean");
999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
100199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code x: int; y: Object; f: instance field spec of type
1002de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * byte :: y.f = x}
1003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1004f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_FIELD_BYTE =
1005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
1006f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
1007f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "put-field-byte");
1008f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1009f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
101099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code x: int; y: Object; f: instance field spec of type
1011de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * char :: y.f = x}
1012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_FIELD_CHAR =
1014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
1015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
1016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "put-field-char");
1017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1018f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
101999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code x: int; y: Object; f: instance field spec of type
1020de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     * short :: y.f = x}
1021f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1022f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_FIELD_SHORT =
1023f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_FIELD, Type.VOID, StdTypeList.INT_OBJECT,
1024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error_NullPointerException,
1025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "put-field-short");
1026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
102799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code f: static field spec of type int; x: int :: f = x} */
1028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_STATIC_INT =
1029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
1030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "put-static-int");
1031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
103299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code f: static field spec of type long; x: long :: f = x} */
1033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_STATIC_LONG =
1034f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.LONG,
1035f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "put-static-long");
1036f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
103799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code f: static field spec of type float; x: float :: f = x} */
1038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_STATIC_FLOAT =
1039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.FLOAT,
1040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "put-static-float");
1041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
104299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code f: static field spec of type double; x: double :: f = x} */
1043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_STATIC_DOUBLE =
1044f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.DOUBLE,
1045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "put-static-double");
1046f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
104799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code f: static field spec of type Object; x: Object :: f = x} */
1048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_STATIC_OBJECT =
1049f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.OBJECT,
1050f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "put-static-object");
1051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
105399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code f: static field spec of type boolean; x: boolean :: f =
105499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * x}
1055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_STATIC_BOOLEAN =
1057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
1058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "put-static-boolean");
1059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
106099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code f: static field spec of type byte; x: byte :: f = x} */
1061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_STATIC_BYTE =
1062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
1063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "put-static-byte");
1064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
106599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code f: static field spec of type char; x: char :: f = x} */
1066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_STATIC_CHAR =
1067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
1068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "put-static-char");
1069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
107099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code f: static field spec of type short; x: short :: f = x} */
1071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop PUT_STATIC_SHORT =
1072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.PUT_STATIC, Type.VOID, StdTypeList.INT,
1073f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Exceptions.LIST_Error, "put-static-short");
1074f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
107599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Int :: local variable begins in x} */
1076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MARK_LOCAL_INT =
1077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Rop (RegOps.MARK_LOCAL, Type.VOID,
1078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    StdTypeList.INT, "mark-local-int");
1079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
108099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Long :: local variable begins in x} */
1081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MARK_LOCAL_LONG =
1082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Rop (RegOps.MARK_LOCAL, Type.VOID,
1083f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    StdTypeList.LONG, "mark-local-long");
1084f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
108599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Float :: local variable begins in x} */
1086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MARK_LOCAL_FLOAT =
1087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Rop (RegOps.MARK_LOCAL, Type.VOID,
1088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    StdTypeList.FLOAT, "mark-local-float");
1089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
109099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Double :: local variable begins in x} */
1091f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MARK_LOCAL_DOUBLE =
1092f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Rop (RegOps.MARK_LOCAL, Type.VOID,
1093f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    StdTypeList.DOUBLE, "mark-local-double");
1094f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
109599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code x: Object :: local variable begins in x} */
1096f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop MARK_LOCAL_OBJECT =
1097f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            new Rop (RegOps.MARK_LOCAL, Type.VOID,
1098f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    StdTypeList.OBJECT, "mark-local-object");
1099f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
110099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project    /** {@code T: Any primitive type; v0..vx: T :: {v0, ..., vx}} */
1101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static final Rop FILL_ARRAY_DATA =
1102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        new Rop(RegOps.FILL_ARRAY_DATA, Type.VOID, StdTypeList.EMPTY,
1103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                "fill-array-data");
1104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the appropriate rop for the given opcode, destination,
1107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and sources. The result is typically, but not necessarily, a
1108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * shared instance.
1109de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
1110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * <p><b>Note:</b> This method does not do complete error checking on
1111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * its arguments, and so it may return an instance which seemed "right
1112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * enough" even though in actuality the passed arguments don't quite
1113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * match what is returned. TODO: Revisit this issue.</p>
1114de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
1115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @param opcode the opcode
1116d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein     * @param dest {@code non-null;} destination (result) type, or
1117d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein     * {@link Type#VOID} if none
111899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param sources {@code non-null;} list of source types
111999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param cst {@code null-ok;} associated constant, if any
112099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop ropFor(int opcode, TypeBearer dest, TypeList sources,
1123d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein            Constant cst) {
1124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (opcode) {
1125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.NOP: return NOP;
1126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.MOVE: return opMove(dest);
1127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.MOVE_PARAM: return opMoveParam(dest);
1128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.MOVE_EXCEPTION: return opMoveException(dest);
1129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.CONST: return opConst(dest);
1130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.GOTO: return GOTO;
1131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.IF_EQ: return opIfEq(sources);
1132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.IF_NE: return opIfNe(sources);
1133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.IF_LT: return opIfLt(sources);
1134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.IF_GE: return opIfGe(sources);
1135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.IF_LE: return opIfLe(sources);
1136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.IF_GT: return opIfGt(sources);
1137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.SWITCH: return SWITCH;
1138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.ADD: return opAdd(sources);
1139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.SUB: return opSub(sources);
1140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.MUL: return opMul(sources);
1141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.DIV: return opDiv(sources);
1142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.REM: return opRem(sources);
1143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.NEG: return opNeg(dest);
1144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.AND: return opAnd(sources);
1145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.OR: return opOr(sources);
1146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.XOR: return opXor(sources);
1147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.SHL: return opShl(sources);
1148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.SHR: return opShr(sources);
1149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.USHR: return opUshr(sources);
1150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.NOT: return opNot(dest);
1151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.CMPL: return opCmpl(sources.getType(0));
1152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.CMPG: return opCmpg(sources.getType(0));
1153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.CONV: return opConv(dest, sources.getType(0));
1154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.TO_BYTE: return TO_BYTE;
1155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.TO_CHAR: return TO_CHAR;
1156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.TO_SHORT: return TO_SHORT;
1157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.RETURN: {
1158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (sources.size() == 0) {
1159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    return RETURN_VOID;
1160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return opReturn(sources.getType(0));
1162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.ARRAY_LENGTH: return ARRAY_LENGTH;
1164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.THROW: return THROW;
1165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.MONITOR_ENTER: return MONITOR_ENTER;
1166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.MONITOR_EXIT: return MONITOR_EXIT;
1167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.AGET: {
1168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Type source = sources.getType(0);
1169d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                Type componentType;
1170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (source == Type.KNOWN_NULL) {
1171d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                    /*
1172d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                     * Treat a known-null as an array of the expected
1173d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                     * result type.
1174d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                     */
1175d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                    componentType = dest.getType();
1176d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                } else {
1177d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                    componentType = source.getComponentType();
1178d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                }
1179d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                return opAget(componentType);
1180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.APUT: {
1182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Type source = sources.getType(1);
1183d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                Type componentType;
1184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (source == Type.KNOWN_NULL) {
1185d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                    /*
1186d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                     * Treat a known-null as an array of the type being
1187d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                     * stored.
1188d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                     */
1189d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                    componentType = sources.getType(0);
1190d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                } else {
1191d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                    componentType = source.getComponentType();
1192d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                }
1193d24414a5d1780ce25179f3467b228f9a53863fb4Dan Bornstein                return opAput(componentType);
1194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.NEW_INSTANCE: return NEW_INSTANCE;
1196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.NEW_ARRAY: return opNewArray(dest.getType());
1197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.CHECK_CAST: return CHECK_CAST;
1198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.INSTANCE_OF: return INSTANCE_OF;
1199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.GET_FIELD: return opGetField(dest);
1200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.GET_STATIC: return opGetStatic(dest);
1201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.PUT_FIELD: return opPutField(sources.getType(0));
1202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.PUT_STATIC: return opPutStatic(sources.getType(0));
1203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.INVOKE_STATIC: {
1204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return opInvokeStatic(((CstMethodRef) cst).getPrototype());
1205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.INVOKE_VIRTUAL: {
1207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CstBaseMethodRef cstMeth = (CstMethodRef) cst;
1208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Prototype meth = cstMeth.getPrototype();
1209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CstType definer = cstMeth.getDefiningClass();
1210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                meth = meth.withFirstParameter(definer.getClassType());
1211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return opInvokeVirtual(meth);
1212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.INVOKE_SUPER: {
1214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CstBaseMethodRef cstMeth = (CstMethodRef) cst;
1215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Prototype meth = cstMeth.getPrototype();
1216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CstType definer = cstMeth.getDefiningClass();
1217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                meth = meth.withFirstParameter(definer.getClassType());
1218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return opInvokeSuper(meth);
1219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.INVOKE_DIRECT: {
1221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CstBaseMethodRef cstMeth = (CstMethodRef) cst;
1222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Prototype meth = cstMeth.getPrototype();
1223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CstType definer = cstMeth.getDefiningClass();
1224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                meth = meth.withFirstParameter(definer.getClassType());
1225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return opInvokeDirect(meth);
1226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case RegOps.INVOKE_INTERFACE: {
1228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CstBaseMethodRef cstMeth = (CstMethodRef) cst;
1229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                Prototype meth = cstMeth.getPrototype();
1230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                CstType definer = cstMeth.getDefiningClass();
1231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                meth = meth.withFirstParameter(definer.getClassType());
1232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return opInvokeInterface(meth);
1233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new RuntimeException("unknown opcode " + RegOps.opName(opcode));
1237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
124099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code move} rop for the given type. The
1241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * result is a shared instance.
1242de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
124399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of value being moved
124499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opMove(TypeBearer type) {
1247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicFrameType()) {
1248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:    return MOVE_INT;
1249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:   return MOVE_LONG;
1250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:  return MOVE_FLOAT;
1251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE: return MOVE_DOUBLE;
1252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT: return MOVE_OBJECT;
1253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_ADDR:   return MOVE_RETURN_ADDRESS;
1254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
126099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code move-param} rop for the
1261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given type. The result is a shared instance.
1262de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
126399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of value being moved
126499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opMoveParam(TypeBearer type) {
1267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicFrameType()) {
1268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:    return MOVE_PARAM_INT;
1269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:   return MOVE_PARAM_LONG;
1270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:  return MOVE_PARAM_FLOAT;
1271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE: return MOVE_PARAM_DOUBLE;
1272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT: return MOVE_PARAM_OBJECT;
1273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1275f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1278f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
127999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code move-exception} rop for the
1280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given type. The result may be a shared instance.
1281de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
128299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of the exception
128399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opMoveException(TypeBearer type) {
1286f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new Rop(RegOps.MOVE_EXCEPTION, type.getType(),
1287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       StdTypeList.EMPTY, (String) null);
1288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
129199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code move-result} rop for the
1292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given type. The result may be a shared instance.
1293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
129499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of the parameter
129599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1297f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opMoveResult(TypeBearer type) {
1298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new Rop(RegOps.MOVE_RESULT, type.getType(),
1299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       StdTypeList.EMPTY, (String) null);
1300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
130399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code move-result-pseudo} rop for the
1304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given type. The result may be a shared instance.
1305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
130699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of the parameter
130799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opMoveResultPseudo(TypeBearer type) {
1310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new Rop(RegOps.MOVE_RESULT_PSEUDO, type.getType(),
1311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       StdTypeList.EMPTY, (String) null);
1312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
131599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code const} rop for the given
1316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * type. The result is a shared instance.
1317de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
131899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of the constant
131999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opConst(TypeBearer type) {
1322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (type.getType() == Type.KNOWN_NULL) {
1323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return CONST_OBJECT_NOTHROW;
1324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicFrameType()) {
1327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:    return CONST_INT;
1328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:   return CONST_LONG;
1329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:  return CONST_FLOAT;
1330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE: return CONST_DOUBLE;
1331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT: return CONST_OBJECT;
1332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
133899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code if-eq} rop for the given
1339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * sources. The result is a shared instance.
1340de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
134199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} source types
134299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opIfEq(TypeList types) {
1345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickIf(types, IF_EQZ_INT, IF_EQZ_OBJECT,
1346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                      IF_EQ_INT, IF_EQ_OBJECT);
1347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
135099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code if-ne} rop for the given
1351f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * sources. The result is a shared instance.
1352de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
135399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} source types
135499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opIfNe(TypeList types) {
1357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickIf(types, IF_NEZ_INT, IF_NEZ_OBJECT,
1358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                      IF_NE_INT, IF_NE_OBJECT);
1359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
136299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code if-lt} rop for the given
1363f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * sources. The result is a shared instance.
1364de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
136599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} source types
136699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opIfLt(TypeList types) {
1369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickIf(types, IF_LTZ_INT, null, IF_LT_INT, null);
1370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
137399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code if-ge} rop for the given
1374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * sources. The result is a shared instance.
1375de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
137699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} source types
137799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opIfGe(TypeList types) {
1380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickIf(types, IF_GEZ_INT, null, IF_GE_INT, null);
1381f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
138499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code if-gt} rop for the given
1385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * sources. The result is a shared instance.
1386de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
138799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} source types
138899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opIfGt(TypeList types) {
1391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickIf(types, IF_GTZ_INT, null, IF_GT_INT, null);
1392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
139599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code if-le} rop for the given
1396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * sources. The result is a shared instance.
1397de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
139899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} source types
139999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opIfLe(TypeList types) {
1402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickIf(types, IF_LEZ_INT, null, IF_LE_INT, null);
1403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
140699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Helper for all the {@code if*}-related methods, which
1407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * checks types and picks one of the four variants, throwing if
1408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * there's a problem.
1409de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
141099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} the types
141199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param intZ {@code non-null;} the int-to-0 comparison
141299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param objZ {@code null-ok;} the object-to-null comparison
141399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param intInt {@code non-null;} the int-to-int comparison
141499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param objObj {@code non-null;} the object-to-object comparison
141599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} the appropriate instance
1416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static Rop pickIf(TypeList types, Rop intZ, Rop objZ, Rop intInt,
1418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                              Rop objObj) {
1419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch(types.size()) {
1420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case 1: {
1421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                switch (types.getType(0).getBasicFrameType()) {
1422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_INT: {
1423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        return intZ;
1424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
1425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_OBJECT: {
1426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        if (objZ != null) {
1427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            return objZ;
1428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        }
1429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
1430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
1432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case 2: {
1434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                int bt = types.getType(0).getBasicFrameType();
1435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                if (bt == types.getType(1).getBasicFrameType()) {
1436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    switch (bt) {
1437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        case Type.BT_INT: {
1438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            return intInt;
1439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        }
1440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        case Type.BT_OBJECT: {
1441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            if (objObj != null) {
1442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                return objObj;
1443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            }
1444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        }
1445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    }
1446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
1448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadTypes(types);
1452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
145599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code add} rop for the given
1456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1457de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
145899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
145999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opAdd(TypeList types) {
1462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, ADD_CONST_INT, ADD_CONST_LONG,
1463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            ADD_CONST_FLOAT, ADD_CONST_DOUBLE, ADD_INT,
1464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            ADD_LONG, ADD_FLOAT, ADD_DOUBLE);
1465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
146899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code sub} rop for the given
1469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1470de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
147199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
147299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opSub(TypeList types) {
1475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, SUB_CONST_INT, SUB_CONST_LONG,
1476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            SUB_CONST_FLOAT, SUB_CONST_DOUBLE, SUB_INT,
1477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            SUB_LONG, SUB_FLOAT, SUB_DOUBLE);
1478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
148199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code mul} rop for the given
1482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1483de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
148499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
148599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opMul(TypeList types) {
1488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, MUL_CONST_INT, MUL_CONST_LONG,
1489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            MUL_CONST_FLOAT, MUL_CONST_DOUBLE, MUL_INT,
1490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            MUL_LONG, MUL_FLOAT, MUL_DOUBLE);
1491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
149499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code div} rop for the given
1495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1496de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
149799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
149899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opDiv(TypeList types) {
1501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, DIV_CONST_INT, DIV_CONST_LONG,
1502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            DIV_CONST_FLOAT, DIV_CONST_DOUBLE, DIV_INT,
1503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            DIV_LONG, DIV_FLOAT, DIV_DOUBLE);
1504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
150799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code rem} rop for the given
1508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1509de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
151099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
151199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opRem(TypeList types) {
1514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, REM_CONST_INT, REM_CONST_LONG,
1515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            REM_CONST_FLOAT, REM_CONST_DOUBLE, REM_INT,
1516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            REM_LONG, REM_FLOAT, REM_DOUBLE);
1517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
152099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code and} rop for the given
1521f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1522de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
152399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
152499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opAnd(TypeList types) {
1527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, AND_CONST_INT, AND_CONST_LONG, null, null,
1528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            AND_INT, AND_LONG, null, null);
1529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
153299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code or} rop for the given
1533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1534de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
153599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
153699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opOr(TypeList types) {
1539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, OR_CONST_INT, OR_CONST_LONG, null, null,
1540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            OR_INT, OR_LONG, null, null);
1541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1543f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
154499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code xor} rop for the given
1545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1546de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
154799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
154899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opXor(TypeList types) {
1551f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, XOR_CONST_INT, XOR_CONST_LONG, null, null,
1552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            XOR_INT, XOR_LONG, null, null);
1553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
155699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code shl} rop for the given
1557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1558de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
155999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
156099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opShl(TypeList types) {
1563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, SHL_CONST_INT, SHL_CONST_LONG, null, null,
1564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            SHL_INT, SHL_LONG, null, null);
1565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
156899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code shr} rop for the given
1569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1570de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
157199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
157299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opShr(TypeList types) {
1575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, SHR_CONST_INT, SHR_CONST_LONG, null, null,
1576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            SHR_INT, SHR_LONG, null, null);
1577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
158099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code ushr} rop for the given
1581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * types. The result is a shared instance.
1582de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
158399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} types of the sources
158499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opUshr(TypeList types) {
1587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return pickBinaryOp(types, USHR_CONST_INT, USHR_CONST_LONG, null, null,
1588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                            USHR_INT, USHR_LONG, null, null);
1589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
1592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Returns the appropriate binary arithmetic rop for the given type
1593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * and arguments. The result is a shared instance.
1594de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
159599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} sources of the operation
159699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param int1 {@code non-null;} the int-to-constant rop
159799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param long1 {@code non-null;} the long-to-constant rop
159899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param float1 {@code null-ok;} the float-to-constant rop, if any
159999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param double1 {@code null-ok;} the double-to-constant rop, if any
160099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param int2 {@code non-null;} the int-to-int rop
160199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param long2 {@code non-null;} the long-to-long or long-to-int rop
160299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param float2 {@code null-ok;} the float-to-float rop, if any
160399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param double2 {@code null-ok;} the double-to-double rop, if any
160499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static Rop pickBinaryOp(TypeList types, Rop int1, Rop long1,
1607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                    Rop float1, Rop double1, Rop int2,
1608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                    Rop long2, Rop float2, Rop double2) {
1609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int bt1 = types.getType(0).getBasicFrameType();
1610f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Rop result = null;
1611f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1612f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (types.size()) {
1613f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case 1: {
1614f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                switch(bt1) {
1615f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_INT:    return int1;
1616f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_LONG:   return long1;
1617f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_FLOAT:  result = float1; break;
1618f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_DOUBLE: result = double1; break;
1619f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1620f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
1621f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1622f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case 2: {
1623f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                switch(bt1) {
1624f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_INT:    return int2;
1625f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_LONG:   return long2;
1626f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_FLOAT:  result = float2; break;
1627f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_DOUBLE: result = double2; break;
1628f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1629f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                break;
1630f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1631f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1632f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1633f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (result == null) {
1634f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return throwBadTypes(types);
1635f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1636f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1637f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return result;
1638f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1639f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1640f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
164199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code neg} rop for the given type. The
1642f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * result is a shared instance.
1643de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
164499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of value being operated on
164599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1646f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1647f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opNeg(TypeBearer type) {
1648f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicFrameType()) {
1649f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:    return NEG_INT;
1650f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:   return NEG_LONG;
1651f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:  return NEG_FLOAT;
1652f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE: return NEG_DOUBLE;
1653f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1654f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1655f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1656f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1657f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1658f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
165999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code not} rop for the given type. The
1660f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * result is a shared instance.
1661de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
166299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of value being operated on
166399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1664f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1665f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opNot(TypeBearer type) {
1666f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicFrameType()) {
1667f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:  return NOT_INT;
1668f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG: return NOT_LONG;
1669f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1670f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1671f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1672f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1673f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1674f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
167599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code cmpl} rop for the given type. The
1676f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * result is a shared instance.
1677de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
167899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of value being compared
167999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1680f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1681f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opCmpl(TypeBearer type) {
1682f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicType()) {
1683f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:   return CMPL_LONG;
1684f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:  return CMPL_FLOAT;
1685f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE: return CMPL_DOUBLE;
1686f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1687f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1688f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1689f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1690f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1691f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
169299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code cmpg} rop for the given type. The
1693f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * result is a shared instance.
1694de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
169599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of value being compared
169699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1697f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1698f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opCmpg(TypeBearer type) {
1699f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicType()) {
1700f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:  return CMPG_FLOAT;
1701f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE: return CMPG_DOUBLE;
1702f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1703f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1704f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1705f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1706f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1707f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
170899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code conv} rop for the given types. The
1709f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * result is a shared instance.
1710de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
171199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param dest {@code non-null;} target value type
171299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param source {@code non-null;} source value type
171399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1714f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1715f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opConv(TypeBearer dest, TypeBearer source) {
1716f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int dbt = dest.getBasicFrameType();
1717f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (source.getBasicFrameType()) {
1718f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT: {
1719f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                switch (dbt) {
1720f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_LONG:   return CONV_I2L;
1721f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_FLOAT:  return CONV_I2F;
1722f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_DOUBLE: return CONV_I2D;
1723ed0fe6c2f310f8c2cc28c35c2b473d8de36db8a4Jesse Wilson                    default:             break;
1724f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1725f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1726f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG: {
1727f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                switch (dbt) {
1728f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_INT:    return CONV_L2I;
1729f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_FLOAT:  return CONV_L2F;
1730f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_DOUBLE: return CONV_L2D;
1731ed0fe6c2f310f8c2cc28c35c2b473d8de36db8a4Jesse Wilson                    default:             break;
1732f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1733f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1734f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT: {
1735f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                switch (dbt) {
1736f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_INT:    return CONV_F2I;
1737f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_LONG:   return CONV_F2L;
1738f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                    case Type.BT_DOUBLE: return CONV_F2D;
1739ed0fe6c2f310f8c2cc28c35c2b473d8de36db8a4Jesse Wilson                    default:             break;
1740f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1741f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1742f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE: {
1743f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                switch (dbt) {
1744ed0fe6c2f310f8c2cc28c35c2b473d8de36db8a4Jesse Wilson                    case Type.BT_INT:    return CONV_D2I;
1745ed0fe6c2f310f8c2cc28c35c2b473d8de36db8a4Jesse Wilson                    case Type.BT_LONG:   return CONV_D2L;
1746ed0fe6c2f310f8c2cc28c35c2b473d8de36db8a4Jesse Wilson                    case Type.BT_FLOAT:  return CONV_D2F;
1747ed0fe6c2f310f8c2cc28c35c2b473d8de36db8a4Jesse Wilson                    default:             break;
1748f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                }
1749f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1750f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1751f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1752f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadTypes(StdTypeList.make(dest.getType(),
1753f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                                              source.getType()));
1754f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1755f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1756f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
175799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code return} rop for the given type. The
1758f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * result is a shared instance.
1759de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
176099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of value being returned
176199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1762f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1763f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opReturn(TypeBearer type) {
1764f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicFrameType()) {
1765f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:    return RETURN_INT;
1766f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:   return RETURN_LONG;
1767f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:  return RETURN_FLOAT;
1768f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE: return RETURN_DOUBLE;
1769f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT: return RETURN_OBJECT;
1770f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_VOID:   return RETURN_VOID;
1771f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1772f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1773f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1774f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1775f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1776f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
177799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code aget} rop for the given type. The
1778f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * result is a shared instance.
1779de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
178099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} element type of array being accessed
178199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1782f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1783f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opAget(TypeBearer type) {
1784f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicType()) {
1785f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:     return AGET_INT;
1786f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:    return AGET_LONG;
1787f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:   return AGET_FLOAT;
1788f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE:  return AGET_DOUBLE;
1789f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT:  return AGET_OBJECT;
1790f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BOOLEAN: return AGET_BOOLEAN;
1791f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BYTE:    return AGET_BYTE;
1792f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_CHAR:    return AGET_CHAR;
1793f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_SHORT:   return AGET_SHORT;
1794f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1795f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1796f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1797f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1798f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1799f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
180099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code aput} rop for the given type. The
1801f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * result is a shared instance.
1802de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
180399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} element type of array being accessed
180499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1805f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1806f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opAput(TypeBearer type) {
1807f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicType()) {
1808f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:     return APUT_INT;
1809f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:    return APUT_LONG;
1810f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:   return APUT_FLOAT;
1811f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE:  return APUT_DOUBLE;
1812f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT:  return APUT_OBJECT;
1813f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BOOLEAN: return APUT_BOOLEAN;
1814f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BYTE:    return APUT_BYTE;
1815f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_CHAR:    return APUT_CHAR;
1816f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_SHORT:   return APUT_SHORT;
1817f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1818f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1819f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1820f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1821f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1822f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
182399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code new-array} rop for the given
1824f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * type. The result is a shared instance.
1825de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
182699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param arrayType {@code non-null;} array type of array being created
182799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1828f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1829f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opNewArray(TypeBearer arrayType) {
1830f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Type type = arrayType.getType();
1831f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Type elementType = type.getComponentType();
1832f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1833f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (elementType.getBasicType()) {
1834f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:     return NEW_ARRAY_INT;
1835f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:    return NEW_ARRAY_LONG;
1836f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:   return NEW_ARRAY_FLOAT;
1837f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE:  return NEW_ARRAY_DOUBLE;
1838f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BOOLEAN: return NEW_ARRAY_BOOLEAN;
1839f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BYTE:    return NEW_ARRAY_BYTE;
1840f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_CHAR:    return NEW_ARRAY_CHAR;
1841f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_SHORT:   return NEW_ARRAY_SHORT;
1842f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT: {
1843f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                return new Rop(RegOps.NEW_ARRAY, type, StdTypeList.INT,
1844f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        Exceptions.LIST_Error_NegativeArraySizeException,
1845f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                        "new-array-object");
1846f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            }
1847f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1848f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1849f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1850f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1851f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1852f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
185399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code filled-new-array} rop for the given
1854f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * type. The result may be a shared instance.
1855de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
185699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param arrayType {@code non-null;} type of array being created
185799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param count {@code >= 0;} number of elements that the array should have
185899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1859f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1860f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opFilledNewArray(TypeBearer arrayType, int count) {
1861f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Type type = arrayType.getType();
1862f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        Type elementType = type.getComponentType();
1863f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1864f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (elementType.isCategory2()) {
1865f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            return throwBadType(arrayType);
1866f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1867f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1868f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (count < 0) {
1869f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("count < 0");
1870f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1871f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1872f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        StdTypeList sourceTypes = new StdTypeList(count);
1873f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1874f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        for (int i = 0; i < count; i++) {
1875f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            sourceTypes.set(i, elementType);
1876f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1877f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1878f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // Note: The resulting rop is considered call-like.
1879f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new Rop(RegOps.FILLED_NEW_ARRAY,
1880f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       sourceTypes,
1881f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       Exceptions.LIST_Error);
1882f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1883f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1884f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
188599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code get-field} rop for the given
1886f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * type. The result is a shared instance.
1887de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
188899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of the field in question
188999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1890f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1891f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opGetField(TypeBearer type) {
1892f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicType()) {
1893f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:     return GET_FIELD_INT;
1894f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:    return GET_FIELD_LONG;
1895f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:   return GET_FIELD_FLOAT;
1896f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE:  return GET_FIELD_DOUBLE;
1897f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT:  return GET_FIELD_OBJECT;
1898f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BOOLEAN: return GET_FIELD_BOOLEAN;
1899f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BYTE:    return GET_FIELD_BYTE;
1900f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_CHAR:    return GET_FIELD_CHAR;
1901f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_SHORT:   return GET_FIELD_SHORT;
1902f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1903f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1904f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1905f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1906f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1907f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
190899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code put-field} rop for the given
1909f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * type. The result is a shared instance.
1910de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
191199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of the field in question
191299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1913f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1914f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opPutField(TypeBearer type) {
1915f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicType()) {
1916f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:     return PUT_FIELD_INT;
1917f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:    return PUT_FIELD_LONG;
1918f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:   return PUT_FIELD_FLOAT;
1919f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE:  return PUT_FIELD_DOUBLE;
1920f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT:  return PUT_FIELD_OBJECT;
1921f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BOOLEAN: return PUT_FIELD_BOOLEAN;
1922f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BYTE:    return PUT_FIELD_BYTE;
1923f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_CHAR:    return PUT_FIELD_CHAR;
1924f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_SHORT:   return PUT_FIELD_SHORT;
1925f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1926f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1927f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1928f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1929f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1930f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
193199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code get-static} rop for the given
1932f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * type. The result is a shared instance.
1933de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
193499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of the field in question
193599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1936f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1937f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opGetStatic(TypeBearer type) {
1938f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicType()) {
1939f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:     return GET_STATIC_INT;
1940f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:    return GET_STATIC_LONG;
1941f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:   return GET_STATIC_FLOAT;
1942f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE:  return GET_STATIC_DOUBLE;
1943f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT:  return GET_STATIC_OBJECT;
1944f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BOOLEAN: return GET_STATIC_BOOLEAN;
1945f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BYTE:    return GET_STATIC_BYTE;
1946f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_CHAR:    return GET_STATIC_CHAR;
1947f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_SHORT:   return GET_STATIC_SHORT;
1948f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1949f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1950f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1951f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1952f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1953f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
195499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code put-static} rop for the given
1955f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * type. The result is a shared instance.
1956de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
195799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of the field in question
195899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1959f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1960f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opPutStatic(TypeBearer type) {
1961f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicType()) {
1962f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:     return PUT_STATIC_INT;
1963f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:    return PUT_STATIC_LONG;
1964f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:   return PUT_STATIC_FLOAT;
1965f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE:  return PUT_STATIC_DOUBLE;
1966f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT:  return PUT_STATIC_OBJECT;
1967f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BOOLEAN: return PUT_STATIC_BOOLEAN;
1968f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_BYTE:    return PUT_STATIC_BYTE;
1969f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_CHAR:    return PUT_STATIC_CHAR;
1970f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_SHORT:   return PUT_STATIC_SHORT;
1971f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
1972f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1973f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
1974f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1975f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1976f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
197799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code invoke-static} rop for the
1978f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given type. The result is typically a newly-allocated instance.
1979de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
198099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param meth {@code non-null;} descriptor of the method
198199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1982f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1983f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opInvokeStatic(Prototype meth) {
1984f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new Rop(RegOps.INVOKE_STATIC,
1985f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       meth.getParameterFrameTypes(),
1986f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       StdTypeList.THROWABLE);
1987f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
1988f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
1989f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
199099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code invoke-virtual} rop for the
1991f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given type. The result is typically a newly-allocated instance.
1992de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
199399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param meth {@code non-null;} descriptor of the method, including the
199499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code this} parameter
199599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
1996f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
1997f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opInvokeVirtual(Prototype meth) {
1998f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new Rop(RegOps.INVOKE_VIRTUAL,
1999f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       meth.getParameterFrameTypes(),
2000f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       StdTypeList.THROWABLE);
2001f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2002f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2003f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
200499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code invoke-super} rop for the
2005f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given type. The result is typically a newly-allocated instance.
2006de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
200799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param meth {@code non-null;} descriptor of the method, including the
200899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code this} parameter
200999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
2010f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2011f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opInvokeSuper(Prototype meth) {
2012f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new Rop(RegOps.INVOKE_SUPER,
2013f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       meth.getParameterFrameTypes(),
2014f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       StdTypeList.THROWABLE);
2015f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2016f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2017f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
201899409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code invoke-direct} rop for the
2019f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given type. The result is typically a newly-allocated instance.
2020de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
202199409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param meth {@code non-null;} descriptor of the method, including the
202299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code this} parameter
202399409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
2024f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2025f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opInvokeDirect(Prototype meth) {
2026f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new Rop(RegOps.INVOKE_DIRECT,
2027f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       meth.getParameterFrameTypes(),
2028f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       StdTypeList.THROWABLE);
2029f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2030f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2031f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
203299409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code invoke-interface} rop for the
2033f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * given type. The result is typically a newly-allocated instance.
2034de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
203599409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param meth {@code non-null;} descriptor of the method, including the
203699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * {@code this} parameter
203799409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
2038f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2039f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opInvokeInterface(Prototype meth) {
2040f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return new Rop(RegOps.INVOKE_INTERFACE,
2041f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       meth.getParameterFrameTypes(),
2042f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                       StdTypeList.THROWABLE);
2043f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2044de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro
2045f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
204699409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * Returns the appropriate {@code mark-local} rop for the given type.
2047f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * The result is a shared instance.
2048f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     *
204999409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} type of value being marked
205099409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @return {@code non-null;} an appropriate instance
2051f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2052f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public static Rop opMarkLocal(TypeBearer type) {
2053f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        switch (type.getBasicFrameType()) {
2054f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_INT:    return MARK_LOCAL_INT;
2055f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_LONG:   return MARK_LOCAL_LONG;
2056f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_FLOAT:  return MARK_LOCAL_FLOAT;
2057f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_DOUBLE: return MARK_LOCAL_DOUBLE;
2058f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            case Type.BT_OBJECT: return MARK_LOCAL_OBJECT;
2059f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
2060f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2061f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return throwBadType(type);
2062f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2063f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2064f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2065f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * This class is uninstantiable.
2066f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2067f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private Rops() {
2068f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // This space intentionally left blank.
2069f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2070f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2071f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2072f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Throws the right exception to complain about a bogus type.
2073de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
207499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param type {@code non-null;} the bad type
2075f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return never
2076f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2077f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static Rop throwBadType(TypeBearer type) {
2078f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new IllegalArgumentException("bad type: " + type);
2079f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2080f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
2081f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    /**
2082f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * Throws the right exception to complain about a bogus list of types.
2083de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro     *
208499409883d9c4c0ffb49b070ce307bb33a9dfe9f1The Android Open Source Project     * @param types {@code non-null;} the bad types
2085f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     * @return never
2086f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project     */
2087f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private static Rop throwBadTypes(TypeList types) {
2088f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        throw new IllegalArgumentException("bad types: " + types);
2089f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
2090f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
2091