1#include <stdio.h>
2
3/* Test BFP comparison for  32/64-bit. */
4
5void 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
21void 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
37int 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