1 use crate::cdsl::isa::TargetIsa;
2 use crate::cdsl::settings::SettingGroupBuilder;
3 
define() -> TargetIsa4 pub(crate) fn define() -> TargetIsa {
5     let mut settings = SettingGroupBuilder::new("arm64");
6 
7     settings.add_bool(
8         "has_lse",
9         "Has Large System Extensions (FEAT_LSE) support.",
10         "",
11         false,
12     );
13     settings.add_bool(
14         "has_pauth",
15         "Has Pointer authentication (FEAT_PAuth) support; enables the use of \
16          non-HINT instructions, but does not have an effect on code generation \
17          by itself.",
18         "",
19         false,
20     );
21     settings.add_bool(
22         "has_fp16",
23         "Use half-precision floating point (FEAT_FP16) instructions.",
24         "",
25         false,
26     );
27     settings.add_bool(
28         "sign_return_address_all",
29         "If function return address signing is enabled, then apply it to all \
30         functions; does not have an effect on code generation by itself.",
31         "",
32         false,
33     );
34     settings.add_bool(
35         "sign_return_address",
36         "Use pointer authentication instructions to sign function return \
37          addresses; HINT-space instructions using the A key are generated \
38          and simple functions that do not use the stack are not affected \
39          unless overridden by other settings.",
40         "",
41         false,
42     );
43     settings.add_bool(
44         "sign_return_address_with_bkey",
45         "Use the B key with pointer authentication instructions instead of \
46         the default A key; does not have an effect on code generation by \
47         itself. Some platform ABIs may require this, for example.",
48         "",
49         false,
50     );
51     settings.add_bool(
52         "use_bti",
53         "Use Branch Target Identification (FEAT_BTI) instructions.",
54         "",
55         false,
56     );
57     settings.add_bool(
58         "use_csdb",
59         "Use the `csdb` instruction when spectre mitigations are enabled",
60         "",
61         false,
62     );
63 
64     TargetIsa::new("arm64", settings.build())
65 }
66