]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/common/config/arm/arm-common.c
Update copyright years.
[thirdparty/gcc.git] / gcc / common / config / arm / arm-common.c
CommitLineData
218e3e4e 1/* Common hooks for ARM.
f1717362 2 Copyright (C) 1991-2016 Free Software Foundation, Inc.
218e3e4e 3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it
7 under the terms of the GNU General Public License as published
8 by the Free Software Foundation; either version 3, or (at your
9 option) any later version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
14 License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
19
20#include "config.h"
21#include "system.h"
22#include "coretypes.h"
23#include "tm.h"
24#include "tm_p.h"
25#include "common/common-target.h"
26#include "common/common-target-def.h"
27#include "opts.h"
28#include "flags.h"
29
30/* Set default optimization options. */
31static const struct default_options arm_option_optimization_table[] =
32 {
33 /* Enable section anchors by default at -O1 or higher. */
34 { OPT_LEVELS_1_PLUS, OPT_fsection_anchors, NULL, 1 },
35 { OPT_LEVELS_1_PLUS, OPT_fomit_frame_pointer, NULL, 1 },
84a1059b 36 { OPT_LEVELS_1_PLUS, OPT_fsched_pressure, NULL, 1 },
218e3e4e 37 { OPT_LEVELS_NONE, 0, NULL, 0 }
38 };
39
40/* Implement TARGET_EXCEPT_UNWIND_INFO. */
41
42enum unwind_info_type
43arm_except_unwind_info (struct gcc_options *opts)
44{
45 /* Honor the --enable-sjlj-exceptions configure switch. */
46#ifdef CONFIG_SJLJ_EXCEPTIONS
47 if (CONFIG_SJLJ_EXCEPTIONS)
48 return UI_SJLJ;
49#endif
50
51 /* If not using ARM EABI unwind tables... */
52 if (ARM_UNWIND_INFO)
53 {
54 /* For simplicity elsewhere in this file, indicate that all unwind
55 info is disabled if we're not emitting unwind tables. */
56 if (!opts->x_flag_exceptions && !opts->x_flag_unwind_tables)
57 return UI_NONE;
58 else
59 return UI_TARGET;
60 }
61
62 /* ... we use sjlj exceptions for backwards compatibility. */
63 return UI_SJLJ;
64}
65
b7188fad 66#define ARM_CPU_NAME_LENGTH 20
67
68/* Truncate NAME at the first '.' character seen, or return
69 NAME unmodified. */
70
71const char *
72arm_rewrite_selected_cpu (const char *name)
73{
74 static char output_buf[ARM_CPU_NAME_LENGTH + 1] = {0};
75 char *arg_pos;
76
77 strncpy (output_buf, name, ARM_CPU_NAME_LENGTH);
78 arg_pos = strchr (output_buf, '.');
79
80 /* If we found a '.' truncate the entry at that point. */
81 if (arg_pos)
82 *arg_pos = '\0';
83
84 return output_buf;
85}
86
87/* Called by the driver to rewrite a name passed to the -mcpu
88 argument in preparation to be passed to the assembler. The
7b2c45ae 89 names passed from the command line will be in ARGV, we want
90 to use the right-most argument, which should be in
91 ARGV[ARGC - 1]. ARGC should always be greater than 0. */
b7188fad 92
93const char *
94arm_rewrite_mcpu (int argc, const char **argv)
95{
7b2c45ae 96 gcc_assert (argc);
97 return arm_rewrite_selected_cpu (argv[argc - 1]);
b7188fad 98}
99
100#undef ARM_CPU_NAME_LENGTH
101
102
218e3e4e 103#undef TARGET_DEFAULT_TARGET_FLAGS
104#define TARGET_DEFAULT_TARGET_FLAGS (TARGET_DEFAULT | MASK_SCHED_PROLOG)
105
106#undef TARGET_OPTION_OPTIMIZATION_TABLE
107#define TARGET_OPTION_OPTIMIZATION_TABLE arm_option_optimization_table
108
109#undef TARGET_EXCEPT_UNWIND_INFO
110#define TARGET_EXCEPT_UNWIND_INFO arm_except_unwind_info
111
112struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;