annotate graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/jvmci/HotSpotReferenceMap.java @ 21534:2cb94a7ae1b7

avoid unnecessary loading of regex classes when assertions are disabled
author Doug Simon <doug.simon@oracle.com>
date Sun, 24 May 2015 16:29:41 +0200
parents 1da7aef31a08
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
1 /*
14562
45812e05cdb3 Move narrow oop handling in reference maps to hotspot specific code.
Roland Schatz <roland.schatz@oracle.com>
parents: 13936
diff changeset
2 * Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
4 *
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
8 *
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
13 * accompanied this code).
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
14 *
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
18 *
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
21 * questions.
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
22 */
21526
1da7aef31a08 created com.oracle.graal.hotspot.jvmci package and moved classes destined for future JVMCI module into it (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21413
diff changeset
23 package com.oracle.graal.hotspot.jvmci;
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
24
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
25 import java.util.*;
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
26
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
27 import com.oracle.graal.api.code.CodeUtil.RefMapFormatter;
14562
45812e05cdb3 Move narrow oop handling in reference maps to hotspot specific code.
Roland Schatz <roland.schatz@oracle.com>
parents: 13936
diff changeset
28 import com.oracle.graal.api.code.*;
45812e05cdb3 Move narrow oop handling in reference maps to hotspot specific code.
Roland Schatz <roland.schatz@oracle.com>
parents: 13936
diff changeset
29 import com.oracle.graal.api.meta.*;
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
30
21411
082417ac43e4 removed com.oracle.graal.hotspot.server and uses of Serializable it depended upon (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21005
diff changeset
31 public final class HotSpotReferenceMap extends ReferenceMap {
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
32
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
33 static final int OOP64 = 0b1010;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
34 static final int OOP32 = 0b01;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
35 static final int NARROW_LOW = OOP32;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
36 static final int NARROW_HIGH = OOP32 << 2;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
37 static final int NARROW_BOTH = NARROW_LOW | NARROW_HIGH;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
38
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
39 private enum MapEntry {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
40 NoReference(0),
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
41 WideOop(OOP64),
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
42 NarrowOopLowerHalf(NARROW_LOW),
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
43 NarrowOopUpperHalf(NARROW_HIGH),
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
44 TwoNarrowOops(NARROW_BOTH),
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
45 Illegal(-1);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
46
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
47 MapEntry(int pattern) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
48 this.pattern = pattern;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
49 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
50
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
51 final int pattern;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
52
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
53 /**
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
54 * Create enum values from OopMap.
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
55 * <p>
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
56 * These bits can have the following values (MSB first):
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
57 *
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
58 * <pre>
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
59 * 0000 - contains no references
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
60 * 1010 - contains a wide oop
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
61 * 0001 - contains a narrow oop in the lower half
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
62 * 0101 - contains a narrow oop in the upper half
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
63 * 0101 - contains two narrow oops
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
64 * </pre>
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
65 *
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
66 * @see HotSpotReferenceMap#registerRefMap
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
67 * @see HotSpotReferenceMap#frameRefMap
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
68 */
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
69 static MapEntry getFromBits(int idx, HotSpotOopMap set) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
70 int n = set.get(idx);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
71 switch (n) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
72 case 0:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
73 return NoReference;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
74 case OOP64:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
75 return WideOop;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
76 case NARROW_LOW:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
77 return NarrowOopLowerHalf;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
78 case NARROW_HIGH:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
79 return NarrowOopUpperHalf;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
80 case NARROW_BOTH:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
81 return TwoNarrowOops;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
82 default:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
83 return Illegal;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
84 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
85 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
86
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
87 String toBitString() {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
88 int bits = toBit(this);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
89 if (bits == -1) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
90 return "---";
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
91 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
92 return String.format("%3s", Integer.toBinaryString(bits)).replace(' ', '0');
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
93 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
94
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
95 static int toBit(MapEntry type) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
96 return type.pattern;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
97 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
98 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
99
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
100 /**
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
101 * A specialized bit set that represents both wide and narrow oops in an efficient manner. The
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
102 * map consists of 4 bit entries that represent 8 bytes of memory.
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
103 *
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
104 */
21411
082417ac43e4 removed com.oracle.graal.hotspot.server and uses of Serializable it depended upon (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21005
diff changeset
105 class HotSpotOopMap implements Cloneable {
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
106
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
107 /**
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
108 * Each entry is 4 bits long and covers 8 bytes of memory.
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
109 */
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
110 private static final int BITS_PER_ENTRY = 4;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
111 private static final int BITS_PER_ELEMENT = 64;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
112
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
113 public HotSpotOopMap(int i) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
114 words = new long[(i * BITS_PER_ENTRY + BITS_PER_ELEMENT) / BITS_PER_ELEMENT];
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
115 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
116
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
117 public HotSpotOopMap(HotSpotOopMap other) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
118 words = other.words.clone();
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
119 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
120
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
121 private long[] words;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
122
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
123 private int get(int i) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
124 return getEntry(i);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
125 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
126
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
127 public void or(HotSpotOopMap src) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
128 if (words.length < src.words.length) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
129 long[] newWords = new long[src.words.length];
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
130 System.arraycopy(src.words, 0, newWords, 0, src.words.length);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
131 for (int i = 0; i < words.length; i++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
132 newWords[i] |= words[i];
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
133 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
134 words = newWords;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
135 } else {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
136 for (int i = 0; i < src.words.length; i++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
137 words[i] |= src.words[i];
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
138 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
139 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
140 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
141
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
142 private void setOop(int regIdx) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
143 setEntry(regIdx, OOP64);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
144 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
145
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
146 public int size() {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
147 return words.length * BITS_PER_ELEMENT / BITS_PER_ENTRY;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
148 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
149
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
150 @Override
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
151 public HotSpotOopMap clone() {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
152 return new HotSpotOopMap(this);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
153 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
154
21002
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
155 private void setNarrowOop(int offset) {
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
156 setNarrowEntry(offset, OOP32);
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
157 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
158
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
159 private void setEntry(int regIdx, int value) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
160 assert regIdx % 2 == 0 : "must be alinged";
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
161 int bitIndex = (regIdx >> 1) * BITS_PER_ENTRY;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
162 int wordIndex = bitIndex / BITS_PER_ELEMENT;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
163 int shift = bitIndex - wordIndex * BITS_PER_ELEMENT;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
164 if (wordIndex >= words.length) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
165 if (value == 0) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
166 // Nothing to do since bits are clear
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
167 return;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
168 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
169 words = Arrays.copyOf(words, wordIndex + 1);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
170 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
171 assert verifyUpdate(this, this);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
172 long orig = words[wordIndex];
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
173 words[wordIndex] = (orig & (~(0b1111L << shift))) | ((long) value << shift);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
174 assert get(regIdx / 2) == value;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
175 assert verifyUpdate(this, this);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
176 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
177
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
178 private void setNarrowEntry(int offset, int value) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
179 int regIdx = offset >> 1;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
180 boolean low = offset % 2 == 0;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
181 int bitIndex = regIdx * BITS_PER_ENTRY;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
182 int wordIndex = bitIndex / BITS_PER_ELEMENT;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
183 int shift = bitIndex - wordIndex * BITS_PER_ELEMENT;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
184 if (wordIndex >= words.length) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
185 if (value == 0) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
186 // Nothing to do since bits are clear
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
187 return;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
188 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
189 words = Arrays.copyOf(words, wordIndex + 1);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
190 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
191 long originalValue = words[wordIndex];
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
192 int current = ((int) (originalValue >> shift)) & 0b1111;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
193 if (current == OOP64) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
194 current = 0;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
195 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
196 long newValue;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
197 if (value != 0) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
198 newValue = current | (low ? value : (value << 2));
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
199 } else {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
200 newValue = current & (low ? 0b1100 : 0b0011);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
201 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
202 long masked = originalValue & (~(0b1111L << shift));
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
203 words[wordIndex] = masked | (newValue << shift);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
204 assert verifyUpdate(this, this);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
205 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
206
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
207 private int getEntry(int regIdx) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
208 int bitIndex = regIdx * BITS_PER_ENTRY;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
209 int wordIndex = bitIndex / BITS_PER_ELEMENT;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
210 int shift = bitIndex - wordIndex * BITS_PER_ELEMENT;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
211 return ((int) (words[wordIndex] >>> shift)) & 0b1111;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
212 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
213
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
214 @Override
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
215 public boolean equals(Object other) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
216 if (this == other) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
217 return true;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
218 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
219
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
220 if (other instanceof HotSpotOopMap) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
221 HotSpotOopMap otherMap = (HotSpotOopMap) other;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
222 int limit = Math.min(words.length, otherMap.words.length);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
223 for (int i = 0; i < limit; i++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
224 if (words[i] != otherMap.words[i]) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
225 return false;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
226 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
227 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
228 for (int i = limit; i < words.length; i++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
229 if (words[i] != 0) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
230 return false;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
231 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
232 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
233 for (int i = limit; i < otherMap.words.length; i++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
234 if (otherMap.words[i] != 0) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
235 return false;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
236 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
237 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
238 return true;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
239 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
240 return false;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
241 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
242
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
243 @Override
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
244 public int hashCode() {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
245 long h = 1234;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
246 for (int i = words.length; --i >= 0;) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
247 h ^= words[i] * (i + 1);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
248 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
249 return (int) ((h >> 32) ^ h);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
250 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
251
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
252 @Override
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
253 public String toString() {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
254 int count = 0;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
255 StringBuilder sb = new StringBuilder();
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
256 sb.append("[");
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
257 for (int idx = 0; idx < size(); idx++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
258 MapEntry dstType = MapEntry.getFromBits(idx, this);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
259 if (dstType == MapEntry.NoReference) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
260 continue;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
261 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
262 if (count > 0) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
263 sb.append(", ");
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
264 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
265 if (dstType == MapEntry.Illegal) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
266 int value = get(idx);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
267 sb.append("0x");
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
268 sb.append(Integer.toHexString(value));
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
269 } else {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
270 sb.append(idx);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
271 sb.append(':');
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
272 sb.append(dstType);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
273 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
274 count++;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
275 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
276 sb.append("]");
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
277 return sb.toString();
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
278 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
279 }
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
280
13726
343541fb3b49 Support narrow oops in reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents: 13725
diff changeset
281 /**
16114
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
282 * Contains 3 bits per scalar register, and n*3 bits per n-word vector register (e.g., on a
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
283 * 64-bit system, a 256-bit vector register requires 12 reference map bits).
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
284 * <p>
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
285 * These bits can have the following values (LSB first):
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
286 *
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
287 * <pre>
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
288 * 000 - contains no references
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
289 * 100 - contains a wide oop
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
290 * 110 - contains a narrow oop in the lower half
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
291 * 101 - contains a narrow oop in the upper half
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
292 * 111 - contains two narrow oops
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
293 * </pre>
13726
343541fb3b49 Support narrow oops in reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents: 13725
diff changeset
294 */
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
295 private final HotSpotOopMap registerRefMap;
13726
343541fb3b49 Support narrow oops in reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents: 13725
diff changeset
296
343541fb3b49 Support narrow oops in reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents: 13725
diff changeset
297 /**
16114
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
298 * Contains 3 bits per stack word.
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
299 * <p>
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
300 * These bits can have the following values (LSB first):
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
301 *
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
302 * <pre>
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
303 * 000 - contains no references
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
304 * 100 - contains a wide oop
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
305 * 110 - contains a narrow oop in the lower half
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
306 * 101 - contains a narrow oop in the upper half
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
307 * 111 - contains two narrow oops
a0d1dfc113b8 Better documentation for HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents: 16094
diff changeset
308 * </pre>
13726
343541fb3b49 Support narrow oops in reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents: 13725
diff changeset
309 */
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
310 private final HotSpotOopMap frameRefMap;
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
311
16094
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
312 private final TargetDescription target;
14562
45812e05cdb3 Move narrow oop handling in reference maps to hotspot specific code.
Roland Schatz <roland.schatz@oracle.com>
parents: 13936
diff changeset
313
16094
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
314 public HotSpotReferenceMap(int registerCount, int frameSlotCount, TargetDescription target) {
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
315 if (registerCount > 0) {
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
316 this.registerRefMap = new HotSpotOopMap(registerCount);
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
317 } else {
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
318 this.registerRefMap = null;
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
319 }
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
320 this.frameRefMap = new HotSpotOopMap(frameSlotCount);
16094
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
321 this.target = target;
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
322 }
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
323
18608
66e31efead2f Make ReferenceMap Clonable.
Josef Eisl <josef.eisl@jku.at>
parents: 18607
diff changeset
324 private HotSpotReferenceMap(HotSpotReferenceMap other) {
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
325 this.registerRefMap = other.registerRefMap.clone();
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
326 this.frameRefMap = other.frameRefMap.clone();
18608
66e31efead2f Make ReferenceMap Clonable.
Josef Eisl <josef.eisl@jku.at>
parents: 18607
diff changeset
327 this.target = other.target;
66e31efead2f Make ReferenceMap Clonable.
Josef Eisl <josef.eisl@jku.at>
parents: 18607
diff changeset
328 }
66e31efead2f Make ReferenceMap Clonable.
Josef Eisl <josef.eisl@jku.at>
parents: 18607
diff changeset
329
66e31efead2f Make ReferenceMap Clonable.
Josef Eisl <josef.eisl@jku.at>
parents: 18607
diff changeset
330 @Override
66e31efead2f Make ReferenceMap Clonable.
Josef Eisl <josef.eisl@jku.at>
parents: 18607
diff changeset
331 public ReferenceMap clone() {
66e31efead2f Make ReferenceMap Clonable.
Josef Eisl <josef.eisl@jku.at>
parents: 18607
diff changeset
332 return new HotSpotReferenceMap(this);
66e31efead2f Make ReferenceMap Clonable.
Josef Eisl <josef.eisl@jku.at>
parents: 18607
diff changeset
333 }
66e31efead2f Make ReferenceMap Clonable.
Josef Eisl <josef.eisl@jku.at>
parents: 18607
diff changeset
334
18607
6383574293f9 Introduce FrameMap.clearReference().
Josef Eisl <josef.eisl@jku.at>
parents: 18349
diff changeset
335 // setters
21002
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
336 @Override
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
337 public void setRegister(int idx, LIRKind kind) {
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
338 set(registerRefMap, idx * 2, kind);
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
339 }
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
340
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
341 @Override
21002
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
342 public void setStackSlot(int offset, LIRKind kind) {
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
343 assert offset % bytesPerElement(kind) == 0 : "unaligned value in ReferenceMap";
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
344 set(frameRefMap, offset / 4, kind);
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
345 }
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
346
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
347 private void set(HotSpotOopMap refMap, int index, LIRKind kind) {
16094
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
348 if (kind.isDerivedReference()) {
21413
15a46a918fc1 removed unnecessary HotSpotCodeCache.MarkId enum (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents: 21411
diff changeset
349 throw new InternalError("derived reference cannot be inserted in ReferenceMap");
16094
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
350 }
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
351
21002
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
352 int bytesPerElement = bytesPerElement(kind);
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
353 int length = kind.getPlatformKind().getVectorLength();
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
354 if (bytesPerElement == 8) {
21002
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
355 for (int i = 0; i < length; i++) {
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
356 if (kind.isReference(i)) {
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
357 refMap.setOop(index + i * 2);
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
358 }
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
359 }
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
360 } else if (bytesPerElement == 4) {
21002
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
361 for (int i = 0; i < length; i++) {
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
362 if (kind.isReference(i)) {
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
363 refMap.setNarrowOop(index + i);
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
364 }
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
365 }
16094
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
366 } else {
21002
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
367 assert kind.isValue() : "unknown reference kind " + kind;
16094
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
368 }
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
369 }
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
370
21002
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
371 private int bytesPerElement(LIRKind kind) {
16094
c0b8d395368b Introduce LIRKind to accurately track oop references in backend.
Roland Schatz <roland.schatz@oracle.com>
parents: 16093
diff changeset
372 PlatformKind platformKind = kind.getPlatformKind();
21002
95931055060f fix handling of uncompressed vector oopmaps
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 20981
diff changeset
373 return target.getSizeInBytes(platformKind) / platformKind.getVectorLength();
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
374 }
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
375
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
376 public HotSpotOopMap getFrameMap() {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
377 return frameRefMap == null ? null : (HotSpotOopMap) frameRefMap.clone();
18663
058cbb02b58c Added public getters for frame and register map
adlertz
parents: 18616
diff changeset
378 }
058cbb02b58c Added public getters for frame and register map
adlertz
parents: 18616
diff changeset
379
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
380 public HotSpotOopMap getRegisterMap() {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
381 return registerRefMap == null ? null : (HotSpotOopMap) registerRefMap.clone();
18663
058cbb02b58c Added public getters for frame and register map
adlertz
parents: 18616
diff changeset
382 }
058cbb02b58c Added public getters for frame and register map
adlertz
parents: 18616
diff changeset
383
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
384 static MapEntry[] entries(HotSpotOopMap fixedMap) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
385 MapEntry[] result = new MapEntry[fixedMap.size()];
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
386 for (int idx = 0; idx < fixedMap.size(); idx++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
387 MapEntry dstType = MapEntry.getFromBits(idx, fixedMap);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
388 result[idx] = dstType;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
389 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
390 return result;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
391 }
18609
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
392
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
393 private static boolean verifyUpdate(HotSpotOopMap dst, HotSpotOopMap src) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
394 return verifyUpdate(dst, src, true);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
395 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
396
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
397 private static boolean verifyUpdate(HotSpotOopMap dst, HotSpotOopMap src, boolean doAssert) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
398 for (int idx = 0; idx < Math.min(src.size(), dst.size()); idx++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
399 if (!verifyUpdateEntry(idx, dst, src, doAssert)) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
400 return false;
18609
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
401 }
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
402 }
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
403 return true;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
404 }
18609
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
405
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
406 private static boolean verifyUpdateEntry(int idx, HotSpotOopMap dst, HotSpotOopMap src, boolean doAssert) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
407 MapEntry dstType = MapEntry.getFromBits(idx, dst);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
408 MapEntry srcType = MapEntry.getFromBits(idx, src);
18609
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
409
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
410 if (dstType == MapEntry.Illegal || srcType == MapEntry.Illegal) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
411 assert !doAssert : String.format("Illegal RefMap bit pattern: %s (0b%s), %s (0b%s)", dstType, dstType.toBitString(), srcType, srcType.toBitString());
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
412 return false;
18609
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
413 }
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
414 switch (dstType) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
415 case NoReference:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
416 return true;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
417 case WideOop:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
418 switch (srcType) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
419 case NoReference:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
420 case WideOop:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
421 return true;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
422 default:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
423 assert false : String.format("Illegal RefMap combination: %s (0b%s), %s (0b%s)", dstType, dstType.toBitString(), srcType, srcType.toBitString());
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
424 return false;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
425 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
426 case TwoNarrowOops:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
427 case NarrowOopLowerHalf:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
428 case NarrowOopUpperHalf:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
429 switch (srcType) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
430 case TwoNarrowOops:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
431 case NarrowOopLowerHalf:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
432 case NarrowOopUpperHalf:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
433 case NoReference:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
434 return true;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
435 default:
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
436 assert false : String.format("Illegal RefMap combination: %s (0b%s), %s (0b%s)", dstType, dstType.toBitString(), srcType, srcType.toBitString());
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
437 return false;
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
438 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
439 default:
18609
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
440 return false;
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
441 }
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
442 }
c7fe48cd8087 Add ReferenceMap.mergeMaps().
Josef Eisl <josef.eisl@jku.at>
parents: 18608
diff changeset
443
18342
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
444 @Override
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
445 public int hashCode() {
18349
7aa6180a3486 fixed NullPointerException in HotSpotReferenceMap.equals
Doug Simon <doug.simon@oracle.com>
parents: 18342
diff changeset
446 throw new UnsupportedOperationException();
18342
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
447 }
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
448
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
449 @Override
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
450 public boolean equals(Object obj) {
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
451 if (this == obj) {
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
452 return true;
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
453 }
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
454 if (obj instanceof HotSpotReferenceMap) {
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
455 HotSpotReferenceMap that = (HotSpotReferenceMap) obj;
18349
7aa6180a3486 fixed NullPointerException in HotSpotReferenceMap.equals
Doug Simon <doug.simon@oracle.com>
parents: 18342
diff changeset
456 if (this.frameRefMap.equals(that.frameRefMap) && Objects.equals(this.registerRefMap, that.registerRefMap) && this.target.equals(that.target)) {
18342
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
457 return true;
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
458 }
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
459 }
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
460 return false;
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
461 }
d60dd21329f2 implemented .equals() for CompilationResult and the objects it encapsulates
Doug Simon <doug.simon@oracle.com>
parents: 16114
diff changeset
462
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
463 @Override
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
464 public boolean hasRegisterRefMap() {
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
465 return registerRefMap != null && registerRefMap.size() > 0;
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
466 }
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
467
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
468 @Override
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
469 public boolean hasFrameRefMap() {
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
470 return frameRefMap != null && frameRefMap.size() > 0;
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
471 }
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
472
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
473 @Override
14562
45812e05cdb3 Move narrow oop handling in reference maps to hotspot specific code.
Roland Schatz <roland.schatz@oracle.com>
parents: 13936
diff changeset
474 public void appendRegisterMap(StringBuilder sb, RefMapFormatter formatter) {
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
475 for (int idx = 0; idx < registerRefMap.size(); idx++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
476 MapEntry dstType = MapEntry.getFromBits(idx, registerRefMap);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
477 if (dstType != MapEntry.NoReference) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
478 sb.append(' ').append(formatter.formatRegister(idx)).append(':').append(dstType);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
479 }
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
480 }
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
481 }
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
482
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
483 @Override
14562
45812e05cdb3 Move narrow oop handling in reference maps to hotspot specific code.
Roland Schatz <roland.schatz@oracle.com>
parents: 13936
diff changeset
484 public void appendFrameMap(StringBuilder sb, RefMapFormatter formatter) {
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
485 for (int idx = 0; idx < frameRefMap.size(); idx++) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
486 MapEntry dstType = MapEntry.getFromBits(idx, frameRefMap);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
487 if (dstType != MapEntry.NoReference) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
488 sb.append(' ').append(formatter.formatStackSlot(idx)).append(':').append(dstType);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
489 }
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
490 }
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
491 }
20981
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
492
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
493 @Override
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
494 public String toString() {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
495 StringBuilder sb = new StringBuilder();
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
496 if (registerRefMap != null) {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
497 sb.append("Registers = ");
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
498 sb.append(registerRefMap);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
499 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
500 sb.append("Stack = ");
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
501 sb.append(frameRefMap);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
502 return sb.toString();
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
503 }
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
504
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
505 public void verify() {
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
506 assert verifyUpdate(frameRefMap, frameRefMap);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
507 assert registerRefMap == null || verifyUpdate(registerRefMap, registerRefMap);
92fc95e8667d Add more efficient implementation of HotSpotReferenceMap
Tom Rodriguez <tom.rodriguez@oracle.com>
parents: 18706
diff changeset
508 }
13725
8d8732e14447 Refactor reference maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
diff changeset
509 }