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