ChangeLog: * Makefile.def (target_modules): Add libphobos. (flags_to_pass): Add GDC, GDCFLAGS, GDC_FOR_TARGET and GDCFLAGS_FOR_TARGET. (dependencies): Make libphobos depend on libatomic, libbacktrace configure, and zlib configure. (language): Add language d. * Makefile.in: Rebuild. * Makefile.tpl (BUILD_EXPORTS): Add GDC and GDCFLAGS. (HOST_EXPORTS): Add GDC. (POSTSTAGE1_HOST_EXPORTS): Add GDC and GDC_FOR_BUILD. (BASE_TARGET_EXPORTS): Add GDC. (GDC_FOR_BUILD, GDC, GDCFLAGS): New variables. (GDC_FOR_TARGET, GDC_FLAGS_FOR_TARGET): New variables. (EXTRA_HOST_FLAGS): Add GDC. (STAGE1_FLAGS_TO_PASS): Add GDC. (EXTRA_TARGET_FLAGS): Add GDC and GDCFLAGS. * config-ml.in: Treat GDC and GDCFLAGS like other compiler/flag environment variables. * configure: Rebuild. * configure.ac: Add target-libphobos to target_libraries. Set and substitute GDC_FOR_BUILD and GDC_FOR_TARGET. config/ChangeLog: * multi.m4: Set GDC. gcc/ChangeLog: * Makefile.in (tm_d_file_list, tm_d_include_list): New variables. (TM_D_H, D_TARGET_DEF, D_TARGET_H, D_TARGET_OBJS): New variables. (tm_d.h, cs-tm_d.h, default-d.o): New rules. (d/d-target-hooks-def.h, s-d-target-hooks-def-h): New rules. (s-tm-texi): Also check timestamp on d-target.def. (generated_files): Add TM_D_H and d-target-hooks-def.h. (build/genhooks.o): Also depend on D_TARGET_DEF. * config.gcc (tm_d_file, d_target_objs, target_has_targetdm): New variables. * config/aarch64/aarch64-d.c: New file. * config/aarch64/aarch64-linux.h (GNU_USER_TARGET_D_CRITSEC_SIZE): Define. * config/aarch64/aarch64-protos.h (aarch64_d_target_versions): New prototype. * config/aarch64/aarch64.h (TARGET_D_CPU_VERSIONS): Define. * config/aarch64/t-aarch64 (aarch64-d.o): New rule. * config/arm/arm-d.c: New file. * config/arm/arm-protos.h (arm_d_target_versions): New prototype. * config/arm/arm.h (TARGET_D_CPU_VERSIONS): Define. * config/arm/linux-eabi.h (EXTRA_TARGET_D_OS_VERSIONS): Define. * config/arm/t-arm (arm-d.o): New rule. * config/default-d.c: New file. * config/glibc-d.c: New file. * config/gnu.h (GNU_USER_TARGET_D_OS_VERSIONS): Define. * config/i386/i386-d.c: New file. * config/i386/i386-protos.h (ix86_d_target_versions): New prototype. * config/i386/i386.h (TARGET_D_CPU_VERSIONS): Define. * config/i386/linux-common.h (EXTRA_TARGET_D_OS_VERSIONS): Define. (GNU_USER_TARGET_D_CRITSEC_SIZE): Define. * config/i386/t-i386 (i386-d.o): New rule. * config/kfreebsd-gnu.h (GNU_USER_TARGET_D_OS_VERSIONS): Define. * config/kopensolaris-gnu.h (GNU_USER_TARGET_D_OS_VERSIONS): Define. * config/linux-android.h (ANDROID_TARGET_D_OS_VERSIONS): Define. * config/linux.h (GNU_USER_TARGET_D_OS_VERSIONS): Define. * config/mips/linux-common.h (EXTRA_TARGET_D_OS_VERSIONS): Define. * config/mips/mips-d.c: New file. * config/mips/mips-protos.h (mips_d_target_versions): New prototype. * config/mips/mips.h (TARGET_D_CPU_VERSIONS): Define. * config/mips/t-mips (mips-d.o): New rule. * config/powerpcspe/linux.h (GNU_USER_TARGET_D_OS_VERSIONS): Define. * config/powerpcspe/linux64.h (GNU_USER_TARGET_D_OS_VERSIONS): Define. * config/powerpcspe/powerpcspe-d.c: New file. * config/powerpcspe/powerpcspe-protos.h (rs6000_d_target_versions): New prototype. * config/powerpcspe/powerpcspe.c (rs6000_output_function_epilogue): Support GNU D by using 0 as the language type. * config/powerpcspe/powerpcspe.h (TARGET_D_CPU_VERSIONS): Define. * config/powerpcspe/t-powerpcspe (powerpcspe-d.o): New rule. * config/riscv/riscv-d.c: New file. * config/riscv/riscv-protos.h (riscv_d_target_versions): New prototype. * config/riscv/riscv.h (TARGET_D_CPU_VERSIONS): Define. * config/riscv/t-riscv (riscv-d.o): New rule. * config/rs6000/linux.h (GNU_USER_TARGET_D_OS_VERSIONS): Define. * config/rs6000/linux64.h (GNU_USER_TARGET_D_OS_VERSIONS): Define. * config/rs6000/rs6000-d.c: New file. * config/rs6000/rs6000-protos.h (rs6000_d_target_versions): New prototype. * config/rs6000/rs6000.c (rs6000_output_function_epilogue): Support GNU D by using 0 as the language type. * config/rs6000/rs6000.h (TARGET_D_CPU_VERSIONS): Define. * config/rs6000/t-rs6000 (rs6000-d.o): New rule. * config/s390/s390-d.c: New file. * config/s390/s390-protos.h (s390_d_target_versions): New prototype. * config/s390/s390.h (TARGET_D_CPU_VERSIONS): Define. * config/s390/t-s390 (s390-d.o): New rule. * config/sparc/sparc-d.c: New file. * config/sparc/sparc-protos.h (sparc_d_target_versions): New prototype. * config/sparc/sparc.h (TARGET_D_CPU_VERSIONS): Define. * config/sparc/t-sparc (sparc-d.o): New rule. * config/t-glibc (glibc-d.o): New rule. * configure: Regenerated. * configure.ac (tm_d_file): New variable. (tm_d_file_list, tm_d_include_list, d_target_objs): Add substitutes. * doc/contrib.texi (Contributors): Add self for the D frontend. * doc/frontends.texi (G++ and GCC): Mention D as a supported language. * doc/install.texi (Configuration): Mention libphobos as an option for --enable-shared. Mention d as an option for --enable-languages. (Testing): Mention check-d as a target. * doc/invoke.texi (Overall Options): Mention .d, .dd, and .di as file name suffixes. Mention d as a -x option. * doc/sourcebuild.texi (Top Level): Mention libphobos. * doc/standards.texi (Standards): Add section on D language. * doc/tm.texi: Regenerated. * doc/tm.texi.in: Add @node for D language and ABI, and @hook for TARGET_CPU_VERSIONS, TARGET_D_OS_VERSIONS, and TARGET_D_CRITSEC_SIZE. * dwarf2out.c (is_dlang): New function. (gen_compile_unit_die): Use DW_LANG_D for D. (declare_in_namespace): Return module die for D, instead of adding extra declarations into the namespace. (gen_namespace_die): Generate DW_TAG_module for D. (gen_decl_die): Handle CONST_DECLSs for D. (dwarf2out_decl): Likewise. (prune_unused_types_walk_local_classes): Handle DW_tag_interface_type. (prune_unused_types_walk): Handle DW_tag_interface_type same as other kinds of aggregates. * gcc.c (default_compilers): Add entries for .d, .dd and .di. * genhooks.c: Include d/d-target.def. gcc/po/ChangeLog: * EXCLUDES: Add sources from d/dmd. gcc/testsuite/ChangeLog: * gcc.misc-tests/help.exp: Add D to option descriptions check. * gdc.dg/asan/asan.exp: New file. * gdc.dg/asan/gdc272.d: New test. * gdc.dg/compilable.d: New test. * gdc.dg/dg.exp: New file. * gdc.dg/gdc254.d: New test. * gdc.dg/gdc260.d: New test. * gdc.dg/gdc270a.d: New test. * gdc.dg/gdc270b.d: New test. * gdc.dg/gdc282.d: New test. * gdc.dg/gdc283.d: New test. * gdc.dg/imports/gdc170.d: New test. * gdc.dg/imports/gdc231.d: New test. * gdc.dg/imports/gdc239.d: New test. * gdc.dg/imports/gdc241a.d: New test. * gdc.dg/imports/gdc241b.d: New test. * gdc.dg/imports/gdc251a.d: New test. * gdc.dg/imports/gdc251b.d: New test. * gdc.dg/imports/gdc253.d: New test. * gdc.dg/imports/gdc254a.d: New test. * gdc.dg/imports/gdc256.d: New test. * gdc.dg/imports/gdc27.d: New test. * gdc.dg/imports/gdcpkg256/package.d: New test. * gdc.dg/imports/runnable.d: New test. * gdc.dg/link.d: New test. * gdc.dg/lto/lto.exp: New file. * gdc.dg/lto/ltotests_0.d: New test. * gdc.dg/lto/ltotests_1.d: New test. * gdc.dg/runnable.d: New test. * gdc.dg/simd.d: New test. * gdc.test/gdc-test.exp: New file. * lib/gdc-dg.exp: New file. * lib/gdc.exp: New file. libphobos/ChangeLog: * Makefile.am: New file. * Makefile.in: New file. * acinclude.m4: New file. * aclocal.m4: New file. * config.h.in: New file. * configure: New file. * configure.ac: New file. * d_rules.am: New file. * libdruntime/Makefile.am: New file. * libdruntime/Makefile.in: New file. * libdruntime/__entrypoint.di: New file. * libdruntime/__main.di: New file. * libdruntime/gcc/attribute.d: New file. * libdruntime/gcc/backtrace.d: New file. * libdruntime/gcc/builtins.d: New file. * libdruntime/gcc/config.d.in: New file. * libdruntime/gcc/deh.d: New file. * libdruntime/gcc/libbacktrace.d.in: New file. * libdruntime/gcc/unwind/arm.d: New file. * libdruntime/gcc/unwind/arm_common.d: New file. * libdruntime/gcc/unwind/c6x.d: New file. * libdruntime/gcc/unwind/generic.d: New file. * libdruntime/gcc/unwind/package.d: New file. * libdruntime/gcc/unwind/pe.d: New file. * m4/autoconf.m4: New file. * m4/druntime.m4: New file. * m4/druntime/cpu.m4: New file. * m4/druntime/libraries.m4: New file. * m4/druntime/os.m4: New file. * m4/gcc_support.m4: New file. * m4/gdc.m4: New file. * m4/libtool.m4: New file. * src/Makefile.am: New file. * src/Makefile.in: New file. * src/libgphobos.spec.in: New file. * testsuite/Makefile.am: New file. * testsuite/Makefile.in: New file. * testsuite/config/default.exp: New file. * testsuite/lib/libphobos-dg.exp: New file. * testsuite/lib/libphobos.exp: New file. * testsuite/testsuite_flags.in: New file. From-SVN: r265573
256 lines
11 KiB
C++
256 lines
11 KiB
C++
/* Definitions of target machine for GNU compiler, for IBM RS/6000.
|
|
Copyright (C) 2000-2018 Free Software Foundation, Inc.
|
|
Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu)
|
|
|
|
This file is part of GCC.
|
|
|
|
GCC is free software; you can redistribute it and/or modify it
|
|
under the terms of the GNU General Public License as published
|
|
by the Free Software Foundation; either version 3, or (at your
|
|
option) any later version.
|
|
|
|
GCC is distributed in the hope that it will be useful, but WITHOUT
|
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
|
|
License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with GCC; see the file COPYING3. If not see
|
|
<http://www.gnu.org/licenses/>. */
|
|
|
|
#ifndef GCC_RS6000_PROTOS_H
|
|
#define GCC_RS6000_PROTOS_H
|
|
|
|
/* Declare functions in rs6000.c */
|
|
|
|
#ifdef RTX_CODE
|
|
|
|
#ifdef TREE_CODE
|
|
extern void init_cumulative_args (CUMULATIVE_ARGS *, tree, rtx, int, int, int,
|
|
tree, machine_mode);
|
|
#endif /* TREE_CODE */
|
|
|
|
extern bool easy_altivec_constant (rtx, machine_mode);
|
|
extern bool xxspltib_constant_p (rtx, machine_mode, int *, int *);
|
|
extern int vspltis_shifted (rtx);
|
|
extern HOST_WIDE_INT const_vector_elt_as_int (rtx, unsigned int);
|
|
extern bool macho_lo_sum_memory_operand (rtx, machine_mode);
|
|
extern int num_insns_constant (rtx, machine_mode);
|
|
extern int num_insns_constant_wide (HOST_WIDE_INT);
|
|
extern int small_data_operand (rtx, machine_mode);
|
|
extern bool mem_operand_gpr (rtx, machine_mode);
|
|
extern bool mem_operand_ds_form (rtx, machine_mode);
|
|
extern bool toc_relative_expr_p (const_rtx, bool, const_rtx *, const_rtx *);
|
|
extern void validate_condition_mode (enum rtx_code, machine_mode);
|
|
extern bool legitimate_constant_pool_address_p (const_rtx, machine_mode,
|
|
bool);
|
|
extern bool legitimate_indirect_address_p (rtx, int);
|
|
extern bool legitimate_indexed_address_p (rtx, int);
|
|
extern bool avoiding_indexed_address_p (machine_mode);
|
|
|
|
extern rtx rs6000_got_register (rtx);
|
|
extern rtx find_addr_reg (rtx);
|
|
extern rtx gen_easy_altivec_constant (rtx);
|
|
extern const char *output_vec_const_move (rtx *);
|
|
extern const char *rs6000_output_move_128bit (rtx *);
|
|
extern bool rs6000_move_128bit_ok_p (rtx []);
|
|
extern bool rs6000_split_128bit_ok_p (rtx []);
|
|
extern void rs6000_expand_float128_convert (rtx, rtx, bool);
|
|
extern void rs6000_expand_vector_init (rtx, rtx);
|
|
extern void rs6000_expand_vector_set (rtx, rtx, int);
|
|
extern void rs6000_expand_vector_extract (rtx, rtx, rtx);
|
|
extern void rs6000_split_vec_extract_var (rtx, rtx, rtx, rtx, rtx);
|
|
extern rtx rs6000_adjust_vec_address (rtx, rtx, rtx, rtx, machine_mode);
|
|
extern void altivec_expand_vec_perm_le (rtx op[4]);
|
|
extern void rs6000_expand_extract_even (rtx, rtx, rtx);
|
|
extern void rs6000_expand_interleave (rtx, rtx, rtx, bool);
|
|
extern void rs6000_scale_v2df (rtx, rtx, int);
|
|
extern void rs6000_generate_float2_code (bool, rtx, rtx, rtx);
|
|
extern void rs6000_generate_float2_double_code (rtx, rtx, rtx);
|
|
extern void rs6000_generate_vsigned2_code (bool, rtx, rtx, rtx);
|
|
extern int expand_block_clear (rtx[]);
|
|
extern int expand_block_move (rtx[]);
|
|
extern bool expand_block_compare (rtx[]);
|
|
extern bool expand_strn_compare (rtx[], int);
|
|
extern bool rs6000_is_valid_mask (rtx, int *, int *, machine_mode);
|
|
extern bool rs6000_is_valid_and_mask (rtx, machine_mode);
|
|
extern bool rs6000_is_valid_shift_mask (rtx, rtx, machine_mode);
|
|
extern bool rs6000_is_valid_insert_mask (rtx, rtx, machine_mode);
|
|
extern const char *rs6000_insn_for_and_mask (machine_mode, rtx *, bool);
|
|
extern const char *rs6000_insn_for_shift_mask (machine_mode, rtx *, bool);
|
|
extern const char *rs6000_insn_for_insert_mask (machine_mode, rtx *, bool);
|
|
extern bool rs6000_is_valid_2insn_and (rtx, machine_mode);
|
|
extern void rs6000_emit_2insn_and (machine_mode, rtx *, bool, int);
|
|
extern int registers_ok_for_quad_peep (rtx, rtx);
|
|
extern int mems_ok_for_quad_peep (rtx, rtx);
|
|
extern bool gpr_or_gpr_p (rtx, rtx);
|
|
extern bool direct_move_p (rtx, rtx);
|
|
extern bool quad_address_p (rtx, machine_mode, bool);
|
|
extern bool quad_load_store_p (rtx, rtx);
|
|
extern bool fusion_gpr_load_p (rtx, rtx, rtx, rtx);
|
|
extern void expand_fusion_gpr_load (rtx *);
|
|
extern void emit_fusion_addis (rtx, rtx);
|
|
extern void emit_fusion_load_store (rtx, rtx, rtx, const char *);
|
|
extern const char *emit_fusion_gpr_load (rtx, rtx);
|
|
extern bool fusion_p9_p (rtx, rtx, rtx, rtx);
|
|
extern void expand_fusion_p9_load (rtx *);
|
|
extern void expand_fusion_p9_store (rtx *);
|
|
extern const char *emit_fusion_p9_load (rtx, rtx, rtx);
|
|
extern const char *emit_fusion_p9_store (rtx, rtx, rtx);
|
|
extern enum reg_class (*rs6000_preferred_reload_class_ptr) (rtx,
|
|
enum reg_class);
|
|
extern enum reg_class (*rs6000_secondary_reload_class_ptr) (enum reg_class,
|
|
machine_mode,
|
|
rtx);
|
|
extern void rs6000_secondary_reload_inner (rtx, rtx, rtx, bool);
|
|
extern void rs6000_secondary_reload_gpr (rtx, rtx, rtx, bool);
|
|
|
|
|
|
extern int ccr_bit (rtx, int);
|
|
extern void rs6000_output_function_entry (FILE *, const char *);
|
|
extern void print_operand (FILE *, rtx, int);
|
|
extern void print_operand_address (FILE *, rtx);
|
|
extern enum rtx_code rs6000_reverse_condition (machine_mode,
|
|
enum rtx_code);
|
|
extern rtx rs6000_emit_eqne (machine_mode, rtx, rtx, rtx);
|
|
extern void rs6000_emit_sCOND (machine_mode, rtx[]);
|
|
extern void rs6000_emit_cbranch (machine_mode, rtx[]);
|
|
extern char * output_cbranch (rtx, const char *, int, rtx_insn *);
|
|
extern const char * output_probe_stack_range (rtx, rtx, rtx);
|
|
extern void rs6000_emit_dot_insn (rtx dst, rtx src, int dot, rtx ccreg);
|
|
extern bool rs6000_emit_set_const (rtx, rtx);
|
|
extern int rs6000_emit_cmove (rtx, rtx, rtx, rtx);
|
|
extern int rs6000_emit_int_cmove (rtx, rtx, rtx, rtx);
|
|
extern int rs6000_emit_vector_cond_expr (rtx, rtx, rtx, rtx, rtx, rtx);
|
|
extern void rs6000_emit_minmax (rtx, enum rtx_code, rtx, rtx);
|
|
extern void rs6000_expand_atomic_compare_and_swap (rtx op[]);
|
|
extern rtx swap_endian_selector_for_mode (machine_mode mode);
|
|
|
|
extern void rs6000_expand_atomic_exchange (rtx op[]);
|
|
extern void rs6000_expand_atomic_op (enum rtx_code, rtx, rtx, rtx, rtx, rtx);
|
|
extern void rs6000_emit_swdiv (rtx, rtx, rtx, bool);
|
|
extern void rs6000_emit_swsqrt (rtx, rtx, bool);
|
|
extern void output_toc (FILE *, rtx, int, machine_mode);
|
|
extern rtx rs6000_longcall_ref (rtx);
|
|
extern void rs6000_fatal_bad_address (rtx);
|
|
extern rtx create_TOC_reference (rtx, rtx);
|
|
extern void rs6000_split_multireg_move (rtx, rtx);
|
|
extern void rs6000_emit_le_vsx_permute (rtx, rtx, machine_mode);
|
|
extern void rs6000_emit_le_vsx_move (rtx, rtx, machine_mode);
|
|
extern bool valid_sf_si_move (rtx, rtx, machine_mode);
|
|
extern void rs6000_emit_move (rtx, rtx, machine_mode);
|
|
extern rtx (*rs6000_legitimize_reload_address_ptr) (rtx, machine_mode,
|
|
int, int, int, int *);
|
|
extern bool rs6000_legitimate_offset_address_p (machine_mode, rtx,
|
|
bool, bool);
|
|
extern rtx rs6000_find_base_term (rtx);
|
|
extern rtx rs6000_return_addr (int, rtx);
|
|
extern void rs6000_output_symbol_ref (FILE*, rtx);
|
|
extern HOST_WIDE_INT rs6000_initial_elimination_offset (int, int);
|
|
extern void rs6000_emit_popcount (rtx, rtx);
|
|
extern void rs6000_emit_parity (rtx, rtx);
|
|
|
|
extern rtx rs6000_machopic_legitimize_pic_address (rtx, machine_mode,
|
|
rtx);
|
|
extern rtx rs6000_address_for_fpconvert (rtx);
|
|
extern rtx rs6000_allocate_stack_temp (machine_mode, bool, bool);
|
|
extern align_flags rs6000_loop_align (rtx);
|
|
extern void rs6000_split_logical (rtx [], enum rtx_code, bool, bool, bool);
|
|
#endif /* RTX_CODE */
|
|
|
|
#ifdef TREE_CODE
|
|
extern unsigned int rs6000_data_alignment (tree, unsigned int, enum data_align);
|
|
extern bool rs6000_special_adjust_field_align_p (tree, unsigned int);
|
|
extern unsigned int rs6000_special_round_type_align (tree, unsigned int,
|
|
unsigned int);
|
|
extern unsigned int darwin_rs6000_special_round_type_align (tree, unsigned int,
|
|
unsigned int);
|
|
extern tree altivec_resolve_overloaded_builtin (location_t, tree, void *);
|
|
extern rtx rs6000_libcall_value (machine_mode);
|
|
extern rtx rs6000_va_arg (tree, tree);
|
|
extern int function_ok_for_sibcall (tree);
|
|
extern int rs6000_reg_parm_stack_space (tree, bool);
|
|
extern void rs6000_asm_weaken_decl (FILE *, tree, const char *, const char *);
|
|
extern void rs6000_xcoff_declare_function_name (FILE *, const char *, tree);
|
|
extern void rs6000_xcoff_declare_object_name (FILE *, const char *, tree);
|
|
extern void rs6000_xcoff_asm_output_aligned_decl_common (FILE *, tree,
|
|
const char *,
|
|
unsigned HOST_WIDE_INT,
|
|
unsigned HOST_WIDE_INT);
|
|
extern void rs6000_elf_declare_function_name (FILE *, const char *, tree);
|
|
extern bool rs6000_elf_in_small_data_p (const_tree);
|
|
|
|
#endif /* TREE_CODE */
|
|
|
|
extern int direct_return (void);
|
|
extern int first_reg_to_save (void);
|
|
extern int first_fp_reg_to_save (void);
|
|
extern void output_ascii (FILE *, const char *, int);
|
|
extern void rs6000_gen_section_name (char **, const char *, const char *);
|
|
extern void output_function_profiler (FILE *, int);
|
|
extern void output_profile_hook (int);
|
|
extern int rs6000_trampoline_size (void);
|
|
extern alias_set_type get_TOC_alias_set (void);
|
|
extern void rs6000_emit_prologue (void);
|
|
extern void rs6000_emit_load_toc_table (int);
|
|
extern unsigned int rs6000_dbx_register_number (unsigned int, unsigned int);
|
|
extern void rs6000_emit_epilogue (int);
|
|
extern void rs6000_expand_split_stack_prologue (void);
|
|
extern void rs6000_split_stack_space_check (rtx, rtx);
|
|
extern void rs6000_emit_eh_reg_restore (rtx, rtx);
|
|
extern void rs6000_call_aix (rtx, rtx, rtx, rtx);
|
|
extern void rs6000_sibcall_aix (rtx, rtx, rtx, rtx);
|
|
extern void rs6000_aix_asm_output_dwarf_table_ref (char *);
|
|
extern void get_ppc476_thunk_name (char name[32]);
|
|
extern bool rs6000_overloaded_builtin_p (enum rs6000_builtins);
|
|
extern bool rs6000_builtin_is_supported_p (enum rs6000_builtins);
|
|
extern const char *rs6000_overloaded_builtin_name (enum rs6000_builtins);
|
|
extern int rs6000_store_data_bypass_p (rtx_insn *, rtx_insn *);
|
|
extern HOST_WIDE_INT rs6000_builtin_mask_calculate (void);
|
|
extern void rs6000_asm_output_dwarf_pcrel (FILE *file, int size,
|
|
const char *label);
|
|
extern void rs6000_asm_output_dwarf_datarel (FILE *file, int size,
|
|
const char *label);
|
|
|
|
/* Declare functions in rs6000-c.c */
|
|
|
|
extern void rs6000_pragma_longcall (struct cpp_reader *);
|
|
extern void rs6000_cpu_cpp_builtins (struct cpp_reader *);
|
|
#ifdef TREE_CODE
|
|
extern bool rs6000_pragma_target_parse (tree, tree);
|
|
#endif
|
|
extern void rs6000_activate_target_options (tree new_tree);
|
|
extern void rs6000_target_modify_macros (bool, HOST_WIDE_INT, HOST_WIDE_INT);
|
|
extern void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT,
|
|
HOST_WIDE_INT);
|
|
|
|
/* Declare functions in rs6000-d.c */
|
|
extern void rs6000_d_target_versions (void);
|
|
|
|
#if TARGET_MACHO
|
|
char *output_call (rtx_insn *, rtx *, int, int);
|
|
#endif
|
|
|
|
#ifdef NO_DOLLAR_IN_LABEL
|
|
const char * rs6000_xcoff_strip_dollar (const char *);
|
|
#endif
|
|
|
|
void rs6000_final_prescan_insn (rtx_insn *, rtx *operand, int num_operands);
|
|
|
|
extern unsigned char rs6000_class_max_nregs[][LIM_REG_CLASSES];
|
|
extern unsigned char rs6000_hard_regno_nregs[][FIRST_PSEUDO_REGISTER];
|
|
|
|
extern bool rs6000_linux_float_exceptions_rounding_supported_p (void);
|
|
|
|
/* Pass management. */
|
|
namespace gcc { class context; }
|
|
class rtl_opt_pass;
|
|
|
|
extern rtl_opt_pass *make_pass_analyze_swaps (gcc::context *);
|
|
extern bool rs6000_sum_of_two_registers_p (const_rtx expr);
|
|
extern bool rs6000_quadword_masked_address_p (const_rtx exp);
|
|
extern rtx rs6000_gen_lvx (enum machine_mode, rtx, rtx);
|
|
extern rtx rs6000_gen_stvx (enum machine_mode, rtx, rtx);
|
|
|
|
#endif /* rs6000-protos.h */
|