Module Name: src
Committed By: matt
Date: Mon Jul 22 17:52:21 UTC 2013
Modified Files:
src/sys/arch/m68k/m68k: copy.s
Log Message:
Move to motorola syntax
Change all branches to use j.. instead of b.. (branches now use byte offsets)
(this causes it to go from 932 to 848 bytes of text)
Add GETCURPCB macro.
(binary identical before the b -> j changes)
To generate a diff of this commit:
cvs rdiff -u -r1.43 -r1.44 src/sys/arch/m68k/m68k/copy.s
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/m68k/m68k/copy.s
diff -u src/sys/arch/m68k/m68k/copy.s:1.43 src/sys/arch/m68k/m68k/copy.s:1.44
--- src/sys/arch/m68k/m68k/copy.s:1.43 Wed Jul 7 01:16:25 2010
+++ src/sys/arch/m68k/m68k/copy.s Mon Jul 22 17:52:21 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: copy.s,v 1.43 2010/07/07 01:16:25 chs Exp $ */
+/* $NetBSD: copy.s,v 1.44 2013/07/22 17:52:21 matt Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@@ -80,6 +80,12 @@
.file "copy.s"
.text
+#ifdef CI_CURPCB
+#define GETCURPCB(r) movl _C_LABEL(cpu_info_store)+CI_CURPCB,r
+#else
+#define GETCURPCB(r) movl _C_LABEL(curpcb),r
+#endif
+
#ifdef DIAGNOSTIC
/*
* The following routines all use the "moves" instruction to access
@@ -93,7 +99,7 @@
*/
Lbadfc:
PANIC("copy.s: bad sfc or dfc")
- bra Lbadfc
+ jra Lbadfc
#define CHECK_SFC movec %sfc,%d0; subql #FC_USERD,%d0; bne Lbadfc
#define CHECK_DFC movec %dfc,%d0; subql #FC_USERD,%d0; bne Lbadfc
#else /* DIAGNOSTIC */
@@ -114,57 +120,57 @@ Lbadfc:
*/
ENTRY(copyin)
CHECK_SFC
- movl %sp@(12),%d0 | check count
- beq Lciret | == 0, don't do anything
+ movl 12(%sp),%d0 | check count
+ jeq Lciret | == 0, don't do anything
#ifdef MAPPEDCOPY
cmpl _C_LABEL(mappedcopysize),%d0 | size >= mappedcopysize
- bcc _C_LABEL(mappedcopyin) | yes, go do it the new way
+ jcc _C_LABEL(mappedcopyin) | yes, go do it the new way
#endif
- movl %d2,%sp@- | save scratch register
- movl _C_LABEL(curpcb),%a0 | set fault handler
- movl #Lcifault,%a0@(PCB_ONFAULT)
- movl %sp@(8),%a0 | src address
- movl %sp@(12),%a1 | dest address
+ movl %d2,-(%sp) | save scratch register
+ GETCURPCB(%a0) | set fault handler
+ movl #Lcifault,PCB_ONFAULT(%a0)
+ movl 8(%sp),%a0 | src address
+ movl 12(%sp),%a1 | dest address
movl %a0,%d1
btst #0,%d1 | src address odd?
- beq Lcieven | no, skip alignment
- movsb %a0@+,%d2 | yes, copy a byte
- movb %d2,%a1@+
+ jeq Lcieven | no, skip alignment
+ movsb (%a0)+,%d2 | yes, copy a byte
+ movb %d2,(%a1)+
subql #1,%d0 | adjust count
- beq Lcidone | count 0, all done
+ jeq Lcidone | count 0, all done
Lcieven:
movl %a1,%d1
btst #0,%d1 | dest address odd?
- bne Lcibytes | yes, must copy bytes
+ jne Lcibytes | yes, must copy bytes
movl %d0,%d1 | OK, both even. Get count
lsrl #2,%d1 | and convert to longwords
- beq Lcibytes | count 0, skip longword loop
+ jeq Lcibytes | count 0, skip longword loop
subql #1,%d1 | predecrement for dbf
Lcilloop:
- movsl %a0@+,%d2 | copy a longword
- movl %d2,%a1@+
+ movsl (%a0)+,%d2 | copy a longword
+ movl %d2,(%a1)+
dbf %d1,Lcilloop | decrement low word of count
subil #0x10000,%d1 | decrement high word of count
- bcc Lcilloop
+ jcc Lcilloop
andl #3,%d0 | what remains
- beq Lcidone | nothing, all done
+ jeq Lcidone | nothing, all done
Lcibytes:
subql #1,%d0 | predecrement for dbf
Lcibloop:
- movsb %a0@+,%d2 | copy a byte
- movb %d2,%a1@+
+ movsb (%a0)+,%d2 | copy a byte
+ movb %d2,(%a1)+
dbf %d0,Lcibloop | decrement low word of count
subil #0x10000,%d0 | decrement high word of count
- bcc Lcibloop
+ jcc Lcibloop
clrl %d0 | no error
Lcidone:
- movl _C_LABEL(curpcb),%a0 | clear fault handler
- clrl %a0@(PCB_ONFAULT)
- movl %sp@+,%d2 | restore scratch register
+ GETCURPCB(%a0) | clear fault handler
+ clrl PCB_ONFAULT(%a0)
+ movl (%sp)+,%d2 | restore scratch register
Lciret:
rts
Lcifault:
- bra Lcidone
+ jra Lcidone
/*
* copyout(void *from, void *to, size_t len);
@@ -179,57 +185,57 @@ Lcifault:
*/
ENTRY(copyout)
CHECK_DFC
- movl %sp@(12),%d0 | check count
- beq Lcoret | == 0, don't do anything
+ movl 12(%sp),%d0 | check count
+ jeq Lcoret | == 0, don't do anything
#ifdef MAPPEDCOPY
cmpl _C_LABEL(mappedcopysize),%d0 | size >= mappedcopysize
- bcc _C_LABEL(mappedcopyout) | yes, go do it the new way
+ jcc _C_LABEL(mappedcopyout) | yes, go do it the new way
#endif
- movl %d2,%sp@- | save scratch register
- movl _C_LABEL(curpcb),%a0 | set fault handler
- movl #Lcofault,%a0@(PCB_ONFAULT)
- movl %sp@(8),%a0 | src address
- movl %sp@(12),%a1 | dest address
+ movl %d2,-(%sp) | save scratch register
+ GETCURPCB(%a0) | set fault handler
+ movl #Lcofault,PCB_ONFAULT(%a0)
+ movl 8(%sp),%a0 | src address
+ movl 12(%sp),%a1 | dest address
movl %a0,%d1
btst #0,%d1 | src address odd?
- beq Lcoeven | no, skip alignment
- movb %a0@+,%d2 | yes, copy a byte
- movsb %d2,%a1@+
+ jeq Lcoeven | no, skip alignment
+ movb (%a0)+,%d2 | yes, copy a byte
+ movsb %d2,(%a1)+
subql #1,%d0 | adjust count
- beq Lcodone | count 0, all done
+ jeq Lcodone | count 0, all done
Lcoeven:
movl %a1,%d1
btst #0,%d1 | dest address odd?
- bne Lcobytes | yes, must copy bytes
+ jne Lcobytes | yes, must copy bytes
movl %d0,%d1 | OK, both even. Get count
lsrl #2,%d1 | and convert to longwords
- beq Lcobytes | count 0, skip longword loop
+ jeq Lcobytes | count 0, skip longword loop
subql #1,%d1 | predecrement for dbf
Lcolloop:
- movl %a0@+,%d2 | copy a longword
- movsl %d2,%a1@+
+ movl (%a0)+,%d2 | copy a longword
+ movsl %d2,(%a1)+
dbf %d1,Lcolloop | decrement low word of count
subil #0x10000,%d1 | decrement high word of count
- bcc Lcolloop
+ jcc Lcolloop
andl #3,%d0 | what remains
- beq Lcodone | nothing, all done
+ jeq Lcodone | nothing, all done
Lcobytes:
subql #1,%d0 | predecrement for dbf
Lcobloop:
- movb %a0@+,%d2 | copy a byte
- movsb %d2,%a1@+
+ movb (%a0)+,%d2 | copy a byte
+ movsb %d2,(%a1)+
dbf %d0,Lcobloop | decrement low word of count
subil #0x10000,%d0 | decrement high word of count
- bcc Lcobloop
+ jcc Lcobloop
clrl %d0 | no error
Lcodone:
- movl _C_LABEL(curpcb),%a0 | clear fault handler
- clrl %a0@(PCB_ONFAULT)
- movl %sp@+,%d2 | restore scratch register
+ GETCURPCB(%a0) | clear fault handler
+ clrl PCB_ONFAULT(%a0)
+ movl (%sp)+,%d2 | restore scratch register
Lcoret:
rts
Lcofault:
- bra Lcodone
+ jra Lcodone
/*
* copystr(void *from, void *to, size_t maxlen, size_t *lencopied);
@@ -238,26 +244,26 @@ Lcofault:
* string is too long, return ENAMETOOLONG; else return 0.
*/
ENTRY(copystr)
- movl %sp@(4),%a0 | a0 = fromaddr
- movl %sp@(8),%a1 | a1 = toaddr
+ movl 4(%sp),%a0 | a0 = fromaddr
+ movl 8(%sp),%a1 | a1 = toaddr
clrl %d0
- movl %sp@(12),%d1 | count
- beq Lcstoolong | nothing to copy
+ movl 12(%sp),%d1 | count
+ jeq Lcstoolong | nothing to copy
subql #1,%d1 | predecrement for dbeq
Lcsloop:
- movb %a0@+,%a1@+ | copy a byte
+ movb (%a0)+,(%a1)+ | copy a byte
dbeq %d1,Lcsloop | decrement low word of count
- beq Lcsdone | copied null, exit
+ jeq Lcsdone | copied null, exit
subil #0x10000,%d1 | decrement high word of count
- bcc Lcsloop | more room, keep going
+ jcc Lcsloop | more room, keep going
Lcstoolong:
moveq #ENAMETOOLONG,%d0 | ran out of space
Lcsdone:
- tstl %sp@(16) | length desired?
- beq Lcsret
- subl %sp@(4),%a0 | yes, calculate length copied
- movl %sp@(16),%a1 | store at return location
- movl %a0,%a1@
+ tstl 16(%sp) | length desired?
+ jeq Lcsret
+ subl 4(%sp),%a0 | yes, calculate length copied
+ movl 16(%sp),%a1 | store at return location
+ movl %a0,(%a1)
Lcsret:
rts
@@ -270,35 +276,35 @@ Lcsret:
*/
ENTRY(copyinstr)
CHECK_SFC
- movl _C_LABEL(curpcb),%a0 | set fault handler
- movl #Lcisfault,%a0@(PCB_ONFAULT)
- movl %sp@(4),%a0 | a0 = fromaddr
- movl %sp@(8),%a1 | a1 = toaddr
+ GETCURPCB(%a0) | set fault handler
+ movl #Lcisfault,PCB_ONFAULT(%a0)
+ movl 4(%sp),%a0 | a0 = fromaddr
+ movl 8(%sp),%a1 | a1 = toaddr
clrl %d0
- movl %sp@(12),%d1 | count
- beq Lcistoolong | nothing to copy
+ movl 12(%sp),%d1 | count
+ jeq Lcistoolong | nothing to copy
subql #1,%d1 | predecrement for dbeq
Lcisloop:
- movsb %a0@+,%d0 | copy a byte
- movb %d0,%a1@+
+ movsb (%a0)+,%d0 | copy a byte
+ movb %d0,(%a1)+
dbeq %d1,Lcisloop | decrement low word of count
- beq Lcisdone | copied null, exit
+ jeq Lcisdone | copied null, exit
subil #0x10000,%d1 | decrement high word of count
- bcc Lcisloop | more room, keep going
+ jcc Lcisloop | more room, keep going
Lcistoolong:
moveq #ENAMETOOLONG,%d0 | ran out of space
Lcisdone:
- tstl %sp@(16) | length desired?
- beq Lcisexit
- subl %sp@(4),%a0 | yes, calculate length copied
- movl %sp@(16),%a1 | store at return location
- movl %a0,%a1@
+ tstl 16(%sp) | length desired?
+ jeq Lcisexit
+ subl 4(%sp),%a0 | yes, calculate length copied
+ movl 16(%sp),%a1 | store at return location
+ movl %a0,(%a1)
Lcisexit:
- movl _C_LABEL(curpcb),%a0 | clear fault handler
- clrl %a0@(PCB_ONFAULT)
+ GETCURPCB(%a0) | clear fault handler
+ clrl PCB_ONFAULT(%a0)
rts
Lcisfault:
- bra Lcisdone
+ jra Lcisdone
/*
* copyoutstr(void *from, void *to, size_t maxlen, size_t *lencopied);
@@ -309,35 +315,35 @@ Lcisfault:
*/
ENTRY(copyoutstr)
CHECK_DFC
- movl _C_LABEL(curpcb),%a0 | set fault handler
- movl #Lcosfault,%a0@(PCB_ONFAULT)
- movl %sp@(4),%a0 | a0 = fromaddr
- movl %sp@(8),%a1 | a1 = toaddr
+ GETCURPCB(%a0) | set fault handler
+ movl #Lcosfault,PCB_ONFAULT(%a0)
+ movl 4(%sp),%a0 | a0 = fromaddr
+ movl 8(%sp),%a1 | a1 = toaddr
clrl %d0
- movl %sp@(12),%d1 | count
- beq Lcostoolong | nothing to copy
+ movl 12(%sp),%d1 | count
+ jeq Lcostoolong | nothing to copy
subql #1,%d1 | predecrement for dbeq
Lcosloop:
- movb %a0@+,%d0 | copy a byte
- movsb %d0,%a1@+
+ movb (%a0)+,%d0 | copy a byte
+ movsb %d0,(%a1)+
dbeq %d1,Lcosloop | decrement low word of count
- beq Lcosdone | copied null, exit
+ jeq Lcosdone | copied null, exit
subil #0x10000,%d1 | decrement high word of count
- bcc Lcosloop | more room, keep going
+ jcc Lcosloop | more room, keep going
Lcostoolong:
moveq #ENAMETOOLONG,%d0 | ran out of space
Lcosdone:
- tstl %sp@(16) | length desired?
- beq Lcosexit
- subl %sp@(4),%a0 | yes, calculate length copied
- movl %sp@(16),%a1 | store at return location
- movl %a0,%a1@
+ tstl 16(%sp) | length desired?
+ jeq Lcosexit
+ subl 4(%sp),%a0 | yes, calculate length copied
+ movl 16(%sp),%a1 | store at return location
+ movl %a0,(%a1)
Lcosexit:
- movl _C_LABEL(curpcb),%a0 | clear fault handler
- clrl %a0@(PCB_ONFAULT)
+ GETCURPCB(%a0) | clear fault handler
+ clrl PCB_ONFAULT(%a0)
rts
Lcosfault:
- bra Lcosdone
+ jra Lcosdone
/*
* kcopy(const void *src, void *dst, size_t len);
@@ -351,23 +357,23 @@ Lcosfault:
*/
ENTRY(kcopy)
link %a6,#-4
- movl _C_LABEL(curpcb),%a0 | set fault handler
- movl %a0@(PCB_ONFAULT),%a6@(-4) | save old handler first
- movl #Lkcfault,%a0@(PCB_ONFAULT)
- movl %a6@(16),%sp@- | push len
- movl %a6@(8),%sp@- | push src
- movl %a6@(12),%sp@- | push dst
+ GETCURPCB(%a0) | set fault handler
+ movl PCB_ONFAULT(%a0),-4(%a6) | save old handler first
+ movl #Lkcfault,PCB_ONFAULT(%a0)
+ movl 16(%a6),-(%sp) | push len
+ movl 8(%a6),-(%sp) | push src
+ movl 12(%a6),-(%sp) | push dst
jbsr _C_LABEL(memcpy) | copy it
addl #12,%sp | pop args
clrl %d0 | success!
Lkcdone:
- movl _C_LABEL(curpcb),%a0 | restore fault handler
- movl %a6@(-4),%a0@(PCB_ONFAULT)
+ GETCURPCB(%a0) | restore fault handler
+ movl -4(%a6),PCB_ONFAULT(%a0)
unlk %a6
rts
Lkcfault:
addl #16,%sp | pop args and return address
- bra Lkcdone
+ jra Lkcdone
/*
* fuword(void *uaddr);
@@ -375,11 +381,11 @@ Lkcfault:
*/
ENTRY(fuword)
CHECK_SFC
- movl %sp@(4),%a0 | address to read
- movl _C_LABEL(curpcb),%a1 | set fault handler
- movl #Lferr,%a1@(PCB_ONFAULT)
- movsl %a0@,%d0 | do read from user space
- bra Lfdone
+ movl 4(%sp),%a0 | address to read
+ GETCURPCB(%a1) | set fault handler
+ movl #Lferr,PCB_ONFAULT(%a1)
+ movsl (%a0),%d0 | do read from user space
+ jra Lfdone
/*
* fusword(void *uaddr);
@@ -387,12 +393,12 @@ ENTRY(fuword)
*/
ENTRY(fusword)
CHECK_SFC
- movl %sp@(4),%a0 | address to read
- movl _C_LABEL(curpcb),%a1 | set fault handler
- movl #Lferr,%a1@(PCB_ONFAULT)
+ movl 4(%sp),%a0 | address to read
+ GETCURPCB(%a1) | set fault handler
+ movl #Lferr,PCB_ONFAULT(%a1)
moveq #0,%d0
- movsw %a0@,%d0 | do read from user space
- bra Lfdone
+ movsw (%a0),%d0 | do read from user space
+ jra Lfdone
/*
* fuswintr(void *uaddr);
@@ -401,12 +407,12 @@ ENTRY(fusword)
*/
ENTRY(fuswintr)
CHECK_SFC
- movl %sp@(4),%a0 | address to read
- movl _C_LABEL(curpcb),%a1 | set fault handler
- movl #_C_LABEL(fubail),%a1@(PCB_ONFAULT)
+ movl 4(%sp),%a0 | address to read
+ GETCURPCB(%a1) | set fault handler
+ movl #_C_LABEL(fubail),PCB_ONFAULT(%a1)
moveq #0,%d0
- movsw %a0@,%d0 | do read from user space
- bra Lfdone
+ movsw (%a0),%d0 | do read from user space
+ jra Lfdone
/*
* fubyte(void *uaddr);
@@ -414,12 +420,12 @@ ENTRY(fuswintr)
*/
ENTRY(fubyte)
CHECK_SFC
- movl %sp@(4),%a0 | address to read
- movl _C_LABEL(curpcb),%a1 | set fault handler
- movl #Lferr,%a1@(PCB_ONFAULT)
+ movl 4(%sp),%a0 | address to read
+ GETCURPCB(%a1) | set fault handler
+ movl #Lferr,PCB_ONFAULT(%a1)
moveq #0,%d0
- movsb %a0@,%d0 | do read from user space
- bra Lfdone
+ movsb (%a0),%d0 | do read from user space
+ jra Lfdone
/*
* Error routine for fuswintr. The fault handler in trap.c
@@ -433,7 +439,7 @@ ENTRY(fubail)
Lferr:
moveq #-1,%d0 | error indicator
Lfdone:
- clrl %a1@(PCB_ONFAULT) | clear fault handler
+ clrl PCB_ONFAULT(%a1) | clear fault handler
rts
/*
@@ -442,13 +448,13 @@ Lfdone:
*/
ENTRY(suword)
CHECK_DFC
- movl %sp@(4),%a0 | address to write
- movl %sp@(8),%d0 | value to put there
- movl _C_LABEL(curpcb),%a1 | set fault handler
- movl #Lserr,%a1@(PCB_ONFAULT)
- movsl %d0,%a0@ | do write to user space
+ movl 4(%sp),%a0 | address to write
+ movl 8(%sp),%d0 | value to put there
+ GETCURPCB(%a1) | set fault handler
+ movl #Lserr,PCB_ONFAULT(%a1)
+ movsl %d0,(%a0) | do write to user space
moveq #0,%d0 | indicate no fault
- bra Lsdone
+ jra Lsdone
/*
* susword(void *uaddr, short x);
@@ -456,13 +462,13 @@ ENTRY(suword)
*/
ENTRY(susword)
CHECK_DFC
- movl %sp@(4),%a0 | address to write
- movw %sp@(10),%d0 | value to put there
- movl _C_LABEL(curpcb),%a1 | set fault handler
- movl #Lserr,%a1@(PCB_ONFAULT)
- movsw %d0,%a0@ | do write to user space
+ movl 4(%sp),%a0 | address to write
+ movw 10(%sp),%d0 | value to put there
+ GETCURPCB(%a1) | set fault handler
+ movl #Lserr,PCB_ONFAULT(%a1)
+ movsw %d0,(%a0) | do write to user space
moveq #0,%d0 | indicate no fault
- bra Lsdone
+ jra Lsdone
/*
* suswintr(void *uaddr, short x);
@@ -471,13 +477,13 @@ ENTRY(susword)
*/
ENTRY(suswintr)
CHECK_DFC
- movl %sp@(4),%a0 | address to write
- movw %sp@(10),%d0 | value to put there
- movl _C_LABEL(curpcb),%a1 | set fault handler
- movl #_C_LABEL(subail),%a1@(PCB_ONFAULT)
- movsw %d0,%a0@ | do write to user space
+ movl 4(%sp),%a0 | address to write
+ movw 10(%sp),%d0 | value to put there
+ GETCURPCB(%a1) | set fault handler
+ movl #_C_LABEL(subail),PCB_ONFAULT(%a1)
+ movsw %d0,(%a0) | do write to user space
moveq #0,%d0 | indicate no fault
- bra Lsdone
+ jra Lsdone
/*
* subyte(void *uaddr, char x);
@@ -485,13 +491,13 @@ ENTRY(suswintr)
*/
ENTRY(subyte)
CHECK_DFC
- movl %sp@(4),%a0 | address to write
- movb %sp@(11),%d0 | value to put there
- movl _C_LABEL(curpcb),%a1 | set fault handler
- movl #Lserr,%a1@(PCB_ONFAULT)
- movsb %d0,%a0@ | do write to user space
+ movl 4(%sp),%a0 | address to write
+ movb 11(%sp),%d0 | value to put there
+ GETCURPCB(%a1) | set fault handler
+ movl #Lserr,PCB_ONFAULT(%a1)
+ movsb %d0,(%a0) | do write to user space
moveq #0,%d0 | indicate no fault
- bra Lsdone
+ jra Lsdone
/*
* Error routine for suswintr. The fault handler in trap.c
@@ -505,7 +511,7 @@ ENTRY(subail)
Lserr:
moveq #-1,%d0 | error indicator
Lsdone:
- clrl %a1@(PCB_ONFAULT) | clear fault handler
+ clrl PCB_ONFAULT(%a1) | clear fault handler
rts
/*
@@ -517,25 +523,25 @@ Lsdone:
ENTRY(ucas_32)
CHECK_SFC
CHECK_DFC
- movl _C_LABEL(curpcb),%a1
- movl #Lucasfault,%a1@(PCB_ONFAULT) | set fault handler
- movl %sp@(4),%a0 | a0 = uptr
+ GETCURPCB(%a1)
+ movl #Lucasfault,PCB_ONFAULT(%a1) | set fault handler
+ movl 4(%sp),%a0 | a0 = uptr
_C_LABEL(ucas_32_ras_start):
- movl %sp@(8),%d0 | d0 = old
- movsl %a0@,%d1 | d1 = *uptr
+ movl 8(%sp),%d0 | d0 = old
+ movsl (%a0),%d1 | d1 = *uptr
cmpl %d0,%d1 | does *uptr == old?
- bne Lucasdiff | if not, don't change it
- movl %sp@(12),%d0 | d0 = new
- movsl %d0,%a0@ | *uptr = new
+ jne Lucasdiff | if not, don't change it
+ movl 12(%sp),%d0 | d0 = new
+ movsl %d0,(%a0) | *uptr = new
nop | pipeline sync
_C_LABEL(ucas_32_ras_end):
Lucasdiff:
- movl %sp@(16),%a0 | a0 = ret
- movl %d1,%a0@ | *ret = d1 (old *uptr)
+ movl 16(%sp),%a0 | a0 = ret
+ movl %d1,(%a0) | *ret = d1 (old *uptr)
clrl %d0 | return 0
Lucasfault:
- clrl %a1@(PCB_ONFAULT) | clear fault handler
+ clrl PCB_ONFAULT(%a1) | clear fault handler
rts
STRONG_ALIAS(ucas_int,ucas_32)