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