| OLD | NEW |
| 1 // Copyright 2006-2008 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2008 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 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 182 return 8; | 182 return 8; |
| 183 #elif V8_TARGET_ARCH_MIPS | 183 #elif V8_TARGET_ARCH_MIPS |
| 184 return 8; | 184 return 8; |
| 185 #endif | 185 #endif |
| 186 // With gcc 4.4 the tree vectorization optimizer can generate code | 186 // With gcc 4.4 the tree vectorization optimizer can generate code |
| 187 // that requires 16 byte alignment such as movdqa on x86. | 187 // that requires 16 byte alignment such as movdqa on x86. |
| 188 return 16; | 188 return 16; |
| 189 } | 189 } |
| 190 | 190 |
| 191 | 191 |
| 192 #ifdef V8_TARGET_ARCH_ARM | |
| 193 // 0xffff0fa0 is the hard coded address of a function provided by | |
| 194 // the kernel which implements a memory barrier. On older | |
| 195 // ARM architecture revisions (pre-v6) this may be implemented using | |
| 196 // a syscall. This address is stable, and in active use (hard coded) | |
| 197 // by at least glibc-2.7 and the Android C library. | |
| 198 typedef void (*LinuxKernelMemoryBarrierFunc)(void); | |
| 199 LinuxKernelMemoryBarrierFunc pLinuxKernelMemoryBarrier __attribute__((weak)) = | |
| 200 (LinuxKernelMemoryBarrierFunc) 0xffff0fa0; | |
| 201 #endif | |
| 202 | |
| 203 void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) { | 192 void OS::ReleaseStore(volatile AtomicWord* ptr, AtomicWord value) { |
| 204 #if defined(V8_TARGET_ARCH_ARM) && defined(__arm__) | 193 #if defined(V8_TARGET_ARCH_ARM) && defined(__arm__) |
| 205 // Only use on ARM hardware. | 194 // Only use on ARM hardware. |
| 206 pLinuxKernelMemoryBarrier(); | 195 MemoryBarrier(); |
| 207 #else | 196 #else |
| 208 __asm__ __volatile__("" : : : "memory"); | 197 __asm__ __volatile__("" : : : "memory"); |
| 209 // An x86 store acts as a release barrier. | 198 // An x86 store acts as a release barrier. |
| 210 #endif | 199 #endif |
| 211 *ptr = value; | 200 *ptr = value; |
| 212 } | 201 } |
| 213 | 202 |
| 214 | 203 |
| 215 const char* OS::LocalTimezone(double time) { | 204 const char* OS::LocalTimezone(double time) { |
| 216 if (isnan(time)) return ""; | 205 if (isnan(time)) return ""; |
| (...skipping 790 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1007 | 996 |
| 1008 void Sampler::Stop() { | 997 void Sampler::Stop() { |
| 1009 ASSERT(IsActive()); | 998 ASSERT(IsActive()); |
| 1010 SignalSender::RemoveActiveSampler(this); | 999 SignalSender::RemoveActiveSampler(this); |
| 1011 SetActive(false); | 1000 SetActive(false); |
| 1012 } | 1001 } |
| 1013 | 1002 |
| 1014 #endif // ENABLE_LOGGING_AND_PROFILING | 1003 #endif // ENABLE_LOGGING_AND_PROFILING |
| 1015 | 1004 |
| 1016 } } // namespace v8::internal | 1005 } } // namespace v8::internal |
| OLD | NEW |