Changeset 4f843ded in mainline


Ignore:
Timestamp:
2012-11-25T18:46:58Z (11 years ago)
Author:
Jan Vesely <jano.vesely@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
48a209a
Parents:
37bb3e1
Message:

arm32, fpu: Improve context save/restore assembler.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/arm32/src/fpu_context.c

    r37bb3e1 r4f843ded  
    8686        asm volatile (
    8787                "vmrs r1, fpexc\n"
    88                 "stmia %0!, {r1}\n"
    89                 "vmrs r1, fpscr\n"
    90                 "stmia %0!, {r1}\n"
     88                "vmrs r2, fpscr\n"
     89                "stmia %0!, {r1, r2}\n"
    9190                "vstmia %0!, {s0-s31}\n"
    92                 ::"r" (ctx): "r1","memory"
     91                ::"r" (ctx): "r1","r2","memory"
    9392        );
    9493}
     
    101100{
    102101        asm volatile (
    103                 "ldmia %0!, {r1}\n"
     102                "ldmia %0!, {r1, r2}\n"
    104103                "vmsr fpexc, r1\n"
    105                 "ldmia %0!, {r1}\n"
    106                 "vmsr fpscr, r1\n"
     104                "vmsr fpscr, r2\n"
    107105                "vldmia %0!, {s0-s31}\n"
    108                 ::"r" (ctx): "r1"
     106                ::"r" (ctx): "r1","r2"
    109107        );
    110108}
     
    118116        asm volatile (
    119117                "vmrs r1, fpexc\n"
    120                 "stmia %0!, {r1}\n"
    121                 "vmrs r1, fpscr\n"
    122                 "stmia %0!, {r1}\n"
     118                "vmrs r2, fpscr\n"
     119                "stmia %0!, {r1, r2}\n"
    123120                "vstmia %0!, {d0-d15}\n"
    124                 ::"r" (ctx): "r1","memory"
     121                ::"r" (ctx): "r1","r2","memory"
    125122        );
    126123}
     
    133130{
    134131        asm volatile (
    135                 "ldmia %0!, {r1}\n"
     132                "ldmia %0!, {r1, r2}\n"
    136133                "vmsr fpexc, r1\n"
    137                 "ldmia %0!, {r1}\n"
    138                 "vmsr fpscr, r1\n"
     134                "vmsr fpscr, r2\n"
    139135                "vldmia %0!, {d0-d15}\n"
    140                 ::"r" (ctx): "r1"
     136                ::"r" (ctx): "r1","r2"
    141137        );
    142138}
     
    259255void fpu_context_save(fpu_context_t *ctx)
    260256{
     257        const uint32_t fpexc = fpexc_read();
     258
     259        if (fpexc & FPEXC_EX_FLAG) {
     260                printf("EX FPU flag is on, things will fail\n");
     261                //TODO implement common subarch context saving
     262        }
    261263        if (save_context)
    262264                save_context(ctx);
Note: See TracChangeset for help on using the changeset viewer.