Home | History | Annotate | Download | only in s390x
      1 #include <limits.h>
      2 #include <stdio.h>
      3 
      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 
     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 
     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 
     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 
     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 
     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 
     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