| // 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"); | |
| } |