66//@[riscv32] needs-llvm-components: riscv
77//@ compile-flags: -C target-feature=+d
88
9- #![ feature( no_core, lang_items, rustc_attrs) ]
9+ #![ feature( no_core, lang_items, rustc_attrs, f16 ) ]
1010#![ crate_type = "rlib" ]
1111#![ no_core]
1212#![ allow( asm_sub_register) ]
@@ -33,6 +33,7 @@ type ptr = *mut u8;
3333
3434impl Copy for i8 { }
3535impl Copy for i16 { }
36+ impl Copy for f16 { }
3637impl Copy for i32 { }
3738impl Copy for f32 { }
3839impl Copy for i64 { }
@@ -103,6 +104,12 @@ macro_rules! check_reg {
103104// CHECK: #NO_APP
104105check ! ( reg_i8 i8 reg "mv" ) ;
105106
107+ // CHECK-LABEL: reg_f16:
108+ // CHECK: #APP
109+ // CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}}
110+ // CHECK: #NO_APP
111+ check ! ( reg_f16 f16 reg "mv" ) ;
112+
106113// CHECK-LABEL: reg_i16:
107114// CHECK: #APP
108115// CHECK: mv {{[a-z0-9]+}}, {{[a-z0-9]+}}
@@ -141,6 +148,12 @@ check!(reg_f64 f64 reg "mv");
141148// CHECK: #NO_APP
142149check ! ( reg_ptr ptr reg "mv" ) ;
143150
151+ // CHECK-LABEL: freg_f16:
152+ // CHECK: #APP
153+ // CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}}
154+ // CHECK: #NO_APP
155+ check ! ( freg_f16 f16 freg "fmv.s" ) ;
156+
144157// CHECK-LABEL: freg_f32:
145158// CHECK: #APP
146159// CHECK: fmv.s f{{[a-z0-9]+}}, f{{[a-z0-9]+}}
@@ -165,6 +178,12 @@ check_reg!(a0_i8 i8 "a0" "mv");
165178// CHECK: #NO_APP
166179check_reg ! ( a0_i16 i16 "a0" "mv" ) ;
167180
181+ // CHECK-LABEL: a0_f16:
182+ // CHECK: #APP
183+ // CHECK: mv a0, a0
184+ // CHECK: #NO_APP
185+ check_reg ! ( a0_f16 f16 "a0" "mv" ) ;
186+
168187// CHECK-LABEL: a0_i32:
169188// CHECK: #APP
170189// CHECK: mv a0, a0
@@ -197,6 +216,12 @@ check_reg!(a0_f64 f64 "a0" "mv");
197216// CHECK: #NO_APP
198217check_reg ! ( a0_ptr ptr "a0" "mv" ) ;
199218
219+ // CHECK-LABEL: fa0_f16:
220+ // CHECK: #APP
221+ // CHECK: fmv.s fa0, fa0
222+ // CHECK: #NO_APP
223+ check_reg ! ( fa0_f16 f16 "fa0" "fmv.s" ) ;
224+
200225// CHECK-LABEL: fa0_f32:
201226// CHECK: #APP
202227// CHECK: fmv.s fa0, fa0
0 commit comments