Changeset 41fa6f2 in mainline for arch/ia64/src/fpu_context.c


Ignore:
Timestamp:
2006-03-16T17:01:51Z (19 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
46579c66
Parents:
6eb103c
Message:

Itanium FPU Lazy context switching… but not so much tested

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/src/fpu_context.c

    r6eb103c r41fa6f2  
    3232#include <print.h>
    3333
     34
    3435void fpu_context_save(fpu_context_t *fctx){
     36
    3537                asm volatile(
    36                         "stf.spill [%2]=f2,0x80\n"
    37                         "stf.spill [%3]=f3,0x80\n"
    38                         "stf.spill [%4]=f4,0x80\n"
    39                         "stf.spill [%5]=f5,0x80\n"
    40                         "stf.spill [%6]=f6,0x80\n"
    41                         "stf.spill [%7]=f7,0x80\n;;"
    42 
    43                         "stf.spill [%0]=f8,0x80\n"
    44                         "stf.spill [%1]=f9,0x80\n"
    45                         "stf.spill [%2]=f10,0x80\n"
    46                         "stf.spill [%3]=f11,0x80\n"
    47                         "stf.spill [%4]=f12,0x80\n"
    48                         "stf.spill [%5]=f13,0x80\n"
    49                         "stf.spill [%6]=f14,0x80\n"
    50                         "stf.spill [%7]=f15,0x80\n;;"
    51 
    52                         "stf.spill [%0]=f16,0x80\n"
    53                         "stf.spill [%1]=f17,0x80\n"
    54                         "stf.spill [%2]=f18,0x80\n"
    55                         "stf.spill [%3]=f19,0x80\n"
    56                         "stf.spill [%4]=f20,0x80\n"
    57                         "stf.spill [%5]=f21,0x80\n"
    58                         "stf.spill [%6]=f22,0x80\n"
    59                         "stf.spill [%7]=f23,0x80\n;;"
    60 
    61                         "stf.spill [%0]=f24,0x80\n"
    62                         "stf.spill [%1]=f25,0x80\n"
    63                         "stf.spill [%2]=f26,0x80\n"
    64                         "stf.spill [%3]=f27,0x80\n"
    65                         "stf.spill [%4]=f28,0x80\n"
    66                         "stf.spill [%5]=f29,0x80\n"
    67                         "stf.spill [%6]=f30,0x80\n"
    68                         "stf.spill [%7]=f31,0x80\n;;"
    69 
    7038
    7139                        "stf.spill [%0]=f32,0x80\n"
     
    189157void fpu_context_restore(fpu_context_t *fctx)
    190158{
     159
    191160                asm volatile(
    192                         "ldf.fill f2=[%2],0x80\n"
    193                         "ldf.fill f3=[%3],0x80\n"
    194                         "ldf.fill f4=[%4],0x80\n"
    195                         "ldf.fill f5=[%5],0x80\n"
    196                         "ldf.fill f6=[%6],0x80\n"
    197                         "ldf.fill f7=[%7],0x80\n;;"
    198 
    199                         "ldf.fill f8=[%0],0x80\n"
    200                         "ldf.fill f9=[%1],0x80\n"
    201                         "ldf.fill f10=[%2],0x80\n"
    202                         "ldf.fill f11=[%3],0x80\n"
    203                         "ldf.fill f12=[%4],0x80\n"
    204                         "ldf.fill f13=[%5],0x80\n"
    205                         "ldf.fill f14=[%6],0x80\n"
    206                         "ldf.fill f15=[%7],0x80\n;;"
    207 
    208                         "ldf.fill f16=[%0],0x80\n"
    209                         "ldf.fill f17=[%1],0x80\n"
    210                         "ldf.fill f18=[%2],0x80\n"
    211                         "ldf.fill f19=[%3],0x80\n"
    212                         "ldf.fill f20=[%4],0x80\n"
    213                         "ldf.fill f21=[%5],0x80\n"
    214                         "ldf.fill f22=[%6],0x80\n"
    215                         "ldf.fill f23=[%7],0x80\n;;"
    216 
    217                         "ldf.fill f24=[%0],0x80\n"
    218                         "ldf.fill f25=[%1],0x80\n"
    219                         "ldf.fill f26=[%2],0x80\n"
    220                         "ldf.fill f27=[%3],0x80\n"
    221                         "ldf.fill f28=[%4],0x80\n"
    222                         "ldf.fill f29=[%5],0x80\n"
    223                         "ldf.fill f30=[%6],0x80\n"
    224                         "ldf.fill f31=[%7],0x80\n;;"
    225 
    226 
    227161                        "ldf.fill f32=[%0],0x80\n"
    228162                        "ldf.fill f33=[%1],0x80\n"
     
    339273                         "r" (&((fctx->fr)[4])),"r" (&((fctx->fr)[5])),"r" (&((fctx->fr)[6])),"r" (&((fctx->fr)[7]))
    340274                );
    341 
    342 
    343275}
    344276
    345 void fpu_disable(void)
     277void fpu_enable(void)
    346278{
     279                __u64 a = 0 ;
    347280                asm volatile(
    348                         "ssm %0;;\n"
     281                        "rsm %0;;"
    349282                        "srlz.i\n"
    350283                        "srlz.d;;\n"
    351284                        :
    352                         :"i" (PSR_DFL_MASK|PSR_DFH_MASK)
    353                 );
    354 
    355 }
    356 
    357 void fpu_enable(void)
    358 {
    359                 asm volatile(
    360                         "rsm %0;;\n"
    361                         "srlz.i\n"
    362                         "srlz.d;;\n"
    363                         :
    364                         :"i" (PSR_DFL_MASK|PSR_DFH_MASK)
    365                 );
    366 
    367 }
    368 
    369 void fpu_init(void)
    370 {
    371                 __u64 a = 0;
    372                 fpu_enable();
     285                        :"i" (PSR_DFH_MASK)
     286                );
    373287                asm volatile
    374288                (
     
    379293                        : "r" (0x38)
    380294                );
    381                
     295
     296}
     297
     298void fpu_disable(void)
     299{
     300
     301                __u64 a = 0 ;
     302                asm volatile(
     303                        "ssm %0;;\n"
     304                        "srlz.i\n"
     305                        "srlz.d;;\n"
     306                        :
     307                        :"i" (PSR_DFH_MASK)
     308                );
     309                asm volatile
     310                (
     311                        "mov %0=ar.fpsr;;\n"
     312                        "or %0=%0,%1;;\n"
     313                        "mov ar.fpsr=%0;;\n"
     314                        : "+r" (a)
     315                        : "r" (0x38)
     316                );
     317
     318}
     319
     320void fpu_init(void)
     321{
     322                __u64 a = 0 ;
     323                asm volatile
     324                (
     325                        "mov %0=ar.fpsr;;\n"
     326                        "or %0=%0,%1;;\n"
     327                        "mov ar.fpsr=%0;;\n"
     328                        : "+r" (a)
     329                        : "r" (0x38)
     330                );
     331
    382332                asm volatile(
    383333                        "mov f2=f0\n"
     
    522472                );
    523473
    524                 fpu_enable();
    525474}
    526475
Note: See TracChangeset for help on using the changeset viewer.