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