#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;
}