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
This commit is contained in:
J"orn Rennecke 2001-08-30 17:51:04 +00:00 committed by Joern Rennecke
parent 6f41623f03
commit 8c062645a6
4 changed files with 84 additions and 1 deletions

View 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

View file

@ -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

View 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 */

View 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