/* Long long. */
set_optab_libfunc (ashr_optab, DImode, "__pruabi_asrll");
- set_optab_libfunc (smul_optab, DImode, "__pruabi_mpyll");
set_optab_libfunc (ashl_optab, DImode, "__pruabi_lslll");
set_optab_libfunc (lshr_optab, DImode, "__pruabi_lsrll");
+ if (TARGET_OPT_MUL)
+ {
+ set_optab_libfunc (smul_optab, DImode, "__pruabi_mpyll");
+ }
+ else
+ {
+ set_optab_libfunc (smul_optab, DImode, "__pruabi_softmpyll");
+ set_optab_libfunc (smul_optab, SImode, "__pruabi_softmpyi");
+ }
+
set_optab_libfunc (sdiv_optab, SImode, "__pruabi_divi");
set_optab_libfunc (udiv_optab, SImode, "__pruabi_divu");
set_optab_libfunc (smod_optab, SImode, "__pruabi_remi");
__gnu_eqsf2
__gnu_eqdf2
}
+
+%inherit GCC_16.0.0 GCC_9.0.0
+GCC_16.0.0 {
+ __pruabi_softmpyi
+ __pruabi_softmpyll
+}
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* 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"
--- /dev/null
+/* 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"
$(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 \