diff options
author | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-04-27 19:16:27 +0000 |
---|---|---|
committer | law <law@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-04-27 19:16:27 +0000 |
commit | acff2768b3f55faa986f82517c2e9b996e4aa408 (patch) | |
tree | a67446cf5b576ae16aac0ce5b4210d02ea3e99ef /libgcc | |
parent | ce9b6ce6b8dadfe222a2a2870dd259ff9f03d953 (diff) | |
download | linaro-gcc-acff2768b3f55faa986f82517c2e9b996e4aa408.tar.gz linaro-gcc-acff2768b3f55faa986f82517c2e9b996e4aa408.tar.bz2 linaro-gcc-acff2768b3f55faa986f82517c2e9b996e4aa408.zip |
gcc/
* 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.
libgcc/
* config.host: Add h8300-*-linux
* config/h8300/t-linux: New file.
* config/h8300/lib1funs.s: Change symbol prefix.
* config/h8300/sfp-machine.h: 64bit double support.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222479 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgcc')
-rw-r--r-- | libgcc/ChangeLog | 7 | ||||
-rw-r--r-- | libgcc/config.host | 4 | ||||
-rw-r--r-- | libgcc/config/h8300/lib1funcs.S | 80 | ||||
-rw-r--r-- | libgcc/config/h8300/sfp-machine.h | 76 | ||||
-rw-r--r-- | libgcc/config/h8300/t-linux | 10 |
5 files changed, 140 insertions, 37 deletions
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 0891353a5e5..c48a61cbe37 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,10 @@ +2015-04-27 Yoshinori Sato <ysato@users.sourceforge.jp> + + * config.host: Add h8300-*-linux + * config/h8300/t-linux: New file. + * config/h8300/lib1funs.s: Change symbol prefix. + * config/h8300/sfp-machine.h: 64bit double support. + 2015-04-22 Gregor Richards <gregor.richards@uwaterloo.ca> Szabolcs Nagy <szabolcs.nagy@arm.com> diff --git a/libgcc/config.host b/libgcc/config.host index ce14b9ee625..570998feffa 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 36e7d53a45d..24a74a93373 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 00000000000..6a4f97553ae --- /dev/null +++ b/libgcc/config/h8300/sfp-machine.h @@ -0,0 +1,76 @@ +/* Soft-FP definitions for H8/300 + Copyright (C) 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 00000000000..a575e755a8a --- /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 |