58 lines
1.8 KiB
C
58 lines
1.8 KiB
C
|
/* More subroutines needed by GCC output code on some machines. */
|
||
|
/* Compile this one with gcc. */
|
||
|
/* Copyright (C) 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
|
||
|
2000, 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 Licence 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 Licence, 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 Licence 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 Licence for more details.
|
||
|
|
||
|
You should have received a copy of the GNU General Public Licence
|
||
|
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. */
|
||
|
|
||
|
/* It is incorrect to include config.h here, because this file is being
|
||
|
compiled for the target, and hence definitions concerning only the host
|
||
|
do not apply. */
|
||
|
|
||
|
#include <linux/types.h>
|
||
|
|
||
|
union DWunion {
|
||
|
s64 ll;
|
||
|
struct {
|
||
|
s32 low;
|
||
|
s32 high;
|
||
|
} s;
|
||
|
};
|
||
|
|
||
|
s64 __negdi2(s64 u)
|
||
|
{
|
||
|
union DWunion w;
|
||
|
union DWunion uu;
|
||
|
|
||
|
uu.ll = u;
|
||
|
|
||
|
w.s.low = -uu.s.low;
|
||
|
w.s.high = -uu.s.high - ((u32) w.s.low > 0);
|
||
|
|
||
|
return w.ll;
|
||
|
}
|