xref: /netbsd-src/external/gpl3/gcc.old/dist/gcc/common/config/cris/cris-common.c (revision 8feb0f0b7eaff0608f8350bbfa3098827b4bb91b)
1 /* Common hooks for CRIS.
2    Copyright (C) 1998-2020 Free Software Foundation, Inc.
3 
4 This file is part of GCC.
5 
6 GCC is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 3, or (at your option)
9 any later version.
10 
11 GCC is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public 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 "common/common-target.h"
25 #include "common/common-target-def.h"
26 #include "opts.h"
27 #include "flags.h"
28 
29 /* TARGET_HANDLE_OPTION worker.  We just store the values into local
30    variables here.  Checks for correct semantics are in
31    cris_option_override.  */
32 
33 static bool
cris_handle_option(struct gcc_options * opts,struct gcc_options * opts_set ATTRIBUTE_UNUSED,const struct cl_decoded_option * decoded,location_t loc ATTRIBUTE_UNUSED)34 cris_handle_option (struct gcc_options *opts,
35 		    struct gcc_options *opts_set ATTRIBUTE_UNUSED,
36 		    const struct cl_decoded_option *decoded,
37 		    location_t loc ATTRIBUTE_UNUSED)
38 {
39   size_t code = decoded->opt_index;
40 
41   switch (code)
42     {
43     case OPT_metrax100:
44       opts->x_target_flags
45 	|= (MASK_SVINTO
46 	    + MASK_ETRAX4_ADD
47 	    + MASK_ALIGN_BY_32);
48       break;
49 
50     case OPT_mno_etrax100:
51       opts->x_target_flags
52 	&= ~(MASK_SVINTO
53 	     + MASK_ETRAX4_ADD
54 	     + MASK_ALIGN_BY_32);
55       break;
56 
57     case OPT_m32_bit:
58     case OPT_m32bit:
59       opts->x_target_flags
60 	|= (MASK_STACK_ALIGN
61 	    + MASK_CONST_ALIGN
62 	    + MASK_DATA_ALIGN
63 	    + MASK_ALIGN_BY_32);
64       break;
65 
66     case OPT_m16_bit:
67     case OPT_m16bit:
68       opts->x_target_flags
69 	|= (MASK_STACK_ALIGN
70 	    + MASK_CONST_ALIGN
71 	    + MASK_DATA_ALIGN);
72       break;
73 
74     case OPT_m8_bit:
75     case OPT_m8bit:
76       opts->x_target_flags
77 	&= ~(MASK_STACK_ALIGN
78 	     + MASK_CONST_ALIGN
79 	     + MASK_DATA_ALIGN);
80       break;
81 
82     default:
83       break;
84     }
85 
86   return true;
87 }
88 
89 #undef TARGET_DEFAULT_TARGET_FLAGS
90 #define TARGET_DEFAULT_TARGET_FLAGS (TARGET_DEFAULT | CRIS_SUBTARGET_DEFAULT)
91 #undef TARGET_HANDLE_OPTION
92 #define TARGET_HANDLE_OPTION cris_handle_option
93 
94 struct gcc_targetm_common targetm_common = TARGETM_COMMON_INITIALIZER;
95