< prev index next >

src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java

Print this page

  1 /*
  2  * Copyright (c) 2001, 2020, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  *

229   public static final int _newarray             = 188; // 0xbc
230   public static final int _anewarray            = 189; // 0xbd
231   public static final int _arraylength          = 190; // 0xbe
232   public static final int _athrow               = 191; // 0xbf
233   public static final int _checkcast            = 192; // 0xc0
234   public static final int _instanceof           = 193; // 0xc1
235   public static final int _monitorenter         = 194; // 0xc2
236   public static final int _monitorexit          = 195; // 0xc3
237   public static final int _wide                 = 196; // 0xc4
238   public static final int _multianewarray       = 197; // 0xc5
239   public static final int _ifnull               = 198; // 0xc6
240   public static final int _ifnonnull            = 199; // 0xc7
241   public static final int _goto_w               = 200; // 0xc8
242   public static final int _jsr_w                = 201; // 0xc9
243   public static final int _breakpoint           = 202; // 0xca
244 
245   public static final int number_of_java_codes  = 203;
246 
247   // JVM bytecodes
248   public static final int _fast_agetfield       = number_of_java_codes;
249   public static final int _fast_bgetfield       = 204;
250   public static final int _fast_cgetfield       = 205;
251   public static final int _fast_dgetfield       = 206;
252   public static final int _fast_fgetfield       = 207;
253   public static final int _fast_igetfield       = 208;
254   public static final int _fast_lgetfield       = 209;
255   public static final int _fast_sgetfield       = 210;
256   public static final int _fast_aputfield       = 211;
257   public static final int _fast_bputfield       = 212;
258   public static final int _fast_zputfield       = 213;
259   public static final int _fast_cputfield       = 214;
260   public static final int _fast_dputfield       = 215;
261   public static final int _fast_fputfield       = 216;
262   public static final int _fast_iputfield       = 217;
263   public static final int _fast_lputfield       = 218;
264   public static final int _fast_sputfield       = 219;
265   public static final int _fast_aload_0         = 220;
266   public static final int _fast_iaccess_0       = 221;
267   public static final int _fast_aaccess_0       = 222;
268   public static final int _fast_faccess_0       = 223;
269   public static final int _fast_iload           = 224;
270   public static final int _fast_iload2          = 225;
271   public static final int _fast_icaload         = 226;
272   public static final int _fast_invokevfinal    = 227;
273   public static final int _fast_linearswitch    = 228;
274   public static final int _fast_binaryswitch    = 229;
275   public static final int _fast_aldc            = 230;
276   public static final int _fast_aldc_w          = 231;
277   public static final int _return_register_finalizer = 232;
278   public static final int _invokehandle         = 233;


279 
280   // Bytecodes rewritten at CDS dump time
281   public static final int _nofast_getfield      = 234;
282   public static final int _nofast_putfield      = 235;
283   public static final int _nofast_aload_0       = 236;
284   public static final int _nofast_iload         = 237;
285   public static final int _shouldnotreachhere   = 238; // For debugging
286 
287   public static final int number_of_codes       = 239;
288 
289   // Flag bits derived from format strings, can_trap, can_rewrite, etc.:
290   // semantic flags:
291   static final int  _bc_can_trap      = 1<<0;     // bytecode execution can trap or block
292   static final int  _bc_can_rewrite   = 1<<1;     // bytecode execution has an alternate form
293 
294   // format bits (determined only by the format string):
295   static final int  _fmt_has_c        = 1<<2;     // constant, such as sipush "bcc"
296   static final int  _fmt_has_j        = 1<<3;     // constant pool cache index, such as getfield "bjj"
297   static final int  _fmt_has_k        = 1<<4;     // constant pool index, such as ldc "bk"
298   static final int  _fmt_has_i        = 1<<5;     // local index, such as iload
299   static final int  _fmt_has_o        = 1<<6;     // offset, such as ifeq
300   static final int  _fmt_has_nbo      = 1<<7;     // contains native-order field(s)
301   static final int  _fmt_has_u2       = 1<<8;     // contains double-byte field(s)
302   static final int  _fmt_has_u4       = 1<<9;     // contains quad-byte field
303   static final int  _fmt_not_variable = 1<<10;    // not of variable length (simple or wide)
304   static final int  _fmt_not_simple   = 1<<11;    // either wide or variable length
305   static final int  _all_fmt_bits     = (_fmt_not_simple*2 - _fmt_has_c);
306 
307   // Example derived format syndromes:

759     def(_newarray            , "newarray"            , "bc"   , null    , BasicType.getTObject() ,  0, true );
760     def(_anewarray           , "anewarray"           , "bkk"  , null    , BasicType.getTObject() ,  0, true );
761     def(_arraylength         , "arraylength"         , "b"    , null    , BasicType.getTVoid()   ,  0, true );
762     def(_athrow              , "athrow"              , "b"    , null    , BasicType.getTVoid()   , -1, true );
763     def(_checkcast           , "checkcast"           , "bkk"  , null    , BasicType.getTObject() ,  0, true );
764     def(_instanceof          , "instanceof"          , "bkk"  , null    , BasicType.getTInt()    ,  0, true );
765     def(_monitorenter        , "monitorenter"        , "b"    , null    , BasicType.getTVoid()   , -1, true );
766     def(_monitorexit         , "monitorexit"         , "b"    , null    , BasicType.getTVoid()   , -1, true );
767     def(_wide                , "wide"                , ""     , null    , BasicType.getTVoid()   ,  0, false);
768     def(_multianewarray      , "multianewarray"      , "bkkc" , null    , BasicType.getTObject() ,  1, true );
769     def(_ifnull              , "ifnull"              , "boo"  , null    , BasicType.getTVoid()   , -1, false);
770     def(_ifnonnull           , "ifnonnull"           , "boo"  , null    , BasicType.getTVoid()   , -1, false);
771     def(_goto_w              , "goto_w"              , "boooo", null    , BasicType.getTVoid()   ,  0, false);
772     def(_jsr_w               , "jsr_w"               , "boooo", null    , BasicType.getTInt()    ,  0, false);
773     def(_breakpoint          , "breakpoint"          , ""     , null    , BasicType.getTVoid()   ,  0, true );
774 
775     //  JVM bytecodes
776     //  bytecode               bytecode name           format   wide f.   result tp               stk traps  std code
777 
778     def(_fast_agetfield      , "fast_agetfield"      , "bJJ"  , null    , BasicType.getTObject() ,  0, true , _getfield       );

779     def(_fast_bgetfield      , "fast_bgetfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _getfield       );
780     def(_fast_cgetfield      , "fast_cgetfield"      , "bJJ"  , null    , BasicType.getTChar()   ,  0, true , _getfield       );
781     def(_fast_dgetfield      , "fast_dgetfield"      , "bJJ"  , null    , BasicType.getTDouble() ,  0, true , _getfield       );
782     def(_fast_fgetfield      , "fast_fgetfield"      , "bJJ"  , null    , BasicType.getTFloat()  ,  0, true , _getfield       );
783     def(_fast_igetfield      , "fast_igetfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _getfield       );
784     def(_fast_lgetfield      , "fast_lgetfield"      , "bJJ"  , null    , BasicType.getTLong()   ,  0, true , _getfield       );
785     def(_fast_sgetfield      , "fast_sgetfield"      , "bJJ"  , null    , BasicType.getTShort()  ,  0, true , _getfield       );
786 
787     def(_fast_aputfield      , "fast_aputfield"      , "bJJ"  , null    , BasicType.getTObject() ,  0, true , _putfield       );

788     def(_fast_bputfield      , "fast_bputfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _putfield       );
789     def(_fast_zputfield      , "fast_zputfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _putfield       );
790     def(_fast_cputfield      , "fast_cputfield"      , "bJJ"  , null    , BasicType.getTChar()   ,  0, true , _putfield       );
791     def(_fast_dputfield      , "fast_dputfield"      , "bJJ"  , null    , BasicType.getTDouble() ,  0, true , _putfield       );
792     def(_fast_fputfield      , "fast_fputfield"      , "bJJ"  , null    , BasicType.getTFloat()  ,  0, true , _putfield       );
793     def(_fast_iputfield      , "fast_iputfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _putfield       );
794     def(_fast_lputfield      , "fast_lputfield"      , "bJJ"  , null    , BasicType.getTLong()   ,  0, true , _putfield       );
795     def(_fast_sputfield      , "fast_sputfield"      , "bJJ"  , null    , BasicType.getTShort()  ,  0, true , _putfield       );
796 
797     def(_fast_aload_0        , "fast_aload_0"        , "b"    , null    , BasicType.getTObject() ,  1, true , _aload_0        );
798     def(_fast_iaccess_0      , "fast_iaccess_0"      , "b_JJ" , null    , BasicType.getTInt()    ,  1, true , _aload_0        );
799     def(_fast_aaccess_0      , "fast_aaccess_0"      , "b_JJ" , null    , BasicType.getTObject() ,  1, true , _aload_0        );
800     def(_fast_faccess_0      , "fast_faccess_0"      , "b_JJ" , null    , BasicType.getTObject() ,  1, true , _aload_0        );
801 
802     def(_fast_iload          , "fast_iload"          , "bi"   , null    , BasicType.getTInt()    ,  1, false, _iload          );
803     def(_fast_iload2         , "fast_iload2"         , "bi_i" , null    , BasicType.getTInt()    ,  2, false, _iload          );
804     def(_fast_icaload        , "fast_icaload"        , "bi_"  , null    , BasicType.getTInt()    ,  0, false, _iload          );
805 
806     // Faster method invocation.
807     def(_fast_invokevfinal   , "fast_invokevfinal"   , "bJJ"  , null    , BasicType.getTIllegal(), -1, true, _invokevirtual   );

  1 /*
  2  * Copyright (c) 2001, 2026, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.
  8  *
  9  * This code is distributed in the hope that it will be useful, but WITHOUT
 10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 12  * version 2 for more details (a copy is included in the LICENSE file that
 13  * accompanied this code).
 14  *
 15  * You should have received a copy of the GNU General Public License version
 16  * 2 along with this work; if not, write to the Free Software Foundation,
 17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 18  *
 19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 20  * or visit www.oracle.com if you need additional information or have any
 21  * questions.
 22  *

229   public static final int _newarray             = 188; // 0xbc
230   public static final int _anewarray            = 189; // 0xbd
231   public static final int _arraylength          = 190; // 0xbe
232   public static final int _athrow               = 191; // 0xbf
233   public static final int _checkcast            = 192; // 0xc0
234   public static final int _instanceof           = 193; // 0xc1
235   public static final int _monitorenter         = 194; // 0xc2
236   public static final int _monitorexit          = 195; // 0xc3
237   public static final int _wide                 = 196; // 0xc4
238   public static final int _multianewarray       = 197; // 0xc5
239   public static final int _ifnull               = 198; // 0xc6
240   public static final int _ifnonnull            = 199; // 0xc7
241   public static final int _goto_w               = 200; // 0xc8
242   public static final int _jsr_w                = 201; // 0xc9
243   public static final int _breakpoint           = 202; // 0xca
244 
245   public static final int number_of_java_codes  = 203;
246 
247   // JVM bytecodes
248   public static final int _fast_agetfield       = number_of_java_codes;
249   public static final int _fast_vgetfield       = 204;
250   public static final int _fast_bgetfield       = 205;
251   public static final int _fast_cgetfield       = 206;
252   public static final int _fast_dgetfield       = 207;
253   public static final int _fast_fgetfield       = 208;
254   public static final int _fast_igetfield       = 209;
255   public static final int _fast_lgetfield       = 210;
256   public static final int _fast_sgetfield       = 211;
257   public static final int _fast_aputfield       = 212;
258   public static final int _fast_vputfield       = 213;
259   public static final int _fast_bputfield       = 214;
260   public static final int _fast_zputfield       = 215;
261   public static final int _fast_cputfield       = 216;
262   public static final int _fast_dputfield       = 217;
263   public static final int _fast_fputfield       = 218;
264   public static final int _fast_iputfield       = 219;
265   public static final int _fast_lputfield       = 220;
266   public static final int _fast_sputfield       = 221;
267   public static final int _fast_aload_0         = 222;
268   public static final int _fast_iaccess_0       = 223;
269   public static final int _fast_aaccess_0       = 224;
270   public static final int _fast_faccess_0       = 225;
271   public static final int _fast_iload           = 226;
272   public static final int _fast_iload2          = 227;
273   public static final int _fast_icaload         = 228;
274   public static final int _fast_invokevfinal    = 229;
275   public static final int _fast_linearswitch    = 230;
276   public static final int _fast_binaryswitch    = 231;
277   public static final int _fast_aldc            = 232;
278   public static final int _fast_aldc_w          = 233;
279   public static final int _return_register_finalizer = 234;
280   public static final int _invokehandle         = 235;
281 
282   // Bytecodes rewritten at CDS dump time
283   public static final int _nofast_getfield      = 236;
284   public static final int _nofast_putfield      = 237;
285   public static final int _nofast_aload_0       = 238;
286   public static final int _nofast_iload         = 239;
287   public static final int _shouldnotreachhere   = 240; // For debugging
288 
289   public static final int number_of_codes       = 241;
290 
291   // Flag bits derived from format strings, can_trap, can_rewrite, etc.:
292   // semantic flags:
293   static final int  _bc_can_trap      = 1<<0;     // bytecode execution can trap or block
294   static final int  _bc_can_rewrite   = 1<<1;     // bytecode execution has an alternate form
295 
296   // format bits (determined only by the format string):
297   static final int  _fmt_has_c        = 1<<2;     // constant, such as sipush "bcc"
298   static final int  _fmt_has_j        = 1<<3;     // constant pool cache index, such as getfield "bjj"
299   static final int  _fmt_has_k        = 1<<4;     // constant pool index, such as ldc "bk"
300   static final int  _fmt_has_i        = 1<<5;     // local index, such as iload
301   static final int  _fmt_has_o        = 1<<6;     // offset, such as ifeq
302   static final int  _fmt_has_nbo      = 1<<7;     // contains native-order field(s)
303   static final int  _fmt_has_u2       = 1<<8;     // contains double-byte field(s)
304   static final int  _fmt_has_u4       = 1<<9;     // contains quad-byte field
305   static final int  _fmt_not_variable = 1<<10;    // not of variable length (simple or wide)
306   static final int  _fmt_not_simple   = 1<<11;    // either wide or variable length
307   static final int  _all_fmt_bits     = (_fmt_not_simple*2 - _fmt_has_c);
308 
309   // Example derived format syndromes:

761     def(_newarray            , "newarray"            , "bc"   , null    , BasicType.getTObject() ,  0, true );
762     def(_anewarray           , "anewarray"           , "bkk"  , null    , BasicType.getTObject() ,  0, true );
763     def(_arraylength         , "arraylength"         , "b"    , null    , BasicType.getTVoid()   ,  0, true );
764     def(_athrow              , "athrow"              , "b"    , null    , BasicType.getTVoid()   , -1, true );
765     def(_checkcast           , "checkcast"           , "bkk"  , null    , BasicType.getTObject() ,  0, true );
766     def(_instanceof          , "instanceof"          , "bkk"  , null    , BasicType.getTInt()    ,  0, true );
767     def(_monitorenter        , "monitorenter"        , "b"    , null    , BasicType.getTVoid()   , -1, true );
768     def(_monitorexit         , "monitorexit"         , "b"    , null    , BasicType.getTVoid()   , -1, true );
769     def(_wide                , "wide"                , ""     , null    , BasicType.getTVoid()   ,  0, false);
770     def(_multianewarray      , "multianewarray"      , "bkkc" , null    , BasicType.getTObject() ,  1, true );
771     def(_ifnull              , "ifnull"              , "boo"  , null    , BasicType.getTVoid()   , -1, false);
772     def(_ifnonnull           , "ifnonnull"           , "boo"  , null    , BasicType.getTVoid()   , -1, false);
773     def(_goto_w              , "goto_w"              , "boooo", null    , BasicType.getTVoid()   ,  0, false);
774     def(_jsr_w               , "jsr_w"               , "boooo", null    , BasicType.getTInt()    ,  0, false);
775     def(_breakpoint          , "breakpoint"          , ""     , null    , BasicType.getTVoid()   ,  0, true );
776 
777     //  JVM bytecodes
778     //  bytecode               bytecode name           format   wide f.   result tp               stk traps  std code
779 
780     def(_fast_agetfield      , "fast_agetfield"      , "bJJ"  , null    , BasicType.getTObject() ,  0, true , _getfield       );
781     def(_fast_vgetfield      , "fast_vgetfield"      , "bJJ"  , null    , BasicType.getTObject() ,  0, true , _getfield       );
782     def(_fast_bgetfield      , "fast_bgetfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _getfield       );
783     def(_fast_cgetfield      , "fast_cgetfield"      , "bJJ"  , null    , BasicType.getTChar()   ,  0, true , _getfield       );
784     def(_fast_dgetfield      , "fast_dgetfield"      , "bJJ"  , null    , BasicType.getTDouble() ,  0, true , _getfield       );
785     def(_fast_fgetfield      , "fast_fgetfield"      , "bJJ"  , null    , BasicType.getTFloat()  ,  0, true , _getfield       );
786     def(_fast_igetfield      , "fast_igetfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _getfield       );
787     def(_fast_lgetfield      , "fast_lgetfield"      , "bJJ"  , null    , BasicType.getTLong()   ,  0, true , _getfield       );
788     def(_fast_sgetfield      , "fast_sgetfield"      , "bJJ"  , null    , BasicType.getTShort()  ,  0, true , _getfield       );
789 
790     def(_fast_aputfield      , "fast_aputfield"      , "bJJ"  , null    , BasicType.getTObject() ,  0, true , _putfield       );
791     def(_fast_vputfield      , "fast_vputfield"      , "bJJ"  , null    , BasicType.getTObject() ,  0, true , _putfield       );
792     def(_fast_bputfield      , "fast_bputfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _putfield       );
793     def(_fast_zputfield      , "fast_zputfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _putfield       );
794     def(_fast_cputfield      , "fast_cputfield"      , "bJJ"  , null    , BasicType.getTChar()   ,  0, true , _putfield       );
795     def(_fast_dputfield      , "fast_dputfield"      , "bJJ"  , null    , BasicType.getTDouble() ,  0, true , _putfield       );
796     def(_fast_fputfield      , "fast_fputfield"      , "bJJ"  , null    , BasicType.getTFloat()  ,  0, true , _putfield       );
797     def(_fast_iputfield      , "fast_iputfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _putfield       );
798     def(_fast_lputfield      , "fast_lputfield"      , "bJJ"  , null    , BasicType.getTLong()   ,  0, true , _putfield       );
799     def(_fast_sputfield      , "fast_sputfield"      , "bJJ"  , null    , BasicType.getTShort()  ,  0, true , _putfield       );
800 
801     def(_fast_aload_0        , "fast_aload_0"        , "b"    , null    , BasicType.getTObject() ,  1, true , _aload_0        );
802     def(_fast_iaccess_0      , "fast_iaccess_0"      , "b_JJ" , null    , BasicType.getTInt()    ,  1, true , _aload_0        );
803     def(_fast_aaccess_0      , "fast_aaccess_0"      , "b_JJ" , null    , BasicType.getTObject() ,  1, true , _aload_0        );
804     def(_fast_faccess_0      , "fast_faccess_0"      , "b_JJ" , null    , BasicType.getTObject() ,  1, true , _aload_0        );
805 
806     def(_fast_iload          , "fast_iload"          , "bi"   , null    , BasicType.getTInt()    ,  1, false, _iload          );
807     def(_fast_iload2         , "fast_iload2"         , "bi_i" , null    , BasicType.getTInt()    ,  2, false, _iload          );
808     def(_fast_icaload        , "fast_icaload"        , "bi_"  , null    , BasicType.getTInt()    ,  0, false, _iload          );
809 
810     // Faster method invocation.
811     def(_fast_invokevfinal   , "fast_invokevfinal"   , "bJJ"  , null    , BasicType.getTIllegal(), -1, true, _invokevirtual   );
< prev index next >