Mercurial > hg > Members > kono > jpf-core
diff src/main/gov/nasa/jpf/jvm/JVMInstructionFactory.java @ 0:61d41facf527
initial v8 import (history reset)
author | Peter Mehlitz <Peter.C.Mehlitz@nasa.gov> |
---|---|
date | Fri, 23 Jan 2015 10:14:01 -0800 |
parents | |
children | 6774e2e08d37 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main/gov/nasa/jpf/jvm/JVMInstructionFactory.java Fri Jan 23 10:14:01 2015 -0800 @@ -0,0 +1,483 @@ +/* + * Copyright (C) 2014, United States Government, as represented by the + * Administrator of the National Aeronautics and Space Administration. + * All rights reserved. + * + * The Java Pathfinder core (jpf-core) platform is licensed under the + * Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0. + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package gov.nasa.jpf.jvm; + +import gov.nasa.jpf.util.Invocation; +import gov.nasa.jpf.vm.ClassInfo; +import gov.nasa.jpf.vm.Instruction; +import gov.nasa.jpf.vm.MethodInfo; +import gov.nasa.jpf.vm.NativeMethodInfo; + +import java.util.List; + +/** + * interface for bytecode creation + * + * this deliberately uses the abstract abstract public Instruction as return type to allow different instruction hierarchies in + * extensions. + * + * This shouldn't impose runtime overhead since mandatory parameters are now passed in as factory method arguments. The only + * drawback is that the compiler cannot check for abstract public Instruction class typos, but that seems less important than + * allowing extension specific abstract public Instruction class hierarchies + * + * <2do> there are still direct references of LOOKUPSWITCH, TABLESWITCH. Once these are removed, .jvm does not assume a particular + * abstract public Instruction hierarchy + */ +public abstract class JVMInstructionFactory implements Cloneable { + + protected static JVMInstructionFactory singleton; + + public static JVMInstructionFactory getFactory(){ + return singleton; + } + + protected JVMInstructionFactory(){ + // we should check the singleton first + singleton = this; + } + + + //--- the factory methods + abstract public Instruction aconst_null (); + + abstract public Instruction aload (int localVarIndex); + + abstract public Instruction aload_0 (); + + abstract public Instruction aload_1 (); + + abstract public Instruction aload_2 (); + + abstract public Instruction aload_3 (); + + abstract public Instruction aaload (); + + abstract public Instruction astore (int localVarIndex); + + abstract public Instruction astore_0 (); + + abstract public Instruction astore_1 (); + + abstract public Instruction astore_2 (); + + abstract public Instruction astore_3 (); + + abstract public Instruction aastore (); + + abstract public Instruction areturn (); + + abstract public Instruction anewarray (String clsName); + + abstract public Instruction arraylength (); + + abstract public Instruction athrow (); + + abstract public Instruction baload (); + + abstract public Instruction bastore (); + + abstract public Instruction bipush (int b); + + abstract public Instruction caload (); + + abstract public Instruction castore (); + + abstract public Instruction checkcast (String clsName); + + abstract public Instruction d2f (); + + abstract public Instruction d2i (); + + abstract public Instruction d2l (); + + abstract public Instruction dadd (); + + abstract public Instruction daload (); + + abstract public Instruction dastore (); + + abstract public Instruction dcmpg (); + + abstract public Instruction dcmpl (); + + abstract public Instruction dconst_0 (); + + abstract public Instruction dconst_1 (); + + abstract public Instruction ddiv (); + + abstract public Instruction dload (int localVarIndex); + + abstract public Instruction dload_0 (); + + abstract public Instruction dload_1 (); + + abstract public Instruction dload_2 (); + + abstract public Instruction dload_3 (); + + abstract public Instruction dmul (); + + abstract public Instruction dneg (); + + abstract public Instruction drem (); + + abstract public Instruction dreturn (); + + abstract public Instruction dstore (int localVarIndex); + + abstract public Instruction dstore_0 (); + + abstract public Instruction dstore_1 (); + + abstract public Instruction dstore_2 (); + + abstract public Instruction dstore_3 (); + + abstract public Instruction dsub (); + + abstract public Instruction dup (); + + abstract public Instruction dup_x1 (); + + abstract public Instruction dup_x2 (); + + abstract public Instruction dup2 (); + + abstract public Instruction dup2_x1 (); + + abstract public Instruction dup2_x2 (); + + abstract public Instruction f2d (); + + abstract public Instruction f2i (); + + abstract public Instruction f2l (); + + abstract public Instruction fadd (); + + abstract public Instruction faload (); + + abstract public Instruction fastore (); + + abstract public Instruction fcmpg (); + + abstract public Instruction fcmpl (); + + abstract public Instruction fconst_0 (); + + abstract public Instruction fconst_1 (); + + abstract public Instruction fconst_2 (); + + abstract public Instruction fdiv (); + + abstract public Instruction fload (int localVarIndex); + + abstract public Instruction fload_0 (); + + abstract public Instruction fload_1 (); + + abstract public Instruction fload_2 (); + + abstract public Instruction fload_3 (); + + abstract public Instruction fmul (); + + abstract public Instruction fneg (); + + abstract public Instruction frem (); + + abstract public Instruction freturn (); + + abstract public Instruction fstore (int localVarIndex); + + abstract public Instruction fstore_0 (); + + abstract public Instruction fstore_1 (); + + abstract public Instruction fstore_2 (); + + abstract public Instruction fstore_3 (); + + abstract public Instruction fsub (); + + abstract public Instruction getfield (String fieldName, String clsName, String fieldDescriptor); + + abstract public Instruction getstatic (String fieldName, String clsName, String fieldDescriptor); + + abstract public Instruction goto_ (int targetPc); + + abstract public Instruction goto_w (int targetPc); + + abstract public Instruction i2b (); + + abstract public Instruction i2c (); + + abstract public Instruction i2d (); + + abstract public Instruction i2f (); + + abstract public Instruction i2l (); + + abstract public Instruction i2s (); + + abstract public Instruction iadd (); + + abstract public Instruction iaload (); + + abstract public Instruction iand (); + + abstract public Instruction iastore (); + + abstract public Instruction iconst_m1 (); + + abstract public Instruction iconst_0 (); + + abstract public Instruction iconst_1 (); + + abstract public Instruction iconst_2 (); + + abstract public Instruction iconst_3 (); + + abstract public Instruction iconst_4 (); + + abstract public Instruction iconst_5 (); + + abstract public Instruction idiv (); + + abstract public Instruction if_acmpeq (int targetPc); + + abstract public Instruction if_acmpne (int targetPc); + + abstract public Instruction if_icmpeq (int targetPc); + + abstract public Instruction if_icmpne (int targetPc); + + abstract public Instruction if_icmplt (int targetPc); + + abstract public Instruction if_icmpge (int targetPc); + + abstract public Instruction if_icmpgt (int targetPc); + + abstract public Instruction if_icmple (int targetPc); + + abstract public Instruction ifeq (int targetPc); + + abstract public Instruction ifne (int targetPc); + + abstract public Instruction iflt (int targetPc); + + abstract public Instruction ifge (int targetPc); + + abstract public Instruction ifgt (int targetPc); + + abstract public Instruction ifle (int targetPc); + + abstract public Instruction ifnonnull (int targetPc); + + abstract public Instruction ifnull (int targetPc); + + abstract public Instruction iinc (int localVarIndex, int incConstant); + + abstract public Instruction iload (int localVarIndex); + + abstract public Instruction iload_0 (); + + abstract public Instruction iload_1 (); + + abstract public Instruction iload_2 (); + + abstract public Instruction iload_3 (); + + abstract public Instruction imul (); + + abstract public Instruction ineg (); + + abstract public Instruction instanceof_ (String clsName); + + abstract public Instruction invokeinterface (String clsName, String methodName, String methodSignature); + + abstract public Instruction invokespecial (String clsName, String methodName, String methodSignature); + + abstract public Instruction invokestatic (String clsName, String methodName, String methodSignature); + + abstract public Instruction invokevirtual (String clsName, String methodName, String methodSignature); + + abstract public Instruction invokedynamic (int bootstrapIndex, String samMethodName, String functionType); + + abstract public Instruction ior (); + + abstract public Instruction irem (); + + abstract public Instruction ireturn (); + + abstract public Instruction ishl (); + + abstract public Instruction ishr (); + + abstract public Instruction istore (int localVarIndex); + + abstract public Instruction istore_0 (); + + abstract public Instruction istore_1 (); + + abstract public Instruction istore_2 (); + + abstract public Instruction istore_3 (); + + abstract public Instruction isub (); + + abstract public Instruction iushr (); + + abstract public Instruction ixor (); + + abstract public Instruction jsr (int targetPc); + + abstract public Instruction jsr_w (int targetPc); + + abstract public Instruction l2d (); + + abstract public Instruction l2f (); + + abstract public Instruction l2i (); + + abstract public Instruction ladd (); + + abstract public Instruction laload (); + + abstract public Instruction land (); + + abstract public Instruction lastore (); + + abstract public Instruction lcmp (); + + abstract public Instruction lconst_0 (); + + abstract public Instruction lconst_1 (); + + abstract public Instruction ldc (int v); + + abstract public Instruction ldc (float v); + + abstract public Instruction ldc (String v, boolean isClass); + + abstract public Instruction ldc_w (int v); + + abstract public Instruction ldc_w (float v); + + abstract public Instruction ldc_w (String v, boolean isClass); + + abstract public Instruction ldc2_w (long v); + + abstract public Instruction ldc2_w (double v); + + abstract public Instruction ldiv (); + + abstract public Instruction lload (int localVarIndex); + + abstract public Instruction lload_0 (); + + abstract public Instruction lload_1 (); + + abstract public Instruction lload_2 (); + + abstract public Instruction lload_3 (); + + abstract public Instruction lmul (); + + abstract public Instruction lneg (); + + abstract public Instruction lookupswitch (int defaultTargetPc, int nEntries); + + abstract public Instruction lor (); + + abstract public Instruction lrem (); + + abstract public Instruction lreturn (); + + abstract public Instruction lshl (); + + abstract public Instruction lshr (); + + abstract public Instruction lstore (int localVarIndex); + + abstract public Instruction lstore_0 (); + + abstract public Instruction lstore_1 (); + + abstract public Instruction lstore_2 (); + + abstract public Instruction lstore_3 (); + + abstract public Instruction lsub (); + + abstract public Instruction lushr (); + + abstract public Instruction lxor (); + + abstract public Instruction monitorenter (); + + abstract public Instruction monitorexit (); + + abstract public Instruction multianewarray (String clsName, int dimensions); + + abstract public Instruction new_ (String clsName); + + abstract public Instruction newarray (int typeCode); + + abstract public Instruction nop (); + + abstract public Instruction pop (); + + abstract public Instruction pop2 (); + + abstract public Instruction putfield (String fieldName, String clsName, String fieldDescriptor); + + abstract public Instruction putstatic (String fieldName, String clsName, String fieldDescriptor); + + abstract public Instruction ret (int localVarIndex); + + abstract public Instruction return_ (); + + abstract public Instruction saload (); + + abstract public Instruction sastore (); + + abstract public Instruction sipush (int val); + + abstract public Instruction swap (); + + abstract public Instruction tableswitch (int defaultTargetPc, int low, int high); + + abstract public Instruction wide (); + + //--- the JPF specific ones (only used in synthetic methods) + abstract public Instruction invokecg (List<Invocation> invokes); + + abstract public Instruction invokeclinit (ClassInfo ci); + + abstract public Instruction directcallreturn (); + + abstract public Instruction executenative (NativeMethodInfo mi); + + abstract public Instruction nativereturn (); + + // this is never part of MethodInfo stored code + abstract public Instruction runstart (MethodInfo miRun); +}