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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-stable/] [newlib-1.18.0/] [newlib/] [libc/] [machine/] [or32/] [or1k-support-asm.S] - Diff between revs 551 and 812

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

Rev 551 Rev 812
Line 409... Line 409...
        l.nop
        l.nop
        /* What is IRQ function table offset? */
        /* What is IRQ function table offset? */
        l.addi  r5,r4,-1
        l.addi  r5,r4,-1
        l.slli  r6,r5,2
        l.slli  r6,r5,2
        /* Add this to table bases */
        /* Add this to table bases */
        l.add   r6,r6,r7
        l.add   r14,r6,r7
        l.add   r13,r6,r12
        l.add   r13,r6,r12
 
 
        /* Fetch handler function address */
        /* Fetch handler function address */
        l.lwz   r6,0(r6)
        l.lwz   r14,0(r14)
 
 
        /* Double check it's valid, compare against INTERRUPT_HANDLER_NOT_SET */
        /* Double check it's valid, compare against INTERRUPT_HANDLER_NOT_SET */
        l.sfne  r6,r8
        l.sfne  r14,r8
        /* Skip if no handler: TODO: Indicate interrupt fired but no handler*/
        /* Skip if no handler: TODO: Indicate interrupt fired but no handler*/
        l.bnf .L1
        l.bnf .L1
        l.nop
        l.nop
 
 
        /* Pull out data pointer from table, save r3, we'll write over it */
        /* Pull out data pointer from table, save r3, we'll write over it */
        l.sw    4(r1),r3
        l.sw    4(r1),r3
        l.lwz   r3,0(r13)
        l.lwz   r3,0(r13)
        /* Call handler, save r5 in delay slot */
        /* Call handler, save r5 in delay slot */
        l.jalr  r5
        l.jalr  r14
        l.sw    8(r1),r5
        l.sw    8(r1),r5
 
 
        /* Reload r3,r5 */
        /* Reload r3,r5 */
        l.lwz   r3,4(r1)
        l.lwz   r3,4(r1)
        l.lwz   r5,8(r1)
        l.lwz   r5,8(r1)
Line 461... Line 461...
or1k_interrupt_handler_add:
or1k_interrupt_handler_add:
        l.addi  r1,r1,-4
        l.addi  r1,r1,-4
        l.sw    0(r1),r6
        l.sw    0(r1),r6
        /* Convert interrupt number into word address */
        /* Convert interrupt number into word address */
        l.slli  r3,r3,2
        l.slli  r3,r3,2
        l.addi  r3,r3,-4
 
        /* Get address of interrupt handler table */
        /* Get address of interrupt handler table */
        l.movhi r6,hi(or1k_interrupt_handler_table)
        l.movhi r6,hi(or1k_interrupt_handler_table)
        l.ori   r6,r6,lo(or1k_interrupt_handler_table)
        l.ori   r6,r6,lo(or1k_interrupt_handler_table)
        /* Add handler offset to table base */
        /* Add handler offset to table base */
        l.add   r6,r6,r3
        l.add   r6,r6,r3

powered by: WebSVN 2.1.0

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