1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include<stdio.h>
2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include<time.h>
3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include<stdlib.h>
4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include<unistd.h>
5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint stck(unsigned long *addr)
7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	int cc;
9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	asm volatile (	"stck	%0\n"
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			"ipm	%1\n"
11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			"srl	%1,28\n"
12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		      :"=Q" (*addr), "=d"(cc)::"memory", "cc");
13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	return cc;
14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovunsigned long clockticks_in_msec(unsigned long b, unsigned long a)
17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	return (b - a) / 4096000UL;
19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint main()
22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	int cc;
25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned long start, end, diff;
26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	cc = stck(&start);
28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	if (cc)
29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		printf("cc != 0!\n");
30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	sleep(1);
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	cc = stck(&end);
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	if (cc)
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		printf("cc != 0!\n");
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	diff = clockticks_in_msec(end, start);
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	if (diff >= 1000 && diff < 1500)
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		printf("OK.....Testcase passed\n");
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	else
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		printf("FAILED.....Testcase failed\n");
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	return 0;
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
42