mirror of
https://github.com/ioacademy-jikim/debugging
synced 2025-06-18 13:26:14 +00:00
62 lines
1.2 KiB
C
62 lines
1.2 KiB
C
#include <stdio.h>
|
|
|
|
/* Test BFP comparison for 32/64-bit. */
|
|
|
|
void cebr(float v1, float v2)
|
|
{
|
|
int cc;
|
|
|
|
__asm__ volatile("cebr %[r1],%[r2]\n\t"
|
|
"ipm %[psw]\n\t"
|
|
"srl %[psw],28\n\t"
|
|
: [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc");
|
|
if (cc == 0)
|
|
printf("cfebr: %f == %f\n", v1, v2);
|
|
if (cc == 1)
|
|
printf("cfebr: %f < %f\n", v1, v2);
|
|
if (cc == 2)
|
|
printf("cfebr: %f > %f\n", v1, v2);
|
|
}
|
|
|
|
void cdbr(double v1, double v2)
|
|
{
|
|
int cc;
|
|
|
|
__asm__ volatile("cdbr %[r1],%[r2]\n\t"
|
|
"ipm %[psw]\n\t"
|
|
"srl %[psw],28\n\t"
|
|
: [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc");
|
|
if (cc == 0)
|
|
printf("cdebr: %f == %f\n", v1, v2);
|
|
if (cc == 1)
|
|
printf("cdebr: %f < %f\n", v1, v2);
|
|
if (cc == 2)
|
|
printf("cdebr: %f > %f\n", v1, v2);
|
|
}
|
|
|
|
int main(void)
|
|
{
|
|
float f1, f2;
|
|
float d1, d2;
|
|
|
|
// compare 4 bytes
|
|
f1 = 3.14f;
|
|
f2 = f1;
|
|
cebr(f1, f2);
|
|
f2 = f1 + 10.;
|
|
cebr(f1, f2);
|
|
f2 = f1 - 100.;
|
|
cebr(f1, f2);
|
|
|
|
// compare 8 bytes
|
|
d1 = 2.78;
|
|
d2 = d1;
|
|
cdbr(d1, d2);
|
|
d2 = d1 + 10.;
|
|
cdbr(d1, d2);
|
|
d2 = d1 - 100.;
|
|
cdbr(d1, d2);
|
|
|
|
return 0;
|
|
}
|