Mercurial > hg > truffle
annotate agent/src/share/classes/sun/jvm/hotspot/oops/DataLayout.java @ 5981:4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
Summary: Errant files added as part of 7088955 fix. The Copyright information now corrected with gpl-header template
Reviewed-by: sla, ohair, mbykov
author | minqi |
---|---|
date | Wed, 28 Mar 2012 14:27:38 -0700 |
parents | f6f3bb0ee072 |
children | da91efe96a93 |
rev | line source |
---|---|
3939 | 1 /* |
2 * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved. | |
5981
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3939 | 4 * |
5981
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
7 * published by the Free Software Foundation. |
3939 | 8 * |
5981
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
13 * accompanied this code). |
3939 | 14 * |
5981
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
3939 | 18 * |
5981
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
4bec1b1f7b33
7156960: Incorrect copyright headers in parts of the Serviceability agent
minqi
parents:
3939
diff
changeset
|
21 * questions. |
3939 | 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 public class DataLayout { | |
35 public static final int noTag = 0; | |
36 public static final int bitDataTag = 1; | |
37 public static final int counterDataTag = 2; | |
38 public static final int jumpDataTag= 3; | |
39 public static final int receiverTypeDataTag = 4; | |
40 public static final int virtualCallDataTag = 5; | |
41 public static final int retDataTag = 6; | |
42 public static final int branchDataTag = 7; | |
43 public static final int multiBranchDataTag = 8; | |
44 | |
45 // The _struct._flags word is formatted as [trapState:4 | flags:4]. | |
46 // The trap state breaks down further as [recompile:1 | reason:3]. | |
47 // This further breakdown is defined in deoptimization.cpp. | |
48 // See Deoptimization.trapStateReason for an assert that | |
49 // trapBits is big enough to hold reasons < reasonRecordedLimit. | |
50 // | |
51 // The trapState is collected only if ProfileTraps is true. | |
52 public static final int trapBits = 1+3; // 3: enough to distinguish [0..reasonRecordedLimit]. | |
53 public static final int trapShift = 8 - trapBits; | |
54 public static final int trapMask = Bits.rightNBits(trapBits); | |
55 public static final int trapMaskInPlace = (trapMask << trapShift); | |
56 public static final int flagLimit = trapShift; | |
57 public static final int flagMask = Bits.rightNBits(flagLimit); | |
58 public static final int firstFlag = 0; | |
59 | |
60 private Address data; | |
61 | |
62 private int offset; | |
63 | |
64 private boolean handlized; | |
65 | |
66 public DataLayout(MethodData d, int o) { | |
67 data = d.getHandle(); | |
68 offset = o; | |
69 } | |
70 | |
71 public DataLayout(Address d, int o) { | |
72 data = d; | |
73 offset = o; | |
74 handlized = true; | |
75 } | |
76 | |
77 public int dp() { return offset; } | |
78 | |
79 private int getU11(int at) { | |
80 return data.getJByteAt(offset + at) & 0xff; | |
81 } | |
82 | |
83 private int getU22(int at) { | |
84 return data.getJShortAt(offset + at) & 0xffff; | |
85 } | |
86 | |
87 int cellAt(int index) { | |
88 // Cells are intptr_t sized but only contain ints as raw values | |
89 return (int)data.getCIntegerAt(offset + cellOffset(index), MethodData.cellSize, false); | |
90 } | |
91 | |
92 Oop oopAt(int index) { | |
93 OopHandle handle; | |
94 if (handlized) { | |
95 throw new InternalError("unsupported"); | |
96 } | |
97 handle = data.getOopHandleAt(offset + cellOffset(index)); | |
98 return VM.getVM().getObjectHeap().newOop(handle); | |
99 } | |
100 | |
101 public Address addressAt(int index) { | |
102 OopHandle handle; | |
103 if (handlized) { | |
104 return data.getAddressAt(offset + cellOffset(index)); | |
105 } else { | |
106 return data.getOopHandleAt(offset + cellOffset(index)); | |
107 } | |
108 } | |
109 | |
110 // Every data layout begins with a header. This header | |
111 // contains a tag, which is used to indicate the size/layout | |
112 // of the data, 4 bits of flags, which can be used in any way, | |
113 // 4 bits of trap history (none/one reason/many reasons), | |
114 // and a bci, which is used to tie this piece of data to a | |
115 // specific bci in the bytecodes. | |
116 // union { | |
117 // intptrT _bits; | |
118 // struct { | |
119 // u1 _tag; | |
120 // u1 _flags; | |
121 // u2 _bci; | |
122 // } _struct; | |
123 // } _header; | |
124 | |
125 // Some types of data layouts need a length field. | |
126 static boolean needsArrayLen(int tag) { | |
127 return (tag == multiBranchDataTag); | |
128 } | |
129 | |
130 public static final int counterIncrement = 1; | |
131 | |
132 // Size computation | |
133 static int headerSizeInBytes() { | |
134 return MethodData.cellSize; | |
135 } | |
136 static int headerSizeInCells() { | |
137 return 1; | |
138 } | |
139 | |
140 static int computeSizeInBytes(int cellCount) { | |
141 return headerSizeInBytes() + cellCount * MethodData.cellSize; | |
142 } | |
143 | |
144 // Initialization | |
145 // void initialize(int tag, int bci, int cellCount); | |
146 | |
147 // Accessors | |
148 public int tag() { | |
149 return getU11(0); | |
150 } | |
151 | |
152 // Return a few bits of trap state. Range is [0..trapMask]. | |
153 // The state tells if traps with zero, one, or many reasons have occurred. | |
154 // It also tells whether zero or many recompilations have occurred. | |
155 // The associated trap histogram in the MDO itself tells whether | |
156 // traps are common or not. If a BCI shows that a trap X has | |
157 // occurred, and the MDO shows N occurrences of X, we make the | |
158 // simplifying assumption that all N occurrences can be blamed | |
159 // on that BCI. | |
160 int trapState() { | |
161 return (flags() >> trapShift) & trapMask; | |
162 } | |
163 | |
164 int flags() { | |
165 return getU11(1); | |
166 } | |
167 | |
168 int bci() { | |
169 return getU22(2); | |
170 } | |
171 | |
172 boolean flagAt(int flagNumber) { | |
173 // assert(flagNumber < flagLimit, "oob"); | |
174 return (flags() & (0x1 << flagNumber)) != 0; | |
175 } | |
176 | |
177 // Low-level support for code generation. | |
178 static int headerOffset() { | |
179 return 0; | |
180 } | |
181 static int tagOffset() { | |
182 return 0; | |
183 } | |
184 static int flagsOffset() { | |
185 return 1; | |
186 } | |
187 static int bciOffset() { | |
188 return 2; | |
189 } | |
190 public static int cellOffset(int index) { | |
191 return MethodData.cellSize + index * MethodData.cellSize; | |
192 } | |
193 // // Return a value which, when or-ed as a byte into _flags, sets the flag. | |
194 // static int flagNumberToByteConstant(int flagNumber) { | |
195 // assert(0 <= flagNumber && flagNumber < flagLimit, "oob"); | |
196 // DataLayout temp; temp.setHeader(0); | |
197 // temp.setFlagAt(flagNumber); | |
198 // return temp._header._struct._flags; | |
199 // } | |
200 // // Return a value which, when or-ed as a word into _header, sets the flag. | |
201 // static intptrT flagMaskToHeaderMask(int byteConstant) { | |
202 // DataLayout temp; temp.setHeader(0); | |
203 // temp._header._struct._flags = byteConstant; | |
204 // return temp._header._bits; | |
205 // } | |
206 } |