Changeset 8a1dc71b in rtems


Ignore:
Timestamp:
May 29, 2015, 1:54:28 PM (5 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, master
Children:
1f6cdba6
Parents:
18d18e1
git-author:
Sebastian Huber <sebastian.huber@…> (05/29/15 13:54:28)
git-committer:
Sebastian Huber <sebastian.huber@…> (05/30/15 14:46:34)
Message:

sparc: Avoid new window for FP save/restore

Update #2270.

File:
1 edited

Legend:

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

    r18d18e1 r8a1dc71b  
    4545        PUBLIC(_CPU_Context_save_fp)
    4646SYM(_CPU_Context_save_fp):
    47         save    %sp, -CPU_MINIMUM_STACK_FRAME_SIZE, %sp
    48 
    4947        /*
    5048         *  The following enables the floating point unit.
    5149         */
    5250
    53         mov     %psr, %l0
    54         sethi   %hi(SPARC_PSR_EF_MASK), %l1
    55         or      %l1, %lo(SPARC_PSR_EF_MASK), %l1
    56         or      %l0, %l1, %l0
    57         mov     %l0, %psr                  ! **** ENABLE FLOAT ACCESS ****
     51        mov     %psr, %o1
     52        sethi   %hi(SPARC_PSR_EF_MASK), %o2
     53        or      %o2, %lo(SPARC_PSR_EF_MASK), %o2
     54        or      %o1, %o2, %o1
     55        mov     %o1, %psr                  ! **** ENABLE FLOAT ACCESS ****
    5856        nop; nop; nop;                     ! Need three nops before EF is
    59         ld      [%i0], %l0                 ! active due to pipeline delay!!!
    60         std     %f0, [%l0 + FO_F1_OFFSET]
    61         std     %f2, [%l0 + F2_F3_OFFSET]
    62         std     %f4, [%l0 + F4_F5_OFFSET]
    63         std     %f6, [%l0 + F6_F7_OFFSET]
    64         std     %f8, [%l0 + F8_F9_OFFSET]
    65         std     %f10, [%l0 + F1O_F11_OFFSET]
    66         std     %f12, [%l0 + F12_F13_OFFSET]
    67         std     %f14, [%l0 + F14_F15_OFFSET]
    68         std     %f16, [%l0 + F16_F17_OFFSET]
    69         std     %f18, [%l0 + F18_F19_OFFSET]
    70         std     %f20, [%l0 + F2O_F21_OFFSET]
    71         std     %f22, [%l0 + F22_F23_OFFSET]
    72         std     %f24, [%l0 + F24_F25_OFFSET]
    73         std     %f26, [%l0 + F26_F27_OFFSET]
    74         std     %f28, [%l0 + F28_F29_OFFSET]
    75         std     %f30, [%l0 + F3O_F31_OFFSET]
    76         st      %fsr, [%l0 + FSR_OFFSET]
    77         ret
    78         restore
     57        ld      [%o0], %o1                 ! active due to pipeline delay!!!
     58        std     %f0, [%o1 + FO_F1_OFFSET]
     59        std     %f2, [%o1 + F2_F3_OFFSET]
     60        std     %f4, [%o1 + F4_F5_OFFSET]
     61        std     %f6, [%o1 + F6_F7_OFFSET]
     62        std     %f8, [%o1 + F8_F9_OFFSET]
     63        std     %f10, [%o1 + F1O_F11_OFFSET]
     64        std     %f12, [%o1 + F12_F13_OFFSET]
     65        std     %f14, [%o1 + F14_F15_OFFSET]
     66        std     %f16, [%o1 + F16_F17_OFFSET]
     67        std     %f18, [%o1 + F18_F19_OFFSET]
     68        std     %f20, [%o1 + F2O_F21_OFFSET]
     69        std     %f22, [%o1 + F22_F23_OFFSET]
     70        std     %f24, [%o1 + F24_F25_OFFSET]
     71        std     %f26, [%o1 + F26_F27_OFFSET]
     72        std     %f28, [%o1 + F28_F29_OFFSET]
     73        std     %f30, [%o1 + F3O_F31_OFFSET]
     74        jmp     %o7 + 8
     75         st     %fsr, [%o1 + FSR_OFFSET]
    7976
    8077/*
     
    9491        PUBLIC(_CPU_Context_restore_fp)
    9592SYM(_CPU_Context_restore_fp):
    96         save    %sp, -CPU_MINIMUM_STACK_FRAME_SIZE , %sp
    97 
    9893        /*
    9994         *  The following enables the floating point unit.
    10095         */
    10196
    102         mov     %psr, %l0
    103         sethi   %hi(SPARC_PSR_EF_MASK), %l1
    104         or      %l1, %lo(SPARC_PSR_EF_MASK), %l1
    105         or      %l0, %l1, %l0
    106         mov     %l0, %psr                  ! **** ENABLE FLOAT ACCESS ****
     97        mov     %psr, %o1
     98        sethi   %hi(SPARC_PSR_EF_MASK), %o2
     99        or      %o2, %lo(SPARC_PSR_EF_MASK), %o2
     100        or      %o1, %o2, %o1
     101        mov     %o1, %psr                  ! **** ENABLE FLOAT ACCESS ****
    107102        nop; nop; nop;                     ! Need three nops before EF is
    108         ld      [%i0], %l0                 ! active due to pipeline delay!!!
    109         ldd     [%l0 + FO_F1_OFFSET], %f0
    110         ldd     [%l0 + F2_F3_OFFSET], %f2
    111         ldd     [%l0 + F4_F5_OFFSET], %f4
    112         ldd     [%l0 + F6_F7_OFFSET], %f6
    113         ldd     [%l0 + F8_F9_OFFSET], %f8
    114         ldd     [%l0 + F1O_F11_OFFSET], %f10
    115         ldd     [%l0 + F12_F13_OFFSET], %f12
    116         ldd     [%l0 + F14_F15_OFFSET], %f14
    117         ldd     [%l0 + F16_F17_OFFSET], %f16
    118         ldd     [%l0 + F18_F19_OFFSET], %f18
    119         ldd     [%l0 + F2O_F21_OFFSET], %f20
    120         ldd     [%l0 + F22_F23_OFFSET], %f22
    121         ldd     [%l0 + F24_F25_OFFSET], %f24
    122         ldd     [%l0 + F26_F27_OFFSET], %f26
    123         ldd     [%l0 + F28_F29_OFFSET], %f28
    124         ldd     [%l0 + F3O_F31_OFFSET], %f30
    125         ld      [%l0 + FSR_OFFSET], %fsr
    126         ret
    127         restore
     103        ld      [%o0], %o1                 ! active due to pipeline delay!!!
     104        ldd     [%o1 + FO_F1_OFFSET], %f0
     105        ldd     [%o1 + F2_F3_OFFSET], %f2
     106        ldd     [%o1 + F4_F5_OFFSET], %f4
     107        ldd     [%o1 + F6_F7_OFFSET], %f6
     108        ldd     [%o1 + F8_F9_OFFSET], %f8
     109        ldd     [%o1 + F1O_F11_OFFSET], %f10
     110        ldd     [%o1 + F12_F13_OFFSET], %f12
     111        ldd     [%o1 + F14_F15_OFFSET], %f14
     112        ldd     [%o1 + F16_F17_OFFSET], %f16
     113        ldd     [%o1 + F18_F19_OFFSET], %f18
     114        ldd     [%o1 + F2O_F21_OFFSET], %f20
     115        ldd     [%o1 + F22_F23_OFFSET], %f22
     116        ldd     [%o1 + F24_F25_OFFSET], %f24
     117        ldd     [%o1 + F26_F27_OFFSET], %f26
     118        ldd     [%o1 + F28_F29_OFFSET], %f28
     119        ldd     [%o1 + F3O_F31_OFFSET], %f30
     120        jmp     %o7 + 8
     121         ld     [%o1 + FSR_OFFSET], %fsr
    128122
    129123#endif /* SPARC_HAS_FPU */
Note: See TracChangeset for help on using the changeset viewer.