blob: 4a8c35066abba80ac468d133e375f460b633faa7 [file]
// 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 (
"bytes"
"simd/archsimd/_gen/sgutil"
)
// 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
}