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

Side by Side Diff: src/base/platform/platform-posix.cc

Issue 422063005: Contribution of PowerPC port. (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: re-upload - catch up to 8/19 level Created 6 years, 3 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
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Platform-specific code for POSIX goes here. This is not a platform on its 5 // Platform-specific code for POSIX goes here. This is not a platform on its
6 // own, but contains the parts which are the same across the POSIX platforms 6 // own, but contains the parts which are the same across the POSIX platforms
7 // Linux, MacOS, FreeBSD, OpenBSD, NetBSD and QNX. 7 // Linux, MacOS, FreeBSD, OpenBSD, NetBSD and QNX.
8 8
9 #include <dlfcn.h> 9 #include <dlfcn.h>
10 #include <errno.h> 10 #include <errno.h>
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 } 141 }
142 142
143 143
144 int OS::ActivationFrameAlignment() { 144 int OS::ActivationFrameAlignment() {
145 #if V8_TARGET_ARCH_ARM 145 #if V8_TARGET_ARCH_ARM
146 // On EABI ARM targets this is required for fp correctness in the 146 // On EABI ARM targets this is required for fp correctness in the
147 // runtime system. 147 // runtime system.
148 return 8; 148 return 8;
149 #elif V8_TARGET_ARCH_MIPS 149 #elif V8_TARGET_ARCH_MIPS
150 return 8; 150 return 8;
151 #elif V8_TARGET_ARCH_PPC
Sven Panne 2014/09/01 07:55:17 No need for a separate case here, just extend the
152 return 16;
151 #else 153 #else
152 // Otherwise we just assume 16 byte alignment, i.e.: 154 // Otherwise we just assume 16 byte alignment, i.e.:
153 // - With gcc 4.4 the tree vectorization optimizer can generate code 155 // - With gcc 4.4 the tree vectorization optimizer can generate code
154 // that requires 16 byte alignment such as movdqa on x86. 156 // that requires 16 byte alignment such as movdqa on x86.
155 // - Mac OS X and Solaris (64-bit) activation frames must be 16 byte-aligned; 157 // - Mac OS X and Solaris (64-bit) activation frames must be 16 byte-aligned;
156 // see "Mac OS X ABI Function Call Guide" 158 // see "Mac OS X ABI Function Call Guide"
157 return 16; 159 return 16;
158 #endif 160 #endif
159 } 161 }
160 162
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
231 return NULL; 233 return NULL;
232 #endif 234 #endif
233 uintptr_t raw_addr; 235 uintptr_t raw_addr;
234 platform_random_number_generator.Pointer()->NextBytes(&raw_addr, 236 platform_random_number_generator.Pointer()->NextBytes(&raw_addr,
235 sizeof(raw_addr)); 237 sizeof(raw_addr));
236 #if V8_TARGET_ARCH_X64 238 #if V8_TARGET_ARCH_X64
237 // Currently available CPUs have 48 bits of virtual addressing. Truncate 239 // Currently available CPUs have 48 bits of virtual addressing. Truncate
238 // the hint address to 46 bits to give the kernel a fighting chance of 240 // the hint address to 46 bits to give the kernel a fighting chance of
239 // fulfilling our placement request. 241 // fulfilling our placement request.
240 raw_addr &= V8_UINT64_C(0x3ffffffff000); 242 raw_addr &= V8_UINT64_C(0x3ffffffff000);
243 #elif V8_TARGET_ARCH_PPC64
244 #if V8_TARGET_ARCH_PPC_BE
Sven Panne 2014/09/01 07:55:17 Please don't mix up the architecture and the endia
245 // Big-endian Linux: 44 bits of virtual addressing.
246 raw_addr &= V8_UINT64_C(0x03fffffff000);
247 #else
248 // Little-endian Linux: 48 bits of virtual addressing.
249 raw_addr &= V8_UINT64_C(0x3ffffffff000);
250 #endif
241 #else 251 #else
242 raw_addr &= 0x3ffff000; 252 raw_addr &= 0x3ffff000;
243 253
244 # ifdef __sun 254 # ifdef __sun
245 // For our Solaris/illumos mmap hint, we pick a random address in the bottom 255 // For our Solaris/illumos mmap hint, we pick a random address in the bottom
246 // half of the top half of the address space (that is, the third quarter). 256 // half of the top half of the address space (that is, the third quarter).
247 // Because we do not MAP_FIXED, this will be treated only as a hint -- the 257 // Because we do not MAP_FIXED, this will be treated only as a hint -- the
248 // system will not fail to mmap() because something else happens to already 258 // system will not fail to mmap() because something else happens to already
249 // be mapped at our random address. We deliberately set the hint high enough 259 // be mapped at our random address. We deliberately set the hint high enough
250 // to get well above the system's break (that is, the heap); Solaris and 260 // to get well above the system's break (that is, the heap); Solaris and
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 295
286 void OS::DebugBreak() { 296 void OS::DebugBreak() {
287 #if V8_HOST_ARCH_ARM 297 #if V8_HOST_ARCH_ARM
288 asm("bkpt 0"); 298 asm("bkpt 0");
289 #elif V8_HOST_ARCH_ARM64 299 #elif V8_HOST_ARCH_ARM64
290 asm("brk 0"); 300 asm("brk 0");
291 #elif V8_HOST_ARCH_MIPS 301 #elif V8_HOST_ARCH_MIPS
292 asm("break"); 302 asm("break");
293 #elif V8_HOST_ARCH_MIPS64 303 #elif V8_HOST_ARCH_MIPS64
294 asm("break"); 304 asm("break");
305 #elif V8_HOST_ARCH_PPC
306 asm("twge 2,2");
295 #elif V8_HOST_ARCH_IA32 307 #elif V8_HOST_ARCH_IA32
296 #if defined(__native_client__) 308 #if defined(__native_client__)
297 asm("hlt"); 309 asm("hlt");
298 #else 310 #else
299 asm("int $3"); 311 asm("int $3");
300 #endif // __native_client__ 312 #endif // __native_client__
301 #elif V8_HOST_ARCH_X64 313 #elif V8_HOST_ARCH_X64
302 asm("int $3"); 314 asm("int $3");
303 #else 315 #else
304 #error Unsupported host architecture. 316 #error Unsupported host architecture.
(...skipping 292 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 USE(result); 609 USE(result);
598 } 610 }
599 611
600 612
601 void Thread::Join() { 613 void Thread::Join() {
602 pthread_join(data_->thread_, NULL); 614 pthread_join(data_->thread_, NULL);
603 } 615 }
604 616
605 617
606 void Thread::YieldCPU() { 618 void Thread::YieldCPU() {
619 #if V8_TARGET_ARCH_PPC
Sven Panne 2014/09/01 07:55:17 Huh? How is this related to the *architecture*? Do
620 OS::Sleep(0);
621 #else
607 int result = sched_yield(); 622 int result = sched_yield();
608 DCHECK_EQ(0, result); 623 DCHECK_EQ(0, result);
609 USE(result); 624 USE(result);
625 #endif
610 } 626 }
611 627
612 628
613 static Thread::LocalStorageKey PthreadKeyToLocalKey(pthread_key_t pthread_key) { 629 static Thread::LocalStorageKey PthreadKeyToLocalKey(pthread_key_t pthread_key) {
614 #if V8_OS_CYGWIN 630 #if V8_OS_CYGWIN
615 // We need to cast pthread_key_t to Thread::LocalStorageKey in two steps 631 // We need to cast pthread_key_t to Thread::LocalStorageKey in two steps
616 // because pthread_key_t is a pointer type on Cygwin. This will probably not 632 // because pthread_key_t is a pointer type on Cygwin. This will probably not
617 // work on 64-bit platforms, but Cygwin doesn't support 64-bit anyway. 633 // work on 64-bit platforms, but Cygwin doesn't support 64-bit anyway.
618 STATIC_ASSERT(sizeof(Thread::LocalStorageKey) == sizeof(pthread_key_t)); 634 STATIC_ASSERT(sizeof(Thread::LocalStorageKey) == sizeof(pthread_key_t));
619 intptr_t ptr_key = reinterpret_cast<intptr_t>(pthread_key); 635 intptr_t ptr_key = reinterpret_cast<intptr_t>(pthread_key);
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
728 744
729 void Thread::SetThreadLocal(LocalStorageKey key, void* value) { 745 void Thread::SetThreadLocal(LocalStorageKey key, void* value) {
730 pthread_key_t pthread_key = LocalKeyToPthreadKey(key); 746 pthread_key_t pthread_key = LocalKeyToPthreadKey(key);
731 int result = pthread_setspecific(pthread_key, value); 747 int result = pthread_setspecific(pthread_key, value);
732 DCHECK_EQ(0, result); 748 DCHECK_EQ(0, result);
733 USE(result); 749 USE(result);
734 } 750 }
735 751
736 752
737 } } // namespace v8::base 753 } } // namespace v8::base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698