GCN libgcc.
This patch contains the GCN port of libgcc. 2019-01-17 Andrew Stubbs <ams@codesourcery.com> Kwok Cheung Yeung <kcy@codesourcery.com> Julian Brown <julian@codesourcery.com> Tom de Vries <tom@codesourcery.com> libgcc/ * config.host: Recognize amdgcn*-*-amdhsa. * config/gcn/crt0.c: New file. * config/gcn/lib2-divmod-hi.c: New file. * config/gcn/lib2-divmod.c: New file. * config/gcn/lib2-gcn.h: New file. * config/gcn/sfp-machine.h: New file. * config/gcn/t-amdgcn: New file. Co-Authored-By: Julian Brown <julian@codesourcery.com> Co-Authored-By: Kwok Cheung Yeung <kcy@codesourcery.com> Co-Authored-By: Tom de Vries <tom@codesourcery.com> From-SVN: r268021
This commit is contained in:
parent
5ab99fa41c
commit
91d7b7fe84
8 changed files with 394 additions and 0 deletions
|
@ -1,3 +1,16 @@
|
|||
2019-01-17 Andrew Stubbs <ams@codesourcery.com>
|
||||
Kwok Cheung Yeung <kcy@codesourcery.com>
|
||||
Julian Brown <julian@codesourcery.com>
|
||||
Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
* config.host: Recognize amdgcn*-*-amdhsa.
|
||||
* config/gcn/crt0.c: New file.
|
||||
* config/gcn/lib2-divmod-hi.c: New file.
|
||||
* config/gcn/lib2-divmod.c: New file.
|
||||
* config/gcn/lib2-gcn.h: New file.
|
||||
* config/gcn/sfp-machine.h: New file.
|
||||
* config/gcn/t-amdgcn: New file.
|
||||
|
||||
2019-01-09 Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
PR other/16615
|
||||
|
|
|
@ -91,6 +91,10 @@ alpha*-*-*)
|
|||
am33_2.0-*-linux*)
|
||||
cpu_type=mn10300
|
||||
;;
|
||||
amdgcn*-*-*)
|
||||
cpu_type=gcn
|
||||
tmake_file="${tmake_file} t-softfp-sfdf t-softfp"
|
||||
;;
|
||||
arc*-*-*)
|
||||
cpu_type=arc
|
||||
;;
|
||||
|
@ -387,6 +391,10 @@ alpha*-dec-*vms*)
|
|||
extra_parts="$extra_parts vms-dwarf2.o vms-dwarf2eh.o"
|
||||
md_unwind_header=alpha/vms-unwind.h
|
||||
;;
|
||||
amdgcn*-*-amdhsa)
|
||||
tmake_file="$tmake_file gcn/t-amdgcn"
|
||||
extra_parts="crt0.o"
|
||||
;;
|
||||
arc*-*-elf*)
|
||||
tmake_file="arc/t-arc"
|
||||
extra_parts="crti.o crtn.o crtend.o crtbegin.o crtendS.o crtbeginS.o"
|
||||
|
|
23
libgcc/config/gcn/crt0.c
Normal file
23
libgcc/config/gcn/crt0.c
Normal file
|
@ -0,0 +1,23 @@
|
|||
/* Copyright (C) 2017-2019 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/>. */
|
||||
|
||||
/* Provide an entry point symbol to silence a linker warning. */
|
||||
void _start() {}
|
117
libgcc/config/gcn/lib2-divmod-hi.c
Normal file
117
libgcc/config/gcn/lib2-divmod-hi.c
Normal file
|
@ -0,0 +1,117 @@
|
|||
/* Copyright (C) 2012-2019 Free Software Foundation, Inc.
|
||||
Contributed by Altera and Mentor Graphics, 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/>. */
|
||||
|
||||
#include "lib2-gcn.h"
|
||||
|
||||
/* 16-bit HI divide and modulo as used in gcn. */
|
||||
|
||||
static UHItype
|
||||
udivmodhi4 (UHItype num, UHItype den, word_type modwanted)
|
||||
{
|
||||
UHItype bit = 1;
|
||||
UHItype res = 0;
|
||||
|
||||
while (den < num && bit && !(den & (1L<<15)))
|
||||
{
|
||||
den <<=1;
|
||||
bit <<=1;
|
||||
}
|
||||
while (bit)
|
||||
{
|
||||
if (num >= den)
|
||||
{
|
||||
num -= den;
|
||||
res |= bit;
|
||||
}
|
||||
bit >>=1;
|
||||
den >>=1;
|
||||
}
|
||||
if (modwanted)
|
||||
return num;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
HItype
|
||||
__divhi3 (HItype a, HItype b)
|
||||
{
|
||||
word_type neg = 0;
|
||||
HItype res;
|
||||
|
||||
if (a < 0)
|
||||
{
|
||||
a = -a;
|
||||
neg = !neg;
|
||||
}
|
||||
|
||||
if (b < 0)
|
||||
{
|
||||
b = -b;
|
||||
neg = !neg;
|
||||
}
|
||||
|
||||
res = udivmodhi4 (a, b, 0);
|
||||
|
||||
if (neg)
|
||||
res = -res;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
HItype
|
||||
__modhi3 (HItype a, HItype b)
|
||||
{
|
||||
word_type neg = 0;
|
||||
HItype res;
|
||||
|
||||
if (a < 0)
|
||||
{
|
||||
a = -a;
|
||||
neg = 1;
|
||||
}
|
||||
|
||||
if (b < 0)
|
||||
b = -b;
|
||||
|
||||
res = udivmodhi4 (a, b, 1);
|
||||
|
||||
if (neg)
|
||||
res = -res;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
UHItype
|
||||
__udivhi3 (UHItype a, UHItype b)
|
||||
{
|
||||
return udivmodhi4 (a, b, 0);
|
||||
}
|
||||
|
||||
|
||||
UHItype
|
||||
__umodhi3 (UHItype a, UHItype b)
|
||||
{
|
||||
return udivmodhi4 (a, b, 1);
|
||||
}
|
||||
|
117
libgcc/config/gcn/lib2-divmod.c
Normal file
117
libgcc/config/gcn/lib2-divmod.c
Normal file
|
@ -0,0 +1,117 @@
|
|||
/* Copyright (C) 2012-2019 Free Software Foundation, Inc.
|
||||
Contributed by Altera and Mentor Graphics, 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/>. */
|
||||
|
||||
#include "lib2-gcn.h"
|
||||
|
||||
/* 32-bit SI divide and modulo as used in gcn. */
|
||||
|
||||
static USItype
|
||||
udivmodsi4 (USItype num, USItype den, word_type modwanted)
|
||||
{
|
||||
USItype bit = 1;
|
||||
USItype res = 0;
|
||||
|
||||
while (den < num && bit && !(den & (1L<<31)))
|
||||
{
|
||||
den <<=1;
|
||||
bit <<=1;
|
||||
}
|
||||
while (bit)
|
||||
{
|
||||
if (num >= den)
|
||||
{
|
||||
num -= den;
|
||||
res |= bit;
|
||||
}
|
||||
bit >>=1;
|
||||
den >>=1;
|
||||
}
|
||||
if (modwanted)
|
||||
return num;
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
SItype
|
||||
__divsi3 (SItype a, SItype b)
|
||||
{
|
||||
word_type neg = 0;
|
||||
SItype res;
|
||||
|
||||
if (a < 0)
|
||||
{
|
||||
a = -a;
|
||||
neg = !neg;
|
||||
}
|
||||
|
||||
if (b < 0)
|
||||
{
|
||||
b = -b;
|
||||
neg = !neg;
|
||||
}
|
||||
|
||||
res = udivmodsi4 (a, b, 0);
|
||||
|
||||
if (neg)
|
||||
res = -res;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
SItype
|
||||
__modsi3 (SItype a, SItype b)
|
||||
{
|
||||
word_type neg = 0;
|
||||
SItype res;
|
||||
|
||||
if (a < 0)
|
||||
{
|
||||
a = -a;
|
||||
neg = 1;
|
||||
}
|
||||
|
||||
if (b < 0)
|
||||
b = -b;
|
||||
|
||||
res = udivmodsi4 (a, b, 1);
|
||||
|
||||
if (neg)
|
||||
res = -res;
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
SItype
|
||||
__udivsi3 (SItype a, SItype b)
|
||||
{
|
||||
return udivmodsi4 (a, b, 0);
|
||||
}
|
||||
|
||||
|
||||
SItype
|
||||
__umodsi3 (SItype a, SItype b)
|
||||
{
|
||||
return udivmodsi4 (a, b, 1);
|
||||
}
|
||||
|
49
libgcc/config/gcn/lib2-gcn.h
Normal file
49
libgcc/config/gcn/lib2-gcn.h
Normal file
|
@ -0,0 +1,49 @@
|
|||
/* Integer arithmetic support for gcn.
|
||||
|
||||
Copyright (C) 2012-2019 Free Software Foundation, Inc.
|
||||
Contributed by Altera and Mentor Graphics, 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/>. */
|
||||
|
||||
#ifndef LIB2_GCN_H
|
||||
#define LIB2_GCN_H
|
||||
|
||||
/* Types. */
|
||||
|
||||
typedef char QItype __attribute__ ((mode (QI)));
|
||||
typedef unsigned char UQItype __attribute__ ((mode (QI)));
|
||||
typedef short HItype __attribute__ ((mode (HI)));
|
||||
typedef unsigned short UHItype __attribute__ ((mode (HI)));
|
||||
typedef int SItype __attribute__ ((mode (SI)));
|
||||
typedef unsigned int USItype __attribute__ ((mode (SI)));
|
||||
typedef int word_type __attribute__ ((mode (__word__)));
|
||||
|
||||
/* Exported functions. */
|
||||
extern SItype __divsi3 (SItype, SItype);
|
||||
extern SItype __modsi3 (SItype, SItype);
|
||||
extern SItype __udivsi3 (SItype, SItype);
|
||||
extern SItype __umodsi3 (SItype, SItype);
|
||||
extern HItype __divhi3 (HItype, HItype);
|
||||
extern HItype __modhi3 (HItype, HItype);
|
||||
extern UHItype __udivhi3 (UHItype, UHItype);
|
||||
extern UHItype __umodhi3 (UHItype, UHItype);
|
||||
extern SItype __mulsi3 (SItype, SItype);
|
||||
|
||||
#endif /* LIB2_GCN_H */
|
51
libgcc/config/gcn/sfp-machine.h
Normal file
51
libgcc/config/gcn/sfp-machine.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
/* Use 32-bit types here to prevent longlong.h trying to use TImode.
|
||||
Once TImode works we might be better to use 64-bit here. */
|
||||
|
||||
#define _FP_W_TYPE_SIZE 32
|
||||
#define _FP_W_TYPE unsigned int
|
||||
#define _FP_WS_TYPE signed int
|
||||
#define _FP_I_TYPE int
|
||||
|
||||
#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_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_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1)
|
||||
#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1
|
||||
#define _FP_NANSIGN_S 0
|
||||
#define _FP_NANSIGN_D 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)
|
||||
|
||||
#define _FP_TININESS_AFTER_ROUNDING 0
|
||||
|
||||
#define __LITTLE_ENDIAN 1234
|
||||
#define __BIG_ENDIAN 4321
|
||||
#define __BYTE_ORDER __LITTLE_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)));
|
16
libgcc/config/gcn/t-amdgcn
Normal file
16
libgcc/config/gcn/t-amdgcn
Normal file
|
@ -0,0 +1,16 @@
|
|||
LIB2ADD += $(srcdir)/config/gcn/lib2-divmod.c \
|
||||
$(srcdir)/config/gcn/lib2-divmod-hi.c
|
||||
|
||||
LIB2ADDEH=
|
||||
LIB2FUNCS_EXCLUDE=__main
|
||||
|
||||
override LIB2FUNCS_ST := $(filter-out __gcc_bcmp,$(LIB2FUNCS_ST))
|
||||
|
||||
# Debug information is not useful, and probably uses broken relocations
|
||||
LIBGCC2_DEBUG_CFLAGS = -g0
|
||||
|
||||
crt0.o: $(srcdir)/config/gcn/crt0.c
|
||||
$(crt_compile) -c $<
|
||||
|
||||
# Prevent building "advanced" stuff (for example, gcov support).
|
||||
INHIBIT_LIBC_CFLAGS = -Dinhibit_libc
|
Loading…
Add table
Reference in a new issue