Chromium Code Reviews| Index: src/x64/assembler-x64.cc |
| diff --git a/src/x64/assembler-x64.cc b/src/x64/assembler-x64.cc |
| index fd722b23bd34fd86db481b1c694c6fa8e2a20804..66ead676db6bd53c2895b17a863b62f97784ca09 100644 |
| --- a/src/x64/assembler-x64.cc |
| +++ b/src/x64/assembler-x64.cc |
| @@ -24,8 +24,8 @@ namespace { |
| bool EnableAVX() { |
| #if V8_OS_MACOSX |
| - // Mac OS X 10.9 has a bug where AVX transitions were indeed being caused by |
| - // ISRs, so we detect Mac OS X 10.9 here and disable AVX in that case. |
| + // Mac OS X up to 10.9 has a bug where AVX transitions were indeed being |
| + // caused by ISRs, so we detect that here and disable AVX in that case. |
| char buffer[128]; |
| size_t buffer_size = arraysize(buffer); |
| int ctl_name[] = { CTL_KERN , KERN_OSRELEASE }; |
| @@ -33,9 +33,14 @@ bool EnableAVX() { |
| V8_Fatal(__FILE__, __LINE__, "V8 failed to get kernel version"); |
| } |
| // The buffer now contains a string of the form XX.YY.ZZ, where |
| - // XX is the major kernel version component. 13.x.x (Mavericks) is |
| - // affected by this bug, so disable AVX there. |
| - if (memcmp(buffer, "13.", 3) == 0) return false; |
| + // XX is the major kernel version component. |
| + // Make sure the buffer is 0-terminated. |
|
Sven Panne
2015/01/07 12:08:44
Same here.
|
| + buffer[arraysize(buffer) - 1] = '\0'; |
| + char* period_pos = strchr(buffer, '.'); |
| + DCHECK_NOT_NULL(period_pos); |
| + *period_pos = '\0'; |
| + long kernel_version_major = strtol(buffer, nullptr, 10); // NOLINT |
| + if (kernel_version_major <= 13) return false; |
| #endif // V8_OS_MACOSX |
| return FLAG_enable_avx; |
| } |