1 /*
   2  * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
   3  * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
   4  *
   5  *
   6  *
   7  *
   8  *
   9  *
  10  *
  11  *
  12  *
  13  *
  14  *
  15  *
  16  *
  17  *
  18  *
  19  *
  20  *
  21  *
  22  *
  23  */
  24 
  25 package sun.jvm.hotspot.oops;
  26 
  27 import java.io.*;
  28 import java.util.*;
  29 import sun.jvm.hotspot.debugger.*;
  30 import sun.jvm.hotspot.runtime.*;
  31 import sun.jvm.hotspot.types.*;
  32 import sun.jvm.hotspot.utilities.*;
  33 
  34 // JumpData
  35 //
  36 // A JumpData is used to access profiling information for a direct
  37 // branch.  It is a counter, used for counting the number of branches,
  38 // plus a data displacement, used for realigning the data pointer to
  39 // the corresponding target bci.
  40 public class JumpData extends ProfileData {
  41   static final int   takenOffSet = 0;
  42   static final int     displacementOffSet = 1;
  43   static final int     jumpCellCount = 2;
  44 
  45   public JumpData(DataLayout layout) {
  46     super(layout);
  47     //assert(layout.tag() == DataLayout.jumpDataTag ||
  48     //       layout.tag() == DataLayout.branchDataTag, "wrong type");
  49   }
  50 
  51   static int staticCellCount() {
  52     return jumpCellCount;
  53   }
  54 
  55   public int cellCount() {
  56     return staticCellCount();
  57   }
  58 
  59   // Direct accessor
  60   int taken() {
  61     return uintAt(takenOffSet);
  62   }
  63 
  64   int displacement() {
  65     return intAt(displacementOffSet);
  66   }
  67 
  68   // Code generation support
  69   static int takenOffset() {
  70     return cellOffset(takenOffSet);
  71   }
  72 
  73   static int displacementOffset() {
  74     return cellOffset(displacementOffSet);
  75   }
  76 
  77   public void printDataOn(PrintStream st) {
  78     printShared(st, "JumpData");
  79     st.println("taken(" + taken() + ") displacement(" + displacement() + ")");
  80   }
  81 }