Mercurial > hg > graal-jvmci-8
annotate src/share/vm/jvmci/jvmciCodeInstaller.cpp @ 22026:ab879bff09ab
Track and set has_unsafe_access flag
author | Gilles Duboscq <gilles.m.duboscq@oracle.com> |
---|---|
date | Fri, 19 Jun 2015 12:35:38 +0200 |
parents | 861108f5408e |
children | a27d4ef9b3a3 |
rev | line source |
---|---|
2516
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
1 /* |
21982
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
2 * Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved. |
2516
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
4 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
7 * published by the Free Software Foundation. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
8 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
13 * accompanied this code). |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
14 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
18 * |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
a384fac3fd34
Removed anything OSR-related.
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
2502
diff
changeset
|
21 * questions. |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
22 */ |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
23 |
2045
9c96c873c42b
Fix includes to match new hotspot mechanism.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1942
diff
changeset
|
24 #include "precompiled.hpp" |
15046
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
25 #include "code/compiledIC.hpp" |
13816
d006a6332db8
Make sure a compile id is assigned
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13726
diff
changeset
|
26 #include "compiler/compileBroker.hpp" |
7735 | 27 #include "compiler/disassembler.hpp" |
6559
d5f7e737827f
fixed compilation issues on Solaris. When using SunStudio compiler, Solaris build with DONT_USE_PRECOMPILED_HEADER
Laurent Daynes <Laurent.Daynes@oracle.com>
parents:
6539
diff
changeset
|
28 #include "runtime/javaCalls.hpp" |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
29 #include "jvmci/jvmciEnv.hpp" |
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
30 #include "jvmci/jvmciCompiler.hpp" |
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
31 #include "jvmci/jvmciCodeInstaller.hpp" |
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
32 #include "jvmci/jvmciJavaAccess.hpp" |
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
33 #include "jvmci/jvmciCompilerToVM.hpp" |
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
34 #include "jvmci/jvmciRuntime.hpp" |
7742
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
35 #include "asm/register.hpp" |
2048
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
36 #include "classfile/vmSymbols.hpp" |
7742
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
37 #include "code/vmreg.hpp" |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
38 |
7742
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
39 #ifdef TARGET_ARCH_x86 |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
40 # include "vmreg_x86.inline.hpp" |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
41 #endif |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
42 #ifdef TARGET_ARCH_sparc |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
43 # include "vmreg_sparc.inline.hpp" |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
44 #endif |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
45 #ifdef TARGET_ARCH_zero |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
46 # include "vmreg_zero.inline.hpp" |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
47 #endif |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
48 #ifdef TARGET_ARCH_arm |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
49 # include "vmreg_arm.inline.hpp" |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
50 #endif |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
51 #ifdef TARGET_ARCH_ppc |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
52 # include "vmreg_ppc.inline.hpp" |
9f8bf17b2d33
Remove hardcoding of x86 registers in the Graal code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
7735
diff
changeset
|
53 #endif |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
54 |
18173
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
55 |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
56 // frequently used constants |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
57 // Allocate them with new so they are never destroyed (otherwise, a |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
58 // forced exit could destroy these objects while they are still in |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
59 // use). |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
60 ConstantOopWriteValue* CodeInstaller::_oop_null_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantOopWriteValue(NULL); |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
61 ConstantIntValue* CodeInstaller::_int_m1_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(-1); |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
62 ConstantIntValue* CodeInstaller::_int_0_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(0); |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
63 ConstantIntValue* CodeInstaller::_int_1_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(1); |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
64 ConstantIntValue* CodeInstaller::_int_2_scope_value = new (ResourceObj::C_HEAP, mtCompiler) ConstantIntValue(2); |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
65 LocationValue* CodeInstaller::_illegal_value = new (ResourceObj::C_HEAP, mtCompiler) LocationValue(Location()); |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
66 |
14104 | 67 Method* getMethodFromHotSpotMethod(oop hotspot_method) { |
18222
a8cff27ca2e1
converted HotSpotResolvedJavaMethod to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18196
diff
changeset
|
68 assert(hotspot_method != NULL && hotspot_method->is_a(HotSpotResolvedJavaMethodImpl::klass()), "sanity"); |
a8cff27ca2e1
converted HotSpotResolvedJavaMethod to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18196
diff
changeset
|
69 return asMethod(HotSpotResolvedJavaMethodImpl::metaspaceMethod(hotspot_method)); |
14104 | 70 } |
71 | |
21982
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
72 VMReg getVMRegFromLocation(oop location, int total_frame_size) { |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
73 oop reg = code_Location::reg(location); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
74 jint offset = code_Location::offset(location); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
75 |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
76 if (reg != NULL) { |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
77 // register |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
78 jint number = code_Register::number(reg); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
79 VMReg vmReg = CodeInstaller::get_hotspot_reg(number); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
80 assert(offset % 4 == 0, "must be aligned"); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
81 return vmReg->next(offset / 4); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
82 } else { |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
83 // stack slot |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
84 #ifdef TARGET_ARCH_sparc |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
85 if(offset >= 0) { |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
86 offset += 128; |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
87 } |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
88 #endif |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
89 if (code_Location::addFrameSize(location)) { |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
90 offset += total_frame_size; |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
91 } |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
92 assert(offset % 4 == 0, "must be aligned"); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
93 return VMRegImpl::stack2reg(offset / 4); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
94 } |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
95 } |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
96 |
21730
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
97 // creates a HotSpot oop map out of the byte arrays provided by DebugInfo |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
98 OopMap* CodeInstaller::create_oop_map(oop debug_info) { |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
99 oop reference_map = DebugInfo::referenceMap(debug_info); |
21731
df9d2375512a
Track max live register value in reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21730
diff
changeset
|
100 if (HotSpotReferenceMap::maxRegisterSize(reference_map) > 16) { |
df9d2375512a
Track max live register value in reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21730
diff
changeset
|
101 _has_wide_vector = true; |
df9d2375512a
Track max live register value in reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21730
diff
changeset
|
102 } |
21730
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
103 OopMap* map = new OopMap(_total_frame_size, _parameter_count); |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
104 objArrayOop objects = HotSpotReferenceMap::objects(reference_map); |
21982
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
105 objArrayOop derivedBase = HotSpotReferenceMap::derivedBase(reference_map); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
106 typeArrayOop sizeInBytes = HotSpotReferenceMap::sizeInBytes(reference_map); |
21730
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
107 for (int i = 0; i < objects->length(); i++) { |
21982
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
108 oop location = objects->obj_at(i); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
109 oop baseLocation = derivedBase->obj_at(i); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
110 int bytes = sizeInBytes->int_at(i); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
111 |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
112 VMReg vmReg = getVMRegFromLocation(location, _total_frame_size); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
113 if (baseLocation != NULL) { |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
114 // derived oop |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
115 assert(bytes == 8, "derived oop can't be compressed"); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
116 VMReg baseReg = getVMRegFromLocation(baseLocation, _total_frame_size); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
117 map->set_derived_oop(vmReg, baseReg); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
118 } else if (bytes == 8) { |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
119 // wide oop |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
120 map->set_oop(vmReg); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
121 } else { |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
122 // narrow oop |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
123 assert(bytes == 4, "wrong size"); |
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
124 map->set_narrowoop(vmReg); |
21730
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
125 } |
16093
39be5bc00046
Support XMM registers in oop maps.
Roland Schatz <roland.schatz@oracle.com>
parents:
15728
diff
changeset
|
126 } |
21982
861108f5408e
Support derived references in HotSpotReferenceMap.
Roland Schatz <roland.schatz@oracle.com>
parents:
21731
diff
changeset
|
127 |
9338
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
128 oop callee_save_info = (oop) DebugInfo::calleeSaveInfo(debug_info); |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
129 if (callee_save_info != NULL) { |
18172
c59612b9d110
Use arrayOop subclasses in graalJavaAccess
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18043
diff
changeset
|
130 objArrayOop registers = RegisterSaveLayout::registers(callee_save_info); |
c59612b9d110
Use arrayOop subclasses in graalJavaAccess
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18043
diff
changeset
|
131 typeArrayOop slots = RegisterSaveLayout::slots(callee_save_info); |
9338
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
132 for (jint i = 0; i < slots->length(); i++) { |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
133 oop jvmci_reg = registers->obj_at(i); |
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
134 jint jvmci_reg_number = code_Register::number(jvmci_reg); |
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
135 VMReg hotspot_reg = CodeInstaller::get_hotspot_reg(jvmci_reg_number); |
9338
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
136 // HotSpot stack slots are 4 bytes |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
137 jint jvmci_slot = slots->int_at(i); |
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
138 jint hotspot_slot = jvmci_slot * VMRegImpl::slots_per_word; |
9338
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
139 VMReg hotspot_slot_as_reg = VMRegImpl::stack2reg(hotspot_slot); |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
140 map->set_callee_saved(hotspot_slot_as_reg, hotspot_reg); |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
141 #ifdef _LP64 |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
142 // (copied from generate_oop_map() in c1_Runtime1_x86.cpp) |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
143 VMReg hotspot_slot_hi_as_reg = VMRegImpl::stack2reg(hotspot_slot + 1); |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
144 map->set_callee_saved(hotspot_slot_hi_as_reg, hotspot_reg->next()); |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
145 #endif |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
146 } |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
147 } |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
148 return map; |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
149 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
150 |
18179
37be28df9dd7
fix Windows build
Christian Wirth <christian.wirth@oracle.com>
parents:
18177
diff
changeset
|
151 static void record_metadata_reference(oop obj, jlong prim, jboolean compressed, OopRecorder* oop_recorder) { |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
152 if (obj->is_a(HotSpotResolvedObjectTypeImpl::klass())) { |
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
153 Klass* klass = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(obj)); |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
154 if (compressed) { |
18855 | 155 assert(Klass::decode_klass((narrowKlass) prim) == klass, err_msg("%s @ " INTPTR_FORMAT " != " PTR64_FORMAT, klass->name()->as_C_string(), p2i(klass), prim)); |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
156 } else { |
18855 | 157 assert((Klass*) prim == klass, err_msg("%s @ " INTPTR_FORMAT " != " PTR64_FORMAT, klass->name()->as_C_string(), p2i(klass), prim)); |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
158 } |
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
159 int index = oop_recorder->find_index(klass); |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
160 TRACE_jvmci_3("metadata[%d of %d] = %s", index, oop_recorder->metadata_count(), klass->name()->as_C_string()); |
18222
a8cff27ca2e1
converted HotSpotResolvedJavaMethod to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18196
diff
changeset
|
161 } else if (obj->is_a(HotSpotResolvedJavaMethodImpl::klass())) { |
a8cff27ca2e1
converted HotSpotResolvedJavaMethod to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18196
diff
changeset
|
162 Method* method = (Method*) (address) HotSpotResolvedJavaMethodImpl::metaspaceMethod(obj); |
18855 | 163 assert(!compressed, err_msg("unexpected compressed method pointer %s @ " INTPTR_FORMAT " = " PTR64_FORMAT, method->name()->as_C_string(), p2i(method), prim)); |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
164 int index = oop_recorder->find_index(method); |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
165 TRACE_jvmci_3("metadata[%d of %d] = %s", index, oop_recorder->metadata_count(), method->name()->as_C_string()); |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
166 } else { |
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
167 assert(java_lang_String::is_instance(obj), |
18855 | 168 err_msg("unexpected metadata reference (%s) for constant " JLONG_FORMAT " (" PTR64_FORMAT ")", obj->klass()->name()->as_C_string(), prim, prim)); |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
169 } |
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
170 } |
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
171 |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
172 // Records any Metadata values embedded in a Constant (e.g., the value returned by HotSpotResolvedObjectTypeImpl.klass()). |
6996
eec373d34caf
added support for annotated Constants and used it to track Klass* values in Graal and register them in the metadata section of a nmethod during code installation
Doug Simon <doug.simon@oracle.com>
parents:
6950
diff
changeset
|
173 static void record_metadata_in_constant(oop constant, OopRecorder* oop_recorder) { |
18266
ae181ec869c5
converted HotSpotMetaspaceConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
174 if (constant->is_a(HotSpotMetaspaceConstantImpl::klass())) { |
ae181ec869c5
converted HotSpotMetaspaceConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
175 oop obj = HotSpotMetaspaceConstantImpl::metaspaceObject(constant); |
ae181ec869c5
converted HotSpotMetaspaceConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
176 jlong prim = HotSpotMetaspaceConstantImpl::primitive(constant); |
18319
56cc1a799a60
(re)converted Value to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18266
diff
changeset
|
177 assert(Kind::typeChar(AbstractValue::kind(constant)) == 'j', "must have word kind"); |
15018
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14729
diff
changeset
|
178 assert(obj != NULL, "must have an object"); |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14729
diff
changeset
|
179 assert(prim != 0, "must have a primitive value"); |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14729
diff
changeset
|
180 |
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14729
diff
changeset
|
181 record_metadata_reference(obj, prim, false, oop_recorder); |
6996
eec373d34caf
added support for annotated Constants and used it to track Klass* values in Graal and register them in the metadata section of a nmethod during code installation
Doug Simon <doug.simon@oracle.com>
parents:
6950
diff
changeset
|
182 } |
eec373d34caf
added support for annotated Constants and used it to track Klass* values in Graal and register them in the metadata section of a nmethod during code installation
Doug Simon <doug.simon@oracle.com>
parents:
6950
diff
changeset
|
183 } |
eec373d34caf
added support for annotated Constants and used it to track Klass* values in Graal and register them in the metadata section of a nmethod during code installation
Doug Simon <doug.simon@oracle.com>
parents:
6950
diff
changeset
|
184 |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
185 static void record_metadata_in_patch(Handle& constant, OopRecorder* oop_recorder) { |
18266
ae181ec869c5
converted HotSpotMetaspaceConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
186 record_metadata_reference(HotSpotMetaspaceConstantImpl::metaspaceObject(constant), HotSpotMetaspaceConstantImpl::primitive(constant), HotSpotMetaspaceConstantImpl::compressed(constant), oop_recorder); |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
187 } |
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
188 |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
189 ScopeValue* CodeInstaller::get_scope_value(oop value, GrowableArray<ScopeValue*>* objects, ScopeValue* &second) { |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
190 second = NULL; |
18319
56cc1a799a60
(re)converted Value to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18266
diff
changeset
|
191 if (value == AbstractValue::ILLEGAL()) { |
18173
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
192 return _illegal_value; |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
193 } |
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
194 |
18319
56cc1a799a60
(re)converted Value to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18266
diff
changeset
|
195 oop lirKind = AbstractValue::lirKind(value); |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
196 oop platformKind = LIRKind::platformKind(lirKind); |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
197 jint referenceMask = LIRKind::referenceMask(lirKind); |
19739
6a3832494e24
Check for derived pointers before passing BytecodeFrame into HotSpot
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19738
diff
changeset
|
198 assert(referenceMask != -1, "derived pointers are not allowed"); |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
199 assert(referenceMask == 0 || referenceMask == 1, "unexpected referenceMask"); |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
200 bool reference = referenceMask == 1; |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
201 |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
202 BasicType type = JVMCIRuntime::kindToBasicType(Kind::typeChar(platformKind)); |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
203 |
5554
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
204 if (value->is_a(RegisterValue::klass())) { |
16996
6ea6d4c260c8
[SPARC/AMD64] Fixing handling of floatingpoint register handling
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16941
diff
changeset
|
205 oop reg = RegisterValue::reg(value); |
6ea6d4c260c8
[SPARC/AMD64] Fixing handling of floatingpoint register handling
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16941
diff
changeset
|
206 jint number = code_Register::number(reg); |
17024
4e2d34d7715b
[SPARC/AMD64] Splitting up oopmap generation for Intel XMM and SPARC Floatingpoint registers
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16996
diff
changeset
|
207 VMReg hotspotRegister = get_hotspot_reg(number); |
4e2d34d7715b
[SPARC/AMD64] Splitting up oopmap generation for Intel XMM and SPARC Floatingpoint registers
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16996
diff
changeset
|
208 if (is_general_purpose_reg(hotspotRegister)) { |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
209 Location::Type locationType; |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
210 if (type == T_INT) { |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
211 locationType = reference ? Location::narrowoop : Location::int_in_long; |
16941
4e3b63e7a9f6
Fixing relock on interpreter when entering synchronized methods.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16662
diff
changeset
|
212 } else if(type == T_SHORT || type == T_CHAR || type == T_BYTE || type == T_BOOLEAN) { |
4e3b63e7a9f6
Fixing relock on interpreter when entering synchronized methods.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16662
diff
changeset
|
213 locationType = Location::int_in_long; |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
214 } else if (type == T_FLOAT) { |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
215 locationType = Location::int_in_long; |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
216 } else if (type == T_LONG) { |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
217 locationType = reference ? Location::oop : Location::lng; |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
218 } else { |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
219 assert(type == T_OBJECT && reference, "unexpected type in cpu register"); |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
220 locationType = Location::oop; |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
221 } |
17024
4e2d34d7715b
[SPARC/AMD64] Splitting up oopmap generation for Intel XMM and SPARC Floatingpoint registers
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16996
diff
changeset
|
222 ScopeValue* value = new LocationValue(Location::new_reg_loc(locationType, hotspotRegister)); |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
223 if (type == T_LONG && !reference) { |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
224 second = value; |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
225 } |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
226 return value; |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
227 } else { |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
228 assert(type == T_FLOAT || type == T_DOUBLE, "only float and double expected in xmm register"); |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
229 Location::Type locationType; |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
230 if (type == T_FLOAT) { |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
231 // this seems weird, but the same value is used in c1_LinearScan |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
232 locationType = Location::normal; |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
233 } else { |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
234 locationType = Location::dbl; |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
235 } |
16589
6bdd2ec553eb
handle HotSpotCompressedNullConstant in graalCodeInstaller
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16580
diff
changeset
|
236 assert(!reference, "unexpected type in floating point register"); |
17024
4e2d34d7715b
[SPARC/AMD64] Splitting up oopmap generation for Intel XMM and SPARC Floatingpoint registers
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16996
diff
changeset
|
237 ScopeValue* value = new LocationValue(Location::new_reg_loc(locationType, hotspotRegister)); |
16589
6bdd2ec553eb
handle HotSpotCompressedNullConstant in graalCodeInstaller
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16580
diff
changeset
|
238 if (type == T_DOUBLE) { |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
239 second = value; |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
240 } |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
241 return value; |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
242 } |
5554
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
243 } else if (value->is_a(StackSlot::klass())) { |
21730
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
244 jint offset = StackSlot::offset(value); |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
245 #ifdef TARGET_ARCH_sparc |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
246 if(offset >= 0) { |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
247 offset += 128; |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
248 } |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
249 #endif |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
250 if (StackSlot::addFrameSize(value)) { |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
251 offset += _total_frame_size; |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
252 } |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
253 |
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
254 Location::Type locationType; |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
255 if (type == T_LONG) { |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
256 locationType = reference ? Location::oop : Location::lng; |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
257 } else if (type == T_INT) { |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
258 locationType = reference ? Location::narrowoop : Location::normal; |
16941
4e3b63e7a9f6
Fixing relock on interpreter when entering synchronized methods.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16662
diff
changeset
|
259 } else if(type == T_SHORT || type == T_CHAR || type == T_BYTE || type == T_BOOLEAN) { |
4e3b63e7a9f6
Fixing relock on interpreter when entering synchronized methods.
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
16662
diff
changeset
|
260 locationType = Location::normal; |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
261 } else if (type == T_FLOAT) { |
16589
6bdd2ec553eb
handle HotSpotCompressedNullConstant in graalCodeInstaller
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16580
diff
changeset
|
262 assert(!reference, "unexpected type in stack slot"); |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
263 locationType = Location::normal; |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
264 } else if (type == T_DOUBLE) { |
16589
6bdd2ec553eb
handle HotSpotCompressedNullConstant in graalCodeInstaller
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16580
diff
changeset
|
265 assert(!reference, "unexpected type in stack slot"); |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
266 locationType = Location::dbl; |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
267 } else { |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
268 assert(type == T_OBJECT && reference, "unexpected type in stack slot"); |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
269 locationType = Location::oop; |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
270 } |
4181
319860ae697a
Simplify FrameMap: make offsets of spill slots and outgoing parameters independent so that they can be allocated at the same time, eliminating the separate phases. This makes the separate StackBlock unnecesary. Change CiStackSlot to use byte offsets instead of spill slot index. This makes CiTarget.spillSlotSize unnecessary.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
4174
diff
changeset
|
271 ScopeValue* value = new LocationValue(Location::new_stk_loc(locationType, offset)); |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
272 if (type == T_DOUBLE || (type == T_LONG && !reference)) { |
2938
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
273 second = value; |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
274 } |
c7783b6773ea
fixed graph start frame state
Lukas Stadler <lukas.stadler@jku.at>
parents:
2901
diff
changeset
|
275 return value; |
18187
9619ba4daf4c
Rename Constant to JavaConstant.
Roland Schatz <roland.schatz@oracle.com>
parents:
18186
diff
changeset
|
276 } else if (value->is_a(JavaConstant::klass())){ |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
277 record_metadata_in_constant(value, _oop_recorder); |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
278 if (value->is_a(PrimitiveConstant::klass())) { |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
279 assert(!reference, "unexpected primitive constant type"); |
17084
26f5733fb645
Fix the endianess issue, when using JSR/RET instruction and deoptimization happens in this subroutine
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17024
diff
changeset
|
280 if(value->is_a(RawConstant::klass())) { |
26f5733fb645
Fix the endianess issue, when using JSR/RET instruction and deoptimization happens in this subroutine
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17024
diff
changeset
|
281 jlong prim = PrimitiveConstant::primitive(value); |
26f5733fb645
Fix the endianess issue, when using JSR/RET instruction and deoptimization happens in this subroutine
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17024
diff
changeset
|
282 return new ConstantLongValue(prim); |
26f5733fb645
Fix the endianess issue, when using JSR/RET instruction and deoptimization happens in this subroutine
Stefan Anzinger <stefan.anzinger@oracle.com>
parents:
17024
diff
changeset
|
283 } else if (type == T_INT || type == T_FLOAT) { |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
284 jint prim = (jint)PrimitiveConstant::primitive(value); |
18173
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
285 switch (prim) { |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
286 case -1: return _int_m1_scope_value; |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
287 case 0: return _int_0_scope_value; |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
288 case 1: return _int_1_scope_value; |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
289 case 2: return _int_2_scope_value; |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
290 default: return new ConstantIntValue(prim); |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
291 } |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
292 } else { |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
293 assert(type == T_LONG || type == T_DOUBLE, "unexpected primitive constant type"); |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
294 jlong prim = PrimitiveConstant::primitive(value); |
18173
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
295 second = _int_1_scope_value; |
16580
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
296 return new ConstantLongValue(prim); |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
297 } |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
298 } else { |
a7d9b88ecd68
use LIRKind in graalCodeInstaller, support compressed oops in frame states
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16573
diff
changeset
|
299 assert(reference, "unexpected object constant type"); |
16589
6bdd2ec553eb
handle HotSpotCompressedNullConstant in graalCodeInstaller
Lukas Stadler <lukas.stadler@oracle.com>
parents:
16580
diff
changeset
|
300 if (value->is_a(NullConstant::klass()) || value->is_a(HotSpotCompressedNullConstant::klass())) { |
18173
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
301 return _oop_null_scope_value; |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
302 } else { |
18262
f7d45e2426d4
converted HotSpotObjectConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18238
diff
changeset
|
303 assert(value->is_a(HotSpotObjectConstantImpl::klass()), "unexpected constant type"); |
f7d45e2426d4
converted HotSpotObjectConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18238
diff
changeset
|
304 oop obj = HotSpotObjectConstantImpl::object(value); |
15018
db4254246f9a
Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents:
14729
diff
changeset
|
305 assert(obj != NULL, "null value must be in NullConstant"); |
3669
53636e2c9d03
No longer use shared ciFactory. Remove make_global usage in code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3668
diff
changeset
|
306 return new ConstantOopWriteValue(JNIHandles::make_local(obj)); |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
307 } |
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
308 } |
5554
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
309 } else if (value->is_a(VirtualObject::klass())) { |
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
310 int id = VirtualObject::id(value); |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
311 ScopeValue* object = objects->at(id); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
312 assert(object != NULL, "missing value"); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
313 return object; |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
314 } else { |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
315 value->klass()->print(); |
1462
1845386f5403
Full GC after bootstrap. Disable IRChecker by default. Disable compiled method logging by default.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1458
diff
changeset
|
316 value->print(); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
317 } |
2215
999f8086cc4f
More changes to make it compile and work on win64.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
2182
diff
changeset
|
318 ShouldNotReachHere(); |
999f8086cc4f
More changes to make it compile and work on win64.
Thomas Wuerthinger <thomas.wuerthinger@gmail.com>
parents:
2182
diff
changeset
|
319 return NULL; |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
320 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
321 |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
322 void CodeInstaller::record_object_value(ObjectValue* sv, oop value, GrowableArray<ScopeValue*>* objects) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
323 oop type = VirtualObject::type(value); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
324 int id = VirtualObject::id(value); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
325 oop javaMirror = HotSpotResolvedObjectTypeImpl::javaClass(type); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
326 Klass* klass = java_lang_Class::as_Klass(javaMirror); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
327 bool isLongArray = klass == Universe::longArrayKlassObj(); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
328 |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
329 objArrayOop values = VirtualObject::values(value); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
330 for (jint i = 0; i < values->length(); i++) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
331 ScopeValue* cur_second = NULL; |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
332 oop object = values->obj_at(i); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
333 ScopeValue* value = get_scope_value(object, objects, cur_second); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
334 |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
335 if (isLongArray && cur_second == NULL) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
336 // we're trying to put ints into a long array... this isn't really valid, but it's used for some optimizations. |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
337 // add an int 0 constant |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
338 cur_second = _int_0_scope_value; |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
339 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
340 |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
341 if (cur_second != NULL) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
342 sv->field_values()->append(cur_second); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
343 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
344 assert(value != NULL, "missing value"); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
345 sv->field_values()->append(value); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
346 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
347 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
348 |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
349 MonitorValue* CodeInstaller::get_monitor_value(oop value, GrowableArray<ScopeValue*>* objects) { |
19602
b6beb2161e7a
Move stack monitor value into api.code
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19426
diff
changeset
|
350 guarantee(value->is_a(StackLockValue::klass()), "Monitors must be of type MonitorValue"); |
3714
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
351 |
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
352 ScopeValue* second = NULL; |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
353 ScopeValue* owner_value = get_scope_value(StackLockValue::owner(value), objects, second); |
3714
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
354 assert(second == NULL, "monitor cannot occupy two stack slots"); |
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
355 |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
356 ScopeValue* lock_data_value = get_scope_value(StackLockValue::slot(value), objects, second); |
4174
79c91d220d73
Use callee save area to model the saved rbp register. Remove various hacks that added the saved area size in native code.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
3717
diff
changeset
|
357 assert(second == lock_data_value, "monitor is LONG value that occupies two stack slots"); |
3714
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
358 assert(lock_data_value->is_location(), "invalid monitor location"); |
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
359 Location lock_data_loc = ((LocationValue*)lock_data_value)->location(); |
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
360 |
3717
4177ddd2d1d1
Fix build error for Windows builds
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3714
diff
changeset
|
361 bool eliminated = false; |
19602
b6beb2161e7a
Move stack monitor value into api.code
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19426
diff
changeset
|
362 if (StackLockValue::eliminated(value)) { |
3717
4177ddd2d1d1
Fix build error for Windows builds
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3714
diff
changeset
|
363 eliminated = true; |
4177ddd2d1d1
Fix build error for Windows builds
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3714
diff
changeset
|
364 } |
3714
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
365 |
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
366 return new MonitorValue(owner_value, lock_data_loc, eliminated); |
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
367 } |
b648304ba4ff
Change Graal monitor enter and exit from BasicObjectLock to BasicLock
Christian Wimmer <christian.wimmer@oracle.com>
parents:
3710
diff
changeset
|
368 |
19306
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
369 void CodeInstaller::initialize_dependencies(oop compiled_code) { |
18226
6eda3b299460
Record compilation dependencies with +LogCompilation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18196
diff
changeset
|
370 JavaThread* thread = JavaThread::current(); |
6eda3b299460
Record compilation dependencies with +LogCompilation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18196
diff
changeset
|
371 CompilerThread* compilerThread = thread->is_Compiler_thread() ? thread->as_CompilerThread() : NULL; |
17377
44b83285b645
Deduplicate constant oops during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17335
diff
changeset
|
372 _oop_recorder = new OopRecorder(&_arena, true); |
18226
6eda3b299460
Record compilation dependencies with +LogCompilation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18196
diff
changeset
|
373 _dependencies = new Dependencies(&_arena, _oop_recorder, compilerThread != NULL ? compilerThread->log() : NULL); |
21506
5cbaf1e9ff2e
Remove reference to CompilationResult from HotSpotCompiledCode.
Roland Schatz <roland.schatz@oracle.com>
parents:
21030
diff
changeset
|
374 objArrayHandle assumptions = HotSpotCompiledCode::assumptions(compiled_code); |
19251
063e8873bd14
changed type of assumptions field in CompilationResult from Assumptions to Assumption[]
Doug Simon <doug.simon@oracle.com>
parents:
18950
diff
changeset
|
375 if (!assumptions.is_null()) { |
3670
f198b24093f3
put back in thread transitions.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3669
diff
changeset
|
376 int length = assumptions->length(); |
f198b24093f3
put back in thread transitions.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3669
diff
changeset
|
377 for (int i = 0; i < length; ++i) { |
3672
5e331d5f760e
removed transition to vm in ci interface
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3670
diff
changeset
|
378 Handle assumption = assumptions->obj_at(i); |
5e331d5f760e
removed transition to vm in ci interface
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3670
diff
changeset
|
379 if (!assumption.is_null()) { |
19306
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
380 if (assumption->klass() == Assumptions_NoFinalizableSubclass::klass()) { |
9012
2979aaac95af
assumptions: enable NoFinalizableSubclass assumption
Bernhard Urban <bernhard.urban@jku.at>
parents:
9004
diff
changeset
|
381 assumption_NoFinalizableSubclass(assumption); |
5554
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
382 } else if (assumption->klass() == Assumptions_ConcreteSubtype::klass()) { |
3672
5e331d5f760e
removed transition to vm in ci interface
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3670
diff
changeset
|
383 assumption_ConcreteSubtype(assumption); |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
384 } else if (assumption->klass() == Assumptions_LeafType::klass()) { |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
385 assumption_LeafType(assumption); |
5554
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
386 } else if (assumption->klass() == Assumptions_ConcreteMethod::klass()) { |
3672
5e331d5f760e
removed transition to vm in ci interface
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3670
diff
changeset
|
387 assumption_ConcreteMethod(assumption); |
8947
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
388 } else if (assumption->klass() == Assumptions_CallSiteTargetValue::klass()) { |
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
389 assumption_CallSiteTargetValue(assumption); |
3657
47edfca346ab
Fix a safepoint bug in code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3650
diff
changeset
|
390 } else { |
47edfca346ab
Fix a safepoint bug in code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3650
diff
changeset
|
391 assumption->print(); |
47edfca346ab
Fix a safepoint bug in code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3650
diff
changeset
|
392 fatal("unexpected Assumption subclass"); |
47edfca346ab
Fix a safepoint bug in code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3650
diff
changeset
|
393 } |
47edfca346ab
Fix a safepoint bug in code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3650
diff
changeset
|
394 } |
47edfca346ab
Fix a safepoint bug in code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3650
diff
changeset
|
395 } |
47edfca346ab
Fix a safepoint bug in code installer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3650
diff
changeset
|
396 } |
21506
5cbaf1e9ff2e
Remove reference to CompilationResult from HotSpotCompiledCode.
Roland Schatz <roland.schatz@oracle.com>
parents:
21030
diff
changeset
|
397 objArrayHandle methods = HotSpotCompiledCode::methods(compiled_code); |
19306
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
398 if (!methods.is_null()) { |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
399 int length = methods->length(); |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
400 for (int i = 0; i < length; ++i) { |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
401 Handle method_handle = methods->obj_at(i); |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
402 methodHandle method = getMethodFromHotSpotMethod(method_handle()); |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
403 _dependencies->assert_evol_method(method()); |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
404 } |
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
405 } |
3668
46f211fe010c
Removed global handle usage in ci interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3667
diff
changeset
|
406 } |
46f211fe010c
Removed global handle usage in ci interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3667
diff
changeset
|
407 |
46f211fe010c
Removed global handle usage in ci interface.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3667
diff
changeset
|
408 // constructor used to create a method |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
409 JVMCIEnv::CodeInstallResult CodeInstaller::install(Handle& compiled_code, CodeBlob*& cb, Handle installed_code, Handle speculation_log) { |
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
410 BufferBlob* buffer_blob = JVMCIRuntime::initialize_buffer_blob(); |
13156
2e76d94f8383
propagate code-cache-full message up to Java to throw exception instead of crashing VM
twisti
parents:
11827
diff
changeset
|
411 if (buffer_blob == NULL) { |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
412 return JVMCIEnv::cache_full; |
13156
2e76d94f8383
propagate code-cache-full message up to Java to throw exception instead of crashing VM
twisti
parents:
11827
diff
changeset
|
413 } |
2e76d94f8383
propagate code-cache-full message up to Java to throw exception instead of crashing VM
twisti
parents:
11827
diff
changeset
|
414 |
2e76d94f8383
propagate code-cache-full message up to Java to throw exception instead of crashing VM
twisti
parents:
11827
diff
changeset
|
415 CodeBuffer buffer(buffer_blob); |
9669
ed6202820ecf
renamed HotSpotCompilationResult to HotSpotCompiledCode and added subclasses HotSpotCompiledNmethod and HotSpotCompiledRuntimeStub
Doug Simon <doug.simon@oracle.com>
parents:
9654
diff
changeset
|
416 jobject compiled_code_obj = JNIHandles::make_local(compiled_code()); |
19306
a0a760b0fb5f
pulled method evolution dependencies out of Assumptions and directly into StructuredGraph
Doug Simon <doug.simon@oracle.com>
parents:
19251
diff
changeset
|
417 initialize_dependencies(JNIHandles::resolve(compiled_code_obj)); |
1465
2c754f3a2722
Inlining of static final field values. Java mirror instead of VmID. Support for PrintMetrics option.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1462
diff
changeset
|
418 |
10684 | 419 // Get instructions and constants CodeSections early because we need it. |
420 _instructions = buffer.insts(); | |
421 _constants = buffer.consts(); | |
422 | |
3664
6e1abd79e7c8
Register assumptions before anything else. Don't free code blob (it is reused).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3663
diff
changeset
|
423 { |
9669
ed6202820ecf
renamed HotSpotCompilationResult to HotSpotCompiledCode and added subclasses HotSpotCompiledNmethod and HotSpotCompiledRuntimeStub
Doug Simon <doug.simon@oracle.com>
parents:
9654
diff
changeset
|
424 initialize_fields(JNIHandles::resolve(compiled_code_obj)); |
10540
0ba44a5a8420
Add sanity check to avoid overwriting the reserved code buffer for very large methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10410
diff
changeset
|
425 if (!initialize_buffer(buffer)) { |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
426 return JVMCIEnv::code_too_large; |
10540
0ba44a5a8420
Add sanity check to avoid overwriting the reserved code buffer for very large methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10410
diff
changeset
|
427 } |
3664
6e1abd79e7c8
Register assumptions before anything else. Don't free code blob (it is reused).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3663
diff
changeset
|
428 process_exception_handlers(); |
6e1abd79e7c8
Register assumptions before anything else. Don't free code blob (it is reused).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3663
diff
changeset
|
429 } |
6e1abd79e7c8
Register assumptions before anything else. Don't free code blob (it is reused).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3663
diff
changeset
|
430 |
4174
79c91d220d73
Use callee save area to model the saved rbp register. Remove various hacks that added the saved area size in native code.
Christian Wimmer <Christian.Wimmer@Oracle.com>
parents:
3717
diff
changeset
|
431 int stack_slots = _total_frame_size / HeapWordSize; // conversion to words |
4319
3c21eee8ab4d
Add installMethodCallback() to HotSpotRuntime.
Andreas Woess <andreas.woess@jku.at>
parents:
4232
diff
changeset
|
432 |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
433 JVMCIEnv::CodeInstallResult result; |
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:
21030
diff
changeset
|
434 if (!compiled_code->is_a(HotSpotCompiledNmethod::klass())) { |
21561 | 435 oop stubName = HotSpotCompiledCode::name(compiled_code_obj); |
9669
ed6202820ecf
renamed HotSpotCompilationResult to HotSpotCompiledCode and added subclasses HotSpotCompiledNmethod and HotSpotCompiledRuntimeStub
Doug Simon <doug.simon@oracle.com>
parents:
9654
diff
changeset
|
436 char* name = strdup(java_lang_String::as_utf8_string(stubName)); |
9338
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
437 cb = RuntimeStub::new_runtime_stub(name, |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
438 &buffer, |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
439 CodeOffsets::frame_never_safe, |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
440 stack_slots, |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
441 _debug_recorder->_oopmaps, |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
442 false); |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
443 result = JVMCIEnv::ok; |
9338
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
444 } else { |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
445 nmethod* nm = NULL; |
9669
ed6202820ecf
renamed HotSpotCompilationResult to HotSpotCompiledCode and added subclasses HotSpotCompiledNmethod and HotSpotCompiledRuntimeStub
Doug Simon <doug.simon@oracle.com>
parents:
9654
diff
changeset
|
446 methodHandle method = getMethodFromHotSpotMethod(HotSpotCompiledNmethod::method(compiled_code)); |
ed6202820ecf
renamed HotSpotCompilationResult to HotSpotCompiledCode and added subclasses HotSpotCompiledNmethod and HotSpotCompiledRuntimeStub
Doug Simon <doug.simon@oracle.com>
parents:
9654
diff
changeset
|
447 jint entry_bci = HotSpotCompiledNmethod::entryBCI(compiled_code); |
13630
b1838411e896
Use compile ids assigned by hotspot
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13576
diff
changeset
|
448 jint id = HotSpotCompiledNmethod::id(compiled_code); |
22026
ab879bff09ab
Track and set has_unsafe_access flag
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21982
diff
changeset
|
449 jboolean has_unsafe_access = HotSpotCompiledNmethod::hasUnsafeAccess(compiled_code); |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
450 JVMCIEnv* env = (JVMCIEnv*) (address) HotSpotCompiledNmethod::jvmciEnv(compiled_code); |
13816
d006a6332db8
Make sure a compile id is assigned
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13726
diff
changeset
|
451 if (id == -1) { |
d006a6332db8
Make sure a compile id is assigned
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13726
diff
changeset
|
452 // Make sure a valid compile_id is associated with every compile |
13969
fe034af88233
Acquire proper locks before calling assign_compile_id
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13816
diff
changeset
|
453 id = CompileBroker::assign_compile_id_unlocked(Thread::current(), method, entry_bci); |
13816
d006a6332db8
Make sure a compile id is assigned
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
13726
diff
changeset
|
454 } |
21731
df9d2375512a
Track max live register value in reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21730
diff
changeset
|
455 result = JVMCIEnv::register_method(method, nm, entry_bci, &_offsets, _custom_stack_area_offset, &buffer, |
df9d2375512a
Track max live register value in reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21730
diff
changeset
|
456 stack_slots, _debug_recorder->_oopmaps, &_exception_handler_table, |
df9d2375512a
Track max live register value in reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21730
diff
changeset
|
457 JVMCICompiler::instance(), _debug_recorder, _dependencies, env, id, |
22026
ab879bff09ab
Track and set has_unsafe_access flag
Gilles Duboscq <gilles.m.duboscq@oracle.com>
parents:
21982
diff
changeset
|
458 (bool) has_unsafe_access, _has_wide_vector, installed_code, compiled_code, speculation_log); |
9338
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
459 cb = nm; |
0266549ff6e0
added support from compiled stubs to be installed as RuntimeStubs and to be able to directly call C/C++ runtime functions (GRAAL-81)
Doug Simon <doug.simon@oracle.com>
parents:
9192
diff
changeset
|
460 } |
10684 | 461 |
462 if (cb != NULL) { | |
463 // Make sure the pre-calculated constants section size was correct. | |
18238
4221c8332c34
Remove unnecessary padding in constants section.
Roland Schatz <roland.schatz@oracle.com>
parents:
18229
diff
changeset
|
464 guarantee((cb->code_begin() - cb->content_begin()) >= _constants_size, err_msg("%d < %d", (int)(cb->code_begin() - cb->content_begin()), _constants_size)); |
10684 | 465 } |
13493
03bb0ee05409
made CodeInstaller subclassable and virtualized the methods for creating ScopeValues
Doug Simon <doug.simon@oracle.com>
parents:
13261
diff
changeset
|
466 return result; |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
467 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
468 |
9669
ed6202820ecf
renamed HotSpotCompilationResult to HotSpotCompiledCode and added subclasses HotSpotCompiledNmethod and HotSpotCompiledRuntimeStub
Doug Simon <doug.simon@oracle.com>
parents:
9654
diff
changeset
|
469 void CodeInstaller::initialize_fields(oop compiled_code) { |
ed6202820ecf
renamed HotSpotCompilationResult to HotSpotCompiledCode and added subclasses HotSpotCompiledNmethod and HotSpotCompiledRuntimeStub
Doug Simon <doug.simon@oracle.com>
parents:
9654
diff
changeset
|
470 if (compiled_code->is_a(HotSpotCompiledNmethod::klass())) { |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
471 Handle hotspotJavaMethod = HotSpotCompiledNmethod::method(compiled_code); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
472 methodHandle method = getMethodFromHotSpotMethod(hotspotJavaMethod()); |
5839
58a607307306
renaming in native code for CiTargetMethod -> CompilationResult
Doug Simon <doug.simon@oracle.com>
parents:
5823
diff
changeset
|
473 _parameter_count = method->size_of_parameters(); |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
474 TRACE_jvmci_1("installing code for %s", method->name_and_sig_as_C_string()); |
9654
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9359
diff
changeset
|
475 } else { |
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:
21030
diff
changeset
|
476 // Must be a HotSpotCompiledRuntimeStub |
9654
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9359
diff
changeset
|
477 // TODO (ds) not sure if this is correct - only used in OopMap constructor for non-product builds |
18632807db02
RuntimeStub installation support is now more distinct from normal nmethod installation
Doug Simon <doug.simon@oracle.com>
parents:
9359
diff
changeset
|
478 _parameter_count = 0; |
3660
c805dfba251d
Fixed regression.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3659
diff
changeset
|
479 } |
17335
508e88b5f1d3
Don't hang onto code install references after install finished
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17241
diff
changeset
|
480 _sites_handle = JNIHandles::make_local(HotSpotCompiledCode::sites(compiled_code)); |
508e88b5f1d3
Don't hang onto code install references after install finished
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17241
diff
changeset
|
481 _exception_handlers_handle = JNIHandles::make_local(HotSpotCompiledCode::exceptionHandlers(compiled_code)); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
482 |
21506
5cbaf1e9ff2e
Remove reference to CompilationResult from HotSpotCompiledCode.
Roland Schatz <roland.schatz@oracle.com>
parents:
21030
diff
changeset
|
483 _code_handle = JNIHandles::make_local(HotSpotCompiledCode::targetCode(compiled_code)); |
5cbaf1e9ff2e
Remove reference to CompilationResult from HotSpotCompiledCode.
Roland Schatz <roland.schatz@oracle.com>
parents:
21030
diff
changeset
|
484 _code_size = HotSpotCompiledCode::targetCodeSize(compiled_code); |
5cbaf1e9ff2e
Remove reference to CompilationResult from HotSpotCompiledCode.
Roland Schatz <roland.schatz@oracle.com>
parents:
21030
diff
changeset
|
485 _total_frame_size = HotSpotCompiledCode::totalFrameSize(compiled_code); |
5cbaf1e9ff2e
Remove reference to CompilationResult from HotSpotCompiledCode.
Roland Schatz <roland.schatz@oracle.com>
parents:
21030
diff
changeset
|
486 _custom_stack_area_offset = HotSpotCompiledCode::customStackAreaOffset(compiled_code); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
487 |
10684 | 488 // Pre-calculate the constants section size. This is required for PC-relative addressing. |
17335
508e88b5f1d3
Don't hang onto code install references after install finished
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17241
diff
changeset
|
489 _data_section_handle = JNIHandles::make_local(HotSpotCompiledCode::dataSection(compiled_code)); |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
490 guarantee(HotSpotCompiledCode::dataSectionAlignment(compiled_code) <= _constants->alignment(), "Alignment inside constants section is restricted by alignment of section begin"); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
491 _constants_size = data_section()->length(); |
10684 | 492 |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
493 _data_section_patches_handle = JNIHandles::make_local(HotSpotCompiledCode::dataSectionPatches(compiled_code)); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
494 |
9807
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
495 #ifndef PRODUCT |
18172
c59612b9d110
Use arrayOop subclasses in graalJavaAccess
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18043
diff
changeset
|
496 _comments_handle = JNIHandles::make_local(HotSpotCompiledCode::comments(compiled_code)); |
9807
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
497 #endif |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
498 |
14574
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
499 _next_call_type = INVOKE_INVALID; |
21731
df9d2375512a
Track max live register value in reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21730
diff
changeset
|
500 |
df9d2375512a
Track max live register value in reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21730
diff
changeset
|
501 _has_wide_vector = false; |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
502 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
503 |
15046
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
504 int CodeInstaller::estimate_stub_entries() { |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
505 // Estimate the number of static call stubs that might be emitted. |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
506 int static_call_stubs = 0; |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
507 objArrayOop sites = this->sites(); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
508 for (int i = 0; i < sites->length(); i++) { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
509 oop site = sites->obj_at(i); |
15046
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
510 if (site->is_a(CompilationResult_Mark::klass())) { |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
511 oop id_obj = CompilationResult_Mark::id(site); |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
512 if (id_obj != NULL) { |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
513 assert(java_lang_boxing_object::is_instance(id_obj, T_INT), "Integer id expected"); |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
514 jint id = id_obj->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT)); |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
515 if (id == INVOKESTATIC || id == INVOKESPECIAL) { |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
516 static_call_stubs++; |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
517 } |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
518 } |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
519 } |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
520 } |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
521 return static_call_stubs; |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
522 } |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
523 |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
524 // perform data and call relocation on the CodeBuffer |
10540
0ba44a5a8420
Add sanity check to avoid overwriting the reserved code buffer for very large methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10410
diff
changeset
|
525 bool CodeInstaller::initialize_buffer(CodeBuffer& buffer) { |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
526 HandleMark hm; |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
527 objArrayHandle sites = this->sites(); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
528 int locs_buffer_size = sites->length() * (relocInfo::length_limit + sizeof(relocInfo)); |
1931
48bbaead8b6c
Adjustments after merge with OpenJDK repository.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1484
diff
changeset
|
529 char* locs_buffer = NEW_RESOURCE_ARRAY(char, locs_buffer_size); |
48bbaead8b6c
Adjustments after merge with OpenJDK repository.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1484
diff
changeset
|
530 buffer.insts()->initialize_shared_locs((relocInfo*)locs_buffer, locs_buffer_size / sizeof(relocInfo)); |
15046
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
531 // Allocate enough space in the stub section for the static call |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
532 // stubs. Stubs have extra relocs but they are managed by the stub |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
533 // section itself so they don't need to be accounted for in the |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
534 // locs_buffer above. |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
535 buffer.initialize_stubs_size(estimate_stub_entries() * CompiledStaticCall::to_interp_stub_size()); |
1931
48bbaead8b6c
Adjustments after merge with OpenJDK repository.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1484
diff
changeset
|
536 buffer.initialize_consts_size(_constants_size); |
48bbaead8b6c
Adjustments after merge with OpenJDK repository.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1484
diff
changeset
|
537 |
7094
eec7173947a1
removed remaining use of the C++ "compiler interface" (i.e. ci) by Graal for installing dependencies
Doug Simon <doug.simon@oracle.com>
parents:
7093
diff
changeset
|
538 _debug_recorder = new DebugInformationRecorder(_oop_recorder); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
539 _debug_recorder->set_oopmaps(new OopMapSet()); |
8947
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
540 |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
541 buffer.initialize_oop_recorder(_oop_recorder); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
542 |
18196
ff1f1481b367
Fix bug in code installer.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
543 // copy the constant data into the newly created CodeBuffer |
ff1f1481b367
Fix bug in code installer.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
544 address end_data = _constants->start() + _constants_size; |
ff1f1481b367
Fix bug in code installer.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
545 memcpy(_constants->start(), data_section()->base(T_BYTE), _constants_size); |
ff1f1481b367
Fix bug in code installer.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
546 _constants->set_end(end_data); |
ff1f1481b367
Fix bug in code installer.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
547 |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
548 // copy the code into the newly created CodeBuffer |
10540
0ba44a5a8420
Add sanity check to avoid overwriting the reserved code buffer for very large methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10410
diff
changeset
|
549 address end_pc = _instructions->start() + _code_size; |
0ba44a5a8420
Add sanity check to avoid overwriting the reserved code buffer for very large methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10410
diff
changeset
|
550 if (!_instructions->allocates2(end_pc)) { |
0ba44a5a8420
Add sanity check to avoid overwriting the reserved code buffer for very large methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10410
diff
changeset
|
551 return false; |
0ba44a5a8420
Add sanity check to avoid overwriting the reserved code buffer for very large methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10410
diff
changeset
|
552 } |
18196
ff1f1481b367
Fix bug in code installer.
Roland Schatz <roland.schatz@oracle.com>
parents:
18187
diff
changeset
|
553 memcpy(_instructions->start(), code()->base(T_BYTE), _code_size); |
10540
0ba44a5a8420
Add sanity check to avoid overwriting the reserved code buffer for very large methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10410
diff
changeset
|
554 _instructions->set_end(end_pc); |
18855 | 555 |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
556 for (int i = 0; i < data_section_patches()->length(); i++) { |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
557 Handle patch = data_section_patches()->obj_at(i); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
558 Handle reference = CompilationResult_DataPatch::reference(patch); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
559 assert(reference->is_a(CompilationResult_ConstantReference::klass()), err_msg("patch in data section must be a ConstantReference")); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
560 Handle constant = CompilationResult_ConstantReference::constant(reference); |
18266
ae181ec869c5
converted HotSpotMetaspaceConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
561 if (constant->is_a(HotSpotMetaspaceConstantImpl::klass())) { |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
562 record_metadata_in_patch(constant, _oop_recorder); |
18262
f7d45e2426d4
converted HotSpotObjectConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18238
diff
changeset
|
563 } else if (constant->is_a(HotSpotObjectConstantImpl::klass())) { |
f7d45e2426d4
converted HotSpotObjectConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18238
diff
changeset
|
564 Handle obj = HotSpotObjectConstantImpl::object(constant); |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
565 jobject value = JNIHandles::make_local(obj()); |
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
566 int oop_index = _oop_recorder->find_index(value); |
13576
4e679d50ba9a
Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents:
13493
diff
changeset
|
567 |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
568 address dest = _constants->start() + CompilationResult_Site::pcOffset(patch); |
18262
f7d45e2426d4
converted HotSpotObjectConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18238
diff
changeset
|
569 if (HotSpotObjectConstantImpl::compressed(constant)) { |
18177
89f97291c3a5
Hotspot: Support narrow oop relocations in constants section.
Roland Schatz <roland.schatz@oracle.com>
parents:
18176
diff
changeset
|
570 #ifdef _LP64 |
89f97291c3a5
Hotspot: Support narrow oop relocations in constants section.
Roland Schatz <roland.schatz@oracle.com>
parents:
18176
diff
changeset
|
571 _constants->relocate(dest, oop_Relocation::spec(oop_index), relocInfo::narrow_oop_in_const); |
89f97291c3a5
Hotspot: Support narrow oop relocations in constants section.
Roland Schatz <roland.schatz@oracle.com>
parents:
18176
diff
changeset
|
572 #else |
89f97291c3a5
Hotspot: Support narrow oop relocations in constants section.
Roland Schatz <roland.schatz@oracle.com>
parents:
18176
diff
changeset
|
573 fatal("unexpected compressed oop in 32-bit mode"); |
89f97291c3a5
Hotspot: Support narrow oop relocations in constants section.
Roland Schatz <roland.schatz@oracle.com>
parents:
18176
diff
changeset
|
574 #endif |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
575 } else { |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
576 _constants->relocate(dest, oop_Relocation::spec(oop_index)); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
577 } |
14729
8db730993642
check that data patches are of the expected type
Doug Simon <doug.simon@oracle.com>
parents:
14583
diff
changeset
|
578 } else { |
8db730993642
check that data patches are of the expected type
Doug Simon <doug.simon@oracle.com>
parents:
14583
diff
changeset
|
579 ShouldNotReachHere(); |
13576
4e679d50ba9a
Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents:
13493
diff
changeset
|
580 } |
4e679d50ba9a
Move data section building code to Java.
Roland Schatz <roland.schatz@oracle.com>
parents:
13493
diff
changeset
|
581 } |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
582 jint last_pc_offset = -1; |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
583 for (int i = 0; i < sites->length(); i++) { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
584 { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
585 No_Safepoint_Verifier no_safepoint; |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
586 oop site = sites->obj_at(i); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
587 jint pc_offset = CompilationResult_Site::pcOffset(site); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
588 |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
589 if (site->is_a(CompilationResult_Call::klass())) { |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
590 TRACE_jvmci_4("call at %i", pc_offset); |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
591 site_Call(buffer, pc_offset, site); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
592 } else if (site->is_a(CompilationResult_Infopoint::klass())) { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
593 // three reasons for infopoints denote actual safepoints |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
594 oop reason = CompilationResult_Infopoint::reason(site); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
595 if (InfopointReason::SAFEPOINT() == reason || InfopointReason::CALL() == reason || InfopointReason::IMPLICIT_EXCEPTION() == reason) { |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
596 TRACE_jvmci_4("safepoint at %i", pc_offset); |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
597 site_Safepoint(buffer, pc_offset, site); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
598 } else { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
599 // if the infopoint is not an actual safepoint, it must have one of the other reasons |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
600 // (safeguard against new safepoint types that require handling above) |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
601 assert(InfopointReason::METHOD_START() == reason || InfopointReason::METHOD_END() == reason || InfopointReason::LINE_NUMBER() == reason, ""); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
602 site_Infopoint(buffer, pc_offset, site); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
603 } |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
604 } else if (site->is_a(CompilationResult_DataPatch::klass())) { |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
605 TRACE_jvmci_4("datapatch at %i", pc_offset); |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
606 site_DataPatch(buffer, pc_offset, site); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
607 } else if (site->is_a(CompilationResult_Mark::klass())) { |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
608 TRACE_jvmci_4("mark at %i", pc_offset); |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
609 site_Mark(buffer, pc_offset, site); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
610 } else { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
611 fatal("unexpected Site subclass"); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
612 } |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
613 last_pc_offset = pc_offset; |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
614 } |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
615 if (CodeInstallSafepointChecks && SafepointSynchronize::do_call_back()) { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
616 // this is a hacky way to force a safepoint check but nothing else was jumping out at me. |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
617 ThreadToNativeFromVM ttnfv(JavaThread::current()); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
618 } |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
619 } |
9807
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
620 |
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
621 #ifndef PRODUCT |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
622 if (comments() != NULL) { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
623 No_Safepoint_Verifier no_safepoint; |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
624 for (int i = 0; i < comments()->length(); i++) { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
625 oop comment = comments()->obj_at(i); |
9807
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
626 assert(comment->is_a(HotSpotCompiledCode_Comment::klass()), "cce"); |
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
627 jint offset = HotSpotCompiledCode_Comment::pcOffset(comment); |
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
628 char* text = java_lang_String::as_utf8_string(HotSpotCompiledCode_Comment::text(comment)); |
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
629 buffer.block_comment(offset, text); |
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
630 } |
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
631 } |
d552919fbb05
Graal's code annotations are installed into codeBlobs and are thus included in disassembler output (in a non-PRODUCT build)
Doug Simon <doug.simon@oracle.com>
parents:
9740
diff
changeset
|
632 #endif |
10540
0ba44a5a8420
Add sanity check to avoid overwriting the reserved code buffer for very large methods.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
10410
diff
changeset
|
633 return true; |
2048
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
634 } |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
635 |
9012
2979aaac95af
assumptions: enable NoFinalizableSubclass assumption
Bernhard Urban <bernhard.urban@jku.at>
parents:
9004
diff
changeset
|
636 void CodeInstaller::assumption_NoFinalizableSubclass(Handle assumption) { |
2979aaac95af
assumptions: enable NoFinalizableSubclass assumption
Bernhard Urban <bernhard.urban@jku.at>
parents:
9004
diff
changeset
|
637 Handle receiverType_handle = Assumptions_NoFinalizableSubclass::receiverType(assumption()); |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
638 Klass* receiverType = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(receiverType_handle)); |
9012
2979aaac95af
assumptions: enable NoFinalizableSubclass assumption
Bernhard Urban <bernhard.urban@jku.at>
parents:
9004
diff
changeset
|
639 _dependencies->assert_has_no_finalizable_subclasses(receiverType); |
2979aaac95af
assumptions: enable NoFinalizableSubclass assumption
Bernhard Urban <bernhard.urban@jku.at>
parents:
9004
diff
changeset
|
640 } |
2979aaac95af
assumptions: enable NoFinalizableSubclass assumption
Bernhard Urban <bernhard.urban@jku.at>
parents:
9004
diff
changeset
|
641 |
3672
5e331d5f760e
removed transition to vm in ci interface
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3670
diff
changeset
|
642 void CodeInstaller::assumption_ConcreteSubtype(Handle assumption) { |
5554
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
643 Handle context_handle = Assumptions_ConcreteSubtype::context(assumption()); |
7094
eec7173947a1
removed remaining use of the C++ "compiler interface" (i.e. ci) by Graal for installing dependencies
Doug Simon <doug.simon@oracle.com>
parents:
7093
diff
changeset
|
644 Handle subtype_handle = Assumptions_ConcreteSubtype::subtype(assumption()); |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
645 Klass* context = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(context_handle)); |
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
646 Klass* subtype = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(subtype_handle)); |
2048
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
647 |
19801
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
648 assert(context->is_abstract(), ""); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
649 _dependencies->assert_abstract_with_unique_concrete_subtype(context, subtype); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
650 } |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
651 |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
652 void CodeInstaller::assumption_LeafType(Handle assumption) { |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
653 Handle context_handle = Assumptions_LeafType::context(assumption()); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
654 Klass* context = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(context_handle)); |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
655 |
deab43a789ad
Split LeafType off from ConcreteSubtype
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19739
diff
changeset
|
656 _dependencies->assert_leaf_type(context); |
2048
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
657 } |
177398c6147d
Added unique concrete subtype assumption.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
2046
diff
changeset
|
658 |
3672
5e331d5f760e
removed transition to vm in ci interface
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
3670
diff
changeset
|
659 void CodeInstaller::assumption_ConcreteMethod(Handle assumption) { |
5554
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
660 Handle impl_handle = Assumptions_ConcreteMethod::impl(assumption()); |
7094
eec7173947a1
removed remaining use of the C++ "compiler interface" (i.e. ci) by Graal for installing dependencies
Doug Simon <doug.simon@oracle.com>
parents:
7093
diff
changeset
|
661 Handle context_handle = Assumptions_ConcreteMethod::context(assumption()); |
eec7173947a1
removed remaining use of the C++ "compiler interface" (i.e. ci) by Graal for installing dependencies
Doug Simon <doug.simon@oracle.com>
parents:
7093
diff
changeset
|
662 |
3704
342a54994e05
Made C++ changes to reflect changes to CiAssumptions.ConcreteMethod.
Doug Simon <doug.simon@oracle.com>
parents:
3690
diff
changeset
|
663 methodHandle impl = getMethodFromHotSpotMethod(impl_handle()); |
18223
17c98fad6980
converted HotSpotResolvedObjectType to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18222
diff
changeset
|
664 Klass* context = java_lang_Class::as_Klass(HotSpotResolvedObjectTypeImpl::javaClass(context_handle)); |
7094
eec7173947a1
removed remaining use of the C++ "compiler interface" (i.e. ci) by Graal for installing dependencies
Doug Simon <doug.simon@oracle.com>
parents:
7093
diff
changeset
|
665 |
7101
0778b04fc682
better encoding of dependencies during dependency recording by Graal
Doug Simon <doug.simon@oracle.com>
parents:
7094
diff
changeset
|
666 _dependencies->assert_unique_concrete_method(context, impl()); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
667 } |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
668 |
8947
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
669 void CodeInstaller::assumption_CallSiteTargetValue(Handle assumption) { |
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
670 Handle callSite = Assumptions_CallSiteTargetValue::callSite(assumption()); |
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
671 Handle methodHandle = Assumptions_CallSiteTargetValue::methodHandle(assumption()); |
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
672 |
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
673 _dependencies->assert_call_site_target_value(callSite(), methodHandle()); |
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
674 } |
707b20dd9512
draft call site target value assumption
Andreas Woess <andreas.woess@jku.at>
parents:
8589
diff
changeset
|
675 |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
676 void CodeInstaller::process_exception_handlers() { |
17241
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
677 if (exception_handlers() != NULL) { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
678 objArrayOop handlers = exception_handlers(); |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
679 for (int i = 0; i < handlers->length(); i++) { |
6fcb6691fe5f
Add safepoint checks during code installation
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
17084
diff
changeset
|
680 oop exc = handlers->obj_at(i); |
6674
fd71ca8c5f88
VM infrstructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
6559
diff
changeset
|
681 jint pc_offset = CompilationResult_Site::pcOffset(exc); |
fd71ca8c5f88
VM infrstructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
6559
diff
changeset
|
682 jint handler_offset = CompilationResult_ExceptionHandler::handlerPos(exc); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
683 |
4693
07bcee8b70a4
Simplify exception debug information and exception handler table creation based on Graal's simplified model of exception handler information (i.e. the dispatch is done in compiled code).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4691
diff
changeset
|
684 // Subtable header |
07bcee8b70a4
Simplify exception debug information and exception handler table creation based on Graal's simplified model of exception handler information (i.e. the dispatch is done in compiled code).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4691
diff
changeset
|
685 _exception_handler_table.add_entry(HandlerTableEntry(1, pc_offset, 0)); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
686 |
4693
07bcee8b70a4
Simplify exception debug information and exception handler table creation based on Graal's simplified model of exception handler information (i.e. the dispatch is done in compiled code).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4691
diff
changeset
|
687 // Subtable entry |
07bcee8b70a4
Simplify exception debug information and exception handler table creation based on Graal's simplified model of exception handler information (i.e. the dispatch is done in compiled code).
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
4691
diff
changeset
|
688 _exception_handler_table.add_entry(HandlerTableEntry(-1, handler_offset, 0)); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
689 } |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
690 } |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
691 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
692 |
7154
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
693 // If deoptimization happens, the interpreter should reexecute these bytecodes. |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
694 // This function mainly helps the compilers to set up the reexecute bit. |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
695 static bool bytecode_should_reexecute(Bytecodes::Code code) { |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
696 switch (code) { |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
697 case Bytecodes::_invokedynamic: |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
698 case Bytecodes::_invokevirtual: |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
699 case Bytecodes::_invokeinterface: |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
700 case Bytecodes::_invokespecial: |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
701 case Bytecodes::_invokestatic: |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
702 return false; |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
703 default: |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
704 return true; |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
705 } |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
706 return true; |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
707 } |
5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
Doug Simon <doug.simon@oracle.com>
parents:
7139
diff
changeset
|
708 |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
709 GrowableArray<ScopeValue*>* CodeInstaller::record_virtual_objects(oop debug_info) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
710 objArrayOop virtualObjects = DebugInfo::virtualObjectMapping(debug_info); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
711 if (virtualObjects == NULL) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
712 return NULL; |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
713 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
714 GrowableArray<ScopeValue*>* objects = new GrowableArray<ScopeValue*>(virtualObjects->length(), virtualObjects->length(), NULL); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
715 // Create the unique ObjectValues |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
716 for (int i = 0; i < virtualObjects->length(); i++) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
717 oop value = virtualObjects->obj_at(i); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
718 int id = VirtualObject::id(value); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
719 oop type = VirtualObject::type(value); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
720 oop javaMirror = HotSpotResolvedObjectTypeImpl::javaClass(type); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
721 ObjectValue* sv = new ObjectValue(id, new ConstantOopWriteValue(JNIHandles::make_local(Thread::current(), javaMirror))); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
722 assert(objects->at(id) == NULL, "once"); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
723 objects->at_put(id, sv); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
724 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
725 // All the values which could be referenced by the VirtualObjects |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
726 // exist, so now describe all the VirtualObjects themselves. |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
727 for (int i = 0; i < virtualObjects->length(); i++) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
728 oop value = virtualObjects->obj_at(i); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
729 int id = VirtualObject::id(value); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
730 record_object_value(objects->at(id)->as_ObjectValue(), value, objects); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
731 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
732 _debug_recorder->dump_object_pool(objects); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
733 return objects; |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
734 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
735 |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
736 void CodeInstaller::record_scope(jint pc_offset, oop debug_info) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
737 oop position = DebugInfo::bytecodePosition(debug_info); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
738 if (position == NULL) { |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
739 // Stubs do not record scope info, just oop maps |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
740 return; |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
741 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
742 |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
743 GrowableArray<ScopeValue*>* objectMapping = record_virtual_objects(debug_info); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
744 record_scope(pc_offset, position, objectMapping); |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
745 } |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
746 |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
747 void CodeInstaller::record_scope(jint pc_offset, oop position, GrowableArray<ScopeValue*>* objects) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
748 oop frame = NULL; |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
749 if (position->is_a(BytecodeFrame::klass())) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
750 frame = position; |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
751 } |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
752 oop caller_frame = BytecodePosition::caller(position); |
5129
51111665eda6
Support for recording a leaf graph id for each deoptimization point in the debug info.
Lukas Stadler <lukas.stadler@jku.at>
parents:
5000
diff
changeset
|
753 if (caller_frame != NULL) { |
51111665eda6
Support for recording a leaf graph id for each deoptimization point in the debug info.
Lukas Stadler <lukas.stadler@jku.at>
parents:
5000
diff
changeset
|
754 record_scope(pc_offset, caller_frame, objects); |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
755 } |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
756 |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
757 oop hotspot_method = BytecodePosition::method(position); |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
758 Method* method = getMethodFromHotSpotMethod(hotspot_method); |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
759 jint bci = BytecodePosition::bci(position); |
15264
29e3ba750c9e
graalCodeInstaller translate BytecodeFrame::BEFORE_BCI into SynchronizationEntryBCI
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15180
diff
changeset
|
760 if (bci == BytecodeFrame::BEFORE_BCI()) { |
29e3ba750c9e
graalCodeInstaller translate BytecodeFrame::BEFORE_BCI into SynchronizationEntryBCI
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15180
diff
changeset
|
761 bci = SynchronizationEntryBCI; |
29e3ba750c9e
graalCodeInstaller translate BytecodeFrame::BEFORE_BCI into SynchronizationEntryBCI
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
15180
diff
changeset
|
762 } |
1434
72cfb36c6bb2
* enabled all jtt tests
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1433
diff
changeset
|
763 |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
764 if (TraceJVMCI >= 2) { |
11248
b5f6188d79c5
minor logging improvement
Doug Simon <doug.simon@oracle.com>
parents:
10854
diff
changeset
|
765 tty->print_cr("Recording scope pc_offset=%d bci=%d method=%s", pc_offset, bci, method->name_and_sig_as_C_string()); |
1937
4853c5cad3aa
More deoptmization tracing.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1936
diff
changeset
|
766 } |
4853c5cad3aa
More deoptmization tracing.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1936
diff
changeset
|
767 |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
768 bool reexecute = false; |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
769 if (frame != NULL) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
770 if (bci == SynchronizationEntryBCI){ |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
771 reexecute = false; |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
772 } else { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
773 Bytecodes::Code code = Bytecodes::java_code_at(method, method->bcp_from(bci)); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
774 reexecute = bytecode_should_reexecute(code); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
775 if (frame != NULL) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
776 reexecute = (BytecodeFrame::duringCall(frame) == JNI_FALSE); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
777 } |
5129
51111665eda6
Support for recording a leaf graph id for each deoptimization point in the debug info.
Lukas Stadler <lukas.stadler@jku.at>
parents:
5000
diff
changeset
|
778 } |
51111665eda6
Support for recording a leaf graph id for each deoptimization point in the debug info.
Lukas Stadler <lukas.stadler@jku.at>
parents:
5000
diff
changeset
|
779 } |
3090
536528f48708
more escape analysis work: debug info
Lukas Stadler <lukas.stadler@jku.at>
parents:
3053
diff
changeset
|
780 |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
781 DebugToken* locals_token = NULL; |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
782 DebugToken* expressions_token = NULL; |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
783 DebugToken* monitors_token = NULL; |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
784 bool throw_exception = false; |
9887
4d5872186e76
Add compressed oops support in Graal/Hotspot site
Christos Kotselidis <christos.kotselidis@oracle.com>
parents:
9807
diff
changeset
|
785 |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
786 if (frame != NULL) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
787 jint local_count = BytecodeFrame::numLocals(frame); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
788 jint expression_count = BytecodeFrame::numStack(frame); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
789 jint monitor_count = BytecodeFrame::numLocks(frame); |
18172
c59612b9d110
Use arrayOop subclasses in graalJavaAccess
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18043
diff
changeset
|
790 objArrayOop values = BytecodeFrame::values(frame); |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
791 |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
792 assert(local_count + expression_count + monitor_count == values->length(), "unexpected values length"); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
793 |
18173
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
794 GrowableArray<ScopeValue*>* locals = local_count > 0 ? new GrowableArray<ScopeValue*> (local_count) : NULL; |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
795 GrowableArray<ScopeValue*>* expressions = expression_count > 0 ? new GrowableArray<ScopeValue*> (expression_count) : NULL; |
8c079b8d0446
Reduce allocation during scope recording
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
18172
diff
changeset
|
796 GrowableArray<MonitorValue*>* monitors = monitor_count > 0 ? new GrowableArray<MonitorValue*> (monitor_count) : NULL; |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
797 |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
798 if (TraceJVMCI >= 2) { |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
799 tty->print_cr("Scope at bci %d with %d values", bci, values->length()); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
800 tty->print_cr("%d locals %d expressions, %d monitors", local_count, expression_count, monitor_count); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
801 } |
5129
51111665eda6
Support for recording a leaf graph id for each deoptimization point in the debug info.
Lukas Stadler <lukas.stadler@jku.at>
parents:
5000
diff
changeset
|
802 |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
803 for (jint i = 0; i < values->length(); i++) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
804 ScopeValue* second = NULL; |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
805 oop value = values->obj_at(i); |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
806 if (i < local_count) { |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
807 ScopeValue* first = get_scope_value(value, objects, second); |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
808 if (second != NULL) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
809 locals->append(second); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
810 } |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
811 locals->append(first); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
812 } else if (i < local_count + expression_count) { |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
813 ScopeValue* first = get_scope_value(value, objects, second); |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
814 if (second != NULL) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
815 expressions->append(second); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
816 } |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
817 expressions->append(first); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
818 } else { |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
819 monitors->append(get_monitor_value(value, objects)); |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
820 } |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
821 if (second != NULL) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
822 i++; |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
823 assert(i < values->length(), "double-slot value not followed by Value.ILLEGAL"); |
18319
56cc1a799a60
(re)converted Value to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18266
diff
changeset
|
824 assert(values->obj_at(i) == AbstractValue::ILLEGAL(), "double-slot value not followed by Value.ILLEGAL"); |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
825 } |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
826 } |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
827 |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
828 locals_token = _debug_recorder->create_scope_values(locals); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
829 expressions_token = _debug_recorder->create_scope_values(expressions); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
830 monitors_token = _debug_recorder->create_monitor_values(monitors); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
831 |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
832 throw_exception = BytecodeFrame::rethrowException(frame) == JNI_TRUE; |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
833 } |
3018
5857923e563c
Fixed an issue with frame states in exception dispatch chains (now we are correctly rethrowing the exception immediately at entering the interpreter).
Thomas Wuerthinger <thomas@wuerthinger.net>
parents:
3011
diff
changeset
|
834 |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
835 _debug_recorder->describe_scope(pc_offset, method, NULL, bci, reexecute, throw_exception, false, false, |
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
836 locals_token, expressions_token, monitors_token); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
837 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
838 |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
839 void CodeInstaller::site_Safepoint(CodeBuffer& buffer, jint pc_offset, oop site) { |
9003
a8fea2979e63
eager infopoint mode (fka debug mode)
Michael Haupt <michael.haupt@oracle.com>
parents:
8589
diff
changeset
|
840 oop debug_info = CompilationResult_Infopoint::debugInfo(site); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
841 assert(debug_info != NULL, "debug info expected"); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
842 |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
843 // address instruction = _instructions->start() + pc_offset; |
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
844 // jint next_pc_offset = Assembler::locate_next_instruction(instruction) - _instructions->start(); |
21730
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
845 _debug_recorder->add_safepoint(pc_offset, create_oop_map(debug_info)); |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
846 record_scope(pc_offset, debug_info); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
847 _debug_recorder->end_safepoint(pc_offset); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
848 } |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
849 |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
850 void CodeInstaller::site_Infopoint(CodeBuffer& buffer, jint pc_offset, oop site) { |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
851 oop debug_info = CompilationResult_Infopoint::debugInfo(site); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
852 assert(debug_info != NULL, "debug info expected"); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
853 |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
854 _debug_recorder->add_non_safepoint(pc_offset); |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
855 record_scope(pc_offset, debug_info); |
16573
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
856 _debug_recorder->end_non_safepoint(pc_offset); |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
857 } |
a2ec1ac769e4
Add simple infopoint nodes which do not contain debugging informations for values. Use them when shouldDebugNonSafepoints is true.
Gilles Duboscq <duboscq@ssw.jku.at>
parents:
16520
diff
changeset
|
858 |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
859 void CodeInstaller::site_Call(CodeBuffer& buffer, jint pc_offset, oop site) { |
6674
fd71ca8c5f88
VM infrstructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
6559
diff
changeset
|
860 oop target = CompilationResult_Call::target(site); |
6948
e522a00b91aa
Merge with http://hg.openjdk.java.net/hsx/hsx25/hotspot/ after NPG - C++ build works
Doug Simon <doug.simon@oracle.com>
parents:
6674
diff
changeset
|
861 InstanceKlass* target_klass = InstanceKlass::cast(target->klass()); |
3561
bea018622324
Changes to JavaAccess as a result of CRI changes.
Doug Simon <doug.simon@oracle.com>
parents:
3560
diff
changeset
|
862 |
5554
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
863 oop hotspot_method = NULL; // JavaMethod |
9740
c4b1aa93b9af
rename: HotSpotRuntimeCallTarget -> HotSpotForeignCallLinkage
Doug Simon <doug.simon@oracle.com>
parents:
9669
diff
changeset
|
864 oop foreign_call = NULL; |
3561
bea018622324
Changes to JavaAccess as a result of CRI changes.
Doug Simon <doug.simon@oracle.com>
parents:
3560
diff
changeset
|
865 |
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:
21030
diff
changeset
|
866 if (target_klass->is_subclass_of(SystemDictionary::HotSpotForeignCallTarget_klass())) { |
9740
c4b1aa93b9af
rename: HotSpotRuntimeCallTarget -> HotSpotForeignCallLinkage
Doug Simon <doug.simon@oracle.com>
parents:
9669
diff
changeset
|
867 foreign_call = target; |
3561
bea018622324
Changes to JavaAccess as a result of CRI changes.
Doug Simon <doug.simon@oracle.com>
parents:
3560
diff
changeset
|
868 } else { |
bea018622324
Changes to JavaAccess as a result of CRI changes.
Doug Simon <doug.simon@oracle.com>
parents:
3560
diff
changeset
|
869 hotspot_method = target; |
bea018622324
Changes to JavaAccess as a result of CRI changes.
Doug Simon <doug.simon@oracle.com>
parents:
3560
diff
changeset
|
870 } |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
871 |
6674
fd71ca8c5f88
VM infrstructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
6559
diff
changeset
|
872 oop debug_info = CompilationResult_Call::debugInfo(site); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
873 |
11827
ff1d8605f354
graal code installer: minor style cleanup
Bernhard Urban <bernhard.urban@jku.at>
parents:
11760
diff
changeset
|
874 assert(!!hotspot_method ^ !!foreign_call, "Call site needs exactly one type"); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
875 |
3563
8780fa370aab
Support runtime calls to targets that don't fit in a 32-bit immediate: allow to query the maximum offset of a CiRuntimeCall target to determine the required immediate size and patch call sites with a mov/call instruction pair for indirect calls
Peter Hofer <peter.hofer@jku.at>
parents:
3561
diff
changeset
|
876 NativeInstruction* inst = nativeInstruction_at(_instructions->start() + pc_offset); |
9934
0f7ca53be929
CR-806: Changes to build Graal for SPARC
Morris Meyer <morris.meyer@oracle.com>
parents:
9891
diff
changeset
|
877 jint next_pc_offset = CodeInstaller::pd_next_offset(inst, pc_offset, hotspot_method); |
18855 | 878 |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
879 if (debug_info != NULL) { |
21730
b9f9b8af17ff
Simplify interface to reference map
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
21561
diff
changeset
|
880 _debug_recorder->add_safepoint(next_pc_offset, create_oop_map(debug_info)); |
20044
c1f116cd4b67
Speed up debug info generation for virtual objects
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
19801
diff
changeset
|
881 record_scope(next_pc_offset, debug_info); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
882 } |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
883 |
9740
c4b1aa93b9af
rename: HotSpotRuntimeCallTarget -> HotSpotForeignCallLinkage
Doug Simon <doug.simon@oracle.com>
parents:
9669
diff
changeset
|
884 if (foreign_call != NULL) { |
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:
21030
diff
changeset
|
885 jlong foreign_call_destination = HotSpotForeignCallTarget::address(foreign_call); |
9934
0f7ca53be929
CR-806: Changes to build Graal for SPARC
Morris Meyer <morris.meyer@oracle.com>
parents:
9891
diff
changeset
|
886 CodeInstaller::pd_relocate_ForeignCall(inst, foreign_call_destination); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
887 } else { // method != NULL |
5554
70f715dfbb41
Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
5553
diff
changeset
|
888 assert(hotspot_method != NULL, "unexpected JavaMethod"); |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
889 assert(debug_info != NULL, "debug info expected"); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
890 |
21559
be896a1983c0
recast all Graal native code as JVMCI code (JBS:GRAAL-53)
Doug Simon <doug.simon@oracle.com>
parents:
21526
diff
changeset
|
891 TRACE_jvmci_3("method call"); |
9934
0f7ca53be929
CR-806: Changes to build Graal for SPARC
Morris Meyer <morris.meyer@oracle.com>
parents:
9891
diff
changeset
|
892 CodeInstaller::pd_relocate_JavaMethod(hotspot_method, pc_offset); |
15046
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
893 if (_next_call_type == INVOKESTATIC || _next_call_type == INVOKESPECIAL) { |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
894 // Need a static call stub for transitions from compiled to interpreted. |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
895 CompiledStaticCall::emit_to_interp_stub(buffer, _instructions->start() + pc_offset); |
5c71dcf0915d
use hotspot static stubs for call sites
Tom Rodriguez <tom.rodriguez@oracle.com>
parents:
15018
diff
changeset
|
896 } |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
897 } |
10854
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10810
diff
changeset
|
898 |
14574
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
899 _next_call_type = INVOKE_INVALID; |
10854
e1fcdda22831
SPARC: can compile some stubs now but they don't work yet
twisti
parents:
10810
diff
changeset
|
900 |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
901 if (debug_info != NULL) { |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
902 _debug_recorder->end_safepoint(next_pc_offset); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
903 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
904 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
905 |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
906 void CodeInstaller::site_DataPatch(CodeBuffer& buffer, jint pc_offset, oop site) { |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
907 oop reference = CompilationResult_DataPatch::reference(site); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
908 if (reference->is_a(CompilationResult_ConstantReference::klass())) { |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
909 Handle constant = CompilationResult_ConstantReference::constant(reference); |
18262
f7d45e2426d4
converted HotSpotObjectConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18238
diff
changeset
|
910 if (constant->is_a(HotSpotObjectConstantImpl::klass())) { |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
911 pd_patch_OopConstant(pc_offset, constant); |
18266
ae181ec869c5
converted HotSpotMetaspaceConstant to an interface
Doug Simon <doug.simon@oracle.com>
parents:
18262
diff
changeset
|
912 } else if (constant->is_a(HotSpotMetaspaceConstantImpl::klass())) { |
18176
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
913 record_metadata_in_patch(constant, _oop_recorder); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
914 } else { |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
915 fatal("unknown constant type in data patch"); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
916 } |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
917 } else if (reference->is_a(CompilationResult_DataSectionReference::klass())) { |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
918 int data_offset = CompilationResult_DataSectionReference::offset(reference); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
919 assert(0 <= data_offset && data_offset < _constants_size, err_msg("data offset 0x%X points outside data section (size 0x%X)", data_offset, _constants_size)); |
c2270ad35f57
Better construction of data section and data patches.
Roland Schatz <roland.schatz@oracle.com>
parents:
18174
diff
changeset
|
920 pd_patch_DataSectionReference(pc_offset, data_offset); |
14561
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
921 } else { |
e14198669e5c
Make data patch system use vm specific NarrowOop kind.
Roland Schatz <roland.schatz@oracle.com>
parents:
14172
diff
changeset
|
922 fatal("unknown data patch type"); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
923 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
924 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
925 |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
926 void CodeInstaller::site_Mark(CodeBuffer& buffer, jint pc_offset, oop site) { |
6674
fd71ca8c5f88
VM infrstructure for OnStackReplacement
Lukas Stadler <lukas.stadler@jku.at>
parents:
6559
diff
changeset
|
927 oop id_obj = CompilationResult_Mark::id(site); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
928 |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
929 if (id_obj != NULL) { |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
930 assert(java_lang_boxing_object::is_instance(id_obj, T_INT), "Integer id expected"); |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
931 jint id = id_obj->int_field(java_lang_boxing_object::value_offset_in_bytes(T_INT)); |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
932 |
10771 | 933 address pc = _instructions->start() + pc_offset; |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
934 |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
935 switch (id) { |
14574
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
936 case UNVERIFIED_ENTRY: |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
937 _offsets.set_value(CodeOffsets::Entry, pc_offset); |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
938 break; |
14574
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
939 case VERIFIED_ENTRY: |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
940 _offsets.set_value(CodeOffsets::Verified_Entry, pc_offset); |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
941 break; |
14574
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
942 case OSR_ENTRY: |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
943 _offsets.set_value(CodeOffsets::OSR_Entry, pc_offset); |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
944 break; |
14574
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
945 case EXCEPTION_HANDLER_ENTRY: |
1429
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
946 _offsets.set_value(CodeOffsets::Exceptions, pc_offset); |
abc670a709dc
* -XX:TraceC1X=0...5 controls the native c1x tracing
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1428
diff
changeset
|
947 break; |
14574
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
948 case DEOPT_HANDLER_ENTRY: |
1936
8d88c9ac9247
Correct deopt handler entry. New flag -XX:+TraceSignals. More detailed deopt printing.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1931
diff
changeset
|
949 _offsets.set_value(CodeOffsets::Deopt, pc_offset); |
8d88c9ac9247
Correct deopt handler entry. New flag -XX:+TraceSignals. More detailed deopt printing.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1931
diff
changeset
|
950 break; |
14574
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
951 case INVOKEVIRTUAL: |
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
952 case INVOKEINTERFACE: |
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
953 case INLINE_INVOKE: |
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
954 case INVOKESTATIC: |
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
955 case INVOKESPECIAL: |
1432
b61a43cd1255
sourcecode formatting
Lukas Stadler <lukas.stadler@oracle.com>
parents:
1429
diff
changeset
|
956 _next_call_type = (MarkId) id; |
10771 | 957 _invoke_mark_pc = pc; |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
958 break; |
14574
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
959 case POLL_NEAR: |
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
960 case POLL_FAR: |
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
961 case POLL_RETURN_NEAR: |
6bab029d6e3a
removed com/oracle/graal/hotspot/bridge/Marks.java and replaced with enum
twisti
parents:
14562
diff
changeset
|
962 case POLL_RETURN_FAR: |
11760
ce0b00597980
made safepoint-on-return use specialized HotSpot runtime support for such safepoints (which have no debug info attached)
Doug Simon <doug.simon@oracle.com>
parents:
11338
diff
changeset
|
963 pd_relocate_poll(pc, id); |
3549
25765a764212
Add support for polling mark in code installer
Gilles Duboscq <gilles.duboscq@oracle.com>
parents:
3538
diff
changeset
|
964 break; |
18661 | 965 case CARD_TABLE_SHIFT: |
966 case CARD_TABLE_ADDRESS: | |
967 break; | |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
968 default: |
1931
48bbaead8b6c
Adjustments after merge with OpenJDK repository.
Thomas Wuerthinger <wuerthinger@ssw.jku.at>
parents:
1484
diff
changeset
|
969 ShouldNotReachHere(); |
1428
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
970 break; |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
971 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
972 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
973 } |
695451afc619
refactoring classes into separate files
Lukas Stadler <lukas.stadler@oracle.com>
parents:
diff
changeset
|
974 |