1b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <limits.h>
2b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#include <stdio.h>
3b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
4b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint lpr(int org, int *new)
5b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
6b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	int _new, cc;
7b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	asm volatile(	"lpr %0,%2\n\t"
8b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			"ipm %1\n\t"
9b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			"srl %1,28\n\t"
10b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			: "=d" (_new), "=d" (cc)
11b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			: "d" (org)
12b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			: "cc");
13b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	*new = _new;
14b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	return cc;
15b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
16b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
17b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint lpgr(unsigned long org, unsigned long *new)
18b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
19b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned long _new;
20b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        int cc;
21b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	asm volatile(	"lpgr %0,%2\n\t"
22b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			"ipm %1\n\t"
23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			"srl %1,28\n\t"
24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			: "=d" (_new), "=d" (cc)
25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			: "d" (org)
26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			: "cc");
27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	*new = _new;
28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	return cc;
29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint lpgfr(unsigned long org, unsigned long *new)
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned long _new;
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        int cc;
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	asm volatile(	"lpgfr %0,%2\n\t"
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			"ipm %1\n\t"
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			"srl %1,28\n\t"
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			: "=d" (_new), "=d" (cc)
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			: "d" (org)
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov			: "cc");
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	*new = _new;
42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	return cc;
43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid t32(int value)
47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	int n,cc;
49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	cc = lpr(value, &n);
51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("new: %d cc: %d\n", n, cc);
53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid t64(unsigned long value)
56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	int cc;
58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        unsigned long n;
59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	cc = lpgr(value, &n);
61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("new: %ld cc: %d\n", n, cc);
63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovvoid t3264(unsigned long value)
66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	int cc;
68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        unsigned long n;
69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	cc = lpgfr(value, &n);
71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("new: %ld cc: %d\n", n, cc);
73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint main()
78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("lpr\n");
80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	t32(0); t32(1); t32(-1);
81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	t32(INT_MAX); t32(INT_MIN); t32(UINT_MAX);
82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("lpgr\n");
84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	t64(0); t64(1); t64(-1);
85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	t64(INT_MAX); t64(INT_MIN); t64(UINT_MAX);
86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	t64(LONG_MAX); t64(LONG_MIN); t64(ULONG_MAX);
87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("lpgfr\n");
89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	t3264(0); t3264(1); t64(-1);
90b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	t3264(INT_MAX); t3264(INT_MIN); t3264(UINT_MAX);
91b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	t3264(LONG_MAX); t3264(LONG_MIN); t3264(ULONG_MAX);
92b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
93b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	return 0;
94b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
95b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
96