OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [ecos-3.0/] [packages/] [hal/] [openrisc/] [arch/] [current/] [src/] [vectors.S] - Diff between revs 838 and 843

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 838 Rev 843
Line 400... Line 400...
        load32i r4,0x100
        load32i r4,0x100
        load32i r3,rom_vectors
        load32i r3,rom_vectors
        load32i r5,rom_vectors_end
        load32i r5,rom_vectors_end
1:      l.sfeq  r3,r5
1:      l.sfeq  r3,r5
        l.bf    2f
        l.bf    2f
        l.lwz   r6,0(r3)
        l.lwz   r6,0(r3) # Note that this might be a branch slot
        l.sw    0(r4),r6
        l.sw    0(r4),r6
        l.addi  r3,r3,4
        l.addi  r3,r3,4
#ifdef CYGHWR_BRANCH_SLOT_IMPLEMENTED
#ifdef CYGHWR_BRANCH_SLOT_IMPLEMENTED
        l.j     1b
        l.j     1b
        l.addi  r4,r4,4         # delay slot
        l.addi  r4,r4,4         # delay slot
Line 418... Line 418...
        load32i r3,__rom_data_start
        load32i r3,__rom_data_start
        load32i r4,__ram_data_start
        load32i r4,__ram_data_start
        load32i r5,__ram_data_end
        load32i r5,__ram_data_end
1:      l.sfeq  r4,r5
1:      l.sfeq  r4,r5
        l.bf    2f
        l.bf    2f
        l.lwz   r6,0(r3)
        l.lwz   r6,0(r3) # Note that this might be a branch slot
        l.sw    0(r4),r6
        l.sw    0(r4),r6
        l.addi  r3,r3,4
        l.addi  r3,r3,4
#ifdef CYGHWR_BRANCH_SLOT_IMPLEMENTED
#ifdef CYGHWR_BRANCH_SLOT_IMPLEMENTED
        l.j     1b
        l.j     1b
        l.addi  r4,r4,4         # delay slot
        l.addi  r4,r4,4         # delay slot
Line 565... Line 565...
        l.or    r6,sp,sp                        # Stash SP for later
        l.or    r6,sp,sp                        # Stash SP for later
        load32i r7,__interrupt_stack            # stack top (highest addr + 1)
        load32i r7,__interrupt_stack            # stack top (highest addr + 1)
        load32i r8,__interrupt_stack_base       # stack base (lowest addr)
        load32i r8,__interrupt_stack_base       # stack base (lowest addr)
        l.sfltu sp,r8                           # if (sp < __interrupt_stack_base)
        l.sfltu sp,r8                           # if (sp < __interrupt_stack_base)
        l.bf    1f                              #    switch to interrupt stack
        l.bf    1f                              #    switch to interrupt stack
        l.sfltu sp,r7                           # if (sp < __interrupt_stack_top)
        l.sfltu sp,r7                           # Note that this might be a branch slot
 
                                                # if (sp < __interrupt_stack_top)
        l.bf   2f                               #    already on interrupt stack
        l.bf   2f                               #    already on interrupt stack
#ifdef CYGHWR_BRANCH_SLOT_IMPLEMENTED
#ifdef CYGHWR_BRANCH_SLOT_IMPLEMENTED
        l.nop                                   # delay slot
        l.nop                                   # delay slot
#endif
#endif
1:      l.or    sp,r7,r7                        # Switch to interrupt stack
1:      l.or    sp,r7,r7                        # Switch to interrupt stack
Line 647... Line 648...
check_for_external_interrupts:
check_for_external_interrupts:
        l.ori   r3,r0,0
        l.ori   r3,r0,0
2:      l.andi  r11,r9,1                        # Test low bit
2:      l.andi  r11,r9,1                        # Test low bit
        l.sfnei r11,0
        l.sfnei r11,0
        l.bf    3f
        l.bf    3f
        l.srli  r9,r9,1                         # Shift right 1 bit
        l.srli  r9,r9,1                         # Shift right 1 bit, note that this might be a branch slot
#ifdef CYGHWR_BRANCH_SLOT_IMPLEMENTED
#ifdef CYGHWR_BRANCH_SLOT_IMPLEMENTED
        l.j     2b
        l.j     2b
        l.addi  r3,r3,1                         # Delay slot
        l.addi  r3,r3,1                         # Delay slot
#else
#else
        l.addi  r3,r3,1
        l.addi  r3,r3,1
Line 793... Line 794...
        l.lwz   r3,   3 * OR1K_GPRSIZE(sp)
        l.lwz   r3,   3 * OR1K_GPRSIZE(sp)
        l.lwz    sp,  1 * OR1K_GPRSIZE(sp)
        l.lwz    sp,  1 * OR1K_GPRSIZE(sp)
 
 
        # All done, restore CPU state and continue
        # All done, restore CPU state and continue
        l.rfe
        l.rfe
#ifdef CYGHWR_BRANCH_SLOT_IMPLEMENTED
        # l.rfe does not have a branch slot
        l.nop           # Delay slot
 
#endif
 
 
 
 
 
##-----------------------------------------------------------------------------
##-----------------------------------------------------------------------------
## Execute pending DSRs on the interrupt stack with interrupts enabled.
## Execute pending DSRs on the interrupt stack with interrupts enabled.
## Note: this can only be called from code running on a thread stack
## Note: this can only be called from code running on a thread stack

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.