summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc.S
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc.S')
-rw-r--r--c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc.S177
1 files changed, 0 insertions, 177 deletions
diff --git a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc.S b/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc.S
deleted file mode 100644
index 511601d9ff..0000000000
--- a/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc.S
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * (c) 1999, Eric Valette valette@crf.canon.fr
- *
- * Modified and partially rewritten by Till Straumann, 2007
- *
- * Modified by Sebastian Huber <sebastian.huber@embedded-brains.de>, 2008.
- *
- * Low-level assembly code for PPC exceptions.
- *
- * This file was written with the goal to eliminate
- * ALL #ifdef <cpu_flavor> conditionals -- please do not
- * reintroduce such statements.
- */
-
-/* Load macro definitions */
-#include <rtems/asm.h>
-#include <rtems/system.h>
-#include <rtems/score/percpu.h>
-
-#include "ppc_exc_asm_macros.h"
-
-/******************************************************/
-/* PROLOGUES */
-/******************************************************/
-
- /*
- * Expand prologue snippets for classic, ppc405-critical, bookE-critical
- * and E500 machine-check, synchronous and asynchronous exceptions
- */
- PPC_EXC_MIN_PROLOG_SYNC _NAME=tmpl_std _VEC=0 _PRI=std _FLVR=std
- PPC_EXC_MIN_PROLOG_SYNC _NAME=tmpl_p405_crit _VEC=0 _PRI=crit _FLVR=p405_crit
- PPC_EXC_MIN_PROLOG_SYNC _NAME=tmpl_bookE_crit _VEC=0 _PRI=crit _FLVR=bookE_crit
- PPC_EXC_MIN_PROLOG_SYNC _NAME=tmpl_e500_mchk _VEC=0 _PRI=mchk _FLVR=e500_mchk
-
- PPC_EXC_MIN_PROLOG_ASYNC _NAME=tmpl_std _VEC=0 _PRI=std _FLVR=std
- PPC_EXC_MIN_PROLOG_ASYNC _NAME=tmpl_p405_crit _VEC=0 _PRI=crit _FLVR=p405_crit
- PPC_EXC_MIN_PROLOG_ASYNC _NAME=tmpl_bookE_crit _VEC=0 _PRI=crit _FLVR=bookE_crit
- PPC_EXC_MIN_PROLOG_ASYNC _NAME=tmpl_e500_mchk _VEC=0 _PRI=mchk _FLVR=e500_mchk
-
- .global ppc_exc_min_prolog_size
-ppc_exc_min_prolog_size = 4 * 4
-
-/* Special prologue for 603e-style CPUs.
- *
- * 603e shadows GPR0..GPR3 for certain exceptions. We must switch
- * that off before we can use the stack pointer. Note that this is
- * ONLY safe if the shadowing is actually active -- otherwise, r1
- * is destroyed. We deliberately use r1 so problems become obvious
- * if this is misused!
- */
- .global ppc_exc_tgpr_clr_prolog
-ppc_exc_tgpr_clr_prolog:
- mfmsr r1
- rlwinm r1,r1,0,15,13
- mtmsr r1
- isync
- /* FALL THRU TO 'auto' PROLOG */
-
-/* Determine vector dynamically/automatically
- *
- * BUT: - only standard exceptions (no critical ones)
- * - vector offset must be on 256 Byte boundary.
- */
- .global ppc_exc_min_prolog_auto
-ppc_exc_min_prolog_auto:
- stwu r1, -EXCEPTION_FRAME_END(r1)
- stw VECTOR_REGISTER, VECTOR_OFFSET(r1)
- mflr VECTOR_REGISTER
-
- /*
- * We store the absolute branch target address here. It will be used
- * to generate the branch operation in ppc_exc_make_prologue().
- *
- * We add one to request the link in the generated branch instruction.
- */
- .int ppc_exc_wrap_auto + 1
-
- .global ppc_exc_tgpr_clr_prolog_size
-ppc_exc_tgpr_clr_prolog_size = . - ppc_exc_tgpr_clr_prolog
-
-/*
- * Automatic vector, asynchronous exception; however,
- * automatic vector calculation is less efficient than
- * using an explicit vector in a minimal prolog snippet.
- * The latter method is preferable since there usually
- * are few asynchronous exceptions.
- *
- * For generic exceptions (which are the bulk) using
- * the 'auto' prologue is OK since performance is not
- * really an issue.
- */
- .global ppc_exc_min_prolog_auto_async
-ppc_exc_min_prolog_auto_async:
- stw r1, ppc_exc_lock_std@sdarel(r13)
- stw VECTOR_REGISTER, ppc_exc_vector_register_std@sdarel(r13)
- mflr VECTOR_REGISTER
-
- /*
- * We store the absolute branch target address here. It will be used
- * to generate the branch operation in ppc_exc_make_prologue().
- *
- * We add one to request the link in the generated branch instruction.
- */
- .int ppc_exc_wrap_auto_async + 1
-
-/******************************************************/
-/* WRAPPERS */
-/******************************************************/
-
- /* Tag start and end of the wrappers.
- * If exceptions are installed farther removed
- * from the text area than 32M then the wrappers
- * must be moved to an area that is reachable
- * from where the prologues reside. Branches into
- * C-code are far.
- */
-
- .global __ppc_exc_wrappers_start
-__ppc_exc_wrappers_start = .
-
- /* Expand wrappers for different exception flavors */
-
- /* Standard/classic powerpc */
- WRAP _FLVR=std _PRI=std _SRR0=srr0 _SRR1=srr1 _RFI=rfi
-
- /* ppc405 has a critical exception using srr2/srr3 */
- WRAP _FLVR=p405_crit _PRI=crit _SRR0=srr2 _SRR1=srr3 _RFI=rfci
-
- /* bookE has critical exception using csrr0 cssr1 */
- WRAP _FLVR=bookE_crit _PRI=crit _SRR0=csrr0 _SRR1=csrr1 _RFI=rfci
-
- /* e500 has machine-check exception using mcsrr0 mcssr1 */
- WRAP _FLVR=e500_mchk _PRI=mchk _SRR0=mcsrr0 _SRR1=mcsrr1 _RFI=rfmci
-
- /* LR holds vector, VECTOR_REGISTER holds orig. LR */
- .global ppc_exc_wrap_auto
-ppc_exc_wrap_auto:
- stw FRAME_REGISTER, FRAME_OFFSET(r1)
-
- /* Find address where we jumped from */
- mflr FRAME_REGISTER
-
- /* Restore LR */
- mtlr VECTOR_REGISTER
-
- /* Compute vector into R3 */
- rlwinm VECTOR_REGISTER, FRAME_REGISTER, 24, 26, 31
-
- /*
- * We're now in almost the same state as if called by
- * min_prolog_std but we must skip saving FRAME_REGISTER
- * since that's done already
- */
- b wrap_no_save_frame_register_std
-
- .global ppc_exc_wrap_auto_async
-ppc_exc_wrap_auto_async:
- stwu r1, -EXCEPTION_FRAME_END(r1)
- stw FRAME_REGISTER, FRAME_OFFSET(r1)
- /* find address where we jumped from */
- mflr FRAME_REGISTER
- /* restore LR */
- mtlr VECTOR_REGISTER
- /* set upper bits to indicate that non-volatile
- * registers should not be saved/restored.
- */
- li VECTOR_REGISTER, 0xffff8000
- /* compute vector into R3 */
- rlwimi VECTOR_REGISTER, FRAME_REGISTER, 24, 26, 31
- /* we're now in almost the same state as if called by
- * min_prolog_std but we must skip saving FRAME_REGISTER
- * since that's done already
- */
- b wrap_no_save_frame_register_std
-
- .global __ppc_exc_wrappers_end
-__ppc_exc_wrappers_end = .