annotate src/cpu/x86/vm/c1_FrameMap_x86.cpp @ 4582:b24386206122

Made all vm builds go into subdirectories, even product builds to simplify building the various types of VMs (server, client and graal). Made HotSpot build jobs use the number of CPUs on the host machine.
author Doug Simon <doug.simon@oracle.com>
date Mon, 13 Feb 2012 23:13:37 +0100
parents ac637b7220d1
children 8a02ca5e5576
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: 337
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
c18cbe5936b8 6941466: Oracle rebranding changes for Hotspot repositories
trims
parents: 337
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: 337
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: 1584
diff changeset
25 #include "precompiled.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1584
diff changeset
26 #include "c1/c1_FrameMap.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1584
diff changeset
27 #include "c1/c1_LIR.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1584
diff changeset
28 #include "runtime/sharedRuntime.hpp"
f95d63e2154a 6989984: Use standard include model for Hospot
stefank
parents: 1584
diff changeset
29 #include "vmreg_x86.inline.hpp"
0
a61af66fc99e Initial load
duke
parents:
diff changeset
30
a61af66fc99e Initial load
duke
parents:
diff changeset
31 const int FrameMap::pd_c_runtime_reserved_arg_size = 0;
a61af66fc99e Initial load
duke
parents:
diff changeset
32
a61af66fc99e Initial load
duke
parents:
diff changeset
33 LIR_Opr FrameMap::map_to_opr(BasicType type, VMRegPair* reg, bool) {
a61af66fc99e Initial load
duke
parents:
diff changeset
34 LIR_Opr opr = LIR_OprFact::illegalOpr;
a61af66fc99e Initial load
duke
parents:
diff changeset
35 VMReg r_1 = reg->first();
a61af66fc99e Initial load
duke
parents:
diff changeset
36 VMReg r_2 = reg->second();
a61af66fc99e Initial load
duke
parents:
diff changeset
37 if (r_1->is_stack()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
38 // Convert stack slot to an SP offset
a61af66fc99e Initial load
duke
parents:
diff changeset
39 // The calling convention does not count the SharedRuntime::out_preserve_stack_slots() value
a61af66fc99e Initial load
duke
parents:
diff changeset
40 // so we must add it in here.
a61af66fc99e Initial load
duke
parents:
diff changeset
41 int st_off = (r_1->reg2stack() + SharedRuntime::out_preserve_stack_slots()) * VMRegImpl::stack_slot_size;
a61af66fc99e Initial load
duke
parents:
diff changeset
42 opr = LIR_OprFact::address(new LIR_Address(rsp_opr, st_off, type));
a61af66fc99e Initial load
duke
parents:
diff changeset
43 } else if (r_1->is_Register()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
44 Register reg = r_1->as_Register();
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
45 if (r_2->is_Register() && (type == T_LONG || type == T_DOUBLE)) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
46 Register reg2 = r_2->as_Register();
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
47 #ifdef _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
48 assert(reg2 == reg, "must be same register");
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
49 opr = as_long_opr(reg);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
50 #else
0
a61af66fc99e Initial load
duke
parents:
diff changeset
51 opr = as_long_opr(reg2, reg);
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
52 #endif // _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
53 } else if (type == T_OBJECT || type == T_ARRAY) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
54 opr = as_oop_opr(reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
55 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
56 opr = as_opr(reg);
a61af66fc99e Initial load
duke
parents:
diff changeset
57 }
a61af66fc99e Initial load
duke
parents:
diff changeset
58 } else if (r_1->is_FloatRegister()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
59 assert(type == T_DOUBLE || type == T_FLOAT, "wrong type");
a61af66fc99e Initial load
duke
parents:
diff changeset
60 int num = r_1->as_FloatRegister()->encoding();
a61af66fc99e Initial load
duke
parents:
diff changeset
61 if (type == T_FLOAT) {
a61af66fc99e Initial load
duke
parents:
diff changeset
62 opr = LIR_OprFact::single_fpu(num);
a61af66fc99e Initial load
duke
parents:
diff changeset
63 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
64 opr = LIR_OprFact::double_fpu(num);
a61af66fc99e Initial load
duke
parents:
diff changeset
65 }
a61af66fc99e Initial load
duke
parents:
diff changeset
66 } else if (r_1->is_XMMRegister()) {
a61af66fc99e Initial load
duke
parents:
diff changeset
67 assert(type == T_DOUBLE || type == T_FLOAT, "wrong type");
a61af66fc99e Initial load
duke
parents:
diff changeset
68 int num = r_1->as_XMMRegister()->encoding();
a61af66fc99e Initial load
duke
parents:
diff changeset
69 if (type == T_FLOAT) {
a61af66fc99e Initial load
duke
parents:
diff changeset
70 opr = LIR_OprFact::single_xmm(num);
a61af66fc99e Initial load
duke
parents:
diff changeset
71 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
72 opr = LIR_OprFact::double_xmm(num);
a61af66fc99e Initial load
duke
parents:
diff changeset
73 }
a61af66fc99e Initial load
duke
parents:
diff changeset
74 } else {
a61af66fc99e Initial load
duke
parents:
diff changeset
75 ShouldNotReachHere();
a61af66fc99e Initial load
duke
parents:
diff changeset
76 }
a61af66fc99e Initial load
duke
parents:
diff changeset
77 return opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
78 }
a61af66fc99e Initial load
duke
parents:
diff changeset
79
a61af66fc99e Initial load
duke
parents:
diff changeset
80
a61af66fc99e Initial load
duke
parents:
diff changeset
81 LIR_Opr FrameMap::rsi_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
82 LIR_Opr FrameMap::rdi_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
83 LIR_Opr FrameMap::rbx_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
84 LIR_Opr FrameMap::rax_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
85 LIR_Opr FrameMap::rdx_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
86 LIR_Opr FrameMap::rcx_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
87 LIR_Opr FrameMap::rsp_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
88 LIR_Opr FrameMap::rbp_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
89
a61af66fc99e Initial load
duke
parents:
diff changeset
90 LIR_Opr FrameMap::receiver_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
91
a61af66fc99e Initial load
duke
parents:
diff changeset
92 LIR_Opr FrameMap::rsi_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
93 LIR_Opr FrameMap::rdi_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
94 LIR_Opr FrameMap::rbx_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
95 LIR_Opr FrameMap::rax_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
96 LIR_Opr FrameMap::rdx_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
97 LIR_Opr FrameMap::rcx_oop_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
98
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
99 LIR_Opr FrameMap::long0_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
100 LIR_Opr FrameMap::long1_opr;
0
a61af66fc99e Initial load
duke
parents:
diff changeset
101 LIR_Opr FrameMap::fpu0_float_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
102 LIR_Opr FrameMap::fpu0_double_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
103 LIR_Opr FrameMap::xmm0_float_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
104 LIR_Opr FrameMap::xmm0_double_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
105
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
106 #ifdef _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
107
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
108 LIR_Opr FrameMap::r8_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
109 LIR_Opr FrameMap::r9_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
110 LIR_Opr FrameMap::r10_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
111 LIR_Opr FrameMap::r11_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
112 LIR_Opr FrameMap::r12_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
113 LIR_Opr FrameMap::r13_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
114 LIR_Opr FrameMap::r14_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
115 LIR_Opr FrameMap::r15_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
116
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
117 // r10 and r15 can never contain oops since they aren't available to
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
118 // the allocator
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
119 LIR_Opr FrameMap::r8_oop_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
120 LIR_Opr FrameMap::r9_oop_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
121 LIR_Opr FrameMap::r11_oop_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
122 LIR_Opr FrameMap::r12_oop_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
123 LIR_Opr FrameMap::r13_oop_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
124 LIR_Opr FrameMap::r14_oop_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
125 #endif // _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
126
0
a61af66fc99e Initial load
duke
parents:
diff changeset
127 LIR_Opr FrameMap::_caller_save_cpu_regs[] = { 0, };
a61af66fc99e Initial load
duke
parents:
diff changeset
128 LIR_Opr FrameMap::_caller_save_fpu_regs[] = { 0, };
a61af66fc99e Initial load
duke
parents:
diff changeset
129 LIR_Opr FrameMap::_caller_save_xmm_regs[] = { 0, };
a61af66fc99e Initial load
duke
parents:
diff changeset
130
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
131 XMMRegister FrameMap::_xmm_regs [] = { 0, };
0
a61af66fc99e Initial load
duke
parents:
diff changeset
132
a61af66fc99e Initial load
duke
parents:
diff changeset
133 XMMRegister FrameMap::nr2xmmreg(int rnr) {
a61af66fc99e Initial load
duke
parents:
diff changeset
134 assert(_init_done, "tables not initialized");
a61af66fc99e Initial load
duke
parents:
diff changeset
135 return _xmm_regs[rnr];
a61af66fc99e Initial load
duke
parents:
diff changeset
136 }
a61af66fc99e Initial load
duke
parents:
diff changeset
137
a61af66fc99e Initial load
duke
parents:
diff changeset
138 //--------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
139 // FrameMap
a61af66fc99e Initial load
duke
parents:
diff changeset
140 //--------------------------------------------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
141
1584
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1579
diff changeset
142 void FrameMap::initialize() {
b812ff5abc73 6958292: C1: Enable parallel compilation
iveresov
parents: 1579
diff changeset
143 assert(!_init_done, "once");
0
a61af66fc99e Initial load
duke
parents:
diff changeset
144
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
145 assert(nof_cpu_regs == LP64_ONLY(16) NOT_LP64(8), "wrong number of CPU registers");
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
146 map_register(0, rsi); rsi_opr = LIR_OprFact::single_cpu(0);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
147 map_register(1, rdi); rdi_opr = LIR_OprFact::single_cpu(1);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
148 map_register(2, rbx); rbx_opr = LIR_OprFact::single_cpu(2);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
149 map_register(3, rax); rax_opr = LIR_OprFact::single_cpu(3);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
150 map_register(4, rdx); rdx_opr = LIR_OprFact::single_cpu(4);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
151 map_register(5, rcx); rcx_opr = LIR_OprFact::single_cpu(5);
0
a61af66fc99e Initial load
duke
parents:
diff changeset
152
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
153 #ifndef _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
154 // The unallocatable registers are at the end
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
155 map_register(6, rsp);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
156 map_register(7, rbp);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
157 #else
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
158 map_register( 6, r8); r8_opr = LIR_OprFact::single_cpu(6);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
159 map_register( 7, r9); r9_opr = LIR_OprFact::single_cpu(7);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
160 map_register( 8, r11); r11_opr = LIR_OprFact::single_cpu(8);
2002
ac637b7220d1 6985015: C1 needs to support compressed oops
iveresov
parents: 1972
diff changeset
161 map_register( 9, r13); r13_opr = LIR_OprFact::single_cpu(9);
ac637b7220d1 6985015: C1 needs to support compressed oops
iveresov
parents: 1972
diff changeset
162 map_register(10, r14); r14_opr = LIR_OprFact::single_cpu(10);
ac637b7220d1 6985015: C1 needs to support compressed oops
iveresov
parents: 1972
diff changeset
163 // r12 is allocated conditionally. With compressed oops it holds
ac637b7220d1 6985015: C1 needs to support compressed oops
iveresov
parents: 1972
diff changeset
164 // the heapbase value and is not visible to the allocator.
ac637b7220d1 6985015: C1 needs to support compressed oops
iveresov
parents: 1972
diff changeset
165 map_register(11, r12); r12_opr = LIR_OprFact::single_cpu(11);
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
166 // The unallocatable registers are at the end
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
167 map_register(12, r10); r10_opr = LIR_OprFact::single_cpu(12);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
168 map_register(13, r15); r15_opr = LIR_OprFact::single_cpu(13);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
169 map_register(14, rsp);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
170 map_register(15, rbp);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
171 #endif // _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
172
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
173 #ifdef _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
174 long0_opr = LIR_OprFact::double_cpu(3 /*eax*/, 3 /*eax*/);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
175 long1_opr = LIR_OprFact::double_cpu(2 /*ebx*/, 2 /*ebx*/);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
176 #else
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
177 long0_opr = LIR_OprFact::double_cpu(3 /*eax*/, 4 /*edx*/);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
178 long1_opr = LIR_OprFact::double_cpu(2 /*ebx*/, 5 /*ecx*/);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
179 #endif // _LP64
0
a61af66fc99e Initial load
duke
parents:
diff changeset
180 fpu0_float_opr = LIR_OprFact::single_fpu(0);
a61af66fc99e Initial load
duke
parents:
diff changeset
181 fpu0_double_opr = LIR_OprFact::double_fpu(0);
a61af66fc99e Initial load
duke
parents:
diff changeset
182 xmm0_float_opr = LIR_OprFact::single_xmm(0);
a61af66fc99e Initial load
duke
parents:
diff changeset
183 xmm0_double_opr = LIR_OprFact::double_xmm(0);
a61af66fc99e Initial load
duke
parents:
diff changeset
184
a61af66fc99e Initial load
duke
parents:
diff changeset
185 _caller_save_cpu_regs[0] = rsi_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
186 _caller_save_cpu_regs[1] = rdi_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
187 _caller_save_cpu_regs[2] = rbx_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
188 _caller_save_cpu_regs[3] = rax_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
189 _caller_save_cpu_regs[4] = rdx_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
190 _caller_save_cpu_regs[5] = rcx_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
191
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
192 #ifdef _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
193 _caller_save_cpu_regs[6] = r8_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
194 _caller_save_cpu_regs[7] = r9_opr;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
195 _caller_save_cpu_regs[8] = r11_opr;
2002
ac637b7220d1 6985015: C1 needs to support compressed oops
iveresov
parents: 1972
diff changeset
196 _caller_save_cpu_regs[9] = r13_opr;
ac637b7220d1 6985015: C1 needs to support compressed oops
iveresov
parents: 1972
diff changeset
197 _caller_save_cpu_regs[10] = r14_opr;
ac637b7220d1 6985015: C1 needs to support compressed oops
iveresov
parents: 1972
diff changeset
198 _caller_save_cpu_regs[11] = r12_opr;
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
199 #endif // _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
200
0
a61af66fc99e Initial load
duke
parents:
diff changeset
201
a61af66fc99e Initial load
duke
parents:
diff changeset
202 _xmm_regs[0] = xmm0;
a61af66fc99e Initial load
duke
parents:
diff changeset
203 _xmm_regs[1] = xmm1;
a61af66fc99e Initial load
duke
parents:
diff changeset
204 _xmm_regs[2] = xmm2;
a61af66fc99e Initial load
duke
parents:
diff changeset
205 _xmm_regs[3] = xmm3;
a61af66fc99e Initial load
duke
parents:
diff changeset
206 _xmm_regs[4] = xmm4;
a61af66fc99e Initial load
duke
parents:
diff changeset
207 _xmm_regs[5] = xmm5;
a61af66fc99e Initial load
duke
parents:
diff changeset
208 _xmm_regs[6] = xmm6;
a61af66fc99e Initial load
duke
parents:
diff changeset
209 _xmm_regs[7] = xmm7;
a61af66fc99e Initial load
duke
parents:
diff changeset
210
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
211 #ifdef _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
212 _xmm_regs[8] = xmm8;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
213 _xmm_regs[9] = xmm9;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
214 _xmm_regs[10] = xmm10;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
215 _xmm_regs[11] = xmm11;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
216 _xmm_regs[12] = xmm12;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
217 _xmm_regs[13] = xmm13;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
218 _xmm_regs[14] = xmm14;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
219 _xmm_regs[15] = xmm15;
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
220 #endif // _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
221
0
a61af66fc99e Initial load
duke
parents:
diff changeset
222 for (int i = 0; i < 8; i++) {
a61af66fc99e Initial load
duke
parents:
diff changeset
223 _caller_save_fpu_regs[i] = LIR_OprFact::single_fpu(i);
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
224 }
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
225
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
226 for (int i = 0; i < nof_caller_save_xmm_regs ; i++) {
0
a61af66fc99e Initial load
duke
parents:
diff changeset
227 _caller_save_xmm_regs[i] = LIR_OprFact::single_xmm(i);
a61af66fc99e Initial load
duke
parents:
diff changeset
228 }
a61af66fc99e Initial load
duke
parents:
diff changeset
229
a61af66fc99e Initial load
duke
parents:
diff changeset
230 _init_done = true;
a61af66fc99e Initial load
duke
parents:
diff changeset
231
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
232 rsi_oop_opr = as_oop_opr(rsi);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
233 rdi_oop_opr = as_oop_opr(rdi);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
234 rbx_oop_opr = as_oop_opr(rbx);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
235 rax_oop_opr = as_oop_opr(rax);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
236 rdx_oop_opr = as_oop_opr(rdx);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
237 rcx_oop_opr = as_oop_opr(rcx);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
238
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
239 rsp_opr = as_pointer_opr(rsp);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
240 rbp_opr = as_pointer_opr(rbp);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
241
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
242 #ifdef _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
243 r8_oop_opr = as_oop_opr(r8);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
244 r9_oop_opr = as_oop_opr(r9);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
245 r11_oop_opr = as_oop_opr(r11);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
246 r12_oop_opr = as_oop_opr(r12);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
247 r13_oop_opr = as_oop_opr(r13);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
248 r14_oop_opr = as_oop_opr(r14);
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
249 #endif // _LP64
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
250
0
a61af66fc99e Initial load
duke
parents:
diff changeset
251 VMRegPair regs;
a61af66fc99e Initial load
duke
parents:
diff changeset
252 BasicType sig_bt = T_OBJECT;
a61af66fc99e Initial load
duke
parents:
diff changeset
253 SharedRuntime::java_calling_convention(&sig_bt, &regs, 1, true);
a61af66fc99e Initial load
duke
parents:
diff changeset
254 receiver_opr = as_oop_opr(regs.first()->as_Register());
304
dc7f315e41f7 5108146: Merge i486 and amd64 cpu directories
never
parents: 0
diff changeset
255
0
a61af66fc99e Initial load
duke
parents:
diff changeset
256 }
a61af66fc99e Initial load
duke
parents:
diff changeset
257
a61af66fc99e Initial load
duke
parents:
diff changeset
258
a61af66fc99e Initial load
duke
parents:
diff changeset
259 Address FrameMap::make_new_address(ByteSize sp_offset) const {
a61af66fc99e Initial load
duke
parents:
diff changeset
260 // for rbp, based address use this:
a61af66fc99e Initial load
duke
parents:
diff changeset
261 // return Address(rbp, in_bytes(sp_offset) - (framesize() - 2) * 4);
a61af66fc99e Initial load
duke
parents:
diff changeset
262 return Address(rsp, in_bytes(sp_offset));
a61af66fc99e Initial load
duke
parents:
diff changeset
263 }
a61af66fc99e Initial load
duke
parents:
diff changeset
264
a61af66fc99e Initial load
duke
parents:
diff changeset
265
a61af66fc99e Initial load
duke
parents:
diff changeset
266 // ----------------mapping-----------------------
a61af66fc99e Initial load
duke
parents:
diff changeset
267 // all mapping is based on rbp, addressing, except for simple leaf methods where we access
a61af66fc99e Initial load
duke
parents:
diff changeset
268 // the locals rsp based (and no frame is built)
a61af66fc99e Initial load
duke
parents:
diff changeset
269
a61af66fc99e Initial load
duke
parents:
diff changeset
270
a61af66fc99e Initial load
duke
parents:
diff changeset
271 // Frame for simple leaf methods (quick entries)
a61af66fc99e Initial load
duke
parents:
diff changeset
272 //
a61af66fc99e Initial load
duke
parents:
diff changeset
273 // +----------+
a61af66fc99e Initial load
duke
parents:
diff changeset
274 // | ret addr | <- TOS
a61af66fc99e Initial load
duke
parents:
diff changeset
275 // +----------+
a61af66fc99e Initial load
duke
parents:
diff changeset
276 // | args |
a61af66fc99e Initial load
duke
parents:
diff changeset
277 // | ...... |
a61af66fc99e Initial load
duke
parents:
diff changeset
278
a61af66fc99e Initial load
duke
parents:
diff changeset
279 // Frame for standard methods
a61af66fc99e Initial load
duke
parents:
diff changeset
280 //
a61af66fc99e Initial load
duke
parents:
diff changeset
281 // | .........| <- TOS
a61af66fc99e Initial load
duke
parents:
diff changeset
282 // | locals |
a61af66fc99e Initial load
duke
parents:
diff changeset
283 // +----------+
a61af66fc99e Initial load
duke
parents:
diff changeset
284 // | old rbp, | <- EBP
a61af66fc99e Initial load
duke
parents:
diff changeset
285 // +----------+
a61af66fc99e Initial load
duke
parents:
diff changeset
286 // | ret addr |
a61af66fc99e Initial load
duke
parents:
diff changeset
287 // +----------+
a61af66fc99e Initial load
duke
parents:
diff changeset
288 // | args |
a61af66fc99e Initial load
duke
parents:
diff changeset
289 // | .........|
a61af66fc99e Initial load
duke
parents:
diff changeset
290
a61af66fc99e Initial load
duke
parents:
diff changeset
291
a61af66fc99e Initial load
duke
parents:
diff changeset
292 // For OopMaps, map a local variable or spill index to an VMRegImpl name.
a61af66fc99e Initial load
duke
parents:
diff changeset
293 // This is the offset from sp() in the frame of the slot for the index,
a61af66fc99e Initial load
duke
parents:
diff changeset
294 // skewed by VMRegImpl::stack0 to indicate a stack location (vs.a register.)
a61af66fc99e Initial load
duke
parents:
diff changeset
295 //
a61af66fc99e Initial load
duke
parents:
diff changeset
296 // framesize +
a61af66fc99e Initial load
duke
parents:
diff changeset
297 // stack0 stack0 0 <- VMReg
a61af66fc99e Initial load
duke
parents:
diff changeset
298 // | | <registers> |
a61af66fc99e Initial load
duke
parents:
diff changeset
299 // ...........|..............|.............|
a61af66fc99e Initial load
duke
parents:
diff changeset
300 // 0 1 2 3 x x 4 5 6 ... | <- local indices
a61af66fc99e Initial load
duke
parents:
diff changeset
301 // ^ ^ sp() ( x x indicate link
a61af66fc99e Initial load
duke
parents:
diff changeset
302 // | | and return addr)
a61af66fc99e Initial load
duke
parents:
diff changeset
303 // arguments non-argument locals
a61af66fc99e Initial load
duke
parents:
diff changeset
304
a61af66fc99e Initial load
duke
parents:
diff changeset
305
a61af66fc99e Initial load
duke
parents:
diff changeset
306 VMReg FrameMap::fpu_regname (int n) {
a61af66fc99e Initial load
duke
parents:
diff changeset
307 // Return the OptoReg name for the fpu stack slot "n"
a61af66fc99e Initial load
duke
parents:
diff changeset
308 // A spilled fpu stack slot comprises to two single-word OptoReg's.
a61af66fc99e Initial load
duke
parents:
diff changeset
309 return as_FloatRegister(n)->as_VMReg();
a61af66fc99e Initial load
duke
parents:
diff changeset
310 }
a61af66fc99e Initial load
duke
parents:
diff changeset
311
a61af66fc99e Initial load
duke
parents:
diff changeset
312 LIR_Opr FrameMap::stack_pointer() {
a61af66fc99e Initial load
duke
parents:
diff changeset
313 return FrameMap::rsp_opr;
a61af66fc99e Initial load
duke
parents:
diff changeset
314 }
a61af66fc99e Initial load
duke
parents:
diff changeset
315
a61af66fc99e Initial load
duke
parents:
diff changeset
316
1564
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 337
diff changeset
317 // JSR 292
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 337
diff changeset
318 LIR_Opr FrameMap::method_handle_invoke_SP_save_opr() {
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 337
diff changeset
319 assert(rbp == rbp_mh_SP_save, "must be same register");
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 337
diff changeset
320 return rbp_opr;
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 337
diff changeset
321 }
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 337
diff changeset
322
61b2245abf36 6930772: JSR 292 needs to support SPARC C1
twisti
parents: 337
diff changeset
323
0
a61af66fc99e Initial load
duke
parents:
diff changeset
324 bool FrameMap::validate_frame() {
a61af66fc99e Initial load
duke
parents:
diff changeset
325 return true;
a61af66fc99e Initial load
duke
parents:
diff changeset
326 }