blob: db77d9e69bda5db02e9920878d901d03a1bb9659 [file] [edit]
// Copyright 2026 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Zvtbase matrix configuration instructions (spec 15.1.1.4).
slot riscv_zvt {
includes {
#include "riscv/riscv_zvt_instructions.h"
}
default size = 4;
opcodes {
msetmtype{: rs1, rs2 : },
disasm: "msetmtype", "%rs1, %rs2",
semfunc: "&::mpact::sim::riscv::RiscVZvtMsetMtype";
msettn{: rs1 : rd},
disasm: "msettn", "%rd, %rs1",
semfunc: "&::mpact::sim::riscv::RiscVZvtMsetTn";
msettm{: rs1 : rd},
disasm: "msettm", "%rd, %rs1",
semfunc: "&::mpact::sim::riscv::RiscVZvtMsetTm";
msettk{: rs1 : rd},
disasm: "msettk", "%rd, %rs1",
semfunc: "&::mpact::sim::riscv::RiscVZvtMsetTk";
// Tile manipulation.
vtzero{: mtd : },
disasm: "vtzero", "%mtd",
semfunc: "&::mpact::sim::riscv::RiscVZvtVtZero";
vtdiscard{: : },
disasm: "vtdiscard",
semfunc: "&::mpact::sim::riscv::RiscVZvtVtDiscard";
vtmv_v_t{: rs1 : matVd},
disasm: "vtmv.v.t", "%matVd, %rs1",
semfunc: "&::mpact::sim::riscv::RiscVZvtVtmvVt";
vtmv_t_v{: matA, rs1 : },
disasm: "vtmv.t.v", "%rs1, %matA",
semfunc: "&::mpact::sim::riscv::RiscVZvtVtmvTv";
// Tile load/store to memory (EEW statically encoded).
vtle8{: rs1, rs2 : },
disasm: "vtle8", "%rs2, (%rs1)",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtVtle, 8)";
vtle16{: rs1, rs2 : },
disasm: "vtle16", "%rs2, (%rs1)",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtVtle, 16)";
vtle32{: rs1, rs2 : },
disasm: "vtle32", "%rs2, (%rs1)",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtVtle, 32)";
vtle64{: rs1, rs2 : },
disasm: "vtle64", "%rs2, (%rs1)",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtVtle, 64)";
vtse8{: rs1, rs2 : },
disasm: "vtse8", "%rs2, (%rs1)",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtVtse, 8)";
vtse16{: rs1, rs2 : },
disasm: "vtse16", "%rs2, (%rs1)",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtVtse, 16)";
vtse32{: rs1, rs2 : },
disasm: "vtse32", "%rs2, (%rs1)",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtVtse, 32)";
vtse64{: rs1, rs2 : },
disasm: "vtse64", "%rs2, (%rs1)",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtVtse, 64)";
// Matrix multiply: C += A^T * B.
vtmms_tvv{: matA, matB, mtd : },
disasm: "vtmms.tvv", "%mtd, %matA, %matB",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtMatmul, ::mpact::sim::riscv::RiscVZvtMatmulKind::kInt8Signed)";
vtmmu_tvv{: matA, matB, mtd : },
disasm: "vtmmu.tvv", "%mtd, %matA, %matB",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtMatmul, ::mpact::sim::riscv::RiscVZvtMatmulKind::kInt8Unsigned)";
vtfmm_tvv{: matA, matB, mtd : fflags},
disasm: "vtfmm.tvv", "%mtd, %matA, %matB",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtMatmul, ::mpact::sim::riscv::RiscVZvtMatmulKind::kFp32)";
vtfmm_alt_tvv{: matA, matB, mtd : fflags},
disasm: "vtfmm.alt.tvv", "%mtd, %matA, %matB",
semfunc: "absl::bind_front(&::mpact::sim::riscv::RiscVZvtMatmul, ::mpact::sim::riscv::RiscVZvtMatmulKind::kBf16)";
}
}