* do_nothing_function, jit_compile, jit_compile_intern: Changed return type
[cacao.git] / src / vm / jit / jit.c
index 13195465291debf01886b588ff3b169c3682eddf..3666ce76fb4b16beed516cd3958870e1671e6f4f 100644 (file)
@@ -1,9 +1,9 @@
-/* jit/jit.c - calls the code generation functions
+/* src/vm/jit/jit.c - calls the code generation functions
 
-   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
-   R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser,
-   M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck,
-   P. Tomsich, J. Wenninger
+   Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
+   R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
+   C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
+   Institut f. Computersprachen - TU Wien
 
    This file is part of CACAO.
 
             Reinhard Grafl
 
    Changes: Edwin Steiner
+            Christian Thalinger
+           Christian Ullrich
 
-   $Id: jit.c 1530 2004-11-17 20:43:28Z christian $
+   $Id: jit.c 3744 2005-11-22 23:42:43Z twisti $
 
 */
 
 
-#include <stdlib.h>
-#include <string.h>
-#include "global.h"
-#include "tables.h"
-#include "loader.h"
-#include "builtin.h"
-#include "native.h"
-#include "asmpart.h"
-#include "codegen.h"
-#include "types.h"
-#include "options.h"
-#include "statistics.h"
-#include "jit/codegen.inc.h"
-#include "jit/inline.h"
-#include "jit/jit.h"
-#include "jit/parseRT.h"
-#include "jit/parse.h"
-#include "jit/stack.h"
-#include "jit/reg.h"
-#include "jit/typecheck.h"
-#include "threads/thread.h"
-#include "disass.h"
-#include "loop/loop.h"
-#include "loop/graph.h"
-#include "loop/analyze.h"
+#include "config.h"
+
+#include "vm/types.h"
+
+#include "mm/memory.h"
+#include "native/native.h"
 #include "toolbox/logging.h"
-#include "toolbox/memory.h"
-#include "types.h"
-#include <stdio.h>
+#include "vm/builtin.h"
+#include "vm/class.h"
+#include "vm/global.h"
+#include "vm/initialize.h"
+#include "vm/loader.h"
+#include "vm/method.h"
+#include "vm/options.h"
+#include "vm/statistics.h"
+#include "vm/tables.h"
+#include "vm/jit/asmpart.h"
+#include "vm/jit/codegen.inc.h"
+#include "vm/jit/disass.h"
+#include "vm/jit/jit.h"
+
+#ifdef LSRA
+# include "vm/jit/lsra.h"
+#endif
 
-/* global switches ************************************************************/
+#include "vm/jit/parse.h"
+#include "vm/jit/reg.h"
+#include "vm/jit/stack.h"
 
-int stackreq[256];
+#if defined(USE_INLINING)
+# include "vm/jit/inline/inline.h"
+# include "vm/jit/inline/parseRT.h"
+# include "vm/jit/inline/parseXTA.h"
+#endif
 
-                                
-#if defined(__I386__)
-/* these define if a method has ICMDs which use %edx or %ecx */
-bool method_uses_ecx;
-bool method_uses_edx;
+#include "vm/jit/loop/analyze.h"
+#include "vm/jit/loop/graph.h"
+#include "vm/jit/loop/loop.h"
+#include "vm/jit/verify/typecheck.h"
+
+#if defined(USE_THREADS)
+# if defined(NATIVE_THREADS)
+#  include "threads/native/threads.h"
+# else
+#  include "threads/green/threads.h"
+# endif
 #endif
 
 
