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