| // 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. |
| |
| package main |
| |
| import ( |
| "_gen/sgutil" |
| "bytes" |
| ) |
| |
| // writeSIMDGenericOps generates the generic ops for the current architecture, |
| // merges them with existing ops from other architectures, and returns the |
| // result as a buffer ready for writing. |
| func writeSIMDGenericOps(ops []Operation, genericOpsFilePath string) *bytes.Buffer { |
| // Generate fresh ops for current arch. |
| currentArch := CurrentArch().Arch |
| var newOps []sgutil.GenericOpsData |
| for _, op := range ops { |
| if op.NoGenericOps != nil && *op.NoGenericOps == "true" { |
| continue |
| } |
| if op.SkipMaskedMethod() { |
| continue |
| } |
| _, _, _, immType, gOp, _ := op.shape() |
| |
| newOps = append(newOps, sgutil.GenericOpsData{ |
| OpName: gOp.GenericName(), |
| OpInLen: len(gOp.In), |
| Comm: op.Commutative, |
| HasAux: immType == VarImm || immType == VarImmLim || immType == ConstVarImm, |
| Archs: []string{currentArch}, |
| }) |
| } |
| |
| buf := sgutil.MergeSIMDGenericOps(newOps, genericOpsFilePath, currentArch) |
| |
| return buf |
| } |