Ping
At Fri, 06 Mar 2015 01:50:34 +0900, Yoshinori Sato wrote: > > Add h8300-*-linux target for h8300 linux kernel and userland. > > h8300-*-elf is some difference of standard elf. > h8300-*-linux is compatible of standard elf rules. > > Thanks. > > diff --git a/gcc/ChangeLog b/gcc/ChangeLog > index cfacea1..fc5101c 100644 > --- a/gcc/ChangeLog > +++ b/gcc/ChangeLog > @@ -1,3 +1,12 @@ > +2015-03-06 Yoshinori Sato <ys...@users.sourceforge.jp> > + > + * config.gcc: Add h8300-*-linux > + * config/h8300/h8300.c (h8300_option_override): > + Exclusive -mh vs -ms/-msx > + (h8300_file_start): Target priority -msx > -ms > -mh > + * config/h8300/linux.h: New file. > + * config/h8300/t-linux: Likewise. > + > 2015-03-05 Martin Liska <mli...@suse.cz> > > * ipa-inline.c (inline_small_functions): Set default value to > diff --git a/gcc/config.gcc b/gcc/config.gcc > index 483c672..975f3f6 100644 > --- a/gcc/config.gcc > +++ b/gcc/config.gcc > @@ -1211,6 +1211,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..9862b7e 100644 > --- a/gcc/config/h8300/h8300.c > +++ b/gcc/config/h8300/h8300.c > @@ -370,6 +370,11 @@ h8300_option_override (void) > h8_pop_op = h8_pop_ops[cpu_type]; > h8_mov_op = h8_mov_ops[cpu_type]; > > + if (TARGET_H8300H && (TARGET_H8300S || TARGET_H8300SX)) > + { > + target_flags ^= MASK_H8300H; > + } > + > if (!TARGET_H8300S && TARGET_MAC) > { > error ("-ms2600 is used without -ms"); > @@ -1006,12 +1011,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. */ > diff --git a/gcc/config/h8300/linux.h b/gcc/config/h8300/linux.h > new file mode 100644 > index 0000000..995d320 > --- /dev/null > +++ b/gcc/config/h8300/linux.h > @@ -0,0 +1,47 @@ > +/* Definitions of target machine for GNU compiler. > + Renesas H8/300 (linux variant) > + Copyright (C) 2015 > + Free Software Foundation, Inc. > + Contributed by Yoshinori Sato <ys...@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:%{!mn:-m h8300helf_linux}} %{ms:%{!mn:-m > h8300self_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 > +#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 > diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog > index 49eee7a..1ebc061 100644 > --- a/libgcc/ChangeLog > +++ b/libgcc/ChangeLog > @@ -1,3 +1,10 @@ > +2015-03-06 Yoshinori Sato <ys...@users.sourceforge.jp> > + > + * libgcc/config.host: Add target h8300-*-linux. > + * libgcc/config/h8300/lib1funcs.S: No symbol prefix support. > + * libgcc/config/h8300/sfp-machine.h: New file. > + * libgcc/config/h8300/t-linux: Likewise. > + > 2015-03-03 Max Filippov <jcmvb...@gmail.com> > > Implement call0 ABI for xtensa > diff --git a/libgcc/config.host b/libgcc/config.host > index 5baeae5..5e47f0e 100644 > --- a/libgcc/config.host > +++ b/libgcc/config.host > @@ -487,6 +487,10 @@ h8300-*-elf*) > tm_file="$tm_file h8300/h8300-lib.h" > extra_parts="$extra_parts crti.o crtn.o" > ;; > +h8300-*-linux*) > + tmake_file="t-linux h8300/t-linux t-softfp-sfdf t-softfp" > + tm_file="$tm_file h8300/h8300-lib.h" > + ;; > hppa*64*-*-linux*) > tmake_file="$tmake_file pa/t-linux pa/t-linux64" > extra_parts="crtbegin.o crtbeginS.o crtbeginT.o crtend.o crtendS.o" > diff --git a/libgcc/config/h8300/lib1funcs.S b/libgcc/config/h8300/lib1funcs.S > index 36e7d53..24a74a9 100644 > --- a/libgcc/config/h8300/lib1funcs.S > +++ b/libgcc/config/h8300/lib1funcs.S > @@ -84,6 +84,12 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > #define A3E e3 > #endif > > +#define CONCAT(A,B) A##B > +#define LABEL0(U,X) CONCAT(U,__##X) > +#define LABEL0_DEF(U,X) CONCAT(U,__##X##:) > +#define LABEL_DEF(X) LABEL0_DEF(__USER_LABEL_PREFIX__,X) > +#define LABEL(X) LABEL0(__USER_LABEL_PREFIX__,X) > + > #ifdef __H8300H__ > #ifdef __NORMAL_MODE__ > .h8300hn > @@ -111,8 +117,8 @@ see the files COPYING3 and COPYING.RUNTIME respectively. > If not, see > #ifdef __H8300__ > .section .text > .align 2 > - .global ___cmpsi2 > -___cmpsi2: > + .global LABEL(cmpsi2) > +LABEL_DEF(cmpsi2) > cmp.w A0,A2 > bne .L2 > cmp.w A1,A3 > @@ -137,8 +143,8 @@ ___cmpsi2: > #ifdef __H8300__ > .section .text > .align 2 > - .global ___ucmpsi2 > -___ucmpsi2: > + .global LABEL(ucmpsi2) > +LABEL_DEF(ucmpsi2) > cmp.w A0,A2 > bne .L2 > cmp.w A1,A3 > @@ -207,10 +213,10 @@ _lab8: rts > > ; A0=A0/A1 signed > > - .global ___divhi3 > -___divhi3: > + .global LABEL(divhi3) > +LABEL_DEF(divhi3) > bsr divnorm > - bsr ___udivhi3 > + bsr LABEL(udivhi3) > negans: btst #3,A2L ; should answer be negative ? > beq _lab4 > not A0H ; yes, so make it so > @@ -220,18 +226,18 @@ _lab4: rts > > ; A0=A0%A1 signed > > - .global ___modhi3 > -___modhi3: > + .global LABEL(modhi3) > +LABEL_DEF(modhi3) > bsr modnorm > - bsr ___udivhi3 > + bsr LABEL(udivhi3) > mov A3,A0 > bra negans > > ; A0=A0%A1 unsigned > > - .global ___umodhi3 > -___umodhi3: > - bsr ___udivhi3 > + .global LABEL(umodhi3) > +LABEL_DEF(umodhi3) > + bsr LABEL(udivhi3) > mov A3,A0 > rts > > @@ -251,8 +257,8 @@ ___umodhi3: > ; The H8/300 only has a 16/8 bit divide, so we look at the incoming and > ; see how to partition up the expression. > > - .global ___udivhi3 > -___udivhi3: > + .global LABEL(udivhi3) > +LABEL_DEF(udivhi3) > ; A0 A1 A2 A3 > ; Nn Dd P > sub.w A3,A3 ; Nn Dd xP 00 > @@ -418,8 +424,8 @@ mpostive2: > > ; numerator in A0/A1 > ; denominator in A2/A3 > - .global ___modsi3 > -___modsi3: > + .global LABEL(modsi3) > +LABEL_DEF(modsi3) > #ifdef __H8300__ > PUSHP S2P > PUSHP S0P > @@ -432,7 +438,7 @@ ___modsi3: > #else > PUSHP S2P > bsr modnorm > - bsr ___udivsi3 > + bsr LABEL(divsi3) > mov.l er3,er0 > bra exitdiv > #endif > @@ -440,8 +446,8 @@ ___modsi3: > ;; H8/300H and H8S version of ___udivsi3 is defined later in > ;; the file. > #ifdef __H8300__ > - .global ___udivsi3 > -___udivsi3: > + .global LABEL(udivsi3) > +LABEL_DEF(udivsi3) > PUSHP S2P > PUSHP S0P > PUSHP S1P > @@ -449,8 +455,8 @@ ___udivsi3: > bra reti > #endif > > - .global ___umodsi3 > -___umodsi3: > + .global LABEL(umodsi3) > +LABEL_DEF(umodsi3) > #ifdef __H8300__ > PUSHP S2P > PUSHP S0P > @@ -460,13 +466,13 @@ ___umodsi3: > mov S1,A1 > bra reti > #else > - bsr ___udivsi3 > + bsr LABEL(udivsi3) > mov.l er3,er0 > rts > #endif > > - .global ___divsi3 > -___divsi3: > + .global LABEL(divsi3) > +LABEL_DEF(divsi3) > #ifdef __H8300__ > PUSHP S2P > PUSHP S0P > @@ -476,7 +482,7 @@ ___divsi3: > #else > PUSHP S2P > jsr divnorm > - bsr ___udivsi3 > + bsr LABEL(udivsi3) > #endif > > ; examine what the sign should be > @@ -591,8 +597,8 @@ setone: > #else /* __H8300H__ */ > > ;; This function also computes the remainder and stores it in er3. > - .global ___udivsi3 > -___udivsi3: > + .global LABEL(udivsi3) > +LABEL_DEF(udivsi3) > mov.w A1E,A1E ; denominator top word 0? > bne DenHighNonZero > > @@ -681,8 +687,8 @@ divmod_L26: > #ifdef __H8300__ > .section .text > .align 2 > - .global ___mulhi3 > -___mulhi3: > + .global LABEL(mulhi3) > +LABEL_DEF(mulhi3) > mov.b A1L,A2L ; A2l gets srcb.l > mulxu A0L,A2 ; A2 gets first sub product > > @@ -726,8 +732,8 @@ ___mulhi3: > > #ifdef __H8300__ > > - .global ___mulsi3 > -___mulsi3: > + .global LABEL(mulsi3) > +LABEL_DEF(mulsi3) > PUSHP S0P > PUSHP S1P > > @@ -785,8 +791,8 @@ _done: > ; 32b * 32b = 92 states > ; > > - .global ___mulsi3 > -___mulsi3: > + .global LABEL(mulsi3) > +LABEL_DEF(mulsi3) > mov.w r1,r2 ; ( 2 states) b * d > mulxu r0,er2 ; (22 states) > > @@ -814,11 +820,11 @@ L_skip2: > #ifdef __H8300__ > /* We still treat NANs different than libgcc2.c, but then, the > behavior is undefined anyways. */ > - .global ___fixunssfsi > -___fixunssfsi: > + .global LABEL(fixunssfsi) > +LABEL_DEF(fixunssfsi) > cmp.b #0x4f,r0h > bge Large_num > - jmp @___fixsfsi > + jmp @LABEL(fixsfsi) > Large_num: > bhi L_huge_num > xor.b #0x80,A0L > diff --git a/libgcc/config/h8300/sfp-machine.h > b/libgcc/config/h8300/sfp-machine.h > new file mode 100644 > index 0000000..645e8ab > --- /dev/null > +++ b/libgcc/config/h8300/sfp-machine.h > @@ -0,0 +1,76 @@ > +/* Soft-FP definitions for H8/300 > + Copyright (C) 2013-2015 Free Software Foundation, Inc. > + > +This file 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. > + > +This file 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. > + > +Under Section 7 of GPL version 3, you are granted additional > +permissions described in the GCC Runtime Library Exception, version > +3.1, as published by the Free Software Foundation. > + > +You should have received a copy of the GNU General Public License and > +a copy of the GCC Runtime Library Exception along with this program; > +see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > +<http://www.gnu.org/licenses/>. */ > + > +#define _FP_W_TYPE_SIZE 32 > +#define _FP_W_TYPE unsigned long > +#define _FP_WS_TYPE signed long > +#define _FP_I_TYPE long > + > +#define _FP_MUL_MEAT_S(R,X,Y) \ > + _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) > +#define _FP_MUL_MEAT_D(R,X,Y) \ > + _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) > +#define _FP_MUL_MEAT_Q(R,X,Y) \ > + _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) > + > +#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_loop(S,R,X,Y) > +#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) > +#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) > + > +#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) > +#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 > +#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 > +#define _FP_NANSIGN_S 0 > +#define _FP_NANSIGN_D 0 > +#define _FP_NANSIGN_Q 0 > + > +#define _FP_KEEPNANFRACP 1 > +#define _FP_QNANNEGATEDP 0 > + > +/* Someone please check this. */ > +#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ > + do { \ > + if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ > + && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ > + { \ > + R##_s = Y##_s; \ > + _FP_FRAC_COPY_##wc(R,Y); \ > + } \ > + else \ > + { \ > + R##_s = X##_s; \ > + _FP_FRAC_COPY_##wc(R,X); \ > + } \ > + R##_c = FP_CLS_NAN; \ > + } while (0) > + > +/* Not checked. */ > +#define _FP_TININESS_AFTER_ROUNDING 0 > + > +#define __BIG_ENDIAN 4321 > + > +#define __BYTE_ORDER __BIG_ENDIAN > + > +/* Define ALIASNAME as a strong alias for NAME. */ > +# define strong_alias(name, aliasname) _strong_alias(name, aliasname) > +# define _strong_alias(name, aliasname) \ > + extern __typeof (name) aliasname __attribute__ ((alias (#name))); > diff --git a/libgcc/config/h8300/t-linux b/libgcc/config/h8300/t-linux > new file mode 100644 > index 0000000..a575e75 > --- /dev/null > +++ b/libgcc/config/h8300/t-linux > @@ -0,0 +1,10 @@ > +LIB1ASMSRC = h8300/lib1funcs.S > +LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3 \ > + _fixunssfsi_asm > + > +LIB2ADD += \ > + $(srcdir)/config/h8300/clzhi2.c \ > + $(srcdir)/config/h8300/ctzhi2.c \ > + $(srcdir)/config/h8300/parityhi2.c \ > + $(srcdir)/config/h8300/popcounthi2.c \ > + $(srcdir)/config/h8300/fixunssfsi.c > > -- > Yoshinori Sato > <ys...@users.sourceforge.jp>