Class CodeBlockJIT

java.lang.Object
org.eclipse.m2m.atl.emftvm.jit.CodeBlockJIT
All Implemented Interfaces:
org.objectweb.asm.Opcodes

public class CodeBlockJIT extends 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 final String
     
    protected final Map<String,byte[]>
    Map of class names to generated bytecode.
    protected final org.eclipse.m2m.atl.emftvm.jit.CodeBlockJIT.JITClassLoader
    Internal ClassLoader instance for loading the generated classes.
    protected final Map<String,CodeBlock>
    Map of class names to input CodeBlocks for the JIT.
    protected final ExecEnv
    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, V23, V9
  • Constructor Summary

    Constructors
    Constructor
    Description
    Creates a new CodeBlockJIT.
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    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, String className)
    Generates a constructor for the JITCodeBlock.
    protected void
    generateExecute(org.objectweb.asm.MethodVisitor execute, CodeBlock cb, String className)
    Generates an execute method for the JITCodeBlock.
    The execution environment to JIT for.
    protected String
    Returns the next class name to use for JIT output.
    protected byte[]
    internalJit(CodeBlock cb, String className)
    Performs the actual JIT-compile of cb into a JITCodeBlock class with name className.
    boolean
    Returns whether or not to dump the generated bytecode to a class file.
    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 Details

    • BASE_PACKAGE

      public static final String BASE_PACKAGE
      See Also:
    • codeBlocks

      protected final Map<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 Map<String,byte[]> byteCode
      Map of class names to generated bytecode.
  • Constructor Details

    • CodeBlockJIT

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

    • jit

      JIT-compiles cb into a natively implemented CodeBlock.
      Parameters:
      cb - the regular EMFTVM bytecode CodeBlock
      Returns:
      an instance of the JIT-generated CodeBlock
      Throws:
      ClassNotFoundException
      IllegalArgumentException
      SecurityException
      InstantiationException
      IllegalAccessException
      InvocationTargetException
      NoSuchMethodException
    • getNextClassName

      protected 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, 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, 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, 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.