annotate packages/hal/sparclite/arch/current/src/vectors.S @ 1777:c16341b1bac6 default tip

* Added execute permissions to files missed in conversion from CVS
author alexs
date Mon, 12 Oct 2009 02:26:09 +0100
parents d2c90368aeef
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
1 /*=============================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
2 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
3 // vectors.S
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
4 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
5 // SPARClite vectors and bootup code
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
6 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
7 //=============================================================================
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
8 //####ECOSGPLCOPYRIGHTBEGIN####
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
9 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
10 // This file is part of eCos, the Embedded Configurable Operating System.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
12 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
13 // eCos is free software; you can redistribute it and/or modify it under
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
14 // the terms of the GNU General Public License as published by the Free
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
15 // Software Foundation; either version 2 or (at your option) any later version.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
16 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
17 // eCos is distributed in the hope that it will be useful, but WITHOUT ANY
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
18 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
19 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
20 // for more details.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
21 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
22 // You should have received a copy of the GNU General Public License along
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
23 // with eCos; if not, write to the Free Software Foundation, Inc.,
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
24 // 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
25 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
26 // As a special exception, if other files instantiate templates or use macros
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
27 // or inline functions from this file, or you compile this file and link it
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
28 // with other works to produce a work based on this file, this file does not
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
29 // by itself cause the resulting work to be covered by the GNU General Public
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
30 // License. However the source code for this file must still be made available
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
31 // in accordance with section (3) of the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
32 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
33 // This exception does not invalidate any other reasons why a work based on
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
34 // this file might be covered by the GNU General Public License.
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
35 //
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
36 // Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
210
d2c90368aeef Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents: 208
diff changeset
37 // at http://sources.redhat.com/ecos/ecos-license/
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
38 // -------------------------------------------
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
39 //####ECOSGPLCOPYRIGHTEND####
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
40 //=============================================================================
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
41 //#####DESCRIPTIONBEGIN####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
42 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
43 // Author(s): hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
44 // Contributors:hmt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
45 // Date: 1998-12-15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
46 // Purpose: SPARClite vector code
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
47 // Description: This file contains the code which hangs off SPARClite vectors
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
48 // including reset; it handles register under/overflow as well
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
49 // as bootup, anything else is deferred to the default interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
50 // or exception vsrs respectively. See vec_[ix]vsr.S ...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
51 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
52 //####DESCRIPTIONEND####
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
53 //
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
54 //===========================================================================*/
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
55
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
56 !-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
57
208
e0c0827131d1 Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents: 72
diff changeset
58 // .file "vectors.S"
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
59
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
60 !-----------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
61
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
62 #include <pkgconf/system.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
63 #include <pkgconf/hal.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
64
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
65 #include <pkgconf/hal_sparclite.h>
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
66 #include CYGBLD_HAL_PLATFORM_H // Platform config file
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
67
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
68 #ifdef CYGPKG_KERNEL
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
69 # include <pkgconf/kernel.h>
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
70 #else
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
71 # undef CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
72 # undef CYGFUN_HAL_COMMON_KERNEL_SUPPORT
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
73 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
74
72
da3908c9cd10 Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents: 66
diff changeset
75 #if defined( CYGPKG_HAL_SPARCLITE_SIM ) || \
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
76 defined( CYGIMP_HAL_COMMON_INTERRUPTS_USE_INTERRUPT_STACK )
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
77 #define BOOTUPSTACK_IS_INTERRUPTSTACK
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
78 #endif
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
79
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
80 //#define CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
81
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
82 #ifndef CYGHWR_HAL_SPARCLITE_HAS_ASR17
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
83 #ifndef CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
84 #error Single Vector Trapping (SVT) demands ASR17
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
85 #endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
86 #endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
87
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
88 #ifdef CYG_HAL_STARTUP_ROM
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
89 # ifndef CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
90
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
91 ! ROM startup and Single Vector Trapping demands a copy to RAM.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
92 ! Otherwise it may be configured in, but it is not required.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
93
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
94 # ifndef CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
95 # define CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
96 # endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
97
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
98 # endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
99 #endif
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
100
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
101 !------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
102
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
103 #include <cyg/hal/vectors.h>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
104
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
105 #define DELAYS_AFTER_WRPSR_SAME_WINDOW
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
106 #define DELAYS_AFTER_WRWIM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
107
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
108 !------------------------------------------------------------------------
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
109
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
110 #ifdef CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
111
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
112 .macro VECTOR_EXCEPTION
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
113 .p2align 4
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
114 rd %tbr, %l3
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
115 rd %psr, %l0
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
116 ba __entry_exception
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
117 and %l3, TT_MASK, %l4
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
118 .endm
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
119
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
120 .macro VECTOR_INTERRUPT level
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
121 .p2align 4
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
122 rd %psr, %l0
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
123 mov \level << 2, %l5
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
124 ba __entry_interrupt
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
125 mov \level << 4, %l4
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
126 .endm
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
127
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
128 .macro VECTOR_CODE_WIM name
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
129 .p2align 4
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
130 ba __entry_\name
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
131 rd %wim, %l0
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
132 .endm
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
133
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
134 #endif // CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
135
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
136 !------------------------------------------------------------------------
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
137 ! The start of the code; this is the entry point:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
138
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
139 .section ".vectors","ax"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
140
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
141 .global rom_vectors
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
142 rom_vectors:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
143 .global reset_vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
144 reset_vector:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
145 ! this code goes to the real reset handler, it will be
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
146 ! overwritten by the start of vectoring handler...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
147 b genuine_reset
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
148 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
149 ! usually drop through to:
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
150 #ifdef CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
151 ba __entry_exception ! reset becomes an exception
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
152 and %l3, TT_MASK, %l4 ! once we are running
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
153
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
154 VECTOR_EXCEPTION ! 1
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
155 VECTOR_EXCEPTION ! 2
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
156 VECTOR_EXCEPTION ! 3
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
157 VECTOR_EXCEPTION ! 4
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
158
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
159 VECTOR_CODE_WIM wover ! 5 window overflow
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
160 VECTOR_CODE_WIM wunder ! 6 window underflow
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
161 VECTOR_EXCEPTION ! 7
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
162 VECTOR_EXCEPTION ! 8
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
163 VECTOR_EXCEPTION ! 9
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
164
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
165 VECTOR_EXCEPTION ! 10
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
166 VECTOR_EXCEPTION ! 11
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
167 VECTOR_EXCEPTION ! 12
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
168 VECTOR_EXCEPTION ! 13
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
169 VECTOR_EXCEPTION ! 14
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
170
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
171 VECTOR_EXCEPTION ! 15
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
172 VECTOR_EXCEPTION ! 16
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
173 VECTOR_INTERRUPT 1 ! 17 interrupt_level_1
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
174 VECTOR_INTERRUPT 2 ! 18 interrupt_level_2
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
175 VECTOR_INTERRUPT 3 ! 19 interrupt_level_3
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
176
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
177 VECTOR_INTERRUPT 4 ! 20 interrupt_level_4
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
178 VECTOR_INTERRUPT 5 ! 21 interrupt_level_5
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
179 VECTOR_INTERRUPT 6 ! 22 interrupt_level_6
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
180 VECTOR_INTERRUPT 7 ! 23 interrupt_level_7
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
181 VECTOR_INTERRUPT 8 ! 24 interrupt_level_8
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
182
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
183 VECTOR_INTERRUPT 9 ! 25 interrupt_level_9
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
184 VECTOR_INTERRUPT 10 ! 26 interrupt_level_10
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
185 VECTOR_INTERRUPT 11 ! 27 interrupt_level_11
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
186 VECTOR_INTERRUPT 12 ! 28 interrupt_level_12
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
187 VECTOR_INTERRUPT 13 ! 29 interrupt_level_13
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
188
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
189 VECTOR_INTERRUPT 14 ! 30 interrupt_level_14
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
190 VECTOR_INTERRUPT 15 ! 31 interrupt_level_15
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
191 VECTOR_EXCEPTION ! 32
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
192 VECTOR_EXCEPTION ! 33
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
193 VECTOR_EXCEPTION ! 34
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
194
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
195 VECTOR_EXCEPTION ! 35
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
196 VECTOR_EXCEPTION ! 36
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
197 VECTOR_EXCEPTION ! 37
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
198 VECTOR_EXCEPTION ! 38
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
199 VECTOR_EXCEPTION ! 39
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
200
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
201 .rept 216 ! 40-255 is 216 of them
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
202 VECTOR_EXCEPTION ! whichever
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
203 .endr
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
204 #endif // CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
205
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
206 #ifndef CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
207 real_vector:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
208 ! here,locals have been set up as follows:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
209 ! %l0 = psr
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
210 ! %l1 = pc
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
211 ! %l2 = npc
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
212 ! %l3 = tbr
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
213 and %l3, TT_IS_INTR_MASK, %l4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
214 cmp %l4, TT_IS_INTR_VALUE
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
215 bne not_an_interrupt ! delay slot does not matter
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
216 ! here be the pre-vector interrupt handler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
217 interrupt:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
218 and %l3, 0x0f0, %l4 ! get an interrupt number out
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
219 srl %l4, 2, %l5 ! to a word address offset
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
220 #endif // !CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
221 __entry_interrupt:
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
222 sethi %hi(hal_vsr_table), %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
223 or %l6, %lo(hal_vsr_table), %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
224 ld [ %l6 + %l5 ], %l6 ! get vector in %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
225 jmp %l6 ! and go there
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
226 srl %l4, 4, %l3 ! vector number into %l3: so that
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
227 ! interrupts and exceptions/traps
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
228 ! have the same API to VSRs
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
229
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
230 #ifndef CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
231 not_an_interrupt:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
232 and %l3, TT_MASK, %l4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
233 cmp %l4, (TRAP_WUNDER << TT_SHL)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
234
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
235 bne,a not_window_underflow
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
236 cmp %l4, (TRAP_WOVER << TT_SHL) ! (if taken)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
237
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
238 ! here be the window underflow handler:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
239 window_underflow:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
240 ! CWP is trap handler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
241 ! CWP + 1 is trapped RESTORE instruction
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
242 ! CWP + 2 is invalid context which must be restored
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
243 ! CWP + 3 is next invalid context
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
244
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
245 wr %l0, %psr ! restore the condition flags
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
246 ! (CWP is unchanged)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
247 ! the following instructions delay enough; no need for NOPs
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
248 rd %wim, %l0 ! get the wim
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
249 #endif // !CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
250 __entry_wunder:
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
251 sll %l0, 1, %l3 ! Rotate wim left
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
252 srl %l0, __WINSIZE-1, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
253 wr %l0, %l3, %wim ! Install the new wim
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
254
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
255 #ifdef DELAYS_AFTER_WRWIM
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
256 nop ! are these delays needed?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
257 nop ! (following restore uses wim)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
258 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
259 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
260 restore ! Users window
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
261 restore ! Her callers window (now valid)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
262
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
263 ldd [%sp + 0 * 4], %l0 ! restore L & I registers
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
264 ldd [%sp + 2 * 4], %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
265 ldd [%sp + 4 * 4], %l4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
266 ldd [%sp + 6 * 4], %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
267
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
268 ldd [%sp + 8 * 4], %i0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
269 ldd [%sp + 10 * 4], %i2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
270 ldd [%sp + 12 * 4], %i4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
271 ldd [%sp + 14 * 4], %i6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
272
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
273 save ! Back to trap window
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
274 save
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
275
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
276 jmp %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
277 rett %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
278
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
279 #ifndef CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
280 not_window_underflow:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
281 bne,a not_window_overflow
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
282 srl %l4, 4, %l4 ! (if taken)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
283
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
284 ! here be the window overflow handler:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
285 window_overflow:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
286 ! CWP + 1 is caller whose SAVE bounced
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
287 ! CWP is trap handler = invalid window
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
288 ! CWP - 1 is next invalid window which needs to be saved
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
289
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
290 wr %l0, %psr ! restore the condition flags
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
291 ! (CWP is unchanged)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
292 ! the following instructions delay enough; no need for NOPs
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
293 rd %wim, %l0
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
294 #endif // !CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
295 __entry_wover:
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
296 mov %g1, %l3 ! Save g1, we use it to hold the wim
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
297 srl %l0, 1, %g1 ! Rotate wim right
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
298 sll %l0, __WINSIZE-1, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
299 or %l0, %g1, %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
300
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
301 save ! Slip into next window
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
302 mov %g1, %wim ! Install the new wim
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
303 ! (invalidates current window!)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
304
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
305 std %l0, [%sp + 0 * 4] ! save L & I registers
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
306 std %l2, [%sp + 2 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
307 std %l4, [%sp + 4 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
308 std %l6, [%sp + 6 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
309
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
310 std %i0, [%sp + 8 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
311 std %i2, [%sp + 10 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
312 std %i4, [%sp + 12 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
313 std %i6, [%sp + 14 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
314
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
315 restore ! Go back to trap window.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
316 mov %l3, %g1 ! Restore %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
317
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
318 jmpl %l1, %g0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
319 rett %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
320
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
321 #ifdef CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
322 // ADDITIONAL code to provide an entry point:
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
323 __entry_exception:
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
324 srl %l4, 4, %l4
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
325 #endif // CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
326 not_window_overflow:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
327 ! from here on in, %l4 is the trap number in clear
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
328 cmp %l4, 128
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
329 bge 1f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
330 mov 0, %l5 ! offset 0 for user traps
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
331
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
332 cmp %l4, 36 ! coprocessor special case
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
333 beq 1f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
334 mov 4, %l5 ! ...treated as FP, code 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
335
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
336 cmp %l4, 10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
337 bge 1f
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
338 mov 10, %l5 ! offset 10 for "others"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
339
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
340 ! if we are here, the trap number is 1-9 inclusive
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
341 ! so put it in %l5 and drop through...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
342 mov %l4, %l5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
343 1:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
344 or %l5, 16, %l5 ! offset into table is 16... for traps.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
345 sll %l5, 2, %l5 ! to a word address offset
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
346 sethi %hi(hal_vsr_table), %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
347 or %l6, %lo(hal_vsr_table), %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
348 ld [ %l6 + %l5 ], %l6 ! get vector in %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
349 jmp %l6 ! and go there
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
350 srl %l5, 2, %l3 ! vector number into %l3: so that
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
351 ! interrupts and exceptions/traps
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
352 ! have the same API to VSRs
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
353 ! NB that~s eCos vector number not TRAP number above.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
354
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
355 ! and that is the end of the pre-vector trap handler
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
356
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
357 .global rom_vectors_end
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
358 rom_vectors_end:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
359
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
360 ! these instructions are copied into the reset vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
361 ! after startup to _not_ branch to the genuine_reset code below
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
362 real_vector_instructions:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
363 rd %tbr, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
364 rd %psr, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
365
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
366
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
367
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
368 ! genuine reset code called from time zero:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
369 genuine_reset: ! set psr, mask interrupts & traps
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
370 wr %g0, 0xfc0 + __WIN_INIT, %psr
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
371 nop ! mode = prevMode = S, CWP=7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
372 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
373 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
374 wr %g0, 0, %wim ! No invalid windows (yet)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
375 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
376 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
377 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
378
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
379 sethi %hi(reset_vector), %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
380 andn %g1, 0xfff, %g1 ! should not be needed
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
381 wr %g1, %tbr ! Traps are at reset_vector
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
382 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
383 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
384 nop
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
385 #ifdef CYGHWR_HAL_SPARCLITE_HAS_ASR17
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
386 #ifdef CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
387 wr %g0, 0, %asr17 ! Multiple vector trapping
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
388 #else
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
389 wr %g0, 1, %asr17 ! Single vector trapping
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
390 #endif // !CYGHWR_HAL_SPARCLITE_MULTIPLE_VECTOR_TRAPPING
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
391 #endif // CYGHWR_HAL_SPARCLITE_HAS_ASR17
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
392 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
393 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
394 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
395
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
396 // INCLUDE PLATFORM BOOT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
397
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
398 // This should set up RAM and caches, and calm down any external interrupt
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
399 // sources. Also copy two instructions from real_vector_instructions
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
400 // into reset_vector, then invalidate the instruction cache.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
401
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
402 #include <cyg/hal/halboot.si>
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
403
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
404 // halboot.si returns with %sp all set, in sleb versions.
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
405 // (though we override if there is an interrupt stack)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
406
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
407 led 0x80
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
408
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
409 ! now set up a stack and initial frame linkage
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
410 ! so as to be able to make C function calls:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
411 ! current window is 7, the highest, so we store a
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
412 ! saved frame thingy that refers to itself in the stack,
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
413 ! then another which is valid and drop into main from there.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
414
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
415 #ifdef BOOTUPSTACK_IS_INTERRUPTSTACK
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
416 sethi %hi(cyg_interrupt_stack), %i6
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
417 or %i6, %lo(cyg_interrupt_stack), %i6
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
418 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
419 andn %i6, 7, %i6 ! round fp down to double alignment
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
420 mov 0, %i7 ! null return address
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
421 sethi %hi(0xb51ac000), %i0 ! "BStac" pattern
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
422 or %i0, 24, %i0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
423 or %i0, 1, %i1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
424 or %i0, 2, %i2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
425 or %i0, 3, %i3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
426 or %i0, 4, %i4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
427 or %i0, 5, %i5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
428
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
429 sethi %hi(0xb51ac000), %l0 ! "BStac" pattern
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
430 or %l0, 16, %l0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
431 or %l0, 1, %l1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
432 or %l0, 2, %l2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
433 or %l0, 3, %l3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
434 or %l0, 4, %l4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
435 or %l0, 5, %l5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
436 or %l0, 6, %l6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
437 or %l0, 7, %l7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
438
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
439 sub %fp, 16 * 4, %sp ! Stack pointer
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
440
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
441 led 0x90
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
442
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
443 std %l0, [%sp + 0 * 4] ! save L & I registers
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
444 std %l2, [%sp + 2 * 4] ! into new stack frame
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
445 std %l4, [%sp + 4 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
446 std %l6, [%sp + 6 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
447
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
448 led 0x91
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
449
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
450 std %i0, [%sp + 8 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
451 std %i2, [%sp + 10 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
452 std %i4, [%sp + 12 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
453 std %i6, [%sp + 14 * 4]
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
454
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
455 led 0x92
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
456
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
457 sethi %hi(0xb0010000), %o0 ! "Boot" pattern
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
458 or %o0, 8, %o0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
459 or %o0, 1, %o1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
460 or %o0, 2, %o2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
461 or %o0, 3, %o3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
462 or %o0, 4, %o4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
463 or %o0, 5, %o5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
464
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
465 led 0x98
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
466
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
467 wr %g0, __WIM_INIT, %wim ! Window 7 (current) is invalid
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
468 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
469 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
470 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
471
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
472 led 0x99
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
473
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
474 sethi %hi(0xb0010000), %g1 ! "Boot" pattern
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
475 or %g1, 2, %g2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
476 or %g1, 3, %g3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
477 or %g1, 4, %g4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
478 or %g1, 5, %g5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
479 or %g1, 6, %g6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
480 or %g1, 7, %g7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
481 or %g1, 1, %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
482
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
483 led 0xa0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
484
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
485 wr %g0, 0xfe0 + __WIN_INIT, %psr
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
486 nop ! Enable traps:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
487 nop ! set psr, _do_ mask interrupts
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
488 nop ! mode = prevMode = S, CWP=7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
489
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
490 led 0xb0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
491
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
492 ! now we can start calling out and running C code!
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
493 .extern cyg_hal_start
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
494 call cyg_hal_start ! puts return address in %o7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
495 or %g1, 1, %g1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
496
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
497 loop_forever:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
498 ta 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
499 b loop_forever ! if it returns
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
500 nop
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
501
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
502
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
503 !---------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
504 ! hal_vsr_table...
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
505
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
506 .section ".data"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
507 .balign 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
508 .global hal_vsr_table
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
509 hal_vsr_table:
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
510 .rept 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
511 .word hal_default_interrupt_vsr
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
512 .endr
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
513 .rept 11
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
514 .word hal_default_exception_vsr
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
515 .endr
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
516
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
517 !---------------------------------------------------------------------------
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
518 ! Bootup stack (only needed explicitly in sim)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
519
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
520 #ifdef BOOTUPSTACK_IS_INTERRUPTSTACK
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
521 .section ".bss"
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
522
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
523 #ifndef CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
524 #define CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE 4096
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
525 #endif
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
526 .balign 16
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
527 .global cyg_interrupt_stack_base
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
528 cyg_interrupt_stack_base:
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
529 .rept CYGNUM_HAL_COMMON_INTERRUPTS_STACK_SIZE
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
530 .byte 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
531 .endr
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
532 .balign 16
8
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
533 .global cyg_interrupt_stack
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
534 cyg_interrupt_stack:
ece80412419a Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents: 2
diff changeset
535 .long 0,0,0,0,0,0,0,0 ! here be secret state stored
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
536 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
537
46
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
538 !------------------------------------------------------------------------
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
539 ! Define a section that reserves space at the start of RAM for the
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
540 ! vectors to be copied into, for ROM start only.
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
541
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
542 .section ".ram_vectors","awx",@nobits
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
543 #ifdef CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
544 ! need a space at base of RAM for copied vector/trampoline code
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
545 .align 0x1000
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
546 .space 8 ! for fencepost errors
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
547 .space (rom_vectors_end - rom_vectors)
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
548 #endif // CYGIMP_HAL_SPARCLITE_COPY_VECTORS_TO_RAM
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
549
797268ecc331 Merge from eCos master repository on 1999-10-19-18:55:31-BST
jlarmour
parents: 8
diff changeset
550 !------------------------------------------------------------------------
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents:
diff changeset
551 ! end of vectors.S