ns32k.h (TARGET_IEEE_COMPARE): Correct earlier patch.

* config/ns32k/ns32k.h (TARGET_IEEE_COMPARE): Correct earlier patch.
        (RETURN_ADDR_RTX): Cannot determine return address for FRAME > 0
        when there is no frame pointer.
        (INITIAL_FRAME_POINTER_OFFSET): Count stack space for saved fp
        registers properly.
        * config/ns32k/__unorddf2.c: New file.
        * config/ns32k/__unordsf2.c: New file.
        * config/ns32k/t-ns32k: New file.
        * config.gcc (ns32k-*-netbsd*): Use it.

From-SVN: r55949
This commit is contained in:
Ian Dall 2002-08-01 21:21:52 +00:00 committed by Richard Henderson
parent 1707273202
commit ac14c72576
6 changed files with 89 additions and 7 deletions

View File

@ -1,3 +1,15 @@
2002-08-01 Ian Dall <ian@sibyl.beware.dropbear.id.au>
* config/ns32k/ns32k.h (TARGET_IEEE_COMPARE): Correct earlier patch.
(RETURN_ADDR_RTX): Cannot determine return address for FRAME > 0
when there is no frame pointer.
(INITIAL_FRAME_POINTER_OFFSET): Count stack space for saved fp
registers properly.
* config/ns32k/__unorddf2.c: New file.
* config/ns32k/__unordsf2.c: New file.
* config/ns32k/t-ns32k: New file.
* config.gcc (ns32k-*-netbsd*): Use it.
2002-08-01 Aldy Hernandez <aldyh@redhat.com> 2002-08-01 Aldy Hernandez <aldyh@redhat.com>
* config/rs6000/rs6000.h (SPU_CONST_OFFSET_OK): Change to 0xff. * config/rs6000/rs6000.h (SPU_CONST_OFFSET_OK): Change to 0xff.

View File

@ -1970,7 +1970,7 @@ ns32k-*-netbsdelf*)
ns32k-*-netbsd*) ns32k-*-netbsd*)
tm_file="${tm_file} netbsd.h netbsd-aout.h ns32k/netbsd.h" tm_file="${tm_file} netbsd.h netbsd-aout.h ns32k/netbsd.h"
# On NetBSD, the headers are already okay, except for math.h. # On NetBSD, the headers are already okay, except for math.h.
tmake_file=t-netbsd tmake_file="t-netbsd ns32k/t-ns32k"
use_collect2=yes use_collect2=yes
;; ;;
pdp11-*-bsd) pdp11-*-bsd)

View File

@ -0,0 +1,34 @@
/* Lightweight function to test for ieee unordered comparison
Copyright (C) 2002
Free Software Foundation, Inc.
Contributed by Ian Dall <ian@beware.dropbear.id.au>
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.
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. */
# define ISNAN(x) ( \
{ \
union u { double d; unsigned int i[2]; } *t = (union u *)&(x); \
((t->i[1] & 0x7ff00000) == 0x7ff00000) && \
(t->i[0] != 0 || (t->i[1] & 0xfffff) != 0); \
})
int __unorddf2 (double, double);
int __unorddf2 (double a, double b)
{
return ISNAN(a) || ISNAN(b);
}

View File

@ -0,0 +1,34 @@
/* Lightweight function to test for ieee unordered comparison
Copyright (C) 2002
Free Software Foundation, Inc.
Contributed by Ian Dall <ian@beware.dropbear.id.au>
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.
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. */
# define ISNAN(x) ( \
{ \
union u { float f; unsigned int i; } *t = (union u *)&(x); \
((t->i & 0x7f800000) == 0x7f800000) && \
((t->i & 0x7fffff) != 0); \
})
int __unordsf2 ( float, float);
int __unordsf2 ( float a, float b)
{
return ISNAN(a) || ISNAN(b);
}

View File

@ -129,7 +129,7 @@ extern int target_flags;
/* Compile using bitfield insns. */ /* Compile using bitfield insns. */
#define TARGET_BITFIELD ((target_flags & MASK_NO_BITFIELD) == 0) #define TARGET_BITFIELD ((target_flags & MASK_NO_BITFIELD) == 0)
#define TARGET_IEEE_FP (target_flags & MASK_IEEE_COMPARE) #define TARGET_IEEE_COMPARE (target_flags & MASK_IEEE_COMPARE)
/* Macro to define tables used to set the flags. /* Macro to define tables used to set the flags.
This is a list in braces of pairs in braces, This is a list in braces of pairs in braces,
@ -578,7 +578,8 @@ enum reg_class
After the prologue, RA is at 4(fp) in the current frame. */ After the prologue, RA is at 4(fp) in the current frame. */
#define RETURN_ADDR_RTX(COUNT, FRAME) \ #define RETURN_ADDR_RTX(COUNT, FRAME) \
(gen_rtx (MEM, Pmode, gen_rtx (PLUS, Pmode, (FRAME), GEN_INT(4)))) ((COUNT> 0 && flag_omit_frame_pointer)? NULL_RTX \
: gen_rtx (MEM, Pmode, gen_rtx (PLUS, Pmode, (FRAME), GEN_INT(4))))
/* A C expression whose value is an integer giving the offset, in /* A C expression whose value is an integer giving the offset, in
bytes, from the value of the stack pointer register to the top of bytes, from the value of the stack pointer register to the top of
@ -743,12 +744,9 @@ enum reg_class
{ \ { \
int regno; \ int regno; \
int offset = -4; \ int offset = -4; \
for (regno = 0; regno < L1_REGNUM; regno++) \ for (regno = 0; regno < FRAME_POINTER_REGNUM; regno++) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \ if (regs_ever_live[regno] && ! call_used_regs[regno]) \
offset += 4; \ offset += 4; \
for (; regno < FRAME_POINTER_REGNUM; regno++) \
if (regs_ever_live[regno] && ! call_used_regs[regno]) \
offset += 8; \
if (flag_pic && current_function_uses_pic_offset_table) \ if (flag_pic && current_function_uses_pic_offset_table) \
offset += 4; \ offset += 4; \
(DEPTH) = (offset + get_frame_size () \ (DEPTH) = (offset + get_frame_size () \

4
gcc/config/ns32k/t-ns32k Normal file
View File

@ -0,0 +1,4 @@
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
LIB2FUNCS_EXTRA = $(srcdir)/config/ns32k/__unorddf2.c \
$(srcdir)/config/ns32k/__unordsf2.c