1 23 24 25 package com.sun.jdo.api.persistence.enhancer.classfile; 26 27 30 public class VMOp implements VMConstants { 31 32 private int opcodeValue; 33 34 35 private String opcodeName; 36 37 38 private int stackArgs; 39 40 41 private int stackResults; 42 43 private String stackArgTypes; 45 46 private String stackResultTypes; 48 49 50 51 54 final public int opcode() { 55 return opcodeValue; 56 } 57 58 61 final public String name() { 62 return opcodeName; 63 } 64 65 69 final public int nStackArgs() { 70 return stackArgs; 71 } 72 73 77 final public int nStackResults() { 78 return stackResults; 79 } 80 81 84 final public String argTypes() { 85 return stackArgTypes; 86 } 87 88 91 final public String resultTypes() { 92 return stackResultTypes; 93 } 94 95 98 99 public VMOp(int theOpcode, String theOpcodeName, int nArgs, int nResults, 100 String argDescr, String resultDescr) { 101 opcodeValue = theOpcode; 102 opcodeName = theOpcodeName; 103 stackArgs = nArgs; 104 stackResults = nResults; 105 stackArgTypes = argDescr; 106 stackResultTypes = resultDescr; 107 } 108 109 110 111 static VMOp[] ops = { 112 113 new VMOp(opc_nop, "nop", 0, 0, "", ""), 115 new VMOp(opc_aconst_null, "aconst_null", 0, 1, "", "A"), 117 new VMOp(opc_iconst_m1, "iconst_m1", 0, 1, "", "I"), 119 new VMOp(opc_iconst_0, "iconst_0", 0, 1, "", "I"), 121 new VMOp(opc_iconst_1, "iconst_1", 0, 1, "", "I"), 123 new VMOp(opc_iconst_2, "iconst_2", 0, 1, "", "I"), 125 new VMOp(opc_iconst_3, "iconst_3", 0, 1, "", "I"), 127 new VMOp(opc_iconst_4, "iconst_4", 0, 1, "", "I"), 129 new VMOp(opc_iconst_5, "iconst_5", 0, 1, "", "I"), 131 new VMOp(opc_lconst_0, "lconst_0", 0, 2, "", "J"), 133 new VMOp(opc_lconst_1, "lconst_1", 0, 2, "", "J"), 135 new VMOp(opc_fconst_0, "fconst_0", 0, 1, "", "F"), 137 new VMOp(opc_fconst_1, "fconst_1", 0, 1, "", "F"), 139 new VMOp(opc_fconst_2, "fconst_2", 0, 1, "", "F"), 141 new VMOp(opc_dconst_0, "dconst_0", 0, 2, "", "D"), 143 new VMOp(opc_dconst_1, "dconst_1", 0, 2, "", "D"), 145 new VMOp(opc_bipush, "bipush", 0, 1, "", "I"), 147 new VMOp(opc_sipush, "sipush", 0, 1, "", "I"), 149 new VMOp(opc_ldc, "ldc", 0, 1, "", "W"), 151 new VMOp(opc_ldc_w, "ldc_w", 0, 1, "", "W"), 153 new VMOp(opc_ldc2_w, "ldc2_w", 0, 2, "", "X"), 155 new VMOp(opc_iload, "iload", 0, 1, "", "I"), 157 new VMOp(opc_lload, "lload", 0, 2, "", "J"), 159 new VMOp(opc_fload, "fload", 0, 1, "", "F"), 161 new VMOp(opc_dload, "dload", 0, 2, "", "D"), 163 new VMOp(opc_aload, "aload", 0, 1, "", "A"), 165 new VMOp(opc_iload_0, "iload_0", 0, 1, "", "I"), 167 new VMOp(opc_iload_1, "iload_1", 0, 1, "", "I"), 169 new VMOp(opc_iload_2, "iload_2", 0, 1, "", "I"), 171 new VMOp(opc_iload_3, "iload_3", 0, 1, "", "I"), 173 new VMOp(opc_lload_0, "lload_0", 0, 2, "", "J"), 175 new VMOp(opc_lload_1, "lload_1", 0, 2, "", "J"), 177 new VMOp(opc_lload_2, "lload_2", 0, 2, "", "J"), 179 new VMOp(opc_lload_3, "lload_3", 0, 2, "", "J"), 181 new VMOp(opc_fload_0, "fload_0", 0, 1, "", "F"), 183 new VMOp(opc_fload_1, "fload_1", 0, 1, "", "F"), 185 new VMOp(opc_fload_2, "fload_2", 0, 1, "", "F"), 187 new VMOp(opc_fload_3, "fload_3", 0, 1, "", "F"), 189 new VMOp(opc_dload_0, "dload_0", 0, 2, "", "D"), 191 new VMOp(opc_dload_1, "dload_1", 0, 2, "", "D"), 193 new VMOp(opc_dload_2, "dload_2", 0, 2, "", "D"), 195 new VMOp(opc_dload_3, "dload_3", 0, 2, "", "D"), 197 new VMOp(opc_aload_0, "aload_0", 0, 1, "", "A"), 199 new VMOp(opc_aload_1, "aload_1", 0, 1, "", "A"), 201 new VMOp(opc_aload_2, "aload_2", 0, 1, "", "A"), 203 new VMOp(opc_aload_3, "aload_3", 0, 1, "", "A"), 205 new VMOp(opc_iaload, "iaload", 2, 1, "AI", "I"), 207 new VMOp(opc_laload, "laload", 2, 2, "AI", "J"), 209 new VMOp(opc_faload, "faload", 2, 1, "AI", "F"), 211 new VMOp(opc_daload, "daload", 2, 2, "AI", "D"), 213 new VMOp(opc_aaload, "aaload", 2, 1, "AI", "A"), 215 new VMOp(opc_baload, "baload", 2, 1, "AI", "I"), 217 new VMOp(opc_caload, "caload", 2, 1, "AI", "I"), 219 new VMOp(opc_saload, "saload", 2, 1, "AI", "I"), 221 new VMOp(opc_istore, "istore", 1, 0, "I", ""), 223 new VMOp(opc_lstore, "lstore", 2, 0, "J", ""), 225 new VMOp(opc_fstore, "fstore", 1, 0, "F", ""), 227 new VMOp(opc_dstore, "dstore", 2, 0, "D", ""), 229 new VMOp(opc_astore, "astore", 1, 0, "A", ""), 231 new VMOp(opc_istore_0, "istore_0", 1, 0, "I", ""), 233 new VMOp(opc_istore_1, "istore_1", 1, 0, "I", ""), 235 new VMOp(opc_istore_2, "istore_2", 1, 0, "I", ""), 237 new VMOp(opc_istore_3, "istore_3", 1, 0, "I", ""), 239 new VMOp(opc_lstore_0, "lstore_0", 2, 0, "J", ""), 241 new VMOp(opc_lstore_1, "lstore_1", 2, 0, "J", ""), 243 new VMOp(opc_lstore_2, "lstore_2", 2, 0, "J", ""), 245 new VMOp(opc_lstore_3, "lstore_3", 2, 0, "J", ""), 247 new VMOp(opc_fstore_0, "fstore_0", 1, 0, "F", ""), 249 new VMOp(opc_fstore_1, "fstore_1", 1, 0, "F", ""), 251 new VMOp(opc_fstore_2, "fstore_2", 1, 0, "F", ""), 253 new VMOp(opc_fstore_3, "fstore_3", 1, 0, "F", ""), 255 new VMOp(opc_dstore_0, "dstore_0", 2, 0, "D", ""), 257 new VMOp(opc_dstore_1, "dstore_1", 2, 0, "D", ""), 259 new VMOp(opc_dstore_2, "dstore_2", 2, 0, "D", ""), 261 new VMOp(opc_dstore_3, "dstore_3", 2, 0, "D", ""), 263 new VMOp(opc_astore_0, "astore_0", 1, 0, "A", ""), 265 new VMOp(opc_astore_1, "astore_1", 1, 0, "A", ""), 267 new VMOp(opc_astore_2, "astore_2", 1, 0, "A", ""), 269 new VMOp(opc_astore_3, "astore_3", 1, 0, "A", ""), 271 new VMOp(opc_iastore, "iastore", 3, 0, "AII", ""), 273 new VMOp(opc_lastore, "lastore", 4, 0, "AIJ", ""), 275 new VMOp(opc_fastore, "fastore", 3, 0, "AIF", ""), 277 new VMOp(opc_dastore, "dastore", 4, 0, "AID", ""), 279 new VMOp(opc_aastore, "aastore", 3, 0, "AIA", ""), 281 new VMOp(opc_bastore, "bastore", 3, 0, "AII", ""), 283 new VMOp(opc_castore, "castore", 3, 0, "AII", ""), 285 new VMOp(opc_sastore, "sastore", 3, 0, "AII", ""), 287 new VMOp(opc_pop, "pop", 1, 0, "W", ""), 289 new VMOp(opc_pop2, "pop2", 2, 0, "WW", ""), 291 new VMOp(opc_dup, "dup", 1, 2, "W", "WW"), 293 new VMOp(opc_dup_x1, "dup_x1", 2, 3, "WW", "WWW"), 295 new VMOp(opc_dup_x2, "dup_x2", 3, 4, "WWW", "WWWW"), 297 new VMOp(opc_dup2, "dup2", 2, 4, "WW", "WWWW"), 299 new VMOp(opc_dup2_x1, "dup2_x1", 3, 5, "WWW", "WWWWW"), 301 new VMOp(opc_dup2_x2, "dup2_x2", 4, 6, "WWWW", "WWWWWW"), 303 new VMOp(opc_swap, "swap", 2, 2, "WW", "WW"), 305 new VMOp(opc_iadd, "iadd", 2, 1, "II", "I"), 307 new VMOp(opc_ladd, "ladd", 4, 2, "JJ", "J"), 309 new VMOp(opc_fadd, "fadd", 2, 1, "FF", "F"), 311 new VMOp(opc_dadd, "dadd", 4, 2, "DD", "D"), 313 new VMOp(opc_isub, "isub", 2, 1, "II", "I"), 315 new VMOp(opc_lsub, "lsub", 4, 2, "JJ", "J"), 317 new VMOp(opc_fsub, "fsub", 2, 1, "FF", "F"), 319 new VMOp(opc_dsub, "dsub", 4, 2, "DD", "D"), 321 new VMOp(opc_imul, "imul", 2, 1, "II", "I"), 323 new VMOp(opc_lmul, "lmul", 4, 2, "JJ", "J"), 325 new VMOp(opc_fmul, "fmul", 2, 1, "FF", "F"), 327 new VMOp(opc_dmul, "dmul", 4, 2, "DD", "D"), 329 new VMOp(opc_idiv, "idiv", 2, 1, "II", "I"), 331 new VMOp(opc_ldiv, "ldiv", 4, 2, "JJ", "J"), 333 new VMOp(opc_fdiv, "fdiv", 2, 1, "FF", "F"), 335 new VMOp(opc_ddiv, "ddiv", 4, 2, "DD", "D"), 337 new VMOp(opc_irem, "irem", 2, 1, "II", "I"), 339 new VMOp(opc_lrem, "lrem", 4, 2, "JJ", "J"), 341 new VMOp(opc_frem, "frem", 2, 1, "FF", "F"), 343 new VMOp(opc_drem, "drem", 4, 2, "DD", "D"), 345 new VMOp(opc_ineg, "ineg", 1, 1, "I", "I"), 347 new VMOp(opc_lneg, "lneg", 2, 2, "J", "J"), 349 new VMOp(opc_fneg, "fneg", 1, 1, "F", "F"), 351 new VMOp(opc_dneg, "dneg", 2, 2, "D", "D"), 353 new VMOp(opc_ishl, "ishl", 2, 1, "II", "I"), 355 new VMOp(opc_lshl, "lshl", 3, 2, "JI", "J"), 357 new VMOp(opc_ishr, "ishr", 2, 1, "II", "I"), 359 new VMOp(opc_lshr, "lshr", 3, 2, "JI", "J"), 361 new VMOp(opc_iushr, "iushr", 2, 1, "II", "I"), 363 new VMOp(opc_lushr, "lushr", 3, 2, "JI", "J"), 365 new VMOp(opc_iand, "iand", 2, 1, "II", "I"), 367 new VMOp(opc_land, "land", 4, 2, "JJ", "J"), 369 new VMOp(opc_ior, "ior", 2, 1, "II", "I"), 371 new VMOp(opc_lor, "lor", 4, 2, "JJ", "J"), 373 new VMOp(opc_ixor, "ixor", 2, 1, "II", "I"), 375 new VMOp(opc_lxor, "lxor", 4, 2, "JJ", "J"), 377 new VMOp(opc_iinc, "iinc", 0, 0, "", ""), 379 new VMOp(opc_i2l, "i2l", 1, 2, "I", "J"), 381 new VMOp(opc_i2f, "i2f", 1, 1, "I", "F"), 383 new VMOp(opc_i2d, "i2d", 1, 2, "I", "D"), 385 new VMOp(opc_l2i, "l2i", 2, 1, "J", "I"), 387 new VMOp(opc_l2f, "l2f", 2, 1, "J", "F"), 389 new VMOp(opc_l2d, "l2d", 2, 2, "J", "D"), 391 new VMOp(opc_f2i, "f2i", 1, 1, "F", "I"), 393 new VMOp(opc_f2l, "f2l", 1, 2, "F", "J"), 395 new VMOp(opc_f2d, "f2d", 1, 2, "F", "D"), 397 new VMOp(opc_d2i, "d2i", 2, 1, "D", "I"), 399 new VMOp(opc_d2l, "d2l", 2, 2, "D", "J"), 401 new VMOp(opc_d2f, "d2f", 2, 1, "D", "F"), 403 new VMOp(opc_i2b, "i2b", 1, 1, "I", "I"), 405 new VMOp(opc_i2c, "i2c", 1, 1, "I", "I"), 407 new VMOp(opc_i2s, "i2s", 1, 1, "I", "I"), 409 new VMOp(opc_lcmp, "lcmp", 4, 1, "JJ", "I"), 411 new VMOp(opc_fcmpl, "fcmpl", 2, 1, "FF", "I"), 413 new VMOp(opc_fcmpg, "fcmpg", 2, 1, "FF", "I"), 415 new VMOp(opc_dcmpl, "dcmpl", 4, 1, "DD", "I"), 417 new VMOp(opc_dcmpg, "dcmpg", 4, 1, "DD", "I"), 419 new VMOp(opc_ifeq, "ifeq", 1, 0, "I", ""), 421 new VMOp(opc_ifne, "ifne", 1, 0, "I", ""), 423 new VMOp(opc_iflt, "iflt", 1, 0, "I", ""), 425 new VMOp(opc_ifge, "ifge", 1, 0, "I", ""), 427 new VMOp(opc_ifgt, "ifgt", 1, 0, "I", ""), 429 new VMOp(opc_ifle, "ifle", 1, 0, "I", ""), 431 new VMOp(opc_if_icmpeq, "if_icmpeq", 2, 0, "II", ""), 433 new VMOp(opc_if_icmpne, "if_icmpne", 2, 0, "II", ""), 435 new VMOp(opc_if_icmplt, "if_icmplt", 2, 0, "II", ""), 437 new VMOp(opc_if_icmpge, "if_icmpge", 2, 0, "II", ""), 439 new VMOp(opc_if_icmpgt, "if_icmpgt", 2, 0, "II", ""), 441 new VMOp(opc_if_icmple, "if_icmple", 2, 0, "II", ""), 443 new VMOp(opc_if_acmpeq, "if_acmpeq", 2, 0, "AA", ""), 445 new VMOp(opc_if_acmpne, "if_acmpne", 2, 0, "AA", ""), 447 new VMOp(opc_goto, "goto", 0, 0, "", ""), 449 new VMOp(opc_jsr, "jsr", 0, 1, "", "W"), 451 new VMOp(opc_ret, "ret", 0, 0, "", ""), 453 new VMOp(opc_tableswitch, "tableswitch", 1, 0, "I", ""), 455 new VMOp(opc_lookupswitch, "lookupswitch", 1, 0, "I", ""), 457 new VMOp(opc_ireturn, "ireturn", 1, 0, "I", ""), 459 new VMOp(opc_lreturn, "lreturn", 2, 0, "J", ""), 461 new VMOp(opc_freturn, "freturn", 1, 0, "F", ""), 463 new VMOp(opc_dreturn, "dreturn", 2, 0, "D", ""), 465 new VMOp(opc_areturn, "areturn", 1, 0, "A", ""), 467 new VMOp(opc_return, "return", 0, 0, "", ""), 469 new VMOp(opc_getstatic, "getstatic", 0, -1, "", "?"), 471 new VMOp(opc_putstatic, "putstatic", -1, 0, "?", ""), 473 new VMOp(opc_getfield, "getfield", 1, -1, "A", "?"), 475 new VMOp(opc_putfield, "putfield", -1, 0, "A?", ""), 477 new VMOp(opc_invokevirtual, "invokevirtual", -1, -1, "A?", "?"), 479 new VMOp(opc_invokespecial, "invokespecial", -1, -1, "A?", "?"), 481 new VMOp(opc_invokestatic, "invokestatic", -1, -1, "?", "?"), 483 new VMOp(opc_invokeinterface, "invokeinterface", -1, -1, "A?", "?"), 485 new VMOp(opc_xxxunusedxxx, "xxxunusedxxx", 0, 0, "", ""), 487 new VMOp(opc_new, "new", 0, 1, "", "A"), 489 new VMOp(opc_newarray, "newarray", 1, 1, "I", "A"), 491 new VMOp(opc_anewarray, "anewarray", 1, 1, "I", "A"), 493 new VMOp(opc_arraylength, "arraylength", 1, 1, "A", "I"), 495 new VMOp(opc_athrow, "athrow", 1, 0, "A", "?"), 497 new VMOp(opc_checkcast, "checkcast", 1, 1, "A", "A"), 499 new VMOp(opc_instanceof, "instanceof", 1, 1, "A", "I"), 501 new VMOp(opc_monitorenter, "monitorenter", 1, 0, "A", ""), 503 new VMOp(opc_monitorexit, "monitorexit", 1, 0, "A", ""), 505 new VMOp(opc_wide, "wide", 0, 0, "", ""), 507 new VMOp(opc_multianewarray, "multianewarray", -1, 1, "?", "A"), 509 new VMOp(opc_ifnull, "ifnull", 1, 0, "A", ""), 511 new VMOp(opc_ifnonnull, "ifnonnull", 1, 0, "A", ""), 513 new VMOp(opc_goto_w, "goto_w", 0, 0, "", ""), 515 new VMOp(opc_jsr_w, "jsr_w", 0, 1, "", "W") }; 517 520 private static void check() { 521 for (int i=0; i<=opc_jsr_w; i++) { 522 VMOp op = ops[i]; 523 if (op == null) 524 throw new InsnError ("null VMOp for " + i); if (op.opcode() != i) 526 throw new InsnError ("bad opcode for " + i); 528 if (1 == 0) { 529 530 checkTypes(op.argTypes(), op.nStackArgs(), op); 531 checkTypes(op.resultTypes(), op.nStackResults(), op); 532 } 533 } 534 } 535 536 private static void checkTypes(String types, int n, VMOp op) { 537 for (int i=0; i<types.length(); i++) { 538 char c = types.charAt(i); 539 if (c == '?') 540 return; 541 if (c == 'J' || c == 'X' || c == 'D') 542 n -= 2; 543 else 544 n -= 1; 545 } 546 if (n != 0) 547 throw new InsnError ("Bad arg/result for VMOp " + op.opcodeName); } 549 550 static { 551 check(); 552 } 553 } 554 | Popular Tags |