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