Changeset 2ba1f39 in mainline for arch/ia64/src/ivt.S


Ignore:
Timestamp:
2006-03-16T17:57:46Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
b1fd4f0
Parents:
79aeb43b
Message:

Slightly optimized version of ivt.S.

File:
1 edited

Legend:

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

    r79aeb43b r2ba1f39  
    6363 *
    6464 * Some steps are skipped (enabling and disabling interrupts).
    65  * Some steps are not fully supported yet (e.g. dealing with floating-point
    66  * context).
    6765 *
    6866 * @param offs Offset from the beginning of IVT.
     
    8482         */
    8583       
    86                         /*Set up FPU as in interrupred*/
    87         mov r24=psr
    88         mov r25=cr.ipsr
    89         mov r26=(PSR_DFH_MASK)
    90         mov r27=(~(PSR_DFH_MASK));;
    91         and r26=r25,r26
    92         and r24=r24,r27;;
    93         or r24=r24,r26;;
    94         mov psr.l=r24;;
     84        /* Set up FPU as in interrupted context. */
     85        mov r24 = psr
     86        mov r25 = cr.ipsr
     87        mov r26 = PSR_DFH_MASK
     88        mov r27 = ~PSR_DFH_MASK ;;
     89        and r26 = r25, r26
     90        and r24 = r24, r27;;
     91        or r24 = r24, r26;;
     92        mov psr.l = r24;;
    9593        srlz.i
    9694        srlz.d;;
     
    252250        mov cr.isr = r27
    253251        mov cr.ifa = r28
    254                         /*Set up FPU as in exception*/
    255         mov r24=psr
    256         mov r26=(PSR_DFH_MASK)
    257         mov r27=(~(PSR_DFH_MASK));;
    258         and r25=r25,r27
    259         and r24=r24,r26;;
    260         or r25=r25,r24;;
     252
     253        /* Set up FPU as in exception. */
     254        mov r24 = psr
     255        mov r26 = PSR_DFH_MASK
     256        mov r27 = ~PSR_DFH_MASK ;;
     257        and r25 = r25, r27
     258        and r24 = r24, r26 ;;
     259        or r25 = r25, r24;;
    261260        mov cr.ipsr = r25
    262        
    263261
    264262    /* 18. restore predicate registers from memory stack */
     
    308306       
    309307    /* 8. preserve general and floating-point registers */
    310         /* TODO: save floating-point context */
    311308        mov loc17 = r1
    312309        mov loc18 = r2
     
    341338        mov loc46 = r31
    342339
    343         mov r24=96 + STACK_SCRATCH_AREA_SIZE
    344         mov r25=112 + STACK_SCRATCH_AREA_SIZE
    345         mov r26=0 + STACK_SCRATCH_AREA_SIZE
    346         mov r27=16 + STACK_SCRATCH_AREA_SIZE
    347         mov r28=32 + STACK_SCRATCH_AREA_SIZE
    348         mov r29=48 + STACK_SCRATCH_AREA_SIZE
    349         mov r30=64 + STACK_SCRATCH_AREA_SIZE
    350         mov r31=80 + STACK_SCRATCH_AREA_SIZE;;
    351         add r24=r12,r24
    352         add r25=r12,r25
    353         add r26=r12,r26
    354         add r27=r12,r27
    355         add r28=r12,r28
    356         add r29=r12,r29
    357         add r30=r12,r30
    358         add r31=r12,r31;;
    359        
    360         stf.spill [r26]=f2,0x80
    361         stf.spill [r27]=f3,0x80
    362         stf.spill [r28]=f4,0x80
    363         stf.spill [r29]=f5,0x80
    364         stf.spill [r30]=f6,0x80
    365         stf.spill [r31]=f7,0x80;;
    366 
    367         stf.spill [r24]=f8,0x80
    368         stf.spill [r25]=f9,0x80
    369         stf.spill [r26]=f10,0x80
    370         stf.spill [r27]=f11,0x80
    371         stf.spill [r28]=f12,0x80
    372         stf.spill [r29]=f13,0x80
    373         stf.spill [r30]=f14,0x80
    374         stf.spill [r31]=f15,0x80;;
    375 
    376         stf.spill [r24]=f16,0x80
    377         stf.spill [r25]=f17,0x80
    378         stf.spill [r26]=f18,0x80
    379         stf.spill [r27]=f19,0x80
    380         stf.spill [r28]=f20,0x80
    381         stf.spill [r29]=f21,0x80
    382         stf.spill [r30]=f22,0x80
    383         stf.spill [r31]=f23,0x80;;
    384 
    385         stf.spill [r24]=f24,0x80
    386         stf.spill [r25]=f25,0x80
    387         stf.spill [r26]=f26,0x80
    388         stf.spill [r27]=f27,0x80
    389         stf.spill [r28]=f28,0x80
    390         stf.spill [r29]=f29,0x80
    391         stf.spill [r30]=f30,0x80
    392         stf.spill [r31]=f31,0x80;;
    393 
    394         /* preserve Floating point status register */
    395         mov loc47 = ar.fpsr
     340        add r24 = 96 + STACK_SCRATCH_AREA_SIZE, r12
     341        add r25 = 112 + STACK_SCRATCH_AREA_SIZE, r12
     342        add r26 = 0 + STACK_SCRATCH_AREA_SIZE, r12
     343        add r27 = 16 + STACK_SCRATCH_AREA_SIZE, r12
     344        add r28 = 32 + STACK_SCRATCH_AREA_SIZE, r12
     345        add r29 = 48 + STACK_SCRATCH_AREA_SIZE, r12
     346        add r30 = 64 + STACK_SCRATCH_AREA_SIZE, r12
     347        add r31 = 80 + STACK_SCRATCH_AREA_SIZE, r12 ;;
     348       
     349        stf.spill [r26] = f2, 0x80
     350        stf.spill [r27] = f3, 0x80
     351        stf.spill [r28] = f4, 0x80
     352        stf.spill [r29] = f5, 0x80
     353        stf.spill [r30] = f6, 0x80
     354        stf.spill [r31] = f7, 0x80 ;;
     355
     356        stf.spill [r24] = f8, 0x80
     357        stf.spill [r25] = f9, 0x80
     358        stf.spill [r26] = f10, 0x80
     359        stf.spill [r27] = f11, 0x80
     360        stf.spill [r28] = f12, 0x80
     361        stf.spill [r29] = f13, 0x80
     362        stf.spill [r30] = f14, 0x80
     363        stf.spill [r31] = f15, 0x80 ;;
     364
     365        stf.spill [r24] = f16, 0x80
     366        stf.spill [r25] = f17, 0x80
     367        stf.spill [r26] = f18, 0x80
     368        stf.spill [r27] = f19, 0x80
     369        stf.spill [r28] = f20, 0x80
     370        stf.spill [r29] = f21, 0x80
     371        stf.spill [r30] = f22, 0x80
     372        stf.spill [r31] = f23, 0x80 ;;
     373
     374        stf.spill [r24] = f24, 0x80
     375        stf.spill [r25] = f25, 0x80
     376        stf.spill [r26] = f26, 0x80
     377        stf.spill [r27] = f27, 0x80
     378        stf.spill [r28] = f28, 0x80
     379        stf.spill [r29] = f29, 0x80
     380        stf.spill [r30] = f30, 0x80
     381        stf.spill [r31] = f31, 0x80 ;;
     382
     383        mov loc47 = ar.fpsr     /* preserve floating point status register */
    396384   
    397385    /* 9. skipped (will not enable interrupts) */
     
    419407
    420408    /* 13. restore general and floating-point registers */
    421         /* TODO: restore floating-point context */
    422         mov r24=96 + STACK_SCRATCH_AREA_SIZE
    423         mov r25=112 + STACK_SCRATCH_AREA_SIZE
    424         mov r26=0 + STACK_SCRATCH_AREA_SIZE
    425         mov r27=16 + STACK_SCRATCH_AREA_SIZE
    426         mov r28=32 + STACK_SCRATCH_AREA_SIZE
    427         mov r29=48 + STACK_SCRATCH_AREA_SIZE
    428         mov r30=64 + STACK_SCRATCH_AREA_SIZE
    429         mov r31=80 + STACK_SCRATCH_AREA_SIZE;;
    430         add r24=r12,r24
    431         add r25=r12,r25
    432         add r26=r12,r26
    433         add r27=r12,r27
    434         add r28=r12,r28
    435         add r29=r12,r29
    436         add r30=r12,r30
    437         add r31=r12,r31;;
    438 
    439        
    440         ldf.fill f2=[r26],0x80
    441         ldf.fill f3=[r27],0x80
    442         ldf.fill f4=[r28],0x80
    443         ldf.fill f5=[r29],0x80
    444         ldf.fill f6=[r30],0x80
    445         ldf.fill f7=[r31],0x80;;
    446 
    447         ldf.fill f8=[r24],0x80
    448         ldf.fill f9=[r25],0x80
    449         ldf.fill f10=[r26],0x80
    450         ldf.fill f11=[r27],0x80
    451         ldf.fill f12=[r28],0x80
    452         ldf.fill f13=[r29],0x80
    453         ldf.fill f14=[r30],0x80
    454         ldf.fill f15=[r31],0x80;;
    455 
    456         ldf.fill f16=[r24],0x80
    457         ldf.fill f17=[r25],0x80
    458         ldf.fill f18=[r26],0x80
    459         ldf.fill f19=[r27],0x80
    460         ldf.fill f20=[r28],0x80
    461         ldf.fill f21=[r29],0x80
    462         ldf.fill f22=[r30],0x80
    463         ldf.fill f23=[r31],0x80;;
    464 
    465         ldf.fill f24=[r24],0x80
    466         ldf.fill f25=[r25],0x80
    467         ldf.fill f26=[r26],0x80
    468         ldf.fill f27=[r27],0x80
    469         ldf.fill f28=[r28],0x80
    470         ldf.fill f29=[r29],0x80
    471         ldf.fill f30=[r30],0x80
    472         ldf.fill f31=[r31],0x80;;
    473        
     409        add r24 = 96 + STACK_SCRATCH_AREA_SIZE, r12
     410        add r25 = 112 + STACK_SCRATCH_AREA_SIZE, r12
     411        add r26 = 0 + STACK_SCRATCH_AREA_SIZE, r12
     412        add r27 = 16 + STACK_SCRATCH_AREA_SIZE, r12
     413        add r28 = 32 + STACK_SCRATCH_AREA_SIZE, r12
     414        add r29 = 48 + STACK_SCRATCH_AREA_SIZE, r12
     415        add r30 = 64 + STACK_SCRATCH_AREA_SIZE, r12
     416        add r31 = 80 + STACK_SCRATCH_AREA_SIZE, r12 ;;
     417
     418        ldf.fill f2 = [r26], 0x80
     419        ldf.fill f3 = [r27], 0x80
     420        ldf.fill f4 = [r28], 0x80
     421        ldf.fill f5 = [r29], 0x80
     422        ldf.fill f6 = [r30], 0x80
     423        ldf.fill f7 = [r31], 0x80 ;;
     424
     425        ldf.fill f8 = [r24], 0x80
     426        ldf.fill f9 = [r25], 0x80
     427        ldf.fill f10 = [r26], 0x80
     428        ldf.fill f11 = [r27], 0x80
     429        ldf.fill f12 = [r28], 0x80
     430        ldf.fill f13 = [r29], 0x80
     431        ldf.fill f14 = [r30], 0x80
     432        ldf.fill f15 = [r31], 0x80 ;;
     433
     434        ldf.fill f16 = [r24], 0x80
     435        ldf.fill f17 = [r25], 0x80
     436        ldf.fill f18 = [r26], 0x80
     437        ldf.fill f19 = [r27], 0x80
     438        ldf.fill f20 = [r28], 0x80
     439        ldf.fill f21 = [r29], 0x80
     440        ldf.fill f22 = [r30], 0x80
     441        ldf.fill f23 = [r31], 0x80 ;;
     442
     443        ldf.fill f24 = [r24], 0x80
     444        ldf.fill f25 = [r25], 0x80
     445        ldf.fill f26 = [r26], 0x80
     446        ldf.fill f27 = [r27], 0x80
     447        ldf.fill f28 = [r28], 0x80
     448        ldf.fill f29 = [r29], 0x80
     449        ldf.fill f30 = [r30], 0x80
     450        ldf.fill f31 = [r31], 0x80 ;;
    474451       
    475452        mov r1 = loc17
     
    504481        mov r30 = loc45
    505482        mov r31 = loc46
    506        
    507         /* restore Floating point status register */
    508         mov ar.fpsr = loc47
     483
     484        mov ar.fpsr = loc47     /* restore floating point status register */
    509485       
    510486    /* 14. restore branch and application registers */
     
    608584        HEAVYWEIGHT_HANDLER 0x7e00
    609585        HEAVYWEIGHT_HANDLER 0x7f00
    610 
    611 
    612 
    613 
Note: See TracChangeset for help on using the changeset viewer.