hotspot/agent/src/share/classes/sun/jvm/hotspot/interpreter/Bytecodes.java
author jrose
Wed, 09 Jun 2010 18:50:45 -0700
changeset 5882 6b2aecc4f7d8
parent 5547 f4b087cbb361
child 7662 5f31baaff55b
permissions -rw-r--r--
6939203: JSR 292 needs method handle constants Summary: Add new CP types CONSTANT_MethodHandle, CONSTANT_MethodType; extend 'ldc' bytecode. Reviewed-by: twisti, never
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     1
/*
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
     2
 * Copyright (c) 2001, 2004, Oracle and/or its affiliates. All rights reserved.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     4
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
489c9b5090e2 Initial load
duke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
489c9b5090e2 Initial load
duke
parents:
diff changeset
     7
 * published by the Free Software Foundation.
489c9b5090e2 Initial load
duke
parents:
diff changeset
     8
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
489c9b5090e2 Initial load
duke
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
489c9b5090e2 Initial load
duke
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
489c9b5090e2 Initial load
duke
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
489c9b5090e2 Initial load
duke
parents:
diff changeset
    13
 * accompanied this code).
489c9b5090e2 Initial load
duke
parents:
diff changeset
    14
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
489c9b5090e2 Initial load
duke
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
489c9b5090e2 Initial load
duke
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    18
 *
5547
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
f4b087cbb361 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 1
diff changeset
    21
 * questions.
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
    22
 *
489c9b5090e2 Initial load
duke
parents:
diff changeset
    23
 */
489c9b5090e2 Initial load
duke
parents:
diff changeset
    24
489c9b5090e2 Initial load
duke
parents:
diff changeset
    25
package sun.jvm.hotspot.interpreter;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    26
489c9b5090e2 Initial load
duke
parents:
diff changeset
    27
import java.util.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    28
import sun.jvm.hotspot.oops.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    29
import sun.jvm.hotspot.runtime.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    30
import sun.jvm.hotspot.utilities.*;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    31
489c9b5090e2 Initial load
duke
parents:
diff changeset
    32
// Bytecodes specifies all bytecodes used in the VM and
489c9b5090e2 Initial load
duke
parents:
diff changeset
    33
// provides utility functions to get bytecode attributes.
489c9b5090e2 Initial load
duke
parents:
diff changeset
    34
489c9b5090e2 Initial load
duke
parents:
diff changeset
    35
