summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorPer Fogelstrom <pefo@cvs.openbsd.org>1996-05-15 08:08:30 +0000
committerPer Fogelstrom <pefo@cvs.openbsd.org>1996-05-15 08:08:30 +0000
commit6e2a5a8c77c53f01d561dd6c3b99f529d00fdfd6 (patch)
treedcdd18dfa07dccf5d8a54513677f99827724edaf /sys/arch
parent7da17c50ca40f7dc53c79b5c3e94831406f23361 (diff)
Some cc flags given to cpp, not nice...
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/pica/conf/Makefile.pica5
-rw-r--r--sys/arch/pica/pica/locore.S290
2 files changed, 3 insertions, 292 deletions
diff --git a/sys/arch/pica/conf/Makefile.pica b/sys/arch/pica/conf/Makefile.pica
index 6a3c1965e5c..f3f37e575e1 100644
--- a/sys/arch/pica/conf/Makefile.pica
+++ b/sys/arch/pica/conf/Makefile.pica
@@ -32,9 +32,8 @@ PICA= ../..
LD=ld.ok
INCLUDES= -I. -I$S/arch -I$S
-CPPFLAGS= ${INCLUDES} ${IDENT} -D_KERNEL -Dpica -D__NetBSD__ ${GP} \
- -mips2 -mcpu=r4000
-CFLAGS= ${DEBUG} -O2 -Werror -mno-abicalls
+CPPFLAGS= ${INCLUDES} ${IDENT} -D_KERNEL -Dpica
+CFLAGS= ${DEBUG} -O2 -Werror -mno-abicalls -mips2 -mcpu=r4000
AFLAGS= -x assembler-with-cpp -traditional-cpp -D_LOCORE
### find out what to use for libkern
diff --git a/sys/arch/pica/pica/locore.S b/sys/arch/pica/pica/locore.S
index b356cf3febd..93fef1d5299 100644
--- a/sys/arch/pica/pica/locore.S
+++ b/sys/arch/pica/pica/locore.S
@@ -49,7 +49,7 @@
* v 1.1 89/07/10 14:27:41 nelson Exp SPRITE (DECWRL)
*
* from: @(#)locore.s 8.5 (Berkeley) 1/4/94
- * $Id: locore.S,v 1.3 1996/05/01 18:16:05 pefo Exp $
+ * $Id: locore.S,v 1.4 1996/05/15 08:08:29 pefo Exp $
*/
/*
@@ -223,294 +223,6 @@ sigcode:
esigcode:
/*
- * netorder = htonl(hostorder)
- * hostorder = ntohl(netorder)
- */
-LEAF(htonl) # a0 = 0x11223344, return 0x44332211
-ALEAF(ntohl)
- srl v1, a0, 24 # v1 = 0x00000011
- sll v0, a0, 24 # v0 = 0x44000000
- or v0, v0, v1
- and v1, a0, 0xff00
- sll v1, v1, 8 # v1 = 0x00330000
- or v0, v0, v1
- srl v1, a0, 8
- and v1, v1, 0xff00 # v1 = 0x00002200
- j ra
- or v0, v0, v1
-END(htonl)
-
-/*
- * netorder = htons(hostorder)
- * hostorder = ntohs(netorder)
- */
-LEAF(htons)
-ALEAF(ntohs)
- srl v0, a0, 8
- and v0, v0, 0xff
- sll v1, a0, 8
- and v1, v1, 0xff00
- j ra
- or v0, v0, v1
-END(htons)
-
-/*
- * bit = ffs(value)
- */
-LEAF(ffs)
- beq a0, zero, 2f
- move v0, zero
-1:
- and v1, a0, 1 # bit set?
- addu v0, v0, 1
- beq v1, zero, 1b # no, continue
- srl a0, a0, 1
-2:
- j ra
- nop
-END(ffs)
-
-/*
- * strlen(str)
- */
-LEAF(strlen)
- addu v1, a0, 1
-1:
- lb v0, 0(a0) # get byte from string
- addu a0, a0, 1 # increment pointer
- bne v0, zero, 1b # continue if not end
- nop
- j ra
- subu v0, a0, v1 # compute length - 1 for '\0' char
-END(strlen)
-
-/*
- * NOTE: this version assumes unsigned chars in order to be "8 bit clean".
- */
-LEAF(strcmp)
-1:
- lbu t0, 0(a0) # get two bytes and compare them
- lbu t1, 0(a1)
- beq t0, zero, LessOrEq # end of first string?
- nop
- bne t0, t1, NotEq
- nop
- lbu t0, 1(a0) # unroll loop
- lbu t1, 1(a1)
- beq t0, zero, LessOrEq # end of first string?
- addu a0, a0, 2
- beq t0, t1, 1b
- addu a1, a1, 2
-NotEq:
- j ra
- subu v0, t0, t1
-LessOrEq:
- j ra
- subu v0, zero, t1
-END(strcmp)
-
-/*
- * bzero(s1, n)
- */
-LEAF(bzero)
-ALEAF(blkclr)
- blt a1, 12, smallclr # small amount to clear?
- subu a3, zero, a0 # compute # bytes to word align address
- and a3, a3, 3
- beq a3, zero, 1f # skip if word aligned
- subu a1, a1, a3 # subtract from remaining count
- swr zero, 0(a0) # clear 1, 2, or 3 bytes to align
- addu a0, a0, a3
-1:
- and v0, a1, 3 # compute number of words left
- subu a3, a1, v0
- move a1, v0
- addu a3, a3, a0 # compute ending address
-2:
- addu a0, a0, 4 # clear words
- bne a0, a3, 2b # unrolling loop does not help
- sw zero, -4(a0) # since we are limited by memory speed
-smallclr:
- ble a1, zero, 2f
- addu a3, a1, a0 # compute ending address
-1:
- addu a0, a0, 1 # clear bytes
- bne a0, a3, 1b
- sb zero, -1(a0)
-2:
- j ra
- nop
-END(bzero)
-
-/*
- * bcmp(s1, s2, n)
- */
-LEAF(bcmp)
- blt a2, 16, smallcmp # is it worth any trouble?
- xor v0, a0, a1 # compare low two bits of addresses
- and v0, v0, 3
- subu a3, zero, a1 # compute # bytes to word align address
- bne v0, zero, unalignedcmp # not possible to align addresses
- and a3, a3, 3
-
- beq a3, zero, 1f
- subu a2, a2, a3 # subtract from remaining count
- move v0, v1 # init v0,v1 so unmodified bytes match
- lwr v0, 0(a0) # read 1, 2, or 3 bytes
- lwr v1, 0(a1)
- addu a1, a1, a3
- bne v0, v1, nomatch
- addu a0, a0, a3
-1:
- and a3, a2, ~3 # compute number of whole words left
- subu a2, a2, a3 # which has to be >= (16-3) & ~3
- addu a3, a3, a0 # compute ending address
-2:
- lw v0, 0(a0) # compare words
- lw v1, 0(a1)
- addu a0, a0, 4
- bne v0, v1, nomatch
- addu a1, a1, 4
- bne a0, a3, 2b
- nop
- b smallcmp # finish remainder
- nop
-unalignedcmp:
- beq a3, zero, 2f
- subu a2, a2, a3 # subtract from remaining count
- addu a3, a3, a0 # compute ending address
-1:
- lbu v0, 0(a0) # compare bytes until a1 word aligned
- lbu v1, 0(a1)
- addu a0, a0, 1
- bne v0, v1, nomatch
- addu a1, a1, 1
- bne a0, a3, 1b
- nop
-2:
- and a3, a2, ~3 # compute number of whole words left
- subu a2, a2, a3 # which has to be >= (16-3) & ~3
- addu a3, a3, a0 # compute ending address
-3:
- lwr v0, 0(a0) # compare words a0 unaligned, a1 aligned
- lwl v0, 3(a0)
- lw v1, 0(a1)
- addu a0, a0, 4
- bne v0, v1, nomatch
- addu a1, a1, 4
- bne a0, a3, 3b
- nop
-smallcmp:
- ble a2, zero, match
- addu a3, a2, a0 # compute ending address
-1:
- lbu v0, 0(a0)
- lbu v1, 0(a1)
- addu a0, a0, 1
- bne v0, v1, nomatch
- addu a1, a1, 1
- bne a0, a3, 1b
- nop
-match:
- j ra
- move v0, zero
-nomatch:
- j ra
- li v0, 1
-END(bcmp)
-
-/*
- * memcpy(to, from, len)
- * {ov}bcopy(from, to, len)
- */
-LEAF(memcpy)
- move v0, a0 # swap from and to
- move a0, a1
- move a1, v0
-ALEAF(bcopy)
-ALEAF(ovbcopy)
- addu t0, a0, a2 # t0 = end of s1 region
- sltu t1, a1, t0
- sltu t2, a0, a1
- and t1, t1, t2 # t1 = true if from < to < (from+len)
- beq t1, zero, forward # non overlapping, do forward copy
- slt t2, a2, 12 # check for small copy
-
- ble a2, zero, 2f
- addu t1, a1, a2 # t1 = end of to region
-1:
- lb v1, -1(t0) # copy bytes backwards,
- subu t0, t0, 1 # doesnt happen often so do slow way
- subu t1, t1, 1
- bne t0, a0, 1b
- sb v1, 0(t1)
-2:
- j ra
- nop
-forward:
- bne t2, zero, smallcpy # do a small bcopy
- xor v1, a0, a1 # compare low two bits of addresses
- and v1, v1, 3
- subu a3, zero, a1 # compute # bytes to word align address
- beq v1, zero, aligned # addresses can be word aligned
- and a3, a3, 3
-
- beq a3, zero, 1f
- subu a2, a2, a3 # subtract from remaining count
- lwr v1, 0(a0) # get next 4 bytes (unaligned)
- lwl v1, 3(a0)
- addu a0, a0, a3
- swr v1, 0(a1) # store 1, 2, or 3 bytes to align a1
- addu a1, a1, a3
-1:
- and v1, a2, 3 # compute number of words left
- subu a3, a2, v1
- move a2, v1
- addu a3, a3, a0 # compute ending address
-2:
- lwr v1, 0(a0) # copy words a0 unaligned, a1 aligned
- lwl v1, 3(a0)
- addu a0, a0, 4
- sw v1, 0(a1)
- addu a1, a1, 4
- bne a0, a3, 2b
- nop # We have to do this mmu-bug.
- b smallcpy
- nop
-aligned:
- beq a3, zero, 1f
- subu a2, a2, a3 # subtract from remaining count
- lwr v1, 0(a0) # copy 1, 2, or 3 bytes to align
- addu a0, a0, a3
- swr v1, 0(a1)
- addu a1, a1, a3
-1:
- and v1, a2, 3 # compute number of whole words left
- subu a3, a2, v1
- move a2, v1
- addu a3, a3, a0 # compute ending address
-2:
- lw v1, 0(a0) # copy words
- addu a0, a0, 4
- sw v1, 0(a1)
- bne a0, a3, 2b
- addu a1, a1, 4
-smallcpy:
- ble a2, zero, 2f
- addu a3, a2, a0 # compute ending address
-1:
- lbu v1, 0(a0) # copy bytes
- addu a0, a0, 1
- sb v1, 0(a1)
- addu a1, a1, 1
- bne a0, a3, 1b
- nop # MMU BUG ? (cant do -1(a1) !!
-2:
- j ra
- nop
-END(memcpy)
-
-/*
* Copy a null terminated string within the kernel address space.
* Maxlength may be null if count not wanted.
* copystr(fromaddr, toaddr, maxlength, &lencopied)