lpr.c revision b5b87408c0c99f9f6938d8cd921e2a5f420577c4
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