| ###################################-*-asm*- |
| # |
| # Copyright (c) 2001 Xilinx, Inc. All rights reserved. |
| # |
| # Xilinx, Inc. CONFIDENTIAL |
| # |
| # XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS" AS A |
| # COURTESY TO YOU. BY PROVIDING THIS DESIGN, CODE, OR INFORMATION AS |
| # ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION OR |
| # STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS IMPLEMENTATION |
| # IS FREE FROM ANY CLAIMS OF INFRINGEMENT, AND YOU ARE RESPONSIBLE |
| # FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE FOR YOUR IMPLEMENTATION. |
| # XILINX EXPRESSLY DISCLAIMS ANY WARRANTY WHATSOEVER WITH RESPECT TO |
| # THE ADEQUACY OF THE IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO |
| # ANY WARRANTIES OR REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE |
| # FROM CLAIMS OF INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY |
| # AND FITNESS FOR A PARTICULAR PURPOSE. |
| # |
| # crt0.s |
| # |
| # C RunTime: |
| # Used for initialization of small data |
| # anchors and stack for programs compiled using |
| # Xilinx Gnu Tools. This routine also intializes the |
| # exception and interrupt handlers |
| # |
| # $Id: crt0.s,v 1.1.4.2 2005/05/26 21:50:39 vasanth Exp $ |
| # |
| ####################################### |
| |
| /* Vector map (Interrupts, Exceptions, Breakpoints) */ |
| # # 0x00 # Jump to Start |
| # # 0x04 # nop |
| # # 0x08 # Imm instr for soft exception address [Hi halfword] |
| # # 0x0c # Jump to sof Exception handler [Lo halfword] |
| # # 0x10 # Imm instr for interrupt address [Hi halfword] |
| # # 0x14 # Jump to interrupt handler [Lo halfword] |
| # # 0x18 # nop - Reserved for breakpoint vector |
| # # 0x1C # nop - Reserved for breakpoint vector |
| # # 0x20 # Imm instr for hw exception address [Hi halfword] |
| # # 0x24 # Jump instr to hw exception handler [Lo halfword] |
| |
| .globl _start |
| |
| /* Set the exception and interrupt address vectors */ |
| /* to jump to the appropriate handlers */ |
| |
| .align 2 |
| .ent _start |
| _start: |
| bri _start1 # 0x00 |
| nop # 0x04 |
| nop # 0x08 # Reserve space for software exception vector |
| nop # 0x0c |
| nop # 0x10 # Reserve space for interrupt vector |
| nop # 0x14 |
| nop # 0x18 # Reserve space for breakpoint vector |
| nop # 0x1c |
| nop # 0x18 # Reserve space for hw exception vector |
| nop # 0x1c |
| |
| _start1: |
| /* Set the Small Data Anchors and the Stack pointer */ |
| la r13, r0, _SDA_BASE_ |
| la r2, r0, _SDA2_BASE_ |
| la r1, r0, _stack-16 # 16 bytes (4 words are needed by |
| # crt for args and link reg ) |
| |
| /* Set the opcodes brai and imm for handlers */ |
| la r6,r0,0xb8080000 # [opcode for brai ] |
| swi r6,r0,0x4 # [brai opcode for reset] |
| swi r6,r0,0xc # [brai opcode for exception] |
| swi r6,r0,0x14 # [brai opcode for interrupt] |
| swi r6,r0,0x24 # [brai opcode for hw exceptions] |
| |
| la r6,r0,0xb0000000 # [opcode for imm ] |
| swi r6,r0,0x0 # [imm opcode for reset] |
| swi r6,r0,0x8 # [imm opcode for exception] |
| swi r6,r0,0x10 # [imm opocde for interrupt] |
| swi r6,r0,0x20 # [imm opocde for hw exceptions] |
| |
| /* Set Reset vector */ |
| la r6,r0,_start1 |
| sw r6,r1,r0 |
| lhu r7,r1,r0 |
| shi r7,r0, 0x2 # [imm for reset] |
| shi r6,r0, 0x6 # [lower half for reset] |
| |
| /* Set Software Exception Handler */ |
| la r6,r0,_exception_handler |
| sw r6,r1,r0 |
| lhu r7,r1,r0 |
| shi r7,r0, 0xa # [imm for exception] |
| shi r6,r0, 0xe # [lower half for exception ] |
| |
| /* Set Interrupt Handler */ |
| la r6,r0,_interrupt_handler |
| sw r6,r1,r0 |
| lhu r7,r1,r0 |
| shi r7,r0, 0x12 # [imm for exception] |
| shi r6,r0, 0x16 # [lower half for intterupt ] |
| |
| /* Set HW Exception Handler */ |
| la r6,r0,_hw_exception_handler |
| sw r6,r1,r0 |
| lhu r7,r1,r0 |
| shi r7,r0, 0x22 # [imm for exception] |
| shi r6,r0, 0x26 # [lower half for hw exception] |
| |
| /* initialize bss sections */ |
| brlid r15,_crtinit |
| nop |
| |
| /* Adjust the stack pointer */ |
| addi r1,r1,16 |
| |
| /* Fall through to exit */ |
| .end _start |
| |
| /* Use this exit function */ |
| .globl exit # exit library call |
| .ent exit |
| exit: |
| bri exit |
| .end exit |
| |