diff options
author | isaacs <i@izs.me> | 2012-03-12 21:46:36 -0700 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-03-12 21:46:36 -0700 |
commit | e4fc2cbfd354d8ad74c465e508531d92de2b4d52 (patch) | |
tree | ce1e20dddced61d5b56750743ddb7304846f537a /deps/v8/src/platform-win32.cc | |
parent | bcb0cc0b184c61313541002e504948ed21f59dad (diff) | |
download | node-new-e4fc2cbfd354d8ad74c465e508531d92de2b4d52.tar.gz |
Upgrade v8 to 3.9.17
Diffstat (limited to 'deps/v8/src/platform-win32.cc')
-rw-r--r-- | deps/v8/src/platform-win32.cc | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/deps/v8/src/platform-win32.cc b/deps/v8/src/platform-win32.cc index e9e99246cb..53915c6c0e 100644 --- a/deps/v8/src/platform-win32.cc +++ b/deps/v8/src/platform-win32.cc @@ -32,6 +32,7 @@ #include "v8.h" +#include "codegen.h" #include "platform.h" #include "vm-state-inl.h" @@ -112,11 +113,16 @@ int strncpy_s(char* dest, size_t dest_size, const char* source, size_t count) { } +#ifndef __MINGW64_VERSION_MAJOR + inline void MemoryBarrier() { int barrier = 0; __asm__ __volatile__("xchgl %%eax,%0 ":"=r" (barrier)); } +#endif // __MINGW64_VERSION_MAJOR + + #endif // __MINGW32__ // Generate a pseudo-random number in the range 0-2^31-1. Usually @@ -201,6 +207,30 @@ double modulo(double x, double y) { #endif // _WIN64 + +static Mutex* transcendental_function_mutex = OS::CreateMutex(); + +#define TRANSCENDENTAL_FUNCTION(name, type) \ +static TranscendentalFunction fast_##name##_function = NULL; \ +double fast_##name(double x) { \ + if (fast_##name##_function == NULL) { \ + ScopedLock lock(transcendental_function_mutex); \ + TranscendentalFunction temp = \ + CreateTranscendentalFunction(type); \ + MemoryBarrier(); \ + fast_##name##_function = temp; \ + } \ + return (*fast_##name##_function)(x); \ +} + +TRANSCENDENTAL_FUNCTION(sin, TranscendentalCache::SIN) +TRANSCENDENTAL_FUNCTION(cos, TranscendentalCache::COS) +TRANSCENDENTAL_FUNCTION(tan, TranscendentalCache::TAN) +TRANSCENDENTAL_FUNCTION(log, TranscendentalCache::LOG) + +#undef TRANSCENDENTAL_FUNCTION + + // ---------------------------------------------------------------------------- // The Time class represents time on win32. A timestamp is represented as // a 64-bit integer in 100 nanoseconds since January 1, 1601 (UTC). JavaScript @@ -885,7 +915,6 @@ void* OS::Allocate(const size_t requested, bool is_executable) { // VirtualAlloc rounds allocated size to page size automatically. size_t msize = RoundUp(requested, static_cast<int>(GetPageSize())); - void* address = 0; // Windows XP SP2 allows Data Excution Prevention (DEP). int prot = is_executable ? PAGE_EXECUTE_READWRITE : PAGE_READWRITE; @@ -938,12 +967,8 @@ void OS::Sleep(int milliseconds) { void OS::Abort() { if (!IsDebuggerPresent()) { -#ifdef _MSC_VER // Make the MSVCRT do a silent abort. - _set_abort_behavior(0, _WRITE_ABORT_MSG); - _set_abort_behavior(0, _CALL_REPORTFAULT); -#endif // _MSC_VER - abort(); + raise(SIGABRT); } else { DebugBreak(); } |