57 // to assess the quality ("maturity") of its data.
58 //
59 // Short (<32-bit) counters are designed to overflow to a known "saturated"
60 // state. Also, certain recorded per-BCI events are given one-bit counters
61 // which overflow to a saturated state which applied to all counters at
62 // that BCI. In other words, there is a small lattice which approximates
63 // the ideal of an infinite-precision counter for each event at each BCI,
64 // and the lattice quickly "bottoms out" in a state where all counters
65 // are taken to be indefinitely large.
66 //
67 // The reader will find many data races in profile gathering code, starting
68 // with invocation counter incrementation. None of these races harm correct
69 // execution of the compiled code.
70
71 // forward decl
72 class ProfileData;
73
74 // DataLayout
75 //
76 // Overlay for generic profiling data.
77 class DataLayout VALUE_OBJ_CLASS_SPEC {
78 friend class VMStructs;
79 friend class JVMCIVMStructs;
80
81 private:
82 // Every data layout begins with a header. This header
83 // contains a tag, which is used to indicate the size/layout
84 // of the data, 4 bits of flags, which can be used in any way,
85 // 4 bits of trap history (none/one reason/many reasons),
86 // and a bci, which is used to tie this piece of data to a
87 // specific bci in the bytecodes.
88 union {
89 intptr_t _bits;
90 struct {
91 u1 _tag;
92 u1 _flags;
93 u2 _bci;
94 } _struct;
95 } _header;
96
97 // The data layout has an arbitrary number of cells, each sized
|
57 // to assess the quality ("maturity") of its data.
58 //
59 // Short (<32-bit) counters are designed to overflow to a known "saturated"
60 // state. Also, certain recorded per-BCI events are given one-bit counters
61 // which overflow to a saturated state which applied to all counters at
62 // that BCI. In other words, there is a small lattice which approximates
63 // the ideal of an infinite-precision counter for each event at each BCI,
64 // and the lattice quickly "bottoms out" in a state where all counters
65 // are taken to be indefinitely large.
66 //
67 // The reader will find many data races in profile gathering code, starting
68 // with invocation counter incrementation. None of these races harm correct
69 // execution of the compiled code.
70
71 // forward decl
72 class ProfileData;
73
74 // DataLayout
75 //
76 // Overlay for generic profiling data.
77 class DataLayout {
78 friend class VMStructs;
79 friend class JVMCIVMStructs;
80
81 private:
82 // Every data layout begins with a header. This header
83 // contains a tag, which is used to indicate the size/layout
84 // of the data, 4 bits of flags, which can be used in any way,
85 // 4 bits of trap history (none/one reason/many reasons),
86 // and a bci, which is used to tie this piece of data to a
87 // specific bci in the bytecodes.
88 union {
89 intptr_t _bits;
90 struct {
91 u1 _tag;
92 u1 _flags;
93 u2 _bci;
94 } _struct;
95 } _header;
96
97 // The data layout has an arbitrary number of cells, each sized
|