diff options
Diffstat (limited to 'libgloss/sparc_leon/locore_svtdisp.S')
-rw-r--r-- | libgloss/sparc_leon/locore_svtdisp.S | 186 |
1 files changed, 0 insertions, 186 deletions
diff --git a/libgloss/sparc_leon/locore_svtdisp.S b/libgloss/sparc_leon/locore_svtdisp.S deleted file mode 100644 index 44400f234..000000000 --- a/libgloss/sparc_leon/locore_svtdisp.S +++ /dev/null @@ -1,186 +0,0 @@ -/* - * Copyright (c) 2011 Aeroflex Gaisler - * - * BSD license: - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - -/* The traptable has to be the first code in a boot PROM. */ - -#include <asm-leon/head.h> - -#define TRAP(H) mov %psr, %l0; sethi %hi(H), %l4; jmp %l4+%lo(H); nop; -#define TRAPL(H) mov %g0, %l0; sethi %hi(H), %l4; jmp %l4+%lo(H); nop; -#define TRAP_ENTRY(H) rd %psr, %l0; b H; rd %wim, %l3; nop; - -#define WIM_INIT 2 -#ifdef _SOFT_FLOAT -#define PSR_INIT 0x0e0 -#else -#define PSR_INIT 0x10e0 -#endif - -#define NUMREGWINDOWS 8 - -/* Unexcpected trap will halt the processor by forcing it to error state */ -#define BAD_TRAP ta 0; nop; nop; nop; - -/* Software trap. Treat as BAD_TRAP */ -#define SOFT_TRAP BAD_TRAP - -#define TT_MASK 0xff0 // trap type mask from tbr -#define TT_SHL 4 // shift to get a tbr value - - .seg "text" - - /* ------- */ - .weak _start_svt_weak - .set _start_svt_weak,_start_svt_disp - /* ------- */ - - .global _trap_table, cpuinit, _hardreset, _hardreset_svt - .global _fpdis_enable_svt,_fpdis_svt,_window_overflow_svt,_window_underflow_svt - .global _leonbare_irq_entry_svt,_irqcall_svt,_flush_windows_svt,_srmmu_fault_svt,_irqcall_disableirq_svt - .global start, _start_svt_real - -_start_svt_real: - nop - -_start_svt_disp: - rd %tbr, %l3 - rd %psr, %l0 - ! here,locals have been set up as follows: - ! %l0 = psr - ! %l1 = pc - ! %l2 = npc - ! %l3 = tbr - and %l3,TT_MASK,%l3 - srl %l3,TT_SHL,%l3 - -/* -struct get { - int start,end,func; -}; - -struct get table[3] = { - {0,1,..}, - {0,0,0}, -}; - -int gettrap(int nr){ - struct get *p = table; - while((p->start) || (p->end) || (p->func)) { - if (p->start <= nr && p->end >= nr) { - return p->func; - } - p++; - } - return 0; -} - -$sparc-elf-gcc -S gettrap.c -o test.S -O2 -*/ - -#define loc_o0 l3 -#define loc_o1 l4 -#define loc_o2 l5 -#define loc_o3 l6 - - sethi %hi(trap_table), %loc_o2 - or %loc_o2, %lo(trap_table), %loc_o2 - mov %loc_o0, %loc_o3 - ld [%loc_o2], %loc_o1 -.LL13: - cmp %loc_o1, %loc_o3 -.LL12: - bg,a .LL11 - add %loc_o2, 12, %loc_o2 - ld [%loc_o2+4], %loc_o0 - cmp %loc_o0, %loc_o3 - bge,a .LL1 - ld [%loc_o2+8], %loc_o0 - add %loc_o2, 12, %loc_o2 -.LL11: - ld [%loc_o2], %loc_o0 - orcc %loc_o0, 0, %loc_o1 - bne .LL12 - cmp %loc_o1, %loc_o3 - ld [%loc_o2+4], %loc_o0 - cmp %loc_o0, 0 - bne .LL12 - cmp %loc_o1, %loc_o3 - ld [%loc_o2+8], %loc_o0 - cmp %loc_o0, 0 - bne .LL12 - cmp %loc_o1, %loc_o3 - - !not in table - BAD_TRAP - -.LL1: - jmp %loc_o0 - nop - - - .global trap_table,svt_trap_table_ext,svt_trap_table_ext_end - .section ".rodata" - .align 4 -trap_table: - .long 0,0, _hardreset_svt - .long 1,1, _srmmu_fault_svt ! 01 instruction_access_exception (in mmu_asm.S) - .long 4,4 -#ifndef _SOFT_FLOAT - .long _fpdis_enable_svt ! 04 fp_disabled -#else - .long _fpdis_svt ! 04 fp_disabled -#endif -#ifndef _FLAT - .long 5, 5, _window_overflow_svt ! 05 window_overflow - .long 6, 6, _window_underflow_svt ! 06 window_underflow -#endif - .long 9,9, _srmmu_fault_svt ! 09 data_access_exception (in mmu_asm.S) - .long 0x11,0x1f, _leonbare_irq_entry_svt ! 11-1f interrupt level - .long 0x82,0x82, _irqcall_svt ! 82 -#ifndef _FLAT - .long 0x83,0x83, _flush_windows_svt ! 83 -#endif - .long 0x85,0x85, _irqcall_disableirq_svt ! 85 -svt_trap_table_ext: - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 - .long 0,0,0 -svt_trap_table_ext_end: - .long 0,0,0 - |