void aarch64_init_builtins (void) { tree ftype_set_fpr = build_function_type_list (void_type_node, unsigned_type_node, NULL); tree ftype_get_fpr = build_function_type_list (unsigned_type_node, NULL); aarch64_builtin_decls[AARCH64_BUILTIN_GET_FPCR] = add_builtin_function ("__builtin_aarch64_get_fpcr", ftype_get_fpr, AARCH64_BUILTIN_GET_FPCR, BUILT_IN_MD, NULL, NULL_TREE); aarch64_builtin_decls[AARCH64_BUILTIN_SET_FPCR] = add_builtin_function ("__builtin_aarch64_set_fpcr", ftype_set_fpr, AARCH64_BUILTIN_SET_FPCR, BUILT_IN_MD, NULL, NULL_TREE); aarch64_builtin_decls[AARCH64_BUILTIN_GET_FPSR] = add_builtin_function ("__builtin_aarch64_get_fpsr", ftype_get_fpr, AARCH64_BUILTIN_GET_FPSR, BUILT_IN_MD, NULL, NULL_TREE); aarch64_builtin_decls[AARCH64_BUILTIN_SET_FPSR] = add_builtin_function ("__builtin_aarch64_set_fpsr", ftype_set_fpr, AARCH64_BUILTIN_SET_FPSR, BUILT_IN_MD, NULL, NULL_TREE); if (TARGET_SIMD) aarch64_init_simd_builtins (); if (TARGET_CRC32) aarch64_init_crc32_builtins (); }
static bool aarch64_pragma_target_parse (tree args, tree pop_target) { /* If args is not NULL then process it and setup the target-specific information that it specifies. */ if (args) { if (!aarch64_process_target_attr (args, "pragma")) return false; aarch64_override_options_internal (&global_options); } /* args is NULL, restore to the state described in pop_target. */ else { pop_target = pop_target ? pop_target : target_option_default_node; cl_target_option_restore (&global_options, TREE_TARGET_OPTION (pop_target)); } target_option_current_node = build_target_option_node (&global_options); aarch64_reset_previous_fndecl (); /* For the definitions, ensure all newly defined macros are considered as used for -Wunused-macros. There is no point warning about the compiler predefined macros. */ cpp_options *cpp_opts = cpp_get_options (parse_in); unsigned char saved_warn_unused_macros = cpp_opts->warn_unused_macros; cpp_opts->warn_unused_macros = 0; aarch64_update_cpp_builtins (parse_in); cpp_opts->warn_unused_macros = saved_warn_unused_macros; /* Initialize SIMD builtins if we haven't already. Set current_target_pragma to NULL for the duration so that the builtin initialization code doesn't try to tag the functions being built with the attributes specified by any current pragma, thus going into an infinite recursion. */ if (TARGET_SIMD) { tree saved_current_target_pragma = current_target_pragma; current_target_pragma = NULL; aarch64_init_simd_builtins (); current_target_pragma = saved_current_target_pragma; } return true; }