| // Copyright 2025 The Go Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file. |
| |
| //go:build (386 || amd64) && darwin && !ios |
| |
| package cpu |
| |
| func osInit() { |
| if isRosetta() && darwinKernelVersionCheck(24, 0, 0) { |
| // Apparently, on macOS 15 (Darwin kernel version 24) or newer, |
| // Rosetta 2 supports AVX1 and 2. However, neither CPUID nor |
| // sysctl says it has AVX. Detect this situation here and report |
| // AVX1 and 2 as supported. |
| // TODO: check if any other feature is actually supported. |
| X86.HasAVX = true |
| X86.HasAVX2 = true |
| } |
| } |
| |
| func isRosetta() bool { |
| return sysctlEnabled([]byte("sysctl.proc_translated\x00")) |
| } |