| // Copyright 2026 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. |
| |
| package variants |
| |
| // DO NOT EDIT WITHOUT READING THIS FIRST. |
| |
| // This file is shared by the simd bridge generator |
| // and the compiler's midway tree rewriter. The sharing |
| // is facilitated by an automatic copy from the file |
| // embedded in the simd bridge generator, which itself |
| // copies it from its "variants" subdirectory. To |
| // change this file, edit the copy in |
| // src/simd/archsimd/_gen/midway/variants/variants.go, |
| // and then rerun ("go run") the simd bridge generator |
| // and it will create a bridge consistent with the contents |
| // of this file, for use with a compiler built to use this |
| // file. Minor version skews will only affect code |
| // (e.g., rebuilding the compiler) that uses "simd" |
| // (not "archsimd") and that runs on hardware lacking |
| // the expected feature set. In the worst case, |
| // GODEBUG=simd=0 will avoid the problem, unless it |
| // involves missing emulation methods (which you are |
| // expected to write anyway if you are tinkering with |
| // this code). |
| |
| type Key struct { |
| Arch string |
| Size int |
| } |
| |
| type Variant struct { |
| Suffix string // the name (suffix) for this variant. |
| Emulated map[string]bool // Methods that are emulated for this variant. |
| DefaultRequires string // default requires this function return true, false means variant. |
| } |
| |
| // Name returns the variant name of type t. |
| // If receiver v is nil, returns t. |
| func (v *Variant) Name(t string) string { |
| if v == nil { |
| return t |
| } |
| return t + v.Suffix |
| } |
| |
| var Variants map[Key]*Variant |
| |
| func init() { |
| Variants = make(map[Key]*Variant) |
| Variants[Key{"arm64", 128}] = &Variant{ |
| Suffix: "nclm", |
| Emulated: map[string]bool{ |
| "CarrylessMultiplyEven": true, |
| "CarrylessMultiplyOdd": true, |
| }, |
| DefaultRequires: "HasHardwareCarrylessMultiply", |
| } |
| |
| } |