aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorJ"orn Rennecke <amylaar@redhat.com>2001-08-30 17:51:04 +0000
committerJoern Rennecke <amylaar@gcc.gnu.org>2001-08-30 18:51:04 +0100
commit8c062645a6f2df8913a706149a8181e021e4aea6 (patch)
treed42525b4c97c904c63f282aa023ffaceaa699bb3 /gcc/config
parent6f41623f030d340b9f852937e9b445feec5d40e6 (diff)
downloadgcc-8c062645a6f2df8913a706149a8181e021e4aea6.zip
gcc-8c062645a6f2df8913a706149a8181e021e4aea6.tar.gz
gcc-8c062645a6f2df8913a706149a8181e021e4aea6.tar.bz2
t-h8300 (LIB1ASMFUNCS): Add _fixunssfdi and _fixunssfsi_asm.
* 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
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/h8300/fixunssfsi.c43
-rw-r--r--gcc/config/h8300/lib1funcs.asm28
-rw-r--r--gcc/config/h8300/t-h83007
3 files changed, 77 insertions, 1 deletions
diff --git a/gcc/config/h8300/fixunssfsi.c b/gcc/config/h8300/fixunssfsi.c
new file mode 100644
index 0000000..ed37803
--- /dev/null
+++ b/gcc/config/h8300/fixunssfsi.c
@@ -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
diff --git a/gcc/config/h8300/lib1funcs.asm b/gcc/config/h8300/lib1funcs.asm
index 3a1ad2b..da69acd 100644
--- a/gcc/config/h8300/lib1funcs.asm
+++ b/gcc/config/h8300/lib1funcs.asm
@@ -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 */
diff --git a/gcc/config/h8300/t-h8300 b/gcc/config/h8300/t-h8300
index cd4de39..de59acb 100644
--- a/gcc/config/h8300/t-h8300
+++ b/gcc/config/h8300/t-h8300
@@ -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