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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [rtems-20020807/] [cpukit/] [score/] [cpu/] [a29k/] [sig.S] - Rev 1780

Go to most recent revision | Compare with Previous | Blame | View Log

;/*
; *  sig.S,v 1.2 2000/09/22 20:34:15 joel Exp
; */

;       .include "register.ah"
#include <amd.ah>
#include <pswmacro.ah>
        .comm   WindowSize,4
        .text
        .reg    it0,gr64
        .reg    it1,gr65
        .reg    it2,gr66
        .reg    it3,gr67
        .reg    v0,gr96
        .reg    v1,gr97
        .reg    v2,gr98
        .reg    v3,gr99
        .reg    trapreg,it0
        .reg    FPStat0,gr79
        .reg    FPStat1,gr79
        .reg    FPStat2,gr79
        .reg    FPStat3,gr79

        .global _intr14
_intr14:
#if 0
        const   it3,14
        sup_sv
        jmp     interrupt
        nop
#endif

        .global _intr18
_intr18:
#if 0
        const   it3,18
        sup_sv
        jmp     interrupt
        nop
#endif

        .global _intr19
_intr19:
#if 0
        const   it3,19
        sup_sv
        jmp     interrupt
        nop
#endif

interrupt:
#if 0
        push    msp,it3
        push    msp,gr1
        push    msp,rab
        const   it0,512
        sub     rab,rfb,it0     ;set rab = rfb-512
        pushsr  msp,it0,pc0
        pushsr  msp,it0,pc1
        pushsr  msp,it0,pc2
        pushsr  msp,it0,cha
        pushsr  msp,it0,chd
        pushsr  msp,it0,chc
        pushsr  msp,it0,alu
        pushsr  msp,it0,ops
        push    msp,tav
;
;now come off freeze, and go to user-mode code.
;ensure load/store does not restart
;
        mtsrim  chc,0

        mfsr    it0, cps
        const   it1, FZ
        consth  it1, FZ
        andn    it0, it0, it1
        const   it1,(DI|TD)
        consth  it1,(DI|TD)
        or      it0,it1,it0
        mtsr    cps, it0
; fall through to _sigcode
#endif

        .extern _a29k_ISR_Handler
        .global _sigcode
_sigcode:
#if 0

        push    msp, lr1                                ; R stack support
        push    msp, rfb                                ; support
        push    msp, msp                                ; M stack support

;       push    msp, FPStat0                            ; Floating point 0
;       push    msp, FPStat1                            ; Floating point 1
;       push    msp, FPStat2                            ; Floating point 2
;       push    msp, FPStat3                            ; Floating point 3
        sub     msp,msp,4*4

        pushsr  msp, tav, IPA                           ; save user mode special
        pushsr  msp, tav, IPB                           ; save user mode special
        pushsr  msp, tav, IPC                           ; save user mode special
        pushsr  msp, tav, Q                             ; save user mode special

        sub     msp, msp, 29*4                          ; gr96-gr124
        mtsrim  cr, 29-1                                ;
        storem  0, 0, gr96, msp                         ;


        const   v0, WindowSize                          ; Window Size value
        consth  v0, WindowSize                          ; Window Size value
        load    0, 0, v0, v0                            ; load  Window size     
        add     v2, msp, SIGCTX_RAB                     ; intr RAB value        

        load    0, 0, v2, v2                            ; rab value

        sub     v1, rfb, v2                             ;
        cpgeu   v1, v1, v0                              ;
        jmpt    v1, nfill                               ; jmp if spill
        add     v1, gr1, 8                              ;

        cpgtu   v1, v1, rfb                             ; longjump test
        jmpt    v1, nfill                               ;
        nop                                             ;

ifill:
        add     v0, msp, SIGCTX_RAB+4                   ;
        push    v0, rab                                 ;
        const   v2, fill+4                              ;
        consth  v2, fill+4                              ;

        push    v0, v2                                  ; resave PC0
        sub     v2, v2, 4                               ;
        push    v0, v2                                  ; resave PC1
        const   v2, 0                                   ;
        
        sub     v0, v0, 3*4                             ;
        push    v0, v2                                  ;

nfill:
        cpgtu   v0, gr1, rfb                            ; if gr1>rfb -> gr1=rfb 
        jmpt    v0, lower                               ;
        cpltu   v0, gr1, rab                            ;
        jmpt    v0, raise                               ; gr1<rab then gr1=rab
        nop                                             ;

sendsig:
        sub     gr1, gr1, RALLOC                        ;
        asgeu   V_SPILL, gr1, rab                       ;
        add     lr1, rfb, 0                             ;
        add     v1, msp, SIGCTX_SIG                     ;

cont:
        add     lr2,it3,0                               ; signal #
        call    lr0, _a29k_ISR_Handler                  ; call the handler
        nop

        nop                                             ; WASTE
        jmp     _a29k_sigdfl                            ; return code
        nop                                             ; WASTE
        nop                                             ; ALIGN

lower:
        jmp     sendsig                                 ;
        add     gr1, rfb, 0                             ;
raise:
        jmp     sendsig                                 ;
        add     gr1, rab, 0                             ;
#endif

        
        .global _a29k_sigdfl_sup
_a29k_sigdfl_sup:
#if 0
        repair_R_stack                                  ;
        repair_regs                                     ;
        sig_return                                      ; return
        halt                                            ; never executes
#endif


        .global _sigret
_sigret:
#if 0
;assume msp points to tav
        mfsr    it0,cps
        const   it1,FZ
        or      it1,it0,it1
        mtsr    cps,it1
        nop
        nop
_sigret1:
        pop     tav,msp
        popsr   ops,it0,msp
        popsr   alu,it0,msp
        popsr   chc,it0,msp
        popsr   chd,it0,msp
        popsr   cha,it0,msp
        popsr   pc2,it0,msp
        popsr   pc1,it0,msp
        popsr   pc0,it0,msp
        pop     rab,msp
        pop     it0,msp
        add     gr1,it0,0
        add     msp,msp,4       ;discount signal
        iret
#endif

_a29k_sigdfl:
#if 0
        asneq   SIGDFL,gr1,gr1
        jmpi    lr0
        nop
#endif

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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