197 retnode = _gvn.transform( new (C) AndINode(retnode, intcon(0xFFFF)) );
198 } else if (retval == TypeInt::BYTE) {
199 retnode = _gvn.transform( new (C) LShiftINode(retnode, intcon(24)) );
200 retnode = _gvn.transform( new (C) RShiftINode(retnode, intcon(24)) );
201 } else if (retval == TypeInt::SHORT) {
202 retnode = _gvn.transform( new (C) LShiftINode(retnode, intcon(16)) );
203 retnode = _gvn.transform( new (C) RShiftINode(retnode, intcon(16)) );
204 }
205 map()->set_req( TypeFunc::Parms, retnode );
206 }
207
208 //-----------------------------
209
210 // Clear last_Java_sp
211 store_to_memory(NULL, adr_sp, null(), T_ADDRESS, NoAlias);
212 // Clear last_Java_pc and (optionally)_flags
213 store_to_memory(NULL, adr_last_Java_pc, null(), T_ADDRESS, NoAlias);
214 #if defined(SPARC)
215 store_to_memory(NULL, adr_flags, intcon(0), T_INT, NoAlias);
216 #endif /* defined(SPARC) */
217 #ifdef IA64
218 Node* adr_last_Java_fp = basic_plus_adr(top(), thread, in_bytes(JavaThread::last_Java_fp_offset()));
219 if( os::is_MP() ) insert_mem_bar(Op_MemBarRelease);
220 store_to_memory(NULL, adr_last_Java_fp, null(), T_ADDRESS, NoAlias);
221 #endif
222
223 // For is-fancy-jump, the C-return value is also the branch target
224 Node* target = map()->in(TypeFunc::Parms);
225 // Runtime call returning oop in TLS? Fetch it out
226 if( pass_tls ) {
227 Node* adr = basic_plus_adr(top(), thread, in_bytes(JavaThread::vm_result_offset()));
228 Node* vm_result = make_load(NULL, adr, TypeOopPtr::BOTTOM, T_OBJECT, NoAlias, false);
229 map()->set_req(TypeFunc::Parms, vm_result); // vm_result passed as result
230 // clear thread-local-storage(tls)
231 store_to_memory(NULL, adr, null(), T_ADDRESS, NoAlias);
232 }
233
234 //-----------------------------
235 // check exception
236 Node* adr = basic_plus_adr(top(), thread, in_bytes(Thread::pending_exception_offset()));
237 Node* pending = make_load(NULL, adr, TypeOopPtr::BOTTOM, T_OBJECT, NoAlias, false);
|
197 retnode = _gvn.transform( new (C) AndINode(retnode, intcon(0xFFFF)) );
198 } else if (retval == TypeInt::BYTE) {
199 retnode = _gvn.transform( new (C) LShiftINode(retnode, intcon(24)) );
200 retnode = _gvn.transform( new (C) RShiftINode(retnode, intcon(24)) );
201 } else if (retval == TypeInt::SHORT) {
202 retnode = _gvn.transform( new (C) LShiftINode(retnode, intcon(16)) );
203 retnode = _gvn.transform( new (C) RShiftINode(retnode, intcon(16)) );
204 }
205 map()->set_req( TypeFunc::Parms, retnode );
206 }
207
208 //-----------------------------
209
210 // Clear last_Java_sp
211 store_to_memory(NULL, adr_sp, null(), T_ADDRESS, NoAlias);
212 // Clear last_Java_pc and (optionally)_flags
213 store_to_memory(NULL, adr_last_Java_pc, null(), T_ADDRESS, NoAlias);
214 #if defined(SPARC)
215 store_to_memory(NULL, adr_flags, intcon(0), T_INT, NoAlias);
216 #endif /* defined(SPARC) */
217 #if (defined(IA64) && !defined(AIX))
218 Node* adr_last_Java_fp = basic_plus_adr(top(), thread, in_bytes(JavaThread::last_Java_fp_offset()));
219 if( os::is_MP() ) insert_mem_bar(Op_MemBarRelease);
220 store_to_memory(NULL, adr_last_Java_fp, null(), T_ADDRESS, NoAlias);
221 #endif
222
223 // For is-fancy-jump, the C-return value is also the branch target
224 Node* target = map()->in(TypeFunc::Parms);
225 // Runtime call returning oop in TLS? Fetch it out
226 if( pass_tls ) {
227 Node* adr = basic_plus_adr(top(), thread, in_bytes(JavaThread::vm_result_offset()));
228 Node* vm_result = make_load(NULL, adr, TypeOopPtr::BOTTOM, T_OBJECT, NoAlias, false);
229 map()->set_req(TypeFunc::Parms, vm_result); // vm_result passed as result
230 // clear thread-local-storage(tls)
231 store_to_memory(NULL, adr, null(), T_ADDRESS, NoAlias);
232 }
233
234 //-----------------------------
235 // check exception
236 Node* adr = basic_plus_adr(top(), thread, in_bytes(Thread::pending_exception_offset()));
237 Node* pending = make_load(NULL, adr, TypeOopPtr::BOTTOM, T_OBJECT, NoAlias, false);
|