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 /sys | |
| 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.
Diffstat (limited to 'sys')
| -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 ############################################################################ |
