// 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
}
