// SPDX-License-Identifier: GPL-2.0-or-later /* * Test basic matrix multiply assist (MMA) functionality if available. * * Copyright 2020, Alistair Popple, IBM Corp. */ #include <stdio.h> #include <stdint.h> #include "utils.h" extern void test_mma(uint16_t (*)[8], uint16_t (*)[8], uint32_t (*)[4*4]); static int mma(void) { int i; int rc = 0; uint16_t x[] = {1, 0, 2, 0, 3, 0, 4, 0}; uint16_t y[] = {1, 0, 2, 0, 3, 0, 4, 0}; uint32_t z[4*4]; uint32_t exp[4*4] = {1, 2, 3, 4, 2, 4, 6, 8, 3, 6, 9, 12, 4, 8, 12, 16}; SKIP_IF_MSG(!have_hwcap2(PPC_FEATURE2_ARCH_3_1), "Need ISAv3.1"); SKIP_IF_MSG(!have_hwcap2(PPC_FEATURE2_MMA), "Need MMA"); test_mma(&x, &y, &z); for (i = 0; i < 16; i++) { printf("MMA[%d] = %d ", i, z[i]); if (z[i] == exp[i]) { printf(" (Correct)\n"); } else { printf(" (Incorrect)\n"); rc = 1; } } return rc; } int main(int argc, char *argv[]) { return test_harness(mma, "mma"); }