OSDN Git Service

Remove doubled up words.
[pf3gnuchains/gcc-fork.git] / gcc / config / sh / sh.c
index ee52c32..78f6f0f 100644 (file)
@@ -56,6 +56,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "cfgloop.h"
 #include "alloc-pool.h"
 #include "tm-constrs.h"
+#include "opts.h"
 
 
 int code_for_indirect_jump_scratch = CODE_FOR_indirect_jump_scratch;
@@ -167,7 +168,8 @@ int assembler_dialect;
 
 static bool shmedia_space_reserved_for_target_registers;
 
-static bool sh_handle_option (size_t, const char *, int);
+static bool sh_handle_option (struct gcc_options *, struct gcc_options *,
+                             const struct cl_decoded_option *, location_t);
 static void split_branches (rtx);
 static int branch_dest (rtx);
 static void force_into (rtx, rtx);
@@ -324,19 +326,6 @@ static const struct attribute_spec sh_attribute_table[] =
     sh_handle_resbank_handler_attribute, false },
   { "function_vector",   1, 1, true,  false, false,
     sh2a_handle_function_vector_handler_attribute, false },
-#ifdef SYMBIAN
-  /* Symbian support adds three new attributes:
-     dllexport - for exporting a function/variable that will live in a dll
-     dllimport - for importing a function/variable from a dll
-
-     Microsoft allows multiple declspecs in one __declspec, separating
-     them with spaces.  We do NOT support this.  Instead, use __declspec
-     multiple times.  */
-  { "dllimport",         0, 0, true,  false, false,
-    sh_symbian_handle_dll_attribute, false },
-  { "dllexport",         0, 0, true,  false, false,
-    sh_symbian_handle_dll_attribute, false },
-#endif
   { NULL,                0, 0, false, false, false, NULL, false }
 };
 
@@ -592,17 +581,6 @@ static const struct default_options sh_option_optimization_table[] =
 #undef  TARGET_ENCODE_SECTION_INFO
 #define TARGET_ENCODE_SECTION_INFO     sh_encode_section_info
 
-#ifdef SYMBIAN
-
-#undef  TARGET_ENCODE_SECTION_INFO
-#define TARGET_ENCODE_SECTION_INFO     sh_symbian_encode_section_info
-#undef  TARGET_STRIP_NAME_ENCODING
-#define TARGET_STRIP_NAME_ENCODING     sh_symbian_strip_name_encoding
-#undef  TARGET_CXX_IMPORT_EXPORT_CLASS
-#define TARGET_CXX_IMPORT_EXPORT_CLASS  sh_symbian_import_export_class
-
-#endif /* SYMBIAN */
-
 #undef TARGET_SECONDARY_RELOAD
 #define TARGET_SECONDARY_RELOAD sh_secondary_reload
 
@@ -628,52 +606,59 @@ struct gcc_target targetm = TARGET_INITIALIZER;
 /* Implement TARGET_HANDLE_OPTION.  */
 
 static bool
-sh_handle_option (size_t code, const char *arg ATTRIBUTE_UNUSED,
-                 int value ATTRIBUTE_UNUSED)
+sh_handle_option (struct gcc_options *opts,
+                 struct gcc_options *opts_set ATTRIBUTE_UNUSED,
+                 const struct cl_decoded_option *decoded,
+                 location_t loc ATTRIBUTE_UNUSED)
 {
+  size_t code = decoded->opt_index;
+
   switch (code)
     {
     case OPT_m1:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH1;
+      opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH1;
       return true;
 
     case OPT_m2:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2;
+      opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2;
       return true;
 
     case OPT_m2a:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2A;
+      opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2A;
       return true;
 
     case OPT_m2a_nofpu:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2A_NOFPU;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2A_NOFPU;
       return true;
 
     case OPT_m2a_single:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2A_SINGLE;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2A_SINGLE;
       return true;
 
     case OPT_m2a_single_only:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2A_SINGLE_ONLY;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2A_SINGLE_ONLY;
       return true;
 
     case OPT_m2e:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2E;
+      opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2E;
       return true;
 
     case OPT_m3:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH3;
+      opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH3;
       return true;
 
     case OPT_m3e:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH3E;
+      opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH3E;
       return true;
 
     case OPT_m4:
     case OPT_m4_100:
     case OPT_m4_200:
     case OPT_m4_300:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4;
+      opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4;
       return true;
 
     case OPT_m4_nofpu:
@@ -683,62 +668,74 @@ sh_handle_option (size_t code, const char *arg ATTRIBUTE_UNUSED,
     case OPT_m4_340:
     case OPT_m4_400:
     case OPT_m4_500:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4_NOFPU;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4_NOFPU;
       return true;
 
     case OPT_m4_single:
     case OPT_m4_100_single:
     case OPT_m4_200_single:
     case OPT_m4_300_single:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4_SINGLE;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4_SINGLE;
       return true;
 
     case OPT_m4_single_only:
     case OPT_m4_100_single_only:
     case OPT_m4_200_single_only:
     case OPT_m4_300_single_only:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4_SINGLE_ONLY;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4_SINGLE_ONLY;
       return true;
 
     case OPT_m4a:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4A;
+      opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4A;
       return true;
 
     case OPT_m4a_nofpu:
     case OPT_m4al:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4A_NOFPU;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4A_NOFPU;
       return true;
 
     case OPT_m4a_single:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4A_SINGLE;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4A_SINGLE;
       return true;
 
     case OPT_m4a_single_only:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4A_SINGLE_ONLY;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4A_SINGLE_ONLY;
       return true;
 
     case OPT_m5_32media:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_32MEDIA;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_32MEDIA;
       return true;
 
     case OPT_m5_32media_nofpu:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_32MEDIA_NOFPU;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_32MEDIA_NOFPU;
       return true;
 
     case OPT_m5_64media:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_64MEDIA;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_64MEDIA;
       return true;
 
     case OPT_m5_64media_nofpu:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_64MEDIA_NOFPU;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_64MEDIA_NOFPU;
       return true;
 
     case OPT_m5_compact:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_COMPACT;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_COMPACT;
       return true;
 
     case OPT_m5_compact_nofpu:
-      target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_COMPACT_NOFPU;
+      opts->x_target_flags
+       = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_COMPACT_NOFPU;
       return true;
 
     default:
@@ -2823,12 +2820,6 @@ sh_file_start (void)
 {
   default_file_start ();
 
-#ifdef SYMBIAN
-  /* Declare the .directive section before it is used.  */
-  fputs ("\t.section .directive, \"SM\", @progbits, 1\n", asm_out_file);
-  fputs ("\t.asciz \"#<SYMEDIT>#\\n\"\n", asm_out_file);
-#endif
-
   if (TARGET_ELF)
     /* We need to show the text section with the proper
        attributes as in TEXT_SECTION_ASM_OP, before dwarf2out
@@ -9114,7 +9105,7 @@ sh2a_is_function_vector_call (rtx x)
   return 0;
 }
 
-/* Returns the function vector number, if the the attribute
+/* Returns the function vector number, if the attribute
    'function_vector' is assigned, otherwise returns zero.  */
 int
 sh2a_get_function_vector_number (rtx x)