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);
+}