1 #include <stdio.h>
2
3 /* Test BFP comparison for 32/64-bit. */
4
cebr(float v1,float v2)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
cdbr(double v1,double v2)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
main(void)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