+2020-01-27 Claudiu Zissulescu <claziss@synopsys.com>
+
+ * config/arc/crti.S: Add RF16 object attribute.
+ * config/arc/crtn.S: Likewise.
+ * config/arc/crttls.S: Likewise.
+ * config/arc/lib1funcs.S: Likewise.
+ * config/arc/fp-hack.h (ARC_OPTFPE): Define.
+ * config/arc/lib2funcs.c: New file.
+ * config/arc/t-arc: Add lib2funcs to LIB2ADD.
+
2020-01-24 Maciej W. Rozycki <macro@wdc.com>
* Makefile.in (configure_deps): Add `toolexeclibdir.m4'.
# This file contains the stack frame setup for contents of the .fini and
# .init sections.
+#ifdef __ARC_RF16__
+ /* Use object attributes to inform other tools this file is
+ safe for RF16 configuration. */
+ .arc_attribute Tag_ARC_ABI_rf16, 1
+#endif
.section .init
.global _init
.word 0
# This file just makes sure that the .fini and .init sections do in
# fact return. This file is the last thing linked into any executable.
+#ifdef __ARC_RF16__
+ /* Use object attributes to inform other tools this file is
+ safe for RF16 configuration. */
+ .arc_attribute Tag_ARC_ABI_rf16, 1
+#endif
.section .init
pop_s blink
j_s [blink]
the executable file might be covered by the GNU General Public License. */
+#ifdef __ARC_RF16__
+ /* Use object attributes to inform other tools this file is
+ safe for RF16 configuration. */
+ .arc_attribute Tag_ARC_ABI_rf16, 1
+#endif
+
#if (__ARC_TLS_REGNO__ != -1)
/* ANSI concatenation macros. */
#define ARC_FP_DEBUG 1
#define FINE_GRAINED_LIBRARIES
-#define ARC_OPTFPE (defined (__ARC700__) || defined (__ARC_FPX_QUARK__))
+
+#if defined (__ARC700__) || defined (__ARC_FPX_QUARK__)
+#define ARC_OPTFPE 1
+#endif
#if !ARC_OPTFPE || ARC_FP_DEBUG
#define L_pack_sf
#define ENDFUNC0(X) .Lfe_##X: .size X,.Lfe_##X-X
#define ENDFUNC(X) ENDFUNC0(X)
-
+#ifdef __ARC_RF16__
+ /* Use object attributes to inform other tools this file is
+ safe for RF16 configuration. */
+ .arc_attribute Tag_ARC_ABI_rf16, 1
+#endif
#ifdef L_mulsi3
.section .text
#endif
#endif /* L_umulsidi3 */
+#ifndef __ARC_RF16__
#ifdef L_muldi3
.section .text
.align 4
#endif /* __LITTLE_ENDIAN__ */
ENDFUNC(__muldi3)
#endif /* L_muldi3 */
+#endif /* !__ARC_RF16__ */
#ifdef L_umulsi3_highpart
#include "ieee-754/arc-ieee-754.h"
SYM(__udivsi3):
b @SYM(__udivmodsi4)
ENDFUNC(__udivsi3)
-#if 0 /* interferes with linux loader */
- .section .__arc_profile_forward, "a"
- .long SYM(__udivsi3)
- .long SYM(__udivmodsi4)
- .long 65536
-#endif
#endif /* L_udivsi3 */
j.d [r7]
mov r0,r1
ENDFUNC(__umodsi3)
-#if 0 /* interferes with linux loader */
- .section .__arc_profile_forward, "a"
- .long SYM(__umodsi3)
- .long SYM(__udivmodsi4)
- .long 65536
-#endif
#endif /* L_umodsi3 */
;;
;#endif
+#ifndef __ARC_RF16__
#ifdef L_millicodethunk_st
.section .text
.align 4
#endif /* L_millicodethunk_ret */
-#define ARC_OPTFPE (defined (__ARC700__) || defined (__ARC_FPX_QUARK__))
-
-#if ARC_OPTFPE
+#if defined (__ARC700__) || defined (__ARC_FPX_QUARK__)
#ifdef L_adddf3
#ifdef __ARC_NORM__
#include "ieee-754/adddf3.S"
#endif
#endif
#endif /* ARC_OPTFPE */
+
+#endif /* !__ARC_RF16__ */
--- /dev/null
+/* libgcc routines for ARC
+ Copyright (C) 2019 Free Software Foundation, Inc.
+
+ 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 int sint64_t __attribute__ ((mode (DI)));
+typedef unsigned int uint64_t __attribute__ ((mode (DI)));
+typedef unsigned int nint32_t __attribute__ ((mode (SI)));
+typedef int word_t __attribute__ ((mode (__word__)));
+
+sint64_t __muldi3 (sint64_t, sint64_t);
+nint32_t __umodsi3 (nint32_t, nint32_t);
+
+#ifdef __ARC_RF16__
+
+/* Generic multiplication procedure. No mpy operation involved. */
+sint64_t
+__muldi3 (sint64_t a, sint64_t b)
+{
+ sint64_t res = 0;
+ uint64_t cnt = a;
+
+ while (cnt)
+ {
+ if (cnt & 1)
+ res += b;
+ b <<= 1;
+ cnt >>= 1;
+ }
+ return res;
+}
+
+/* Unsigned 32bit integer division/modulus. */
+
+static inline __attribute__ ((__always_inline__))
+nint32_t
+udivmodsi4 (nint32_t num, nint32_t den, word_t modwanted)
+{
+ nint32_t bit = 1;
+ nint32_t res = 0;
+
+ while (den < num && bit && !(den & (1LL << 63)))
+ {
+ den <<= 1;
+ bit <<= 1;
+ }
+ while (bit)
+ {
+ if (num >= den)
+ {
+ num -= den;
+ res |= bit;
+ }
+ bit >>= 1;
+ den >>= 1;
+ }
+ if (modwanted)
+ return num;
+ return res;
+}
+
+nint32_t
+__umodsi3 (nint32_t a, nint32_t b)
+{
+ return udivmodsi4 (a, b, 1);
+}
+
+#endif
# used in an asm wrapper.
LIB2ADD = fp-bit.c dp-bit.c
+LIB2ADD += $(srcdir)/config/arc/lib2funcs.c
dp-bit.c: $(srcdir)/fp-bit.c
echo '#ifndef __big_endian__' > dp-bit.c