1 //! RISC-V Settings.
2 
3 use crate::settings::{self, detail, Builder};
4 use core::fmt;
5 
6 // Include code generated by `cranelift-codegen/meta/src/gen_settings.rs`. This file contains a
7 // public `Flags` struct with an impl for all of the settings defined in
8 // `cranelift-codegen/meta/src/isa/riscv/mod.rs`.
9 include!(concat!(env!("OUT_DIR"), "/settings-riscv.rs"));
10 
11 #[cfg(test)]
12 mod tests {
13     use super::{builder, Flags};
14     use crate::settings::{self, Configurable};
15     use alloc::string::ToString;
16 
17     #[test]
display_default()18     fn display_default() {
19         let shared = settings::Flags::new(settings::builder());
20         let b = builder();
21         let f = Flags::new(&shared, b);
22         assert_eq!(
23             f.to_string(),
24             "[riscv]\n\
25              supports_m = false\n\
26              supports_a = false\n\
27              supports_f = false\n\
28              supports_d = false\n\
29              enable_m = true\n\
30              enable_e = false\n"
31         );
32         // Predicates are not part of the Display output.
33         assert_eq!(f.full_float(), false);
34     }
35 
36     #[test]
predicates()37     fn predicates() {
38         let mut sb = settings::builder();
39         sb.set("enable_simd", "true").unwrap();
40         let shared = settings::Flags::new(sb);
41         let mut b = builder();
42         b.enable("supports_f").unwrap();
43         b.enable("supports_d").unwrap();
44         let f = Flags::new(&shared, b);
45         assert_eq!(f.full_float(), true);
46 
47         let mut sb = settings::builder();
48         sb.set("enable_simd", "false").unwrap();
49         let shared = settings::Flags::new(sb);
50         let mut b = builder();
51         b.enable("supports_f").unwrap();
52         b.enable("supports_d").unwrap();
53         let f = Flags::new(&shared, b);
54         assert_eq!(f.full_float(), false);
55     }
56 }
57