Commit 8c062645 by J"orn Rennecke Committed by Joern Rennecke

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
parent 6f41623f
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
......
/* 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
......@@ -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 */
# 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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment