mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
c55c74c634
This patch adds support for the following outer product instructions: * BFMOPA, BFMOPS, FMOPA, FMOPS, SMOPA, SMOPS, SUMOPA, SUMOPS, UMOPA, UMOPS, USMOPA, USMOPS. Depends on D105570. The reference can be found here: https://developer.arm.com/documentation/ddi0602/2021-06 Reviewed By: david-arm Differential Revision: https://reviews.llvm.org/D105571
68 lines
2.8 KiB
TableGen
68 lines
2.8 KiB
TableGen
//=- AArch64SMEInstrInfo.td - AArch64 SME Instructions -*- tablegen -*-----=//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// AArch64 Scalable Matrix Extension (SME) Instruction definitions.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
// Add vector elements horizontally or vertically to ZA tile.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
let Predicates = [HasSME] in {
|
|
def ADDHA_MPPZ_S : sme_add_vector_to_tile_u32<0b0, "addha">;
|
|
def ADDVA_MPPZ_S : sme_add_vector_to_tile_u32<0b1, "addva">;
|
|
}
|
|
|
|
let Predicates = [HasSMEI64] in {
|
|
def ADDHA_MPPZ_D : sme_add_vector_to_tile_u64<0b0, "addha">;
|
|
def ADDVA_MPPZ_D : sme_add_vector_to_tile_u64<0b1, "addva">;
|
|
}
|
|
|
|
let Predicates = [HasSME] in {
|
|
//===----------------------------------------------------------------------===//
|
|
// Outer products
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
defm BFMOPA_MPPZZ : sme_bf16_outer_product<0b0, "bfmopa">;
|
|
defm BFMOPS_MPPZZ : sme_bf16_outer_product<0b1, "bfmops">;
|
|
|
|
def FMOPA_MPPZZ_S : sme_outer_product_fp32<0b0, "fmopa">;
|
|
def FMOPS_MPPZZ_S : sme_outer_product_fp32<0b1, "fmops">;
|
|
}
|
|
|
|
let Predicates = [HasSMEF64] in {
|
|
def FMOPA_MPPZZ_D : sme_outer_product_fp64<0b0, "fmopa">;
|
|
def FMOPS_MPPZZ_D : sme_outer_product_fp64<0b1, "fmops">;
|
|
}
|
|
|
|
let Predicates = [HasSME] in {
|
|
defm FMOPAL_MPPZZ : sme_f16_outer_product<0b0, "fmopa">;
|
|
defm FMOPSL_MPPZZ : sme_f16_outer_product<0b1, "fmops">;
|
|
|
|
def SMOPA_MPPZZ_S : sme_int_outer_product_i32<0b000, "smopa">;
|
|
def SMOPS_MPPZZ_S : sme_int_outer_product_i32<0b001, "smops">;
|
|
def UMOPA_MPPZZ_S : sme_int_outer_product_i32<0b110, "umopa">;
|
|
def UMOPS_MPPZZ_S : sme_int_outer_product_i32<0b111, "umops">;
|
|
def SUMOPA_MPPZZ_S : sme_int_outer_product_i32<0b010, "sumopa">;
|
|
def SUMOPS_MPPZZ_S : sme_int_outer_product_i32<0b011, "sumops">;
|
|
def USMOPA_MPPZZ_S : sme_int_outer_product_i32<0b100, "usmopa">;
|
|
def USMOPS_MPPZZ_S : sme_int_outer_product_i32<0b101, "usmops">;
|
|
}
|
|
|
|
let Predicates = [HasSMEI64] in {
|
|
def SMOPA_MPPZZ_D : sme_int_outer_product_i64<0b000, "smopa">;
|
|
def SMOPS_MPPZZ_D : sme_int_outer_product_i64<0b001, "smops">;
|
|
def UMOPA_MPPZZ_D : sme_int_outer_product_i64<0b110, "umopa">;
|
|
def UMOPS_MPPZZ_D : sme_int_outer_product_i64<0b111, "umops">;
|
|
def SUMOPA_MPPZZ_D : sme_int_outer_product_i64<0b010, "sumopa">;
|
|
def SUMOPS_MPPZZ_D : sme_int_outer_product_i64<0b011, "sumops">;
|
|
def USMOPA_MPPZZ_D : sme_int_outer_product_i64<0b100, "usmopa">;
|
|
def USMOPS_MPPZZ_D : sme_int_outer_product_i64<0b101, "usmops">;
|
|
}
|