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