#include <limits.h> #include <stdio.h> int lpr(int org, int *new) { int _new, cc; asm volatile( "lpr %0,%2\n\t" "ipm %1\n\t" "srl %1,28\n\t" : "=d" (_new), "=d" (cc) : "d" (org) : "cc"); *new = _new; return cc; } int lpgr(unsigned long org, unsigned long *new) { unsigned long _new; int cc; asm volatile( "lpgr %0,%2\n\t" "ipm %1\n\t" "srl %1,28\n\t" : "=d" (_new), "=d" (cc) : "d" (org) : "cc"); *new = _new; return cc; } int lpgfr(unsigned long org, unsigned long *new) { unsigned long _new; int cc; asm volatile( "lpgfr %0,%2\n\t" "ipm %1\n\t" "srl %1,28\n\t" : "=d" (_new), "=d" (cc) : "d" (org) : "cc"); *new = _new; return cc; } void t32(int value) { int n,cc; cc = lpr(value, &n); printf("new: %d cc: %d\n", n, cc); } void t64(unsigned long value) { int cc; unsigned long n; cc = lpgr(value, &n); printf("new: %ld cc: %d\n", n, cc); } void t3264(unsigned long value) { int cc; unsigned long n; cc = lpgfr(value, &n); printf("new: %ld cc: %d\n", n, cc); } int main() { printf("lpr\n"); t32(0); t32(1); t32(-1); t32(INT_MAX); t32(INT_MIN); t32(UINT_MAX); printf("lpgr\n"); t64(0); t64(1); t64(-1); t64(INT_MAX); t64(INT_MIN); t64(UINT_MAX); t64(LONG_MAX); t64(LONG_MIN); t64(ULONG_MAX); printf("lpgfr\n"); t3264(0); t3264(1); t64(-1); t3264(INT_MAX); t3264(INT_MIN); t3264(UINT_MAX); t3264(LONG_MAX); t3264(LONG_MIN); t3264(ULONG_MAX); return 0; }