1113 const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1,fields);
1114
1115 // create result type (range)
1116 fields = TypeTuple::fields(1);
1117 fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // Exception oop
1118 const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+1, fields);
1119
1120 return TypeFunc::make(domain, range);
1121 }
1122
1123
1124 void OptoRuntime::deoptimize_caller_frame(JavaThread *thread, bool doit) {
1125 // Deoptimize frame
1126 if (doit) {
1127 // Called from within the owner thread, so no need for safepoint
1128 RegisterMap reg_map(thread);
1129 frame stub_frame = thread->last_frame();
1130 assert(stub_frame.is_runtime_frame() || exception_blob()->contains(stub_frame.pc()), "sanity check");
1131 frame caller_frame = stub_frame.sender(®_map);
1132
1133 // bypass VM_DeoptimizeFrame and deoptimize the frame directly
1134 Deoptimization::deoptimize_frame(thread, caller_frame.id());
1135 }
1136 }
1137
1138
1139 const TypeFunc *OptoRuntime::register_finalizer_Type() {
1140 // create input type (domain)
1141 const Type **fields = TypeTuple::fields(1);
1142 fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // oop; Receiver
1143 // // The JavaThread* is passed to each routine as the last argument
1144 // fields[TypeFunc::Parms+1] = TypeRawPtr::NOTNULL; // JavaThread *; Executing thread
1145 const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1,fields);
1146
1147 // create result type (range)
1148 fields = TypeTuple::fields(0);
1149
1150 const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+0,fields);
1151
1152 return TypeFunc::make(domain,range);
1153 }
|
1113 const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1,fields);
1114
1115 // create result type (range)
1116 fields = TypeTuple::fields(1);
1117 fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // Exception oop
1118 const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+1, fields);
1119
1120 return TypeFunc::make(domain, range);
1121 }
1122
1123
1124 void OptoRuntime::deoptimize_caller_frame(JavaThread *thread, bool doit) {
1125 // Deoptimize frame
1126 if (doit) {
1127 // Called from within the owner thread, so no need for safepoint
1128 RegisterMap reg_map(thread);
1129 frame stub_frame = thread->last_frame();
1130 assert(stub_frame.is_runtime_frame() || exception_blob()->contains(stub_frame.pc()), "sanity check");
1131 frame caller_frame = stub_frame.sender(®_map);
1132
1133 // Deoptimize the caller frame.
1134 Deoptimization::deoptimize_frame(thread, caller_frame.id());
1135 }
1136 }
1137
1138
1139 const TypeFunc *OptoRuntime::register_finalizer_Type() {
1140 // create input type (domain)
1141 const Type **fields = TypeTuple::fields(1);
1142 fields[TypeFunc::Parms+0] = TypeInstPtr::NOTNULL; // oop; Receiver
1143 // // The JavaThread* is passed to each routine as the last argument
1144 // fields[TypeFunc::Parms+1] = TypeRawPtr::NOTNULL; // JavaThread *; Executing thread
1145 const TypeTuple *domain = TypeTuple::make(TypeFunc::Parms+1,fields);
1146
1147 // create result type (range)
1148 fields = TypeTuple::fields(0);
1149
1150 const TypeTuple *range = TypeTuple::make(TypeFunc::Parms+0,fields);
1151
1152 return TypeFunc::make(domain,range);
1153 }
|