]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
t-h8300 (LIB1ASMFUNCS): Add _fixunssfdi and _fixunssfsi_asm.
authorJ"orn Rennecke <amylaar@redhat.com>
Thu, 30 Aug 2001 17:51:04 +0000 (17:51 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Thu, 30 Aug 2001 17:51:04 +0000 (18:51 +0100)
* t-h8300 (LIB1ASMFUNCS): Add _fixunssfdi and _fixunssfsi_asm.
(LIB2FUNCS_EXTRA): Define.
config/h8300/lib1funcs.asm: New part: L_fixunssfsi_asm .
config/h8300/fixunssfsi.c: New file.

From-SVN: r45291

gcc/ChangeLog
gcc/config/h8300/fixunssfsi.c [new file with mode: 0644]
gcc/config/h8300/lib1funcs.asm
gcc/config/h8300/t-h8300

index e0661aade98baaf93c552e99a304ec575f05f47a..a725b4f9023da7312695c98372f6afe888354fa3 100644 (file)
@@ -1,3 +1,10 @@
+Thu Aug 30 18:50:37 2001  J"orn Rennecke <amylaar@redhat.com>
+
+       * t-h8300 (LIB1ASMFUNCS): Add _fixunssfdi and _fixunssfsi_asm.
+       (LIB2FUNCS_EXTRA): Define.
+       config/h8300/lib1funcs.asm: New part: L_fixunssfsi_asm .
+       config/h8300/fixunssfsi.c: New file.
+
 2001-08-30  Kazu Hirata  <kazu@hxi.com>
 
        * config/h8300/h8300.md (zero_extendqihi2): Changes to
diff --git a/gcc/config/h8300/fixunssfsi.c b/gcc/config/h8300/fixunssfsi.c
new file mode 100644 (file)
index 0000000..ed37803
--- /dev/null
@@ -0,0 +1,43 @@
+/* More subroutines needed by GCC output code on some machines.  */
+/* Compile this one with gcc.  */
+/* Copyright (C) 1989, 1992, 2001  Free Software Foundation, Inc.
+
+This file is part of GNU CC.
+
+GNU CC 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 2, or (at your option)
+any later version.
+
+In addition to the permissions in the GNU General Public License, the
+Free Software Foundation gives you unlimited permission to link the
+compiled version of this file into combinations with other programs,
+and to distribute those combinations without any restriction coming
+from the use of this file.  (The General Public License restrictions
+do apply in other respects; for example, they cover modification of
+the file, and distribution when not linked into a combine
+executable.)
+
+GNU CC 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.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330,
+Boston, MA 02111-1307, USA.  */
+
+/* The libgcc2.c implementation gets confused by our type setup and creates
+   a directly recursive call, so we do our own implementation.  For the h8300,
+   that's in lib1funcs.asm, for h8300h / h8s, it's here.  */
+
+#ifndef __H8300__
+long
+__fixunssfsi (float a)
+{
+  if (a >= (float) 32768L)
+    return (long) (a -32768L) +32768L;
+  return (long) a;
+}
+#endif
index 3a1ad2b759976758eb81fbc7066ba50e1db13195..da69acd435b6b31d3e011f9f9993ce4438b9ec8d 100644 (file)
@@ -764,3 +764,31 @@ _done:
 
 #endif
 #endif /* L_mulsi3 */
+#ifdef L_fixunssfsi_asm
+/* For the h8300 we use asm to save some bytes, to
+   allow more programs to fit into the tiny address
+   space.  For h8300h / h8s, the C version is good enough.  */
+#ifdef __H8300__
+/* We still treat NANs different than libgcc2.c, but then, the
+   behaviour is undefined anyways.  */
+       .global ___fixunssfsi
+___fixunssfsi:
+       cmp.b #0x47,r0h
+       bge Large_num
+       jmp     @___fixsfsi
+Large_num:
+       bhi L_huge_num
+       xor.b #0x80,A0L
+       bmi L_shift8
+L_huge_num:
+       mov.w #65535,A0
+       mov.w A0,A1
+       rts
+L_shift8:
+       mov.b A0L,A0H
+       mov.b A1H,A0L
+       mov.b A1L,A1H
+       mov.b #0,A1L
+       rts
+#endif
+#endif /* L_fixunssfsi_asm */
index cd4de39657626fbf74021f5c2ae20bfff5a15ac1..de59acb6367d8445b582f2ab055cdee5953a7455 100644 (file)
@@ -1,6 +1,11 @@
+# The three first floating point functions listed in LIB1ASMFUNCS (_fixsfdi,
+# _floatdisf, and _fixunssfdi) are used to disable the inclusion of those
+# from libgcc2.c.  They do not actually exist in lib1funcs.asm.
 LIB1ASMSRC = h8300/lib1funcs.asm
 LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3 \
-  _floatdisf _fixsfdi
+  _floatdisf _fixsfdi _fixunssfdi _fixunssfsi_asm
+
+LIB2FUNCS_EXTRA = $(srcdir)/config/h8300/fixunssfsi.c
 
 # We do not have DF or DI types, so fake out the libgcc2 compilation.
 TARGET_LIBGCC2_CFLAGS = -DDF=SF -DDI=SI