12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /* 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;
- }
|