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 // BranchData
  35 //
  36 // A BranchData is used to access profiling data for a two-way branch.
  37 // It consists of taken and notTaken counts as well as a data displacement
  38 // for the taken case.
  39 public class BranchData extends JumpData {
  40 
  41   static final int notTakenOffSet = jumpCellCount;
  42   static final int branchCellCount = notTakenOffSet + 1;
  43 
  44   public BranchData(DataLayout layout) {
  45     super(layout);
  46     //assert(layout.tag() == DataLayout.branchDataTag, "wrong type");
  47   }
  48 
  49   static int staticCellCount() {
  50     return branchCellCount;
  51   }
  52 
  53   public int cellCount() {
  54     return staticCellCount();
  55   }
  56 
  57   // Direct accessor
  58   int notTaken() {
  59     return uintAt(notTakenOffSet);
  60   }
  61 
  62   // Code generation support
  63   static int notTakenOffset() {
  64     return cellOffset(notTakenOffSet);
  65   }
  66   static int branchDataSize() {
  67     return cellOffset(branchCellCount);
  68   }
  69 
  70   public void printDataOn(PrintStream st) {
  71     printShared(st, "BranchData");
  72     st.println("taken(" + taken() + ") displacement(" + displacement() + ")");
  73     tab(st);
  74     st.println("not taken(" + notTaken() + ")");
  75   }
  76 }