Class CodeBlockJIT

  • All Implemented Interfaces:
    org.objectweb.asm.Opcodes

    public class CodeBlockJIT
    extends java.lang.Object
    implements org.objectweb.asm.Opcodes
    JIT that generates and loads a natively generated CodeBlock for a given EMFTVM bytecode CodeBlock.
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static java.lang.String BASE_PACKAGE  
      protected java.util.Map<java.lang.String,​byte[]> byteCode
      Map of class names to generated bytecode.
      protected org.eclipse.m2m.atl.emftvm.jit.CodeBlockJIT.JITClassLoader classLoader
      Internal ClassLoader instance for loading the generated classes.
      protected java.util.Map<java.lang.String,​CodeBlock> codeBlocks
      Map of class names to input CodeBlocks for the JIT.
      protected ExecEnv env
      The execution environment to JIT for.
      • Fields inherited from interface org.objectweb.asm.Opcodes

        AALOAD, AASTORE, ACC_ABSTRACT, ACC_ANNOTATION, ACC_BRIDGE, ACC_DEPRECATED, ACC_ENUM, ACC_FINAL, ACC_INTERFACE, ACC_MANDATED, ACC_MODULE, ACC_NATIVE, ACC_OPEN, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_RECORD, ACC_STATIC, ACC_STATIC_PHASE, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_TRANSITIVE, ACC_VARARGS, ACC_VOLATILE, ACONST_NULL, ALOAD, ANEWARRAY, ARETURN, ARRAYLENGTH, ASM10_EXPERIMENTAL, ASM4, ASM5, ASM6, ASM7, ASM8, ASM9, ASTORE, ATHROW, BALOAD, BASTORE, BIPUSH, CALOAD, CASTORE, CHECKCAST, D2F, D2I, D2L, DADD, DALOAD, DASTORE, DCMPG, DCMPL, DCONST_0, DCONST_1, DDIV, DLOAD, DMUL, DNEG, DOUBLE, DREM, DRETURN, DSTORE, DSUB, DUP, DUP_X1, DUP_X2, DUP2, DUP2_X1, DUP2_X2, F_APPEND, F_CHOP, F_FULL, F_NEW, F_SAME, F_SAME1, F2D, F2I, F2L, FADD, FALOAD, FASTORE, FCMPG, FCMPL, FCONST_0, FCONST_1, FCONST_2, FDIV, FLOAD, FLOAT, FMUL, FNEG, FREM, FRETURN, FSTORE, FSUB, GETFIELD, GETSTATIC, GOTO, H_GETFIELD, H_GETSTATIC, H_INVOKEINTERFACE, H_INVOKESPECIAL, H_INVOKESTATIC, H_INVOKEVIRTUAL, H_NEWINVOKESPECIAL, H_PUTFIELD, H_PUTSTATIC, I2B, I2C, I2D, I2F, I2L, I2S, IADD, IALOAD, IAND, IASTORE, ICONST_0, ICONST_1, ICONST_2, ICONST_3, ICONST_4, ICONST_5, ICONST_M1, IDIV, IF_ACMPEQ, IF_ACMPNE, IF_ICMPEQ, IF_ICMPGE, IF_ICMPGT, IF_ICMPLE, IF_ICMPLT, IF_ICMPNE, IFEQ, IFGE, IFGT, IFLE, IFLT, IFNE, IFNONNULL, IFNULL, IINC, ILOAD, IMUL, INEG, INSTANCEOF, INTEGER, INVOKEDYNAMIC, INVOKEINTERFACE, INVOKESPECIAL, INVOKESTATIC, INVOKEVIRTUAL, IOR, IREM, IRETURN, ISHL, ISHR, ISTORE, ISUB, IUSHR, IXOR, JSR, L2D, L2F, L2I, LADD, LALOAD, LAND, LASTORE, LCMP, LCONST_0, LCONST_1, LDC, LDIV, LLOAD, LMUL, LNEG, LONG, LOOKUPSWITCH, LOR, LREM, LRETURN, LSHL, LSHR, LSTORE, LSUB, LUSHR, LXOR, MONITORENTER, MONITOREXIT, MULTIANEWARRAY, NEW, NEWARRAY, NOP, NULL, POP, POP2, PUTFIELD, PUTSTATIC, RET, RETURN, SALOAD, SASTORE, SIPUSH, SOURCE_DEPRECATED, SOURCE_MASK, SWAP, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, TABLESWITCH, TOP, UNINITIALIZED_THIS, V_PREVIEW, V1_1, V1_2, V1_3, V1_4, V1_5, V1_6, V1_7, V1_8, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20, V21, V22, V9
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void cleanup()
      Cleans up all generated bytecode.
      protected static void generateCheckMonitor​(org.objectweb.asm.MethodVisitor mv, int pc)
      Generates bytecode for checking the VM monitor
      protected static void generateConstructor​(org.objectweb.asm.MethodVisitor init, java.lang.String className)
      Generates a constructor for the JITCodeBlock.
      protected void generateExecute​(org.objectweb.asm.MethodVisitor execute, CodeBlock cb, java.lang.String className)
      Generates an execute method for the JITCodeBlock.
      ExecEnv getEnv()
      The execution environment to JIT for.
      protected java.lang.String getNextClassName()
      Returns the next class name to use for JIT output.
      protected byte[] internalJit​(CodeBlock cb, java.lang.String className)
      Performs the actual JIT-compile of cb into a JITCodeBlock class with name className.
      boolean isDumpBytecode()
      Returns whether or not to dump the generated bytecode to a class file.
      JITCodeBlock jit​(CodeBlock cb)
      JIT-compiles cb into a natively implemented CodeBlock.
      void setDumpBytecode​(boolean dumpBytecode)
      Sets whether or not to dump the generated bytecode to a class file.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • codeBlocks

        protected final java.util.Map<java.lang.String,​CodeBlock> codeBlocks
        Map of class names to input CodeBlocks for the JIT.
      • classLoader

        protected final org.eclipse.m2m.atl.emftvm.jit.CodeBlockJIT.JITClassLoader classLoader
        Internal ClassLoader instance for loading the generated classes.
      • env

        protected final ExecEnv env
        The execution environment to JIT for.
      • byteCode

        protected final java.util.Map<java.lang.String,​byte[]> byteCode
        Map of class names to generated bytecode.
    • Constructor Detail

      • CodeBlockJIT

        public CodeBlockJIT​(ExecEnv env)
        Creates a new CodeBlockJIT.
        Parameters:
        env - the execution environment to JIT for
    • Method Detail

      • jit

        public JITCodeBlock jit​(CodeBlock cb)
                         throws java.lang.ClassNotFoundException,
                                java.lang.IllegalArgumentException,
                                java.lang.SecurityException,
                                java.lang.InstantiationException,
                                java.lang.IllegalAccessException,
                                java.lang.reflect.InvocationTargetException,
                                java.lang.NoSuchMethodException
        JIT-compiles cb into a natively implemented CodeBlock.
        Parameters:
        cb - the regular EMFTVM bytecode CodeBlock
        Returns:
        an instance of the JIT-generated CodeBlock
        Throws:
        java.lang.ClassNotFoundException
        java.lang.IllegalArgumentException
        java.lang.SecurityException
        java.lang.InstantiationException
        java.lang.IllegalAccessException
        java.lang.reflect.InvocationTargetException
        java.lang.NoSuchMethodException
      • getNextClassName

        protected java.lang.String getNextClassName()
        Returns the next class name to use for JIT output.
        Returns:
        the next class name to use for JIT output
      • internalJit

        protected byte[] internalJit​(CodeBlock cb,
                                     java.lang.String className)
        Performs the actual JIT-compile of cb into a JITCodeBlock class with name className.
        Parameters:
        cb - the CodeBlock to JIT-compile
        className - the class name for the generated class
        Returns:
        the generated class data
      • generateConstructor

        protected static void generateConstructor​(org.objectweb.asm.MethodVisitor init,
                                                  java.lang.String className)
        Generates a constructor for the JITCodeBlock.
        Parameters:
        init - the constructor visitor
        className - the name of the generated class
      • generateExecute

        protected void generateExecute​(org.objectweb.asm.MethodVisitor execute,
                                       CodeBlock cb,
                                       java.lang.String className)
        Generates an execute method for the JITCodeBlock.
        Parameters:
        execute - the execute method visitor
        cb - the CodeBlock to JIT-compile
        className - the name of the generated class
      • generateCheckMonitor

        protected static void generateCheckMonitor​(org.objectweb.asm.MethodVisitor mv,
                                                   int pc)
        Generates bytecode for checking the VM monitor
        Parameters:
        mv - the method visitor to generate code for
        pc - the current program counter
      • getEnv

        public ExecEnv getEnv()
        The execution environment to JIT for.
        Returns:
        the env
      • isDumpBytecode

        public boolean isDumpBytecode()
        Returns whether or not to dump the generated bytecode to a class file.
        Returns:
        whether or not to dump the generated bytecode to a class file
      • setDumpBytecode

        public void setDumpBytecode​(boolean dumpBytecode)
        Sets whether or not to dump the generated bytecode to a class file.
        Parameters:
        dumpBytecode - whether or not to dump the generated bytecode to a class file
      • cleanup

        public void cleanup()
        Cleans up all generated bytecode.