summaryrefslogtreecommitdiff
path: root/arch/nios2/lib/divmod.c
diff options
context:
space:
mode:
authorThomas Chou <thomas@wytron.com.tw>2010-05-15 06:00:05 +0800
committerScott McNutt <smcnutt@psyent.com>2010-05-28 10:56:03 -0400
commit8d52ea6db484c689a75ef8a36a4e525753b8f078 (patch)
tree167f6c45a02eb0a3aa570ff8b215c48bb4a48f96 /arch/nios2/lib/divmod.c
parent0df01fd3d71481b5cc7aeea6a741b9fc3be15178 (diff)
downloadolio-uboot-2014.01-8d52ea6db484c689a75ef8a36a4e525753b8f078.tar.xz
olio-uboot-2014.01-8d52ea6db484c689a75ef8a36a4e525753b8f078.zip
nios2: fix div64 issue for gcc4
This patch fixes the run-time error on div64 when built with gcc4, which was reported by jhwu0625 on nios forum. It merges math support from libgcc of gcc4. This patch is copied from nios2-linux. It works with both gcc3 and gcc4. The old mult.c, divmod.c and math.h are removed. Signed-off-by: Thomas Chou <thomas@wytron.com.tw> Signed-off-by: Scott McNutt <smcnutt@psyent.com>
Diffstat (limited to 'arch/nios2/lib/divmod.c')
-rw-r--r--arch/nios2/lib/divmod.c101
1 files changed, 0 insertions, 101 deletions
diff --git a/arch/nios2/lib/divmod.c b/arch/nios2/lib/divmod.c
deleted file mode 100644
index 3c7e71e97..000000000
--- a/arch/nios2/lib/divmod.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.
- */
-
-
-#include "math.h"
-
-USItype udivmodsi4 (USItype num, USItype den, word_type modwanted)
-{
- USItype bit = 1;
- USItype res = 0;
-
- while (den < num && bit && !(den & (1L << 31))) {
- den <<= 1;
- bit <<= 1;
- }
- while (bit) {
- if (num >= den) {
- num -= den;
- res |= bit;
- }
- bit >>= 1;
- den >>= 1;
- }
- if (modwanted)
- return num;
- return res;
-}
-
-
-SItype __divsi3 (SItype a, SItype b)
-{
- word_type neg = 0;
- SItype res;
-
- if (a < 0) {
- a = -a;
- neg = !neg;
- }
-
- if (b < 0) {
- b = -b;
- neg = !neg;
- }
-
- res = udivmodsi4 (a, b, 0);
-
- if (neg)
- res = -res;
-
- return res;
-}
-
-
-SItype __modsi3 (SItype a, SItype b)
-{
- word_type neg = 0;
- SItype res;
-
- if (a < 0) {
- a = -a;
- neg = 1;
- }
-
- if (b < 0)
- b = -b;
-
- res = udivmodsi4 (a, b, 1);
-
- if (neg)
- res = -res;
-
- return res;
-}
-
-
-SItype __udivsi3 (SItype a, SItype b)
-{
- return udivmodsi4 (a, b, 0);
-}
-
-
-SItype __umodsi3 (SItype a, SItype b)
-{
- return udivmodsi4 (a, b, 1);
-}