162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Test basic matrix multiply assist (MMA) functionality if available. 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2020, Alistair Popple, IBM Corp. 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci#include <stdio.h> 862306a36Sopenharmony_ci#include <stdint.h> 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#include "utils.h" 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ciextern void test_mma(uint16_t (*)[8], uint16_t (*)[8], uint32_t (*)[4*4]); 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistatic int mma(void) 1562306a36Sopenharmony_ci{ 1662306a36Sopenharmony_ci int i; 1762306a36Sopenharmony_ci int rc = 0; 1862306a36Sopenharmony_ci uint16_t x[] = {1, 0, 2, 0, 3, 0, 4, 0}; 1962306a36Sopenharmony_ci uint16_t y[] = {1, 0, 2, 0, 3, 0, 4, 0}; 2062306a36Sopenharmony_ci uint32_t z[4*4]; 2162306a36Sopenharmony_ci uint32_t exp[4*4] = {1, 2, 3, 4, 2262306a36Sopenharmony_ci 2, 4, 6, 8, 2362306a36Sopenharmony_ci 3, 6, 9, 12, 2462306a36Sopenharmony_ci 4, 8, 12, 16}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci SKIP_IF_MSG(!have_hwcap2(PPC_FEATURE2_ARCH_3_1), "Need ISAv3.1"); 2762306a36Sopenharmony_ci SKIP_IF_MSG(!have_hwcap2(PPC_FEATURE2_MMA), "Need MMA"); 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_ci test_mma(&x, &y, &z); 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci for (i = 0; i < 16; i++) { 3262306a36Sopenharmony_ci printf("MMA[%d] = %d ", i, z[i]); 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_ci if (z[i] == exp[i]) { 3562306a36Sopenharmony_ci printf(" (Correct)\n"); 3662306a36Sopenharmony_ci } else { 3762306a36Sopenharmony_ci printf(" (Incorrect)\n"); 3862306a36Sopenharmony_ci rc = 1; 3962306a36Sopenharmony_ci } 4062306a36Sopenharmony_ci } 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci return rc; 4362306a36Sopenharmony_ci} 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ciint main(int argc, char *argv[]) 4662306a36Sopenharmony_ci{ 4762306a36Sopenharmony_ci return test_harness(mma, "mma"); 4862306a36Sopenharmony_ci} 49