annotate src/cpu/sparc/vm/c1_FrameMap_sparc.cpp @ 6812:988bf00cc564

7200261: G1: Liveness counting inconsistencies during marking verification Summary: The clipping code in the routine that sets the bits for a range of cards, in the liveness accounting verification code was incorrect. It set all the bits in the card bitmap from the given starting index which would lead to spurious marking verification failures. Reviewed-by: brutisso, jwilhelm, jmasa
author johnc
date Thu, 27 Sep 2012 15:44:01 -0700
parents 8a02ca5e5576
children b9a9ed0f8eeb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
a61af66fc99e Initial load
duke
parents:
diff changeset
1 /*
1579
jrose
parents: 1552 1564
diff changeset
2 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
a61af66fc99e Initial load
duke
parents:
diff changeset
4 *
a61af66fc99e Initial load
duke
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
a61af66fc99e Initial load
duke
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
a61af66fc99e Initial load
duke
parents:
diff changeset
7 * published by the Free Software Foundation.
a61af66fc99e Initial load
duke
parents:
diff changeset
8 *
a61af66fc99e Initial load
duke
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
a61af66fc99e Initial load
duke
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
a61af66fc99e Initial load
duke
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
a61af66fc99e Initial load
duke
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
a61af66fc99e Initial load
duke
parents:
diff changeset
13 * accompanied this code).
a61af66fc99e Initial load
duke
parents:
diff changeset
14 *
a61af66fc99e Initial load
duke
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
a61af66fc99e Initial load
duke
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
a61af66fc99e Initial load
duke
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
a61af66fc99e Initial load
duke
parents:
diff changeset
18 *
1552
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 928
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 928
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 928
diff changeset
21 * questions.
0
a61af66fc99e Initial load
duke
parents:
diff changeset
22 *
a61af66fc99e Initial load
duke
parents:
diff changeset
23 */
a61af66fc99e Initial load
duke
parents:
diff changeset
24
1972
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
26 #include "c1/c1_FrameMap.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
27 #include "c1/c1_LIR.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
28 #include "runtime/sharedRuntime.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1783
diff changeset
29 #include "vmreg_sparc.inline.hpp"
0
a61af66fc99e Initial load
duke
parents:
diff changeset
30
a61af66fc99e Initial load
duke
parents:
diff changeset
31
a61af66fc99e Initial load
duke
parents:
diff changeset
32 const int FrameMap::pd_c_runtime_reserved_arg_size = 7;
a61af66fc99e Initial load
duke
parents:
diff changeset
33
a61af66fc99e Initial load
duke
parents:
diff changeset
34
a61af66fc99e Initial load
duke
parents:
diff changeset
35 LIR_Opr FrameMap::map_to_opr(BasicType type, VMRegPair* reg, bool outgoing) {
a61af66fc99e Initial load
duke
parents:
diff changeset
36 LIR_Opr opr = LIR_OprFact::illegalOpr;
a61af66fc99e Initial load
duke
parents:
diff changeset
37 VMReg r_1 = reg->first();
a61af66fc99e Initial load
duke
parents:
diff changeset
38 VMReg r_2 = reg->second();
a61af66fc99e Initial load
duke
parents:
diff changeset
39 if (r_1->is_stack()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // Convert stack slot to an SP offset
a61af66fc99e Initial load
duke
parents:
diff changeset
41 // The calling convention does not count the SharedRuntime::out_preserve_stack_slots() value
a61af66fc99e Initial load
duke
parents:
diff changeset
42 // so we must add it in here.
a61af66fc99e Initial load
duke
parents:
diff changeset
43 int st_off = (r_1->reg2stack() + SharedRuntime::out_preserve_stack_slots()) * VMRegImpl::stack_slot_size;
a61af66fc99e Initial load
duke
parents:
diff changeset
44 opr = LIR_OprFact::address(new LIR_Address(SP_opr, st_off + STACK_BIAS, type));
a61af66fc99e Initial load
duke
parents:
diff changeset
45 } else if (r_1->is_Register()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
46 Register reg = r_1->as_Register();
a61af66fc99e Initial load
duke
parents:
diff changeset
47 if (outgoing) {
a61af66fc99e Initial load
duke
parents:
diff changeset
48 assert(!reg->is_in(), "should be using I regs");
a61af66fc99e Initial load
duke
parents:
diff changeset
49 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
50 assert(!reg->is_out(), "should be using O regs");
a61af66fc99e Initial load
duke
parents:
diff changeset
51 }
a61af66fc99e Initial load
duke
parents:
diff changeset
52 if (r_2->is_Register() && (type == T_LONG || type == T_DOUBLE)) {
a61af66fc99e Initial load
duke
parents:
diff changeset
53 opr = as_long_opr(reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
54 } else if (type == T_OBJECT || type == T_ARRAY) {
a61af66fc99e Initial load
duke
parents:
diff changeset
55 opr = as_oop_opr(reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
56 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
57 opr = as_opr(reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
58 }
a61af66fc99e Initial load
duke
parents:
diff changeset
59 } else if (r_1->is_FloatRegister()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
60 assert(type == T_DOUBLE || type == T_FLOAT, "wrong type");
a61af66fc99e Initial load
duke
parents:
diff changeset
61 FloatRegister f = r_1->as_FloatRegister();
a61af66fc99e Initial load
duke
parents:
diff changeset
62 if (type == T_DOUBLE) {
a61af66fc99e Initial load
duke
parents:
diff changeset
63 opr = as_double_opr(f);
a61af66fc99e Initial load
duke
parents:
diff changeset
64 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
65 opr = as_float_opr(f);
a61af66fc99e Initial load
duke
parents:
diff changeset
66 }
a61af66fc99e Initial load
duke
parents:
diff changeset
67 }
a61af66fc99e Initial load
duke
parents:
diff changeset
68 return opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
69 }
a61af66fc99e Initial load
duke
parents:
diff changeset
70
a61af66fc99e Initial load
duke
parents:
diff changeset
71 // FrameMap
a61af66fc99e Initial load
duke
parents:
diff changeset
72 //--------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
73
a61af66fc99e Initial load
duke
parents:
diff changeset
74 FloatRegister FrameMap::_fpu_regs [FrameMap::nof_fpu_regs];
a61af66fc99e Initial load
duke
parents:
diff changeset
75
a61af66fc99e Initial load
duke
parents:
diff changeset
76 // some useful constant RInfo's:
a61af66fc99e Initial load
duke
parents:
diff changeset
77 LIR_Opr FrameMap::in_long_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
78 LIR_Opr FrameMap::out_long_opr;
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1584
diff changeset
79 LIR_Opr FrameMap::g1_long_single_opr;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
80
a61af66fc99e Initial load
duke
parents:
diff changeset
81 LIR_Opr FrameMap::F0_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
82 LIR_Opr FrameMap::F0_double_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
83
a61af66fc99e Initial load
duke
parents:
diff changeset
84 LIR_Opr FrameMap::G0_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
85 LIR_Opr FrameMap::G1_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
86 LIR_Opr FrameMap::G2_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
87 LIR_Opr FrameMap::G3_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
88 LIR_Opr FrameMap::G4_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
89 LIR_Opr FrameMap::G5_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
90 LIR_Opr FrameMap::G6_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
91 LIR_Opr FrameMap::G7_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
92 LIR_Opr FrameMap::O0_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
93 LIR_Opr FrameMap::O1_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
94 LIR_Opr FrameMap::O2_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
95 LIR_Opr FrameMap::O3_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
96 LIR_Opr FrameMap::O4_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
97 LIR_Opr FrameMap::O5_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
98 LIR_Opr FrameMap::O6_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
99 LIR_Opr FrameMap::O7_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
100 LIR_Opr FrameMap::L0_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
101 LIR_Opr FrameMap::L1_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
102 LIR_Opr FrameMap::L2_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
103 LIR_Opr FrameMap::L3_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
104 LIR_Opr FrameMap::L4_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
105 LIR_Opr FrameMap::L5_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
106 LIR_Opr FrameMap::L6_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
107 LIR_Opr FrameMap::L7_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
108 LIR_Opr FrameMap::I0_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
109 LIR_Opr FrameMap::I1_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
110 LIR_Opr FrameMap::I2_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
111 LIR_Opr FrameMap::I3_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
112 LIR_Opr FrameMap::I4_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
113 LIR_Opr FrameMap::I5_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
114 LIR_Opr FrameMap::I6_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
115 LIR_Opr FrameMap::I7_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
116
a61af66fc99e Initial load
duke
parents:
diff changeset
117 LIR_Opr FrameMap::G0_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
118 LIR_Opr FrameMap::G1_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
119 LIR_Opr FrameMap::G2_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
120 LIR_Opr FrameMap::G3_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
121 LIR_Opr FrameMap::G4_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
122 LIR_Opr FrameMap::G5_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
123 LIR_Opr FrameMap::G6_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
124 LIR_Opr FrameMap::G7_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
125 LIR_Opr FrameMap::O0_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
126 LIR_Opr FrameMap::O1_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
127 LIR_Opr FrameMap::O2_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
128 LIR_Opr FrameMap::O3_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
129 LIR_Opr FrameMap::O4_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
130 LIR_Opr FrameMap::O5_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
131 LIR_Opr FrameMap::O6_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
132 LIR_Opr FrameMap::O7_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
133 LIR_Opr FrameMap::L0_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
134 LIR_Opr FrameMap::L1_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
135 LIR_Opr FrameMap::L2_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
136 LIR_Opr FrameMap::L3_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
137 LIR_Opr FrameMap::L4_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
138 LIR_Opr FrameMap::L5_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
139 LIR_Opr FrameMap::L6_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
140 LIR_Opr FrameMap::L7_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
141 LIR_Opr FrameMap::I0_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
142 LIR_Opr FrameMap::I1_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
143 LIR_Opr FrameMap::I2_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
144 LIR_Opr FrameMap::I3_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
145 LIR_Opr FrameMap::I4_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
146 LIR_Opr FrameMap::I5_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
147 LIR_Opr FrameMap::I6_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
148 LIR_Opr FrameMap::I7_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
149
6739
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
150 LIR_Opr FrameMap::G0_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
151 LIR_Opr FrameMap::G1_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
152 LIR_Opr FrameMap::G2_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
153 LIR_Opr FrameMap::G3_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
154 LIR_Opr FrameMap::G4_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
155 LIR_Opr FrameMap::G5_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
156 LIR_Opr FrameMap::G6_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
157 LIR_Opr FrameMap::G7_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
158 LIR_Opr FrameMap::O0_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
159 LIR_Opr FrameMap::O1_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
160 LIR_Opr FrameMap::O2_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
161 LIR_Opr FrameMap::O3_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
162 LIR_Opr FrameMap::O4_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
163 LIR_Opr FrameMap::O5_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
164 LIR_Opr FrameMap::O6_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
165 LIR_Opr FrameMap::O7_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
166 LIR_Opr FrameMap::L0_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
167 LIR_Opr FrameMap::L1_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
168 LIR_Opr FrameMap::L2_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
169 LIR_Opr FrameMap::L3_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
170 LIR_Opr FrameMap::L4_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
171 LIR_Opr FrameMap::L5_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
172 LIR_Opr FrameMap::L6_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
173 LIR_Opr FrameMap::L7_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
174 LIR_Opr FrameMap::I0_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
175 LIR_Opr FrameMap::I1_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
176 LIR_Opr FrameMap::I2_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
177 LIR_Opr FrameMap::I3_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
178 LIR_Opr FrameMap::I4_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
179 LIR_Opr FrameMap::I5_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
180 LIR_Opr FrameMap::I6_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
181 LIR_Opr FrameMap::I7_metadata_opr;
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
182
0
a61af66fc99e Initial load
duke
parents:
diff changeset
183 LIR_Opr FrameMap::SP_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
184 LIR_Opr FrameMap::FP_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
185
a61af66fc99e Initial load
duke
parents:
diff changeset
186 LIR_Opr FrameMap::Oexception_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
187 LIR_Opr FrameMap::Oissuing_pc_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
188
a61af66fc99e Initial load
duke
parents:
diff changeset
189 LIR_Opr FrameMap::_caller_save_cpu_regs[] = { 0, };
a61af66fc99e Initial load
duke
parents:
diff changeset
190 LIR_Opr FrameMap::_caller_save_fpu_regs[] = { 0, };
a61af66fc99e Initial load
duke
parents:
diff changeset
191
a61af66fc99e Initial load
duke
parents:
diff changeset
192
a61af66fc99e Initial load
duke
parents:
diff changeset
193 FloatRegister FrameMap::nr2floatreg (int rnr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
194 assert(_init_done, "tables not initialized");
a61af66fc99e Initial load
duke
parents:
diff changeset
195 debug_only(fpu_range_check(rnr);)
a61af66fc99e Initial load
duke
parents:
diff changeset
196 return _fpu_regs[rnr];
a61af66fc99e Initial load
duke
parents:
diff changeset
197 }
a61af66fc99e Initial load
duke
parents:
diff changeset
198
a61af66fc99e Initial load
duke
parents:
diff changeset
199
a61af66fc99e Initial load
duke
parents:
diff changeset
200 // returns true if reg could be smashed by a callee.
a61af66fc99e Initial load
duke
parents:
diff changeset
201 bool FrameMap::is_caller_save_register (LIR_Opr reg) {
a61af66fc99e Initial load
duke
parents:
diff changeset
202 if (reg->is_single_fpu() || reg->is_double_fpu()) { return true; }
a61af66fc99e Initial load
duke
parents:
diff changeset
203 if (reg->is_double_cpu()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
204 return is_caller_save_register(reg->as_register_lo()) ||
a61af66fc99e Initial load
duke
parents:
diff changeset
205 is_caller_save_register(reg->as_register_hi());
a61af66fc99e Initial load
duke
parents:
diff changeset
206 }
a61af66fc99e Initial load
duke
parents:
diff changeset
207 return is_caller_save_register(reg->as_register());
a61af66fc99e Initial load
duke
parents:
diff changeset
208 }
a61af66fc99e Initial load
duke
parents:
diff changeset
209
a61af66fc99e Initial load
duke
parents:
diff changeset
210
a61af66fc99e Initial load
duke
parents:
diff changeset
211 NEEDS_CLEANUP // once the new calling convention is enabled, we no
a61af66fc99e Initial load
duke
parents:
diff changeset
212 // longer need to treat I5, I4 and L0 specially
a61af66fc99e Initial load
duke
parents:
diff changeset
213 // Because the interpreter destroys caller's I5, I4 and L0,
a61af66fc99e Initial load
duke
parents:
diff changeset
214 // we must spill them before doing a Java call as we may land in
a61af66fc99e Initial load
duke
parents:
diff changeset
215 // interpreter.
a61af66fc99e Initial load
duke
parents:
diff changeset
216 bool FrameMap::is_caller_save_register (Register r) {
a61af66fc99e Initial load
duke
parents:
diff changeset
217 return (r->is_global() && (r != G0)) || r->is_out();
a61af66fc99e Initial load
duke
parents:
diff changeset
218 }
a61af66fc99e Initial load
duke
parents:
diff changeset
219
a61af66fc99e Initial load
duke
parents:
diff changeset
220
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1579
diff changeset
221 void FrameMap::initialize() {
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1579
diff changeset
222 assert(!_init_done, "once");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
223
a61af66fc99e Initial load
duke
parents:
diff changeset
224 int i=0;
a61af66fc99e Initial load
duke
parents:
diff changeset
225 // Register usage:
a61af66fc99e Initial load
duke
parents:
diff changeset
226 // O6: sp
a61af66fc99e Initial load
duke
parents:
diff changeset
227 // I6: fp
a61af66fc99e Initial load
duke
parents:
diff changeset
228 // I7: return address
a61af66fc99e Initial load
duke
parents:
diff changeset
229 // G0: zero
a61af66fc99e Initial load
duke
parents:
diff changeset
230 // G2: thread
a61af66fc99e Initial load
duke
parents:
diff changeset
231 // G7: not available
a61af66fc99e Initial load
duke
parents:
diff changeset
232 // G6: not available
a61af66fc99e Initial load
duke
parents:
diff changeset
233 /* 0 */ map_register(i++, L0);
a61af66fc99e Initial load
duke
parents:
diff changeset
234 /* 1 */ map_register(i++, L1);
a61af66fc99e Initial load
duke
parents:
diff changeset
235 /* 2 */ map_register(i++, L2);
a61af66fc99e Initial load
duke
parents:
diff changeset
236 /* 3 */ map_register(i++, L3);
a61af66fc99e Initial load
duke
parents:
diff changeset
237 /* 4 */ map_register(i++, L4);
a61af66fc99e Initial load
duke
parents:
diff changeset
238 /* 5 */ map_register(i++, L5);
a61af66fc99e Initial load
duke
parents:
diff changeset
239 /* 6 */ map_register(i++, L6);
a61af66fc99e Initial load
duke
parents:
diff changeset
240 /* 7 */ map_register(i++, L7);
a61af66fc99e Initial load
duke
parents:
diff changeset
241
a61af66fc99e Initial load
duke
parents:
diff changeset
242 /* 8 */ map_register(i++, I0);
a61af66fc99e Initial load
duke
parents:
diff changeset
243 /* 9 */ map_register(i++, I1);
a61af66fc99e Initial load
duke
parents:
diff changeset
244 /* 10 */ map_register(i++, I2);
a61af66fc99e Initial load
duke
parents:
diff changeset
245 /* 11 */ map_register(i++, I3);
a61af66fc99e Initial load
duke
parents:
diff changeset
246 /* 12 */ map_register(i++, I4);
a61af66fc99e Initial load
duke
parents:
diff changeset
247 /* 13 */ map_register(i++, I5);
a61af66fc99e Initial load
duke
parents:
diff changeset
248 /* 14 */ map_register(i++, O0);
a61af66fc99e Initial load
duke
parents:
diff changeset
249 /* 15 */ map_register(i++, O1);
a61af66fc99e Initial load
duke
parents:
diff changeset
250 /* 16 */ map_register(i++, O2);
a61af66fc99e Initial load
duke
parents:
diff changeset
251 /* 17 */ map_register(i++, O3);
a61af66fc99e Initial load
duke
parents:
diff changeset
252 /* 18 */ map_register(i++, O4);
a61af66fc99e Initial load
duke
parents:
diff changeset
253 /* 19 */ map_register(i++, O5); // <- last register visible in RegAlloc (RegAlloc::nof+cpu_regs)
a61af66fc99e Initial load
duke
parents:
diff changeset
254 /* 20 */ map_register(i++, G1);
a61af66fc99e Initial load
duke
parents:
diff changeset
255 /* 21 */ map_register(i++, G3);
a61af66fc99e Initial load
duke
parents:
diff changeset
256 /* 22 */ map_register(i++, G4);
a61af66fc99e Initial load
duke
parents:
diff changeset
257 /* 23 */ map_register(i++, G5);
a61af66fc99e Initial load
duke
parents:
diff changeset
258 /* 24 */ map_register(i++, G0);
a61af66fc99e Initial load
duke
parents:
diff changeset
259
a61af66fc99e Initial load
duke
parents:
diff changeset
260 // the following registers are not normally available
a61af66fc99e Initial load
duke
parents:
diff changeset
261 /* 25 */ map_register(i++, O7);
a61af66fc99e Initial load
duke
parents:
diff changeset
262 /* 26 */ map_register(i++, G2);
a61af66fc99e Initial load
duke
parents:
diff changeset
263 /* 27 */ map_register(i++, O6);
a61af66fc99e Initial load
duke
parents:
diff changeset
264 /* 28 */ map_register(i++, I6);
a61af66fc99e Initial load
duke
parents:
diff changeset
265 /* 29 */ map_register(i++, I7);
a61af66fc99e Initial load
duke
parents:
diff changeset
266 /* 30 */ map_register(i++, G6);
a61af66fc99e Initial load
duke
parents:
diff changeset
267 /* 31 */ map_register(i++, G7);
a61af66fc99e Initial load
duke
parents:
diff changeset
268 assert(i == nof_cpu_regs, "number of CPU registers");
a61af66fc99e Initial load
duke
parents:
diff changeset
269
a61af66fc99e Initial load
duke
parents:
diff changeset
270 for (i = 0; i < nof_fpu_regs; i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
271 _fpu_regs[i] = as_FloatRegister(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
272 }
a61af66fc99e Initial load
duke
parents:
diff changeset
273
a61af66fc99e Initial load
duke
parents:
diff changeset
274 _init_done = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
275
a61af66fc99e Initial load
duke
parents:
diff changeset
276 in_long_opr = as_long_opr(I0);
a61af66fc99e Initial load
duke
parents:
diff changeset
277 out_long_opr = as_long_opr(O0);
1783
d5d065957597 6953144: Tiered compilation
iveresov
parents: 1584
diff changeset
278 g1_long_single_opr = as_long_single_opr(G1);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
279
a61af66fc99e Initial load
duke
parents:
diff changeset
280 G0_opr = as_opr(G0);
a61af66fc99e Initial load
duke
parents:
diff changeset
281 G1_opr = as_opr(G1);
a61af66fc99e Initial load
duke
parents:
diff changeset
282 G2_opr = as_opr(G2);
a61af66fc99e Initial load
duke
parents:
diff changeset
283 G3_opr = as_opr(G3);
a61af66fc99e Initial load
duke
parents:
diff changeset
284 G4_opr = as_opr(G4);
a61af66fc99e Initial load
duke
parents:
diff changeset
285 G5_opr = as_opr(G5);
a61af66fc99e Initial load
duke
parents:
diff changeset
286 G6_opr = as_opr(G6);
a61af66fc99e Initial load
duke
parents:
diff changeset
287 G7_opr = as_opr(G7);
a61af66fc99e Initial load
duke
parents:
diff changeset
288 O0_opr = as_opr(O0);
a61af66fc99e Initial load
duke
parents:
diff changeset
289 O1_opr = as_opr(O1);
a61af66fc99e Initial load
duke
parents:
diff changeset
290 O2_opr = as_opr(O2);
a61af66fc99e Initial load
duke
parents:
diff changeset
291 O3_opr = as_opr(O3);
a61af66fc99e Initial load
duke
parents:
diff changeset
292 O4_opr = as_opr(O4);
a61af66fc99e Initial load
duke
parents:
diff changeset
293 O5_opr = as_opr(O5);
a61af66fc99e Initial load
duke
parents:
diff changeset
294 O6_opr = as_opr(O6);
a61af66fc99e Initial load
duke
parents:
diff changeset
295 O7_opr = as_opr(O7);
a61af66fc99e Initial load
duke
parents:
diff changeset
296 L0_opr = as_opr(L0);
a61af66fc99e Initial load
duke
parents:
diff changeset
297 L1_opr = as_opr(L1);
a61af66fc99e Initial load
duke
parents:
diff changeset
298 L2_opr = as_opr(L2);
a61af66fc99e Initial load
duke
parents:
diff changeset
299 L3_opr = as_opr(L3);
a61af66fc99e Initial load
duke
parents:
diff changeset
300 L4_opr = as_opr(L4);
a61af66fc99e Initial load
duke
parents:
diff changeset
301 L5_opr = as_opr(L5);
a61af66fc99e Initial load
duke
parents:
diff changeset
302 L6_opr = as_opr(L6);
a61af66fc99e Initial load
duke
parents:
diff changeset
303 L7_opr = as_opr(L7);
a61af66fc99e Initial load
duke
parents:
diff changeset
304 I0_opr = as_opr(I0);
a61af66fc99e Initial load
duke
parents:
diff changeset
305 I1_opr = as_opr(I1);
a61af66fc99e Initial load
duke
parents:
diff changeset
306 I2_opr = as_opr(I2);
a61af66fc99e Initial load
duke
parents:
diff changeset
307 I3_opr = as_opr(I3);
a61af66fc99e Initial load
duke
parents:
diff changeset
308 I4_opr = as_opr(I4);
a61af66fc99e Initial load
duke
parents:
diff changeset
309 I5_opr = as_opr(I5);
a61af66fc99e Initial load
duke
parents:
diff changeset
310 I6_opr = as_opr(I6);
a61af66fc99e Initial load
duke
parents:
diff changeset
311 I7_opr = as_opr(I7);
a61af66fc99e Initial load
duke
parents:
diff changeset
312
a61af66fc99e Initial load
duke
parents:
diff changeset
313 G0_oop_opr = as_oop_opr(G0);
a61af66fc99e Initial load
duke
parents:
diff changeset
314 G1_oop_opr = as_oop_opr(G1);
a61af66fc99e Initial load
duke
parents:
diff changeset
315 G2_oop_opr = as_oop_opr(G2);
a61af66fc99e Initial load
duke
parents:
diff changeset
316 G3_oop_opr = as_oop_opr(G3);
a61af66fc99e Initial load
duke
parents:
diff changeset
317 G4_oop_opr = as_oop_opr(G4);
a61af66fc99e Initial load
duke
parents:
diff changeset
318 G5_oop_opr = as_oop_opr(G5);
a61af66fc99e Initial load
duke
parents:
diff changeset
319 G6_oop_opr = as_oop_opr(G6);
a61af66fc99e Initial load
duke
parents:
diff changeset
320 G7_oop_opr = as_oop_opr(G7);
a61af66fc99e Initial load
duke
parents:
diff changeset
321 O0_oop_opr = as_oop_opr(O0);
a61af66fc99e Initial load
duke
parents:
diff changeset
322 O1_oop_opr = as_oop_opr(O1);
a61af66fc99e Initial load
duke
parents:
diff changeset
323 O2_oop_opr = as_oop_opr(O2);
a61af66fc99e Initial load
duke
parents:
diff changeset
324 O3_oop_opr = as_oop_opr(O3);
a61af66fc99e Initial load
duke
parents:
diff changeset
325 O4_oop_opr = as_oop_opr(O4);
a61af66fc99e Initial load
duke
parents:
diff changeset
326 O5_oop_opr = as_oop_opr(O5);
a61af66fc99e Initial load
duke
parents:
diff changeset
327 O6_oop_opr = as_oop_opr(O6);
a61af66fc99e Initial load
duke
parents:
diff changeset
328 O7_oop_opr = as_oop_opr(O7);
a61af66fc99e Initial load
duke
parents:
diff changeset
329 L0_oop_opr = as_oop_opr(L0);
a61af66fc99e Initial load
duke
parents:
diff changeset
330 L1_oop_opr = as_oop_opr(L1);
a61af66fc99e Initial load
duke
parents:
diff changeset
331 L2_oop_opr = as_oop_opr(L2);
a61af66fc99e Initial load
duke
parents:
diff changeset
332 L3_oop_opr = as_oop_opr(L3);
a61af66fc99e Initial load
duke
parents:
diff changeset
333 L4_oop_opr = as_oop_opr(L4);
a61af66fc99e Initial load
duke
parents:
diff changeset
334 L5_oop_opr = as_oop_opr(L5);
a61af66fc99e Initial load
duke
parents:
diff changeset
335 L6_oop_opr = as_oop_opr(L6);
a61af66fc99e Initial load
duke
parents:
diff changeset
336 L7_oop_opr = as_oop_opr(L7);
a61af66fc99e Initial load
duke
parents:
diff changeset
337 I0_oop_opr = as_oop_opr(I0);
a61af66fc99e Initial load
duke
parents:
diff changeset
338 I1_oop_opr = as_oop_opr(I1);
a61af66fc99e Initial load
duke
parents:
diff changeset
339 I2_oop_opr = as_oop_opr(I2);
a61af66fc99e Initial load
duke
parents:
diff changeset
340 I3_oop_opr = as_oop_opr(I3);
a61af66fc99e Initial load
duke
parents:
diff changeset
341 I4_oop_opr = as_oop_opr(I4);
a61af66fc99e Initial load
duke
parents:
diff changeset
342 I5_oop_opr = as_oop_opr(I5);
a61af66fc99e Initial load
duke
parents:
diff changeset
343 I6_oop_opr = as_oop_opr(I6);
a61af66fc99e Initial load
duke
parents:
diff changeset
344 I7_oop_opr = as_oop_opr(I7);
a61af66fc99e Initial load
duke
parents:
diff changeset
345
6739
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
346 G0_metadata_opr = as_metadata_opr(G0);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
347 G1_metadata_opr = as_metadata_opr(G1);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
348 G2_metadata_opr = as_metadata_opr(G2);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
349 G3_metadata_opr = as_metadata_opr(G3);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
350 G4_metadata_opr = as_metadata_opr(G4);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
351 G5_metadata_opr = as_metadata_opr(G5);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
352 G6_metadata_opr = as_metadata_opr(G6);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
353 G7_metadata_opr = as_metadata_opr(G7);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
354 O0_metadata_opr = as_metadata_opr(O0);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
355 O1_metadata_opr = as_metadata_opr(O1);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
356 O2_metadata_opr = as_metadata_opr(O2);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
357 O3_metadata_opr = as_metadata_opr(O3);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
358 O4_metadata_opr = as_metadata_opr(O4);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
359 O5_metadata_opr = as_metadata_opr(O5);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
360 O6_metadata_opr = as_metadata_opr(O6);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
361 O7_metadata_opr = as_metadata_opr(O7);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
362 L0_metadata_opr = as_metadata_opr(L0);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
363 L1_metadata_opr = as_metadata_opr(L1);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
364 L2_metadata_opr = as_metadata_opr(L2);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
365 L3_metadata_opr = as_metadata_opr(L3);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
366 L4_metadata_opr = as_metadata_opr(L4);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
367 L5_metadata_opr = as_metadata_opr(L5);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
368 L6_metadata_opr = as_metadata_opr(L6);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
369 L7_metadata_opr = as_metadata_opr(L7);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
370 I0_metadata_opr = as_metadata_opr(I0);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
371 I1_metadata_opr = as_metadata_opr(I1);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
372 I2_metadata_opr = as_metadata_opr(I2);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
373 I3_metadata_opr = as_metadata_opr(I3);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
374 I4_metadata_opr = as_metadata_opr(I4);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
375 I5_metadata_opr = as_metadata_opr(I5);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
376 I6_metadata_opr = as_metadata_opr(I6);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
377 I7_metadata_opr = as_metadata_opr(I7);
8a02ca5e5576 7195816: NPG: Crash in c1_ValueType - ShouldNotReachHere
roland
parents: 1972
diff changeset
378
0
a61af66fc99e Initial load
duke
parents:
diff changeset
379 FP_opr = as_pointer_opr(FP);
a61af66fc99e Initial load
duke
parents:
diff changeset
380 SP_opr = as_pointer_opr(SP);
a61af66fc99e Initial load
duke
parents:
diff changeset
381
a61af66fc99e Initial load
duke
parents:
diff changeset
382 F0_opr = as_float_opr(F0);
a61af66fc99e Initial load
duke
parents:
diff changeset
383 F0_double_opr = as_double_opr(F0);
a61af66fc99e Initial load
duke
parents:
diff changeset
384
a61af66fc99e Initial load
duke
parents:
diff changeset
385 Oexception_opr = as_oop_opr(Oexception);
a61af66fc99e Initial load
duke
parents:
diff changeset
386 Oissuing_pc_opr = as_opr(Oissuing_pc);
a61af66fc99e Initial load
duke
parents:
diff changeset
387
a61af66fc99e Initial load
duke
parents:
diff changeset
388 _caller_save_cpu_regs[0] = FrameMap::O0_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
389 _caller_save_cpu_regs[1] = FrameMap::O1_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
390 _caller_save_cpu_regs[2] = FrameMap::O2_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
391 _caller_save_cpu_regs[3] = FrameMap::O3_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
392 _caller_save_cpu_regs[4] = FrameMap::O4_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
393 _caller_save_cpu_regs[5] = FrameMap::O5_opr;
928
d0acbc302e14 6795465: Crash in assembler_sparc.cpp with client compiler on solaris-sparc
never
parents: 727
diff changeset
394 _caller_save_cpu_regs[6] = FrameMap::G1_opr;
d0acbc302e14 6795465: Crash in assembler_sparc.cpp with client compiler on solaris-sparc
never
parents: 727
diff changeset
395 _caller_save_cpu_regs[7] = FrameMap::G3_opr;
d0acbc302e14 6795465: Crash in assembler_sparc.cpp with client compiler on solaris-sparc
never
parents: 727
diff changeset
396 _caller_save_cpu_regs[8] = FrameMap::G4_opr;
d0acbc302e14 6795465: Crash in assembler_sparc.cpp with client compiler on solaris-sparc
never
parents: 727
diff changeset
397 _caller_save_cpu_regs[9] = FrameMap::G5_opr;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
398 for (int i = 0; i < nof_caller_save_fpu_regs; i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
399 _caller_save_fpu_regs[i] = LIR_OprFact::single_fpu(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
400 }
a61af66fc99e Initial load
duke
parents:
diff changeset
401 }
a61af66fc99e Initial load
duke
parents:
diff changeset
402
a61af66fc99e Initial load
duke
parents:
diff changeset
403
a61af66fc99e Initial load
duke
parents:
diff changeset
404 Address FrameMap::make_new_address(ByteSize sp_offset) const {
727
6b2273dd6fa9 6822110: Add AddressLiteral class on SPARC
twisti
parents: 0
diff changeset
405 return Address(SP, STACK_BIAS + in_bytes(sp_offset));
0
a61af66fc99e Initial load
duke
parents:
diff changeset
406 }
a61af66fc99e Initial load
duke
parents:
diff changeset
407
a61af66fc99e Initial load
duke
parents:
diff changeset
408
a61af66fc99e Initial load
duke
parents:
diff changeset
409 VMReg FrameMap::fpu_regname (int n) {
a61af66fc99e Initial load
duke
parents:
diff changeset
410 return as_FloatRegister(n)->as_VMReg();
a61af66fc99e Initial load
duke
parents:
diff changeset
411 }
a61af66fc99e Initial load
duke
parents:
diff changeset
412
a61af66fc99e Initial load
duke
parents:
diff changeset
413
a61af66fc99e Initial load
duke
parents:
diff changeset
414 LIR_Opr FrameMap::stack_pointer() {
a61af66fc99e Initial load
duke
parents:
diff changeset
415 return SP_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
416 }
a61af66fc99e Initial load
duke
parents:
diff changeset
417
a61af66fc99e Initial load
duke
parents:
diff changeset
418
1564
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 928
diff changeset
419 // JSR 292
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 928
diff changeset
420 LIR_Opr FrameMap::method_handle_invoke_SP_save_opr() {
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 928
diff changeset
421 assert(L7 == L7_mh_SP_save, "must be same register");
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 928
diff changeset
422 return L7_opr;
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 928
diff changeset
423 }
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 928
diff changeset
424
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 928
diff changeset
425
0
a61af66fc99e Initial load
duke
parents:
diff changeset
426 bool FrameMap::validate_frame() {
a61af66fc99e Initial load
duke
parents:
diff changeset
427 int max_offset = in_bytes(framesize_in_bytes());
a61af66fc99e Initial load
duke
parents:
diff changeset
428 int java_index = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
429 for (int i = 0; i < _incoming_arguments->length(); i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
430 LIR_Opr opr = _incoming_arguments->at(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
431 if (opr->is_stack()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
432 max_offset = MAX2(_argument_locations->at(java_index), max_offset);
a61af66fc99e Initial load
duke
parents:
diff changeset
433 }
a61af66fc99e Initial load
duke
parents:
diff changeset
434 java_index += type2size[opr->type()];
a61af66fc99e Initial load
duke
parents:
diff changeset
435 }
a61af66fc99e Initial load
duke
parents:
diff changeset
436 return Assembler::is_simm13(max_offset + STACK_BIAS);
a61af66fc99e Initial load
duke
parents:
diff changeset
437 }