49 lines
964 B
C
49 lines
964 B
C
|
// 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");
|
||
|
}
|