package org.jikesrvm; import org.vmmagic.pragma.Uninterruptible; import org.vmmagic.unboxed.Address; import org.vmmagic.unboxed.LocalAddress; import org.vmmagic.unboxed.WordArray; @Uninterruptible public abstract class VM_Registers { // set by C hardware exception handler and VM_Runtime.athrow // and reset by each implementation of VM_ExceptionDeliverer.deliverException // public boolean inuse; // do exception registers currently contain live values? // The following are used both for thread context switching // and for hardware exception reporting/delivery. // public WordArray gprs; // word size general purpose registers (either 32 or 64 bit) public double[] fprs; // 64-bit floating point registers public LocalAddress ip; // instruction address register /** * Return framepointer for the deepest stackframe */ public abstract LocalAddress getInnermostFramePointer(); /** * Return next instruction address for the deepest stackframe */ public abstract LocalAddress getInnermostInstructionAddress(); /** * set ip & fp. used to control the stack frame at which a scan of * the stack during GC will start, for ex., the top java frame for * a thread that is blocked in native code during GC. */ public abstract void setInnermost(LocalAddress newip, LocalAddress newfp); // update the machine state to unwind the deepest stackframe. // public abstract void unwindStackFrame(); public abstract LocalAddress getIPLocation(); }