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 }