mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-23 07:12:09 +00:00
powerpc: Merge enough to start building in arch/powerpc.
This creates the directory structure under arch/powerpc and a bunch of Kconfig files. It does a first-cut merge of arch/powerpc/mm, arch/powerpc/lib and arch/powerpc/platforms/powermac. This is enough to build a 32-bit powermac kernel with ARCH=powerpc. For now we are getting some unmerged files from arch/ppc/kernel and arch/ppc/syslib, or arch/ppc64/kernel. This makes some minor changes to files in those directories and files outside arch/powerpc. The boot directory is still not merged. That's going to be interesting. Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
parent
e5baa396af
commit
14cf11af6c
89 changed files with 32423 additions and 25 deletions
203
arch/powerpc/lib/string.S
Normal file
203
arch/powerpc/lib/string.S
Normal file
|
@ -0,0 +1,203 @@
|
|||
/*
|
||||
* String handling functions for PowerPC.
|
||||
*
|
||||
* Copyright (C) 1996 Paul Mackerras.
|
||||
*
|
||||
* This program 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 of the License, or (at your option) any later version.
|
||||
*/
|
||||
#include <linux/config.h>
|
||||
#include <asm/processor.h>
|
||||
#include <asm/errno.h>
|
||||
#include <asm/ppc_asm.h>
|
||||
|
||||
.text
|
||||
.stabs "arch/powerpc/lib/",N_SO,0,0,0f
|
||||
.stabs "string.S",N_SO,0,0,0f
|
||||
0:
|
||||
|
||||
.section __ex_table,"a"
|
||||
#ifdef CONFIG_PPC64
|
||||
.align 3
|
||||
#define EXTBL .llong
|
||||
#else
|
||||
.align 2
|
||||
#define EXTBL .long
|
||||
#endif
|
||||
.text
|
||||
|
||||
_GLOBAL(strcpy)
|
||||
addi r5,r3,-1
|
||||
addi r4,r4,-1
|
||||
1: lbzu r0,1(r4)
|
||||
cmpwi 0,r0,0
|
||||
stbu r0,1(r5)
|
||||
bne 1b
|
||||
blr
|
||||
|
||||
/* This clears out any unused part of the destination buffer,
|
||||
just as the libc version does. -- paulus */
|
||||
_GLOBAL(strncpy)
|
||||
cmpwi 0,r5,0
|
||||
beqlr
|
||||
mtctr r5
|
||||
addi r6,r3,-1
|
||||
addi r4,r4,-1
|
||||
1: lbzu r0,1(r4)
|
||||
cmpwi 0,r0,0
|
||||
stbu r0,1(r6)
|
||||
bdnzf 2,1b /* dec ctr, branch if ctr != 0 && !cr0.eq */
|
||||
bnelr /* if we didn't hit a null char, we're done */
|
||||
mfctr r5
|
||||
cmpwi 0,r5,0 /* any space left in destination buffer? */
|
||||
beqlr /* we know r0 == 0 here */
|
||||
2: stbu r0,1(r6) /* clear it out if so */
|
||||
bdnz 2b
|
||||
blr
|
||||
|
||||
_GLOBAL(strcat)
|
||||
addi r5,r3,-1
|
||||
addi r4,r4,-1
|
||||
1: lbzu r0,1(r5)
|
||||
cmpwi 0,r0,0
|
||||
bne 1b
|
||||
addi r5,r5,-1
|
||||
1: lbzu r0,1(r4)
|
||||
cmpwi 0,r0,0
|
||||
stbu r0,1(r5)
|
||||
bne 1b
|
||||
blr
|
||||
|
||||
_GLOBAL(strcmp)
|
||||
addi r5,r3,-1
|
||||
addi r4,r4,-1
|
||||
1: lbzu r3,1(r5)
|
||||
cmpwi 1,r3,0
|
||||
lbzu r0,1(r4)
|
||||
subf. r3,r0,r3
|
||||
beqlr 1
|
||||
beq 1b
|
||||
blr
|
||||
|
||||
_GLOBAL(strlen)
|
||||
addi r4,r3,-1
|
||||
1: lbzu r0,1(r4)
|
||||
cmpwi 0,r0,0
|
||||
bne 1b
|
||||
subf r3,r3,r4
|
||||
blr
|
||||
|
||||
_GLOBAL(memcmp)
|
||||
cmpwi 0,r5,0
|
||||
ble- 2f
|
||||
mtctr r5
|
||||
addi r6,r3,-1
|
||||
addi r4,r4,-1
|
||||
1: lbzu r3,1(r6)
|
||||
lbzu r0,1(r4)
|
||||
subf. r3,r0,r3
|
||||
bdnzt 2,1b
|
||||
blr
|
||||
2: li r3,0
|
||||
blr
|
||||
|
||||
_GLOBAL(memchr)
|
||||
cmpwi 0,r5,0
|
||||
ble- 2f
|
||||
mtctr r5
|
||||
addi r3,r3,-1
|
||||
1: lbzu r0,1(r3)
|
||||
cmpw 0,r0,r4
|
||||
bdnzf 2,1b
|
||||
beqlr
|
||||
2: li r3,0
|
||||
blr
|
||||
|
||||
_GLOBAL(__clear_user)
|
||||
addi r6,r3,-4
|
||||
li r3,0
|
||||
li r5,0
|
||||
cmplwi 0,r4,4
|
||||
blt 7f
|
||||
/* clear a single word */
|
||||
11: stwu r5,4(r6)
|
||||
beqlr
|
||||
/* clear word sized chunks */
|
||||
andi. r0,r6,3
|
||||
add r4,r0,r4
|
||||
subf r6,r0,r6
|
||||
srwi r0,r4,2
|
||||
andi. r4,r4,3
|
||||
mtctr r0
|
||||
bdz 7f
|
||||
1: stwu r5,4(r6)
|
||||
bdnz 1b
|
||||
/* clear byte sized chunks */
|
||||
7: cmpwi 0,r4,0
|
||||
beqlr
|
||||
mtctr r4
|
||||
addi r6,r6,3
|
||||
8: stbu r5,1(r6)
|
||||
bdnz 8b
|
||||
blr
|
||||
90: mr r3,r4
|
||||
blr
|
||||
91: mfctr r3
|
||||
slwi r3,r3,2
|
||||
add r3,r3,r4
|
||||
blr
|
||||
92: mfctr r3
|
||||
blr
|
||||
|
||||
.section __ex_table,"a"
|
||||
EXTBL 11b,90b
|
||||
EXTBL 1b,91b
|
||||
EXTBL 8b,92b
|
||||
.text
|
||||
|
||||
_GLOBAL(__strncpy_from_user)
|
||||
addi r6,r3,-1
|
||||
addi r4,r4,-1
|
||||
cmpwi 0,r5,0
|
||||
beq 2f
|
||||
mtctr r5
|
||||
1: lbzu r0,1(r4)
|
||||
cmpwi 0,r0,0
|
||||
stbu r0,1(r6)
|
||||
bdnzf 2,1b /* dec ctr, branch if ctr != 0 && !cr0.eq */
|
||||
beq 3f
|
||||
2: addi r6,r6,1
|
||||
3: subf r3,r3,r6
|
||||
blr
|
||||
99: li r3,-EFAULT
|
||||
blr
|
||||
|
||||
.section __ex_table,"a"
|
||||
EXTBL 1b,99b
|
||||
.text
|
||||
|
||||
/* r3 = str, r4 = len (> 0), r5 = top (highest addr) */
|
||||
_GLOBAL(__strnlen_user)
|
||||
addi r7,r3,-1
|
||||
subf r6,r7,r5 /* top+1 - str */
|
||||
cmplw 0,r4,r6
|
||||
bge 0f
|
||||
mr r6,r4
|
||||
0: mtctr r6 /* ctr = min(len, top - str) */
|
||||
1: lbzu r0,1(r7) /* get next byte */
|
||||
cmpwi 0,r0,0
|
||||
bdnzf 2,1b /* loop if --ctr != 0 && byte != 0 */
|
||||
addi r7,r7,1
|
||||
subf r3,r3,r7 /* number of bytes we have looked at */
|
||||
beqlr /* return if we found a 0 byte */
|
||||
cmpw 0,r3,r4 /* did we look at all len bytes? */
|
||||
blt 99f /* if not, must have hit top */
|
||||
addi r3,r4,1 /* return len + 1 to indicate no null found */
|
||||
blr
|
||||
99: li r3,0 /* bad address, return 0 */
|
||||
blr
|
||||
|
||||
.section __ex_table,"a"
|
||||
EXTBL 1b,99b
|
Loading…
Add table
Add a link
Reference in a new issue