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