Mercurial > hg > truffle
comparison src/cpu/x86/vm/templateTable_x86_64.cpp @ 4762:069ab3f976d3
7118863: Move sizeof(klassOopDesc) into the *Klass::*_offset_in_bytes() functions
Summary: Moved sizeof(klassOopDesc), changed the return type to ByteSize and removed the _in_bytes suffix.
Reviewed-by: never, bdelsart, coleenp, jrose
author | stefank |
---|---|
date | Wed, 07 Dec 2011 11:35:03 +0100 |
parents | fdb992d83a87 |
children | 22cee0ee8927 |
comparison
equal
deleted
inserted
replaced
4761:65149e74c706 | 4762:069ab3f976d3 |
---|---|
1002 // Move subklass into rbx | 1002 // Move subklass into rbx |
1003 __ load_klass(rbx, rax); | 1003 __ load_klass(rbx, rax); |
1004 // Move superklass into rax | 1004 // Move superklass into rax |
1005 __ load_klass(rax, rdx); | 1005 __ load_klass(rax, rdx); |
1006 __ movptr(rax, Address(rax, | 1006 __ movptr(rax, Address(rax, |
1007 sizeof(oopDesc) + | 1007 objArrayKlass::element_klass_offset())); |
1008 objArrayKlass::element_klass_offset_in_bytes())); | |
1009 // Compress array + index*oopSize + 12 into a single register. Frees rcx. | 1008 // Compress array + index*oopSize + 12 into a single register. Frees rcx. |
1010 __ lea(rdx, element_address); | 1009 __ lea(rdx, element_address); |
1011 | 1010 |
1012 // Generate subtype check. Blows rcx, rdi | 1011 // Generate subtype check. Blows rcx, rdi |
1013 // Superklass in rax. Subklass in rbx. | 1012 // Superklass in rax. Subklass in rbx. |
2065 | 2064 |
2066 if (_desc->bytecode() == Bytecodes::_return_register_finalizer) { | 2065 if (_desc->bytecode() == Bytecodes::_return_register_finalizer) { |
2067 assert(state == vtos, "only valid state"); | 2066 assert(state == vtos, "only valid state"); |
2068 __ movptr(c_rarg1, aaddress(0)); | 2067 __ movptr(c_rarg1, aaddress(0)); |
2069 __ load_klass(rdi, c_rarg1); | 2068 __ load_klass(rdi, c_rarg1); |
2070 __ movl(rdi, Address(rdi, Klass::access_flags_offset_in_bytes() + sizeof(oopDesc))); | 2069 __ movl(rdi, Address(rdi, Klass::access_flags_offset())); |
2071 __ testl(rdi, JVM_ACC_HAS_FINALIZER); | 2070 __ testl(rdi, JVM_ACC_HAS_FINALIZER); |
2072 Label skip_register_finalizer; | 2071 Label skip_register_finalizer; |
2073 __ jcc(Assembler::zero, skip_register_finalizer); | 2072 __ jcc(Assembler::zero, skip_register_finalizer); |
2074 | 2073 |
2075 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), c_rarg1); | 2074 __ call_VM(noreg, CAST_FROM_FN_PTR(address, InterpreterRuntime::register_finalizer), c_rarg1); |
3234 Address::times_8, sizeof(constantPoolOopDesc))); | 3233 Address::times_8, sizeof(constantPoolOopDesc))); |
3235 | 3234 |
3236 // make sure klass is initialized & doesn't have finalizer | 3235 // make sure klass is initialized & doesn't have finalizer |
3237 // make sure klass is fully initialized | 3236 // make sure klass is fully initialized |
3238 __ cmpl(Address(rsi, | 3237 __ cmpl(Address(rsi, |
3239 instanceKlass::init_state_offset_in_bytes() + | 3238 instanceKlass::init_state_offset()), |
3240 sizeof(oopDesc)), | |
3241 instanceKlass::fully_initialized); | 3239 instanceKlass::fully_initialized); |
3242 __ jcc(Assembler::notEqual, slow_case); | 3240 __ jcc(Assembler::notEqual, slow_case); |
3243 | 3241 |
3244 // get instance_size in instanceKlass (scaled to a count of bytes) | 3242 // get instance_size in instanceKlass (scaled to a count of bytes) |
3245 __ movl(rdx, | 3243 __ movl(rdx, |
3246 Address(rsi, | 3244 Address(rsi, |
3247 Klass::layout_helper_offset_in_bytes() + sizeof(oopDesc))); | 3245 Klass::layout_helper_offset())); |
3248 // test to see if it has a finalizer or is malformed in some way | 3246 // test to see if it has a finalizer or is malformed in some way |
3249 __ testl(rdx, Klass::_lh_instance_slow_path_bit); | 3247 __ testl(rdx, Klass::_lh_instance_slow_path_bit); |
3250 __ jcc(Assembler::notZero, slow_case); | 3248 __ jcc(Assembler::notZero, slow_case); |
3251 | 3249 |
3252 // Allocate the instance | 3250 // Allocate the instance |
3335 } | 3333 } |
3336 | 3334 |
3337 // initialize object header only. | 3335 // initialize object header only. |
3338 __ bind(initialize_header); | 3336 __ bind(initialize_header); |
3339 if (UseBiasedLocking) { | 3337 if (UseBiasedLocking) { |
3340 __ movptr(rscratch1, Address(rsi, Klass::prototype_header_offset_in_bytes() + klassOopDesc::klass_part_offset_in_bytes())); | 3338 __ movptr(rscratch1, Address(rsi, Klass::prototype_header_offset())); |
3341 __ movptr(Address(rax, oopDesc::mark_offset_in_bytes()), rscratch1); | 3339 __ movptr(Address(rax, oopDesc::mark_offset_in_bytes()), rscratch1); |
3342 } else { | 3340 } else { |
3343 __ movptr(Address(rax, oopDesc::mark_offset_in_bytes()), | 3341 __ movptr(Address(rax, oopDesc::mark_offset_in_bytes()), |
3344 (intptr_t) markOopDesc::prototype()); // header (address 0x1) | 3342 (intptr_t) markOopDesc::prototype()); // header (address 0x1) |
3345 } | 3343 } |