diff options
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 13 | ||||
-rw-r--r-- | gcc/config.gcc | 4 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.c | 26 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.h | 20 | ||||
-rw-r--r-- | gcc/config/h8300/h8300.md | 2 | ||||
-rw-r--r-- | gcc/config/h8300/linux.h | 50 | ||||
-rw-r--r-- | gcc/config/h8300/t-linux | 20 |
7 files changed, 115 insertions, 20 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b36391e..a24e57c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,16 @@ +2015-04-27 Yoshinori Sato <ysato@users.sourceforge.jp> + + * config.gcc: Add h8300-*-linux. + * config/h8300/linux.h: New. + * config/h8300/t-linux: New. + * config/h8300/h8300.c (h8300_option_override): Normal mode + is not supported for h8300-*-linux. + (h8300_file_start): Target priority change. + (get_shift_alg): Likewise. + (h8300_shift_need_scratch_p): Likewise. + * config/h8300/h8300.h (TARGET_CPU_CPP_BUILTINS): Likewise. + * config/h8300/h8300.md (define_peephole2): Remove duplicate condition. + 2015-04-27 Caroline Tice <cmtice@google.com> * final.c (final_scan_insn): Output cold_function_nmae as function diff --git a/gcc/config.gcc b/gcc/config.gcc index a1df043..5c48cd0 100644 --- a/gcc/config.gcc +++ b/gcc/config.gcc @@ -1218,6 +1218,10 @@ h8300-*-elf*) tmake_file="h8300/t-h8300" tm_file="h8300/h8300.h dbxelf.h elfos.h newlib-stdint.h h8300/elf.h" ;; +h8300-*-linux*) + tmake_file="${tmake_file} h8300/t-h8300 h8300/t-linux" + tm_file="h8300/h8300.h dbxelf.h elfos.h gnu-user.h linux.h glibc-stdint.h h8300/linux.h" + ;; hppa*64*-*-linux*) target_cpu_default="MASK_PA_11|MASK_PA_20" tm_file="pa/pa64-start.h ${tm_file} dbxelf.h elfos.h gnu-user.h linux.h \ diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c index 4e9110e..00087f3 100644 --- a/gcc/config/h8300/h8300.c +++ b/gcc/config/h8300/h8300.c @@ -406,6 +406,14 @@ h8300_option_override (void) - Option ignored!"); } +#ifdef H8300_LINUX + if ((TARGET_NORMAL_MODE)) + { + error ("-mn is not supported for linux targets"); + target_flags ^= MASK_NORMAL_MODE; + } +#endif + /* Some of the shifts are optimized for speed by default. See http://gcc.gnu.org/ml/gcc-patches/2002-07/msg01858.html If optimizing for size, change shift_alg for those shift to @@ -1006,12 +1014,12 @@ h8300_file_start (void) { default_file_start (); - if (TARGET_H8300H) - fputs (TARGET_NORMAL_MODE ? "\t.h8300hn\n" : "\t.h8300h\n", asm_out_file); - else if (TARGET_H8300SX) + if (TARGET_H8300SX) fputs (TARGET_NORMAL_MODE ? "\t.h8300sxn\n" : "\t.h8300sx\n", asm_out_file); else if (TARGET_H8300S) fputs (TARGET_NORMAL_MODE ? "\t.h8300sn\n" : "\t.h8300s\n", asm_out_file); + else if (TARGET_H8300H) + fputs (TARGET_NORMAL_MODE ? "\t.h8300hn\n" : "\t.h8300h\n", asm_out_file); } /* Output assembly language code for the end of file. */ @@ -4094,10 +4102,10 @@ get_shift_alg (enum shift_type shift_type, enum shift_mode shift_mode, /* Find the target CPU. */ if (TARGET_H8300) cpu = H8_300; - else if (TARGET_H8300H) - cpu = H8_300H; - else + else if (TARGET_H8300S) cpu = H8_S; + else + cpu = H8_300H; /* Find the shift algorithm. */ info->alg = SHIFT_LOOP; @@ -4540,10 +4548,10 @@ h8300_shift_needs_scratch_p (int count, machine_mode mode) /* Find out the target CPU. */ if (TARGET_H8300) cpu = H8_300; - else if (TARGET_H8300H) - cpu = H8_300H; - else + else if (TARGET_H8300S) cpu = H8_S; + else + cpu = H8_300H; /* Find the shift algorithm. */ switch (mode) diff --git a/gcc/config/h8300/h8300.h b/gcc/config/h8300/h8300.h index 2a47aa8..86fd7d1 100644 --- a/gcc/config/h8300/h8300.h +++ b/gcc/config/h8300/h8300.h @@ -39,29 +39,29 @@ extern const char * const *h8_reg_names; #define TARGET_CPU_CPP_BUILTINS() \ do \ { \ - if (TARGET_H8300H) \ + if (TARGET_H8300SX) \ { \ - builtin_define ("__H8300H__"); \ - builtin_assert ("cpu=h8300h"); \ - builtin_assert ("machine=h8300h"); \ + builtin_define ("__H8300SX__"); \ if (TARGET_NORMAL_MODE) \ { \ builtin_define ("__NORMAL_MODE__"); \ } \ } \ - else if (TARGET_H8300SX) \ + else if (TARGET_H8300S) \ { \ - builtin_define ("__H8300SX__"); \ + builtin_define ("__H8300S__"); \ + builtin_assert ("cpu=h8300s"); \ + builtin_assert ("machine=h8300s"); \ if (TARGET_NORMAL_MODE) \ { \ builtin_define ("__NORMAL_MODE__"); \ } \ } \ - else if (TARGET_H8300S) \ + else if (TARGET_H8300H) \ { \ - builtin_define ("__H8300S__"); \ - builtin_assert ("cpu=h8300s"); \ - builtin_assert ("machine=h8300s"); \ + builtin_define ("__H8300H__"); \ + builtin_assert ("cpu=h8300h"); \ + builtin_assert ("machine=h8300h"); \ if (TARGET_NORMAL_MODE) \ { \ builtin_define ("__NORMAL_MODE__"); \ diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index dfd082c..4079b30 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -5847,7 +5847,7 @@ (pc)))] "(TARGET_H8300H || TARGET_H8300S) && peep2_reg_dead_p (1, operands[0]) - && ((TARGET_H8300H && INTVAL (operands[1]) == 3) + && (INTVAL (operands[1]) == 3 || INTVAL (operands[1]) == 7 || INTVAL (operands[1]) == 15 || INTVAL (operands[1]) == 31 diff --git a/gcc/config/h8300/linux.h b/gcc/config/h8300/linux.h new file mode 100644 index 0000000..ef31e86 --- /dev/null +++ b/gcc/config/h8300/linux.h @@ -0,0 +1,50 @@ +/* Definitions of target machine for GNU compiler. + Renesas H8/300 (linux variant) + Copyright (C) 2015 + Free Software Foundation, Inc. + Contributed by Yoshinori Sato <ysato@users.sourceforge.jp> + +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_H8300_LINUX_H +#define GCC_H8300_LINUX_H + +#define TARGET_OS_CPP_BUILTINS() \ + do \ + { \ + GNU_USER_TARGET_OS_CPP_BUILTINS(); \ + } \ + while (0) + +#undef LINK_SPEC +#define LINK_SPEC "%{mh:-mh8300helf_linux} %{ms:-m h8300self_linux} %{msx:-m h8300sxelf_linux}" + +#undef TARGET_DEFAULT +#define TARGET_DEFAULT (MASK_QUICKCALL | MASK_INT32 | MASK_H8300H) + +/* Width of a word, in units (bytes). */ +#undef DOUBLE_TYPE_SIZE +#define DOUBLE_TYPE_SIZE 64 + +#undef DEFAULT_SIGNED_CHAR +#define DEFAULT_SIGNED_CHAR 1 + +#undef USER_LABEL_PREFIX + +#define H8300_LINUX + +#endif /* ! GCC_H8300_LINUX_H */ diff --git a/gcc/config/h8300/t-linux b/gcc/config/h8300/t-linux new file mode 100644 index 0000000..11237ea --- /dev/null +++ b/gcc/config/h8300/t-linux @@ -0,0 +1,20 @@ +# Copyright (C) 2015 Free Software Foundation, Inc. +# +# 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/>. + +MULTILIB_OPTIONS = ms/msx +MULTILIB_DIRNAMES = h8300s h8sx |