mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-18 21:36:22 +00:00
96 lines
1.4 KiB
C
96 lines
1.4 KiB
C
#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;
|
|
}
|
|
|