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