Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1)

Side by Side Diff: src/platform-win32.cc

Issue 148503002: A64: Synchronize with r15545. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/a64
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/platform-tls-mac.h ('k') | src/preparse-data.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 } 140 }
141 141
142 142
143 double ceiling(double x) { 143 double ceiling(double x) {
144 return ceil(x); 144 return ceil(x);
145 } 145 }
146 146
147 147
148 static Mutex* limit_mutex = NULL; 148 static Mutex* limit_mutex = NULL;
149 149
150 #if defined(V8_TARGET_ARCH_IA32) 150 #if V8_TARGET_ARCH_IA32
151 static void MemMoveWrapper(void* dest, const void* src, size_t size) { 151 static void MemMoveWrapper(void* dest, const void* src, size_t size) {
152 memmove(dest, src, size); 152 memmove(dest, src, size);
153 } 153 }
154 154
155
155 // Initialize to library version so we can call this at any time during startup. 156 // Initialize to library version so we can call this at any time during startup.
156 static OS::MemMoveFunction memmove_function = &MemMoveWrapper; 157 static OS::MemMoveFunction memmove_function = &MemMoveWrapper;
157 158
158 // Defined in codegen-ia32.cc. 159 // Defined in codegen-ia32.cc.
159 OS::MemMoveFunction CreateMemMoveFunction(); 160 OS::MemMoveFunction CreateMemMoveFunction();
160 161
161 // Copy memory area to disjoint memory area. 162 // Copy memory area to disjoint memory area.
162 void OS::MemMove(void* dest, const void* src, size_t size) { 163 void OS::MemMove(void* dest, const void* src, size_t size) {
163 if (size == 0) return; 164 if (size == 0) return;
164 // Note: here we rely on dependent reads being ordered. This is true 165 // Note: here we rely on dependent reads being ordered. This is true
165 // on all architectures we currently support. 166 // on all architectures we currently support.
166 (*memmove_function)(dest, src, size); 167 (*memmove_function)(dest, src, size);
167 } 168 }
168 169
169 #endif // V8_TARGET_ARCH_IA32 170 #endif // V8_TARGET_ARCH_IA32
170 171
171 #ifdef _WIN64 172 #ifdef _WIN64
172 typedef double (*ModuloFunction)(double, double); 173 typedef double (*ModuloFunction)(double, double);
173 static ModuloFunction modulo_function = NULL; 174 static ModuloFunction modulo_function = NULL;
174 // Defined in codegen-x64.cc. 175 // Defined in codegen-x64.cc.
175 ModuloFunction CreateModuloFunction(); 176 ModuloFunction CreateModuloFunction();
176 177
177 void init_modulo_function() { 178 void init_modulo_function() {
178 modulo_function = CreateModuloFunction(); 179 modulo_function = CreateModuloFunction();
179 } 180 }
180 181
182
181 double modulo(double x, double y) { 183 double modulo(double x, double y) {
182 // Note: here we rely on dependent reads being ordered. This is true 184 // Note: here we rely on dependent reads being ordered. This is true
183 // on all architectures we currently support. 185 // on all architectures we currently support.
184 return (*modulo_function)(x, y); 186 return (*modulo_function)(x, y);
185 } 187 }
186 #else // Win32 188 #else // Win32
187 189
188 double modulo(double x, double y) { 190 double modulo(double x, double y) {
189 // Workaround MS fmod bugs. ECMA-262 says: 191 // Workaround MS fmod bugs. ECMA-262 says:
190 // dividend is finite and divisor is an infinity => result equals dividend 192 // dividend is finite and divisor is an infinity => result equals dividend
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 // allows access to both a FILETIME and an integer representation of 316 // allows access to both a FILETIME and an integer representation of
315 // the timestamp. 317 // the timestamp.
316 union TimeStamp { 318 union TimeStamp {
317 FILETIME ft_; 319 FILETIME ft_;
318 int64_t t_; 320 int64_t t_;
319 }; 321 };
320 322
321 TimeStamp time_; 323 TimeStamp time_;
322 }; 324 };
323 325
326
324 // Static variables. 327 // Static variables.
325 bool Time::tz_initialized_ = false; 328 bool Time::tz_initialized_ = false;
326 TIME_ZONE_INFORMATION Time::tzinfo_; 329 TIME_ZONE_INFORMATION Time::tzinfo_;
327 char Time::std_tz_name_[kTzNameSize]; 330 char Time::std_tz_name_[kTzNameSize];
328 char Time::dst_tz_name_[kTzNameSize]; 331 char Time::dst_tz_name_[kTzNameSize];
329 332
330 333
331 // Initialize timestamp to start of epoc. 334 // Initialize timestamp to start of epoc.
332 Time::Time() { 335 Time::Time() {
333 t() = 0; 336 t() = 0;
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
573 // Return the standard or DST time zone name based on whether daylight 576 // Return the standard or DST time zone name based on whether daylight
574 // saving is in effect at the given time. 577 // saving is in effect at the given time.
575 return InDST() ? dst_tz_name_ : std_tz_name_; 578 return InDST() ? dst_tz_name_ : std_tz_name_;
576 } 579 }
577 580
578 581
579 void OS::PostSetUp() { 582 void OS::PostSetUp() {
580 // Math functions depend on CPU features therefore they are initialized after 583 // Math functions depend on CPU features therefore they are initialized after
581 // CPU. 584 // CPU.
582 MathSetup(); 585 MathSetup();
583 #if defined(V8_TARGET_ARCH_IA32) 586 #if V8_TARGET_ARCH_IA32
584 OS::MemMoveFunction generated_memmove = CreateMemMoveFunction(); 587 OS::MemMoveFunction generated_memmove = CreateMemMoveFunction();
585 if (generated_memmove != NULL) { 588 if (generated_memmove != NULL) {
586 memmove_function = generated_memmove; 589 memmove_function = generated_memmove;
587 } 590 }
588 #endif 591 #endif
589 } 592 }
590 593
591 594
592 // Returns the accumulated user time for thread. 595 // Returns the accumulated user time for thread.
593 int OS::GetUserTime(uint32_t* secs, uint32_t* usecs) { 596 int OS::GetUserTime(uint32_t* secs, uint32_t* usecs) {
(...skipping 15 matching lines...) Expand all
609 612
610 613
611 // Returns current time as the number of milliseconds since 614 // Returns current time as the number of milliseconds since
612 // 00:00:00 UTC, January 1, 1970. 615 // 00:00:00 UTC, January 1, 1970.
613 double OS::TimeCurrentMillis() { 616 double OS::TimeCurrentMillis() {
614 Time t; 617 Time t;
615 t.SetToCurrentTime(); 618 t.SetToCurrentTime();
616 return t.ToJSTime(); 619 return t.ToJSTime();
617 } 620 }
618 621
622
619 // Returns the tickcounter based on timeGetTime. 623 // Returns the tickcounter based on timeGetTime.
620 int64_t OS::Ticks() { 624 int64_t OS::Ticks() {
621 return timeGetTime() * 1000; // Convert to microseconds. 625 return timeGetTime() * 1000; // Convert to microseconds.
622 } 626 }
623 627
624 628
625 // Returns a string identifying the current timezone taking into 629 // Returns a string identifying the current timezone taking into
626 // account daylight saving. 630 // account daylight saving.
627 const char* OS::LocalTimezone(double time) { 631 const char* OS::LocalTimezone(double time) {
628 return Time(time).LocalTimezone(); 632 return Time(time).LocalTimezone();
(...skipping 813 matching lines...) Expand 10 before | Expand all | Expand 10 after
1442 } 1446 }
1443 } 1447 }
1444 1448
1445 frames_count++; 1449 frames_count++;
1446 } 1450 }
1447 1451
1448 // Return the number of frames filled in. 1452 // Return the number of frames filled in.
1449 return frames_count; 1453 return frames_count;
1450 } 1454 }
1451 1455
1456
1452 // Restore warnings to previous settings. 1457 // Restore warnings to previous settings.
1453 #pragma warning(pop) 1458 #pragma warning(pop)
1454 1459
1455 #else // __MINGW32__ 1460 #else // __MINGW32__
1456 void OS::LogSharedLibraryAddresses() { } 1461 void OS::LogSharedLibraryAddresses() { }
1457 void OS::SignalCodeMovingGC() { } 1462 void OS::SignalCodeMovingGC() { }
1458 int OS::StackWalk(Vector<OS::StackFrame> frames) { return 0; } 1463 int OS::StackWalk(Vector<OS::StackFrame> frames) { return 0; }
1459 #endif // __MINGW32__ 1464 #endif // __MINGW32__
1460 1465
1461 1466
(...skipping 10 matching lines...) Expand all
1472 return *reinterpret_cast<const double*>(&nanval); 1477 return *reinterpret_cast<const double*>(&nanval);
1473 #else // _MSC_VER 1478 #else // _MSC_VER
1474 return NAN; 1479 return NAN;
1475 #endif // _MSC_VER 1480 #endif // _MSC_VER
1476 } 1481 }
1477 1482
1478 1483
1479 int OS::ActivationFrameAlignment() { 1484 int OS::ActivationFrameAlignment() {
1480 #ifdef _WIN64 1485 #ifdef _WIN64
1481 return 16; // Windows 64-bit ABI requires the stack to be 16-byte aligned. 1486 return 16; // Windows 64-bit ABI requires the stack to be 16-byte aligned.
1487 #elif defined(__MINGW32__)
1488 // With gcc 4.4 the tree vectorization optimizer can generate code
1489 // that requires 16 byte alignment such as movdqa on x86.
1490 return 16;
1482 #else 1491 #else
1483 return 8; // Floating-point math runs faster with 8-byte alignment. 1492 return 8; // Floating-point math runs faster with 8-byte alignment.
1484 #endif 1493 #endif
1485 } 1494 }
1486 1495
1487 1496
1488 VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { } 1497 VirtualMemory::VirtualMemory() : address_(NULL), size_(0) { }
1489 1498
1490 1499
1491 VirtualMemory::VirtualMemory(size_t size) 1500 VirtualMemory::VirtualMemory(size_t size)
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
1981 limit_mutex = CreateMutex(); 1990 limit_mutex = CreateMutex();
1982 } 1991 }
1983 1992
1984 1993
1985 void OS::TearDown() { 1994 void OS::TearDown() {
1986 delete limit_mutex; 1995 delete limit_mutex;
1987 } 1996 }
1988 1997
1989 1998
1990 } } // namespace v8::internal 1999 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/platform-tls-mac.h ('k') | src/preparse-data.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698