comparison src/cpu/x86/vm/vtableStubs_x86_64.cpp @ 113:ba764ed4b6f2

6420645: Create a vm that uses compressed oops for up to 32gb heapsizes Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author coleenp
date Sun, 13 Apr 2008 17:43:42 -0400
parents f8236e79048a
children d1605aabd0a1
comparison
equal deleted inserted replaced
110:a49a647afe9a 113:ba764ed4b6f2
54 54
55 // Free registers (non-args) are rax, rbx 55 // Free registers (non-args) are rax, rbx
56 56
57 // get receiver klass 57 // get receiver klass
58 address npe_addr = __ pc(); 58 address npe_addr = __ pc();
59 __ movq(rax, Address(j_rarg0, oopDesc::klass_offset_in_bytes())); 59 __ load_klass(rax, j_rarg0);
60 60
61 // compute entry offset (in words) 61 // compute entry offset (in words)
62 int entry_offset = 62 int entry_offset =
63 instanceKlass::vtable_start_offset() + vtable_index * vtableEntry::size(); 63 instanceKlass::vtable_start_offset() + vtable_index * vtableEntry::size();
64 64
129 129
130 assert(VtableStub::receiver_location() == j_rarg0->as_VMReg(), "receiver expected in j_rarg0"); 130 assert(VtableStub::receiver_location() == j_rarg0->as_VMReg(), "receiver expected in j_rarg0");
131 // get receiver klass (also an implicit null-check) 131 // get receiver klass (also an implicit null-check)
132 address npe_addr = __ pc(); 132 address npe_addr = __ pc();
133 133
134 __ movq(rbx, Address(j_rarg0, oopDesc::klass_offset_in_bytes())); 134 __ load_klass(rbx, j_rarg0);
135 135
136 // If we take a trap while this arg is on the stack we will not 136 // If we take a trap while this arg is on the stack we will not
137 // be able to walk the stack properly. This is not an issue except 137 // be able to walk the stack properly. This is not an issue except
138 // when there are mistakes in this assembly code that could generate 138 // when there are mistakes in this assembly code that could generate
139 // a spurious fault. Ask me how I know... 139 // a spurious fault. Ask me how I know...
179 itableMethodEntry::method_offset_in_bytes(); 179 itableMethodEntry::method_offset_in_bytes();
180 180
181 // Get methodOop and entrypoint for compiler 181 // Get methodOop and entrypoint for compiler
182 182
183 // Get klass pointer again 183 // Get klass pointer again
184 __ movq(rax, Address(j_rarg0, oopDesc::klass_offset_in_bytes())); 184 __ load_klass(rax, j_rarg0);
185 185
186 const Register method = rbx; 186 const Register method = rbx;
187 __ movq(method, Address(rax, j_rarg1, Address::times_1, method_offset)); 187 __ movq(method, Address(rax, j_rarg1, Address::times_1, method_offset));
188 188
189 // Restore saved register, before possible trap. 189 // Restore saved register, before possible trap.
224 } 224 }
225 225
226 int VtableStub::pd_code_size_limit(bool is_vtable_stub) { 226 int VtableStub::pd_code_size_limit(bool is_vtable_stub) {
227 if (is_vtable_stub) { 227 if (is_vtable_stub) {
228 // Vtable stub size 228 // Vtable stub size
229 return (DebugVtables ? 512 : 24) + (CountCompiledCalls ? 13 : 0); 229 return (DebugVtables ? 512 : 24) + (CountCompiledCalls ? 13 : 0) +
230 (UseCompressedOops ? 16 : 0); // 1 leaq can be 3 bytes + 1 long
230 } else { 231 } else {
231 // Itable stub size 232 // Itable stub size
232 return (DebugVtables ? 636 : 72) + (CountCompiledCalls ? 13 : 0); 233 return (DebugVtables ? 636 : 72) + (CountCompiledCalls ? 13 : 0) +
234 (UseCompressedOops ? 32 : 0); // 2 leaqs
233 } 235 }
234 } 236 }
235 237
236 int VtableStub::pd_code_alignment() { 238 int VtableStub::pd_code_alignment() {
237 return wordSize; 239 return wordSize;