Changeset b73e57b in rtems for cpukit/score/cpu/sparc/cpu_asm.S


Ignore:
Timestamp:
Jul 9, 1999, 5:08:48 PM (21 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, 5, master
Children:
93180ea2
Parents:
cc17eba
Message:

Patch from Jiri Gaisler <jgais@…>:

+ interrupt masking correction
+ FPU rev.B workaround
+ minor erc32 related fixes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/score/cpu/sparc/cpu_asm.S

    rcc17eba rb73e57b  
    499499         */
    500500
     501/* This is a fix for ERC32 with FPU rev.B or rev.C */
     502
     503#if defined(FPU_REVB)
     504
     505
    501506        mov      %l0, %g5
    502         subcc    %l3, 0x11, %g0
     507        and      %l3, 0x0ff, %g4
     508        subcc    %g4, 0x08, %g0
     509        be       fpu_revb
     510        subcc    %g4, 0x11, %g0
    503511        bl       dont_fix_pil
    504         subcc    %l3, 0x1f, %g0
     512        subcc    %g4, 0x1f, %g0
    505513        bg       dont_fix_pil
    506         sll      %l3, 8, %g4
     514        sll      %g4, 8, %g4
    507515        and      %g4, SPARC_PSR_PIL_MASK, %g4
    508516        andn     %l0, SPARC_PSR_PIL_MASK, %g5
    509517        or       %g4, %g5, %g5
     518        srl      %l0, 12, %g4
     519        andcc    %g4, 1, %g0
     520        be       dont_fix_pil
     521        nop
     522        ba,a     enable_irq
     523
     524
     525fpu_revb:
     526        srl      %l0, 12, %g4   ! check if EF is set in %psr
     527        andcc    %g4, 1, %g0
     528        be       dont_fix_pil   ! if FPU disabled than continue as normal
     529        and      %l3, 0xff, %g4
     530        subcc    %g4, 0x08, %g0
     531        bne      enable_irq     ! if not a FPU exception then do two fmovs
     532        set      __sparc_fq, %g4
     533        st       %fsr, [%g4]    ! if FQ is not empty and FQ[1] = fmovs
     534        ld       [%g4], %g4     ! than this is bug 3.14
     535        srl      %g4, 13, %g4
     536        andcc    %g4, 1, %g0
     537        be       dont_fix_pil
     538        set      __sparc_fq, %g4
     539        std      %fq, [%g4]
     540        ld       [%g4+4], %g4
     541        set      0x81a00020, %g5
     542        subcc    %g4, %g5, %g0
     543        bne,a    dont_fix_pil2
     544        wr       %l0, SPARC_PSR_ET_MASK, %psr ! **** ENABLE TRAPS ****
     545        ba,a     simple_return
     546         
     547enable_irq:
     548        or       %g5, SPARC_PSR_PIL_MASK, %g4
     549        wr       %g4, SPARC_PSR_ET_MASK, %psr ! **** ENABLE TRAPS ****
     550        nop; nop; nop
     551        fmovs    %f0, %f0
     552        ba       dont_fix_pil
     553        fmovs    %f0, %f0
     554
     555        .data
     556        .global __sparc_fq
     557        .align 8
     558__sparc_fq:
     559        .word 0,0
     560
     561        .text
     562/* end of ERC32 FPU rev.B/C fix */
     563
     564#else
     565
     566        mov      %l0, %g5
     567        subcc    %g4, 0x11, %g0
     568        bl       dont_fix_pil
     569        subcc    %g4, 0x1f, %g0
     570        bg       dont_fix_pil
     571        sll      %g4, 8, %g4
     572        and      %g4, SPARC_PSR_PIL_MASK, %g4
     573        andn     %l0, SPARC_PSR_PIL_MASK, %g5
     574        or       %g4, %g5, %g5
     575#endif
     576
    510577dont_fix_pil:
    511578        wr       %g5, SPARC_PSR_ET_MASK, %psr ! **** ENABLE TRAPS ****
     579dont_fix_pil2:
    512580
    513581        /*
Note: See TracChangeset for help on using the changeset viewer.