Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openj9
Path: blob/master/runtime/compiler/il/J9ResolvedMethodSymbol.cpp
6000 views
1
/*******************************************************************************
2
* Copyright (c) 2000, 2020 IBM Corp. and others
3
*
4
* This program and the accompanying materials are made available under
5
* the terms of the Eclipse Public License 2.0 which accompanies this
6
* distribution and is available at http://eclipse.org/legal/epl-2.0
7
* or the Apache License, Version 2.0 which accompanies this distribution
8
* and is available at https://www.apache.org/licenses/LICENSE-2.0.
9
*
10
* This Source Code may also be made available under the following Secondary
11
* Licenses when the conditions for such availability set forth in the
12
* Eclipse Public License, v. 2.0 are satisfied: GNU General Public License,
13
* version 2 with the GNU Classpath Exception [1] and GNU General Public
14
* License, version 2 with the OpenJDK Assembly Exception [2].
15
*
16
* [1] https://www.gnu.org/software/classpath/license.html
17
* [2] http://openjdk.java.net/legal/assembly-exception.html
18
*
19
* SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 OR LicenseRef-GPL-2.0 WITH Assembly-exception
20
*******************************************************************************/
21
22
#include "compile/ResolvedMethod.hpp"
23
#include "env/CompilerEnv.hpp"
24
#include "env/KnownObjectTable.hpp"
25
#include "il/ResolvedMethodSymbol.hpp"
26
#include "compile/Compilation.hpp"
27
28
29
J9::ResolvedMethodSymbol::ResolvedMethodSymbol(TR_ResolvedMethod *method, TR::Compilation *comp) :
30
OMR::ResolvedMethodSymbolConnector(method, comp)
31
{
32
if (comp->target().cpu.isPower())
33
{
34
if ((comp->target().cpu.isAtLeast(OMR_PROCESSOR_PPC_HW_ROUND_FIRST) &&
35
((method->getRecognizedMethod() == TR::java_lang_Math_floor) ||
36
(method->getRecognizedMethod() == TR::java_lang_StrictMath_floor) ||
37
(method->getRecognizedMethod() == TR::java_lang_Math_ceil) ||
38
(method->getRecognizedMethod() == TR::java_lang_StrictMath_ceil))) ||
39
(comp->target().cpu.isAtLeast(OMR_PROCESSOR_PPC_HW_COPY_SIGN_FIRST) &&
40
((method->getRecognizedMethod() == TR::java_lang_Math_copySign_F) ||
41
(method->getRecognizedMethod() == TR::java_lang_Math_copySign_D))))
42
{
43
self()->setCanReplaceWithHWInstr(true);
44
}
45
}
46
47
if (method->isJNINative())
48
{
49
self()->setJNI();
50
#if defined(TR_TARGET_POWER)
51
switch(method->getRecognizedMethod())
52
{
53
case TR::java_lang_Math_acos:
54
case TR::java_lang_Math_asin:
55
case TR::java_lang_Math_atan:
56
case TR::java_lang_Math_atan2:
57
case TR::java_lang_Math_cbrt:
58
case TR::java_lang_Math_ceil:
59
case TR::java_lang_Math_copySign_F:
60
case TR::java_lang_Math_copySign_D:
61
case TR::java_lang_Math_cos:
62
case TR::java_lang_Math_cosh:
63
case TR::java_lang_Math_exp:
64
case TR::java_lang_Math_expm1:
65
case TR::java_lang_Math_floor:
66
case TR::java_lang_Math_hypot:
67
case TR::java_lang_Math_IEEEremainder:
68
case TR::java_lang_Math_log:
69
case TR::java_lang_Math_log10:
70
case TR::java_lang_Math_log1p:
71
case TR::java_lang_Math_max_F:
72
case TR::java_lang_Math_max_D:
73
case TR::java_lang_Math_min_F:
74
case TR::java_lang_Math_min_D:
75
case TR::java_lang_Math_nextAfter_F:
76
case TR::java_lang_Math_nextAfter_D:
77
case TR::java_lang_Math_pow:
78
case TR::java_lang_Math_rint:
79
case TR::java_lang_Math_round_F:
80
case TR::java_lang_Math_round_D:
81
case TR::java_lang_Math_scalb_F:
82
case TR::java_lang_Math_scalb_D:
83
case TR::java_lang_Math_sin:
84
case TR::java_lang_Math_sinh:
85
case TR::java_lang_Math_sqrt:
86
case TR::java_lang_Math_tan:
87
case TR::java_lang_Math_tanh:
88
case TR::java_lang_StrictMath_acos:
89
case TR::java_lang_StrictMath_asin:
90
case TR::java_lang_StrictMath_atan:
91
case TR::java_lang_StrictMath_atan2:
92
case TR::java_lang_StrictMath_cbrt:
93
case TR::java_lang_StrictMath_ceil:
94
case TR::java_lang_StrictMath_copySign_F:
95
case TR::java_lang_StrictMath_copySign_D:
96
case TR::java_lang_StrictMath_cos:
97
case TR::java_lang_StrictMath_cosh:
98
case TR::java_lang_StrictMath_exp:
99
case TR::java_lang_StrictMath_expm1:
100
case TR::java_lang_StrictMath_floor:
101
case TR::java_lang_StrictMath_hypot:
102
case TR::java_lang_StrictMath_IEEEremainder:
103
case TR::java_lang_StrictMath_log:
104
case TR::java_lang_StrictMath_log10:
105
case TR::java_lang_StrictMath_log1p:
106
case TR::java_lang_StrictMath_max_F:
107
case TR::java_lang_StrictMath_max_D:
108
case TR::java_lang_StrictMath_min_F:
109
case TR::java_lang_StrictMath_min_D:
110
case TR::java_lang_StrictMath_nextAfter_F:
111
case TR::java_lang_StrictMath_nextAfter_D:
112
case TR::java_lang_StrictMath_pow:
113
case TR::java_lang_StrictMath_rint:
114
case TR::java_lang_StrictMath_round_F:
115
case TR::java_lang_StrictMath_round_D:
116
case TR::java_lang_StrictMath_scalb_F:
117
case TR::java_lang_StrictMath_scalb_D:
118
case TR::java_lang_StrictMath_sin:
119
case TR::java_lang_StrictMath_sinh:
120
case TR::java_lang_StrictMath_sqrt:
121
case TR::java_lang_StrictMath_tan:
122
case TR::java_lang_StrictMath_tanh:
123
setCanDirectNativeCall(true);
124
break;
125
default:
126
break;
127
}
128
#endif // TR_TARGET_POWER
129
}
130
131
}
132
133
TR::KnownObjectTable::Index
134
J9::ResolvedMethodSymbol::getKnownObjectIndexForParm(int32_t ordinal)
135
{
136
TR::KnownObjectTable::Index index = TR::KnownObjectTable::UNKNOWN;
137
if (ordinal == 0)
138
{
139
if (self()->getResolvedMethod()->convertToMethod()->isArchetypeSpecimen())
140
{
141
TR::KnownObjectTable *knot = self()->comp()->getOrCreateKnownObjectTable();
142
if (knot)
143
index = knot->getExistingIndexAt(self()->getResolvedMethod()->getMethodHandleLocation());
144
}
145
}
146
return index;
147
}
148
149