/*
 *   
 *
 * Copyright  1990-2006 Sun Microsystems, Inc. All Rights Reserved.
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License version
 * 2 only, as published by the Free Software Foundation. 
 * 
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License version 2 for more details (a copy is
 * included at /legal/license.txt). 
 * 
 * You should have received a copy of the GNU General Public License
 * version 2 along with this work; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA 
 * 
 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
 * Clara, CA 95054 or visit www.sun.com if you need additional
 * information or have any questions. 
 */

#if ENABLE_COMPILER

class Entry: public MixedOop {
 public:
  // To avoid endless lists of friends the static offset computation
  // routines are all public.
  static jint bci_offset() {
    return FIELD_OFFSET(EntryDesc, _bci);
  }
  static jint frame_offset() {
    return FIELD_OFFSET(EntryDesc, _frame);
  }
  static jint label_offset() {
    return FIELD_OFFSET(EntryDesc, _label);
  }
  static jint code_size_offset() {
    return FIELD_OFFSET(EntryDesc, _code_size);
  }

 public:
  HANDLE_DEFINITION(Entry, MixedOop);

  // ^Entry
  static ReturnOop allocate(jint bci, VirtualStackFrame* frame, 
                            BinaryAssembler::Label& label, jint code_size
                            JVM_TRAPS);

  // Field accessors.
  jint bci() {
    return int_field(bci_offset());
  }
  void set_bci(jint value) {
    int_field_put(bci_offset(), value);
  }

  // ^VirtualStackFrame
  ReturnOop frame() {
    return obj_field(frame_offset());
  }
  void set_frame(VirtualStackFrame* value) {
    obj_field_put(frame_offset(), value);
  }

  BinaryAssembler::Label label() {
    BinaryAssembler::Label L;
    L._encoding = int_field(label_offset()); 
    return L;
  }
  void set_label(BinaryAssembler::Label& value) {
    int_field_put(label_offset(), value._encoding);
  }

  jint code_size() {
    return int_field(code_size_offset());
  }
  void set_code_size(jint value) {
    int_field_put(code_size_offset(), value);
  }
};

#endif /* ENABLE_COMPILER */
