Mercurial > hg > truffle
comparison src/cpu/x86/vm/sharedRuntime_x86_64.cpp @ 7154:5d0bb7d52783
changes to support Graal co-existing with the other HotSpot compiler(s) and being used for explicit compilation requests and code installation via the Graal API
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 12 Dec 2012 21:36:40 +0100 |
parents | e522a00b91aa |
children | 291ffc492eb6 |
comparison
equal
deleted
inserted
replaced
7153:c421c19b7bf8 | 7154:5d0bb7d52783 |
---|---|
1994 | 1994 |
1995 __ bind(hit); | 1995 __ bind(hit); |
1996 | 1996 |
1997 int vep_offset = ((intptr_t)__ pc()) - start; | 1997 int vep_offset = ((intptr_t)__ pc()) - start; |
1998 | 1998 |
1999 #ifdef GRAAL | 1999 #ifdef GRAALVM |
2000 if (InlineObjectHash && (method->intrinsic_id() == vmIntrinsics::_hashCode || method->intrinsic_id() == vmIntrinsics::_identityHashCode)) { | 2000 if (InlineObjectHash && (method->intrinsic_id() == vmIntrinsics::_hashCode || method->intrinsic_id() == vmIntrinsics::_identityHashCode)) { |
2001 // Object.hashCode can pull the hashCode from the header word | 2001 // Object.hashCode can pull the hashCode from the header word |
2002 // instead of doing a full VM transition once it's been computed. | 2002 // instead of doing a full VM transition once it's been computed. |
2003 // Since hashCode is usually polymorphic at call sites we can't do | 2003 // Since hashCode is usually polymorphic at call sites we can't do |
2004 // this optimization at the call site without a lot of work. | 2004 // this optimization at the call site without a lot of work. |
2036 __ ret(0); | 2036 __ ret(0); |
2037 } | 2037 } |
2038 | 2038 |
2039 __ bind (slowCase); | 2039 __ bind (slowCase); |
2040 } | 2040 } |
2041 #endif // GRAAL | 2041 #endif // GRAALVM |
2042 | 2042 |
2043 // The instruction at the verified entry point must be 5 bytes or longer | 2043 // The instruction at the verified entry point must be 5 bytes or longer |
2044 // because it can be patched on the fly by make_non_entrant. The stack bang | 2044 // because it can be patched on the fly by make_non_entrant. The stack bang |
2045 // instruction fits that requirement. | 2045 // instruction fits that requirement. |
2046 | 2046 |
3418 // It will be patched later with the throwing pc. The correct value is not | 3418 // It will be patched later with the throwing pc. The correct value is not |
3419 // available now because loading it from memory would destroy registers. | 3419 // available now because loading it from memory would destroy registers. |
3420 __ push(0); | 3420 __ push(0); |
3421 | 3421 |
3422 // Save everything in sight. | 3422 // Save everything in sight. |
3423 RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words); | 3423 map = RegisterSaver::save_live_registers(masm, 0, &frame_size_in_words); |
3424 | 3424 |
3425 // Now it is safe to overwrite any register | 3425 // Now it is safe to overwrite any register |
3426 | 3426 |
3427 // Deopt during an exception. Save exec mode for unpack_frames. | 3427 // Deopt during an exception. Save exec mode for unpack_frames. |
3428 __ movl(r14, Deoptimization::Unpack_exception); // callee-saved | 3428 __ movl(r14, Deoptimization::Unpack_exception); // callee-saved |