summaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-03 04:53:16 +0000
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>2004-03-03 04:53:16 +0000
commit82e2f92a089e1af74cb975b5fc86050b2968b4fe (patch)
tree158fc10972c66de2fb94b1cff421519fc1d3212c /gcc/config
parenta3a0bf8e3b532716236add5ad95096749f07e7f5 (diff)
downloadgcc-82e2f92a089e1af74cb975b5fc86050b2968b4fe.tar.gz
* config/h8300/lib1funcs.asm (___fixunssfsi): Change the
threshold to 0x4f. Revert: 2004-02-27 Kazu Hirata <kazu@cs.umass.edu> * config/h8300/fixunssfsi.c (__fixunssfsi): Enable on H8/300 as well. * config/h8300/lib1funcs.asm (___fixunssfsi): Remove. * config/h8300/t-h8300 (LIB1ASMFUNCS): Remove _fixunssfsi_asm. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@78818 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/h8300/fixunssfsi.c5
-rw-r--r--gcc/config/h8300/lib1funcs.asm28
-rw-r--r--gcc/config/h8300/t-h83003
3 files changed, 34 insertions, 2 deletions
diff --git a/gcc/config/h8300/fixunssfsi.c b/gcc/config/h8300/fixunssfsi.c
index 0cd72dee048..06120ba4905 100644
--- a/gcc/config/h8300/fixunssfsi.c
+++ b/gcc/config/h8300/fixunssfsi.c
@@ -29,8 +29,10 @@ 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. */
+ a directly recursive call, so we do our own implementation. For
+ the H8/300, that's in lib1funcs.asm, for H8/300H and H8S, it's here. */
+#ifndef __H8300__
long __fixunssfsi (float a);
long
@@ -40,3 +42,4 @@ __fixunssfsi (float a)
return (long) (a - 32768L) + 32768L;
return (long) a;
}
+#endif
diff --git a/gcc/config/h8300/lib1funcs.asm b/gcc/config/h8300/lib1funcs.asm
index bf981e050d0..8a7e5054256 100644
--- a/gcc/config/h8300/lib1funcs.asm
+++ b/gcc/config/h8300/lib1funcs.asm
@@ -806,3 +806,31 @@ L_skip2:
#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 the H8/300H and H8S, the C version is good enough. */
+#ifdef __H8300__
+/* We still treat NANs different than libgcc2.c, but then, the
+ behavior is undefined anyways. */
+ .global ___fixunssfsi
+___fixunssfsi:
+ cmp.b #0x4f,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 476dc18884a..28ea2cf71bd 100644
--- a/gcc/config/h8300/t-h8300
+++ b/gcc/config/h8300/t-h8300
@@ -1,5 +1,6 @@
LIB1ASMSRC = h8300/lib1funcs.asm
-LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3
+LIB1ASMFUNCS = _cmpsi2 _ucmpsi2 _divhi3 _divsi3 _mulhi3 _mulsi3 \
+ _fixunssfsi_asm
LIB2FUNCS_EXTRA = \
$(srcdir)/config/h8300/clzhi2.c \