Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openj9
Path: blob/master/runtime/compiler/p/env/J9CPU.cpp
6004 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 https://www.eclipse.org/legal/epl-2.0/
7
* or the Apache License, Version 2.0 which accompanies this distribution and
8
* is available at https://www.apache.org/licenses/LICENSE-2.0.
9
*
10
* This Source Code may also be made available under the following
11
* Secondary Licenses when the conditions for such availability set
12
* forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
13
* General Public License, version 2 with the GNU Classpath
14
* Exception [1] and GNU General Public License, version 2 with the
15
* OpenJDK Assembly Exception [2].
16
*
17
* [1] https://www.gnu.org/software/classpath/license.html
18
* [2] http://openjdk.java.net/legal/assembly-exception.html
19
*
20
* 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
21
*******************************************************************************/
22
23
#include "compile/Compilation.hpp"
24
#include "env/CompilerEnv.hpp"
25
#include "env/CPU.hpp"
26
#include "j9.h"
27
#include "j9port.h"
28
29
TR::CPU
30
J9::Power::CPU::detectRelocatable(OMRPortLibrary * const omrPortLib)
31
{
32
if (omrPortLib == NULL)
33
return TR::CPU();
34
35
OMRPORT_ACCESS_FROM_OMRPORT(omrPortLib);
36
OMRProcessorDesc portableProcessorDescription;
37
omrsysinfo_get_processor_description(&portableProcessorDescription);
38
39
if (portableProcessorDescription.processor > OMR_PROCESSOR_PPC_P8)
40
{
41
portableProcessorDescription.processor = OMR_PROCESSOR_PPC_P8;
42
portableProcessorDescription.physicalProcessor = OMR_PROCESSOR_PPC_P8;
43
}
44
45
return TR::CPU::customize(portableProcessorDescription);
46
}
47
48
bool
49
J9::Power::CPU::isCompatible(const OMRProcessorDesc& processorDescription)
50
{
51
const OMRProcessorArchitecture& targetProcessor = self()->getProcessorDescription().processor;
52
const OMRProcessorArchitecture& processor = processorDescription.processor;
53
54
for (int i = 0; i < OMRPORT_SYSINFO_FEATURES_SIZE; i++)
55
{
56
if ((processorDescription.features[i] & self()->getProcessorDescription().features[i]) != processorDescription.features[i])
57
return false;
58
}
59
60
// Backwards compatibility only applies to p4,p5,p6,p7 and onwards
61
// Looks for equality otherwise
62
if ((processor == OMR_PROCESSOR_PPC_GP
63
|| processor == OMR_PROCESSOR_PPC_GR
64
|| processor == OMR_PROCESSOR_PPC_P6
65
|| (processor >= OMR_PROCESSOR_PPC_P7 && processor <= OMR_PROCESSOR_PPC_LAST))
66
&& (targetProcessor == OMR_PROCESSOR_PPC_GP
67
|| targetProcessor == OMR_PROCESSOR_PPC_GR
68
|| targetProcessor == OMR_PROCESSOR_PPC_P6
69
|| targetProcessor >= OMR_PROCESSOR_PPC_P7 && targetProcessor <= OMR_PROCESSOR_PPC_LAST))
70
{
71
return targetProcessor >= processor;
72
}
73
return targetProcessor == processor;
74
}
75
76
void
77
J9::Power::CPU::enableFeatureMasks()
78
{
79
// Only enable the features that compiler currently uses
80
const uint32_t utilizedFeatures [] = {OMR_FEATURE_PPC_HAS_ALTIVEC, OMR_FEATURE_PPC_HAS_DFP,
81
OMR_FEATURE_PPC_HTM, OMR_FEATURE_PPC_HAS_VSX};
82
83
84
memset(_supportedFeatureMasks.features, 0, OMRPORT_SYSINFO_FEATURES_SIZE*sizeof(uint32_t));
85
OMRPORT_ACCESS_FROM_OMRPORT(TR::Compiler->omrPortLib);
86
for (size_t i = 0; i < sizeof(utilizedFeatures)/sizeof(uint32_t); i++)
87
{
88
omrsysinfo_processor_set_feature(&_supportedFeatureMasks, utilizedFeatures[i], TRUE);
89
}
90
91
_isSupportedFeatureMasksEnabled = true;
92
}
93
94