brintos

brintos / linux-shallow public Read only

0
0
Text · 1.3 KiB · 1dd9419 Raw
69 lines · c
1// SPDX-License-Identifier: GPL-2.0-only2 3#include "../../kselftest.h"4#define MAX_VSIZE	(8192 * 32)5 6void dump(char *ptr, int size)7{8	int i = 0;9 10	for (i = 0; i < size; i++) {11		if (i != 0) {12			if (i % 16 == 0)13				printf("\n");14			else if (i % 8 == 0)15				printf("  ");16		}17		printf("%02x ", ptr[i]);18	}19	printf("\n");20}21 22int main(void)23{24	int i;25	unsigned long vl;26	char *datap, *tmp;27 28	datap = malloc(MAX_VSIZE);29	if (!datap) {30		ksft_test_result_fail("fail to allocate memory for size = %d\n", MAX_VSIZE);31		exit(-1);32	}33 34	tmp = datap;35	asm volatile (36		".option push\n\t"37		".option arch, +v\n\t"38		"vsetvli	%0, x0, e8, m8, ta, ma\n\t"39		"vse8.v		v0, (%2)\n\t"40		"add		%1, %2, %0\n\t"41		"vse8.v		v8, (%1)\n\t"42		"add		%1, %1, %0\n\t"43		"vse8.v		v16, (%1)\n\t"44		"add		%1, %1, %0\n\t"45		"vse8.v		v24, (%1)\n\t"46		".option pop\n\t"47		: "=&r" (vl), "=r" (tmp) : "r" (datap) : "memory");48 49	ksft_print_msg("vl = %lu\n", vl);50 51	if (datap[0] != 0x00 && datap[0] != 0xff) {52		ksft_test_result_fail("v-regesters are not properly initialized\n");53		dump(datap, vl * 4);54		exit(-1);55	}56 57	for (i = 1; i < vl * 4; i++) {58		if (datap[i] != datap[0]) {59			ksft_test_result_fail("detect stale values on v-regesters\n");60			dump(datap, vl * 4);61			exit(-2);62		}63	}64 65	free(datap);66	ksft_exit_pass();67	return 0;68}69