1/* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.dx.dex.code; 18 19import com.android.dx.dex.DexOptions; 20import com.android.dx.dex.code.form.Form10t; 21import com.android.dx.dex.code.form.Form10x; 22import com.android.dx.dex.code.form.Form11n; 23import com.android.dx.dex.code.form.Form11x; 24import com.android.dx.dex.code.form.Form12x; 25import com.android.dx.dex.code.form.Form20t; 26import com.android.dx.dex.code.form.Form21c; 27import com.android.dx.dex.code.form.Form21h; 28import com.android.dx.dex.code.form.Form21s; 29import com.android.dx.dex.code.form.Form21t; 30import com.android.dx.dex.code.form.Form22b; 31import com.android.dx.dex.code.form.Form22c; 32import com.android.dx.dex.code.form.Form22s; 33import com.android.dx.dex.code.form.Form22t; 34import com.android.dx.dex.code.form.Form22x; 35import com.android.dx.dex.code.form.Form23x; 36import com.android.dx.dex.code.form.Form30t; 37import com.android.dx.dex.code.form.Form31c; 38import com.android.dx.dex.code.form.Form31i; 39import com.android.dx.dex.code.form.Form31t; 40import com.android.dx.dex.code.form.Form32x; 41import com.android.dx.dex.code.form.Form35c; 42import com.android.dx.dex.code.form.Form3rc; 43import com.android.dx.dex.code.form.Form51l; 44import com.android.dx.dex.code.form.SpecialFormat; 45import com.android.dx.io.Opcodes; 46 47/** 48 * Standard instances of {@link Dop} and utility methods for getting 49 * them. 50 */ 51public final class Dops { 52 /** {@code non-null;} array containing all the standard instances */ 53 private static final Dop[] DOPS; 54 55 /** 56 * pseudo-opcode used for nonstandard formatted "instructions" 57 * (which are mostly not actually instructions, though they do 58 * appear in instruction lists). TODO: Retire the usage of this 59 * constant. 60 */ 61 public static final Dop SPECIAL_FORMAT = 62 new Dop(Opcodes.SPECIAL_FORMAT, Opcodes.SPECIAL_FORMAT, 63 Opcodes.NO_NEXT, SpecialFormat.THE_ONE, false); 64 65 // BEGIN(dops); GENERATED AUTOMATICALLY BY opcode-gen 66 public static final Dop NOP = 67 new Dop(Opcodes.NOP, Opcodes.NOP, 68 Opcodes.NO_NEXT, Form10x.THE_ONE, false); 69 70 public static final Dop MOVE = 71 new Dop(Opcodes.MOVE, Opcodes.MOVE, 72 Opcodes.MOVE_FROM16, Form12x.THE_ONE, true); 73 74 public static final Dop MOVE_FROM16 = 75 new Dop(Opcodes.MOVE_FROM16, Opcodes.MOVE, 76 Opcodes.MOVE_16, Form22x.THE_ONE, true); 77 78 public static final Dop MOVE_16 = 79 new Dop(Opcodes.MOVE_16, Opcodes.MOVE, 80 Opcodes.NO_NEXT, Form32x.THE_ONE, true); 81 82 public static final Dop MOVE_WIDE = 83 new Dop(Opcodes.MOVE_WIDE, Opcodes.MOVE_WIDE, 84 Opcodes.MOVE_WIDE_FROM16, Form12x.THE_ONE, true); 85 86 public static final Dop MOVE_WIDE_FROM16 = 87 new Dop(Opcodes.MOVE_WIDE_FROM16, Opcodes.MOVE_WIDE, 88 Opcodes.MOVE_WIDE_16, Form22x.THE_ONE, true); 89 90 public static final Dop MOVE_WIDE_16 = 91 new Dop(Opcodes.MOVE_WIDE_16, Opcodes.MOVE_WIDE, 92 Opcodes.NO_NEXT, Form32x.THE_ONE, true); 93 94 public static final Dop MOVE_OBJECT = 95 new Dop(Opcodes.MOVE_OBJECT, Opcodes.MOVE_OBJECT, 96 Opcodes.MOVE_OBJECT_FROM16, Form12x.THE_ONE, true); 97 98 public static final Dop MOVE_OBJECT_FROM16 = 99 new Dop(Opcodes.MOVE_OBJECT_FROM16, Opcodes.MOVE_OBJECT, 100 Opcodes.MOVE_OBJECT_16, Form22x.THE_ONE, true); 101 102 public static final Dop MOVE_OBJECT_16 = 103 new Dop(Opcodes.MOVE_OBJECT_16, Opcodes.MOVE_OBJECT, 104 Opcodes.NO_NEXT, Form32x.THE_ONE, true); 105 106 public static final Dop MOVE_RESULT = 107 new Dop(Opcodes.MOVE_RESULT, Opcodes.MOVE_RESULT, 108 Opcodes.NO_NEXT, Form11x.THE_ONE, true); 109 110 public static final Dop MOVE_RESULT_WIDE = 111 new Dop(Opcodes.MOVE_RESULT_WIDE, Opcodes.MOVE_RESULT_WIDE, 112 Opcodes.NO_NEXT, Form11x.THE_ONE, true); 113 114 public static final Dop MOVE_RESULT_OBJECT = 115 new Dop(Opcodes.MOVE_RESULT_OBJECT, Opcodes.MOVE_RESULT_OBJECT, 116 Opcodes.NO_NEXT, Form11x.THE_ONE, true); 117 118 public static final Dop MOVE_EXCEPTION = 119 new Dop(Opcodes.MOVE_EXCEPTION, Opcodes.MOVE_EXCEPTION, 120 Opcodes.NO_NEXT, Form11x.THE_ONE, true); 121 122 public static final Dop RETURN_VOID = 123 new Dop(Opcodes.RETURN_VOID, Opcodes.RETURN_VOID, 124 Opcodes.NO_NEXT, Form10x.THE_ONE, false); 125 126 public static final Dop RETURN = 127 new Dop(Opcodes.RETURN, Opcodes.RETURN, 128 Opcodes.NO_NEXT, Form11x.THE_ONE, false); 129 130 public static final Dop RETURN_WIDE = 131 new Dop(Opcodes.RETURN_WIDE, Opcodes.RETURN_WIDE, 132 Opcodes.NO_NEXT, Form11x.THE_ONE, false); 133 134 public static final Dop RETURN_OBJECT = 135 new Dop(Opcodes.RETURN_OBJECT, Opcodes.RETURN_OBJECT, 136 Opcodes.NO_NEXT, Form11x.THE_ONE, false); 137 138 public static final Dop CONST_4 = 139 new Dop(Opcodes.CONST_4, Opcodes.CONST, 140 Opcodes.CONST_16, Form11n.THE_ONE, true); 141 142 public static final Dop CONST_16 = 143 new Dop(Opcodes.CONST_16, Opcodes.CONST, 144 Opcodes.CONST_HIGH16, Form21s.THE_ONE, true); 145 146 public static final Dop CONST = 147 new Dop(Opcodes.CONST, Opcodes.CONST, 148 Opcodes.NO_NEXT, Form31i.THE_ONE, true); 149 150 public static final Dop CONST_HIGH16 = 151 new Dop(Opcodes.CONST_HIGH16, Opcodes.CONST, 152 Opcodes.CONST, Form21h.THE_ONE, true); 153 154 public static final Dop CONST_WIDE_16 = 155 new Dop(Opcodes.CONST_WIDE_16, Opcodes.CONST_WIDE, 156 Opcodes.CONST_WIDE_HIGH16, Form21s.THE_ONE, true); 157 158 public static final Dop CONST_WIDE_32 = 159 new Dop(Opcodes.CONST_WIDE_32, Opcodes.CONST_WIDE, 160 Opcodes.CONST_WIDE, Form31i.THE_ONE, true); 161 162 public static final Dop CONST_WIDE = 163 new Dop(Opcodes.CONST_WIDE, Opcodes.CONST_WIDE, 164 Opcodes.NO_NEXT, Form51l.THE_ONE, true); 165 166 public static final Dop CONST_WIDE_HIGH16 = 167 new Dop(Opcodes.CONST_WIDE_HIGH16, Opcodes.CONST_WIDE, 168 Opcodes.CONST_WIDE_32, Form21h.THE_ONE, true); 169 170 public static final Dop CONST_STRING = 171 new Dop(Opcodes.CONST_STRING, Opcodes.CONST_STRING, 172 Opcodes.CONST_STRING_JUMBO, Form21c.THE_ONE, true); 173 174 public static final Dop CONST_STRING_JUMBO = 175 new Dop(Opcodes.CONST_STRING_JUMBO, Opcodes.CONST_STRING, 176 Opcodes.NO_NEXT, Form31c.THE_ONE, true); 177 178 public static final Dop CONST_CLASS = 179 new Dop(Opcodes.CONST_CLASS, Opcodes.CONST_CLASS, 180 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 181 182 public static final Dop MONITOR_ENTER = 183 new Dop(Opcodes.MONITOR_ENTER, Opcodes.MONITOR_ENTER, 184 Opcodes.NO_NEXT, Form11x.THE_ONE, false); 185 186 public static final Dop MONITOR_EXIT = 187 new Dop(Opcodes.MONITOR_EXIT, Opcodes.MONITOR_EXIT, 188 Opcodes.NO_NEXT, Form11x.THE_ONE, false); 189 190 public static final Dop CHECK_CAST = 191 new Dop(Opcodes.CHECK_CAST, Opcodes.CHECK_CAST, 192 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 193 194 public static final Dop INSTANCE_OF = 195 new Dop(Opcodes.INSTANCE_OF, Opcodes.INSTANCE_OF, 196 Opcodes.NO_NEXT, Form22c.THE_ONE, true); 197 198 public static final Dop ARRAY_LENGTH = 199 new Dop(Opcodes.ARRAY_LENGTH, Opcodes.ARRAY_LENGTH, 200 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 201 202 public static final Dop NEW_INSTANCE = 203 new Dop(Opcodes.NEW_INSTANCE, Opcodes.NEW_INSTANCE, 204 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 205 206 public static final Dop NEW_ARRAY = 207 new Dop(Opcodes.NEW_ARRAY, Opcodes.NEW_ARRAY, 208 Opcodes.NO_NEXT, Form22c.THE_ONE, true); 209 210 public static final Dop FILLED_NEW_ARRAY = 211 new Dop(Opcodes.FILLED_NEW_ARRAY, Opcodes.FILLED_NEW_ARRAY, 212 Opcodes.FILLED_NEW_ARRAY_RANGE, Form35c.THE_ONE, false); 213 214 public static final Dop FILLED_NEW_ARRAY_RANGE = 215 new Dop(Opcodes.FILLED_NEW_ARRAY_RANGE, Opcodes.FILLED_NEW_ARRAY, 216 Opcodes.NO_NEXT, Form3rc.THE_ONE, false); 217 218 public static final Dop FILL_ARRAY_DATA = 219 new Dop(Opcodes.FILL_ARRAY_DATA, Opcodes.FILL_ARRAY_DATA, 220 Opcodes.NO_NEXT, Form31t.THE_ONE, false); 221 222 public static final Dop THROW = 223 new Dop(Opcodes.THROW, Opcodes.THROW, 224 Opcodes.NO_NEXT, Form11x.THE_ONE, false); 225 226 public static final Dop GOTO = 227 new Dop(Opcodes.GOTO, Opcodes.GOTO, 228 Opcodes.GOTO_16, Form10t.THE_ONE, false); 229 230 public static final Dop GOTO_16 = 231 new Dop(Opcodes.GOTO_16, Opcodes.GOTO, 232 Opcodes.GOTO_32, Form20t.THE_ONE, false); 233 234 public static final Dop GOTO_32 = 235 new Dop(Opcodes.GOTO_32, Opcodes.GOTO, 236 Opcodes.NO_NEXT, Form30t.THE_ONE, false); 237 238 public static final Dop PACKED_SWITCH = 239 new Dop(Opcodes.PACKED_SWITCH, Opcodes.PACKED_SWITCH, 240 Opcodes.NO_NEXT, Form31t.THE_ONE, false); 241 242 public static final Dop SPARSE_SWITCH = 243 new Dop(Opcodes.SPARSE_SWITCH, Opcodes.SPARSE_SWITCH, 244 Opcodes.NO_NEXT, Form31t.THE_ONE, false); 245 246 public static final Dop CMPL_FLOAT = 247 new Dop(Opcodes.CMPL_FLOAT, Opcodes.CMPL_FLOAT, 248 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 249 250 public static final Dop CMPG_FLOAT = 251 new Dop(Opcodes.CMPG_FLOAT, Opcodes.CMPG_FLOAT, 252 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 253 254 public static final Dop CMPL_DOUBLE = 255 new Dop(Opcodes.CMPL_DOUBLE, Opcodes.CMPL_DOUBLE, 256 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 257 258 public static final Dop CMPG_DOUBLE = 259 new Dop(Opcodes.CMPG_DOUBLE, Opcodes.CMPG_DOUBLE, 260 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 261 262 public static final Dop CMP_LONG = 263 new Dop(Opcodes.CMP_LONG, Opcodes.CMP_LONG, 264 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 265 266 public static final Dop IF_EQ = 267 new Dop(Opcodes.IF_EQ, Opcodes.IF_EQ, 268 Opcodes.NO_NEXT, Form22t.THE_ONE, false); 269 270 public static final Dop IF_NE = 271 new Dop(Opcodes.IF_NE, Opcodes.IF_NE, 272 Opcodes.NO_NEXT, Form22t.THE_ONE, false); 273 274 public static final Dop IF_LT = 275 new Dop(Opcodes.IF_LT, Opcodes.IF_LT, 276 Opcodes.NO_NEXT, Form22t.THE_ONE, false); 277 278 public static final Dop IF_GE = 279 new Dop(Opcodes.IF_GE, Opcodes.IF_GE, 280 Opcodes.NO_NEXT, Form22t.THE_ONE, false); 281 282 public static final Dop IF_GT = 283 new Dop(Opcodes.IF_GT, Opcodes.IF_GT, 284 Opcodes.NO_NEXT, Form22t.THE_ONE, false); 285 286 public static final Dop IF_LE = 287 new Dop(Opcodes.IF_LE, Opcodes.IF_LE, 288 Opcodes.NO_NEXT, Form22t.THE_ONE, false); 289 290 public static final Dop IF_EQZ = 291 new Dop(Opcodes.IF_EQZ, Opcodes.IF_EQZ, 292 Opcodes.NO_NEXT, Form21t.THE_ONE, false); 293 294 public static final Dop IF_NEZ = 295 new Dop(Opcodes.IF_NEZ, Opcodes.IF_NEZ, 296 Opcodes.NO_NEXT, Form21t.THE_ONE, false); 297 298 public static final Dop IF_LTZ = 299 new Dop(Opcodes.IF_LTZ, Opcodes.IF_LTZ, 300 Opcodes.NO_NEXT, Form21t.THE_ONE, false); 301 302 public static final Dop IF_GEZ = 303 new Dop(Opcodes.IF_GEZ, Opcodes.IF_GEZ, 304 Opcodes.NO_NEXT, Form21t.THE_ONE, false); 305 306 public static final Dop IF_GTZ = 307 new Dop(Opcodes.IF_GTZ, Opcodes.IF_GTZ, 308 Opcodes.NO_NEXT, Form21t.THE_ONE, false); 309 310 public static final Dop IF_LEZ = 311 new Dop(Opcodes.IF_LEZ, Opcodes.IF_LEZ, 312 Opcodes.NO_NEXT, Form21t.THE_ONE, false); 313 314 public static final Dop AGET = 315 new Dop(Opcodes.AGET, Opcodes.AGET, 316 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 317 318 public static final Dop AGET_WIDE = 319 new Dop(Opcodes.AGET_WIDE, Opcodes.AGET_WIDE, 320 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 321 322 public static final Dop AGET_OBJECT = 323 new Dop(Opcodes.AGET_OBJECT, Opcodes.AGET_OBJECT, 324 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 325 326 public static final Dop AGET_BOOLEAN = 327 new Dop(Opcodes.AGET_BOOLEAN, Opcodes.AGET_BOOLEAN, 328 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 329 330 public static final Dop AGET_BYTE = 331 new Dop(Opcodes.AGET_BYTE, Opcodes.AGET_BYTE, 332 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 333 334 public static final Dop AGET_CHAR = 335 new Dop(Opcodes.AGET_CHAR, Opcodes.AGET_CHAR, 336 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 337 338 public static final Dop AGET_SHORT = 339 new Dop(Opcodes.AGET_SHORT, Opcodes.AGET_SHORT, 340 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 341 342 public static final Dop APUT = 343 new Dop(Opcodes.APUT, Opcodes.APUT, 344 Opcodes.NO_NEXT, Form23x.THE_ONE, false); 345 346 public static final Dop APUT_WIDE = 347 new Dop(Opcodes.APUT_WIDE, Opcodes.APUT_WIDE, 348 Opcodes.NO_NEXT, Form23x.THE_ONE, false); 349 350 public static final Dop APUT_OBJECT = 351 new Dop(Opcodes.APUT_OBJECT, Opcodes.APUT_OBJECT, 352 Opcodes.NO_NEXT, Form23x.THE_ONE, false); 353 354 public static final Dop APUT_BOOLEAN = 355 new Dop(Opcodes.APUT_BOOLEAN, Opcodes.APUT_BOOLEAN, 356 Opcodes.NO_NEXT, Form23x.THE_ONE, false); 357 358 public static final Dop APUT_BYTE = 359 new Dop(Opcodes.APUT_BYTE, Opcodes.APUT_BYTE, 360 Opcodes.NO_NEXT, Form23x.THE_ONE, false); 361 362 public static final Dop APUT_CHAR = 363 new Dop(Opcodes.APUT_CHAR, Opcodes.APUT_CHAR, 364 Opcodes.NO_NEXT, Form23x.THE_ONE, false); 365 366 public static final Dop APUT_SHORT = 367 new Dop(Opcodes.APUT_SHORT, Opcodes.APUT_SHORT, 368 Opcodes.NO_NEXT, Form23x.THE_ONE, false); 369 370 public static final Dop IGET = 371 new Dop(Opcodes.IGET, Opcodes.IGET, 372 Opcodes.NO_NEXT, Form22c.THE_ONE, true); 373 374 public static final Dop IGET_WIDE = 375 new Dop(Opcodes.IGET_WIDE, Opcodes.IGET_WIDE, 376 Opcodes.NO_NEXT, Form22c.THE_ONE, true); 377 378 public static final Dop IGET_OBJECT = 379 new Dop(Opcodes.IGET_OBJECT, Opcodes.IGET_OBJECT, 380 Opcodes.NO_NEXT, Form22c.THE_ONE, true); 381 382 public static final Dop IGET_BOOLEAN = 383 new Dop(Opcodes.IGET_BOOLEAN, Opcodes.IGET_BOOLEAN, 384 Opcodes.NO_NEXT, Form22c.THE_ONE, true); 385 386 public static final Dop IGET_BYTE = 387 new Dop(Opcodes.IGET_BYTE, Opcodes.IGET_BYTE, 388 Opcodes.NO_NEXT, Form22c.THE_ONE, true); 389 390 public static final Dop IGET_CHAR = 391 new Dop(Opcodes.IGET_CHAR, Opcodes.IGET_CHAR, 392 Opcodes.NO_NEXT, Form22c.THE_ONE, true); 393 394 public static final Dop IGET_SHORT = 395 new Dop(Opcodes.IGET_SHORT, Opcodes.IGET_SHORT, 396 Opcodes.NO_NEXT, Form22c.THE_ONE, true); 397 398 public static final Dop IPUT = 399 new Dop(Opcodes.IPUT, Opcodes.IPUT, 400 Opcodes.NO_NEXT, Form22c.THE_ONE, false); 401 402 public static final Dop IPUT_WIDE = 403 new Dop(Opcodes.IPUT_WIDE, Opcodes.IPUT_WIDE, 404 Opcodes.NO_NEXT, Form22c.THE_ONE, false); 405 406 public static final Dop IPUT_OBJECT = 407 new Dop(Opcodes.IPUT_OBJECT, Opcodes.IPUT_OBJECT, 408 Opcodes.NO_NEXT, Form22c.THE_ONE, false); 409 410 public static final Dop IPUT_BOOLEAN = 411 new Dop(Opcodes.IPUT_BOOLEAN, Opcodes.IPUT_BOOLEAN, 412 Opcodes.NO_NEXT, Form22c.THE_ONE, false); 413 414 public static final Dop IPUT_BYTE = 415 new Dop(Opcodes.IPUT_BYTE, Opcodes.IPUT_BYTE, 416 Opcodes.NO_NEXT, Form22c.THE_ONE, false); 417 418 public static final Dop IPUT_CHAR = 419 new Dop(Opcodes.IPUT_CHAR, Opcodes.IPUT_CHAR, 420 Opcodes.NO_NEXT, Form22c.THE_ONE, false); 421 422 public static final Dop IPUT_SHORT = 423 new Dop(Opcodes.IPUT_SHORT, Opcodes.IPUT_SHORT, 424 Opcodes.NO_NEXT, Form22c.THE_ONE, false); 425 426 public static final Dop SGET = 427 new Dop(Opcodes.SGET, Opcodes.SGET, 428 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 429 430 public static final Dop SGET_WIDE = 431 new Dop(Opcodes.SGET_WIDE, Opcodes.SGET_WIDE, 432 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 433 434 public static final Dop SGET_OBJECT = 435 new Dop(Opcodes.SGET_OBJECT, Opcodes.SGET_OBJECT, 436 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 437 438 public static final Dop SGET_BOOLEAN = 439 new Dop(Opcodes.SGET_BOOLEAN, Opcodes.SGET_BOOLEAN, 440 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 441 442 public static final Dop SGET_BYTE = 443 new Dop(Opcodes.SGET_BYTE, Opcodes.SGET_BYTE, 444 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 445 446 public static final Dop SGET_CHAR = 447 new Dop(Opcodes.SGET_CHAR, Opcodes.SGET_CHAR, 448 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 449 450 public static final Dop SGET_SHORT = 451 new Dop(Opcodes.SGET_SHORT, Opcodes.SGET_SHORT, 452 Opcodes.NO_NEXT, Form21c.THE_ONE, true); 453 454 public static final Dop SPUT = 455 new Dop(Opcodes.SPUT, Opcodes.SPUT, 456 Opcodes.NO_NEXT, Form21c.THE_ONE, false); 457 458 public static final Dop SPUT_WIDE = 459 new Dop(Opcodes.SPUT_WIDE, Opcodes.SPUT_WIDE, 460 Opcodes.NO_NEXT, Form21c.THE_ONE, false); 461 462 public static final Dop SPUT_OBJECT = 463 new Dop(Opcodes.SPUT_OBJECT, Opcodes.SPUT_OBJECT, 464 Opcodes.NO_NEXT, Form21c.THE_ONE, false); 465 466 public static final Dop SPUT_BOOLEAN = 467 new Dop(Opcodes.SPUT_BOOLEAN, Opcodes.SPUT_BOOLEAN, 468 Opcodes.NO_NEXT, Form21c.THE_ONE, false); 469 470 public static final Dop SPUT_BYTE = 471 new Dop(Opcodes.SPUT_BYTE, Opcodes.SPUT_BYTE, 472 Opcodes.NO_NEXT, Form21c.THE_ONE, false); 473 474 public static final Dop SPUT_CHAR = 475 new Dop(Opcodes.SPUT_CHAR, Opcodes.SPUT_CHAR, 476 Opcodes.NO_NEXT, Form21c.THE_ONE, false); 477 478 public static final Dop SPUT_SHORT = 479 new Dop(Opcodes.SPUT_SHORT, Opcodes.SPUT_SHORT, 480 Opcodes.NO_NEXT, Form21c.THE_ONE, false); 481 482 public static final Dop INVOKE_VIRTUAL = 483 new Dop(Opcodes.INVOKE_VIRTUAL, Opcodes.INVOKE_VIRTUAL, 484 Opcodes.INVOKE_VIRTUAL_RANGE, Form35c.THE_ONE, false); 485 486 public static final Dop INVOKE_SUPER = 487 new Dop(Opcodes.INVOKE_SUPER, Opcodes.INVOKE_SUPER, 488 Opcodes.INVOKE_SUPER_RANGE, Form35c.THE_ONE, false); 489 490 public static final Dop INVOKE_DIRECT = 491 new Dop(Opcodes.INVOKE_DIRECT, Opcodes.INVOKE_DIRECT, 492 Opcodes.INVOKE_DIRECT_RANGE, Form35c.THE_ONE, false); 493 494 public static final Dop INVOKE_STATIC = 495 new Dop(Opcodes.INVOKE_STATIC, Opcodes.INVOKE_STATIC, 496 Opcodes.INVOKE_STATIC_RANGE, Form35c.THE_ONE, false); 497 498 public static final Dop INVOKE_INTERFACE = 499 new Dop(Opcodes.INVOKE_INTERFACE, Opcodes.INVOKE_INTERFACE, 500 Opcodes.INVOKE_INTERFACE_RANGE, Form35c.THE_ONE, false); 501 502 public static final Dop INVOKE_VIRTUAL_RANGE = 503 new Dop(Opcodes.INVOKE_VIRTUAL_RANGE, Opcodes.INVOKE_VIRTUAL, 504 Opcodes.NO_NEXT, Form3rc.THE_ONE, false); 505 506 public static final Dop INVOKE_SUPER_RANGE = 507 new Dop(Opcodes.INVOKE_SUPER_RANGE, Opcodes.INVOKE_SUPER, 508 Opcodes.NO_NEXT, Form3rc.THE_ONE, false); 509 510 public static final Dop INVOKE_DIRECT_RANGE = 511 new Dop(Opcodes.INVOKE_DIRECT_RANGE, Opcodes.INVOKE_DIRECT, 512 Opcodes.NO_NEXT, Form3rc.THE_ONE, false); 513 514 public static final Dop INVOKE_STATIC_RANGE = 515 new Dop(Opcodes.INVOKE_STATIC_RANGE, Opcodes.INVOKE_STATIC, 516 Opcodes.NO_NEXT, Form3rc.THE_ONE, false); 517 518 public static final Dop INVOKE_INTERFACE_RANGE = 519 new Dop(Opcodes.INVOKE_INTERFACE_RANGE, Opcodes.INVOKE_INTERFACE, 520 Opcodes.NO_NEXT, Form3rc.THE_ONE, false); 521 522 public static final Dop NEG_INT = 523 new Dop(Opcodes.NEG_INT, Opcodes.NEG_INT, 524 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 525 526 public static final Dop NOT_INT = 527 new Dop(Opcodes.NOT_INT, Opcodes.NOT_INT, 528 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 529 530 public static final Dop NEG_LONG = 531 new Dop(Opcodes.NEG_LONG, Opcodes.NEG_LONG, 532 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 533 534 public static final Dop NOT_LONG = 535 new Dop(Opcodes.NOT_LONG, Opcodes.NOT_LONG, 536 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 537 538 public static final Dop NEG_FLOAT = 539 new Dop(Opcodes.NEG_FLOAT, Opcodes.NEG_FLOAT, 540 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 541 542 public static final Dop NEG_DOUBLE = 543 new Dop(Opcodes.NEG_DOUBLE, Opcodes.NEG_DOUBLE, 544 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 545 546 public static final Dop INT_TO_LONG = 547 new Dop(Opcodes.INT_TO_LONG, Opcodes.INT_TO_LONG, 548 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 549 550 public static final Dop INT_TO_FLOAT = 551 new Dop(Opcodes.INT_TO_FLOAT, Opcodes.INT_TO_FLOAT, 552 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 553 554 public static final Dop INT_TO_DOUBLE = 555 new Dop(Opcodes.INT_TO_DOUBLE, Opcodes.INT_TO_DOUBLE, 556 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 557 558 public static final Dop LONG_TO_INT = 559 new Dop(Opcodes.LONG_TO_INT, Opcodes.LONG_TO_INT, 560 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 561 562 public static final Dop LONG_TO_FLOAT = 563 new Dop(Opcodes.LONG_TO_FLOAT, Opcodes.LONG_TO_FLOAT, 564 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 565 566 public static final Dop LONG_TO_DOUBLE = 567 new Dop(Opcodes.LONG_TO_DOUBLE, Opcodes.LONG_TO_DOUBLE, 568 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 569 570 public static final Dop FLOAT_TO_INT = 571 new Dop(Opcodes.FLOAT_TO_INT, Opcodes.FLOAT_TO_INT, 572 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 573 574 public static final Dop FLOAT_TO_LONG = 575 new Dop(Opcodes.FLOAT_TO_LONG, Opcodes.FLOAT_TO_LONG, 576 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 577 578 public static final Dop FLOAT_TO_DOUBLE = 579 new Dop(Opcodes.FLOAT_TO_DOUBLE, Opcodes.FLOAT_TO_DOUBLE, 580 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 581 582 public static final Dop DOUBLE_TO_INT = 583 new Dop(Opcodes.DOUBLE_TO_INT, Opcodes.DOUBLE_TO_INT, 584 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 585 586 public static final Dop DOUBLE_TO_LONG = 587 new Dop(Opcodes.DOUBLE_TO_LONG, Opcodes.DOUBLE_TO_LONG, 588 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 589 590 public static final Dop DOUBLE_TO_FLOAT = 591 new Dop(Opcodes.DOUBLE_TO_FLOAT, Opcodes.DOUBLE_TO_FLOAT, 592 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 593 594 public static final Dop INT_TO_BYTE = 595 new Dop(Opcodes.INT_TO_BYTE, Opcodes.INT_TO_BYTE, 596 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 597 598 public static final Dop INT_TO_CHAR = 599 new Dop(Opcodes.INT_TO_CHAR, Opcodes.INT_TO_CHAR, 600 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 601 602 public static final Dop INT_TO_SHORT = 603 new Dop(Opcodes.INT_TO_SHORT, Opcodes.INT_TO_SHORT, 604 Opcodes.NO_NEXT, Form12x.THE_ONE, true); 605 606 public static final Dop ADD_INT = 607 new Dop(Opcodes.ADD_INT, Opcodes.ADD_INT, 608 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 609 610 public static final Dop SUB_INT = 611 new Dop(Opcodes.SUB_INT, Opcodes.SUB_INT, 612 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 613 614 public static final Dop MUL_INT = 615 new Dop(Opcodes.MUL_INT, Opcodes.MUL_INT, 616 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 617 618 public static final Dop DIV_INT = 619 new Dop(Opcodes.DIV_INT, Opcodes.DIV_INT, 620 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 621 622 public static final Dop REM_INT = 623 new Dop(Opcodes.REM_INT, Opcodes.REM_INT, 624 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 625 626 public static final Dop AND_INT = 627 new Dop(Opcodes.AND_INT, Opcodes.AND_INT, 628 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 629 630 public static final Dop OR_INT = 631 new Dop(Opcodes.OR_INT, Opcodes.OR_INT, 632 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 633 634 public static final Dop XOR_INT = 635 new Dop(Opcodes.XOR_INT, Opcodes.XOR_INT, 636 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 637 638 public static final Dop SHL_INT = 639 new Dop(Opcodes.SHL_INT, Opcodes.SHL_INT, 640 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 641 642 public static final Dop SHR_INT = 643 new Dop(Opcodes.SHR_INT, Opcodes.SHR_INT, 644 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 645 646 public static final Dop USHR_INT = 647 new Dop(Opcodes.USHR_INT, Opcodes.USHR_INT, 648 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 649 650 public static final Dop ADD_LONG = 651 new Dop(Opcodes.ADD_LONG, Opcodes.ADD_LONG, 652 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 653 654 public static final Dop SUB_LONG = 655 new Dop(Opcodes.SUB_LONG, Opcodes.SUB_LONG, 656 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 657 658 public static final Dop MUL_LONG = 659 new Dop(Opcodes.MUL_LONG, Opcodes.MUL_LONG, 660 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 661 662 public static final Dop DIV_LONG = 663 new Dop(Opcodes.DIV_LONG, Opcodes.DIV_LONG, 664 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 665 666 public static final Dop REM_LONG = 667 new Dop(Opcodes.REM_LONG, Opcodes.REM_LONG, 668 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 669 670 public static final Dop AND_LONG = 671 new Dop(Opcodes.AND_LONG, Opcodes.AND_LONG, 672 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 673 674 public static final Dop OR_LONG = 675 new Dop(Opcodes.OR_LONG, Opcodes.OR_LONG, 676 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 677 678 public static final Dop XOR_LONG = 679 new Dop(Opcodes.XOR_LONG, Opcodes.XOR_LONG, 680 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 681 682 public static final Dop SHL_LONG = 683 new Dop(Opcodes.SHL_LONG, Opcodes.SHL_LONG, 684 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 685 686 public static final Dop SHR_LONG = 687 new Dop(Opcodes.SHR_LONG, Opcodes.SHR_LONG, 688 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 689 690 public static final Dop USHR_LONG = 691 new Dop(Opcodes.USHR_LONG, Opcodes.USHR_LONG, 692 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 693 694 public static final Dop ADD_FLOAT = 695 new Dop(Opcodes.ADD_FLOAT, Opcodes.ADD_FLOAT, 696 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 697 698 public static final Dop SUB_FLOAT = 699 new Dop(Opcodes.SUB_FLOAT, Opcodes.SUB_FLOAT, 700 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 701 702 public static final Dop MUL_FLOAT = 703 new Dop(Opcodes.MUL_FLOAT, Opcodes.MUL_FLOAT, 704 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 705 706 public static final Dop DIV_FLOAT = 707 new Dop(Opcodes.DIV_FLOAT, Opcodes.DIV_FLOAT, 708 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 709 710 public static final Dop REM_FLOAT = 711 new Dop(Opcodes.REM_FLOAT, Opcodes.REM_FLOAT, 712 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 713 714 public static final Dop ADD_DOUBLE = 715 new Dop(Opcodes.ADD_DOUBLE, Opcodes.ADD_DOUBLE, 716 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 717 718 public static final Dop SUB_DOUBLE = 719 new Dop(Opcodes.SUB_DOUBLE, Opcodes.SUB_DOUBLE, 720 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 721 722 public static final Dop MUL_DOUBLE = 723 new Dop(Opcodes.MUL_DOUBLE, Opcodes.MUL_DOUBLE, 724 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 725 726 public static final Dop DIV_DOUBLE = 727 new Dop(Opcodes.DIV_DOUBLE, Opcodes.DIV_DOUBLE, 728 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 729 730 public static final Dop REM_DOUBLE = 731 new Dop(Opcodes.REM_DOUBLE, Opcodes.REM_DOUBLE, 732 Opcodes.NO_NEXT, Form23x.THE_ONE, true); 733 734 public static final Dop ADD_INT_2ADDR = 735 new Dop(Opcodes.ADD_INT_2ADDR, Opcodes.ADD_INT, 736 Opcodes.ADD_INT, Form12x.THE_ONE, true); 737 738 public static final Dop SUB_INT_2ADDR = 739 new Dop(Opcodes.SUB_INT_2ADDR, Opcodes.SUB_INT, 740 Opcodes.SUB_INT, Form12x.THE_ONE, true); 741 742 public static final Dop MUL_INT_2ADDR = 743 new Dop(Opcodes.MUL_INT_2ADDR, Opcodes.MUL_INT, 744 Opcodes.MUL_INT, Form12x.THE_ONE, true); 745 746 public static final Dop DIV_INT_2ADDR = 747 new Dop(Opcodes.DIV_INT_2ADDR, Opcodes.DIV_INT, 748 Opcodes.DIV_INT, Form12x.THE_ONE, true); 749 750 public static final Dop REM_INT_2ADDR = 751 new Dop(Opcodes.REM_INT_2ADDR, Opcodes.REM_INT, 752 Opcodes.REM_INT, Form12x.THE_ONE, true); 753 754 public static final Dop AND_INT_2ADDR = 755 new Dop(Opcodes.AND_INT_2ADDR, Opcodes.AND_INT, 756 Opcodes.AND_INT, Form12x.THE_ONE, true); 757 758 public static final Dop OR_INT_2ADDR = 759 new Dop(Opcodes.OR_INT_2ADDR, Opcodes.OR_INT, 760 Opcodes.OR_INT, Form12x.THE_ONE, true); 761 762 public static final Dop XOR_INT_2ADDR = 763 new Dop(Opcodes.XOR_INT_2ADDR, Opcodes.XOR_INT, 764 Opcodes.XOR_INT, Form12x.THE_ONE, true); 765 766 public static final Dop SHL_INT_2ADDR = 767 new Dop(Opcodes.SHL_INT_2ADDR, Opcodes.SHL_INT, 768 Opcodes.SHL_INT, Form12x.THE_ONE, true); 769 770 public static final Dop SHR_INT_2ADDR = 771 new Dop(Opcodes.SHR_INT_2ADDR, Opcodes.SHR_INT, 772 Opcodes.SHR_INT, Form12x.THE_ONE, true); 773 774 public static final Dop USHR_INT_2ADDR = 775 new Dop(Opcodes.USHR_INT_2ADDR, Opcodes.USHR_INT, 776 Opcodes.USHR_INT, Form12x.THE_ONE, true); 777 778 public static final Dop ADD_LONG_2ADDR = 779 new Dop(Opcodes.ADD_LONG_2ADDR, Opcodes.ADD_LONG, 780 Opcodes.ADD_LONG, Form12x.THE_ONE, true); 781 782 public static final Dop SUB_LONG_2ADDR = 783 new Dop(Opcodes.SUB_LONG_2ADDR, Opcodes.SUB_LONG, 784 Opcodes.SUB_LONG, Form12x.THE_ONE, true); 785 786 public static final Dop MUL_LONG_2ADDR = 787 new Dop(Opcodes.MUL_LONG_2ADDR, Opcodes.MUL_LONG, 788 Opcodes.MUL_LONG, Form12x.THE_ONE, true); 789 790 public static final Dop DIV_LONG_2ADDR = 791 new Dop(Opcodes.DIV_LONG_2ADDR, Opcodes.DIV_LONG, 792 Opcodes.DIV_LONG, Form12x.THE_ONE, true); 793 794 public static final Dop REM_LONG_2ADDR = 795 new Dop(Opcodes.REM_LONG_2ADDR, Opcodes.REM_LONG, 796 Opcodes.REM_LONG, Form12x.THE_ONE, true); 797 798 public static final Dop AND_LONG_2ADDR = 799 new Dop(Opcodes.AND_LONG_2ADDR, Opcodes.AND_LONG, 800 Opcodes.AND_LONG, Form12x.THE_ONE, true); 801 802 public static final Dop OR_LONG_2ADDR = 803 new Dop(Opcodes.OR_LONG_2ADDR, Opcodes.OR_LONG, 804 Opcodes.OR_LONG, Form12x.THE_ONE, true); 805 806 public static final Dop XOR_LONG_2ADDR = 807 new Dop(Opcodes.XOR_LONG_2ADDR, Opcodes.XOR_LONG, 808 Opcodes.XOR_LONG, Form12x.THE_ONE, true); 809 810 public static final Dop SHL_LONG_2ADDR = 811 new Dop(Opcodes.SHL_LONG_2ADDR, Opcodes.SHL_LONG, 812 Opcodes.SHL_LONG, Form12x.THE_ONE, true); 813 814 public static final Dop SHR_LONG_2ADDR = 815 new Dop(Opcodes.SHR_LONG_2ADDR, Opcodes.SHR_LONG, 816 Opcodes.SHR_LONG, Form12x.THE_ONE, true); 817 818 public static final Dop USHR_LONG_2ADDR = 819 new Dop(Opcodes.USHR_LONG_2ADDR, Opcodes.USHR_LONG, 820 Opcodes.USHR_LONG, Form12x.THE_ONE, true); 821 822 public static final Dop ADD_FLOAT_2ADDR = 823 new Dop(Opcodes.ADD_FLOAT_2ADDR, Opcodes.ADD_FLOAT, 824 Opcodes.ADD_FLOAT, Form12x.THE_ONE, true); 825 826 public static final Dop SUB_FLOAT_2ADDR = 827 new Dop(Opcodes.SUB_FLOAT_2ADDR, Opcodes.SUB_FLOAT, 828 Opcodes.SUB_FLOAT, Form12x.THE_ONE, true); 829 830 public static final Dop MUL_FLOAT_2ADDR = 831 new Dop(Opcodes.MUL_FLOAT_2ADDR, Opcodes.MUL_FLOAT, 832 Opcodes.MUL_FLOAT, Form12x.THE_ONE, true); 833 834 public static final Dop DIV_FLOAT_2ADDR = 835 new Dop(Opcodes.DIV_FLOAT_2ADDR, Opcodes.DIV_FLOAT, 836 Opcodes.DIV_FLOAT, Form12x.THE_ONE, true); 837 838 public static final Dop REM_FLOAT_2ADDR = 839 new Dop(Opcodes.REM_FLOAT_2ADDR, Opcodes.REM_FLOAT, 840 Opcodes.REM_FLOAT, Form12x.THE_ONE, true); 841 842 public static final Dop ADD_DOUBLE_2ADDR = 843 new Dop(Opcodes.ADD_DOUBLE_2ADDR, Opcodes.ADD_DOUBLE, 844 Opcodes.ADD_DOUBLE, Form12x.THE_ONE, true); 845 846 public static final Dop SUB_DOUBLE_2ADDR = 847 new Dop(Opcodes.SUB_DOUBLE_2ADDR, Opcodes.SUB_DOUBLE, 848 Opcodes.SUB_DOUBLE, Form12x.THE_ONE, true); 849 850 public static final Dop MUL_DOUBLE_2ADDR = 851 new Dop(Opcodes.MUL_DOUBLE_2ADDR, Opcodes.MUL_DOUBLE, 852 Opcodes.MUL_DOUBLE, Form12x.THE_ONE, true); 853 854 public static final Dop DIV_DOUBLE_2ADDR = 855 new Dop(Opcodes.DIV_DOUBLE_2ADDR, Opcodes.DIV_DOUBLE, 856 Opcodes.DIV_DOUBLE, Form12x.THE_ONE, true); 857 858 public static final Dop REM_DOUBLE_2ADDR = 859 new Dop(Opcodes.REM_DOUBLE_2ADDR, Opcodes.REM_DOUBLE, 860 Opcodes.REM_DOUBLE, Form12x.THE_ONE, true); 861 862 public static final Dop ADD_INT_LIT16 = 863 new Dop(Opcodes.ADD_INT_LIT16, Opcodes.ADD_INT, 864 Opcodes.NO_NEXT, Form22s.THE_ONE, true); 865 866 public static final Dop RSUB_INT = 867 new Dop(Opcodes.RSUB_INT, Opcodes.RSUB_INT, 868 Opcodes.NO_NEXT, Form22s.THE_ONE, true); 869 870 public static final Dop MUL_INT_LIT16 = 871 new Dop(Opcodes.MUL_INT_LIT16, Opcodes.MUL_INT, 872 Opcodes.NO_NEXT, Form22s.THE_ONE, true); 873 874 public static final Dop DIV_INT_LIT16 = 875 new Dop(Opcodes.DIV_INT_LIT16, Opcodes.DIV_INT, 876 Opcodes.NO_NEXT, Form22s.THE_ONE, true); 877 878 public static final Dop REM_INT_LIT16 = 879 new Dop(Opcodes.REM_INT_LIT16, Opcodes.REM_INT, 880 Opcodes.NO_NEXT, Form22s.THE_ONE, true); 881 882 public static final Dop AND_INT_LIT16 = 883 new Dop(Opcodes.AND_INT_LIT16, Opcodes.AND_INT, 884 Opcodes.NO_NEXT, Form22s.THE_ONE, true); 885 886 public static final Dop OR_INT_LIT16 = 887 new Dop(Opcodes.OR_INT_LIT16, Opcodes.OR_INT, 888 Opcodes.NO_NEXT, Form22s.THE_ONE, true); 889 890 public static final Dop XOR_INT_LIT16 = 891 new Dop(Opcodes.XOR_INT_LIT16, Opcodes.XOR_INT, 892 Opcodes.NO_NEXT, Form22s.THE_ONE, true); 893 894 public static final Dop ADD_INT_LIT8 = 895 new Dop(Opcodes.ADD_INT_LIT8, Opcodes.ADD_INT, 896 Opcodes.ADD_INT_LIT16, Form22b.THE_ONE, true); 897 898 public static final Dop RSUB_INT_LIT8 = 899 new Dop(Opcodes.RSUB_INT_LIT8, Opcodes.RSUB_INT, 900 Opcodes.RSUB_INT, Form22b.THE_ONE, true); 901 902 public static final Dop MUL_INT_LIT8 = 903 new Dop(Opcodes.MUL_INT_LIT8, Opcodes.MUL_INT, 904 Opcodes.MUL_INT_LIT16, Form22b.THE_ONE, true); 905 906 public static final Dop DIV_INT_LIT8 = 907 new Dop(Opcodes.DIV_INT_LIT8, Opcodes.DIV_INT, 908 Opcodes.DIV_INT_LIT16, Form22b.THE_ONE, true); 909 910 public static final Dop REM_INT_LIT8 = 911 new Dop(Opcodes.REM_INT_LIT8, Opcodes.REM_INT, 912 Opcodes.REM_INT_LIT16, Form22b.THE_ONE, true); 913 914 public static final Dop AND_INT_LIT8 = 915 new Dop(Opcodes.AND_INT_LIT8, Opcodes.AND_INT, 916 Opcodes.AND_INT_LIT16, Form22b.THE_ONE, true); 917 918 public static final Dop OR_INT_LIT8 = 919 new Dop(Opcodes.OR_INT_LIT8, Opcodes.OR_INT, 920 Opcodes.OR_INT_LIT16, Form22b.THE_ONE, true); 921 922 public static final Dop XOR_INT_LIT8 = 923 new Dop(Opcodes.XOR_INT_LIT8, Opcodes.XOR_INT, 924 Opcodes.XOR_INT_LIT16, Form22b.THE_ONE, true); 925 926 public static final Dop SHL_INT_LIT8 = 927 new Dop(Opcodes.SHL_INT_LIT8, Opcodes.SHL_INT, 928 Opcodes.NO_NEXT, Form22b.THE_ONE, true); 929 930 public static final Dop SHR_INT_LIT8 = 931 new Dop(Opcodes.SHR_INT_LIT8, Opcodes.SHR_INT, 932 Opcodes.NO_NEXT, Form22b.THE_ONE, true); 933 934 public static final Dop USHR_INT_LIT8 = 935 new Dop(Opcodes.USHR_INT_LIT8, Opcodes.USHR_INT, 936 Opcodes.NO_NEXT, Form22b.THE_ONE, true); 937 938 // END(dops) 939 940 // Static initialization. 941 static { 942 DOPS = new Dop[Opcodes.MAX_VALUE - Opcodes.MIN_VALUE + 1]; 943 944 set(SPECIAL_FORMAT); 945 946 // BEGIN(dops-init); GENERATED AUTOMATICALLY BY opcode-gen 947 set(NOP); 948 set(MOVE); 949 set(MOVE_FROM16); 950 set(MOVE_16); 951 set(MOVE_WIDE); 952 set(MOVE_WIDE_FROM16); 953 set(MOVE_WIDE_16); 954 set(MOVE_OBJECT); 955 set(MOVE_OBJECT_FROM16); 956 set(MOVE_OBJECT_16); 957 set(MOVE_RESULT); 958 set(MOVE_RESULT_WIDE); 959 set(MOVE_RESULT_OBJECT); 960 set(MOVE_EXCEPTION); 961 set(RETURN_VOID); 962 set(RETURN); 963 set(RETURN_WIDE); 964 set(RETURN_OBJECT); 965 set(CONST_4); 966 set(CONST_16); 967 set(CONST); 968 set(CONST_HIGH16); 969 set(CONST_WIDE_16); 970 set(CONST_WIDE_32); 971 set(CONST_WIDE); 972 set(CONST_WIDE_HIGH16); 973 set(CONST_STRING); 974 set(CONST_STRING_JUMBO); 975 set(CONST_CLASS); 976 set(MONITOR_ENTER); 977 set(MONITOR_EXIT); 978 set(CHECK_CAST); 979 set(INSTANCE_OF); 980 set(ARRAY_LENGTH); 981 set(NEW_INSTANCE); 982 set(NEW_ARRAY); 983 set(FILLED_NEW_ARRAY); 984 set(FILLED_NEW_ARRAY_RANGE); 985 set(FILL_ARRAY_DATA); 986 set(THROW); 987 set(GOTO); 988 set(GOTO_16); 989 set(GOTO_32); 990 set(PACKED_SWITCH); 991 set(SPARSE_SWITCH); 992 set(CMPL_FLOAT); 993 set(CMPG_FLOAT); 994 set(CMPL_DOUBLE); 995 set(CMPG_DOUBLE); 996 set(CMP_LONG); 997 set(IF_EQ); 998 set(IF_NE); 999 set(IF_LT); 1000 set(IF_GE); 1001 set(IF_GT); 1002 set(IF_LE); 1003 set(IF_EQZ); 1004 set(IF_NEZ); 1005 set(IF_LTZ); 1006 set(IF_GEZ); 1007 set(IF_GTZ); 1008 set(IF_LEZ); 1009 set(AGET); 1010 set(AGET_WIDE); 1011 set(AGET_OBJECT); 1012 set(AGET_BOOLEAN); 1013 set(AGET_BYTE); 1014 set(AGET_CHAR); 1015 set(AGET_SHORT); 1016 set(APUT); 1017 set(APUT_WIDE); 1018 set(APUT_OBJECT); 1019 set(APUT_BOOLEAN); 1020 set(APUT_BYTE); 1021 set(APUT_CHAR); 1022 set(APUT_SHORT); 1023 set(IGET); 1024 set(IGET_WIDE); 1025 set(IGET_OBJECT); 1026 set(IGET_BOOLEAN); 1027 set(IGET_BYTE); 1028 set(IGET_CHAR); 1029 set(IGET_SHORT); 1030 set(IPUT); 1031 set(IPUT_WIDE); 1032 set(IPUT_OBJECT); 1033 set(IPUT_BOOLEAN); 1034 set(IPUT_BYTE); 1035 set(IPUT_CHAR); 1036 set(IPUT_SHORT); 1037 set(SGET); 1038 set(SGET_WIDE); 1039 set(SGET_OBJECT); 1040 set(SGET_BOOLEAN); 1041 set(SGET_BYTE); 1042 set(SGET_CHAR); 1043 set(SGET_SHORT); 1044 set(SPUT); 1045 set(SPUT_WIDE); 1046 set(SPUT_OBJECT); 1047 set(SPUT_BOOLEAN); 1048 set(SPUT_BYTE); 1049 set(SPUT_CHAR); 1050 set(SPUT_SHORT); 1051 set(INVOKE_VIRTUAL); 1052 set(INVOKE_SUPER); 1053 set(INVOKE_DIRECT); 1054 set(INVOKE_STATIC); 1055 set(INVOKE_INTERFACE); 1056 set(INVOKE_VIRTUAL_RANGE); 1057 set(INVOKE_SUPER_RANGE); 1058 set(INVOKE_DIRECT_RANGE); 1059 set(INVOKE_STATIC_RANGE); 1060 set(INVOKE_INTERFACE_RANGE); 1061 set(NEG_INT); 1062 set(NOT_INT); 1063 set(NEG_LONG); 1064 set(NOT_LONG); 1065 set(NEG_FLOAT); 1066 set(NEG_DOUBLE); 1067 set(INT_TO_LONG); 1068 set(INT_TO_FLOAT); 1069 set(INT_TO_DOUBLE); 1070 set(LONG_TO_INT); 1071 set(LONG_TO_FLOAT); 1072 set(LONG_TO_DOUBLE); 1073 set(FLOAT_TO_INT); 1074 set(FLOAT_TO_LONG); 1075 set(FLOAT_TO_DOUBLE); 1076 set(DOUBLE_TO_INT); 1077 set(DOUBLE_TO_LONG); 1078 set(DOUBLE_TO_FLOAT); 1079 set(INT_TO_BYTE); 1080 set(INT_TO_CHAR); 1081 set(INT_TO_SHORT); 1082 set(ADD_INT); 1083 set(SUB_INT); 1084 set(MUL_INT); 1085 set(DIV_INT); 1086 set(REM_INT); 1087 set(AND_INT); 1088 set(OR_INT); 1089 set(XOR_INT); 1090 set(SHL_INT); 1091 set(SHR_INT); 1092 set(USHR_INT); 1093 set(ADD_LONG); 1094 set(SUB_LONG); 1095 set(MUL_LONG); 1096 set(DIV_LONG); 1097 set(REM_LONG); 1098 set(AND_LONG); 1099 set(OR_LONG); 1100 set(XOR_LONG); 1101 set(SHL_LONG); 1102 set(SHR_LONG); 1103 set(USHR_LONG); 1104 set(ADD_FLOAT); 1105 set(SUB_FLOAT); 1106 set(MUL_FLOAT); 1107 set(DIV_FLOAT); 1108 set(REM_FLOAT); 1109 set(ADD_DOUBLE); 1110 set(SUB_DOUBLE); 1111 set(MUL_DOUBLE); 1112 set(DIV_DOUBLE); 1113 set(REM_DOUBLE); 1114 set(ADD_INT_2ADDR); 1115 set(SUB_INT_2ADDR); 1116 set(MUL_INT_2ADDR); 1117 set(DIV_INT_2ADDR); 1118 set(REM_INT_2ADDR); 1119 set(AND_INT_2ADDR); 1120 set(OR_INT_2ADDR); 1121 set(XOR_INT_2ADDR); 1122 set(SHL_INT_2ADDR); 1123 set(SHR_INT_2ADDR); 1124 set(USHR_INT_2ADDR); 1125 set(ADD_LONG_2ADDR); 1126 set(SUB_LONG_2ADDR); 1127 set(MUL_LONG_2ADDR); 1128 set(DIV_LONG_2ADDR); 1129 set(REM_LONG_2ADDR); 1130 set(AND_LONG_2ADDR); 1131 set(OR_LONG_2ADDR); 1132 set(XOR_LONG_2ADDR); 1133 set(SHL_LONG_2ADDR); 1134 set(SHR_LONG_2ADDR); 1135 set(USHR_LONG_2ADDR); 1136 set(ADD_FLOAT_2ADDR); 1137 set(SUB_FLOAT_2ADDR); 1138 set(MUL_FLOAT_2ADDR); 1139 set(DIV_FLOAT_2ADDR); 1140 set(REM_FLOAT_2ADDR); 1141 set(ADD_DOUBLE_2ADDR); 1142 set(SUB_DOUBLE_2ADDR); 1143 set(MUL_DOUBLE_2ADDR); 1144 set(DIV_DOUBLE_2ADDR); 1145 set(REM_DOUBLE_2ADDR); 1146 set(ADD_INT_LIT16); 1147 set(RSUB_INT); 1148 set(MUL_INT_LIT16); 1149 set(DIV_INT_LIT16); 1150 set(REM_INT_LIT16); 1151 set(AND_INT_LIT16); 1152 set(OR_INT_LIT16); 1153 set(XOR_INT_LIT16); 1154 set(ADD_INT_LIT8); 1155 set(RSUB_INT_LIT8); 1156 set(MUL_INT_LIT8); 1157 set(DIV_INT_LIT8); 1158 set(REM_INT_LIT8); 1159 set(AND_INT_LIT8); 1160 set(OR_INT_LIT8); 1161 set(XOR_INT_LIT8); 1162 set(SHL_INT_LIT8); 1163 set(SHR_INT_LIT8); 1164 set(USHR_INT_LIT8); 1165 // END(dops-init) 1166 } 1167 1168 /** 1169 * This class is uninstantiable. 1170 */ 1171 private Dops() { 1172 // This space intentionally left blank. 1173 } 1174 1175 /** 1176 * Gets the {@link Dop} for the given opcode value. 1177 * 1178 * @param opcode {@code Opcodes.MIN_VALUE..Opcodes.MAX_VALUE;} the 1179 * opcode value 1180 * @return {@code non-null;} the associated opcode instance 1181 */ 1182 public static Dop get(int opcode) { 1183 int idx = opcode - Opcodes.MIN_VALUE; 1184 1185 try { 1186 Dop result = DOPS[idx]; 1187 if (result != null) { 1188 return result; 1189 } 1190 } catch (ArrayIndexOutOfBoundsException ex) { 1191 // Fall through. 1192 } 1193 1194 throw new IllegalArgumentException("bogus opcode"); 1195 } 1196 1197 /** 1198 * Gets the next {@link Dop} in the instruction fitting chain after the 1199 * given instance, if any. 1200 * 1201 * @param opcode {@code non-null;} the opcode 1202 * @param options {@code non-null;} options, used to determine 1203 * which opcodes are potentially off-limits 1204 * @return {@code null-ok;} the next opcode in the same family, in the 1205 * chain of opcodes to try, or {@code null} if the given opcode is 1206 * the last in its chain 1207 */ 1208 public static Dop getNextOrNull(Dop opcode, DexOptions options) { 1209 boolean suppressExtendedOpcodes = !options.canUseExtendedOpcodes(); 1210 1211 for (;;) { 1212 int nextOpcode = opcode.getNextOpcode(); 1213 1214 if (nextOpcode == Opcodes.NO_NEXT) { 1215 return null; 1216 } 1217 1218 opcode = get(nextOpcode); 1219 1220 if (suppressExtendedOpcodes && Opcodes.isExtended(nextOpcode)) { 1221 /* 1222 * Continuing rather than just returning null here 1223 * protects against the possibility that an 1224 * instruction fitting chain might list non-extended 1225 * opcodes after extended ones. 1226 */ 1227 continue; 1228 } 1229 1230 return opcode; 1231 } 1232 } 1233 1234 /** 1235 * Puts the given opcode into the table of all ops. 1236 * 1237 * @param opcode {@code non-null;} the opcode 1238 */ 1239 private static void set(Dop opcode) { 1240 int idx = opcode.getOpcode() - Opcodes.MIN_VALUE; 1241 DOPS[idx] = opcode; 1242 } 1243} 1244