Home | History | Annotate | Download | only in s390x
      1 #include <stdio.h>
      2 
      3 /* Test various BFP ops:
      4    - square root
      5    - load negative
      6    - load positive
      7    - load complement
      8 */
      9 
     10 void sqebr(float in)
     11 {
     12    float out;
     13 
     14    __asm__ volatile("sqebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
     15    printf("sqebr  %f  -> %f\n", in, out);
     16 }
     17 
     18 void sqdbr(double in)
     19 {
     20    double out;
     21 
     22    __asm__ volatile("sqdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
     23    printf("sqdbr  %f  -> %f\n", in, out);
     24 }
     25 
     26 void lnebr(float in)
     27 {
     28    float out;
     29 
     30    __asm__ volatile("lnebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
     31    printf("lnebr  %f  -> %f\n", in, out);
     32 }
     33 
     34 void lndbr(double in)
     35 {
     36    double out;
     37 
     38    __asm__ volatile("lndbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
     39    printf("lndbr  %f  -> %f\n", in, out);
     40 }
     41 
     42 void lpebr(float in)
     43 {
     44    float out;
     45 
     46    __asm__ volatile("lpebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
     47    printf("lpebr  %f  -> %f\n", in, out);
     48 }
     49 
     50 void lpdbr(double in)
     51 {
     52    double out;
     53 
     54    __asm__ volatile("lpdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
     55    printf("lpdbr  %f  -> %f\n", in, out);
     56 }
     57 
     58 void lcebr(float in)
     59 {
     60    float out;
     61 
     62    __asm__ volatile("lcebr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
     63    printf("lcebr  %f  -> %f\n", in, out);
     64 }
     65 
     66 void lcdbr(double in)
     67 {
     68    double out;
     69 
     70    __asm__ volatile("lcdbr %[out],%[in]" : [out]"=f"(out) : [in]"f"(in));
     71    printf("lcdbr  %f  -> %f\n", in, out);
     72 }
     73 
     74 int main(void)
     75 {
     76    // square root
     77    sqebr(121.0f);  // 4 byte values
     78    sqdbr(144.0);   // 8 bytes values
     79 
     80    // load negative
     81    lnebr(-2.5f);   // 4 byte values
     82    lnebr(12.5f);   // 4 byte values
     83 
     84    lndbr(-0.5);    // 8 byte values
     85    lndbr(42.5);    // 8 byte values
     86 
     87    // load positive
     88    lpebr(-2.5f);   // 4 byte values
     89    lpebr(12.5f);   // 4 byte values
     90 
     91    lpdbr(-0.5);    // 8 byte values
     92    lpdbr(42.5);    // 8 byte values
     93 
     94    // load complement
     95    lcebr(-23.5f);  // 4 byte values
     96    lcebr(123.5f);  // 4 byte values
     97 
     98    lcdbr(-17.5);   // 8 byte values
     99    lcdbr(234.5);   // 8 byte values
    100 
    101    return 0;
    102 }
    103