public class Bytecodes {
489c9b5090e2 Initial load
duke
parents:
diff changeset
    36
  public static final int _illegal    =  -1;
489c9b5090e2 Initial load
duke
parents:
diff changeset
    37
489c9b5090e2 Initial load
duke
parents:
diff changeset
    38
  // Java bytecodes
489c9b5090e2 Initial load
duke
parents:
diff changeset
    39
  public static final int _nop                  =   0; // 0x00
489c9b5090e2 Initial load
duke
parents:
diff changeset
    40
  public static final int _aconst_null          =   1; // 0x01
489c9b5090e2 Initial load
duke
parents:
diff changeset
    41
  public static final int _iconst_m1            =   2; // 0x02
489c9b5090e2 Initial load
duke
parents:
diff changeset
    42
  public static final int _iconst_0             =   3; // 0x03
489c9b5090e2 Initial load
duke
parents:
diff changeset
    43
  public static final int _iconst_1             =   4; // 0x04
489c9b5090e2 Initial load
duke
parents:
diff changeset
    44
  public static final int _iconst_2             =   5; // 0x05
489c9b5090e2 Initial load
duke
parents:
diff changeset
    45
  public static final int _iconst_3             =   6; // 0x06
489c9b5090e2 Initial load
duke
parents:
diff changeset
    46
  public static final int _iconst_4             =   7; // 0x07
489c9b5090e2 Initial load
duke
parents:
diff changeset
    47
  public static final int _iconst_5             =   8; // 0x08
489c9b5090e2 Initial load
duke
parents:
diff changeset
    48
  public static final int _lconst_0             =   9; // 0x09
489c9b5090e2 Initial load
duke
parents:
diff changeset
    49
  public static final int _lconst_1             =  10; // 0x0a
489c9b5090e2 Initial load
duke
parents:
diff changeset
    50
  public static final int _fconst_0             =  11; // 0x0b
489c9b5090e2 Initial load
duke
parents:
diff changeset
    51
  public static final int _fconst_1             =  12; // 0x0c
489c9b5090e2 Initial load
duke
parents:
diff changeset
    52
  public static final int _fconst_2             =  13; // 0x0d
489c9b5090e2 Initial load
duke
parents:
diff changeset
    53
  public static final int _dconst_0             =  14; // 0x0e
489c9b5090e2 Initial load
duke
parents:
diff changeset
    54
  public static final int _dconst_1             =  15; // 0x0f
489c9b5090e2 Initial load
duke
parents:
diff changeset
    55
  public static final int _bipush               =  16; // 0x10
489c9b5090e2 Initial load
duke
parents:
diff changeset
    56
  public static final int _sipush               =  17; // 0x11
489c9b5090e2 Initial load
duke
parents:
diff changeset
    57
  public static final int _ldc                  =  18; // 0x12
489c9b5090e2 Initial load
duke
parents:
diff changeset
    58
  public static final int _ldc_w                =  19; // 0x13
489c9b5090e2 Initial load
duke
parents:
diff changeset
    59
  public static final int _ldc2_w               =  20; // 0x14
489c9b5090e2 Initial load
duke
parents:
diff changeset
    60
  public static final int _iload                =  21; // 0x15
489c9b5090e2 Initial load
duke
parents:
diff changeset
    61
  public static final int _lload                =  22; // 0x16
489c9b5090e2 Initial load
duke
parents:
diff changeset
    62
  public static final int _fload                =  23; // 0x17
489c9b5090e2 Initial load
duke
parents:
diff changeset
    63
  public static final int _dload                =  24; // 0x18
489c9b5090e2 Initial load
duke
parents:
diff changeset
    64
  public static final int _aload                =  25; // 0x19
489c9b5090e2 Initial load
duke
parents:
diff changeset
    65
  public static final int _iload_0              =  26; // 0x1a
489c9b5090e2 Initial load
duke
parents:
diff changeset
    66
  public static final int _iload_1              =  27; // 0x1b
489c9b5090e2 Initial load
duke
parents:
diff changeset
    67
  public static final int _iload_2              =  28; // 0x1c
489c9b5090e2 Initial load
duke
parents:
diff changeset
    68
  public static final int _iload_3              =  29; // 0x1d
489c9b5090e2 Initial load
duke
parents:
diff changeset
    69
  public static final int _lload_0              =  30; // 0x1e
489c9b5090e2 Initial load
duke
parents:
diff changeset
    70
  public static final int _lload_1              =  31; // 0x1f
489c9b5090e2 Initial load
duke
parents:
diff changeset
    71
  public static final int _lload_2              =  32; // 0x20
489c9b5090e2 Initial load
duke
parents:
diff changeset
    72
  public static final int _lload_3              =  33; // 0x21
489c9b5090e2 Initial load
duke
parents:
diff changeset
    73
  public static final int _fload_0              =  34; // 0x22
489c9b5090e2 Initial load
duke
parents:
diff changeset
    74
  public static final int _fload_1              =  35; // 0x23
489c9b5090e2 Initial load
duke
parents:
diff changeset
    75
  public static final int _fload_2              =  36; // 0x24
489c9b5090e2 Initial load
duke
parents:
diff changeset
    76
  public static final int _fload_3              =  37; // 0x25
489c9b5090e2 Initial load
duke
parents:
diff changeset
    77
  public static final int _dload_0              =  38; // 0x26
489c9b5090e2 Initial load
duke
parents:
diff changeset
    78
  public static final int _dload_1              =  39; // 0x27
489c9b5090e2 Initial load
duke
parents:
diff changeset
    79
  public static final int _dload_2              =  40; // 0x28
489c9b5090e2 Initial load
duke
parents:
diff changeset
    80
  public static final int _dload_3              =  41; // 0x29
489c9b5090e2 Initial load
duke
parents:
diff changeset
    81
  public static final int _aload_0              =  42; // 0x2a
489c9b5090e2 Initial load
duke
parents:
diff changeset
    82
  public static final int _aload_1              =  43; // 0x2b
489c9b5090e2 Initial load
duke
parents:
diff changeset
    83
  public static final int _aload_2              =  44; // 0x2c
489c9b5090e2 Initial load
duke
parents:
diff changeset
    84
  public static final int _aload_3              =  45; // 0x2d
489c9b5090e2 Initial load
duke
parents:
diff changeset
    85
  public static final int _iaload               =  46; // 0x2e
489c9b5090e2 Initial load
duke
parents:
diff changeset
    86
  public static final int _laload               =  47; // 0x2f
489c9b5090e2 Initial load
duke
parents:
diff changeset
    87
  public static final int _faload               =  48; // 0x30
489c9b5090e2 Initial load
duke
parents:
diff changeset
    88
  public static final int _daload               =  49; // 0x31
489c9b5090e2 Initial load
duke
parents:
diff changeset
    89
  public static final int _aaload               =  50; // 0x32
489c9b5090e2 Initial load
duke
parents:
diff changeset
    90
  public static final int _baload               =  51; // 0x33
489c9b5090e2 Initial load
duke
parents:
diff changeset
    91
  public static final int _caload               =  52; // 0x34
489c9b5090e2 Initial load
duke
parents:
diff changeset
    92
  public static final int _saload               =  53; // 0x35
489c9b5090e2 Initial load
duke
parents:
diff changeset
    93
  public static final int _istore               =  54; // 0x36
489c9b5090e2 Initial load
duke
parents:
diff changeset
    94
  public static final int _lstore               =  55; // 0x37
489c9b5090e2 Initial load
duke
parents:
diff changeset
    95
  public static final int _fstore               =  56; // 0x38
489c9b5090e2 Initial load
duke
parents:
diff changeset
    96
  public static final int _dstore               =  57; // 0x39
489c9b5090e2 Initial load
duke
parents:
diff changeset
    97
  public static final int _astore               =  58; // 0x3a
489c9b5090e2 Initial load
duke
parents:
diff changeset
    98
  public static final int _istore_0             =  59; // 0x3b
489c9b5090e2 Initial load
duke
parents:
diff changeset
    99
  public static final int _istore_1             =  60; // 0x3c
489c9b5090e2 Initial load
duke
parents:
diff changeset
   100
  public static final int _istore_2             =  61; // 0x3d
489c9b5090e2 Initial load
duke
parents:
diff changeset
   101
  public static final int _istore_3             =  62; // 0x3e
489c9b5090e2 Initial load
duke
parents:
diff changeset
   102
  public static final int _lstore_0             =  63; // 0x3f
489c9b5090e2 Initial load
duke
parents:
diff changeset
   103
  public static final int _lstore_1             =  64; // 0x40
489c9b5090e2 Initial load
duke
parents:
diff changeset
   104
  public static final int _lstore_2             =  65; // 0x41
489c9b5090e2 Initial load
duke
parents:
diff changeset
   105
  public static final int _lstore_3             =  66; // 0x42
489c9b5090e2 Initial load
duke
parents:
diff changeset
   106
  public static final int _fstore_0             =  67; // 0x43
489c9b5090e2 Initial load
duke
parents:
diff changeset
   107
  public static final int _fstore_1             =  68; // 0x44
489c9b5090e2 Initial load
duke
parents:
diff changeset
   108
  public static final int _fstore_2             =  69; // 0x45
489c9b5090e2 Initial load
duke
parents:
diff changeset
   109
  public static final int _fstore_3             =  70; // 0x46
489c9b5090e2 Initial load
duke
parents:
diff changeset
   110
  public static final int _dstore_0             =  71; // 0x47
489c9b5090e2 Initial load
duke
parents:
diff changeset
   111
  public static final int _dstore_1             =  72; // 0x48
489c9b5090e2 Initial load
duke
parents:
diff changeset
   112
  public static final int _dstore_2             =  73; // 0x49
489c9b5090e2 Initial load
duke
parents:
diff changeset
   113
  public static final int _dstore_3             =  74; // 0x4a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   114
  public static final int _astore_0             =  75; // 0x4b
489c9b5090e2 Initial load
duke
parents:
diff changeset
   115
  public static final int _astore_1             =  76; // 0x4c
489c9b5090e2 Initial load
duke
parents:
diff changeset
   116
  public static final int _astore_2             =  77; // 0x4d
489c9b5090e2 Initial load
duke
parents:
diff changeset
   117
  public static final int _astore_3             =  78; // 0x4e
489c9b5090e2 Initial load
duke
parents:
diff changeset
   118
  public static final int _iastore              =  79; // 0x4f
489c9b5090e2 Initial load
duke
parents:
diff changeset
   119
  public static final int _lastore              =  80; // 0x50
489c9b5090e2 Initial load
duke
parents:
diff changeset
   120
  public static final int _fastore              =  81; // 0x51
489c9b5090e2 Initial load
duke
parents:
diff changeset
   121
  public static final int _dastore              =  82; // 0x52
489c9b5090e2 Initial load
duke
parents:
diff changeset
   122
  public static final int _aastore              =  83; // 0x53
489c9b5090e2 Initial load
duke
parents:
diff changeset
   123
  public static final int _bastore              =  84; // 0x54
489c9b5090e2 Initial load
duke
parents:
diff changeset
   124
  public static final int _castore              =  85; // 0x55
489c9b5090e2 Initial load
duke
parents:
diff changeset
   125
  public static final int _sastore              =  86; // 0x56
489c9b5090e2 Initial load
duke
parents:
diff changeset
   126
  public static final int _pop                  =  87; // 0x57
489c9b5090e2 Initial load
duke
parents:
diff changeset
   127
  public static final int _pop2                 =  88; // 0x58
489c9b5090e2 Initial load
duke
parents:
diff changeset
   128
  public static final int _dup                  =  89; // 0x59
489c9b5090e2 Initial load
duke
parents:
diff changeset
   129
  public static final int _dup_x1               =  90; // 0x5a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   130
  public static final int _dup_x2               =  91; // 0x5b
489c9b5090e2 Initial load
duke
parents:
diff changeset
   131
  public static final int _dup2                 =  92; // 0x5c
489c9b5090e2 Initial load
duke
parents:
diff changeset
   132
  public static final int _dup2_x1              =  93; // 0x5d
489c9b5090e2 Initial load
duke
parents:
diff changeset
   133
  public static final int _dup2_x2              =  94; // 0x5e
489c9b5090e2 Initial load
duke
parents:
diff changeset
   134
  public static final int _swap                 =  95; // 0x5f
489c9b5090e2 Initial load
duke
parents:
diff changeset
   135
  public static final int _iadd                 =  96; // 0x60
489c9b5090e2 Initial load
duke
parents:
diff changeset
   136
  public static final int _ladd                 =  97; // 0x61
489c9b5090e2 Initial load
duke
parents:
diff changeset
   137
  public static final int _fadd                 =  98; // 0x62
489c9b5090e2 Initial load
duke
parents:
diff changeset
   138
  public static final int _dadd                 =  99; // 0x63
489c9b5090e2 Initial load
duke
parents:
diff changeset
   139
  public static final int _isub                 = 100; // 0x64
489c9b5090e2 Initial load
duke
parents:
diff changeset
   140
  public static final int _lsub                 = 101; // 0x65
489c9b5090e2 Initial load
duke
parents:
diff changeset
   141
  public static final int _fsub                 = 102; // 0x66
489c9b5090e2 Initial load
duke
parents:
diff changeset
   142
  public static final int _dsub                 = 103; // 0x67
489c9b5090e2 Initial load
duke
parents:
diff changeset
   143
  public static final int _imul                 = 104; // 0x68
489c9b5090e2 Initial load
duke
parents:
diff changeset
   144
  public static final int _lmul                 = 105; // 0x69
489c9b5090e2 Initial load
duke
parents:
diff changeset
   145
  public static final int _fmul                 = 106; // 0x6a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   146
  public static final int _dmul                 = 107; // 0x6b
489c9b5090e2 Initial load
duke
parents:
diff changeset
   147
  public static final int _idiv                 = 108; // 0x6c
489c9b5090e2 Initial load
duke
parents:
diff changeset
   148
  public static final int _ldiv                 = 109; // 0x6d
489c9b5090e2 Initial load
duke
parents:
diff changeset
   149
  public static final int _fdiv                 = 110; // 0x6e
489c9b5090e2 Initial load
duke
parents:
diff changeset
   150
  public static final int _ddiv                 = 111; // 0x6f
489c9b5090e2 Initial load
duke
parents:
diff changeset
   151
  public static final int _irem                 = 112; // 0x70
489c9b5090e2 Initial load
duke
parents:
diff changeset
   152
  public static final int _lrem                 = 113; // 0x71
489c9b5090e2 Initial load
duke
parents:
diff changeset
   153
  public static final int _frem                 = 114; // 0x72
489c9b5090e2 Initial load
duke
parents:
diff changeset
   154
  public static final int _drem                 = 115; // 0x73
489c9b5090e2 Initial load
duke
parents:
diff changeset
   155
  public static final int _ineg                 = 116; // 0x74
489c9b5090e2 Initial load
duke
parents:
diff changeset
   156
  public static final int _lneg                 = 117; // 0x75
489c9b5090e2 Initial load
duke
parents:
diff changeset
   157
  public static final int _fneg                 = 118; // 0x76
489c9b5090e2 Initial load
duke
parents:
diff changeset
   158
  public static final int _dneg                 = 119; // 0x77
489c9b5090e2 Initial load
duke
parents:
diff changeset
   159
  public static final int _ishl                 = 120; // 0x78
489c9b5090e2 Initial load
duke
parents:
diff changeset
   160
  public static final int _lshl                 = 121; // 0x79
489c9b5090e2 Initial load
duke
parents:
diff changeset
   161
  public static final int _ishr                 = 122; // 0x7a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   162
  public static final int _lshr                 = 123; // 0x7b
489c9b5090e2 Initial load
duke
parents:
diff changeset
   163
  public static final int _iushr                = 124; // 0x7c
489c9b5090e2 Initial load
duke
parents:
diff changeset
   164
  public static final int _lushr                = 125; // 0x7d
489c9b5090e2 Initial load
duke
parents:
diff changeset
   165
  public static final int _iand                 = 126; // 0x7e
489c9b5090e2 Initial load
duke
parents:
diff changeset
   166
  public static final int _land                 = 127; // 0x7f
489c9b5090e2 Initial load
duke
parents:
diff changeset
   167
  public static final int _ior                  = 128; // 0x80
489c9b5090e2 Initial load
duke
parents:
diff changeset
   168
  public static final int _lor                  = 129; // 0x81
489c9b5090e2 Initial load
duke
parents:
diff changeset
   169
  public static final int _ixor                 = 130; // 0x82
489c9b5090e2 Initial load
duke
parents:
diff changeset
   170
  public static final int _lxor                 = 131; // 0x83
489c9b5090e2 Initial load
duke
parents:
diff changeset
   171
  public static final int _iinc                 = 132; // 0x84
489c9b5090e2 Initial load
duke
parents:
diff changeset
   172
  public static final int _i2l                  = 133; // 0x85
489c9b5090e2 Initial load
duke
parents:
diff changeset
   173
  public static final int _i2f                  = 134; // 0x86
489c9b5090e2 Initial load
duke
parents:
diff changeset
   174
  public static final int _i2d                  = 135; // 0x87
489c9b5090e2 Initial load
duke
parents:
diff changeset
   175
  public static final int _l2i                  = 136; // 0x88
489c9b5090e2 Initial load
duke
parents:
diff changeset
   176
  public static final int _l2f                  = 137; // 0x89
489c9b5090e2 Initial load
duke
parents:
diff changeset
   177
  public static final int _l2d                  = 138; // 0x8a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   178
  public static final int _f2i                  = 139; // 0x8b
489c9b5090e2 Initial load
duke
parents:
diff changeset
   179
  public static final int _f2l                  = 140; // 0x8c
489c9b5090e2 Initial load
duke
parents:
diff changeset
   180
  public static final int _f2d                  = 141; // 0x8d
489c9b5090e2 Initial load
duke
parents:
diff changeset
   181
  public static final int _d2i                  = 142; // 0x8e
489c9b5090e2 Initial load
duke
parents:
diff changeset
   182
  public static final int _d2l                  = 143; // 0x8f
489c9b5090e2 Initial load
duke
parents:
diff changeset
   183
  public static final int _d2f                  = 144; // 0x90
489c9b5090e2 Initial load
duke
parents:
diff changeset
   184
  public static final int _i2b                  = 145; // 0x91
489c9b5090e2 Initial load
duke
parents:
diff changeset
   185
  public static final int _i2c                  = 146; // 0x92
489c9b5090e2 Initial load
duke
parents:
diff changeset
   186
  public static final int _i2s                  = 147; // 0x93
489c9b5090e2 Initial load
duke
parents:
diff changeset
   187
  public static final int _lcmp                 = 148; // 0x94
489c9b5090e2 Initial load
duke
parents:
diff changeset
   188
  public static final int _fcmpl                = 149; // 0x95
489c9b5090e2 Initial load
duke
parents:
diff changeset
   189
  public static final int _fcmpg                = 150; // 0x96
489c9b5090e2 Initial load
duke
parents:
diff changeset
   190
  public static final int _dcmpl                = 151; // 0x97
489c9b5090e2 Initial load
duke
parents:
diff changeset
   191
  public static final int _dcmpg                = 152; // 0x98
489c9b5090e2 Initial load
duke
parents:
diff changeset
   192
  public static final int _ifeq                 = 153; // 0x99
489c9b5090e2 Initial load
duke
parents:
diff changeset
   193
  public static final int _ifne                 = 154; // 0x9a
489c9b5090e2 Initial load
duke
parents:
diff changeset
   194
  public static final int _iflt                 = 155; // 0x9b
489c9b5090e2 Initial load
duke
parents:
diff changeset
   195
  public static final int _ifge                 = 156; // 0x9c
489c9b5090e2 Initial load
duke
parents:
diff changeset
   196
  public static final int _ifgt                 = 157; // 0x9d
489c9b5090e2 Initial load
duke
parents:
diff changeset
   197
  public static final int _ifle                 = 158; // 0x9e
489c9b5090e2 Initial load
duke
parents:
diff changeset
   198
  public static final int _if_icmpeq            = 159; // 0x9f
489c9b5090e2 Initial load
duke
parents:
diff changeset
   199
  public static final int _if_icmpne            = 160; // 0xa0
489c9b5090e2 Initial load
duke
parents:
diff changeset
   200
  public static final int _if_icmplt            = 161; // 0xa1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   201
  public static final int _if_icmpge            = 162; // 0xa2
489c9b5090e2 Initial load
duke
parents:
diff changeset
   202
  public static final int _if_icmpgt            = 163; // 0xa3
489c9b5090e2 Initial load
duke
parents:
diff changeset
   203
  public static final int _if_icmple            = 164; // 0xa4
489c9b5090e2 Initial load
duke
parents:
diff changeset
   204
  public static final int _if_acmpeq            = 165; // 0xa5
489c9b5090e2 Initial load
duke
parents:
diff changeset
   205
  public static final int _if_acmpne            = 166; // 0xa6
489c9b5090e2 Initial load
duke
parents:
diff changeset
   206
  public static final int _goto                 = 167; // 0xa7
489c9b5090e2 Initial load
duke
parents:
diff changeset
   207
  public static final int _jsr                  = 168; // 0xa8
489c9b5090e2 Initial load
duke
parents:
diff changeset
   208
  public static final int _ret                  = 169; // 0xa9
489c9b5090e2 Initial load
duke
parents:
diff changeset
   209
  public static final int _tableswitch          = 170; // 0xaa
489c9b5090e2 Initial load
duke
parents:
diff changeset
   210
  public static final int _lookupswitch         = 171; // 0xab
489c9b5090e2 Initial load
duke
parents:
diff changeset
   211
  public static final int _ireturn              = 172; // 0xac
489c9b5090e2 Initial load
duke
parents:
diff changeset
   212
  public static final int _lreturn              = 173; // 0xad
489c9b5090e2 Initial load
duke
parents:
diff changeset
   213
  public static final int _freturn              = 174; // 0xae
489c9b5090e2 Initial load
duke
parents:
diff changeset
   214
  public static final int _dreturn              = 175; // 0xaf
489c9b5090e2 Initial load
duke
parents:
diff changeset
   215
  public static final int _areturn              = 176; // 0xb0
489c9b5090e2 Initial load
duke
parents:
diff changeset
   216
  public static final int _return               = 177; // 0xb1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   217
  public static final int _getstatic            = 178; // 0xb2
489c9b5090e2 Initial load
duke
parents:
diff changeset
   218
  public static final int _putstatic            = 179; // 0xb3
489c9b5090e2 Initial load
duke
parents:
diff changeset
   219
  public static final int _getfield             = 180; // 0xb4
489c9b5090e2 Initial load
duke
parents:
diff changeset
   220
  public static final int _putfield             = 181; // 0xb5
489c9b5090e2 Initial load
duke
parents:
diff changeset
   221
  public static final int _invokevirtual        = 182; // 0xb6
489c9b5090e2 Initial load
duke
parents:
diff changeset
   222
  public static final int _invokespecial        = 183; // 0xb7
489c9b5090e2 Initial load
duke
parents:
diff changeset
   223
  public static final int _invokestatic         = 184; // 0xb8
489c9b5090e2 Initial load
duke
parents:
diff changeset
   224
  public static final int _invokeinterface      = 185; // 0xb9
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   225
  public static final int _invokedynamic        = 186; // 0xba
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   226
  public static final int _new                  = 187; // 0xbb
489c9b5090e2 Initial load
duke
parents:
diff changeset
   227
  public static final int _newarray             = 188; // 0xbc
489c9b5090e2 Initial load
duke
parents:
diff changeset
   228
  public static final int _anewarray            = 189; // 0xbd
489c9b5090e2 Initial load
duke
parents:
diff changeset
   229
  public static final int _arraylength          = 190; // 0xbe
489c9b5090e2 Initial load
duke
parents:
diff changeset
   230
  public static final int _athrow               = 191; // 0xbf
489c9b5090e2 Initial load
duke
parents:
diff changeset
   231
  public static final int _checkcast            = 192; // 0xc0
489c9b5090e2 Initial load
duke
parents:
diff changeset
   232
  public static final int _instanceof           = 193; // 0xc1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   233
  public static final int _monitorenter         = 194; // 0xc2
489c9b5090e2 Initial load
duke
parents:
diff changeset
   234
  public static final int _monitorexit          = 195; // 0xc3
489c9b5090e2 Initial load
duke
parents:
diff changeset
   235
  public static final int _wide                 = 196; // 0xc4
489c9b5090e2 Initial load
duke
parents:
diff changeset
   236
  public static final int _multianewarray       = 197; // 0xc5
489c9b5090e2 Initial load
duke
parents:
diff changeset
   237
  public static final int _ifnull               = 198; // 0xc6
489c9b5090e2 Initial load
duke
parents:
diff changeset
   238
  public static final int _ifnonnull            = 199; // 0xc7
489c9b5090e2 Initial load
duke
parents:
diff changeset
   239
  public static final int _goto_w               = 200; // 0xc8
489c9b5090e2 Initial load
duke
parents:
diff changeset
   240
  public static final int _jsr_w                = 201; // 0xc9
489c9b5090e2 Initial load
duke
parents:
diff changeset
   241
  public static final int _breakpoint           = 202; // 0xca
489c9b5090e2 Initial load
duke
parents:
diff changeset
   242
489c9b5090e2 Initial load
duke
parents:
diff changeset
   243
  public static final int number_of_java_codes  = 203;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   244
489c9b5090e2 Initial load
duke
parents:
diff changeset
   245
  // JVM bytecodes
489c9b5090e2 Initial load
duke
parents:
diff changeset
   246
  public static final int _fast_agetfield       = number_of_java_codes;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   247
  public static final int _fast_bgetfield       = 204;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   248
  public static final int _fast_cgetfield       = 205;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   249
  public static final int _fast_dgetfield       = 206;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   250
  public static final int _fast_fgetfield       = 207;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   251
  public static final int _fast_igetfield       = 208;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   252
  public static final int _fast_lgetfield       = 209;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   253
  public static final int _fast_sgetfield       = 210;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   254
  public static final int _fast_aputfield       = 211;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   255
  public static final int _fast_bputfield       = 212;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   256
  public static final int _fast_cputfield       = 213;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   257
  public static final int _fast_dputfield       = 214;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   258
  public static final int _fast_fputfield       = 215;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   259
  public static final int _fast_iputfield       = 216;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   260
  public static final int _fast_lputfield       = 217;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   261
  public static final int _fast_sputfield       = 218;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   262
  public static final int _fast_aload_0         = 219;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   263
  public static final int _fast_iaccess_0       = 220;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   264
  public static final int _fast_aaccess_0       = 221;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   265
  public static final int _fast_faccess_0       = 222;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   266
  public static final int _fast_iload           = 223;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   267
  public static final int _fast_iload2          = 224;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   268
  public static final int _fast_icaload         = 225;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   269
  public static final int _fast_invokevfinal    = 226;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   270
  public static final int _fast_linearswitch    = 227;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   271
  public static final int _fast_binaryswitch    = 228;
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   272
  public static final int _fast_aldc            = 229;
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   273
  public static final int _fast_aldc_w          = 230;
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   274
  public static final int _return_register_finalizer = 231;
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   275
  public static final int _shouldnotreachhere   = 232; // For debugging
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   276
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   277
  public static final int number_of_codes       = 233;
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   278
489c9b5090e2 Initial load
duke
parents:
diff changeset
   279
  public static int specialLengthAt(Method method, int bci) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   280
    int code = codeAt(method, bci);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   281
    switch (code) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   282
    case _wide:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   283
      return wideLengthFor(method.getBytecodeOrBPAt(bci + 1));
489c9b5090e2 Initial load
duke
parents:
diff changeset
   284
    case _tableswitch:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   285
      {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   286
        int alignedBCI = Bits.roundTo(bci + 1, jintSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   287
        int lo = method.getBytecodeIntArg(alignedBCI + 1*jintSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   288
        int hi = method.getBytecodeIntArg(alignedBCI + 2*jintSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   289
        return (alignedBCI - bci) + (3 + hi - lo + 1)*jintSize;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   290
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   291
489c9b5090e2 Initial load
duke
parents:
diff changeset
   292
    case _lookupswitch:      // fall through
489c9b5090e2 Initial load
duke
parents:
diff changeset
   293
    case _fast_binaryswitch: // fall through
489c9b5090e2 Initial load
duke
parents:
diff changeset
   294
    case _fast_linearswitch:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   295
      {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   296
        int alignedBCI = Bits.roundTo(bci + 1, jintSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   297
        int npairs = method.getBytecodeIntArg(alignedBCI + jintSize);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   298
        return (alignedBCI - bci) + (2 + 2*npairs)*jintSize;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   299
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   300
489c9b5090e2 Initial load
duke
parents:
diff changeset
   301
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   302
    throw new RuntimeException("should not reach here");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   303
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   304
489c9b5090e2 Initial load
duke
parents:
diff changeset
   305
  // Conversion
489c9b5090e2 Initial load
duke
parents:
diff changeset
   306
  public static void check(int code) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   307
    if (Assert.ASSERTS_ENABLED) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   308
      Assert.that(isDefined(code), "illegal code " + code);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   309
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   310
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   311
  public static void wideCheck(int code) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   312
    if (Assert.ASSERTS_ENABLED) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   313
      Assert.that(wideIsDefined(code), "illegal code " + code);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   314
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   315
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   316
489c9b5090e2 Initial load
duke
parents:
diff changeset
   317
  /** Fetches a bytecode, hiding breakpoints as necessary */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   318
  public static int codeAt(Method method, int bci) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   319
    int res = codeOrBPAt(method, bci);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   320
    if (res == _breakpoint) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   321
      res = method.getOrigBytecodeAt(bci);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   322
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   323
    return res;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   324
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   325
489c9b5090e2 Initial load
duke
parents:
diff changeset
   326
  /** Fetches a bytecode or a breakpoint */
489c9b5090e2 Initial load
duke
parents:
diff changeset
   327
  public static int codeOrBPAt(Method method, int bci) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   328
    return method.getBytecodeOrBPAt(bci);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   329
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   330
489c9b5090e2 Initial load
duke
parents:
diff changeset
   331
  public static boolean isActiveBreakpointAt(Method method, int bci) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   332
    return (codeOrBPAt(method, bci) == _breakpoint);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   333
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   334
489c9b5090e2 Initial load
duke
parents:
diff changeset
   335
  // find a bytecode, behind a breakpoint if necessary:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   336
  // FIXME: not yet implementable
489c9b5090e2 Initial load
duke
parents:
diff changeset
   337
  //   static Code       non_breakpoint_code_at(address bcp, methodOop method = null);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   338
489c9b5090e2 Initial load
duke
parents:
diff changeset
   339
  // Bytecode attributes
489c9b5090e2 Initial load
duke
parents:
diff changeset
   340
  public static boolean   isDefined    (int code) { return 0 <= code && code < number_of_codes && _format[code] != null; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   341
  public static boolean   wideIsDefined(int code) { return isDefined(code) && _wide_format[code] != null; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   342
  public static String    name         (int code) { check(code);      return _name          [code]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   343
  public static String    format       (int code) { check(code);      return _format        [code]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   344
  public static String    wideFormat   (int code) { wideCheck(code);  return _wide_format   [code]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   345
  public static int       resultType   (int code) { check(code);      return _result_type   [code]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   346
  public static int       depth        (int code) { check(code);      return _depth         [code]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   347
  public static int       lengthFor    (int code) { check(code);      return _length        [code]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   348
  public static boolean   canTrap      (int code) { check(code);      return _can_trap      [code]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   349
  public static int       javaCode     (int code) { check(code);      return _java_code     [code]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   350
  public static boolean   canRewrite   (int code) { check(code);      return _can_rewrite   [code]; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   351
  public static int       wideLengthFor(int code) { wideCheck(code);  return wideFormat(code).length(); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   352
  public static int       lengthAt     (Method method, int bci) { int l = lengthFor(codeAt(method, bci)); return l > 0 ? l : specialLengthAt(method, bci); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   353
  public static int       javaLengthAt (Method method, int bci) { int l = lengthFor(javaCode(codeAt(method, bci))); return l > 0 ? l : specialLengthAt(method, bci); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   354
  public static boolean   isJavaCode   (int code) { return 0 <= code && code < number_of_java_codes; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   355
  public static boolean   isFastCode   (int code) { return number_of_java_codes <= code && code < number_of_codes; }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   356
489c9b5090e2 Initial load
duke
parents:
diff changeset
   357
  public static boolean   isAload      (int code) { return (code == _aload  || code == _aload_0  || code == _aload_1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   358
                                                                            || code == _aload_2  || code == _aload_3); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   359
  public static boolean   isAstore     (int code) { return (code == _astore || code == _astore_0 || code == _astore_1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   360
                                                                            || code == _astore_2 || code == _astore_3); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   361
489c9b5090e2 Initial load
duke
parents:
diff changeset
   362
  public static boolean   isZeroConst  (int code) { return (code == _aconst_null || code == _iconst_0
489c9b5090e2 Initial load
duke
parents:
diff changeset
   363
                                                                                 || code == _fconst_0 || code == _dconst_0); }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   364
489c9b5090e2 Initial load
duke
parents:
diff changeset
   365
  //----------------------------------------------------------------------
489c9b5090e2 Initial load
duke
parents:
diff changeset
   366
  // Internals only below this point
489c9b5090e2 Initial load
duke
parents:
diff changeset
   367
  //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   368
489c9b5090e2 Initial load
duke
parents:
diff changeset
   369
  private static String[]    _name;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   370
  private static String[]    _format;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   371
  private static String[]    _wide_format;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   372
  private static int[]       _result_type;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   373
  private static byte[]      _depth;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   374
  private static byte[]      _length;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   375
  private static boolean[]   _can_trap;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   376
  private static int[]       _java_code;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   377
  private static boolean[]   _can_rewrite;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   378
489c9b5090e2 Initial load
duke
parents:
diff changeset
   379
  static {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   380
    _name           = new String [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   381
    _format         = new String [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   382
    _wide_format    = new String [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   383
    _result_type    = new int    [number_of_codes]; // See BasicType.java
489c9b5090e2 Initial load
duke
parents:
diff changeset
   384
    _depth          = new byte   [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   385
    _length         = new byte   [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   386
    _can_trap       = new boolean[number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   387
    _java_code      = new int    [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   388
    _can_rewrite    = new boolean[number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   389
489c9b5090e2 Initial load
duke
parents:
diff changeset
   390
    // In case we want to fetch this information from the VM in the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   391
    // future
489c9b5090e2 Initial load
duke
parents:
diff changeset
   392
    VM.registerVMInitializedObserver(new Observer() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   393
        public void update(Observable o, Object data) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   394
          initialize();
489c9b5090e2 Initial load
duke
parents:
diff changeset
   395
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   396
      });
489c9b5090e2 Initial load
duke
parents:
diff changeset
   397
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   398
489c9b5090e2 Initial load
duke
parents:
diff changeset
   399
  private static final int jintSize    =   4;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   400
489c9b5090e2 Initial load
duke
parents:
diff changeset
   401
  //  private static String[]    _name           = new String [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   402
  //  private static String[]    _format         = new String [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   403
  //  private static String[]    _wide_format    = new String [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   404
  //  private static int[]       _result_type    = new int    [number_of_codes]; // See BasicType.java
489c9b5090e2 Initial load
duke
parents:
diff changeset
   405
  //  private static byte[]      _depth          = new byte   [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   406
  //  private static byte[]      _length         = new byte   [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   407
  //  private static boolean[]   _can_trap       = new boolean[number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   408
  //  private static int[]       _java_code      = new int    [number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   409
  //  private static boolean[]   _can_rewrite    = new boolean[number_of_codes];
489c9b5090e2 Initial load
duke
parents:
diff changeset
   410
489c9b5090e2 Initial load
duke
parents:
diff changeset
   411
  // Initialization
489c9b5090e2 Initial load
duke
parents:
diff changeset
   412
  private static void initialize() {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   413
    if (Assert.ASSERTS_ENABLED) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   414
      Assert.that(number_of_codes <= 256, "too many bytecodes");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   415
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   416
489c9b5090e2 Initial load
duke
parents:
diff changeset
   417
    // Format strings interpretation:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   418
    //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   419
    // b: bytecode
489c9b5090e2 Initial load
duke
parents:
diff changeset
   420
    // c: signed constant, Java byte-ordering
489c9b5090e2 Initial load
duke
parents:
diff changeset
   421
    // i: unsigned index , Java byte-ordering
489c9b5090e2 Initial load
duke
parents:
diff changeset
   422
    // j: unsigned index , native byte-ordering
489c9b5090e2 Initial load
duke
parents:
diff changeset
   423
    // o: branch offset  , Java byte-ordering
489c9b5090e2 Initial load
duke
parents:
diff changeset
   424
    // _: unused/ignored
489c9b5090e2 Initial load
duke
parents:
diff changeset
   425
    // w: wide bytecode
489c9b5090e2 Initial load
duke
parents:
diff changeset
   426
    //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   427
    // Note: Right now the format strings are used for 2 purposes:
489c9b5090e2 Initial load
duke
parents:
diff changeset
   428
    //       1. to specify the length of the bytecode
489c9b5090e2 Initial load
duke
parents:
diff changeset
   429
    //          (= number of characters in format string)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   430
    //       2. to specify the bytecode attributes
489c9b5090e2 Initial load
duke
parents:
diff changeset
   431
    //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   432
    //       The bytecode attributes are currently used only for bytecode tracing
489c9b5090e2 Initial load
duke
parents:
diff changeset
   433
    //       (see BytecodeTracer); thus if more specific format information is
489c9b5090e2 Initial load
duke
parents:
diff changeset
   434
    //       used, one would also have to adjust the bytecode tracer.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   435
    //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   436
    // Note: For bytecodes with variable length, the format string is the empty string.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   437
489c9b5090e2 Initial load
duke
parents:
diff changeset
   438
    // Note 1: null for the format string means the bytecode doesn't exist
489c9b5090e2 Initial load
duke
parents:
diff changeset
   439
    //         in that form.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   440
    //
489c9b5090e2 Initial load
duke
parents:
diff changeset
   441
    // Note 2: The result type is T_ILLEGAL for bytecodes where the top of stack
489c9b5090e2 Initial load
duke
parents:
diff changeset
   442
    //         type after execution is not only determined by the bytecode itself.
489c9b5090e2 Initial load
duke
parents:
diff changeset
   443
489c9b5090e2 Initial load
duke
parents:
diff changeset
   444
    //  Java bytecodes
489c9b5090e2 Initial load
duke
parents:
diff changeset
   445
    //  bytecode               bytecode name           format   wide f.   result tp                stk traps
489c9b5090e2 Initial load
duke
parents:
diff changeset
   446
    def(_nop                 , "nop"                 , "b"    , null    , BasicType.getTVoid()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   447
    def(_aconst_null         , "aconst_null"         , "b"    , null    , BasicType.getTObject() ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   448
    def(_iconst_m1           , "iconst_m1"           , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   449
    def(_iconst_0            , "iconst_0"            , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   450
    def(_iconst_1            , "iconst_1"            , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   451
    def(_iconst_2            , "iconst_2"            , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   452
    def(_iconst_3            , "iconst_3"            , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   453
    def(_iconst_4            , "iconst_4"            , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   454
    def(_iconst_5            , "iconst_5"            , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   455
    def(_lconst_0            , "lconst_0"            , "b"    , null    , BasicType.getTLong()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   456
    def(_lconst_1            , "lconst_1"            , "b"    , null    , BasicType.getTLong()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   457
    def(_fconst_0            , "fconst_0"            , "b"    , null    , BasicType.getTFloat()  ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   458
    def(_fconst_1            , "fconst_1"            , "b"    , null    , BasicType.getTFloat()  ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   459
    def(_fconst_2            , "fconst_2"            , "b"    , null    , BasicType.getTFloat()  ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   460
    def(_dconst_0            , "dconst_0"            , "b"    , null    , BasicType.getTDouble() ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   461
    def(_dconst_1            , "dconst_1"            , "b"    , null    , BasicType.getTDouble() ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   462
    def(_bipush              , "bipush"              , "bc"   , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   463
    def(_sipush              , "sipush"              , "bcc"  , null    , BasicType.getTInt()    ,  1, false);
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   464
    def(_ldc                 , "ldc"                 , "bk"   , null    , BasicType.getTIllegal(),  1, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   465
    def(_ldc_w               , "ldc_w"               , "bkk"  , null    , BasicType.getTIllegal(),  1, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   466
    def(_ldc2_w              , "ldc2_w"              , "bkk"  , null    , BasicType.getTIllegal(),  2, true );
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   467
    def(_iload               , "iload"               , "bi"   , "wbii"  , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   468
    def(_lload               , "lload"               , "bi"   , "wbii"  , BasicType.getTLong()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   469
    def(_fload               , "fload"               , "bi"   , "wbii"  , BasicType.getTFloat()  ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   470
    def(_dload               , "dload"               , "bi"   , "wbii"  , BasicType.getTDouble() ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   471
    def(_aload               , "aload"               , "bi"   , "wbii"  , BasicType.getTObject() ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   472
    def(_iload_0             , "iload_0"             , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   473
    def(_iload_1             , "iload_1"             , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   474
    def(_iload_2             , "iload_2"             , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   475
    def(_iload_3             , "iload_3"             , "b"    , null    , BasicType.getTInt()    ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   476
    def(_lload_0             , "lload_0"             , "b"    , null    , BasicType.getTLong()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   477
    def(_lload_1             , "lload_1"             , "b"    , null    , BasicType.getTLong()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   478
    def(_lload_2             , "lload_2"             , "b"    , null    , BasicType.getTLong()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   479
    def(_lload_3             , "lload_3"             , "b"    , null    , BasicType.getTLong()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   480
    def(_fload_0             , "fload_0"             , "b"    , null    , BasicType.getTFloat()  ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   481
    def(_fload_1             , "fload_1"             , "b"    , null    , BasicType.getTFloat()  ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   482
    def(_fload_2             , "fload_2"             , "b"    , null    , BasicType.getTFloat()  ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   483
    def(_fload_3             , "fload_3"             , "b"    , null    , BasicType.getTFloat()  ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   484
    def(_dload_0             , "dload_0"             , "b"    , null    , BasicType.getTDouble() ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   485
    def(_dload_1             , "dload_1"             , "b"    , null    , BasicType.getTDouble() ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   486
    def(_dload_2             , "dload_2"             , "b"    , null    , BasicType.getTDouble() ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   487
    def(_dload_3             , "dload_3"             , "b"    , null    , BasicType.getTDouble() ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   488
    def(_aload_0             , "aload_0"             , "b"    , null    , BasicType.getTObject() ,  1, true ); // rewriting in interpreter
489c9b5090e2 Initial load
duke
parents:
diff changeset
   489
    def(_aload_1             , "aload_1"             , "b"    , null    , BasicType.getTObject() ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   490
    def(_aload_2             , "aload_2"             , "b"    , null    , BasicType.getTObject() ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   491
    def(_aload_3             , "aload_3"             , "b"    , null    , BasicType.getTObject() ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   492
    def(_iaload              , "iaload"              , "b"    , null    , BasicType.getTInt()    , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   493
    def(_laload              , "laload"              , "b"    , null    , BasicType.getTLong()   ,  0, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   494
    def(_faload              , "faload"              , "b"    , null    , BasicType.getTFloat()  , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   495
    def(_daload              , "daload"              , "b"    , null    , BasicType.getTDouble() ,  0, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   496
    def(_aaload              , "aaload"              , "b"    , null    , BasicType.getTObject() , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   497
    def(_baload              , "baload"              , "b"    , null    , BasicType.getTInt()    , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   498
    def(_caload              , "caload"              , "b"    , null    , BasicType.getTInt()    , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   499
    def(_saload              , "saload"              , "b"    , null    , BasicType.getTInt()    , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   500
    def(_istore              , "istore"              , "bi"   , "wbii"  , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   501
    def(_lstore              , "lstore"              , "bi"   , "wbii"  , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   502
    def(_fstore              , "fstore"              , "bi"   , "wbii"  , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   503
    def(_dstore              , "dstore"              , "bi"   , "wbii"  , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   504
    def(_astore              , "astore"              , "bi"   , "wbii"  , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   505
    def(_istore_0            , "istore_0"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   506
    def(_istore_1            , "istore_1"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   507
    def(_istore_2            , "istore_2"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   508
    def(_istore_3            , "istore_3"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   509
    def(_lstore_0            , "lstore_0"            , "b"    , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   510
    def(_lstore_1            , "lstore_1"            , "b"    , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   511
    def(_lstore_2            , "lstore_2"            , "b"    , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   512
    def(_lstore_3            , "lstore_3"            , "b"    , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   513
    def(_fstore_0            , "fstore_0"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   514
    def(_fstore_1            , "fstore_1"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   515
    def(_fstore_2            , "fstore_2"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   516
    def(_fstore_3            , "fstore_3"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   517
    def(_dstore_0            , "dstore_0"            , "b"    , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   518
    def(_dstore_1            , "dstore_1"            , "b"    , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   519
    def(_dstore_2            , "dstore_2"            , "b"    , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   520
    def(_dstore_3            , "dstore_3"            , "b"    , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   521
    def(_astore_0            , "astore_0"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   522
    def(_astore_1            , "astore_1"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   523
    def(_astore_2            , "astore_2"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   524
    def(_astore_3            , "astore_3"            , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   525
    def(_iastore             , "iastore"             , "b"    , null    , BasicType.getTVoid()   , -3, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   526
    def(_lastore             , "lastore"             , "b"    , null    , BasicType.getTVoid()   , -4, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   527
    def(_fastore             , "fastore"             , "b"    , null    , BasicType.getTVoid()   , -3, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   528
    def(_dastore             , "dastore"             , "b"    , null    , BasicType.getTVoid()   , -4, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   529
    def(_aastore             , "aastore"             , "b"    , null    , BasicType.getTVoid()   , -3, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   530
    def(_bastore             , "bastore"             , "b"    , null    , BasicType.getTVoid()   , -3, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   531
    def(_castore             , "castore"             , "b"    , null    , BasicType.getTVoid()   , -3, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   532
    def(_sastore             , "sastore"             , "b"    , null    , BasicType.getTVoid()   , -3, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   533
    def(_pop                 , "pop"                 , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   534
    def(_pop2                , "pop2"                , "b"    , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   535
    def(_dup                 , "dup"                 , "b"    , null    , BasicType.getTVoid()   ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   536
    def(_dup_x1              , "dup_x1"              , "b"    , null    , BasicType.getTVoid()   ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   537
    def(_dup_x2              , "dup_x2"              , "b"    , null    , BasicType.getTVoid()   ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   538
    def(_dup2                , "dup2"                , "b"    , null    , BasicType.getTVoid()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   539
    def(_dup2_x1             , "dup2_x1"             , "b"    , null    , BasicType.getTVoid()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   540
    def(_dup2_x2             , "dup2_x2"             , "b"    , null    , BasicType.getTVoid()   ,  2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   541
    def(_swap                , "swap"                , "b"    , null    , BasicType.getTVoid()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   542
    def(_iadd                , "iadd"                , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   543
    def(_ladd                , "ladd"                , "b"    , null    , BasicType.getTLong()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   544
    def(_fadd                , "fadd"                , "b"    , null    , BasicType.getTFloat()  , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   545
    def(_dadd                , "dadd"                , "b"    , null    , BasicType.getTDouble() , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   546
    def(_isub                , "isub"                , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   547
    def(_lsub                , "lsub"                , "b"    , null    , BasicType.getTLong()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   548
    def(_fsub                , "fsub"                , "b"    , null    , BasicType.getTFloat()  , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   549
    def(_dsub                , "dsub"                , "b"    , null    , BasicType.getTDouble() , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   550
    def(_imul                , "imul"                , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   551
    def(_lmul                , "lmul"                , "b"    , null    , BasicType.getTLong()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   552
    def(_fmul                , "fmul"                , "b"    , null    , BasicType.getTFloat()  , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   553
    def(_dmul                , "dmul"                , "b"    , null    , BasicType.getTDouble() , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   554
    def(_idiv                , "idiv"                , "b"    , null    , BasicType.getTInt()    , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   555
    def(_ldiv                , "ldiv"                , "b"    , null    , BasicType.getTLong()   , -2, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   556
    def(_fdiv                , "fdiv"                , "b"    , null    , BasicType.getTFloat()  , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   557
    def(_ddiv                , "ddiv"                , "b"    , null    , BasicType.getTDouble() , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   558
    def(_irem                , "irem"                , "b"    , null    , BasicType.getTInt()    , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   559
    def(_lrem                , "lrem"                , "b"    , null    , BasicType.getTLong()   , -2, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   560
    def(_frem                , "frem"                , "b"    , null    , BasicType.getTFloat()  , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   561
    def(_drem                , "drem"                , "b"    , null    , BasicType.getTDouble() , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   562
    def(_ineg                , "ineg"                , "b"    , null    , BasicType.getTInt()    ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   563
    def(_lneg                , "lneg"                , "b"    , null    , BasicType.getTLong()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   564
    def(_fneg                , "fneg"                , "b"    , null    , BasicType.getTFloat()  ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   565
    def(_dneg                , "dneg"                , "b"    , null    , BasicType.getTDouble() ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   566
    def(_ishl                , "ishl"                , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   567
    def(_lshl                , "lshl"                , "b"    , null    , BasicType.getTLong()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   568
    def(_ishr                , "ishr"                , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   569
    def(_lshr                , "lshr"                , "b"    , null    , BasicType.getTLong()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   570
    def(_iushr               , "iushr"               , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   571
    def(_lushr               , "lushr"               , "b"    , null    , BasicType.getTLong()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   572
    def(_iand                , "iand"                , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   573
    def(_land                , "land"                , "b"    , null    , BasicType.getTLong()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   574
    def(_ior                 , "ior"                 , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   575
    def(_lor                 , "lor"                 , "b"    , null    , BasicType.getTLong()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   576
    def(_ixor                , "ixor"                , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   577
    def(_lxor                , "lxor"                , "b"    , null    , BasicType.getTLong()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   578
    def(_iinc                , "iinc"                , "bic"  , "wbiicc", BasicType.getTVoid()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   579
    def(_i2l                 , "i2l"                 , "b"    , null    , BasicType.getTLong()   ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   580
    def(_i2f                 , "i2f"                 , "b"    , null    , BasicType.getTFloat()  ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   581
    def(_i2d                 , "i2d"                 , "b"    , null    , BasicType.getTDouble() ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   582
    def(_l2i                 , "l2i"                 , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   583
    def(_l2f                 , "l2f"                 , "b"    , null    , BasicType.getTFloat()  , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   584
    def(_l2d                 , "l2d"                 , "b"    , null    , BasicType.getTDouble() ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   585
    def(_f2i                 , "f2i"                 , "b"    , null    , BasicType.getTInt()    ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   586
    def(_f2l                 , "f2l"                 , "b"    , null    , BasicType.getTLong()   ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   587
    def(_f2d                 , "f2d"                 , "b"    , null    , BasicType.getTDouble() ,  1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   588
    def(_d2i                 , "d2i"                 , "b"    , null    , BasicType.getTInt()    , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   589
    def(_d2l                 , "d2l"                 , "b"    , null    , BasicType.getTLong()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   590
    def(_d2f                 , "d2f"                 , "b"    , null    , BasicType.getTFloat()  , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   591
    def(_i2b                 , "i2b"                 , "b"    , null    , BasicType.getTByte()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   592
    def(_i2c                 , "i2c"                 , "b"    , null    , BasicType.getTChar()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   593
    def(_i2s                 , "i2s"                 , "b"    , null    , BasicType.getTShort()  ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   594
    def(_lcmp                , "lcmp"                , "b"    , null    , BasicType.getTVoid()   , -3, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   595
    def(_fcmpl               , "fcmpl"               , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   596
    def(_fcmpg               , "fcmpg"               , "b"    , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   597
    def(_dcmpl               , "dcmpl"               , "b"    , null    , BasicType.getTVoid()   , -3, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   598
    def(_dcmpg               , "dcmpg"               , "b"    , null    , BasicType.getTVoid()   , -3, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   599
    def(_ifeq                , "ifeq"                , "boo"  , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   600
    def(_ifne                , "ifne"                , "boo"  , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   601
    def(_iflt                , "iflt"                , "boo"  , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   602
    def(_ifge                , "ifge"                , "boo"  , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   603
    def(_ifgt                , "ifgt"                , "boo"  , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   604
    def(_ifle                , "ifle"                , "boo"  , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   605
    def(_if_icmpeq           , "if_icmpeq"           , "boo"  , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   606
    def(_if_icmpne           , "if_icmpne"           , "boo"  , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   607
    def(_if_icmplt           , "if_icmplt"           , "boo"  , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   608
    def(_if_icmpge           , "if_icmpge"           , "boo"  , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   609
    def(_if_icmpgt           , "if_icmpgt"           , "boo"  , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   610
    def(_if_icmple           , "if_icmple"           , "boo"  , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   611
    def(_if_acmpeq           , "if_acmpeq"           , "boo"  , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   612
    def(_if_acmpne           , "if_acmpne"           , "boo"  , null    , BasicType.getTVoid()   , -2, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   613
    def(_goto                , "goto"                , "boo"  , null    , BasicType.getTVoid()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   614
    def(_jsr                 , "jsr"                 , "boo"  , null    , BasicType.getTInt()    ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   615
    def(_ret                 , "ret"                 , "bi"   , "wbii"  , BasicType.getTVoid()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   616
    def(_tableswitch         , "tableswitch"         , ""     , null    , BasicType.getTVoid()   , -1, false); // may have backward branches
489c9b5090e2 Initial load
duke
parents:
diff changeset
   617
    def(_lookupswitch        , "lookupswitch"        , ""     , null    , BasicType.getTVoid()   , -1, false); // rewriting in interpreter
489c9b5090e2 Initial load
duke
parents:
diff changeset
   618
    def(_ireturn             , "ireturn"             , "b"    , null    , BasicType.getTInt()    , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   619
    def(_lreturn             , "lreturn"             , "b"    , null    , BasicType.getTLong()   , -2, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   620
    def(_freturn             , "freturn"             , "b"    , null    , BasicType.getTFloat()  , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   621
    def(_dreturn             , "dreturn"             , "b"    , null    , BasicType.getTDouble() , -2, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   622
    def(_areturn             , "areturn"             , "b"    , null    , BasicType.getTObject() , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   623
    def(_return              , "return"              , "b"    , null    , BasicType.getTVoid()   ,  0, true );
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   624
    def(_getstatic           , "getstatic"           , "bJJ"  , null    , BasicType.getTIllegal(),  1, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   625
    def(_putstatic           , "putstatic"           , "bJJ"  , null    , BasicType.getTIllegal(), -1, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   626
    def(_getfield            , "getfield"            , "bJJ"  , null    , BasicType.getTIllegal(),  0, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   627
    def(_putfield            , "putfield"            , "bJJ"  , null    , BasicType.getTIllegal(), -2, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   628
    def(_invokevirtual       , "invokevirtual"       , "bJJ"  , null    , BasicType.getTIllegal(), -1, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   629
    def(_invokespecial       , "invokespecial"       , "bJJ"  , null    , BasicType.getTIllegal(), -1, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   630
    def(_invokestatic        , "invokestatic"        , "bJJ"  , null    , BasicType.getTIllegal(),  0, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   631
    def(_invokeinterface     , "invokeinterface"     , "bJJ__", null    , BasicType.getTIllegal(), -1, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   632
    def(_invokedynamic       , "invokedynamic"       , "bJJJJ", null    , BasicType.getTIllegal(), -1, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   633
    def(_new                 , "new"                 , "bkk"  , null    , BasicType.getTObject() ,  1, true );
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   634
    def(_newarray            , "newarray"            , "bc"   , null    , BasicType.getTObject() ,  0, true );
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   635
    def(_anewarray           , "anewarray"           , "bkk"  , null    , BasicType.getTObject() ,  0, true );
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   636
    def(_arraylength         , "arraylength"         , "b"    , null    , BasicType.getTVoid()   ,  0, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   637
    def(_athrow              , "athrow"              , "b"    , null    , BasicType.getTVoid()   , -1, true );
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   638
    def(_checkcast           , "checkcast"           , "bkk"  , null    , BasicType.getTObject() ,  0, true );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   639
    def(_instanceof          , "instanceof"          , "bkk"  , null    , BasicType.getTInt()    ,  0, true );
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   640
    def(_monitorenter        , "monitorenter"        , "b"    , null    , BasicType.getTVoid()   , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   641
    def(_monitorexit         , "monitorexit"         , "b"    , null    , BasicType.getTVoid()   , -1, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   642
    def(_wide                , "wide"                , ""     , null    , BasicType.getTVoid()   ,  0, false);
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   643
    def(_multianewarray      , "multianewarray"      , "bkkc" , null    , BasicType.getTObject() ,  1, true );
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   644
    def(_ifnull              , "ifnull"              , "boo"  , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   645
    def(_ifnonnull           , "ifnonnull"           , "boo"  , null    , BasicType.getTVoid()   , -1, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   646
    def(_goto_w              , "goto_w"              , "boooo", null    , BasicType.getTVoid()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   647
    def(_jsr_w               , "jsr_w"               , "boooo", null    , BasicType.getTInt()    ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   648
    def(_breakpoint          , "breakpoint"          , ""     , null    , BasicType.getTVoid()   ,  0, true );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   649
489c9b5090e2 Initial load
duke
parents:
diff changeset
   650
    //  JVM bytecodes
489c9b5090e2 Initial load
duke
parents:
diff changeset
   651
    //  bytecode               bytecode name           format   wide f.   result tp               stk traps  std code
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   652
    def(_fast_agetfield      , "fast_agetfield"      , "bJJ"  , null    , BasicType.getTObject() ,  0, true , _getfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   653
    def(_fast_bgetfield      , "fast_bgetfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _getfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   654
    def(_fast_cgetfield      , "fast_cgetfield"      , "bJJ"  , null    , BasicType.getTChar()   ,  0, true , _getfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   655
    def(_fast_dgetfield      , "fast_dgetfield"      , "bJJ"  , null    , BasicType.getTDouble() ,  0, true , _getfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   656
    def(_fast_fgetfield      , "fast_fgetfield"      , "bJJ"  , null    , BasicType.getTFloat()  ,  0, true , _getfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   657
    def(_fast_igetfield      , "fast_igetfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _getfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   658
    def(_fast_lgetfield      , "fast_lgetfield"      , "bJJ"  , null    , BasicType.getTLong()   ,  0, true , _getfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   659
    def(_fast_sgetfield      , "fast_sgetfield"      , "bJJ"  , null    , BasicType.getTShort()  ,  0, true , _getfield       );
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   660
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   661
    def(_fast_aputfield      , "fast_aputfield"      , "bJJ"  , null    , BasicType.getTObject() ,  0, true , _putfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   662
    def(_fast_bputfield      , "fast_bputfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _putfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   663
    def(_fast_cputfield      , "fast_cputfield"      , "bJJ"  , null    , BasicType.getTChar()   ,  0, true , _putfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   664
    def(_fast_dputfield      , "fast_dputfield"      , "bJJ"  , null    , BasicType.getTDouble() ,  0, true , _putfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   665
    def(_fast_fputfield      , "fast_fputfield"      , "bJJ"  , null    , BasicType.getTFloat()  ,  0, true , _putfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   666
    def(_fast_iputfield      , "fast_iputfield"      , "bJJ"  , null    , BasicType.getTInt()    ,  0, true , _putfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   667
    def(_fast_lputfield      , "fast_lputfield"      , "bJJ"  , null    , BasicType.getTLong()   ,  0, true , _putfield       );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   668
    def(_fast_sputfield      , "fast_sputfield"      , "bJJ"  , null    , BasicType.getTShort()  ,  0, true , _putfield       );
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   669
489c9b5090e2 Initial load
duke
parents:
diff changeset
   670
    def(_fast_aload_0        , "fast_aload_0"        , "b"    , null    , BasicType.getTObject() ,  1, true , _aload_0        );
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   671
    def(_fast_iaccess_0      , "fast_iaccess_0"      , "b_JJ" , null    , BasicType.getTInt()    ,  1, true , _aload_0        );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   672
    def(_fast_aaccess_0      , "fast_aaccess_0"      , "b_JJ" , null    , BasicType.getTObject() ,  1, true , _aload_0        );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   673
    def(_fast_faccess_0      , "fast_faccess_0"      , "b_JJ" , null    , BasicType.getTObject() ,  1, true , _aload_0        );
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   674
489c9b5090e2 Initial load
duke
parents:
diff changeset
   675
    def(_fast_iload          , "fast_iload"          , "bi"   , null    , BasicType.getTInt()    ,  1, false, _iload);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   676
    def(_fast_iload2         , "fast_iload2"         , "bi_i" , null    , BasicType.getTInt()    ,  2, false, _iload);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   677
    def(_fast_icaload        , "fast_icaload"        , "bi_"  , null    , BasicType.getTInt()    ,  0, false, _iload);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   678
489c9b5090e2 Initial load
duke
parents:
diff changeset
   679
    // Faster method invocation.
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   680
    def(_fast_invokevfinal   , "fast_invokevfinal"   , "bJJ"  , null    , BasicType.getTIllegal(), -1, true, _invokevirtual);
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   681
489c9b5090e2 Initial load
duke
parents:
diff changeset
   682
    def(_fast_linearswitch   , "fast_linearswitch"   , ""     , null    , BasicType.getTVoid()   , -1, false, _lookupswitch   );
489c9b5090e2 Initial load
duke
parents:
diff changeset
   683
    def(_fast_binaryswitch   , "fast_binaryswitch"   , ""     , null    , BasicType.getTVoid()   , -1, false, _lookupswitch   );
5882
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   684
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   685
    def(_return_register_finalizer, "return_register_finalizer", "b"    , null    , BasicType.getTVoid()   , 0, true, _return );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   686
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   687
    def(_fast_aldc           , "fast_aldc"           , "bj"   , null    , BasicType.getTObject(),   1, true,  _ldc   );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   688
    def(_fast_aldc_w         , "fast_aldc_w"         , "bJJ"  , null    , BasicType.getTObject(),   1, true,  _ldc_w );
6b2aecc4f7d8 6939203: JSR 292 needs method handle constants
jrose
parents: 5547
diff changeset
   689
1
489c9b5090e2 Initial load
duke
parents:
diff changeset
   690
    def(_shouldnotreachhere  , "_shouldnotreachhere" , "b"    , null    , BasicType.getTVoid()   ,  0, false);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   691
489c9b5090e2 Initial load
duke
parents:
diff changeset
   692
    if (Assert.ASSERTS_ENABLED) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   693
      // compare can_trap information for each bytecode with the
489c9b5090e2 Initial load
duke
parents:
diff changeset
   694
      // can_trap information for the corresponding base bytecode
489c9b5090e2 Initial load
duke
parents:
diff changeset
   695
      // (if a rewritten bytecode can trap, so must the base bytecode)
489c9b5090e2 Initial load
duke
parents:
diff changeset
   696
      for (int i = 0; i < number_of_codes; i++) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   697
        if (isDefined(i)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   698
          int j = javaCode(i);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   699
          if (canTrap(i) && !canTrap(j)) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   700
            Assert.that(false, name(i) + " can trap => " + name(j) + " can trap, too");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   701
          }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   702
        }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   703
      }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   704
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   705
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   706
489c9b5090e2 Initial load
duke
parents:
diff changeset
   707
  private static void def(int code, String name, String format, String wide_format, int result_type, int depth, boolean can_trap) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   708
    def(code, name, format, wide_format, result_type, depth, can_trap, code);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   709
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   710
489c9b5090e2 Initial load
duke
parents:
diff changeset
   711
  private static void def(int code, String name, String format, String wide_format, int result_type, int depth, boolean can_trap, int java_code) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   712
    if (Assert.ASSERTS_ENABLED) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   713
      Assert.that(wide_format == null || format != null, "short form must exist if there's a wide form");
489c9b5090e2 Initial load
duke
parents:
diff changeset
   714
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   715
    _name          [code] = name;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   716
    _format        [code] = format;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   717
    _wide_format   [code] = wide_format;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   718
    _result_type   [code] = result_type;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   719
    _depth         [code] = (byte) depth;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   720
    _can_trap      [code] = can_trap;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   721
    _length        [code] = (byte) (format != null ? format.length() : 0);
489c9b5090e2 Initial load
duke
parents:
diff changeset
   722
    _java_code     [code] = java_code;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   723
    if (java_code != code) {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   724
      _can_rewrite[java_code] = true;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   725
    } else {
489c9b5090e2 Initial load
duke
parents:
diff changeset
   726
      _can_rewrite[java_code] = false;
489c9b5090e2 Initial load
duke
parents:
diff changeset
   727
    }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   728
  }
489c9b5090e2 Initial load
duke
parents:
diff changeset
   729
}