diff options
Diffstat (limited to 'libgcc/config/pru')
-rw-r--r-- | libgcc/config/pru/libgcc-eabi.ver | 6 | ||||
-rw-r--r-- | libgcc/config/pru/pru-softmpy.h | 42 | ||||
-rw-r--r-- | libgcc/config/pru/softmpyi.c | 37 | ||||
-rw-r--r-- | libgcc/config/pru/softmpyll.c | 37 | ||||
-rw-r--r-- | libgcc/config/pru/t-pru | 2 |
5 files changed, 124 insertions, 0 deletions
diff --git a/libgcc/config/pru/libgcc-eabi.ver b/libgcc/config/pru/libgcc-eabi.ver index e8f7fe2..ded8e73 100644 --- a/libgcc/config/pru/libgcc-eabi.ver +++ b/libgcc/config/pru/libgcc-eabi.ver @@ -86,3 +86,9 @@ GCC_9.0.0 { __gnu_eqsf2 __gnu_eqdf2 } + +%inherit GCC_16.0.0 GCC_9.0.0 +GCC_16.0.0 { + __pruabi_softmpyi + __pruabi_softmpyll +} diff --git a/libgcc/config/pru/pru-softmpy.h b/libgcc/config/pru/pru-softmpy.h new file mode 100644 index 0000000..9f46e6c --- /dev/null +++ b/libgcc/config/pru/pru-softmpy.h @@ -0,0 +1,42 @@ +/* libgcc routines for PRU. + Copyright (C) 2025 Free Software Foundation, Inc. + Based on rl78/rl78-mul.h. + + 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. + + 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/>. */ + +UINT_TYPE C2(__pruabi_softmpy,NAME_MODE) (UINT_TYPE, UINT_TYPE); +UINT_TYPE +C2(__pruabi_softmpy,NAME_MODE) (UINT_TYPE a, UINT_TYPE b) +{ + UINT_TYPE rv = 0; + + unsigned char bit; + + for (bit=0; b && bit<sizeof(UINT_TYPE)*8; bit++) + { + if (b & 1) + rv += a; + a <<= 1; + b >>= 1; + } + return rv; +} diff --git a/libgcc/config/pru/softmpyi.c b/libgcc/config/pru/softmpyi.c new file mode 100644 index 0000000..fa9f0db --- /dev/null +++ b/libgcc/config/pru/softmpyi.c @@ -0,0 +1,37 @@ +/* libgcc routines for PRU + Copyright (C) 2025 Free Software Foundation, Inc. + Based on rl78/lib2mul.c + + 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. + + 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/>. */ + +typedef unsigned int uint32_type __attribute__ ((mode (SI))); + +#define C2B(a,b) a##b +#define C2(a,b) C2B(a,b) + +#undef UINT_TYPE +#undef NAME_MODE + +#define UINT_TYPE uint32_type +#define NAME_MODE i + +#include "pru-softmpy.h" diff --git a/libgcc/config/pru/softmpyll.c b/libgcc/config/pru/softmpyll.c new file mode 100644 index 0000000..8eedc25 --- /dev/null +++ b/libgcc/config/pru/softmpyll.c @@ -0,0 +1,37 @@ +/* libgcc routines for PRU + Copyright (C) 2025 Free Software Foundation, Inc. + Based on rl78/lib2mul.c + + 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. + + 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/>. */ + +typedef unsigned int uint64_type __attribute__ ((mode (DI))); + +#define C2B(a,b) a##b +#define C2(a,b) C2B(a,b) + +#undef UINT_TYPE +#undef NAME_MODE + +#define UINT_TYPE uint64_type +#define NAME_MODE ll + +#include "pru-softmpy.h" diff --git a/libgcc/config/pru/t-pru b/libgcc/config/pru/t-pru index e844e79..7554411 100644 --- a/libgcc/config/pru/t-pru +++ b/libgcc/config/pru/t-pru @@ -28,6 +28,8 @@ LIB2ADD += \ $(srcdir)/config/pru/lib2divSI.c \ $(srcdir)/config/pru/lib2bitcountHI.c \ $(srcdir)/config/pru/mpyll.S \ + $(srcdir)/config/pru/softmpyll.c \ + $(srcdir)/config/pru/softmpyi.c \ $(srcdir)/config/pru/gef.c \ $(srcdir)/config/pru/gtf.c \ $(srcdir)/config/pru/lef.c \ |