blob: 2c37302e2947c8579a5b802952e8b9499e693fd3 [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) Integer -> BF16
* qi/hi/si -> bf (call __floatsibf)
* uqi/uhi/usi -> bf (call __floatunsibf)
* di/ti -> bf (call __float[d|t]ibf)
* udi/uti -> bf (call __floatun[d|t]ibf)
*/
/* 2) BF16 -> Integer
* bf -> qi/hi/si (call __fixsfsi)
* bf -> uqi/uhi/usi (call __fixunssfsi)
* bf -> di/ti (call __fixsf[d|t]i)
* bf -> udi/uti (call __fixunssf[d|t]i)
*/
extern __bf16 bf;
extern signed char qi;
extern unsigned char uqi;
extern signed short hi;
extern unsigned short uhi;
extern signed int si;
extern unsigned int usi;
extern signed long long di;
extern unsigned long long udi;
void qi_to_bf () { bf = qi; }
void uqi_to_bf () { bf = uqi; }
void bf_to_qi () { qi = bf; }
void bf_to_uqi () { uqi = bf; }
void hi_to_bf () { bf = hi; }
void uhi_to_bf () { bf = uhi; }
void bf_to_hi () { hi = bf; }
void bf_to_uhi () { uhi = bf; }
void si_to_bf () { bf = si; }
void usi_to_bf () { bf = usi; }
void bf_to_si () { si = bf; }
void bf_to_usi () { usi = bf; }
void di_to_bf () { bf = di; }
void udi_to_bf () { bf = udi; }
void bf_to_di () { di = bf; }
void bf_to_udi () { udi = bf; }
#if __riscv_xlen == 64
extern signed __int128 ti;
extern unsigned __int128 uti;
void ti_to_bf () { bf = ti; } /* { dg-final { scan-assembler-times "call\t__floattibf" 1 { target { rv64 } } } } */
void uti_to_bf () { bf = uti; } /* { dg-final { scan-assembler-times "call\t__floatuntibf" 1 { target { rv64 } } } } */
void bf_to_ti () { ti = bf; } /* { dg-final { scan-assembler-times "call\t__fixsfti" 1 { target { rv64 } } } } */
void bf_to_uti () { uti = bf; } /* { dg-final { scan-assembler-times "call\t__fixunssfti" 1 { target { rv64 } } } } */
#endif
/* { dg-final { scan-assembler-times "call\t__fixsfsi" 3 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__fixsfsi" 3 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__fixsfdi" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__fixsfdi" 1 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__fixunssfsi" 3 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__fixunssfsi" 3 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__fixunssfdi" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__fixunssfdi" 1 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__floatsibf" 3 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__floatsibf" 3 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__floatdibf" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__floatdibf" 1 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__floatunsibf" 3 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__floatunsibf" 3 { target { rv64 } } } } */
/* { dg-final { scan-assembler-times "call\t__floatundibf" 1 { target { rv32 } } } } */
/* { dg-final { scan-assembler-times "call\t__floatundibf" 1 { target { rv64 } } } } */