Home | History | Annotate | Download | only in s390x
      1 #include <stdio.h>
      2 
      3 /* Simple test to see that basic operators are mapped
      4    correctly. Uses default rounding mode. */
      5 
      6 volatile double d1, d2;
      7 volatile float f1, f2;
      8 
      9 void fadd8(void)
     10 {
     11    printf("%f + %f = %f\n", d1, d2, d1 + d2);
     12 }
     13 
     14 void fsub8(void)
     15 {
     16    printf("%f - %f = %f\n", d1, d2, d1 - d2);
     17 }
     18 
     19 void fmul8(void)
     20 {
     21    printf("%f * %f = %f\n", d1, d2, d1 * d2);
     22 }
     23 
     24 void fdiv8(void)
     25 {
     26    printf("%f / %f = %f\n", d1, d2, d1 / d2);
     27 }
     28 
     29 void fadd4(void)
     30 {
     31    register float r1 asm("f1") = f1;
     32    register float r2 asm("f2") = f2;
     33 
     34    __asm__ volatile ("aebr %[r1],%[r2]\n\t"
     35                      : [r1] "+f"(r1)
     36                      : [r2] "f"(r2) : "cc");
     37    printf("%f + %f = %f\n", f1, f2, r1);
     38 }
     39 
     40 void fsub4(void)
     41 {
     42    register float r1 asm("f1") = f1;
     43    register float r2 asm("f2") = f2;
     44 
     45    __asm__ volatile ("sebr %[r1],%[r2]\n\t"
     46                      : [r1] "+f"(r1)
     47                      : [r2] "f"(r2) : "cc");
     48    printf("%f - %f = %f\n", f1, f2, r1);
     49 }
     50 
     51 void fmul4(void)
     52 {
     53    register float r1 asm("f1") = f1;
     54    register float r2 asm("f2") = f2;
     55 
     56    __asm__ volatile ("meebr %[r1],%[r2]\n\t"
     57                      : [r1] "+f"(r1)
     58                      : [r2] "f"(r2) : "cc");
     59    printf("%f * %f = %f\n", f1, f2, r1);
     60 }
     61 
     62 void fdiv4(void)
     63 {
     64    register float r1 asm("f1") = f1;
     65    register float r2 asm("f2") = f2;
     66 
     67    __asm__ volatile ("debr %[r1],%[r2]\n\t"
     68                      : [r1] "+f"(r1)
     69                      : [r2] "f"(r2) : "cc");
     70    printf("%f / %f = %f\n", f1, f2, r1);
     71 }
     72 
     73 
     74 int main()
     75 {
     76    printf("double arithmetic\n");
     77    d1 = 10.5;
     78    d2 =  1.25;
     79    fadd8();
     80    fsub8();
     81    fmul8();
     82    fdiv8();
     83 
     84    printf("float arithmetic\n");
     85    f1 = 10.5f;
     86    f2 =  1.25f;
     87    fadd4();
     88    fsub4();
     89    fmul4();
     90    fdiv4();
     91 
     92    return 0;
     93 }
     94