forked from torvalds/linux
-
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.
Blackfin: move string functions to normal lib/ assembly
Since 'extern inline' doesn't work correctly in the context of the Linux kernel (too many overriding defines), move the string functions to normal lib/ assembly files (like the existing mem funcs). This avoids the forced inline all over the kernel and allows us to place them constantly in L1. This also avoids some module failures when gcc inserts calls to string functions but the kernel build system doesn't fully consult the library archives. Signed-off-by: Robin Getz <robin.getz@analog.com> Signed-off-by: Mike Frysinger <vapier@gentoo.org>
- Loading branch information
Showing
11 changed files
with
226 additions
and
184 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
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
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
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,43 @@ | ||
/* | ||
* Copyright 2005-2010 Analog Devices Inc. | ||
* | ||
* Licensed under the ADI BSD license or the GPL-2 (or later) | ||
*/ | ||
|
||
#include <linux/linkage.h> | ||
|
||
/* void *strcmp(char *s1, const char *s2); | ||
* R0 = address (s1) | ||
* R1 = address (s2) | ||
* | ||
* Returns an integer less than, equal to, or greater than zero if s1 | ||
* (or the first n bytes thereof) is found, respectively, to be less | ||
* than, to match, or be greater than s2. | ||
*/ | ||
|
||
#ifdef CONFIG_STRCMP_L1 | ||
.section .l1.text | ||
#else | ||
.text | ||
#endif | ||
|
||
.align 2 | ||
|
||
ENTRY(_strcmp) | ||
P0 = R0 ; /* s1 */ | ||
P1 = R1 ; /* s2 */ | ||
|
||
1: | ||
R0 = B[P0++] (Z); /* get *s1 */ | ||
R1 = B[P1++] (Z); /* get *s2 */ | ||
CC = R0 == R1; /* compare a byte */ | ||
if ! cc jump 2f; /* not equal, break out */ | ||
CC = R0; /* at end of s1? */ | ||
if cc jump 1b (bp); /* no, keep going */ | ||
jump.s 3f; /* strings are equal */ | ||
2: | ||
R0 = R0 - R1; /* *s1 - *s2 */ | ||
3: | ||
RTS; | ||
|
||
ENDPROC(_strcmp) |
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,35 @@ | ||
/* | ||
* Copyright 2005-2010 Analog Devices Inc. | ||
* | ||
* Licensed under the ADI BSD license or the GPL-2 (or later) | ||
*/ | ||
|
||
#include <linux/linkage.h> | ||
|
||
/* void *strcpy(char *dest, const char *src); | ||
* R0 = address (dest) | ||
* R1 = address (src) | ||
* | ||
* Returns a pointer to the destination string dest | ||
*/ | ||
|
||
#ifdef CONFIG_STRCPY_L1 | ||
.section .l1.text | ||
#else | ||
.text | ||
#endif | ||
|
||
.align 2 | ||
|
||
ENTRY(_strcpy) | ||
P0 = R0 ; /* dst*/ | ||
P1 = R1 ; /* src*/ | ||
|
||
1: | ||
R1 = B [P1++] (Z); | ||
B [P0++] = R1; | ||
CC = R1; | ||
if cc jump 1b (bp); | ||
RTS; | ||
|
||
ENDPROC(_strcpy) |
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,52 @@ | ||
/* | ||
* Copyright 2005-2010 Analog Devices Inc. | ||
* | ||
* Licensed under the ADI BSD license or the GPL-2 (or later) | ||
*/ | ||
|
||
#include <linux/linkage.h> | ||
|
||
/* void *strncpy(char *s1, const char *s2, size_t n); | ||
* R0 = address (dest) | ||
* R1 = address (src) | ||
* R2 = size (n) | ||
* Returns a pointer to the destination string dest | ||
*/ | ||
|
||
#ifdef CONFIG_STRNCMP_L1 | ||
.section .l1.text | ||
#else | ||
.text | ||
#endif | ||
|
||
.align 2 | ||
|
||
ENTRY(_strncmp) | ||
CC = R2 == 0; | ||
if CC JUMP 5f; | ||
|
||
P0 = R0 ; /* s1 */ | ||
P1 = R1 ; /* s2 */ | ||
1: | ||
R0 = B[P0++] (Z); /* get *s1 */ | ||
R1 = B[P1++] (Z); /* get *s2 */ | ||
CC = R0 == R1; /* compare a byte */ | ||
if ! cc jump 3f; /* not equal, break out */ | ||
CC = R0; /* at end of s1? */ | ||
if ! cc jump 4f; /* yes, all done */ | ||
R2 += -1; /* no, adjust count */ | ||
CC = R2 == 0; | ||
if ! cc jump 1b (bp); /* more to do, keep going */ | ||
2: | ||
R0 = 0; /* strings are equal */ | ||
jump.s 4f; | ||
3: | ||
R0 = R0 - R1; /* *s1 - *s2 */ | ||
4: | ||
RTS; | ||
|
||
5: | ||
R0 = 0; | ||
RTS; | ||
|
||
ENDPROC(_strncmp) |
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.