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	.global test_mma
862306a36Sopenharmony_citest_mma:
962306a36Sopenharmony_ci	/* Load accumulator via VSX registers from image passed in r3 */
1062306a36Sopenharmony_ci	lxvh8x	4,0,3
1162306a36Sopenharmony_ci	lxvh8x	5,0,4
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci	/* Clear and prime the accumulator (xxsetaccz) */
1462306a36Sopenharmony_ci	.long	0x7c030162
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci	/* Prime the accumulator with MMA VSX move to accumulator
1762306a36Sopenharmony_ci	* X-form (xxmtacc) (not needed due to above zeroing) */
1862306a36Sopenharmony_ci	//.long 0x7c010162
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci	/* xvi16ger2s */
2162306a36Sopenharmony_ci	.long	0xec042958
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci	/* Deprime the accumulator - xxmfacc 0 */
2462306a36Sopenharmony_ci	.long 0x7c000162
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	/* Store result in image passed in r5 */
2762306a36Sopenharmony_ci	stxvw4x	0,0,5
2862306a36Sopenharmony_ci	addi	5,5,16
2962306a36Sopenharmony_ci	stxvw4x	1,0,5
3062306a36Sopenharmony_ci	addi	5,5,16
3162306a36Sopenharmony_ci	stxvw4x	2,0,5
3262306a36Sopenharmony_ci	addi	5,5,16
3362306a36Sopenharmony_ci	stxvw4x	3,0,5
3462306a36Sopenharmony_ci	addi	5,5,16
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci	blr
37