Mercurial > hg > truffle
comparison src/share/vm/runtime/deoptimization.cpp @ 1905:ce6848d0666d
6968367: can_post_on_exceptions is still using VM_DeoptimizeFrame in some places
Reviewed-by: kvn, twisti
author | never |
---|---|
date | Tue, 19 Oct 2010 16:14:34 -0700 |
parents | fd5d4527cdf5 |
children | 4853c5cad3aa f95d63e2154a |
comparison
equal
deleted
inserted
replaced
1902:0357ff4bd6b2 | 1905:ce6848d0666d |
---|---|
1063 deoptimize_single_frame(thread, fr); | 1063 deoptimize_single_frame(thread, fr); |
1064 | 1064 |
1065 } | 1065 } |
1066 | 1066 |
1067 | 1067 |
1068 void Deoptimization::deoptimize_frame(JavaThread* thread, intptr_t* id) { | 1068 void Deoptimization::deoptimize_frame_internal(JavaThread* thread, intptr_t* id) { |
1069 assert(thread == Thread::current() || SafepointSynchronize::is_at_safepoint(), | |
1070 "can only deoptimize other thread at a safepoint"); | |
1069 // Compute frame and register map based on thread and sp. | 1071 // Compute frame and register map based on thread and sp. |
1070 RegisterMap reg_map(thread, UseBiasedLocking); | 1072 RegisterMap reg_map(thread, UseBiasedLocking); |
1071 frame fr = thread->last_frame(); | 1073 frame fr = thread->last_frame(); |
1072 while (fr.id() != id) { | 1074 while (fr.id() != id) { |
1073 fr = fr.sender(®_map); | 1075 fr = fr.sender(®_map); |
1074 } | 1076 } |
1075 deoptimize(thread, fr, ®_map); | 1077 deoptimize(thread, fr, ®_map); |
1078 } | |
1079 | |
1080 | |
1081 void Deoptimization::deoptimize_frame(JavaThread* thread, intptr_t* id) { | |
1082 if (thread == Thread::current()) { | |
1083 Deoptimization::deoptimize_frame_internal(thread, id); | |
1084 } else { | |
1085 VM_DeoptimizeFrame deopt(thread, id); | |
1086 VMThread::execute(&deopt); | |
1087 } | |
1076 } | 1088 } |
1077 | 1089 |
1078 | 1090 |
1079 // JVMTI PopFrame support | 1091 // JVMTI PopFrame support |
1080 JRT_LEAF(void, Deoptimization::popframe_preserve_args(JavaThread* thread, int bytes_to_save, void* start_address)) | 1092 JRT_LEAF(void, Deoptimization::popframe_preserve_args(JavaThread* thread, int bytes_to_save, void* start_address)) |