C++程序  |  62行  |  1.22 KB

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