1 #include <stdio.h> 2 3 /* Test BFP comparison for 32/64-bit. */ 4 5 void cebr(float v1, float v2) 6 { 7 int cc; 8 9 __asm__ volatile("cebr %[r1],%[r2]\n\t" 10 "ipm %[psw]\n\t" 11 "srl %[psw],28\n\t" 12 : [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc"); 13 if (cc == 0) 14 printf("cfebr: %f == %f\n", v1, v2); 15 if (cc == 1) 16 printf("cfebr: %f < %f\n", v1, v2); 17 if (cc == 2) 18 printf("cfebr: %f > %f\n", v1, v2); 19 } 20 21 void cdbr(double v1, double v2) 22 { 23 int cc; 24 25 __asm__ volatile("cdbr %[r1],%[r2]\n\t" 26 "ipm %[psw]\n\t" 27 "srl %[psw],28\n\t" 28 : [psw]"=d"(cc) : [r1]"f"(v1), [r2]"f"(v2) : "cc"); 29 if (cc == 0) 30 printf("cdebr: %f == %f\n", v1, v2); 31 if (cc == 1) 32 printf("cdebr: %f < %f\n", v1, v2); 33 if (cc == 2) 34 printf("cdebr: %f > %f\n", v1, v2); 35 } 36 37 int main(void) 38 { 39 float f1, f2; 40 float d1, d2; 41 42 // compare 4 bytes 43 f1 = 3.14f; 44 f2 = f1; 45 cebr(f1, f2); 46 f2 = f1 + 10.; 47 cebr(f1, f2); 48 f2 = f1 - 100.; 49 cebr(f1, f2); 50 51 // compare 8 bytes 52 d1 = 2.78; 53 d2 = d1; 54 cdbr(d1, d2); 55 d2 = d1 + 10.; 56 cdbr(d1, d2); 57 d2 = d1 - 100.; 58 cdbr(d1, d2); 59 60 return 0; 61 } 62