1 use crate::cdsl::isa::TargetIsa; 2 use crate::cdsl::settings::SettingGroupBuilder; 3 4 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 58 TargetIsa::new("arm64", settings.build()) 59 } 60