comparison agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java @ 1602:136b78722a08

6939203: JSR 292 needs method handle constants Summary: Add new CP types CONSTANT_MethodHandle, CONSTANT_MethodType; extend 'ldc' bytecode. Reviewed-by: twisti, never
author jrose
date Wed, 09 Jun 2010 18:50:45 -0700
parents c18cbe5936b8
children 0a8e0d4345b3
comparison
equal deleted inserted replaced
1585:49fac4acd688 1602:136b78722a08
220 public static final int _putfield = 181; // 0xb5 220 public static final int _putfield = 181; // 0xb5
221 public static final int _invokevirtual = 182; // 0xb6 221 public static final int _invokevirtual = 182; // 0xb6
222 public static final int _invokespecial = 183; // 0xb7 222 public static final int _invokespecial = 183; // 0xb7
223 public static final int _invokestatic = 184; // 0xb8 223 public static final int _invokestatic = 184; // 0xb8
224 public static final int _invokeinterface = 185; // 0xb9 224 public static final int _invokeinterface = 185; // 0xb9
225 public static final int _xxxunusedxxx = 186; // 0xba 225 public static final int _invokedynamic = 186; // 0xba
226 public static final int _new = 187; // 0xbb 226 public static final int _new = 187; // 0xbb
227 public static final int _newarray = 188; // 0xbc 227 public static final int _newarray = 188; // 0xbc
228 public static final int _anewarray = 189; // 0xbd 228 public static final int _anewarray = 189; // 0xbd
229 public static final int _arraylength = 190; // 0xbe 229 public static final int _arraylength = 190; // 0xbe
230 public static final int _athrow = 191; // 0xbf 230 public static final int _athrow = 191; // 0xbf
267 public static final int _fast_iload2 = 224; 267 public static final int _fast_iload2 = 224;
268 public static final int _fast_icaload = 225; 268 public static final int _fast_icaload = 225;
269 public static final int _fast_invokevfinal = 226; 269 public static final int _fast_invokevfinal = 226;
270 public static final int _fast_linearswitch = 227; 270 public static final int _fast_linearswitch = 227;
271 public static final int _fast_binaryswitch = 228; 271 public static final int _fast_binaryswitch = 228;
272 public static final int _shouldnotreachhere = 229; // For debugging 272 public static final int _fast_aldc = 229;
273 273 public static final int _fast_aldc_w = 230;
274 public static final int number_of_codes = 230; 274 public static final int _return_register_finalizer = 231;
275 public static final int _shouldnotreachhere = 232; // For debugging
276
277 public static final int number_of_codes = 233;
275 278
276 public static int specialLengthAt(Method method, int bci) { 279 public static int specialLengthAt(Method method, int bci) {
277 int code = codeAt(method, bci); 280 int code = codeAt(method, bci);
278 switch (code) { 281 switch (code) {
279 case _wide: 282 case _wide:
456 def(_fconst_2 , "fconst_2" , "b" , null , BasicType.getTFloat() , 1, false); 459 def(_fconst_2 , "fconst_2" , "b" , null , BasicType.getTFloat() , 1, false);
457 def(_dconst_0 , "dconst_0" , "b" , null , BasicType.getTDouble() , 2, false); 460 def(_dconst_0 , "dconst_0" , "b" , null , BasicType.getTDouble() , 2, false);
458 def(_dconst_1 , "dconst_1" , "b" , null , BasicType.getTDouble() , 2, false); 461 def(_dconst_1 , "dconst_1" , "b" , null , BasicType.getTDouble() , 2, false);
459 def(_bipush , "bipush" , "bc" , null , BasicType.getTInt() , 1, false); 462 def(_bipush , "bipush" , "bc" , null , BasicType.getTInt() , 1, false);
460 def(_sipush , "sipush" , "bcc" , null , BasicType.getTInt() , 1, false); 463 def(_sipush , "sipush" , "bcc" , null , BasicType.getTInt() , 1, false);
461 def(_ldc , "ldc" , "bi" , null , BasicType.getTIllegal(), 1, true ); 464 def(_ldc , "ldc" , "bk" , null , BasicType.getTIllegal(), 1, true );
462 def(_ldc_w , "ldc_w" , "bii" , null , BasicType.getTIllegal(), 1, true ); 465 def(_ldc_w , "ldc_w" , "bkk" , null , BasicType.getTIllegal(), 1, true );
463 def(_ldc2_w , "ldc2_w" , "bii" , null , BasicType.getTIllegal(), 2, true ); 466 def(_ldc2_w , "ldc2_w" , "bkk" , null , BasicType.getTIllegal(), 2, true );
464 def(_iload , "iload" , "bi" , "wbii" , BasicType.getTInt() , 1, false); 467 def(_iload , "iload" , "bi" , "wbii" , BasicType.getTInt() , 1, false);
465 def(_lload , "lload" , "bi" , "wbii" , BasicType.getTLong() , 2, false); 468 def(_lload , "lload" , "bi" , "wbii" , BasicType.getTLong() , 2, false);
466 def(_fload , "fload" , "bi" , "wbii" , BasicType.getTFloat() , 1, false); 469 def(_fload , "fload" , "bi" , "wbii" , BasicType.getTFloat() , 1, false);
467 def(_dload , "dload" , "bi" , "wbii" , BasicType.getTDouble() , 2, false); 470 def(_dload , "dload" , "bi" , "wbii" , BasicType.getTDouble() , 2, false);
468 def(_aload , "aload" , "bi" , "wbii" , BasicType.getTObject() , 1, false); 471 def(_aload , "aload" , "bi" , "wbii" , BasicType.getTObject() , 1, false);
616 def(_lreturn , "lreturn" , "b" , null , BasicType.getTLong() , -2, true ); 619 def(_lreturn , "lreturn" , "b" , null , BasicType.getTLong() , -2, true );
617 def(_freturn , "freturn" , "b" , null , BasicType.getTFloat() , -1, true ); 620 def(_freturn , "freturn" , "b" , null , BasicType.getTFloat() , -1, true );
618 def(_dreturn , "dreturn" , "b" , null , BasicType.getTDouble() , -2, true ); 621 def(_dreturn , "dreturn" , "b" , null , BasicType.getTDouble() , -2, true );
619 def(_areturn , "areturn" , "b" , null , BasicType.getTObject() , -1, true ); 622 def(_areturn , "areturn" , "b" , null , BasicType.getTObject() , -1, true );
620 def(_return , "return" , "b" , null , BasicType.getTVoid() , 0, true ); 623 def(_return , "return" , "b" , null , BasicType.getTVoid() , 0, true );
621 def(_getstatic , "getstatic" , "bjj" , null , BasicType.getTIllegal(), 1, true ); 624 def(_getstatic , "getstatic" , "bJJ" , null , BasicType.getTIllegal(), 1, true );
622 def(_putstatic , "putstatic" , "bjj" , null , BasicType.getTIllegal(), -1, true ); 625 def(_putstatic , "putstatic" , "bJJ" , null , BasicType.getTIllegal(), -1, true );
623 def(_getfield , "getfield" , "bjj" , null , BasicType.getTIllegal(), 0, true ); 626 def(_getfield , "getfield" , "bJJ" , null , BasicType.getTIllegal(), 0, true );
624 def(_putfield , "putfield" , "bjj" , null , BasicType.getTIllegal(), -2, true ); 627 def(_putfield , "putfield" , "bJJ" , null , BasicType.getTIllegal(), -2, true );
625 def(_invokevirtual , "invokevirtual" , "bjj" , null , BasicType.getTIllegal(), -1, true ); 628 def(_invokevirtual , "invokevirtual" , "bJJ" , null , BasicType.getTIllegal(), -1, true );
626 def(_invokespecial , "invokespecial" , "bjj" , null , BasicType.getTIllegal(), -1, true ); 629 def(_invokespecial , "invokespecial" , "bJJ" , null , BasicType.getTIllegal(), -1, true );
627 def(_invokestatic , "invokestatic" , "bjj" , null , BasicType.getTIllegal(), 0, true ); 630 def(_invokestatic , "invokestatic" , "bJJ" , null , BasicType.getTIllegal(), 0, true );
628 def(_invokeinterface , "invokeinterface" , "bjj__", null , BasicType.getTIllegal(), -1, true ); 631 def(_invokeinterface , "invokeinterface" , "bJJ__", null , BasicType.getTIllegal(), -1, true );
629 def(_xxxunusedxxx , "xxxunusedxxx" , null , null , BasicType.getTVoid() , 0, false); 632 def(_invokedynamic , "invokedynamic" , "bJJJJ", null , BasicType.getTIllegal(), -1, true );
630 def(_new , "new" , "bii" , null , BasicType.getTObject() , 1, true ); 633 def(_new , "new" , "bkk" , null , BasicType.getTObject() , 1, true );
631 def(_newarray , "newarray" , "bc" , null , BasicType.getTObject() , 0, true ); 634 def(_newarray , "newarray" , "bc" , null , BasicType.getTObject() , 0, true );
632 def(_anewarray , "anewarray" , "bii" , null , BasicType.getTObject() , 0, true ); 635 def(_anewarray , "anewarray" , "bkk" , null , BasicType.getTObject() , 0, true );
633 def(_arraylength , "arraylength" , "b" , null , BasicType.getTVoid() , 0, true ); 636 def(_arraylength , "arraylength" , "b" , null , BasicType.getTVoid() , 0, true );
634 def(_athrow , "athrow" , "b" , null , BasicType.getTVoid() , -1, true ); 637 def(_athrow , "athrow" , "b" , null , BasicType.getTVoid() , -1, true );
635 def(_checkcast , "checkcast" , "bii" , null , BasicType.getTObject() , 0, true ); 638 def(_checkcast , "checkcast" , "bkk" , null , BasicType.getTObject() , 0, true );
636 def(_instanceof , "instanceof" , "bii" , null , BasicType.getTInt() , 0, true ); 639 def(_instanceof , "instanceof" , "bkk" , null , BasicType.getTInt() , 0, true );
637 def(_monitorenter , "monitorenter" , "b" , null , BasicType.getTVoid() , -1, true ); 640 def(_monitorenter , "monitorenter" , "b" , null , BasicType.getTVoid() , -1, true );
638 def(_monitorexit , "monitorexit" , "b" , null , BasicType.getTVoid() , -1, true ); 641 def(_monitorexit , "monitorexit" , "b" , null , BasicType.getTVoid() , -1, true );
639 def(_wide , "wide" , "" , null , BasicType.getTVoid() , 0, false); 642 def(_wide , "wide" , "" , null , BasicType.getTVoid() , 0, false);
640 def(_multianewarray , "multianewarray" , "biic" , null , BasicType.getTObject() , 1, true ); 643 def(_multianewarray , "multianewarray" , "bkkc" , null , BasicType.getTObject() , 1, true );
641 def(_ifnull , "ifnull" , "boo" , null , BasicType.getTVoid() , -1, false); 644 def(_ifnull , "ifnull" , "boo" , null , BasicType.getTVoid() , -1, false);
642 def(_ifnonnull , "ifnonnull" , "boo" , null , BasicType.getTVoid() , -1, false); 645 def(_ifnonnull , "ifnonnull" , "boo" , null , BasicType.getTVoid() , -1, false);
643 def(_goto_w , "goto_w" , "boooo", null , BasicType.getTVoid() , 0, false); 646 def(_goto_w , "goto_w" , "boooo", null , BasicType.getTVoid() , 0, false);
644 def(_jsr_w , "jsr_w" , "boooo", null , BasicType.getTInt() , 0, false); 647 def(_jsr_w , "jsr_w" , "boooo", null , BasicType.getTInt() , 0, false);
645 def(_breakpoint , "breakpoint" , "" , null , BasicType.getTVoid() , 0, true ); 648 def(_breakpoint , "breakpoint" , "" , null , BasicType.getTVoid() , 0, true );
646 649
647 // JVM bytecodes 650 // JVM bytecodes
648 // bytecode bytecode name format wide f. result tp stk traps std code 651 // bytecode bytecode name format wide f. result tp stk traps std code
649 def(_fast_agetfield , "fast_agetfield" , "bjj" , null , BasicType.getTObject() , 0, true , _getfield ); 652 def(_fast_agetfield , "fast_agetfield" , "bJJ" , null , BasicType.getTObject() , 0, true , _getfield );
650 def(_fast_bgetfield , "fast_bgetfield" , "bjj" , null , BasicType.getTInt() , 0, true , _getfield ); 653 def(_fast_bgetfield , "fast_bgetfield" , "bJJ" , null , BasicType.getTInt() , 0, true , _getfield );
651 def(_fast_cgetfield , "fast_cgetfield" , "bjj" , null , BasicType.getTChar() , 0, true , _getfield ); 654 def(_fast_cgetfield , "fast_cgetfield" , "bJJ" , null , BasicType.getTChar() , 0, true , _getfield );
652 def(_fast_dgetfield , "fast_dgetfield" , "bjj" , null , BasicType.getTDouble() , 0, true , _getfield ); 655 def(_fast_dgetfield , "fast_dgetfield" , "bJJ" , null , BasicType.getTDouble() , 0, true , _getfield );
653 def(_fast_fgetfield , "fast_fgetfield" , "bjj" , null , BasicType.getTFloat() , 0, true , _getfield ); 656 def(_fast_fgetfield , "fast_fgetfield" , "bJJ" , null , BasicType.getTFloat() , 0, true , _getfield );
654 def(_fast_igetfield , "fast_igetfield" , "bjj" , null , BasicType.getTInt() , 0, true , _getfield ); 657 def(_fast_igetfield , "fast_igetfield" , "bJJ" , null , BasicType.getTInt() , 0, true , _getfield );
655 def(_fast_lgetfield , "fast_lgetfield" , "bjj" , null , BasicType.getTLong() , 0, true , _getfield ); 658 def(_fast_lgetfield , "fast_lgetfield" , "bJJ" , null , BasicType.getTLong() , 0, true , _getfield );
656 def(_fast_sgetfield , "fast_sgetfield" , "bjj" , null , BasicType.getTShort() , 0, true , _getfield ); 659 def(_fast_sgetfield , "fast_sgetfield" , "bJJ" , null , BasicType.getTShort() , 0, true , _getfield );
657 660
658 def(_fast_aputfield , "fast_aputfield" , "bjj" , null , BasicType.getTObject() , 0, true , _putfield ); 661 def(_fast_aputfield , "fast_aputfield" , "bJJ" , null , BasicType.getTObject() , 0, true , _putfield );
659 def(_fast_bputfield , "fast_bputfield" , "bjj" , null , BasicType.getTInt() , 0, true , _putfield ); 662 def(_fast_bputfield , "fast_bputfield" , "bJJ" , null , BasicType.getTInt() , 0, true , _putfield );
660 def(_fast_cputfield , "fast_cputfield" , "bjj" , null , BasicType.getTChar() , 0, true , _putfield ); 663 def(_fast_cputfield , "fast_cputfield" , "bJJ" , null , BasicType.getTChar() , 0, true , _putfield );
661 def(_fast_dputfield , "fast_dputfield" , "bjj" , null , BasicType.getTDouble() , 0, true , _putfield ); 664 def(_fast_dputfield , "fast_dputfield" , "bJJ" , null , BasicType.getTDouble() , 0, true , _putfield );
662 def(_fast_fputfield , "fast_fputfield" , "bjj" , null , BasicType.getTFloat() , 0, true , _putfield ); 665 def(_fast_fputfield , "fast_fputfield" , "bJJ" , null , BasicType.getTFloat() , 0, true , _putfield );
663 def(_fast_iputfield , "fast_iputfield" , "bjj" , null , BasicType.getTInt() , 0, true , _putfield ); 666 def(_fast_iputfield , "fast_iputfield" , "bJJ" , null , BasicType.getTInt() , 0, true , _putfield );
664 def(_fast_lputfield , "fast_lputfield" , "bjj" , null , BasicType.getTLong() , 0, true , _putfield ); 667 def(_fast_lputfield , "fast_lputfield" , "bJJ" , null , BasicType.getTLong() , 0, true , _putfield );
665 def(_fast_sputfield , "fast_sputfield" , "bjj" , null , BasicType.getTShort() , 0, true , _putfield ); 668 def(_fast_sputfield , "fast_sputfield" , "bJJ" , null , BasicType.getTShort() , 0, true , _putfield );
666 669
667 def(_fast_aload_0 , "fast_aload_0" , "b" , null , BasicType.getTObject() , 1, true , _aload_0 ); 670 def(_fast_aload_0 , "fast_aload_0" , "b" , null , BasicType.getTObject() , 1, true , _aload_0 );
668 def(_fast_iaccess_0 , "fast_iaccess_0" , "b_jj" , null , BasicType.getTInt() , 1, true , _aload_0 ); 671 def(_fast_iaccess_0 , "fast_iaccess_0" , "b_JJ" , null , BasicType.getTInt() , 1, true , _aload_0 );
669 def(_fast_aaccess_0 , "fast_aaccess_0" , "b_jj" , null , BasicType.getTObject() , 1, true , _aload_0 ); 672 def(_fast_aaccess_0 , "fast_aaccess_0" , "b_JJ" , null , BasicType.getTObject() , 1, true , _aload_0 );
670 def(_fast_faccess_0 , "fast_faccess_0" , "b_jj" , null , BasicType.getTObject() , 1, true , _aload_0 ); 673 def(_fast_faccess_0 , "fast_faccess_0" , "b_JJ" , null , BasicType.getTObject() , 1, true , _aload_0 );
671 674
672 def(_fast_iload , "fast_iload" , "bi" , null , BasicType.getTInt() , 1, false, _iload); 675 def(_fast_iload , "fast_iload" , "bi" , null , BasicType.getTInt() , 1, false, _iload);
673 def(_fast_iload2 , "fast_iload2" , "bi_i" , null , BasicType.getTInt() , 2, false, _iload); 676 def(_fast_iload2 , "fast_iload2" , "bi_i" , null , BasicType.getTInt() , 2, false, _iload);
674 def(_fast_icaload , "fast_icaload" , "bi_" , null , BasicType.getTInt() , 0, false, _iload); 677 def(_fast_icaload , "fast_icaload" , "bi_" , null , BasicType.getTInt() , 0, false, _iload);
675 678
676 // Faster method invocation. 679 // Faster method invocation.
677 def(_fast_invokevfinal , "fast_invokevfinal" , "bjj" , null , BasicType.getTIllegal(), -1, true, _invokevirtual); 680 def(_fast_invokevfinal , "fast_invokevfinal" , "bJJ" , null , BasicType.getTIllegal(), -1, true, _invokevirtual);
678 681
679 def(_fast_linearswitch , "fast_linearswitch" , "" , null , BasicType.getTVoid() , -1, false, _lookupswitch ); 682 def(_fast_linearswitch , "fast_linearswitch" , "" , null , BasicType.getTVoid() , -1, false, _lookupswitch );
680 def(_fast_binaryswitch , "fast_binaryswitch" , "" , null , BasicType.getTVoid() , -1, false, _lookupswitch ); 683 def(_fast_binaryswitch , "fast_binaryswitch" , "" , null , BasicType.getTVoid() , -1, false, _lookupswitch );
684
685 def(_return_register_finalizer, "return_register_finalizer", "b" , null , BasicType.getTVoid() , 0, true, _return );
686
687 def(_fast_aldc , "fast_aldc" , "bj" , null , BasicType.getTObject(), 1, true, _ldc );
688 def(_fast_aldc_w , "fast_aldc_w" , "bJJ" , null , BasicType.getTObject(), 1, true, _ldc_w );
689
681 def(_shouldnotreachhere , "_shouldnotreachhere" , "b" , null , BasicType.getTVoid() , 0, false); 690 def(_shouldnotreachhere , "_shouldnotreachhere" , "b" , null , BasicType.getTVoid() , 0, false);
682 691
683 if (Assert.ASSERTS_ENABLED) { 692 if (Assert.ASSERTS_ENABLED) {
684 // compare can_trap information for each bytecode with the 693 // compare can_trap information for each bytecode with the
685 // can_trap information for the corresponding base bytecode 694 // can_trap information for the corresponding base bytecode