Prepare for the m68k ELF transition:
o Add register prefixes for the benefit of gas.new o Wrap global symbols in the m68k/asm.h macros o Fix `#' comments so the source can be run through the C pre-processor
This commit is contained in:
parent
9307dc5373
commit
71ca01981e
@ -1,9 +1,10 @@
|
||||
#
|
||||
# $NetBSD: Makefile.inc,v 1.5 1999/02/22 21:25:05 is Exp $
|
||||
# $NetBSD: Makefile.inc,v 1.6 2000/11/30 21:00:51 scw Exp $
|
||||
#
|
||||
SPDIR = $S/arch/m68k/060sp
|
||||
|
||||
M060SPAS = $(AS) -m68060 -I${SPDIR} -o ${.TARGET} ${.IMPSRC}
|
||||
M060SPAS = $(CC) ${AFLAGS} -m68060 ${CPPFLAGS} -I${SPDIR} \
|
||||
-c -o ${.TARGET} ${.IMPSRC}
|
||||
|
||||
netbsd.o: ${SPDIR}/netbsd.S .NOTMAIN
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#
|
||||
# $NetBSD: copyright.S,v 1.2 1996/05/16 15:37:49 is Exp $
|
||||
#
|
||||
|#
|
||||
|# $NetBSD: copyright.S,v 1.3 2000/11/30 21:00:51 scw Exp $
|
||||
|#
|
||||
|
||||
.ascii "MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP\n"
|
||||
.ascii "M68000 Hi-Performance Microprocessor Division\n"
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
#
|
||||
# $NetBSD: fnetbsd.S,v 1.4 1999/02/22 21:25:05 is Exp $
|
||||
# $NetBSD: fnetbsd.S,v 1.5 2000/11/30 21:00:51 scw Exp $
|
||||
#
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
|
||||
@ -59,7 +60,9 @@
|
||||
# _060_real_fpu_disabled() #
|
||||
# _060_real_trap() #
|
||||
#################################
|
||||
*/
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_fpsp_done():
|
||||
#
|
||||
@ -68,10 +71,11 @@
|
||||
# routine. The operating system can do system dependent clean-up or
|
||||
# simply execute an "rte" as with the sample code below.
|
||||
#
|
||||
.global _060_fpsp_done
|
||||
_060_fpsp_done:
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_fpsp_done)
|
||||
rte
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_ovfl():
|
||||
#
|
||||
@ -83,13 +87,14 @@ _060_fpsp_done:
|
||||
# The sample routine below simply clears the exception status bit and
|
||||
# does an "rte".
|
||||
#
|
||||
.global _060_real_ovfl
|
||||
_060_real_ovfl:
|
||||
fsave sp@-
|
||||
movew #0x6000,sp@(0x2)
|
||||
frestore sp@+
|
||||
jmp _fpfault
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_ovfl)
|
||||
fsave %sp@-
|
||||
movew #0x6000,%sp@(0x2)
|
||||
frestore %sp@+
|
||||
jmp _C_LABEL(fpfault)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_unfl():
|
||||
#
|
||||
@ -101,13 +106,14 @@ _060_real_ovfl:
|
||||
# The sample routine below simply clears the exception status bit and
|
||||
# does an "rte".
|
||||
#
|
||||
.global _060_real_unfl
|
||||
_060_real_unfl:
|
||||
fsave sp@-
|
||||
movew #0x6000,sp@(0x2)
|
||||
frestore sp@+
|
||||
jmp _fpfault
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_unfl)
|
||||
fsave %sp@-
|
||||
movew #0x6000,%sp@(0x2)
|
||||
frestore %sp@+
|
||||
jmp _C_LABEL(fpfault)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_operr():
|
||||
#
|
||||
@ -120,13 +126,14 @@ _060_real_unfl:
|
||||
# The sample routine below simply clears the exception status bit and
|
||||
# does an "rte".
|
||||
#
|
||||
.global _060_real_operr
|
||||
_060_real_operr:
|
||||
fsave sp@-
|
||||
movew #0x6000,sp@(0x2)
|
||||
frestore sp@+
|
||||
jmp _fpfault
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_operr)
|
||||
fsave %sp@-
|
||||
movew #0x6000,%sp@(0x2)
|
||||
frestore %sp@+
|
||||
jmp _C_LABEL(fpfault)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_snan():
|
||||
#
|
||||
@ -139,13 +146,14 @@ _060_real_operr:
|
||||
# The sample routine below simply clears the exception status bit and
|
||||
# does an "rte".
|
||||
#
|
||||
.global _060_real_snan
|
||||
_060_real_snan:
|
||||
fsave sp@-
|
||||
movew #0x6000,sp@(0x2)
|
||||
frestore sp@+
|
||||
jmp _fpfault
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_snan)
|
||||
fsave %sp@-
|
||||
movew #0x6000,%sp@(0x2)
|
||||
frestore %sp@+
|
||||
jmp _C_LABEL(fpfault)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_dz():
|
||||
#
|
||||
@ -158,13 +166,14 @@ _060_real_snan:
|
||||
# The sample routine below simply clears the exception status bit and
|
||||
# does an "rte".
|
||||
#
|
||||
.global _060_real_dz
|
||||
_060_real_dz:
|
||||
fsave sp@-
|
||||
movew #0x6000,sp@(0x2)
|
||||
frestore sp@+
|
||||
jmp _fpfault
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_dz)
|
||||
fsave %sp@-
|
||||
movew #0x6000,%sp@(0x2)
|
||||
frestore %sp@+
|
||||
jmp _C_LABEL(fpfault)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_inex():
|
||||
#
|
||||
@ -177,13 +186,14 @@ _060_real_dz:
|
||||
# The sample routine below simply clears the exception status bit and
|
||||
# does an "rte".
|
||||
#
|
||||
.global _060_real_inex
|
||||
_060_real_inex:
|
||||
fsave sp@-
|
||||
movew #0x6000,sp@(0x2)
|
||||
frestore sp@+
|
||||
jmp _fpfault
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_inex)
|
||||
fsave %sp@-
|
||||
movew #0x6000,%sp@(0x2)
|
||||
frestore %sp@+
|
||||
jmp _C_LABEL(fpfault)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_bsun():
|
||||
#
|
||||
@ -196,17 +206,18 @@ _060_real_inex:
|
||||
# bit in the FPSR, and does an "rte". The instruction that caused the
|
||||
# bsun will now be re-executed but with the NaN FPSR bit cleared.
|
||||
#
|
||||
.global _060_real_bsun
|
||||
_060_real_bsun:
|
||||
fsave sp@-
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_bsun)
|
||||
fsave %sp@-
|
||||
|
||||
fmovel fpsr,sp@-
|
||||
andib #0xfe,sp@
|
||||
fmovel sp@+,fpsr
|
||||
fmovel %fpsr,%sp@-
|
||||
andib #0xfe,%sp@
|
||||
fmovel %sp@+,%fpsr
|
||||
|
||||
addl #0xc,sp
|
||||
jmp _fpfault
|
||||
addl #0xc,%sp
|
||||
jmp _C_LABEL(fpfault)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_fline():
|
||||
#
|
||||
@ -217,10 +228,11 @@ _060_real_bsun:
|
||||
# _fpsp_fline() distinguishes between the three and acts appropriately. F-Line
|
||||
# Illegals branch here.
|
||||
#
|
||||
.global _060_real_fline
|
||||
_060_real_fline:
|
||||
jmp _fpfault
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_fline)
|
||||
jmp _C_LABEL(fpfault)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_fpu_disabled():
|
||||
#
|
||||
@ -236,18 +248,19 @@ _060_real_fline:
|
||||
# The execution of the instruction then proceeds with an enabled floating-point
|
||||
# unit.
|
||||
#
|
||||
.global _060_real_fpu_disabled
|
||||
_060_real_fpu_disabled:
|
||||
movel d0,sp@- |# enabled the fpu
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_fpu_disabled)
|
||||
movel %d0,%sp@- |# enabled the fpu
|
||||
|
||||
.short 0x4e7a,0x0808 |* movec.l pcr,d0
|
||||
bclr #0x1,d0
|
||||
bclr #0x1,%d0
|
||||
.short 0x4e7b,0x0808 |* movec.l d0,pcr
|
||||
movel sp@+,d0
|
||||
movel %sp@+,%d0
|
||||
|
||||
movel sp@(0xc),sp@(0x2) |# set "Current PC"
|
||||
movel %sp@(0xc),%sp@(0x2) |# set "Current PC"
|
||||
rte
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_trap():
|
||||
#
|
||||
@ -257,52 +270,45 @@ _060_real_fpu_disabled:
|
||||
#
|
||||
# The sample code below simply executes an "rte".
|
||||
#
|
||||
.global _060_real_trap
|
||||
_060_real_trap:
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_trap)
|
||||
rte
|
||||
|
||||
/*
|
||||
#############################################################################
|
||||
|
||||
##################################
|
||||
# (2) EXAMPLE PACKAGE ENTRY CODE #
|
||||
##################################
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_fpsp_snan)
|
||||
bral _C_LABEL(FP_CALL_TOP)+0x80+0x00
|
||||
|
||||
.global _060_fpsp_snan
|
||||
_060_fpsp_snan:
|
||||
bral _FP_CALL_TOP+0x80+0x00
|
||||
ASENTRY_NOPROFILE(_060_fpsp_operr)
|
||||
bral _C_LABEL(FP_CALL_TOP)+0x80+0x08
|
||||
|
||||
.global _060_fpsp_operr
|
||||
_060_fpsp_operr:
|
||||
bral _FP_CALL_TOP+0x80+0x08
|
||||
ASENTRY_NOPROFILE(_060_fpsp_ovfl)
|
||||
bral _C_LABEL(FP_CALL_TOP)+0x80+0x10
|
||||
|
||||
.global _060_fpsp_ovfl
|
||||
_060_fpsp_ovfl:
|
||||
bral _FP_CALL_TOP+0x80+0x10
|
||||
ASENTRY_NOPROFILE(_060_fpsp_unfl)
|
||||
bral _C_LABEL(FP_CALL_TOP)+0x80+0x18
|
||||
|
||||
.global _060_fpsp_unfl
|
||||
_060_fpsp_unfl:
|
||||
bral _FP_CALL_TOP+0x80+0x18
|
||||
ASENTRY_NOPROFILE(_060_fpsp_dz)
|
||||
bral _C_LABEL(FP_CALL_TOP)+0x80+0x20
|
||||
|
||||
.global _060_fpsp_dz
|
||||
_060_fpsp_dz:
|
||||
bral _FP_CALL_TOP+0x80+0x20
|
||||
ASENTRY_NOPROFILE(_060_fpsp_inex)
|
||||
bral _C_LABEL(FP_CALL_TOP)+0x80+0x28
|
||||
|
||||
.global _060_fpsp_inex
|
||||
_060_fpsp_inex:
|
||||
bral _FP_CALL_TOP+0x80+0x28
|
||||
ASENTRY_NOPROFILE(_060_fpsp_fline)
|
||||
bral _C_LABEL(FP_CALL_TOP)+0x80+0x30
|
||||
|
||||
.global _060_fpsp_fline
|
||||
_060_fpsp_fline:
|
||||
bral _FP_CALL_TOP+0x80+0x30
|
||||
ASENTRY_NOPROFILE(_060_fpsp_unsupp)
|
||||
bral _C_LABEL(FP_CALL_TOP)+0x80+0x38
|
||||
|
||||
.global _060_fpsp_unsupp
|
||||
_060_fpsp_unsupp:
|
||||
bral _FP_CALL_TOP+0x80+0x38
|
||||
|
||||
.global _060_fpsp_effadd
|
||||
_060_fpsp_effadd:
|
||||
bral _FP_CALL_TOP+0x80+0x40
|
||||
ASENTRY_NOPROFILE(_060_fpsp_effadd)
|
||||
bral _C_LABEL(FP_CALL_TOP)+0x80+0x40
|
||||
|
||||
/*
|
||||
#############################################################################
|
||||
|
||||
################################
|
||||
@ -310,43 +316,44 @@ _060_fpsp_effadd:
|
||||
################################
|
||||
|
||||
# The size of this section MUST be 128 bytes!!!
|
||||
|
||||
.global _FP_CALL_TOP
|
||||
_FP_CALL_TOP:
|
||||
.long _060_real_bsun-_FP_CALL_TOP
|
||||
.long _060_real_snan-_FP_CALL_TOP
|
||||
.long _060_real_operr-_FP_CALL_TOP
|
||||
.long _060_real_ovfl-_FP_CALL_TOP
|
||||
.long _060_real_unfl-_FP_CALL_TOP
|
||||
.long _060_real_dz-_FP_CALL_TOP
|
||||
.long _060_real_inex-_FP_CALL_TOP
|
||||
.long _060_real_fline-_FP_CALL_TOP
|
||||
.long _060_real_fpu_disabled-_FP_CALL_TOP
|
||||
.long _060_real_trap-_FP_CALL_TOP
|
||||
.long _060_real_trace-_FP_CALL_TOP
|
||||
.long _060_real_access-_FP_CALL_TOP
|
||||
.long _060_fpsp_done-_FP_CALL_TOP
|
||||
*/
|
||||
GLOBAL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_bsun)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_snan)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_operr)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_ovfl)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_unfl)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_dz)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_inex)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_fline)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_fpu_disabled)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_trap)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_trace)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_access)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_fpsp_done)-_C_LABEL(FP_CALL_TOP)
|
||||
|
||||
.long 0x00000000,0x00000000,0x00000000
|
||||
|
||||
.long _060_imem_read-_FP_CALL_TOP
|
||||
.long _060_dmem_read-_FP_CALL_TOP
|
||||
.long _060_dmem_write-_FP_CALL_TOP
|
||||
.long _060_imem_read_word-_FP_CALL_TOP
|
||||
.long _060_imem_read_long-_FP_CALL_TOP
|
||||
.long _060_dmem_read_byte-_FP_CALL_TOP
|
||||
.long _060_dmem_read_word-_FP_CALL_TOP
|
||||
.long _060_dmem_read_long-_FP_CALL_TOP
|
||||
.long _060_dmem_write_byte-_FP_CALL_TOP
|
||||
.long _060_dmem_write_word-_FP_CALL_TOP
|
||||
.long _060_dmem_write_long-_FP_CALL_TOP
|
||||
.long _ASM_LABEL(_060_imem_read)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_read)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_write)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_imem_read_word)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_imem_read_long)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_read_byte)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_read_word)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_read_long)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_write_byte)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_write_word)-_C_LABEL(FP_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_write_long)-_C_LABEL(FP_CALL_TOP)
|
||||
|
||||
.long 0x00000000
|
||||
|
||||
.long 0x00000000,0x00000000,0x00000000,0x00000000
|
||||
|
||||
/*
|
||||
#############################################################################
|
||||
|
||||
# 060 FPSP KERNEL PACKAGE NEEDS TO GO HERE!!!
|
||||
*/
|
||||
|
||||
.include "fpsp.S"
|
||||
#include "fpsp.S"
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
#
|
||||
# $NetBSD: inetbsd.S,v 1.3 1997/07/28 19:01:13 is Exp $
|
||||
# $NetBSD: inetbsd.S,v 1.4 2000/11/30 21:00:51 scw Exp $
|
||||
#
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
|
||||
@ -55,7 +56,9 @@
|
||||
# _060_real_lock_page() #
|
||||
# _060_real_unlock_page() #
|
||||
#################################
|
||||
*/
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_isp_done():
|
||||
#
|
||||
@ -69,10 +72,11 @@
|
||||
# To simply continue execution at the next instruction, just
|
||||
# do an "rte".
|
||||
#
|
||||
.global _060_isp_done
|
||||
_060_isp_done:
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_isp_done)
|
||||
rte
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_chk():
|
||||
#
|
||||
@ -82,11 +86,12 @@ _060_isp_done:
|
||||
# a CHK exception stack frame from the Unimplemented Integer Instrcution
|
||||
# stack frame and branches to this routine.
|
||||
#
|
||||
.global _060_real_chk
|
||||
_060_real_chk:
|
||||
tstb sp@ |# is tracing enabled?
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_chk)
|
||||
tstb %sp@ |# is tracing enabled?
|
||||
bpls real_chk_end |# no
|
||||
|
||||
/*
|
||||
#
|
||||
# CHK FRAME TRACE FRAME
|
||||
# ***************** *****************
|
||||
@ -100,12 +105,14 @@ _060_real_chk:
|
||||
# * SR * * SR *
|
||||
# ***************** *****************
|
||||
#
|
||||
moveb #0x24,sp@(0x7) |# set trace vecno
|
||||
bral _060_real_trace
|
||||
*/
|
||||
moveb #0x24,%sp@(0x7) |# set trace vecno
|
||||
bral _ASM_LABEL(_060_real_trace)
|
||||
|
||||
real_chk_end:
|
||||
jmp _chkinst
|
||||
jmp _C_LABEL(chkinst)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_divbyzero:
|
||||
#
|
||||
@ -120,11 +127,12 @@ real_chk_end:
|
||||
# then it create a Trace exception stack frame from the "chk" exception
|
||||
# stack frame and branches to the _real_trace() entry point.
|
||||
#
|
||||
.global _060_real_divbyzero
|
||||
_060_real_divbyzero:
|
||||
tstb sp@ |# is tracing enabled?
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_divbyzero)
|
||||
tstb %sp@ |# is tracing enabled?
|
||||
bpls real_divbyzero_end |# no
|
||||
|
||||
/*
|
||||
#
|
||||
# DIVBYZERO FRAME TRACE FRAME
|
||||
# ***************** *****************
|
||||
@ -138,14 +146,16 @@ _060_real_divbyzero:
|
||||
# * SR * * SR *
|
||||
# ***************** *****************
|
||||
#
|
||||
moveb #0x24,sp@(0x7) |# set trace vecno
|
||||
bral _060_real_trace
|
||||
*/
|
||||
moveb #0x24,%sp@(0x7) |# set trace vecno
|
||||
bral _ASM_LABEL(_060_real_trace)
|
||||
|
||||
real_divbyzero_end:
|
||||
jmp _zerodiv
|
||||
jmp _C_LABEL(zerodiv)
|
||||
|
||||
###########################
|
||||
|###########################
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_cas():
|
||||
#
|
||||
@ -153,10 +163,11 @@ real_divbyzero_end:
|
||||
# If the implementation provided by the 68060ISP is sufficient,
|
||||
# then this routine simply re-enters the package through _isp_cas.
|
||||
#
|
||||
.global _060_real_cas
|
||||
_060_real_cas:
|
||||
bral _I_CALL_TOP+0x80+0x08
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_cas)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x08
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_cas2():
|
||||
#
|
||||
@ -164,10 +175,11 @@ _060_real_cas:
|
||||
# If the implementation provided by the 68060ISP is sufficient,
|
||||
# then this routine simply re-enters the package through _isp_cas2.
|
||||
#
|
||||
.global _060_real_cas2
|
||||
_060_real_cas2:
|
||||
bral _I_CALL_TOP+0x80+0x10
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_cas2)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x10
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_lock_page():
|
||||
#
|
||||
@ -185,11 +197,12 @@ _060_real_cas2:
|
||||
# Expected outputs:
|
||||
# d0 = 0 -> success| non-zero -> failure
|
||||
#
|
||||
.global _060_real_lock_page
|
||||
_060_real_lock_page:
|
||||
clrl d0
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_lock_page)
|
||||
clrl %d0
|
||||
rts
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_unlock_page():
|
||||
#
|
||||
@ -202,90 +215,86 @@ _060_real_lock_page:
|
||||
# d0 = `xxxxxxff -> supervisor| `xxxxxx00 -> user
|
||||
# d1 = `xxxxxxff -> longword| `xxxxxx00 -> word
|
||||
#
|
||||
.global _060_real_unlock_page
|
||||
_060_real_unlock_page:
|
||||
clrl d0
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_unlock_page)
|
||||
clrl %d0
|
||||
rts
|
||||
|
||||
############################################################################
|
||||
|
||||
|############################################################################
|
||||
/*
|
||||
##################################
|
||||
# (2) EXAMPLE PACKAGE ENTRY CODE #
|
||||
##################################
|
||||
*/
|
||||
|
||||
.global _060_isp_unimp
|
||||
_060_isp_unimp:
|
||||
bral _I_CALL_TOP+0x80+0x00
|
||||
ASENTRY_NOPROFILE(_060_isp_unimp)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x00
|
||||
|
||||
.global _060_isp_cas
|
||||
_060_isp_cas:
|
||||
bral _I_CALL_TOP+0x80+0x08
|
||||
ASENTRY_NOPROFILE(_060_isp_cas)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x08
|
||||
|
||||
.global _060_isp_cas2
|
||||
_060_isp_cas2:
|
||||
bral _I_CALL_TOP+0x80+0x10
|
||||
ASENTRY_NOPROFILE(_060_isp_cas2)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x10
|
||||
|
||||
.global _060_isp_cas_finish
|
||||
_060_isp_cas_finish:
|
||||
bral _I_CALL_TOP+0x80+0x18
|
||||
ASENTRY_NOPROFILE(_060_isp_cas_finish)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x18
|
||||
|
||||
.global _060_isp_cas2_finish
|
||||
_060_isp_cas2_finish:
|
||||
bral _I_CALL_TOP+0x80+0x20
|
||||
ASENTRY_NOPROFILE(_060_isp_cas2_finish)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x20
|
||||
|
||||
.global _060_isp_cas_inrange
|
||||
_060_isp_cas_inrange:
|
||||
bral _I_CALL_TOP+0x80+0x28
|
||||
ASENTRY_NOPROFILE(_060_isp_cas_inrange)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x28
|
||||
|
||||
.global _060_isp_cas_terminate
|
||||
_060_isp_cas_terminate:
|
||||
bral _I_CALL_TOP+0x80+0x30
|
||||
ASENTRY_NOPROFILE(_060_isp_cas_terminate)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x30
|
||||
|
||||
.global _060_isp_cas_restart
|
||||
_060_isp_cas_restart:
|
||||
bral _I_CALL_TOP+0x80+0x38
|
||||
ASENTRY_NOPROFILE(_060_isp_cas_restart)
|
||||
bral _C_LABEL(I_CALL_TOP)+0x80+0x38
|
||||
|
||||
############################################################################
|
||||
|############################################################################
|
||||
|
||||
/*
|
||||
################################
|
||||
# (3) EXAMPLE CALL-OUT SECTION #
|
||||
################################
|
||||
|
||||
# The size of this section MUST be 128 bytes!!!
|
||||
*/
|
||||
|
||||
.global _I_CALL_TOP
|
||||
_I_CALL_TOP:
|
||||
.long _060_real_chk-_I_CALL_TOP
|
||||
.long _060_real_divbyzero-_I_CALL_TOP
|
||||
.long _060_real_trace-_I_CALL_TOP
|
||||
.long _060_real_access-_I_CALL_TOP
|
||||
.long _060_isp_done-_I_CALL_TOP
|
||||
GLOBAL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_chk)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_divbyzero)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_trace)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_access)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_isp_done)-_C_LABEL(I_CALL_TOP)
|
||||
|
||||
.long _060_real_cas-_I_CALL_TOP
|
||||
.long _060_real_cas2-_I_CALL_TOP
|
||||
.long _060_real_lock_page-_I_CALL_TOP
|
||||
.long _060_real_unlock_page-_I_CALL_TOP
|
||||
.long _ASM_LABEL(_060_real_cas)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_cas2)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_lock_page)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_real_unlock_page)-_C_LABEL(I_CALL_TOP)
|
||||
|
||||
.long 0x00000000,0x00000000,0x00000000,0x00000000
|
||||
.long 0x00000000,0x00000000,0x00000000
|
||||
|
||||
.long _060_imem_read-_I_CALL_TOP
|
||||
.long _060_dmem_read-_I_CALL_TOP
|
||||
.long _060_dmem_write-_I_CALL_TOP
|
||||
.long _060_imem_read_word-_I_CALL_TOP
|
||||
.long _060_imem_read_long-_I_CALL_TOP
|
||||
.long _060_dmem_read_byte-_I_CALL_TOP
|
||||
.long _060_dmem_read_word-_I_CALL_TOP
|
||||
.long _060_dmem_read_long-_I_CALL_TOP
|
||||
.long _060_dmem_write_byte-_I_CALL_TOP
|
||||
.long _060_dmem_write_word-_I_CALL_TOP
|
||||
.long _060_dmem_write_long-_I_CALL_TOP
|
||||
.long _ASM_LABEL(_060_imem_read)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_read)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_write)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_imem_read_word)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_imem_read_long)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_read_byte)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_read_word)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_read_long)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_write_byte)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_write_word)-_C_LABEL(I_CALL_TOP)
|
||||
.long _ASM_LABEL(_060_dmem_write_long)-_C_LABEL(I_CALL_TOP)
|
||||
|
||||
.long 0x00000000
|
||||
.long 0x00000000,0x00000000,0x00000000,0x00000000
|
||||
|
||||
/*
|
||||
############################################################################
|
||||
|
||||
# 060 INTEGER KERNEL PACKAGE MUST GO HERE!!!
|
||||
*/
|
||||
|
||||
.include "isp.S"
|
||||
#include "isp.S"
|
||||
|
@ -1,5 +1,6 @@
|
||||
/*
|
||||
#
|
||||
# $NetBSD: netbsd060sp.S,v 1.5 1999/01/30 21:54:49 is Exp $
|
||||
# $NetBSD: netbsd060sp.S,v 1.6 2000/11/30 21:00:51 scw Exp $
|
||||
#
|
||||
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
# MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
|
||||
@ -40,12 +41,18 @@
|
||||
# This file contains:
|
||||
# - example "Call-Out"s required by both the ISP and FPSP.
|
||||
#
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
/*
|
||||
#
|
||||
# make the copyright notice appear in the binary:
|
||||
#
|
||||
.include "copyright.S"
|
||||
*/
|
||||
#include "copyright.S"
|
||||
|
||||
/*
|
||||
#################################
|
||||
# EXAMPLE CALL-OUTS #
|
||||
# #
|
||||
@ -64,7 +71,9 @@
|
||||
# _060_real_trace() #
|
||||
# _060_real_access() #
|
||||
#################################
|
||||
*/
|
||||
|
||||
/*
|
||||
#
|
||||
# Each IO routine checks to see if the memory write/read is to/from user
|
||||
# or supervisor application space. The examples below use simple "move"
|
||||
@ -77,7 +86,9 @@
|
||||
# The result is that Unix processes are allowed to sleep as a consequence
|
||||
# of a page fault during a _copyout.
|
||||
#
|
||||
*/
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_dmem_write():
|
||||
#
|
||||
@ -91,25 +102,26 @@
|
||||
# OUTPUTS:
|
||||
# d1 - 0 = success, !0 = failure
|
||||
#
|
||||
.global _060_dmem_write
|
||||
_060_dmem_write:
|
||||
btst #0x5,a6@(0x4) |# check for supervisor state
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_dmem_write)
|
||||
btst #0x5,%a6@(0x4) |# check for supervisor state
|
||||
beqs user_write
|
||||
super_write:
|
||||
moveb a0@+,a1@+ |# copy 1 byte
|
||||
subql #0x1,d0 |# decr byte counter
|
||||
moveb %a0@+,%a1@+ |# copy 1 byte
|
||||
subql #0x1,%d0 |# decr byte counter
|
||||
bnes super_write |# quit if ctr = 0
|
||||
clrl d1 |# return success
|
||||
clrl %d1 |# return success
|
||||
rts
|
||||
user_write:
|
||||
movel d0,sp@- |# pass: counter
|
||||
movel a1,sp@- |# pass: user dst
|
||||
movel a0,sp@- |# pass: supervisor src
|
||||
bsrl _copyout |# write byte to user mem
|
||||
movel d0,d1 |# return success
|
||||
addl #0xc,sp |# clear 3 lw params
|
||||
movel %d0,%sp@- |# pass: counter
|
||||
movel %a1,%sp@- |# pass: user dst
|
||||
movel %a0,%sp@- |# pass: supervisor src
|
||||
bsrl _C_LABEL(copyout) |# write byte to user mem
|
||||
movel %d0,%d1 |# return success
|
||||
addl #0xc,%sp |# clear 3 lw params
|
||||
rts
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_imem_read(), _060_dmem_read():
|
||||
#
|
||||
@ -123,27 +135,27 @@ user_write:
|
||||
# OUTPUTS:
|
||||
# d1 - 0 = success, !0 = failure
|
||||
#
|
||||
.global _060_imem_read
|
||||
.global _060_dmem_read
|
||||
_060_imem_read:
|
||||
_060_dmem_read:
|
||||
btst #0x5,a6@(0x4) |# check for supervisor state
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_imem_read)
|
||||
ASENTRY_NOPROFILE(_060_dmem_read)
|
||||
btst #0x5,%a6@(0x4) |# check for supervisor state
|
||||
beqs user_read
|
||||
super_read:
|
||||
moveb a0@+,a1@+ |# copy 1 byte
|
||||
subql #0x1,d0 |# decr byte counter
|
||||
moveb %a0@+,%a1@+ |# copy 1 byte
|
||||
subql #0x1,%d0 |# decr byte counter
|
||||
bnes super_read |# quit if ctr = 0
|
||||
clrl d1 |# return success
|
||||
clrl %d1 |# return success
|
||||
rts
|
||||
user_read:
|
||||
movel d0,sp@- |# pass: counter
|
||||
movel a1,sp@- |# pass: super dst
|
||||
movel a0,sp@- |# pass: user src
|
||||
bsrl _copyin |# read byte from user mem
|
||||
movel d0,d1 |# return success
|
||||
addl #0xc,sp |# clear 3 lw params
|
||||
movel %d0,%sp@- |# pass: counter
|
||||
movel %a1,%sp@- |# pass: super dst
|
||||
movel %a0,%sp@- |# pass: user src
|
||||
bsrl _C_LABEL(copyin) |# read byte from user mem
|
||||
movel %d0,%d1 |# return success
|
||||
addl #0xc,%sp |# clear 3 lw params
|
||||
rts
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_dmem_read_byte():
|
||||
#
|
||||
@ -156,22 +168,23 @@ user_read:
|
||||
# d0 - data byte in d0
|
||||
# d1 - 0 = success, !0 = failure
|
||||
#
|
||||
.global _060_dmem_read_byte
|
||||
_060_dmem_read_byte:
|
||||
clrl d1 |# return success
|
||||
clrl d0 |# clear whole longword
|
||||
btst #0x5,a6@(0x4) |# check for supervisor state
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_dmem_read_byte)
|
||||
clrl %d1 |# return success
|
||||
clrl %d0 |# clear whole longword
|
||||
btst #0x5,%a6@(0x4) |# check for supervisor state
|
||||
bnes dmrbs |# supervisor
|
||||
dmrbu:
|
||||
movl _curpcb,a1 | fault handler
|
||||
movl #Lferr,a1@(64) | set it
|
||||
movsb a0@,d0
|
||||
movl _C_LABEL(curpcb),%a1 | fault handler
|
||||
movl #Lferr,%a1@(64) | set it
|
||||
movsb %a0@,%d0
|
||||
bra Lfdone
|
||||
|
||||
dmrbs:
|
||||
moveb a0@,d0 |# fetch super byte
|
||||
moveb %a0@,%d0 |# fetch super byte
|
||||
rts
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_imem_read_word():
|
||||
# Read an instruction word from user memory.
|
||||
@ -186,24 +199,23 @@ dmrbs:
|
||||
# d0 - data word in d0
|
||||
# d1 - 0 = success, !0 = failure
|
||||
#
|
||||
.global _060_imem_read_word
|
||||
.global _060_dmem_read_word
|
||||
|
||||
_060_imem_read_word:
|
||||
_060_dmem_read_word:
|
||||
clrl d1 |# return success
|
||||
clrl d0 |# clear whole longword
|
||||
btst #0x5,a6@(0x4) |# check for supervisor state
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_imem_read_word)
|
||||
ASENTRY_NOPROFILE(_060_dmem_read_word)
|
||||
clrl %d1 |# return success
|
||||
clrl %d0 |# clear whole longword
|
||||
btst #0x5,%a6@(0x4) |# check for supervisor state
|
||||
bnes dmrws |# supervisor
|
||||
dmrwu:
|
||||
movl _curpcb,a1 | fault handler
|
||||
movl #Lferr,a1@(64) | set it
|
||||
movsw a0@,d0
|
||||
movl _C_LABEL(curpcb),%a1 | fault handler
|
||||
movl #Lferr,%a1@(64) | set it
|
||||
movsw %a0@,%d0
|
||||
bra Lfdone
|
||||
dmrws:
|
||||
movew a0@,d0 |# fetch super word
|
||||
movew %a0@,%d0 |# fetch super word
|
||||
rts
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_imem_read_long():
|
||||
# Read an instruction longword from user memory.
|
||||
@ -211,7 +223,6 @@ dmrws:
|
||||
# _060_dmem_read_long():
|
||||
# Read an data longword from user memory.
|
||||
#
|
||||
|
||||
#
|
||||
# INPUTS:
|
||||
# a0 - user source address
|
||||
@ -220,24 +231,22 @@ dmrws:
|
||||
# d0 - data longword in d0
|
||||
# d1 - 0 = success, !0 = failure
|
||||
#
|
||||
|
||||
.global _060_dmem_read_long
|
||||
.global _060_imem_read_long
|
||||
|
||||
_060_imem_read_long:
|
||||
_060_dmem_read_long:
|
||||
clrl d1 |# return success
|
||||
btst #0x5,a6@(0x4) |# check for supervisor state
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_imem_read_long)
|
||||
ASENTRY_NOPROFILE(_060_dmem_read_long)
|
||||
clrl %d1 |# return success
|
||||
btst #0x5,%a6@(0x4) |# check for supervisor state
|
||||
bnes dmrls |# supervisor
|
||||
dmrlu:
|
||||
movl _curpcb,a1 | fault handler
|
||||
movl #Lferr,a1@(64) | set it
|
||||
movsl a0@,d0
|
||||
movl _C_LABEL(curpcb),%a1 | fault handler
|
||||
movl #Lferr,%a1@(64) | set it
|
||||
movsl %a0@,%d0
|
||||
bra Lfdone
|
||||
dmrls:
|
||||
movel a0@,d0 |# fetch super longword
|
||||
movel %a0@,%d0 |# fetch super longword
|
||||
rts
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_dmem_write_byte():
|
||||
#
|
||||
@ -250,20 +259,21 @@ dmrls:
|
||||
# OUTPUTS:
|
||||
# d1 - 0 = success, !0 = failure
|
||||
#
|
||||
.global _060_dmem_write_byte
|
||||
_060_dmem_write_byte:
|
||||
clrl d1 |# return success
|
||||
btst #0x5,a6@(0x4) |# check for supervisor state
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_dmem_write_byte)
|
||||
clrl %d1 |# return success
|
||||
btst #0x5,%a6@(0x4) |# check for supervisor state
|
||||
bnes dmwbs |# supervisor
|
||||
dmwbu:
|
||||
movl _curpcb,a1 | fault handler
|
||||
movl #Lferr,a1@(64) | set it
|
||||
movsb d0,a0@
|
||||
movl _C_LABEL(curpcb),%a1 | fault handler
|
||||
movl #Lferr,%a1@(64) | set it
|
||||
movsb %d0,%a0@
|
||||
bra Lfdone
|
||||
dmwbs:
|
||||
moveb d0,a0@ |# store super byte
|
||||
moveb %d0,%a0@ |# store super byte
|
||||
rts
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_dmem_write_word():
|
||||
#
|
||||
@ -276,20 +286,21 @@ dmwbs:
|
||||
# OUTPUTS:
|
||||
# d1 - 0 = success, !0 = failure
|
||||
#
|
||||
.global _060_dmem_write_word
|
||||
_060_dmem_write_word:
|
||||
clrl d1 |# return success
|
||||
btst #0x5,a6@(0x4) |# check for supervisor state
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_dmem_write_word)
|
||||
clrl %d1 |# return success
|
||||
btst #0x5,%a6@(0x4) |# check for supervisor state
|
||||
bnes dmwws |# supervisor
|
||||
dmwwu:
|
||||
movl _curpcb,a1 | fault handler
|
||||
movl #Lferr,a1@(64) | set it
|
||||
movsw d0,a0@
|
||||
movl _C_LABEL(curpcb),%a1 | fault handler
|
||||
movl #Lferr,%a1@(64) | set it
|
||||
movsw %d0,%a0@
|
||||
bra Lfdone
|
||||
dmwws:
|
||||
movew d0,a0@ |# store super word
|
||||
movew %d0,%a0@ |# store super word
|
||||
rts
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_dmem_write_long():
|
||||
#
|
||||
@ -302,29 +313,30 @@ dmwws:
|
||||
# OUTPUTS:
|
||||
# d1 - 0 = success, !0 = failure
|
||||
#
|
||||
.global _060_dmem_write_long
|
||||
_060_dmem_write_long:
|
||||
clrl d1 |# return success
|
||||
btst #0x5,a6@(0x4) |# check for supervisor state
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_dmem_write_long)
|
||||
clrl %d1 |# return success
|
||||
btst #0x5,%a6@(0x4) |# check for supervisor state
|
||||
bnes dmwls |# supervisor
|
||||
dmwlu:
|
||||
movl _curpcb,a1 | fault handler
|
||||
movl #Lferr,a1@(64) | set it
|
||||
movsl d0,a0@
|
||||
movl _C_LABEL(curpcb),%a1 | fault handler
|
||||
movl #Lferr,%a1@(64) | set it
|
||||
movsl %d0,%a0@
|
||||
bra Lfdone
|
||||
dmwls:
|
||||
movel d0,a0@ |# store super longword
|
||||
movel %d0,%a0@ |# store super longword
|
||||
rts
|
||||
|
||||
############################################################################
|
||||
|############################################################################
|
||||
Lferr:
|
||||
moveq #-1,d1
|
||||
moveq #-1,%d1
|
||||
Lfdone:
|
||||
clrl a1@(64) | clear fault handler
|
||||
clrl %a1@(64) | clear fault handler
|
||||
rts
|
||||
|
||||
############################################################################
|
||||
|############################################################################
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_trace():
|
||||
#
|
||||
@ -334,10 +346,11 @@ Lfdone:
|
||||
#
|
||||
# The sample code below simply executes an "rte".
|
||||
#
|
||||
.global _060_real_trace,_trace
|
||||
_060_real_trace:
|
||||
jra _trace
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_trace)
|
||||
jra _C_LABEL(trace)
|
||||
|
||||
/*
|
||||
#
|
||||
# _060_real_access():
|
||||
#
|
||||
@ -349,9 +362,9 @@ _060_real_trace:
|
||||
# We jump directly to the 68060 buserr handler.
|
||||
# If we had a sane ld, we could use use that entry point directly...
|
||||
#
|
||||
.globl _060_real_access,_buserr60
|
||||
_060_real_access:
|
||||
jra _buserr60
|
||||
*/
|
||||
ASENTRY_NOPROFILE(_060_real_access)
|
||||
jra _C_LABEL(buserr60)
|
||||
|
||||
.include "inetbsd.S"
|
||||
.include "fnetbsd.S"
|
||||
#include "inetbsd.S"
|
||||
#include "fnetbsd.S"
|
||||
|
Loading…
Reference in New Issue
Block a user