diff options
| author | is <is@NetBSD.org> | 1997-09-28 12:57:57 +0000 |
|---|---|---|
| committer | is <is@NetBSD.org> | 1997-09-28 12:57:57 +0000 |
| commit | 8e9fc838dcaa618b41ebfb02ecb77150834a3f8a (patch) | |
| tree | 98772cfcadb56bb4964b459bfc0b4bf1abf8a439 | |
| parent | 4de13c78d37fa818101381bafc94cef1462a9813 (diff) | |
In the OS glue code for the 060SP, replace the copyin()/copyout() glue by
movs.
XXX As our CPP seems to hate the 060SP, I couldn't use assym.h for the
PCB_ONFAULT definition, but had to hardwire 64 in the code. This needs
to be fixed ASAP, and will be done in the upcoming reorganization of
the 060sp Makefiles.
| -rw-r--r-- | sys/arch/m68k/060sp/netbsd.S | 139 | ||||
| -rw-r--r-- | sys/arch/m68k/060sp/netbsd060sp.S | 139 |
2 files changed, 122 insertions, 156 deletions
diff --git a/sys/arch/m68k/060sp/netbsd.S b/sys/arch/m68k/060sp/netbsd.S index 377a7c0ad7f..1b45337d08a 100644 --- a/sys/arch/m68k/060sp/netbsd.S +++ b/sys/arch/m68k/060sp/netbsd.S @@ -1,5 +1,5 @@ # -# $NetBSD: netbsd.S,v 1.3 1997/06/27 23:32:09 is Exp $ +# $NetBSD: netbsd.S,v 1.4 1997/09/28 12:57:57 is Exp $ # #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP @@ -158,22 +158,19 @@ user_read: # .global _060_dmem_read_byte _060_dmem_read_byte: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmrbs |# supervisor + clrl d1 |# return success + clrl d0 |# clear whole longword + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmrbs |# supervisor dmrbu: - clrl sp@- |# clear space on stack for result - movel #0x1,sp@- |# pass: # bytes to copy - pea sp@(0x7) |# pass: dst addr (stack) - movel a0,sp@- |# pass: src addr (user mem) - bsrl _copyin |# "copy in" the data - movel d0,d1 |# return success - addl #0xc,sp |# delete params - movel sp@+,d0 |# put answer in d0 - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsb a0@,d0 + bra Lfdone + dmrbs: - clrl d0 |# clear whole longword - moveb a0@,d0 |# fetch super byte - clrl d1 |# return success + moveb a0@,d0 |# fetch super byte + clrl d1 |# return success rts # @@ -195,22 +192,17 @@ dmrbs: _060_imem_read_word: _060_dmem_read_word: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmrws |# supervisor + clrl d1 |# return success + clrl d0 |# clear whole longword + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmrws |# supervisor dmrwu: - clrl sp@- |# clear result space on stack - movel #0x2,sp@- |# pass: # bytes to copy - pea sp@(0x6) |# pass: dst addr (stack) - movel a0,sp@- |# pass: src addr (user mem) - bsrl _copyin |# "copy in" the data - movel d0,d1 |# return success - addl #0xc,sp |# delete params - movel sp@+,d0 |# put answer in d0 - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsw a0@,d0 + bra Lfdone dmrws: - clrl d0 |# clear whole longword - movew a0@,d0 |# fetch super word - clrl d1 |# return success + movew a0@,d0 |# fetch super word rts # @@ -235,21 +227,17 @@ dmrws: _060_imem_read_long: _060_dmem_read_long: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmrls |# supervisor + clrl d1 |# return success + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmrls |# supervisor dmrlu: - subql #0x4,sp |# clear result space on stack - movel #0x4,sp@- |# pass: # bytes to copy - pea sp@(0x4) |# pass: dst addr (stack) - movel a0,sp@- |# pass: src addr (user mem) - bsrl _copyin |# "copy in" the data - movel d0,d1 |# return success - addl #0xc,sp |# delete params - movel sp@+,d0 |# put answer in d0 - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsl a0@,d0 + bra Lfdone dmrls: - movel a0@,d0 |# fetch super longword - clrl d1 |# return success + movel a0@,d0 |# fetch super longword + clrl d1 |# return success rts # @@ -266,20 +254,16 @@ dmrls: # .global _060_dmem_write_byte _060_dmem_write_byte: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmwbs |# supervisor + clrl d1 |# return success + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmwbs |# supervisor dmwbu: - movel d0,sp@- |# put src on stack - movel #0x1,sp@- |# pass: # bytes to copy - movel a0,sp@- |# pass: dst addr (user mem) - pea sp@(0xb) |# pass: src addr (stack) - bsrl _copyout |# "copy out" the data - movel d0,d1 |# return success - addl #0x10,sp |# delete params + src - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsb d0,a0@ + bra Lfdone dmwbs: - moveb d0,a0@ |# store super byte - clrl d1 |# return success + moveb d0,a0@ |# store super byte rts # @@ -296,20 +280,16 @@ dmwbs: # .global _060_dmem_write_word _060_dmem_write_word: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmwws |# supervisor + clrl d1 |# return success + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmwws |# supervisor dmwwu: - movel d0,sp@- |# put src on stack - movel #0x2,sp@- |# pass: # bytes to copy - movel a0,sp@- |# pass: dst addr (user mem) - pea sp@(0xa) |# pass: src addr (stack) - bsrl _copyout |# "copy out" the data - movel d0,d1 |# return success - addl #0x10,sp |# delete params + src - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsw d0,a0@ + bra Lfdone dmwws: - movew d0,a0@ |# store super word - clrl d1 |# return success + movew d0,a0@ |# store super word rts # @@ -326,20 +306,23 @@ dmwws: # .global _060_dmem_write_long _060_dmem_write_long: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmwls |# supervisor + clrl d1 |# return success + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmwls |# supervisor dmwlu: - movel d0,sp@- |# put src on stack - movel #0x4,sp@- |# pass: # bytes to copy - movel a0,sp@- |# pass: dst addr (user mem) - pea sp@(0x8) |# pass: src addr (stack) - bsrl _copyout |# "copy out" the data - movel d0,d1 |# return success - addl #0x10,sp |# delete params + src - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsl d0,a0@ + bra Lfdone dmwls: - movel d0,a0@ |# store super longword - clrl d1 |# return success + movel d0,a0@ |# store super longword + rts + +############################################################################ +Lferr: + moveq #-1,d1 +Lfdone: + clrl a1@(64) | clear fault handler rts ############################################################################ diff --git a/sys/arch/m68k/060sp/netbsd060sp.S b/sys/arch/m68k/060sp/netbsd060sp.S index eb9cdd1bdff..29a4f118c24 100644 --- a/sys/arch/m68k/060sp/netbsd060sp.S +++ b/sys/arch/m68k/060sp/netbsd060sp.S @@ -1,5 +1,5 @@ # -# $NetBSD: netbsd060sp.S,v 1.3 1997/06/27 23:32:09 is Exp $ +# $NetBSD: netbsd060sp.S,v 1.4 1997/09/28 12:57:57 is Exp $ # #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ # MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP @@ -158,22 +158,19 @@ user_read: # .global _060_dmem_read_byte _060_dmem_read_byte: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmrbs |# supervisor + clrl d1 |# return success + clrl d0 |# clear whole longword + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmrbs |# supervisor dmrbu: - clrl sp@- |# clear space on stack for result - movel #0x1,sp@- |# pass: # bytes to copy - pea sp@(0x7) |# pass: dst addr (stack) - movel a0,sp@- |# pass: src addr (user mem) - bsrl _copyin |# "copy in" the data - movel d0,d1 |# return success - addl #0xc,sp |# delete params - movel sp@+,d0 |# put answer in d0 - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsb a0@,d0 + bra Lfdone + dmrbs: - clrl d0 |# clear whole longword - moveb a0@,d0 |# fetch super byte - clrl d1 |# return success + moveb a0@,d0 |# fetch super byte + clrl d1 |# return success rts # @@ -195,22 +192,17 @@ dmrbs: _060_imem_read_word: _060_dmem_read_word: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmrws |# supervisor + clrl d1 |# return success + clrl d0 |# clear whole longword + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmrws |# supervisor dmrwu: - clrl sp@- |# clear result space on stack - movel #0x2,sp@- |# pass: # bytes to copy - pea sp@(0x6) |# pass: dst addr (stack) - movel a0,sp@- |# pass: src addr (user mem) - bsrl _copyin |# "copy in" the data - movel d0,d1 |# return success - addl #0xc,sp |# delete params - movel sp@+,d0 |# put answer in d0 - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsw a0@,d0 + bra Lfdone dmrws: - clrl d0 |# clear whole longword - movew a0@,d0 |# fetch super word - clrl d1 |# return success + movew a0@,d0 |# fetch super word rts # @@ -235,21 +227,17 @@ dmrws: _060_imem_read_long: _060_dmem_read_long: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmrls |# supervisor + clrl d1 |# return success + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmrls |# supervisor dmrlu: - subql #0x4,sp |# clear result space on stack - movel #0x4,sp@- |# pass: # bytes to copy - pea sp@(0x4) |# pass: dst addr (stack) - movel a0,sp@- |# pass: src addr (user mem) - bsrl _copyin |# "copy in" the data - movel d0,d1 |# return success - addl #0xc,sp |# delete params - movel sp@+,d0 |# put answer in d0 - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsl a0@,d0 + bra Lfdone dmrls: - movel a0@,d0 |# fetch super longword - clrl d1 |# return success + movel a0@,d0 |# fetch super longword + clrl d1 |# return success rts # @@ -266,20 +254,16 @@ dmrls: # .global _060_dmem_write_byte _060_dmem_write_byte: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmwbs |# supervisor + clrl d1 |# return success + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmwbs |# supervisor dmwbu: - movel d0,sp@- |# put src on stack - movel #0x1,sp@- |# pass: # bytes to copy - movel a0,sp@- |# pass: dst addr (user mem) - pea sp@(0xb) |# pass: src addr (stack) - bsrl _copyout |# "copy out" the data - movel d0,d1 |# return success - addl #0x10,sp |# delete params + src - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsb d0,a0@ + bra Lfdone dmwbs: - moveb d0,a0@ |# store super byte - clrl d1 |# return success + moveb d0,a0@ |# store super byte rts # @@ -296,20 +280,16 @@ dmwbs: # .global _060_dmem_write_word _060_dmem_write_word: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmwws |# supervisor + clrl d1 |# return success + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmwws |# supervisor dmwwu: - movel d0,sp@- |# put src on stack - movel #0x2,sp@- |# pass: # bytes to copy - movel a0,sp@- |# pass: dst addr (user mem) - pea sp@(0xa) |# pass: src addr (stack) - bsrl _copyout |# "copy out" the data - movel d0,d1 |# return success - addl #0x10,sp |# delete params + src - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsw d0,a0@ + bra Lfdone dmwws: - movew d0,a0@ |# store super word - clrl d1 |# return success + movew d0,a0@ |# store super word rts # @@ -326,20 +306,23 @@ dmwws: # .global _060_dmem_write_long _060_dmem_write_long: - btst #0x5,a6@(0x4) |# check for supervisor state - bnes dmwls |# supervisor + clrl d1 |# return success + btst #0x5,a6@(0x4) |# check for supervisor state + bnes dmwls |# supervisor dmwlu: - movel d0,sp@- |# put src on stack - movel #0x4,sp@- |# pass: # bytes to copy - movel a0,sp@- |# pass: dst addr (user mem) - pea sp@(0x8) |# pass: src addr (stack) - bsrl _copyout |# "copy out" the data - movel d0,d1 |# return success - addl #0x10,sp |# delete params + src - rts + movl _curpcb,a1 | fault handler + movl #Lferr,a1@(64) | set it + movsl d0,a0@ + bra Lfdone dmwls: - movel d0,a0@ |# store super longword - clrl d1 |# return success + movel d0,a0@ |# store super longword + rts + +############################################################################ +Lferr: + moveq #-1,d1 +Lfdone: + clrl a1@(64) | clear fault handler rts ############################################################################ |
