blob: 423a071d1a54167b7056c08e4327ecb29a3a37ca [file] [log] [blame]
/* { dg-do compile } */
/* { dg-options "-march=rv32i -mabi=ilp32 -O" { target { rv32 } } } */
/* { dg-options "-march=rv64i -mabi=lp64 -O" { target { rv64 } } } */
/* 1) float -> BF16
* hf/sf/df/tf -> bf (call __trunc[h|s|d|t]fbf2)
*/
/* 2) BF16 -> float
* bf -> hf == sf -> hf (call __truncsfhf2)
* bf -> sf (call __extendbfsf2)
* bf -> df == bf -> sf -> df (call __extendbfsf2 && __extendsfdf2)
* bf -> tf == bf -> sf -> tf (call __extendbfsf2 && __extendsftf2)
*/
extern __bf16 bf;
extern _Float16 hf;
extern float sf;
extern double df;
extern long double tf;
void hf_to_bf () { bf = hf; }
void bf_to_hf () { hf = bf; }
void sf_to_bf () { bf = sf; }
void bf_to_sf () { sf = bf; }
void df_to_bf () { bf = df; }
void bf_to_df () { df = bf; }
void tf_to_bf () { bf = tf; }
void bf_to_tf () { tf = bf; }
/* { dg-final { scan-assembler-times "call\t__extendbfsf2" 3 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__extendbfsf2" 3 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__extendsfdf2" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__extendsfdf2" 1 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__extendsftf2" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__extendsftf2" 1 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__truncsfhf2" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__truncsfhf2" 1 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__trunchfbf2" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__trunchfbf2" 1 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__truncsfbf2" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__truncsfbf2" 1 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__truncdfbf2" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__truncdfbf2" 1 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__trunctfbf2" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__trunctfbf2" 1 { target { rv64 } } } } */