Changeset 8d785f7 in rtems


Ignore:
Timestamp:
Jul 19, 2016, 4:43:10 AM (3 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
c2a4b8bf
Parents:
55bde66
git-author:
Sebastian Huber <sebastian.huber@…> (07/19/16 04:43:10)
git-committer:
Sebastian Huber <sebastian.huber@…> (07/19/16 06:12:32)
Message:

bsps/powerpc: Fix AtliVec? context switch

Properly pass the stack aligned context to _CPU_Context_switch_altivec()
since _CPU_altivec_ctxt_off defined via ppc_context.

Close #2761.

Location:
c/src/lib/libcpu/powerpc
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libcpu/powerpc/mpc6xx/altivec/vec_sup.c

    r55bde66 r8d785f7  
    235235         */
    236236        _CPU_altivec_ctxt_off  = offsetof(ppc_context, altivec);
     237
     238        /*
     239         * See ppc_get_context() and PPC_CONTEXT_OFFSET_GPR1
     240         */
     241        _CPU_altivec_ctxt_off += PPC_DEFAULT_CACHE_LINE_SIZE;
     242
    237243        /*
    238244         * Add space possibly needed for alignment
  • c/src/lib/libcpu/powerpc/new-exceptions/cpu_asm.S

    r55bde66 r8d785f7  
    2424 *  On-Line Applications Research Corporation (OAR).
    2525 *
    26  *  Copyright (c) 2011-2015 embedded brains GmbH
     26 *  Copyright (c) 2011, 2016 embedded brains GmbH
    2727 *
    2828 *  The license and distribution terms for this file may in
     
    256256        /* Align to a cache line */
    257257        clrrwi  r3, r3, PPC_DEFAULT_CACHE_LINE_POWER
    258         clrrwi  r5, r4, PPC_DEFAULT_CACHE_LINE_POWER
     258        clrrwi  r4, r4, PPC_DEFAULT_CACHE_LINE_POWER
    259259
    260260        DATA_CACHE_ZERO_AND_TOUCH(r10, PPC_CONTEXT_CACHE_LINE_0)
     
    411411
    412412        /* Check the is executing indicator of the heir context */
    413         addi    r6, r5, PPC_CONTEXT_OFFSET_IS_EXECUTING
     413        addi    r6, r4, PPC_CONTEXT_OFFSET_IS_EXECUTING
    414414        lwarx   r7, r0, r6
    415415        cmpwi   r7, 0
     
    423423#endif
    424424
    425         /* Restore context from r5 */
     425        /* Restore context from r4 */
    426426restore_context:
    427427
    428428#if defined(__ALTIVEC__) && !defined(PPC_MULTILIB_ALTIVEC)
    429         mr      r14, r5
     429        mr      r14, r4
    430430        .extern _CPU_Context_switch_altivec
    431431        bl      _CPU_Context_switch_altivec
    432         mr      r5, r14
    433 #endif
    434 
    435         lwz     r1, PPC_CONTEXT_OFFSET_GPR1(r5)
    436         lwz     r6, PPC_CONTEXT_OFFSET_MSR(r5)
    437         lwz     r7, PPC_CONTEXT_OFFSET_LR(r5)
    438         lwz     r8, PPC_CONTEXT_OFFSET_CR(r5)
    439 
    440         PPC_GPR_LOAD    r14, PPC_CONTEXT_OFFSET_GPR14(r5)
    441         PPC_GPR_LOAD    r15, PPC_CONTEXT_OFFSET_GPR15(r5)
     432        mr      r4, r14
     433#endif
     434
     435        lwz     r1, PPC_CONTEXT_OFFSET_GPR1(r4)
     436        lwz     r6, PPC_CONTEXT_OFFSET_MSR(r4)
     437        lwz     r7, PPC_CONTEXT_OFFSET_LR(r4)
     438        lwz     r8, PPC_CONTEXT_OFFSET_CR(r4)
     439
     440        PPC_GPR_LOAD    r14, PPC_CONTEXT_OFFSET_GPR14(r4)
     441        PPC_GPR_LOAD    r15, PPC_CONTEXT_OFFSET_GPR15(r4)
    442442
    443443        DATA_CACHE_TOUCH(r0, r1)
    444444
    445         PPC_GPR_LOAD    r16, PPC_CONTEXT_OFFSET_GPR16(r5)
    446         PPC_GPR_LOAD    r17, PPC_CONTEXT_OFFSET_GPR17(r5)
    447         PPC_GPR_LOAD    r18, PPC_CONTEXT_OFFSET_GPR18(r5)
    448         PPC_GPR_LOAD    r19, PPC_CONTEXT_OFFSET_GPR19(r5)
    449 
    450         PPC_GPR_LOAD    r20, PPC_CONTEXT_OFFSET_GPR20(r5)
    451         PPC_GPR_LOAD    r21, PPC_CONTEXT_OFFSET_GPR21(r5)
    452         PPC_GPR_LOAD    r22, PPC_CONTEXT_OFFSET_GPR22(r5)
    453         PPC_GPR_LOAD    r23, PPC_CONTEXT_OFFSET_GPR23(r5)
    454 
    455         PPC_GPR_LOAD    r24, PPC_CONTEXT_OFFSET_GPR24(r5)
    456         PPC_GPR_LOAD    r25, PPC_CONTEXT_OFFSET_GPR25(r5)
    457         PPC_GPR_LOAD    r26, PPC_CONTEXT_OFFSET_GPR26(r5)
    458         PPC_GPR_LOAD    r27, PPC_CONTEXT_OFFSET_GPR27(r5)
    459 
    460         PPC_GPR_LOAD    r28, PPC_CONTEXT_OFFSET_GPR28(r5)
    461         PPC_GPR_LOAD    r29, PPC_CONTEXT_OFFSET_GPR29(r5)
    462         PPC_GPR_LOAD    r30, PPC_CONTEXT_OFFSET_GPR30(r5)
    463         PPC_GPR_LOAD    r31, PPC_CONTEXT_OFFSET_GPR31(r5)
    464 
    465         lwz     r2, PPC_CONTEXT_OFFSET_GPR2(r5)
     445        PPC_GPR_LOAD    r16, PPC_CONTEXT_OFFSET_GPR16(r4)
     446        PPC_GPR_LOAD    r17, PPC_CONTEXT_OFFSET_GPR17(r4)
     447        PPC_GPR_LOAD    r18, PPC_CONTEXT_OFFSET_GPR18(r4)
     448        PPC_GPR_LOAD    r19, PPC_CONTEXT_OFFSET_GPR19(r4)
     449
     450        PPC_GPR_LOAD    r20, PPC_CONTEXT_OFFSET_GPR20(r4)
     451        PPC_GPR_LOAD    r21, PPC_CONTEXT_OFFSET_GPR21(r4)
     452        PPC_GPR_LOAD    r22, PPC_CONTEXT_OFFSET_GPR22(r4)
     453        PPC_GPR_LOAD    r23, PPC_CONTEXT_OFFSET_GPR23(r4)
     454
     455        PPC_GPR_LOAD    r24, PPC_CONTEXT_OFFSET_GPR24(r4)
     456        PPC_GPR_LOAD    r25, PPC_CONTEXT_OFFSET_GPR25(r4)
     457        PPC_GPR_LOAD    r26, PPC_CONTEXT_OFFSET_GPR26(r4)
     458        PPC_GPR_LOAD    r27, PPC_CONTEXT_OFFSET_GPR27(r4)
     459
     460        PPC_GPR_LOAD    r28, PPC_CONTEXT_OFFSET_GPR28(r4)
     461        PPC_GPR_LOAD    r29, PPC_CONTEXT_OFFSET_GPR29(r4)
     462        PPC_GPR_LOAD    r30, PPC_CONTEXT_OFFSET_GPR30(r4)
     463        PPC_GPR_LOAD    r31, PPC_CONTEXT_OFFSET_GPR31(r4)
     464
     465        lwz     r2, PPC_CONTEXT_OFFSET_GPR2(r4)
    466466
    467467#ifdef PPC_MULTILIB_ALTIVEC
    468468        li      r9, PPC_CONTEXT_OFFSET_V20
    469         lvx     v20, r5, r9
     469        lvx     v20, r4, r9
    470470        li      r9, PPC_CONTEXT_OFFSET_V21
    471         lvx     v21, r5, r9
     471        lvx     v21, r4, r9
    472472        li      r9, PPC_CONTEXT_OFFSET_V22
    473         lvx     v22, r5, r9
     473        lvx     v22, r4, r9
    474474        li      r9, PPC_CONTEXT_OFFSET_V23
    475         lvx     v23, r5, r9
     475        lvx     v23, r4, r9
    476476        li      r9, PPC_CONTEXT_OFFSET_V24
    477         lvx     v24, r5, r9
     477        lvx     v24, r4, r9
    478478        li      r9, PPC_CONTEXT_OFFSET_V25
    479         lvx     v25, r5, r9
     479        lvx     v25, r4, r9
    480480        li      r9, PPC_CONTEXT_OFFSET_V26
    481         lvx     v26, r5, r9
     481        lvx     v26, r4, r9
    482482        li      r9, PPC_CONTEXT_OFFSET_V27
    483         lvx     v27, r5, r9
     483        lvx     v27, r4, r9
    484484        li      r9, PPC_CONTEXT_OFFSET_V28
    485         lvx     v28, r5, r9
     485        lvx     v28, r4, r9
    486486        li      r9, PPC_CONTEXT_OFFSET_V29
    487         lvx     v29, r5, r9
     487        lvx     v29, r4, r9
    488488        li      r9, PPC_CONTEXT_OFFSET_V30
    489         lvx     v30, r5, r9
     489        lvx     v30, r4, r9
    490490        li      r9, PPC_CONTEXT_OFFSET_V31
    491         lvx     v31, r5, r9
    492         lwz     r9, PPC_CONTEXT_OFFSET_VRSAVE(r5)
     491        lvx     v31, r4, r9
     492        lwz     r9, PPC_CONTEXT_OFFSET_VRSAVE(r4)
    493493        mtvrsave        r9
    494494#endif
    495495
    496496#ifdef PPC_MULTILIB_FPU
    497         lfd     f14, PPC_CONTEXT_OFFSET_F14(r5)
    498         lfd     f15, PPC_CONTEXT_OFFSET_F15(r5)
    499         lfd     f16, PPC_CONTEXT_OFFSET_F16(r5)
    500         lfd     f17, PPC_CONTEXT_OFFSET_F17(r5)
    501         lfd     f18, PPC_CONTEXT_OFFSET_F18(r5)
    502         lfd     f19, PPC_CONTEXT_OFFSET_F19(r5)
    503         lfd     f20, PPC_CONTEXT_OFFSET_F20(r5)
    504         lfd     f21, PPC_CONTEXT_OFFSET_F21(r5)
    505         lfd     f22, PPC_CONTEXT_OFFSET_F22(r5)
    506         lfd     f23, PPC_CONTEXT_OFFSET_F23(r5)
    507         lfd     f24, PPC_CONTEXT_OFFSET_F24(r5)
    508         lfd     f25, PPC_CONTEXT_OFFSET_F25(r5)
    509         lfd     f26, PPC_CONTEXT_OFFSET_F26(r5)
    510         lfd     f27, PPC_CONTEXT_OFFSET_F27(r5)
    511         lfd     f28, PPC_CONTEXT_OFFSET_F28(r5)
    512         lfd     f29, PPC_CONTEXT_OFFSET_F29(r5)
    513         lfd     f30, PPC_CONTEXT_OFFSET_F30(r5)
    514         lfd     f31, PPC_CONTEXT_OFFSET_F31(r5)
     497        lfd     f14, PPC_CONTEXT_OFFSET_F14(r4)
     498        lfd     f15, PPC_CONTEXT_OFFSET_F15(r4)
     499        lfd     f16, PPC_CONTEXT_OFFSET_F16(r4)
     500        lfd     f17, PPC_CONTEXT_OFFSET_F17(r4)
     501        lfd     f18, PPC_CONTEXT_OFFSET_F18(r4)
     502        lfd     f19, PPC_CONTEXT_OFFSET_F19(r4)
     503        lfd     f20, PPC_CONTEXT_OFFSET_F20(r4)
     504        lfd     f21, PPC_CONTEXT_OFFSET_F21(r4)
     505        lfd     f22, PPC_CONTEXT_OFFSET_F22(r4)
     506        lfd     f23, PPC_CONTEXT_OFFSET_F23(r4)
     507        lfd     f24, PPC_CONTEXT_OFFSET_F24(r4)
     508        lfd     f25, PPC_CONTEXT_OFFSET_F25(r4)
     509        lfd     f26, PPC_CONTEXT_OFFSET_F26(r4)
     510        lfd     f27, PPC_CONTEXT_OFFSET_F27(r4)
     511        lfd     f28, PPC_CONTEXT_OFFSET_F28(r4)
     512        lfd     f29, PPC_CONTEXT_OFFSET_F29(r4)
     513        lfd     f30, PPC_CONTEXT_OFFSET_F30(r4)
     514        lfd     f31, PPC_CONTEXT_OFFSET_F31(r4)
    515515#endif
    516516
     
    528528PROC (_CPU_Context_restore):
    529529        /* Align to a cache line */
    530         clrrwi  r5, r3, PPC_DEFAULT_CACHE_LINE_POWER
     530        clrrwi  r4, r3, PPC_DEFAULT_CACHE_LINE_POWER
    531531
    532532#if defined(__ALTIVEC__) && !defined(PPC_MULTILIB_ALTIVEC)
     
    557557        sub     r7, r4, r7
    558558        add     r4, r8, r7
    559         clrrwi  r5, r4, PPC_DEFAULT_CACHE_LINE_POWER
     559        clrrwi  r4, r4, PPC_DEFAULT_CACHE_LINE_POWER
    560560
    561561        /* Update the executing */
Note: See TracChangeset for help on using the changeset viewer.