Home | History | Annotate | Download | only in s390x
      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