+
+/* global switches ************************************************************/
+
+int stackreq[256];
+
+                                
 int jcommandsize[256] = {
 
 #define JAVA_NOP               0
@@ -85,7 +100,7 @@ int jcommandsize[256] = {
 #define ICMD_ACONST            1        /* val.a = constant                   */
        1,
 #define JAVA_ICONST_M1         2
-#define ICMD_NULLCHECKPOP      2
+#define ICMD_CHECKNULL         2
        1,
 #define JAVA_ICONST_0          3
 #define ICMD_ICONST            3        /* val.i = constant                   */
@@ -628,8 +643,8 @@ int jcommandsize[256] = {
 #define JAVA_INVOKEINTERFACE  185
 #define ICMD_INVOKEINTERFACE  185       /* val.a = method info pointer        */
        5,
-#define ICMD_CHECKASIZE       186       /*                                    */
-       1, /* unused */
+/* UNDEF186 */
+       1,
 #define JAVA_NEW              187
 #define ICMD_NEW              187       /* op1 = 1, val.a = class pointer     */
        3,
@@ -674,7 +689,7 @@ int jcommandsize[256] = {
        5,
 #define JAVA_BREAKPOINT       202
        1,
-#define ICMD_CHECKEXCEPTION   203
+/* UNDEF 203 */
        1,
 #define ICMD_IASTORECONST     204
        1,
@@ -692,9 +707,17 @@ int jcommandsize[256] = {
        1,
 #define ICMD_SASTORECONST     211
        1,
+#define ICMD_PUTSTATICCONST   212
+       1,
+#define ICMD_PUTFIELDCONST    213
+       1,
+#define ICMD_IMULPOW2         214
+       1,
+#define ICMD_LMULPOW2         215
+       1,
 
        /* unused */
-       1,1,1,1,1,1,1,1,
+                   1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,
        1,1,1,1,1,1,1,1,1,1,
@@ -703,639 +726,583 @@ int jcommandsize[256] = {
 
 
 char *icmd_names[256] = {
-       "NOP          ", /*               0 */
-       "ACONST       ", /*               1 */
-       "NULLCHECKPOP ", /* ICONST_M1     2 */
-       "ICONST       ", /*               3 */
-       "UNDEF4       ", /* ICONST_1      4 */
-       "IDIVPOW2     ", /* ICONST_2      5 */
-       "LDIVPOW2     ", /* ICONST_3      6 */
-       "UNDEF7       ", /* ICONST_4      7 */
-       "UNDEF8       ", /* ICONST_5      8 */
-       "LCONST       ", /*               9 */
-       "LCMPCONST    ", /* LCONST_1     10 */
-       "FCONST       ", /*              11 */
-       "UNDEF12      ", /* FCONST_1     12 */
-       "ELSE_ICONST  ", /* FCONST_2     13 */
-       "DCONST       ", /*              14 */
-       "IFEQ_ICONST  ", /* DCONST_1     15 */
-       "IFNE_ICONST  ", /* BIPUSH       16 */
-       "IFLT_ICONST  ", /* SIPUSH       17 */
-       "IFGE_ICONST  ", /* LDC1         18 */
-       "IFGT_ICONST  ", /* LDC2         19 */
-       "IFLE_ICONST  ", /* LDC2W        20 */
-       "ILOAD        ", /*              21 */
-       "LLOAD        ", /*              22 */
-       "FLOAD        ", /*              23 */
-       "DLOAD        ", /*              24 */
-       "ALOAD        ", /*              25 */
-       "IADDCONST    ", /* ILOAD_0      26 */
-       "ISUBCONST    ", /* ILOAD_1      27 */
-       "IMULCONST    ", /* ILOAD_2      28 */
-       "IANDCONST    ", /* ILOAD_3      29 */
-       "IORCONST     ", /* LLOAD_0      30 */
-       "IXORCONST    ", /* LLOAD_1      31 */
-       "ISHLCONST    ", /* LLOAD_2      32 */
-       "ISHRCONST    ", /* LLOAD_3      33 */
-       "IUSHRCONST   ", /* FLOAD_0      34 */
-       "IREMPOW2     ", /* FLOAD_1      35 */
-       "LADDCONST    ", /* FLOAD_2      36 */
-       "LSUBCONST    ", /* FLOAD_3      37 */
-       "LMULCONST    ", /* DLOAD_0      38 */
-       "LANDCONST    ", /* DLOAD_1      39 */
-       "LORCONST     ", /* DLOAD_2      40 */
-       "LXORCONST    ", /* DLOAD_3      41 */
-       "LSHLCONST    ", /* ALOAD_0      42 */
-       "LSHRCONST    ", /* ALOAD_1      43 */
-       "LUSHRCONST   ", /* ALOAD_2      44 */
-       "LREMPOW2     ", /* ALOAD_3      45 */
-       "IALOAD       ", /*              46 */
-       "LALOAD       ", /*              47 */
-       "FALOAD       ", /*              48 */
-       "DALOAD       ", /*              49 */
-       "AALOAD       ", /*              50 */
-       "BALOAD       ", /*              51 */
-       "CALOAD       ", /*              52 */
-       "SALOAD       ", /*              53 */
-       "ISTORE       ", /*              54 */
-       "LSTORE       ", /*              55 */
-       "FSTORE       ", /*              56 */
-       "DSTORE       ", /*              57 */
-       "ASTORE       ", /*              58 */
-       "IF_LEQ       ", /* ISTORE_0     59 */
-       "IF_LNE       ", /* ISTORE_1     60 */
-       "IF_LLT       ", /* ISTORE_2     61 */
-       "IF_LGE       ", /* ISTORE_3     62 */
-       "IF_LGT       ", /* LSTORE_0     63 */
-       "IF_LLE       ", /* LSTORE_1     64 */
-       "IF_LCMPEQ    ", /* LSTORE_2     65 */
-       "IF_LCMPNE    ", /* LSTORE_3     66 */
-       "IF_LCMPLT    ", /* FSTORE_0     67 */
-       "IF_LCMPGE    ", /* FSTORE_1     68 */
-       "IF_LCMPGT    ", /* FSTORE_2     69 */
-       "IF_LCMPLE    ", /* FSTORE_3     70 */
-       "UNDEF71      ", /* DSTORE_0     71 */
-       "UNDEF72      ", /* DSTORE_1     72 */
-       "UNDEF73      ", /* DSTORE_2     73 */
-       "UNDEF74      ", /* DSTORE_3     74 */
-       "UNDEF75      ", /* ASTORE_0     75 */
-       "UNDEF76      ", /* ASTORE_1     76 */
-       "UNDEF77      ", /* ASTORE_2     77 */
-       "UNDEF78      ", /* ASTORE_3     78 */
-       "IASTORE      ", /*              79 */
-       "LASTORE      ", /*              80 */
-       "FASTORE      ", /*              81 */
-       "DASTORE      ", /*              82 */
-       "AASTORE      ", /*              83 */
-       "BASTORE      ", /*              84 */
-       "CASTORE      ", /*              85 */
-       "SASTORE      ", /*              86 */
-       "POP          ", /*              87 */
-       "POP2         ", /*              88 */
-       "DUP          ", /*              89 */
-       "DUP_X1       ", /*              90 */
-       "DUP_X2       ", /*              91 */
-       "DUP2         ", /*              92 */
-       "DUP2_X1      ", /*              93 */
-       "DUP2_X2      ", /*              94 */
-       "SWAP         ", /*              95 */
-       "IADD         ", /*              96 */
-       "LADD         ", /*              97 */
-       "FADD         ", /*              98 */
-       "DADD         ", /*              99 */
-       "ISUB         ", /*             100 */
-       "LSUB         ", /*             101 */
-       "FSUB         ", /*             102 */
-       "DSUB         ", /*             103 */
-       "IMUL         ", /*             104 */
-       "LMUL         ", /*             105 */
-       "FMUL         ", /*             106 */
-       "DMUL         ", /*             107 */
-       "IDIV         ", /*             108 */
-       "LDIV         ", /*             109 */
-       "FDIV         ", /*             110 */
-       "DDIV         ", /*             111 */
-       "IREM         ", /*             112 */
-       "LREM         ", /*             113 */
-       "FREM         ", /*             114 */
-       "DREM         ", /*             115 */
-       "INEG         ", /*             116 */
-       "LNEG         ", /*             117 */
-       "FNEG         ", /*             118 */
-       "DNEG         ", /*             119 */
-       "ISHL         ", /*             120 */
-       "LSHL         ", /*             121 */
-       "ISHR         ", /*             122 */
-       "LSHR         ", /*             123 */
-       "IUSHR        ", /*             124 */
-       "LUSHR        ", /*             125 */
-       "IAND         ", /*             126 */
-       "LAND         ", /*             127 */
-       "IOR          ", /*             128 */
-       "LOR          ", /*             129 */
-       "IXOR         ", /*             130 */
-       "LXOR         ", /*             131 */
-       "IINC         ", /*             132 */
-       "I2L          ", /*             133 */
-       "I2F          ", /*             134 */
-       "I2D          ", /*             135 */
-       "L2I          ", /*             136 */
-       "L2F          ", /*             137 */
-       "L2D          ", /*             138 */
-       "F2I          ", /*             139 */
-       "F2L          ", /*             140 */
-       "F2D          ", /*             141 */
-       "D2I          ", /*             142 */
-       "D2L          ", /*             143 */
-       "D2F          ", /*             144 */
-       "INT2BYTE     ", /*             145 */
-       "INT2CHAR     ", /*             146 */
-       "INT2SHORT    ", /*             147 */
-       "LCMP         ", /*             148 */
-       "FCMPL        ", /*             149 */
-       "FCMPG        ", /*             150 */
-       "DCMPL        ", /*             151 */
-       "DCMPG        ", /*             152 */
-       "IFEQ         ", /*             153 */
-       "IFNE         ", /*             154 */
-       "IFLT         ", /*             155 */
-       "IFGE         ", /*             156 */
-       "IFGT         ", /*             157 */
-       "IFLE         ", /*             158 */
-       "IF_ICMPEQ    ", /*             159 */
-       "IF_ICMPNE    ", /*             160 */
-       "IF_ICMPLT    ", /*             161 */
-       "IF_ICMPGE    ", /*             162 */
-       "IF_ICMPGT    ", /*             163 */
-       "IF_ICMPLE    ", /*             164 */
-       "IF_ACMPEQ    ", /*             165 */
-       "IF_ACMPNE    ", /*             166 */
-       "GOTO         ", /*             167 */
-       "JSR          ", /*             168 */
-       "RET          ", /*             169 */
-       "TABLESWITCH  ", /*             170 */
-       "LOOKUPSWITCH ", /*             171 */
-       "IRETURN      ", /*             172 */
-       "LRETURN      ", /*             173 */
-       "FRETURN      ", /*             174 */
-       "DRETURN      ", /*             175 */
-       "ARETURN      ", /*             176 */
-       "RETURN       ", /*             177 */
-       "GETSTATIC    ", /*             178 */
-       "PUTSTATIC    ", /*             179 */
-       "GETFIELD     ", /*             180 */
-       "PUTFIELD     ", /*             181 */
-       "INVOKEVIRTUAL", /*             182 */
-       "INVOKESPECIAL", /*             183 */
-       "INVOKESTATIC ", /*             184 */
-       "INVOKEINTERFACE",/*            185 */
-       "CHECKASIZE   ", /* UNDEF186    186 */
-       "NEW          ", /*             187 */
-       "NEWARRAY     ", /*             188 */
-       "ANEWARRAY    ", /*             189 */
-       "ARRAYLENGTH  ", /*             190 */
-       "ATHROW       ", /*             191 */
-       "CHECKCAST    ", /*             192 */
-       "INSTANCEOF   ", /*             193 */
-       "MONITORENTER ", /*             194 */
-       "MONITOREXIT  ", /*             195 */
-       "UNDEF196     ", /* WIDE        196 */
-       "MULTIANEWARRAY",/*             197 */
-       "IFNULL       ", /*             198 */
-       "IFNONNULL    ", /*             199 */
-       "UNDEF200     ", /* GOTO_W      200 */
-       "UNDEF201     ", /* JSR_W       201 */
-       "UNDEF202     ", /* BREAKPOINT  202 */
-       "CHECKEXCEPTION", /* UNDEF203    203 */
-       "IASTORECONST ", /*             204 */
-       "LASTORECONST ", /*             205 */
-       "FASTORECONST ", /*             206 */
-       "DASTORECONST ", /*             207 */
-       "AASTORECONST ", /*             208 */
-       "BASTORECONST ", /*             209 */
-       "CASTORECONST ", /*             210 */
-       "SASTORECONST ", /*             211 */
-       "UNDEF","UNDEF","UNDEF","UNDEF",
-       "UNDEF216","UNDEF217","UNDEF218","UNDEF219","UNDEF220",
-       "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
-       "UNDEF226","UNDEF227","UNDEF228","UNDEF229","UNDEF230",
-       "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
-       "UNDEF236","UNDEF237","UNDEF238","UNDEF239","UNDEF240",
-       "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
-       "UNDEF246","UNDEF247","UNDEF248","UNDEF249","UNDEF250",
-
-       "INLINE_START", /*          251 */
-        "INLINE_END", /*            252"*/
-
-       "BUILTIN3     ", /*             253 */
-       "BUILTIN2     ", /*             254 */
-       "BUILTIN1     "  /*             255 */
+       "NOP            ", /*               0 */
+       "ACONST         ", /*               1 */
+       "CHECKNULL      ", /* ICONST_M1     2 */
+       "ICONST         ", /*               3 */
+       "UNDEF4         ", /* ICONST_1      4 */
+       "IDIVPOW2       ", /* ICONST_2      5 */
+       "LDIVPOW2       ", /* ICONST_3      6 */
+       "UNDEF7         ", /* ICONST_4      7 */
+       "UNDEF8         ", /* ICONST_5      8 */
+       "LCONST         ", /*               9 */
+       "LCMPCONST      ", /* LCONST_1     10 */
+       "FCONST         ", /*              11 */
+       "UNDEF12        ", /* FCONST_1     12 */
+       "ELSE_ICONST    ", /* FCONST_2     13 */
+       "DCONST         ", /*              14 */
+       "IFEQ_ICONST    ", /* DCONST_1     15 */
+       "IFNE_ICONST    ", /* BIPUSH       16 */
+       "IFLT_ICONST    ", /* SIPUSH       17 */
+       "IFGE_ICONST    ", /* LDC1         18 */
+       "IFGT_ICONST    ", /* LDC2         19 */
+       "IFLE_ICONST    ", /* LDC2W        20 */
+       "ILOAD          ", /*              21 */
+       "LLOAD          ", /*              22 */
+       "FLOAD          ", /*              23 */
+       "DLOAD          ", /*              24 */
+       "ALOAD          ", /*              25 */
+       "IADDCONST      ", /* ILOAD_0      26 */
+       "ISUBCONST      ", /* ILOAD_1      27 */
+       "IMULCONST      ", /* ILOAD_2      28 */
+       "IANDCONST      ", /* ILOAD_3      29 */
+       "IORCONST       ", /* LLOAD_0      30 */
+       "IXORCONST      ", /* LLOAD_1      31 */
+       "ISHLCONST      ", /* LLOAD_2      32 */
+       "ISHRCONST      ", /* LLOAD_3      33 */
+       "IUSHRCONST     ", /* FLOAD_0      34 */
+       "IREMPOW2       ", /* FLOAD_1      35 */
+       "LADDCONST      ", /* FLOAD_2      36 */
+       "LSUBCONST      ", /* FLOAD_3      37 */
+       "LMULCONST      ", /* DLOAD_0      38 */
+       "LANDCONST      ", /* DLOAD_1      39 */
+       "LORCONST       ", /* DLOAD_2      40 */
+       "LXORCONST      ", /* DLOAD_3      41 */
+       "LSHLCONST      ", /* ALOAD_0      42 */
+       "LSHRCONST      ", /* ALOAD_1      43 */
+       "LUSHRCONST     ", /* ALOAD_2      44 */
+       "LREMPOW2       ", /* ALOAD_3      45 */
+       "IALOAD         ", /*              46 */
+       "LALOAD         ", /*              47 */
+       "FALOAD         ", /*              48 */
+       "DALOAD         ", /*              49 */
+       "AALOAD         ", /*              50 */
+       "BALOAD         ", /*              51 */
+       "CALOAD         ", /*              52 */
+       "SALOAD         ", /*              53 */
+       "ISTORE         ", /*              54 */
+       "LSTORE         ", /*              55 */
+       "FSTORE         ", /*              56 */
+       "DSTORE         ", /*              57 */
+       "ASTORE         ", /*              58 */
+       "IF_LEQ         ", /* ISTORE_0     59 */
+       "IF_LNE         ", /* ISTORE_1     60 */
+       "IF_LLT         ", /* ISTORE_2     61 */
+       "IF_LGE         ", /* ISTORE_3     62 */
+       "IF_LGT         ", /* LSTORE_0     63 */
+       "IF_LLE         ", /* LSTORE_1     64 */
+       "IF_LCMPEQ      ", /* LSTORE_2     65 */
+       "IF_LCMPNE      ", /* LSTORE_3     66 */
+       "IF_LCMPLT      ", /* FSTORE_0     67 */
+       "IF_LCMPGE      ", /* FSTORE_1     68 */
+       "IF_LCMPGT      ", /* FSTORE_2     69 */
+       "IF_LCMPLE      ", /* FSTORE_3     70 */
+       "UNDEF71        ", /* DSTORE_0     71 */
+       "UNDEF72        ", /* DSTORE_1     72 */
+       "UNDEF73        ", /* DSTORE_2     73 */
+       "UNDEF74        ", /* DSTORE_3     74 */
+       "UNDEF75        ", /* ASTORE_0     75 */
+       "UNDEF76        ", /* ASTORE_1     76 */
+       "UNDEF77        ", /* ASTORE_2     77 */
+       "UNDEF78        ", /* ASTORE_3     78 */
+       "IASTORE        ", /*              79 */
+       "LASTORE        ", /*              80 */
+       "FASTORE        ", /*              81 */
+       "DASTORE        ", /*              82 */
+       "AASTORE        ", /*              83 */
+       "BASTORE        ", /*              84 */
+       "CASTORE        ", /*              85 */
+       "SASTORE        ", /*              86 */
+       "POP            ", /*              87 */
+       "POP2           ", /*              88 */
+       "DUP            ", /*              89 */
+       "DUP_X1         ", /*              90 */
+       "DUP_X2         ", /*              91 */
+       "DUP2           ", /*              92 */
+       "DUP2_X1        ", /*              93 */
+       "DUP2_X2        ", /*              94 */
+       "SWAP           ", /*              95 */
+       "IADD           ", /*              96 */
+       "LADD           ", /*              97 */
+       "FADD           ", /*              98 */
+       "DADD           ", /*              99 */
+       "ISUB           ", /*             100 */
+       "LSUB           ", /*             101 */
+       "FSUB           ", /*             102 */
+       "DSUB           ", /*             103 */
+       "IMUL           ", /*             104 */
+       "LMUL           ", /*             105 */
+       "FMUL           ", /*             106 */
+       "DMUL           ", /*             107 */
+       "IDIV           ", /*             108 */
+       "LDIV           ", /*             109 */
+       "FDIV           ", /*             110 */
+       "DDIV           ", /*             111 */
+       "IREM           ", /*             112 */
+       "LREM           ", /*             113 */
+       "FREM           ", /*             114 */
+       "DREM           ", /*             115 */
+       "INEG           ", /*             116 */
+       "LNEG           ", /*             117 */
+       "FNEG           ", /*             118 */
+       "DNEG           ", /*             119 */
+       "ISHL           ", /*             120 */
+       "LSHL           ", /*             121 */
+       "ISHR           ", /*             122 */
+       "LSHR           ", /*             123 */
+       "IUSHR          ", /*             124 */
+       "LUSHR          ", /*             125 */
+       "IAND           ", /*             126 */
+       "LAND           ", /*             127 */
+       "IOR            ", /*             128 */
+       "LOR            ", /*             129 */
+       "IXOR           ", /*             130 */
+       "LXOR           ", /*             131 */
+       "IINC           ", /*             132 */
+       "I2L            ", /*             133 */
+       "I2F            ", /*             134 */
+       "I2D            ", /*             135 */
+       "L2I            ", /*             136 */
+       "L2F            ", /*             137 */
+       "L2D            ", /*             138 */
+       "F2I            ", /*             139 */
+       "F2L            ", /*             140 */
+       "F2D            ", /*             141 */
+       "D2I            ", /*             142 */
+       "D2L            ", /*             143 */
+       "D2F            ", /*             144 */
+       "INT2BYTE       ", /*             145 */
+       "INT2CHAR       ", /*             146 */
+       "INT2SHORT      ", /*             147 */
+       "LCMP           ", /*             148 */
+       "FCMPL          ", /*             149 */
+       "FCMPG          ", /*             150 */
+       "DCMPL          ", /*             151 */
+       "DCMPG          ", /*             152 */
+       "IFEQ           ", /*             153 */
+       "IFNE           ", /*             154 */
+       "IFLT           ", /*             155 */
+       "IFGE           ", /*             156 */
+       "IFGT           ", /*             157 */
+       "IFLE           ", /*             158 */
+       "IF_ICMPEQ      ", /*             159 */
+       "IF_ICMPNE      ", /*             160 */
+       "IF_ICMPLT      ", /*             161 */
+       "IF_ICMPGE      ", /*             162 */
+       "IF_ICMPGT      ", /*             163 */
+       "IF_ICMPLE      ", /*             164 */
+       "IF_ACMPEQ      ", /*             165 */
+       "IF_ACMPNE      ", /*             166 */
+       "GOTO           ", /*             167 */
+       "JSR            ", /*             168 */
+       "RET            ", /*             169 */
+       "TABLESWITCH    ", /*             170 */
+       "LOOKUPSWITCH   ", /*             171 */
+       "IRETURN        ", /*             172 */
+       "LRETURN        ", /*             173 */
+       "FRETURN        ", /*             174 */
+       "DRETURN        ", /*             175 */
+       "ARETURN        ", /*             176 */
+       "RETURN         ", /*             177 */
+       "GETSTATIC      ", /*             178 */
+       "PUTSTATIC      ", /*             179 */
+       "GETFIELD       ", /*             180 */
+       "PUTFIELD       ", /*             181 */
+       "INVOKEVIRTUAL  ", /*             182 */
+       "INVOKESPECIAL  ", /*             183 */
+       "INVOKESTATIC   ", /*             184 */
+       "INVOKEINTERFACE", /*             185 */
+       "UNDEF186       ", /* UNDEF186    186 */
+       "NEW            ", /*             187 */
+       "NEWARRAY       ", /*             188 */
+       "ANEWARRAY      ", /*             189 */
+       "ARRAYLENGTH    ", /*             190 */
+       "ATHROW         ", /*             191 */
+       "CHECKCAST      ", /*             192 */
+       "INSTANCEOF     ", /*             193 */
+       "MONITORENTER   ", /*             194 */
+       "MONITOREXIT    ", /*             195 */
+       "UNDEF196       ", /* WIDE        196 */
+       "MULTIANEWARRAY ", /*             197 */
+       "IFNULL         ", /*             198 */
+       "IFNONNULL      ", /*             199 */
+       "UNDEF200       ", /* GOTO_W      200 */
+       "UNDEF201       ", /* JSR_W       201 */
+       "UNDEF202       ", /* BREAKPOINT  202 */
+       "UNDEF203       ", /* UNDEF203    203 */
+       "IASTORECONST   ", /*             204 */
+       "LASTORECONST   ", /*             205 */
+       "FASTORECONST   ", /*             206 */
+       "DASTORECONST   ", /*             207 */
+       "AASTORECONST   ", /*             208 */
+       "BASTORECONST   ", /*             209 */
+       "CASTORECONST   ", /*             210 */
+       "SASTORECONST   ", /*             211 */
+       "PUTSTATICCONST ", /*             212 */
+       "PUTFIELDCONST  ", /*             213 */
+       "IMULPOW2       ", /*             214 */
+       "LMULPOW2       ", /*             215 */
+
+       "UNDEF216", "UNDEF217", "UNDEF218", "UNDEF219", "UNDEF220",
+       "UNDEF221", "UNDEF222", "UNDEF223", "UNDEF224", "UNDEF225",
+       "UNDEF226", "UNDEF227", "UNDEF228", "UNDEF229", "UNDEF230",
+       "UNDEF231", "UNDEF232", "UNDEF233", "UNDEF234", "UNDEF235",
+       "UNDEF236", "UNDEF237", "UNDEF238", "UNDEF239", "UNDEF240",
+       "UNDEF241", "UNDEF242", "UNDEF243", "UNDEF244", "UNDEF245",
+       "UNDEF246", "UNDEF247", "UNDEF248", "UNDEF249", "UNDEF250",
+
+       "INLINE_START   ", /*             251 */
+       "INLINE_END     ", /*             252 */
+
+       "UNDEF253", "UNDEF254",
+
+       "BUILTIN        "  /*             255 */
 };
 
 
 char *opcode_names[256] = {
-       "NOP          ", /*               0 */
-       "ACONST       ", /*               1 */
-       "ICONST_M1    ", /* ICONST_M1     2 */
-       "ICONST_0     ", /* ICONST_0      3 */
-       "ICONST_1     ", /* ICONST_1      4 */
-       "ICONST_2     ", /* ICONST_2      5 */
-       "ICONST_3     ", /* ICONST_3      6 */
-       "ICONST_4     ", /* ICONST_4      7 */
-       "ICONST_5     ", /* ICONST_5      8 */
-       "LCONST_0     ", /* LCONST_0      9 */
-       "LCONST_1     ", /* LCONST_1     10 */
-       "FCONST_0     ", /* FCONST_0     11 */
-       "FCONST_1     ", /* FCONST_1     12 */
-       "FCONST_2     ", /* FCONST_2     13 */
-       "DCONST_0     ", /* DCONST_0     14 */
-       "DCONST_1     ", /* DCONST_1     15 */
-       "BIPUSH       ", /* BIPUSH       16 */
-       "SIPUSH       ", /* SIPUSH       17 */
-       "LDC          ", /* LDC          18 */
-       "LDC_W        ", /* LDC_W        19 */
-       "LDC2_W       ", /* LDC2_W       20 */
-       "ILOAD        ", /*              21 */
-       "LLOAD        ", /*              22 */
-       "FLOAD        ", /*              23 */
-       "DLOAD        ", /*              24 */
-       "ALOAD        ", /*              25 */
-       "ILOAD_0      ", /* ILOAD_0      26 */
-       "ILOAD_1      ", /* ILOAD_1      27 */
-       "ILOAD_2      ", /* ILOAD_2      28 */
-       "ILOAD_3      ", /* ILOAD_3      29 */
-       "LLOAD_0      ", /* LLOAD_0      30 */
-       "LLOAD_1      ", /* LLOAD_1      31 */
-       "LLOAD_2      ", /* LLOAD_2      32 */
-       "LLOAD_3      ", /* LLOAD_3      33 */
-       "FLOAD_0      ", /* FLOAD_0      34 */
-       "FLOAD_1      ", /* FLOAD_1      35 */
-       "FLOAD_2      ", /* FLOAD_2      36 */
-       "FLOAD_3      ", /* FLOAD_3      37 */
-       "DLOAD_0      ", /* DLOAD_0      38 */
-       "DLOAD_1      ", /* DLOAD_1      39 */
-       "DLOAD_2      ", /* DLOAD_2      40 */ 
-       "DLOAD_3      ", /* DLOAD_3      41 */
-       "ALOAD_0      ", /* ALOAD_0      42 */
-       "ALOAD_1      ", /* ALOAD_1      43 */
-       "ALOAD_2      ", /* ALOAD_2      44 */
-       "ALOAD_3      ", /* ALOAD_3      45 */
-       "IALOAD       ", /*              46 */
-       "LALOAD       ", /*              47 */
-       "FALOAD       ", /*              48 */
-       "DALOAD       ", /*              49 */
-       "AALOAD       ", /*              50 */
-       "BALOAD       ", /*              51 */
-       "CALOAD       ", /*              52 */
-       "SALOAD       ", /*              53 */
-       "ISTORE       ", /*              54 */
-       "LSTORE       ", /*              55 */
-       "FSTORE       ", /*              56 */
-       "DSTORE       ", /*              57 */
-       "ASTORE       ", /*              58 */
-       "ISTORE_0     ", /* ISTORE_0     59 */
-       "ISTORE_1     ", /* ISTORE_1     60 */
-       "ISTORE_2     ", /* ISTORE_2     61 */
-       "ISTORE_3     ", /* ISTORE_3     62 */
-       "LSTORE_0     ", /* LSTORE_0     63 */
-       "LSTORE_1     ", /* LSTORE_1     64 */
-       "LSTORE_2     ", /* LSTORE_2     65 */
-       "LSTORE_3     ", /* LSTORE_3     66 */
-       "FSTORE_0     ", /* FSTORE_0     67 */
-       "FSTORE_1     ", /* FSTORE_1     68 */
-       "FSTORE_2     ", /* FSTORE_2     69 */
-       "FSTORE_3     ", /* FSTORE_3     70 */
-       "DSTORE_0     ", /* DSTORE_0     71 */
-       "DSTORE_1     ", /* DSTORE_1     72 */
-       "DSTORE_2     ", /* DSTORE_2     73 */
-       "DSTORE_3     ", /* DSTORE_3     74 */
-       "ASTORE_0     ", /* ASTORE_0     75 */
-       "ASTORE_1     ", /* ASTORE_1     76 */
-       "ASTORE_2     ", /* ASTORE_2     77 */
-       "ASTORE_3     ", /* ASTORE_3     78 */
-       "IASTORE      ", /*              79 */
-       "LASTORE      ", /*              80 */
-       "FASTORE      ", /*              81 */
-       "DASTORE      ", /*              82 */
-       "AASTORE      ", /*              83 */
-       "BASTORE      ", /*              84 */
-       "CASTORE      ", /*              85 */
-       "SASTORE      ", /*              86 */
-       "POP          ", /*              87 */
-       "POP2         ", /*              88 */
-       "DUP          ", /*              89 */
-       "DUP_X1       ", /*              90 */
-       "DUP_X2       ", /*              91 */
-       "DUP2         ", /*              92 */
-       "DUP2_X1      ", /*              93 */
-       "DUP2_X2      ", /*              94 */
-       "SWAP         ", /*              95 */
-       "IADD         ", /*              96 */
-       "LADD         ", /*              97 */
-       "FADD         ", /*              98 */
-       "DADD         ", /*              99 */
-       "ISUB         ", /*             100 */
-       "LSUB         ", /*             101 */
-       "FSUB         ", /*             102 */
-       "DSUB         ", /*             103 */
-       "IMUL         ", /*             104 */
-       "LMUL         ", /*             105 */
-       "FMUL         ", /*             106 */
-       "DMUL         ", /*             107 */
-       "IDIV         ", /*             108 */
-       "LDIV         ", /*             109 */
-       "FDIV         ", /*             110 */
-       "DDIV         ", /*             111 */
-       "IREM         ", /*             112 */
-       "LREM         ", /*             113 */
-       "FREM         ", /*             114 */
-       "DREM         ", /*             115 */
-       "INEG         ", /*             116 */
-       "LNEG         ", /*             117 */
-       "FNEG         ", /*             118 */
-       "DNEG         ", /*             119 */
-       "ISHL         ", /*             120 */
-       "LSHL         ", /*             121 */
-       "ISHR         ", /*             122 */
-       "LSHR         ", /*             123 */
-       "IUSHR        ", /*             124 */
-       "LUSHR        ", /*             125 */
-       "IAND         ", /*             126 */
-       "LAND         ", /*             127 */
-       "IOR          ", /*             128 */
-       "LOR          ", /*             129 */
-       "IXOR         ", /*             130 */
-       "LXOR         ", /*             131 */
-       "IINC         ", /*             132 */
-       "I2L          ", /*             133 */
-       "I2F          ", /*             134 */
-       "I2D          ", /*             135 */
-       "L2I          ", /*             136 */
-       "L2F          ", /*             137 */
-       "L2D          ", /*             138 */
-       "F2I          ", /*             139 */
-       "F2L          ", /*             140 */
-       "F2D          ", /*             141 */
-       "D2I          ", /*             142 */
-       "D2L          ", /*             143 */
-       "D2F          ", /*             144 */
-       "INT2BYTE     ", /*             145 */
-       "INT2CHAR     ", /*             146 */
-       "INT2SHORT    ", /*             147 */
-       "LCMP         ", /*             148 */
-       "FCMPL        ", /*             149 */
-       "FCMPG        ", /*             150 */
-       "DCMPL        ", /*             151 */
-       "DCMPG        ", /*             152 */
-       "IFEQ         ", /*             153 */
-       "IFNE         ", /*             154 */
-       "IFLT         ", /*             155 */
-       "IFGE         ", /*             156 */
-       "IFGT         ", /*             157 */
-       "IFLE         ", /*             158 */
-       "IF_ICMPEQ    ", /*             159 */
-       "IF_ICMPNE    ", /*             160 */
-       "IF_ICMPLT    ", /*             161 */
-       "IF_ICMPGE    ", /*             162 */
-       "IF_ICMPGT    ", /*             163 */
-       "IF_ICMPLE    ", /*             164 */
-       "IF_ACMPEQ    ", /*             165 */
-       "IF_ACMPNE    ", /*             166 */
-       "GOTO         ", /*             167 */
-       "JSR          ", /*             168 */
-       "RET          ", /*             169 */
-       "TABLESWITCH  ", /*             170 */
-       "LOOKUPSWITCH ", /*             171 */
-       "IRETURN      ", /*             172 */
-       "LRETURN      ", /*             173 */
-       "FRETURN      ", /*             174 */
-       "DRETURN      ", /*             175 */
-       "ARETURN      ", /*             176 */
-       "RETURN       ", /*             177 */
-       "GETSTATIC    ", /*             178 */
-       "PUTSTATIC    ", /*             179 */
-       "GETFIELD     ", /*             180 */
-       "PUTFIELD     ", /*             181 */
-       "INVOKEVIRTUAL", /*             182 */
-       "INVOKESPECIAL", /*             183 */
-       "INVOKESTATIC ", /*             184 */
-       "INVOKEINTERFACE",/*            185 */
-       "CHECKASIZE   ", /* UNDEF186    186 */
-       "NEW          ", /*             187 */
-       "NEWARRAY     ", /*             188 */
-       "ANEWARRAY    ", /*             189 */
-       "ARRAYLENGTH  ", /*             190 */
-       "ATHROW       ", /*             191 */
-       "CHECKCAST    ", /*             192 */
-       "INSTANCEOF   ", /*             193 */
-       "MONITORENTER ", /*             194 */
-       "MONITOREXIT  ", /*             195 */
-       "WIDE         ", /* WIDE        196 */
-       "MULTIANEWARRAY",/*             197 */
-       "IFNULL       ", /*             198 */
-       "IFNONNULL    ", /*             199 */
-       "GOTO_W       ", /* GOTO_W      200 */
-       "JSR_W        ", /* JSR_W       201 */
-       "BREAKPOINT   ", /* BREAKPOINT  202 */
-       "CHECKEXCEPTION", /* UNDEF203    203 */
-       "IASTORECONST ", /*             204 */
-       "LASTORECONST ", /*             205 */
-       "FASTORECONST ", /*             206 */
-       "DASTORECONST ", /*             207 */
-       "AASTORECONST ", /*             208 */
-       "BASTORECONST ", /*             209 */
-       "CASTORECONST ", /*             210 */
-       "SASTORECONST ", /*             211 */
-       "UNDEF","UNDEF","UNDEF","UNDEF",
-       "UNDEF216","UNDEF217","UNDEF218","UNDEF219","UNDEF220",
-       "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
-       "UNDEF226","UNDEF227","UNDEF228","UNDEF229","UNDEF230",
-       "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
-       "UNDEF236","UNDEF237","UNDEF238","UNDEF239","UNDEF240",
-       "UNDEF","UNDEF","UNDEF","UNDEF","UNDEF",
-       "UNDEF246","UNDEF247","UNDEF248","UNDEF249","UNDEF250",
-
-       "INLINE_START", /*              251 */
-        "INLINE_END",  /*               252 */
-       "BUILTIN3     ", /*             253 */
-       "BUILTIN2     ", /*             254 */
-       "BUILTIN1     "  /*             255 */
+       "NOP            ", /*               0 */
+       "ACONST         ", /*               1 */
+       "ICONST_M1      ", /* ICONST_M1     2 */
+       "ICONST_0       ", /* ICONST_0      3 */
+       "ICONST_1       ", /* ICONST_1      4 */
+       "ICONST_2       ", /* ICONST_2      5 */
+       "ICONST_3       ", /* ICONST_3      6 */
+       "ICONST_4       ", /* ICONST_4      7 */
+       "ICONST_5       ", /* ICONST_5      8 */
+       "LCONST_0       ", /* LCONST_0      9 */
+       "LCONST_1       ", /* LCONST_1     10 */
+       "FCONST_0       ", /* FCONST_0     11 */
+       "FCONST_1       ", /* FCONST_1     12 */
+       "FCONST_2       ", /* FCONST_2     13 */
+       "DCONST_0       ", /* DCONST_0     14 */
+       "DCONST_1       ", /* DCONST_1     15 */
+       "BIPUSH         ", /* BIPUSH       16 */
+       "SIPUSH         ", /* SIPUSH       17 */
+       "LDC            ", /* LDC          18 */
+       "LDC_W          ", /* LDC_W        19 */
+       "LDC2_W         ", /* LDC2_W       20 */
+       "ILOAD          ", /*              21 */
+       "LLOAD          ", /*              22 */
+       "FLOAD          ", /*              23 */
+       "DLOAD          ", /*              24 */
+       "ALOAD          ", /*              25 */
+       "ILOAD_0        ", /* ILOAD_0      26 */
+       "ILOAD_1        ", /* ILOAD_1      27 */
+       "ILOAD_2        ", /* ILOAD_2      28 */
+       "ILOAD_3        ", /* ILOAD_3      29 */
+       "LLOAD_0        ", /* LLOAD_0      30 */
+       "LLOAD_1        ", /* LLOAD_1      31 */
+       "LLOAD_2        ", /* LLOAD_2      32 */
+       "LLOAD_3        ", /* LLOAD_3      33 */
+       "FLOAD_0        ", /* FLOAD_0      34 */
+       "FLOAD_1        ", /* FLOAD_1      35 */
+       "FLOAD_2        ", /* FLOAD_2      36 */
+       "FLOAD_3        ", /* FLOAD_3      37 */
+       "DLOAD_0        ", /* DLOAD_0      38 */
+       "DLOAD_1        ", /* DLOAD_1      39 */
+       "DLOAD_2        ", /* DLOAD_2      40 */ 
+       "DLOAD_3        ", /* DLOAD_3      41 */
+       "ALOAD_0        ", /* ALOAD_0      42 */
+       "ALOAD_1        ", /* ALOAD_1      43 */
+       "ALOAD_2        ", /* ALOAD_2      44 */
+       "ALOAD_3        ", /* ALOAD_3      45 */
+       "IALOAD         ", /*              46 */
+       "LALOAD         ", /*              47 */
+       "FALOAD         ", /*              48 */
+       "DALOAD         ", /*              49 */
+       "AALOAD         ", /*              50 */
+       "BALOAD         ", /*              51 */
+       "CALOAD         ", /*              52 */
+       "SALOAD         ", /*              53 */
+       "ISTORE         ", /*              54 */
+       "LSTORE         ", /*              55 */
+       "FSTORE         ", /*              56 */
+       "DSTORE         ", /*              57 */
+       "ASTORE         ", /*              58 */
+       "ISTORE_0       ", /* ISTORE_0     59 */
+       "ISTORE_1       ", /* ISTORE_1     60 */
+       "ISTORE_2       ", /* ISTORE_2     61 */
+       "ISTORE_3       ", /* ISTORE_3     62 */
+       "LSTORE_0       ", /* LSTORE_0     63 */
+       "LSTORE_1       ", /* LSTORE_1     64 */
+       "LSTORE_2       ", /* LSTORE_2     65 */
+       "LSTORE_3       ", /* LSTORE_3     66 */
+       "FSTORE_0       ", /* FSTORE_0     67 */
+       "FSTORE_1       ", /* FSTORE_1     68 */
+       "FSTORE_2       ", /* FSTORE_2     69 */
+       "FSTORE_3       ", /* FSTORE_3     70 */
+       "DSTORE_0       ", /* DSTORE_0     71 */
+       "DSTORE_1       ", /* DSTORE_1     72 */
+       "DSTORE_2       ", /* DSTORE_2     73 */
+       "DSTORE_3       ", /* DSTORE_3     74 */
+       "ASTORE_0       ", /* ASTORE_0     75 */
+       "ASTORE_1       ", /* ASTORE_1     76 */
+       "ASTORE_2       ", /* ASTORE_2     77 */
+       "ASTORE_3       ", /* ASTORE_3     78 */
+       "IASTORE        ", /*              79 */
+       "LASTORE        ", /*              80 */
+       "FASTORE        ", /*              81 */
+       "DASTORE        ", /*              82 */
+       "AASTORE        ", /*              83 */
+       "BASTORE        ", /*              84 */
+       "CASTORE        ", /*              85 */
+       "SASTORE        ", /*              86 */
+       "POP            ", /*              87 */
+       "POP2           ", /*              88 */
+       "DUP            ", /*              89 */
+       "DUP_X1         ", /*              90 */
+       "DUP_X2         ", /*              91 */
+       "DUP2           ", /*              92 */
+       "DUP2_X1        ", /*              93 */
+       "DUP2_X2        ", /*              94 */
+       "SWAP           ", /*              95 */
+       "IADD           ", /*              96 */
+       "LADD           ", /*              97 */
+       "FADD           ", /*              98 */
+       "DADD           ", /*              99 */
+       "ISUB           ", /*             100 */
+       "LSUB           ", /*             101 */
+       "FSUB           ", /*             102 */
+       "DSUB           ", /*             103 */
+       "IMUL           ", /*             104 */
+       "LMUL           ", /*             105 */
+       "FMUL           ", /*             106 */
+       "DMUL           ", /*             107 */
+       "IDIV           ", /*             108 */
+       "LDIV           ", /*             109 */
+       "FDIV           ", /*             110 */
+       "DDIV           ", /*             111 */
+       "IREM           ", /*             112 */
+       "LREM           ", /*             113 */
+       "FREM           ", /*             114 */
+       "DREM           ", /*             115 */
+       "INEG           ", /*             116 */
+       "LNEG           ", /*             117 */
+       "FNEG           ", /*             118 */
+       "DNEG           ", /*             119 */
+       "ISHL           ", /*             120 */
+       "LSHL           ", /*             121 */
+       "ISHR           ", /*             122 */
+       "LSHR           ", /*             123 */
+       "IUSHR          ", /*             124 */
+       "LUSHR          ", /*             125 */
+       "IAND           ", /*             126 */
+       "LAND           ", /*             127 */
+       "IOR            ", /*             128 */
+       "LOR            ", /*             129 */
+       "IXOR           ", /*             130 */
+       "LXOR           ", /*             131 */
+       "IINC           ", /*             132 */
+       "I2L            ", /*             133 */
+       "I2F            ", /*             134 */
+       "I2D            ", /*             135 */
+       "L2I            ", /*             136 */
+       "L2F            ", /*             137 */
+       "L2D            ", /*             138 */
+       "F2I            ", /*             139 */
+       "F2L            ", /*             140 */
+       "F2D            ", /*             141 */
+       "D2I            ", /*             142 */
+       "D2L            ", /*             143 */
+       "D2F            ", /*             144 */
+       "INT2BYTE       ", /*             145 */
+       "INT2CHAR       ", /*             146 */
+       "INT2SHORT      ", /*             147 */
+       "LCMP           ", /*             148 */
+       "FCMPL          ", /*             149 */
+       "FCMPG          ", /*             150 */
+       "DCMPL          ", /*             151 */
+       "DCMPG          ", /*             152 */
+       "IFEQ           ", /*             153 */
+       "IFNE           ", /*             154 */
+       "IFLT           ", /*             155 */
+       "IFGE           ", /*             156 */
+       "IFGT           ", /*             157 */
+       "IFLE           ", /*             158 */
+       "IF_ICMPEQ      ", /*             159 */
+       "IF_ICMPNE      ", /*             160 */
+       "IF_ICMPLT      ", /*             161 */
+       "IF_ICMPGE      ", /*             162 */
+       "IF_ICMPGT      ", /*             163 */
+       "IF_ICMPLE      ", /*             164 */
+       "IF_ACMPEQ      ", /*             165 */
+       "IF_ACMPNE      ", /*             166 */
+       "GOTO           ", /*             167 */
+       "JSR            ", /*             168 */
+       "RET            ", /*             169 */
+       "TABLESWITCH    ", /*             170 */
+       "LOOKUPSWITCH   ", /*             171 */
+       "IRETURN        ", /*             172 */
+       "LRETURN        ", /*             173 */
+       "FRETURN        ", /*             174 */
+       "DRETURN        ", /*             175 */
+       "ARETURN        ", /*             176 */
+       "RETURN         ", /*             177 */
+       "GETSTATIC      ", /*             178 */
+       "PUTSTATIC      ", /*             179 */
+       "GETFIELD       ", /*             180 */
+       "PUTFIELD       ", /*             181 */
+       "INVOKEVIRTUAL  ", /*             182 */
+       "INVOKESPECIAL  ", /*             183 */
+       "INVOKESTATIC   ", /*             184 */
+       "INVOKEINTERFACE", /*             185 */
+       "UNDEF186       ", /*             186 */
+       "NEW            ", /*             187 */
+       "NEWARRAY       ", /*             188 */
+       "ANEWARRAY      ", /*             189 */
+       "ARRAYLENGTH    ", /*             190 */
+       "ATHROW         ", /*             191 */
+       "CHECKCAST      ", /*             192 */
+       "INSTANCEOF     ", /*             193 */
+       "MONITORENTER   ", /*             194 */
+       "MONITOREXIT    ", /*             195 */
+       "WIDE           ", /* WIDE        196 */
+       "MULTIANEWARRAY ", /*             197 */
+       "IFNULL         ", /*             198 */
+       "IFNONNULL      ", /*             199 */
+       "GOTO_W         ", /* GOTO_W      200 */
+       "JSR_W          ", /* JSR_W       201 */
+       "BREAKPOINT     ", /* BREAKPOINT  202 */
+
+                               "UNDEF203", "UNDEF204", "UNDEF205",
+       "UNDEF206", "UNDEF207", "UNDEF208", "UNDEF209", "UNDEF210",
+       "UNDEF211", "UNDEF212", "UNDEF213", "UNDEF214", "UNDEF215",
+       "UNDEF216", "UNDEF217", "UNDEF218", "UNDEF219", "UNDEF220",
+       "UNDEF221", "UNDEF222", "UNDEF223", "UNDEF224", "UNDEF225",
+       "UNDEF226", "UNDEF227", "UNDEF228", "UNDEF229", "UNDEF230",
+       "UNDEF231", "UNDEF232", "UNDEF233", "UNDEF234", "UNDEF235",
+       "UNDEF236", "UNDEF237", "UNDEF238", "UNDEF239", "UNDEF240",
+       "UNDEF241", "UNDEF242", "UNDEF243", "UNDEF244", "UNDEF245",
+       "UNDEF246", "UNDEF247", "UNDEF248", "UNDEF249", "UNDEF250",
+       "UNDEF251", "UNDEF252", "UNDEF253", "UNDEF254", "UNDEF255"
 };
 
 
-#if defined(USEBUILTINTABLE)
-
-#if 0
-stdopdescriptor builtintable[] = {
-       { ICMD_LCMP,   TYPE_LONG, TYPE_LONG, TYPE_INT, ICMD_BUILTIN2,
-         (functionptr) builtin_lcmp , SUPPORT_LONG && SUPPORT_LONG_CMP, false },
-       { ICMD_LAND,   TYPE_LONG, TYPE_LONG, TYPE_LONG, ICMD_BUILTIN2,
-         (functionptr) builtin_land , SUPPORT_LONG && SUPPORT_LONG_LOG, false },
-       { ICMD_LOR,    TYPE_LONG, TYPE_LONG, TYPE_LONG, ICMD_BUILTIN2,
-         (functionptr) builtin_lor , SUPPORT_LONG && SUPPORT_LONG_LOG, false },
-       { ICMD_LXOR,   TYPE_LONG, TYPE_LONG, TYPE_LONG, ICMD_BUILTIN2,
-         (functionptr) builtin_lxor , SUPPORT_LONG && SUPPORT_LONG_LOG, false },
-       { ICMD_LSHL,   TYPE_LONG, TYPE_INT,  TYPE_LONG, ICMD_BUILTIN2,
-         (functionptr) builtin_lshl , SUPPORT_LONG && SUPPORT_LONG_SHIFT, false },
-       { ICMD_LSHR,   TYPE_LONG, TYPE_INT,  TYPE_LONG, ICMD_BUILTIN2,
-         (functionptr) builtin_lshr, SUPPORT_LONG && SUPPORT_LONG_SHIFT, false },
-       { ICMD_LUSHR,  TYPE_LONG, TYPE_INT,  TYPE_LONG, ICMD_BUILTIN2,
-         (functionptr) builtin_lushr, SUPPORT_LONG && SUPPORT_LONG_SHIFT, false },
-       { ICMD_LADD,   TYPE_LONG, TYPE_LONG, TYPE_LONG, ICMD_BUILTIN2,
-         (functionptr) builtin_ladd , SUPPORT_LONG && SUPPORT_LONG_ADD, false },
-       { ICMD_LSUB,   TYPE_LONG, TYPE_LONG, TYPE_LONG, ICMD_BUILTIN2,
-         (functionptr) builtin_lsub , SUPPORT_LONG && SUPPORT_LONG_ADD, false },
-       { ICMD_LNEG,   TYPE_LONG, TYPE_VOID, TYPE_LONG, ICMD_BUILTIN1, 
-         (functionptr) builtin_lneg, SUPPORT_LONG && SUPPORT_LONG_ADD, true },
-       { ICMD_LMUL,   TYPE_LONG, TYPE_LONG, TYPE_LONG, ICMD_BUILTIN2,
-         (functionptr) builtin_lmul , SUPPORT_LONG && SUPPORT_LONG_MUL, false },
-       { ICMD_I2F,    TYPE_INT, TYPE_VOID, TYPE_FLOAT, ICMD_BUILTIN1,
-         (functionptr) builtin_i2f, SUPPORT_FLOAT && SUPPORT_IFCVT, true },
-       { ICMD_I2D,    TYPE_INT, TYPE_VOID, TYPE_DOUBLE, ICMD_BUILTIN1, 
-         (functionptr) builtin_i2d, SUPPORT_DOUBLE && SUPPORT_IFCVT, true },
-       { ICMD_L2F,    TYPE_LONG, TYPE_VOID, TYPE_FLOAT, ICMD_BUILTIN1,
-         (functionptr) builtin_l2f, SUPPORT_LONG && SUPPORT_FLOAT && SUPPORT_LONG_FCVT, true },
-       { ICMD_L2D,    TYPE_LONG, TYPE_VOID, TYPE_DOUBLE, ICMD_BUILTIN1, 
-         (functionptr) builtin_l2d, SUPPORT_LONG && SUPPORT_DOUBLE && SUPPORT_LONG_FCVT, true },
-       { ICMD_F2L,    TYPE_FLOAT, TYPE_VOID, TYPE_LONG, ICMD_BUILTIN1,
-         (functionptr) builtin_f2l, SUPPORT_FLOAT && SUPPORT_LONG && SUPPORT_LONG_ICVT, true },
-       { ICMD_D2L,    TYPE_DOUBLE, TYPE_VOID, TYPE_LONG, ICMD_BUILTIN1,
-         (functionptr) builtin_d2l, SUPPORT_DOUBLE && SUPPORT_LONG && SUPPORT_LONG_ICVT, true },
-       { ICMD_F2I,    TYPE_FLOAT, TYPE_VOID, TYPE_INT, ICMD_BUILTIN1,
-         (functionptr) builtin_f2i, SUPPORT_FLOAT && SUPPORT_FICVT, true },
-       { ICMD_D2I,    TYPE_DOUBLE, TYPE_VOID, TYPE_INT, ICMD_BUILTIN1,
-         (functionptr) builtin_d2i, SUPPORT_DOUBLE && SUPPORT_FICVT, true },
-       { 255, 0, 0, 0, 0, NULL, true, false },
-};
+/* jit_init ********************************************************************
 
-#endif
+   Initializes the JIT subsystem.
 
-static int builtintablelen;
+*******************************************************************************/
 
-#endif /* USEBUILTINTABLE */
+void jit_init(void)
+{
+       s4 i;
 
+#if defined(__ALPHA__)
+       has_ext_instr_set = ! has_no_x_instr_set();
+#endif
 
+       for (i = 0; i < 256; i++)
+               stackreq[i] = 1;
 
-#define EXTABLEN
-/*     \
-        { \
-                printf("PARSE method name ="); \
-                utf_display(m->class->name); \
-                printf("."); \
-                method_display(m); \
-               printf("        exceptiontablelength %d\n",m->exceptiontablelength);    \
-                fflush(stdout); \
-        }
-*/
+       stackreq[JAVA_NOP]          = 0;
+       stackreq[JAVA_ISTORE]       = 0;
+       stackreq[JAVA_LSTORE]       = 0;
+       stackreq[JAVA_FSTORE]       = 0;
+       stackreq[JAVA_DSTORE]       = 0;
+       stackreq[JAVA_ASTORE]       = 0;
+       stackreq[JAVA_ISTORE_0]     = 0;
+       stackreq[JAVA_ISTORE_1]     = 0;
+       stackreq[JAVA_ISTORE_2]     = 0;
+       stackreq[JAVA_ISTORE_3]     = 0;
+       stackreq[JAVA_LSTORE_0]     = 0;
+       stackreq[JAVA_LSTORE_1]     = 0;
+       stackreq[JAVA_LSTORE_2]     = 0;
+       stackreq[JAVA_LSTORE_3]     = 0;
+       stackreq[JAVA_FSTORE_0]     = 0;
+       stackreq[JAVA_FSTORE_1]     = 0;
+       stackreq[JAVA_FSTORE_2]     = 0;
+       stackreq[JAVA_FSTORE_3]     = 0;
+       stackreq[JAVA_DSTORE_0]     = 0;
+       stackreq[JAVA_DSTORE_1]     = 0;
+       stackreq[JAVA_DSTORE_2]     = 0;
+       stackreq[JAVA_DSTORE_3]     = 0;
+       stackreq[JAVA_ASTORE_0]     = 0;
+       stackreq[JAVA_ASTORE_1]     = 0;
+       stackreq[JAVA_ASTORE_2]     = 0;
+       stackreq[JAVA_ASTORE_3]     = 0;
+       stackreq[JAVA_IASTORE]      = 0;
+       stackreq[JAVA_LASTORE]      = 0;
+       stackreq[JAVA_FASTORE]      = 0;
+       stackreq[JAVA_DASTORE]      = 0;
+       stackreq[JAVA_AASTORE]      = 0;
+       stackreq[JAVA_BASTORE]      = 0;
+       stackreq[JAVA_CASTORE]      = 0;
+       stackreq[JAVA_SASTORE]      = 0;
+       stackreq[JAVA_POP]          = 0;
+       stackreq[JAVA_POP2]         = 0;
+       stackreq[JAVA_IFEQ]         = 0;
+       stackreq[JAVA_IFNE]         = 0;
+       stackreq[JAVA_IFLT]         = 0;
+       stackreq[JAVA_IFGE]         = 0;
+       stackreq[JAVA_IFGT]         = 0;
+       stackreq[JAVA_IFLE]         = 0;
+       stackreq[JAVA_IF_ICMPEQ]    = 0;
+       stackreq[JAVA_IF_ICMPNE]    = 0;
+       stackreq[JAVA_IF_ICMPLT]    = 0;
+       stackreq[JAVA_IF_ICMPGE]    = 0;
+       stackreq[JAVA_IF_ICMPGT]    = 0;
+       stackreq[JAVA_IF_ICMPLE]    = 0;
+       stackreq[JAVA_IF_ACMPEQ]    = 0;
+       stackreq[JAVA_IF_ACMPNE]    = 0;
+       stackreq[JAVA_GOTO]         = 0;
+       stackreq[JAVA_RET]          = 0;
+       stackreq[JAVA_TABLESWITCH]  = 0;
+       stackreq[JAVA_LOOKUPSWITCH] = 0;
+       stackreq[JAVA_IRETURN]      = 0;
+       stackreq[JAVA_LRETURN]      = 0;
+       stackreq[JAVA_FRETURN]      = 0;
+       stackreq[JAVA_DRETURN]      = 0;
+       stackreq[JAVA_ARETURN]      = 0;
+       stackreq[JAVA_RETURN]       = 0;
+       stackreq[JAVA_PUTSTATIC]    = 0;
+       stackreq[JAVA_PUTFIELD]     = 0;
+       stackreq[JAVA_MONITORENTER] = 0;
+       stackreq[JAVA_MONITOREXIT]  = 0;
+       stackreq[JAVA_WIDE]         = 0;
+       stackreq[JAVA_IFNULL]       = 0;
+       stackreq[JAVA_IFNONNULL]    = 0;
+       stackreq[JAVA_GOTO_W]       = 0;
+       stackreq[JAVA_BREAKPOINT]   = 0;
 
-/*****************************************************************************
-                                                TABLE OF BUILTIN FUNCTIONS
+       /* we need one dummy stack slot for IINC in order to */
+       /* avoid that the modified local variable is */
+       /* kept on the stack (see stack.c, ICMD_IINC) */
+       stackreq[JAVA_IINC]         = 1;
+       
+       stackreq[JAVA_SWAP] = 2;
+       stackreq[JAVA_DUP2] = 2;
+       stackreq[JAVA_DUP_X1] = 3;
+       stackreq[JAVA_DUP_X2] = 4;
+       stackreq[JAVA_DUP2_X1] = 3;
+       stackreq[JAVA_DUP2_X2] = 4;
 
-    This table lists the builtin functions which are used inside
-    BUILTIN* opcodes.
+       /* initialize stack analysis subsystem */
 
-    The first part of the table (up to the 255-marker) lists the
-    opcodes which are automatically replaced in stack.c.
+       (void) stack_init();
 
-    The second part lists the builtin functions which are "manually"
-    used for BUILTIN* opcodes in parse.c and stack.c.
+       /* initialize codegen subsystem */
 
-*****************************************************************************/
+       codegen_init();
+}
 
-builtin_descriptor builtin_desc[] = {
-#if defined(USEBUILTINTABLE)
-       {ICMD_LCMP , BUILTIN_lcmp ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_LONG  ,TYPE_VOID ,TYPE_INT   ,
-                    SUPPORT_LONG && SUPPORT_LONG_CMP,false,"lcmp"},
-       
-       {ICMD_LAND , BUILTIN_land ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_LONG  ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_LOG,false,"land"},
-       {ICMD_LOR  , BUILTIN_lor  ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_LONG  ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_LOG,false,"lor"},
-       {ICMD_LXOR , BUILTIN_lxor ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_LONG  ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_LOG,false,"lxor"},
-       
-       {ICMD_LSHL , BUILTIN_lshl ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_INT   ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_SHIFT,false,"lshl"},
-       {ICMD_LSHR , BUILTIN_lshr ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_INT   ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_SHIFT,false,"lshr"},
-       {ICMD_LUSHR, BUILTIN_lushr,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_INT   ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_SHIFT,false,"lushr"},
-       
-       {ICMD_LADD , BUILTIN_ladd ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_LONG  ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_ADD,false,"ladd"},
-       {ICMD_LSUB , BUILTIN_lsub ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_LONG  ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_ADD,false,"lsub"},
-       {ICMD_LNEG , BUILTIN_lneg ,ICMD_BUILTIN1,TYPE_LONG  ,TYPE_VOID  ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_ADD,false,"lneg"},
-       {ICMD_LMUL , BUILTIN_lmul ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_LONG  ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_LONG && SUPPORT_LONG_MUL,false,"lmul"},
-       
-       {ICMD_I2F  , BUILTIN_i2f  ,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID ,TYPE_FLOAT ,
-                    SUPPORT_FLOAT && SUPPORT_IFCVT,true ,"i2f"},
-       {ICMD_I2D  , BUILTIN_i2d  ,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID ,TYPE_DOUBLE,
-                    SUPPORT_DOUBLE && SUPPORT_IFCVT,true ,"i2d"},
-       {ICMD_L2F  , BUILTIN_l2f  ,ICMD_BUILTIN1,TYPE_LONG  ,TYPE_VOID  ,TYPE_VOID ,TYPE_FLOAT ,
-                    SUPPORT_LONG && SUPPORT_FLOAT && SUPPORT_LONG_FCVT,true ,"l2f"},
-       {ICMD_L2D  , BUILTIN_l2d  ,ICMD_BUILTIN1,TYPE_LONG  ,TYPE_VOID  ,TYPE_VOID ,TYPE_DOUBLE,
-                    SUPPORT_LONG && SUPPORT_DOUBLE && SUPPORT_LONG_FCVT,true ,"l2d"},
-       {ICMD_F2L  , BUILTIN_f2l  ,ICMD_BUILTIN1,TYPE_FLOAT ,TYPE_VOID  ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_FLOAT && SUPPORT_LONG && SUPPORT_LONG_ICVT,true ,"f2l"},
-       {ICMD_D2L  , BUILTIN_d2l  ,ICMD_BUILTIN1,TYPE_DOUBLE,TYPE_VOID  ,TYPE_VOID ,TYPE_LONG  ,
-                    SUPPORT_DOUBLE && SUPPORT_LONG && SUPPORT_LONG_ICVT,true ,"d2l"},
-       {ICMD_F2I  , BUILTIN_f2i  ,ICMD_BUILTIN1,TYPE_FLOAT ,TYPE_VOID  ,TYPE_VOID ,TYPE_INT   ,
-                    SUPPORT_FLOAT && SUPPORT_FICVT,true ,"f2i"},
-       {ICMD_D2I  , BUILTIN_d2i  ,ICMD_BUILTIN1,TYPE_DOUBLE,TYPE_VOID  ,TYPE_VOID ,TYPE_INT   ,
-                    SUPPORT_DOUBLE && SUPPORT_FICVT,true ,"d2i"},
-#endif
 
-       /* this record marks the end of the automatically replaced opcodes */
-       {255,NULL,0,0,0,0,0,0,0,"<INVALID>"},
+/* jit_close *******************************************************************
 
-       /* the following functions are not replaced automatically */
-       
-#if defined(__ALPHA__)
-       {255, BUILTIN_f2l  ,ICMD_BUILTIN1,TYPE_FLOAT ,TYPE_VOID  ,TYPE_VOID ,TYPE_LONG  ,0,0,"f2l"},
-       {255, BUILTIN_d2l  ,ICMD_BUILTIN1,TYPE_DOUBLE,TYPE_VOID  ,TYPE_VOID ,TYPE_LONG  ,0,0,"d2l"},
-       {255, BUILTIN_f2i  ,ICMD_BUILTIN1,TYPE_FLOAT ,TYPE_VOID  ,TYPE_VOID ,TYPE_INT   ,0,0,"f2i"},
-       {255, BUILTIN_d2i  ,ICMD_BUILTIN1,TYPE_DOUBLE,TYPE_VOID  ,TYPE_VOID ,TYPE_INT   ,0,0,"d2i"},
-#endif
+   Close the JIT subsystem.
 
-       {255,BUILTIN_instanceof      ,ICMD_BUILTIN2,TYPE_ADR   ,TYPE_ADR   ,TYPE_VOID  ,TYPE_INT   ,0,0,"instanceof"},
-       {255,BUILTIN_arrayinstanceof ,ICMD_BUILTIN2,TYPE_ADR   ,TYPE_ADR   ,TYPE_VOID  ,TYPE_INT   ,0,0,"arrayinstanceof"},
-       {255,BUILTIN_checkarraycast  ,ICMD_BUILTIN2,TYPE_ADR   ,TYPE_ADR   ,TYPE_VOID  ,TYPE_VOID  ,0,0,"checkarraycast"},
-       {255,BUILTIN_aastore         ,ICMD_BUILTIN3,TYPE_ADR   ,TYPE_INT   ,TYPE_ADR   ,TYPE_VOID  ,0,0,"aastore"},
-       {255,BUILTIN_new             ,ICMD_BUILTIN1,TYPE_ADR   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_ADR   ,0,0,"new"},
-       {255,BUILTIN_newarray        ,ICMD_BUILTIN2,TYPE_INT   ,TYPE_ADR   ,TYPE_VOID  ,TYPE_ADR   ,0,0,"newarray"},
-       {255,BUILTIN_newarray_boolean,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_ADR   ,0,0,"newarray_boolean"},
-       {255,BUILTIN_newarray_char   ,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_ADR   ,0,0,"newarray_char"},
-       {255,BUILTIN_newarray_float  ,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_ADR   ,0,0,"newarray_float"},
-       {255,BUILTIN_newarray_double ,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_ADR   ,0,0,"newarray_double"},
-       {255,BUILTIN_newarray_byte   ,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_ADR   ,0,0,"newarray_byte"},
-       {255,BUILTIN_newarray_short  ,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_ADR   ,0,0,"newarray_short"},
-       {255,BUILTIN_newarray_int    ,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_ADR   ,0,0,"newarray_int"},
-       {255,BUILTIN_newarray_long   ,ICMD_BUILTIN1,TYPE_INT   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_ADR   ,0,0,"newarray_long"},
-       {255,BUILTIN_monitorenter    ,ICMD_BUILTIN1,TYPE_ADR   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_VOID  ,0,0,"monitorenter"},
-       {255,BUILTIN_monitorexit     ,ICMD_BUILTIN1,TYPE_ADR   ,TYPE_VOID  ,TYPE_VOID  ,TYPE_VOID  ,0,0,"monitorexit"},
-#if !SUPPORT_DIVISION
-       {255,BUILTIN_idiv            ,ICMD_BUILTIN2,TYPE_INT   ,TYPE_INT   ,TYPE_VOID  ,TYPE_INT   ,0,0,"idiv"},
-       {255,BUILTIN_irem            ,ICMD_BUILTIN2,TYPE_INT   ,TYPE_INT   ,TYPE_VOID  ,TYPE_INT   ,0,0,"irem"},
-#endif
-#if !(SUPPORT_DIVISION && SUPPORT_LONG && SUPPORT_LONG_DIV)
-       {255,BUILTIN_ldiv            ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_LONG  ,TYPE_VOID  ,TYPE_LONG  ,0,0,"ldiv"},
-       {255,BUILTIN_lrem            ,ICMD_BUILTIN2,TYPE_LONG  ,TYPE_LONG  ,TYPE_VOID  ,TYPE_LONG  ,0,0,"lrem"},
-#endif
-       {255,BUILTIN_frem            ,ICMD_BUILTIN2,TYPE_FLOAT ,TYPE_FLOAT ,TYPE_VOID  ,TYPE_FLOAT ,0,0,"frem"},
-       {255,BUILTIN_drem            ,ICMD_BUILTIN2,TYPE_DOUBLE,TYPE_DOUBLE,TYPE_VOID  ,TYPE_DOUBLE,0,0,"drem"},
+*******************************************************************************/
 
-       /* this record marks the end of the list */
-       {  0,NULL,0,0,0,0,0,0,0,"<END>"}
-};
+void jit_close(void)
+{
+       /* do nothing */
+}
 
-/* include compiler subsystems ************************************************/
 
 /* dummy function, used when there is no JavaVM code available                */
 
-static void* do_nothing_function()
+static u1 *do_nothing_function(void)
 {
        return NULL;
 }
@@ -1347,66 +1314,50 @@ static void* do_nothing_function()
 
 *******************************************************************************/
 
-static functionptr jit_compile_intern(methodinfo *m, codegendata *cd,
-                                                                         registerdata *rd, loopdata *ld,
-                                                                         t_inlining_globals *id);
+static u1 *jit_compile_intern(methodinfo *m, codegendata *cd, registerdata *rd,
+                                                         loopdata *ld, t_inlining_globals *id);
 
-functionptr jit_compile(methodinfo *m)
+u1 *jit_compile(methodinfo *m)
 {
-       static bool jitrunning;
-       functionptr r;
-       s4 dumpsize;
-       codegendata *cd;
-       registerdata *rd;
-       loopdata *ld;
+       u1                 *r;
+       codegendata        *cd;
+       registerdata       *rd;
+       loopdata           *ld;
        t_inlining_globals *id;
+       s4                  dumpsize;
 
+#if defined(STATISTICS)
        if (opt_stat)
                count_jit_calls++;
+#endif
 
+#if defined(USE_THREADS)
        /* enter a monitor on the method */
 
        builtin_monitorenter((java_objectheader *) m);
+#endif
 
        /* if method has been already compiled return immediately */
 
        if (m->entrypoint) {
+#if defined(USE_THREADS)
                builtin_monitorexit((java_objectheader *) m);
+#endif
 
                return m->entrypoint;
        }
 
+#if defined(STATISTICS)
        if (opt_stat)
                count_methods++;
-
-       /* if there is no javacode, print error message and return empty method   */
-
-       if (!m->jcode) {
-               if (compileverbose)
-                       log_message_method("No code given for: ", m);
-
-               /*m->entrypoint = (methodptr) do_nothing_function;*/
-               m->entrypoint = (functionptr) do_nothing_function;
-
-               return m->entrypoint;    /* return empty method     */
-       }
-
-#if 0
-       if (jitrunning) {
-               printf("JITRUNNING!!! new method=");
-               utf_display_classname(m->class->name);printf(".");utf_display(m->name);
-               printf("\n");
-       }
-
-       /* now the jit is running */
-
-       jitrunning = true;
 #endif
 
+#if defined(STATISTICS)
        /* measure time */
 
        if (getcompilingtime)
                compilingtime_start();
+#endif
 
        /* mark start of dump memory area */
 
@@ -1419,17 +1370,28 @@ functionptr jit_compile(methodinfo *m)
        ld = DNEW(loopdata);
        id = DNEW(t_inlining_globals);
 
+#if defined(USE_INLINING)
        /* RTA static analysis must be called before inlining */
        if (opt_rt)
                RT_jit_parse(m); /* will be called just once */
                             /* return value ignored for now */
+       /* XTA static analysis must be called before inlining */
+       if (opt_xta)
+               XTA_jit_parse(m); /* will be called just once */
+                             /* return value ignored for now */
 
        /* must be called before reg_setup, because it can change maxlocals */
        /* init reqd to initialize for parse even in no inlining */
        inlining_setup(m, id);
+#endif
 
-       /* initialize the register allocator */
-       reg_setup(m, rd, id);
+#if defined(ENABLE_JIT)
+# if defined(ENABLE_INTRP)
+       if (!opt_intrp)
+# endif
+               /* initialize the register allocator */
+               reg_setup(m, rd, id);
+#endif
 
        /* setup the codegendata memory */
        codegen_setup(m, cd, id);
@@ -1440,8 +1402,12 @@ functionptr jit_compile(methodinfo *m)
 
        /* free some memory */
 
-       reg_free(m, rd);
-       codegen_free(m, cd);
+#if defined(ENABLE_JIT)
+# if defined(ENABLE_INTRP)
+       if (!opt_intrp)
+# endif
+               codegen_free(m, cd);
+#endif
 
        /* clear pointers to dump memory area */
 
@@ -1455,22 +1421,24 @@ functionptr jit_compile(methodinfo *m)
 
        dump_release(dumpsize);
 
+#if defined(STATISTICS)
        /* measure time */
 
        if (getcompilingtime)
                compilingtime_stop();
+#endif
 
-       jitrunning = false;
-
-        /* define in options.h; Used in main.c, jit.c & inline.c */
-       #ifdef INAFTERMAIN
+       /* define in options.h; Used in main.c, jit.c & inline.c */
+#ifdef INAFTERMAIN
        if ((utf_new_char("main") == m->name) && (useinliningm))
-               useinlining = false;
-       #endif
+               useinlining = false;
+#endif
 
+#if defined(USE_THREADS)
        /* leave the monitor */
 
        builtin_monitorexit((java_objectheader *) m );
+#endif
 
        if (r) {
                if (compileverbose)
@@ -1489,9 +1457,8 @@ functionptr jit_compile(methodinfo *m)
 
 *******************************************************************************/
 
-static functionptr jit_compile_intern(methodinfo *m, codegendata *cd,
-                                                                         registerdata *rd, loopdata *ld,
-                                                                         t_inlining_globals *id)
+static u1 *jit_compile_intern(methodinfo *m, codegendata *cd, registerdata *rd,
+                                                         loopdata *ld, t_inlining_globals *id)
 {
        /* print log message for compiled method */
 
@@ -1500,14 +1467,45 @@ static functionptr jit_compile_intern(methodinfo *m, codegendata *cd,
 
        /* initialize the static function's class */
 
-       if (m->flags & ACC_STATIC && !m->class->initialized) {
+       if ((m->flags & ACC_STATIC) && !m->class->initialized) {
                if (initverbose)
                        log_message_class("Initialize class ", m->class);
 
-               if (!class_init(m->class))
+               if (!initialize_class(m->class))
                        return NULL;
        }
 
+       /* handle native methods and create a native stub */
+
+       if (m->flags & ACC_NATIVE) {
+               functionptr f;
+
+#if defined(ENABLE_STATICVM)
+               f = native_findfunction(m->class->name, m->name, m->descriptor,
+                                                               (m->flags & ACC_STATIC));
+               if (!f)
+                       return NULL;
+#else
+
+               f = NULL;
+#endif
+
+               m->entrypoint = codegen_createnativestub(f, m);
+
+               return m->entrypoint;
+       }
+
+       /* if there is no javacode, print error message and return empty method   */
+
+       if (!m->jcode) {
+               if (compileverbose)
+                       log_message_method("No code given for: ", m);
+
+               m->entrypoint = (u1 *) (ptrint) do_nothing_function;
+
+               return m->entrypoint;           /* return empty method                */
+       }
+
        /* initialisation of variables and subsystems */
 
        m->isleafmethod = true;
@@ -1516,29 +1514,13 @@ static functionptr jit_compile_intern(methodinfo *m, codegendata *cd,
        if (opt_stat) {
                count_tryblocks += m->exceptiontablelength;
                count_javacodesize += m->jcodelength + 18;
-               count_javaexcsize += m->exceptiontablelength * POINTERSIZE;
+               count_javaexcsize += m->exceptiontablelength * SIZEOF_VOID_P;
        }
 #endif
 
        /* initialise parameter type descriptor */
 
-       descriptor2types(m);
-
-#if defined(__I386__)
-       /* we try to use these registers as scratch registers */
-    if (m->exceptiontablelength > 0) {
-               method_uses_ecx = true;
-               method_uses_edx = true;
-
-       } else {
-               /* XXX when we use this, we have to save used registers in asm_
-                  functions (see asm_check_clinit */
-/*             method_uses_ecx = false; */
-/*             method_uses_edx = false; */
-               method_uses_ecx = true;
-               method_uses_edx = true;
-       }
-#endif
+       method_descriptor2types(m);
 
        /* call the compiler passes ***********************************************/
 
@@ -1546,6 +1528,7 @@ static functionptr jit_compile_intern(methodinfo *m, codegendata *cd,
                log_message_method("Parsing: ", m);
 
        /* call parse pass */
+
        if (!parse(m, cd, id)) {
                if (compileverbose)
                        log_message_method("Exception while parsing: ", m);
@@ -1559,6 +1542,7 @@ static functionptr jit_compile_intern(methodinfo *m, codegendata *cd,
        }
 
        /* call stack analysis pass */
+
        if (!analyse_stack(m, cd, rd)) {
                if (compileverbose)
                        log_message_method("Exception while analysing: ", m);
@@ -1592,39 +1576,69 @@ static functionptr jit_compile_intern(methodinfo *m, codegendata *cd,
                analyseGraph(m, ld);
                optimize_loops(m, cd, ld);
        }
-   
-#ifdef SPECIALMEMUSE
-       preregpass(m, rd);
+
+#if defined(ENABLE_JIT)
+# if defined(ENABLE_INTRP)
+       if (!opt_intrp) {
+# endif
+               if (compileverbose)
+                       log_message_method("Allocating registers: ", m);
+
+               /* allocate registers */
+#ifdef LSRA
+               if (opt_lsra) {
+                       lsra(m, cd, rd, id);
+#ifdef STATISTICS
+                       if (opt_stat) count_methods_allocated_by_lsra++;
 #endif
+               } else
+#endif /* LSRA */
+               {
+#ifdef STATISTICS
+                       if (opt_stat)
+                               count_locals_conflicts += (cd->maxlocals-1)*(cd->maxlocals);
+#endif         
+                       regalloc(m, cd, rd);
+               }
 
-       if (compileverbose)
-               log_message_method("Allocating registers: ", m);
+#ifdef STATISTICS
+               if (opt_stat)
+                       reg_make_statistics(m, cd, rd);
+#endif
 
-       /* allocate registers */
-       regalloc(m, cd, rd);
+               if (compileverbose)
+                       log_message_method("Allocating registers done: ", m);
+# if defined(ENABLE_INTRP)
+       }
+# endif
+#endif /* defined(ENABLE_JIT) */
 
-       if (compileverbose) {
-               log_message_method("Allocating registers done: ", m);
+       if (compileverbose)
                log_message_method("Generating code: ", m);
-       }
 
        /* now generate the machine code */
-       codegen(m, cd, rd);
+
+       if (!codegen(m, cd, rd)) {
+               if (compileverbose)
+                       log_message_method("Exception while generating code: ", m);
+
+               return NULL;
+       }
 
        if (compileverbose)
                log_message_method("Generating code done: ", m);
 
        /* intermediate and assembly code listings */
                
-       if (showintermediate) {
+       if (opt_showintermediate) {
                show_icmd_method(m, cd, rd);
 
-       } else if (showdisassemble) {
-               disassemble((void *) ((long) m->mcode + cd->dseglen), 
-                                       m->mcodelength - cd->dseglen);
+       } else if (opt_showdisassemble) {
+               disassemble((u1 *) (ptrint) m->entrypoint,
+                                       (u1 *) (ptrint) m->entrypoint + (m->mcodelength - cd->dseglen));
        }
 
-       if (showddatasegment)
+       if (opt_showddatasegment)
                dseg_display(m, cd);
 
        if (compileverbose)
@@ -1636,171 +1650,6 @@ static functionptr jit_compile_intern(methodinfo *m, codegendata *cd,
 } 
 
 
-void compile_all_class_methods(classinfo *c)
-{
-       s4 i;
-
-       for (i = 0; i < c->methodscount; i++) {
-               (void) jit_compile(&(c->methods[i]));
-       }
-}
-
-
-/* functions for compiler initialisation and finalisation *********************/
-
-#ifdef USEBUILTINTABLE
-
-static int stdopcompare(const void *a, const void *b)
-{
-       builtin_descriptor *o1 = (builtin_descriptor *) a;
-       builtin_descriptor *o2 = (builtin_descriptor *) b;
-       if (!o1->supported && o2->supported)
-               return -1;
-       if (o1->supported && !o2->supported)
-               return 1;
-       return (o1->opcode < o2->opcode) ? -1 : (o1->opcode > o2->opcode);
-}
-
-static inline void sort_builtintable()
-{
-       int len;
-
-       len = 0;
-       while (builtin_desc[len].opcode != 255) len++;
-       qsort(builtin_desc, len, sizeof(builtin_descriptor), stdopcompare);
-
-       for (--len; len>=0 && builtin_desc[len].supported; len--);
-       builtintablelen = ++len;
-}
-
-
-builtin_descriptor *find_builtin(int icmd)
-{
-       builtin_descriptor *first = builtin_desc;
-       builtin_descriptor *last = builtin_desc + builtintablelen;
-       int len = last - first;
-       int half;
-       builtin_descriptor *middle;
-
-       while (len > 0) {
-               half = len / 2;
-               middle = first + half;
-               if (middle->opcode < icmd) {
-                       first = middle + 1;
-                       len -= half + 1;
-               } else
-                       len = half;
-       }
-       return first != last ? first : NULL;
-}
-
-#endif
-
-
-
-void jit_init()
-{
-       s4 i;
-
-#ifdef USEBUILTINTABLE
-       sort_builtintable();
-#endif
-
-#if defined(__ALPHA__)
-       has_ext_instr_set = ! has_no_x_instr_set();
-#endif
-
-       for (i = 0; i < 256; i++)
-               stackreq[i] = 1;
-
-       stackreq[JAVA_NOP]          = 0;
-       stackreq[JAVA_ISTORE]       = 0;
-       stackreq[JAVA_LSTORE]       = 0;
-       stackreq[JAVA_FSTORE]       = 0;
-       stackreq[JAVA_DSTORE]       = 0;
-       stackreq[JAVA_ASTORE]       = 0;
-       stackreq[JAVA_ISTORE_0]     = 0;
-       stackreq[JAVA_ISTORE_1]     = 0;
-       stackreq[JAVA_ISTORE_2]     = 0;
-       stackreq[JAVA_ISTORE_3]     = 0;
-       stackreq[JAVA_LSTORE_0]     = 0;
-       stackreq[JAVA_LSTORE_1]     = 0;
-       stackreq[JAVA_LSTORE_2]     = 0;
-       stackreq[JAVA_LSTORE_3]     = 0;
-       stackreq[JAVA_FSTORE_0]     = 0;
-       stackreq[JAVA_FSTORE_1]     = 0;
-       stackreq[JAVA_FSTORE_2]     = 0;
-       stackreq[JAVA_FSTORE_3]     = 0;
-       stackreq[JAVA_DSTORE_0]     = 0;
-       stackreq[JAVA_DSTORE_1]     = 0;
-       stackreq[JAVA_DSTORE_2]     = 0;
-       stackreq[JAVA_DSTORE_3]     = 0;
-       stackreq[JAVA_ASTORE_0]     = 0;
-       stackreq[JAVA_ASTORE_1]     = 0;
-       stackreq[JAVA_ASTORE_2]     = 0;
-       stackreq[JAVA_ASTORE_3]     = 0;
-       stackreq[JAVA_IASTORE]      = 0;
-       stackreq[JAVA_LASTORE]      = 0;
-       stackreq[JAVA_FASTORE]      = 0;
-       stackreq[JAVA_DASTORE]      = 0;
-       stackreq[JAVA_AASTORE]      = 0;
-       stackreq[JAVA_BASTORE]      = 0;
-       stackreq[JAVA_CASTORE]      = 0;
-       stackreq[JAVA_SASTORE]      = 0;
-       stackreq[JAVA_POP]          = 0;
-       stackreq[JAVA_POP2]         = 0;
-       stackreq[JAVA_IINC]         = 0;
-       stackreq[JAVA_IFEQ]         = 0;
-       stackreq[JAVA_IFNE]         = 0;
-       stackreq[JAVA_IFLT]         = 0;
-       stackreq[JAVA_IFGE]         = 0;
-       stackreq[JAVA_IFGT]         = 0;
-       stackreq[JAVA_IFLE]         = 0;
-       stackreq[JAVA_IF_ICMPEQ]    = 0;
-       stackreq[JAVA_IF_ICMPNE]    = 0;
-       stackreq[JAVA_IF_ICMPLT]    = 0;
-       stackreq[JAVA_IF_ICMPGE]    = 0;
-       stackreq[JAVA_IF_ICMPGT]    = 0;
-       stackreq[JAVA_IF_ICMPLE]    = 0;
-       stackreq[JAVA_IF_ACMPEQ]    = 0;
-       stackreq[JAVA_IF_ACMPNE]    = 0;
-       stackreq[JAVA_GOTO]         = 0;
-       stackreq[JAVA_RET]          = 0;
-       stackreq[JAVA_TABLESWITCH]  = 0;
-       stackreq[JAVA_LOOKUPSWITCH] = 0;
-       stackreq[JAVA_IRETURN]      = 0;
-       stackreq[JAVA_LRETURN]      = 0;
-       stackreq[JAVA_FRETURN]      = 0;
-       stackreq[JAVA_DRETURN]      = 0;
-       stackreq[JAVA_ARETURN]      = 0;
-       stackreq[JAVA_RETURN]       = 0;
-       stackreq[JAVA_PUTSTATIC]    = 0;
-       stackreq[JAVA_PUTFIELD]     = 0;
-       stackreq[JAVA_MONITORENTER] = 0;
-       stackreq[JAVA_MONITOREXIT]  = 0;
-       stackreq[JAVA_WIDE]         = 0;
-       stackreq[JAVA_IFNULL]       = 0;
-       stackreq[JAVA_IFNONNULL]    = 0;
-       stackreq[JAVA_GOTO_W]       = 0;
-       stackreq[JAVA_BREAKPOINT]   = 0;
-
-       stackreq[JAVA_SWAP] = 2;
-       stackreq[JAVA_DUP2] = 2;
-       stackreq[JAVA_DUP_X1] = 3;
-       stackreq[JAVA_DUP_X2] = 4;
-       stackreq[JAVA_DUP2_X1] = 3;
-       stackreq[JAVA_DUP2_X2] = 4;
-
-       /* initialize the codegen stuff */
-       codegen_init();
-}
-
-
-void jit_close()
-{
-}
-
-
 /*
  * These are local overrides for various environment variables in Emacs.
  * Please do not remove this and leave it at the end of the file, where