Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/hotspot/src/cpu/aarch32/vm/c1_Defs_aarch32.hpp
32285 views
1
/*
2
* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved.
3
* Copyright (c) 2014, Red Hat Inc. All rights reserved.
4
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5
*
6
* This code is free software; you can redistribute it and/or modify it
7
* under the terms of the GNU General Public License version 2 only, as
8
* published by the Free Software Foundation.
9
*
10
* This code is distributed in the hope that it will be useful, but WITHOUT
11
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13
* version 2 for more details (a copy is included in the LICENSE file that
14
* accompanied this code).
15
*
16
* You should have received a copy of the GNU General Public License version
17
* 2 along with this work; if not, write to the Free Software Foundation,
18
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19
*
20
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21
* or visit www.oracle.com if you need additional information or have any
22
* questions.
23
*
24
*/
25
// This file is a derivative work resulting from (and including) modifications
26
// made by Azul Systems, Inc. The dates of such changes are 2013-2016.
27
// Copyright 2013-2016 Azul Systems, Inc. All Rights Reserved.
28
//
29
// Please contact Azul Systems, 385 Moffett Park Drive, Suite 115, Sunnyvale,
30
// CA 94089 USA or visit www.azul.com if you need additional information or
31
// have any questions.
32
33
#ifndef CPU_AARCH32_VM_C1_DEFS_AARCH32_HPP
34
#define CPU_AARCH32_VM_C1_DEFS_AARCH32_HPP
35
36
// Native word offsets from memory address (little endian format)
37
enum {
38
pd_lo_word_offset_in_bytes = 0,
39
pd_hi_word_offset_in_bytes = BytesPerWord
40
};
41
42
// TODO: We should understand what values are correct for the following 3 flags
43
// relevant to floating point operations:
44
// - UseSSE
45
// Highest supported SSE instruction set on x86/x64. I believe we should
46
// set it to 0 in VM_Version::initialize(), like other non-x86 ports do.
47
// - RoundFPResults
48
// Indicates whether rounding is needed for floating point results
49
// - pd_strict_fp_requires_explicit_rounding
50
// The same as above but for the strictfp mode
51
52
// Explicit rounding operations are not required to implement the strictfp mode
53
enum {
54
pd_strict_fp_requires_explicit_rounding = false
55
};
56
57
// Registers
58
enum {
59
// Number of registers used during code emission
60
pd_nof_cpu_regs_frame_map = RegisterImpl::number_of_registers,
61
pd_nof_fpu_regs_frame_map = FloatRegisterImpl::number_of_registers,
62
63
// Number of registers killed by calls
64
pd_nof_caller_save_cpu_regs_frame_map = 8,
65
66
pd_nof_caller_save_fpu_regs_frame_map = pd_nof_fpu_regs_frame_map,
67
// The following two constants need to be defined since they are referenced
68
// from c1_FrameMap.hpp, but actually they are never used, so can be set to
69
// arbitrary values.
70
pd_nof_cpu_regs_reg_alloc = -1,
71
pd_nof_fpu_regs_reg_alloc = -1,
72
73
// All the constants below are used by linear scan register allocator only.
74
// Number of registers visible to register allocator
75
pd_nof_cpu_regs_linearscan = pd_nof_cpu_regs_frame_map,
76
pd_nof_fpu_regs_linearscan = pd_nof_fpu_regs_frame_map,
77
pd_nof_xmm_regs_linearscan = 0,
78
79
// Register allocator specific register numbers corresponding to first/last
80
// CPU/FPU registers available for allocation
81
pd_first_cpu_reg = 0,
82
pd_last_cpu_reg = 7,
83
pd_first_fpu_reg = pd_nof_cpu_regs_frame_map,
84
pd_last_fpu_reg = pd_first_fpu_reg + pd_nof_fpu_regs_frame_map - 1,
85
// Register allocator specific register numbers corresponding to first/last
86
// CPU/FPU callee-saved registers. These constants are used in
87
// LinearScan::is_caller_save() only.
88
pd_first_callee_saved_cpu_reg = 4,
89
pd_last_callee_saved_cpu_reg = 11,
90
pd_first_callee_saved_fpu_reg = pd_first_fpu_reg + pd_nof_fpu_regs_frame_map/2,
91
pd_last_callee_saved_fpu_reg = pd_first_fpu_reg + pd_nof_fpu_regs_frame_map - 1
92
};
93
94
// This flag must be in sync with how the floating point registers are stored
95
// on the stack by RegisterSaver::save_live_registers() method
96
// (sharedRuntime_aarch32.cpp) and save_live_registers() function
97
// (c1_Runtime1_aarch32.cpp). On AArch32 the floating point registers keep
98
// floats and doubles in their native form. No float to double conversion
99
// happens when the registers are stored on the stack. This is opposite to
100
// what happens on x86, where the FPU stack registers are 80 bits wide,
101
// and storing them in either 4 byte or 8 byte stack slot is a conversion
102
// operation.
103
enum {
104
pd_float_saved_as_double = false
105
};
106
107
#endif // CPU_AARCH32_VM_C1_DEFS_AARCH32_HPP
108
109