Changeset 83817ea in mainline for arch/ia64/src/ivt.S


Ignore:
Timestamp:
2005-11-07T15:10:49Z (19 years ago)
Author:
Jakub Vana <jakub.vana@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
a725deb
Parents:
17a20bc
Message:

Context restore in HEAVYWEIGHT handlers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • arch/ia64/src/ivt.S

    r17a20bc r83817ea  
    256256heavyweight_handler_finalize:
    257257    /* 16. RSE switch to interrupted context */
    258        
     258
     259/********************************************************************************************/
     260
     261
     262
     263        .auto
     264        cover                   /*Allocate zerro size frame (Step 1(from Intel Docs))*/
     265
     266        add r31 = STACK_SCRATCH_AREA_SIZE, r12;;
     267
     268        mov r28 = ar.bspstore   /*Calculate loadrs (step 2)*/
     269        ld8 r29 = [r31], +8     
     270        sub r27 = r29 , r28
     271        shl r27 = r27, 16
     272
     273        mov r24 = ar.rsc
     274        and r30 = ~3, r24
     275        or  r24 = r30 , r27     
     276        mov ar.rsc = r24        /* place RSE in enforced lazy mode */
     277
     278
     279
     280        loadrs                  /*(Step 3)*/
     281
     282
     283                                /*Read saved registers*/
     284        ld8 r28 = [r31], +8     /*ar.bspstore*/
     285        ld8 r27 = [r31], +8     /*ar.rnat*/
     286        ld8 r26 = [r31], +8     /*cr.ifs*/
     287        ld8 r25 = [r31], +8     /*ar.pfs*/
     288        ld8 r24 = [r31], +8     /*ar.rsc*/
     289
     290
     291        mov ar.bspstore = r28   /*(Step 4)*/
     292        mov ar.rnat = r27       /*(Step 5)*/
     293
     294        mov ar.pfs = r25        /*(Step 6)*/
     295        mov cr.ifs = r26       
     296
     297        mov ar.rsc = r24        /*(Step 7)*/
     298
     299
     300        .explicit       
     301
     302
     303/********************************************************************************************/
     304
     305
     306
    259307    /* 17. restore interruption state from memory stack */
     308
     309        ld8 r28 = [r31] , +8 ;; /* load cr.ifa */               
     310        ld8 r27 = [r31] , +8 ;; /* load cr.isr */
     311        ld8 r26 = [r31] , +8 ;; /* load cr.iipa */
     312        ld8 r25 = [r31] , +8 ;; /* load cr.ipsr */
     313        ld8 r24 = [r31] , +8 ;; /* load cr.iip */
     314
     315
     316        mov cr.iip = r24
     317        mov cr.ipsr = r25
     318        mov cr.iipa = r26
     319        mov cr.isr = r27
     320        mov cr.ifa = r28
     321
     322
    260323       
    261324    /* 18. restore predicate registers from memory stack */
     325
     326
     327        ld8 r29 = [r31] , -8 ;; /* load predicate registers */
     328        mov pr =r29 ;;
     329       
     330        add r12 = STACK_FRAME_SIZE,r12;;
    262331       
    263332    /* 19. return from interruption */
    264         rfi
    265 
    266 
     333        rfi;;
    267334
    268335
Note: See TracChangeset for help on using the changeset viewer.