/*
* 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.bytecode;
import java.util.List;
import gov.nasa.jpf.JPFException;
import gov.nasa.jpf.jvm.JVMInstructionFactory;
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;
/**
* this is the new JVMInstructionFactory
*/
public class InstructionFactory extends JVMInstructionFactory {
public InstructionFactory(){
// nothing here
}
@Override
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException cnsx){
throw new JPFException("InstructionFactory " + this.getClass().getName() + " does not support cloning");
}
}
//--- the factory methods
@Override
public Instruction aconst_null() {
return new ACONST_NULL();
}
@Override
public Instruction aload(int localVarIndex) {
return new ALOAD(localVarIndex);
}
@Override
public Instruction aload_0() {
return new ALOAD(0);
}
@Override
public Instruction aload_1() {
return new ALOAD(1);
}
@Override
public Instruction aload_2() {
return new ALOAD(2);
}
@Override
public Instruction aload_3() {
return new ALOAD(3);
}
@Override
public Instruction aaload() {
return new AALOAD();
}
@Override
public Instruction astore(int localVarIndex) {
return new ASTORE(localVarIndex);
}
@Override
public Instruction astore_0() {
return new ASTORE(0);
}
@Override
public Instruction astore_1() {
return new ASTORE(1);
}
@Override
public Instruction astore_2() {
return new ASTORE(2);
}
@Override
public Instruction astore_3() {
return new ASTORE(3);
}
@Override
public Instruction aastore() {
return new AASTORE();
}
@Override
public Instruction areturn() {
return new ARETURN();
}
@Override
public Instruction anewarray(String clsName){
return new ANEWARRAY(clsName);
}
@Override
public Instruction arraylength() {
return new ARRAYLENGTH();
}
@Override
public Instruction athrow() {
return new ATHROW();
}
@Override
public Instruction baload() {
return new BALOAD();
}
@Override
public Instruction bastore() {
return new BASTORE();
}
@Override
public Instruction bipush(int b) {
return new BIPUSH(b);
}
@Override
public Instruction caload() {
return new CALOAD();
}
@Override
public Instruction castore() {
return new CASTORE();
}
@Override
public Instruction checkcast(String clsName){
return new CHECKCAST(clsName);
}
@Override
public Instruction d2f() {
return new D2F();
}
@Override
public Instruction d2i() {
return new D2I();
}
@Override
public Instruction d2l() {
return new D2L();
}
@Override
public Instruction dadd() {
return new DADD();
}
@Override
public Instruction daload() {
return new DALOAD();
}
@Override
public Instruction dastore() {
return new DASTORE();
}
@Override
public Instruction dcmpg() {
return new DCMPG();
}
@Override
public Instruction dcmpl() {
return new DCMPL();
}
@Override
public Instruction dconst_0() {
return new DCONST(0.0);
}
@Override
public Instruction dconst_1() {
return new DCONST(1.0);
}
@Override
public Instruction ddiv() {
return new DDIV();
}
@Override
public Instruction dload(int localVarIndex) {
return new DLOAD(localVarIndex);
}
@Override
public Instruction dload_0() {
return new DLOAD(0);
}
@Override
public Instruction dload_1() {
return new DLOAD(1);
}
@Override
public Instruction dload_2() {
return new DLOAD(2);
}
@Override
public Instruction dload_3() {
return new DLOAD(3);
}
@Override
public Instruction dmul() {
return new DMUL();
}
@Override
public Instruction dneg() {
return new DNEG();
}
@Override
public Instruction drem() {
return new DREM();
}
@Override
public Instruction dreturn() {
return new DRETURN();
}
@Override
public Instruction dstore(int localVarIndex) {
return new DSTORE(localVarIndex);
}
@Override
public Instruction dstore_0() {
return new DSTORE(0);
}
@Override
public Instruction dstore_1() {
return new DSTORE(1);
}
@Override
public Instruction dstore_2() {
return new DSTORE(2);
}
@Override
public Instruction dstore_3() {
return new DSTORE(3);
}
@Override
public Instruction dsub() {
return new DSUB();
}
@Override
public Instruction dup() {
return new DUP();
}
@Override
public Instruction dup_x1() {
return new DUP_X1();
}
@Override
public Instruction dup_x2() {
return new DUP_X2();
}
@Override
public Instruction dup2() {
return new DUP2();
}
@Override
public Instruction dup2_x1() {
return new DUP2_X1();
}
@Override
public Instruction dup2_x2() {
return new DUP2_X2();
}
@Override
public Instruction f2d() {
return new F2D();
}
@Override
public Instruction f2i() {
return new F2I();
}
@Override
public Instruction f2l() {
return new F2L();
}
@Override
public Instruction fadd() {
return new FADD();
}
@Override
public Instruction faload() {
return new FALOAD();
}
@Override
public Instruction fastore() {
return new FASTORE();
}
@Override
public Instruction fcmpg() {
return new FCMPG();
}
@Override
public Instruction fcmpl() {
return new FCMPL();
}
@Override
public Instruction fconst_0() {
return new FCONST(0.0f);
}
@Override
public Instruction fconst_1() {
return new FCONST(1.0f);
}
@Override
public Instruction fconst_2() {
return new FCONST(2.0f);
}
@Override
public Instruction fdiv() {
return new FDIV();
}
@Override
public Instruction fload(int localVarIndex) {
return new FLOAD(localVarIndex);
}
@Override
public Instruction fload_0() {
return new FLOAD(0);
}
@Override
public Instruction fload_1() {
return new FLOAD(1);
}
@Override
public Instruction fload_2() {
return new FLOAD(2);
}
@Override
public Instruction fload_3() {
return new FLOAD(3);
}
@Override
public Instruction fmul() {
return new FMUL();
}
@Override
public Instruction fneg() {
return new FNEG();
}
@Override
public Instruction frem() {
return new FREM();
}
@Override
public Instruction freturn() {
return new FRETURN();
}
@Override
public Instruction fstore(int localVarIndex) {
return new FSTORE(localVarIndex);
}
@Override
public Instruction fstore_0() {
return new FSTORE(0);
}
@Override
public Instruction fstore_1() {
return new FSTORE(1);
}
@Override
public Instruction fstore_2() {
return new FSTORE(2);
}
@Override
public Instruction fstore_3() {
return new FSTORE(3);
}
@Override
public Instruction fsub() {
return new FSUB();
}
@Override
public Instruction getfield(String fieldName, String clsName, String fieldDescriptor){
return new GETFIELD(fieldName, clsName, fieldDescriptor);
}
@Override
public Instruction getstatic(String fieldName, String clsName, String fieldDescriptor){
return new GETSTATIC(fieldName, clsName, fieldDescriptor);
}
@Override
public Instruction goto_(int targetPc) {
return new GOTO(targetPc);
}
@Override
public Instruction goto_w(int targetPc) {
return new GOTO_W(targetPc);
}
@Override
public Instruction i2b() {
return new I2B();
}
@Override
public Instruction i2c() {
return new I2C();
}
@Override
public Instruction i2d() {
return new I2D();
}
@Override
public Instruction i2f() {
return new I2F();
}
@Override
public Instruction i2l() {
return new I2L();
}
@Override
public Instruction i2s() {
return new I2S();
}
@Override
public Instruction iadd() {
return new IADD();
}
@Override
public Instruction iaload() {
return new IALOAD();
}
@Override
public Instruction iand() {
return new IAND();
}
@Override
public Instruction iastore() {
return new IASTORE();
}
@Override
public Instruction iconst_m1() {
return new ICONST(-1);
}
@Override
public Instruction iconst_0() {
return new ICONST(0);
}
@Override
public Instruction iconst_1() {
return new ICONST(1);
}
@Override
public Instruction iconst_2() {
return new ICONST(2);
}
@Override
public Instruction iconst_3() {
return new ICONST(3);
}
@Override
public Instruction iconst_4() {
return new ICONST(4);
}
@Override
public Instruction iconst_5() {
return new ICONST(5);
}
@Override
public Instruction idiv() {
return new IDIV();
}
@Override
public Instruction if_acmpeq(int targetPc) {
return new IF_ACMPEQ(targetPc);
}
@Override
public Instruction if_acmpne(int targetPc) {
return new IF_ACMPNE(targetPc);
}
@Override
public Instruction if_icmpeq(int targetPc) {
return new IF_ICMPEQ(targetPc);
}
@Override
public Instruction if_icmpne(int targetPc) {
return new IF_ICMPNE(targetPc);
}
@Override
public Instruction if_icmplt(int targetPc) {
return new IF_ICMPLT(targetPc);
}
@Override
public Instruction if_icmpge(int targetPc) {
return new IF_ICMPGE(targetPc);
}
@Override
public Instruction if_icmpgt(int targetPc) {
return new IF_ICMPGT(targetPc);
}
@Override
public Instruction if_icmple(int targetPc) {
return new IF_ICMPLE(targetPc);
}
@Override
public Instruction ifeq(int targetPc) {
return new IFEQ(targetPc);
}
@Override
public Instruction ifne(int targetPc) {
return new IFNE(targetPc);
}
@Override
public Instruction iflt(int targetPc) {
return new IFLT(targetPc);
}
@Override
public Instruction ifge(int targetPc) {
return new IFGE(targetPc);
}
@Override
public Instruction ifgt(int targetPc) {
return new IFGT(targetPc);
}
@Override
public Instruction ifle(int targetPc) {
return new IFLE(targetPc);
}
@Override
public Instruction ifnonnull(int targetPc) {
return new IFNONNULL(targetPc);
}
@Override
public Instruction ifnull(int targetPc) {
return new IFNULL(targetPc);
}
@Override
public Instruction iinc(int localVarIndex, int incConstant) {
return new IINC(localVarIndex, incConstant);
}
@Override
public Instruction iload(int localVarIndex) {
return new ILOAD(localVarIndex);
}
@Override
public Instruction iload_0() {
return new ILOAD(0);
}
@Override
public Instruction iload_1() {
return new ILOAD(1);
}
@Override
public Instruction iload_2() {
return new ILOAD(2);
}
@Override
public Instruction iload_3() {
return new ILOAD(3);
}
@Override
public Instruction imul() {
return new IMUL();
}
@Override
public Instruction ineg() {
return new INEG();
}
@Override
public Instruction instanceof_(String clsName){
return new INSTANCEOF(clsName);
}
@Override
public Instruction invokeinterface(String clsName, String methodName, String methodSignature){
return new INVOKEINTERFACE(clsName, methodName, methodSignature);
}
@Override
public Instruction invokespecial(String clsName, String methodName, String methodSignature){
return new INVOKESPECIAL(clsName, methodName, methodSignature);
}
@Override
public Instruction invokestatic(String clsName, String methodName, String methodSignature){
return new INVOKESTATIC(clsName, methodName, methodSignature);
}
@Override
public Instruction invokevirtual(String clsName, String methodName, String methodSignature){
return new INVOKEVIRTUAL(clsName, methodName, methodSignature);
}
@Override
public Instruction invokedynamic(int bootstrapIndex, String samMethodName, String functionType){
return new INVOKEDYNAMIC(bootstrapIndex, samMethodName, functionType);
}
@Override
public Instruction ior() {
return new IOR();
}
@Override
public Instruction irem() {
return new IREM();
}
@Override
public Instruction ireturn() {
return new IRETURN();
}
@Override
public Instruction ishl() {
return new ISHL();
}
@Override
public Instruction ishr() {
return new ISHR();
}
@Override
public Instruction istore(int localVarIndex) {
return new ISTORE(localVarIndex);
}
@Override
public Instruction istore_0() {
return new ISTORE(0);
}
@Override
public Instruction istore_1() {
return new ISTORE(1);
}
@Override
public Instruction istore_2() {
return new ISTORE(2);
}
@Override
public Instruction istore_3() {
return new ISTORE(3);
}
@Override
public Instruction isub() {
return new ISUB();
}
@Override
public Instruction iushr() {
return new IUSHR();
}
@Override
public Instruction ixor() {
return new IXOR();
}
@Override
public Instruction jsr(int targetPc) {
return new JSR(targetPc);
}
@Override
public Instruction jsr_w(int targetPc) {
return new JSR_W(targetPc);
}
@Override
public Instruction l2d() {
return new L2D();
}
@Override
public Instruction l2f() {
return new L2F();
}
@Override
public Instruction l2i() {
return new L2I();
}
@Override
public Instruction ladd() {
return new LADD();
}
@Override
public Instruction laload() {
return new LALOAD();
}
@Override
public Instruction land() {
return new LAND();
}
@Override
public Instruction lastore() {
return new LASTORE();
}
@Override
public Instruction lcmp() {
return new LCMP();
}
@Override
public Instruction lconst_0() {
return new LCONST(0);
}
@Override
public Instruction lconst_1() {
return new LCONST(1L);
}
@Override
public Instruction ldc(int v){
return new LDC(v);
}
@Override
public Instruction ldc(float v){
return new LDC(v);
}
@Override
public Instruction ldc(String v, boolean isClass){
return new LDC(v, isClass);
}
@Override
public Instruction ldc_w(int v){
return new LDC_W(v);
}
@Override
public Instruction ldc_w(float v){
return new LDC_W(v);
}
@Override
public Instruction ldc_w(String v, boolean isClass){
return new LDC_W(v, isClass);
}
@Override
public Instruction ldc2_w(long v){
return new LDC2_W(v);
}
@Override
public Instruction ldc2_w(double v){
return new LDC2_W(v);
}
@Override
public Instruction ldiv() {
return new LDIV();
}
@Override
public Instruction lload(int localVarIndex) {
return new LLOAD(localVarIndex);
}
@Override
public Instruction lload_0() {
return new LLOAD(0);
}
@Override
public Instruction lload_1() {
return new LLOAD(1);
}
@Override
public Instruction lload_2() {
return new LLOAD(2);
}
@Override
public Instruction lload_3() {
return new LLOAD(3);
}
@Override
public Instruction lmul() {
return new LMUL();
}
@Override
public Instruction lneg() {
return new LNEG();
}
@Override
public Instruction lookupswitch(int defaultTargetPc, int nEntries) {
return new LOOKUPSWITCH(defaultTargetPc, nEntries);
}
@Override
public Instruction lor() {
return new LOR();
}
@Override
public Instruction lrem() {
return new LREM();
}
@Override
public Instruction lreturn() {
return new LRETURN();
}
@Override
public Instruction lshl() {
return new LSHL();
}
@Override
public Instruction lshr() {
return new LSHR();
}
@Override
public Instruction lstore(int localVarIndex) {
return new LSTORE(localVarIndex);
}
@Override
public Instruction lstore_0() {
return new LSTORE(0);
}
@Override
public Instruction lstore_1() {
return new LSTORE(1);
}
@Override
public Instruction lstore_2() {
return new LSTORE(2);
}
@Override
public Instruction lstore_3() {
return new LSTORE(3);
}
@Override
public Instruction lsub() {
return new LSUB();
}
@Override
public Instruction lushr() {
return new LUSHR();
}
@Override
public Instruction lxor() {
return new LXOR();
}
@Override
public Instruction monitorenter() {
return new MONITORENTER();
}
@Override
public Instruction monitorexit() {
return new MONITOREXIT();
}
@Override
public Instruction multianewarray(String clsName, int dimensions){
return new MULTIANEWARRAY(clsName, dimensions);
}
@Override
public Instruction new_(String clsName) {
return new NEW(clsName);
}
@Override
public Instruction newarray(int typeCode) {
return new NEWARRAY(typeCode);
}
@Override
public Instruction nop() {
return new NOP();
}
@Override
public Instruction pop() {
return new POP();
}
@Override
public Instruction pop2() {
return new POP2();
}
@Override
public Instruction putfield(String fieldName, String clsName, String fieldDescriptor){
return new PUTFIELD(fieldName, clsName, fieldDescriptor);
}
@Override
public Instruction putstatic(String fieldName, String clsName, String fieldDescriptor){
return new PUTSTATIC(fieldName, clsName, fieldDescriptor);
}
@Override
public Instruction ret(int localVarIndex) {
return new RET(localVarIndex);
}
@Override
public Instruction return_() {
return new RETURN();
}
@Override
public Instruction saload() {
return new SALOAD();
}
@Override
public Instruction sastore() {
return new SASTORE();
}
@Override
public Instruction sipush(int val) {
return new SIPUSH(val);
}
@Override
public Instruction swap() {
return new SWAP();
}
@Override
public Instruction tableswitch(int defaultTargetPc, int low, int high) {
return new TABLESWITCH(defaultTargetPc, low, high);
}
@Override
public Instruction wide() {
return new WIDE();
}
//--- the JPF specific ones (only used in synthetic methods)
@Override
public Instruction invokecg(List<Invocation> invokes) {
return new INVOKECG(invokes);
}
@Override
public Instruction invokeclinit(ClassInfo ci) {
return new INVOKECLINIT(ci);
}
@Override
public Instruction directcallreturn(){
return new DIRECTCALLRETURN();
}
@Override
public Instruction executenative(NativeMethodInfo mi){
return new EXECUTENATIVE(mi);
}
@Override
public Instruction nativereturn(){
return new NATIVERETURN();
}
// this is never part of MethodInfo stored code
@Override
public Instruction runstart(MethodInfo miRun){
return new RUNSTART();
}
@Override
public Instruction finishclinit(ClassInfo ci) {
return new FINISHCLINIT(ci);
}
}