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