00001 package gov.nasa.arc.ase.jpf.jvm.bytecode;
00002
00003 import gov.nasa.arc.ase.jpf.*;
00004 import gov.nasa.arc.ase.jpf.jvm.*;
00005 import de.fub.bytecode.generic.InstructionHandle;
00006 import gov.nasa.arc.ase.util.Debug;
00007
00008 import gov.nasa.arc.ase.jpf.jvm.runtime.*;
00009
00010
00011 public class IALOAD extends AbstractInstruction {
00012 private de.fub.bytecode.generic.IALOAD peer;
00013
00014
00015
00016 private void ANALYZE_execute(ThreadInfo th, int arrayref,
00017 DynamicArea da, int index){
00018 if (Analyze.on()){
00019 long value = da.getValue(arrayref, index);
00020 LockStatus lock_status = da.getLockStatus(arrayref);
00021 Analyze.debugPreAccess(th, "Object[]", Integer.toString(index),
00022 new ObjRef(arrayref), "IALOAD", value, lock_status);
00023 lock_status.checkReadArray(th, index);
00024 Analyze.debugPostAccess(lock_status);
00025 }
00026 }
00027 public InstructionHandle execute(SystemState ss, KernelState ks, ThreadInfo th) {
00028 int index = th.pop();
00029 int arrayref = th.pop();
00030 int value = (int)ks.dynamic_area.getValue(arrayref, index);
00031
00032 th.push(value);
00033
00034 return th.getPC().getNext();
00035 }
00036 public void setPeer(de.fub.bytecode.generic.Instruction i) {
00037 peer = (de.fub.bytecode.generic.IALOAD)i;
00038 }
00039 }