comparison src/share/vm/runtime/stubRoutines.hpp @ 14407:94c202aa2646

Merge
author kvn
date Thu, 01 Aug 2013 17:25:10 -0700
parents 6cc7093e1341 980532a806a5
children d8041d695d19 b20a35eae442
comparison
equal deleted inserted replaced
14406:c9f0adfb4a8b 14407:94c202aa2646
222 static double (*_intrinsic_pow)(double, double); 222 static double (*_intrinsic_pow)(double, double);
223 static double (*_intrinsic_sin)(double); 223 static double (*_intrinsic_sin)(double);
224 static double (*_intrinsic_cos)(double); 224 static double (*_intrinsic_cos)(double);
225 static double (*_intrinsic_tan)(double); 225 static double (*_intrinsic_tan)(double);
226 226
227 // Safefetch stubs.
228 static address _safefetch32_entry;
229 static address _safefetch32_fault_pc;
230 static address _safefetch32_continuation_pc;
231 static address _safefetchN_entry;
232 static address _safefetchN_fault_pc;
233 static address _safefetchN_continuation_pc;
234
227 public: 235 public:
228 // Initialization/Testing 236 // Initialization/Testing
229 static void initialize1(); // must happen before universe::genesis 237 static void initialize1(); // must happen before universe::genesis
230 static void initialize2(); // must happen after universe::genesis 238 static void initialize2(); // must happen after universe::genesis
231 239
383 assert(_intrinsic_tan != NULL, "must be defined"); 391 assert(_intrinsic_tan != NULL, "must be defined");
384 return _intrinsic_tan(d); 392 return _intrinsic_tan(d);
385 } 393 }
386 394
387 // 395 //
396 // Safefetch stub support
397 //
398
399 typedef int (*SafeFetch32Stub)(int* adr, int errValue);
400 typedef intptr_t (*SafeFetchNStub) (intptr_t* adr, intptr_t errValue);
401
402 static SafeFetch32Stub SafeFetch32_stub() { return CAST_TO_FN_PTR(SafeFetch32Stub, _safefetch32_entry); }
403 static SafeFetchNStub SafeFetchN_stub() { return CAST_TO_FN_PTR(SafeFetchNStub, _safefetchN_entry); }
404
405 static bool is_safefetch_fault(address pc) {
406 return pc != NULL &&
407 (pc == _safefetch32_fault_pc ||
408 pc == _safefetchN_fault_pc);
409 }
410
411 static address continuation_for_safefetch_fault(address pc) {
412 assert(_safefetch32_continuation_pc != NULL &&
413 _safefetchN_continuation_pc != NULL,
414 "not initialized");
415
416 if (pc == _safefetch32_fault_pc) return _safefetch32_continuation_pc;
417 if (pc == _safefetchN_fault_pc) return _safefetchN_continuation_pc;
418
419 ShouldNotReachHere();
420 return NULL;
421 }
422
423 //
388 // Default versions of the above arraycopy functions for platforms which do 424 // Default versions of the above arraycopy functions for platforms which do
389 // not have specialized versions 425 // not have specialized versions
390 // 426 //
391 static void jbyte_copy (jbyte* src, jbyte* dest, size_t count); 427 static void jbyte_copy (jbyte* src, jbyte* dest, size_t count);
392 static void jshort_copy (jshort* src, jshort* dest, size_t count); 428 static void jshort_copy (jshort* src, jshort* dest, size_t count);
401 static void arrayof_jlong_copy (HeapWord* src, HeapWord* dest, size_t count); 437 static void arrayof_jlong_copy (HeapWord* src, HeapWord* dest, size_t count);
402 static void arrayof_oop_copy (HeapWord* src, HeapWord* dest, size_t count); 438 static void arrayof_oop_copy (HeapWord* src, HeapWord* dest, size_t count);
403 static void arrayof_oop_copy_uninit(HeapWord* src, HeapWord* dest, size_t count); 439 static void arrayof_oop_copy_uninit(HeapWord* src, HeapWord* dest, size_t count);
404 }; 440 };
405 441
442 // Safefetch allows to load a value from a location that's not known
443 // to be valid. If the load causes a fault, the error value is returned.
444 inline int SafeFetch32(int* adr, int errValue) {
445 assert(StubRoutines::SafeFetch32_stub(), "stub not yet generated");
446 return StubRoutines::SafeFetch32_stub()(adr, errValue);
447 }
448 inline intptr_t SafeFetchN(intptr_t* adr, intptr_t errValue) {
449 assert(StubRoutines::SafeFetchN_stub(), "stub not yet generated");
450 return StubRoutines::SafeFetchN_stub()(adr, errValue);
451 }
452
406 #endif // SHARE_VM_RUNTIME_STUBROUTINES_HPP 453 #endif // SHARE_VM_RUNTIME_STUBROUTINES_HPP