-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[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>
- Loading branch information
Nicolas Pitre
authored and
Russell King
committed
Oct 30, 2005
1 parent
cb7610d
commit f741a1a
Showing
11 changed files
with
223 additions
and
312 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
Oops, something went wrong.