static bool jit_langhook_init (void) { gcc_assert (gcc::jit::active_playback_ctxt); JIT_LOG_SCOPE (gcc::jit::active_playback_ctxt->get_logger ()); static bool registered_root_tab = false; if (!registered_root_tab) { ggc_register_root_tab (jit_root_tab); registered_root_tab = true; } build_common_tree_nodes (false, false); /* I don't know why this has to be done explicitly. */ void_list_node = build_tree_list (NULL_TREE, void_type_node); build_common_builtin_nodes (); /* The default precision for floating point numbers. This is used for floating point constants with abstract type. This may eventually be controllable by a command line option. */ mpfr_set_default_prec (256); return true; }
static bool go_langhook_init (void) { build_common_tree_nodes (false, false); /* I don't know why this has to be done explicitly. */ void_list_node = build_tree_list (NULL_TREE, void_type_node); /* We must create the gogo IR after calling build_common_tree_nodes (because Gogo::define_builtin_function_trees refers indirectly to, e.g., unsigned_char_type_node) but before calling build_common_builtin_nodes (because it calls, indirectly, go_type_for_size). */ go_create_gogo (INT_TYPE_SIZE, POINTER_SIZE, go_pkgpath, go_prefix, go_relative_import_path); build_common_builtin_nodes (); /* The default precision for floating point numbers. This is used for floating point constants with abstract type. This may eventually be controllable by a command line option. */ mpfr_set_default_prec (256); /* Go uses exceptions. */ using_eh_for_cleanups (); return true; }
/* language dependent parser setup */ bool slang_init (void) { build_common_tree_nodes (false, false); return true; }
/* Language hooks. */ static bool gpy_langhook_init (void) { build_common_tree_nodes (false, false); // build_common_builtin_nodes (); // shouldnt have to do this... void_list_node = build_tree_list (NULL_TREE, void_type_node); // init some internal gccpy types gpy_dot_types_init (); /* The default precision for floating point numbers. This is used for floating point constants with abstract type. This may eventually be controllable by a command line option. */ mpfr_set_default_prec (128); // for exceptions using_eh_for_cleanups (); return true; }
/* Create tree nodes for the basic scalar types of Fortran 95, and some nodes representing standard constants (0, 1, (void *) 0). Initialize the global binding level. Make definitions for built-in primitive functions. */ static void gfc_init_decl_processing (void) { current_function_decl = NULL; current_binding_level = NULL_BINDING_LEVEL; free_binding_level = NULL_BINDING_LEVEL; /* Make the binding_level structure for global names. We move all variables that are in a COMMON block to this binding level. */ pushlevel (); global_binding_level = current_binding_level; /* Build common tree nodes. char_type_node is unsigned because we only use it for actual characters, not for INTEGER(1). */ build_common_tree_nodes (false); void_list_node = build_tree_list (NULL_TREE, void_type_node); /* Set up F95 type nodes. */ gfc_init_kinds (); gfc_init_types (); gfc_init_c_interop_kinds (); }
static bool ortho_init (void) { tree n; input_location = BUILTINS_LOCATION; /* Create a global binding. */ push_binding (); build_common_tree_nodes (0); size_type_node = type_for_size (GET_MODE_BITSIZE (Pmode), 1); set_sizetype (size_type_node); build_common_tree_nodes_2 (0); n = build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("int"), integer_type_node); push_decl (n); n = build_decl (UNKNOWN_LOCATION, TYPE_DECL, get_identifier ("char"), char_type_node); push_decl (n); /* Create alloca builtin. */ { tree args_type = tree_cons (NULL_TREE, size_type_node, void_list_node); tree func_type = build_function_type (ptr_type_node, args_type); implicit_built_in_decls[BUILT_IN_ALLOCA] = builtin_function ("__builtin_alloca", func_type, BUILT_IN_ALLOCA, BUILT_IN_NORMAL, NULL, NULL_TREE); stack_alloc_function_ptr = build1 (ADDR_EXPR, build_pointer_type (func_type), implicit_built_in_decls[BUILT_IN_ALLOCA]); } { tree ptr_ftype = build_function_type (ptr_type_node, NULL_TREE); implicit_built_in_decls[BUILT_IN_STACK_SAVE] = builtin_function ("__builtin_stack_save", ptr_ftype, BUILT_IN_STACK_SAVE, BUILT_IN_NORMAL, NULL, NULL_TREE); } { tree ftype_ptr; ftype_ptr = build_function_type (void_type_node, tree_cons (NULL_TREE, ptr_type_node, NULL_TREE)); implicit_built_in_decls[BUILT_IN_STACK_RESTORE] = builtin_function ("__builtin_stack_restore", ftype_ptr, BUILT_IN_STACK_RESTORE, BUILT_IN_NORMAL, NULL, NULL_TREE); } { REAL_VALUE_TYPE v; REAL_VALUE_FROM_INT (v, 1, 0, DFmode); real_ldexp (&fp_const_p5, &v, -1); REAL_VALUE_FROM_INT (v, -1, -1, DFmode); real_ldexp (&fp_const_m_p5, &v, -1); REAL_VALUE_FROM_INT (fp_const_zero, 0, 0, DFmode); } ortho_fe_init (); return true; }
static bool ortho_init (void) { tree n; input_location = BUILTINS_LOCATION; /* Create a global binding. Don't use push_binding, as neither a BLOCK nor a BIND_EXPR are needed. */ push_binding (GLOBAL_BINDING); build_common_tree_nodes (0, 0); n = build_decl (input_location, TYPE_DECL, get_identifier ("int"), integer_type_node); pushdecl (n); n = build_decl (input_location, TYPE_DECL, get_identifier ("char"), char_type_node); pushdecl (n); /* Create alloca builtin. */ { tree args_type = tree_cons (NULL_TREE, size_type_node, void_list_node); tree func_type = build_function_type (ptr_type_node, args_type); define_builtin ("__builtin_alloca", func_type, BUILT_IN_ALLOCA, NULL, 0); stack_alloc_function_ptr = build1 (ADDR_EXPR, build_pointer_type (func_type), builtin_decl_implicit (BUILT_IN_ALLOCA)); } { tree ptr_ftype = build_function_type (ptr_type_node, NULL_TREE); define_builtin ("__builtin_stack_save", ptr_ftype, BUILT_IN_STACK_SAVE, NULL, 0); } { tree ftype_ptr = build_function_type_list (void_type_node, ptr_type_node, NULL_TREE); define_builtin ("__builtin_stack_restore", ftype_ptr, BUILT_IN_STACK_RESTORE, NULL, 0); } { tree ftype_ptr = build_function_type_list (void_type_node, NULL_TREE); define_builtin ("__builtin_trap", ftype_ptr, BUILT_IN_TRAP, NULL, ECF_NOTHROW | ECF_LEAF); TREE_THIS_VOLATILE (builtin_decl_explicit (BUILT_IN_TRAP)) = 1; } { REAL_VALUE_TYPE v; REAL_VALUE_FROM_INT (v, 1, 0, DFmode); real_ldexp (&fp_const_p5, &v, -1); REAL_VALUE_FROM_INT (v, -1, -1, DFmode); real_ldexp (&fp_const_m_p5, &v, -1); REAL_VALUE_FROM_INT (fp_const_zero, 0, 0, DFmode); } build_common_builtin_nodes (); // FIXME: this MAY remove the need for creating the builtins above... // Evaluate tree.c / build_common_builtin_nodes (); for each in turn. return true; }