/******************************************************************************
*                                                                             *
* License Agreement                                                           *
*                                                                             *
* Copyright (c) 2003-2005 Altera Corporation, San Jose, California, USA.      *
* All rights reserved.                                                        *
*                                                                             *
* 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.                                                   *
*                                                                             *
* This agreement shall be governed in all respects by the laws of the State   *
* of California and by the laws of the United States of America.              *
*                                                                             *
******************************************************************************/

        /*
         * This is the trap exception handler for Nios2.
         */ 

        /*
         * Provide a label which can be used to pull this file in.
         */

        .section .exceptions.start
        .globl alt_exception_trap
alt_exception_trap:

        /*
         * Pull in the entry/exit code.
         */
        .globl alt_exception

        .section .exceptions.soft, "xa"

.Ltrap_handler:

        /*
         * Did a trap instruction cause the exception?
         *
         * The instruction which the exception occurred on has been loaded
         * into r2 by code in alt_exception_entry.S
         *
         */

#ifdef ALT_CPU_CPU_ARCH_NIOS2_R2
        movhi r3,0xb41d              /* upper half of trap opcode */
        ori   r3,r3,0x0020           /* lower half of trap opcode */
        beq   r2,r3,.Lis_trap
#ifdef NIOS2_CDX_PRESENT
        mov   r3,r2
        andhi r3,r3,0xffff
        ori   r3,r3,0xd009           /* trap.n opcode */
        beq   r2,r3,.Lis_trap
#endif
        br   .Lnot_trap
#else
        movhi r3,0x003b              /* upper half of trap opcode */
        ori   r3,r3,0x683a           /* lower half of trap opcode */
        bne   r2,r3,.Lnot_trap
#endif

.Lis_trap:
        /*
         *  There is no trap handler defined here, and so executing a trap
         *  instruction causes a software break.  If you provide a trap handler,
         *  then you must replace the break instruction below with your handler.
         *  Your handler must preserve ea and the usual callee saved registers.
         */

        break

        br   .Lexception_exit

.Lnot_trap:


        .section .exceptions.exit.label
.Lexception_exit:


