mirror of
https://gitlab.rtems.org/rtems/rtos/rtems.git
synced 2025-12-05 15:15:44 +00:00
Committed modifications from ITRON Task and Task Dependendent Synchronization
Working Group. Included are tests.
This commit is contained in:
@@ -1,64 +0,0 @@
|
||||
#
|
||||
# $Id$
|
||||
#
|
||||
|
||||
@SET_MAKE@
|
||||
srcdir = @srcdir@
|
||||
top_srcdir = @top_srcdir@
|
||||
top_builddir = .
|
||||
|
||||
RTEMS_ROOT = @RTEMS_ROOT@
|
||||
PROJECT_ROOT = @PROJECT_ROOT@
|
||||
|
||||
VPATH = @srcdir@
|
||||
|
||||
# C source names, if any, go here -- minus the .c
|
||||
C_PIECES =
|
||||
C_FILES = $(C_PIECES:%=%.c)
|
||||
C_O_FILES = $(C_PIECES:%=${ARCH}/%.o)
|
||||
|
||||
H_FILES =
|
||||
|
||||
# Assembly source names, if any, go here -- minus the .S
|
||||
S_PIECES = crt0 register
|
||||
S_FILES = $(S_PIECES:%=%.S)
|
||||
S_O_FILES = $(S_FILES:%.S=${ARCH}/%.o)
|
||||
|
||||
SRCS = $(C_FILES) $(CC_FILES) $(H_FILES) $(S_FILES)
|
||||
OBJS = $(C_O_FILES) $(CC_O_FILES) $(S_O_FILES)
|
||||
|
||||
include $(RTEMS_ROOT)/make/custom/@RTEMS_BSP@.cfg
|
||||
include $(RTEMS_ROOT)/make/leaf.cfg
|
||||
|
||||
INSTALL_CHANGE = @INSTALL_CHANGE@
|
||||
|
||||
PGM = ${ARCH}/crt0.o ${ARCH}/register.o
|
||||
|
||||
#
|
||||
# (OPTIONAL) Add local stuff here using +=
|
||||
#
|
||||
|
||||
DEFINES +=
|
||||
CPPFLAGS +=
|
||||
CFLAGS +=
|
||||
|
||||
LD_PATHS +=
|
||||
LD_LIBS +=
|
||||
LDFLAGS +=
|
||||
|
||||
#
|
||||
# Add your list of files to delete here. The config files
|
||||
# already know how to delete some stuff, so you may want
|
||||
# to just run 'make clean' first to see what gets missed.
|
||||
# 'make clobber' already includes 'make clean'
|
||||
#
|
||||
|
||||
CLEAN_ADDITIONS +=
|
||||
CLOBBER_ADDITIONS +=
|
||||
|
||||
all: ${ARCH} $(SRCS) $(OBJS) $(PGM)
|
||||
$(INSTALL_VARIANT) -m 755 ${PGM} $(PROJECT_RELEASE)/lib
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
@@ -1,517 +0,0 @@
|
||||
; /* @(#)amd.ah 1.1 96/05/23 08:56:58, TEI */
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; Initialization values for registers after RESET
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; /* $Id$ */
|
||||
;
|
||||
;* File information and includes.
|
||||
|
||||
.file "amd.ah"
|
||||
.ident "@(#)amd.ah 1.1 96/05/23 08:56:58, TEI"
|
||||
|
||||
|
||||
|
||||
;
|
||||
;* AMD PROCESSOR SPECIFIC VALUES...
|
||||
;
|
||||
|
||||
;
|
||||
;* Processor revision levels...
|
||||
;
|
||||
|
||||
; PRL values: 31-28 27-24
|
||||
; Am29000 0 x
|
||||
; Am29005 1 x
|
||||
; Am29050 2 x
|
||||
; Am29035 3 x
|
||||
; Am29030 4 x
|
||||
; Am29200 5 x
|
||||
; Am29205 5 1x
|
||||
; Am29240 6 0
|
||||
; Manx 7 0
|
||||
; Cougar 8 0
|
||||
|
||||
|
||||
.equ AM29000_PRL, 0x00
|
||||
|
||||
.equ AM29005_PRL, 0x10
|
||||
|
||||
.equ AM29050_PRL, 0x20
|
||||
|
||||
.equ AM29035_PRL, 0x30
|
||||
|
||||
.equ AM29030_PRL, 0x40
|
||||
|
||||
.equ AM29200_PRL, 0x50
|
||||
|
||||
.equ AM29205_PRL, 0x58
|
||||
|
||||
.equ AM29240_PRL, 0x60
|
||||
|
||||
.equ AM29040_PRL, 0x70
|
||||
|
||||
.equ MANX_PRL, 0x70
|
||||
|
||||
.equ COUGAR_PRL, 0x80
|
||||
|
||||
;
|
||||
;* data structures sizes.
|
||||
;
|
||||
.equ CFGINFO_SIZE, 16*4
|
||||
|
||||
.equ PGMINFO_SIZE, 16*4
|
||||
|
||||
.equ VARARGS_SPACE, 16*4
|
||||
|
||||
.equ WINDOWSIZE, 0x80
|
||||
;
|
||||
;* Am29027 Mode registers
|
||||
;
|
||||
|
||||
.equ Am29027Mode1, 0x0fc00820
|
||||
|
||||
.equ Am29027Mode2, 0x00001375
|
||||
|
||||
|
||||
|
||||
;* Processor Based Equates and Defines
|
||||
|
||||
.equ SIG_SYNC, -1
|
||||
|
||||
.equ ENABLE, (SM)
|
||||
|
||||
.equ DISABLE, (ENABLE | DI | DA)
|
||||
|
||||
.equ DISABLE_FZ, (FZ | ENABLE | DI | DA)
|
||||
|
||||
.equ CLR_TRAP, (FZ | DA)
|
||||
|
||||
.equ InitOPS, (TD | SM | (3<<IMShift) | DI | DA)
|
||||
|
||||
.equ InitCPS, (TD | SM | (0<<IMShift) | DI | DA)
|
||||
|
||||
.equ InitCPS1, (TD | SM | (0<<IMShift) | DI )
|
||||
|
||||
.equ CPS_TMR, (SM | (0<<IMShift) | DI)
|
||||
|
||||
.equ CPS_INT0, (TD | SM | (0<<IMShift))
|
||||
|
||||
.equ CPS_TMRINT0, (SM | (0<<IMShift))
|
||||
|
||||
.equ InitCFG, 0x0
|
||||
|
||||
.equ InitRBP, (B0|B1|B2|B3|B4|B5)
|
||||
|
||||
.equ TMC_VALUE, 0xFFFFFF
|
||||
|
||||
.equ TMR_VALUE, (IE | TMC_VALUE)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;* 29205 specific (internal) peripheral initialization constants.
|
||||
|
||||
; Current Processor Status (CPS) Register.
|
||||
; Old Processor Status Register (OPS).
|
||||
|
||||
.equ DA, 0x00001
|
||||
.equ DI, 0x00002
|
||||
.equ IMShift,0x2
|
||||
.equ SM, 0x00010
|
||||
.equ PI, 0x00020
|
||||
.equ PD, 0x00040
|
||||
.equ WM, 0x00080
|
||||
.equ RE, 0x00100
|
||||
.equ LK, 0x00200
|
||||
.equ FZ, 0x00400
|
||||
.equ TU, 0x00800
|
||||
.equ TP, 0x01000
|
||||
.equ TE, 0x02000
|
||||
.equ IP, 0x04000
|
||||
.equ CA, 0x08000
|
||||
.equ MM, 0x10000
|
||||
.equ TD, 0x20000
|
||||
|
||||
; Configuration Register (CFG)
|
||||
|
||||
.equ CD, 0x01
|
||||
.equ CP, 0x02
|
||||
.equ BO, 0x04
|
||||
.equ RV, 0x08
|
||||
.equ VF, 0x10
|
||||
.equ DW, 0x20
|
||||
.equ CO, 0x40
|
||||
.equ EE, 0x80
|
||||
.equ IDShift, 8
|
||||
.equ CFG_ID, 0x100
|
||||
.equ ILShift, 9
|
||||
.equ CFG_ILMask, 0x600
|
||||
.equ DDShift, 11
|
||||
.equ CFG_DD, 0x800
|
||||
.equ DLShift, 12
|
||||
.equ CFG_DLMask, 0x3000
|
||||
.equ PCEShift, 14
|
||||
.equ CFG_PCE, 0x4000
|
||||
.equ PMBShift, 16
|
||||
.equ D16, 0x8000
|
||||
.equ TBOShift, 23
|
||||
.equ PRLShift, 24
|
||||
|
||||
; Channel Control Register (CHC)
|
||||
|
||||
.equ CV, 0x1
|
||||
.equ NN, 0x2
|
||||
.equ TRShift, 2
|
||||
.equ TF, 0x400
|
||||
.equ PER, 0x800
|
||||
.equ LA, 0x1000
|
||||
.equ ST, 0x2000
|
||||
.equ ML, 0x4000
|
||||
.equ LS, 0x8000
|
||||
.equ CRShift, 16
|
||||
.equ CNTLShift, 24
|
||||
.equ CEShift, 31
|
||||
.equ WBERShift, 31
|
||||
|
||||
; Register Bank Protect (RBP)
|
||||
.equ B0, 0x1
|
||||
.equ B1, 0x2
|
||||
.equ B2, 0x4
|
||||
.equ B3, 0x8
|
||||
.equ B4, 0x10
|
||||
.equ B5, 0x20
|
||||
.equ B6, 0x40
|
||||
.equ B7, 0x80
|
||||
.equ B8, 0x100
|
||||
.equ B9, 0x200
|
||||
.equ B10, 0x400
|
||||
.equ B11, 0x800
|
||||
.equ B12, 0x1000
|
||||
.equ B13, 0x2000
|
||||
.equ B14, 0x4000
|
||||
.equ B15, 0x8000
|
||||
|
||||
; Timer Counter
|
||||
|
||||
.equ TCVMask, 0xffffff
|
||||
|
||||
; Timer Reload Register
|
||||
|
||||
.equ IE, 0x1000000
|
||||
.equ IN, 0x2000000
|
||||
.equ OV, 0x4000000
|
||||
.equ TRVMAsk, 0xffffff
|
||||
|
||||
; MMU Configuration
|
||||
|
||||
.equ PSShift, 8
|
||||
.equ PS0Shift, 8
|
||||
.equ PS1Shift, 12
|
||||
|
||||
; LRU Recommendation (LRU)
|
||||
.equ LRUMask, 0xff
|
||||
|
||||
; Reason Vector (RSN)
|
||||
.equ RSNMask, 0xff
|
||||
|
||||
; Region Mapping Address (RMA0 | RMA1)
|
||||
.equ PBAMask,0xffff
|
||||
.equ VBAShift, 16
|
||||
|
||||
; Region Mapping Control (RMC0 | RMC1)
|
||||
.equ TIDMask, 0xff
|
||||
.equ RMC_UE, 0x100
|
||||
.equ RMC_UW, 0x200
|
||||
.equ RMC_UR, 0x400
|
||||
.equ RMC_SE, 0x800
|
||||
.equ RMC_SW, 0x1000
|
||||
.equ RMC_SR, 0x2000
|
||||
.equ RMC_VE, 0x4000
|
||||
.equ RMC_IO, 0x10000
|
||||
.equ RGSShift, 17
|
||||
.equ RMC_PGMShift, 22
|
||||
|
||||
; Instruction breakpoint Control (IBC0 | IBC1)
|
||||
.equ BPIDMask, 0xff
|
||||
.equ BTE, 0x100
|
||||
.equ BRM, 0x200
|
||||
.equ IBC_BSY, 0x400
|
||||
.equ BEN, 0x800
|
||||
.equ BHO, 0x1000
|
||||
|
||||
; Cache Data Register (CDR)
|
||||
.equ CDR_US, 0x1
|
||||
.equ P, 0x2
|
||||
.equ CDR_V, 0x4
|
||||
.equ IATAGShift, 20
|
||||
|
||||
; Cache Interface Register (CIR)
|
||||
.equ CPTRShift, 2
|
||||
.equ CIR_RW, 0x1000000
|
||||
.equ FSELShift, 28
|
||||
|
||||
; Indirect Pointer A, B, C (IPA, IPB, IPC)
|
||||
.equ IPShift, 2
|
||||
|
||||
; ALU Status (ALU)
|
||||
.equ FCMask, 0x1F
|
||||
.equ BPShift, 5
|
||||
.equ C, 0x80
|
||||
.equ Z, 0x100
|
||||
.equ N, 0x200
|
||||
.equ ALU_V, 0x400
|
||||
.equ DF, 0x800
|
||||
|
||||
; Byte Pointer
|
||||
.equ BPMask, 0x3
|
||||
|
||||
; Load/Store Count Remaining (CR)
|
||||
.equ CRMask, 0xff
|
||||
|
||||
; Floating Point Environment (FPE)
|
||||
.equ NM, 0x1
|
||||
.equ RM, 0x2
|
||||
.equ VM, 0x4
|
||||
.equ UM, 0x8
|
||||
.equ XM, 0x10
|
||||
.equ DM, 0x20
|
||||
.equ FRMShift, 6
|
||||
.equ FF, 0x100
|
||||
.equ ACFShift, 9
|
||||
|
||||
; Integer Environment (INTE)
|
||||
.equ MO, 0x1
|
||||
.equ DO, 0x2
|
||||
|
||||
; Floating Point Status (FPS)
|
||||
.equ NS, 0x1
|
||||
.equ RS, 0x2
|
||||
.equ VS, 0x4
|
||||
.equ FPS_US, 0x8
|
||||
.equ XS, 0x10
|
||||
.equ DS, 0x20
|
||||
.equ NT, 0x100
|
||||
.equ RT, 0x200
|
||||
.equ VT, 0x400
|
||||
.equ UT, 0x800
|
||||
.equ XT, 0x1000
|
||||
.equ DT, 0x2000
|
||||
|
||||
; Exception Opcode (EXOP)
|
||||
.equ IOPMask, 0xff
|
||||
|
||||
; TLB Entry Word 0
|
||||
; .equ TIDMask, 0xff already defined above
|
||||
.equ TLB_UE, 0x100
|
||||
.equ TLB_UW, 0x200
|
||||
.equ TLB_UR, 0x400
|
||||
.equ TLB_SE, 0x800
|
||||
.equ TLB_SW, 0x1000
|
||||
.equ TLB_SR, 0x2000
|
||||
.equ TLB_VE, 0x4000
|
||||
.equ VTAGShift, 15
|
||||
|
||||
; TLB Entry Word 1
|
||||
.equ TLB_IO, 0x1
|
||||
.equ U, 0x2
|
||||
.equ TLB_PGMShift, 6
|
||||
.equ RPNShift, 10
|
||||
|
||||
; Am29200 ROM Control bits.
|
||||
.equ RMCT_DW0Shift, 29
|
||||
.equ RMCT_DW1Shift, 21
|
||||
.equ RMCT_DW2Shift, 13
|
||||
.equ RMCT_DW3Shift, 5
|
||||
|
||||
; Am29200 DRAM Control bits.
|
||||
.equ DW3, (1<<18)
|
||||
.equ DW2, (1<<22)
|
||||
.equ DW1, (1<<26)
|
||||
.equ DW0, (1<<30)
|
||||
|
||||
; Internal peripheral address assignments.
|
||||
.equ RMCT, 0x80000000
|
||||
.equ RMCF, 0x80000004
|
||||
.equ DRCT, 0x80000008
|
||||
.equ DRCF, 0x8000000C
|
||||
.equ DRM0, 0x80000010
|
||||
.equ DRM1, 0x80000014
|
||||
.equ DRM2, 0x80000018
|
||||
.equ DRM3, 0x8000001C
|
||||
.equ PIACT0, 0x80000020
|
||||
.equ PIACT1, 0x80000020
|
||||
.equ ICT, 0x80000028
|
||||
.equ DMCT0, 0x80000030
|
||||
.equ DMAD0, 0x80000034
|
||||
.ifdef revA
|
||||
.equ TAD0, 0x80000036
|
||||
.equ TCN0, 0x8000003A
|
||||
.else
|
||||
.equ TAD0, 0x80000070 ; default
|
||||
.equ TCN0, 0x8000003C ; default
|
||||
.endif
|
||||
.equ DMCN0, 0x80000038
|
||||
.equ DMCT1, 0x80000040
|
||||
.equ DMAD1, 0x80000044
|
||||
.equ DMCN1, 0x80000048
|
||||
.equ SPCT, 0x80000080
|
||||
.equ SPST, 0x80000084
|
||||
.equ SPTH, 0x80000088
|
||||
.equ SPRB, 0x8000008C
|
||||
.equ BAUD, 0x80000090
|
||||
.equ PPCT, 0x800000C0
|
||||
.equ PPST, 0x800000C1
|
||||
.equ PPDT, 0x800000C4
|
||||
.equ POCT, 0x800000D0
|
||||
.equ PIN, 0x800000D4
|
||||
.equ POUT, 0x800000D8
|
||||
.equ POEN, 0x800000DC
|
||||
.equ VCT, 0x800000E0
|
||||
.equ TOP, 0x800000E4
|
||||
.equ SIDE, 0x800000E8
|
||||
.equ VDT, 0x800000EC
|
||||
|
||||
; Interrupt Controller Register bits.
|
||||
.equ TXDI, (1<<5)
|
||||
.equ RXDI, (1<<6)
|
||||
.equ RXSI, (1<<7)
|
||||
.equ PPI, (1<<11)
|
||||
.equ DMA1I, (1<<13)
|
||||
.equ DMA0I, (1<<14)
|
||||
.equ IOPIMask, (0xFF<<16)
|
||||
.equ VDI, (1<<27)
|
||||
.equ ICT200_I, (TXDI|RXDI|RXSI|PPI|DMA1I|DMA0I|IOPIMask|VDI)
|
||||
.equ ICT205_I, (TXDI|RXDI|RXSI|PPI|DMA1I|DMA0I|IOPIMask|VDI)
|
||||
|
||||
; Serial port Initialization bits
|
||||
.equ NO_PARITY, 0
|
||||
|
||||
|
||||
; SPST bits
|
||||
.equ THREShift, 22
|
||||
|
||||
;* REGISTER Addresses
|
||||
|
||||
.equ ROMCntlRegAddr, 0x80000000
|
||||
|
||||
.equ ROMCfgRegAddr, 0x80000004
|
||||
|
||||
.equ DRAMCntlRegAddr, 0x80000008
|
||||
|
||||
.equ DRAMCfgRegAddr, 0x8000000C
|
||||
|
||||
.equ DRAMMap0RegAddr, 0x80000010
|
||||
|
||||
.equ DRAMMap1RegAddr, 0x80000014
|
||||
|
||||
.equ DRAMMap2RegAddr, 0x80000018
|
||||
|
||||
.equ DRAMMap3RegAddr, 0x8000001C
|
||||
|
||||
.equ PIACntl0RegAddr, 0x80000020
|
||||
|
||||
.equ PIACntl1RegAddr, 0x80000024
|
||||
|
||||
.equ INTRCntlRegAddr, 0x80000028
|
||||
|
||||
.equ DMACntl0RegAddr, 0x80000030
|
||||
|
||||
.equ DMACntl1RegAddr, 0x80000040
|
||||
|
||||
.equ SERPortCntlRegAddr, 0x80000080
|
||||
|
||||
.equ SERPortStatRegAddr, 0x80000084
|
||||
|
||||
.equ SERPortTHLDRegAddr, 0x80000088
|
||||
|
||||
.equ SERPortRbufRegAddr, 0x8000008C
|
||||
|
||||
.equ SERPortBaudRegAddr, 0x80000090
|
||||
|
||||
.equ PARPortCntlRegAddr, 0x800000C0
|
||||
|
||||
.equ PIOCntlRegAddr, 0x800000D0
|
||||
|
||||
.equ PIOInpRegAddr, 0x800000D4
|
||||
|
||||
.equ PIOOutRegAddr, 0x800000D8
|
||||
|
||||
.equ PIOOutEnaRegAddr, 0x800000DC
|
||||
|
||||
.equ VCTCntlRegAddr, 0x800000E0
|
||||
|
||||
;
|
||||
;* Control constants
|
||||
;
|
||||
|
||||
;* AM29030 Timer related constants.
|
||||
|
||||
.equ TMR_IE, 0x01000000
|
||||
|
||||
.equ TMR_IN, 0x02000000
|
||||
|
||||
.equ TMR_OV, 0x04000000
|
||||
|
||||
.equ TMC_INITCNT, 1613
|
||||
|
||||
;
|
||||
;* System initialization values.
|
||||
;
|
||||
|
||||
.equ __os_version, 0x0001 ;
|
||||
|
||||
.equ STACKSize, 0x8000 ;
|
||||
|
||||
.equ PGMExecMode, 0x0000 ;
|
||||
|
||||
.equ TSTCK_OFST, 28 * 4
|
||||
|
||||
.equ CSTCK_OFST, 29 * 4
|
||||
|
||||
.equ TMSTCK_OFST, 30 * 4
|
||||
|
||||
.equ CMSTCK_OFST, 31 * 4
|
||||
|
||||
.equ CTXSW_OK, 0xA55A ; ctx switch ok
|
||||
|
||||
.set NV_STARTOFST, 0x20 ; 32 bytes
|
||||
|
||||
.set NV_BAUDOFST, 0x00 ; 00 bytes
|
||||
|
||||
.set reg_cir, 29
|
||||
|
||||
.set reg_cdr, 30
|
||||
|
||||
.equ MSG_BUFSIZE, 0x1000 ; serial buffer size
|
||||
|
||||
.equ ILLOPTRAP, 0
|
||||
|
||||
.equ UATRAP, 1
|
||||
|
||||
.equ PVTRAP, 5
|
||||
|
||||
.equ UITLBMISSTRAP, 8
|
||||
|
||||
.equ UDTLBMISSTRAP, 9
|
||||
|
||||
.equ TIMERTRAP, 14
|
||||
|
||||
.equ TRACETRAP, 15
|
||||
|
||||
.equ XLINXTRAP, 16
|
||||
|
||||
.equ SERIALTRAP, 17
|
||||
|
||||
.equ SLOWTMRTRAP, 18
|
||||
|
||||
.equ PORTTRAP, 19
|
||||
|
||||
.equ SVSCTRAP, 80
|
||||
|
||||
.equ SVSCTRAP1, 81
|
||||
|
||||
.equ V_CACHETRAP, 66 ;
|
||||
|
||||
.equ V_SETSERVICE, 67 ;
|
||||
@@ -1,35 +0,0 @@
|
||||
dnl Process this file with autoconf to produce a configure script.
|
||||
dnl
|
||||
dnl $Id$
|
||||
|
||||
AC_PREREQ(2.13)
|
||||
AC_INIT(crt0.S)
|
||||
RTEMS_TOP(../../../../..)
|
||||
AC_CONFIG_AUX_DIR(../../../../..)
|
||||
|
||||
RTEMS_CANONICAL_TARGET_CPU
|
||||
AC_PROG_MAKE_SET
|
||||
AC_PROG_INSTALL
|
||||
# AM_INIT_AUTOMAKE(rtems-c-src-lib-start-a29k,$RTEMS_VERSION,no)
|
||||
AM_MAINTAINER_MODE
|
||||
|
||||
RTEMS_ENABLE_LIBCDIR
|
||||
RTEMS_ENABLE_BARE
|
||||
|
||||
RTEMS_ENV_RTEMSBSP
|
||||
|
||||
RTEMS_CHECK_CPU
|
||||
RTEMS_CANONICAL_HOST
|
||||
|
||||
RTEMS_PROJECT_ROOT
|
||||
|
||||
dnl check target cc
|
||||
RTEMS_PROG_CC_FOR_TARGET
|
||||
RTEMS_CANONICALIZE_TOOLS
|
||||
|
||||
RTEMS_CHECK_CUSTOM_BSP(RTEMS_BSP)
|
||||
|
||||
# try to explicitly list a Makefile here
|
||||
AC_OUTPUT(
|
||||
Makefile
|
||||
)
|
||||
@@ -1,288 +0,0 @@
|
||||
; @(#)crt0.s 1.3 96/05/31 14:40:27, AMD
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; Copyright 1988, 1989, 1990 Advanced Micro Devices, Inc.
|
||||
;
|
||||
; This software is the property of Advanced Micro Devices, Inc (AMD) which
|
||||
; specifically grants the user the right to modify, use and distribute this
|
||||
; software provided this notice is not removed or altered. All other rights
|
||||
; are reserved by AMD.
|
||||
;
|
||||
; AMD MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS
|
||||
; SOFTWARE. IN NO EVENT SHALL AMD BE LIABLE FOR INCIDENTAL OR CONSEQUENTIAL
|
||||
; DAMAGES IN CONNECTION WITH OR ARISING FROM THE FURNISHING, PERFORMANCE, OR
|
||||
; USE OF THIS SOFTWARE.
|
||||
;
|
||||
; So that all may benefit from your experience, please report any problems
|
||||
; or suggestions about this software to the 29K Technical Support Center at
|
||||
; 800-29-29-AMD (800-292-9263) in the USA, or 0800-89-1131 in the UK, or
|
||||
; 0031-11-1129 in Japan, toll free. The direct dial number is 512-462-4118.
|
||||
;
|
||||
; Advanced Micro Devices, Inc.
|
||||
; 29K Support Products
|
||||
; Mail Stop 573
|
||||
; 5900 E. Ben White Blvd.
|
||||
; Austin, TX 78741
|
||||
; 800-292-9263
|
||||
;
|
||||
; /* $Id$ */
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
.file "crt0.s"
|
||||
|
||||
; crt0.s version 3.3-0
|
||||
;
|
||||
; This module gets control from the OS.
|
||||
; It saves away the Am29027 Mode register settings and
|
||||
; then sets up the pointers to the resident spill and fill
|
||||
; trap handlers. It then establishes argv and argc for passing
|
||||
; to main. It then calls _main. If main returns, it calls _exit.
|
||||
;
|
||||
; void = start( );
|
||||
; NOTE - not C callable (no lead underscore)
|
||||
;
|
||||
.include "sysmac.h"
|
||||
;
|
||||
;
|
||||
.extern V_SPILL, V_FILL
|
||||
; .comm __29027Mode, 8 ; A shadow of the mode register
|
||||
.comm __LibInit, 4
|
||||
|
||||
.text
|
||||
.extern _main, _exit, _atexit
|
||||
|
||||
.word 0 ; Terminating tag word
|
||||
.global start
|
||||
start:
|
||||
sub gr1, gr1, 6 * 4
|
||||
asgeu V_SPILL, gr1, rab ; better not ever happen
|
||||
add lr1, gr1, 6 * 4
|
||||
|
||||
;
|
||||
; Save the initial value of the Am29027's Mode register
|
||||
;
|
||||
; If your system does not enter crt0 with value for Am29027's Mode
|
||||
; register in gr96 and gr97, and also the coprocessor is active
|
||||
; uncomment the next 4 instructions.
|
||||
;
|
||||
; const gr96, 0xfc00820
|
||||
; consth gr96, 0xfc00820
|
||||
; const gr97, 0x1375
|
||||
; store 1, 3, gr96, gr97
|
||||
;
|
||||
; const gr98, __29027Mode
|
||||
; consth gr98, __29027Mode
|
||||
; store 0, 0, gr96, gr98
|
||||
; add gr98, gr98, 4
|
||||
; store 0, 0, gr97, gr98
|
||||
;
|
||||
; Now call the system to setup the spill and fill trap handlers
|
||||
;
|
||||
const lr3, spill
|
||||
consth lr3, spill
|
||||
const lr2, V_SPILL
|
||||
syscall setvec
|
||||
const lr3, fill
|
||||
consth lr3, fill
|
||||
const lr2, V_FILL
|
||||
syscall setvec
|
||||
|
||||
;
|
||||
; atexit(_fini)
|
||||
;
|
||||
; const lr0, _atexit
|
||||
; consth lr0, _atexit
|
||||
; const lr2,__fini
|
||||
; calli lr0,lr0
|
||||
; consth lr2,__fini
|
||||
;
|
||||
; Now call _init
|
||||
;
|
||||
; const lr0, __init
|
||||
; consth lr0, __init
|
||||
; calli lr0,lr0
|
||||
; nop
|
||||
|
||||
;
|
||||
; Get the argv base address and calculate argc.
|
||||
;
|
||||
syscall getargs
|
||||
add lr3, v0, 0 ; argv
|
||||
add lr4, v0, 0
|
||||
constn lr2, -1
|
||||
argcloop: ; scan for NULL terminator
|
||||
load 0, 0, gr97, lr4
|
||||
add lr4, lr4, 4
|
||||
cpeq gr97, gr97, 0
|
||||
jmpf gr97, argcloop
|
||||
add lr2, lr2, 1
|
||||
;
|
||||
; Now call LibInit, if there is one. To aid runtime libraries
|
||||
; that need to do some startup initialization, we have created
|
||||
; a bss variable called LibInit. If the library doesn't need
|
||||
; any run-time initialization, the variable is still 0. If the
|
||||
; library does need run-time initialization, the library will
|
||||
; contain a definition like
|
||||
; void (*_LibInit)(void) = LibInitFunction;
|
||||
; The linker will match up our bss LibInit with this data LibInit
|
||||
; and the variable will not be 0. This results in the LibInit routine
|
||||
; being called via the calli instruction below.
|
||||
;
|
||||
const lr0, __LibInit
|
||||
consth lr0, __LibInit
|
||||
load 0, 0, lr0, lr0
|
||||
cpeq gr96, lr0, 0
|
||||
jmpt gr96, NoLibInit
|
||||
nop
|
||||
calli lr0, lr0
|
||||
nop
|
||||
NoLibInit:
|
||||
|
||||
;
|
||||
; Call RAMInit to initialize the data memory.
|
||||
;
|
||||
; The following code segment was used to create the two flavors of the
|
||||
; run-time initialization routines (crt0_1.o, and crt0_2.o) as described
|
||||
; in the User's Manual. If osboot is used to create a stand-alone
|
||||
; application, or the call to RAMInit is made in the start-up routine,
|
||||
; then the following is not needed.
|
||||
;
|
||||
; .ifdef ROM_LOAD
|
||||
; .extern RAMInit
|
||||
;
|
||||
; const lr0, RAMInit
|
||||
; consth lr0, RAMInit
|
||||
; calli gr96, lr0
|
||||
; nop
|
||||
; .else
|
||||
; nop
|
||||
; nop
|
||||
; nop
|
||||
; nop
|
||||
; .endif
|
||||
|
||||
;
|
||||
; Uncomment the following .comm, if you ARE NOT using osboot as released
|
||||
; with the High C 29K product, AND plan to use the romcoff utility to
|
||||
; move code and/or data sections to ROM.
|
||||
;
|
||||
; .comm RAMInit, 4
|
||||
;
|
||||
; Furthermore, if the above is uncommented, then use the following logic
|
||||
; to call the RAMInit function, if needed.
|
||||
;
|
||||
; const lr0, RAMInit
|
||||
; consth lr0, RAMInit
|
||||
; load 0, 0, gr96, lr0
|
||||
; cpeq gr96, gr96, 0 ; nothing there?
|
||||
; jmpt gr96, endRAMInit ; yes, nothing to init
|
||||
; nop
|
||||
; calli gr96, lr0 ; no, then instruction found
|
||||
; nop ; execute function.
|
||||
;
|
||||
|
||||
|
||||
;
|
||||
; call main, passing it 2 arguments. main( argc, argv )
|
||||
;
|
||||
const lr0, _main
|
||||
consth lr0, _main
|
||||
calli lr0, lr0
|
||||
nop
|
||||
;
|
||||
; call exit
|
||||
;
|
||||
const lr0, _exit
|
||||
consth lr0, _exit
|
||||
calli lr0, lr0
|
||||
add lr2, gr96, 0
|
||||
;
|
||||
; Should never get here, but just in case
|
||||
;
|
||||
loop:
|
||||
syscall exit
|
||||
jmp loop
|
||||
nop
|
||||
.sbttl "Spill and Fill trap handlers"
|
||||
.eject
|
||||
;
|
||||
; SPILL, FILL trap handlers
|
||||
;
|
||||
; Note that these Spill and Fill trap handlers allow the OS to
|
||||
; assume that the only registers of use are between gr1 and rfb.
|
||||
; Therefore, if the OS desires to, it may simply preserve from
|
||||
; lr0 for (rfb-gr1)/4 registers when doing a context save.
|
||||
;
|
||||
;
|
||||
; Here is the spill handler
|
||||
;
|
||||
; spill registers from [*gr1..*rab)
|
||||
; and move rab downto where gr1 points
|
||||
;
|
||||
; rab must change before rfb for signals to work
|
||||
;
|
||||
; On entry: rfb - rab = windowsize, gr1 < rab
|
||||
; Near the end: rfb - rab > windowsize, gr1 == rab
|
||||
; On exit: rfb - rab = windowsize, gr1 == rab
|
||||
;
|
||||
.global spill
|
||||
spill:
|
||||
sub tav, rab, gr1 ; tav = number of bytes to spill
|
||||
srl tav, tav, 2 ; change byte count to word count
|
||||
sub tav, tav, 1 ; make count zero based
|
||||
mtsr CR, tav ; set Count Remaining register
|
||||
sub tav, rab, gr1
|
||||
sub tav, rfb, tav ; pull down free bound and save it in rab
|
||||
add rab, gr1, 0 ; first pull down allocate bound
|
||||
storem 0, 0, lr0, tav ; store lr0..lr(tav) into rfb
|
||||
jmpi tpc ; return...
|
||||
add rfb, tav, 0
|
||||
;
|
||||
; Here is the fill handler
|
||||
;
|
||||
; fill registers from [*rfb..*lr1)
|
||||
; and move rfb upto where lr1 points.
|
||||
;
|
||||
; rab must change before rfb for signals to work
|
||||
;
|
||||
; On entry: rfb - rab = windowsize, lr1 > rfb
|
||||
; Near the end: rfb - rab < windowsize, lr1 == rab + windowsize
|
||||
; On exit: rfb - rab = windowsize, lr1 == rfb
|
||||
;
|
||||
.global fill
|
||||
fill:
|
||||
const tav, 0x80 << 2
|
||||
or tav, tav, rfb ; tav = ((rfb>>2) | 0x80)<<2 == [rfb]<<2
|
||||
mtsr IPA, tav ; ipa = [rfb]<<2 == 1st reg to fill
|
||||
; gr0 is now the first reg to fill
|
||||
sub tav, lr1, rfb ; tav = number of bytes to fill
|
||||
add rab, rab, tav ; push up allocate bound
|
||||
srl tav, tav, 2 ; change byte count to word count
|
||||
sub tav, tav, 1 ; make count zero based
|
||||
mtsr CR, tav ; set Count Remaining register
|
||||
loadm 0, 0, gr0, rfb ; load registers
|
||||
jmpi tpc ; return...
|
||||
add rfb, lr1, 0 ; ... first pushing up free bound
|
||||
|
||||
;
|
||||
; The __init function
|
||||
;
|
||||
; .sect .init,text
|
||||
; .use .init
|
||||
; .global __init
|
||||
;__init:
|
||||
; sub gr1,gr1,16
|
||||
; asgeu V_SPILL,gr1,gr126
|
||||
; add lr1,gr1,24
|
||||
;
|
||||
;
|
||||
; The __fini function
|
||||
;
|
||||
; .sect .fini,text
|
||||
; .use .fini
|
||||
; .global __fini
|
||||
;__fini:
|
||||
; sub gr1,gr1,16
|
||||
; asgeu V_SPILL,gr1,gr126
|
||||
; add lr1,gr1,24
|
||||
;
|
||||
.end
|
||||
@@ -1,442 +0,0 @@
|
||||
; /* @(#)pswmacro.ah 1.1 96/05/23 08:56:58, TEI */
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; macros: Do_install and init_TLB
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; /* $Id$ */
|
||||
|
||||
;* File information and includes.
|
||||
|
||||
.file "macro.ah"
|
||||
.ident "@(#)pswmacro.ah 1.1 96/05/23 08:56:58, TEI"
|
||||
|
||||
|
||||
.macro CONST32, RegName, RegValue
|
||||
const RegName, RegValue
|
||||
consth RegName, RegValue
|
||||
.endm
|
||||
|
||||
.macro CONSTX, RegName, RegValue
|
||||
.if (RegValue) <= 0x0000ffff
|
||||
const RegName, RegValue
|
||||
.else
|
||||
const RegName, RegValue
|
||||
consth RegName, RegValue
|
||||
.endif
|
||||
.endm
|
||||
|
||||
.macro PRODEV, RegName
|
||||
srl RegName, RegName, 24
|
||||
.endm
|
||||
|
||||
;
|
||||
;* MACRO TO INSTALL VECTOR TABLE ENTRIES
|
||||
;
|
||||
|
||||
;* Assumes vector table address in v0
|
||||
|
||||
.macro _setvec, trapnum, trapaddr
|
||||
mfsr v0, vab ;
|
||||
const v2, trapnum ;
|
||||
sll v1, v2, 2 ;
|
||||
add v1, v1, v0 ; v0 has location of vector tab
|
||||
|
||||
const v2, trapaddr ;
|
||||
consth v2, trapaddr ;
|
||||
store 0, 0, v2, v1 ;
|
||||
nop ;
|
||||
.endm
|
||||
|
||||
.macro syscall, name
|
||||
const tav, HIF_@name ;
|
||||
asneq V_SYSCALL, gr1, gr1 ;
|
||||
nop ;
|
||||
nop ;
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
;* MACRO TO INSTALL VECTOR TABLE ENTRIES
|
||||
|
||||
.macro Do_Install, V_Number, V_Address
|
||||
const lr4, V_Address
|
||||
consth lr4, V_Address
|
||||
const lr3, V_Number * 4
|
||||
consth lr3, V_Number * 4
|
||||
call lr0, V_Install
|
||||
nop
|
||||
.endm
|
||||
|
||||
.macro Do_InstallX, V_Number, V_Address
|
||||
const lr4, V_Address
|
||||
consth lr4, V_Address
|
||||
const lr3, V_Number * 4
|
||||
consth lr3, V_Number * 4
|
||||
call lr0, V_InstallX
|
||||
nop
|
||||
.endm
|
||||
|
||||
|
||||
|
||||
; push a register onto the stack
|
||||
.macro pushreg, reg, sp
|
||||
sub sp, sp, 4 ; adjust stack pointer
|
||||
store 0, 0, reg, sp ; push register
|
||||
.endm
|
||||
|
||||
.macro push, sp, reg
|
||||
sub sp, sp, 4
|
||||
store 0, 0, reg, sp
|
||||
.endm
|
||||
|
||||
; pop the register from stack
|
||||
.macro popreg, reg, sp
|
||||
load 0, 0, reg, sp ; pop register
|
||||
add sp, sp, 4 ; adjust stack pointer
|
||||
.endm
|
||||
.macro pop, reg, sp
|
||||
load 0, 0, reg, sp
|
||||
add sp, sp, 4
|
||||
.endm
|
||||
|
||||
; push a special register onto stack
|
||||
.macro pushspcl, spcl, tmpreg, sp
|
||||
sub sp, sp, 4 ; adjust stack pointer
|
||||
mfsr tmpreg, spcl ; get spcl reg
|
||||
store 0, 0, tmpreg, sp ; push onto stack
|
||||
.endm
|
||||
|
||||
.macro pushsr, sp, reg, sreg
|
||||
mfsr reg, sreg
|
||||
sub sp, sp, 4
|
||||
store 0, 0, reg, sp
|
||||
.endm
|
||||
|
||||
; pop a special register from stack
|
||||
.macro popspcl, spcl, tmpreg, sp
|
||||
load 0, 0, tmpreg, sp ; pop from stack
|
||||
add sp, sp, 4 ; adjust stack pointer
|
||||
mtsr spcl, tmpreg ; set spcl reg
|
||||
.endm
|
||||
|
||||
.macro popsr, sreg, reg, sp
|
||||
load 0, 0, reg, sp
|
||||
add sp, sp, 4
|
||||
mtsr sreg, reg
|
||||
.endm
|
||||
|
||||
;
|
||||
; save freeze mode registers on memory stack.
|
||||
;
|
||||
|
||||
.macro SaveFZState, tmp1, tmp2
|
||||
|
||||
; save freeze mode registers.
|
||||
|
||||
pushspcl pc0, tmp1, msp
|
||||
pushspcl pc1, tmp1, msp
|
||||
pushspcl alu, tmp1, msp
|
||||
|
||||
pushspcl cha, tmp1, msp
|
||||
pushspcl chd, tmp1, msp
|
||||
pushspcl chc, tmp1, msp
|
||||
|
||||
pushspcl ops, tmp1, msp
|
||||
|
||||
; turn freeze off
|
||||
|
||||
const tmp2, FZ
|
||||
mfsr tmp1, cps
|
||||
andn tmp1, tmp1, tmp2
|
||||
mtsr cps, tmp1
|
||||
.endm
|
||||
|
||||
; restore freeze mode registers from memory stack.
|
||||
|
||||
.macro RestoreFZState, tmp1, tmp2
|
||||
|
||||
; turn freeze on
|
||||
|
||||
const tmp2, (FZ|DI|DA)
|
||||
mfsr tmp1, cps
|
||||
or tmp1, tmp1, tmp2
|
||||
mtsr cps, tmp1
|
||||
|
||||
; restore freeze mode registers.
|
||||
|
||||
popspcl ops, tmp1, msp
|
||||
popspcl chc, tmp1, msp
|
||||
popspcl chd, tmp1, msp
|
||||
popspcl cha, tmp1, msp
|
||||
popspcl alu, tmp1, msp
|
||||
popspcl pc1, tmp1, msp
|
||||
popspcl pc0, tmp1, msp
|
||||
.endm
|
||||
|
||||
;
|
||||
;*
|
||||
;
|
||||
.equ WS, 512 ; window size
|
||||
.equ RALLOC, 4 * 4 ; stack alloc for C
|
||||
.equ SIGCTX_UM_SIZE, 40 * 4 ;
|
||||
.equ SIGCTX_RFB, (38) * 4 ; user mode saved
|
||||
.equ SIGCTX_SM_SIZE, 12 * 4 ;
|
||||
.equ SIGCTX_SIG, (11)*4 + SIGCTX_UM_SIZE ;
|
||||
.equ SIGCTX_GR1, (10)*4 + SIGCTX_UM_SIZE ;
|
||||
.equ SIGCTX_RAB, (9)*4 + SIGCTX_UM_SIZE ;
|
||||
.equ SIGCTX_PC0, (8)*4 + SIGCTX_UM_SIZE ;
|
||||
.equ SIGCTX_PC1, (7)*4 + SIGCTX_UM_SIZE ;
|
||||
.equ SIGCTX_PC2, (6)*4 + SIGCTX_UM_SIZE ;
|
||||
.equ SIGCTX_CHC, (3)*4 + SIGCTX_UM_SIZE ;
|
||||
.equ SIGCTX_OPS, (1)*4 + SIGCTX_UM_SIZE ;
|
||||
.equ SIGCTX_TAV, (0)*4 + SIGCTX_UM_SIZE ;
|
||||
|
||||
.macro sup_sv
|
||||
add it2, trapreg, 0 ; transfer signal #
|
||||
sub msp, msp, 4 ;
|
||||
store 0, 0, it2, msp ; save signal number
|
||||
sub msp, msp, 4 ; push gr1
|
||||
|
||||
store 0, 0, gr1, msp ;
|
||||
sub msp, msp, 4 ; push rab
|
||||
store 0, 0, rab, msp ;
|
||||
const it0, WS ; Window size
|
||||
|
||||
sub rab, rfb, it0 ; set rab = rfb-512
|
||||
pushsr msp, it0, PC0 ; save program counter0
|
||||
pushsr msp, it0, PC1 ; save program counter1
|
||||
pushsr msp, it0, PC2 ; save program counter2
|
||||
|
||||
pushsr msp, it0, CHA ; save channel address
|
||||
pushsr msp, it0, CHD ; save channel data
|
||||
pushsr msp, it0, CHC ; save channel control
|
||||
pushsr msp, it0, ALU ; save alu
|
||||
|
||||
pushsr msp, it0, OPS ; save ops
|
||||
sub msp, msp, 4 ;
|
||||
store 0, 0, tav, msp ; push tav
|
||||
mtsrim chc, 0 ; no loadm/storem
|
||||
|
||||
mfsr it0, ops ; get ops value
|
||||
const it1, (TD | DI) ; disable interrupts
|
||||
consth it1, (TD | DI) ; disable interrupts
|
||||
or it0, it0, it1 ; set bits
|
||||
|
||||
mtsr ops, it0 ; set new ops
|
||||
const it0, sigcode ; signal handler
|
||||
consth it0, sigcode ; signal handler
|
||||
mtsr pc1, it0 ; store pc1
|
||||
|
||||
add it1, it0, 4 ; next addr
|
||||
mtsr pc0, it1 ; store pc1 location
|
||||
iret ; return
|
||||
nop ; ALIGN
|
||||
.endm
|
||||
|
||||
.macro sig_return
|
||||
mfsr it0, cps ; get processor status
|
||||
const it1, FZ|DA ; Freeze + traps disable
|
||||
or it0, it0, it1 ; to set FZ+DA
|
||||
mtsr cps, it0 ; in freeze mode
|
||||
|
||||
load 0, 0, tav, msp ; restore tav
|
||||
add msp, msp, 4 ;
|
||||
|
||||
popsr OPS,it0, msp ;
|
||||
popsr ALU,it0, msp ;
|
||||
popsr CHC,it0, msp ;
|
||||
popsr CHD,it0, msp ;
|
||||
|
||||
popsr CHA,it0, msp ;
|
||||
popsr PC2,it0, msp ;
|
||||
popsr PC1,it0, msp ;
|
||||
popsr PC0,it0, msp ;
|
||||
|
||||
load 0, 0, rab, msp ;
|
||||
add msp, msp, 4 ;
|
||||
load 0, 0, it0, msp ;
|
||||
add gr1, it0, 0 ; pop rsp
|
||||
|
||||
add msp, msp, 8 ; discount signal #
|
||||
iret
|
||||
.endm
|
||||
|
||||
.macro repair_R_stack
|
||||
add v0, msp, SIGCTX_GR1 ; interrupted gr1
|
||||
load 0, 0, v2, v0 ;
|
||||
add v0, msp, SIGCTX_RFB ;
|
||||
load 0, 0, v3, v0 ; interupted rfb
|
||||
|
||||
const v1, WS ;
|
||||
sub v1, v3, v1 ; rfb-512
|
||||
cpltu v0, v2, v1 ; test gr1 < rfb-512
|
||||
jmpf v0, $1 ;
|
||||
|
||||
add gr1, rab, 0 ;
|
||||
add v2, v1, 0 ; set LB = rfb-512
|
||||
$1:
|
||||
;* if gr1 < rfb-512 yes LB = rfb-512 signalled during spill
|
||||
;* if no, LB=gr1 interrupted cache < 126 registers
|
||||
cpleu v0, v2, rfb ; test LB<=rfb
|
||||
jmpf v0, $2 ;
|
||||
nop ;
|
||||
add v2, rfb, 0 ;
|
||||
$2:
|
||||
cpeq v0, v3, rfb ; fill rfb->'rfb
|
||||
jmpt v0, $3 ; if rfb==rfb'
|
||||
const tav, (0x80<<2) ; prepare for fill
|
||||
or tav, tav, v2 ;
|
||||
|
||||
mtsr IPA, tav ; IPA=LA<<2
|
||||
sub tav, v3, gr98 ; cache fill LA->rfb
|
||||
srl tav, tav, 2 ; convert to words
|
||||
sub tav, tav, 1 ;
|
||||
|
||||
mtsr cr, tav ;
|
||||
loadm 0, 0, gr0, v2 ; fill from LA->rfb
|
||||
$3:
|
||||
add rfb, v3, 0 ; move rfb upto 'rfb
|
||||
sub rab, v1, 0 ; assign rab to rfb-512
|
||||
|
||||
add v0, msp, SIGCTX_GR1 ;
|
||||
load 0, 0, v2, v0 ; v0 = interrupted gr1
|
||||
add gr1, v2, 0 ; move gr1 upto 'gr1
|
||||
nop ;
|
||||
.endm
|
||||
|
||||
.macro repair_regs
|
||||
mtsrim cr, 29 - 1 ; to restore locals
|
||||
loadm 0, 0, v0, msp ;
|
||||
add msp, msp, 29*4 ;
|
||||
popsr Q, tav, msp ;
|
||||
|
||||
popsr IPC, tav, msp ;
|
||||
popsr IPB, tav, msp ;
|
||||
popsr IPA, tav, msp ;
|
||||
pop FPStat3, msp ; floating point regs
|
||||
|
||||
pop FPStat2, msp ; floating point regs
|
||||
pop FPStat1, msp ; floating point regs
|
||||
pop FPStat0, msp ; floating point regs
|
||||
|
||||
add msp, msp, 3*4 ; R-stack repaired
|
||||
.endm
|
||||
|
||||
;
|
||||
;*HIF related...
|
||||
;
|
||||
|
||||
|
||||
|
||||
|
||||
; send the message in bufaddr to Montip.
|
||||
.macro SendMessageToMontip, bufaddr
|
||||
const lr2, bufaddr
|
||||
$1:
|
||||
call lr0, _msg_send
|
||||
consth lr2, bufaddr
|
||||
cpeq gr96, gr96, 0
|
||||
jmpf gr96, $1
|
||||
const lr2, bufaddr
|
||||
.endm
|
||||
|
||||
; build a HIF_CALL message in bufaddr to send to montip.
|
||||
.macro BuildHIFCALLMsg, bufaddr, tmp1, tmp2
|
||||
const tmp1, bufaddr
|
||||
consth tmp1, bufaddr
|
||||
const tmp2, HIF_CALL_MSGCODE
|
||||
store 0, 0, tmp2, tmp1 ; msg code
|
||||
add tmp1, tmp1, 4
|
||||
const tmp2, HIF_CALL_MSGLEN
|
||||
store 0, 0, tmp2, tmp1 ; msg len
|
||||
add tmp1, tmp1, 4
|
||||
store 0, 0, gr121, tmp1 ; service number
|
||||
add tmp1, tmp1, 4
|
||||
store 0, 0, lr2, tmp1 ; lr2
|
||||
add tmp1, tmp1, 4
|
||||
store 0, 0, lr3, tmp1 ; lr3
|
||||
add tmp1, tmp1, 4
|
||||
store 0, 0, lr4, tmp1 ; lr4
|
||||
.endm
|
||||
|
||||
;
|
||||
;*
|
||||
;* All the funky AMD style macros go in here...simply for
|
||||
;* compatility
|
||||
;
|
||||
;
|
||||
.macro IMPORT, symbol
|
||||
.extern symbol
|
||||
.endm
|
||||
|
||||
.macro GLOBAL, symbol
|
||||
.global symbol
|
||||
.endm
|
||||
|
||||
.macro USESECT, name, type
|
||||
.sect name, type
|
||||
.use name
|
||||
.endm
|
||||
|
||||
.macro SECTION, name, type
|
||||
.sect name, type
|
||||
.endm
|
||||
|
||||
.macro FUNC, fname, lineno
|
||||
.global fname
|
||||
fname:
|
||||
.endm
|
||||
|
||||
.macro ENDFUNC, fname, lineno
|
||||
.endm
|
||||
|
||||
;*************************************LONG
|
||||
.macro LONG, varname
|
||||
varname:
|
||||
.block 4
|
||||
.endm
|
||||
|
||||
;*************************************UNSIGNED LONG
|
||||
.macro ULONG, varname
|
||||
varname:
|
||||
.block 4
|
||||
.endm
|
||||
|
||||
;*************************************SHORT
|
||||
.macro SHORT, varname
|
||||
varname:
|
||||
.block 2
|
||||
.endm
|
||||
|
||||
;*************************************CHAR
|
||||
.macro CHAR, varname
|
||||
varname:
|
||||
.block 1
|
||||
.endm
|
||||
|
||||
;*************************************LONGARRAY
|
||||
.macro LONGARRAY, name, count
|
||||
name:
|
||||
.block count*4
|
||||
.endm
|
||||
|
||||
;*************************************SHORTARRAY
|
||||
|
||||
.macro SHORTARRAY, name, count
|
||||
name:
|
||||
.block count*2
|
||||
.endm
|
||||
|
||||
;*************************************CHARARRAY
|
||||
|
||||
.macro CHARARRAY, name, count
|
||||
name:
|
||||
.block count
|
||||
.endm
|
||||
|
||||
|
||||
;*************************************VOID_FPTR
|
||||
|
||||
.macro VOID_FPTR, name
|
||||
name:
|
||||
.block 4
|
||||
.endm
|
||||
@@ -1,393 +0,0 @@
|
||||
; /* @(#)register.s 1.1 96/05/23 08:57:34, TEI */
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; Register Definitions and Usage Conventions
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; /* $Id$ */
|
||||
;
|
||||
|
||||
;* File information and includes.
|
||||
|
||||
.file "c_register.s"
|
||||
.ident "@(#)register.s 1.1 96/05/23 08:57:34, TEI\n"
|
||||
|
||||
; Basic guidelines for register distribution and usage are derived from
|
||||
; the AMD application notes. It would be best to stick with the conventions
|
||||
; laid out by AMD.
|
||||
; Application Note: Context Switching with 29000 Processor By Daniel Mann.
|
||||
|
||||
;
|
||||
;*************************************************************************
|
||||
;
|
||||
|
||||
;
|
||||
; Rule 1:
|
||||
; Gr1 is used as a pointer to the register stack
|
||||
; Lr1 is used as frame pointer
|
||||
;
|
||||
|
||||
.reg regsp, gr1 ; Register Stack Pointer
|
||||
.reg fp, lr1 ; frame pointer
|
||||
|
||||
.equ Rrsp, ®sp
|
||||
.equ Rfp, &fp
|
||||
|
||||
.global Rrsp, Rfp
|
||||
|
||||
;
|
||||
;*************************************************************************
|
||||
;
|
||||
|
||||
;
|
||||
; Gr2-Gr63 are not implemented in silicon
|
||||
;
|
||||
|
||||
;
|
||||
;*************************************************************************
|
||||
;
|
||||
|
||||
;
|
||||
; Rule 2:
|
||||
; The registers GR64-GR95 are dedicated for operating system use.
|
||||
;
|
||||
|
||||
; The register range GR64-GR95 i.e 32 Registers is furthur sub-divided as
|
||||
; follows...
|
||||
; gr64-gr67 interrupt handlers.
|
||||
; gr68-gr71 OS temporaries I
|
||||
; gr72-gr79 OS temporaries II
|
||||
; gr80-gr95 OS statics. Dedicated throughout the operation of a program.
|
||||
|
||||
|
||||
;
|
||||
; 32 Registers for Operating System Use.
|
||||
;
|
||||
|
||||
;
|
||||
; Assigning Names to Interrupt Handlers Registers.
|
||||
;
|
||||
|
||||
.reg OSint0, gr64
|
||||
.reg OSint1, gr65
|
||||
.reg OSint2, gr66
|
||||
.reg OSint3, gr67
|
||||
|
||||
.equ ROSint0, &OSint0
|
||||
.equ ROSint1, &OSint1
|
||||
.equ ROSint2, &OSint2
|
||||
.equ ROSint3, &OSint3
|
||||
|
||||
.global ROSint0, ROSint1, ROSint2, ROSint3
|
||||
|
||||
.reg TrapReg, gr64 ; trap register
|
||||
.reg trapreg, gr64 ; trapreg
|
||||
|
||||
.equ RTrapReg, &TrapReg
|
||||
.equ Rtrapreg, &trapreg
|
||||
|
||||
.global RTrapReg, Rtrapreg
|
||||
|
||||
|
||||
;
|
||||
; Assigning Names to Scratch/Temporary Registers.
|
||||
;
|
||||
|
||||
.reg OStmp0, gr68
|
||||
.reg OStmp1, gr69
|
||||
.reg OStmp2, gr70
|
||||
.reg OStmp3, gr71
|
||||
|
||||
.reg OStmp4, gr72
|
||||
.reg OStmp5, gr73
|
||||
.reg OStmp6, gr74
|
||||
.reg OStmp7, gr75
|
||||
|
||||
.reg OStmp8, gr76
|
||||
.reg OStmp9, gr77
|
||||
.reg OStmp10, gr78
|
||||
.reg OStmp11, gr79
|
||||
|
||||
.equ ROStmp0, &OStmp0
|
||||
.equ ROStmp1, &OStmp1
|
||||
.equ ROStmp2, &OStmp2
|
||||
.equ ROStmp3, &OStmp3
|
||||
|
||||
.equ ROStmp4, &OStmp4
|
||||
.equ ROStmp5, &OStmp5
|
||||
.equ ROStmp6, &OStmp6
|
||||
.equ ROStmp7, &OStmp7
|
||||
|
||||
.equ ROStmp8, &OStmp8
|
||||
.equ ROStmp9, &OStmp9
|
||||
.equ ROStmp10, &OStmp10
|
||||
.equ ROStmp11, &OStmp11
|
||||
|
||||
.global ROStmp0, ROStmp1, ROStmp2, ROStmp3
|
||||
.global ROStmp4, ROStmp5, ROStmp6, ROStmp7
|
||||
.global ROStmp8, ROStmp9, ROStmp10, ROStmp11
|
||||
|
||||
;
|
||||
; Assigning Names to Statics/Permanent Registers.
|
||||
;
|
||||
|
||||
.reg OSsta0, gr80 ; Spill Address Register
|
||||
.reg OSsta1, gr81 ; Fill Address Register
|
||||
.reg OSsta2, gr82 ; Signal Address Register
|
||||
.reg OSsta3, gr83 ; pcb Register
|
||||
|
||||
.reg OSsta4, gr84 ;
|
||||
.reg OSsta5, gr85 ;
|
||||
.reg OSsta6, gr86 ;
|
||||
.reg OSsta7, gr87 ;
|
||||
|
||||
.reg OSsta8, gr88 ;
|
||||
.reg OSsta9, gr89 ;
|
||||
.reg OSsta10, gr90 ;
|
||||
.reg OSsta11, gr91 ;
|
||||
|
||||
.reg OSsta12, gr92 ;
|
||||
.reg OSsta13, gr93 ;
|
||||
.reg OSsta14, gr94 ;
|
||||
.reg OSsta15, gr95 ;
|
||||
|
||||
;
|
||||
; Round 2 of Name Assignments
|
||||
;
|
||||
|
||||
;
|
||||
; Assignment of Specific Use oriented names to statics.
|
||||
;
|
||||
.reg SpillAddrReg, gr80
|
||||
.reg FillAddrReg, gr81
|
||||
.reg SignalAddrReg, gr82
|
||||
.reg pcb, gr83
|
||||
|
||||
.reg etx, gr80
|
||||
.reg ety, gr81
|
||||
.reg etz, gr82
|
||||
.reg etc, gr83
|
||||
|
||||
;*
|
||||
|
||||
.reg TimerExt, gr84
|
||||
.reg TimerUtil, gr85
|
||||
|
||||
;*
|
||||
|
||||
.reg LEDReg, gr86
|
||||
.reg ERRReg, gr87
|
||||
|
||||
.reg eta, gr86
|
||||
.reg etb, gr87
|
||||
|
||||
;*
|
||||
|
||||
|
||||
;* The following registers are used by switching code
|
||||
|
||||
.reg et0, gr88
|
||||
.reg et1, gr89
|
||||
.reg et2, gr90
|
||||
.reg et3, gr91
|
||||
|
||||
.reg et4, gr92
|
||||
.reg et5, gr93
|
||||
.reg et6, gr94
|
||||
.reg et7, gr95
|
||||
|
||||
|
||||
; The floating point trap handlers need a few static registers
|
||||
|
||||
.reg FPStat0, gr88
|
||||
.reg FPStat1, gr89
|
||||
.reg FPStat2, gr90
|
||||
.reg FPStat3, gr91
|
||||
|
||||
; The following registers are used temporarily during diagnostics.
|
||||
|
||||
.reg XLINXReg, gr92
|
||||
.reg VMBCReg, gr93
|
||||
.reg UARTReg, gr94
|
||||
.reg ETHERReg, gr95
|
||||
|
||||
;*
|
||||
|
||||
;;*
|
||||
.reg heapptr, gr90
|
||||
.reg ArgvPtr, gr91
|
||||
;;*
|
||||
|
||||
|
||||
|
||||
;
|
||||
;* Preparing to export Register Names for the Linkers benefit.
|
||||
;
|
||||
|
||||
.equ RSpillAddrReg, &SpillAddrReg
|
||||
.equ RFillAddrReg, &FillAddrReg
|
||||
.equ RSignalAddrReg, &SignalAddrReg
|
||||
.equ Rpcb, &pcb
|
||||
|
||||
.equ Retx, &etx
|
||||
.equ Rety, &ety
|
||||
.equ Retz, &etz
|
||||
.equ Reta, &eta
|
||||
|
||||
.equ Retb, &etb
|
||||
.equ Retc, &etc
|
||||
.equ RTimerExt, &TimerExt
|
||||
.equ RTimerUtil, &TimerUtil
|
||||
|
||||
.equ RLEDReg, &LEDReg
|
||||
.equ RERRReg, &ERRReg
|
||||
|
||||
.equ Ret0, &et0
|
||||
.equ Ret1, &et1
|
||||
.equ Ret2, &et2
|
||||
.equ Ret3, &et3
|
||||
|
||||
.equ RFPStat0, &FPStat0
|
||||
.equ RFPStat1, &FPStat1
|
||||
.equ RFPStat2, &FPStat2
|
||||
.equ RFPStat3, &FPStat3
|
||||
|
||||
.equ Rheapptr, &heapptr
|
||||
.equ RHeapPtr, &heapptr
|
||||
.equ RArgvPtr, &ArgvPtr
|
||||
|
||||
.equ Ret4, &et4
|
||||
.equ Ret5, &et5
|
||||
.equ Ret6, &et6
|
||||
.equ Ret7, &et7
|
||||
|
||||
.equ RXLINXReg, &XLINXReg
|
||||
.equ RVMBCReg, &VMBCReg
|
||||
.equ RUARTReg, &UARTReg
|
||||
.equ RETHERReg, ÐERReg
|
||||
|
||||
.global RSpillAddrReg, RFillAddrReg, RSignalAddrReg
|
||||
.global Rpcb, Retc
|
||||
.global RTimerExt, RTimerUtil, RLEDReg, RERRReg
|
||||
.global Ret0, Ret1, Ret2, Ret3, Ret4, Ret5, Ret6, Ret7, Reta, Retb
|
||||
.global Retx, Rety, Retz
|
||||
.global RFPStat0, RFPStat1, RFPStat2, RFPStat3
|
||||
.global Rheapptr, RHeapPtr, RArgvPtr
|
||||
.global RXLINXReg, RVMBCReg, RUARTReg, RETHERReg
|
||||
|
||||
;
|
||||
;*************************************************************************
|
||||
;
|
||||
|
||||
|
||||
;
|
||||
; Rule 3:
|
||||
; Gr96-Gr127 Compiler & Programmer use registers.
|
||||
; 32 Registers for Compiler & Programmer use
|
||||
|
||||
;
|
||||
; 16 Registers for Compiler Use.
|
||||
;
|
||||
|
||||
;
|
||||
; Compiler Temporaries and Function Return Values
|
||||
;
|
||||
|
||||
.reg v0, gr96 ; First word of Return Value
|
||||
.reg v1, gr97
|
||||
.reg v2, gr98
|
||||
.reg v3, gr99
|
||||
|
||||
.reg v4, gr100
|
||||
.reg v5, gr101
|
||||
.reg v6, gr102
|
||||
.reg v7, gr103
|
||||
|
||||
.reg v8, gr104
|
||||
.reg v9, gr105
|
||||
.reg v10, gr106
|
||||
.reg v11, gr107
|
||||
|
||||
.reg v12, gr108
|
||||
.reg v13, gr109
|
||||
.reg v14, gr110
|
||||
.reg v15, gr111
|
||||
|
||||
.equ Rv0, &v0
|
||||
.equ Rv1, &v1
|
||||
.equ Rv2, &v2
|
||||
.equ Rv3, &v3
|
||||
|
||||
.equ Rv4, &v4
|
||||
.equ Rv5, &v5
|
||||
.equ Rv6, &v6
|
||||
.equ Rv7, &v7
|
||||
|
||||
.equ Rv8, &v8
|
||||
.equ Rv9, &v9
|
||||
.equ Rv10, &v10
|
||||
.equ Rv11, &v11
|
||||
|
||||
.equ Rv12, &v12
|
||||
.equ Rv13, &v13
|
||||
.equ Rv14, &v14
|
||||
.equ Rv15, &v15
|
||||
|
||||
.global Rv0, Rv1, Rv2, Rv3, Rv4, Rv5, Rv6, Rv7, Rv8, Rv9
|
||||
.global Rv10, Rv11, Rv12, Rv13, Rv14, Rv15
|
||||
|
||||
|
||||
;
|
||||
; User Process Statics Registers
|
||||
;
|
||||
|
||||
.reg rp0, gr112 ; Reserved for Programmer, #0
|
||||
.reg rp1, gr113 ; Reserved for Programmer, #1
|
||||
.reg rp2, gr114 ; Reserved for Programmer, #2
|
||||
.reg rp3, gr115 ; Reserved for Programmer, #3
|
||||
|
||||
.equ Rrp0, &rp0
|
||||
.equ Rrp1, &rp1
|
||||
.equ Rrp2, &rp2
|
||||
.equ Rrp3, &rp3
|
||||
|
||||
.global Rrp0, Rrp1, Rrp2, Rrp3
|
||||
|
||||
;
|
||||
; Compiler Temporaries II
|
||||
;
|
||||
|
||||
.reg tv0, gr116 ;
|
||||
.reg tv1, gr117 ;
|
||||
.reg tv2, gr118 ;
|
||||
.reg tv3, gr119 ;
|
||||
.reg tv4, gr120 ;
|
||||
|
||||
.equ Rtv0, &tv0 ;
|
||||
.equ Rtv1, &tv1 ;
|
||||
.equ Rtv2, &tv2 ;
|
||||
.equ Rtv3, &tv3 ;
|
||||
.equ Rtv4, &tv4 ;
|
||||
|
||||
.global Rtv0, Rtv1, Rtv2, Rtv3, Rtv4
|
||||
|
||||
;
|
||||
; Special pointers and registers for handlers and stack operations.
|
||||
;
|
||||
|
||||
.reg tav, gr121 ; Temp, Arg for Trap Handlers
|
||||
.reg tpc, gr122 ; Temp, Ret PC for Trap Handlers
|
||||
.reg lrp, gr123 ; Large Return Pointer
|
||||
.reg slp, gr124 ; Static Link Pointer
|
||||
|
||||
.reg msp, gr125 ; Memory Stack Pointer
|
||||
.reg rab, gr126 ; Register Allocate Bound
|
||||
.reg rfb, gr127 ; Register Free Bound
|
||||
|
||||
.equ Rtav, &tav
|
||||
.equ Rtpc, &tpc
|
||||
.equ Rlrp, &lrp
|
||||
.equ Rslp, &slp
|
||||
.equ Rmsp, &msp
|
||||
.equ Rrab, &rab
|
||||
.equ Rrfb, &rfb
|
||||
|
||||
.global Rtav, Rtpc, Rlrp, Rslp, Rmsp, Rrab, Rrfb
|
||||
@@ -1,214 +0,0 @@
|
||||
; /* @(#)register.ah 1.1 96/05/23 08:56:57, TEI */
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; naming of various registers
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
; /* $Id$ */
|
||||
|
||||
;* File information and includes.
|
||||
|
||||
.file "register.ah"
|
||||
.ident "@(#)register.ah 1.1 96/05/23 08:56:57, TEI\n"
|
||||
|
||||
;* Register Stack pointer and frame pointer registers.
|
||||
|
||||
.extern Rrsp, Rfp
|
||||
|
||||
.reg regsp, %%Rrsp
|
||||
.reg fp, %%Rfp
|
||||
|
||||
|
||||
.extern RTrapReg
|
||||
.extern Rtrapreg
|
||||
|
||||
.reg TrapReg, %%RTrapReg
|
||||
.reg trapreg, %%Rtrapreg
|
||||
|
||||
|
||||
;* Operating system Interrupt handler registers (gr64-gr67)
|
||||
|
||||
.extern ROSint0, ROSint1, ROSint2, ROSint3
|
||||
|
||||
.reg OSint0, %%ROSint0
|
||||
.reg OSint1, %%ROSint1
|
||||
.reg OSint2, %%ROSint2
|
||||
.reg OSint3, %%ROSint3
|
||||
|
||||
.reg it0, %%ROSint0
|
||||
.reg it1, %%ROSint1
|
||||
.reg it2, %%ROSint2
|
||||
.reg it3, %%ROSint3
|
||||
|
||||
|
||||
|
||||
;* Operating system temporary (or scratch) registers (gr68-gr79)
|
||||
|
||||
.extern ROStmp0, ROStmp1, ROStmp2, ROStmp3
|
||||
.extern ROStmp4, ROStmp5, ROStmp6, ROStmp7
|
||||
.extern ROStmp8, ROStmp9, ROStmp10, ROStmp11
|
||||
|
||||
.reg OStmp0, %%ROStmp0
|
||||
.reg OStmp1, %%ROStmp1
|
||||
.reg OStmp2, %%ROStmp2
|
||||
.reg OStmp3, %%ROStmp3
|
||||
|
||||
.reg OStmp4, %%ROStmp4
|
||||
.reg OStmp5, %%ROStmp5
|
||||
.reg OStmp6, %%ROStmp6
|
||||
.reg OStmp7, %%ROStmp7
|
||||
|
||||
.reg OStmp8, %%ROStmp8
|
||||
.reg OStmp9, %%ROStmp9
|
||||
.reg OStmp10, %%ROStmp10
|
||||
.reg OStmp11, %%ROStmp11
|
||||
|
||||
|
||||
.reg kt0, %%ROStmp0
|
||||
.reg kt1, %%ROStmp1
|
||||
.reg kt2, %%ROStmp2
|
||||
.reg kt3, %%ROStmp3
|
||||
|
||||
.reg kt4, %%ROStmp4
|
||||
.reg kt5, %%ROStmp5
|
||||
.reg kt6, %%ROStmp6
|
||||
.reg kt7, %%ROStmp7
|
||||
|
||||
.reg kt8, %%ROStmp8
|
||||
.reg kt9, %%ROStmp9
|
||||
.reg kt10, %%ROStmp10
|
||||
.reg kt11, %%ROStmp11
|
||||
|
||||
|
||||
.reg TempReg0, %%ROSint0
|
||||
.reg TempReg1, %%ROSint1
|
||||
.reg TempReg2, %%ROSint2
|
||||
.reg TempReg3, %%ROSint3
|
||||
|
||||
.reg TempReg4, %%ROStmp0
|
||||
.reg TempReg5, %%ROStmp1
|
||||
.reg TempReg6, %%ROStmp2
|
||||
.reg TempReg7, %%ROStmp3
|
||||
|
||||
.reg TempReg8, %%ROStmp4
|
||||
.reg TempReg9, %%ROStmp5
|
||||
.reg TempReg10, %%ROStmp6
|
||||
.reg TempReg11, %%ROStmp7
|
||||
|
||||
.reg TempReg12, %%ROStmp8
|
||||
.reg TempReg13, %%ROStmp9
|
||||
.reg TempReg14, %%ROStmp10
|
||||
.reg TempReg15, %%ROStmp11
|
||||
|
||||
|
||||
;* Assigned static registers
|
||||
|
||||
.extern RSpillAddrReg, RFillAddrReg, RSignalAddrReg
|
||||
.extern Rpcb, Retc
|
||||
.extern RTimerExt, RTimerUtil, RLEDReg, RERRReg
|
||||
.extern Ret0, Ret1, Ret2, Ret3, Ret4, Ret5, Ret6, Ret7, Reta, Retb
|
||||
.extern Retx, Rety, Retz
|
||||
|
||||
|
||||
.reg SpillAddrReg, %%RSpillAddrReg
|
||||
.reg FillAddrReg, %%RFillAddrReg
|
||||
.reg SignalAddrReg, %%RSignalAddrReg
|
||||
.reg pcb, %%Rpcb
|
||||
|
||||
.reg etx, %%Retx
|
||||
.reg ety, %%Rety
|
||||
.reg etz, %%Retz
|
||||
.reg eta, %%Reta
|
||||
|
||||
.reg etb, %%Retb
|
||||
.reg etc, %%Retc
|
||||
.reg TimerExt, %%RTimerExt
|
||||
.reg TimerUtil, %%RTimerUtil
|
||||
|
||||
.reg LEDReg, %%RLEDReg
|
||||
.reg ERRReg, %%RERRReg
|
||||
|
||||
|
||||
.reg et0, %%Ret0
|
||||
.reg et1, %%Ret1
|
||||
.reg et2, %%Ret2
|
||||
.reg et3, %%Ret3
|
||||
|
||||
.reg et4, %%Ret4
|
||||
.reg et5, %%Ret5
|
||||
.reg et6, %%Ret6
|
||||
.reg et7, %%Ret7
|
||||
|
||||
;
|
||||
.equ SCB1REG_NUM, 88
|
||||
.reg SCB1REG_PTR, %%Ret0
|
||||
|
||||
; The floating point trap handlers need a few static registers
|
||||
|
||||
.extern RFPStat0, RFPStat1, RFPStat2, RFPStat3
|
||||
.extern Rheapptr, RHeapPtr, RArgvPtr
|
||||
|
||||
.reg FPStat0, %%RFPStat0
|
||||
.reg FPStat1, %%RFPStat1
|
||||
.reg FPStat2, %%RFPStat2
|
||||
.reg FPStat3, %%RFPStat3
|
||||
|
||||
.reg heapptr, %%Rheapptr
|
||||
.reg HeapPtr, %%RHeapPtr
|
||||
.reg ArgvPtr, %%RArgvPtr
|
||||
|
||||
.extern RXLINXReg, RVMBCReg, RUARTReg, RETHERReg
|
||||
|
||||
.reg XLINXReg, %%RXLINXReg
|
||||
.reg VMBCReg, %%RVMBCReg
|
||||
.reg UARTReg, %%RUARTReg
|
||||
.reg ETHERReg, %%RXLINXReg
|
||||
|
||||
;* Compiler and programmer registers. (gr96-gr127)
|
||||
|
||||
.extern Rv0, Rv1, Rv2, Rv3, Rv4, Rv5, Rv6, Rv7, Rv8, Rv9
|
||||
.extern Rv10, Rv11, Rv12, Rv13, Rv14, Rv15
|
||||
|
||||
.reg v0, %%Rv0
|
||||
.reg v1, %%Rv1
|
||||
.reg v2, %%Rv2
|
||||
.reg v3, %%Rv3
|
||||
|
||||
.reg v4, %%Rv4
|
||||
.reg v5, %%Rv5
|
||||
.reg v6, %%Rv6
|
||||
.reg v7, %%Rv7
|
||||
|
||||
.reg v8, %%Rv8
|
||||
.reg v9, %%Rv9
|
||||
.reg v10, %%Rv10
|
||||
.reg v11, %%Rv11
|
||||
|
||||
.reg v12, %%Rv12
|
||||
.reg v13, %%Rv13
|
||||
.reg v14, %%Rv14
|
||||
.reg v15, %%Rv15
|
||||
|
||||
.extern Rtv0, Rtv1, Rtv2, Rtv3, Rtv4
|
||||
|
||||
.reg tv0, %%Rtv0
|
||||
.reg tv1, %%Rtv1
|
||||
.reg tv2, %%Rtv2
|
||||
.reg tv3, %%Rtv3
|
||||
.reg tv4, %%Rtv4
|
||||
|
||||
; ****************************************************************************
|
||||
; For uatrap
|
||||
; register definitions -- since this trap handler must allow for
|
||||
; nested traps and interrupts such as TLB miss, protection violation,
|
||||
; or Data Access Exception, and these trap handlers use the shared
|
||||
; Temp registers, we must maintain our own that are safe over user-
|
||||
; mode loads and stores. The following must be assigned global
|
||||
; registers which are not used in INTR[0-3], TRAP[0-1], TLB miss,
|
||||
; TLB protection violation, or data exception trap handlers.
|
||||
|
||||
; .reg cha_cpy, OStmp4 ; copy of CHA
|
||||
; .reg chd_cpy, OStmp5 ; copy of CHD
|
||||
; .reg chc_cpy, OStmp6 ; copy of CHC
|
||||
; .reg LTemp0, OStmp7 ; local temp 0
|
||||
; .reg LTemp1, OStmp8 ; local temp 1
|
||||
|
||||
; ****************************************************************************
|
||||
Reference in New Issue
Block a user