Package org.eclipse.m2m.atl.emftvm.jit
Class CodeBlockJIT
- java.lang.Object
-
- org.eclipse.m2m.atl.emftvm.jit.CodeBlockJIT
-
- All Implemented Interfaces:
org.objectweb.asm.Opcodes
public class CodeBlockJIT extends java.lang.Object implements org.objectweb.asm.Opcodes
-
-
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
InternalClassLoader
instance for loading the generated classes.protected java.util.Map<java.lang.String,CodeBlock>
codeBlocks
Map
of class names to inputCodeBlock
s 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
-
-
Constructor Summary
Constructors Constructor Description CodeBlockJIT(ExecEnv env)
Creates a newCodeBlockJIT
.
-
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 monitorprotected static void
generateConstructor(org.objectweb.asm.MethodVisitor init, java.lang.String className)
Generates a constructor for theJITCodeBlock
.protected void
generateExecute(org.objectweb.asm.MethodVisitor execute, CodeBlock cb, java.lang.String className)
Generates an execute method for theJITCodeBlock
.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)
boolean
isDumpBytecode()
Returns whether or not to dump the generated bytecode to a class file.JITCodeBlock
jit(CodeBlock cb)
JIT-compilescb
into a natively implementedCodeBlock
.void
setDumpBytecode(boolean dumpBytecode)
Sets whether or not to dump the generated bytecode to a class file.
-
-
-
Field Detail
-
BASE_PACKAGE
public static final java.lang.String BASE_PACKAGE
- See Also:
- Constant Field Values
-
codeBlocks
protected final java.util.Map<java.lang.String,CodeBlock> codeBlocks
Map
of class names to inputCodeBlock
s for the JIT.
-
classLoader
protected final org.eclipse.m2m.atl.emftvm.jit.CodeBlockJIT.JITClassLoader classLoader
InternalClassLoader
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 newCodeBlockJIT
.- 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-compilescb
into a natively implementedCodeBlock
.- Parameters:
cb
- the regular EMFTVM bytecodeCodeBlock
- 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)
- Parameters:
cb
- theCodeBlock
to JIT-compileclassName
- 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 theJITCodeBlock
.- Parameters:
init
- the constructor visitorclassName
- 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 theJITCodeBlock
.- Parameters:
execute
- the execute method visitorcb
- theCodeBlock
to JIT-compileclassName
- 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 forpc
- 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.
-
-