aboutsummaryrefslogtreecommitdiff
path: root/libgcc/config/pru
diff options
context:
space:
mode:
Diffstat (limited to 'libgcc/config/pru')
-rw-r--r--libgcc/config/pru/libgcc-eabi.ver6
-rw-r--r--libgcc/config/pru/pru-softmpy.h42
-rw-r--r--libgcc/config/pru/softmpyi.c37
-rw-r--r--libgcc/config/pru/softmpyll.c37
-rw-r--r--libgcc/config/pru/t-pru2
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 \