source: trunk/libs/newlib/src/libgloss/sparc_leon/locore_mvt.S @ 450

Last change on this file since 450 was 444, checked in by satin@…, 6 years ago

add newlib,libalmos-mkh, restructure shared_syscalls.h and mini-libc

File size: 7.0 KB
Line 
1/*
2 * Copyright (c) 2011 Aeroflex Gaisler
3 *
4 * BSD license:
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24
25 
26/* The traptable has to be the first code in a boot PROM. */
27
28#include <asm-leon/head.h>
29               
30#define TRAP(H)  mov %psr, %l0; sethi %hi(H), %l4; jmp %l4+%lo(H); nop;
31#define TRAPL(H)  mov %g0, %g4; sethi %hi(H), %g4; jmp %g4+%lo(H); nop;
32#define TRAP_ENTRY(H) rd %psr, %l0; b H; rd %wim, %l3; nop;
33/* srmmu trap */       
34#define SRMMU_TFAULT rd %psr, %l0; rd %wim, %l3; b _srmmu_fault; mov 1, %l6;
35#define SRMMU_DFAULT rd %psr, %l0; rd %wim, %l3; b _srmmu_fault; mov 9, %l6;
36
37#define WIM_INIT 2
38#ifdef _SOFT_FLOAT
39#define PSR_INIT 0x0e0
40#else
41#define PSR_INIT 0x10e0
42#endif
43
44#define NUMREGWINDOWS 8
45
46/* Unexcpected trap will halt the processor by forcing it to error state */
47#define BAD_TRAP ta 0; nop; nop; nop;
48
49/* Software trap. Treat as BAD_TRAP */
50#define SOFT_TRAP BAD_TRAP
51
52  .seg    "text"
53  .global _trap_table, cpuinit, leonbare_irq_entry, _hardreset, _hardreset_mvt
54  .global _window_overflow, _window_underflow, _flush_windows, _fpdis_enable
55  .global start
56start:
57_trap_table:
58  TRAPL(_hardreset_mvt);        ! 00 reset trap
59  SRMMU_TFAULT                  ! 01 instruction_access_exception (in mmu_asm.S)
60  BAD_TRAP;                     ! 02 illegal_instruction
61  BAD_TRAP;                     ! 03 priveleged_instruction
62#ifndef _SOFT_FLOAT
63  TRAP(_fpdis_enable);          ! 04 fp_disabled
64#else
65  TRAP(_fpdis);                 ! 04 fp_disabled
66#endif         
67#ifndef _FLAT
68  TRAP(_window_overflow);       ! 05 window_overflow
69  TRAP(_window_underflow);      ! 06 window_underflow
70#else
71  BAD_TRAP; BAD_TRAP;
72#endif
73  BAD_TRAP;                     ! 07 memory_address_not_aligned
74  BAD_TRAP;                     ! 08 fp_exception
75  SRMMU_DFAULT                  ! 09 data_access_exception (in mmu_asm.S)
76  BAD_TRAP;                     ! 0A tag_overflow
77
78  BAD_TRAP;                     ! 0B undefined
79  BAD_TRAP;                     ! 0C undefined
80  BAD_TRAP;                     ! 0D undefined
81  BAD_TRAP;                     ! 0E undefined
82  BAD_TRAP;                     ! 0F undefined
83  BAD_TRAP;                     ! 10 undefined
84
85  /* Interrupt entries */
86  TRAP_ENTRY_INTERRUPT(1);              ! 11 interrupt level 1
87  TRAP_ENTRY_INTERRUPT(2);              ! 12 interrupt level 2
88  TRAP_ENTRY_INTERRUPT(3);              ! 13 interrupt level 3
89  TRAP_ENTRY_INTERRUPT(4);              ! 14 interrupt level 4
90  TRAP_ENTRY_INTERRUPT(5);              ! 15 interrupt level 5
91  TRAP_ENTRY_INTERRUPT(6);              ! 16 interrupt level 6
92  TRAP_ENTRY_INTERRUPT(7);              ! 17 interrupt level 7
93  TRAP_ENTRY_INTERRUPT(8);              ! 18 interrupt level 8
94  TRAP_ENTRY_INTERRUPT(9);              ! 19 interrupt level 9
95  TRAP_ENTRY_INTERRUPT(10);             ! 1A interrupt level 1
96  TRAP_ENTRY_INTERRUPT(11);             ! 1B interrupt level 11
97  TRAP_ENTRY_INTERRUPT(12);             ! 1C interrupt level 12
98  TRAP_ENTRY_INTERRUPT(13);             ! 1D interrupt level 13
99  TRAP_ENTRY_INTERRUPT(14);             ! 1E interrupt level 14
100  TRAP_ENTRY_INTERRUPT(15);             ! 1F interrupt level 15
101  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 20 - 23 undefined
102  BAD_TRAP;                                     ! 24 cp_disabled
103            BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 25 - 27 undefined
104  BAD_TRAP;                                     ! 28 cp_exception
105            BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 29 - 2B undefined
106  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 2C - 2F undefined
107  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 30 - 33 undefined
108  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 34 - 37 undefined
109  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 38 - 3B undefined
110  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 3C - 3F undefined
111  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 40 - 43 undefined
112  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 44 - 47 undefined
113  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 48 - 4B undefined
114  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 4C - 4F undefined
115  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 50 - 53 undefined
116  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 54 - 57 undefined
117  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 58 - 5B undefined
118  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 5C - 5F undefined
119  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 60 - 63 undefined
120  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 64 - 67 undefined
121  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 68 - 6B undefined
122  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 6C - 6F undefined
123  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 70 - 73 undefined
124  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 74 - 77 undefined
125  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 78 - 7B undefined
126  BAD_TRAP; BAD_TRAP; BAD_TRAP; BAD_TRAP;       ! 7C - 7F undefined
127
128  /* Software traps */
129  SOFT_TRAP; SOFT_TRAP; TRAP(_irqcall);         ! 80 - 82
130#ifndef _FLAT
131  TRAP_ENTRY(_flush_windows)                    ! 83
132#else
133  SOFT_TRAP
134#endif
135  SOFT_TRAP;                                    ! 84
136  TRAP(_irqcall_disableirq);                    ! 85
137  SOFT_TRAP; SOFT_TRAP;                         ! 86 - 87
138  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! 88 - 8B
139  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! 8C - 8F
140  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! 90 - 93
141  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! 94 - 97
142  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! 98 - 9B
143  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! 9C - 9F
144  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! A0 - A3
145  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! A4 - A7
146  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! A8 - AB
147  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! AC - AF
148  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! B0 - B3
149  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! B4 - B7
150  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! B8 - BB
151  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! BC - BF
152  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! C0 - C3
153  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! C4 - C7
154  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! C8 - CB
155  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! CC - CF
156  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! D0 - D3
157  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! D4 - D7
158  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! D8 - DB
159  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! DC - DF
160  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! E0 - E3
161  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! E4 - E7
162  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! E8 - EB
163  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! EC - EF
164  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! F0 - F3
165  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! F4 - F7
166  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! F8 - FB
167  SOFT_TRAP; SOFT_TRAP; SOFT_TRAP; SOFT_TRAP;   ! FC - FF
168
169
170       
Note: See TracBrowser for help on using the repository browser.