[ARM] 3049/1: More optimized libgcc functions
Patch from Nicolas Pitre This patch gets rid of the last C implementations of needed libgcc functions for the kernel, replacing them with optimized assembly versions. Those functions are: __ashldi3 __ashrdi3 __lshrdi3 __muldi3 __ucmpdi2 The first 3 were lifted from gcc, the other two were written from scratch. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
committed by
Russell King
parent
cb7610d018
commit
f741a1aab5
48
arch/arm/lib/ashldi3.S
Normal file
48
arch/arm/lib/ashldi3.S
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/* Copyright 1995, 1996, 1998, 1999, 2000, 2003, 2004, 2005
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file 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.)
|
||||||
|
|
||||||
|
This file 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 this program; see the file COPYING. If not, write to
|
||||||
|
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
|
||||||
|
#ifdef __ARMEB__
|
||||||
|
#define al r1
|
||||||
|
#define ah r0
|
||||||
|
#else
|
||||||
|
#define al r0
|
||||||
|
#define ah r1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ENTRY(__ashldi3)
|
||||||
|
|
||||||
|
subs r3, r2, #32
|
||||||
|
rsb ip, r2, #32
|
||||||
|
movmi ah, ah, lsl r2
|
||||||
|
movpl ah, al, lsl r3
|
||||||
|
orrmi ah, ah, al, lsr ip
|
||||||
|
mov al, al, lsl r2
|
||||||
|
mov pc, lr
|
||||||
|
|
@@ -1,56 +0,0 @@
|
|||||||
/* More subroutines needed by GCC output code on some machines. */
|
|
||||||
/* Compile this one with gcc. */
|
|
||||||
/* Copyright (C) 1989, 92-98, 1999 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.
|
|
||||||
|
|
||||||
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. */
|
|
||||||
|
|
||||||
/* As a special exception, if you link this library with other files,
|
|
||||||
some of which are compiled with GCC, to produce an executable,
|
|
||||||
this library does not by itself cause the resulting executable
|
|
||||||
to be covered by the GNU General Public License.
|
|
||||||
This exception does not however invalidate any other reasons why
|
|
||||||
the executable file might be covered by the GNU General Public License.
|
|
||||||
*/
|
|
||||||
/* support functions required by the kernel. based on code from gcc-2.95.3 */
|
|
||||||
/* I Molton 29/07/01 */
|
|
||||||
|
|
||||||
#include "gcclib.h"
|
|
||||||
|
|
||||||
s64 __ashldi3(s64 u, int b)
|
|
||||||
{
|
|
||||||
DIunion w;
|
|
||||||
int bm;
|
|
||||||
DIunion uu;
|
|
||||||
|
|
||||||
if (b == 0)
|
|
||||||
return u;
|
|
||||||
|
|
||||||
uu.ll = u;
|
|
||||||
|
|
||||||
bm = (sizeof(s32) * BITS_PER_UNIT) - b;
|
|
||||||
if (bm <= 0) {
|
|
||||||
w.s.low = 0;
|
|
||||||
w.s.high = (u32) uu.s.low << -bm;
|
|
||||||
} else {
|
|
||||||
u32 carries = (u32) uu.s.low >> bm;
|
|
||||||
w.s.low = (u32) uu.s.low << b;
|
|
||||||
w.s.high = ((u32) uu.s.high << b) | carries;
|
|
||||||
}
|
|
||||||
|
|
||||||
return w.ll;
|
|
||||||
}
|
|
48
arch/arm/lib/ashrdi3.S
Normal file
48
arch/arm/lib/ashrdi3.S
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/* Copyright 1995, 1996, 1998, 1999, 2000, 2003, 2004, 2005
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file 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.)
|
||||||
|
|
||||||
|
This file 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 this program; see the file COPYING. If not, write to
|
||||||
|
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
|
||||||
|
#ifdef __ARMEB__
|
||||||
|
#define al r1
|
||||||
|
#define ah r0
|
||||||
|
#else
|
||||||
|
#define al r0
|
||||||
|
#define ah r1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ENTRY(__ashrdi3)
|
||||||
|
|
||||||
|
subs r3, r2, #32
|
||||||
|
rsb ip, r2, #32
|
||||||
|
movmi al, al, lsr r2
|
||||||
|
movpl al, ah, asr r3
|
||||||
|
orrmi al, al, ah, lsl ip
|
||||||
|
mov ah, ah, asr r2
|
||||||
|
mov pc, lr
|
||||||
|
|
@@ -1,57 +0,0 @@
|
|||||||
/* More subroutines needed by GCC output code on some machines. */
|
|
||||||
/* Compile this one with gcc. */
|
|
||||||
/* Copyright (C) 1989, 92-98, 1999 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.
|
|
||||||
|
|
||||||
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. */
|
|
||||||
|
|
||||||
/* As a special exception, if you link this library with other files,
|
|
||||||
some of which are compiled with GCC, to produce an executable,
|
|
||||||
this library does not by itself cause the resulting executable
|
|
||||||
to be covered by the GNU General Public License.
|
|
||||||
This exception does not however invalidate any other reasons why
|
|
||||||
the executable file might be covered by the GNU General Public License.
|
|
||||||
*/
|
|
||||||
/* support functions required by the kernel. based on code from gcc-2.95.3 */
|
|
||||||
/* I Molton 29/07/01 */
|
|
||||||
|
|
||||||
#include "gcclib.h"
|
|
||||||
|
|
||||||
s64 __ashrdi3(s64 u, int b)
|
|
||||||
{
|
|
||||||
DIunion w;
|
|
||||||
int bm;
|
|
||||||
DIunion uu;
|
|
||||||
|
|
||||||
if (b == 0)
|
|
||||||
return u;
|
|
||||||
|
|
||||||
uu.ll = u;
|
|
||||||
|
|
||||||
bm = (sizeof(s32) * BITS_PER_UNIT) - b;
|
|
||||||
if (bm <= 0) {
|
|
||||||
/* w.s.high = 1..1 or 0..0 */
|
|
||||||
w.s.high = uu.s.high >> (sizeof(s32) * BITS_PER_UNIT - 1);
|
|
||||||
w.s.low = uu.s.high >> -bm;
|
|
||||||
} else {
|
|
||||||
u32 carries = (u32) uu.s.high << bm;
|
|
||||||
w.s.high = uu.s.high >> b;
|
|
||||||
w.s.low = ((u32) uu.s.low >> b) | carries;
|
|
||||||
}
|
|
||||||
|
|
||||||
return w.ll;
|
|
||||||
}
|
|
@@ -1,22 +0,0 @@
|
|||||||
/* gcclib.h -- definitions for various functions 'borrowed' from gcc-2.95.3 */
|
|
||||||
/* I Molton 29/07/01 */
|
|
||||||
|
|
||||||
#include <linux/types.h>
|
|
||||||
|
|
||||||
#define BITS_PER_UNIT 8
|
|
||||||
#define SI_TYPE_SIZE (sizeof(s32) * BITS_PER_UNIT)
|
|
||||||
|
|
||||||
#ifdef __ARMEB__
|
|
||||||
struct DIstruct {
|
|
||||||
s32 high, low;
|
|
||||||
};
|
|
||||||
#else
|
|
||||||
struct DIstruct {
|
|
||||||
s32 low, high;
|
|
||||||
};
|
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef union {
|
|
||||||
struct DIstruct s;
|
|
||||||
s64 ll;
|
|
||||||
} DIunion;
|
|
48
arch/arm/lib/lshrdi3.S
Normal file
48
arch/arm/lib/lshrdi3.S
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
/* Copyright 1995, 1996, 1998, 1999, 2000, 2003, 2004, 2005
|
||||||
|
Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file 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.)
|
||||||
|
|
||||||
|
This file 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 this program; see the file COPYING. If not, write to
|
||||||
|
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
|
||||||
|
Boston, MA 02110-1301, USA. */
|
||||||
|
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
|
||||||
|
#ifdef __ARMEB__
|
||||||
|
#define al r1
|
||||||
|
#define ah r0
|
||||||
|
#else
|
||||||
|
#define al r0
|
||||||
|
#define ah r1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ENTRY(__lshrdi3)
|
||||||
|
|
||||||
|
subs r3, r2, #32
|
||||||
|
rsb ip, r2, #32
|
||||||
|
movmi al, al, lsr r2
|
||||||
|
movpl al, ah, lsr r3
|
||||||
|
orrmi al, al, ah, lsl ip
|
||||||
|
mov ah, ah, lsr r2
|
||||||
|
mov pc, lr
|
||||||
|
|
@@ -1,56 +0,0 @@
|
|||||||
/* More subroutines needed by GCC output code on some machines. */
|
|
||||||
/* Compile this one with gcc. */
|
|
||||||
/* Copyright (C) 1989, 92-98, 1999 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.
|
|
||||||
|
|
||||||
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. */
|
|
||||||
|
|
||||||
/* As a special exception, if you link this library with other files,
|
|
||||||
some of which are compiled with GCC, to produce an executable,
|
|
||||||
this library does not by itself cause the resulting executable
|
|
||||||
to be covered by the GNU General Public License.
|
|
||||||
This exception does not however invalidate any other reasons why
|
|
||||||
the executable file might be covered by the GNU General Public License.
|
|
||||||
*/
|
|
||||||
/* support functions required by the kernel. based on code from gcc-2.95.3 */
|
|
||||||
/* I Molton 29/07/01 */
|
|
||||||
|
|
||||||
#include "gcclib.h"
|
|
||||||
|
|
||||||
s64 __lshrdi3(s64 u, int b)
|
|
||||||
{
|
|
||||||
DIunion w;
|
|
||||||
int bm;
|
|
||||||
DIunion uu;
|
|
||||||
|
|
||||||
if (b == 0)
|
|
||||||
return u;
|
|
||||||
|
|
||||||
uu.ll = u;
|
|
||||||
|
|
||||||
bm = (sizeof(s32) * BITS_PER_UNIT) - b;
|
|
||||||
if (bm <= 0) {
|
|
||||||
w.s.high = 0;
|
|
||||||
w.s.low = (u32) uu.s.high >> -bm;
|
|
||||||
} else {
|
|
||||||
u32 carries = (u32) uu.s.high << bm;
|
|
||||||
w.s.high = (u32) uu.s.high >> b;
|
|
||||||
w.s.low = ((u32) uu.s.low >> b) | carries;
|
|
||||||
}
|
|
||||||
|
|
||||||
return w.ll;
|
|
||||||
}
|
|
44
arch/arm/lib/muldi3.S
Normal file
44
arch/arm/lib/muldi3.S
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* linux/arch/arm/lib/muldi3.S
|
||||||
|
*
|
||||||
|
* Author: Nicolas Pitre
|
||||||
|
* Created: Oct 19, 2005
|
||||||
|
* Copyright: Monta Vista Software, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
|
||||||
|
#ifdef __ARMEB__
|
||||||
|
#define xh r0
|
||||||
|
#define xl r1
|
||||||
|
#define yh r2
|
||||||
|
#define yl r3
|
||||||
|
#else
|
||||||
|
#define xl r0
|
||||||
|
#define xh r1
|
||||||
|
#define yl r2
|
||||||
|
#define yh r3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ENTRY(__muldi3)
|
||||||
|
|
||||||
|
mul xh, yl, xh
|
||||||
|
mla xh, xl, yh, xh
|
||||||
|
mov ip, xl, asr #16
|
||||||
|
mov yh, yl, asr #16
|
||||||
|
bic xl, xl, ip, lsl #16
|
||||||
|
bic yl, yl, yh, lsl #16
|
||||||
|
mla xh, yh, ip, xh
|
||||||
|
mul yh, xl, yh
|
||||||
|
mul xl, yl, xl
|
||||||
|
mul ip, yl, ip
|
||||||
|
adds xl, xl, yh, lsl #16
|
||||||
|
adc xh, xh, yh, lsr #16
|
||||||
|
adds xl, xl, ip, lsl #16
|
||||||
|
adc xh, xh, ip, lsr #16
|
||||||
|
mov pc, lr
|
||||||
|
|
@@ -1,72 +0,0 @@
|
|||||||
/* More subroutines needed by GCC output code on some machines. */
|
|
||||||
/* Compile this one with gcc. */
|
|
||||||
/* Copyright (C) 1989, 92-98, 1999 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.
|
|
||||||
|
|
||||||
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. */
|
|
||||||
|
|
||||||
/* As a special exception, if you link this library with other files,
|
|
||||||
some of which are compiled with GCC, to produce an executable,
|
|
||||||
this library does not by itself cause the resulting executable
|
|
||||||
to be covered by the GNU General Public License.
|
|
||||||
This exception does not however invalidate any other reasons why
|
|
||||||
the executable file might be covered by the GNU General Public License.
|
|
||||||
*/
|
|
||||||
/* support functions required by the kernel. based on code from gcc-2.95.3 */
|
|
||||||
/* I Molton 29/07/01 */
|
|
||||||
|
|
||||||
#include "gcclib.h"
|
|
||||||
|
|
||||||
#define umul_ppmm(xh, xl, a, b) \
|
|
||||||
{register u32 __t0, __t1, __t2; \
|
|
||||||
__asm__ ("%@ Inlined umul_ppmm \n\
|
|
||||||
mov %2, %5, lsr #16 \n\
|
|
||||||
mov %0, %6, lsr #16 \n\
|
|
||||||
bic %3, %5, %2, lsl #16 \n\
|
|
||||||
bic %4, %6, %0, lsl #16 \n\
|
|
||||||
mul %1, %3, %4 \n\
|
|
||||||
mul %4, %2, %4 \n\
|
|
||||||
mul %3, %0, %3 \n\
|
|
||||||
mul %0, %2, %0 \n\
|
|
||||||
adds %3, %4, %3 \n\
|
|
||||||
addcs %0, %0, #65536 \n\
|
|
||||||
adds %1, %1, %3, lsl #16 \n\
|
|
||||||
adc %0, %0, %3, lsr #16" \
|
|
||||||
: "=&r" ((u32) (xh)), \
|
|
||||||
"=r" ((u32) (xl)), \
|
|
||||||
"=&r" (__t0), "=&r" (__t1), "=r" (__t2) \
|
|
||||||
: "r" ((u32) (a)), \
|
|
||||||
"r" ((u32) (b)));}
|
|
||||||
|
|
||||||
#define __umulsidi3(u, v) \
|
|
||||||
({DIunion __w; \
|
|
||||||
umul_ppmm (__w.s.high, __w.s.low, u, v); \
|
|
||||||
__w.ll; })
|
|
||||||
|
|
||||||
s64 __muldi3(s64 u, s64 v)
|
|
||||||
{
|
|
||||||
DIunion w;
|
|
||||||
DIunion uu, vv;
|
|
||||||
|
|
||||||
uu.ll = u, vv.ll = v;
|
|
||||||
|
|
||||||
w.ll = __umulsidi3(uu.s.low, vv.s.low);
|
|
||||||
w.s.high += ((u32) uu.s.low * (u32) vv.s.high
|
|
||||||
+ (u32) uu.s.high * (u32) vv.s.low);
|
|
||||||
|
|
||||||
return w.ll;
|
|
||||||
}
|
|
35
arch/arm/lib/ucmpdi2.S
Normal file
35
arch/arm/lib/ucmpdi2.S
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
/*
|
||||||
|
* linux/arch/arm/lib/ucmpdi2.S
|
||||||
|
*
|
||||||
|
* Author: Nicolas Pitre
|
||||||
|
* Created: Oct 19, 2005
|
||||||
|
* Copyright: Monta Vista Software, Inc.
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
* published by the Free Software Foundation.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
|
||||||
|
#ifdef __ARMEB__
|
||||||
|
#define xh r0
|
||||||
|
#define xl r1
|
||||||
|
#define yh r2
|
||||||
|
#define yl r3
|
||||||
|
#else
|
||||||
|
#define xl r0
|
||||||
|
#define xh r1
|
||||||
|
#define yl r2
|
||||||
|
#define yh r3
|
||||||
|
#endif
|
||||||
|
|
||||||
|
ENTRY(__ucmpdi2)
|
||||||
|
|
||||||
|
cmp xh, yh
|
||||||
|
cmpeq xl, yl
|
||||||
|
movlo r0, #0
|
||||||
|
moveq r0, #1
|
||||||
|
movhi r0, #2
|
||||||
|
mov pc, lr
|
||||||
|
|
@@ -1,49 +0,0 @@
|
|||||||
/* More subroutines needed by GCC output code on some machines. */
|
|
||||||
/* Compile this one with gcc. */
|
|
||||||
/* Copyright (C) 1989, 92-98, 1999 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.
|
|
||||||
|
|
||||||
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. */
|
|
||||||
|
|
||||||
/* As a special exception, if you link this library with other files,
|
|
||||||
some of which are compiled with GCC, to produce an executable,
|
|
||||||
this library does not by itself cause the resulting executable
|
|
||||||
to be covered by the GNU General Public License.
|
|
||||||
This exception does not however invalidate any other reasons why
|
|
||||||
the executable file might be covered by the GNU General Public License.
|
|
||||||
*/
|
|
||||||
/* support functions required by the kernel. based on code from gcc-2.95.3 */
|
|
||||||
/* I Molton 29/07/01 */
|
|
||||||
|
|
||||||
#include "gcclib.h"
|
|
||||||
|
|
||||||
int __ucmpdi2(s64 a, s64 b)
|
|
||||||
{
|
|
||||||
DIunion au, bu;
|
|
||||||
|
|
||||||
au.ll = a, bu.ll = b;
|
|
||||||
|
|
||||||
if ((u32) au.s.high < (u32) bu.s.high)
|
|
||||||
return 0;
|
|
||||||
else if ((u32) au.s.high > (u32) bu.s.high)
|
|
||||||
return 2;
|
|
||||||
if ((u32) au.s.low < (u32) bu.s.low)
|
|
||||||
return 0;
|
|
||||||
else if ((u32) au.s.low > (u32) bu.s.low)
|
|
||||||
return 2;
|
|
||||||
return 1;
|
|
||||||
}
|
|
Reference in New Issue
Block a user