Mercurial > hg > truffle
diff src/cpu/x86/vm/sharedRuntime_x86_64.cpp @ 2935:9b8f30608e62
deoptimization action (invalidate, reprofile, ...)
more debug properties and assertions
author | Lukas Stadler <lukas.stadler@jku.at> |
---|---|
date | Fri, 10 Jun 2011 15:01:14 +0200 |
parents | 1e13559b112d |
children | c7783b6773ea |
line wrap: on
line diff
--- a/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Thu Jun 09 20:25:38 2011 +0200 +++ b/src/cpu/x86/vm/sharedRuntime_x86_64.cpp Fri Jun 10 15:01:14 2011 +0200 @@ -140,6 +140,7 @@ static int rax_offset_in_bytes(void) { return BytesPerInt * rax_off; } static int rdx_offset_in_bytes(void) { return BytesPerInt * rdx_off; } static int rbx_offset_in_bytes(void) { return BytesPerInt * rbx_off; } + static int r10_offset_in_bytes(void) { return BytesPerInt * r10_off; } static int xmm0_offset_in_bytes(void) { return BytesPerInt * xmm0_off; } static int return_offset_in_bytes(void) { return BytesPerInt * return_off; } @@ -2669,9 +2670,14 @@ // fetch_unroll_info needs to call last_java_frame() __ set_last_Java_frame(noreg, noreg, NULL); + // __ movl(c_rarg1, (int32_t)Deoptimization::Unpack_reexecute); // __ movl(r14, c_rarg1); // save into r14 for later call to unpack_frames - __ movl(c_rarg1, (int32_t)-1); + + assert(r10 == rscratch1, "scratch register should be r10"); + __ movptr(c_rarg1, Address(rsp, RegisterSaver::r10_offset_in_bytes())); + __ orq(c_rarg1, ~(int32_t)Deoptimization::make_trap_request(Deoptimization::Reason_unreached, Deoptimization::Action_none)); + __ notq(c_rarg1); __ movl(r14, (int32_t)Deoptimization::Unpack_reexecute); __ mov(c_rarg0, r15_thread); __ call(RuntimeAddress(CAST_FROM_FN_PTR(address, Deoptimization::uncommon_trap)));